16.1.2. Опрос системных переменных MS-DOS

Средства работы с системными переменными MS-DOS реализованы в модуле DOS функциями EnvCount, EnvStr и GetEnv. Системные переменные (не путать с параметрами!) MS-DOS — это их имена и значения, заданные пользователем командой SET (как правило, в файле AUTOEXEC.BAT) и командами PATH и PROMPT.

- 348 -

Задавая системную переменную, всегда надо писать ее имя и значение (может быть пустым), например:

| .ВАТ-ФАЙЛ

| PROMPT $p$g

| SET LIB=C:BINLIB

| SET COMSPEC=E:COMMAND.COM

Работая в MS-DOS, можно подать команду SET без параметров и увидеть текущие системные переменные и их значения. Причем, даже если не было подано ни одной команды «SET имя = значение» до этого, будут определены две системные переменные: PATH и COMSPEC. Они вводятся автоматически при загрузке системы. Параметр PROMPT должен быть задан явно. Остальные переменные «придумываются» самим пользователем.

Функция EnvCount типа Integer возвращает число определенных в MS-DOS переменных, а функция EnvStr возвращает строку в виде «имя = значение». С их помощью легко построить процедуру, аналогичную по действию команде SET без параметров в MS-DOS (рис. 16.2):

| USES DOS;

| PROCEDURE ShowSET; { показ системных переменных }

| VAR i,j : Integer;

| BEGIN

| i := EnvCount; { число переменных }

| for j:=1 to i do

| WriteLn( EnvStr( j ) ); {их вывод на экран }

| END;

| BEGIN

| ShowSET; { запуск процедуры }

| ReadLn { пауза до нажатия клавиши ввода }

| END.

Рис. 16.2

Последняя функция GetEnv позволяет получить значение системной переменной по ее имени. Многие пакеты программ (Турбо Паскаль в том числе) при работе опрашивают системные переменные, в которых должны быть записаны рабочие каталоги, настроечные параметры и т.п. Если они отсутствуют, то принимаются какие-либо значения по умолчанию. На Турбо Паскале можно легко программировать подобные действия. Например, если нужно, чтобы

- 349 -

готовая программа работала только на ПЭВМ ее автора, достаточно вставить в текст строку

USES DOS; { подключен модуль DOS }

...

{определение переменных, типов, процедур }

BEGIN

{==> } if GetEnv( 'AVTOR' ) <> 'IVANOV' then Halt;

{ остальная программа }

END.

А в файл AUTOEXEC.BAT внести команду

AUTOEXEC.BAT

ECHO OFF

PATH ...

...

SET AVTOR=IVANOV <===

...

Программа будет работать только, если в системе определена переменная AVTOR со значением IVANOV.

Этот нехитрый способ, конечно, не годится для засекречивания коммерческих программ, но для «домашнего» пользования вполне достаточен.

Средства языка Турбо Паскаль не позволяют менять значения системных переменных или вводить их. Это связано с тем, что после завершения конфигурации среды MS-DOS ее последующая модификация весьма ограничена.

Напомним, что для увеличения области памяти под системные переменные надо вставить в файл CONFIG.SYS корневого каталога строку

SHELL = d:путьCOMMAND.COM /р /e:NNNN

где NNNN — число байтов для области памяти системных переменных.