Встроенные функции

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, который выражен в байт (В), Кбайт (К) или Мбайт (М).