データ待ち行列 ( *DTAQ ) は、プロセス間通信などのプログラム間の
情報通信によく利用される。
データ待ち行列の作成は CRTDTAQ コマンドで作成することができるし
削除は DLTDTAQ コマンドによって削除することができる。
ところがデータ待ち行列 ( *DTAQ ) の中身をクリヤー(消去)するための
コマンドは用意されていない。
そこで CLRDTAQ というコマンドをここで用意した。
0001.00 CMD PROMPT(' データ待ち行列のクリヤー ') 0002.00 PARM KWD(DTAQ) TYPE(DTAQ) + 0003.00 PROMPT(' データ待ち行列 ') 0004.00 DTAQ: QUAL TYPE(*NAME) LEN(10) MIN(1) 0005.00 QUAL TYPE(*NAME) LEN(10) DFT(*LIBL) + 0006.00 SPCVAL((*LIBL) (*CURLIB)) + 0007.00 PROMPT(' ライブラリー ')
CRTCMD CMD(MYLIB/CLRDTAQ) PGM(MYLIB/CLRDTAQCL) SRCFILE(MYSRCLIB/QCMDSRC)AUT(*ALL)
0001.00 PGM PARM(&DTAQLIB) 0002.00 /*-------------------------------------------------------------------*/ 0003.00 /* CLRDTAQCL : データ待ち行列のクリヤー */ 0004.00 /* */ 0005.00 /* 2017/06/17 作成 */ 0006.00 /*-------------------------------------------------------------------*/ 0007.00 DCL VAR(&DTAQLIB) TYPE(*CHAR) LEN(20) 0008.00 DCL VAR(&DTAQ) TYPE(*CHAR) LEN(10) 0009.00 DCL VAR(&DTALIB) TYPE(*CHAR) LEN(10) 0010.00 DCL VAR(&MSG) TYPE(*CHAR) LEN(132) 0011.00 DCL VAR(&MSGID) TYPE(*CHAR) LEN(7) 0012.00 DCL VAR(&MSGF) TYPE(*CHAR) LEN(10) 0013.00 DCL VAR(&MSGFLIB) TYPE(*CHAR) LEN(10) 0014.00 DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(132) 0015.00 DCL VAR(&TYPE) TYPE(*CHAR) LEN(1) 0016.00 DCL VAR(&TOPGMQ) TYPE(*CHAR) LEN(10) 0017.00 DCL VAR(&MSGTYPE) TYPE(*CHAR) LEN(10) + 0018.00 VALUE('*ESCAPE ') 0019.00 DCL VAR(&APIERR) TYPE(*CHAR) LEN(116) + 0020.00 VALUE(X'000074') /* 2 進数 */ 0021.00 DCL VAR(&NULL4) TYPE(*CHAR) LEN(4) + 0022.00 VALUE(X'00000000') 0023.00 MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR)) 0024.00 0025.00 /*( 環境の取得 )*/ 0026.00 RTVJOBA TYPE(&TYPE) 0027.00 IF COND(&TYPE *EQ '0') THEN(DO) /* バッチ */ 0028.00 CHGVAR VAR(&TOPGMQ) VALUE('*SYSOPR ') 0029.00 ENDDO /* バッチ */ 0030.00 ELSE CMD(DO) /* 対話式 */ 0031.00 CHGVAR VAR(&TOPGMQ) VALUE('*TOPGMQ ') 0032.00 ENDDO /* 対話式 */ 0033.00 0034.00 /*( パラメータの取得 )*/ 0035.00 CHGVAR VAR(&DTAQ) VALUE(%SST(&DTAQLIB 01 10)) 0036.00 CHGVAR VAR(&DTALIB) VALUE(%SST(&DTAQLIB 11 10)) 0037.00 0038.00 /*( DTAQ のクリヤー )*/ 0039.00 CALL PGM(QCLRDTAQ) PARM(&DTAQ &DTALIB) 0040.00 0041.00 /*( 完了メッセージ )*/ 0042.00 CHGVAR VAR(&MSG) VALUE(' データ待ち行列 ' *CAT + 0043.00 &DTALIB *TCAT '/' *CAT &DTAQ *TCAT + 0044.00 ' をクリヤーしました。 ') 0045.00 CHGVAR VAR(&MSGTYPE) VALUE('*DIAG ') 0046.00 GOTO SNDMSG 0047.00 RETURN 0048.00 0049.00 APIERR: 0050.00 CHGVAR VAR(&MSGID) VALUE(%SST(&APIERR 9 7)) 0051.00 CHGVAR VAR(&MSGDTA) VALUE(%SST(&APIERR 17 100)) 0052.00 CHGVAR VAR(&MSGF) VALUE('QCPFMSG ') 0053.00 CHGVAR VAR(&MSGFLIB) VALUE('QSYS ') 0054.00 GOTO SNDMSG 0055.00 0056.00 ERROR: RCVMSG MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) + 0057.00 MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) + 0058.00 MSGFLIB(&MSGFLIB) 0059.00 SNDMSG: IF COND(&MSGID *EQ ' ') THEN(DO) 0060.00 SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) + 0061.00 TOMSGQ(&TOPGMQ) MSGTYPE(&MSGTYPE) 0062.00 ENDDO 0063.00 ELSE CMD(DO) 0064.00 SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) + 0065.00 MSGDTA(&MSGDTA) TOMSGQ(&TOPGMQ) + 0066.00 MSGTYPE(&MSGTYPE) 0067.00 ENDDO 0068.00 ENDPGM
CRTCLPGM PGM(MYLIB/CLROUTQCL) SRCFILE(MYSRCLIB/QCLSRC) AUT(*ALL)
データ待ち行列をクリヤーする API : QCLRDTAQ が i5/OS によって用意されているので、
これを呼び出して実行するだけの簡単なものである。