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.