ANSI-Escapesequenzen oder ANSI-Escapecodes sind Zeichenfolgen zur Bildschirmsteuerung (Escapesequenzen), die das ASCII-/ANSI-Zeichen 27 (1B hexadezimal), „Escape“, als einleitendes Steuerzeichen nutzen und auf dem Standard von ANSI X3.64 und ECMA-48 beruhen. Diese ANSI/ECMA-Norm definiert einen Standard zur Bildschirm- und Tastatursteuerung auf Terminals wie der DEC VT100 (1979). Außer auf Terminals selbst sind ANSI-Escapesequenzen in entsprechenden Terminalemulationen und in Kommandozeileninterpretern implementiert.

Die 2. Ausgabe von ECMA-48 wurde 1978 als ISO 6429 und mit der 4. Ausgabe 1986 als ISO/IEC 6429 standardisiert. Der aktuelle ECMA-48-Standard entspricht der 5. Ausgabe vom Juni 1991.

Geschichte In den 1970er Jahren wurde der ASCII-Standard, der bereits 1968 festgelegt worden war, durch das (ANSI) überarbeitet. Dieser als ANSI X3.4-1977 bezeichnete Standard definiert jedoch nur die ersten 7 Bit, wurde als die ASCII-Zeichentabelle bekannt und bildet die Grundlage für weitere internationale Zeichensätze. Die ersten Arbeiten zur Standardisierung eines 8-Bit-Zeichensatzes resultierten bereits 1971 in ANSI X3.41 und ECMA-35. Gemeinsam mit der (ECMA) wurde in den Komitees mit den Bezeichnungen „X3L2“ bei ANSI und „TC 1“ bei ECMA an der Erweiterung der 8-Bit-Eingabe- und -Ausgabesteuerung gearbeitet, was u. a. die Möglichkeiten der Videoausgabe auf Terminals erweitern und gleichzeitig standardisieren sollte. Das Ergebnis dieser Arbeit ist ECMA-48 vom September 1976 sowie ANSI X3.64 von 1977. Diese Spezifikation wurde auch dem ISO-Komitee vorgelegt und 1978 als ISO 6429 akzeptiert. Die 2. Ausgabe von ANSI X3.64 und ECMA-48 von 1979 ist identisch mit der ISO-Norm.

Die ersten Terminals, die ANSI X3.64-1977 umsetzten, waren der DEC-VT100-Terminal von 1978 und der Heathkit H89 von 1979.DEC Terminals. Invisible Island (englisch). Wegen ihres kommerziellen Erfolgs wurden die VT100-Terminals kontinuierlich weiterentwickelt, wobei auf Abwärtskompatibilität geachtet wurde, so dass auch die späteren Modelle im Wesentlichen dem ANSI-Standard folgten.VT420 Reference Manual: Abschnitt D (Compatibility). (PDF; 1,5 MB) vt100.net (englisch). Aufbauend auf VT100 entstand außerdem im Unix-Bereich die xterm-Emulation.Xterm. Invisible Island (englisch). Deren gleichnamiger Terminaltyp ist heute in gängigen Terminalemulationen quasi Standard,Setting Your Terminal Type. cs.odu.edu (englisch). so dass die Steuerung von Terminals und Konsolen zur Nutzung von Unix-Shells heute im Prinzip (über den Umweg Xterm und VT100) auf die ANSI-Escapesequenzen des ECMA-48/ANSI-X3.64-Standards zurückgehen. Ähnliches gilt für PCs, wo ursprünglich DOS bzw. die Eingabeaufforderung den ANSI-Standard unterstütztenANSI.SYS MSDN; abgerufen am 26. März 2016 (englisch). und das Fenster für den Kommandozeileninterpreter in Windows 10 inzwischen auf xterm basiert.Über ANSI-Terminals: ANSI-Terminal Unterstützung. learn.microsoft.com

Standards Der Standard wurde mit minimalen Abweichungen sowohl von ANSI als auch ECMA herausgegeben und nach Einreichung auch zur ISO- und IEC-Norm. Allerdings sind nur die ECMA-Standards frei zugänglich (gratis). Der ANSI-Standard wurde zugunsten der ISO-Norm zurückgezogen, um Doppelstandardisierung zu vermeiden.

Jahr Bezeichnung ANSI ECMA ISO/IEC 1965 USASANSI: Historical Overview (englisch); abgerufen am 27. März 2016. Das (ANSI) hieß vor 1969 (USASI). X3.4 ECMA-6ECMA-6. ecma-international.org (englisch). ISO/IEC 646 1971 ANSI X3.41 ECMA-35ECMA-35. ecma-international.org (englisch). ISO/IEC 2022 1974 ? ECMA-43ECMA-43 ecma-international.org (englisch). ISO/IEC 4873 1979 ANSI X3.64 ECMA-48ECMA-48. ecma-international.org (englisch). ISO/IEC 6429

Die Standards sind aufbauend und miteinander verwoben – wurde einer der Standards angepasst, so wurde meist auch eine angepasste Version der anderen Standards veröffentlicht. Leider gibt es dennoch in unterschiedlichen Implementierungen und Dokumenten (sogar Standards und Normen) zueinander inkompatible Steuerzeichen und -sequenzen. (PDF; 153 kB) itscj.ipsj.or.jp (englisch); abgerufen am 28. März 2016

ANSI-Steuerzeichen und -Steuersequenzen

Der ASCII-Standard nach ECMA-6 (ANSI X3.4) ist auf 7 Bits begrenzt und definiert die Codierung von 96 Buchstaben und Symbolen, sowie 32 so genannten C0-Steuerzeichen (im Bereich 0–31 dezimal bzw. 00–1Fhexadezimal).

Die Erweiterung auf 8 Bit nach ECMA-43 fügt im Bereich von 128–159 dezimal (bzw. 80–9Fhexadezimal) Raum für 32 weitere Steuerzeichen hinzu, jedoch ohne deren Funktion konkret zu spezifizieren.

Steuerzeichen Im Standard ECMA-48 (ANSI X3.64) von 1977 wurden dann, aufbauend auf die in den vorherigen Standards vorgeschlagenen Code-Bereiche, die Funktion der C0- und C1-Steuerzeichen tatsächlich präzise definiert.ECMA-48: Kapitel 8.3 Definition of Control Functions. ecma-international.org (englisch).

Escapesequenzen Weil jedoch der Platz für die Steuerzeichen auf 64 Funktionen begrenzt ist, wurden zusätzlich zu den Steuerzeichen weitere Befehle und Funktionen über so genannte Steuersequenzen implementiert.Control characters in ASCII and Unicode. Aivosto (englisch), Abschnitt ; Zitat:

Während nämlich ein Steuerzeichen eine Funktion direkt umsetzt, besteht eine Steuersequenz aus mehreren Zeichen. Deren Anzahl ist je nach Funktion unterschiedlich, die möglichen Kombinationen sind jedoch im Standard genau spezifiziert. Da einige der primären Steuerzeichen im C1-Bereich liegen und daher nur auf Systemen mit 8-Bit-Zeichensätzen verfügbar sind, legt der ECMA-48 Standard für die meisten Steuerzeichen im C1-Bereich auch Kombination aus 7 Bit Zeichen fest (s. u.).

Durch die mögliche Kombination von mehreren Zeichen zu einer Sequenz ergibt sich die Möglichkeit weit mehr als 64 Steuerfunktionen festzulegen, bzw. diese Funktionen zu parametrisieren (z. B. einer Funktion einen Wiederholungsfaktor beizufügen). Dementsprechend beschreibt der Standard insgesamt 162 Steuercodes und Sequenzen, die teilweise komplexe Funktionen ausführen, wie z. B. Cursor-Steuerung, Bildschirm-Befehle (Lösch-, Attribut-, Modus-Befehle) und Tastatur-Befehle.Programming: ANSI.SYS Escape Sequences. evergreen.edu (englisch); archiviert Oktober 2017. Diese wurden als „ANSI-Escapesequenzen“ (, manchmal auch ) bekannt.

Zeichensätze

In den meisten Zeichensätzen sind die C0- und C1-Steuerzeichen an den normierten Positionen enthalten. Außer auf emulierten VT100-Terminals finden jedoch fast nur C0-Steuerzeichen Verwendung.Control characters in Unicode. Aivosto, Resources for developers (englisch); abgerufen am 28. März 2016.

Bei der Entwicklung von Unicode wurden diese ebenfalls übernommen, sodass in Unicode die Steuerzeichen gem. ANSI X3.64 und ECMA-48 innerhalb der ersten 256 Positionen abgebildet sind. ANSI-Escapesequenzen sind bei Unicode zwar ohne Funktion, jedoch wurden einige der Funktionen an anderer Unicode-Position ähnlich umgesetzt (z. B. ein geschütztes Leerzeichen).

Steuerzeichen Die über eine Escapesequenz aufgerufene Funktion eines C1-Steuerzeichens hat gemäß Spezifikation genau die gleiche Funktion wie das einzelne Steuerzeichen. Als Escapesequenz bleiben Steuerzeichen innerhalb des 7-Bit-C0-Bereichs von ASCII und sind somit mit Systemen, die nur 7-Bit unterstützen oder in diesen Modus geschaltet wurden, kompatibel.

C1-Steuerzeichen im ANSI ECMA-48 Standard

Dies ist ein Auszug von C1-Steuerzeichen aus dem 8-Bit-„ANSI“-Zeichensatz, die mittels Escapesequenzen (C0-Steuerzeichen an ASCII-Position 27) im 7-Bit-ASCII-Zeichensatz zugänglich sind. Die genaue Funktion dieser Steuerzeichen, z. B. welche Funktion ein Reverse Line Feed genau ausführt, ist im Kapitel 8.3 des EMCA-48 Standards festgelegt. + 8-Bit-Steuerzeichen (C1) und deren 7-Bit-Äquivalent (C0) Steuerbefehl C1-Position C0-Positionen Zeichenname ISO IETF Hex Dez Okt Escapesequenz Hex Dez Okt PADPA 80128200 ESC @ 1B 40027 06433 100 HOPHO 81129201 ESC A 1B 41027 06533 101 BPHBH 82130202 ESC B 1B 42027 06633 102 NBHNH 83131203 ESC C 1B 43027 06733 103 INDIN 84132204 ESC D 1B 44027 06833 104 NELNL 85133205 ESC E 1B 45027 06933 105 SSASA 86134206 ESC F 1B 46027 07033 106 ESAES 87135207 ESC G 1B 47027 07133 107 HTSHS 88136210 ESC H 1B 48027 07233 110 HTJHJ 89137211 ESC I 1B 49027 07333 111 VTSVS 8A138212 ESC J 1B 4A027 07433 112 PLDPD 8B139213 ESC K 1B 4B027 07533 113 PLUPU 8C140214 ESC L 1B 4C027 07633 114 RI RI 8D141215 ESC M 1B 4D027 07733 115 SS2S2 8E142216 ESC N 1B 4E027 07833 116 SS3S3 8F143217 ESC O 1B 4F027 07933 117 DCSDC 90144220 ESC P 1B 50027 08033 120 PU1P1 91145221 ESC Q 1B 51027 08133 121 PU2P2 92146222 ESC R 1B 52027 08233 122 STSTS 93147223 ESC S 1B 53027 08333 123 CCHCC 94148224 ESC T 1B 54027 08433 124 MW MW 95149225 ESC U 1B 55027 08533 125 SPASG 96150226 ESC V 1B 56027 08633 126 EPAEG 97151227 ESC W 1B 57027 08733 127 SOSSS 98152230 ESC X 1B 58027 08833 130 SGCIGC 99153231 ESC Y 1B 59027 08933 131 SCISC 9A154232 ESC Z 1B 5A027 09033 132 ROI 9A154232 ESC % 1B 25027 03733 45 CSICI 9B155233 ESC [ 1B 5B027 09133 133 ST SI 9C156234 ESC \ 1B 5C027 09233 134 OSCOC 9D157235 ESC ] 1B 5D027 09333 135 PM PM 9E158236 ESC ^ 1B 5E027 09433 136 APCAC 9F159237 ESC _ 1B 5F027 09533 137

Zur Berechnung der Escapesequenz wird vom C1-Steuerzeichen 40h, 64 dezimal oder 100 oktal abgezogen. So hat beispielsweise das Steuerzeichen PAD die C1-Position 80h: zieht man 40h davon ab erhält man die Escapesequenz ESC @, weil das @-Zeichen die C0-Position 40h hat, also 80h-40h=40h. Ebenso verhält es sich bei in dezimal ausgedrückten Zeichenpositionen: 128-64=64 (entspricht 40h), sowie oktal: 200-100=100 (entspricht 40h).

Der einzige Nachteil der Escapesequenz ist, dass ein zusätzliches Zeichen pro Steuerbefehl verarbeitet werden muss, was auf langsamen Terminals zu Geschwindigkeitseinbußen führen konnte – zumindest theoretisch und wenn ein ANSI-Script sehr lang war. Nach der Spezifikation können alle 8-Bit-fähigen Geräte auch die 7-Bit-Escapefunktion nutzen, sodass sich die Escapesequenzen durchgesetzt haben.

Steuersequenzen Eine Steuersequenz wird immer durch ein Steuerzeichen eingeleitet und besteht mindestens aus zwei Zeichen. Bei variabler Größe wird die Steuersequenz durch ein definiertes abschließendes Zeichen oder durch ein Trennzeichen abgeschlossen. Eine Steuersequenz wird wie ein einzelnes Steuerzeichen behandelt, mit dem Unterschied, dass die gesamte Steuersequenz gelesen werden muss, bevor deren Umsetzung erfolgen kann.

Im Wesentlichen gibt es drei Steuerzeichen, die eine Steuersequenz einleiten: ESC: SCI: CSI: Nur das Steuerzeichen ESC liegt im ASCII-Bereich und ist daher ein 7-Bit-kompatibles C0-Steuerzeichen. Die beiden C1-Steuerzeichen SCI und CSI können über eine Escapesequenz substituiert werden, womit die Steuersequenz dann ASCII-kompatibel auf 7-Bit beschränkt bleibt.

Die Steuerzeichen APC, DCS, OSC, PM und SOS leiten ebenfalls eine Steuersequenz ein und müssen mit dem Trennzeichen ST abgeschlossen werden.

Single Character Introducer Das Steuerzeichen „“ (SCI) leitet eine Steuersequenz mit nur einem einzigen darauffolgenden Zeichen ein und benötigt daher auch kein Trennzeichen. Da jedoch die Funktionen dieses Steuerzeichens nicht standardisiert wurden, bedeuten sie auf jedem System etwas anderes. Die jeweilige proprietäre Funktion wird mit der Escapesequenz ESC Z eingeleitet, gefolgt von einem Zeichen, das eine proprietär definierte Funktion auslöst. Da der ECMA-/ANSI-Standard keine standardisierten Funktionen festlegt, kann jede Implementierung eigene proprietäre Funktionen festlegen. Zum Beispiel könnte eine Terminalemulation konform zum Standard für sich die Sequenz <ESC> Z K verwenden, um die Tastatur zu deaktivieren. Unter VT100 und seinem 8-Bit fähigen Nachfolger VT220 wird SCI nicht verwendet.DEC: VT220 Programmer Reference Manual. (PDF; 2,4 MB) vt100.net (englisch).

Control Sequence Intro