od 20020627 ekg jest przygotowane do obsługi różnych interfejsów użytkownika. przeprowadzono całkiem sporą reorganizację kodu, dzięki czemu nie trzeba będzie psuć zbyt dużo, żeby dodać jakikolwiek inny frontend. jeśli ktoś chce napisać własny interfejs (chociażby w gtk+, chociaż nie wiadomo po co, skoro jest GNU Gadu -- http://gadu.gnu.pl/), musi napisać ui-costam.c, zawierający poniżej podane funkcje i dopisać parę linijek do ekg.c. ui_costam_init() inicjalizacja interfejsu użytkownika. dla ui-readline będzie to ustawienie wszystkich zmiennych. dla ui-ncurses pewnie jakieś initscr(), przygotowanie okienek itd. należy przypisać zmiennym ui_post_init, ui_deinit, ui_print, ui_event, ui_loop, ui_beep adresy funkcji danego interfejsu. nawet jeśli funkcja nic nie robi, musi być zdefiniowana. zmiennym tym NIE WOLNO przypisać wartości NULL. należy też utrzymywać w zmiennych ui_screen_width oraz ui_screen_height aktualny rozmiar ekranu. ui_post_init() funkcja wywoływana po wczytaniu konfiguracji. ui_deinit() pozamykanie wszystkiego. ui_print(const char *target, int separate, const char *line) wyświetlenie tekstu ,,line'' w oknie ,,target''. przewidziano trzy specjalne okna -- ,,__status'' dla pierwszego okna statusowego, ,,__current'' dla aktualnego oraz ,,__debug'' dla okna z komunikatami dla developerów. parametr ,,separate'' mówi, czy wyświetlany tekst jest na tyle ważny, żeby otwierać nowe okno -- np. wiadomość. do pierwszego powinny być wysyłane informacje dotyczące stanu połączenia itd, itd, do aktualnego wszystko to, co jest związane z komendami wywoływanymi przez użytkownika. ui_beep() dźwięk. niestety to, jak go wytworzyć zależy od interfejsu. przy użyciu ncurses zwykłe putchar('\a') nie zadziała. ui_event(const char *event, ...) interfejs użytkownika może obsługiwać pewne zdarzenia: - "command" (char *cmd, ...) użytkownik wykonał komendę, aktualnie obsługiwana to "query". - "my_status" (char *status, char *reason) użytkownik zmienił stan na "away", "back", "invisible", "private_on", "private_off". - "my_status_raw" (int status, char *reason) użytkownik zmienił stan, podawany w liczbach rozumianych przez protokół. - "connecting" () klient próbuje się łączyć. - "connected" () klient połączył się. - "disconnected" () klient rozłączył się lub został rozłączony. ui_loop() główna pętla interfejsu, wywoływana zaraz po włączeniu klienta. powinna wywołać ekg_wait_for_key() przed wywołaniem funkcji czytającej z klawiatury, by w przerwach móc obsługiwać połączenia sieciowe. gdy użytkownik wyda jakąś komendę, powinna wywołać command_exec(). $Id$