RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : RexxUtil от Regin'ы в OS/2


Список сообщений | Написать новое | Ответить на сообщение | Домой Поиск:
Предыдущее сообщение | Следующее сообщение
From : Aleksey Tarasow, 2:5053/57, librexx.ru azimut21.ru azimut64.ru
To : valerius
Subj : RexxUtil от Regin'ы в OS/2

> > Пытаюсь разобраться с региной под OS/2 сама она запускается, а вот rexxutil от нее загрузить не могу. Постоянно грузиться штатный. Как сделать так что бы грузилась её dll'ка
>
> Наверное, убрать штатную с путей (LIBPATH) или прописать путь к диреЮ в которой лежит региновская в set BEGINLIBPATH=... Если надо, чтобы обе юзались одновременно, есть опция set LIBPATHSTRICT=T. Кроме того, не уверен что сам REXX умееет две DLL с одним и тем же именем.

Эксперименты показали следующее:
* Regina ставится простым копированием всех exe и dll файлов из архива в папку, прописанную в LIBPATH.
* При этом она не заменяет стандартный обработчик REXXSAA.
* Вызвать Regin’у можно двумя способами:
** Напрямую указав её при запуске скрипта. «regina “имя скрипта”». При это regina сама автоматчики загружает свой вариант RexxUtil.
** Программно. Как не знаю, но RexxDW это как-то делает.

В OS/2 для работы с RexxDW почему-то не достаточно загрузить его dll’шки – программа просто не запускается без объяснения причины. Необходимо запускать путем прямого указание его имени при запуске крипта. Для чего я ввел у себя в OS/2 новое расширение “*.rexx”, при котором имя RexxDW подставляется автоматически. При этом не создается текстовое окно, и выводы оператора “say” не видны. Весь необходимый вывод необходимо сразу организовывать в графические формы. Что не очень удобно, особенно при учете того, что сообщения об ошибках так же не видны. В Windows’е при прямом вызове открывается дополнительное текстовое окно, в которые происходит вывод оператора “say” и сообщений об ошибках, а при вызове скрипта через RexxDW, происходит все так же как в OS/2.
Может, кто подскажет, почему RexxDW в OS/2 требует обязательного своего вызова?

Теперь про RexxDB.

Как я писал в статье, при запуске гипервизора «Сервер данных», возникает ошибка, в результате программа запускается, но не находит таблицы. Что неприятно…
Решил создать облегченную версию гипервизора без графики, что бы была возможность его запуска в OS/2. Задача не вызвала особых проблем. Теперь в архив входит версия гипервизора «СерверДанныхDOS», которая похудела в два раза и при этом без проблем работает как OS/2 так и Windows. Правда редактировать данные, конечно же, нельзя, но это далеко не всегда и нужно.
Работа над упрощенной версией гипервизора высветила некоторые странности в работе Regin’ы в оси, за которые я зацепился и начал копать. Удалось определить точного виновника в ошибке из-за которой полная версия не находит таблицы с данными.
Оказалось что функция «SysFileTree» из RexxUtil от Regin’ы в OS/2 работает не корректно и совершенно не видит каталоги. Написал текстовый скрипт (zSQAq0rUi8FaA), вот его текст:

/**/
call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
call SysLoadFuncs

say 'RexxUtil version 'sysutilversion()
!global.!DirDB='C:BaseData'
call SysFileTree !global.!DirDB, DescFile, 'O'
say 'DescFile.0='DescFile.0
do n=1 to DescFile.0
say DescFile.n
end n
!global.!DirDB='C:BaseData'
call SysFileTree !global.!DirDB, DescFile, 'DO'
say 'DescFile.0='DescFile.0
!global.!DirDB='C:BaseData/'
call SysFileTree !global.!DirDB, DescFile, 'DO'
say 'DescFile.0='DescFile.0
Parse Source os . prog
say 'OS: 'os
parse Version ver
say ver

return

Вот что возвращает скрипт при запуске в разных интерпретаторах:

Рис.1. Запуск тестового скрипта в OS/2 в REXXSAA и Regina 3.9 (i7YB90Pgi8FWa)
Рис.2. Запуск тестового скрипта в Windows в Regina 3.9 (f6kyF6e-i8FX7)

Как видно функция «SysFileTree» в Regin’е 3.9 ведет себя по разному в OS/2 и Windows. Решил протестировать более ранние версии Regina в OS/2. вот результат.

Рис.3. Запуск тестового скрипта в OS/2 в Regina 3.7 (mmW43FkVi8FXP)
Рис.4. Запуск тестового скрипта в OS/2 в Regina 3.6 (p_-jjfOQi8FXj)
Рис.5. Запуск тестового скрипта в OS/2 в Regina 3.5 (6n8Vrikui8FYL)

Видно, что смена версий Regin’ы не влияет на результат работы. При этом версия RexxUtil не меняется. Из чего можно сделать вывод: проблема на уровне RexxUtil от Regin’ы, и который давно не менялся…

Теперь зная причину проблемы, обошел её с использование команды «DIR».
На текущий момент вся система без проблем работает в OS/2. Таким образом, удалось полностью решать поставленную задачу. И одновременно с этим написать по-настоящему межплатформенную систему.
Я программирую на ноутбуке Dell с двухъядерным процессором 2.16 Мгц, на котором стоит Windows 8.1 (лицензия), дробить диск я не решился и поставил OS/2 в Virtual Box. Тесты показали, что в Windows’е скорость возврата всех данных из таблицы «Pump» за 2014 год (401 102 строк) составляет, в среднем 18 сек (0,00004 на строчку). Тогда как в OS/2 время обработки того же запроса 13,5 сек (0,00003 на строчку). При этом в OS/2 разброс времени выполнения при многократных однотипных запросах минимальные, в пределах 1 сек. А в Windows’е подобный разброс составляет до 6 секунд. Отмечу общее ощущение того что все файловые операции в OS/2 проходят быстрее. Возможно, этим объясняется меньшее время выполнения запроса. На днях проведу тесты в OS/2 на реальной машине, но там у меня вообще нет Windows так, что полноценного сравнения снова не получиться.
На сайте «полузазеркалье.рф» выложил обновленный архив (BuB1gYHni8FR5), и в свете обновленной ситуации подправил статью.

Ложки дегтя.

К сожалению, в OS/2 остаются проблемы с RexxDW. На текущий момент мне известно три слабых места:
1. Новая версия RexxDW 2.1 использует и новую версию библиотеки «dwindows 3.0», которая умеет работать только с UTF8. Внутри программы я это обошел это, введя функции по конверсии текста туда и обратно, и в Windows проблем нет, а вот в OS/2 портится название окна в списке открытых окон в eCenter’е (рис.6, 7). Как видно из примеров, библиотека «dwindows 3.0» не корректно работает в OS/2 (eCS). Здесь я ни чего сделать не могу.

Рис.6. Имя окна указано в кодировке UTF8. (WkMZc7bUi8FYc)
Рис.7. Имя окна указано в кодировке Dos866. (UKWC_Vv3i8FZ3)

2. Проблема со шрифтами. Заголовки в форме «NOTEBOOK» выводятся искаженными, как показано на рисунке 8. Неприятно, но не смертельно.

Рис.8. Иллюстрация проблемы со шрифтами. (D3aNIwd1i8FZZ)

3. В форме «Selector» отсутствуют некоторые иконки. Что так же не смертельно и неприятно. Рисунок 9.

Рис.9. Отсутствие иконок в форме «Selector». (q4F_agX9i8FZw)

Данные текст переведу через «Google Переводчик» и отправлю письмом разработчику RexxDW. Надеюсь, он исправит найденные ошибки. Если у кого есть возможность так или иначе посодействовать в их скорейшем исправлении, прошу этими возможностями воспользоваться.


Tue 28 Jul 2015 08:34 Mozilla/5.0 (Windows NT 6.3; WOW64; rv:39.0) Gecko/20100101




Programmed by Dmitri Maximovich, Dmitry I. Platonoff, Eugen Kuleshov.
25.09.99 (c) 1999, RU/2. All rights reserved.
Rewritten by Dmitry Ban. All rights ignored.