Глобальные переменные

8.8.3. Глобальные переменные

Глобальные переменные в NDOS могут иметь стандартные и нестандартные имена.

Стандартное имя может содержать только буквы, цифры, а также символы _ и $.

В нестандартном имени допускаются любые символы, за исключением скобок [ и ]. Чтобы имя было действительно нестандартным, в него должен входить по крайней мере один запре­щенный для стандартного имени символ.

Длина имени глобальной переменной не может превышать 80, а значения — 255 символов. - В командах NDOS допускается ссылаться как на имена глобальных переменных, так и на их значения

Ссылки на значение могут быть везде, где допустимы строки (в частности, в командах IF, IFF, ECHO и SET), а также в спецификациях файлов и каталогов. При ссылке на значение глобальной переменной ее имени должен предшествовать один символ %, причем нестандартное имя необходимо заключить в квадратные скобки. Стандартное имя глобальной переменной ограничивается справа любым запрещенным для использования в нем символом, в том числе символом %. В случае ссылки на значение глобальной переменной со стандартным именем, когда сразу вслед за ссылкой располагаются допустимые для стандартного имени символы, ограничивайте имя справа именно символом %. Этот символ в строке после подстановки значения глобальной переменной присутствовать не будет. С нестандартным же именем проблем возникнуть не может, так как оно ограничивается квадратными скобками.

Если же требуется (скажем, в командах INKEY и INPUT, но не в SET, ESET или UNSET) указать не значение, а имя глобальной переменной, то ему должны предшествовать два символа %%, причем квадратные скобки для обрамления нестандартного имени недопустимы. Эта же пара символов в другом контексте обозначает единственный символ %.

Примеры:

MYVAR1                                        — стандартное имя глобальной переменной;

MYVAR#1                                      — нестандартное имя глобальной переменной;

■ %MYVAR1                         — ссылка на значение глобальной переменной;

■ %MYVAR1%                                 ― то же;

■ %[MYVAR#1]                                — ссылка на значение глобальной переменной;

■ %%MYVAR1                                 — ссылка на имя глобальной переменной;

■ %%MYVAR#1                               — ссылка на имя глобальной переменной;

ECHO A%MYVAR1%B                — запрос на отображение символьной строки, состоящей из значения глобальной переменной MYVAR1, которое ограни­чено слева и справа символами А и В соответственно.

Возможность доступа к значениям глобальных переменных в командах NDOS созвучна сред­ствам командного языка ОС UNDC и сулит неоспоримые выгоды. Они состоят в том, что длинные строки (в частности, спецификации файлов и каталогов) можно обозначать короткими именами и затем использовать лишь последние.

NDOS поддерживает как определяемые, так и встроенные глобальные переменные.

Определяемые глобальные переменные задаются пользователем и могут иметь произвольные (но допустимые) имена, а также значения. Среди определяемых существуют так называемые зарезервированные глобальные переменные, значения которых используются NDOS, но устанав­ливаются пользователем. К таким переменным относятся PATH, TEMP, DIRCMD, COMSPEC и уже описанная NDSHELL.

Глобальной переменной PATH задаются маршруты поиска исполняемых (COM-, ЕХЕ-, ВАТ- и ВТМ-) файлов. ВТМ-файл — это командный файл, который загружается в память целиком, а поэтому выполняется существенно быстрее, но не может быть самомодифицирующимся.

Глобальная переменная TEMP предназначена для указания каталога, в котором будут разме­щаться временные файлы, используемые при перенаправлении ввода-вывода. Если значение переменной TEMP не определено, то предполагается, как и в КП DOS, рабочий каталог.

Глобальная переменная DIRCMD задает формат по умолчанию для команды DIR. В качестве ее значения можно установить любую допустимую комбинацию переключателей данной команды.

Встроенные глобальные переменные полностью определяются NDOS'om. Их значения обычно используются в командных файлах, определениях синонимов и программах, в частности, для выбора одной из нескольких альтернатив, а также для настройки на конкретную среду выполнения. Встроенные переменные делятся на обычные и внутренние.

Обычные встроенные глобальные переменные (пока имеется только одна такая переменная, а именно, CMDUNE) наряду с определяемыми глобальными переменными регистрируются в окружении NDOS.

Внутренние встроенные глобальные переменные (к которым относятся все остальные встро­енные глобальные переменные) в окружение NDOS не заносятся и поэтому не могут быть отображены и изменены командами SET и ESET. При попытке переопределить значение внут­ренней встроенной переменной просто будет создана определяемая глобальная переменная, а доступ к одноименной внутренней переменной станет невозможным. Иными словами, приори­тетом пользуется определение, сделанное пользователем.

В NDOS имеются следующие встроенные глобальные переменные (все значения имеют строковый тип):

#                                          число аргументов в вызове командного файла (ссылка %# допустима только в командных файлах и недопустима в синонимах);

?                                  ― код возврата последней из выполненных программ (в том числе внешних команд);

CMDUNE                   ― полная командная строка запуска программы с замененными в ней синонимами и глобальными переменными (но истинный маршрут, по которому найдена программа, Вместо указаний в командной строке не подставляется);

_BG                             ― наименование фонового цвета;

_COLUMNS ― размер строки экрана, т.е. число символов в ней;

_CPU                         ― одна из следующих строк, идентифицирующая тип МП:

86       - МП 8086/88;

186     - МП 80186/88;

200     - МП NEC V20 или V30;

286     - МП 80286;

386     - МП 80386 или 80486;

_CWD            полная спецификация рабочего каталога;

_CWDS          то же, но за спецификацией присутствует символ \;

_CWP             полная спецификация рабочего каталога, но без указания привода;

_CWPS           то же, но за спецификацией имеется символ \;

_DATE            текущая дата в формате ММ-ДД-ГГ (США), ДД-ММ-ГТ (Европа) или ГТ-ММ-ДД (Япония);

_DISK            имя текущего привода (без последующего двоеточия);

_DOSVER      версия DOS (например, 33);

_DOW            строка, обозначающая день недели:

Моn    — понедельник;

Tue      — вторник;

Wed    — среда;

Тhи     — четверг,

Fri       — пятница;

Sat      — суббота;

Sun      — воскресенье;

_FG                             — наименование цвета символов;

_MONITOR               — строка, обозначающая тип дисплея:

MONO           — монохромный дисплей;

COLOR          — цветной дисплей;

_NDP                          — строка, идентифицирующая тип сопроцессора плавающей тачки:

000     — сопроцессор отсутствует;

087     — сопроцессор 8087;

287     — сопроцессор 80287;

387     — сопроцессор 80387 или МП 80486, в состав которого стан­дартно входит сопроцессор;

_ROWS                      — число строк на экране дисплея;

_SHELL                      — номер текущего уровня КП NDOS в режиме свопинга (0 — первичная копия).

Если NDOS работает в резидентном режиме, то возвращается 99;

_Т1МЕ                                 — текущее время в формате ЧЧМ:СС (разделитель зависит от установленных средств национальной поддержки);

_VIDEO                      — строка, идентифицирующая тип дисплейного адаптера:

                        MONO           — адаптер MDA;

CGA               — адаптер CGA;

EGA                — адаптер EGA;

VGA               — адаптер VGA.