Uwaga! DostΩpny jest ju┐ program ttyconv stanowi▒cy rozwiniΩcie programu ogonki. Opis i ╝r≤d│a na stronie http://www.agh.edu.pl/ogonki/ttyconv.html

Ogonki 1.2.1 - program dla system≤w UNIX

Po co i dla kogo...

Program ogonki, napisa│em (a potem pom≤g│ mi w pisaniu Rafa│ Maszkowski) z my╢l▒ o ludziach kt≤rzy musz▒ pracowaµ na r≤┐nych terminalach i emulatorach terminali, na kt≤rych czΩsto nie ma mo┐liwo╢ci wy╢wietlania polskich liter, a je┐eli jest taka mo┐liwo╢µ to tylko w jednym standardzie.

Nasz program pozwala automatycznie (w spos≤b niewidoczny dla u┐ytkownika) dokonywaµ konwersji znak≤w wy╢wietlanych na ekranie, oraz znak≤w wprowadzanych z klawiatury. Od wersji 1.2 program pozwala tak┐e wyr≤┐niaµ (podkre╢laµ) znaki w wypadku gdy terminal nie potrafi wy╢wietlaµ ``normalnych'' polskich liter (czyli wtedy zamiast ▒, µ, Ω mamy podkre╢le╢lone a, c, e, itp...). Nowa wersja potrafi tak┐e obs│ugiwaµ klawiaturΩ - naci╢niΩcie znaku ` (lewy apostrof) a nastΩpnie odpowiednie litery │aci±skiej, powoduje wprowadzenie odpowiedniej litery polskiej (np. `a to ▒, `c to µ, `x to ╝ a `z to ┐). Sam lewy apostrof uzyskuje siΩ naciskaj▒c go dwa razy.

Wszystkie opisane powy┐ej funkcje s▒ oczywi╢cie opcjonalne i to kt≤re z nich s▒ w│▒czone ustalamy przy uruchamianiu programu.

Sk▒d wzi▒µ?

Program dostΩpny jest za darmo w wersji ╝r≤d│owej, jako ftp://ftp.agh.edu.pl/pub/utils/ogonki.c.gz.

Po ╢ci▒gniΩciu program kompilujemy standardowym poleceniem

   cc -o ogonki ogonki.c
   
Program jest napisany w spos≤b mo┐liwie standardowy, dlatego powinien skompilowaµ siΩ bez problem≤w na wiΩkszo╢ci system≤w UNIX. Je┐eli na kt≤rym╢ system≤w wyst▒pi▒ problemy, proszΩ o kontakt, postaram siΩ pom≤c w miarΩ mo┐liwo╢ci (proszΩ dok│adnie opisaµ co sprawia problemy w czasie kompilacji). To o czym ju┐ wiem - to problem z funkcj▒ usleep. Je┐eli w czasie kompilacji system zg│asza ┐e nie mo┐e znale╝µ funkcji bibliotecznej usleep, to z programu mo┐na usun▒µ linijkΩ
   usleep(SLEEP);
   
Spowoduje to jedynie tzw. `aktywne czekanie' programu, przez co bΩdzie on wykorzystywa│ ca│y wolny czas procesora, ale z regu│y nie sprawia to du┐ych problem≤w, tyle ┐e jest rozwi▒zaniem bardzo `nieeleganckim'.

Parametry wywo│ania

Program mo┐na uruchomiµ na jeden z dw≤ch sposob≤w. Pierwszy spos≤b powoduje wypisanie listy standard≤w kodowania polskich liter, znanych programowi. Wystarczy w tym celu napisaµ:
   ogonki -l
   
Program wypisze znane mu standardy. Ich lista mo┐e wygl▒daµ r≤┐nie, bowiem mo┐liwe jest zdefiniowanie tych standard≤w w oddzielnym pliku. Standardowo jednak dostΩpne s▒ ascii (czyli brak polskich liter), iso (ISO-8859-2, norma w Internecie), cp1250 (standard wewnΩtrzny Windows), cp852 (wewnΩtrzny standard dla DOS'u), oraz mac (standard stosowany w komputerach Macintosh).

Drugim - bardziej praktycznym - sposobem wywo│ania programu, jest podanie sposobu przekodowywania oraz (opcjonalnie) programu jaki ma byµ uruchomiony. Formalnie wygl▒da to tak:

   ogonki [-i from:to] [-o from:to] [-u] [-s] [prog [args]]
   
Poszczeg≤lne opcje oznaczaj▒:
-i from:to
spos≤b przekodowywania na wej╢ciu, czyli znak≤w przychodz▒cych z klawiatury. from:to definiuje z jakiego standardu na jaki standard, np. iso:mac powoduje przekodowywanie ze standardu ISO-8859-2 na standard Mac.
Je┐eli jako standard wej╢ciowy podamy kascii, to zostanie w│▒czona dodatkowo obs│uga klawiatury - kombinacja `x powoduje wpisanie polskiej litery odpowiadaj▒cej wci╢niΩtemu klawiszowi │aci±skiemu, dodatkowo `` wprowadza apostrof.
-o from:to
podobnie jak -i, ale dla znak≤w na wyj╢ciu, czyli tego co jest wy╢wietlane na ekranie. Podobnie jak dla -i okre╢la siΩ z jakiego standardu na jaki ma byµ przekodowywanie.
Je┐eli w│▒czamy konwersjΩ do ascii, warto spr≤bowaµ w│▒czyµ dodatkowo -u - znaki polskie bΩd▒ podkre╢lone (ale ta opcja mo┐e nie dzia│aµ na wszystkich terminalach).
-u
w│▒cza podkre╢lanie polskich znak≤w po konwersji. Przydatne gdy terminal nie ma polskich czcionek i konwertujemy do ascii - podkre╢lanie pozwala odr≤┐niµ litery `polskie' od │aci±skich.
Sekwencja podkre╢laj▒ca jest taka jak dla terminali vt100 i inne typy terminali mog▒ j▒ interpretowaµ inaczej lub wcale. R≤┐ne emulatory terminali tak┐e mog▒ j▒ interperetowaµ r≤┐nie lub wcale.
-s
standardowo program po ka┐dym cyklu (przekodowaniu porcji znak≤w) na chwilΩ zawiesza dzia│alno╢µ, aby nie obci▒┐aµ zbytnio procesora. Dodanie opcji -s wy│▒cza tΩ funkcjΩ. Mo┐e to spowodowaµ du┐e obci▒┐enie procesora, ale za to program bΩdzie dzia│aµ szybciej.
prog
program jaki ma zostaµ uruchomiony. Je┐eli nie zostanie podany, to wywo│ywane jest intepreter polece± (shell), na podstawie warto╢ci odczytanej ze zmiennej $SHELL.
args
pozosta│a czΩ╢µ argument≤w jest przekazywana do uruchamianego programu.
Uwaga! Wymagane jest podanie przynajmniej jednego z parametr≤w -o lub -i - w przeciwnym wypadku program zaprotestuje (uruchamianie programu bez konwersji nie ma sensu).

Przyk│ady u┐ycia

Plik z w│asnymi definicjami standard≤w kodowania polskich liter

Je┐eli komu╢ nie wystarczaj▒ standardy umieszczone bezpo╢rednio w programie, mo┐e utworzyµ plik w kt≤rym bΩd▒ zapisane interesuj▒ce go standardy. Uwaga - je┐eli program ma korzystaµ z takiego pliku to musz▒ w nim byµ zapisane wszystkie standardy - standardy wkompilowane bezpo╢rednio w program s▒ wtedy ignorowane. Aby korzystaµ z pliku, nale┐y zdefiniowaµ w programie (na pocz▒tku pliku ogonki.c) sta│▒ PLSTDFILE, np. tak:
   #define PLSTDFILE "/usr/lib/plchars.dat"
   
NastΩpnie w tak zdefiniowanym pliku nale┐y zapisaµ wszystkie standardy jakie maj▒ byµ rozpoznawane przez program (│▒cznie ze standardem ASCII, chyba ┐e nie bΩdzie on u┐ywany). Format pliku jest nastΩpuj▒cy:
nazwa  opcje  kod_▒ kod_µ kod_Ω ... kod_¼ kod_»
Nazwa to po prostu nazwa - takiej bΩdzie potem trzeba u┐ywaµ w opcjach przy uruchamianiu programu. opcje nale┐y ustawiaµ zawsze jako 0 - w tej wersji pozycja ta nie jest wykorzystywana, ale standardy o opcji r≤┐nej od zera nie zostan▒ odczytane. NastΩpnie nale┐y podaµ kody kolejnych polskich liter, jako liczby dziesiΩtne.

Poza liniami opisuj▒cymi poszczeg≤lne standardy plik mo┐e zawieraµ komentarze - musz▒ siΩ one zaczynaµ od znaku # umieszczonego w pierwszej kolumnie.

A oto przyk│adowy plik opisuj▒cy kilka standard≤w:

#
# Plik z definicjami polskich liter w roznych standardach...
#
#                A   C   E   L   N   O   S   Z'  Z.  a   c   e   l   n   o   s   z'  z.
#---------------------------------------------------------------------------------------
Mazovia      0  143 149 144 156 165 163 152 160 161 134 141 145 146 164 162 158 166 167
ISO-Latin-2  0  161 198 202 163 209 211 166 172 175 177 230 234 179 241 243 182 188 191
Windows-EE   0  165 198 202 163 209 211 140 143 175 185 230 234 179 241 243 156 159 191
Cyfromat     0  128 129 130 131 132 133 134 136 135 137 138 139 140 141 142 143 145 144
DHN          0  128 129 130 131 132 133 134 136 135 137 138 139 140 141 142 143 145 144
Ventura      0  151 153 165 166 146 143 142 144 128 150 148 164 167 145 162 132 130 135
ELWRO-Junior 0  193 195 197 204 206 207 211 218 217 225 227 229 236 238 239 243 250 249
Mac          0  132 140 162 252 193 238 229 143 251 136 141 171 184 196 151 230 144 253
AmigaPL      0  194 202 203 206 207 211 212 218 219 226 234 235 238 239 243 244 250 251
TeXPL        0  129 130 134 138 139 211 145 153 155 161 162 166 170 171 243 177 185 187
ISO-6937-2   0  135 129 141 232 134 130 131 132 133 128 145 144 248 134 146 147 148 149
ASCII        0   65  67  69  76  78  79  83  90  90  97  99 101 108 110 111 115 122 122

Piotr Pi▒tkowski, <kompas@uci.agh.edu.pl>
Rafa│ Maszkowski, <rzm@torun.pdi.net>