questões de sequência de comandos DEC ANSI; movimento do cursor

8

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.

    
por Adam Eberbach 21.09.2011 / 14:10

2 respostas

4

Entrei em contato com Thomas Dickey (invisible-island.net), que mantém xterm e vttest - ele explicou que CSI 0 C é o mesmo que CSI 1 C ou CSI C no xterm.

Para quem procura mais informações sobre programação de terminais eu recomendo verificar a origem do xterm que ele hospeda - especificamente o ctlseqs.txt dentro do xterm, que se parece muito com a única referência de sequências de controle de terminal que estive procurando.

    
por 23.09.2011 / 01:33
1
Por que codificar a compatibilidade para um tipo de terminal específico quando você já tem um banco de dados mapeando a funcionalidade para sequências de código específicas para vários terminais diferentes? (o banco de dados terminfo geralmente está em / usr / share e está incluído na maioria das distribuições ncurses). Qualquer recurso sobre maldições deve explicar o modo como essas funções são rotuladas.

Note que os arquivos terminfo são geralmente compilados (usando tic), então você pode ter que cavar um pouco para encontrar os arquivos de origem terminfo.

Veja também link (há um link em um deles para um repositório de arquivos terminfo.src )

    
por 22.09.2011 / 13:33