Spis treści:

1. Format listy kontaktów ekg
2. Format konfiguracji ekg
3. Format konfiguracji zapisanej na serwerze
4. Format historii ekg
5. Format emotikon (Adam Osuchowski <adwol@polsl.gliwice.pl>)

* * *

1. Format listy kontaktów ekg

Lista kontaktów z pliku ,,userlist'' jest tego samego formatu co eksportowana
z windowsowego klienta:

    imię;nazwisko;pseudonim;wyświetlana_nazwa;telefon;grupy;numer;email

ekg może dopisać użytkownika do kilku metagrup:

    __blocked - użytkownik blokowany
    __offline - jesteśmy niedostępni dla użytkownika
    __ignored_<poziom> - użytkownik jest ignorowany z danym poziomem
    __ignored - wszystkie zdarzenia związane z użytkownikiem są ignorowane

* * *

2. Format konfiguracji ekg

Plik konfiguracyjny ,,config'' zawiera kolejne wpisy postaci:

	set <zmienna> <wartość>
	bind <klawisz> <komenda>
	alias <nazwa> <komenda>
	on <zdarzenie> <parametry> <komenda>

Jeśli pierwszy wyraz nie jest jednym ze znanych, jest traktowany jako
nazwa zmiennej, po której występuje jej wartość -- chodzi o zachowanie
kompatybilności z innymi klientami.

Jeśli wartość zmiennej zaczyna się od znaku o kodzie 1, to następująca
po nim wartość zmiennej jest zakodowana używając base64.

* * *

3. Format konfiguracji zapisanej na serwerze

Jeśli użytkownik umieści na serwerze również konfigurację, wszystkie zmienne
(oprócz ,,uin'' i ,,password'', bo te nie są wysyłane) zostaną zapisane w
skróconej postaci. Każda zmienna jest opisana przez swoją dwuliterową nazwę
(nie można używać cyfr). Jeśli zmienna jest zmienną liczbową, zaraz po
nazwie umieszcza się jej wartość, a za nią kolejną zmienną. Jeśli zmienna
jest tekstowa i jest pusta, po nazwie umieszczany jest minus ,,-'' i za nim
kolejna zmienna. Jeśli pierwszy znak zmiennej tekstowej jest plusem ,,+'',
zawartość zmiennej została zakodowana w base64 i kończy się znakiem
dwukropka ,,:''. Jeśli pierwszym znakiem nie jest plus, treść zmiennej
znajduje się zaraz za nazwą i również kończy się dwukropkiem. Po dwukropku
znajduje się kolejna zmienna. Widać zatem, że zmienne, w których występuje
dwukropek lub średnik, albo zaczynają się od plusa, muszą zostać zakodowane
w base64. Oto przykłady:

    dc1di127.0.0.1:ts+JUg6JU0gAA==:qr-

    dc (display_color) = 1
    di (dcc_ip) = "127.0.0.1"
    ts (timestamp) = "%H:%M "
    qr (quit_reason) = (brak)

Tak zapisana lista zmiennych jest umieszczana w oddzielnych wpisach listy
kontaktów. Zamiast imienia jest ,,__config<liczba>'', gdzie <liczba> jest
kolejną liczbą, ale w rzeczywistości nie ma większego znaczenia. Lista
zmiennych jest dzielona po 24 znaki i umieszczana w pięciu kolejnych
polach listy kontaktów. w ostatnim polu znajduje się losowa liczba udająca
numerek osoby.

Przy odbiorze nie ma znaczenia liczba po ,,__config'', nie ma znaczenia
podział na kolejne pola. Wszystko jest i tak sklejane w jeden ciąg znaków
i dopiero potem analizowane.

* * *

4. Format historii ekg

W zależności od ustawienia klienta, historia może być umieszczona
w pojedynczym pliku (domyślnie ~/.gg/history) lub w osobnych plikach,
po każdym na osobny numerek rozmówcy (domyślnie ~/.gg/history/<numer>).

Pliki mogą być skompresowane za pomocą gzip -- w takim wypadku mają
rozszerzenie ,,.gz''.

Wpisy są w formacie CSV, tj. każdy wpis znajduje się w oddzielnej linii,
a jego poszczególne kolumny są oddzielone przecinkami. Jeżeli któraś
kolumna zawiera znak przecinka, nowej linii, cudzysłów, backslash, to
cała zawartość kolumny zostaje ujęta w cudzysłów i zapisana jak ciąg
znaków języka C.

Możliwe wpisy to:

- wysyłana wiadomość lub rozmowa:

	chatsend,<numer>,<nick>,<czas>,<treść>
	msgsend,<numer>,<nick>,<czas>,<treść>

- odebrana wiadomość lub rozmowa:

	chatrecv,<numer>,<nick>,<czas_otrzymania>,<czas_nadania>,<treść>
	msgrecv,<numer>,<nick>,<czas_otrzymania>,<czas_nadania>,<treść>

- ignorowana wiadomość lub rozmowa, gdy włączono opcję log_ignored:

	chatrecvign,<numer>,<nick>,<czas_otrzymania>,<czas_nadania>,<treść>
	msgrecvign,<numer>,<nick>,<czas_otrzymania>,<czas_nadania>,<treść>

- zmiana stanu:

	status,<numer>,<nick>,<adres_ip>[:port],<czas>,<stan>
	status,<numer>,<nick>,<adres_ip>[:port],<czas>,<stan>,<opis>

gdzie:
- <numer> - numer nadawcy, odbiorcy lub osoby zmieniającej stan,
- <nick> - pseudonim osoby,
- <czas> - domyślnie ilość sekund od 1 stycznia 1970r. UTC, ale użytkownik
           może zmienić format tego pola za pomocą zmiennej log_timestamp,
- <adres_ip> - jeśli jest nieznany, zapisuje się ,,0.0.0.0'',
- <stan> - jeden z ,,avail'', ,,busy'', ,,invisble'' i ,,notavail''.

* * *

5. Format emotikon (Adam Osuchowski <adwol@polsl.gliwice.pl>)

Za pomocą oryginalnego klienta GG można wysłać sekwencje znakowe, które będą
się zamieniać na odpowiednie ikony. Z oczywistych względów w ekg wykonać się
tego nie da (może ktoś kiedyś zrobi wsparcie dla aaliba ;))). Sekwencje te,
zamieniane są więc na inne sekwencje. Np. sekwencja:

<cmok>

może być zamieniona na:

:-*

lub podobną, wedle uznania użytkownika.

Aby skorzystać z możliwości rozwijania tego typu makr w otrzymywanych
wiadomościach, należy je sobie wcześniej zdefiniować. Robi się to w pliku
~/.gg/emoticons. Każda linia tego pliku definiuje jedno makro, a jej format
jest następujący:

<makro><tabulatory><rozwiniecie>

Należy zwrócić uwagę na to, że do oddzielenia emoticonu od jego rozwinięcia
służą tylko i wyłącznie tabulatory (jeden lub więcej). Spowodowane jest to
występowaniem spacji w oryginalnych GG-owych emoticonach.

Przykładowy zestaw definicji można znaleźć w docs/emoticons.sample. Nie
zawiera on wszystkich definicji, bo nie miałem na tyle inwencji, żeby je
powymyślać. :))


$Id: files.txt 2068 2003-06-21 13:03:05Z wojtekka $
