• 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)
  • From Rodrigo Cesar Banhara@1:2320/100 to Mauro Veiga on Thu Aug 25 16:39:06 2016
    Mauro Veiga wrote to ALL <=-

    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

    Consegui !!!!! =DDDD

    Valeu...

    []s
    RCB

    ... "A do-nothing lackluster wherever he sat." -- A. Haig on George Bush
    ___ MultiMail/Win32 v0.50

    --- Mystic BBS/QWK v1.12 A31 (Windows)
    # Origin: Saturn's Orbit BBS * Running Mystic * Brazil (4:801/188)
    * Origin: LiveWire BBS - Synchronet - LiveWireBBS.com (1:2320/100)
  • From Mauro Veiga@1:2320/100 to Rodrigo Cesar Banhara on Thu Aug 25 18:14:22 2016

    Mauro Veiga wrote to ALL <=-

    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

    Consegui !!!!! =DDDD

    Valeu...

    :-)

    --- AfterShock/Android 1.6
    # Origin: Point Abutre 2.1 - Rio de Janeiro - Brasil * (4:801/189.5)
    * Origin: LiveWire BBS - Synchronet - LiveWireBBS.com (1:2320/100)