Object REXX. Новые функции в RexxUtil.

 

Автор: Василий Сидоров.

Источник: Русский электронный журнал разработчика

 

В очередной раз пробуя SysNationalLanguageCompare, снова обнаружил, что она работает неправильно даже после того, как я "пропатчил" COLLATE-последовательность для России в COUNTRY.SYS.

Решил написать о баге разработчикам, а заодно и спросить, почему не документированы новые функции RexxUtil. Русскому опять ;) не повезло, но описание новых функциий выслали.

Системные функции

SysDumpVariables
выводит в указанный файл или на стандартный вывод имена и значения переменных из текущей области видимости (scope).

result = SysDumpVariables([файл])
Формат вывода: Name=Имя, Value="Значение переменной Имя"
Возврат: 0 - нет ошибок
             -1 - ошибки.

SysGetFileDateTime
возвращает дату/время создания/записи обращения файла.

result = SysGetFileDateTime(Имя,[СЕЛЕКТОР])
Возврат: -1 - ошибка, иначе yyyy-mm-dd hh:mm:ss

Необязательный СЕЛЕКТОР может быть Create/Access/Write. Файл должен быть закрыт или открыт в разделяемом режиме с разрешением хотя бы записи.

SysSetFileDateTime
устанавливает дату/время последней записи файла.

result = SysSetFileDateTime(Имя[,Дата][,Время])

Если не указаны дата и/или время - берутся их текущие значения. Файл должен быть закрыт или открыт в разделяемом режиме с разрешением хотя бы записи.

Эти функции возвращают временные отметки в формате: yyyy-mm-dd hh:mm:ss
Для OS/2 и WindowsNT могут возращать информацию не только для файлов, но и для каталогов, *nix и Win9x - только файлы.

SysVersion
возвращает наименование и версию операционной системы. Сегодня существуют версии ObjectREXX для OS/2, Windows, AIX и Linux. Для Windows только за деньги;)

result = SysVersion()
Возможные возвраты: OS/2 2.40
                                  WindowsNT 4.00
                                  AIX 4.2
                                  Linux 2.0.34

SysUtilVersion
возвращает версию самой библиотеки RexxUtil.

result = SysUtilVersion()
Возврат: Номер версии в формате: n.mm (сейчас 2.0)

Функции манипулирования с кортежами переменных (stem)

SysStemCopy
копирует заданное число элементов, начиная с заданного индекса источника в заданный индекс приемника; опционально делает вставку.

result = SysStemCopy(Откуда,Куда[,ИзПоз.][,ВПоз.][,Счетчик][,Вставка])
Возврат: 0 - нет ошибок
             -1 - ошибка копирования.

Копирует Счетчик элементов с индекса ИзПоз. кортежа Откуда в индекс ВПоз. кортежа Куда.
Если флаг Вставка 'I' - элементы вставляются, если 'O' - замещают элементы получателя.
Умалчиваемые значения позиций - 1 (из начала в начало), счетчика - все элементы источника, флага - замещение ('O').

SysStemDelete
уничтожает заданное число элементов, начиная с указанной позиции.

result = SysStemDelete(Кортеж,Индекс[,Счетчик])
Возврат: 0 - нет ошибок
-1 - ошибка удаления.

Удаляет из кортежа Счетчик элементов, начимая с позиции Индекс. Значение по умолчанию для счетчика - один элемент. Кортеж "сжимается", т.е. элементы после удаленного перенумеруются.

SysStemInsert
вставляет заданное значение как элемент с заданным индексом.

result = SysStemInsert(Кортеж,Индекс,Значение)
Возврат: 0 - нет ошибок
             -1 - ошибка вставки.

Вставляет в позицию Индекс новый элемент. Кортеж "расширяется", т.е. элементы после вставленоого перенуменуются.

SysStemSort
сортирует весь кортеж или его часть.

result = SysStemSort(Кортеж,Порядок,Тип,НачПоз,КонПоз,НачКол,КонКол)

Элементы Кортеж сортируются в Порядок ('A' - по возрастанию, 'D' - по убыванию, по умолчанию - 'A'), начиная с элемента в НачПоз (по умолчанию 1) и заканчивая элементом в КонПоз (по умолчанию - индекс последнего элемента).
Для сравнения используются символы от НачКол (по умолчанию 1) до КонКол (по умолчанию последняя колонка строки).
Тип сравнения может быть 'C' - учет регистра или 'I' - без учета регистра (по умолчанию - 'C').
Используется алгоритм быстрой сортировки и порядок элементов с равными ключами не гарантирован.

Все SysStemXXXX функции работают только с кортежами вида:
stem.0=n - общее число элементов
stem.1 ... stem.n - одномерный массив.

Примечание: Проверка показала, что источник и получатель могут быть одной и той же переменной.
 

P.S. ObjectRexx для Warp3 теперь доступен для загрузки без регистрации: objrxx30.zip

Чтобы использовать новые функции в других версиях рекса, надо заменить RexxUtil.dll и RexxCRT.dll на файлы из этого архива.

Отдельный интерес может представлять RexxPG.inf, в котором описаны функции и обработчики RexxAPI.