今では S/36 の使用経験のある人も少なくなっていると思うがS/36 では、Systemi5 の WRKACTJOB
や WRKOUTQ
など、日常で頻繁に使用するコマンドで非常に便利なコマンドが用意されていた。
S/36 から S/38, AS400, iSeries そして Systemi5 に変わった現在でも筆者は S/36 コマンドを作成して、毎日、使用している。
これはコマンド名が一文字だけの「D」というコマンドであって、パラメータによって動作が変わる。
D U + [実行] | WRKACTJOB を実行 | ||
D P + [実行] | WRKOUTQ QPRINT を実行 | ||
D xxxxx + [実行] | WRKOUTQ xxxxxx を実行 | ||
D S + [実行] | WRKSYSSTS を実行 | ||
D J + [実行] | WRKJOBQ QBATCH を実行 | ||
D L + [実行] | WRKCFGSTS *LIN を実行 | ||
D C + [実行] | WRKCFGSTS *CTL を実行 |
という具合である。恐らくこのような簡略化するためのコマンドを各々の会社で独自に開発して
用意しているところもあると思うが、打鍵の少なさではD コマンド
は、至極便利な部類に入る
のではないだろうか ?
このようなユーティリティー・コマンドはライブラリー QGPL
に入れておけばどのような環境からも
利用することができる。
CMD PROMPT('S/36 表示コマンド ') PARM KWD(CMD) TYPE(*CHAR) LEN(20) SPCVAL((P + 'WRKOUTQ QPRINT') (U WRKACTJOB) (S + WRKSYSSTS) (J 'WRKOUTQ QBATCH') (Q + 'DSPMSG QSYSOPR') (D 'WRKOUTQ QEZDEBUG') + (L 'WRKCFGSTS *LIN') (C 'WRKCFGSTS + *CTL')) PROMPT(' 操作 ')
CRTCMD QGPL/D PGM(MYLIB.DCL) SRCFILE(MYSRCLIB/QCMDSRC) AUT(*ALL)
PGM PARM(&CMD) /*---------------------------------------------------------*/ /* D : S/36 表示コマンド */ /*---------------------------------------------------------*/ DCL VAR(&MSG) TYPE(*CHAR) LEN(80) DCL VAR(&CMD) TYPE(*CHAR) LEN(20) DCL VAR(&CMDLEN) TYPE(*DEC) LEN(15 5) VALUE(20) MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR)) IF COND(&CMD *EQ ' ') THEN(CHGVAR VAR(&CMD) + VALUE('WRKOUTQ')) CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN) ERROR: RCVMSG RMV(*NO) MSG(&MSG) SNDMSG: SNDPGMMSG MSG(&MSG) MSGTYPE(*DIAG) ENDPGM
CRTCLPGM MYLIB/DCL SRCFILE(MYSRCILB/QCLSRC) AUT(*ALL)
実行CLP が、非常に簡単なものであることに気づかれたことと思う。
この例はコマンドの使い方として、興味深いテクニックを用いている。
文字 D に続くパラメータの P, U, ... を CLP で処理するのではなく、コマンド側で CLP に渡す
前に変型しているのである。
コマンドの SPCVAL パラーメータにおいて
P | WRKOUTQ PRINT | ||
U | WRKACTJOB | ||
S | WRKSYSSTS | ||
J | WRKOUTQ QBATCH | ||
Q | DSPMSG QSYSOPR | ||
D | WRKOUTQ QEZDEBUG | ||
L | WRKCFGSTS *LIN | ||
C | WRKCFGSTS *CTL |
のように変型してから CLP に渡しているので、CLP ではパラメータをQCMDEXC
によって
実行しているだけのシンブルなものとなる。
さて、ここで読者に宿題であるが、この D コマンド
に
D M + [実行]
とすれば DSPMSG
を実行するように、このコマンドを改良して頂きたい。
実に簡単に機能を追加することができることが、おわかりであると思う。
このように拡張性に富んだ作成がどのような場合でも大切である。