Escritos
B. Piropo
Anteriores:
< Trilha Zero >
Volte de onde veio
20/04/1992

< ESSA TAL DE CODEPAGE... >


Acabamos de nos deparar com a falta do a-til na tabela ASCII estendida. E, se não há um código correspondente a um dado caractere na tabela usada pela máquina, ela não pode exibi-lo na tela. Então, qual a solução para o problema do a-til? Simples: modificar a tabela para incluí-lo.

Mas será que é simples mesmo? Veja lá: cada caractere tem que ser representado por um byte diferente. E com um byte somente se pode representar 256 códigos. Como a tabela ASCII estendida já usa todos eles, para incluir um na nova tabela é preciso retirar algum da anterior. Mas o problema não pára aí: isso tem que ser objeto de padronização internacional. Não sejamos pretensiosos ao ponto de esperar que o mundo fique a toda hora se curvando ante o Brasil, e padronize sua tabela com os caracteres do nosso bravo idioma, esse código secreto que usamos para nos comunicarmos com Portugal. Você já deu uma espiada nos caracteres do finlandês? Do alemão? Do norueguês? Tem coisa de arrepiar. E isso sem mencionar o russo. Japonês, então, nem pensar...

Então, que tal criar uma tabela para cada idioma? Bem, a idéia não é má: basta manter os primeiros 128 caracteres, padronizados pela tabela ASCII verdadeira, e portanto, imexíveis (desculpe, Aurélio), e chegar a um acordo sobre o resto. Com isso fica-se com um conjunto de códigos para cada idioma. Afinal, para quem escreve em português, que falta pode fazer aquele "a" namorando um "e" que os alemães usam tanto? Ele pode sair e dar lugar ao a-til que tanto nos faz falta...

Pois é, a idéia é tão boa que foi isso mesmo que a IBM, e depois a Microsoft, e depois todo o mundo, adotou: um conjunto de códigos, como se fosse uma página coberta de caracteres, para cada idioma. E como batizaram esses conjuntos? Ah, eu sabia que você adivinharia: isso mesmo, "codepage", ou página de código.

Tecnicamente, uma página de código nada mais é que um conjunto padronizado de duzentos e cinqüenta e seis caracteres que dão suporte a um idioma. Elas fazem parte do sistema operacional, e foram introduzidas a partir da versão 3.3 do DOS. Atualmente, já na versão 5.0, o MS-DOS suporta seis diferentes páginas de código, cada uma identificada por um número. A 437 nada mais é que a boa e velha tabela ASCII estendida original, e corresponde ao idioma inglês. A que dá suporte ao português é a 860. Portanto, para exibir os caracteres acentuados da última flor do lácio na tela, carregue a página de código 860 e vá em frente. Isso, naturalmente, desde que seu adaptador de vídeo seja EGA ou VGA.

Mas por que a discriminação contra o bom e velho CGA? Bem, na verdade não se trata disso: é que o CGA é dos tempos em que ainda não se tinha pensado neste tipo de problema. E para entender qual é a dificuldade, é preciso re-examinar a forma como os caracteres são exibidos. Pois foi dito que "quando o sistema encontra na memória de vídeo o código ASCII correspondente a um caractere, exibe este caractere na tela". E, de fato, assim é. Mas exibe exatamente o que? Tomemos como exemplo a letra "A". Existem centenas de maneiras diferentes de "desenhar" um "A" na tela. Me refiro ao formato do "A" (se ainda não entendeu, imagine seu vídeo exibindo um "A" gótico). Onde o sistema vai buscar a fonte?

Que fonte? Bem, "fonte" é o nome a que se dá a um conjunto de desenhos que representam as letras do alfabeto e certos sinais gráficos. O tipo de fonte corresponde à forma da letra: gótico, por exemplo, é uma fonte. Você já reparou que algumas máquinas exibem caracteres mais "gordinhos" e outras mostram uns formados por traços mais finos? É que usam fontes diferentes. E, com isso, já podemos decompor o processo de "escrita" na tela em mais uma etapa: sabemos que quando um programa quer exibir um caractere, ele escreve o código do caractere no endereço da memória de vídeo correspondente à posição desejada. O sistema operacional, por sua vez, ao "ler" esse código, sabe que caractere exibir e em que local deverá exibi-lo. Tudo que ele precisa, então, é consultar a fonte, para saber que pontos serão "acesos" para formar o caractere no pequeno retângulo da tela onde ele será mostrado.

Portanto fica claro que, em algum lugar da máquina, está armazenado o "mapa da mina", ou seja, a fonte: um conjunto de informações que permite ao sistema operacional saber como "desenhar" na tela cada caractere. E se você acha que este local é a placa controladora de vídeo, acertou: lá, em chips de memória ROM, estão gravados os mapas de bits que representam os caracteres.

Qualquer que seja sua placa de vídeo, há uma fonte indelevelmente gravada em memória ROM. Mas note que a fonte não é apenas um conjunto de "formatos" de caracteres: na verdade, ela é uma tabela completa, que associa cada código contido em um byte com um "desenho". Se você mudar a fonte, pode associar qualquer código a qualquer mapa de bits, e portanto exibir qualquer caractere. E você, espertamente, já descobriu que uma página de código nada mais é que uma fonte. E qual delas está gravada na ROM de sua placa de vídeo? Provavelmente a 437, correspondente à tabela ASCII estendida (se sua placa for nacional, pode ser que lá esteja o malfadado padrão BRASCII; ou algum outro, pois os fabricantes nacionais jamais se entenderam no que toca à padronização).

Se você tem uma placa de vídeo CGA, está irremediavelmente atrelado a esse conjunto de caracteres, pois o padrão CGA não permite usar outra fonte que não a da ROM. Por isso é impossível trocar a página de código em sistemas CGA. Já os padrões EGA e VGA foram desenvolvidos de maneira mais inteligente. Neles existe, também, a fonte gravada em ROM. Ela corresponde à página de código default, usada quando o sistema é ligado, também chamada de "página de código de hardware" (geralmente a mesma 437 das placas CGA importadas). Mas os padrões EGA e VGA permitem que o sistema use ainda outras fontes (ou páginas de código) que podem ser carregadas na memória RAM. Dependendo do tipo de adaptador de vídeo, é possível trabalhar com até seis diferentes páginas de código carregadas em RAM, e passar de uma para outra a qualquer momento.

Como? Bem, esse é justamente o próximo assunto.

 

B. Piropo