Przedstawiam Pa�stwu program plmindex, czyli swoj� implementacj� programu makeindx (wersja 2.12). Program jest dost�pny w postaci pakietu spakowanego (�r�d�a) programem zip w instalacji TeX Live: texmf-dist/doc/support/gustprog/plmindex.zip
Pakiety s� tak�e dost�pne w archiwum GUST, pod adresem:
plmindex.zip oraz na CTAN-ach w katalogu ..../language/polish

Program ten s�u�y do sortowania i grupowania skorowidz�w utworzonych pakietem LaTeX. Po przetworzeniu zbioru mo�e on by� do��czony do tekstu jako gotowy skorowidz.

Kr�tki opis opcji programu mo�na uzyska� po wywo�aniu
plmindex -h

Zmiany w programie polegaj� na dostosowaniu go do pracy z dowolnym o�mio-bitowym alfabetem (sposobem kodowania). Prezentowana wersja pozwala na opracowanie skorowidz�w w j�zyku polskim (kod Mazowii, cp1250, cp852 i ISO-8859-2) oraz angielskim. Zdefiniowanie nowego j�zyka polega na zbudowaniu kilku tablic okre�laj�cych: porz�dek leksykograficzny, kategorie znak�w, odpowiedniki liter ma�e-du�e i nie wymaga modyfikacji kodu programu. Wszystkie funkcje odpowiedzialne za operowanie na ci�gach znak�w (,,stringach'') s� sterowane tablicami. S� one ca�kowicie niezale�ne od implementacji kompilatora C. Program by� kompilowany nast�puj�cymi kompilatorami:

dla ka�dego kompilatora zosta�y napisane odpowiednie makefile, �atwo rozr�niane po ostatnim cz�onie nazwy (rozszerzeniu):
.wcc -- Watcom,
.djg -- GNU (MS-Dos),
.gcc -- GNU (SunOS -- og�lnie Unix)
.msc -- MSC C++ 6.0 (Windows 98)
.emx -- GNU (DOS >>implementacja E.Mathesa<< lub OS)
odpowiedniemu zbiorowi nale�y zmieni� nazw� na makefile i uruchomi� program make (lub wmake w przypadku pakietu Watcom i nmake w przypadku MSC) lub wyw�a�
[n|w]make -f makefile.xxx

Opis tablic i struktur

Zosta�a zdefiniowana struktura _multilanguage zawieraj�ca tablice opisuj�ce cechy j�zyka. Odsy�acze przyporz�dkowane nazwom p�l wskazuj� na zbiory zawieraj�ce przyk�adowe definicje dla kodu Mazowii. Nazwa przyk�adowej tablicy zawiera prefix okre�laj�cy definiowany j�zyk.

struct _multilanguage
   { 
            p_char_u  *day_name_ptr;		/* tablica nazw dni tygodnia  */
            p_char_u  *mon_name_ptr;		/* tablica nazw miesi�cy      */
            int_u     *toascii_table;		/* tablica konwersji znak�w
	                                           o kodach > 127 na
						   kod ASCII np. � --> a   */
            a_char_u  *lower_table;		/* tablica konwersji ma�ych
	                                           liter na du�e              */
            a_char_u  *upper_table;		/* tablica konwersji du�ych
	                                           liter na ma�e              */
            a_char_u  *char_type;               /* tablica typ�w znak�w       */
            int_u     *order_tbl;               /* tablica definiuj�ca
	                                           kolejno�� leksykograficzn� */
            word      flags;                    /* s�owo flag                 */
            char_u    *(*_special)(const long); /* adres funkcji dodatkowych  */
            char      *id;                      /* identyfikator j�zyka       */
            char      *name;                    /* nazwa j�zyka               */
     struct decode    *decode;                  /* adres struktury opisuj�cej
                                                   nazwy liczb                */
};
struct decode
   {
    p_char_u *jedn;			/* adres tablicy nazw jednostek */
    p_char_u *dies;			/* adres tablicy nazw dziesi�tek */
    p_char_u *setki;			/* adres tablicy nazw setek */
    p_char_u *tys;			/* adres tablicy nazw tysi�cy */
    p_char_u *mil;			/* adres tablicy nazw milion�w */
   };
definicje typ�w
typedef unsigned char char_u;

typedef const unsigned char *p_char_u[];

typedef const    unsigned char a_char_u[];
typedef const    int      int_u[];
typedef unsigned int      word;
Powy�sze definicje znajduj� si� w zbiorze mkind.h.

W celu pod��czenia nowego j�zyka nale�y utworzy� nowy zbi�r nag��wkowy zawieraj�cy opis j�zyka w postaci tabel.

Utworzony zbi�r nale�y do��czy� poleceniem #include do zbioru language.c W zbiorze language.c znajduj� si� funkcje odpowiedzialne za operacje na ci�gach znak�w. S� one sterowane zmienn� Language, b�d�c� wskazaniem na element tablicy multilanguage zawieraj�c� struktury wszystkich zadeklarowanych j�zyk�w. Pocz�tkowa warto�� zmiennej Language okre�la domy�lny j�zyk Dopuszczalna warto�� zmiennej jest okre�lona przez konstrukcj� enum _language, tak �e w przypadku definiowania nowego j�zyka nale�y zdefiniowa� nowy element -- b�dzie on identyfikatorem j�zyka.

W zbiorze language.c znajduje si� deklaracja tablicy struktur opisu j�zyk�w. Ostatnim elementem tablicy musi by� opis zawieraj�cy w polu id warto�� NULL


W�odzimierz Macewicz