О хитростях .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" ... |