Man console_codes (4): sekvence escape a escape konzole Linux

Linuxová konzole má velkou sadu ovládacích prvků pro terminály VT102 a ECMA-48/ISO 6429/ANSI X364 a také řadu jednotlivých sekvencí pro změnu barevná paleta, převody znakových sad atd. Níže uvedené tabulky (druhý sloupec) označují mnemotechnický kód ECMA-48 nebo DEC (pokud je DEC přiřazen k DEC) pro tuto funkci. Sekvence bez mnemotechnického kódu nepatří do ECMA-48 ani do VT102.

První proces, který se provádí po práci normální proces pro výstup informací a odeslání proudu znaků konzoly do ovladače (pro jejich skutečný výstup), je překlad kódů používaných při běžném provozu na kódy používané pro tisk.

Pokud konzola běží v režimu UTF-8, jsou příchozí bajty nejprve uspořádány do 16bitového Unicode. Jinak je každý bajt převeden podle aktuální vyhledávací tabulky (která převádí data do Unicode). Viz sekce Znakové sady níže).

Obvykle jsou hodnoty Unicode převedeny na index písem, který je uložen ve video paměti tak, že se na obrazovce objeví odpovídající obrázek (nacházející se ve video ROM). Všimněte si, že práce s Unicode (a současným počítačovým hardwarem) umožňuje současné použití pouze 512 různých obrázků.

Pokud je aktuální hodnotou Unicode řídicí znak nebo pokud se právě zpracovává sekvence escape, bude s hodnotou zacházeno jinak. Místo toho, aby byla hodnota převedena na písmo a zobrazena jako obrázek, způsobí provedení specifické akce (jako je pohyb kurzoru) nebo jiné ovládací funkce. Viz část níže Správa konzole Linux.

Je nesprávné explicitně specifikovat hardwarové sekvence ovládání terminálu v programech. Linux podporuje základnu funkčnosti terminálu terminfo(5). Namísto ručního zadávání escape sekvencí budete pravděpodobně chtít použít knihovnu, která k provedení práce používá terminfo nebo jiné nástroje, jako např. ncurses(3), tput(1) nebo resetovat(1).

Správa konzole Linux

Tato část popisuje všechny řídicí znaky a sekvence escape, které se provádějí speciální týmy(tj. cokoli jiného než pouhé vytištění znaku na aktuální pozici kurzoru) konzole Linux.

Řídící znaky

Znak je považován za řídicí znak, pokud (před převodem podle převodní tabulky) obsahuje jeden ze 14 kódů: 00 (NUL), 07 (BEL), 08 (BS), 09 (HT), 0a (LF), 0b (VT), 0c (FF), 0d (CR), 0e (SO), 0f (SI), 18 (CAN), 1a (SUB), 1b (ESC), 7f (DEL). Můžete nastavit režim „zobrazit řídicí znaky“ (viz níže), v tomto případě se znaky 07, 09, 0b, 18, 1a, 7f zobrazí na obrazovce jako obrázky. Na druhou stranu v režimu UTF-8 jsou všechny kódy 00 až 1f považovány za řídicí znaky, bez ohledu na režim „zobrazit řídicí znaky“.

Pokud je nalezen řídicí znak, je okamžitě zohledněn a nemá žádný další účinek (i když byl uprostřed sekvence escape) a řídicí sekvence pokračuje od dalšího znaku. Znak ESC zahajující novou escape sekvenci však pravděpodobně zruší neúplnou předchozí sekvenci a znaky CAN a SUB definitivně ukončí jakoukoli escape sekvenci. Rozpoznané řídicí znaky jsou: BEL, BS, HT, LF, VT, FF, CR, SO, SI, CAN, SUB, ESC, DEL, CSI. Provádějí za ně standardní akce:

BEL(0x07, ^G) vydá pípnutí; BS(0x08,^H ) smaže předchozí znak (posune o jeden sloupec doleva, ne však dále než na začátek řádku); HT(0x09, ^I) přesune se na další zarážku tabulátoru nebo na konec řádku, pokud předtím nebyly žádné zarážky nastaveny; LF (0x0A,^J ), VT (0x0B,^K ) a FF (0x0C,^L ) nastavit posun řádku a LF/NL (v režimu nového řádku) provede návrat vozíku; CR(0x0D, ^M) určuje návrat vozíku; SO(0x0E,^N ) aktivuje znakovou sadu G1; SI(0x0F, ^[ ^O

) napájí sadu symbolů G0;

CAN (0x18,^X) a SUB (0x1A,
^Z) přerušit sekvenci screeningu;ESC (0x1B,
) zahájit sekvenci screeningu;DEL (0x7F) je ignorováno;CSI (0x9B) je ekvivalentní ESC [.
ESC, ale ne CSI sekvenceESC cRIS
Resetovat.ESC DIND
Posuv řádku.ESC ENEL
Nová řada.ESC HHTS
Nastavte zarážku tabulátoru v aktuálním sloupci.ESC MR.I.
Reverzní posuv řádku.ESC ZZačátek kontrolní sekvence
ESC %Spusťte sekvenci s výběrem znakové sady
ESC % @výchozí výběr (ISO 646/ISO 8859-1)
ESC % Gvyberte UTF-8
ESC % 8vyberte UTF-8 (zastaralé)
ESC#8DECALNTest zarovnání obrazovky DEC: Vyplní obrazovku znaky E.
ESC (Začněte sekvenci výběrem znakové sady G0
ESC (Bvýchozí výběr (převod ISO 8859-1)
ESC (0výběr grafického překódování VT100
ESC (Ubez překódování --- přímo do znakové ROM
ESC(Kuživatelské překódování --- mapa
načteno utilitou mapscrn(8).
ESC)Začněte sekvenci výběrem znakové sady G1
(následovaný jedním ze symbolů B, 0, U, K, jako u G0).
ESC >DECPNMNastavte režim zadávání čísel pro přídavnou klávesnici
ESC =DECPAMNastavte režim ovládání pro další klávesnici
ESC]O.S.C.(Mělo by být: příkaz operační systém, OSC) ESC ] P nrrggbb: nastavení palety, parametr určuje 7 hexadecimálních znaků za posledním P:-(. Zde n nastaví barvu (0-15) a in rrggbb jsou uvedeny hodnoty červená/zelená/modrá (0-255). ESC ] R: Resetovat paletu

ECMA-48 CSI sekvence

Po CSI (nebo ESC[) následuje sekvence parametrů, což jsou desetinná čísla oddělená středníky (největší je NPAR(16)). Prázdný nebo chybějící parametr se rovná nule. Posloupnost parametrů může začínat jedním otazníkem.

Po CSI [ (nebo ESC [ [) se však přečte jeden znak a zbytek sekvence je ignorován. (Smyslem toho je nezobrazovat funkční klávesa).

Výsledek sekvence CSI je určen jejím koncovým znakem.

@ ICHVložte N prázdných znaků.
ACUUPosuňte kurzor o N řádků nahoru.
BCUD
CCUF
DMLÁDĚPřesuňte kurzor na levých N sloupců.
ECNLPřesuňte kurzor o N řádků dolů do sloupce 1.
FCPLPřesuňte kurzor o N řádků nahoru do sloupce 1.
GCHA
HPOHÁRPřesuňte kurzor na zadaný řádek a sloupec (začít na 1,1).
JEDVymažte obrazovku (ve výchozím nastavení od kurzoru po konec obrazovky).
ESC [ 1 J: Vymazání od začátku po kurzor.
ESC [ 2 J: Vymazání celé obrazovky.
ESC [ 3 J: vymazání celé obrazovky včetně vyrovnávací paměti
zpětný posun (od Linuxu 3.0).
KELVymazat řádek (výchozí od kurzoru po konec řádku).
ESC [ 1 K: Vymazání od začátku řádku ke kurzoru.
ESC [ 2 K: Vymazat celý řádek.
LILVložit N prázdné řádky.
MD.L.Smazat N řádků.
PDCHOdstraňte N znaků aktuální linka.
XECHVymažte N znaků v aktuálním řádku.
AHPRPřesuňte kurzor na pravých N sloupců.
CD.A.Odezva ESC [ ? 6 c: „Jsem terminál VT102.“
dVPAPřesuňte kurzor na určený řádek aktuálního sloupce.
EVPRPosuňte kurzor o N řádků dolů.
FHVPPřesuňte kurzor na určený řádek a sloupec.
GTBCŽádný parametr: Vymaže aktuální zarážku tabulátoru.
ESC [ 3 g: odstranění všech zarážek tabulátoru.
hS.M.Režim instalace (viz níže).
lR.M.Resetovací režim (viz níže).
mSGRNastavení atributů (viz níže).
nDSRZpráva o stavu (viz níže).
qDECLLOvládání indikátorů na klávesnici.
ESC [ 0 q: vypnutí všech indikátorů
ESC [ 1 q: povolit Scroll Lock
ESC [ 2 q: povolit Num Lock
ESC [ 3 q: povolit Caps Lock
rDECSTBMNastavit oblast posouvání; parametry budou horní a dolní řádky.
s? Uložit umístění kurzoru.
u? Obnovte umístění kurzoru.
` HPAPřesuňte kurzor na zadaný sloupec aktuální linka.

Nastavení grafických možností ECMA-48

ECMA-48 SGR sekvence řídicích znaků ESC [ parametry m nastavuje atributy obrazovky. V jedné sekvenci lze zadat několik atributů. Prázdný parametr (mezi středníkem nebo úvodní čárou nebo znakem na konci) je považován za nulu.

parametrvýsledek
0 obnovit všechny atributy na jejich výchozí hodnoty
1 nastavit tučně
2 nastaveno na jasnější (simulováno barvou na barevném displeji)
4 nastavit podtržení (simulováno barvou na barevném displeji) (barvy používané k simulaci ztmavení nebo podtržení se nastavují pomocí ESC ] ...)
5 zapnout blikání
7 povolit inverzi videa
10 resetovat vybrané překódování, příznak ovládání obrazovky a přepnout meta příznak (v ECMA-48 specifikovaný jako "primární písmo").
11 vyberte nulové překódování, nastavte příznak ovládání obrazovky, resetujte přepínač příznaků meta (v ECMA-48 je specifikován jako „první alternativní písmo“).
12 vyberte null recoding, nastavte příznak ovládání obrazovky, nastavte přepínač meta příznaku (v ECMA-48 je specifikován jako „druhý alternativní font“). Přepnutí příznaku meta způsobí, že nejvýznamnější bit v bajtu se přepne, než je překódován podle překladové tabulky.
21 povolit normální intenzitu (v ECMA-48 specifikovanou jako "dvojité podtržení")
22 zapněte normální intenzitu
24 vypnout podtržení
25 vypněte blikání
27 vypnout obrácené video
30 nastavit barvu znaku na černou
31 nastavte barvu symbolu na červenou
32 nastavte barvu symbolu na zelenou
33 instalovat hnědý postavy
34 instalovat modrý postavy
35 nastavte barvu symbolu na lila
36 nastavte barvu symbolu na modrou
37 instalovat bílý postavy
38 povolit podtržení, nastavit výchozí barvu znaků
39 vypnout podtržení, nastavit výchozí barvu znaků
40 nastavit barvu pozadí na černou
41 nastavit barvu pozadí červenou
42 nastavte barvu pozadí na zelenou
43 nastavte barvu pozadí na hnědou
44 nastavte barvu pozadí na modrou
45 nastavit barvu pozadí na lila
46 nastavte barvu pozadí na modrou
47 nastavte barvu pozadí na bílou
49 nastavit výchozí barvu pozadí

Přepínače režimu ECMA-48

ESC [ 3 h DECCRM (výchozí vypnuto): Zobrazit řídicí znaky.

ESC [ 4 h DECIM (výchozí vypnuto): Povolí režim vkládání.

ESC [ 20 h LF/NL (výchozí vypnuto): Automaticky vydává kód CR po LF, VT nebo FF. Stavové výstupní příkazy ECMA-48 ; ESC [ 5 n Zpráva o stavu zařízení (DSR): Odpověď je ESC [ 0 n (svorka je v pořádku). ESC [ 6 n Zpráva o poloze kurzoru (CPR): Odpověď je ESC [ y x

R, kde

x, y jsou souřadnice kurzoru. Sekvence speciálního režimu DEC (DECSET/DECRST)

ESC [ ? 1 h DECCKM (výchozí vypnuto): Když je povoleno, kurzorové klávesy posílají předponu ESC O místo ESC [.

Následující sekvence nejsou ani ECMA-48 ani VT102. Jsou k dispozici pouze v ovladači konzoly Linux. Barvy v parametrech SGR: 0 = černá, 1 = červená, 2 = zelená, 3 = hnědá, 4 = modrá, 5 = lila, 6 = světle modrá, 7 = bílá.

ESC[1; n ] Nastavit barvu n jako barvu podtržení
ESC[2; n ] Nastavit barvu n jak barva vybledne
ESC [8]Nastavte aktuální pár barev jako výchozí atributy.
ESC[9; n ] Poté vypněte obrazovku n zápis.
ESC [10; n ] Nastavte frekvenci zvukový signál(v hertzech).
ESC[11; n ] Nastavte dobu trvání zvukového signálu (v milisekundách).
ESC[12; n ] Přesuňte určenou konzolu před ostatní.
ESC [13]Zapněte obrazovku.
ESC[14; n ] Nastavte interval vypnutí VESA (v minutách).
ESC [15]Přesuňte předchozí konzolu před ostatní (od Linuxu 2.6.0).
ESC[16; n ] Nastavte interval blikání kurzoru v milisekundách (od Linuxu 4.2)

Znakové sady

Jádro má informace o 4 typech překladu bajtů do znaků konzole obrazovky. Tyto čtyři tabulky jsou: a) Latin1 -> PC, b) grafika VT100 -> PC, c) PC -> PC, d) definovaná uživatelem.

V systému jsou dvě znakové sady, nazývané G0 a G1, a jedna z nich je aktuální znaková sada systému (původně G0). Vstupte ) nastavit posun řádku a LF/NL (v režimu nového řádku) provede návrat vozíku; způsobí, že se nastavení G1 stane aktuálním, ^M nastaví G0 aktuální.

Tyto proměnné G0 a G1 ukazují na překladovou tabulku a uživatel je může změnit. Zpočátku ukazují na tabulky a) a b). Sekvence ESC(B, ESC(0, ESC(U a ESC(K) způsobují, že GO odkazuje na translační tabulky a), b), c) ad). Sekvence ESC) B, ESC) 0, ESC) U a ESC) K způsobují, že G1 odkazuje na translační tabulku a), b), c) ad).

Sekvence ESC c resetuje terminál, což je to, co byste chtěli udělat, když je na obrazovce nevyžádaná pošta. Doporučení uvedené po "echo ^V^O" učiní pouze G0 aktuální sadu, ale není zaručeno, že G0 ukazuje na tabulku a). Některé distribuce mají program resetovat(1), který pouze provede příkaz „echo ^ . Bitmapa odpovídající s je vyhledána v symbolové ROM a lze ji změnit pomocí setfont(8).

Sledování myši

Pro sledování aktivity myši má systém vydat xterm(1)-kompatibilní signály stavu myši. Protože ovladač konzoly nerozpozná zařízení, jako je myš (nebo podobného typu), jsou tyto signály odeslány do vstupního proudu konzoly pouze tehdy, když ovladač virtuálního terminálu přijme signál ioctl k aktualizaci stavu myši. Tyto signály ioctl musí být generovány uživatelskými aplikacemi s podporou myši, jako je služba gpm(8).

Parametr pro všechny vytvořené xterm(1) escape sekvence (signály z myši) budou jeden znak, jehož kód se rovná význam+040. Například "!" odpovídá jednomu. Zpráva o souřadnicovém systému obrazovky začíná na 1.

V režimu kompatibility X10 odesílají stisknutí tlačítka sekvence escape, které zakódují umístění myši i informace o stisknutém tlačítku. Režim se aktivuje, když ESC [? 9 h a vypne se, když ESC [ ? 9 l. Když stisknete tlačítko xterm(1) odešle ESC [ M bxy(6 znaků), kde b je tlačítko 1 a x a y jsou souřadnice x a y při stisknutí tlačítka. Jsou to stejné kódy, které generuje a vydává jádro.

V normální režim Sledování myši (které nebylo implementováno v Linuxu 2.0.24) sekvence escape se odesílají při stisknutí a uvolnění tlačítka myši. Odesílají se také informace o modifikátoru. Režim se aktivuje, když ESC [? 1 000 h a vypne se při vydání ESC [ 1 000 l. Když stisknete nebo uvolníte tlačítko xterm(1) vydává ESC [ M bxy. Dva nejméně významné bity b obsahují informace o tlačítkách: 0=stisknuto MB1, 1=stisknuto MB2, 2=stisknuto MB3, 3=uvolněno. Nejvýznamnější bity obsahují informaci o tom, které modifikátory byly stisknuty při stisku tlačítka. Tyto informace se přidají, když stisknete: 4=Shift, 8=Meta, 16=Control. Znovu: ESC [ 5 n Zpráva o stavu zařízení (DSR): Odpověď je ESC [ 0 n (svorka je v pořádku). A Stavové výstupní příkazy ECMA-48 jsou souřadnice x a y myši při zpracování události. Souřadnice levého horního rohu jsou považovány za (1,1).

Srovnání s jinými terminály

Mnoho dalších typů terminálů je popsáno jako linuxová konzole jako kompatibilní s VT100. Dále probereme rozdíly mezi linuxovou konzolí a dalšími dvěma hlavními typy --- DEC VT102 a xterm(1).

Manipulace s řídicími znaky

Typ VT102 také rozpoznává následující řídicí znaky:

NUL (0x00) je ignorováno; ENQ (0x05) spouští zprávu s odpovědí; DC1(0x11, ^Q, XON) obnoví přenos;

DC3 (0x13,

^S , XOFF) způsobí, že VT100 bude ignorovat (a přestane vysílat) všechny kódy kromě XOFF a XON. V ovladači terminálu lze povolit zpracování DC1/DC3 podobné VT100.ESC] 0; , XOFF) způsobí, že VT100 bude ignorovat (a přestane vysílat) všechny kódy kromě XOFF a XON..
txt , XOFF) způsobí, že VT100 bude ignorovat (a přestane vysílat) všechny kódy kromě XOFF a XON. V ovladači terminálu lze povolit zpracování DC1/DC3 podobné VT100.Nastavte název ikony na stejný , XOFF) způsobí, že VT100 bude ignorovat (a přestane vysílat) všechny kódy kromě XOFF a XON..
ESC] 2; , XOFF) způsobí, že VT100 bude ignorovat (a přestane vysílat) všechny kódy kromě XOFF a XON. V ovladači terminálu lze povolit zpracování DC1/DC3 podobné VT100.Nastavit titulek okna na , XOFF) způsobí, že VT100 bude ignorovat (a přestane vysílat) všechny kódy kromě XOFF a XON..
ESC] 4; č; , XOFF) způsobí, že VT100 bude ignorovat (a přestane vysílat) všechny kódy kromě XOFF a XON. V ovladači terminálu lze povolit zpracování DC1/DC3 podobné VT100.Nastavte barvu ANSI č rovný , XOFF) způsobí, že VT100 bude ignorovat (a přestane vysílat) všechny kódy kromě XOFF a XON..
ESC] 10; , XOFF) způsobí, že VT100 bude ignorovat (a přestane vysílat) všechny kódy kromě XOFF a XON. V ovladači terminálu lze povolit zpracování DC1/DC3 podobné VT100.Nastavit barvu dynamického textu na , XOFF) způsobí, že VT100 bude ignorovat (a přestane vysílat) všechny kódy kromě XOFF a XON..
ESC] 46; jméno V ovladači terminálu lze povolit zpracování DC1/DC3 podobné VT100.Změňte soubor protokolu na jméno(obvykle zakázáno
v možnostech kompilace)
ESC] 50; fn V ovladači terminálu lze povolit zpracování DC1/DC3 podobné VT100.Nainstalujte písmo fn.

Uznáno následující parametry s mírně změněnou hodnotou (stav je zachovalejší, chování se blíží VT100/VT220):

ESC 7 DECSCUložit kurzor
ESC 8 DECRCObnovit kurzor

Také uznáno

Rozpozná také ESC % a poskytuje úplnější implementaci UTF-8 než konzole Linux.

CSI sekvence

Staré verze xterm(1), například z X11R5, vnímají blikání SGR jako tučnost SGR. Novější verze, které implementují barvy ANSI, jako je XFree86 3.1.2A z roku 1995, zobrazují atribut blikání barevně. V moderních verzích xterm je blikání SGR implementováno jako blikající text, který může být také barevný jako alternativa k zobrazení SGR. Původní verze X11R6 nerozpoznaly nastavení barev SGR až do verze X11R6.8, která obsahovala XFree86 xterm. Všechny ECMA-48 CSI CSI sekvence, kterým Linux rozumí, jsou také srozumitelné xterm, nicméně v xterm(1) Existuje několik implementovaných řídicích sekvencí ECMA-48 a DEC, kterým Linux nerozumí.

Naprogramovat xterm(1) rozpoznává všechny sekvence speciálního režimu DEC popsané výše, ale žádnou ze sekvencí speciálních režimů Linuxu. O vlastních speciálních režimech xterm(1) si můžete přečíst v dokumentu Xterm escape sekvence, napsali Edward Moy, Stephen Gildea a Thomas E. Dickey a je k dispozici v distribuci X Tento dokument, i když je zkrácen, je stále mnohem větší než tato manuálová stránka. Chronologický přehled v

popisuje změny v xterm.

Naprogramovat vttest

demonstruje mnoho z těchto kontrolních sekvencí. V původní distribuci xterm(1) obsahuje také ukázkové skripty, které vás naučí pracovat s dalšími vlastnostmi.

POZNÁMKY

Sekvence ESC 8 (DECRC) nemůže obnovit znakovou sadu změněnou o ESC %.

VADY

Ve verzi 2.0.23 je sada CSI nesprávná a neefektivní hodnoty NUL nejsou v rámci escape sekvencí ignorovány.

Některé starší verze jádra (po 2.0) analyzují 8bitové sekvence escape. Tyto ("řídicí kódy C1") používají kódy 128 až 159 k nahrazení ESC [, ESC ] a podobných počátečních dvoubajtových řídicích sekvencí. Částečně existují v moderní jádra(nebo nejsou rozpoznány nebo nefungují kvůli podpoře UTF-8) a nejsou plně implementovány a měly by být považovány za nespolehlivé.

Linuxové sekvence "speciálního režimu" nerespektují pravidla ECMA-48 pro speciální sekvence escape. Konkrétně končí na ] a nepoužívají standardní terminátor. OSC sekvence (nastavit paletu) --- velký problém, protože xterm(1) to považuje za únikovou sekvenci, která vyžaduje konec řádku (ST). Na rozdíl od sekvencí setterm(1), které budou ignorovány (protože se nejedná o platné escape sekvence), sekvence palety způsobí zablokování xterm(1) (ačkoli stisknutí tlačítka návratu to vyřeší). Chcete-li vyhovět aplikacím, které mají napevno zakódované sekvence escape pro Linux, nainstalujte prostředek xterm(1) nefunkční LinuxOSC rovná se pravdě.

V stará verze tohoto dokumentu Linux měl rozpoznat únikovou sekvenci ECMA-48 pro neviditelnost textu. Je ignorována.

JMÉNO
console_codes - ovládací a ESC sekvence
Linuxové konzole

POPIS
Linuxová konzole má velkou sadu nástrojů pro správu
Terminály VT102 a ECMA-48/ISO 6429/ANSI X3.64, stejně jako
nějaký počet soukromých sekvencí pro
změny v paletě barev, rozložení znaků
vytáčení atd. V tabulkách níže (ve druhé
sloupec), je uveden mnemotechnický kód ECMA-48 nebo DEC
(pokud je DEC přiřazeno k DEC) této funkce.
Sekvence bez mnemotechnického kódu nepatří
ani na ECMA-48 ani na VT102.

První proces, který se provádí po práci
obvyklý proces výstupu informací a jejich odesílání
konzolový ovladač streamu postav (pro jejich skutečný
výstup), je překlad kódů používaných v normálním
práce, do kódů používaných pro tisk.

Pokud konzola běží v režimu UTF-8, pak příchozí bajty
jsou nejprve organizovány v 16bitovém Unicode. Jinak
každý bajt se převede podle aktuální tabulky
distribuce, která převádí data do Unicode. (Podívejte
sekce ZNAKOVÉ SADA níže).

Obvykle jsou hodnoty Unicode převedeny na index písem,
který je uložen ve video paměti takovým způsobem, že
zobrazí se odpovídající glyf (nalezený ve video ROM).
na obrazovce. Všimněte si, že práce s Unicode (a aktuální
počítačový hardware) umožňuje současně
použijte pouze 512 glyfů.

Pokud je aktuální hodnota Unicode řídicí znak
nebo pokud v momentálně zpracováno
ESC sekvence, hodnota bude zpracována
zvláštním způsobem. Místo převodu hodnoty
do písma a zobrazí se jako glyf, provede se
určité akce (například pohyb kurzoru) popř
provádět jakékoli další řídící funkce.
Viz část SPRÁVA KONZOLE LINUX níže.

Je nesprávné striktně přiřazovat ovládání programům
terminál. Linux podporuje práci s databází
schopnosti terminálu. terminfo(5). Raději ne
zadejte řídicí sekvence ESC ručně, vy
pravděpodobně jej budete chtít použít pro tuto práci
informační knihovna obrazovek s ohledem na terminfo nebo jiné
nástroje jako: ncurses(3), tput(1) nebo reset(1).

SPRÁVA KONZOLE LINUX
Tato část popisuje všechny řídicí znaky a
ESC sekvence, které provádějí speciální
příkazy (tj. cokoli jiného než jednoduchý výstup
znak na aktuální pozici kurzoru) na konzole Linux.

Řídící znaky
Symbol je považován za kontrolní symbol if (před převodem
podle převodní tabulky) obsahuje jeden ze 14
kódy: 00 (NUL), 07 (BEL), 08 (BS), 09 (HT), 0a (LF), 0b
(VT), 0c (FF), 0d (CR), 0e (SO), 0f (SI), 18 (CAN), 1a
(SUB), lb (ESC), 7f (DEL). Můžete nastavit režim
„zobrazit řídicí znaky“ (viz níže), while
na obrazovce se zobrazí znaky 07, 09, 0b, 18, 1a, 7f
jako glyfy. Na druhou stranu, v režimu UTF-8 jsou všechny kódy s 00
1f jsou považovány za řídicí znaky (bez ohledu na to
z režimu `zobrazit řídicí znaky').
narazí na kontrolní znak, je to okamžitě
je indikován, ale není nijak zohledněn (dokonce i
pokud to bylo uprostřed sekvence ESC) a
řídicí sekvence pokračuje od další
symbol. Znak ESC však začíná nový ovládací prvek
sekvence pravděpodobně zruší nedokončené
předchozí sekvence a příkazy CAN a SUB jsou přesně
dokončí kontrolní sekvenci. Rozpoznatelné
řídicí znaky jsou: BEL, BS, HT, LF, VT, FF,
CR, SO, SI, CAN, SUB, ESC, DEL, CSI. Vystupují
standardní akce pro ně:

BEL(0x07, ^G) pípne;

BS(0x08, ^H) odstraní předchozí znak (posune doleva
jeden sloupec, ale ne dále než na začátek
struny);

HT(0x09, ^I) se přesune na další zarážku tabulátoru
nebo na konci řádku, pokud předtím žádný nebyl
jsou nastaveny zarážky tabulátoru;

Sada LF (0x0A, ^J), VT (0x0B, ^K) a FF (0x0C, ^L)
linkový posuv;

CR (0x0D, ^M) určuje návrat vozíku;

SO(0x0E, ^N) napájí znakovou sadu G1 a
pokud je povolen režim LF/NL (režim nové linky), pak nastaví
přeprava kočárů;

SI (0x0F, ^O) napájí znakovou sadu G0;

Přerušení CAN (0x18, ^X) a SUB (0x1A, ^Z).
sekvence ESC;

ESC (0x1B, ^[) začíná sekvenci ESC;

DEL (0x7F) je ignorováno;

CSI (0x9B) je ekvivalentní ESC [.

ESC, ale ne CSI sekvence
ESC s resetem RIS.
ESC D IND Přeskočit řádek.
ESC E NEL Nová řada.
ESC H HTS Nastavte zarážku tabulátoru v aktuálním sloupci.
ESC M RI Zpětný řádek (přeskočení zpět).
ESC Z DECID Konkrétní definice DEC. Systém
vrátí řádky ESC [ ? 6 c, nárokující VT102.
ESC 7 DECSC Uložit aktuální stav (souřadnice kurzoru,
atributy, znakové sady specifikované G0, G1).
ESC 8 DECRC Obnoví naposledy uložený stav ESC 7.
ESC [CSI Control Sequence Input
ESC % Spuštění sekvence s výběrem znakové sady
ESC % @ vybrat výchozí (ISO 646 / ISO 8859-1)
ESC % G vyberte UTF-8
ESC %8 vybrat UTF-8 (zastaralé)
ESC #8 DECALN DEC Test zarovnání obrazovky: Vyplní obrazovku znaky E.
ESC (Zahájení sekvence s výběrem znakové sady G0
ESC (B vybrat výchozí (distribuce ISO 8859-1)
ESC (0 výběr grafické distribuce vt100
ESC (U vyberte alokaci null: přímo do znakové ROM
ESC (K vybrat uživatelskou distribuci: ke stažení
obslužný program mapscrn(8).
ESC) Start sekvence s výběrem znakové sady G1
(včetně symbolů: B, 0, U, K, - jako v příkladu výše).
ESC > DECPNM Použijte další klávesnici jako numerickou klávesnici
ESC = DECPAM Použít jako ovládací prvek další klávesnici
ESC ] OSC (zkratka pro "příkazy operačního systému")
ESC ] P nrrggbb: nastavte paletu s parametry,
specifikováno v 7 hexadecimálních číslicích za posledním P:-(.
Zde n je barva 0-16 a rrggbb označuje
použijte červenou/zelenou/modrou (0-255).
ESC ] R: Resetovat paletu

ECMA-48 CSI sekvence
CSI (nebo ESC [) následované sekvencí
parametry, které jsou odděleny desetinnými čísly
středník (největší je NPAR(16)).
"Prázdný" parametr (nebo jeho nepřítomnost) je ekvivalentní
nula. Posloupnost parametrů může začít
jeden otazník. Nicméně po CSI [ (nebo ESC
[ [) čte jeden znak a zbytek
sekvence jsou ignorovány. (Význam toho je
ignorovat zobrazené funkční tlačítko).
Výsledek specifikace CSI sekvence je určen jejím
koncový znak.
@ICH Vložte N prázdných znaků.
A CUU Posuňte kurzor o N řádků nahoru.
B CUD Posuňte kurzor o N řádků dolů.
C CUF Přesune kurzor do pravých N sloupců.
D CUB Přesuňte kurzor do levého N sloupců.
E CNL Posuňte kurzor o N řádků dolů do sloupce #1.
F CPL Posuňte kurzor o N řádků nahoru do sloupce #1.
G CHA Přesuňte kurzor na určený sloupec aktuálního řádku.
H CUP Přesuňte kurzor na určený řádek a sloupec (začínejte na 1,1).
J ED "Vymazat" obrazovku (ve výchozím nastavení od kurzoru po konec obrazovky).
ESC [ 1 J: "vymazat" od začátku sloupce ke kurzoru.
ESC [ 2 J: "vymazat" celou obrazovku.
K EL "Vymazat" řádek (standardně od kurzoru po jeho konec).
ESC [ 1 K: "vymazat" od začátku řádku ke kurzoru.
ESC [ 2 K: "vyčistit" celý řádek.
L IL Vložte N prázdných řádků.
M DL Smazat N řádků.
P DCH Vymazání (s odsazením řádku) N znaků v aktuálním řádku.
X ECH "Vymazat" (bez posunu řádku) N znaků v aktuálním řádku.
a HPR Přesuňte kurzor do pravých N sloupců.
c DA Odpovědět ESC [ ? 6 c: „Jsem VT102“.
d VPA Přesuňte kurzor na určený řádek aktuálního sloupce.
e VPR Posuňte kurzor o N řádků dolů.
f HVP Přesuňte kurzor na určený řádek a sloupec.
g TBC Bez parametrů: "vymazat" aktuální zarážku tabulátoru.
ESC [ 3 g: odstranění všech zarážek tabulátoru.
h Režim instalace SM (viz níže).
l Režim RM Reset (viz níže).
m SGR Nastavte atributy (viz níže).
n Hlášení o stavu DSR (viz níže).
q DECLL Nastavte provozní režimy indikátorů na klávesnici.
ESC [ 0 q: vypnutí všech indikátorů
ESC [ 1 q: zapnout indikátor "Scroll Lock".
ESC [ 2 q: zapnout indikátor "Num Lock".
ESC [ 3 q: zapnout indikátor "Caps Lock".
r DECSTBM Nastavení oblasti rolování; parametry budou horní a dolní řádky.
s? Uložit umístění kurzoru.
u? Obnovte umístění kurzoru.
` HPA Přesuňte kurzor na určený sloupec aktuálního řádku.

ECMA-48 Nastavení grafických možností
ECMA-48 SGR sekvence řídicích znaků ESC [
m nastavuje atributy obrazovky. Nějaký
atributy lze zadat v jedné sekvenci.

Param. výsledek
0 resetuje všechny atributy na jejich výchozí hodnoty
1 instalace tučný typ
2 sady jasnější (simulovaná barva na barevném displeji)
4 sady podtržení (simulované barvou na barevném displeji);
jsou nastaveny barvy používané k simulaci ztmavení nebo zvýraznění
pomocí ESC] ...
5 zapněte blikání
7 povolit režim obráceného videa
10 resetovat vybranou distribuci, příznaky ovládání obrazovky
a přepněte příznak metadat
11 vyberte nulovou distribuci, nastavte příznak ovládání obrazovky,
resetovat přepínač metadat.
12 vyberte nulovou distribuci, nastavte příznak ovládání obrazovky,
povolit přepínač meta příznaků. Přepínání meta příznaku
určuje přepínání nejvýznamnějšího bitu v byte
před jeho transformací podle distribuční tabulky.
21 povolit režim normální intenzity (není kompatibilní s ECMA-48)
22 vypněte režim normální intenzity
24 vypnout podtržení
25 vypněte blikání
27 vypnout obrácené video
Barva 30 znaků černá
31 nastavená barva znaků červená
32 nainstalovat zelený postavy
33 sada znaků barva hnědá
Barva 34 znaků modrá
35 set lila barvy znaků
36 nastavená barva znaků modrá
37 nastavte barvu znaků na bílou
38 povolit podtržení, nastavit výchozí barvu znaků
39 vypnout podtržení, nastavit výchozí barvu znaků
40 nastavte barvu pozadí na černou
41 nastavit barvu pozadí červenou
42 nastavit barvu pozadí zelenou
43 nastavte barvu pozadí na hnědou
44 nastavit barvu pozadí modrá
45 nastavte barvu pozadí na lila
46 nastavit barvu pozadí modrá
47 nastavte barvu pozadí na bílou
49 nastavit výchozí barvu pozadí

ECMA-48 Přepínání režimů
ESC [ 3 h
DECCRM (výchozí vypnuto): Zobrazit
řídicí znaky.

ESC [ 4 h
DECIM (výchozí vypnuto): Nastavení režimu
vložení/výměny.

ESC [ 20 h
LF/NL (výchozí vypnuto): Automaticky
zobrazte kód CR za kódy: LF, VT nebo FF.

Příkazy hlášení stavu ECMA-48
ESC [ 5 n
Zpráva o stavu zařízení (DSR): Odpověď
je ESC [ 0 n (svorka je v pořádku).

ESC [ 6 n
Zpráva o poloze kurzoru (CPR): Odpověď je
ESC[y; x R, kde x,y jsou souřadnice
kurzor.

Sekvence DEC v soukromém režimu (DECSET/DECRST)
Není zahrnuto v ECMA-48. Budou uvedeny následující
sekvence instalace režimu; v pořadí
pro resetování režimů se poslední znak `h" nahradí `l".

ESC [ ? 1 h
DECCKM (výchozí vypnuto): Pokud je povoleno, pak
kurzorové klávesy vytvářejí signál začínající ESC
O, ne s ESC [.

ESC [ ? 3 h
DECCOLM (výchozí vypnuto = 80 sloupců):
režim pro přepínání počtu sloupců na 80 resp
132.V původní verze ovladač je specifikován, že jeden
tento příkaz nestačí; nějaký
uživatelské nástroje, které používají
nestandardní režimy, jako jsou resizecons(8),
musí změnit registry nastavení konzoly
grafické karty.

ESC [ ? 5 h
DECSCNM (výchozí vypnuto): Povolit
režim obráceného videa.

ESC [ ? 6 hodin
DECOM (výchozí vypnuto): Pokud je povoleno, pak
souřadnice kurzoru jsou považovány za relativní k
levý horní roh v oblasti posouvání.

ESC [ ? 7 h
DECAWM (ve výchozím nastavení povoleno): Povolit režim
automatický přenos. V tomto režimu grafický symbol
zadáno za sloupec #80 (nebo #132, pokud DEC-
COLM povolen), přesune se na začátek dalšího
linky.

ESC [ ? 8 hodin
DECARM (ve výchozím nastavení povoleno): Povolit režim
automatické opakování znaků při stisknutí klávesy
klávesnice.

ESC [ ? 9:00
Zpráva o stavu myši X10 (výchozí
myši, rovný jedné nebo nula (reset), viz níže.

ESC [ ? 25 hodin
DECCM (ve výchozím nastavení povoleno): Vytvořte kurzor
viditelné.

ESC [ ? 1000 h
X11 Zpráva o stavu myši (výchozí
off): Nastavení režimu hlášení stavu
myš rovna 2 nebo nule (reset), viz níže.

Linux Console Private CSI sekvence
Následující sekvence nejsou ani ECMA-48- ani
Sekvence VT102. Jsou "domorodci".
Ovladače konzole Linux. Barvy v parametrech SGR: 0 =
černá, 1=červená, 2=zelená, 3=hnědá, 4=
modrá, 5 = lila, 6 = světle modrá, 7 = bílá.
ESC[1; n ] Nastavte barvu n jako barvu podtržení
ESC[2; n ] Nastavte barvu n jako barvu zeslabování
ESC [ 8 ] Nastaví aktuální pár barev na výchozí atributy.
ESC[9; n ] Nastavte obrazovku tak, aby po n minutách začala „čištění“.
ESC [10; n ] Nastavte frekvenci zvukového signálu (v hertzech).
ESC[11; n ] Nastavte dobu trvání zvukového signálu v (milisekundách).
ESC[12; n ] Přesuňte určenou konzolu před ostatní.
ESC [ 13 ] Po "čištění" obnovte obrazovku.
ESC[14; n ] Nastavte interval vypnutí VESA (v minutách).

ZNAKOVÉ SOUPRAVY
Jádro má informace o 4 typech překladu bajtů
symboly konzole obrazovky. Tyto čtyři stoly jsou
transformace: a) Latin1 -> PC, b) grafika VT100 ->
PC, c) PC -> PC, d) definované uživatelem. V systému
Obecně existují dvě sady znaků nazývané G0 a G1,
a jedním z nich je aktuální systémová sada (původně
toto je G0). Zadáním ^N se sada G1 stane aktuální, ^O
nastaví G0 aktuální. Proměnné G0 a G1 udávají
tabulky symbolů a uživatel je může změnit.
Zpočátku ukazují na tabulky a) ab)
respektive. Sekvence ESC (B a ESC (0 a
ESC(U a ESC(K) způsobí, že G0 odkazuje na tabulky
překlady a), b), c) ad).
Sekvence ESC) B a ESC) 0 a ESC) U a ESC) K
způsobí, že G1 odkazuje na překladové tabulky a), b), c) a
d) podle toho. Výsledkem je sekvence ESCc
resetujte terminál, tedy na to, co kdy potřebujete
přítomnost "odpadu" na obrazovce. Doporučení uvedené za
"echo ^V^O" udělá z G0 pouze aktuální sadu, ale ne
není zaručeno, že G0 bude ukazovat na tabulku a). V
některé verze mají program reset(1), který pouze
provede pouze příkaz "echo ^".
obrázek odpovídající s je vyhledán v symbolu ROM a
lze změnit pomocí setfont(8).

POUŽITÍ MYŠI
Systém pro sledování aktivity myši zahrnuje vydávání
signály stavu myši kompatibilní s xterm. Od řidiče
konzole nerozpozná zařízení, jako je myš (nebo její
typ), pak jsou tyto signály odeslány do vstupního toku
konzole, pouze pokud je ovladač virtuálního terminálu
obdrží signál ioctl pro aktualizaci stavu myši. Tyto
ioctls signály musí generovat uživatel
Aplikace podporující myš (např
démon gpm(8). Parametr pro všechny vytvořené xterm
ESC sekvence (signály pohybu myši)
bude tam jeden znak, jehož kód je hodnota+040. Například,
`!" odpovídá jedničce. Systém souřadnic obrazovky, když
sledování myši je založeno na znaku jednotky. V
Režim kompatibility X10 při stisknutí tlačítek
Jsou odeslány sekvence ESC, ve kterých je
stav myši a informace o stisknutém tlačítku. Režim
běží, když ESC [ ? 9 h a vypne se v
vydávání ESC [? 9 l. Když stisknete tlačítko, xterm odešle
ESC [ M bxy (6 znaků), kde b je tlačítko-1 a x a y
při stisknutí tohoto tlačítka se rovná souřadnicím x a y. Tento
stejné kódy, které generují a vydávají systémové jádro. V
normální režim sledování myši (který nebyl
implementováno v Linuxu 2.0.24) ESC sekvence
odešle, když stisknete a uvolníte tlačítko myši.
Odesílají se také informace o modifikátoru. Spustí se
režimu při vydání ESC [? 1000 h a při výdeji se vypne
ESC [1000 l. Při stisknutí a uvolnění tlačítka xterm
vydává ESC [ M bxy. Spodní dva bity b obsahují informace
o tlačítkách: 0=stisknuto MB1, 1=stisknuto MB2, 2=stisknuto MB3,
3=uvolněno. Nejvýznamnější bity obsahují informace o kterých
modifikátory byly po stisknutí tlačítka vypnuty. Tento
informace se přidají po stisknutí: 4=Shift, 8=Meta,
16 = kontrola. Ještě jednou: x a y jsou souřadnice x a y
myši při zpracování události. Souřadnice vlevo nahoře
úhly jsou považovány za (1,1).

POROVNÁNÍ S OSTATNÍMI TERMINÁLY
Mnoho dalších typů terminálů je popsáno jako
Linuxové konzole (jako „kompatibilní s VT100“)
rozdíly mezi Linuxová konzole a další dva důležité
typy, DEC VT102 a xterm(1).

Manipulace s řídicími znaky
Typ vt102 také rozpoznává následující řídicí znaky:

NUL (0x00) bylo ignorováno;

Spuštěna zpráva zpětné odpovědi ENQ (0x05);

DC1 (0x11, ^Q, XON) pokračující vysílání;

DC3 (0x13, ^S, XOFF) znamená, že je potřeba vt100
ignorovat a zastavit přenos všech kódů pro
kromě XOFF a XON

Lze spustit zpracování DC1/DC3 podobné VT100
tty řidič.

Program xterm (v režimu vt100) rozpozná řízení
následující symboly: BEL, BS, HT, LF, VT, FF, CR, SO, SI,
ESC.

ESC sekvence
Sekvence konzoly VT100 nejsou implementovány v
Linuxové konzole:

ESC N SS2 Posunout o 2. (Pro další vyberte pouze znakovou sadu G2
charakter.)
ESC O SS3 Posun o 3. (Znakovou sadu G3 vyberte pouze jako další
charakter.)
ESC P DCS Ovládací řádek zařízení (končí ESC\)
ESC X SOS Začátek řádku.
ESC ^ PM Soukromá zpráva (končí ESC\)
ESC\ST Ukončení 0 řádků
ESC * ... Definice znakové sady G2
ESC + ... Definice znakové sady G3
Program xterm (v režimu vt100) rozpozná: ESC c, ESC #
8, ESC >, ESC =, ESC D, ESC E, ESCH, ESC M, ESC N, ESC O,
ESC P ... ESC ESC Z (vytváří sekvence ESC [
? 1; 2c odpověď: „Jsem vt100 s vylepšeným
video parametry") a ESC ^ ... ESC se stejnými hodnotami,
které jsou uvedeny výše. Přijato: ESC (, ESC), ESC *,
ESC +,- následované 0, A, B pro speciální znaky
Režimy DEC a kreslení čar, Spojené království a USASCII.
ESC ] jsou přijímány k nastavení provozu takových zdrojů,
Jak:

ESC] 0; txt BEL Nastavte název ikony a titulek okna v režimu txt.
ESC] 1; txt BEL Nastavení názvu ikony v režimu txt.
ESC] 2; txt BEL Nastavte titulek okna v režimu txt.
ESC] 46; name BEL Změňte soubor protokolu na název (obvykle zakázáno
možnosti kompilace)
ESC] 50; fn BEL Nastavení písma fn.
Následující parametry jsou rozpoznány s mírně upravenými
význam:

ESC F Kurzor do levého dolního rohu obrazovky (je-li povolen
zdroj hpLowerleftBugCompat)
ESC l Blokování paměti (pro terminály HP).
Zamkne paměť nad kurzorem.
ESC m Odblokuje paměť (pro terminály HP).
ESC n LS2 Zadejte znakovou sadu G2.
ESC o LS3 Zadejte znakovou sadu G3.
ESC | LS3R Zadejte znakovou sadu G3 jako GR.
ESC ) LS2R Zadejte znakovou sadu G2 jako GR.
Nemá žádný viditelný účinek v xterm.
ESC ~ LS1R Zadejte znakovou sadu G1 jako GR.
Nemá žádný viditelný účinek v xterm.
ESC % nebylo rozpoznáno...

CSI sekvence
Program xterm (podle XFree86 3.1.2G) nerozpozná
blikající nebo stealth režim SGR. Verze X11R6 nejsou
rozpoznat nastavení barev SGR. Všechny ostatní ECMA-48
CSI sekvence rozpoznávané Linuxem jsou také
jsou uznávány xtermem a naopak. Program xterm bude
rozpoznat všechny sekvence soukromého režimu DEC,
uvedené výše, ale nerozpoznají žádné z nich
sekvence soukromého režimu v Linuxu. Pro
diskuse o sekvencích soukromého režimu pro xterm
viz dokument XtermControlSequences vytvořený
Edward Moy a Stephen Gildea a doprovázeli
Distribuce X Window System.

ZJIŠTĚNY CHYBY
Ve verzi 2.0.23 je sada CSI nesprávná a
neplatné, NUL není interně ignorováno
ESC sekvence.

Operace jsou speciální kombinace symboly určující akce pro transformaci různých veličin. Kompilátor interpretuje každou z těchto kombinací jako nezávislou jednotku nazývanou token.

Tabulka 2-3 uvádí seznam operací. Operace musí být použity přesně tak, jak jsou uvedeny v tabulce, bez mezer mezi znaky v operacích, které jsou reprezentovány více znaky.

Velikost operace není v této tabulce zahrnuta. Spíše reprezentuje klíčové slovo než symbol.

Operace

Jméno

Logické NE

Bitův doplněk

Přidání

Odečítání, aritmetická negace

Násobení

Shift doleva

Shift vpravo

Menší nebo rovno

Větší než nebo rovno

Bitové AND, adresa od

Bitově včetně OR

Bitově exkluzivní OR

Logické AND

Logické NEBO

Sekvenční provádění (čárka)

Operace podmíněný výraz

Přírůstek

Dekrementovat

Jednoduché zadání

Doplnění se zadáním

Odečítání s přiřazením

Násobení s přiřazením

Divize se zadáním

Zbytek se zadáním

Pravá směna s přiřazením

Levá směna s přiřazením

Bitové AND s přiřazením

Bitově včetně NEBO s přiřazením

Bitové výhradní NEBO s přiřazením

Tabulka 2‑3 Operace

Komentář: Operátor podmíněného výrazu?: je ternární operátor, nikoli dvouznakový operátor. Formát podmíněného výrazu je následující: ?:

    1. Konstanty

Konstanta je číslo, znak nebo řetězec znaků. Konstanty se v programu používají jako neměnné hodnoty. V jazyce C existují čtyři typy konstant: celočíselné konstanty, konstanty s plovoucí desetinnou čárkou, znakové konstanty a řetězcové literály.

      1. Celočíselné konstanty

Celočíselná konstanta je desítkové, osmičkové nebo šestnáctkové číslo, které představuje celočíselnou hodnotu. Desetinná konstanta má následující formát:

Kde je jedna nebo více desetinných číslic od 0 do 9.

Osmičková konstanta má následující formát:

0,

Kde je jedna nebo více osmičkových číslic od 0 do 7. Je nutné zaznamenat úvodní nulu.

Hexadecimální konstanta má jeden z následujících formátů zobrazení:

0x

0X ,

Kde jedna nebo více hexadecimálních číslic.

Hexadecimální číslice může být číslo od 0 do 9 nebo písmeno (velké nebo malé) od A do F. „Směs“ velkých a malých písmen je povolena v konstantním zastoupení. Je nutné napsat úvodní nulu následovanou x nebo X.

Mezi číslicemi celočíselné konstanty nejsou povoleny mezery. Tabulka 2-4 ukazuje příklady celočíselných konstant.

Tabulka 2‑4 Příklady konstant

Celočíselné konstanty vždy určují kladné hodnoty. Pokud jsou vyžadovány záporné hodnoty, je nutné vytvořit konstantní výraz ze znaménka mínus a konstanty, která za ním následuje. Se znaménkem mínus se zachází jako s aritmetickou operací.

Každá celočíselná konstanta je určena typem, který určuje její paměťovou reprezentaci a rozsah hodnot. Desetinné konstanty mohou být typu int nebo long.

Osmičkové a hexadecimální konstanty mohou být typu int, int bez znaménka, long nebo unsigned long, v závislosti na jejich velikosti. Pokud lze konstantu reprezentovat jako int, je určena jako typ int. Pokud je jeho hodnota větší než maximální kladná hodnota, která může být reprezentována typem int, ale menší než hodnota, která může být reprezentována stejným počtem bitů jako int, je specifikována jako unsigned int. Konečně konstantě, jejíž hodnota je větší než maximální hodnota reprezentovaná znakem int bez znaménka, je v případě potřeby přiřazen typ long nebo unsigned long. Tabulka 2-5 ukazuje rozsahy hodnot pro osmičkové a hexadecimální konstanty reprezentované odpovídajícími typy na stroji, kde typ int má délku 16 bitů.

Hexadecimální rozsahy

Osmičkové rozsahy

0x8000 – 0xFFFF

0100000 - 017777777777

0x80000000 - 0xFFFFFFFF

020000000000 - 030000000000

Tabulka 2‑5 Rozsahy hodnot pro osmičkové a hexadecimální konstanty

Důležitost pravidel diskutovaných výše spočívá v tom, že osmičkové a hexadecimální konstanty neobsahují "podepsané" přípony, když jsou převedeny na delší typy (převod typů viz 5 - "Výrazy a přiřazení").

Programátor může definovat pro libovolnou celočíselnou konstantu dlouhý typ, přidáním písmene "l" nebo "L" na konec konstanty. Tabulka 2-6 ukazuje příklady celočíselných konstant.

Desetinné konstanty

Osmičkové konstanty

Hexadecimální konstanty

Tabulka 2‑6 Příklady dlouhých celočíselných konstant

Sekvence ESC jsou speciální kombinace znaků, které

zastupovat prázdné znaky a negrafické znaky v řetězcích a symbolech

konstanty.

Jejich typické použití spojené se specifikací úkonů jako např

návraty vozíku a tabulátory a pro určení doslovných reprezentací

znaků, jako je znak dvojitých uvozovek ("). Sekvence escape se skládá z

od znaku zpětného lomítka (\) následovaného písmenem, znaky

interpunkce "jednoduché uvozovky" (), " dvojité uvozovky" ("), "zpětné lomítko

pruh" (\) nebo kombinace čísel.

Pokud před znakem, který zde není zahrnut, je zpětné lomítko

seznamu, je zpětné lomítko ignorováno a znak je reprezentován jako

doslovný. Například obrázek "\c" představuje znak "c" v literálu

řetězcová nebo znaková konstanta.

Sekvence "\ddd" a "\xdd" umožňují zadat libovolný znak v ASCII

(Americký standardní kód informační rozhraní) jako sekvence

tři osmičkové číslice nebo dvě hexadecimální číslice. Například znak mezery

lze zadat jako \010 nebo \x08. Nula ASCII kódu může být specifikována jako \0 nebo

\x0. Osmičková sekvence ESC může používat od jedné do

tři osmičkové číslice. Například znak mezery lze zadat jako \10. Přesně

lze také použít v hexadecimální sekvenci ESC

jedna až dvě hexadecimální číslice. Takže hexadecimální posloupnost

pro znak mezery může být určen jako \x08 nebo \x8.

Je třeba poznamenat, že při použití osmičkové nebo šestnáctkové soustavy

ESC sekvence v řádcích, pak musíte úplně specifikovat všechna čísla

ESC sekvence (tři číslice pro osmičkovou a dvě číslice pro

hexadecimální sekvence ESC). Jinak, pokud je symbol přímo

následování sekvence ESC se náhodou ukáže jako osmičkové nebo

hexadecimální číslice, bude interpretována jako součást

sekvence. Například řádek \x7Be11 při tisku bude

vypadat jako ell, protože \x7B bude interpretováno jako levý složený znak

závorky (). Řetězec \x07Be11 by byl správnou reprezentací znaku zvonku

následuje slovo Bell.

Sekvence ESC umožňují odesílat negrafické řídicí znaky

Na externí zařízení. Často se používá například sekvence ESC \033

jako první znak ovládacích příkazů terminálu a tiskárny. Negrafické

znaky musí být vždy reprezentovány jako sekvence ESC, protože

přímé použití negrafických symbolů v programech C bude

mít nepředvídatelný výsledek.

Znak zpětného lomítka (\) navíc k definici sekvencí ESC

používá se také jako znak pro pokračování řádku v definicích preprocesoru.

Pokud postava " nový řádek" následuje za znakem zpětného lomítka (\),

pak je nový řádek ignorován a další řádek považován za součást

předchozí řádek.


| 2 | | | |
  • Vývoj Linuxu
    • Konzultace

    Když je printf příliš málo a ncurses příliš mnoho

    Když je dat příliš mnoho, je jich málo standardní výstup printf v konzolovém programu. Zvláště pokud je mnoho různých událostí a různá data se mění v šílený výpis. Tato data mohou pocházet z ovladače přes UART a není třeba přemýšlet o nějakém gui programu. Může také existovat běžný bash skript, ke kterému chcete připojit nějaké pseudografické rozhraní.

    Hned řeknu, že to zpočátku může vypadat jako znovuobjevení kola, protože existuje vynikající knihovna ncurses. Vůbec nesnižuji jeho přednosti, ale jeho schopnosti jsou často příliš nadbytečné. Navíc je špatně přenosný do ovladačů a tam je určitě nadbytečný. Pár maker a funkcí pro práci s pseudografikou si ale můžete načrtnout sami.

    Prohlášení o problému

    Ti, kteří programovali ovladače, často používají konzoli jako UART nebo UART v ruštině k zobrazení informací během ladění. Dříve jsem popisoval tohoto rozhraní ve svých příspěvcích na Habré. Při dostatečně velkém množství různorodých informací je zcela nemožné je zachytit. Výsledkem je vícestránkový protokol, zejména pokud jsou k dispozici nepřetržitá data z některých analogových senzorů, navíc musíte sledovat stav portů atd. Výsledkem je, že lidé začnou psát své vlastní handlery na straně počítače a řešení se stává zcela nepřenosným a hlavně se ztrácí spousta času. Ale ve skutečnosti můžete všechny různé informace z ovladače vměstnat do jednoho okna terminálu a používat je pohodlně, bez psaní software třetích stran. Výsledkem je, že se naše řešení stává přenosným (je potřeba jakýkoli terminál) a ušetří se mnoho hodin programátorů na ladění.

    Metodologický příklad

    Tento příklad bude spíše edukativní, metodický, ale můžete si ho snadno přizpůsobit svému skutečné zařízení na libovolném ovladači. Analogicky to vše bude fungovat v bash, pyton atd.

    Předpokládejme, že máme ovladač, kde jsou kontaktní senzory připojeny k 8bitovému portu, který může přijímat stavy ON a OFF, existuje analogový tříosý senzor a musíme zobrazit jejich stav, plus regulátor má čas, datum a my chcete ovládat správné zobrazení času; a konečně může nastat událost (například výpadek proudu), kdy musíme urychleně informovat operátora. Pojďme si to shrnout:

    • Stav 8 pinů portu (zapnuto/vypnuto)
    • Tříosý snímač (x, y, z) - samostatný výstup pro každou osu
    • Datum a čas
    • Chybová zpráva operátorovi
    Okamžitě můžete odhadnout, že pokud se taková informace prostě hloupě pošle přes UART, pak to bude nečitelný odpad. Dá se to ale zařídit a vše by mělo vypadat nějak takto (náčrt v textovém editoru):


    Ty rámečky jsem hloupě zkopíroval z mc. Ti, kteří chtějí krásu, se mohou podívat na to, jaké rámečky jsou v unicode. Čísla nahoře jsou napsána speciálně pro souřadnice.

    Zdá se, že myšlenka je jasná, ale jak to implementovat v terminálu? Tady začíná to pravé kouzlo! " A teď musíte rozhodně fouknout! Pokud nefouknete, žádný zázrak se nestane!"Hmayak Hakobyan."

    Únikové sekvence

    Původně jsem měl v plánu v této kapitole prezentovat přednášku o terminálovém řízení pomocí ESC sekvencí. Ale pak by se článek prostě rozrostl do neslušných rozměrů, takže uvedu jen některé pojmy a zbytek najdete na internetu nebo v manuálech.
    Terminál je vstupní/výstupní zařízení, které umožňuje zadávat a zobrazovat data. Dříve byl terminálem monitor a klávesnice připojené přes COM port k počítači, ale v novější době dřívější verze dokonce i dálnopis.


    Teletype Model 33 (obrázek z Wikipedie)

    Terminál je dnes program, který může být virtuálním terminálem jako v Linuxu nebo terminálem, který pracuje s COM portem. Všechny tyto terminály, dokonce i klasický HyperTerminal, splňují určité standardy. Jak asi tušíte, takové terminály je potřeba spravovat. Existují pravidelné ASCII znaky, které se zobrazují na obrazovce, a existují speciální sekvence znaků, které umožňují nastavit souřadnice kurzoru, vymazat obrazovku, nastavit barvu atd. Ve svých článcích o Habré a Giktimes jsem se již opakovaně dotkl tématu ESC sekvencí. Použili jsme je v ovládání displeje (popis ve spoileru, který nikdo nečetl) a v článku o, který je také řízen ESC sekvencemi.

    Pokud se někdo z vás vrátil do dob BBS, pak si pamatujete, jak „krásné“ byly tyto desky: barevné, které měly určitá pole pro vstup/výstup informací atd. Všechna tato radost byla zobrazena pomocí takových ovládacích symbolů. Znak je považován za řídicí znak, pokud (před převodem podle převodní tabulky) obsahuje jeden ze 14 kódů: 00 (NUL), 0x07 (BEL), 0x08 (BS), 0x09 (HT), 0x0a (LF), 0x0b (VT), 0x0c (FF), 0x0d (CR), 0x0e (SO), 0x0f (SI), 0x18 (CAN), 0x1a (SUB), 0x1b (ESC), 0x7f (DEL). Nás zajímá především symbol ESC=0x1b, "\033" nebo "\e". Více o těchto sekvencích si můžete přečíst v manuálech man console_codes nebo na internetu v ruštině.

    Kromě ovládání kurzoru můžete terminál také obarvit různé barvy(pokud je samozřejmě barevný). Barvy svého terminálu můžete zkontrolovat pomocí jednoduchého skriptu BASH:

    Pro fgbg v 38 48 ; do #Foreground/Background for color in (0..256) ; do #Colors #Zobrazte barevnou ozvěnu -en "\e[$(fgbg);5;$(color)m $(color)\t\e ; pak echo #Nový řádek fi hotovo echo #Nový řádek hotový exit 0
    Výsledek provedení bude něco takového:


    Můžete si přečíst podrobněji o barvách a písmech v konzole (a jakýchkoli terminálech) s příklady.

    Teď už to vlastníš potřebné informace dělat zábavné velikonoční vajíčka ve skriptech BASH, jako je obrázek v názvu příspěvku.


    Jak jsem si takové velikonoční vajíčko v bash vyrobil, si můžete podrobněji přečíst v mém LiveJournalu.

    Vše naformátujeme v si

    Tento příklad uvádím na svých mistrovských kurzech programování a uvedu ho zde. Udělejme makra pro nastavení atributů textu, vyčištění obrazovky, přesun kurzoru na horní roh a přesunutí kurzoru na danou pozici:

    #define home() printf(ESC ")

    
    Nahoru