//BCHJOB JOB(JCMPLIB) JOBD(NERONI2/NERONI2) OUTQ(QPRINT) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) CCSID(280) /* Open source from www.neroni.it */ /* LA JOB DESCRIPTION "NERONI2/NERONI2" DEVE PREESISTERE. PUO' ESSERE */ /* IDENTICA A QBATCH E PUO' ESSERE SOSTITUITA DA QBATCH O SIMILE. */ /* From System: "DEV720" */ /* From Library: "NERONI2" */ /* Unload Time: 2016-08-02 14:41 */ /* To File : "JCMPLIB" */ /* To Library : "NERONI2" */ /* To Text : "Compare libraries. Src" */ /********* INIZIO ISTRUZIONI **************************************************/ /* LE SUCCESSIVE ISTRUZIONI PERMETTONO DI RICARICARE I SORGENTI. */ /* 1) DA UN VIDEO COMANDI DELL'AS400 RICEVENTE */ /* CREARE UN FILE SORGENTE DI LUNGHEZZA RECORD 112: */ /* CRTSRCPF FILE(NERONI2/STRINGHE) RCDLEN(112) */ /* 2) SPOSTARE IL FILE "JCMPLIB.txt" NELL'INDIRIZZARIO */ /* DI UN PC CONNESSO IN RETE CON L'AS400 RICEVENTE */ /* (AD ES.: "c:\"). */ /* 3) DAL VIDEO COMANDI DEL PC CHIAMARE FTP: */ /* ftp nomeas400 */ /* 4) DIGITARE UTENTE E PASSWORD. */ /* 5) ESEGUIRE IL COMANDO DI COPIA DA FILE PC A MEMBRO AS400: */ /* put "c:\JCMPLIB.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JCMPLIB.mbr" */ /* 6) ABBANDONARE FTP: */ /* quit */ /* 7) DA UN VIDEO COMANDI DELL'AS400 RICEVENTE */ /* ESEGUIRE LA STRINGA COPIATA NEL MEMBRO SORGENTE: */ /* SBMDBJOB FILE(NERONI2/STRINGHE) MBR(JCMPLIB) JOBQ(QBATCH) */ /* LE SUCCESSIVE ISTRUZIONI PERMETTONO DI CREARE L'UTILITY. */ /* 8) DA UN VIDEO COMANDI DELL'AS400 RICEVENTE */ /* ESEGUIRE LA STRINGA O LE STRINGHE SORGENTE DI TIPO SEU "CL" */ /* (IL CUI NOME TERMINA SEMPRE CON ".") */ /* PRESENTI NEL FILE RICARICATO "NERONI2/JCMPLIB" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JCMPLIB) MBR(JCMPLIB.) JOBQ(QBATCH) */ /********* FINE ISTRUZIONI ****************************************************/ /* Crea la libreria. */ MKDIR DIR('/qsys.lib/NERONI2.lib') CHGLIB LIB(NERONI2) TEXT('Claudio Neroni Utility') /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP NERONI2 QGPL) /* Crea il file sorgente. */ DLTF FILE(NERONI2/JCMPLIB) CRTSRCPF FILE(NERONI2/JCMPLIB) RCDLEN(112) + TEXT('Compare libraries. Src') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(A) TOFILE(NERONI2/JCMPLIB) + TOMBR(A) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCMPLIB) MBR(A) + SRCTYPE(TXT) + TEXT('Compare libraries. Development note') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCMPLIB) TOFILE(NERONI2/JCMPLIB) + TOMBR(JCMPLIB) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCMPLIB) MBR(JCMPLIB) + SRCTYPE(CMD) + TEXT('Compare libraries. Global. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCMPLIB.) TOFILE(NERONI2/JCMPLIB) + TOMBR(JCMPLIB.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCMPLIB) MBR(JCMPLIB.) + SRCTYPE(CL) + TEXT('Compare libraries. CrtJs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCMPLIBC) TOFILE(NERONI2/JCMPLIB) + TOMBR(JCMPLIBC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCMPLIB) MBR(JCMPLIBC) + SRCTYPE(CLLE) + TEXT('Compare libraries. Global. Cpp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCMPLIBC_1) TOFILE(NERONI2/JCMPLIB) + TOMBR(JCMPLIBC_1) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCMPLIB) MBR(JCMPLIBC_1) + SRCTYPE(CLLE) + TEXT('ANTE Global=From+To+Print') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCMPLIBE) TOFILE(NERONI2/JCMPLIB) + TOMBR(JCMPLIBE) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCMPLIB) MBR(JCMPLIBE) + SRCTYPE(RPGLE) + TEXT('Compare libraries. Lib') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCMPLIBF) TOFILE(NERONI2/JCMPLIB) + TOMBR(JCMPLIBF) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCMPLIB) MBR(JCMPLIBF) + SRCTYPE(CMD) + TEXT('Compare libraries. From. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCMPLIBFC) TOFILE(NERONI2/JCMPLIB) + TOMBR(JCMPLIBFC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCMPLIB) MBR(JCMPLIBFC) + SRCTYPE(CLLE) + TEXT('Compare libraries. From/To. Cpp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCMPLIBFG) TOFILE(NERONI2/JCMPLIB) + TOMBR(JCMPLIBFG) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCMPLIB) MBR(JCMPLIBFG) + SRCTYPE(PNLGRP) + TEXT('Compare libraries. From. Help') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCMPLIBFU) TOFILE(NERONI2/JCMPLIB) + TOMBR(JCMPLIBFU) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCMPLIB) MBR(JCMPLIBFU) + SRCTYPE(RPGLE) + TEXT('Compare libraries. ChgObjDWithFileD') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCMPLIBG) TOFILE(NERONI2/JCMPLIB) + TOMBR(JCMPLIBG) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCMPLIB) MBR(JCMPLIBG) + SRCTYPE(PNLGRP) + TEXT('Compare libraries. Help DA SCRIVERE') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCMPLIBP) TOFILE(NERONI2/JCMPLIB) + TOMBR(JCMPLIBP) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCMPLIB) MBR(JCMPLIBP) + SRCTYPE(CMD) + TEXT('Compare libraries. Print. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCMPLIBPC) TOFILE(NERONI2/JCMPLIB) + TOMBR(JCMPLIBPC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCMPLIB) MBR(JCMPLIBPC) + SRCTYPE(CLLE) + TEXT('Compare libraries. Print. Cpp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCMPLIBPG) TOFILE(NERONI2/JCMPLIB) + TOMBR(JCMPLIBPG) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCMPLIB) MBR(JCMPLIBPG) + SRCTYPE(PNLGRP) + TEXT('Compare libraries. Print. Help DA SCRIVERE') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCMPLIBS) TOFILE(NERONI2/JCMPLIB) + TOMBR(JCMPLIBS) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCMPLIB) MBR(JCMPLIBS) + SRCTYPE(RPGLE) + TEXT('Compare libraries. Print') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCMPLIBT) TOFILE(NERONI2/JCMPLIB) + TOMBR(JCMPLIBT) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCMPLIB) MBR(JCMPLIBT) + SRCTYPE(CMD) + TEXT('Compare libraries. To. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCMPLIBTG) TOFILE(NERONI2/JCMPLIB) + TOMBR(JCMPLIBTG) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCMPLIB) MBR(JCMPLIBTG) + SRCTYPE(PNLGRP) + TEXT('Compare libraries. To. Help') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCMPLIBX) TOFILE(NERONI2/JCMPLIB) + TOMBR(JCMPLIBX) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCMPLIB) MBR(JCMPLIBX) + SRCTYPE(PF) + TEXT('Compare libraries. BasAtrPhy') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCMPLIB1) TOFILE(NERONI2/JCMPLIB) + TOMBR(JCMPLIB1) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCMPLIB) MBR(JCMPLIB1) + SRCTYPE(PF) + TEXT('Compare libraries. DspObjD LIB-OBJ-TYP-SRCM') /*----------------------------------------------------------------------------*/ //DATA FILE(A) FILETYPE(*SRC) ENDCHAR('//ENDSRC') Claudio Neroni 03-03-2016 Il comando JCMPLIBF su una libreria vuota sporca il contenuto con dati estranei. Verificare! //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JCMPLIB) FILETYPE(*SRC) ENDCHAR('//ENDSRC') CMD PROMPT('Compare libraries global') PARM KWD(FRMLIB) TYPE(*NAME) LEN(10) + SPCVAL((*NONE)) MIN(1) MAX(2) + PROMPT('From libraries group') PARM KWD(TOLIB) TYPE(*NAME) LEN(10) + SPCVAL((*NONE)) MIN(1) MAX(2) PROMPT('To + libraries group') PARM KWD(FRMDAT) TYPE(*CHAR) LEN(7) PROMPT('Start + date CYYMMDD') PARM KWD(FRMTIM) TYPE(*CHAR) LEN(6) PROMPT('Start + time HHMMSS') PARM KWD(CMPCRI) TYPE(*CHAR) LEN(7) RSTD(*YES) + VALUES(*CRTDAT *SRCDAT) SPCVAL((*NONE)) + MAX(2) PROMPT('Criteria for comparison') PARM KWD(REFPGM) TYPE(*NAME) LEN(10) DFT(*CPP) + SPCVAL((*CPP)) PROMPT('Reference program + for messages') //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JCMPLIB.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JCMPLIB.) JOBD(NERONI2/NERONI2) OUTQ(QPRINTS) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) CCSID(280) jmy /* Claudio Neroni 24-06-1994 Creato. */ /* JCMPLIB */ /* Compare libraries. */ /* Compara librerie. */ /* Prerequisiti: JMOD JMRG */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella il file messaggi preesistente. */ DLTMSGF MSGF(NERONI2/JCMPLIB) /* Cancella i testi d'aiuto preesistenti. */ DLTPNLGRP PNLGRP(NERONI2/JCMPLIBG) DLTPNLGRP PNLGRP(NERONI2/JCMPLIBFG) DLTPNLGRP PNLGRP(NERONI2/JCMPLIBTG) DLTPNLGRP PNLGRP(NERONI2/JCMPLIBPG) /* Cancella i logici preesistenti. */ /* Cancella i fisici preesistenti. */ DLTF FILE(NERONI2/JCMPLIB1) DLTF FILE(NERONI2/JCMPLIBX) /* Cancella i comandi preesistenti. */ DLTCMD CMD(NERONI2/JCMPLIB) DLTCMD CMD(NERONI2/JCMPLIBF) DLTCMD CMD(NERONI2/JCMPLIBT) DLTCMD CMD(NERONI2/JCMPLIBP) /* Cancella i programmi preesistenti. */ DLTPGM PGM(NERONI2/JCMPLIBC) DLTPGM PGM(NERONI2/JCMPLIBFC) DLTPGM PGM(NERONI2/JCMPLIBFU) DLTPGM PGM(NERONI2/JCMPLIBPC) DLTPGM PGM(NERONI2/JCMPLIBS) DLTPGM PGM(NERONI2/JCMPLIBE) /* Crea i file fisici. */ CRTPF FILE(NERONI2/JCMPLIB1) SRCFILE(JCMPLIB) SIZE(*NOMAX) + LVLCHK(*YES) CRTPF FILE(NERONI2/JCMPLIBX) SRCFILE(JCMPLIB) SIZE(*NOMAX) + LVLCHK(*YES) /* Crea i file logici. */ /* Crea i comandi. */ CRTCMD CMD(NERONI2/JCMPLIB) PGM(JCMPLIBC) SRCFILE(JCMPLIB) + HLPPNLGRP(JCMPLIBG) HLPID(CMD) PRDLIB(NERONI2) CRTCMD CMD(NERONI2/JCMPLIBF) PGM(JCMPLIBFC) SRCFILE(JCMPLIB) + HLPPNLGRP(JCMPLIBFG) HLPID(CMD) PRDLIB(NERONI2) CRTCMD CMD(NERONI2/JCMPLIBT) PGM(JCMPLIBFC) SRCFILE(JCMPLIB) + HLPPNLGRP(JCMPLIBTG) HLPID(CMD) PRDLIB(NERONI2) CRTCMD CMD(NERONI2/JCMPLIBP) PGM(JCMPLIBPC) SRCFILE(JCMPLIB) + HLPPNLGRP(JCMPLIBPG) HLPID(CMD) PRDLIB(NERONI2) /* Duplica i comandi in QGPL. */ CRTPRXCMD CMD(QGPL/JCMPLIB) TGTCMD(NERONI2/JCMPLIB) AUT(*USE) + REPLACE(*YES) CRTPRXCMD CMD(QGPL/JCMPLIBF) TGTCMD(NERONI2/JCMPLIBF) AUT(*USE) + REPLACE(*YES) CRTPRXCMD CMD(QGPL/JCMPLIBT) TGTCMD(NERONI2/JCMPLIBT) AUT(*USE) + REPLACE(*YES) CRTPRXCMD CMD(QGPL/JCMPLIBP) TGTCMD(NERONI2/JCMPLIBP) AUT(*USE) + REPLACE(*YES) /* Crea i programmi. */ CRTBNDCL PGM(NERONI2/JCMPLIBC) SRCFILE(JCMPLIB) TGTRLS(*CURRENT) + DBGVIEW(*ALL) CRTBNDCL PGM(NERONI2/JCMPLIBFC) SRCFILE(JCMPLIB) TGTRLS(*CURRENT) + DBGVIEW(*ALL) CRTBNDCL PGM(NERONI2/JCMPLIBPC) SRCFILE(JCMPLIB) TGTRLS(*CURRENT) + DBGVIEW(*ALL) OVRDBF FILE(JCMPLIB1) TOFILE(QADSPOBJ) OVRDBF FILE(JCMPLIB2) TOFILE(QADSPOBJ) CRTBNDRPG PGM(NERONI2/JCMPLIBS) SRCFILE(JCMPLIB) DBGVIEW(*ALL) + TGTRLS(*CURRENT) DLTOVR FILE(*ALL) OVRDBF FILE(JCMPLIB1) TOFILE(QADSPOBJ) CRTBNDRPG PGM(NERONI2/JCMPLIBE) SRCFILE(JCMPLIB) DBGVIEW(*ALL) + TGTRLS(*CURRENT) DLTOVR FILE(*ALL) OVRDBF FILE(JCMPLIB1) TOFILE(QADSPOBJ) CRTBNDRPG PGM(NERONI2/JCMPLIBFU) SRCFILE(JCMPLIB) DBGVIEW(*ALL) + TGTRLS(*CURRENT) DLTOVR FILE(*ALL) /* Crea il file messaggi. */ CRTMSGF MSGF(NERONI2/JCMPLIB) TEXT('Compare libraries. Msgf') /* Fotografia comandi (xxxA001). */ ADDMSGD MSGID(JCLA001) MSGF(NERONI2/JCMPLIB) MSG('JCMPLIB + FRMLIB(&1 &2) TOLIB(&3 &4) FRMDAT(&5) FRMTIM(&6) + CMPCRI(&7 &8)') FMT((*CHAR 10) (*CHAR 10) (*CHAR 10) + (*CHAR 10) (*CHAR 7) (*CHAR 6) (*CHAR 7) (*CHAR 7)) ADDMSGD MSGID(JCLA002) MSGF(NERONI2/JCMPLIB) MSG('JCMPLIBF + LIB(&1) OUTFILE(&2/&3) REFPGM(&4)') FMT((*CHAR 21) + (*CHAR 10) (*CHAR 10) (*CHAR 10)) ADDMSGD MSGID(JCLA003) MSGF(NERONI2/JCMPLIB) MSG('JCMPLIBT + LIB(&1) OUTFILE(&2/&3) REFPGM(&4)') FMT((*CHAR 21) + (*CHAR 10) (*CHAR 10) (*CHAR 10)) /* Messaggi comuni a pgm di comandi diversi (xxx0001). */ ADDMSGD MSGID(JCL0001) MSGF(NERONI2/JSRCLST) MSG('... &1') + FMT((*CHAR 10)) /* Messaggi nei pgm del Cmd 1 (xxx0101). */ ADDMSGD MSGID(JCL0101) MSGF(NERONI2/JCMPLIB) MSG('Libreria &1 per + il file di emissione non esiste') FMT((*CHAR 10)) ADDMSGD MSGID(JCL0102) MSGF(NERONI2/JCMPLIB) MSG('Libreria &1 da + esaminare non esiste') FMT((*CHAR 10)) ADDMSGD MSGID(JCL0111) MSGF(NERONI2/JCMPLIB) MSG('Creazione + elenco oggetti in corso per libreria &1') FMT((*CHAR 10)) ADDMSGD MSGID(JCL0112) MSGF(NERONI2/JCMPLIB) MSG('Creazione + elenco file fisici in corso per libreria &1') + FMT((*CHAR 10)) ADDMSGD MSGID(JCL0131) MSGF(NERONI2/JCMPLIB) MSG('Creato elenco + oggetti per libreria &1 in outfile &2/&3.') FMT((*CHAR + 10) (*CHAR 10) (*CHAR 10)) ADDMSGD MSGID(JCL0132) MSGF(NERONI2/JCMPLIB) MSG('Creato elenco + fisici per libreria &1 in outfile &2/&3.') FMT((*CHAR + 10) (*CHAR 10) (*CHAR 10)) ADDMSGD MSGID(JCL0191) MSGF(NERONI2/JCMPLIB) MSG('Creato elenco + oggetti con aggiunta di info moduli e tipo file fisici + per librerie &1 in outfile &2/&3.') FMT((*CHAR 21) + (*CHAR 10) (*CHAR 10)) /* Messaggi nei pgm del Cmd 2 (xxx0201). */ ADDMSGD MSGID(JCL0201) MSGF(NERONI2/JCMPLIB) MSG('Libreria &1 + della lista FROM non esiste') FMT((*CHAR 10)) ADDMSGD MSGID(JCL0202) MSGF(NERONI2/JCMPLIB) MSG('File &1/&2 + della lista FROM non esiste') FMT((*CHAR 10) (*CHAR 10)) ADDMSGD MSGID(JCL0203) MSGF(NERONI2/JCMPLIB) MSG('File &1/&2 + della lista FROM ha level check sbagliato') FMT((*CHAR + 10) (*CHAR 10)) ADDMSGD MSGID(JCL0211) MSGF(NERONI2/JCMPLIB) MSG('Libreria &1 + della lista TO non esiste') FMT((*CHAR 10)) ADDMSGD MSGID(JCL0212) MSGF(NERONI2/JCMPLIB) MSG('File &1/&2 + della lista TO non esiste') FMT((*CHAR 10) (*CHAR 10)) ADDMSGD MSGID(JCL0213) MSGF(NERONI2/JCMPLIB) MSG('File &1/&2 + della lista TO ha level check sbagliato') FMT((*CHAR + 10) (*CHAR 10)) /* Messaggi dei Cmd (xxx1001). */ /* Crea i testi d'aiuto. */ CRTPNLGRP PNLGRP(NERONI2/JCMPLIBG) SRCFILE(JCMPLIB) CRTPNLGRP PNLGRP(NERONI2/JCMPLIBFG) SRCFILE(JCMPLIB) CRTPNLGRP PNLGRP(NERONI2/JCMPLIBTG) SRCFILE(JCMPLIB) CRTPNLGRP PNLGRP(NERONI2/JCMPLIBPG) SRCFILE(JCMPLIB) //ENDBCHJOB //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JCMPLIBC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Claudio Neroni 24-06-1994 Creato. */ /* Compare libraries. */ /* Claudio Neroni 13-07-2016 Modificato. */ /* Avendo precedentemente estratto dal comando originale JCMPLIB */ /* le due funzioni: */ /* 1) JCMPLIBF & JCMPLIBT Data collection. */ /* 2) JCMPLIBP Print. */ /* ho riscritto il corpo dell'originale facendo uso di tali funzioni. */ /* */ PGM PARM(&FRMLIB &TOLIB &FRMDAT &FRMTIM &CMPCRI + &REFPGM) /* Riceve Librerie from. */ DCL VAR(&FRMLIB) TYPE(*CHAR) LEN(22) DCL VAR(&FRMLIB1) TYPE(*CHAR) LEN(10) DCL VAR(&FRMLIB2) TYPE(*CHAR) LEN(10) /* Riceve Librerie to. */ DCL VAR(&TOLIB) TYPE(*CHAR) LEN(22) DCL VAR(&TOLIB1) TYPE(*CHAR) LEN(10) DCL VAR(&TOLIB2) TYPE(*CHAR) LEN(10) /* Riceve Data di partenza. */ DCL VAR(&FRMDAT) TYPE(*CHAR) LEN(7) DCL VAR(&FRMDAT12) TYPE(*CHAR) LEN(12) /* Riceve Ora di partenza. */ DCL VAR(&FRMTIM) TYPE(*CHAR) LEN(6) DCL VAR(&FRMTIM10) TYPE(*CHAR) LEN(10) /* Riceve Criteri di comparazione. */ DCL VAR(&CMPCRI) TYPE(*CHAR) LEN(16) DCL VAR(&CMPCRI1) TYPE(*CHAR) LEN(7) DCL VAR(&CMPCRI2) TYPE(*CHAR) LEN(7) /* Riceve Programma di riferimento per i messaggi. */ DCL VAR(&REFPGM) TYPE(*CHAR) LEN(10) /* Flag ricavati da Criteri di comparazione. */ DCL VAR(&CRT) TYPE(*LGL) VALUE('0') DCL VAR(&SRC) TYPE(*LGL) VALUE('0') /* Numero di parametri ricevuti. */ DCL VAR(&FRMLIB§) TYPE(*DEC) LEN(5) DCL VAR(&TOLIB§) TYPE(*DEC) LEN(5) DCL VAR(&CMPCRI§) TYPE(*DEC) LEN(5) /* Nome del pgm corrente. */ DCL VAR(&MYNAME) TYPE(*CHAR) LEN(10) /* Prenotazione del CPF0001. */ DCL VAR(&CPF0001) TYPE(*LGL) /* Intercetta tutti gli errori saltando a fine con errore. */ MONMSG MSGID(CPF0000 MCH0000 CEE0000) EXEC(GOTO + CMDLBL(ERRORE)) /* Se richiesto *CPP (Command Processing Program) come programma */ /* di riferimento dei messaggi, assume il nome del programma corrente. */ IF COND(&REFPGM *EQ *CPP) THEN(DO) JCALLER CALLER(&REFPGM) KINSHIP(*FATHER) ENDDO /* Interpreta il numero di parametri ricevuti. */ CHGVAR VAR(&FRMLIB§) VALUE(%BIN(&FRMLIB 1 2)) CHGVAR VAR(&TOLIB§) VALUE(%BIN(&TOLIB 1 2)) CHGVAR VAR(&CMPCRI§) VALUE(%BIN(&CMPCRI 1 2)) /* Se il numero delle librerie di provenienza e' 1 o maggiore, */ /* estrae la prima libreria di provenienza. */ CHGVAR VAR(&FRMLIB1) VALUE(*NONE) IF COND(&FRMLIB§ *GE 1) THEN(DO) CHGVAR VAR(&FRMLIB1) VALUE(%SST(&FRMLIB 3 10)) ENDDO /* Se il numero delle librerie di provenienza e' 2 o maggiore, */ /* estrae la seconda libreria di provenienza. */ CHGVAR VAR(&FRMLIB2) VALUE(*NONE) IF COND(&FRMLIB§ *GE 2) THEN(DO) CHGVAR VAR(&FRMLIB2) VALUE(%SST(&FRMLIB 13 10)) ENDDO /* Se il numero delle librerie di arrivo e' 1 o maggiore, */ /* estrae la prima libreria di arrivo. */ CHGVAR VAR(&TOLIB1) VALUE(*NONE) IF COND(&TOLIB§ *GE 1) THEN(DO) CHGVAR VAR(&TOLIB1) VALUE(%SST(&TOLIB 3 10)) ENDDO /* Se il numero delle librerie di arrivo e' 2 o maggiore, */ /* estrae la seconda libreria di arrivo. */ CHGVAR VAR(&TOLIB2) VALUE(*NONE) IF COND(&TOLIB§ *GE 2) THEN(DO) CHGVAR VAR(&TOLIB2) VALUE(%SST(&TOLIB 13 10)) ENDDO /* Se il numero dei criteri e' 1 o maggiore, estrae il primo criterio. */ CHGVAR VAR(&CMPCRI1) VALUE(*NONE) IF COND(&CMPCRI§ *GE 1) THEN(DO) CHGVAR VAR(&CMPCRI1) VALUE(%SST(&CMPCRI 3 7)) ENDDO /* Se il numero dei criteri e' 2 o maggiore, estrae il secondo criterio. */ CHGVAR VAR(&CMPCRI2) VALUE(*NONE) IF COND(&CMPCRI§ *GE 2) THEN(DO) CHGVAR VAR(&CMPCRI2) VALUE(%SST(&CMPCRI 10 7)) ENDDO /* Fotografa il comando. */ SNDPGMMSG MSGID(JCLA001) MSGF(JCMPLIB) MSGDTA(&FRMLIB1 + *CAT &FRMLIB2 *CAT &TOLIB1 *CAT &TOLIB2 + *CAT &FRMDAT *CAT &FRMTIM *CAT &CMPCRI1 + *CAT &CMPCRI2) MSGTYPE(*INFO) /* Raccoglie i dati dalle librerie from. */ JCMPLIBF LIB(&FRMLIB1 &FRMLIB2) REFPGM(&REFPGM) /* Raccoglie i dati dalle librerie to. */ JCMPLIBT LIB(&TOLIB1 &TOLIB2) REFPGM(&REFPGM) /* Stampa le differenze tra from e to. */ JCMPLIBP FRMDAT(&FRMDAT) FRMTIM(&FRMTIM) + CMPCRI(&CMPCRI1 &CMPCRI2) REFPGM(&REFPGM) /* Attivitä finali. */ RCLRSC: /* Riacquisisce le risorse. */ RCLRSC MONMSG MSGID(CPF0000 MCH0000) /* Dealloca. */ /* ... */ /* Cancella i file di lavoro. */ /* ... */ /* Pulisce il messaggio di stato. */ SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) TOPGMQ(*EXT) + MSGTYPE(*STATUS) MONMSG MSGID(CPF0000 MCH0000) /* Se richiesto, rilascia il CPF0001. */ IF COND(&CPF0001) THEN(DO) SNDPGMMSG MSGID(CPF0001) MSGF(QCPFMSG) + MSGDTA(JCMPLIB ) MSGTYPE(*ESCAPE) MONMSG MSGID(CPF0000 MCH0000) ENDDO /* Ritorna. */ RETURN /* Errore. */ ERRORE: /* Restituisce i messaggi al chiamante, */ /* trasformando eventuali escape in diagnostici. */ JRSNMSG MONMSG MSGID(CPF0000 MCH0000) /* Prenotazione del CPF0001. */ CPF0001: /* Prenota il CPF0001. */ CHGVAR VAR(&CPF0001) VALUE('1') MONMSG MSGID(CPF0000 MCH0000) /* Salta ad Attivitä finali. */ GOTO CMDLBL(RCLRSC) ENDPGM //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JCMPLIBC_1) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Claudio Neroni 24-06-1994 Creato. */ /* Compare libraries. */ /* */ PGM PARM(&FRMLIB &TOLIB &FRMDAT &FRMTIM &CMPCRI) /* Riceve Librerie from. */ DCL VAR(&FRMLIB) TYPE(*CHAR) LEN(22) DCL VAR(&FRMLIB1) TYPE(*CHAR) LEN(10) DCL VAR(&FRMLIB2) TYPE(*CHAR) LEN(10) /* Riceve Librerie to. */ DCL VAR(&TOLIB) TYPE(*CHAR) LEN(22) DCL VAR(&TOLIB1) TYPE(*CHAR) LEN(10) DCL VAR(&TOLIB2) TYPE(*CHAR) LEN(10) /* Riceve Data di partenza. */ DCL VAR(&FRMDAT) TYPE(*CHAR) LEN(7) DCL VAR(&FRMDAT12) TYPE(*CHAR) LEN(12) /* Riceve Ora di partenza. */ DCL VAR(&FRMTIM) TYPE(*CHAR) LEN(6) DCL VAR(&FRMTIM10) TYPE(*CHAR) LEN(10) /* Riceve Criteri di comparazione. */ DCL VAR(&CMPCRI) TYPE(*CHAR) LEN(16) DCL VAR(&CMPCRI1) TYPE(*CHAR) LEN(7) DCL VAR(&CMPCRI2) TYPE(*CHAR) LEN(7) /* Flag ricavati da Criteri di comparazione. */ DCL VAR(&CRT) TYPE(*LGL) VALUE('0') DCL VAR(&SRC) TYPE(*LGL) VALUE('0') /* Numero di parametri ricevuti. */ DCL VAR(&FRMLIB§) TYPE(*DEC) LEN(5) DCL VAR(&TOLIB§) TYPE(*DEC) LEN(5) DCL VAR(&CMPCRI§) TYPE(*DEC) LEN(5) /* Nome del pgm corrente. */ DCL VAR(&MYNAME) TYPE(*CHAR) LEN(10) /* Prenotazione del CPF0001. */ DCL VAR(&CPF0001) TYPE(*LGL) /* Intercetta tutti gli errori saltando a fine con errore. */ MONMSG MSGID(CPF0000 MCH0000 CEE0000) EXEC(GOTO + CMDLBL(ERRORE)) /* Trova il Nome del pgm corrente. */ JCALLER CALLER(&MYNAME) KINSHIP(*FATHER) /* Interpreta il numero di parametri ricevuti. */ CHGVAR VAR(&FRMLIB§) VALUE(%BIN(&FRMLIB 1 2)) CHGVAR VAR(&TOLIB§) VALUE(%BIN(&TOLIB 1 2)) CHGVAR VAR(&CMPCRI§) VALUE(%BIN(&CMPCRI 1 2)) /* Se il numero delle librerie di provenienza e' 1 o maggiore, */ /* estrae la prima libreria di provenienza. */ IF COND(&FRMLIB§ *GE 1) THEN(DO) CHGVAR VAR(&FRMLIB1) VALUE(%SST(&FRMLIB 3 10)) ENDDO /* Se il numero delle librerie di provenienza e' 2 o maggiore, */ /* estrae la seconda libreria di provenienza. */ IF COND(&FRMLIB§ *GE 2) THEN(DO) CHGVAR VAR(&FRMLIB2) VALUE(%SST(&FRMLIB 13 10)) ENDDO /* Se il numero delle librerie di arrivo e' 1 o maggiore, */ /* estrae la prima libreria di arrivo. */ IF COND(&TOLIB§ *GE 1) THEN(DO) CHGVAR VAR(&TOLIB1) VALUE(%SST(&TOLIB 3 10)) ENDDO /* Se il numero delle librerie di arrivo e' 2 o maggiore, */ /* estrae la seconda libreria di arrivo. */ IF COND(&TOLIB§ *GE 2) THEN(DO) CHGVAR VAR(&TOLIB2) VALUE(%SST(&TOLIB 13 10)) ENDDO /* Se il numero dei criteri e' 1 o maggiore, estrae il primo criterio. */ IF COND(&CMPCRI§ *GE 1) THEN(DO) CHGVAR VAR(&CMPCRI1) VALUE(%SST(&CMPCRI 3 7)) ENDDO /* Se il numero dei criteri e' 2 o maggiore, estrae il secondo criterio. */ IF COND(&CMPCRI§ *GE 2) THEN(DO) CHGVAR VAR(&CMPCRI2) VALUE(%SST(&CMPCRI 10 7)) ENDDO /* Aggiusta i parametri per la fotografia. */ IF COND(&FRMDAT *NE '0000000') THEN(DO) CVTDAT DATE(&FRMDAT) TOVAR(&FRMDAT12) + FROMFMT(*CYMD) TOFMT(*DMYY) TOSEP(/) CHGVAR VAR(&FRMDAT12) VALUE('''' *CAT &FRMDAT12 + *TCAT '''') ENDDO IF COND(&FRMTIM *NE '000000') THEN(DO) CHGVAR VAR(&FRMTIM10) VALUE('''' *CAT %SST(&FRMTIM + 1 2) *CAT ':' *CAT %SST(&FRMTIM 3 2) *CAT + ':' *CAT %SST(&FRMTIM 5 2) *TCAT '''') ENDDO /* Fotografa il comando. */ SNDPGMMSG MSGID(JCLA001) MSGF(JCMPLIB) MSGDTA(&FRMLIB1 + *CAT &FRMLIB2 *CAT &TOLIB1 *CAT &TOLIB2 + *CAT &FRMDAT12 *CAT &FRMTIM10 *CAT + &CMPCRI1 *CAT &CMPCRI2) MSGTYPE(*INFO) /* Se richiesto il criterio "data di creazione", lo annota. */ IF COND((&CMPCRI1 *EQ *CRTDAT) *OR (&CMPCRI2 + *EQ *CRTDAT)) THEN(CHGVAR VAR(&CRT) + VALUE('1')) /* Se richiesto il criterio "data del sorgente", lo annota. */ IF COND((&CMPCRI1 *EQ *SRCDAT) *OR (&CMPCRI2 + *EQ *SRCDAT)) THEN(CHGVAR VAR(&SRC) + VALUE('1')) /* Estrae descriziome oggetti dalle librerie richieste. */ IF COND(&FRMLIB1 *NE ' ') THEN(DO) DSPOBJD OBJ(&FRMLIB1/*ALL) OBJTYPE(*ALL) + OUTPUT(*OUTFILE) OUTFILE(QTEMP/JCMPLIB1) + OUTMBR(*FIRST *REPLACE) JMOD LIB(&FRMLIB1) PGM(*ALL) PRINT(*NO) + OUTFILE(QTEMP/JMODOUT1) MBROPT(*REPLACE) + REFPGM(&MYNAME) ENDDO IF COND(&FRMLIB2 *NE ' ') THEN(DO) DSPOBJD OBJ(&FRMLIB2/*ALL) OBJTYPE(*ALL) + OUTPUT(*OUTFILE) OUTFILE(QTEMP/JCMPLIB1) + OUTMBR(*FIRST *ADD) JMOD LIB(&FRMLIB2) PGM(*ALL) PRINT(*NO) + OUTFILE(QTEMP/JMODOUT1) MBROPT(*ADD) + REFPGM(&MYNAME) ENDDO IF COND(&TOLIB1 *NE ' ') THEN(DO) DSPOBJD OBJ(&TOLIB1/*ALL) OBJTYPE(*ALL) + OUTPUT(*OUTFILE) OUTFILE(QTEMP/JCMPLIB2) + OUTMBR(*FIRST *REPLACE) JMOD LIB(&TOLIB1) PGM(*ALL) PRINT(*NO) + OUTFILE(QTEMP/JMODOUT2) MBROPT(*REPLACE) + REFPGM(&MYNAME) ENDDO IF COND(&TOLIB2 *NE ' ') THEN(DO) DSPOBJD OBJ(&TOLIB2/*ALL) OBJTYPE(*ALL) + OUTPUT(*OUTFILE) OUTFILE(QTEMP/JCMPLIB2) + OUTMBR(*FIRST *ADD) JMOD LIB(&TOLIB2) PGM(*ALL) PRINT(*NO) + OUTFILE(QTEMP/JMODOUT2) MBROPT(*ADD) + REFPGM(&MYNAME) ENDDO /* Riporta sulla descrizione oggetti le informazioni */ /* dei moduli contenuti. */ JMRG OBJFILE(JCMPLIB1) MODFILE(JMODOUT1) + REFPGM(&MYNAME) JMRG OBJFILE(JCMPLIB2) MODFILE(JMODOUT2) + REFPGM(&MYNAME) /* Ordina e stampa le informazioni raccolte. */ OVRDBF FILE(JCMPLIB1) SHARE(*YES) OPNQRYF FILE((QTEMP/JCMPLIB1)) KEYFLD((ODOBNM) + (ODOBTP) (ODOBAT) (ODSRCM)) OVRDBF FILE(JCMPLIB2) SHARE(*YES) OPNQRYF FILE((QTEMP/JCMPLIB2)) KEYFLD((ODOBNM) + (ODOBTP) (ODOBAT) (ODSRCM)) OVRPRTF FILE(QPRINT) PAGESIZE(66 220) SPLFNAME(JCMPLIB) CALL PGM(JCMPLIBS) PARM(&FRMLIB1 &FRMLIB2 &TOLIB1 + &TOLIB2 &FRMDAT &FRMTIM &CRT &SRC) /* Visualizza la stampa. */ DSPSPLF FILE(JCMPLIB) SPLNBR(*LAST) /* Attivitä finali. */ RCLRSC: /* Riacquisisce le risorse. */ RCLRSC MONMSG MSGID(CPF0000 MCH0000) /* Dealloca. */ /* ... */ /* Cancella i file di lavoro. */ /* ... */ /* Pulisce il messaggio di stato. */ SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) TOPGMQ(*EXT) + MSGTYPE(*STATUS) MONMSG MSGID(CPF0000 MCH0000) /* Se richiesto, rilascia il CPF0001. */ IF COND(&CPF0001) THEN(DO) SNDPGMMSG MSGID(CPF0001) MSGF(QCPFMSG) + MSGDTA(JCMPLIB ) MSGTYPE(*ESCAPE) MONMSG MSGID(CPF0000 MCH0000) ENDDO /* Ritorna. */ RETURN /* Errore. */ ERRORE: /* Restituisce i messaggi al chiamante, */ /* trasformando eventuali escape in diagnostici. */ JRSNMSG MONMSG MSGID(CPF0000 MCH0000) /* Prenotazione del CPF0001. */ CPF0001: /* Prenota il CPF0001. */ CHGVAR VAR(&CPF0001) VALUE('1') MONMSG MSGID(CPF0000 MCH0000) /* Salta ad Attivitä finali. */ GOTO CMDLBL(RCLRSC) ENDPGM //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JCMPLIBE) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Claudio Neroni 24-06-1994 Creato. * Compare libraries. * FQADSPOBJ IP E DISK C do B01 C if odlbnm <> *blank B02 C if odlbnm = lib1 B03 C leave 03 C endif E03 C if odlbnm = lib2 B03 C leave 03 C endif E03 C if lib1 = *blank and lib2 = *blank B03 C eval lib1 = odlbnm 03 C leave 03 C endif E03 C if lib2 = *blank B03 C eval lib2 = odlbnm 03 C seton lr 03 C leave 03 C endif E03 C endif E02 C enddo E01 *------------------------------------------------------------------- * Inizializza. C *INZSR BEGSR C *ENTRY PLIST C PARM LIB1 10 C PARM LIB2 10 C clear lib1 C clear lib2 C endsr //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JCMPLIBF) FILETYPE(*SRC) ENDCHAR('//ENDSRC') CMD PROMPT('Compare libraries from') PARM KWD(LIB) TYPE(*NAME) LEN(10) SPCVAL((*NONE)) + MIN(1) MAX(2) PROMPT('From libraries group') PARM KWD(OUTFILE) TYPE(OUTFILE) PROMPT('From data + collection outfile') OUTFILE: QUAL TYPE(*NAME) DFT(JCMPLIBFR) QUAL TYPE(*NAME) DFT(QTEMP) PROMPT('Library') PARM KWD(REFPGM) TYPE(*NAME) LEN(10) DFT(*CPP) + SPCVAL((*CPP)) PROMPT('Reference program + for messages') PARM KWD(FROMFLAG) TYPE(*LGL) CONSTANT('1') //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JCMPLIBFC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Claudio Neroni 15-05-2014 Creato. */ /* Compare libraries. DataCollection. Cpp */ /* Spezzato il comando originale JCMPLIB in due. */ /* 1) JCMPLIBF & JCMPLIBT Data collection. */ /* 2) JCMPLIBP Print. */ /* Il corrente, che e' il primo, raccoglie i dati in un outfile */ /* che puö essere spostato su un'altra macchina per */ /* eseguire la stampa di confronto con il secondo comando. */ /* Gli outfile da generare */ /* e da fornire al comando di stampa sono due: */ /* 1) il primo JCMPLIBFR corrisponde al gruppo di librerie FROM; */ /* 2) il secondo JCMPLIBTO corrisponde al gruppo di librerie TO. */ /* Claudio Neroni 13-04-2016 Modificato. */ /* Indicizzato il fisico di emissione. */ /* */ PGM PARM(&EXALIB &OUTFILE &REFPGM &FROMFLAG) /* Riceve Librerie da esaminare. */ DCL VAR(&EXALIB) TYPE(*CHAR) LEN(22) /* Numero di Librerie ricevute nella lista. */ DCL VAR(&EXALIB§) TYPE(*INT) /* Libreria da esaminare. */ DCL VAR(&EXALIBX) TYPE(*CHAR) LEN(10) /* Librerie da esaminare. Lista per messaggio. */ DCL VAR(&EXALIBT) TYPE(*CHAR) LEN(21) /* Riceve Nome qualificato dell'output file. */ DCL VAR(&OUTFILE) TYPE(*CHAR) LEN(20) /* Output file. */ DCL VAR(&OUTFILEF) TYPE(*CHAR) LEN(10) /* Libreria dell'Output file. */ DCL VAR(&OUTFILEL) TYPE(*CHAR) LEN(10) /* Riceve Programma di riferimento per i messaggi. */ DCL VAR(&REFPGM) TYPE(*CHAR) LEN(10) /* Riceve Flag From='1' To='0' */ /* Passato come costante dai comandi chiamanti per farsi identificare. */ DCL VAR(&FROMFLAG) TYPE(*LGL) /* Tipo lavoro (0=Batch 1=Interactive). */ DCL VAR(&JOBTYPE) TYPE(*CHAR) LEN(1) /* Indice di loop. */ DCL VAR(&XX) TYPE(*INT) /* Displacement. */ DCL VAR(&DD) TYPE(*INT) /* Sostituzione/Aggiunta dati nel file di emissione. */ DCL VAR(&MBROPT) TYPE(*CHAR) LEN(10) + VALUE(*REPLACE) /* Testo da assegnare all'Output file. */ DCL VAR(&OUTFILET) TYPE(*CHAR) LEN(50) + VALUE('Comp Lib') /* Prenotazione del CPF0001. */ DCL VAR(&CPF0001) TYPE(*LGL) /* Intercetta tutti gli errori saltando a fine con errore. */ MONMSG MSGID(CPF0000 MCH0000 CEE0000) EXEC(GOTO + CMDLBL(ERRORE)) /* Recupera tipo lavoro. */ RTVJOBA TYPE(&JOBTYPE) /* Estrae parametri. */ CHGVAR VAR(&OUTFILEF) VALUE(%SST(&OUTFILE 1 10)) CHGVAR VAR(&OUTFILEL) VALUE(%SST(&OUTFILE 11 10)) /* Se richiesto *CPP (Command Processing Program) come programma */ /* di riferimento dei messaggi, assume il nome del programma corrente. */ IF COND(&REFPGM *EQ *CPP) THEN(DO) JCALLER CALLER(&REFPGM) KINSHIP(*FATHER) ENDDO /* Interpreta il numero di Librerie ricevute. */ CHGVAR VAR(&EXALIB§) VALUE(%BIN(&EXALIB 1 2)) /* Trasforma la lista contenuta nel parametro in una lista per il messaggio. */ /* Esamina l'elenco delle librerie. */ DOFOR VAR(&XX) FROM(1) TO(&EXALIB§) /* Calcola displacement. */ CHGVAR VAR(&DD) VALUE(3 + (&XX - 1) * 10) /* Estrae nome libreria. */ CHGVAR VAR(&EXALIBX) VALUE(%SST(&EXALIB &DD 10)) /* Elabora libreria. */ IF COND(&XX *EQ 1) THEN(CHGVAR VAR(&EXALIBT) + VALUE(&EXALIBX)) ELSE CMD(CHGVAR VAR(&EXALIBT) VALUE(&EXALIBT + *BCAT &EXALIBX)) /* Esamina l'elenco delle librerie. */ ENDDO /* Fotografa il comando. */ IF COND(&FROMFLAG) THEN(DO) SNDPGMMSG MSGID(JCLA002) MSGF(JCMPLIB) MSGDTA(&EXALIBT + *CAT &OUTFILEL *CAT &OUTFILEF *CAT + &REFPGM) TOPGMQ(*PRV (&REFPGM)) + MSGTYPE(*INFO) ENDDO IF COND(*NOT &FROMFLAG) THEN(DO) SNDPGMMSG MSGID(JCLA003) MSGF(JCMPLIB) MSGDTA(&EXALIBT + *CAT &OUTFILEL *CAT &OUTFILEF *CAT + &REFPGM) TOPGMQ(*PRV (&REFPGM)) + MSGTYPE(*INFO) ENDDO /* Compone un testo per l'output file. */ IF COND(&FROMFLAG) THEN(CHGVAR VAR(&OUTFILET) + VALUE(&OUTFILET *BCAT 'From')) ELSE CMD(CHGVAR VAR(&OUTFILET) VALUE(&OUTFILET + *BCAT 'To')) CHGVAR VAR(&OUTFILET) VALUE(&OUTFILET *BCAT &EXALIBT) /* Se per l'outfile e' richiesta una libreria che non esiste, */ /* diagnostica e prenota rilascio. */ RTVLIBD LIB(&OUTFILEL) MONMSG MSGID(CPF0000 MCH0000) EXEC(DO) SNDPGMMSG MSGID(JCL0101) MSGF(JCMPLIB) + MSGDTA(&OUTFILEL) TOPGMQ(*PRV (&REFPGM)) + MSGTYPE(*DIAG) CHGVAR VAR(&CPF0001) VALUE('1') ENDDO /* Segnala librerie mancanti. */ /* Esamina l'elenco delle librerie. */ DOFOR VAR(&XX) FROM(1) TO(&EXALIB§) /* Calcola displacement. */ CHGVAR VAR(&DD) VALUE(3 + (&XX - 1) * 10) /* Estrae nome libreria. */ CHGVAR VAR(&EXALIBX) VALUE(%SST(&EXALIB &DD 10)) /* Se la libreria e' *NONE, ricicla. */ IF COND(&EXALIBX *EQ *NONE) THEN(ITERATE) /* Se la libreria non esiste, diagnostica e prenota rilascio. */ RTVLIBD LIB(&EXALIBX) MONMSG MSGID(CPF0000 MCH0000) EXEC(DO) SNDPGMMSG MSGID(JCL0102) MSGF(JCMPLIB) + MSGDTA(&EXALIBX) TOPGMQ(*PRV (&REFPGM)) + MSGTYPE(*DIAG) CHGVAR VAR(&CPF0001) VALUE('1') ENDDO /* Esamina l'elenco delle librerie. */ ENDDO /* Se prenotato rilascio, abbandona. */ IF COND(&CPF0001) THEN(GOTO CMDLBL(RCLRSC)) /* Prepara file di transito. */ JCPYCLR FROMFILE(JCMPLIBX) TOFILE(JCMPLIBXT) /* Elabora le librerie richieste. */ /* Esamina l'elenco delle librerie. */ DOFOR VAR(&XX) FROM(1) TO(&EXALIB§) /* Calcola displacement. */ CHGVAR VAR(&DD) VALUE(3 + (&XX - 1) * 10) /* Estrae nome libreria. */ CHGVAR VAR(&EXALIBX) VALUE(%SST(&EXALIB &DD 10)) /* Se la libreria e' *NONE, ricicla. */ IF COND(&EXALIBX *EQ *NONE) THEN(ITERATE) /* Elabora libreria. */ CALLSUBR SUBR(LIBRARY) /* Esamina l'elenco delle librerie. */ ENDDO /* Cambia testo all'output file. */ CHGPF FILE(&OUTFILEL/&OUTFILEF) TEXT(&OUTFILET) /* Messaggia completamento. */ /* Creato elenco oggetti con aggiunta di info moduli */ /* per librerie &1 in outfile &2/&3 */ SNDPGMMSG MSGID(JCL0191) MSGF(JCMPLIB) MSGDTA(&EXALIBT + *CAT &OUTFILEL *CAT &OUTFILEF) + TOPGMQ(*PRV (&REFPGM)) MSGTYPE(*COMP) /* Invita a visualizzare il file di emissione. */ JRQT CMD(RUNQRY QRYFILE((&OUTFILEL/&OUTFILEF)) + RCDSLT(*YES)) REFPGM(&REFPGM) /* Attivitä finali. */ RCLRSC: /* Riacquisisce le risorse. */ RCLRSC MONMSG MSGID(CPF0000 MCH0000) /* Dealloca. */ /* ... */ /* Cancella i file di lavoro. */ /* ... */ /* Se richiesto, rilascia il CPF0001. */ IF COND(&CPF0001) THEN(DO) /* Se corre from. */ IF COND(&FROMFLAG) THEN(DO) SNDPGMMSG MSGID(CPF0001) MSGF(QCPFMSG) + MSGDTA(JCMPLIBF) MSGTYPE(*ESCAPE) MONMSG MSGID(CPF0000 MCH0000) ENDDO /* Se corre to. */ IF COND(*NOT &FROMFLAG) THEN(DO) SNDPGMMSG MSGID(CPF0001) MSGF(QCPFMSG) + MSGDTA(JCMPLIBT) MSGTYPE(*ESCAPE) MONMSG MSGID(CPF0000 MCH0000) ENDDO /* Se richiesto, rilascia il CPF0001. */ ENDDO /* Ritorna. */ RETURN /* Errore. */ ERRORE: /* Restituisce i messaggi al chiamante, */ /* trasformando eventuali escape in diagnostici. */ JRSNMSG MONMSG MSGID(CPF0000 MCH0000) /* Prenotazione del CPF0001. */ CPF0001: /* Prenota il CPF0001. */ CHGVAR VAR(&CPF0001) VALUE('1') MONMSG MSGID(CPF0000 MCH0000) /* Salta ad Attivitä finali. */ GOTO CMDLBL(RCLRSC) RETURN /*----------------------------------------------------------------------------*/ /* Crea elenco oggetti per libreria &EXALIBX */ SUBR SUBR(LIBRARY) /* Riceve nome libreria &EXALIBX */ /* */ /* Se interattivo, Messaggia stato. */ /* Creazione elenco oggetti in corso per libreria &1 */ IF COND(&JOBTYPE *EQ '1') THEN(DO) SNDPGMMSG MSGID(JCL0111) MSGF(JCMPLIB) + MSGDTA(&EXALIBX) TOPGMQ(*EXT) + MSGTYPE(*STATUS) ENDDO /* Estrae descriziome oggetti dalla libreria richiesta. */ JCPYCLR FROMFILE(JCMPLIB1) TOFILE(JCMPLIB1T) DSPOBJD OBJ(&EXALIBX/*ALL) OBJTYPE(*ALL) + OUTPUT(*OUTFILE) OUTFILE(QTEMP/JCMPLIB1T) + OUTMBR(*FIRST *REPLACE) MONMSG MSGID(CPF2123) /* Messaggia completamento. */ /* Creato elenco oggetti per libreria &1 */ SNDPGMMSG MSGID(JCL0131) MSGF(JCMPLIB) MSGDTA(&EXALIBX + *CAT 'QTEMP ' *CAT 'JCMPLIB1T ') + TOPGMQ(*PRV (&REFPGM)) MSGTYPE(*COMP) /* Estrae descriziome moduli dalla libreria richiesta. */ JMOD LIB(&EXALIBX) PGM(*ALL) PRINT(*NO) + OUTFILE(QTEMP/JMODOUT1T) MBROPT(*REPLACE) + REFPGM(&REFPGM) /* Se interattivo, Messaggia stato. */ /* Creazione elenco file fisici in corso per libreria &1 */ IF COND(&JOBTYPE *EQ '1') THEN(DO) SNDPGMMSG MSGID(JCL0112) MSGF(JCMPLIB) + MSGDTA(&EXALIBX) TOPGMQ(*EXT) + MSGTYPE(*STATUS) ENDDO /* Estrae descriziome file fisici dalla libreria richiesta. */ DSPFD FILE(&EXALIBX/*ALL) TYPE(*BASATR) + OUTPUT(*OUTFILE) FILEATR(*PF) + OUTFILE(QTEMP/JCMPLIBXT) OUTMBR(*FIRST + *REPLACE) MONMSG MSGID(CPF3012) /* Messaggia completamento. */ /* Creato elenco file fisici per libreria &1 */ SNDPGMMSG MSGID(JCL0132) MSGF(JCMPLIB) MSGDTA(&EXALIBX + *CAT 'QTEMP ' *CAT 'JCMPLIBXT ') + TOPGMQ(*PRV (&REFPGM)) MSGTYPE(*COMP) /* Riporta sulla descrizione oggetti le informazioni */ /* dei moduli contenuti. */ JMRG OBJFILE(JCMPLIB1T) MODFILE(JMODOUT1T) + REFPGM(&REFPGM) /* Riporta sulla descrizione oggetti le informazioni */ /* dei file fisici. */ OVRDBF FILE(JCMPLIB1) TOFILE(QTEMP/JCMPLIB1T) OVRDBF FILE(JCMPLIBX) TOFILE(QTEMP/JCMPLIBXT) CALL PGM(JCMPLIBFU) DLTOVR FILE(*ALL) /* Copia il file di lavoro nel file di output. */ CPYF FROMFILE(QTEMP/JCMPLIB1T) + TOFILE(&OUTFILEL/&OUTFILEF) + MBROPT(&MBROPT) CRTFILE(*YES) CHGVAR VAR(&MBROPT) VALUE(*ADD) ENDSUBR /*----------------------------------------------------------------------------*/ ENDPGM //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JCMPLIBFG) FILETYPE(*SRC) ENDCHAR('//ENDSRC') :PNLGRP. :IMPORT NAME='*' PNLGRP=JPNL. .*------------------------------------------------------------------------------ :HELP NAME=CMD. :H3.Comando JCMPLIBF :H2.Compare Libraries From :P.Colleziona info da librerie From per comparazione librerie. :NOTE. I comandi :HP2.JCMPLIBF:EHP2. "Compare Libraries From" e :HP2.JCMPLIBT:EHP2. "Compare Libraries To" utilizzano lo stesso command processing program che prepara un file informativo sul contenuto di un gruppo di librerie. Il file informativo ricavato dal primo comando (librerie "From") verra' in seguito comparato con il file informativo ricavato dal secondo comando (librerie "To") tramite il comando conclusivo :HP2.JCMPLIBP:EHP2. "Compare Libraries Print". :ENOTE. :NOTE. Il comando :HP2.JCMPLIBF:EHP2. "Compare Libraries From" puo' essere usato anche come generatore delle informazioni da usare nel comando :HP2.JRAS:EHP2. "Retrieve All Sources" di valutazione e ricostruzione dell'insieme dei sorgenti degli oggetti presenti nel gruppo di librerie richiesto. :ENOTE. :P.Il file di emissione del presente comando ha il tracciato del :HP2.DSPOBJD:EHP2. "Display Object Description" ma, mancando da questo outfile le informazioni sui sorgenti degli oggetti ILE, esse vengono reperite tramite i comandi :HP2.JMOD:EHP2. "List embedded modules" e :HP2.JMRG:EHP2. "Merge Object Info". Il record di object description che fotografa l'oggetto ile viene ripetuto piu' volte: ogni record programma dotato di moduli viene duplicato tante volte quanti sono i moduli referenziati dal programma stesso. Ogni record porta le informazioni sorgenti relative ad un solo modulo. :XMP. I campi completati per i programmi con moduli sono i seguenti. :HP2. CAMPI MODIFICATI CAMPI DI PROVENIENZA MODIFICHE SU DESCRIZIONE OGGETTI DA DESCRIZIONE MODULI :EHP2. ----------------------- ----------------------------------- ODSRCF SourceFile MOSRCF SourceFile ODSRCL SourceLibrary MOSRCL SourceLibrary ODSRCM SourceMember MOSRCM SourceMember ODSRCC ChgSourceCentury %subst(MOSRCD:1:1) ChgSourceCentury ODSRCD ChgSourceDate %subst(MOSRCD:2:6) ChgSourceDate ODSRCT ChgSourceTime %subst(MOSRCD:8:6) ChgSourceTime ODUATR UserAttribute MOATTR ModuleAttribute :EXMP. :P.Per differenziare i file fisici sorgente dai file fisici dati il comando raccoglie l'informazione S=Source / D=Data da un display file description dei file fisici. :XMP. I campi completati per i file fisici sono i seguenti. :HP2. CAMPI MODIFICATI CAMPI DI PROVENIENZA MODIFICHE SU DESCRIZIONE OGGETTI DA DESCRIZIONE *BASATR FILE FISICI :EHP2. ----------------------- ---------------------------------- ODDCEN DspDateCentury ATDTAT File type: D=*DATA, S=*SRC :EXMP. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/lib'. :H3.Library Group (LIB) :P.Elenco delle librerie dalle quali estrarre informazioni. :P.Valori permessi: :PARML. :PT.nome-libreria :PD.E' obbligatorio almeno un valore. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/outfile'. :H3.Output file (OUTFILE) - file :P.Nome del file AS400 destinato a contenere la collezione dati dalle librerie "From". :P.Se il file ricevente preesiste, viene prima cancellato e poi ricreato. :P.Valori permessi: :PARML. :PT.:PK DEF.JCMPLIBFR:EPK. :PD.Nome di difetto del file di emissione. :PT.nome-file-di-emissione :PD.Il file di emissione prende il nome richiesto. :EPARML. :H3.Output file (OUTFILE) - library :P.Nome della libreria in cui risiede il file di emissione. :P.Valori permessi: :PARML. :PT.:PK DEF.QTEMP:EPK. :PD.Il file di emissione viene creato in libreria temporanea. :PT.nome-libreria :PD.Il file di emissione viene creato nella libreria richiesta. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP NAME='CMD/COMMAND/EXAMPLES'. Esempi per JCMPLIBF :XH3.Esempi per JCMPLIBF :P.:HP2.Esempio 1: Restituisce nel file JCMPLIBFR della libreria QTEMP l'elenco degli oggetti presenti nelle librerie UFNEROTRE e UFNEROSEI completato con le informazioni sorgente riguardante i moduli ILE e con il tipo file quando si tratta di file fisici.:EHP2. :XMP. Con i soli parametri necessari: JCMPLIBF LIB(UFNEROTRE UFNEROSEI) Anche con i parametri di default: JCMPLIBF LIB(UFNEROTRE UFNEROSEI) OUTFILE(QTEMP/JCMPLIBFR) REFPGM(*CPP) :EXMP. :P.Questo comando permette di estrarre le info riguardanti gli oggetti delle librerie richieste nel file di emissione di default. :P.:HP2.Esempio 2: Restituisce nel file SCIOPA della libreria UFNERONI l'elenco degli oggetti presenti nella libreria NERONI2 completato con le informazioni sorgente riguardante i moduli ILE e con il tipo file quando si tratta di file fisici.:EHP2. :XMP. JCMPLIBF LIB(NERONI2) OUTFILE(UFNERONI/SCIOPA) :EXMP. :P.Questo comando permette di estrarre le info riguardanti gli oggetti della libreria richiesta nel file di emissione in una libreria diversa dalla temporanea e con un nome di fantasia. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/refpgm'. :IMHELP NAME='refpgm'. :EHELP. .*------------------------------------------------------------------------------ :HELP NAME='CMD/ERROR/MESSAGES'. .*--------------------- :XH3.Messaggi informativi e di completamento :P.:HP3.Messaggi *INFO e *COMP:EHP3. :DL COMPACT. :DT.JCLA002 :DD.&MSG(JCLA002,JCMPLIB,*LIBL,nosub). :DT.JCL0191 :DD.&MSG(JCL0191,JCMPLIB,*LIBL,nosub). :DT.JCL0131 :DD.&MSG(JCL0131,JCMPLIB,*LIBL,nosub). :DT.JCL0132 :DD.&MSG(JCL0132,JCMPLIB,*LIBL,nosub). :EDL. .*--------------------- :XH3.Messaggi di stato :P.:HP3.Messaggi *STATUS:EHP3. :DL COMPACT. :DT.JCL0111 :DD.&MSG(JCL0111,JCMPLIB,*LIBL,nosub). :DT.JCL0112 :DD.&MSG(JCL0112,JCMPLIB,*LIBL,nosub). :EDL. .*--------------------- :XH3.Messaggi di errore :P.:HP3.Messaggi *DIAG seguiti da *ESCAPE CPF0001:EHP3. :DL COMPACT. :DT.JCL0101 :DD.&MSG(JCL0101,JCMPLIB,*LIBL,nosub). :DT.JCL0102 :DD.&MSG(JCL0102,JCMPLIB,*LIBL,nosub). :EDL. .*--------------------- :EHELP. .*------------------------------------------------------------------------------ :EPNLGRP. //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JCMPLIBFU) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Claudio Neroni 16-01-2016 Creato. * Compare libraries. ChgObjDWithFileD * Riporta sulla descrizione oggetti informazioni provenienti * dalla descrizione dei file fisici. *--------------------------------------------------------------------------------------------- H decedit('0,') datfmt(*dmy/) datedit(*dmy/) *--------------------------------------------------------------------------------------------- * Object info. Fjcmplib1 up e disk * Display file description of physical files. Fjcmplibx if e k disk *--------------------------------------------------------------------------------------------- * Usa Secolo visualizzazione in maniera impropria. * Sbianca il campo per tutti gli oggetti salvo che * per i file fisici scrivendovi il valore * del campo ATDTAT "Tipo file: D=*DATA, S=*SRC" * proveniente dal DSPFD dei file fisici. C clear ODDCEN C if odobtp = '*FILE' C and odobat = 'PF' C kpf klist C kfld odlbnm C kfld odobnm C kpf chain QWHFDBAS C if %found C eval ODDCEN = ATDTAT C endif C endif C update QLIDOBJD *--------------------------------------------------------------------------------------------- //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JCMPLIBG) FILETYPE(*SRC) ENDCHAR('//ENDSRC') :PNLGRP. .*--------------------------------------------------------------------- :HELP NAME=CMD. :H3.Comando JCMPLIB :H2.Compara il contenuto di due librerie FROM con il contenuto di due librerie TO :P.DA SCRIVERE... :EHELP. .*--------------------------------------------------------------------- :EPNLGRP. //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JCMPLIBP) FILETYPE(*SRC) ENDCHAR('//ENDSRC') CMD PROMPT('Compare libraries print') PARM KWD(FRMCOL) TYPE(FRMCOL) PROMPT('From data + collection') FRMCOL: QUAL TYPE(*NAME) DFT(JCMPLIBFR) QUAL TYPE(*NAME) DFT(QTEMP) PROMPT('Library') PARM KWD(TOCOL) TYPE(TOCOL) PROMPT('To data + collection') TOCOL: QUAL TYPE(*NAME) DFT(JCMPLIBTO) QUAL TYPE(*NAME) DFT(QTEMP) PROMPT('Library') PARM KWD(FRMDAT) TYPE(*CHAR) LEN(7) PROMPT('Start + date CYYMMDD') PARM KWD(FRMTIM) TYPE(*CHAR) LEN(6) PROMPT('Start + time HHMMSS') PARM KWD(CMPCRI) TYPE(*CHAR) LEN(7) RSTD(*YES) + VALUES(*CRTDAT *SRCDAT) SPCVAL((*NONE)) + MAX(2) PROMPT('Criteria for comparison') PARM KWD(REFPGM) TYPE(*NAME) LEN(10) DFT(*CPP) + SPCVAL((*CPP)) PROMPT('Reference program + for messages') //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JCMPLIBPC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Claudio Neroni 24-06-1994 Creato. */ /* Compare libraries. Print */ /* */ PGM PARM(&FRMCOLQ &TOCOLQ &FRMDAT &FRMTIM + &CMPCRI &REFPGM) /* Riceve Collezione dati delle Librerie from. */ DCL VAR(&FRMCOLQ) TYPE(*CHAR) LEN(20) /* Riceve Collezione dati delle Librerie to. */ DCL VAR(&TOCOLQ) TYPE(*CHAR) LEN(20) /* Riceve Data di partenza. */ DCL VAR(&FRMDAT) TYPE(*CHAR) LEN(7) /* Riceve Ora di partenza. */ DCL VAR(&FRMTIM) TYPE(*CHAR) LEN(6) /* Riceve Criteri di comparazione. */ DCL VAR(&CMPCRI) TYPE(*CHAR) LEN(16) /* Riceve Programma di riferimento per i messaggi. */ DCL VAR(&REFPGM) TYPE(*CHAR) LEN(10) DCL VAR(&FRMLIB1) TYPE(*CHAR) LEN(10) DCL VAR(&FRMLIB2) TYPE(*CHAR) LEN(10) DCL VAR(&TOLIB1) TYPE(*CHAR) LEN(10) DCL VAR(&TOLIB2) TYPE(*CHAR) LEN(10) DCL VAR(&CMPCRI1) TYPE(*CHAR) LEN(7) DCL VAR(&CMPCRI2) TYPE(*CHAR) LEN(7) DCL VAR(&CRT) TYPE(*LGL) VALUE('0') DCL VAR(&SRC) TYPE(*LGL) VALUE('0') DCL VAR(&FRMCOL) TYPE(*CHAR) LEN(10) DCL VAR(&FRMCOLL) TYPE(*CHAR) LEN(10) DCL VAR(&TOCOL) TYPE(*CHAR) LEN(10) DCL VAR(&TOCOLL) TYPE(*CHAR) LEN(10) /* Numero di criteri ricevuti. */ DCL VAR(&CMPCRI§) TYPE(*DEC) LEN(5) /* Definisce il file prototipo e il relativo level check. */ DCL VAR(&PROTO) TYPE(*CHAR) LEN(10) VALUE(JCMPLIB1) DCL VAR(&LVLCHKPR) TYPE(*CHAR) LEN(13) /* Definisce il level check del preesistente file from. */ DCL VAR(&LVLCHKFR) TYPE(*CHAR) LEN(13) /* Definisce il level check del preesistente file to. */ DCL VAR(&LVLCHKTO) TYPE(*CHAR) LEN(13) /* Prenotazione del CPF0001. */ DCL VAR(&CPF0001) TYPE(*LGL) /* Intercetta tutti gli errori saltando a fine con errore. */ MONMSG MSGID(CPF0000 MCH0000 CEE0000) EXEC(GOTO + CMDLBL(ERRORE)) /* Estrae parametri. */ CHGVAR VAR(&FRMCOL) VALUE(%SST(&FRMCOLQ 1 10)) CHGVAR VAR(&FRMCOLL) VALUE(%SST(&FRMCOLQ 11 10)) CHGVAR VAR(&TOCOL) VALUE(%SST(&TOCOLQ 1 10)) CHGVAR VAR(&TOCOLL) VALUE(%SST(&TOCOLQ 11 10)) /* Interpreta il numero di parametri ricevuti. */ CHGVAR VAR(&CMPCRI§) VALUE(%BIN(&CMPCRI 1 2)) /* Se il numero dei criteri e' 1 o maggiore, estrae il primo criterio. */ IF COND(&CMPCRI§ *GE 1) THEN(DO) CHGVAR VAR(&CMPCRI1) VALUE(%SST(&CMPCRI 3 7)) ENDDO /* Se il numero dei criteri e' 2 o maggiore, estrae il secondo criterio. */ IF COND(&CMPCRI§ *GE 2) THEN(DO) CHGVAR VAR(&CMPCRI2) VALUE(%SST(&CMPCRI 10 7)) ENDDO /* Se richiesto il criterio "data di creazione", lo annota. */ IF COND((&CMPCRI1 *EQ *CRTDAT) *OR (&CMPCRI2 + *EQ *CRTDAT)) THEN(CHGVAR VAR(&CRT) + VALUE('1')) /* Se richiesto il criterio "data del sorgente", lo annota. */ IF COND((&CMPCRI1 *EQ *SRCDAT) *OR (&CMPCRI2 + *EQ *SRCDAT)) THEN(CHGVAR VAR(&SRC) + VALUE('1')) /* Se richiesto *CPP (Command Processing Program) come programma */ /* di riferimento dei messaggi, assume il nome del programma corrente. */ IF COND(&REFPGM *EQ *CPP) THEN(DO) JCALLER CALLER(&REFPGM) KINSHIP(*FATHER) ENDDO /* Recupera il level check del prototipo. */ JRTVFD FILE(&PROTO) LVLCHK(&LVLCHKPR) /* Controlla la lista from. */ DOUNTIL COND('1') /* Se la libreria della lista from non esiste, segnala. */ CHKOBJ OBJ(&FRMCOLL) OBJTYPE(*LIB) MONMSG MSGID(CPF0000) EXEC(DO) SNDPGMMSG MSGID(JCL0201) MSGF(JCMPLIB) + MSGDTA(&FRMCOLL) TOPGMQ(*PRV (&REFPGM)) + MSGTYPE(*DIAG) CHGVAR VAR(&CPF0001) VALUE('1') LEAVE ENDDO /* Se il file della lista from non esiste, segnala. */ CHKOBJ OBJ(&FRMCOLL/&FRMCOL) OBJTYPE(*FILE) MONMSG MSGID(CPF0000) EXEC(DO) SNDPGMMSG MSGID(JCL0202) MSGF(JCMPLIB) MSGDTA(&FRMCOLL + *CAT &FRMCOL) TOPGMQ(*PRV (&REFPGM)) + MSGTYPE(*DIAG) CHGVAR VAR(&CPF0001) VALUE('1') LEAVE ENDDO /* Recupera il level check del file della lista from. */ JRTVFD FILE(&FRMCOL) LIB(&FRMCOLL) LVLCHK(&LVLCHKFR) /* Se il level check del file della lista from e' diverso dal prototipo, */ /* segnala. */ IF COND(&LVLCHKFR *NE &LVLCHKPR) THEN(DO) SNDPGMMSG MSGID(JCL0203) MSGF(JCMPLIB) MSGDTA(&FRMCOLL + *CAT &FRMCOL) TOPGMQ(*PRV (&REFPGM)) + MSGTYPE(*DIAG) CHGVAR VAR(&CPF0001) VALUE('1') LEAVE ENDDO /* Controlla la lista from. */ ENDDO /* Controlla la lista to. */ DOUNTIL COND('1') /* Se la libreria della lista to non esiste, segnala. */ CHKOBJ OBJ(&TOCOLL) OBJTYPE(*LIB) MONMSG MSGID(CPF0000) EXEC(DO) SNDPGMMSG MSGID(JCL0211) MSGF(JCMPLIB) + MSGDTA(&TOCOLL) TOPGMQ(*PRV (&REFPGM)) + MSGTYPE(*DIAG) CHGVAR VAR(&CPF0001) VALUE('1') LEAVE ENDDO /* Se il file della lista to non esiste, segnala. */ CHKOBJ OBJ(&TOCOLL/&TOCOL) OBJTYPE(*FILE) MONMSG MSGID(CPF0000) EXEC(DO) SNDPGMMSG MSGID(JCL0212) MSGF(JCMPLIB) MSGDTA(&TOCOLL + *CAT &TOCOL) TOPGMQ(*PRV (&REFPGM)) + MSGTYPE(*DIAG) CHGVAR VAR(&CPF0001) VALUE('1') LEAVE ENDDO /* Recupera il level check del file della lista to. */ JRTVFD FILE(&TOCOL) LIB(&TOCOLL) LVLCHK(&LVLCHKTO) /* Se il level check del file della lista to e' diverso dal prototipo, */ /* segnala. */ IF COND(&LVLCHKTO *NE &LVLCHKPR) THEN(DO) SNDPGMMSG MSGID(JCL0213) MSGF(JCMPLIB) MSGDTA(&TOCOLL + *CAT &TOCOL) TOPGMQ(*PRV (&REFPGM)) + MSGTYPE(*DIAG) CHGVAR VAR(&CPF0001) VALUE('1') LEAVE ENDDO /* Controlla la lista to. */ ENDDO /* Se diagnosticato errore, salta a rilascio. */ IF COND(&CPF0001) THEN(GOTO CMDLBL(CPF0001)) /* Estrae i nomi delle librerie dai file di collezione. */ OVRDBF FILE(QADSPOBJ) TOFILE(&FRMCOLL/&FRMCOL) CALL PGM(JCMPLIBE) PARM(&FRMLIB1 &FRMLIB2) OVRDBF FILE(QADSPOBJ) TOFILE(&TOCOLL/&TOCOL) CALL PGM(JCMPLIBE) PARM(&TOLIB1 &TOLIB2) DLTOVR FILE(*ALL) /* Ordina e stampa le informazioni raccolte. */ OVRDBF FILE(JCMPLIB1) TOFILE(&FRMCOLL/&FRMCOL) + SHARE(*YES) OPNQRYF FILE((QTEMP/JCMPLIB1)) KEYFLD((ODOBNM) + (ODOBTP) (ODOBAT) (ODSRCM)) OVRDBF FILE(JCMPLIB2) TOFILE(&TOCOLL/&TOCOL) + SHARE(*YES) OPNQRYF FILE((QTEMP/JCMPLIB2)) KEYFLD((ODOBNM) + (ODOBTP) (ODOBAT) (ODSRCM)) OVRPRTF FILE(QPRINT) PAGESIZE(66 220) SPLFNAME(JCMPLIB) CALL PGM(JCMPLIBS) PARM(&FRMLIB1 &FRMLIB2 &TOLIB1 + &TOLIB2 &FRMDAT &FRMTIM &CRT &SRC) /* Visualizza la stampa. */ DSPSPLF FILE(JCMPLIB) SPLNBR(*LAST) /* Attivitä finali. */ RCLRSC: /* Riacquisisce le risorse. */ RCLRSC MONMSG MSGID(CPF0000 MCH0000) /* Dealloca. */ /* ... */ /* Cancella i file di lavoro. */ /* ... */ /* Pulisce il messaggio di stato. */ SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) TOPGMQ(*EXT) + MSGTYPE(*STATUS) MONMSG MSGID(CPF0000 MCH0000) /* Se richiesto, rilascia il CPF0001. */ IF COND(&CPF0001) THEN(DO) SNDPGMMSG MSGID(CPF0001) MSGF(QCPFMSG) + MSGDTA(JCMPLIB ) MSGTYPE(*ESCAPE) MONMSG MSGID(CPF0000 MCH0000) ENDDO /* Ritorna. */ RETURN /* Errore. */ ERRORE: /* Restituisce i messaggi al chiamante, */ /* trasformando eventuali escape in diagnostici. */ JRSNMSG MONMSG MSGID(CPF0000 MCH0000) /* Prenotazione del CPF0001. */ CPF0001: /* Prenota il CPF0001. */ CHGVAR VAR(&CPF0001) VALUE('1') MONMSG MSGID(CPF0000 MCH0000) /* Salta ad Attivitä finali. */ GOTO CMDLBL(RCLRSC) ENDPGM //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JCMPLIBPG) FILETYPE(*SRC) ENDCHAR('//ENDSRC') :PNLGRP. .*--------------------------------------------------------------------- :HELP NAME=CMD. :H3.Comando JCMPLIBP :H2.Compare Libraries Print :H2.Stampa la comparazione del contenuto di due librerie FROM con il contenuto di due librerie TO :P.DA SCRIVERE... :EHELP. .*--------------------------------------------------------------------- :EPNLGRP. //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JCMPLIBS) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Claudio Neroni 24-06-1994 Creato. * Compare libraries. Print * FJCMPLIB1 IP AE DISK F RENAME(QLIDOBJD:R1) FJCMPLIB2 IS AE DISK F RENAME(QLIDOBJD:R2) FQPRINT O F 220 PRINTER OFLIND(*INOF) *------------------------------------------------------------------- D L S 1 DIM(4) Librerie 1234 *------------------------------------------------------------------- D O1 DS D O1C 1 1 D O1Y 2 3 D O1M 4 5 D O1D 6 7 D O1T 8 13 D O1CYMD 1 7 D O2 DS D O2C 1 1 D O2Y 2 3 D O2M 4 5 D O2D 6 7 D O2T 8 13 D O2CYMD 1 7 D PP DS D PPD 1 7 D PPT 8 13 D O1CDAT DS D D1M 1 2 D D1D 3 4 D D1Y 5 6 D O2CDAT DS D D2M 1 2 D D2D 3 4 D D2Y 5 6 D S1 DS D S1C 1 1 D S1YMD 2 7 D S1T 8 13 D S1CYMD 1 7 D S2 DS D S2C 1 1 D S2YMD 2 7 D S2T 8 13 D S2CYMD 1 7 *------------------------------------------------------------------- IR1 01 * Spec RPG ridenom campi file QADSPOBJ record QLIDOBJD I ODDCEN O1DCEN I ODDDAT O1DDAT I ODDTIM O1DTIM I ODLBNM O1LBNM I ODOBNM L1M4 I ODOBTP L1M3 I ODOBAT L1M2 I ODOBFR O1OBFR I ODOBSZ O1OBSZ I ODOBTX O1OBTX I ODOBLK O1OBLK I ODOBDM O1OBDM I ODCCEN O1CCEN I ODCDAT O1CDAT I ODCTIM O1CTIM I ODOBOW O1OBOW I ODSCEN O1SCEN I ODSDAT O1SDAT I ODSTIM O1STIM I ODSCMD O1SCMD I ODSSZE O1SSZE I ODSSLT O1SSLT I ODSDEV O1SDEV I ODSV01 O1SV01 I ODSV02 O1SV02 I ODSV03 O1SV03 I ODSV04 O1SV04 I ODSV05 O1SV05 I ODSV06 O1SV06 I ODSV07 O1SV07 I ODSV08 O1SV08 I ODSV09 O1SV09 I ODSV10 O1SV10 I ODSVMR O1SVMR I ODRCEN O1RCEN I ODRDAT O1RDAT I ODRTIM O1RTIM I ODCPFL O1CPFL I ODSRCF O1SRCF I ODSRCL O1SRCL I*** ODSRCM O1SRCM I ODSRCM L1M1 I ODSRCC O1SRCC I ODSRCD O1SRCD I ODSRCT O1SRCT I ODCMNM O1CMNM I ODCMVR O1CMVR I ODOBLV O1OBLV I ODUMOD O1UMOD I ODPPNM O1PPNM I ODPPVR O1PPVR I ODPCNR O1PCNR I ODAPAR O1APAR I ODSSQN O1SSQN I ODLCEN O1LCEN I ODLDAT O1LDAT I ODLTIM O1LTIM I ODSFIL O1SFIL I ODSFLB O1SFLB I ODASP O1ASP I ODLBL O1LBL I ODPTFN O1PTFN I ODOBSY O1OBSY I ODCRTU O1CRTU I ODCRTS O1CRTS I ODUUPD O1UUPD I ODUCEN O1UCEN I ODUDAT O1UDAT I ODUCNT O1UCNT I ODTCEN O1TCEN I ODTDAT O1TDAT I ODODMN O1ODMN I ODCPVR O1CPVR I ODCVRM O1CVRM I ODPVRM O1PVRM I ODCPRS O1CPRS I ODOASP O1OASP I ODAAPI O1AAPI I ODAPIC O1APIC I ODUATR O1UATR I ODACEN O1ACEN I ODADAT O1ADAT I ODATIM O1ATIM IR2 02 * Spec RPG ridenom campi file QADSPOBJ record QLIDOBJD I ODDCEN O2DCEN I ODDDAT O2DDAT I ODDTIM O2DTIM I ODLBNM O2LBNM I ODOBNM L1M4 I ODOBTP L1M3 I ODOBAT L1M2 I ODOBFR O2OBFR I ODOBSZ O2OBSZ I ODOBTX O2OBTX I ODOBLK O2OBLK I ODOBDM O2OBDM I ODCCEN O2CCEN I ODCDAT O2CDAT I ODCTIM O2CTIM I ODOBOW O2OBOW I ODSCEN O2SCEN I ODSDAT O2SDAT I ODSTIM O2STIM I ODSCMD O2SCMD I ODSSZE O2SSZE I ODSSLT O2SSLT I ODSDEV O2SDEV I ODSV01 O2SV01 I ODSV02 O2SV02 I ODSV03 O2SV03 I ODSV04 O2SV04 I ODSV05 O2SV05 I ODSV06 O2SV06 I ODSV07 O2SV07 I ODSV08 O2SV08 I ODSV09 O2SV09 I ODSV10 O2SV10 I ODSVMR O2SVMR I ODRCEN O2RCEN I ODRDAT O2RDAT I ODRTIM O2RTIM I ODCPFL O2CPFL I ODSRCF O2SRCF I ODSRCL O2SRCL I*** ODSRCM O2SRCM I ODSRCM L1M1 I ODSRCC O2SRCC I ODSRCD O2SRCD I ODSRCT O2SRCT I ODCMNM O2CMNM I ODCMVR O2CMVR I ODOBLV O2OBLV I ODUMOD O2UMOD I ODPPNM O2PPNM I ODPPVR O2PPVR I ODPCNR O2PCNR I ODAPAR O2APAR I ODSSQN O2SSQN I ODLCEN O2LCEN I ODLDAT O2LDAT I ODLTIM O2LTIM I ODSFIL O2SFIL I ODSFLB O2SFLB I ODASP O2ASP I ODLBL O2LBL I ODPTFN O2PTFN I ODOBSY O2OBSY I ODCRTU O2CRTU I ODCRTS O2CRTS I ODUUPD O2UUPD I ODUCEN O2UCEN I ODUDAT O2UDAT I ODUCNT O2UCNT I ODTCEN O2TCEN I ODTDAT O2TDAT I ODODMN O2ODMN I ODCPVR O2CPVR I ODCVRM O2CVRM I ODPVRM O2PVRM I ODCPRS O2CPRS I ODOASP O2OASP I ODAAPI O2AAPI I ODAPIC O2APIC I ODUATR O2UATR I ODACEN O2ACEN I ODADAT O2ADAT I ODATIM O2ATIM *------------------------------------------------------------------- C L1 DO B01 C MOVEL *BLANK O1 01 C MOVEL *BLANK O2 01 C MOVEL *BLANK S1 01 C MOVEL *BLANK S2 01 C MOVEL *BLANK ODOBTX 01 C *LIKE DEFINE O1OBTX ODOBTX 01 C MOVEL *BLANK U1 01 C MOVEL *BLANK U2 01 C MOVEL *BLANK A1 01 C MOVEL *BLANK A2 01 C MOVEL *BLANK L 01 C ENDDO E01 C 01 DO B01 C SETON 51 01 C MOVEL O1CCEN O1C 01 C MOVEL D1Y O1Y 01 C MOVEL D1M O1M 01 C MOVEL D1D O1D 01 C MOVEL O1CTIM O1T 01 C MOVEL O1SRCC S1C 01 C MOVEL O1SRCD S1YMD 01 C MOVEL O1SRCT S1T 01 C MOVEL O1CRTU U1 01 C *LIKE DEFINE O1CRTU U1 01 C MOVEL O1UATR A1 01 C *LIKE DEFINE O1UATR A1 01 C MOVEL O1OBTX ODOBTX 01 C O1LBNM IFEQ FRLIB1 B02 C MOVEL '1' L(1) 02 C ENDIF E02 C O1LBNM IFEQ FRLIB2 B02 C MOVEL '2' L(2) 02 C ENDIF E02 C ENDDO E01 C 02 DO B01 C SETON 51 01 C MOVEL O2CCEN O2C 01 C MOVEL D2Y O2Y 01 C MOVEL D2M O2M 01 C MOVEL D2D O2D 01 C MOVEL O2CTIM O2T 01 C MOVEL O2SRCC S2C 01 C MOVEL O2SRCD S2YMD 01 C MOVEL O2SRCT S2T 01 C MOVEL O2CRTU U2 01 C *LIKE DEFINE O2CRTU U2 01 C MOVEL O2UATR A2 01 C *LIKE DEFINE O2UATR A2 01 C ODOBTX IFEQ *BLANK B02 C MOVEL O2OBTX ODOBTX 02 C ENDIF E02 C O2LBNM IFEQ TOLIB1 B02 C MOVEL '3' L(3) 02 C ENDIF E02 C O2LBNM IFEQ TOLIB2 B02 C MOVEL '4' L(4) 02 C ENDIF E02 C ENDDO E01 CL1 51O1 IFGE PP B01 CL1 O2 ORGE PP 01 CL1 EXSR T1 01 CL1 ENDIF E01 CLR EXCEPT $LR *------------------------------------------------------------------- C T1 BEGSR * Assume di non stampare il soggetto. C SETOFF 53 * Se non sono richiesti criteri, stamperä. C CRT IFEQ *OFF B01 C SRC ANDEQ *OFF 01 C SETON 53 01 C ENDIF E01 * Se non ancora prenotata stampa * e se richiesto criterio tempo creazione, * se tempo creazione diverso, stamperä. C N53CRT IFEQ *ON B01 C O1 IFNE O2 B02 C SETON 53 02 C ENDIF E02 C ENDIF E01 * Se non ancora prenotata stampa * e se richiesto criterio tempo sorgente, * se tempo sorgente diverso, stamperä. C N53SRC IFEQ *ON B01 C O1SRCC IFNE O2SRCC B02 C O1SRCD ORNE O2SRCD 02 C O1SRCT ORNE O2SRCT 02 C SETON 53 02 C ENDIF E02 C ENDIF E01 * Se l'oggetto e' presente in entrambe le librerie from * o in entrambe le librerie to, stamperä. C N53L(1) IFNE *BLANK B01 C L(2) ANDNE *BLANK 01 C L(3) ORNE *BLANK 01 C L(4) ANDNE *BLANK 01 C SETON 53 01 C ENDIF E01 * Se l'oggetto ha le iniziali usate dalla rinominazione * automatica di questa medesima utility, non lo stampa. C 53 MOVEL ODOBNM $4 4 C 53$4 COMP '§DU9' 5353 * Se prenotata stampa, prepara i dati alla stampa. C *IN53 IFEQ *ON B01 C OF EXCEPT $I1 01 C OF SETOFF OF 01 C O2 IFEQ O1 B02 C O2 ANDNE *BLANK 02 C MOVEL(P) '= =' O2 02 C ENDIF E02 C S2 IFEQ S1 B02 C S2 ANDNE *BLANK 02 C MOVEL(P) '= =' S2 02 C ENDIF E02 C U2 IFEQ U1 B02 C U2 ANDNE *BLANK 02 C MOVEL(P) '=' U2 02 C ENDIF E02 C A2 IFEQ A1 B02 C A2 ANDNE *BLANK 02 C MOVEL(P) '=' A2 02 C ENDIF E02 C if a1 <> *blank or a2 <> *blank B02 C eval a1 = %trim(a1)+' '+%trim(a2) 02 C endif E02 C EXCEPT $T1 01 C seton 66 01 C ENDIF E01 C ENDSR *------------------------------------------------------------------- * Inizializza. C *INZSR BEGSR C *ENTRY PLIST C PARM FRLIB1 10 C PARM FRLIB2 10 C PARM TOLIB1 10 C PARM TOLIB2 10 C PARM FRMDAT 7 C PARM FRMTIM 6 C PARM CRT 1 C PARM SRC 1 C MOVEL CRT *IN61 C MOVEL SRC *IN62 C FRMDAT IFEQ *ZERO B01 C MOVEL *BLANK FRMDAT 01 C ENDIF E01 C FRMTIM IFEQ *ZERO B01 C MOVEL *BLANK FRMTIM 01 C ENDIF E01 C MOVEL FRMDAT PPD C MOVEL FRMTIM PPT C MOVEL *ALL'-' TRA 198 C TIME TIME 12 0 C EXCEPT $I1 C ENDSR *------------------------------------------------------------------- OQPRINT E $I1 1 02 O 'Compara librerie' O + 2 'Librerie From:' O FRLIB1 + 1 O FRLIB2 + 1 O + 2 'Librerie To:' O TOLIB1 + 1 O TOLIB2 + 1 O + 2 'Da data/ora creazione:' O FRMDAT + 1 O FRMTIM + 1 O + 2 'Criteri:' O N61 62 141 'T' O N61 62 'empo sorgente diverso ' O 61N62 141 'T' O 61N62 'empo creazione diverso ' O N61N62 141 'N' O N61N62 'essuno ' O 61 62 141 'T' O 61 62 'empo crt o src diverso ' O TIME 185 '0 : : & / / ' O + 2 'Pag' O PAGE O E $I1 1 O TRA O E $I1 1 O 4 'Prog' O 6 'O' O 'ggetto' O 17 'T' O 'ipo' O 26 'A' O 'ttributo' O 37 'M' O 'embroSrc' O 48 'M' O 'odAttr' O 59 'D' O 'escrizione oggetto' O 117 'T' O 'empo creazione' O 149 'T' O 'empo sorgente' O 178 'P' O 'rogrammatore' O 196 'L' O 'ibr' O E $I1 0 O 110 '_' O '_____________' O 125 '_' O '_____________' O 142 '_' O '_____________' O 157 '_' O '_____________' O 174 '_' O '_________' O 185 '_' O '_________' O E $I1 2 O 110 ' ' O ' From ' O 125 ' ' O ' To ' O 142 ' ' O ' From ' O 157 ' ' O ' To ' O 174 ' ' O ' From ' O 185 ' ' O ' To ' O E $T1 1 O PAGE1 O ODOBNM + 1 O ODOBTP + 1 O ODOBAT + 1 O ODSRCM + 1 O A1 + 1 O ODOBTX + 1 O O1CYMD + 1 O O1T + 1 O O2CYMD + 1 O O2T + 1 O S1CYMD + 3 O S1T + 1 O S2CYMD + 1 O S2T + 1 O U1 + 3 O U2 + 1 O L + 1 O E N66 $LR 1 O '*** Nessun dato + O da stampare ***' O E $LR 1 O '*** Fine stampa ***' *------------------------------------------------------------------- //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JCMPLIBT) FILETYPE(*SRC) ENDCHAR('//ENDSRC') CMD PROMPT('Compare libraries to') PARM KWD(LIB) TYPE(*NAME) LEN(10) SPCVAL((*NONE)) + MIN(1) MAX(2) PROMPT('To libraries group') PARM KWD(OUTFILE) TYPE(OUTFILE) PROMPT('To data + collection outfile') OUTFILE: QUAL TYPE(*NAME) DFT(JCMPLIBTO) QUAL TYPE(*NAME) DFT(QTEMP) PROMPT('Library') PARM KWD(REFPGM) TYPE(*NAME) LEN(10) DFT(*CPP) + SPCVAL((*CPP)) PROMPT('Reference program + for messages') PARM KWD(FROMFLAG) TYPE(*LGL) CONSTANT('0') //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JCMPLIBTG) FILETYPE(*SRC) ENDCHAR('//ENDSRC') :PNLGRP. :IMPORT NAME='*' PNLGRP=JPNL. .*------------------------------------------------------------------------------ :HELP NAME=CMD. :H3.Comando JCMPLIBT :H2.Compare Libraries To :P.Colleziona info da librerie To per comparazione librerie. :NOTE. I comandi :HP2.JCMPLIBF:EHP2. "Compare Libraries From" e :HP2.JCMPLIBT:EHP2. "Compare Libraries To" utilizzano lo stesso command processing program che prepara un file informativo sul contenuto di un gruppo di librerie. Il file informativo ricavato dal primo comando (librerie "From") verra' in seguito comparato con il file informativo ricavato dal secondo comando (librerie "To") tramite il comando conclusivo :HP2.JCMPLIBP:EHP2. "Compare Libraries Print". :ENOTE. :NOTE. Il comando :HP2.JCMPLIBF:EHP2. "Compare Libraries From" puo' essere usato anche come generatore delle informazioni da usare nel comando :HP2.JRAS:EHP2. "Retrieve All Sources" di valutazione e ricostruzione dell'insieme dei sorgenti degli oggetti presenti nel gruppo di librerie richiesto. :ENOTE. :P.Il file di emissione del presente comando ha il tracciato del :HP2.DSPOBJD:EHP2. "Display Object Description" ma, mancando da questo outfile le informazioni sui sorgenti degli oggetti ILE, esse vengono reperite tramite i comandi :HP2.JMOD:EHP2. "List embedded modules" e :HP2.JMRG:EHP2. "Merge Object Info". Il record di object description che fotografa l'oggetto ile viene ripetuto piu' volte: ogni record programma dotato di moduli viene duplicato tante volte quanti sono i moduli referenziati dal programma stesso. Ogni record porta le informazioni sorgenti relative ad un solo modulo. :XMP. I campi completati per i programmi con moduli sono i seguenti. :HP2. CAMPI MODIFICATI CAMPI DI PROVENIENZA MODIFICHE SU DESCRIZIONE OGGETTI DA DESCRIZIONE MODULI :EHP2. ----------------------- ----------------------------------- ODSRCF SourceFile MOSRCF SourceFile ODSRCL SourceLibrary MOSRCL SourceLibrary ODSRCM SourceMember MOSRCM SourceMember ODSRCC ChgSourceCentury %subst(MOSRCD:1:1) ChgSourceCentury ODSRCD ChgSourceDate %subst(MOSRCD:2:6) ChgSourceDate ODSRCT ChgSourceTime %subst(MOSRCD:8:6) ChgSourceTime ODUATR UserAttribute MOATTR ModuleAttribute :EXMP. :P.Per differenziare i file fisici sorgente dai file fisici dati il comando raccoglie l'informazione S=Source / D=Data da un display file description dei file fisici. :XMP. I campi completati per i file fisici sono i seguenti. :HP2. CAMPI MODIFICATI CAMPI DI PROVENIENZA MODIFICHE SU DESCRIZIONE OGGETTI DA DESCRIZIONE *BASATR FILE FISICI :EHP2. ----------------------- ---------------------------------- ODDCEN DspDateCentury ATDTAT File type: D=*DATA, S=*SRC :EXMP. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/lib'. :H3.Library Group (LIB) :P.Elenco delle librerie dalle quali estrarre informazioni. :P.Valori permessi: :PARML. :PT.nome-libreria :PD.E' obbligatorio almeno un valore. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/outfile'. :H3.Output file (OUTFILE) - file :P.Nome del file AS400 destinato a contenere la collezione dati dalle librerie "To". :P.Se il file ricevente preesiste, viene prima cancellato e poi ricreato. :P.Valori permessi: :PARML. :PT.:PK DEF.JCMPLIBTO:EPK. :PD.Nome di difetto del file di emissione. :PT.nome-file-di-emissione :PD.Il file di emissione prende il nome richiesto. :EPARML. :H3.Output file (OUTFILE) - library :P.Nome della libreria in cui risiede il file di emissione. :P.Valori permessi: :PARML. :PT.:PK DEF.QTEMP:EPK. :PD.Il file di emissione viene creato in libreria temporanea. :PT.nome-libreria :PD.Il file di emissione viene creato nella libreria richiesta. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/refpgm'. :IMHELP NAME='refpgm'. :EHELP. .*------------------------------------------------------------------------------ :HELP NAME='CMD/COMMAND/EXAMPLES'. Esempi per JCMPLIBT :XH3.Esempi per JCMPLIBT :P.:HP2.Esempio 1: Restituisce nel file JCMPLIBTO della libreria QTEMP l'elenco degli oggetti presenti nelle librerie UFNEROTRE e UFNEROSEI completato con le informazioni sorgente riguardante i moduli ILE e con il tipo file quando si tratta di file fisici.:EHP2. :XMP. Con i soli parametri necessari: JCMPLIBT LIB(UFNEROTRE UFNEROSEI) Anche con i parametri di default: JCMPLIBT LIB(UFNEROTRE UFNEROSEI) OUTFILE(QTEMP/JCMPLIBTO) REFPGM(*CPP) :EXMP. :P.Questo comando permette di estrarre le info riguardanti gli oggetti delle librerie richieste nel file di emissione di default. :P.:HP2.Esempio 2: Restituisce nel file SCIOPA della libreria UFNERONI l'elenco degli oggetti presenti nella libreria NERONI2 completato con le informazioni sorgente riguardante i moduli ILE e con il tipo file quando si tratta di file fisici.:EHP2. :XMP. JCMPLIBT LIB(NERONI2) OUTFILE(UFNERONI/SCIOPA) :EXMP. :P.Questo comando permette di estrarre le info riguardanti gli oggetti della libreria richiesta nel file di emissione in una libreria diversa dalla temporanea e con un nome di fantasia. :EHELP. .*------------------------------------------------------------------------------ :HELP NAME='CMD/ERROR/MESSAGES'. .*--------------------- :XH3.Messaggi informativi e di completamento :P.:HP3.Messaggi *INFO e *COMP:EHP3. :DL COMPACT. :DT.JCLA003 :DD.&MSG(JCLA003,JCMPLIB,*LIBL,nosub). :DT.JCL0191 :DD.&MSG(JCL0191,JCMPLIB,*LIBL,nosub). :DT.JCL0131 :DD.&MSG(JCL0131,JCMPLIB,*LIBL,nosub). :DT.JCL0132 :DD.&MSG(JCL0132,JCMPLIB,*LIBL,nosub). :EDL. .*--------------------- :XH3.Messaggi di stato :P.:HP3.Messaggi *STATUS:EHP3. :DL COMPACT. :DT.JCL0111 :DD.&MSG(JCL0111,JCMPLIB,*LIBL,nosub). :DT.JCL0112 :DD.&MSG(JCL0112,JCMPLIB,*LIBL,nosub). :EDL. .*--------------------- :XH3.Messaggi di errore :P.:HP3.Messaggi *DIAG seguiti da *ESCAPE CPF0001:EHP3. :DL COMPACT. :DT.JCL0101 :DD.&MSG(JCL0101,JCMPLIB,*LIBL,nosub). :DT.JCL0102 :DD.&MSG(JCL0102,JCMPLIB,*LIBL,nosub). :EDL. .*--------------------- :EHELP. .*------------------------------------------------------------------------------ :EPNLGRP. //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JCMPLIBX) FILETYPE(*SRC) ENDCHAR('//ENDSRC') A R QWHFDBAS FORMAT(QAFDBASI) A K ATLIB A K ATFILE //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JCMPLIB1) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Claudio Neroni 13-04-2016 Creato. * Compare libraries. DspObjD LIB-OBJ-TYP-SRCM * Compara librerie. Descrizione oggetti * Output File for DSPOBJD CN01 * Claudio Neroni 17-05-2016 Modificato. CN01 * Aggiunto campo chiave per sopportare la chiave unica CN01 * quando il record di un programma con moduli nel cmd JMRG CN01 * viene moltiplicato per il numero dei suoi moduli, CN01 * un record per modulo. A UNIQUE A R QLIDOBJD FORMAT(QADSPOBJ) A K ODLBNM A K ODOBNM A K ODOBTP CN01+A K ODSRCM //ENDSRC //ENDBCHJOB