PGM PARM(&CMDCMDLIB &PARMVAL &RTNVAL) /*------------------------------------------------------------------------*/ /* AA3_SAMPLE : コマンドプロンプト制御プログラム */ /* */ /* -- このプログラムはコマンドのパラメータを検査します。 */ /* 判定した結果を &RTNVAL に入れて戻します。 */ /* コマンドは &RTNVAL 別に PMTCTL を定義して */ /* PMTCTL によって次に表示するパラメータを */ /* 制御することができます。 */ /* *STATUS メッセージを送ってメッセージを */ /* 表示することができます。 */ /* */ /* 2019/12/01 作成 */ /*------------------------------------------------------------------------*/ DCL VAR(&CMDCMDLIB) TYPE(*CHAR) LEN(20) DCL VAR(&PARMVAL) TYPE(*CHAR) LEN(20) DCL VAR(&RTNVAL) TYPE(*CHAR) LEN(32) DCL VAR(&DEV) TYPE(*CHAR) LEN(10) DCL VAR(&BIN4) TYPE(*CHAR) LEN(4) DCL VAR(&MSG) TYPE(*CHAR) LEN(132) DCL VAR(&MSGID) TYPE(*CHAR) LEN(7) DCL VAR(&MSGF) TYPE(*CHAR) LEN(10) DCL VAR(&MSGFLIB) TYPE(*CHAR) LEN(10) DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(132) DCL VAR(&TYPE) TYPE(*CHAR) LEN(1) DCL VAR(&TOPGMQ) TYPE(*CHAR) LEN(10) DCL VAR(&MSGTYPE) TYPE(*CHAR) LEN(10) + VALUE('*ESCAPE ') DCL VAR(&APIERR) TYPE(*CHAR) LEN(116) + VALUE(X'00000074') /* 2 進数 */ DCL VAR(&NULL4) TYPE(*CHAR) LEN(4) + VALUE(X'00000000') /*--------------------------------------------------*/ /* 以下は装置の初期値パラメータ */ /*--------------------------------------------------*/ DCL VAR(&DEV_) TYPE(*CHAR) LEN(10) /*--------------------------------------------------*/ /* 以下は返信パラメータ */ /*--------------------------------------------------*/ DCL VAR(&DEV) TYPE(*CHAR) LEN(40) + VALUE(' ??DEV(') MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR)) /*( 環境の取得 )*/ RTVJOBA TYPE(&TYPE) IF COND(&TYPE *EQ '0') THEN(DO) /* バッチ */ CHGVAR VAR(&TOPGMQ) VALUE('*SYSOPR ') ENDDO /* バッチ */ ELSE CMD(DO) /* 対話式 */ CHGVAR VAR(&TOPGMQ) VALUE('*TOPGMQ ') ENDDO /* 対話式 */ /*( パラメータ値の取得 )*/ CHGVAR VAR(&DEV) VALUE(%SST(&PARMVAL 1 10)) CHKOBJ OBJ(&DEV) OBJTYPE(*DEVD) MONMSG MSGID(CPF9800) EXEC(DO) CHGVAR VAR(&RTNVAL) VALUE(*ERR) CHGVAR VAR(&MSG) VALUE(' 装置 ' *CAT &DEV *TCAT + ' が見つかりません。 ') SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) + TOPGMQ(*EXT) MSGTYPE(*STATUS) RETURN ENDDO CHGVAR VAR(&RTNVAL) VALUE(*IPADDR) RETURN /*( エラーがあったときは CPF0011 を *ESCAPE で戻す )*/ ERROR: RCVMSG RMV(*NO) MSG(&MSG) SNDMSG: SNDPGMMSG MSG(&MSG) MSGTYPE(*DIAG) SNDPGMMSG MSGID(CPF0011) MSGF(QCPFMSG) MSGTYPE(*ESCAPE) DSPJOBLOG JOB(*) OUTPUT(*PRINT) ENDPGM