Ří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

editovat

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

editovat

Code
position
Kód
des. hex. okt. binárně
Unicode
code point
zkratka zápis
se ^
jazyk C anglicky česky
0/0 0 00 00 00000000 U+0000 NUL ^@ \0 null prázdný znak
0/1 1 01 01 00000001 U+0001 SOH ^A start of heading začátek záhlaví
0/2 2 02 02 00000010 U+0002 STX ^B start of text začátek textu
0/3 3 03 03 00000011 U+0003 ETX ^C end of text konec textu
0/4 4 04 04 00000100 U+0004 EOT ^D end of tramsmission konec přenosu
0/5 5 05 05 00000101 U+0005 ENQ ^E enquiry dotaz
0/6 6 06 06 00000110 U+0006 ACK ^F acknowledge potvrzení
0/7 7 07 07 00000111 U+0007 BEL ^G \a bell zvonek
0/8 8 08 10 00001000 U+0008 BS ^H \b backspace krok zpět
0/9 9 09 11 00001001 U+0009 HT ^I \t horizontal tabulation horizontální tabulace
0/10 10 0A 12 00001010 U+000A LF ^J \n line feed posuv o řádku
0/11 11 0B 13 00001011 U+000B VT ^K \v vertical tabulation vertikální tabulace
0/12 12 0C 14 00001100 U+000C FF ^L \f form feed posuv o stránku
0/13 13 0D 15 00001101 U+000D CR ^M \r carriage return návrat vozíku
0/14 14 0E 16 00001110 U+000E SO ^N shift-out změna registru
0/15 15 0F 17 00001111 U+000F SI ^O shift-in návrat registru
1/0 16 10 20 00010000 U+0010 DLE ^P data link escape autoregistr 1
1/1 17 11 21 00010001 U+0011 DC1 ^Q device control one ovládáni zařízení 1
1/2 18 12 22 00010010 U+0012 DC2 ^R device control two ovládání zařízení 2
1/3 19 13 23 00010011 U+0013 DC3 ^S device control three ovládání zařízení 3
1/4 20 14 24 00010100 U+0014 DC4 ^T device control four ovládání zařízení 4
1/5 21 15 25 00010101 U+0015 NAK ^U negative acknowledge negativní potvrzení
1/6 22 16 26 00010110 U+0016 SYN ^V synchronous idle synchronizace
1/7 23 17 27 00010111 U+0017 ETB ^W end of transmission block konec přenosového bloku
1/8 24 18 30 00011000 U+0018 CAN ^X cancel zrušení
1/9 25 19 31 00011001 U+0019 EM ^Y end of medium konec média
1/10 26 1A 32 00011010 U+001A SUB ^Z substitute character substituce znaku
1/11 27 1B 33 00011011 U+001B ESC ^[ \e escape změna významu
1/12 28 1C 34 00011100 U+001C FS ^\ file separator oddělovač souborů
1/13 29 1D 35 00011101 U+001D GS ^] group separator oddělovač skupin
1/14 30 1E 36 00011110 U+001E RS ^^ record separator oddělovač vět
1/15 31 1F 37 00011111 U+001F US ^_ unit separator oddě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

editovat

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
zkratka zápis
se ^
anglicky česky
2/0 32 20 40 00100000 U+0020 SP space mezera
7/15 127 7F 157 01111111 U+007F DEL ^? delete vý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

editovat

Sada řídicích kódů C1

editovat

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
zkratka Esc+ anglicky poznámka
128 80 200 10000000 U+0080 PAD @ Padding Character Chybí 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.
129 81 201 10000001 U+0081 HOP A High Octet Preset
130 82 202 10000010 U+0082 BPH B Break Permitted Here Ná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.
131 83 203 10000011 U+0083 NBH C No Break Here Následuje za tisknutelným znakem, za kterým není povolen řádkový zlom. Chybí v 1. vydání ISO/IEC 6429.
132 84 204 10000100 U+0084 IND D Index Posune 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).
133 85 205 10000101 U+0085 NEL E Next Line Ekvivalent CR+LF. Používané pro ukončení řádku na některých sálových počítačích firmy IBM.
134 86 206 10000110 U+0086 SSA F Start of Selected Area Používáno blokově orientovaným terminály jako IBM 3270.
135 87 207 10000111 U+0087 ESA G End of Selected Area
136 88 210 10001000 U+0088 HTS H Character Tabulation Set Způsobí nastavení znakové tabelační pozice na aktuální pozici.
137 89 211 10001001 U+0089 HTJ I Character Tabulation With Justification Podobá se běžnému tabulátoru, ale následujíc znak bude nastaven před následující tabulační pozici.
138 8A 212 10001010 U+008A VTS J Line Tabulation Set Způsobí nastavení řádkové tabelační pozice na aktuální řádek.
139 8B 213 10001011 U+008B PLD K Partial 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.
140 8C 214 10001100 U+008C PLU L Partial Line Backward (Partial Line Up)
141 8D 215 10001101 U+008D RI M Reverse Line Feed
142 8E 216 10001110 U+008E SS2 N Single-Shift 2 Další 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.
143 8F 217 10001111 U+008F SS3 O Single-Shift 3
144 90 220 10010000 U+0090 DCS P Device Control String Ná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).
145 91 221 10010001 U+0091 PU1 Q Private Use 1 Rezervováno pro nestandardizované privátní funkce, jejichž použití podléhá dohodě mezi odesilatelem a příjemcem dat.
146 92 222 10010010 U+0092 PU2 R Private Use 2
147 93 223 10010011 U+0093 STS S Set Transmit State
148 94 224 10010100 U+0094 CCH T Cancel Character Destruktivní backspace. Určeno pro odstranění nejednoznačnosti významu BS.
149 95 225 10010101 U+0095 MW U Message Waiting
150 96 226 10010110 U+0096 SPA V Start of Protected Area Používáno blokově orientovaným terminály jako IBM 3270.
151 97 227 10010111 U+0097 EPA W End of Protected Area
152 98 230 10011000 U+0098 SOS X Start of String Ná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.
153 99 231 10011001 U+0099 SGCI Y Single Graphic Character Introducer Není 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.
154 9A 232 10011010 U+009A SCI Z Single Character Introducer Má 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.
155 9B 233 10011011 U+009B CSI [ Control Sequence Introducer Používaný jako úvodní znak řídicích sekvencí s parametry.
156 9C 234 10011100 U+009C ST \ String Terminator
157 9D 235 10011101 U+009D OSC ] Operating System Command Ná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.
158 9E 236 10011110 U+009E PM ^ Privacy Message
159 9F 237 10011111 U+009F APC _ Application Program Command

Řídicí znaky v EBCDIC

editovat

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

editovat

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

editovat

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ů

editovat

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í

editovat
  • 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í

editovat

Logické řízení komunikace

editovat
  • 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

editovat
  • 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í

editovat
  • 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

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

Historie

editovat

Ří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.

Reference

editovat

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

editovat

Externí odkazy

editovat