ANSI ESCape-Sequenzen

Als es noch keine Bildschirme sondern lediglich Teletypes gab, da war die Steuerung eines Cursors kein Thema - eben weil es keinen gab. Mit Einführung der Bildschirmgeräte wurde das anders. Der Cursor konnte an jede beliebige Stelle des Bildschirms bewegt werden.

Der allgemein gültige ASCII-Zeichensatz (7-Bit, Bereich 0x00 bis 0x7F) definiert die Darstellung von Zeichen: Innerhalb der Steuerzeichen existiert das Zeichen ESCAPE ("Fluchtzeichen", 0x1b). Zum Manipulieren des Cursors wurde dieses Zeichen üblicherweise als Einleitungszeichen verwendet. (Bei einigen Herstellern wurden spezielle Steuerungen für den Bildschirm allerdings aus dem Bereich der Steuerzeichen genutzt). Anfänglich hatten die Hersteller eigene Steuersequenzen. Die Firma Digital Equipment Corporation (DEC) setzte mit ihren VT-Modellen dann einen Standard. Hier findet sich eine Zusammenstellung von Dokumenten der VT-Serie. Die Steuerzeichen gut dokumentiert finden sich im VT100 User Guide.

Als CP/M auf den Markt kam, gab es noch keinen Standard, erst MS-DOS bediente sich der ANSI-Steuerzeichen. Hier findet sich eine Übersicht im MS-DOS Umfeld.
Wie umfangreich die verschiedenen Kombinationen der Steuerzeichen sind, lässt sich leicht überprüfen, wenn man TURBO PASCAL besitzt. Das Programm TINST.COM installiert aus einer Vielzahl von Möglichkeiten die Steuerungen für das eigene Terminal. Hier ein Ausschnitt aus der schier unendlichen Anzahl von Möglichkeiten.

Als der Joyce auf den Markt kam, bediente er sich auch nicht des ANSI-Standards sondern setzte Steuersequenzen des Zenith Z19/Z29 Monitors ein. Hier findet sich eine (englische) Zusammenstellung für diesen Monitor (und hier in Deutsch).

Zu erkennen ist die Ähnlichkeit beider Sätze von Steuerzeichen.

Als ich damals mit der Anbindung meines Joyce über ein MODEM in die weite Welt begann, habe ich das über den Terminal-Emulator von KERMIT gemacht. In den angeschlossenen Einrichtungen wurde meistens das VT-100 Terminal unterstützt und ich habe einen ANSI-Emulator geschrieben. Umgesetzt habe ich die Sequenzen folgendermaßen:

FunktionANSI SequenzJOCYE Umsetzung
Cursor hochESC [ Pn APn-mal ESC A
Cursor runterESC [ Pn BPn-mal ESC B
Cursor rechtsESC [ Pn CPn-mal ESC C
Cursor linksESC [ Pn DPn-mal ESC D
Cursor setzenESC [ P1;P2 HESC Y P1+31 P2+31
Bildschirm löschenESC [ Pn JESC J
Zeile löschenESC [ Pn KESC K
Attribute setzenESC [ P1;..;Pn m Px=0 ESC u ESC q
Px=4 ESC r
Px=7 ESC p
In einer späteren Implementation einer ANSI-RSX kamen noch folgende Funktionen hinzu:
FunktionANSI SequenzJOCYE Umsetzung
Cursor setzenESC [ P1;P2 fESC Y P1+31 P2+31
Cursor speichernESC [ sESC j
Cursor ladenESC [ uESC k

Was bei der Implementierung von KERMIT fehlt ist die genaue Umsetzung der Sequenzen ESC [ Pn J und ESC [ Pn K. Korrekt muss die Umsetzung wie folgt aussehen:

Korrekte Funktionen
Bildschirm löschen
FunktionANSI SequenzJOCYE Umsetzung
Von Cursor bis EndeESC [ 0 JESC J - Default
Von Anfang bis CursorESC [ 1 JESC d
Alles löschenESC [ 2 JESC E
Zeile löschen
FunktionANSI SequenzJOCYE Umsetzung
Von Cursor bis EndeESC [ 0 KESC K - Default
Von Anfang bis CursorESC [ 1 KESC o
Alles löschenESC [ 2 KESC l

Bei der späteren Umsetzung einer RSX ist diese Korrektur mit eingeflossen.
Angeregt durch die Programmierung einer ANSI RSX durch Andress Freystatzky habe ich seine RSX entsprechend modifiziert. Dem ANSI Kontrollprogramm wird die ANSI-RSX mit GENCOM angehängt; mit ihm lässt sich die RSX installieren und löschen.

Hier eine Übersicht über die Programme:

ANSI-RSX ANSI Kontrollprogramm KERMIT (Teil 10)