OS名とバージョン番号の求め方
OS名とバージョンを求める方法
MSPもVOS3も互換OSなので、プログラムの一部だけを対応すれば、残りはMVSのコードのままで問題なく動く、ということは多々ある。そのような場合、OS毎にソースやオブジェクトを分けると反って煩わしいため、同じロードモジュールのままでMVS、MSP、VOS3に対応させたいことも多い。そこで現在プログラムが動いているOS名がわかれば、それに応じて飛び先を変える、OSに対応した処理モジュールを呼び出す、などの作り方をすることもできる。
OSがMVSなのかMSPなのかVOS3なのかを判定する
* *----------------------------------* * * LOAD CVT AND CVT PREFIX * * *----------------------------------* L R9,CVTPTR GR9 --> CVT USING CVTMAP,R9 ADDRESS TO CVT LR R8,R9 COPY CVT ADDRESS SH R8,=Y(CVTMAP-CVTFIX) LOCATE TO CVT PREFIX USING CVTFIX,R8 ADDRESS TO CVT PREFIX SPACE , * *----------------------------------* * * MVS CVTPRODN(CVT-X28) INCLUDED * * * CL8'SPN.N.N ' * * *----------------------------------* CLC CVTPRODN(2),=CL2'SP' ARE WE UNDER MVS ? BE OPSYSMVS YES, DO MVS WAY LR R1,R9 TEST UNDER VOS3 SH R1,=H'4' GET CVT -X4 CLC 0(4,R1),=CL4'2000' ARE WE UNDER VOS3 ? BNL OPSYSVOS YES, DO VOS3 WAY B OPSYSFUJ NO, IT WILL BE FACOM OS : : : IHAPSA , PSA MAP CVT DSECT=YES,PREFIX=YES CVT MAP IHAECVT , ECVT MAP :
プログラムはMVSのマクロを使ってアセンブルするものである。CVTプレフィックスのCVTPRODNの先頭2文字が’SP’ならOSはMVSと判定してよい。そうでなければCVTの-4番地の4バイトが文字’2000’以上かを判定しそうであればOSはVOS3と判定してよい。残りは富士通のOSとなる。
なお、具体的なOS名称やバージョン番号の格納場所には互換はない。
MVSのOS名とバージョンを求める
* *----------------------------------* * * GET MVS OS NAME AND VERSION * * *----------------------------------* OPSYSMVS DS 0H MVC OSNAME,=CL8'MVS' SET OS NAME AS 'MVS' MVC OSVERS,CVTPRODN MOVE OS LEVEL(SPN.N.N) OI OSVERS+7,C' ' TRANSLATE TO UPPER CASE SPACE , TM CVTOSLV1,CVTOS390 OS/390 OR HIGHER ? BNO DONE... NO, DONE... SPACE , L R1,CVTECVT LOAD EXTEND CVT ADDRESS USING ECVT,R1 ADDRESS IT MVC OSNAME,ECVTPNAM MOVE OS NAME FROM ECVT MVC OSVERS,=CL8'V99R9999' INIT OS LEVEL(V99R9999) MVC OSVERS+1(2),ECVTPVER MOVE OS VERSION MVC OSVERS+4(2),ECVTPREL MOVE OS RELEASE LEVEL MVC OSVERS+6(2),ECVTPMOD MOVE OS MODIFY LEVEL DROP R1 FORGET ECVT B DONE... DONE... SPACE , : : OSNAME DC CL8' ' FORMATTED OS NAME OSVERS DC CL8' ' FORMATTED OS VERSION :
OS/390以降のMVSではECVTにOS名(z/OSとか)とバージョン番号が格納されているのでそれをそのまま参照できる。それ以前のMVS/ESAまではCVTPRODNに格納されているSPレベル番号をバージョン番号として利用する。SPレベル番号はMVS/SPならSP1、MVS/XAはSP2、MVS/ESAはSP3?SP5となる。
VOS3のOS名とバージョンを求める
OPSYSVOS DS 0H LA 2,OSNAME LA 3,OSVERS VOSVR# OS=(2),VR=(3) : : OSNAME DC CL8' ' FORMATTED OS NAME OSVERS DC CL8' ' FORMATTED OS VERSION :
VOS3の場合は、VOSVR#マクロを使用する。指定したレジスターにOS名とリビジョン番号が入る。リビジョン番号からVOS3/LSやUSなどのバージョンを求めることができる。VOSVR#マクロはSYS1.MACLIBもしくはSYS1.VMODMACに入っているが、マクロの使用法はマニュアル公開されていないので詳細をここに載せることはできない。必要なら日立製作所に問い合わせる。
モジュールをMVSでアセンブルするならVOSVR#マクロをコピーするか、インラインコードを直接書けばよい。
富士通のOS名とバージョンを求める
* *----------------------------------* * * ISSUE FACOM MODESEL SVC * * *----------------------------------* OPSYSFUJ DS 0H LA R1,MSLSPARM GR1 --> SYSTEM PLIST LA RF,OSNAME GR15 -> USER PLIST SVC 2 ISSUE MODESEL SVC LA RF,DPARM LOAD MODESEL USER PLIST USING MSLUPARM,RF ADDRESSABILITY L R1,MSLAFTAB LOAD SYSTEM FUNCTION TABLE USING MSLFCTAB,R1 ADDRESSABILITY CLI MSLOSID+3,MSLOSF4 ARE WE UNDER OSIV/F4 ? BE OPSYSMSP YES, CLI MSLOSID+3,MSLOSX8 ARE WE UNDER X8/FSP ? BE OPSYSXSP YES, DROP R1,RF FORGET MODESEL PARAMETERS B DONE... NO, UNKNOWN OPERATING SYSTEM SPACE , * *----------------------------------* * * GET FOR MSP NAME AND VERSION * * * GR1 INCLUDED SYSTEM FUNC TABLE * * *----------------------------------* OPSYSXSP DS 0H OPSYSMSP DS 0H USING MSLFCTAB,R1 ADDRESSABILITY MVC OSNAME,MSLFCSCP MOVE SCP NAME MVC OSVERS,=CL8'V99L99' SET SCP VERSION SKELETON MVC OSVERS+1(2),MSLFCVER MOVE SCP VERSION MVC OSVERS+4(2),MSLFCVER+2 MOVE SCP LEVEL DROP R1 FORGET FUNCTION TABLE B DONE... DONE... : : OSNAME DC CL8' ' FORMATTED OS NAME OSVERS DC CL8' ' FORMATTED OS VERSION MSLSPARM DS 0F MODESEL SYSTEM PLIST DC XL4'76131783' KEY WORD DC AL1(128),AL3(0) FUNCTION CODE : *********************************************************************** * FACOM OSIV/MSP MODELSEL MACRO PARAMETER DSECTS * * ============================================== * *********************************************************************** MSLUPARM DSECT , MODESEL USER PARAMETER LIST MSLOSID DC F'0' +0 OPERATING SYSTEM ID MSLOSF4 EQU 1 ID=1: OS IS OS IV/F4 MSLOSX8 EQU 2 ID=2: OS IS OS IV/X8 DC F'0' +4 --- RESERVED --- MSLSINFO DC F'0' +8 SYSTEM INFORMATION MSLAFTAB DC A(0) +12 FUNCTION TABLE POINTER MSLUPLEN EQU *-MSLUPARM USER PLIST LENGTH SPACE , MSLFCTAB DSECT , MODESEL FUNCTION TABLE DC XL2'00' MSLFCLEN DC H'0' +2 TABLE LENGTH MSLFCSCP DC XL20'00' MSLFCVER DC CL4' ' +24 SCP VERSION/LEVEL DC XL16'00' MSLFCCPL DC AL1(0) +44 CPUMODEL LENGTH DC XL3'00' MSLFCCPU DC CL8' ' +48 CPUMODEL NAME DC XL12'00' MSLFCFLG DC XL188'00' +68 FUNCTION FLAGS MSLFCSKL EQU *-MSLFCTAB FUNCTION TABLE STATIC LENGTH SPACE , * FUNCTION FLAGS EQUATES MSLSAE EQU MSLFCFLG+1 MSLMAE EQU B'10000000' (BIT08)SYSTEM F4/MSP E20-AE MSLSEX EQU MSLFCFLG+5 MSLMEX EQU B'01000000' (BIT41)SYSTEM MSP/EX MSLSCKD EQU MSLFCFLG+0 MSLMCKD EQU B'00010000' (BIT03)SUPPORTED CKD-DASD MSLSCMS EQU MSLFCFLG+0 MSLMCMS EQU B'00000100' (BIT05)SUPPORTED CROSS MEMORY SERVICE MSLSVTMG EQU MSLFCFLG+1 MSLMVTMG EQU B'00000100' (BIT13)SUPPORTED VTAM-G MSLSICFE EQU MSLFCFLG+1 MSLMICFE EQU B'00000001' (BIT15)SUPPORTED ICF/E MSLSECF EQU MSLFCFLG+5 MSLMECF EQU B'01000000' (BIT41)SUPPORTED ECF MSLSARM EQU MSLFCFLG+8 MSLMARM EQU B'00000001' (BIT71)SUPPORTED DATA SPACE MSLSRACF EQU MSLFCFLG+5 MSLMRACF EQU B'00000010' (BIT46)SUPPORTED RACF V11L10 MSLSTISP EQU MSLFCFLG+8 MSLMTISP EQU B'00000010' (BIT70)SUPPORTED TISP(TCP/IP) MSLSUCB4 EQU MSLFCFLG+9 MSLMUCB4 EQU B'01000000' (BIT73)SUPPORTED 4DIGIT DEVICE MSLSSSU EQU MSLFCFLG+10 MSLMSSU EQU B'00100000' (BIT82)SUPPORTED SSU(GSEND/GRECV) MSLSSCMP EQU MSLFCFLG+10 MSLMSCMP EQU B'00001000' (BIT84)SUPPORTED S/SCMP SYSTEM MSLSR2GB EQU MSLFCFLG+11 MSLMR2GB EQU B'01000000' (BIT89)IMPLEMENTED LARGE REAL(2GB) MSLSVGTA EQU MSLFCFLG+11 MSLMVGTA EQU B'00100000' (BIT90)ACTIVATED VTAM-G/TISP MSLSVGTI EQU MSLFCFLG+11 MSLMVGTI EQU B'00010000' (BIT91)INSTALLED VTAM-G/TISP
MSP(富士通OS)の場合は、MODESELマクロを使用すればOS名とバージョンだけでなく、そのシステムでどのようなオプションを利用できるかなども知ることができる。例えば2GB以上のラージ実記憶が実装されている、装置番号が4桁である、スケーラブルシステムである、データ空間が利用可能である、等々である。
サンプルではモジュールをMVSでアセンブルするためMODESELマクロの展開形やパラメーターリストを直接コーディングしているが、MODESELマクロをコピーしてそれを使用してもよい。MODESELマクロはマニュアル(タスク管理マクロ命令文法書)に解説されている。