Quindi sto scrivendo un'emulazione terminale (lo so, dovrei solo compilare il mastice, ecc.) E sono nella fase di sfogliare vttest per assicurarmi che sia giusto. Lo sto basando sul VT102 per ora, ma aggiungerò in seguito funzionalità terminali come il colore quando le basi funzionano correttamente.
Il set di comandi è principalmente ANSI. DEC aveva il proprio set di comandi ma supportava i comandi ANSI dal 1973 circa. Questi standard ANSI non sono apparentemente disponibili ora ma gli equivalenti ECMA sono, li ho (ECMA-48 sembra più rilevante) ma non risponde a questa domanda per quanto posso vedere. La maggior parte delle sequenze di comandi ANSI iniziano con ESC. Molti comandi iniziano con l'identificatore della sequenza comandi mostrato qui come CSI e rappresentato nei dati come 0x1c 0x5b (ESC [
) o 0xdb se era possibile la comunicazione a 8 bit. Quindi ha seguito una sequenza che identifica il comando. Alcuni comandi influenzano la posizione del cursore, altri lo schermo, altri provocano una risposta all'host e così via.
Alcuni comandi del terminale includono un argomento numerico. Esempio CSI 10 ; 5 H
significa rendere la posizione del cursore riga 10, colonna 5. Quando manca l'argomento numerico, esiste un valore predefinito da usare: CSI 10 ; H
significa rendere la posizione del cursore riga 10, colonna 1 perché 1 è il valore predefinito quando non viene fornito un argomento.
Ho il manuale di vt102 da vt100.net (ottima risorsa) e circa una dozzina di pagine che forniscono informazioni parziali su queste sequenze di comandi. Apparentemente, le specifiche complete del terminale DEC del Vangelo non sono mai state ricavate da DEC.
Ciò che è chiaro è che CSI C
si sposta il cursore a destra e che il valore predefinito è 1.
Ciò che non è chiaro è il significato di CSI 0 C
.
Perché avere uno zero lì, sembra che il comando non faccia nulla? Se significa "usa il valore predefinito", avrebbe potuto invece essere inviato come 1, ma la stringa più breve non avrebbe argomenti e si baserebbe sul valore predefinito interpretato comunque come 1. Questi terminali VT fisici reali venivano spesso usati a 300 baud e al di sotto quindi l'unico personaggio contava!
Non sono così avanzato con vttest che posso solo provarlo in entrambi i modi e vedere quale rende tutto perfetto, ma sono abbastanza lontano che piccole domande come questa stanno iniziando a importare.
[
, che può essere codificato sia come sequenza di due caratteriESC [
, sia come[
con l'ottavo bit impostato. (Alcuni modelli potrebbero supportare soloESC [
) Non so che cosa haCSI 0 C
fatto sul vt102; su xterm è equivalente aCSI 1 C
. Ho il sospetto, ma non so per certo, che 0 e l'assenza di un valore vengono analizzati in modo identico ad un certo punto (pensaatoi
). Hai cercato commenti nella fonte xterm?