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

< Problemas Ambientais >


Hoje nosso assunto serão os problemas do ambiente. Já ouviu falar deles? Ah, sim, Eco 92, camada de ozônio, queimadas na Amazônia e tudo o mais. Lamento, mas não são estes.

Alguma vez já aconteceu receber uma mensagem do DOS que diz algo como "Out of environment space"? Se já, e caso tenha se dado ao trabalho de traduzi-la, descobriu que quer dizer algo como "falta de espaço no ambiente". E que, nesse caso, não adianta tirar a impressora e os livros de perto do micro: o ambiente a que ele se refere é outro. Justamente aquele de que trataremos agora.

Quando o sistema operacional é carregado e lê o Config.Sys e o Autoexec.Bat, toma nota de alguns dados em uma área de memória chamada "bloco do ambiente". Ela é uma estrutura de dados e as informações nela anotadas são as variáveis ambientais. Vamos ver para que serve o ambiente e o que lá fica anotado.

O ambiente funciona como uma caixa postal onde programas e sistema operacional deixam recados uns para os outros. Seu conteúdo pode ser modificado a qualquer momento com o comando SET, que examinaremos adiante. A coisa funciona assim: quando o sistema operacional é carregado, após anotar no ambiente algumas variáveis baseado no conteúdo do Autoexec.Bat e Config.Sys, carrega o processador de comandos Command.Com, que fica a espera de que você mande executar comandos ou carregar algum programa. Cada programa que é executado - inclusive o próprio Command.Com - recebe uma cópia do que está anotado no ambiente. Se precisar tomar conhecimento de alguma variável ambiental, basta olhar para a sua cópia. E no que consistem estas famosas variáveis ambientais? Em qualquer coisa que lá seja introduzido pelo comando SET. Faça uma experiência. Do prompt do sistema, digite:

set piropo=o bom

e tecle ENTER. Agora simplesmente digite "set" seguido de ENTER. Na última das linhas que vão surgir na tela, lá estará: "PIROPO=o bom". Assim mesmo, com o nome em maiúsculas e sem nenhuma modéstia. E acima dela, pelo menos mais três linhas. A primeira conterá "COMSPEC=" seguido de alguma coisa tipo "C:\COMMAND.COM". A segunda conterá "PATH=" seguida do conteúdo do comando "path" e a terceira conterá "PROMPT=" seguida do conteúdo do comando "prompt", ambos lidos de seu Autoexec.Bat. E, dependendo da configuração de sua máquina e do que você andou enfiando em seu Autoexec.Bat, pode haver mais alguma coisa. Estas são suas variáveis ambientais. A palavra em maiúsculas que antecede ao sinal de igual é o nome da variável e o que sucede ao sinal é o seu conteúdo. Provavelmente você tem em seu Autoexec.Bat os comandos "path" e "prompt", mas mesmo que não tenha o DOS ajusta estas variáveis para o valor default, como fez para o "comspec". O valor default de "path" é uma path vazia, e o do "prompt" é $g.

Como? E a "comspec"? Ah, foi bom perguntar, pois ela é um exemplo excelente do uso de variáveis ambientais. Se você nos tem acompanhado com atenção, sabe que o Command.Com é um programa parecido com os demais. Que ele não é o sistema operacional, como muita gente pensa, mas apenas o processador de comandos, um programa auxiliar que permite acessar as funções do sistema como apagar e copiar arquivos, criar diretórios e coisas que tais.

Agora preste atenção, pois vamos esclarecer um dos pequenos mistérios da informática: programas são carregados na memória e cumprem suas funções. Depois, ao encerrar sua tarefas, liberam a memória e somem. Se o Command.Com é um programa como qualquer outro, de onde surge ele após a execução de outro programa? Sim, pois ele parece estar sempre lá, exibindo seu prompt impertinente e seu cursor piscante, certo? Pois foi por isto que lá atrás eu disse que ele é "parecido" e não "igual" aos demais. É que ele é especial: quando carregado, se divide em duas partes. Uma, a chamada parte transiente, é responsável pela exibição do prompt, do cursor e pela execução dos comandos, inclusive da carga dos demais programas. Esta se comporta como qualquer programa, e libera a memória quando outro vai ser carregado. A outra, bem menor, é a parte residente. Que fica permanentemente na memória e cuja principal função é carregar de novo a parte transiente toda a vez que um programa termina (dê boot em sua máquina a partir de um disquete no drive A:, execute qualquer programa de outro disco e encerre a execução com o disco do programa ainda no drive e veja como o DOS pede aflito que você insira um disco com o Command.Com no drive A:).

Pois bem, como o boot pode ser dado de mais de um drive e, no caso de discos rígidos, o Command.Com pode estar em qualquer diretório, a parte residente, como aquele velho canastrão, precisa saber onde está o resto de si mesma para poder recarregar-se. É aí que entra a variável ambiental COMSPEC. Que é uma abreviação de "especificação do processador de comandos". Como você sabe, especificação de arquivo é o "nome todo" do arquivo, ou seja, o nome precedido da via de diretório. E repare no conteúdo da variável COMSPEC de sua máquina: ela contém exatamente a via de diretório seguida do nome do seu arquivo de comandos. Assim, quando a parte residente do Command.Com precisa recarregar a parte transiente, olha na sua cópia do ambiente, lê o conteúdo da COMSPEC e vai buscar o arquivo na via indicada. Simples, não? Incidentalmente: dê o boot de um disquete sem Config.Sys e Autoexec.Bat, entre com o comando SET e veja os valores default das variáveis COMSPEC, PATH e PROMPT.

Como você viu no exemplo lá de cima, uma variável ambiental pode ser criada a qualquer momento com o comando SET. (A propósito, não se preocupe: quando você desligar sua máquina, aquele PIROPO=o bom vai desaparecer de sua memória - me refiro à da máquina, naturalmente). E pode-se fazer milagres dentro de arquivos de comandos (arquivos de extensão .Bat) com o uso destas variáveis.

Mas a maior parte delas é criada de dentro do Autoexec.Bat. Ocorre que muitos programas usam variáveis ambientais - geralmente para guardar paths, mas não somente para isto. A maioria dos compiladores usa as variáveis INCLUDE e LIB para saber onde encontrar alguns arquivos usados durante a compilação. Outros programas, como Windows, usam a variável TEMP (ou TMP) para conter a via de diretório de onde serão gravados os arquivos temporários. Acontece que a maioria deles usa um processo de instalação automático que vai enfiando variáveis ambientais em seu Autoexec.Bat sem nenhuma cerimônia. Como o ambiente ocupa um espaço limitado, variáveis ambientais em demasia acabam por provocar aquele estranho aviso de falta de espaço no ambiente. Nesse caso é necessário aumentar o trecho de memória reservado para o ambiente. E você vai conhecer o exemplo supremo do que eu costumo chamar de raciocínio oblíquo dos magos do DOS.

B. Piropo