Ří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 | 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
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
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 | 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
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 and XOFF v softwarovém handshakingu
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.
- The Unicode Standard. Control Pictures. Range: 2400–243F.
- [Obecné kategorie v Unicode 5.2, kapitola 4]
- ASCII Characters [online]. Wayback, 20091028135111. Dostupné v archivu pořízeném z originálu.
Související články
Externí odkazy
- ISO/IEC 6429:1992 (E), Informace Technology - Control funkce pro coded znakové sady
- ISO IR 1 C0 sada ISO/IEC 646 (PDF)