SETASPGRP コマンドをちょっと変えて作ってみました

IASP を使用している場合、SETASPGRP というコマンドでジョブに IASP を認識させるようにするのですが、二回実行すると現行のジョブのライブラリーリストから IASP 上のライブラリーがなくなってしまいます。

別の IASP に変更するかもしれないことを考慮に入れると、これはこれで正しい動きのような気もしますが、現在のジョブで今 SETASPGRP が実行されているかどうかはあまりわかりやすくないこともあって、二回三回と実行してしまうことは正直言ってよくあります。

システム提供の SETASPGRP コマンドの動き

実際にどういう動きになるかを見てみましょう。

SETASPGRP コマンドで IASP を認識させ、ADDLIBLE コマンドで IASPLIB というライブラリーをライブラリーリストにセットします。

この状態で再度 SETASPGRP コマンドを実行すると、以下のように IASP 上のライブラリーがライブラリーリストから消えてしまいます。

修正版 SETASPGRP コマンド

今回をこれを改善するために、ユーザーのライブラリーリストをそのまま維持する、というオプションを追加した SETASPGRP コマンドを作成してみました。

上記コマンドをそのままユーザーコマンドとして作成すると以下のようなソースになります。
この修正版のソースでは SPCVAL パラメータに *CURLIBL という特殊値を追加しているのが違いになっています。

  桁 . . . . . :    1  71            編集                          TOOL/QCMDSRC 
 SEU==>                                                               SETASPGRP 
 FMT **  ...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7   
        *************** データの始め ****************                           
0001.00              CMD        PROMPT('ASP グループの設定 ')                   
0002.00              PARM       KWD(ASPGRP) TYPE(*CHAR) LEN(10) MIN(1) +         
0003.00                           PROMPT('ASP グループ ')                       
0004.00              PARM       KWD(SYSLIBL) TYPE(*CHAR) LEN(10) RSTD(*YES) +   
0005.00                           DFT(*CURSYSBAS) VALUES(*CURSYSBAS +           
0006.00                           *SYSVAL) +                                     
0007.00                           PROMPT(' システムライブラリーリスト ')         
0008.00              PARM       KWD(CURLIB) TYPE(*NAME) LEN(10) RSTD(*NO) +     
0009.00                           DFT(*CURSYSBAS) SPCVAL((*CURSYSBAS) +         
0010.00                           (*CURUSR) (*CRTDFT)) +                         
0011.00                           PROMPT(' 現行ライブラリー ')                   
0012.00              PARM       KWD(USRLIBL) TYPE(*NAME) LEN(10) RSTD(*NO) +     
0013.00                           DFT(*CURSYSBAS) SPCVAL((*CURSYSBAS) +         
0014.00                           (*CURUSR) (*SYSVAL) (*CURLIBL) (*NONE)) +     
0015.00                           MAX(250) +                                     
0016.00                           PROMPT(' 現行スレッドのライブラリー ')         
        ***************** データの終わり ************************************** 

上記コマンドソースでコマンドを作成すると、プロンプトを出すと上の画面と同じ画面になりますが、さらに F4 キーを USRLIBL パラメータにカーソルをおいて押すと違いがわかります。*CURLIBL というオプションが追加されているのが確認できますね。

*CURLIBL オプションを指定すると、実行後もライブラリーリストはそのまま保持されます。

上記のコマンドのコマンド処理プログラムです。

*USRLIBL というオプションの時のみ、予め取得しておいたジョブのライブラリーリストと置き換える、という処理を追加しています。
コマンドの見た目を同じにしておいたので、ライブラリーリストを直接指定されていた場合の処理も追加せざるを得ませんでした。それでちょっと処理が複雑になってしまっています。

  桁 . . . . . :    1  71          走査検索                         TOOL/QCLSRC 
 SEU==>                                                              PSETASPGRP 
 FMT **  ...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7   
        *************** データの始め ****************                           
0001.00              PGM        PARM(&ASPGRP &SYSLIBL &CURLIB &USRLIBL)         
0002.00              DCL        VAR(&ASPGRP) TYPE(*CHAR) LEN(10)                 
0003.00              DCL        VAR(&SYSLIBL) TYPE(*CHAR) LEN(10)               
0004.00              DCL        VAR(&CURLIB) TYPE(*CHAR) LEN(10)                 
0005.00              DCL        VAR(&USRLIBL) TYPE(*CHAR) LEN(252)               
0006.00              DCL        VAR(&USRLIBL2) TYPE(*CHAR) LEN(2750)             
0007.00              DCL        VAR(&USRLIBL3) TYPE(*CHAR) LEN(2749)             
0007.01              DCL        VAR(&USRLIBL4) TYPE(*CHAR) LEN(2750)             
0008.00              DCL        VAR(&CMD) TYPE(*CHAR) LEN(2850)                 
0009.00              DCL        VAR(&COUNTC) TYPE(*CHAR) LEN(2)                 
0010.00              DCL        VAR(&COUNT) TYPE(*DEC) LEN(3 0)                 
0011.00              DCL        VAR(&ORDER) TYPE(*DEC) LEN(2 0) VALUE(3)         
0012.00              DCL        VAR(&ELEMENT) TYPE(*CHAR) LEN(10)               
0012.01              DCL        VAR(&OPTION) TYPE(*CHAR) LEN(8)                 
0013.00              CHGVAR     VAR(&COUNTC) VALUE(%SST(&USRLIBL 1 2))           
0014.00              CHGVAR     VAR(&COUNT) VALUE(%BIN(&COUNTC))                 
0015.00  LOOP:       CHGVAR     VAR(&ELEMENT) VALUE(%SST(&USRLIBL &ORDER 10))
0015.01              IF         COND(&ELEMENT = '*CURLIBL') THEN(DO)             
0015.02              RTVJOBA    USRLIBL(&USRLIBL4)                               
0015.03              CHGVAR     VAR(&OPTION) VALUE('*CURLIBL')                   
0015.04              ENDDO                                                       
0016.00              CHGVAR     VAR(&USRLIBL2) VALUE(&USRLIBL2 |> &ELEMENT)     
0017.00              CHGVAR     VAR(&ORDER) VALUE(&ORDER + 10)                   
0018.00              CHGVAR     VAR(&COUNT) VALUE(&COUNT - 1)                   
0019.00              IF         COND(&COUNT = 0) THEN(DO)                       
0020.00              CHGVAR     VAR(&USRLIBL3) VALUE(%SST(&USRLIBL2 2 2749)) 
0020.01              IF         COND(&OPTION = '*CURLIBL') THEN(CHGVAR +         
0020.02                           VAR(&USRLIBL3) VALUE(&USRLIBL4))               
0023.00              CHGVAR     VAR(&CMD) VALUE('SETASPGRP  ASPGRP(' |< +       
0024.00                           &ASPGRP |< ') SYSLIBL(' |< &SYSLIBL |< ') +   
0025.00                           CURLIB(' |< &CURLIB |< ') USRLIBL(' |< +       
0026.00                           &USRLIBL3 |< ')')                             
0027.00              CALL       PGM(QCMDEXC) PARM(&CMD 2850)                     
0027.01              MONMSG     MSGID(CPFB8E9)                                   
0028.00              GOTO       CMDLBL(END)                                     
0029.00              ENDDO                                                       
0030.00              ELSE       CMD(GOTO CMDLBL(LOOP))                           
0031.00  END:        ENDPGM                                                     
        ***************** データの終わり ************************************** 

IASP の状態がどうなっているか (IASP がオフになっていた場合を考えるともともとの動きの方が正しいわけですもんね) をチェックするようにした方がいいんでしょうが、まぁそれは後日ということで。

[Top Pageに戻る]

Ads by TOK2