Escritos
B. Piropo
Anteriores:
< Trilha Zero >
Volte de onde veio
11/11/1991

< ANSI.SYS - Para que Serve >


Agora que já sabemos que o Ansi.Sys é um driver de console, vamos ver que vantagens podemos tirar dele. Pois acontece que este é um dos poucos drivers que podem ser acessados diretamente pelo usuário. Desde, é claro, que venha a ser incorporado ao sistema no momento do boot. Para usá-lo, inclua no Config.Sys a linha:

device=[via]ansi.sys

onde (via) representa a via do diretório em que está o arquivo Ansi.Sys (por exemplo: c:\dos\ansy.sys). Se o arquivo Ansi.Sys estiver no diretório raiz, não é necessário incluir a via. Depois, dê um novo boot para carregar o driver.

Agora vamos ver como funciona e o que podemos fazer com ele. Para que um comando seja recebido por um driver de dispositivo, basta enviá-lo para o dispositivo que ele gerencia - no caso do Ansi.Sys, o console. Seus comandos são constituídos por seqüências de caracteres. E nada mais simples do que enviar algo para o console: basta mandar exibi-lo na tela. Como? Há várias maneiras. Uma delas é com o comando "echo". Outra, mais prática para comandos longos ou em série, é incluir os caracteres correspondentes em um arquivo e enviá-lo para a tela com o comando "type".

As seqüências de caracteres que o Ansi.Sys reconhece como comandos são sempre constituídas por um mesmo prefixo seguido de alguns parâmetros e terminadas por um identificador. O prefixo faz com que o driver reconheça que aquilo é um comando e não algo a ser exibido na tela. O identificador seleciona um dentre os muitos comandos. E os parâmetros descrevem a tarefa. Parece complicado, mas logo daremos um exemplo e você vai ver que é simples.

Sendo o console o conjunto do teclado e vídeo, os serviços do Ansi.Sys somente podem se relacionar com estes dois dispositivos. Cada comando tem como identificador um caractere (que pode ser representado por seu código ASCII). Os relativos à tela dizem respeito à mudança da posição do cursor, mudança dos atributos de vídeo (cores, vídeo reverso, piscante e alta intensidade) e modo de vídeo (número de linhas/colunas e modos gráficos). No que toca ao teclado, o Ansi.Sys comporta apenas um serviço. Mas não se iluda: você verá que este é o único realmente útil.

Agora ao trabalho: vejamos o serviço que altera atributos de vídeo. Seu identificador é a letra "m" (minúscula: lembre que os códigos ASCII de maiúsculas e minúsculas são diferentes). O parâmetro que permite, por exemplo, exibir caracteres em vídeo reverso é o número 7. Portanto, para que o sistema passe a exibir telas em vídeo reverso, basta enviar para o console os códigos:

[prefixo]7m

O prefixo informa que se trata de um comando para o driver Ansi.Sys, o número 7 é o parâmetro que corresponde a vídeo reverso e a letra "m" minúscula é o identificador dos comandos que alteram atributos de vídeo. Os parâmetros que permitem alterar os demais atributos são: 1 para alta intensidade, 5 para piscante e 0 para vídeo normal. Você pode então fazer a tela voltar ao normal com o comando:

[prefixo]0m

Calma, eu sei que você já deve estar se perguntando por que eu não escrevo logo este maldito prefixo. Mas é que aqui temos um pequeno problema: o prefixo é constituído sempre pelos mesmos dois caracteres, cujos códigos ASCII são, respectivamente, 27 e 91. Este último corresponde ao "[" (abre colchete), que pode ser incluído facilmente em um arquivo: basta teclá-lo em qualquer editor de textos e salvar o arquivo. Mas o primeiro código do prefixo, o ASCII 27, corresponde à tecla ESC (ou escape: por isto os comandos do Ansi.Sys são também conhecidos por "seqüências de escape"). E como mandar um ESC para a tela? Diretamente do teclado com o comando "echo" é impossível: a tecla ESC é entendida pelo processador de comandos como desistência e ao digitá-la na linha de comando o DOS simplesmente apaga o que foi digitado antes e faz o cursor saltar para a próxima linha. Incluí-la em um arquivo é igualmente difícil: tente em seu editor de textos preferido. Eu não sei qual é, mas aposto que tem uma função qualquer para a tecla ESC - que seguramente não introduz o código ASCII 27 no texto. E agora?

Adiante vamos examinar uma forma de incluir o caractere correspondente a ESC em arquivos para poder enviar os comandos Ansi para a tela usando o comando "type". Por hoje ficamos com uma alternativa mais simples para isso: o comando "prompt".

Sim, pois dentre os diversos parâmetros deste comando há um que corresponde exatamente ao caractere ASCII 27, o ESC: trata-se do parâmetro "$e". E é evidente que todo prompt é imediatamente exibido na tela. Então, para enviar um comando ao Ansi.sys, basta incluí-lo no prompt do sistema. Do prompt do DOS digite:

prompt $e[7m$p$g

seguido de ENTER. E daí em diante sua tela estará em vídeo reverso. Comande um DIR e veja. Não gostou? Retorne para o normal com o comando :

prompt $e[0m$p$g

E aí está uma forma de utilizar diretamente o Ansi.Sys. Nada de muito espetacular e, concordo, com uma utilidade muito limitada. No máximo pode-se fazer algumas gracinhas com o prompt. Lembrando que o parâmetro "$_" força o prompt a mudar de linha, experimente meu prompt favorito:

prompt $e[7mTrilha Zero$e[0m$_$e[5mA Trilha do Bom Micreiro$e[0m$_$p$g

No manual do DOS você encontra todos os identificadores e parâmetros do Ansi.Sys. Dá para brincar um bocado. Mas não passa muito disso. A não ser que você pretenda, por exemplo, redefinir suas teclas de função de forma a poder chamar os comandos que usa com maior freqüência sem ter que digitá-los. Como? É o que vamos ver adiante...

B. Piropo