Codepages (3)
From
Mauro Veiga@1:2320/100 to
All on Fri Jul 29 12:46:02 2016
Vamos come�ar a aprender como trocar a p�gina de c�digo para exibir os caracteres acentuados do portugu�s em nossas telas. E apenas come�ar,
por que a coisa � um pouco mais complicada do que era de se esperar. Por
outro lado, o processo � bastante instrutivo. De modo que, mesmo que sua m�quina use o padr�o de v�deo CGA, que n�o permite trocar a p�gina de c�digo, vale a pena acompanhar o assunto. Voc� vai aprender um bocado
sobre a maneira tortuosa que o DOS usa para resolver certos problemas.
Acontece que o DOS foi desenvolvido no in�cio dos anos 80 para um micro
que j� n�o existe: o primeiro PC, com apenas 64K de RAM e sem disco r�gido. E, naquele tempo, ningu�m pensou em internacionaliza��o (na verdade, ningu�m pensou que a coisa iria dar t�o certo a ponto de ser necess�rio internacionalizar). O bicho trazia gravado em ROM na placa de
v�deo um conjunto de caracteres que dava e sobrava para escrever em ingl�s. Para que mais?
De l� para c� muita coisa mudou. Inclusive o DOS. Mas mantendo, sempre
que poss�vel, compatibilidade com as vers�es anteriores. O que � elogi�vel, mas implica em solu��es de compromisso. Na verdade as novas vers�es do DOS nada mais s�o que adapta��es da primeira: um imenso conjunto de remendos para dar suporte a novos componentes e satisfazer a
novas necessidades.
Com a internacionaliza��o do sistema n�o poderia ser diferente. No que
toca aos velhos padr�es de v�deo CGA e MDA, nada poderia ser feito: eles somente permitem exibir nas telas texto o conjunto de caracteres indelevelmente gravado em ROM. Deixe, portanto, nos umbrais do mundo
CGA, qualquer esperan�a de ver em sua tela um bonito a-til: no m�ximo
voc� vai conseguir aquele rid�culo a-trema usado para simul�-lo. J� os padr�es EGA e VGA (assim como o padr�o LCD, usado nas telas de cristal l�quido do falecido IBM port�til), por terem sido desenvolvidos mais tarde, j� incorporaram a possibilidade de acessar a outros conjuntos de caracteres al�m daquele gravado em ROM. A forma de faz�-lo � bastante engenhosa: carrega-se um ou mais conjuntos de caracteres na mem�ria RAM.
Depois, quando o sistema operacional vai consultar a fonte para saber
qual o formato do caractere a ser exibido na tela, desvia-se a consulta
dos endere�os de mem�ria da fonte gravada em ROM para os novos endere�os ocupados pela fonte em RAM que se deseja usar naquele momento. O sistema
n�o percebe a diferen�a e mostra na tela o mapa de bits que encontrou.
Esses conjuntos de caracteres que correspondem �s fontes s�o denominados "p�ginas de c�digo", e cada um suporta a um idioma ou conjunto de idiomas. Uma solu��o inteligente, mas, claramente, uma adapta��o que ir� exigir uma s�rie de interven��es por parte do usu�rio.
Se voc� estranhou o fato de se manter uma fonte em ROM mesmo nas placas
EGA ou VGA, a raz�o � simples: sem ela, a m�quina n�o teria como mostrar mensagens na tela antes de carregar o sistema operacional. E, o mais grave: como informar que algo deu errado caso n�o consiga carregar o sistema do disco? Por isso toda placa de v�deo vem com uma fonte default gravada em ROM. Ela � a "p�gina de c�digo de hardware" e geralmente corresponde � nossa velha conhecida tabela ASCII estendida, a mesma usada
pelo padr�o CGA, a p�gina de c�digo 437 que d� suporte ao idioma ingl�s.
Ent�o vamos ver como proceder para usar outra p�gina de c�digo que n�o a
de hardware. E para ter uma vis�o panor�mica da situa��o, abordaremos o assunto de forma gen�rica antes de descer aos detalhes. Que n�o s�o poucos. Mas n�o se esque�a da condi��o b�sica: sua placa de v�deo e monitor devem ser EGA ou VGA.
Primeiro precisamos de ajustar o sistema para gerenciar o v�deo e tornar poss�vel a mudan�a das p�ginas de c�digo. Ora, o v�deo � um dispositivo.
E n�s sabemos que o suporte para gerenciar um dispositivo � fornecido por
um gerenciador de dispositivo, ou "device driver". Que, nesse caso, traz
o nome �bvio de Display.Sys e deve ser instalado atrav�s do comando "device" no arquivo Config.Sys. Se o DOS usasse uma forma menos tortuosa
de fazer as coisas, isso seria o bastante. Mas n�o: com o Display.Sys
nada mais fazemos que informar ao sistema qual � a placa de v�deo e quantas p�ginas de c�digo pretendemos usar. Note que eu disse quantas, e
n�o quais: no que toca �s p�ginas de c�digo, tudo o que o Display.Sys
faz � reservar espa�o na mem�ria para elas. Ele n�o as carrega nem lhes oferece suporte: apenas gerencia o v�deo.
Quem fornece o suporte, ou seja, quem controla que p�gina de c�digo est�
ativa em um dado momento e manipula as chamadas de v�deo, � um pequeno residente, o Nlsfunc.Exe (cujo nome deriva justamente de "national language support functions", ou fun��es de suporte para idiomas nacionais). Que deve, ent�o, ser carregado na mem�ria. E a forma ideal
de faz�-lo � atrav�s do Autoexec.Bat.
J� temos dois elos na nossa corrente: o Nlsfunc, que "sabe" qual p�gina
de c�digo est� em uso, intercepta as chamadas de v�deo, dirigindo-as para
a �rea da mem�ria onde est�o armazenadas as novas fontes e repassa o resultado para o Display.Sys. E este �ltimo, que trata da exibi��o do resultado no v�deo.
Deveria ser o bastante, mas n�o �: pois nem um nem outro carregam na mem�ria RAM as p�ginas de c�digo desejadas. Isso � feito por meio do comando "mode", tamb�m em geral emitido de dentro do Autoexec.Bat. E como
j� temos quem carregue as p�ginas de c�digo, quem as maneje e quem as exiba, parece que � o suficiente. Mas n�o: o DOS n�o iria deixar isso barato assim. Tem mais.
Falta ainda algo que poder�amos chamar de efeito Francelino: informar ao sistema que pa�s � esse. Pois algumas p�ginas de c�digo s�o compartilhadas por mais de um idioma. Para isso basta usar o comando "country", emitido no Config.Sys. E, finalmente, � preciso tornar ativa a p�gina de c�digo desejada por meio do comando "chcp" (de "change codepage", ou trocar p�gina de c�digo). E c'est fin�.
Isso tudo parece complicado demais: drivers, comandos, residentes, uma confus�o medonha s� por causa de uns acentos na tela. Na verdade, h�
mesmo uma certa complexidade, a meu ver, desnecess�ria. Mas nada que
seja imposs�vel destrinchar. Voc� logo ver� como o diabo � menos feio do
que o pintam.
B. Piropo
___ Blue Wave/386 v2.30
--- SBBSecho 2.27-Win32
# Origin: Ninho do Abutre 2 - Rio de Janeiro - Brasil * (4:801/194)
* Origin: LiveWire BBS - Synchronet - LiveWireBBS.com (1:2320/100)