8.8.4. Встроенные функции
Встроенные функции NDOS являются обобщением встроенных переменных, допуская при обращении к ним
указание аргументов и принимая в зависимости от аргументов различные значения. Вызов встроенной функции имеет следующий формат
%@имя [аргумент[, аргумент]...]
Здесь % — признак ссылки на значение функции, @ — признак функции
(чтобы отличить ее от глобальной переменной), а имя — имя функции. Список аргументов обязателен и заключается в квадратные скобки
(в данном случае имеется коллизия между используемой нами синтаксической
нотацией и применением скобок в командной строке). Каждый аргумент может быть
представлен строкой, ссылкой на значение глобальной переменной, параметром или
вызовом встроенной функции. К встроенным функциям можно обращаться в любых
командных строках, но наиболее полезны они в командных файлах и синонимах.
Вызовы встроенных функций могут встречаться в тех же контекстах, что и ссылки
на значения глобальных переменных.
Опишем все поддерживаемые NDOS встроенные функции, каждая из которых возвращает значение строкового типа.
Функция @ATTRIB [{/file|dir},{R·H·S·D·A·N}] проверяет, имеет
ли файл file (либо каталог dir) указанный вторым
аргументом атрибут или множество атрибутов. Сразу заметим, что NDOS (как, впрочем, и MS-DOS 5.0) позволяет работать с атрибутами каталогов наравне с атрибутами
файлов. Здесь и далее разделение лексем символом - обозначает множество, каждый
элемент которого является комбинацией лексем, причем лексема может входить в
комбинацию не более одного раза. Так, например, R, RH, ASH — допустимые комбинации, a HSS — хотя и воспринимаемая, но некорректная комбинация (при ее задании
принимается один символ S вместо двух). Символы R, Н, S и А обозначают уже хорошо известные нам
атрибуты, символ D указывает на то, что имеются в виду атрибуты каталога (а не файла), а
символ N обозначает отсутствие всех атрибутов. Из множества допустимых
комбинаций в качестве аргумента может быть выбрана только одна, так как вся
конструкция заключена в фигурные скобки. Явно специфицировать отсутствие того
или иного атрибута данная функция не позволяет. Если условие наличия заданных
атрибутов у заданного файла (каталога) выполняется, тег функция возвращает
значение 1 («истина»), а иначе — 0 («ложь»).
Функция @DlSKFREE[d:,{B|K|M}] обеспечивает
выдачу размера свободной области на диске в приводе d. Требуемая единица измерения задается вторым аргументом: В — байт, К — Кбайт, М — Мбайт.
Функция @DOSMEM[{B|K|M}] служит для
выдачи размера свободной области стандартной памяти в байт (В), Кбайт (К) или
Мбайт (М).
Функция @EMS[{B|K|M}] предназначена
для выдачи размера свободной области отображаемой памяти в байт (В), Кбайт (К)
или Мбайт (М).
Функция EVAL [выражение] обеспечивает
вычисление заданного в качестве аргумента арифметического выражения. В выражении допускается использовать целые числа, ссылки
на значения глобальных переменных, параметры и вызовы встроенных функций. Все
операнды должны быть строками, представляющими целые числа в диапазоне от —2
147 483 648 до +2 147 483 647. Значение выражения будет лежать в том же
диапазоне. В качестве знаков операций в выражении можно использовать + (сложить), — (вычесть), *
(умножить), / (разделить, взяв целую часть) и %% (найти остаток от деления).
Например, если значением глобальной переменной MYVAR является 5, то вызов %@EVAL[(%MYVAR'5)-10] даст 15.
Функция @ЕХТ[file] возвращает расширение имени файла file (без предшествующей ему в спецификации точки).
Функция @EXTENDED[{B|K|M}] предназначена
для выдачи размера свободной области расширенной памяти в байт (В), Кбайт (К) или Мбайт (М).
Функция @FILESlZE [file,{B|K|M}] возвращает
размер файла file в байт (В), Кбайт (К) или Мбайт (М).
Функция @FULL[file] служит для выдачи полной спецификации файла file, возможно, по неполной его спецификации. Для этого обеспечивается поиск файла относительно
текущего каталога на заданном приводе или относительно рабочего каталога.
Функция @INDEX[stringl, string2] возвращает позицию, начиная с которой строка string2 входит в строку string 1 в первый раз, или —1, если ни одного
вхождения не обнаружено. Позиции нумеруются с нуля.
Функция @LEN [string] предназначена для выдачи длины строки string (т.е. числа содержащихся в ней символов).
Функция @LINE[file, n] служит для выдачи n-ой (начиная с 0) строки текстового файла file.
Функция @LOWER[string] заменяет найденные в строке string прописные буквы их строчными эквивалентами. Замена незарегистрированных в кодовой странице
букв кириллицы не поддерживается.
Функция @NAME[file] возвращает имя файла file (без маршрута и расширения).
Функция @РАТН[file] предназначена для отсечения составного имени
файла от спецификации file. Результат выдается без реального поиска и даже без Простой проверки наличия данного файла на диске (в отличие от функции ©SEARCH).
Функция @REMOTE[d] проверяет, является ли привод d в ЛВС локальным или удаленным. Для локального привода
возвращается 0, а для удаленного — 1.
Функция @REMOVABLE[d] проверяет, является ли привод d накопителем со съемным носителем информации. Для такого дисковода
возвращается 1, а иначе — 0.
Функция @SEARCH[file] обеспечивает поиск исполняемого файла file (в том числе с использованием значения глобальной переменной PATH) и присоединяет к
его спецификации расширение СОМ, ЕХЕ, ВАТ или ВТМ, исходя из результатов поиска, а также реальный маршрут,
по которому файл найден, и имя привода, если
данные элементы в аргументе не указаны. Дополненная таким способом (полная) спецификация
файла возвращается в качестве значения функции. При неоднозначности (т.е. при
наличии в одном и том же каталоге нескольких исполняемых файлов с одинаковыми
именами, но с разными расширениями) результат определяется приоритетом
расширений. Приоритеты расширений аналогичны КП DOS и по убыванию располагаются следующим образом: COM, EXE, ВТМ и ВАТ.
Функция @SUBSTR[string,n,m] служит для выдачи подстроки строки string, которая начинается с ее n-ой позиции и содержит |т| символов. Позиции строки нумеруются с нуля, причем с левого ее конца, если т>0, либо с правого ее конца, если т<0.
Например, для получения дня текущего месяца из даты в формате США,
достаточно использовать конструкцию
%@SUBSTR[%_DATE,2,2]
Если строка-аргумент представляется литералом и содержит запятые, то ее следует заключить в кавычки (") или в обратные апострофы ('). Имейте в виду, что эти символы будут
рассматриваться функцией как принадлежащие строке, отчего изменится нумерация
ее символов.
Функция @UPPER[string] предназначена для замены найденных в строке string строчных букв на их прописные
эквиваленты. Замена незарегистрированных в кодовой странице букв кириллицы не
производится.
Функция @XMS[{B|K|M}] возвращает
размер свободной области расширенной памяти, подключенной к системе по стандарту XMS 2.0, который выражен в байт (В), Кбайт (К) или Мбайт (М).