О хитростях .ENVIRONMENT
Автор: Виктор Смирнов
Дата: 06.05.2015
Источник: vasm.livejournal.com
Оказывается Object REXX позволяет очень простым, но почему-то не документированным способом определить к какому семейству относится операционная система, под которой выполняется приложение. А сделать это можно с помощью предопределённого в .ENVIRONMENT глобального объекта .SYSTEM, элементы которого как раз и содержат информацию об операционной системе.
Например, таким образом:
Тест № 1.
/* Sample1 - show the operating system name */ parse version _ver say _ver say '' say 'My Operating System is '||.system~name exit; |
Результаты выполнения теста для различных операционных систем.
The Operating System/2 v4.50
OBJREXX 6.00 18 May 1999 My Operating System is OS/2 |
Microsoft Windows 7
REXX-ooRexx_4.2.0(MT)_32-bit 6.04 22 Feb 2014 My Operating System is WindowsNT |
OpenSUSE Linux 13.1
REXX-ooRexx_4.2.0(MT)_64-bit 6.04 29 Dec 2013 My Operating System is LINUX |
А это приложение выводит на экран информацию о всех элементах объекта
Тест № 2.
/* Sample2 - check the entries of the .ENVIRONMENT object */
parse version _ver
say _ver
say ''
say '.ENVIRONMENT'
say ' ITEMS='||.environment~items;
do i over .environment
_rc = ownSay( 'ENVIRONMENT', i, .environment[i], 3);
if (.environment[i]~defaultname == 'a Directory') then do
say ' ITEMS='||.environment[i]~items;
do j over .environment[i]
_rc = ownSay( i, j, .environment[i][j], 6);
end;
end;
end;
exit;
::routine ownSay
use arg ?parent, ?child, ?obj, ?indent
_m = ' '~copies(?indent);
_s = ?obj~string;
if (?parent == 'ENVIRONMENT' & ?child == 'ENDOFLINE') then
_s = '"'||_s~c2x||'"x';
else _s = '"'||_s||'"';
say _m||'.'||?child||' '||?obj~defaultname||' '|| ,
?obj~objectname||' '||_s
return .nil;
|
Ниже приведёна часть экранного вывода, относящяяся к объекту
The Operating System/2 v4.50
OBJREXX 6.00 18 May 1999
.ENVIRONMENT
ITEMS=36
...
.SYSTEM a Directory a Directory "a Directory"
ITEMS=4
.VERSION a String a String "2.30"
.INTNAME a String a String "OS/2 Intel"
.SOMVERSION a String a String "2"
.NAME a String a String "OS/2"
...
|
Microsoft Windows 7
REXX-ooRexx_4.2.0(MT)_32-bit 6.04 22 Feb 2014
.ENVIRONMENT
ITEMS=62
...
.SYSTEM a Directory a Directory "a Directory"
ITEMS=3
.NAME a String a String "WindowsNT"
.VERSION a String a String "6.01"
.INTERNALNAME a String a String "WindowsNT"
...
|
OpenSUSE Linux 13.1
REXX-ooRexx_4.2.0(MT)_64-bit 6.04 29 Dec 2013
.ENVIRONMENT
ITEMS=60
...
.SYSTEM a Directory a Directory "a Directory"
ITEMS=3
.INTERNALNAME a String a String "LINUX"
.NAME a String a String "LINUX"
.VERSION a String a String "3.11.6-4-desktop"
...
|