ANSI.SYS
ANSI.SYS är en enhetsdrivrutin i DOS -familjen av operativsystem som ger extra konsolfunktioner genom ANSI escape-sekvenser . Den är delvis baserad på en delmängd av textterminalkontrollstandarden som föreslagits av ANSI X3L2 Technical Committee on Codes and Character Sets ("X3-kommittén").
Eftersom det inte var installerat som standard och var notoriskt långsamt, utnyttjade lite mjukvara det och tog istället till att direkt manipulera IBM PC-hårdvaran. Ett antal tredjepartsalternativ som kördes med rimlig hastighet skapades, såsom ANSI.COM , NANSI.SYS och ANSIPLUS.EXE för att försöka ändra detta. [ källa från tredje part behövs ]
Användande
För att använda ANSI.SYS under DOS läggs en rad till filen CONFIG.SYS (eller CONFIG.NT under Windows NT- baserade versioner av Windows ) som lyder:
- DEVICE = enhet: \ sökväg \ANSI.SYS alternativ
där drive: och sökväg är enhetsbeteckningen och sökvägen till katalogen där filen ANSI.SYS finns, och alternativen kan vara ett antal valfria växlar för att styra beteendet. ANSI.SYS kan också laddas till övre minnet via DEVICEHIGH / HIDEVICE .
- /K använder utökade tangentbords BIOS-funktioner ( INT 16h ) snarare än standard
- /L kraft antal linjer
- /R justera linjerullning för att stödja skärmläsare
- /S eller /SCREENSIZE ställ in skärmstorlek
- /X stöder omdefiniering av utökade nyckelkoder oberoende av standardkoder
Funktionalitet
När ANSI.SYS väl har laddats kan kodsekvenser tillämpa olika textformateringsfunktioner. Med den här drivrutinen kan program som skriver till standardutgången använda de 16 textförgrundsfärgerna och 8 bakgrundsfärgerna som är tillgängliga i VGA-kompatibelt textläge, få text att blinka, ändra markörens placering på skärmen och tömma skärmen . Det gör det också möjligt att ändra videoläget från standard 80×25 textläge till ett antal olika grafiklägen (till exempel 320×200 grafikläge med text ritad som pixlar, även om ANSI.SYS inte ger anrop för att vända individuella pixlar på och av).
Standarden ANSI.SYS är relativt långsam eftersom den mappar escape-sekvenser till motsvarande BIOS- anrop. Flera företag gjorde ersättningar från tredje part som gränssnitt direkt med videominnet, på ett liknande sätt som de flesta DOS-program som har ett helskärmsgränssnitt.
Som standard fungerar det interna DOS-kommandot CLS genom att direkt anropa motsvarande BIOS-funktion för att rensa skärmen, vilket på ett tydligt sätt bryter mot den hårdvaruabstraktionsmodell som annars upprätthålls. Men om en ANSI-drivrutin upptäcks av DR-DOS COMMAND.COM kommer den istället att skicka kontrollsekvensen definierad i den reserverade miljövariabeln $CLS till den anslutna konsolenheten. Om miljövariabeln är odefinierad, faller den tillbaka för att skicka sekvensen ESC [ 2 J istället. Att specificera andra sekvenser kan användas för att styra olika skärminställningar efter en CLS . På grund av svårigheterna att definiera miljövariabler som innehåller binära data accepterar COMMAND.COM även en speciell \nnn - notation för oktala tal . Till exempel, för att skicka en alternativ styrsekvens som ESC + (för 1Bh 2Bh som används av ASCII-terminaler), kan man definiera variabeln enligt följande:
- STÄLL IN $CLS=\033+
Dessa funktioner stöds av COMMAND.COM i alla versioner av DOS Plus och DR-DOS , men inte i MS-DOS eller PC DOS. De stöds också av kommandotolkarna i Concurrent DOS , Multiuser DOS och REAL/32 , även om de använder VT52 snarare än ANSI-kontrollsekvenser som standard (t.ex. ESC E ).
Ommappning av tangentbord
En intressant egenskap hos ANSI.SYS är möjligheten att mappa om valfri tangent på tangentbordet för att utföra genvägar eller makron för komplexa instruktioner. Med hjälp av speciella escape-sekvenser kan användaren definiera vilken tangenttryckning som helst som har en teckenkodsmappning för att simulera en godtycklig sekvens av sådana tangenttryckningar. Den här funktionen användes också för att skapa enkla trojaner av textfiler spetsade med skändliga tangentbordsombildningar, kända som "ANSI-bomber". Ett antal produkter släpptes för att skydda användare mot detta:
- Vissa versioner av ANSI.SYS stöder en kommandoradsomkopplare för att inaktivera nyckelombildningsfunktionen, t.ex. alternativet /S (Secure) i ANSI.SYS i Datalight ROM-DOS eller NANSI.SYS i FreeDOS . Andra ANSI-drivrutiner som ANSIPLUS kan konfigureras för att inaktivera omdefinieringen av nycklar också.
- Att ställa in CONFIG.SYS SCREEN =ANSI i PTS-DOS tillhandahåller en inbyggd ANSI-drivrutin som inte stöder tangentbordsmappningsfunktionerna.
- Några av ANSI.SYS-ersättningarna från tredje part utformades medvetet för att aldrig stödja tangentbordsmappningsfunktionerna.
- PKWARE producerade ett terminate-and-stay-resident-program , PKSFANSI (PK Safe ANSI), som filtrerar bort escape-koder för tangentbordsombildning när de skrivs till standardutgången. Detta har fördelen att användaren kan ladda några användbara ommappningar från en textfil och sedan köra PKSFANSI för att förhindra ytterligare, möjligen skadliga ommappningar.
Förekomst
ANSI.SYS dök upp i MS-DOS 2.0 , den första versionen av operativsystemet som stöder enhetsdrivrutiner. Det stöddes av alla följande versioner av MS-DOS. Det finns också i många icke-Microsoft DOS-system, t.ex. IBM PC DOS och DR-DOS .
ANSI.SYS krävdes för att köra viss programvara som använde dess markör- och färgkontrollfunktioner. Den kan också användas för att aktivera utarbetade färgkoder i COMMAND.COM- prompten. Dessa användningar överskuggades av användningen av ANSI.SYS i BBSes ; ANSI escape-sekvenser användes för att göra det möjligt för BBS:er att skicka textgrafik mer utarbetad än ASCII-konst , och för att styra markören på sätt som användes i ett antal onlinespel och liknande funktioner.
De flesta versioner av Windows stödde inte ANSI escape-koder på något användbart sätt (det kan användas av MSDOS-emulering i vissa versioner). I Windows 10 var stöd för liknande escape-sekvenser inbyggt i Win32-konsolen (textterminalfönstret), men måste aktiveras med Windows API -funktionen SetConsoleMode
genom att sätta flaggan ENABLE_VIRTUAL_TERMINAL_PROCESSING .
Funktioner
CSI ( Control Sequence Introducer) är en platshållare för den vanliga två-byte escape-inledningssekvensen " ESC [ " (det vill säga 0x1B 0x5B ). ANSI-standarden definierar också en alternativ enkelbyte CSI-kod 0x9B , som inte stöds av ANSI.SYS.
Standard DOS ANSI.SYS- drivrutiner stöder endast följande underuppsättning av ANSI-escape-sekvenser:
Sekvens | Effekt |
---|---|
ESC [ r A | Markör upp ( CUU ) |
ESC [ r B | Markör ner ( CUD ) |
ESC [ c C | Markör framåt ( CUF ) |
ESC [ c D | Markör tillbaka ( CUB ) |
ESC [ r ; c f | Horisontell och vertikal position ( HVP ) |
ESC [ r ; c H | Markörposition ( CUP ) |
ESC [ n J | Radera display ( ED ) (n=0, 2 eller n=0, 1, 2) |
ESC [ n K | Radera i rad ( EL ) (n=0 eller n=0, 1, 2) |
ESC [ n m | Välj grafisk återgivning ( SGR ) (n=0..47) |
ESC [ 6 n |
Enhetsstatusrapport ( DSR ) begär markörposition, returneras som markörpositionsrapport ( CPR ): ESC [ r ; c R |
ESC [ s | Spara markörposition ( SCP ) |
ESC [ u | Återställ markörposition ( RCP ) |
Det finns också några escape-sekvenser som är specifika för implementeringen av ANSI.SYS . De stöds i allmänhet inte av ANSI-konsoler i andra operativsystem.
Sekvens | Effekt |
---|---|
ESC [ n h ESC [ ? n h ESC [ = n h ESC [ > n h |
Ställ in skärmläge ( SM ) |
ESC [ n l ESC [ ? n l ESC [ = n l ESC [ > n l |
Återställ skärmläge ( RM ) |
ESC [ n q | Aktivera (n=1) eller inaktivera (n=0) /X- stöd |
ESC [ L | Infoga rad ( IL ) |
ESC [ M | Ta bort rad ( DL ) |
ESC $ ) 1 | Byt tangentbordsinmatningsläge till koreanska ( Hangul ) |
ESC ( 2 | Byt tangentbordsinmatningsläge till engelska |
ESC [ + | Aktivera konsolutgång |
ESC [ - | Inaktivera konsolutgång |
ESC [ a ; b ;... sid | Ställ in nyckelomdefiniering ( SKR / KR ) |
Läge | Beskrivning | Läge | Beskrivning |
---|---|---|---|
0 | 40 × 25 monokrom | 1 | 40 × 25 färger |
2 | 80 × 25 monokrom | 3 | 80 × 25 färger |
4 | 320 × 200 färger | 5 | 320 × 200 monokrom |
6 | 640 × 200 monokrom | ||
7 | Linda i slutet av raden | ||
13 | 320 x 200 färg (grafik) | 14 | 640 x 200 färg (16-färgsgrafik) |
15 | 640 x 350 monokrom (2-färgsgrafik) | 16 | 640 x 350 färg (16-färgsgrafik) |
17 | 640 x 480 monokrom (2-färgsgrafik) | 18 | 640 x 480 färg (16-färgsgrafik) |
19 | 320 x 200 färg (256-färgsgrafik) | ||
114 | 640 x 480 färg (16-färgsgrafik) | 115 | 640 x 475 färg (16-färgsgrafik) |
I vissa DOS-implementationer dokumenteras inte videolägen över 7. Under Multiuser DOS är det enda giltiga argumentet i kombination med PCTERM 7.
Se även
Anteckningar
externa länkar
- "I DOS, hur kan jag ändra min prompt eller skärmfärgen?" . Indiana University . 2010-10-25. Arkiverad från originalet 2017-09-11 . Hämtad 2017-09-11 .
- Cambus, Frederic (2017-04-19). "En uppsättning verktyg för att konvertera ANSi/BiN/ADF/iDF/TUNDRA/XBiN-filer till PNG-bilder" . Arkiverad från originalet 2017-09-11 . Hämtad 2017-09-11 .