Cleverton Bueno
← Voltar para todos os artigos

Controlando a Tela – A Magia das Emulações e Sequências de Escape

Uma exploração de como as interfaces de texto dos anos 90 eram controladas através de sequências de escape do padrão VT-100, transformando uma "tela preta" em uma interface dinâmica e colorida.

Olá, pessoal!
Hoje, criar a interface de um programa é algo que tomamos como garantido. Arrastamos um botão, definimos uma cor com um clique, posicionamos um campo de texto e pronto. Mas nos anos 90, no nosso mundo de "telas pretas", não tínhamos nada disso. A tela era uma tela de pintura em branco, e nós, os programadores, éramos os pintores. Nossos "pincéis" não eram o mouse, mas sim códigos misteriosos que enviávamos pelo cabo serial: as famosas sequências de escape.
Neste artigo, quero mostrar a vocês a mágica por trás de como a gente transformava uma tela de texto estática em uma interface de aplicação dinâmica, colorida e interativa.

A Torre de Babel e o Padrão VT-100

Primeiro, um pouco de contexto. Como vocês sabem, usávamos "terminais burros", que eram basicamente um teclado e uma tela. O problema é que, no início, cada fabricante (Wyse, TeleVideo, etc.) tinha seu próprio conjunto de comandos para fazer coisas como mover o cursor ou apagar uma linha. Era uma verdadeira Torre de Babel. Um programa feito para um terminal Wyse não funcionava em um TeleVideo.
Até que uma empresa chamada Digital Equipment Corporation (DEC) lançou um terminal que se tornou uma lenda: o VT-100. Ele era tão popular e seu sistema de comandos era tão lógico que ele se tornou o padrão de fato da indústria. A partir daí, outros fabricantes pararam de reinventar a roda e começaram a incluir um "Modo de Emulação VT-100" em seus equipamentos.
Nossos manuais confirmam isso. Tanto o ADD T-Multi quanto o Microtarget VTZ-180 tinham um modo de operação "VT-100". Ao selecionar essa opção no SETUP do terminal, nós garantíamos que, independentemente do fabricante, todos os nossos terminais "falariam a mesma língua" – a língua do VT-100. E é crucial entender: essa 'língua' não era um driver ou um software que instalávamos no terminal. A lógica para interpretar esses comandos vinha gravada de fábrica nos chips do equipamento. A emulação era uma característica física, parte do próprio hardware.

O "Código Secreto": As Sequências de Escape

Mas que língua era essa? Era uma linguagem baseada em "sequências de escape". A ideia era simples: como diferenciar um texto normal (que deve ser escrito na tela) de um comando (que deve ser executado pelo terminal)? A solução foi usar um caractere especial que não podia ser impresso: o caractere ESC (Escape, código ASCII 27). Ele foi a escolha perfeita porque, assim como o 'Enter' ou o 'Tab', ele pertence a uma família de 'caracteres de controle' da tabela ASCII. Sua única função na vida sempre foi ser um sinal, nunca aparecer impresso em um documento. Ele era, por design, um mensageiro secreto.
Quando o terminal recebia o caractere ESC, ele sabia que o que viria a seguir não era para ser escrito, mas sim interpretado como um comando. Esses comandos, que geralmente começavam com ESC seguido de [ (colchete), eram as "Sequências de Escape ANSI", a base do padrão VT-100.

Pintando a Tela: Exemplos Práticos

Vamos ver alguns dos nossos "pincéis" mais usados, comandos que vocês podem encontrar nos manuais da época.

  • Posicionar o Cursor: A função mais básica e essencial. Se eu quisesse escrever "Nome:" na linha 5, coluna 10, eu primeiro enviava o comando para mover o cursor. A sequência era ESC [ ; H.
    • Exemplo: Para ir à linha 5, coluna 10, o comando era ESC[5;10H.
  • Apagar a Tela: Antes de desenhar uma nova tela, precisávamos limpar a anterior.
    • Exemplo: ESC[2J apagava a tela inteira e posicionava o cursor no canto superior esquerdo.
  • Definir Atributos do Texto: Queríamos destacar um título ou um total? Usávamos os atributos.
    • ESC[1m: Deixava o texto seguinte em negrito (ou mais brilhante).
    • ESC[4m: Adicionava um sublinhado.
    • ESC[7m: Invertia as cores (vídeo reverso).
    • ESC[0m: O comando mais importante de todos! Ele resetava todos os atributos, voltando o texto ao normal.
  • As Cores (Onde o VTZ-180 Brilhava): O padrão VT-100 original era monocromático. Mas o padrão ANSI foi estendido para incluir cores, e terminais como o nosso aclamado VTZ-180 implementaram isso com maestria (leia também o artigo "As Janelas para o Sistema – A Arte de Configurar Terminais""). Os comandos eram simples: ESC [ <codigo_cor> m.
    • ESC[31m: Texto Vermelho
    • ESC[32m: Texto Verde
    • ESC[34m: Texto Azul
    • ESC[41m: Fundo Vermelho

Então, para escrever a palavra "ERRO" em letras vermelhas brilhantes sobre um fundo normal na linha 10, coluna 20, a sequência de comandos e texto que meu programa enviava pelo cabo serial era:

  • ESC[10;20H (posiciona) + ESC[1m (negrito) + ESC[31m (vermelho) + ERRO + ESC[0m (reseta tudo).

Trazendo a Magia para o Mundo Real: O Papel do Formplus

Agora, vocês devem estar imaginando meu código em C cheio de printf("\x1B[10;20H");. Sim, no início, era assim mesmo! Mas era um trabalho de louco, difícil de manter e cheio de "números mágicos".
É aqui que entrava a genialidade de bibliotecas de interface como a Formplus, que usamos extensivamente (leia também o artigo "A Obra-Prima – Anatomia da Aplicação de Saúde"). O Formplus era a nossa "engine gráfica" para o modo texto. Ao usá-lo, nós não nos preocupávamos com sequências de escape. Nós simplesmente definíamos uma estrutura com os campos da tela, suas posições, cores e variáveis.
Quando nosso programa executava a função formplus(), a biblioteca fazia todo o trabalho sujo. Ela lia nossa definição de tela e gerava, por baixo dos panos, centenas de sequências de escape para limpar a tela, desenhar as bordas, posicionar os títulos, escrever os campos e controlar a navegação do cursor. O Formplus era o tradutor que convertia nossas intenções de alto nível ("quero um campo de nome na linha 5") na linguagem de baixo nível que o terminal entendia.

Conclusão

A "tela preta" dos terminais estava longe de ser um ambiente estático. Era uma tela dinâmica, que podíamos controlar com uma precisão de pixel (ou melhor, de caractere). Dominar a emulação VT-100 e suas sequências de escape era uma habilidade fundamental que nos permitia criar interfaces ricas, coloridas e eficientes.
E essa tecnologia não morreu. Toda vez que você vê uma saída de terminal colorida no Linux (ls --color), uma barra de progresso que se atualiza no lugar, ou usa um editor de texto de terminal como o vim ou o nano, você está vendo os descendentes diretos dessas mesmas sequências de escape ANSI. A tela preta continua mais viva do que nunca, e agora, vocês conhecem um pouco mais da sua antiga e poderosa magia.