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>