DATE()res = DATE([<опция>][,<дата>][,<формат>])
Без параметров функция DATE() выводит текущую дату в "обычном" формате, соответствующем опции N. Можно ввести любую другую из нижеперечисленных опций для вывода текущей даты в другом формате. Языковые установки операционной системы здесь не используются, поэтому дата выводится по-английски.
Параметр "опция" определяет формат получаемой строки. "Опция" может принимать следующие значения:
Расшифровка Перевод Образец Пример Примечание В Basedate Базовая дата 728850 Число дней с 1 янв. 0001г. С Century Век 34890 Число дней с начала века D Days Дни 187 Число дней с начала года Е European Европейский дд/мм/гг 11/07/95 I Internal Внутренний 6400 Системная дата J Julian Юлианский ггддд 95192 M Month Месяц July N Normal Обычный ДД Ммм ГГ 11 Jul 95 О Ordered Упорядоченный гг/мм/дд 95/07/11 S Sorted Сортированный ггггммдд 19950711 U USA Американский мм/дд/гг 07/11/95 W Weekday День недели Thursday
Если нам необходимо преобразовать некоторую дату из сортированного (S) или внутреннего (I) формата в какой-либо другой, то вторым после "опции" параметром будет дата в соответствующем (внутреннем или сортированном) формате, а третьим параметром - тип формата этой даты (S или I). Примеры:
say DATE() ==> 11 Jul 95 say DATE('U') ==> 07/11/95 say DATE('E', 6400, 'I') ==> 11/07/95 say DATE('O', 19950711, 'S') ==> 95/07/11
При использовании функций DATE() или ТIМЕ() автоматически запоминаются и дата и время, причем это происходит однажды для одного и того же утверждения. Покажем на примерах. Если использовать, например, функцию ТIМЕ() в разных утверждениях, значение возвращаемого ею времени будет разным:
say TIME() ==> 20:22:19 call DELAY(100) /* Задержка */ say TIME() ==> 20:22:21
Теперь дважды вызовем ТIМЕ() из одного и того же утверждения:
say TIME() DELAY(100) TIME() ==> 20:22:40 0 20:22:40
Здесь время было зафиксировано один раз в момент первого вызова ТIМЕ(); второй вызов ТIМЕ() из того же утверждения просто считал строку, оставшуюся в результате первого вызова. DATE() работает в этом плане аналогично ТIМЕ(). Таким образом гарантируется, что вызовы функций считывания системного времени внутри одного и того же утверждения вернут одно и то же значение.
SHOW()res = SHOW(<опция>[,имя][,<разделитель>])
Функция позволяет вывести список различных ресурсов вашего компьютера. Возвращаемое значение является или булевским, или строкой. "Опция" - имя ресурса (вместо полного имени ресурса можно указывать первую букву имени):
Clips - имена клипов, созданные с помощью SETCLIP() или RXSET;
File - логические имена файлов, открытых по ОРЕN(), а также имена стандартных потоков ввода/вывода;
Libraries - список библиотек ARexx-a, который, возможно, пополнялся с помощью ADDLIB(). Следует отличать действие SHOW(Libraries) от действия функции библиотеки rexxsuppoft.library SHOWLIST(), которая может выводить список вообще всех открытых системных библиотек, а не только библиотек ARexx-a.
Ports - имена всех именованных портов сообщений в системе.
Дополнительный параметр "разделитель" может быть применен в тех случаях, когда имена каких-либо ресурсов содержат пробелы. Перед "разделителем" согласно спецификации функции SHOW() всегда должно быть не менее 2-х запятых (если параметр "имя" отсутствует). Если параметр "имя" присутствует, то вместо списка ресурсов функция SHOW() возвращает булевское значение ИСТИНА или ЛОЖЬ, в зависимости от того, обнаружен ли в системе требуемый ресурс. Например:
say SHOW(p) ==> REXX AREXX Rusifier.port say SHOW(p,, '0a'х) ==> REXX AREXX Rusifier.port
Следует учесть, что связные порты системы, чьи имена выводятся по SHOW(p), могут не являться ARexx-портами, и определять их в качестве "хозяев" по меньшей мере бессмыссленно.
SHOWDIR()res = SHOWDIR(<каталог>[,'ALL'|'FILE'|'DIR'][,<разделитель>])
Результатом работы функции является список файлов (подкаталогов) заданного каталога. Разделителем может быть любой символ (включая "пустой", т.е. нулевой символ). В качестве разделителя удобно определять какой-либо из символов, по определению не используемых в именах файлов (например, символ перевода строки - '0а'х). Пример использования:
say SHOWDIR('SYS:RexxC') ==> HI RX RXC RXLIB RXSET ТСС ТСО ТЕ TS WaitForPort
Обратите внимание: библиотека rexxarplib.library имеет функцию FILELIST(), которая работает аналогично SHOWDIR(), но к тому же поддерживает шаблоны имен.
SHOWLIST()res = SHOWLIST(<опция>[,<имя>][,<разделитель>][,'A'|'ADDRESS'])
Если параметр "имя" отсутствует, то возвращается список системных ресурсов, соответствующих указанной "опции" и разделенных необязательным символом "разделителем".
В случае, если "имя" определено, то проверяется наличие в системе ресурса с указанным именем и возвращается булевское значение, отображающее результат этой проверки.
"Разделителем" может быть любой символ, например '0а'х (новая строка).
Необязательный четвертый аргумент 'А' (или 'Address') заставляет функцию вернуть адрес узла (node) поименованного параметром "имя" ресурса (понятно, что в этом случае "имя" должно быть определено). Адрес является действительным как для exec-списков, так и для DOS-списков. Рассмотрение структуры этих списков выходит за рамки данной книги.
Параметр "опция" определяет тип конкретных ресурсов, информацию о которых необходимо получить. "Опцию" можно вводить двояко - либо полное имя, либо только первую букву. Ниже дан полный список возможных опций:
Опция РезультатAssign - Имена всех логических устройств;
Devices - Имена устройств (низкого уровня - соответствует уровню exec);
Handlers - Имена всех хэндлеров (т.е. интерфейсов между ОС и конкретными устройствами).
Уровень ОС-хэндлеров выше уровня exec-устройств;
Interrupts - Список имен узлов прерываний в соответствующем exec-списке;
Libraries - все системные библиотеки (не только библиотеки ARexx-a);
Memory-types - типы доступной памяти;
Ports - то же, что SHOW('P') - дает информацию о поименованных портах сообщений;
Resources - имена интерфейсов самого низкого уровня, соответствующих некоторым аппаратным узлам Амиг (например, порту аналогового джойстика). Возможности управления этими узлами непосредственно из ARexx-a нет, хотя требуемые имена могут быть получены безо всяких проблем;
Semaphores - возвращается список семафоров (средств разделения доступа к некоторым объектам, одновременно используемым из различных процессов/задач);
Task-ready - список всех системных задач, находящихся в состоянии готовности;
Volumes - имена томов во всех подключенных (псевдо)дисковых устройствах;
Waiting - список всех системных задач, находящихся в состоянии ожидания.
Примеры:
say SHOWLIST(L); ==> utility.library graphics.library say SHOWLIST(L, 'dos. library'); ==> 1 say SHOWLIST(M); ==> expansion memory chip memory say SHOWLIST(M,, '+'); ==> expansion memory+chip memory say SHOWLIST(D); ==> timer.device keyboard.device ... say SHOWLIST(V,, '|'); ==> RAM DISK | HD0 | HD1 | HD2 say SHOWLIST(R); ==> ciaa.resource ciab.resource ... say SHOWLIST(A, 'FONTS'); ==> 1
TIME()res = TIME(<опция>])
Функция возвращает форматированную строку или число, отображающее текущее системное вркмя. Если "опция" отсутствует, возвращается текущее время в 24-часовом формате (чч:мм:сс). Значениями "опции" могут быть символы C, E, H, M, N, R, S. Смысл "опций" таков:
n (Normal) - стандартный 24-часовой формат;
c (Civil) - 12-часовой формат;
h (Hours) - сколько часов прошло после полуночи;
m (Minutes) - сколько минут прошло после полуночи;
s (Seconds) - сколько секунд прошло после полуночи;
r (Reset) - сброс счетчика временных интервалов;
e (Elapsed) - интервал времени, прошедший либо после вызова TIME(r), либо после 1-го вызова TIME(e). Формат результата ss.tt (s соответствует целым секундам, а t - пятидесятым долям секунды. Результатом самого первого вызова TIME(e) (без предшествовавшего TIME(r)) всегда будет 0.00)
Примеры:
say TIME(n) ==> 8:06:25 say TIME(с) ==> 8:06AM say TIME(h) ==> 8 say TIME(m) ==> 485 say TIME(s) ==> 29206 call TIME(r); call DELAY(100); say TIME(e) ==> 2.04