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)