ANSI.SYS

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:

DEVICE=disk:\cesta\ANSI.SYS parametry

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]

Funkčnost

[editovat | editovat zdroj]

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:

SET $CLS=\033+

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]

Přemapování klávesnice

[editovat | editovat zdroj]

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

  • Některé verze ANSI.SYS mají parametr příkazového řádku, který zakazuje přemapování kláves, např. NANSI.SYS[2] ve FreeDOSu nebo Datalight ROM-DOS[7] používá volbu /S (secure). Také jiné ANSI ovladače, např. ANSIPLUS lze zkonfigurovat, aby neumožňovaly předefinování kláves.[3]
  • Parametr CONFIG.SYS SCREEN=ANSI v PTS-DOSu poskytuje vestavěný ANSI ovladač, který nepodporuje přemapování klávesnice.[8][9]
  • Některé náhrady ANSI.SYS třetích stran byly úmyslně nepodporovaly přemapování klávesnice.
  • Program PKSFANSI firmy PKWARE typu Terminate and Stay Resident odstraňuje escape kódy pro přemapování kláves ze standardního výstupu.[10] Jeho výhodou je, že uživatel může načíst některá užitečná mapování z textového souboru a pak spustit PKSFANSI, který zabrání aktivaci dalších přemapování, která by mohla škodit.

Dostupnost

[editovat | editovat zdroj]

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]

Vlastnosti

[editovat | editovat zdroj]

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)
Videorežimy
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.

  1. a b Hodnoty 0, 1 a 2 jsou podporovány a rozlišovány pouze 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.
  2. a b c d Předpona '>' je podporována pouze v japonské verzi MS-DOS, PC DOS a DR DOS ANSI.SYS pro přístup ke speciálním videorežimům pro japonštinu.
  3. Tuto nestandardní escape sekvenci podporuje pouze 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.
  4. a b Tyto nestandardní escape sekvence pro vložení a smazání řádků jsou podporovány pouze v japonské verzi MS-DOSu a PC DOSu a v západních vydáních Multiuser DOS, ne však v DR-DOSu.
  5. a b Tyto nestandardní escape sekvence pro přepínání mezi korejským a anglickým vkládáním znaků z klávesnice jsou podporovány pouze v ANSI.SYS pro korejskou verzi MS-DOSu, PC DOSu a DR-DOSu.
  6. a b Tyto nestandardní escape posloupnosti pro zákaz a povolení jakéhokoli výstupu na zařízení CON: jsou podporované pouze v 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.
  7. Hodnota 7 se používá buď pro povolení (s SM) anebo zákaz (s RM) zalamování řádků. Je-li povoleno, bude text, který je delší než počet pozic na obrazovce, pokračovat na dalším řádku obrazovky; pokud je zalamování zakázáno, nebudou se přesahující části textu zobrazovat.
  8. a b Video režimy 114 a 115 jsou podporované pouze v japonském vydání DOS/V 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.

Literatura

[editovat | editovat zdroj]
  • MEFFORD, Michael. ANSI.com: Download It Here. PC Magazine. 1989-02-07. Dostupné online [cit. 2011-08-10]. 
  • KEGEL, Daniel; ALMY, Tom; AUER, Eric. NANSI – An Enhanced MS-DOS Console Driver [online]. Dan Kegel's Web Hostel, 1999-02-28 [cit. 2011-08-10]. Dostupné v archivu pořízeném z originálu dne 2018-05-19. 
  • MASSINGILL, Michael D. PK SAFE ANSI (PKSFANSI.COM) [online]. [cit. 2017-09-11]. Dostupné v archivu pořízeném z originálu dne 2017-09-11. 
  • FIELD, Tim. Installable Device Drivers for PC DOS 2.0 - Inside the IBM PC. BYTE. November 1983, roč. 8, čís. 11, s. 188–196. Dostupné online [cit. 2016-03-19]. 
  • PAUL, Matthias R. NWDOS-TIPs — Tips & Tricks rund um Novell DOS 7, mit Blick auf undokumentierte Details, Bugs und Workarounds. 3. vyd. [s.l.]: [s.n.], 1997-07-30. Dostupné v archivu pořízeném z originálu dne 2017-09-10. (německy) 
  • Autor neuveden, 1998. Chapter 9: Configuring the System [online]. Caldera, Inc., 1998 [cit. 2017-09-10]. Dostupné v archivu pořízeném dne 2017-09-10. 
  • Guide to using ANSI.SYS [online]. [cit. 2017-09-11]. Dostupné v archivu pořízeném dne 2007-06-23. 
  • Autor neuveden, 2012. ANSI Keyboard codes - ANSI.SYS Key and Extended Key Codes [online]. SECONS Ltd., 2012 [cit. 2017-09-11]. Dostupné v archivu pořízeném z originálu dne 2017-09-11. 
  • Datalight, Inc.; GPvNO. Datalight ROM-DOS User's Guide [online]. Datalight, Inc., April 2005 [cit. 2018-09-16]. Dostupné online. 3010-0200-0716. 
  • Autor neuveden, 1999. PTS-DOS 2000 Pro User Manual [online]. Buggingen, Germany: Paragon Technologie GmbH, 1999 [cit. 2018-05-12]. Dostupné v archivu pořízeném z originálu dne 2018-05-12. 
  • GÜNTHER, Jens; ERNST, Tobias. Inoffizielle deutschsprachige PTS-DOS-FAQ (PTS/FAQD) [online]. 2004-04-25 [cit. 2018-10-02]. Dostupné online. (německy) 
  • SWEGER, Kristofer, 2007. Configuring ANSIPLUS [online]. 2007 [cit. 2018-10-04]. Dostupné v archivu pořízeném z originálu dne 2018-10-04. 

Související články

[editovat | editovat zdroj]

Externí odkazy

[editovat | editovat zdroj]