Ich schreibe also eine Terminalemulation (ich weiß, ich sollte nur Kitt kompilieren usw.) und bin gerade dabei, vttest zu durchlaufen, um sicherzustellen, dass es richtig ist. Ich stütze mich vorerst auf den VT102, werde aber später Terminalfunktionen wie Farbe hinzufügen, wenn die Grundlagen richtig funktionieren.
Der Befehlssatz ist meistens ANSI. DEC hatte einen eigenen Befehlssatz, unterstützte jedoch die ANSI-Befehle von etwa 1973. Diese ANSI-Standards sind anscheinend derzeit nicht verfügbar, aber die ECMA-Äquivalente sind, ich habe sie (ECMA-48 scheint am relevantesten zu sein), beantwortet diese Frage jedoch nicht, soweit ich kann sehen. Die meisten ANSI-Befehlssequenzen beginnen mit ESC. Viele Befehle beginnen mit der hier als CSI angezeigten Befehlssequenzkennung, die in den Daten als 0x1c 0x5b (ESC [
) oder 0xdb dargestellt wird, wenn eine 8-Bit-Kommunikation möglich war. Dann folgte eine Sequenz, die den Befehl identifizierte. Einige Befehle wirken sich auf die Cursorposition aus, andere auf den Bildschirm, andere auf den Host und so weiter.
Einige Terminalbefehle enthalten ein numerisches Argument. Beispiel CSI 10 ; 5 H
bedeutet, dass die Cursorposition Zeile 10, Spalte 5 erstellt wird. Wenn das numerische Argument fehlt, muss ein Standardwert verwendet werden: CSI 10 ; H
bedeutet, dass die Cursorposition Zeile 10, Spalte 1 erstellt wird, da 1 der Standardwert ist, wenn kein Argument angegeben wird.
Ich habe das vt102-Handbuch von vt100.net (großartige Ressource) und ungefähr ein Dutzend Seiten, die teilweise Informationen zu diesen Befehlssequenzen enthalten. Anscheinend hat es die komplette Gospel-DEC-Terminalspezifikation nie aus DEC geschafft.
Klar ist, dass der CSI C
Cursor nach rechts bewegt wird und der Standardwert 1 ist.
Was nicht klar ist, ist die Bedeutung von CSI 0 C
.
Warum dort eine Null haben, scheint der Befehl nichts zu tun? Wenn es "Standardwert verwenden" bedeutet, könnte es stattdessen als 1 gesendet worden sein, aber die kürzere Zeichenfolge hätte kein Argument und würde davon abhängen, dass der Standardwert trotzdem als 1 interpretiert wird. Diese tatsächlichen physischen VT-Terminals wurden häufig bei 300 Baud und darunter verwendet, sodass das eine Zeichen eine Rolle spielte!
Ich bin mit vttest nicht so weit fortgeschritten, dass ich es einfach in beide Richtungen versuchen und sehen kann, was alles perfekt macht, aber ich bin weit genug, dass kleine Fragen wie diese anfangen, wichtig zu werden.
[
, das entweder als zweistellige SequenzESC [
oder wie[
mit dem gesetzten 8. Bit codiert werden kann . (Einige Modelle unterstützen möglicherweise nurESC [
) Ich weiß nicht, wasCSI 0 C
auf dem vt102 getan hat; auf xterm ist es äquivalent zuCSI 1 C
. Ich vermute, weiß aber nicht genau, dass 0 und das Fehlen eines Wertes irgendwann identisch analysiert werden (denken Sie nachatoi
). Haben Sie in der xterm-Quelle nach Kommentaren gesucht?