od 20020627 ekg jest przygotowane do obsługi różnych interfejsów użytkowika. zrobiłem całkiem sporą reorganizację kodu, dzięki czemu nie trzeba będzie psuć zbyt dużo, żeby dodać frontend w ncurses czy jakikolwiek inny. jeśli ktoś chce napisać własny interfejs (chociażby w gtk+, chociaż nie wiem 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_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_deinit() pozamykanie wszystkiego. ui_print(const char *target, const char *line) wyświetlenie tekstu ,,line'' w oknie ,,target''. póki co, obsługi okien nie ma, ale kod jest przygotowany tak, że wiadomości są już wysyłane w odpowiednie miejsce. przewidziano też dwa specjalne okna -- ,,__status'' dla pierwszego okna statusowego oraz ,,__current'' dla aktualnego. 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 rozumanych 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ć ekg_execute(). jeśli ekg_execute() zwróci 1, funkcja powinna się zakończyć. // $Id: ui.txt,v 1.8 2002/09/12 22:48:24 wojtekka Exp $