Информационные функции


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

Сайт создан в системе uCoz