Então estou escrevendo uma emulação de terminal (eu sei, eu deveria apenas compilar massa de vidraceiro, etc.) e estou no estágio de trabalhar com esforço para ter certeza de que está certo. Eu estou baseando-o no VT102 por enquanto, mas adicionarei recursos de terminal posteriores, como cor, quando o básico estiver funcionando corretamente.
O conjunto de comandos é principalmente ANSI. O DEC tinha seu próprio conjunto de comandos, mas suportava os comandos ANSI de aproximadamente 1973. Esses padrões ANSI aparentemente não estão disponíveis agora, mas os equivalentes ECMA são, eu os tenho (o ECMA-48 parece mais relevante) mas não responde a essa pergunta pode ver. A maioria das seqüências de comandos ANSI começam com ESC. Muitos comandos começam com o identificador de sequência de comandos mostrado aqui como CSI e representado nos dados como 0x1c 0x5b (ESC [
) ou 0xdb se a comunicação de 8 bits for possível. Em seguida, seguiu uma sequência identificando o comando. Alguns comandos afetam a posição do cursor, alguns da tela, alguns provocam uma resposta ao host e assim por diante.
Alguns comandos do terminal incluem um argumento numérico. Exemplo CSI 10 ; 5 H
significa tornar a posição do cursor na linha 10, coluna 5. Quando o argumento numérico está faltando, há um valor padrão a ser usado: CSI 10 ; H
significa fazer a posição do cursor na linha 10, coluna 1 porque 1 é o valor padrão quando argumento não é dado.
Eu tenho o manual vt102 do vt100.net (great resource) e cerca de uma dúzia de páginas dando informações parciais sobre essas seqüências de comandos. Aparentemente, a especificação completa do terminal DEC do DEC nunca chegou a sair do DEC.
O que está claro é que CSI C
é mover o cursor para a direita e que o valor padrão é 1.
O que não está claro é qual é o significado de CSI 0 C
.
Por que tem um zero lá, parece fazer o comando não fazer nada? Se isso significa "usar valor padrão", então ele poderia ter sido enviado como 1, mas a string mais curta não teria argumento e contaria com o valor padrão sendo interpretado como 1 de qualquer maneira. Esses terminais VT físicos reais eram frequentemente usados a 300 bauds e abaixo, de modo que um personagem importava!
Eu não sou tão avançado com vttest que eu posso apenas tentar de duas maneiras e ver o que torna tudo perfeito, mas eu estou longe o suficiente para que pequenas perguntas como essa estejam começando a importar.