ANSI.SYS je v rodině operačních systémů DOS ovladač zařízení, který umožňuje používat ANSI escape posloupnosti pro zpřístupnění různých funkcí systémové konzole. Většina řídicích posloupností, které ANSI.SYS podporuje, pochází z návrhu standardu pro ovládání textových terminálů vytvořeného technickým výborem X3 ANSI X3L2 pro kódy a znakové sady (ANSI X3L2 Technical Committee on Codes and Character Sets).
Protože se ovladač ANSI.SYS neinstaloval implicitně a při výpisu textů byl velmi pomalý, využívala jej jen malá část softwaru; většina celoobrazovkových programů používala pro výstup na obrazovku nástroje nižších úrovní (od služeb BIOSu až po přímé ovládání hardwaru videokaret). Existovalo však několik alternativních ovladačů jiných dodavatelů, které fungovaly výrazně rychleji, např. ANSI.COM
,[1] NANSI.SYS
[2] a ANSIPLUS.EXE
,[3] které se snažily tuto situaci změnit.
Pro použití ANSI.SYS
v operačním systému DOS je třeba do souboru CONFIG.SYS
(ve verzích Microsoft Windows založených na Windows NT do CONFIG.NT
) přidat řádek:
kde disk: a cesta je označení diskové jednotky a cesta k adresáři, kde se nachází soubor ANSI.SYS
. Ovladač ANSI.SYS
může být také zaveden do Upper memory area použitím příkazu DEVICEHIGH
/HIDEVICE
. Jako parametry lze použít několik nepovinných přepínačů, které upřesňují chování ovladače:
/K
používat rozšířené funkce BIOSu pro vstup z klávesnice (INT 16h) místo standardních[4]/L
počet řádků na obrazovce/R
nastavuje scrollování řádků pro podporu screen readerů[4]/S
nebo /SCREENSIZE
nastaví velikost obrazovky/X
podpora předefinování rozšířených klávesových kódů nezávislých na standardních kódech[4]Pokud je ANSI.SYS
zaveden, umožňuje používat řídicí posloupnosti pro formátování textového výstupu na obrazovku. S tímto ovladačem mohou programy používající standardní výstup používat až 16 barev textu a 8 barev pozadí dostupných v VGA-kompatibilní textový režim, blikající text, měnit pozici kurzoru na obrazovce, a mazat obrazovku. Ovladač také umožňuje změnit videorežim ze standardního textového režimu 80×25 (25 řádků po 80 znacích) na různé grafické režimy (například s 320×200 grafickými body; ANSI.SYS umožňuje i v tomto režimu výpis textu, ale neposkytuje služby pro ovládání nebo zobrazování jednotlivých pixelů).
Standardní ANSI.SYS
byl pomalý, protože převáděl escape posloupnosti na volání BIOSu. Několik společností vytvořilo náhrady, které pracovaly přímo s Video RAM stejným způsobem jako většina programů pro DOS, které poskytovaly celoobrazovkové uživatelské rozhraní.
Interní příkaz DOSu CLS
implicitně používá přímo volání funkce BIOSu pro smazání obrazovky, což významně narušuje jinak dodržovaný model hardwarové abstrakce. Pokud však COMMAND.COM
v DR DOSu detekuje ANSI ovladač, nebude volat tuto funkci BIOSu, ale na zařízení plnící úlohu konzole pošle řídicí posloupnost definovanou v rezervované proměnné prostředí $CLS
.[5] Pokud tato proměnná prostředí není definována, zašle posloupnost ESC [ 2 J
.[5] Použitím jiných řídicích posloupností lze po smazání obrazovky příkazem CLS
dosáhnout různých efektů. Při zadávání řídicích znaků lze zadat kód v osmičkové soustavě ve tvaru \nnn
;[5] např. pro ASCII terminály by bylo možné definovat řídicí posloupnost ESC +
(1Bh 2Bh
) pro smazání obrazovky takto:
Tyto vlastnosti podporuje COMMAND.COM
ve všech verzích systémů DOS Plus a DR DOS, ne však v MS-DOSu nebo PC DOSu. Jsou také podporovány příkazovými interprety v Concurrent DOS, Multiuser DOS a REAL/32, které však implicitně místo řídicích posloupností ANSI používají posloupnosti pro terminál VT52 (například ESC E
).[5]
Zajímavou vlastností ANSI.SYS
je schopnost přemapovat libovolnou klávesu na klávesnici, aby generovala libovolnou posloupnost znaků. Použitím speciální escape posloupnosti může uživatel definovat, aby byl libovolný klávesový kód převeden na libovolnou posloupnost klávesových kódů.[6] Tuto vlastnost však bylo možné zneužít pro vytvoření trojského koně, který díky escape sekvencím umístěným v souboru mohl přemapováním klávesnice provést nějakou škodlivou akci (tzv. „ANSI bomby“). Proto byly vyvinuty nástroje, které tomuto zneužívání zabraňují:
/S
(secure). Také jiné ANSI ovladače, např. ANSIPLUS lze zkonfigurovat, aby neumožňovaly předefinování kláves.[3]SCREEN=ANSI
v PTS-DOSu poskytuje vestavěný ANSI ovladač, který nepodporuje přemapování klávesnice.[8][9]Ovladač ANSI.SYS
se objevil v MS-DOS 2.0, první verzi operačního systému, která podporovala ovladače zařízení,[11] a byl dostupný ve všech následujících verzích MS-DOSu. Je také dostupný v mnoha systémech DOS jiných firem, například IBM PC DOS a DR DOS.[12]
Některé programy vyžadovaly ovladač ANSI.SYS
pro výpis textu na libovolné místo na obrazovce, nastavení pozice kurzoru a nastavování barev textu vypisovaného na obrazovku.[12] Escape sekvence také umožňovaly nastavení barevné výzvy systému (prompt). Ovládání výstupu na obrazovku, které poskytoval ovladač ANSI.SYS
, často používaly systémy BBS pro vytváření obrázků v textovém režimu a ovládání kurzoru způsobem, který se používal např. v různých online hrách.
Většina verzí Windows žádným užitečným způsobem ANSI escape kódy nepodporuje (v některých verzích však mohou být použity emulace MS-DOSu). Ve Windows 10 obsahuje podporu pro escape posloupnosti ve Win32 konzole (okno textového terminálu); musí být však aktivována použitím Windows API funkce SetConsoleMode
nastavením příznaku ENABLE_VIRTUAL_TERMINAL_PROCESSING
.[13]
CSI (Control Sequence Introducer) je zástupný znak pro běžné dvoubytové úvodní escape sekvence „ESC [
“ (0x1B 0x5B
).[12] ANSI standard také definuje alternativní jednobytový CSI kód 0x9B
, který není podporován v ANSI.SYS.
Standardní ovladače ANSI.SYS
pro DOS podporují pouze následující podmnožinu ANSI escape posloupností:[12]
Posloupnost | Vliv |
---|---|
ESC [ r | Kurzor nahoru (CUU) |
ESC [ r B | Kurzor dolů (CUD) |
ESC [ c C | Kurzor vpravo (CUF) |
ESC [ c D | Kurzor vlevo (CUB) |
ESC [ r;c f | Horizontální a vertikální pozice (HVP) |
ESC [ r;c H | Přesune kurzor na pozici c na řádku r (CUP;l pozice i řádky se číslují od 1) |
ESC [ n J | Smazat obrazovku (ED) (n=0, 2 nebo n=0, 1, 2)[pozn. 1] |
ESC [ n K | Smazat řádek (EL) (n=0 nebo n=0, 1, 2)[pozn. 1] |
ESC [ n m | Vybrat grafické ztvárnění (SGR) (n=0..47) |
ESC [ 6 n | Device status report (DSR) oznámí pozici kurzoru (CPR) ve tvaru (jako kdyby byla zadána z klávesnice) ESC[n;mR , kde n je řádek a m je sloupec
|
ESC [ s | Uložit pozici kurzoru (SCP) |
ESC [ u | Obnovit pozici kurzoru (RCP) |
Následující escape posloupnosti jsou specifické pro ANSI.SYS
. Obecně nejsou podporovány ANSI konzolami v jiných operačních systémech:
Posloupnost | Vliv |
---|---|
ESC [ n h ESC [ ?n h ESC [ =n h ESC [ >n h[pozn. 2] |
Přepne videorežim (SM)[pozn. 2] |
ESC [ n l ESC [ ?n l ESC [ =n l ESC [ >n l[pozn. 2] |
Opustí videorežim (RM)[pozn. 2] |
ESC [ n q | Povolí (n=1) nebo zakáže (n=0) podporu /X [pozn. 3]
|
ESC [ L | Vloží řádek (IL)[pozn. 4] |
ESC [ M | Smaže řádek (DL)[pozn. 4] |
ESC $ ) 1 | Přepne režim vstupu z klávesnice na korejštinu (Hangul)[pozn. 5] |
ESC ( 2 | Přepne režim vstupu z klávesnice na angličtinu[pozn. 5] |
ESC [ + | Povolí výstup na konzolu[pozn. 6] |
ESC [ - | Zakáže výstup na konzolu[pozn. 6] |
ESC [ ';b;... p | Přemapování kláves (SKR/KR) |
Režim | Popis | Režim | Popis |
---|---|---|---|
0 | 40 × 25 monochromatický | 1 | 40 × 25 barevný |
2 | 80 × 25 monochromatický | 3 | 80 × 25 barevný |
4 | 320 × 200 barevný | 5 | 320 × 200 monochromatický |
6 | 640 × 200 monochromatický | ||
7 | Zalamování řádků[pozn. 7] | ||
13 | 320 x 200 barevný (grafický) | 14 | 640 x 200 barevný (16barevná grafika) |
15 | 640 x 350 monochromatický (2barevná grafika) | 16 | 640 x 350 barevný (16barevná grafika) |
17 | 640 x 480 monochromatický (2barevná grafika) | 18 | 640 x 480 barevný (16barevná grafika) |
19 | 320 x 200 barevný (256barevná grafika) | ||
114 | 640 x 480 barevný (16barevná grafika)[pozn. 8] | 115 | 640 x 475 barevný (16barevná grafika)[pozn. 8] |
V některých implementacích DOSu nejsou video režimy nad 7 dokumentované. V Multiuser DOSu jediný platný argument ve spojení s PCTERM je 7.
ANSI.SYS
v japonských verzích MS-DOSu a PC DOSu. Západní edice ANSI.SYS
je nepodporují nebo nerozlišují. Jsou však podporovaní také v Multiuser DOS.
ANSI.SYS
pro přístup ke speciálním videorežimům pro japonštinu.
ANSI.SYS
v MS-DOSu a PC DOSu. Lze ji použít pro povolení nebo zákaz podpory rozšířených klávesnicových kódů za běhu, podobně jako volba /X
při instalaci ANSI.SYS
.
ANSI.SYS
pro korejskou verzi MS-DOSu, PC DOSu a DR-DOSu.
ANSI.SYS
od verze DR-DOS 7.02 a vyšší. Slouží k potlačení konzolového výstupu během zavádění operačního systému, například ve spojení se zavaděčem DR-WebSpyder.
ANSI.SYS
v DR DOS 6.0, Novell DOS 7 a vyšší.
V tomto článku byl použit překlad textu z článku ANSI.SYS na anglické Wikipedii.