Řídicí znak

Řídicí znak (anglicky control character) ve výpočetní technice a v telekomunikacích je znak nebo přesněji kódový bod (anglicky code point), který nereprezentuje nějaký grafém (napsaný symbol, anglicky printing character, printable character nebo graphic character), ale má speciální význam pro zpracování textu (řetězce, souboru) nebo pro řízení přenosu. Proto se někdy řídicím znakům říká netisknutelné znaky (anglicky non-printing character).

Řídicí znaky jsou používány pro signalizaci v přenosovém kanálu (anglicky in-band signaling) pro dosažení jiného výsledku než přidání symbolu do textu. K těmto znakům patří i znaky CR a LF používané pro oddělování řádků textu.

V kódování ASCII jsou všechny znaky s kódem menším než 32 řídicí znaky (jsou označovány jako sada řídicích kódů C0). Řídicím znakem je i kód 127 (DEL).

Rozšířené ASCII sady definované standardem ISO/IEC 8859 doplňují sadu řídicích znaků o kódy 128 až 159, původně se záměrem, aby vynulováním nejvyššího bitu nedošlo ke změně tisknutelného znaku na řídicí kód z oblasti C0. Tato druhá sada řídicích znaků se nazývá sada C1. I v tomto rozsahu jsou definovány řídicí znaky, např. NEL.

65 řídicích kódů (po 32 z oblastí C0, C1 a znak DEL) bylo zahrnuto také do Univerzální znakové sady definované v Unicode/ISO/IEC 10646. Tato znaková sada obsahuje i další znaky, které by bylo možné považovat za řídicí (jako například oddělovač nulové šířky), ale místo řídicích znaků je nazývá "formátovací znaky" (anglicky format effectors).

Znaková sada EBCDIC obsahuje 65 řídicích kódů zahrnujících všech 33 řídicích znaků ASCII a přídavné kódy, které z větší části slouží pro řízení periferních zařízení vyráběných firmou IBM.


Řídicí znaky v ASCII

Norma ASCII z ní odvozené normy pro 7bitová kódování ISO/IEC 646, ECMA-6 a ITU T.50 rozdělují řídicí znaky v kódování, které definují, na sadu řídicích kódů C0 a znak DEL.

Sada řídicích kódů C0

Code
position
Kód
des. hex. okt. binárně
Unicode
code point
zkratkazápis
se ^
jazyk Canglickyčesky
0/00000000000000U+0000NUL^@\0nullprázdný znak
0/11010100000001U+0001SOH^Astart of headingzačátek záhlaví
0/22020200000010U+0002STX^Bstart of textzačátek textu
0/33030300000011U+0003ETX^Cend of textkonec textu
0/44040400000100U+0004EOT^Dend of tramsmissionkonec přenosu
0/55050500000101U+0005ENQ^Eenquirydotaz
0/66060600000110U+0006ACK^Facknowledgepotvrzení
0/77070700000111U+0007BEL^G\abellzvonek
0/88081000001000U+0008BS^H\bbackspacekrok zpět
0/99091100001001U+0009HT^I\thorizontal tabulationhorizontální tabulace
0/10100A1200001010U+000ALF^J\nline feedposuv o řádku
0/11110B1300001011U+000BVT^K\vvertical tabulationvertikální tabulace
0/12120C1400001100U+000CFF^L\fform feedposuv o stránku
0/13130D1500001101U+000DCR^M\rcarriage returnnávrat vozíku
0/14140E1600001110U+000ESO^Nshift-outzměna registru
0/15150F1700001111U+000FSI^Oshift-innávrat registru
1/016102000010000U+0010DLE^Pdata link escapeautoregistr 1
1/117112100010001U+0011DC1^Qdevice control oneovládáni zařízení 1
1/218122200010010U+0012DC2^Rdevice control twoovládání zařízení 2
1/319132300010011U+0013DC3^Sdevice control threeovládání zařízení 3
1/420142400010100U+0014DC4^Tdevice control fourovládání zařízení 4
1/521152500010101U+0015NAK^Unegative acknowledgenegativní potvrzení
1/622162600010110U+0016SYN^Vsynchronous idlesynchronizace
1/723172700010111U+0017ETB^Wend of transmission blockkonec přenosového bloku
1/824183000011000U+0018CAN^Xcancelzrušení
1/925193100011001U+0019EM^Yend of mediumkonec média
1/10261A3200011010U+001ASUB^Zsubstitute charactersubstituce znaku
1/11271B3300011011U+001BESC^[\eescapezměna významu
1/12281C3400011100U+001CFS^\file separatoroddělovač souborů
1/13291D3500011101U+001DGS^]group separatoroddělovač skupin
1/14301E3600011110U+001ERS^^record separatoroddělovač vět
1/15311F3700011111U+001FUS^_unit separatoroddělovač jednotek

Tabulka obsahuje různé metody zápisu řídicích znaků:

  • Code position je standardní zápis kódu v normě ISO/IEC 646 (ASCII) tvaru x/y; x je číslo sloupce, y je číslo řádku. Pro převod na lineární kód platí c = 16.x + y.
  • V dalších sloupcích jsou lineární kódy znaků zapsané v desítkové (dec.), šestnáctkové (hex.), osmičkové (okt.) a dvojkové soustavě (binárně).
  • Kódové body znaků z Unicode a ISO/IEC 10646 se zapisují velkým písmenem U následovaným znakem plus a kódem zapsaným v šestnáctkové soustavě (obvykle se používá alespoň čtyřciferný zápis kódu).
  • Řidící znaky mají zkratku tvořenou třemi nebo dvěma písmeny; kódové body U+2400 až U+241F Unicode jsou tisknutelné znaky, které se zobrazují jako zkratky řídicích znaků NUL až US.
  • Stříškový zápis je odvozený od způsobu zadávání znaků pomocí klávesy Control
  • Zápis pomocí obráceného lomítka a písmena, který zavedl jazyk C má pouze několik nejpoužívanějších znaků (\e je GNU rozšíření)
  • Anglický název řídicího znaku
  • Český název podle norem ČSN.

Další (nepříliš často používaný) způsob grafické reprezentace řídicích znaků popisuje norma ISO 2047; například znak BEL je znázorněn pomocí Unicode kódového bodu U+237E (⍾) „grafický znak pro zvonek“.

Další řídicí znaky v ASCII

Znak výmaz (DEL, delete) je řídicí znak, který nepatří do sady C0. Má kód 127 (U+007F).

Někdy se za řídicí znak považuje i znak mezera s kódem 32 (U+0020), která má kromě přidání mezery do textu i řídicí interpretaci posuv tiskové hlavy o jedno místo doprava.

Code
position
Kód
des. hex. okt. binárně
Unicode
code point
zkratkazápis
se ^
anglickyčesky
2/032204000100000U+0020SPspacemezera
7/151277F15701111111U+007FDEL^?deletevýmaz

Univerzální znaková sada obsahuje několik znaků pro znázornění mezery: U+2420 je její zkratka (SP), U+2422 je přeškrtnutí písmeno b, U+2423 je skobička. Znak U+2421 je zkratka pro DEL[1].

Řídicí znaky v osmibitových kódováních

Sada řídicích kódů C1

Rozšířené ASCII sady definované standardem ISO/IEC 8859 doplňují sadu řídicích znaků o kódy 128 až 159 nazývané sada C1. Tento prostor byl původně vytvořen se záměrem, aby vynulováním nejvyššího bitu nedošlo ke změně tisknutelného znaku na řídicí kód z oblasti C0, ale i v tomto prostoru jsou definovány řídicí znaky, např. znak NEL.

Kód
des. hex. okt. binárně
Unicode
code point
zkratkaEsc+anglickypoznámka
1288020010000000U+0080PAD@Padding CharacterChybí v 1. vydání ISO/IEC 6429 (ECMA-48). V prvních pracovních verzích ISO 10646 se používalo pro uvedení ne-ASCII znaků, v pozdějších verzích byla tato funkcionalita odstraněna.
1298120110000001U+0081HOPAHigh Octet Preset
1308220210000010U+0082BPHBBreak Permitted HereNásleduje za tisknutelným znakem, za kterým je povolen řádkový zlom. Má podobnou funkci jako měkké rozdělení, ale nepoužívá pomlčku pro označení rozdělení. Chybí v 1. vydání ISO/IEC 6429.
1318320310000011U+0083NBHCNo Break HereNásleduje za tisknutelným znakem, za kterým není povolen řádkový zlom. Chybí v 1. vydání ISO/IEC 6429.
1328420410000100U+0084INDDIndexPosune aktivní pozici o jeden řádek dolů. Na rozdíl od LF není víceznačné. Ve verzi ISO/IEC 6429 z roku 1988 označeno jako nedoporučované, ve verzi z roku 1992 vypuštěno (v normě ECMA-48 nedoporučované ve verzi z roku 1986, vypuštěné ve verzi z roku 1991).
1338520510000101U+0085NELENext LineEkvivalent CR+LF. Používané pro ukončení řádku na některých sálových počítačích firmy IBM.
1348620610000110U+0086SSAFStart of Selected AreaPoužíváno blokově orientovaným terminály jako IBM 3270.
1358720710000111U+0087ESAGEnd of Selected Area
1368821010001000U+0088HTSHCharacter Tabulation SetZpůsobí nastavení znakové tabelační pozice na aktuální pozici.
1378921110001001U+0089HTJICharacter Tabulation With JustificationPodobá se běžnému tabulátoru, ale následujíc znak bude nastaven před následující tabulační pozici.
1388A21210001010U+008AVTSJLine Tabulation SetZpůsobí nastavení řádkové tabelační pozice na aktuální řádek.
1398B21310001011U+008BPLDKPartial Line Forward (Partial Line Down)Používáno pro tisk dolních a horních indexů podle ISO/IEC 6429. Dolní index je PLD text PLU, horní index PLU text PLD.
1408C21410001100U+008CPLULPartial Line Backward (Partial Line Up)
1418D21510001101U+008DRIMReverse Line Feed
1428E21610001110U+008ESS2NSingle-Shift 2Další tisknutelný znak má být ze sady G2, příp. G3. Na systémech vyhovujících ISO/IEC 4873 (ECMA-43) mohou být tyto kódy použity k tomuto účelu, i když sada C1 je nastavena na jinou než implicitní hodnotu.
1438F21710001111U+008FSS3OSingle-Shift 3
1449022010010000U+0090DCSPDevice Control StringNásledovaný řetězcem tisknutelných znaků (s kódy 0x20-0x7E) a formátovacích efektorů (s kódy 0x08-0x0D) ukončeným znakem ST (s kódem 0x9C).
1459122110010001U+0091PU1QPrivate Use 1Rezervováno pro nestandardizované privátní funkce, jejichž použití podléhá dohodě mezi odesilatelem a příjemcem dat.
1469222210010010U+0092PU2RPrivate Use 2
1479322310010011U+0093STSSSet Transmit State
1489422410010100U+0094CCHTCancel CharacterDestruktivní backspace. Určeno pro odstranění nejednoznačnosti významu BS.
1499522510010101U+0095MWUMessage Waiting
1509622610010110U+0096SPAVStart of Protected AreaPoužíváno blokově orientovaným terminály jako IBM 3270.
1519722710010111U+0097EPAWEnd of Protected Area
1529823010011000U+0098SOSXStart of StringNásledováno řídicím řetězcem, který může obsahovat libovolný znak kromě SOS a ST, ukončeným znakem ST (s kódem 0x9C). Chybí v 1. vydání ISO/IEC 6429.
1539923110011001U+0099SGCIYSingle Graphic Character IntroducerNení součástí ISO/IEC 6429. V prvních pracovních verzích ISO 10646 se používalo pro zakódování jednoho ne-ASCII znaku, v pozdějších verzích byla tato funkcionalita odstraněna.
1549A23210011010U+009ASCIZSingle Character IntroducerMá být následován jedním tisknutelným znakem (s kódem 0x20-0x7E) nebo formátovacím efektorem (s kódem 0x08-0x0D). Určeno pro přenos řídicí funkce nebo tisknutelného znaku, který bude dostupný bez ohledu na zvolenou grafickou nebo řídicí sadu. Žádná mezinárodní norma nedefinuje význam následujícího znaku. Chybí v 1. vydání ISO/IEC 6429.
1559B23310011011U+009BCSI[Control Sequence IntroducerPoužívaný jako úvodní znak řídicích sekvencí s parametry.
1569C23410011100U+009CST\String Terminator
1579D23510011101U+009DOSC]Operating System CommandNásledovaný řetězcem tisknutelných znaků (s kódy 0x20-0x7E) a formátovacích efektorů (s kódy 0x08-0x0D) ukončeným znakem ST (s kódem 0x9C). Tyto 3 řídicí kódy byly určeny pro přenos protokolové informace v přenosovém kanálu, ale k tomuto účelu se používají zřídka.
1589E23610011110U+009EPM^Privacy Message
1599F23710011111U+009FAPC_Application Program Command

Řídicí znaky v EBCDIC

Znaková sada EBCDIC obsahuje 65 řídicích kódů zahrnujících všechny řídicí znaky ASCII a přídavné kódy, které z větší části slouží pro řízení periferních zařízení vyrobených firmou IBM.

Řídicí znaky v Unicode

V Unicode jsou znaky s kódy U+0000 – U+001F (řídicí sada C0), U+007F (znak DEL) a U+0080 – U+009F (řídicí sada C1) „řídicí znaky“ (anglicky Control-characters) s vlastností „Cc“. Od nich se liší formátovací kódy, které patří do kategorie "Cf". Řídicí znaky Cc nemají v Unicode jméno. Neformálně bývají označovány jako "<control-001A>"[2].

Řídicí znaky a klávesnice

Alfanumerické klávesnice obvykle obsahují klávesu označenou "Control", „Ctrl“ nebo (zřídka) „Cntl“, která se používá podobně jako klávesa Shift, tj. je nutné ji držet stisknutou při stisknutí jiné klávesy. Výsledkem by mělo být načtení řídicího znaku z klávesnice.

V jedné z implementací klávesa Control způsobuje, že se vygeneruje kód o 64 menší než je kód velkého písmene, které by klávesa normálně vracela (tj. odečtením 64 od ASCII kódu příslušného velkého písmene). Jiná implementace použije spodních 6 bitů ASCII kódu přiřazeného klávese (aplikací bitového AND s konstantou 31), čímž se vynulují bity 6 a 7. V obou případech stisknutí „Ctrl“ a klávesy "g" nebo "G" (s kódem 103 v osmičkové soustavě nebo 71 v desítkové soustavě, což je 01000111 ve dvojkové soustavě), produkuje kód 7 (Bell, 7 desítkově nebo osmičkově nebo 00000111 dvojkově).

Znak NULL (s kódem 0) je reprezentován Ctrl-@, protože znak "@" je ve znakové sadě ASCII před "A". Mnoho terminálů také přijímá kombinaci Ctrl-mezera jako jiný zápis pro Ctrl-@. V obou případech je výsledkem 32 řídicích kódů ASCII mezi 0 a 31. Tímto přístupem nelze reprezentovat znak DEL s kódem 127, tento znak se však obvykle zapisuje Ctrl-?, protože odečtením 64 od kódu '?' dostaneme −1, což při reprezentaci jako sedmibitové číslo bez znaménka dává 127.[3]

Při držení klávesy Control písmenové klávesy dávají stejné řídicí znaky bez ohledu na držení klávesy shift nebo stav přeřazovače caps lock. Jinak řečeno nezáleží, zda by klávesa dávala velká písmena nebo malá písmena. Interpretace Control s mezerou, grafický znak a číslicové klávesy (s ASCII kódy 32 až 63) jsou na různých systémech různé. Některé produkují stejné znakové kódy, jako kdyby klávesa Control nebyla stisknuta. Jiné systémy převádějí tyto klávesy na řídicí znaky když klávesa Control je držena. Interpretace klávesy Control s neASCII ("foreign") klávesou se také liší systém od systému.

Pro zkrácené vyjádření řídicích kláves se často používá stříškový zápis (anglicky caret notation), ve kterém se řídicí znak zapisuje jako znak stříška (^) následovaný ASCII znakem s kódem o 64 větším než je kód řídicího znaku. Řídicí znaky generované pomocí písmenové klávesy se zobrazují pomocí velkých písmen. Například ^G reprezentuje kód 7, který je generován stisknutím klávesy G při stisknuté klávese Control.

Klávesnice také obvykle obsahují několik kláves, které produkují kódy řídicích znaků. Například klávesa označená „Backspace“ obvykle produkuje kód 8, klávesa „Tab“ kód 9, klávesa „Enter“ nebo „Return“ kód 13 (na některých klávesnicích kód 10).

Mnoho klávesnic obsahuje další klávesy, které neodpovídají žádnému tisknutelnému ani řídicímu znaku ASCII, například klávesy pro pohyb kurzoru a klávesy používané pro ovládání textových procesorů. Stisky těchto kláves se předávají programu jednou ze čtyř metod:

  • využitím jinak nepoužitých řídicích znaků;
  • pomocí jiného kódování než ASCII;
  • pomocí víceznakových řídicích sekvencí;
  • pomocí přídavného mechanismu mimo generování znaků.

„Hloupé“ (anglicky Dumb) počítačové terminály obvykle používají řídicí sekvence. Klávesnice připojené k samostatným osobním počítačům vyrobeným v 80. letech 20. století obvykle používají jednu (nebo obě) z prvních dvou metod. Moderní počítačové klávesnice generují scan kódy, které identifikují stisknutí nebo puštění jednotlivých kláves; programové vybavení počítače pak určuje, jak zpracovávat klávesy, které jsou stisknuty, včetně libovolné ze čtyř metod popsaných výše.

Použití řídicích znaků

Při návrhu kódu ASCII byla každému řídicímu znaku přiřazena určitá funkce a způsob použití. Podle navrženého účelu lze řídicí znaky rozdělit do několika skupin: řízení tisku a zobrazování, strukturování dat, řízení přenosu a různé.

Fyzické ovládání zařízení

  • BS: Backspace (návrat o 1 znak zpět)
  • HT: Horizontal Tab (tabulátor)
  • LF: Line Feed (posun o 1 řádek dolů)
  • VT: Vertical Tab (vertikální tabulátor)
  • FF: Form Feed (posun na další stránku)
  • CR: Carriage Return (návrat tiskové hlavičky na začátek)

Fyzické ovládání zařízení: ostatní

  • BEL: Bell – zvonek
  • DC1, DC2, DC3, DC4: Device Controls – DC1 a DC3 se používají jako XON a XOFF v softwarovém řízení toku dat

Logické řízení komunikace

  • SOH: Start of Header – začátek hlavičky
  • STX: Start of Text – začátek textu
  • ETX: End of Text – konec textu
  • EOT: End of Transmission – konec vysílání
  • ENQ: Enquiry – dotaz (žádost o komunikaci)
  • ACK: Acknowledge – potvrzení (připravenosti ke komunikaci)
  • DLE: Data Link Escape – používá se pro kódování speciálních znaků
  • NAK: Negative Acknowledge – zamítnutí (žádosti o komunikaci)
  • SYN: Synchronous Idle
  • ETB: End of Transmission Block – konec přenosového bloku

Fyzické řízení komunikace

  • NUL: Null – „nic“
  • DEL: Delete – smazání
  • CAN: Cancel – zrušení
  • EM: End of Medium – konec média
  • SUB: Substitute – substituce

Oddělovače informací

  • FS: File Separator – oddělovač souboru
  • GS: Group Separator – oddělovač skupiny
  • RS: Record Separator – oddělovač záznamu
  • US: Unit Separator – oddělovač jednotek

Rozšiřování kódu

  • SI: Shift In
  • SO: Shift Out
  • ESC: Escape

Historie

Řídicí znaky byly součástí dálnopisných abeced; jednalo se o znak návrat vozíku (CR) a nový řádek (LF), znak zvonek (BEL), který způsobil zazvonění zvonku na upozornění operátora, i znak dotaz (kdo tam?, ENQ) pro vyžádání identifikačního kódu od protistanice.

Odkazy

Reference

V tomto článku byl použit překlad textu z článku Control character na anglické Wikipedii.

  1. The Unicode Standard. Control Pictures. Range: 2400–243F.
  2. [Obecné kategorie v Unicode 5.2, kapitola 4]
  3. ASCII Characters [online]. Wayback, 20091028135111. Dostupné v archivu pořízeném z originálu. 

Související články

Externí odkazy