Termcap - Termcap

Termapi.svg

Termcap ( capacidade de terminal ) é uma biblioteca de software e banco de dados usado em computadores do tipo Unix . Ele permite que os programas usem terminais de computador de exibição de maneira independente do dispositivo, o que simplifica muito o processo de escrever aplicativos em modo de texto portátil . Bill Joy escreveu a primeira biblioteca termcap em 1978 para o sistema operacional Berkeley Unix ; desde então, ele foi portado para a maioria dos ambientes Unix e semelhantes ao Unix, até mesmo OS-9 . O design de Joy foi supostamente influenciado pelo design do armazenamento de dados do terminal no Incompatible Timesharing System anterior .

Um banco de dados termcap pode descrever as capacidades de centenas de terminais de exibição diferentes. Isso permite que os programas tenham uma saída de exibição baseada em caracteres , independente do tipo de terminal. Editores de texto na tela, como vi e emacs, são exemplos de programas que podem usar o termcap. Outros programas estão listados na categoria Termcap .

Exemplos do que o banco de dados descreve:

  • quantas colunas de largura a tela tem
  • qual string enviar para mover o cursor para uma posição arbitrária (incluindo como codificar os números de linha e coluna)
  • como rolar a tela para cima uma ou várias linhas
  • quanto preenchimento é necessário para tal operação de rolagem.

Modelo de dados

Os bancos de dados Termcap consistem em uma ou mais descrições de terminais.

Índices

Cada descrição deve conter o nome canônico do terminal. Ele também pode conter um ou mais apelidos para o nome do terminal. O nome canônico ou apelidos são as chaves pelas quais a biblioteca pesquisa o banco de dados termcap.

Valores de dados

A descrição contém um ou mais recursos, que possuem nomes convencionais. Os recursos são digitados: booleano , numérico e string . A biblioteca termcap não possui um tipo predeterminado para cada nome de recurso. Ele determina os tipos de cada recurso pela sintaxe:

  • os recursos de string têm um "=" entre o nome do recurso e seu valor,
  • recursos numéricos têm um "#" entre o nome do recurso e seu valor, e
  • os recursos booleanos não têm valor associado (eles são sempre verdadeiros se especificados).

Os aplicativos que usam o termcap esperam tipos específicos para os recursos comumente usados ​​e obtêm os valores dos recursos do banco de dados termcap usando chamadas de biblioteca que retornam com sucesso apenas quando o conteúdo do banco de dados corresponde ao tipo assumido.

Hierarquia

As descrições do Termcap podem ser construídas incluindo o conteúdo de uma descrição em outra, suprimindo recursos da descrição incluída ou substituindo ou adicionando recursos. Não importa qual modelo de armazenamento é usado, a biblioteca termcap constrói a descrição do terminal a partir da descrição solicitada, incluindo, suprimindo ou substituindo no momento da solicitação.

Modelo de armazenamento

Os dados do Termcap são armazenados como texto, tornando-os simples de modificar. O texto pode ser recuperado pela biblioteca termcap de arquivos ou variáveis ​​de ambiente.

Variáveis ​​ambientais

A variável de ambiente TERM contém o nome do tipo de terminal.

A variável de ambiente TERMCAP pode conter um banco de dados termcap. É mais frequentemente usado para armazenar uma única descrição do termcap, definida por um emulador de terminal para fornecer as características do terminal para o shell e programas dependentes.

A variável de ambiente TERMPATH é suportada por novas implementações termcap e define um caminho de pesquisa para arquivos termcap.

Arquivo plano

A implementação original (e mais comum) da biblioteca termcap recupera dados de um arquivo de texto simples. Pesquisar um arquivo termcap grande, por exemplo, 500 kB, pode ser lento. Para ajudar no desempenho, um utilitário como reordenar é usado para colocar as entradas usadas com mais frequência perto do início do arquivo.

Banco de dados com hash

Implementações baseadas em BSD-4.4 do termcap armazenam a descrição do terminal em um banco de dados hash (por exemplo, algo como Berkeley DB versão 1.85). Eles armazenam dois tipos de registros: apelidos que apontam para a entrada canônica e a própria entrada canônica. O texto da entrada do termcap é armazenado literalmente.

Limitações e extensões

A implementação original do termcap foi projetada para usar pouca memória:

  • o primeiro nome tem dois caracteres, para caber em 16 bits
  • nomes de capacidade são dois caracteres
  • as descrições são limitadas a 1023 caracteres.
  • apenas uma entrada do termcap com suas definições pode ser incluída e deve estar no final.

Implementações mais recentes da interface termcap geralmente não requerem o nome de dois caracteres no início da entrada.

Os nomes de capacidade ainda são dois caracteres em todas as implementações.

A função tgetent usada para ler a descrição do terminal usa um buffer cujo tamanho deve ser grande o suficiente para os dados e é considerado ter 1024 caracteres. Implementações mais recentes da interface do termcap podem relaxar essa restrição, permitindo um ponteiro nulo no lugar do buffer fixo, ou ocultando os dados que não caberiam, por exemplo, através do recurso ZZ no termcap do NetBSD . A interface da biblioteca terminfo também emula a interface termcap e, na verdade, não usa o buffer de tamanho fixo.

A emulação do termcap da biblioteca terminfo permite que várias outras entradas sejam incluídas sem restringir a posição. Algumas outras implementações mais recentes da biblioteca termcap também podem fornecer essa capacidade, embora não seja bem documentada.

Recursos obsoletos

Uma capacidade especial, a capacidade "hz", foi definida especificamente para suportar o terminal Hazeltine 1500 , que tinha a infeliz característica de usar o caractere til ASCII ('~') como um introdutor de sequência de controle. Para oferecer suporte a esse terminal, não apenas o código que usava o banco de dados precisava saber como usar o til para introduzir certas sequências de controle, mas também deveria saber como substituir outro caractere imprimível por qualquer til no texto exibido, desde um til no texto seria interpretado pelo terminal como o início de uma sequência de controle, resultando em texto ausente e distorção da tela. Além disso, os próprios marcadores de atributo (como início e fim do sublinhado) ocuparam espaço na tela. Comentários no código-fonte do banco de dados geralmente se referem a isso como "imagem cerebral de Hazeltine". Como o Hazeltine 1500 era um terminal amplamente usado no final da década de 1970, era importante que as aplicações fossem capazes de lidar com suas limitações.

Veja também

Referências

links externos