テンプレート・サンプルCLP AA3_SAMPLE はコマンドプロンプト制御を
行うプログラムのサンプル・ソースである。
コマンドプロンプト制御とはコマンドの各パラメータを有効にして表示するか
どうかを判断することである。
コマンドのパラメータの制御の多くはその前に入力された値によって
判断することが多い。
プロンプト制御の例は「51.プロンプト制御」を参照 https://www.as400-net.com/cmd/5439/
プロンプト制御プログラムはこのようにパラメータの表示/非表示をプログラムによって
判断するものである。
[ テンプレート・サンプルCLP AA3_SAMPLE ]
ソースはこちらから
0001.00 PGM PARM(&CMDCMDLIB &PARMVAL &RTNVAL)
0002.00 /*------------------------------------------------------------------------*/
0003.00 /* AA3_SAMPLE : コマンドプロンプト制御プログラム */
0004.00 /* */
0005.00 /* -- このプログラムはコマンドのパラメータを検査します。 */
0006.00 /* 判定した結果を &RTNVAL に入れて戻します。 */
0007.00 /* コマンドは &RTNVAL 別に PMTCTL を定義して */
0008.00 /* PMTCTL によって次に表示するパラメータを */
0009.00 /* 制御することができます。 */
0010.00 /* *STATUS メッセージを送ってメッセージを */
0011.00 /* 表示することができます。 */
0012.00 /* */
0013.00 /* 2019/12/01 作成 */
0014.00 /*------------------------------------------------------------------------*/
0015.00 DCL VAR(&CMDCMDLIB) TYPE(*CHAR) LEN(20)
0016.00 DCL VAR(&PARMVAL) TYPE(*CHAR) LEN(20)
0017.00 DCL VAR(&RTNVAL) TYPE(*CHAR) LEN(32)
0018.00 DCL VAR(&DEV) TYPE(*CHAR) LEN(10)
0019.00 DCL VAR(&BIN4) TYPE(*CHAR) LEN(4)
0020.00 DCL VAR(&MSG) TYPE(*CHAR) LEN(132)
0021.00 DCL VAR(&MSGID) TYPE(*CHAR) LEN(7)
0022.00 DCL VAR(&MSGF) TYPE(*CHAR) LEN(10)
0023.00 DCL VAR(&MSGFLIB) TYPE(*CHAR) LEN(10)
0024.00 DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(132)
0025.00 DCL VAR(&TYPE) TYPE(*CHAR) LEN(1)
0026.00 DCL VAR(&TOPGMQ) TYPE(*CHAR) LEN(10)
0027.00 DCL VAR(&MSGTYPE) TYPE(*CHAR) LEN(10) +
0028.00 VALUE('*ESCAPE ')
0029.00 DCL VAR(&APIERR) TYPE(*CHAR) LEN(116) +
0030.00 VALUE(X'000074') /* 2 進数 */
0031.00 DCL VAR(&NULL4) TYPE(*CHAR) LEN(4) +
0032.00 VALUE(X'00000000')
0033.00 /*--------------------------------------------------*/
0034.00 /* 以下は装置の初期値パラメータ */
0035.00 /*--------------------------------------------------*/
0036.00 DCL VAR(&DEV_) TYPE(*CHAR) LEN(10)
0037.00 /*--------------------------------------------------*/
0038.00 /* 以下は返信パラメータ */
0039.00 /*--------------------------------------------------*/
0040.00 DCL VAR(&DEV) TYPE(*CHAR) LEN(40) +
0041.00 VALUE(' ??DEV(')
0042.00 MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))
0043.00
0044.00 /*( 環境の取得 )*/
0045.00 RTVJOBA TYPE(&TYPE)
0046.00 IF COND(&TYPE *EQ '0') THEN(DO) /* バッチ */
0047.00 CHGVAR VAR(&TOPGMQ) VALUE('*SYSOPR ')
0048.00 ENDDO /* バッチ */
0049.00 ELSE CMD(DO) /* 対話式 */
0050.00 CHGVAR VAR(&TOPGMQ) VALUE('*TOPGMQ ')
0051.00 ENDDO /* 対話式 */
0052.00
0053.00 /*( パラメータ値の取得 )*/
0054.00 CHGVAR VAR(&DEV) VALUE(%SST(&PARMVAL 1 10))
0055.00 CHKOBJ OBJ(&DEV) OBJTYPE(*DEVD)
0056.00 MONMSG MSGID(CPF9800) EXEC(DO)
0057.00 CHGVAR VAR(&RTNVAL) VALUE(*ERR)
0058.00 CHGVAR VAR(&MSG) VALUE(' 装置 ' *CAT &DEV *TCAT +
0059.00 ' が見つかりません。 ')
0060.00 SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) +
0061.00 TOPGMQ(*EXT) MSGTYPE(*STATUS)
0062.00 RETURN
0063.00 ENDDO
0064.00 CHGVAR VAR(&RTNVAL) VALUE(*IPADDR)
0065.00 RETURN
0066.00
0067.00 /*( エラーがあったときは CPF0011 を *ESCAPE で戻す )*/
0068.00 ERROR: RCVMSG RMV(*NO) MSG(&MSG)
0069.00 SNDMSG: SNDPGMMSG MSG(&MSG) MSGTYPE(*DIAG)
0070.00 SNDPGMMSG MSGID(CPF0011) MSGF(QCPFMSG) MSGTYPE(*ESCAPE)
0071.00 DSPJOBLOG JOB(*) OUTPUT(*PRINT)
0072.00 ENDPGM
[解説]
プログラムで検査するのでファイルを調べたり自由にいろいろな検査を行うことができる。
コマンドでは簡単な検査しかできないとあきらめていた方もプログラムで検査できるとあれば
DSPFを作成して検査しなくてもコマンドで十分な検査ができることが
ご理解して頂けると思う。
バッチ処理で出力帳票の初期値をセットしたり入力値を検査したり
次に表示するバラメータを自由にコントロールできる。
バッチ処理の範囲指定はDSPFにするよりコマンドのほうがはるかに
統一性も取れて柔軟なシステムに仕上げることができる。
