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

< O ÚLTIMO PASSO: O COMANDO MODE >


Chegamos, afinal, ao último passo necessário para implementar as páginas de código no vídeo de nosso sistema: o comando que, enfim, as carrega. Sim, pois nenhum dos que discutimos até agora executou essa elementar tarefa.

Mas é que eles não precisam, de fato, se preocupar com isso. É verdade que na carga do driver Display.Sys poderia ser mencionada a página de código de hardware. Mas isso não somente é opcional como também totalmente dispensável. E, na linha de comando de "country", poderia ser incluída a página de código com a qual se deseja iniciar os trabalhos. O que, embora desejável, também não é obrigatório. Então, como pode o sistema saber que páginas de código pretenderemos usar para carregá-las na memória durante sua inicialização? Fácil: por meio do comando "mode", que deve ser incluído no Autoexec.Bat, e cuja função é preparar as páginas de código, ou seja, carregar na memória as tabelas de conversão de caracteres e colocá-las à disposição do sistema operacional.

Na verdade, dizer que essa é a função do comando "mode" é uma brutal simplificação. Pois este é um comando eclético e versátil, de mil e uma utilidades, uma espécie de "pau para toda a obra" do DOS. Tenho mesmo a impressão que, quando surge a necessidade de se fazer algo que parece não caber mais em lugar nenhum, enfiam a coisa no comando "mode": ele serve para quase tudo, desde preparar, selecionar e exibir o estado das páginas de código, até mudar o modo de vídeo, redirecionar impressão e configurar impressoras, portas seriais e quase todos os dispositivos de entrada/saída. E, por isso mesmo, talvez seja o comando mais complexo do DOS. Mas, para nossos propósitos imediatos, basta aprender a usá-lo para preparar páginas de código. E, nesse caso, sua sintaxe tem o aspecto da linha abaixo:

mode con codepage prepare=((xx [yy]) [via]nome)

Parece complicado, mas não é. Senão, vejamos: o primeiro termo, mode, como não poderia deixar de ser, é o nome do comando. O segundo, con, é a forma pela qual o DOS se refere a vídeo e teclado, o dispositivo sobre o qual ele irá agir (abreviação de console, lembra?). Os dois seguintes, codepage prepare, que podem ser abreviados para cp prep, correspondem à função do comando: preparar páginas de código para o dispositivo mencionado. Em seguida, depois do sinal de igual e entre parênteses, vem o que realmente interessa: também dentro de parênteses, os identificadores das páginas de código que serão carregadas (afinal!), separados por um espaço (e não por uma vírgula como seria de esperar tendo em vista a sintaxe dos demais comandos que examinamos). E finalmente, mais uma especificação de arquivo, o que contém as informações sobre as páginas de código desejadas.

E que arquivo é esse? Se você está pensando no onipresente Country.Sys, desta vez se enganou: se seu adaptador de vídeo é de cristal líquido (e, portanto, você usou o parâmetro "LCD" ao carregar Display.Sys), aqui vem a especificação completa (incluindo via de diretório e nome) do arquivo Lcd.Cpi. Mas se, como é mais provável, seu vídeo é EGA ou VGA (e você usou o parâmetro "EGA" ao carregar Display.Sys), o arquivo desejado chama-se Ega.Cpi (Não estranhe a extensão .Cpi: ela deriva de Code Page Informations, informações sobre páginas de código).

No caso dos comandos que discutimos antes, o "country" e o residente Nlsfunc.Exe, a inclusão da especificação do arquivo Country.Sys não era obrigatória, desde que ele fosse copiado para o diretório raiz do disco de boot. Mas aqui é diferente: o nome de um arquivo tem que ser incluído ao final da linha de comando. E isso se explica: no caso de country e Nlsfunc, as informações desejadas somente poderiam ser encontradas no arquivo Country.Sys, e se nada constasse a respeito na linha de comando, o sistema já saberia onde procurá-las. Agora não: o sistema precisa saber em qual dos dois arquivos possíveis, Ega.Cpi ou Lcd.Cpi, ele irá buscar as informações necessárias. Mas a via de diretório não é obrigatória: ela pode ser omitida, desde que o arquivo correspondente (Ega.Cpi ou Lcd.Cpi) tenha sido copiado para o diretório raiz do disco de boot. Como no caso de Country.Sys, Display.Sys e Nlsfunc.Exe, esses arquivos fazem parte do sistema operacional e se encontram no diretório onde o DOS os gravou durante a instalação, geralmente o diretório C:\DOS.

Vamos ver então como ficaria a linha de comando a ser incluída no Autoexec.Bat de um usuário que pretenda usar o comando "mode" para preparar duas páginas de código (digamos, a 860 e 850) para seu vídeo VGA (e portanto vai se referir ao arquivo Ega.Cpi, que copiou para o diretório raiz do disco de boot):

mode con cp prep=((850 860) ega.cpi)

Note que nesse caso ele usou as abreviações "cp" e "prep" para "codepage" e "prepare". Repare, também, que após o sinal de igual aparecem dois abre-parênteses, e que os identificadores das páginas de códigos são separados por um espaço e seguidos de um fecha-parênteses. E, finalmente, é importante não esquecer do fecha-parênteses após o nome do arquivo Ega.Cpi.

Embora seja desejável carregar duas páginas de código, isso não é obrigatório e consome alguma memória adicional. Então, imaginando que se pretenda carregar apenas a página de código 860, a linha de comando seria:

mode con cp prep=((860) ega.cpi)

Veja que, mesmo usando um único identificador de página de código, o uso dos parênteses interiores é obrigatório.

Pois é isso: já sabemos tudo o que é necessário para implementar as páginas de código em nossa máquina. Agora só falta saber como acioná-las e trocar a página de código ativa. E, o mais importante: que critérios usar para decidir quantas e quais páginas de código carregar. Que será visto adiante.

B. Piropo