Mottó: Világ szabványai egyesüljetek!
Egyre többen vagyunk, akik először nem Samu bácsi találmányát, a távíró kódrendszerét ( © 1838., Morse Samuel Finley Breese ) ismertük meg, hanem az ASCII-t ( a CII az ASCII végén nem római 102. ). Bár az ASCII sem túl jól megszervezett egy rendszer, a távíró kódtábla kifejezetten emlékeztet egy véletlenszám-generátorral előállított sorozathoz. ( Bocs Samu, de ez van... )
Csak félve jegyzem meg, hogy értetlenül állok a számjegyek olyan felsorolása előtt, amely "1"-gyel kezdődik, "9"-et követi a "0". Például a 10 számjegyet úgy sorolja fel valaki, hogy "1-0-ig" - a helyes "0..9" helyett.
Az ASCII eredetileg 7 bitesnek indult ( plusz paritásbit ), amiből "természetesen" kimaradtak az ékezetes karakterek. Azóta bővült egy bittel, és bár kompatibilis maradt metélt ősével, de ezzel egyidejűleg újabb problémák léptek fel. Egy ékezetes kisbetű nagybetűvé konvertálása igen lenyűgöző programozói feladat. A rendezéskor fellépő anomáliákról nem is beszélve! Mindezek ellenére az ASCII képes volt kiszorítani az EBCDIC-et, ( béke bitjeire! ) és feltehetően még sokáig használatos lesz. Mint ahogy a távíró is.
A probléma egyszerűen az, hogy a ma használatos ICC ( International Continental Code ) felháborítóan kevés szimbólumot tartalmaz. Nem különbözteti meg a kis- és nagybetűket, a legtöbb ékezetes karaktert nem tartalmazza. És talán a legfontosabb: zárójel szimbólum is csak egy van, hogy az nyitó vagy csukó, kerek, szögletes avagy kapcsos, a vételkor nem dönthető el egyértelműen. Ha sikerül olyan távíró kódrendszert kifejlesztenem, amely 256 új szimbólumot ( is ) ábrázol, az kompatibilissé válna az ASCII-vel és egy csomó probléma egyszerűen megszűnne létezni! Ha még ilyen szisztéma nincs is, hogy beszélni tudjak róla, nevet kell neki adnom:
char szName_Of_New_Code[] = "cw8";avagy
LET N$ = "cw8".
Az előbbiek alapján már csak az aprómunka van hátra.
Szerencsére a ma használt ICC-ben csak két fajta távírójel található: rövid és hosszú. Így hát az ASCII kódok bináris, azaz kettes számrendszerbeli alakjából indultam ki. A kettes számrendszer alkalmazása később bölcs döntésnek bizonyulhat, mert 256 különböző szimbólum ábrázolásához 8 bit szükséges, és mivel a hagyományos távírókódok ennél általában rövidebbek, a két, egyesítésre váró kódrendszer között várhatóan kevés lesz az átfedés.
Meg kellett határoznom, mi fogja kódolni a 0 bitet és az 1 bitet, mi legyen a bitsorrend, szinkron vagy aszinkron átvitel legyen-e? Ha szinkron, mi legyen a "flag"; ha aszinkron legyen-e start-bit, stop-bit, paritásbit, stb. Meg persze kompatibilis legyen az eredeti ICC-vel!
A nulla bitet hordozhatja a rövid jel, az egyest pedig a hosszú. Persze lehet fordítva is. Én minden esetre az első változatot hagytam meg. A bitsorrend azt jelenti, hogy a legnagyobb ( b7 ) vagy a legkisebb ( b0 ) bittel kezdődik az adás. Bár az "rs232c" szabvány szerint a legkisebbel ( b0 ), nekem a másik tűnik megfelelőbbnek, hiszen az megfelel a bitek leírásának sorrendjével. Itt komoly kutatómunkára van lehetőség akusztikusok, pszichológusok, pszichiáterek és zeneesztéták bevonásával: melyik bitsorrend adása és vétele kevésbé fárasztó a távírász számára, melyik dallamosabb.
Nos, nagy változás lenne a szinkron adatátviteli módra való áttérés, a hosszabb csomagok vétele egyrészt óriási megterhelést jelentene a távírásznak, másrészt a csomag közepén befigyelő SWL nem tudna szinkronizálódni, így semmit sem tudna levenni a táviratból.
A csomag végén lévő ellenőrzőösszeg generálását talán az "elkey"-elektronikák csekély módosításával meg lehetne oldani, de vételkor nem írhatom elő a hexadecimális zsebszámológép állandó jelenlétét. A zászlóbontás ezúttal elmarad. Egyértelmű tehát az aszinkron üzemmód alkalmazása.
Start és stopbitre nincs szükség, hiszen az eredeti távíró szabvány tartalmazza a karakterek elválasztását jelentő 3 elemi idejű szünetet.
Egyedül a paritásbit alkalmazása jöhet szóba, ami viszont további problémákat vet fel: páros ( "even" ) vagy páratlan ( "odd" ) legyen-e, a távírász generálja-e vagy az "elkey"-elektronika, az ellenőrzés is macerás. Várhatóan megjelennének a paritás nélküli, páros vagy páratlan paritásra felesküdt távírászok ( "even"-esek, "odd"-osok ), megosztva az amatőröket. Ez semmiképpen sem lehet a célom, tehát No Parity. "QSUF" modemeseknek: "8N0".
Immáron kész a "cw8" szabvány definíciója:
A "cw8" egy aszinkron karakter-orientált kvantált adatátvitel. Tartalmazza az ICC szabványt, és az ASCII szabványt. A "cw8" kód is rövid és hosszú jelekből áll. A rövid jel ideje megegyezik az elemi jel idejével. A hosszú jel ideje az elemi jel idejének háromszorosa. Egy karakter egy vagy több rövid vagy hosszú jelből áll, a karakteren belül a jelek között egy elemi jel idejű szünettel. A karaktereket 3 elemi jel idejű szünet választja el. Szóköz karaktert jelent a 7 hosszú szünet. A "cw8" kód az eredeti ICC szimbólumait 256 új kóddal egészíti ki, 8 bites ASCII-nek megfelelően. Az ASCII kódok bináris ábrázolásában a 0 bitnek a rövid, az 1 bitnek a hosszú jel felel meg, a bitsorrend pedig: b7, b6 ... b0. Start, stop és paritásbit nincs.
Karakterkódolás alapértelmezetten UTF-8. Néhány ékezetes karakter:
á | Á | |||
é | É | |||
í | Í | |||
ó | Ó | |||
ö | Ö | |||
ő | Ő | |||
ú | Ú | |||
ü | Ü | |||
ű | Ű |
Két esetben ütközik az ICC és ASCII kód: ahol az ICC 8 elemi jelből áll. Az egyik az ICC 8 hosszúságú hibajelzése. Ez megszüntethető a 8 rövid jelből álló kódnak egyértelműen az 0x00 kódú karakterhez rendelésével. A másik az egybeadott "cq" ICC kódja, ami az egyébként ritkán használt '\xAD' karakterével egyezik meg. Sry.
Az üzemi jelzések többé-kevésbé megfeleltethetők az ASCII vezérlőkódjaival
"ar" | '+' | |
"as" | syn | |
"bk" | dle | |
"cq" | enq | |
err | ( bs, del ) | |
"kn" | rs | |
"sk" | fs | |
"sn" | ack | |
"sos" | soh |
így azok kezelése külön problémát nem jelent.
Az 1. táblázatban egymás mellett látható a "cw8", ICC és ASCII kódrendszer.
Az ASCII kódok sokfélesége nem csak az ékezetes karakterek precíz átvitelét teszi lehetővé, de a távirat formájára is útmutatást adhat. Az új "cw8"-as kódrendszer örökre elfeledtetheti a hagyományos, csupán 5-ös csoportok lejegyzésére megtervezett távirati űrlapot. Az új kódok szétfeszítik a régi kereteket! Hogy mire gondolok? A jól bevált és széleskörűen használt nyomtató-vezérlő ( ez esetben távírász-vezérlő ) kódszekvenciák alkalmazására. Milyen csicsás táviratokat lehet küldeni!
Egyszerűen előírható a távírásznak, hogy szépírással vesse papírra üzenetünket ( "nlq", '\x1B' 'x' '1' ) vagy elegendő az alig olvasható, de gyorsabb macskakaparás ( "draft", '\x1B' 'x' '0' ). Ha a címzett idős, dupla széles karakterekkel is kérhető a távirat ( '\x1B' 'W' '1' ). De lehetőség van dupla ( '\x1B' 'h' '1' ) vagy négyszer akkora ( '\x1B' 'h' '2' ) karakterekkel is írni. Az '\x1B' 'U' '0' pedig gyakorlottabb távírásznak engedélyezi, hogy a következő sor írását azon az oldalon folytassa, ahol az előzőt abbahagyta, azaz jobbról balra is írhasson. Ez jelentős időmegtakarítás, hiszen nem kell a kezét minden új sornál üresjáratban a sor elejéhez vinni.
Különösen versenyeredmények és számlamásolatok kódolását és lejegyzését teszi sokkal gyorsabbá a tabulálás használata. Egy karakterrel ( "tab", '\x09' ) utasítani lehet a távírászt, hogy a következő oszlopban folytassa az írást. Helyi zónaidő szerinti 22 óra után célszerű az '\x1B' 's' '1' parancs kiadása, ami előírja a távirat vételének lehető legcsendesebb módját, azaz célszerűen fejhallgató alkalmazását. A 2. táblázatban néhány fontosabb szabványos nyomtatóvezérlő ( bocs: távírászvezérlő ) szekvenciát mutatok be.
A terminálkezelésben jól bevált ANSI kódszekvenciák használata szintén új távlatokat nyit meg. Az '\x1B' '[' '2' 'J' kódsorozat ( képernyő törlése ) utasítja a távírászt, hogy a táviratot új távirati űrlapon folytassa. A '\x1B' '[' '3' '0' 'm' fekete tinta használatát, az '\x1B' '[' '4' '3' 'm' pedig sárga ( sárguló ) távirati űrlap használatát írja elő. '\x1B' '[' '5' 'm' villogó tintát jelent, ami szükség esetén fluoreszkáló szövegkiemelővel pótolható; a rejtjelezést pedig a '\x1B' '[' '8' 'm' szekvencia teszi egyszer, s mindenkorra feleslegessé. A 3. táblázatban összefoglaltam az ANSI szekvenciákat, lehet mazsolázni.
Egyelőre fejlesztés alatt áll a HTML formátum megfelelő értelmezése ( 4. táblázat ) a távírászi munkában, de kellő elhivatottsággal nem kétséges a kívánt hatás elérése. A MIDI szekvenciák átvitele és értelmezése akár teljes szimfonikus művek korrekt átvitelét is lehetővé teszi. Igen érdekes megfigyelni a technika és a művészet ilyetén való újra egymásra találását, hiszen az eredeti távíró üzemmód egy festőállvány sajátos felhasználásával kezdte útját.
Bár az új szisztéma új problémákat szül - itt a kódlapok kezelésének máig nem tökéletesen megoldott nehézségeire gondolok - de beláthatatlan előnyökkel rendelkezik a szövegállományok, képek, programok csereberéje terén.
Állományátvitelhez természetesen használhatók a már bevált protokollok ( "kermit", "xmodem, "zmodem", "puma", "yapp" stb. ). Ugyancsak alkalmazhatók a tömörítőprogramok is ( "pkzip", "arj", "lha", "rar" stb. ).
Bár a "cw8" kódrendszer előnyeit hosszan sorolhatnám, utoljára még egy igen hatékony karakterre hívom fel a figyelmet, ez pedig a 0x07-es kódú "bel" ( "ctrl-g" ), azaz csengetés. Ennek vételekor a távírász köteles egy csengőt rövid ideig működésbe hozni.
Csupán emlékeztetőül jegyzem meg, hogy a modulációs sebesség ( f
ANSI | American National Standards Institute, azaz Amerikai Nemzeti Szabványügyi Intézet. |
ASCII | American Standard Code for Information Interchange, azaz információcsere amerikai szabványos kódja. |
B | Az adatáviteli sebesség és a modulációs sebesség egyedül hivatalos jele. |
baud | Az adatáviteli sebesség és a modulációs sebesség egyedül hivatalos mértékegysége. |
CII | Római 102. |
CW | Távíró üzemmód, Morse távíró kódja. © 1838., Morse Samuel Finley Breese |
cw8 | ASCII-vel kiegészített távírókód. © 1994. gg630504. |
EBCDIC | Extended Binary Coded Decimal Interchange Code, azaz kiterjesztett, binárisan kódolt decimális kódrendszer. |
EOF | End of file, azaz iratgyűjtő, állomány vége. |
ICC | International Continental Code ( kb. 1851. ) |
II | Római 2. |
Samu | Samuel Finley Breese Morse, 1791 .. 1872. |
0xYZ | Szám 16-os számrendszerben. Pl. 0x3F = 16*3+15 = 63. |
'\xYZ' | A 0xYZ kódú karakter. Pl. '\x3F' = '?'. |
Szabványos távírászvezérlő kódsorozatok
'\x1B' 'x' '0' | innen vázlat minőségben ( gyorsan ) kell írni a táviratot |
'\x1B' 'x' '1' | innen szépírással kell írni a táviratot |
'\x1B' 'k' type | szépírásnál a betűtípus kiválasztása |
'\x1B' 'k' '\x00' | szépírásnál a Courier betűtípus kiválasztása |
'\x1B' 'k' '\x01' | szépírásnál a Sanserif betűtípus kiválasztása |
'\x1B' 'k' '\x07' | szépírásnál az Orator bagybetűs betűtípus kiválasztása |
'\x1B' 'k' '\x08' | szépírásnál az Orator kisbetűs betűtípus kiválasztása |
'\x1B' '4' | innen dőlt betűkkel kell írni a táviratot |
'\x1B' '5' | innen álló betűkkel kell írni a táviratot |
'\x1B' 'E' | innen vastag tollal kell leírni a táviratot |
'\x1B' 'F' | ismét vékony tollal kell leírni a táviratot |
'\x1B' 'G' | innen jobban rá kell nyomni a tollat a papírra |
'\x1B' 'H' | ismét nem kell jobban rányomni a tollat a papírra |
'\x1B' '-' '1' | innen aláhúzással kell írni |
'\x1B' '-' '0' | aláhúzás vége |
'\x1B' 'S' '0' | innen felső indexként kell írni |
'\x1B' 'S' '1' | innen alsó indexként kell írni |
'\x1B' 'T' | felső és alsó indexként írás befejezése |
'\x1B' 't' '0' | szabványos karakterkészlet kiválasztása |
'\x1B' 't' '1' | IBM karakterkészlet kiválasztása |
'\x1B' '7' | 1. számú karakterkészlet kiválasztása |
'\x1B' '6' | 2. számú karakterkészlet kiválasztása |
'\x1B' 'R' typ | nemzetközi karakterkészletek kiválasztása ( typ: '\x00' .. '\x0D' ) |
'\x1B' '~' '1' | ettől kezdve a nullát át kell húzni |
'\x1B' '~' '0' | ettől kezdve a nullát nem kell áthúzni |
'\x1B' 'P' | normál szélességű karakterek ( 10 vagy 17 karakter per hüvelyk ) |
'\x1B' 'M' | keskenyebb karakterek ( 12 vagy 20 karakter per hüvelyk ) |
'\x0F' | összenyomott írás ( 17 vagy 20 karakter per hüvelyk ) |
'\x12' | összenyomott írás befejezése |
'\x1B' 'W' '1' | innen dupla széles karakterekkel való írás |
'\x1B' 'W' '0' | dupla széles karakterekkel való írás befejezése |
'\x0E' | dupla széles karakterekkel való írás egy sorban |
'\x14' | dupla széles karakterekkel való írás vége egy sorban |
'\x1B' 'p' '1' | proporcionális, változó szélességű karakterekkel írás |
'\x1B' 'p' '0' | rögzített szélességű karakterekkel írás |
'\x1B' '\x20' with | karakterek közötti távolság növelése n/240 hüvelykkel |
'\x1B' 'h' typ | normál ( typ = '\x00' ), dupla ( typ = '\x01' ) vagy négyszeres ( typ = '\x02' ) betűmérettel írás |
'\x1B' 'w' '1' | innen dupla magas karakterekkel írás |
'\x1B' 'w' '0' | ismét normál magas karakterekkel írás |
'\x1B' '0' | sortávolság 1/8 hüvelyk lesz |
'\x1B' '1' | sortávolság 7/72 hüvelyk lesz |
'\x1B' '2' | sortávolság 1/6 hüvelyk lesz |
'\x1B' '3' sp | sortávolság sp/216 hüvelyk lesz |
'\x1B' 'A' sp | sortávolság sp/72 hüvelyk lesz |
'\x0A' | tollat a távirati űrlap következő sorába kell vinni |
'\x1B' '\x0A' | tollat a távirati űrlap előző sorába kell vinni |
'\x1B' 'J' down | tollat down/216 hüvelykkel lejjebb kell vinni |
'\x1B' 'j' up | tollat up/216 hüvelykkel feljebb kell vinni |
'\x1B' 'f' '1' down | tollat down sorral lejjebb kell vinni |
'\x1B' 'C' len | a távirati űrlap hossza len sor |
'\x1B' 'C' '\x00' len | a távirati űrlap hossza len hüvelyk |
'\x1B' 'N' bottom | a távirati űrlapon az alsó margó bottom sor |
'\x1B' 'O' | nincs alsó margó |
'\x0C' | új távirati űrlapot kell elővenni |
'\x1B' '\x0C' | tollat vissza a távirati űrlap tetejéhez |
'\x1B' '8' | papírhiány nem probléma |
'\x1B' '9' | papírhiányt jelezni kell a főnöknek |
'\x1B' 'B' n1 n2 ... '\x00' | függőleges tabulátorpozíciók az n1, n2 ... sornál |
'\x1B' 'e' '1' n | függőleges tabulátorpozíció minden n-edik sornál |
'\x1B' 'b' n0 n1 n2 ... '\x00' | n0. függőleges tabulátorpozíciós vonalzó beállítása az n1, n2 ... sorhoz |
'\x1B' '/' n0 | n0. függőleges tabulátorpozíciós vonalzó szerinti tabulálás |
'\x0B' | függőleges tabulálás, tollat a következő tabulátor-pozícióhoz |
'\x1B' 'l' left | bal margó a left sornál |
'\x1B' 'Q' right | jobb margó a right sornál |
'\x0D' | tollat a bal margóhoz kell vinni |
'\x08' | tollat vissza kell tenni egy karakterpozícióval |
'\x1B' 'a' '0' | az egész sor bal margóhoz igazítása |
'\x1B' 'a' '1' | az egész sor bal és jobb margóhoz középre igazítása |
'\x1B' 'a' '2' | az egész sor jobb margóhoz igazítása |
'\x1B' 'D' n1 n2 ... '\x00' | vízszintes tabulátorpozíciók beállítása |
'\x1B' 'e' '0' col | vízszintes tabulátorpozíciók beállítása minden col oszlopnál |
'\x1B' 'R' | vízszintes tabulátorpozíciók alaphelyzetbe állítása |
'\x09' | tollat a következő vízszintes tabulátorpozícióhoz kell vinni |
'\x1B' '\' n1 n2 | tollat a (256*n2+n1)/120 hüvelykkel jobbra kell vinni |
'\x1B' '$' n1 n2 | a következő vízszintes tabulátorpozíció (256*n2+n1)/60 hüvelyknél lesz |
'\x1B' 'f' '0' col | a következő vízszintes tabulátorpozíció col oszlopnál lesz |
'\x7F' | az utoljára küldött karakter törlése |
'\x18' | az utoljára küldött sor törlése |
'\x1B' 's' '1' | halkan kell írni a táviratot, fejhallgató használata kötelező |
'\x1B' 's' '0' | nem kell halkan írni a táviratot |
'\x13' | a távírász elfogadhat helyi parancsokat |
'\x11' | a távírász nem fogadhat el helyi parancsokat |
'\x07' | a távírász csengetni köteles |
'\x1B' 'U' '0' | a távírász oda-vissza ( visszafelé is ) írhat |
'\x1B' 'U' '1' | a távírász csak egy irányban írhat |
'\x1B' '<' | ezt az egy sort balról jobbra kell írni |
'\x1B' '@' | a távírász újrainicializálása |
ANSI távírászati alapszekvenciák
'\x1B' '[' lin ';' col 'H' | toll pozicionálása: sor, oszlop |
'\x1B' '[' up 'A' | toll felfelé valahány sorral |
'\x1B' '[' down 'B' | toll lefelé valahány sorral |
'\x1B' '[' right 'C' | toll jobbra valahány oszloppal |
'\x1B' '[' left 'D' | toll balra valahány oszloppal |
'\x1B' '[' lin ';' col 'f' | toll pozicionálása: sor, oszlop |
'\x1B' '[' '6' 'n' | toll pozíciójának lekérdezése |
'\x1B' '[' 's' | toll pozíciójának elmentése |
'\x1B' '[' 'u' | toll pozíciójának visszaállítása |
'\x1B' '[' '2' 'J' | új távirati űrlap elővétele, toll a bal felső sarokba |
'\x1B' '[' 'K' | sor további részének kiradírozása |
'\x1B' '[' num ';' ... ';' num 'm' | tinta és távirati űrlap színének kiválasztása |
'\x1B' '[' '=' num 'h' | irodaszer típusának kiválasztása |
'\x1B' '[' '=' num 'I' | irodaszer típusának kiválasztása |
'\x1B' '[' num ';' "string" ... 'p' | bélyegző beállítása |
'\x1B' '[' ... '\xE' | zene megszólaltatása |
Toll pozíció
'\x1B' '[' lin ';' col 'R' '\xA' | ilyen formában kell válaszolni a "6n" kérdésre, a toll pillanatnyi sor és oszlop pozícióját kell adni |
Tinta és távirati űrlap színe
"0" | alaphelyzet: fehér tinta fekete papíron |
"1" | nagyfényességű tinta |
"4" | aláhúzással kell írni |
"5" | villogó tinta |
"7" | fordítva, a papír és tinta színét fel kell cserélni |
"8" | nem látható vegytinta |
"30" | fekete tinta |
"31" | piros tinta |
"32" | zöld tinta |
"33" | sárga tinta |
"34" | kék tinta |
"35" | lila tinta |
"36" | világos kék tinta |
"37" | fehér tinta |
"40" | fekete távirati űrlap |
"41" | piros távirati űrlap |
"42" | zöld távirati űrlap |
"43" | sárga távirati űrlap |
"44" | kék távirati űrlap |
"45" | lila távirati űrlap |
"46" | világos kék távirati űrlap |
"47" | fehér távirati űrlap |
Irodaszer típusai
"0" | 40 x 25 méretű egyszínű távirati űrlap, egyszínű tintával |
"1" | 40 x 25 méretű színes távirati űrlapok, színes tintákkal |
"2" | 80 x 25 méretű egyszínű távirati űrlap, egyszínű tintával |
"3" | 80 x 25 méretű színes távirati űrlapok, színes tintákkal |
"7" | sor végén a toll automatikusan új sorba kerüljön |
HTML formátumú távírászvezérlő szekvenciák ( fejlesztés folyamatban, PSE AS, csak a fontosabbak )
<bgsound src="..."> | a távírász a megadott zenét köteles elindítani magnetofonon vagy gépzongorán |
<img> | a táviratban egy kép következik, át kell váltani SSTV üzemmódra |
MIDI formátumú távírászvezérlő szekvenciák ( fejlesztés folyamatban, PSE AS, csak a fontosabbak )
'\xA?' ?? ?? | billentyű nyomva tartásának erőssége |
'\xF6' | önhangolás |
'\xFF' | rendszer ( távírász, zenész, stb. ) inicializálás |
Experiment is the sole judge of scientific “truth”.
A (természet)tudományos igazság kizárólagos kritériuma a kísérlet.
Feynman Richard