Vezérlőkarakterek

A Wikipédiából, a szabad enciklopédiából

A számítástechnikában a vezérlő karakter vagy nem nyomtatható karakter (angol kifejezéssel control character) egy olyan kód (egy szám) egy kódkészletben, ami önmagában nem felel meg egyetlen írott szimbólumnak sem. Az ASCII kódtábla minden 32 alatti eleme (technikailag a C0 vezérlő kódkészlet) közéjük tartozik, többek között a BEL (ami hangjelzést vált ki, ha a végberendezés veszi), a SYN (ami szinkronizálja jeleket), és az ENQ (egy jelzés, ami kivált valamilyen választ a vételét követően, így ellenőrizhető, hogy az összeköttetés még fennáll-e). A Unicode szabvány újabb nem nyomtatható karakterekkel egészítette ki vezérlő karakter készletet. Az ASCII és az ISO 8859-n által használt részletes C0 és C1 vezérlő kódok tábláit lásd a megfelelő szócikkeknél.

ASCII vezérlő karakterek[szerkesztés | forrásszöveg szerkesztése]

Az ASCII vezérlő karakterei közül a legismertebbek:

  • 7 (bell – harang vagy csengő) – vétele esetén valamilyen figyelmeztető jelet (általában hangjelzést) vált ki
  • 8 (backspace – visszalépés) – az utolsó nyomtatott karakter törlésére vagy felülnyomtatásra (overprint) használható
  • 9 (horizontal tab – vízszintes tabulátor) – a jelenlegi nyomtatási pozíciót adott számú szóközzel jobbra helyezi
  • 10 (line feed – soremelés) – a legtöbb Unix rendszer és ezek változatai a sor végének jelzésére használják
  • 12 (form feed – lapdobás) – hatására a nyomtató új lapot kezd (lapdobás), vagy az aktuális nyomtatási pozíció egy új lap első sorának kezdő pozíciójára helyeződik át, a képernyős kijelzők törlik az aktuális képernyőtartalmat.
  • 13 (carriage return – kocsi vissza) – a sor végének jelzésére használja a Mac OS, az OS-9, a FLEX és változataik. A kocsi vissza/soremelés – carriage return/line feed – párosítást használja a CP/M-80 és a belőle kinőtt rendszerek, egészen a DOS-ig, valamint a Windows, az alkalmazási réteg és a protokollok, mint például a HyperText Transfer Protocol (HTTP)
  • 27 (escape)

Időnként a modern alkalmazások is használnak más vezérlőkódokat: például a 4 (end of transmission – átvitel vége) kódot használja a Unix shell vagy a PostScript nyomtató adatátvitelnél.

A 27 (Escape) kód több funkcióval is bír. Szinte ez a legtöbbet használt vezérlő karakter: az alapkoncepció szerint a nyomtatható és eszköz vezérlő információkat keverten is el lehet küldeni. Ehhez azonban szükséges, hogy egyértelműen felismerhető legyen, meddig tartanak a nyomtatható karakterek, és mikor kell a küldött karaktereket vezérlő karaktereknek értelmezni. Megállapodás alapján az ESC karaktert követő karaktert vagy karaktereket nem tekinti a berendezés nyomtatható karakternek, még akkor sem, ha kódja alapján az lenne. Ezért neveznek bizonyos karakter kombinációkat „vezérlő szekvencia” vagy „escape szekvencia” névvel, illetve így lehet klaviatúrán vezérlő karaktereket „előállítani” (lásd később). A mechanizmust az ASCII kód „apja”, Bob Bemer vezette be.

Általában a 27 kódot küldik először, majd az ezt követő egy vagy több nyomtatható karaktert értelmezik úgy, hogy azok speciális akciókat indítanak el – ha a vezérlő vagy a vezérlő meghajtója erre fel van készítve. A karakter szekvencia után a következő karaktereket már ismét normál nyomtatható karakterként értelmezi a berendezés. Például, a 27 kód után küldött nyomtatható karakterek "[2;10H" a Digital VT-102 terminálján a kurzort a képernyő 2 sorának 10. cellájára pozicionálták. Számos szabványt dolgoztak ki ilyen szekvenciákra, például az ANSI X3.64 (1979-ben), amelyik a VT-100 sorozatú terminálok viselkedését „emulálta”. Sajnos nagy számú, nem szabványos variációt is alkalmaztak, különösen a printerek körében, mivel a technológia gyorsabban fejlődött, mint a szabványok, viszont ez a kompatibilitás szempontjából egyáltalán nem volt elfogadható: egy nyomtató helyett nem lehetett automatikusan egy másikat alkalmazni.

Vezérlő karakterek és a billentyűzet[szerkesztés | forrásszöveg szerkesztése]

Nagyon fontos megérteni, hogy a billentyűzet – önmagában – semmiféle karakterkódot nem nem küld a PC felé, hanem úgynevezett „scancode” érkezik a billentyűzet vezérlőjéhez (driveréhez), ami ezekből a „scancode”-ból készít – többnyire – ASCII kódokat.

Az általában használatos billentyűzeteken van egy speciális billentyű, amit „kontroll” vagy „Ctrl” (néhány esetben „Cntl”) felirattal láttak el. Ez a billentyű a „shift” billentyűhöz hasonlóan használható, azaz egy másik billentyűvel együtt lenyomva másik betűt vagy más jelet generál. Ezen a módon generálható az a 32 kód, amely megfelel az ASCII vezérlő karaktereinek. Mivel az ASCII kód kisbetűi (ideértve a @ jelet is) decimálisan 64-nél kezdődnek, a „Ctrl” billentyű lenyomásával együtt lenyomott kisbetű hatására keletkező ASCII kód értéke nem más, mint az adott kisbetű decimális kódjából levonva 64. Így pontosan a megfelelő ASCII vezérlő karaktereket kapjuk.

Ha a generált kódokat bináris formában ábrázoljuk, látható, hogy a második legbaloldalibb bit (6. bit, 26, ami pontosan 64) nullába állításával – amit a "Ctrl" használata eredményez – a vezérlő karakterek egyszerűen előállíthatók. Például, a „Ctrl” és a G billentyűt (kódja 71 decimálisan, ami megfelel a 01000111-nek binárisan) együttesen lenyomjuk, akkor a generált kód a Bell (7 decimálisan vagy 00000111 binárisan).

A fenti megoldás miatt gyakran jelenítik meg a vezérlő karaktereket úgy, hogy az a "ctrl" és egy nyomtatható karakter kombinációja. A „Ctrl” jelzésére a „^” jelet használják, a jelölési módot pedig Ctrl szekvenciának nevezik; például, a ^G a 7 (bell) kódot jelenti, és a „Ctrl” és a „G” billentyűk együttes leütésével keletkezik.

A billentyűzeteken van néhány billentyű, amely önmagában is képes vezérlőkarakterek generálására. Például, a „Backspace” általában a 8-as kódot, a „Tab” a 9-es kódot, az „Enter” vagy „Return” a 13-as kódot generálják (egyes billentyűzetek az „Enter” hatására a 10-es kódot generálják).

Modern billentyűzeteken vannak olyan billentyűk, amelyekhez nem lehet ASCII kódot rendelni, ilyenek például a kurzormozgató nyilak és a szövegszerkesztő funkciók. Ezek a karakterek a következő háromféle mód valamelyikével állíthatók elő: vagy nem használt vezérlő karaktereket rendelnek az egyes funkciókhoz (billentyűkhöz), vagy nem ASCII kódolást használnak, vagy több karakterből álló vezérlő szekvenciákat használnak. A PC-hez használható billentyűzetek többnyire az első két módszer valamelyikét használják, viszont a „buta” terminálok inkább a kontroll szekvenciákat használják.

Használatuk[szerkesztés | forrásszöveg szerkesztése]

A vezérlő karakterek alapvetően a következő csoportokba sorolhatók:

  • nyomtatás és a megjelenítés vezérlése
  • adatok strukturálása és az adatátvitel vezérlése
  • vegyes

Nyomtatás és a megjelenítés vezérlése[szerkesztés | forrásszöveg szerkesztése]

A nyomtatásvezérlő karakterek először a nyomtatóknak, a legelső megjelenítő eszközöknek fizikai működését vezérelték.

A „kocsi vissza” karakter, ha elküldték valamilyen berendezésnek, azt eredményezte, hogy a nyomtatómechanika – ha volt – az adott sor első nyomtatási pozíciójába állt. (Egyes berendezések esetében nem az aktuális sor elejére, hanem a következő sor elejére pozicionált a nyomtató.)

A „soremelés” hatására a nyomtatási pozíció egy sorral lejjebb került. A berendezés kialakításától függően a nyomtatási pozíció a következő sor elejére is kerülhetett – európai nyelvek esetében a lap bal oldalára, arab és héber nyelvek esetében a lap jobb oldalára.

„Vízszintes vagy függőleges tabulálás” esetén – ha a berendezés képes volt értelmezni a vezérlő karaktert – az adott tabulátorpozíciónak megfelelő helyre pozicionálódott a nyomtatást végző eszköz.

A „form feed” karakter hatására egy új lap kezdetére állt a nyomtató berendezés.

A „visszalépés” vezérlő karakter az aktuális pozíciótól egy lépéssel visszaléptette a nyomtatót, így lehetőség nyílt arra, hogy felülnyomtatással elő lehessen olyan karaktert is állítani, ami normál esetben nem nyomtatható. Terminálok és képernyős eszközök esetében választani lehetett, hogy a vezérlő szoftver (vagy hardver) konvertálja-e a vett visszaléptetést egy un. destruktív törlési szekvenciává (ami BS SP BS), vagy csak lépjen vissza egy nyomtatási (kijelzési) pozícióval.

A „shift in” és „shift out” küldésével az esetlegesen beépített másik kódkészletre való át- és visszatérést lehetett szabályozni, így – megvalósítástól függően – lehetett például cirill vagy görög, esetleg speciális karaktereket nyomtatni. Az „escape szekvenciák” hasonló célokat szolgáltak.

A terminálok fejlődésének következtében a fizikai nyomtatások vezérlése helyett a sokkal flexibilisebb képernyős megjelenítés vette át a főszerepet, így a szavak, sorok vagy teljes képernyő törlésére kezdték alkalmazni a különböző vezérlő karaktereket. A „form feed” például a törölte a képernyőt, mivel megszűnt az új lap, amire nyomtatni lehet. Az eddig használtaknál bonyolultabb escape szekvenciákat kellett használni, hogy a különféle fejlesztési/fejlődési lehetőségeket minél jobban ki lehessen használni mind a terminálok képernyőin, mind pedig a nyomtatókon. Az eddig jól alkalmazható koncepció, a vezérlő karakterek használata a funkciók számának növelésével egyre inkább szűkítette a lehetőségeket a vezérlő karakterek korlátozott száma miatt. A vezérlő szekvenciák (escape szekvenciák) jobban megfeleltek a változó körülmények között, és nagyon nagy számban és változatban alkalmazzák is őket, viszont éppen a nagy számú, többnyire eltérő szekvenciák kezelése kritikus a kompatibilitás miatt.

Adatok strukturálása[szerkesztés | forrásszöveg szerkesztése]

A különféle elválasztók (fájl-, csoport-, rekord- és egységelválasztók) az adatok strukturálására készültek, főként szalagon tárolt adatok esetén, hogy szimulálni lehessen a lyukkártyákat. A „hordozó vége” figyelmeztetett a szalag (vagy bármi más) végére. Mivel a legtöbb mai rendszer a CR/LF és TAB karaktereket használja az adatok strukturálására (ezeket a karaktereket gyakran elválasztás vezérlő karaktereknek is nevezik), ezért inkább ezeket az elválasztás vezérlő karaktereket kell manapság használni, szemben a definiált vezérlő karakterekkel. Ezek a karakterek nem használhatók más célokra, nem átdefiniálhatók, csak és kizárólag adatok strukturált elválasztása és csoportosítása a feladatuk.

Adatátvitel vezérlése[szerkesztés | forrásszöveg szerkesztése]

Az adatátvitel vezérlésére használt/tervezett karakterek biztosítják, hogy a két végpont közötti adatátvitel vezérelhető, ellenőrizhető és megbízható (hibamentes) legyen – a lehetőségeken belül. A hibátlanság biztosítása végső esetben úgy történik, hogy ha a hiba nem javítható, akkor legalább azt a tényt jelzi, hogy nem biztosítható a hibamentes átvitel.

Az SOH (start of header – fejléc kezdete) jelzi, hogy nem adat-blokk következik – a blokk az adatátvitel vezérlése, ellenőrzése szempontjából fontos adatokat tartalmaz – indikátor funkciót lát el. A tényleges adatot – szöveget – az STX (start of text – szöveg kezdete) jelzi, vételét követően érkezik a valódi üzenet. Ha ez az üzenet szöveg, akkor semmi egyéb teendő nincsen vele, ha viszont bitsorozat, akkor a DLE vezérlő karakterek beszúrásával kell egy vezérlő karakter kódjával megegyező kódot „hatástalanítani”. Értelemszerűen a DLE kód is átvihető, ebben az esetben a DLE DLE megoldást kell használni. A szöveges vagy bitfolyam blokk végét az ETX (end of text – szöveg vége) karakter jelzi. Általában ezt a vezérlő karaktert két ellenőrző karakter követi, az úgynevezett checksum vagy ellenőrző összeg, illetve a CRC, amelyeket az adó oldalon az átvitt blokk alapján számolnak ki, és a vételi oldalon ellenőrzik a hibák kiszűrésére.

Az ESC (escape) karakter, annak ellenére, hogy vezérlő karakter, az adatátvitel vezérlésében általában nem vesz részt, azaz közönséges karakternek számít, mégis külön kell vele foglalkozni: általános szabály szerint DLE ESC formában átvihető az üzenetben, bizonyos eljárásokban azonban ESC ESC formában kell átvinni. A szükséges DLE ill. ESC beszúrásokat vagy az adatátviteli vezérlőnek, vagy – kevésbé intelligens berendezés esetében – a programozónak kell biztosítania a küldő oldalon, illetve a vevő oldalon gondoskodni kell az eltávolításukról.

A NAK karakter, a negatív nyugtázás egy olyan jelző, ami jelzi a küldő oldal számára, hogy az átvitel folyamán valamilyen rendellenesség történt. Általában a NAK vétele kiváltja az előző üzenet (adatblokk) újraküldését. Annak elkerülésére, hogy egy hiba állandó előfordulása miatt az újraküldések vételen ciklusba kerüljenek, az egymás követő negatív nyugtázások számát korlátozzák, és megszakítják az átvitelt a megfelelő hibajelzés kíséretével. A pozitív nyugtázás, az ACK hatására a következő adatblokk át lesz küldve, illetve egy EOT-vel jelezni tudja a küldő, hogy nincs több küldendő adata.

Ha az átviteli közeg fél-duplex, azaz egy időben csak egy átviteli irányban lehetséges átvitel a végpontok között, a vezérlő állomás (általában az, aki a kapcsolatfelvételt kezdeményezte, ha egyéb konvencióból ez nem derül ki) lehetőséget biztosít arra, hogy az ellenállomás vagy az ellenállomások több pontos kapcsolat esetében szintén küldhessenek adatokat. Erre szolgál az ENQ (enquiry – lekérdező) vezérlő karakter, amit csak a vezérlő állomás küldhet. A ENQ vételére az állomás vagy elküldi a jelzését, hogy van küldeni való adatblokkja, vagy jelzi, hogy nincsen küldeni valója. Maga az adatküldés a fentiekben leírtak alapján történik a másik irányban is. A lényeges különbség az, hogy a vezérlő (master) állomás megszakíthatja az adatküldést, és fordíthat az átviteli irányon, küldhet újabb adatokat, míg ilyet illetve ENQ küldést az alárendelt állomások nem tehetnek.

A különböző vezérlőkarakterek küldésén kívül még több időzítés kezelése is biztosítja, hogy az átvitel ellenőrizhető és kezelhető legyen, ne akadhasson fel.

Az eszköz vezérlő karaktereket eredetileg általános célokra tervezték, és minden berendezésben meg is valósították a kezelésüket. Gondot jelentett azonban, hogy az általános megoldásban nem volt lehetőség arra, hogy az átvitelt egy berendezés leállíthassa, mert például pillanatnyilag nem képes több adatot fogadni. A Digital Equipment Corporation kidolgozott egy megoldást, amelyben a 19-es kódot (az eszköz vezérlő 3 nevű karaktert, ami a Ctrl+S kombinációval lehet billentyűzetről generálni, vagy ismertebb nevén „X-OFF”) az átvitel leállítására, míg a 17-es kódot, (az eszköz vezérlő 2 nevű karaktert, ami a Ctrl+Q kombinációval lehet billentyűzetről generálni, vagy ismertebb nevén „X-ON”) az átvitel indítására lehet használni. A két karakter ilyen használata eltért az általánosan használt modellektől, viszont széles körben használhatónak bizonyult, főleg perifériák vezérlésére, ugyanis megtakarított egy kábeleret, és ezzel költséget lehetett csökkenteni.

Vegyes[szerkesztés | forrásszöveg szerkesztése]

A legtöbb ASCII vezérlő karakterre azért volt szükség, hogy bizonyos berendezések vagy eljárások vezérlésére lehetőség legyen, de ezek a berendezések és eljárások napjainkban egyre kevesebben vannak, vagy már el is tűntek a napi gyakorlatból. Például a 22-es kód, amit a szinkron modemek küldtek eredetileg, ma gyakorlatilag nem szükséges (egyre kevesebb a szinkron modem, más adatátviteli eljárások vannak használatban). A modern adatátviteli eljárások már bitorientáltak, szemben a régebbi karakter-orientált eljárásokkal, ahol vezérlő karaktereket használtak, míg ma vezérlő bitek, bitszekvenciák végzik a vezérlést.

A 0-s kód, a null karakter, egy speciális eset. A lyukszalagon azt jelentette, hogy nincsen lyukasztás, csak a továbbító lyuk. Ezért is nevezik „kitöltő” karakternek, egyéb jelentése, használata szinte nincs is. Bizonyos fordítóprogramok használják stringek végének jelzésére.

A 127-es kód szintén különleges eset. A „minden bit 1-ben” kód (binárisan) szolgált a lyukszalagon egy karakter törlésére – gyakran ezt kézi lyukasztóval végezték. A lyukszalag volt az egyik legtöbbet használt adathordozó amikor az ASCII kódot kidolgozták, de ha visszagondolunk a második világháborúban használt kódfejtő berendezésekre, ahol szintén lyukszalag volt az adathordozó, akkor szinte már történelmi távlatokra tekinthet vissza a lyukszalag. Ma viszont csak múzeumokban lelhető fel… Egyes rendszerek (például az eredeti Apple) a 127-es kódot visszalépésre konvertálták. Mivel ezt a karaktert ma szinte semmire sem használják, viszont a nyomtatható karakterek közül egy értékes helyet elvesz, mert semmilyen glifa nincsen hozzárendelve, néhány számítógépgyártó elkezdte nyomtatható karakternek használni (többnyire a teljesen fekete „doboz” karaktert rendelték hozzá), amit vagy törölni kívánt karakter átütésére (és így teljes törlésére), vagy grafikai megjelenítésre használtak. A 32 vezérlő karakter közül ma nagyjából 4-6 az, amit ténylegesen, eredeti funkciójának megfelelően használnak a korszerű alkalmazások: „kocsi-vissza”, „soremelés”, „tab”, „escape”, „visszalépés”. A legtöbb fájlrendszer nem engedi meg vezérlő karakterek használatát a fájlnevekben, mivel ezeknek egyéb fenntartott funkcióik lehetnek.

Külső hivatkozások[szerkesztés | forrásszöveg szerkesztése]