ここに紹介する CHGOBJSRC コマンドは直接、オブジェクトにソース情報を変更・登録を
行うコマンドである。
オブジェクトは一般に、どのソースから生成されたかの情報を持っている。
DSPOBJDの「8=保守属性の表示」を参照すると原始ファイル情報が表示される。
文書化やオブジェクトのソースを探すときには、この情報が役に立つ。
しかし CRTDUPOBJ コマンドなどによってオブジェクトを複製した場合はこのソース情報は
失われてしまうので保守や文書化ではネックとなってしまう。
そこでソース情報の無いオブジェクトに対して人的にオブジェクトに対してソース情報を
強制的に登録してくれるのが、ここに紹介する CHGOBJSRC コマンドである。
一見、地味な(?)コマンドであるので何の役に立つのだろうかと思われるかも知れないが
正しいソース情報をきちんとしておくことで正確なソースを探す手間を省いてくれるのである。
CHGOBJSRC コマンドは直接、オブジェクトに対して働くがオブジェクトの動作に影響を
与えることはないので再コンパイルなどは不要である。
CHGOBJSRC の実行の様子
0001.00 CMD PROMPT(' オブジェクト原始の変更 ')
0002.00 PARM KWD(OBJ) TYPE(OBJ) +
0003.00 PROMPT(' オブジェクト ')
0004.00 OBJ: QUAL TYPE(*NAME) LEN(10) MIN(1)
0005.00 QUAL TYPE(*NAME) LEN(10) DFT(*LIBL) +
0006.00 SPCVAL((*LIBL) (*CURLIB)) +
0007.00 PROMPT(' ライブラリー ')
0008.00 PARM KWD(OBJTYPE) TYPE(*CHAR) LEN(10) RSTD(*YES) +
0009.00 VALUES(*FILE *PGM *CMD *ALL *MENU *PNLGRP +
0010.00 *QMQRY *QRYDFN) +
0011.00 PROMPT(' オブジェクト・タイプ ')
0012.00 PARM KWD(SRCFILE) TYPE(SRCFILE) +
0013.00 PROMPT(' 原始ファイル ')
0014.00 SRCFILE: QUAL TYPE(*NAME) LEN(10) MIN(1)
0015.00 QUAL TYPE(*NAME) LEN(10) SPCVAL((*LIBL) +
0016.00 (*CURLIB)) PROMPT(' ライブラリー ')
0017.00 PARM KWD(SRCMBR) TYPE(*NAME) LEN(10) DFT(*OBJ) +
0018.00 SPCVAL((*OBJ)) PROMPT(' 原始メンバー ')
0019.00 PARM KWD(TEXT) TYPE(*CHAR) LEN(50) +
0020.00 DFT(*SRCMBRTXT) +
0021.00 PROMPT(' テキスト '' 記述 ''')
コンパイルは
CRTCMD CMD(MYLIB/CHGOBJSRC) PGM(MYLIB/CHGOBJSRCC) SRCFILE(MYSRCLIB/QCMDSRC) AUT(*ALL)
0001.00 PGM PARM(&OBJOBJLIB &OBJTYPE &SRCFILLIB &SRCMBR +
0002.00 &TEXT)
0003.00 /*---------------------------------------------------------*/
0004.00 /* CHGOBJSRC : オブジェクト原始の変更 */
0005.00 /*---------------------------------------------------------*/
0006.00 DCL VAR(&MSG) TYPE(*CHAR) LEN(80)
0007.00 DCL VAR(&OBJOBJLIB) TYPE(*CHAR) LEN(20)
0008.00 DCL VAR(&OBJ) TYPE(*CHAR) LEN(10)
0009.00 DCL VAR(&OBJLIB) TYPE(*CHAR) LEN(10)
0010.00 DCL VAR(&OBJTYPE) TYPE(*CHAR) LEN(10)
0011.00 DCL VAR(&SRCFILLIB) TYPE(*CHAR) LEN(20)
0012.00 DCL VAR(&SRCF) TYPE(*CHAR) LEN(10)
0013.00 DCL VAR(&SRCLIB) TYPE(*CHAR) LEN(10)
0014.00 DCL VAR(&SRCMBR) TYPE(*CHAR) LEN(10)
0015.00 DCL VAR(&SRCDSC) TYPE(*CHAR) LEN(30)
0016.00 DCL VAR(&TEXT) TYPE(*CHAR) LEN(50)
0017.00 DCL VAR(&SRCMBRTXT) TYPE(*CHAR) LEN(50) +
0018.00 VALUE('*SRCMBRTXT -
0019.00 ')
0020.00 DCL VAR(&BINKEY) TYPE(*CHAR) LEN(4)
0021.00 DCL VAR(&BINLEN) TYPE(*CHAR) LEN(4)
0022.00 DCL VAR(&DEC08) TYPE(*DEC) LEN(8 0)
0023.00 DCL VAR(&APIERR) TYPE(*CHAR) LEN(4)
0024.00 DCL VAR(&RECSUR) TYPE(*CHAR) LEN(4)
0025.00 DCL VAR(&VALRCD1) TYPE(*CHAR) LEN(38)
0026.00 DCL VAR(&VALPRM1) TYPE(*CHAR) LEN(42)
0027.00 DCL VAR(&VALRCD2) TYPE(*CHAR) LEN(58)
0028.00 DCL VAR(&VALPRM2) TYPE(*CHAR) LEN(62)
0029.00
0030.00 CHGVAR VAR(&OBJ) VALUE(%SST(&OBJOBJLIB 01 10))
0031.00 CHGVAR VAR(&OBJLIB) VALUE(%SST(&OBJOBJLIB 11 10))
0032.00 CHGVAR VAR(&SRCF) VALUE(%SST(&SRCFILLIB 01 10))
0033.00 CHGVAR VAR(&SRCLIB) VALUE(%SST(&SRCFILLIB 11 10))
0034.00 RTVOBJD OBJ(&OBJLIB/&OBJ) OBJTYPE(&OBJTYPE) +
0035.00 RTNLIB(&OBJLIB)
0036.00 MONMSG MSGID(CPF9800) EXEC(GOTO CMDLBL(ERROR))
0037.00 IF COND(&SRCMBR *EQ '*OBJ ') THEN(DO)
0038.00 CHGVAR VAR(&SRCMBR) VALUE(&OBJ)
0039.00 ENDDO
0040.00 CHKOBJ OBJ(&SRCLIB/&SRCF) OBJTYPE(*FILE) MBR(&SRCMBR)
0041.00 MONMSG MSGID(CPF9800) EXEC(GOTO CMDLBL(ERROR))
0042.00 IF COND(&TEXT *EQ &SRCMBRTXT) THEN(DO)
0043.00 RTVMBRD FILE(&SRCLIB/&SRCF) MBR(&SRCMBR) TEXT(&TEXT)
0044.00 ENDDO
0045.00 /*( 原始ファイルの更新 )*/
0046.00 CHGVAR VAR(&SRCDSC) VALUE(&SRCF *CAT &SRCLIB *CAT +
0047.00 &SRCMBR)
0048.00 CHGVAR VAR(%BIN(&BINKEY)) VALUE(1)
0049.00 CHGVAR VAR(%BIN(&BINLEN)) VALUE(30)
0050.00 CHGVAR VAR(%BIN(&APIERR)) VALUE(0)
0051.00 CHGVAR VAR(%BIN(&RECSUR)) VALUE(1)
0052.00 CHGVAR VAR(&VALRCD1) VALUE(&BINKEY *CAT &BINLEN +
0053.00 *CAT &SRCDSC)
0054.00 CHGVAR VAR(&OBJOBJLIB) VALUE(&OBJ *CAT &OBJLIB)
0055.00 CHGVAR VAR(&VALPRM1) VALUE(&RECSUR *CAT &VALRCD1)
0056.00 CALL PGM(QLICOBJD) PARM(&OBJLIB &OBJOBJLIB +
0057.00 &OBJTYPE &VALPRM1 &APIERR)
0058.00 /*( テキストの更新 )*/
0059.00 CHGVAR VAR(%BIN(&BINKEY)) VALUE(10)
0060.00 CHGVAR VAR(%BIN(&BINLEN)) VALUE(50)
0061.00 CHGVAR VAR(%BIN(&APIERR)) VALUE(0)
0062.00 CHGVAR VAR(%BIN(&RECSUR)) VALUE(1)
0063.00 CHGVAR VAR(&VALRCD2) VALUE(&BINKEY *CAT &BINLEN +
0064.00 *CAT &TEXT)
0065.00 CHGVAR VAR(&OBJOBJLIB) VALUE(&OBJ *CAT &OBJLIB)
0066.00 CHGVAR VAR(&VALPRM2) VALUE(&RECSUR *CAT &VALRCD2)
0067.00 CALL PGM(QLICOBJD) PARM(&OBJLIB &OBJOBJLIB +
0068.00 &OBJTYPE &VALPRM2 &APIERR)
0069.00 SNDPGMMSG MSG(' オブジェクト ' *TCAT &OBJLIB *TCAT +
0070.00 '/' *TCAT &OBJ *TCAT +
0071.00 ' が変更された。 ') MSGTYPE(*COMP)
0072.00 RETURN
0073.00 ERROR: RCVMSG RMV(*NO) MSG(&MSG)
0074.00 SNDPGMMSG MSG(&MSG) MSGTYPE(*DIAG)
0075.00 ENDPGM
コンパイルは
CRTCLPGM PGM(MYLIB/CHGOBJSRCC) SRCFILE(MYSRCLIB/QCLSRC) AUT(*ALL)
オブジェクトの原始登録の変更のために API : QLICOBJD を使用している。