AS/400 には、変更オブジェクト保管 : SAVCHGOBJ は用意されているが SAVCHGSRC はない。
株式会社オフィスクアトロ作成の SAVCHGSRC コマンドを紹介しよう。
SAVCHGSRC は例えば次のような使用法が可能だ。
このように正確で時間の節約になる原始の保守が容易になる。
【コマンド原始】 0001.00 CMD PROMPT(' 変更原始 MBR の保管 ') 0002.00 PARM KWD(SRCLIB) TYPE(*NAME) LEN(10) MIN(1) + 0003.00 PROMPT(' 原始 LIBRARY 名 ') 【CLP原始】 0001.00 PGM PARM(&SRCFILE &SRCLIB &CHGDTE &CHGTIM &DEV + 0002.00 &PRINT &TYPEADD) 0003.00 /*---------------------------------------------------------*/ 0004.00 /* SAVCHGSRC : 変更原始 MBR の保管 */ 0005.00 /*---------------------------------------------------------*/ 0006.00 DCL &SRCFILE TYPE(*CHAR) LEN(10) 0007.00 DCL &SRCF TYPE(*CHAR) LEN(10) 0008.00 DCL &SRCLIB TYPE(*CHAR) LEN(10) 0009.00 DCL &CHGDTE TYPE(*CHAR) LEN(6) 0010.00 DCL &CHGTIM TYPE(*CHAR) LEN(6) 0011.00 DCL &DEV TYPE(*CHAR) LEN(6) 0012.00 DCL &PRINT TYPE(*CHAR) LEN(4) 0013.00 DCL &MSG TYPE(*CHAR) LEN(80) 0014.00 DCL &TYPEADD TYPE(*CHAR) LEN(4) 0015.00 DCL &TOLABEL TYPE(*CHAR) LEN(10) 0016.00 DCL VAR(&MBRSU) TYPE(*DEC) LEN(4 0) 0017.00 DCL VAR(&MBRSUR) TYPE(*CHAR) LEN(4) 0018.00 DCL &MS1 TYPE(*CHAR) LEN(20) 0019.00 DCL &ANS TYPE(*CHAR) LEN(4) 0020.00 DCL VAR(&NBR) TYPE(*DEC) LEN(4 0) 0021.00 DCLF FILE(QTEMP/DSPFD) 0022.00 /*----( SAVE であれば LIBR.QTEMP を作成 )-------------------*/ 0023.00 CRTSRCPF FILE(QTEMP/SAVSRCF) IGCDTA(*YES) + 0024.00 TEXT('SAVE 用一時 SRC FILE') AUT(*ALL) 0025.00 MONMSG MSGID(CPF7302) EXEC(DO) 0026.00 RMVM FILE(QTEMP/SAVSRCF) MBR(*ALL) 0027.00 MONMSG CPF7301 0028.00 ENDDO 0029.00 IF COND(&DEV *EQ 'SNDSRC') THEN(DO) 0030.00 RMVM FILE(SNDSRC/QRPGSRC) MBR(*ALL) 0031.00 MONMSG CPF7301 0032.00 RMVM FILE(SNDSRC/QDDSSRC) MBR(*ALL) 0033.00 MONMSG CPF7301 0034.00 RMVM FILE(SNDSRC/QCMDSRC) MBR(*ALL) 0035.00 MONMSG CPF7301 0036.00 RMVM FILE(SNDSRC/QDSPSRC) MBR(*ALL) 0037.00 MONMSG CPF7301 0038.00 RMVM FILE(SNDSRC/QCLSRC) MBR(*ALL) 0039.00 MONMSG CPF7301 0040.00 RMVM FILE(SNDSRC/QPRTSRC) MBR(*ALL) 0041.00 MONMSG CPF7301 0042.00 RMVM FILE(SNDSRC/QFMTSRC) MBR(*ALL) 0043.00 MONMSG CPF7301 0044.00 RMVM FILE(SNDSRC/QTXTSRC) MBR(*ALL) 0045.00 MONMSG CPF7301 0046.00 RMVM FILE(SNDSRC/QRDASRC) MBR(*ALL) 0047.00 MONMSG CPF7301 0048.00 ENDDO 0049.00 /*----( *ALL の SAVE ? )------------------------------------*/ 0050.00 IF COND(&SRCFILE *EQ '*ALL ') THEN(DO) 0051.00 CHGVAR VAR(&SRCF) VALUE('QDDSSRC ') 0052.00 ENDDO 0053.00 IF COND(&SRCFILE *NE '*ALL ') THEN(DO) 0054.00 CHGVAR VAR(&SRCF) VALUE(&SRCFILE) 0055.00 ENDDO 0056.00 /*----( DSPFD : 原始 FILE の MBR LIST )------------------*/ 0057.00 CHGVAR VAR(&MS1) VALUE(&SRCLIB *CAT &SRCF) 0058.00 SNDPGMMSG MSGID(USR1019) MSGF(QSROAD/SRMSG) + 0059.00 MSGDTA(&MS1) TOPGMQ(*EXT) MSGTYPE(*STATUS) 0060.00 DSPFD FILE(&SRCLIB/&SRCF) TYPE(*MBRLIST) + 0061.00 OUTPUT(*OUTFILE) OUTFILE(QTEMP/DSPFD) 0062.00 MONMSG MSGID(CPF3012 CPF3061) 0063.00 ALL: 0064.00 IF COND(&SRCFILE *EQ '*ALL ') THEN(DO) 0065.00 QPRTSRC: CHGVAR VAR(&SRCF) VALUE('QPRTSRC ') 0066.00 CHGVAR VAR(&MS1) VALUE(&SRCLIB *CAT &SRCF) 0067.00 SNDPGMMSG MSGID(USR1019) MSGF(QSROAD/SRMSG) + 0068.00 MSGDTA(&MS1) TOPGMQ(*EXT) MSGTYPE(*STATUS) 0069.00 DSPFD FILE(&SRCLIB/&SRCF) TYPE(*MBRLIST) + 0070.00 OUTPUT(*OUTFILE) OUTFILE(QTEMP/DSPFD) + 0071.00 OUTMBR(*FIRST *ADD) 0072.00 MONMSG MSGID(CPF3012 CPF3061) 0073.00 QFMTSRC: CHGVAR VAR(&SRCF) VALUE('QFMTSRC ') 0074.00 CHGVAR VAR(&MS1) VALUE(&SRCLIB *CAT &SRCF) 0075.00 SNDPGMMSG MSGID(USR1019) MSGF(QSROAD/SRMSG) + 0076.00 MSGDTA(&MS1) TOPGMQ(*EXT) MSGTYPE(*STATUS) 0077.00 DSPFD FILE(&SRCLIB/&SRCF) TYPE(*MBRLIST) + 0078.00 OUTPUT(*OUTFILE) OUTFILE(QTEMP/DSPFD) + 0079.00 OUTMBR(*FIRST *ADD) 0080.00 MONMSG MSGID(CPF3012 CPF3061) 0081.00 QDSPSRC: CHGVAR VAR(&SRCF) VALUE('QDSPSRC ') 0082.00 CHGVAR VAR(&MS1) VALUE(&SRCLIB *CAT &SRCF) 0083.00 SNDPGMMSG MSGID(USR1019) MSGF(QSROAD/SRMSG) + 0084.00 MSGDTA(&MS1) TOPGMQ(*EXT) MSGTYPE(*STATUS) 0085.00 DSPFD FILE(&SRCLIB/&SRCF) TYPE(*MBRLIST) + 0086.00 OUTPUT(*OUTFILE) OUTFILE(QTEMP/DSPFD) + 0087.00 OUTMBR(*FIRST *ADD) 0088.00 MONMSG MSGID(CPF3012 CPF3061) 0089.00 QCLSRC: CHGVAR VAR(&SRCF) VALUE('QCLSRC ') 0090.00 CHGVAR VAR(&MS1) VALUE(&SRCLIB *CAT &SRCF) 0091.00 SNDPGMMSG MSGID(USR1019) MSGF(QSROAD/SRMSG) + 0092.00 MSGDTA(&MS1) TOPGMQ(*EXT) MSGTYPE(*STATUS) 0093.00 DSPFD FILE(&SRCLIB/&SRCF) TYPE(*MBRLIST) + 0094.00 OUTPUT(*OUTFILE) OUTFILE(QTEMP/DSPFD) + 0095.00 OUTMBR(*FIRST *ADD) 0096.00 MONMSG MSGID(CPF3012 CPF3061) 0097.00 QCMDSRC: CHGVAR VAR(&SRCF) VALUE('QCMDSRC ') 0098.00 CHGVAR VAR(&MS1) VALUE(&SRCLIB *CAT &SRCF) 0099.00 SNDPGMMSG MSGID(USR1019) MSGF(QSROAD/SRMSG) + 0100.00 MSGDTA(&MS1) TOPGMQ(*EXT) MSGTYPE(*STATUS) 0101.00 DSPFD FILE(&SRCLIB/&SRCF) TYPE(*MBRLIST) + 0102.00 OUTPUT(*OUTFILE) OUTFILE(QTEMP/DSPFD) + 0103.00 OUTMBR(*FIRST *ADD) 0104.00 MONMSG MSGID(CPF3012 CPF3061) 0105.00 QRPGSRC: CHGVAR VAR(&SRCF) VALUE('QRPGSRC ') 0106.00 CHGVAR VAR(&MS1) VALUE(&SRCLIB *CAT &SRCF) 0107.00 SNDPGMMSG MSGID(USR1019) MSGF(QSROAD/SRMSG) + 0108.00 MSGDTA(&MS1) TOPGMQ(*EXT) MSGTYPE(*STATUS) 0109.00 DSPFD FILE(&SRCLIB/&SRCF) TYPE(*MBRLIST) + 0110.00 OUTPUT(*OUTFILE) OUTFILE(QTEMP/DSPFD) + 0111.00 OUTMBR(*FIRST *ADD) 0112.00 MONMSG MSGID(CPF3012 CPF3061) 0113.00 ENDDO 0114.00 RMVMSG CLEAR(*ALL) 0115.00 IF COND((&DEV *NE '*NONE ') & (&DEV *NE + 0116.00 'SNDSRC')) THEN(DO) 0117.00 CHECK: SNDUSRMSG MSG('TAPE または DISKET は正く装填されていま + 0118.00 すか ? ( Y/N )') VALUES('Y ' 'N ') + 0119.00 MSGTYPE(*INQ) TOMSGQ(*EXT) MSGRPY(&ANS) 0120.00 IF COND(&ANS *EQ 'N ') THEN(DO) 0121.00 SNDUSRMSG MSG('TAPE または DISKET を正しく装填して下さ + 0122.00 い ') MSGTYPE(*INFO) TOMSGQ(*EXT) 0123.00 GOTO CHECK 0124.00 ENDDO 0125.00 IF COND(&ANS *NE 'Y ') THEN(DO) 0126.00 SNDUSRMSG MSG(' 応答が正しくない。 YES のときは Y で NO+ 0127.00 のときは N で応えなさい ') MSGTYPE(*INFO) + 0128.00 TOMSGQ(*EXT) 0129.00 GOTO CHECK 0130.00 ENDDO 0131.00 ENDDO 0132.00 /*----( DSPFD.QTEMP を READ して変更日付を検索する )--------*/ 0133.00 READ: RCVF RCDFMT(QWHFDML) 0134.00 MONMSG MSGID(CPF0886) 0135.00 MONMSG MSGID(CPF0864) EXEC(GOTO CMDLBL(PRINT)) 0136.00 IF COND(&MLCHGD *LT &CHGDTE) THEN(GOTO + 0137.00 CMDLBL(READ)) 0138.00 IF COND(&MLCHGD *EQ &CHGDTE) THEN(DO) 0139.00 IF COND(&MLCHGT *LT &CHGTIM) THEN(GOTO + 0140.00 CMDLBL(READ)) 0141.00 ENDDO 0142.00 CHGVAR VAR(&MBRSU) VALUE(&MBRSU + 1) 0143.00 /*---( COPY QRPGSRC ---> SAVSRCF.QTEMP )-------*/ 0144.00 IF COND(&DEV *EQ 'SNDSRC') THEN(DO) 0145.00 CPYSRCF FROMFILE(&SRCLIB/&MLFILE) + 0146.00 TOFILE(SNDSRC/&MLFILE) FROMMBR(&MLNAME) + 0147.00 MBROPT(*REPLACE) 0148.00 GOTO READ 0149.00 SNDEND: ENDDO 0150.00 IF COND(&TYPEADD *EQ '*NO ') THEN(DO) 0151.00 CPYSRCF FROMFILE(&SRCLIB/&MLFILE) + 0152.00 TOFILE(QTEMP/SAVSRCF) FROMMBR(&MLNAME) 0153.00 ENDDO 0154.00 IF COND(&TYPEADD *EQ '*YES') THEN(DO) 0155.00 IF COND(&MLSEU *EQ ' ') THEN(DO) 0156.00 IF COND(&MLFILE *EQ 'QRPGSRC ') THEN(DO) 0157.00 CHGVAR VAR(&MLSEU) VALUE('RPG ') 0158.00 ENDDO 0159.00 IF COND(&MLFILE *EQ 'QDSPSRC ') THEN(DO) 0160.00 CHGVAR VAR(&MLSEU) VALUE('DSP ') 0161.00 ENDDO 0162.00 IF COND(&MLFILE *EQ 'QCLSRC ') THEN(DO) 0163.00 CHGVAR VAR(&MLSEU) VALUE('CLP ') 0164.00 ENDDO 0165.00 IF COND(&MLFILE *EQ 'QCMDSRC ') THEN(DO) 0166.00 CHGVAR VAR(&MLSEU) VALUE('CMD ') 0167.00 ENDDO 0168.00 IF COND(&MLFILE *EQ 'QDDSSRC ') THEN(DO) 0169.00 CHGVAR VAR(&MLSEU) VALUE('LF ') 0170.00 ENDDO 0171.00 ENDDO 0172.00 IF COND(&MLSEU *EQ 'DSPF') THEN(DO) 0173.00 CHGVAR VAR(&MLSEU) VALUE('DSP ') 0174.00 ENDDO 0175.00 CHGVAR VAR(&TOLABEL) VALUE(&MLSEU *TCAT &MLNAME) 0176.00 CPYSRCF FROMFILE(&SRCLIB/&MLFILE) TOFILE(QTEMP/SAVSRCF) + 0177.00 FROMMBR(&MLNAME) TOMBR(&TOLABEL) 0178.00 ENDDO 0179.00 SAVE: IF COND(&DEV *EQ 'TAP01 ') THEN(DO) 0180.00 CHGVAR VAR(&NBR) VALUE(&NBR + 1) 0181.00 CPYTOTAP FROMFILE(QTEMP/SAVSRCF) TOFILE(QTAPE) + 0182.00 FROMMBR(&TOLABEL) TOSEQNBR(&NBR) + 0183.00 TODEV(TAP01) TOENDOPT(*LEAVE) 0184.00 MONMSG MSGID(CPF6801) 0185.00 ENDDO 0186.00 IF COND(&DEV *EQ 'DKT01 ') THEN(DO) 0187.00 CPYTODKT FROMFILE(QTEMP/SAVSRCF) TOFILE(QDKT) + 0188.00 FROMMBR(&TOLABEL) TODEV(DKT01) 0189.00 MONMSG MSGID(CPF6801) 0190.00 ENDDO 0191.00 GOTO READ 0192.00 PRINT: 0193.00 IF COND(&PRINT *EQ '*YES') THEN(DO) 0194.00 OVRDBF FILE(DSPFD) TOFILE(QTEMP/DSPFD) 0195.00 CALL PGM(QSROAD/PRTMBR) PARM(&CHGDTE &CHGTIM) 0196.00 DLTOVR *ALL 0197.00 ENDDO 0198.00 CHGVAR VAR(&MBRSUR) VALUE(&MBRSU) 0199.00 SNDPGMMSG MSG(&MBRSUR *TCAT ' 個の MBR が LIBRARY:' *TCAT + 0200.00 &SRCLIB *TCAT ' より抜粋された ') MSGTYPE(*DIAG) 0201.00 ENDSEU: RETURN 0202.00 RCVMSG: RCVMSG RMV(*NO) MSG(&MSG) 0203.00 SNDPGMMSG MSG(&MSG) 0204.00 RETURN 0205.00 ENDPGM