//BCHJOB JOB(JSRCLST) 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: "S65D69DA" */ /* From Library: "NERONI2" */ /* Unload Time: 2016-08-01 11:05 */ /* To File : "JSRCLST" */ /* To Library : "NERONI2" */ /* To Text : "Source list. 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 "JSRCLST.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:\JSRCLST.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JSRCLST.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(JSRCLST) 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/JSRCLST" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JSRCLST) MBR(JSRCLST.) 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/JSRCLST) CRTSRCPF FILE(NERONI2/JSRCLST) RCDLEN(112) + TEXT('Source list. Src') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSRCLST) TOFILE(NERONI2/JSRCLST) + TOMBR(JSRCLST) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSRCLST) MBR(JSRCLST) + SRCTYPE(CMD) + TEXT('Source list. Crt. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSRCLST.) TOFILE(NERONI2/JSRCLST) + TOMBR(JSRCLST.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSRCLST) MBR(JSRCLST.) + SRCTYPE(CL) + TEXT('Source list. CrtJs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSRCLSTC) TOFILE(NERONI2/JSRCLST) + TOMBR(JSRCLSTC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSRCLST) MBR(JSRCLSTC) + SRCTYPE(CLLE) + TEXT('Source list. Crt. Cpp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSRCLSTD) TOFILE(NERONI2/JSRCLST) + TOMBR(JSRCLSTD) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSRCLST) MBR(JSRCLSTD) + SRCTYPE(RPGLE) + TEXT('Source list. Crt. DltLibInfo') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSRCLSTL) TOFILE(NERONI2/JSRCLST) + TOMBR(JSRCLSTL) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSRCLST) MBR(JSRCLSTL) + SRCTYPE(CMD) + TEXT('Source list. Libl. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSRCLSTL.S) TOFILE(NERONI2/JSRCLST) + TOMBR(JSRCLSTL.S) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSRCLST) MBR(JSRCLSTL.S) + SRCTYPE(CL) + TEXT('Source list. Submit JSRCLSTL *ALL REFALL') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSRCLSTLC) TOFILE(NERONI2/JSRCLST) + TOMBR(JSRCLSTLC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSRCLST) MBR(JSRCLSTLC) + SRCTYPE(CLLE) + TEXT('Source list. Libl. Cpp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSRCLSTLD) TOFILE(NERONI2/JSRCLST) + TOMBR(JSRCLSTLD) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSRCLST) MBR(JSRCLSTLD) + SRCTYPE(RPGLE) + TEXT('Source list. Libl. WrtLibl') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSRCLSTLP) TOFILE(NERONI2/JSRCLST) + TOMBR(JSRCLSTLP) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSRCLST) MBR(JSRCLSTLP) + SRCTYPE(PNLGRP) + TEXT('Source list. Libl. Help') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSRCLSTP) TOFILE(NERONI2/JSRCLST) + TOMBR(JSRCLSTP) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSRCLST) MBR(JSRCLSTP) + SRCTYPE(PNLGRP) + TEXT('Source list. Crt. Help') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSRCLSTQ) TOFILE(NERONI2/JSRCLST) + TOMBR(JSRCLSTQ) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSRCLST) MBR(JSRCLSTQ) + SRCTYPE(CMD) + TEXT('Source list. Qry. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSRCLSTQC) TOFILE(NERONI2/JSRCLST) + TOMBR(JSRCLSTQC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSRCLST) MBR(JSRCLSTQC) + SRCTYPE(CLLE) + TEXT('Source list. Qry. Cpp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSRCLSTQM) TOFILE(NERONI2/JSRCLST) + TOMBR(JSRCLSTQM) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSRCLST) MBR(JSRCLSTQM) + SRCTYPE(QMQRY) + TEXT('Source list. Qry. Dsp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSRCLSTQP) TOFILE(NERONI2/JSRCLST) + TOMBR(JSRCLSTQP) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSRCLST) MBR(JSRCLSTQP) + SRCTYPE(PNLGRP) + TEXT('Source list. Qry. Help') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSRCLSTX) TOFILE(NERONI2/JSRCLST) + TOMBR(JSRCLSTX) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSRCLST) MBR(JSRCLSTX) + SRCTYPE(CMD) + TEXT('Source list. Qry. Cmd Ipotesi di variante') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSRCLSTXC) TOFILE(NERONI2/JSRCLST) + TOMBR(JSRCLSTXC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSRCLST) MBR(JSRCLSTXC) + SRCTYPE(CLLE) + TEXT('Source list. Qry. Cpp Ipotesi di variante') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSRCLST1) TOFILE(NERONI2/JSRCLST) + TOMBR(JSRCLST1) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSRCLST) MBR(JSRCLST1) + SRCTYPE(PF) + TEXT('Source list. Crt. OutFile') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSRCLST10) TOFILE(NERONI2/JSRCLST) + TOMBR(JSRCLST10) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSRCLST) MBR(JSRCLST10) + SRCTYPE(LF) + TEXT('Source list. Crt. OutFile MBR FIL LIB SYS') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSRCLST11) TOFILE(NERONI2/JSRCLST) + TOMBR(JSRCLST11) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSRCLST) MBR(JSRCLST11) + SRCTYPE(LF) + TEXT('Source list. Crt. OutFile MBR FIL LIB UPD SYS') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSRCLST12) TOFILE(NERONI2/JSRCLST) + TOMBR(JSRCLST12) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSRCLST) MBR(JSRCLST12) + SRCTYPE(LF) + TEXT('Source list. Crt. OutFile MBR FIL UPD LIB SYS') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSRCLST13) TOFILE(NERONI2/JSRCLST) + TOMBR(JSRCLST13) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSRCLST) MBR(JSRCLST13) + SRCTYPE(LF) + TEXT('Source list. Crt. OutFile MBR UPD FIL LIB SYS') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSRCLST16) TOFILE(NERONI2/JSRCLST) + TOMBR(JSRCLST16) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSRCLST) MBR(JSRCLST16) + SRCTYPE(LF) + TEXT('Source list. Crt. OutFile UPD FIL LIB MBR SYS') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSRCLST17) TOFILE(NERONI2/JSRCLST) + TOMBR(JSRCLST17) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSRCLST) MBR(JSRCLST17) + SRCTYPE(LF) + TEXT('Source list. Crt. OutFile UPD FIL MBR LIB SYS') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSRCLST18) TOFILE(NERONI2/JSRCLST) + TOMBR(JSRCLST18) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSRCLST) MBR(JSRCLST18) + SRCTYPE(LF) + TEXT('Source list. Crt. OutFile UPD MBR FIL LIB SYS') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSRCLST19) TOFILE(NERONI2/JSRCLST) + TOMBR(JSRCLST19) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSRCLST) MBR(JSRCLST19) + SRCTYPE(LF) + TEXT('Source list. Crt. OutFile FIL LIB MBR UPD SYS') /*----------------------------------------------------------------------------*/ //DATA FILE(JSRCLST) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Claudio Neroni 26-02-2014 Creato. */ /* Source list. Cmd */ /* Lista i membri dei file sorgenti. */ /* */ CMD PROMPT('Source member list') PARM KWD(FROMLIB) TYPE(*NAME) LEN(10) + DFT(*USRLIBL) SPCVAL((*USRLIBL) (*LIBL) + (*ALLUSR) (*ALL) (*CURLIB) (*NONE)) + PROMPT('From Library') PARM KWD(OUTSRCLST) TYPE(OUTSRCLST) + PROMPT('Output Source List') OUTSRCLST: QUAL TYPE(*NAME) LEN(9) DFT(JSRCLSTT) QUAL TYPE(*NAME) DFT(REF.......) MIN(0) + PROMPT('Library') PARM KWD(MBROPT) TYPE(*CHAR) LEN(10) RSTD(*YES) + DFT(*REPLACE) VALUES(*REPLACE *ADD + *RPLLIB *NONE) + PROMPT('Replace/Add/ReplaceLib info') PARM KWD(TEXT) TYPE(*CHAR) LEN(42) DFT(*SAME) + SPCVAL((*SAME) (*FROMLIB) (*FROMLIBADD)) + PROMPT('Short text of Output file') PARM KWD(REFPGM) TYPE(*NAME) LEN(10) DFT(*CPP) + SPCVAL((*CPP)) PROMPT('Reference program + for messages') PARM KWD(RQS) TYPE(*CHAR) LEN(4) RSTD(*YES) + DFT(*YES) VALUES(*YES *NO) PROMPT('Sends + final message request') PARM KWD(RGZ) TYPE(*CHAR) LEN(5) RSTD(*YES) + DFT(*YES) VALUES(*YES *NO *ONLY) + PROMPT('Reorganize Output Source List') //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSRCLST.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JSRCLST.) JOBD(NERONI2/NERONI2) OUTQ(QPRINTS) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) CCSID(280) jmy /* Claudio Neroni 26-02-2014 Creato. */ /* JSRCLST */ /* Source list. */ /* Prerequisiti: JRSNMSG JDUPDB JRQT JDECCHA JRTVFD JCPYCLR */ /* Versione basata su dspfd *MBR. La precedente era su *MBRLIST */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella il file messaggi preesistente. */ DLTMSGF MSGF(NERONI2/JSRCLST) /* Cancella i testi d'aiuto preesistenti. */ DLTPNLGRP PNLGRP(NERONI2/JSRCLSTP) DLTPNLGRP PNLGRP(NERONI2/JSRCLSTQP) DLTPNLGRP PNLGRP(NERONI2/JSRCLSTLP) /* Cancella i logici preesistenti. */ DLTF FILE(NERONI2/JSRCLST10) DLTF FILE(NERONI2/JSRCLST11) DLTF FILE(NERONI2/JSRCLST12) DLTF FILE(NERONI2/JSRCLST13) DLTF FILE(NERONI2/JSRCLST16) DLTF FILE(NERONI2/JSRCLST17) DLTF FILE(NERONI2/JSRCLST18) DLTF FILE(NERONI2/JSRCLST19) /* Cancella i fisici preesistenti. */ DLTF FILE(NERONI2/JSRCLST1) /* Cancella i comandi preesistenti. */ DLTCMD CMD(NERONI2/JSRCLST) DLTCMD CMD(NERONI2/JSRCLSTQ) DLTCMD CMD(NERONI2/JSRCLSTL) /* Cancella i programmi preesistenti. */ DLTPGM PGM(NERONI2/JSRCLSTC) DLTPGM PGM(NERONI2/JSRCLSTD) DLTPGM PGM(NERONI2/JSRCLSTQC) DLTQMQRY QMQRY(NERONI2/JSRCLSTQM) DLTPGM PGM(NERONI2/JSRCLSTLC) DLTPGM PGM(NERONI2/JSRCLSTLD) /* Crea i file fisici. */ CRTPF FILE(NERONI2/JSRCLST1) SRCFILE(JSRCLST) SIZE(*NOMAX) + LVLCHK(*YES) /* Crea i file logici. */ CRTLF FILE(NERONI2/JSRCLST10) SRCFILE(JSRCLST) LVLCHK(*YES) CRTLF FILE(NERONI2/JSRCLST11) SRCFILE(JSRCLST) LVLCHK(*YES) CRTLF FILE(NERONI2/JSRCLST12) SRCFILE(JSRCLST) LVLCHK(*YES) CRTLF FILE(NERONI2/JSRCLST13) SRCFILE(JSRCLST) LVLCHK(*YES) CRTLF FILE(NERONI2/JSRCLST16) SRCFILE(JSRCLST) LVLCHK(*YES) CRTLF FILE(NERONI2/JSRCLST17) SRCFILE(JSRCLST) LVLCHK(*YES) CRTLF FILE(NERONI2/JSRCLST18) SRCFILE(JSRCLST) LVLCHK(*YES) CRTLF FILE(NERONI2/JSRCLST19) SRCFILE(JSRCLST) LVLCHK(*YES) /* Crea i comandi. */ CRTCMD CMD(NERONI2/JSRCLST) PGM(JSRCLSTC) SRCFILE(JSRCLST) + HLPPNLGRP(JSRCLSTP) HLPID(CMD) PRDLIB(NERONI2) CRTCMD CMD(NERONI2/JSRCLSTQ) PGM(JSRCLSTQC) SRCFILE(JSRCLST) + HLPPNLGRP(JSRCLSTQP) HLPID(CMD) PRDLIB(NERONI2) CRTCMD CMD(NERONI2/JSRCLSTX) PGM(JSRCLSTXC) SRCFILE(JSRCLST) + HLPPNLGRP(JSRCLSTXP) HLPID(CMD) PRDLIB(NERONI2) CRTCMD CMD(NERONI2/JSRCLSTL) PGM(JSRCLSTLC) SRCFILE(JSRCLST) + HLPPNLGRP(JSRCLSTLP) HLPID(CMD) PRDLIB(NERONI2) /* Duplica i comandi in QGPL. */ CRTPRXCMD CMD(QGPL/JSRCLST) TGTCMD(NERONI2/JSRCLST) AUT(*USE) + REPLACE(*YES) CRTPRXCMD CMD(QGPL/JSRCLSTQ) TGTCMD(NERONI2/JSRCLSTQ) AUT(*USE) + REPLACE(*YES) CRTPRXCMD CMD(QGPL/JSRCLSTX) TGTCMD(NERONI2/JSRCLSTX) AUT(*USE) + REPLACE(*YES) CRTPRXCMD CMD(QGPL/JSRCLSTL) TGTCMD(NERONI2/JSRCLSTL) AUT(*USE) + REPLACE(*YES) /* Crea i programmi. */ CRTBNDCL PGM(NERONI2/JSRCLSTC) SRCFILE(JSRCLST) TGTRLS(*CURRENT) + DBGVIEW(*ALL) CRTBNDRPG PGM(NERONI2/JSRCLSTD) SRCFILE(JSRCLST) DBGVIEW(*ALL) + TGTRLS(*CURRENT) CRTBNDCL PGM(NERONI2/JSRCLSTQC) SRCFILE(JSRCLST) TGTRLS(*CURRENT) + DBGVIEW(*ALL) CRTBNDCL PGM(NERONI2/JSRCLSTXC) SRCFILE(JSRCLST) TGTRLS(*CURRENT) + DBGVIEW(*ALL) CRTQMQRY QMQRY(NERONI2/JSRCLSTQM) SRCFILE(JSRCLST) CRTBNDCL PGM(NERONI2/JSRCLSTLC) SRCFILE(JSRCLST) TGTRLS(*CURRENT) + DBGVIEW(*ALL) CRTBNDRPG PGM(NERONI2/JSRCLSTLD) SRCFILE(JSRCLST) DBGVIEW(*ALL) + TGTRLS(*CURRENT) /* Crea il file messaggi. */ CRTMSGF MSGF(NERONI2/JSRCLST) TEXT('Source list. Msgf') /* Fotografia comandi (xxxA001). */ ADDMSGD MSGID(JSLA001) MSGF(NERONI2/JSRCLST) MSG('JSRCLST + FROMLIB(&1) OUTSRCLST(&2/&3) MBROPT(&4) TEXT(&5) + REFPGM(&6) RQS(&7) RGZ(&8)') FMT((*CHAR 10) (*CHAR 10) + (*CHAR 9) (*CHAR 10) (*CHAR 42) (*CHAR 10) (*CHAR 4) + (*CHAR 5)) ADDMSGD MSGID(JSLA002) MSGF(NERONI2/JSRCLST) MSG('JSRCLSTL + FROMLIBL(&1) OUTSRCLST(&2/&3) CRTOUTF(&4) REFPGM(&5)') + FMT((*CHAR 10) (*CHAR 10) (*CHAR 9) (*CHAR 4) (*CHAR 10)) /* Messaggi comuni a pgm di comandi diversi (xxx0001). */ /* Messaggi nei pgm del Cmd 1 (xxx0101). */ ADDMSGD MSGID(JSL0101) MSGF(NERONI2/JSRCLST) MSG('Creazione + elenco file in corso per libreria &1') FMT((*CHAR 10)) ADDMSGD MSGID(JSL0102) MSGF(NERONI2/JSRCLST) MSG('Creazione + elenco membri in corso per source file &1/&2') + FMT((*CHAR 10) (*CHAR 10)) ADDMSGD MSGID(JSL0103) MSGF(NERONI2/JSRCLST) MSG('Se RPLADD(*ADD) + OutLib &1 deve preesistere.') SECLVL('Se si vogliono + aggiungere informazioni da un''altra lista librerie al + database di servizio nella out library "&1", la out + library deve essere stata creata in precedenza.') + FMT((*CHAR 10)) ADDMSGD MSGID(JSL0104) MSGF(NERONI2/JSRCLST) MSG('Non esiste la + libreria da documentare &1') SECLVL('Non esiste la + libreria "&1" della quale vuoi elencare i membri + sorgenti.') FMT((*CHAR 10)) ADDMSGD MSGID(JSL0105) MSGF(NERONI2/JSRCLST) MSG('Sostituzione + info solo per specifica libreria') SECLVL('Se viene + richiesta la sostituzione delle informazioni di una + libreria, il nome libreria non puo'' essere un nome + generico che inizia per "*" come quello fornito "&1". + Cambia nome.') FMT((*CHAR 10)) ADDMSGD MSGID(JSL0106) MSGF(NERONI2/JSRCLST) MSG('Promemoria + "REF......." non permesso come nome libreria di + emissione') SECLVL('Il default "REF......." e'' un + promemoria per il nome della libreria del file di + emissione che, solitamente, inizia con "REF". E'' + pero'' richiesto un nome diverso dall''inutilizzabile + default.') ADDMSGD MSGID(JSL0107) MSGF(NERONI2/JSRCLST) MSG('Non e'' + permesso &1 come nome del file di emissione') + SECLVL('Il nome "&1" richiesto per il file di + emissione non e'' utilizzabile perche'' inizia con le + iniziali riservate "&2".') FMT((*CHAR 9) (*CHAR 8)) ADDMSGD MSGID(JSL0108) MSGF(NERONI2/JSRCLST) MSG('Nella libreria + da documentare &1 non esistono file fisici') + SECLVL('Nella libreria "&1" della quale vuoi elencare + i membri sorgenti non esistono file fisici') + FMT((*CHAR 10)) ADDMSGD MSGID(JSL0109) MSGF(NERONI2/JSRCLST) MSG('File di + emissione &1/&2 preesiste ma ha level check + sbagliato') FMT((*CHAR 10) (*CHAR 9)) ADDMSGD MSGID(JSL0110) MSGF(NERONI2/JSRCLST) MSG('Valori + FROMLIB(*NONE) e MBROPT(*NONE) permessi solo se + RGZ(*ONLY)') ADDMSGD MSGID(JSL0111) MSGF(NERONI2/JSRCLST) MSG('Valori + FROMLIB(*NONE) e MBROPT(*NONE) necessari se RGZ(*ONLY)') ADDMSGD MSGID(JSL0190) MSGF(NERONI2/JSRCLST) MSG('Creato, + aggiunto o sostituito in &1/&2 l''elenco dei membri + sorgente presenti in libreria &3.') FMT((*CHAR 10) + (*CHAR 9) (*CHAR 10)) /* Messaggi nei pgm del Cmd 2 (xxx0201). */ ADDMSGD MSGID(JSL0201) MSGF(NERONI2/JSRCLST) MSG('Il file &1/&2 + non esiste.') SECLVL('La lista sorgenti &1/&2 non + esiste.') FMT((*CHAR 10) (*CHAR 9)) ADDMSGD MSGID(JSL0202) MSGF(NERONI2/JSRCLST) MSG('Il file &1/&2 + e'' vuoto.') SECLVL('La lista sorgenti contenuta nel + file &1/&2 risulta vuota.') FMT((*CHAR 10) (*CHAR 9)) ADDMSGD MSGID(JSL0203) MSGF(NERONI2/JSRCLST) MSG('Testo file + lista: &1') FMT((*CHAR 50)) ADDMSGD MSGID(JSL0204) MSGF(NERONI2/JSRCLST) MSG('Testo membro + lista: &1') FMT((*CHAR 50)) ADDMSGD MSGID(JSL0205) MSGF(NERONI2/JSRCLST) MSG('Lista in + data/ora: &3 &4 NrRcd: &5') SECLVL('La lista + sorgenti contenuta nel file &1/&2 risulta creata in + data/ora &3 &4. Contiene &5 record.') FMT((*CHAR 10) + (*CHAR 9) (*CHAR 10) (*CHAR 8) (*DEC 10)) ADDMSGD MSGID(JSL0206) MSGF(NERONI2/JSRCLST) MSG('La lista + sorgenti &1/&2 non ha il tracciato previsto') + SECLVL('Il file "&2" nella libreria "&1" che dovrebbe + contenere la lista dei sorgenti non ha il tracciato + uguale a quello prodotto dal comando preparatorio + JSRCLST "Source member list" corrispondente al + tracciato del file di sistema "&3".') FMT((*CHAR 10) + (*CHAR 9) (*CHAR 10)) /* Messaggi dei Cmd (xxx1001). */ /* Crea i testi d'aiuto. */ CRTPNLGRP PNLGRP(NERONI2/JSRCLSTP) SRCFILE(JSRCLST) CRTPNLGRP PNLGRP(NERONI2/JSRCLSTQP) SRCFILE(JSRCLST) CRTPNLGRP PNLGRP(NERONI2/JSRCLSTLP) SRCFILE(JSRCLST) //ENDBCHJOB //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSRCLSTC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Claudio Neroni 26-02-2014 Creato. */ /* Source list. Crt. Cpp */ /* Estrae in un file di emissione */ /* l'elenco dei membri sorgente della libreria */ /* o della lista librerie richiesta. */ /* Claudio Neroni 05-03-2016 Modificato. */ /* Aggiunte viste logiche al file di emissione */ /* per facilitarne l'uso in altri tool. */ /* Troncato a 9 caratteri il nome del file fisico di emissione */ /* per lasciare un carattere al nome dei suoi logici. */ /* Claudio Neroni 15-04-2016 Modificato. */ /* Riorganizzazione del file di emissione controllata da parametro. */ /* Claudio Neroni 17-04-2016 Modificato. */ /* Cambiato tracciato di riferimento da DSPFD *MBRLIST a *MBR */ /* perche' il primo non contiene secolo/data/ora */ /* di ultimo update al sorgente che e' proprio il campo */ /* incorporato nella compilazione degli oggetti. */ /* */ PGM PARM(&FROMLIB &OUTSRCLST &MBROPT &TEXT + &REFPGM &RQS &RGZ) /* Riceve Nome libreria o lista librerie da indagare. */ DCL VAR(&FROMLIB) TYPE(*CHAR) LEN(10) /* Riceve Nome qualificato del file di emissione. */ DCL VAR(&OUTSRCLST) TYPE(*CHAR) LEN(19) /* File di emissione. */ DCL VAR(&OUTSRCLSTF) TYPE(*CHAR) LEN(9) /* File di emissione. Iniziali da rifiutare. */ DCL VAR(&OUTSRCLSTN) TYPE(*CHAR) LEN(8) + VALUE(JSRCLST1) /* Libreria del File di emissione. */ DCL VAR(&OUTSRCLSTL) TYPE(*CHAR) LEN(10) /* Libreria del File di emissione. Default da rifiutare. */ DCL VAR(&DFT) TYPE(*CHAR) LEN(10) VALUE(REF.......) /* Riceve richiesta di aggiunta o sostituzione totale o parziale */ /* dei dati nel file di emissione. */ DCL VAR(&MBROPT) TYPE(*CHAR) LEN(10) DCL VAR(&MBROPTX) TYPE(*CHAR) LEN(10) /* Riceve Testo breve Output. */ DCL VAR(&TEXT) TYPE(*CHAR) LEN(42) /* Riceve Programma di riferimento per i messaggi. */ DCL VAR(&REFPGM) TYPE(*CHAR) LEN(10) /* Riceve Scelta di mandare messaggio finale di richiesta. */ DCL VAR(&RQS) TYPE(*CHAR) LEN(4) /* Riceve Scelta di riorganizzazione del file di emissione. */ DCL VAR(&RGZ) TYPE(*CHAR) LEN(5) /* Libreria del File di emissione. */ DCL VAR(&OUTSRCLSTL) TYPE(*CHAR) LEN(10) /* Indirizzario equivalente alla out library. */ DCL VAR(&OUTSRCLSTD) TYPE(*CHAR) LEN(100) /* Testo out da imporre. */ DCL VAR(&OUTTXT) TYPE(*CHAR) LEN(50) /* Testo out recuperato. */ DCL VAR(&RTVTXT) TYPE(*CHAR) LEN(50) /* Testo prefisso. */ DCL VAR(&PFXTXT) TYPE(*CHAR) LEN(8) + VALUE('SrcList:') /* Definisce il file prototipo e il relativo level check. */ DCL VAR(&PROTO) TYPE(*CHAR) LEN(10) VALUE(JSRCLST1) DCL VAR(&LVLCHKP) TYPE(*CHAR) LEN(13) /* Definisce il level check del preesistente file di emissione */ DCL VAR(&LVLCHK) TYPE(*CHAR) LEN(13) /* Primo passaggio. */ DCL VAR(&PRIMO) TYPE(*LGL) VALUE('1') /* Libreria mancante. */ DCL VAR(&MISSINGLIB) TYPE(*LGL) /* Tipo lavoro (0=Batch 1=Interactive). */ DCL VAR(&JOBTYPE) TYPE(*CHAR) LEN(1) /* Prenotazione del CPF0001. */ DCL VAR(&CPF0001) TYPE(*LGL) /* Elenco dei file fisici della lista librerie indagata. */ DCLF FILE(QAFDBASI) /* Intercetta gli errori. */ MONMSG MSGID(CPF0000 MCH0000 CEE0000) EXEC(GOTO + CMDLBL(ERRORE)) /* Recupera tipo lavoro. */ RTVJOBA TYPE(&JOBTYPE) /* Estrae parametri. */ CHGVAR VAR(&OUTSRCLSTF) VALUE(%SST(&OUTSRCLST 1 9)) CHGVAR VAR(&OUTSRCLSTL) VALUE(%SST(&OUTSRCLST 10 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 /* Fotografa il comando. */ SNDPGMMSG MSGID(JSLA001) MSGF(JSRCLST) MSGDTA(&FROMLIB + *CAT &OUTSRCLSTL *CAT &OUTSRCLSTF *CAT + &MBROPT *CAT &TEXT *CAT &REFPGM *CAT &RQS + *CAT &RGZ) TOPGMQ(*PRV (&REFPGM)) + MSGTYPE(*INFO) /* Trascrive il parametro Sostituzione/Aggiunta record. */ CHGVAR VAR(&MBROPTX) VALUE(&MBROPT) IF COND(&MBROPT *EQ *RPLLIB) THEN(CHGVAR + VAR(&MBROPTX) VALUE(*ADD)) /* Valori FROMLIB(*NONE) e MBROPT(*NONE) permessi solo se RGZ(*ONLY). */ IF COND((&RGZ *NE *ONLY) *AND (&FROMLIB *EQ + *NONE *OR &MBROPT *EQ *NONE)) THEN(DO) SNDPGMMSG MSGID(JSL0110) MSGF(JSRCLST) TOPGMQ(*PRV + (&REFPGM)) MSGTYPE(*DIAG) GOTO CMDLBL(CPF0001) ENDDO /* Valori FROMLIB(*NONE) e MBROPT(*NONE) necessari se RGZ(*ONLY). */ IF COND((&RGZ *EQ *ONLY) *AND (&FROMLIB *NE + *NONE *OR &MBROPT *NE *NONE)) THEN(DO) SNDPGMMSG MSGID(JSL0111) MSGF(JSRCLST) TOPGMQ(*PRV + (&REFPGM)) MSGTYPE(*DIAG) GOTO CMDLBL(CPF0001) ENDDO /* Rifiuta i valori riservati per l'outfile. */ IF COND(%SST(&OUTSRCLSTF 1 8) *EQ &OUTSRCLSTN) + THEN(DO) SNDPGMMSG MSGID(JSL0107) MSGF(JSRCLST) + MSGDTA(&OUTSRCLSTF *CAT &OUTSRCLSTN) + TOPGMQ(*PRV (&REFPGM)) MSGTYPE(*DIAG) GOTO CMDLBL(CPF0001) ENDDO /* Rifiuta il default promemoria per la out library. */ IF COND(&OUTSRCLSTL *EQ &DFT) THEN(DO) SNDPGMMSG MSGID(JSL0106) MSGF(JSRCLST) TOPGMQ(*PRV + (&REFPGM)) MSGTYPE(*DIAG) GOTO CMDLBL(CPF0001) ENDDO /* Recupera il level check del prototipo. */ JRTVFD FILE(&PROTO) LVLCHK(&LVLCHKP) /* Controlla l'esistenza della out library. */ CHKOBJ OBJ(&OUTSRCLSTL) OBJTYPE(*LIB) /* Se la out library non esiste, annota. */ MONMSG MSGID(CPF0000) EXEC(CHGVAR VAR(&MISSINGLIB) + VALUE('1')) /* Se la out library esiste. */ IF COND(*NOT &MISSINGLIB) THEN(DOUNTIL COND('1')) /* Controlla l'esistenza del file di emissione. */ CHKOBJ OBJ(&OUTSRCLSTL/&OUTSRCLSTF) OBJTYPE(*FILE) /* Se il file non esiste, abbandona. */ MONMSG MSGID(CPF0000) EXEC(LEAVE) /* Recupera il level check del file. */ JRTVFD FILE(&OUTSRCLSTF) LIB(&OUTSRCLSTL) + LVLCHK(&LVLCHK) /* Se il level check del file e' diverso da quello del prototipo, */ /* segnala errore. */ IF COND(&LVLCHK *NE &LVLCHKP) THEN(DO) SNDPGMMSG MSGID(JSL0109) MSGF(JSRCLST) + MSGDTA(&OUTSRCLSTL *CAT &OUTSRCLSTF) + TOPGMQ(*PRV (&REFPGM)) MSGTYPE(*DIAG) GOTO CMDLBL(CPF0001) ENDDO /* Se la out library esiste. */ ENDDO /* Se la out library esiste. */ IF COND(*NOT &MISSINGLIB) THEN(DO) /* Se richiesta soltanto la riorganizzazione del file di emissione. */ IF COND(&RGZ *EQ *ONLY) THEN(DOUNTIL COND('1')) /* Controlla l'esistenza del file di emissione. */ CHKOBJ OBJ(&OUTSRCLSTL/&OUTSRCLSTF) OBJTYPE(*FILE) /* Se il file non esiste, abbandona. */ MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(RCLRSC)) /* Riorganizza il file di emissione. */ RGZPFM FILE(&OUTSRCLSTL/&OUTSRCLSTF) /* Se errore, abbandona. */ MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(RCLRSC)) /* Salta all'esecuzione delle attivita' finali. */ GOTO CMDLBL(RCLRSC) /* Se richiesta soltanto la riorganizzazione del file di emissione. */ ENDDO /* Se la out library esiste. */ ENDDO /* Se la out library non esiste. */ IF COND(&MISSINGLIB) THEN(DO) /* Se corre sostituzione. */ IF COND(&MBROPT *EQ *REPLACE) THEN(DO) /* Crea la libreria. */ CHGVAR VAR(&OUTSRCLSTD) VALUE('/qsys.lib/' *TCAT + &OUTSRCLSTL *TCAT '.lib') MKDIR DIR(&OUTSRCLSTD) CHGLIB LIB(&OUTSRCLSTL) TYPE(*TEST) TEXT('Source List. + Output Library') /* Se corre sostituzione. */ ENDDO /* Se corre aggiunta. */ IF COND(&MBROPT *EQ *ADD) THEN(DO) /* Segnala "OutLib mancante" e abbandona. */ SNDPGMMSG MSGID(JSL0103) MSGF(JSRCLST) + MSGDTA(&OUTSRCLSTL) TOPGMQ(*PRV + (&REFPGM)) MSGTYPE(*DIAG) GOTO CMDLBL(CPF0001) /* Se corre aggiunta. */ ENDDO /* Se la out library non esiste. */ ENDDO /* Se richiesta una specifica libreria che non esiste, */ /* messaggia "Libreria inesistente" e abbandona. */ IF COND(%SST(&FROMLIB 1 1) *NE '*') THEN(DO) CHKOBJ OBJ(&FROMLIB) OBJTYPE(*LIB) MONMSG MSGID(CPF0000) EXEC(DO) SNDPGMMSG MSGID(JSL0104) MSGF(JSRCLST) + MSGDTA(&FROMLIB) TOPGMQ(*PRV (&REFPGM)) + MSGTYPE(*DIAG) GOTO CMDLBL(CPF0001) ENDDO ENDDO /* Se richiesta la sostituzione delle info di una specifica libreria */ /* e non viene indicata la specifica libreria, */ /* messaggia "Sostituzione info libreria senza libreria" e abbandona. */ IF COND((&MBROPT *EQ *RPLLIB) *AND + (%SST(&FROMLIB 1 1) *EQ '*')) THEN(DO) SNDPGMMSG MSGID(JSL0105) MSGF(JSRCLST) + MSGDTA(&FROMLIB) TOPGMQ(*PRV (&REFPGM)) + MSGTYPE(*DIAG) GOTO CMDLBL(CPF0001) ENDDO /* Compone il testo di Output. */ SELECT WHEN COND((&TEXT *EQ *SAME) *AND (&MBROPT *EQ + *REPLACE)) THEN(CHGVAR VAR(&OUTTXT) + VALUE(&PFXTXT *BCAT &FROMLIB)) WHEN COND((&TEXT *EQ *FROMLIBADD) *AND (&MBROPT + *EQ *ADD)) THEN(DO) RTVOBJD OBJ(&OUTSRCLSTL/&OUTSRCLSTF) OBJTYPE(*FILE) + TEXT(&RTVTXT) CHGVAR VAR(&OUTTXT) VALUE(&RTVTXT *TCAT '-' + *TCAT &FROMLIB) ENDDO WHEN COND(&TEXT *EQ *SAME) THEN(CHGVAR + VAR(&OUTTXT) VALUE(*SAME)) WHEN COND(&TEXT *EQ *FROMLIB) THEN(CHGVAR + VAR(&OUTTXT) VALUE(&PFXTXT *BCAT &FROMLIB)) OTHERWISE CMD(CHGVAR VAR(&OUTTXT) VALUE(&PFXTXT + *BCAT &TEXT)) ENDSELECT /* Se richiesta sostituzione, cancella il file di output. */ IF COND(&MBROPT *EQ *REPLACE) THEN(DO) DLTF FILE(&OUTSRCLSTL/&OUTSRCLSTF) MONMSG MSGID(CPF0000 MCH0000) ENDDO /* Se il file di output non esiste. */ CHKOBJ OBJ(&OUTSRCLSTL/&OUTSRCLSTF) OBJTYPE(*FILE) MONMSG MSGID(CPF0000 MCH0000) EXEC(DO) /* Duplica il prototipo del file di emissione con i suoi logici. */ JDUPDB BASPF(JSRCLST1) TOLIB(&OUTSRCLSTL) + PFXBFR(JSRCLST1) PFXAFT(&OUTSRCLSTF) /* Se il file di output non esiste. */ ENDDO /* Se richiesta sostituzione informazioni su una libreria. */ IF COND(&MBROPT *EQ *RPLLIB) THEN(DO) /* Cancella le vecchie informazioni sulla libreria. */ OVRDBF FILE(JSRCLST1) TOFILE(&OUTSRCLSTL/&OUTSRCLSTF) CALL PGM(JSRCLSTD) PARM(&FROMLIB) DLTOVR FILE(*ALL) /* Se richiesta riorganizzazione del file di emissione. */ IF COND(&RGZ *EQ *YES) THEN(DO) /* Riorganizza il file sul quale ha cancellato i record. */ RGZPFM FILE(&OUTSRCLSTL/&OUTSRCLSTF) /* Intercetta membro vuoto. */ MONMSG MSGID(CPF2981) /* Se richiesta riorganizzazione del file di emissione. */ ENDDO /* Se richiesta sostituzione informazioni su una libreria. */ ENDDO /* Se interattivo, Messaggia stato. */ /* Creazione elenco file in corso per libreria &1 */ IF COND(&JOBTYPE *EQ '1') THEN(DO) SNDPGMMSG MSGID(JSL0101) MSGF(JSRCLST) + MSGDTA(&FROMLIB) TOPGMQ(*EXT) + MSGTYPE(*STATUS) ENDDO /* Riempie l'elenco dei file nella libreria indagata. */ DSPFD FILE(*LIBL/JSRCLST) TYPE(*BASATR) + OUTPUT(*OUTFILE) FILEATR(*PF) + OUTFILE(QTEMP/JSRCLST0) OUTMBR(*FIRST + *REPLACE) CHGPF FILE(QTEMP/JSRCLST0) SIZE(*NOMAX) CLRPFM FILE(QTEMP/JSRCLST0) DSPFD FILE(&FROMLIB/*ALL) TYPE(*BASATR) + OUTPUT(*OUTFILE) FILEATR(*PF) + OUTFILE(QTEMP/JSRCLST0) OUTMBR(*FIRST + *REPLACE) /* Se nella libreria indagata non esistono file fisici, */ /* messaggia "Libreria senza file fisici" e abbandona. */ MONMSG MSGID(CPF3012 CPF3020) EXEC(DO) SNDPGMMSG MSGID(JSL0108) MSGF(JSRCLST) + MSGDTA(&FROMLIB) TOPGMQ(*PRV (&REFPGM)) + MSGTYPE(*DIAG) GOTO CMDLBL(RCLRSC) ENDDO /* Prepara un transito in QTEMP. */ JCPYCLR FROMFILE(JSRCLST1) TOFILE(JSRCLSTCW) /* Reindirizza l'elenco dei file nella libreria indagata. */ OVRDBF FILE(QAFDBASI) TOFILE(JSRCLST0) /* Cicla sull'elenco. */ DOWHILE COND('1') /* Legge un record dall'elenco. */ RCVF /* Se non ce ne sono altri, abbandona. */ MONMSG MSGID(CPF0864) EXEC(LEAVE) /* Se corre un file sorgente dotato di membri. */ IF COND(&ATDTAT *EQ S *AND &ATNOMB *GT 0) THEN(DO) /* Se interattivo, Messaggia stato. */ IF COND(&JOBTYPE *EQ '1') THEN(DO) SNDPGMMSG MSGID(JSL0102) MSGF(JSRCLST) MSGDTA(&ATLIB + *CAT &ATFILE) TOPGMQ(*EXT) MSGTYPE(*STATUS) ENDDO /* Genera il QTEMP l'elenco dei membri del file in esame. */ DSPFD FILE(&ATLIB/&ATFILE) TYPE(*MBR) + OUTPUT(*OUTFILE) OUTFILE(QTEMP/JSRCLSTCW) /* Protegge il successivo copy da indirizzamenti indesiderati. */ OVRDBF FILE(JSRCLSTCW) TOFILE(QTEMP/JSRCLSTCW) + MBR(*FIRST) SECURE(*YES) OVRDBF FILE(&OUTSRCLSTF) + TOFILE(&OUTSRCLSTL/&OUTSRCLSTF) + MBR(*FIRST) SECURE(*YES) /* Aggiunge l'elenco dei membri al file di emissione. */ CPYF FROMFILE(QTEMP/JSRCLSTCW) + TOFILE(&OUTSRCLSTL/&OUTSRCLSTF) + MBROPT(&MBROPTX) /* Elimina i reindirizzamenti protettivi. */ DLTOVR FILE(JSRCLSTCW) dltovr FILE(&OUTSRCLSTF) /* Dopo il primo scarico. */ IF COND(&PRIMO) THEN(DO) CHGVAR VAR(&PRIMO) VALUE('0') /* Impone l'aggiunta per gli scarichi successivi. */ CHGVAR VAR(&MBROPTX) VALUE(*ADD) /* Impone un testo all'Output File. */ CHGPF FILE(&OUTSRCLSTL/&OUTSRCLSTF) TEXT(&OUTTXT) /* Dopo il primo scarico. */ ENDDO /* Se corre un file sorgente dotato di membri. */ ENDDO /* Cicla sull'elenco. */ ENDDO /* Messaggia per esito felice. */ SNDPGMMSG MSGID(JSL0190) MSGF(JSRCLST) + MSGDTA(&OUTSRCLSTL *CAT &OUTSRCLSTF *CAT + &FROMLIB) TOPGMQ(*PRV (&REFPGM)) + MSGTYPE(*COMP) /* Se richiesto, carica in log i comandi richiamabili per l'uso. */ IF COND(&RQS *EQ *YES) THEN(DO) JRQT CMD(JSRCLSTQ SEARCH(' ') + SRCLST(&OUTSRCLSTL/&OUTSRCLSTF)) + REFPGM(&REFPGM) ENDDO /* Salta all'esecuzione delle attivita' finali. */ GOTO CMDLBL(RCLRSC) /* Label di esecuzione delle attivita' finali. */ RCLRSC: /* Riacquisisce le risorse. */ RCLRSC MONMSG MSGID(CPF0000 MCH0000) /* Se richiesto, rilascia il CPF0001. */ IF COND(&CPF0001) THEN(DO) SNDPGMMSG MSGID(CPF0001) MSGF(QCPFMSG) MSGDTA(JSRCLST) + MSGTYPE(*ESCAPE) MONMSG MSGID(CPF0000 MCH0000) ENDDO /* Ritorna. */ RETURN /* Label di errore. */ ERRORE: /* Restituisce i messaggi al chiamante, */ /* trasformando eventuali escape in diagnostici. */ JRSNMSG RMV(*NO) MONMSG MSGID(CPF0000 MCH0000) /* Label di prenotazione del CPF0001. */ CPF0001: /* Prenota il CPF0001. */ CHGVAR VAR(&CPF0001) VALUE('1') MONMSG MSGID(CPF0000 MCH0000) /* Salta alle attivita' finali. */ GOTO CMDLBL(RCLRSC) ENDPGM //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSRCLSTD) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Claudio Neroni 24-12-2015 Creato. * Source list. Crt. DltLibInfo * Lista sorgenti. Crea e riempie out file. * Cancella Informazioni su una Libreria * Se richiesta la sostituzione di una libreria gia' esaminata, * cancella le vecchie informazioni dal file di output. * *--------------------------------------------------------------------------------------------- * Source list. MbrList Fjsrclst1 up e disk *--------------------------------------------------------------------------------------------- * Identifica i record nei file. IQWHFDMBR 01 *--------------------------------------------------------------------------------------------- C TAG TAG *--------------------------------------------------------------------------------------------- * Se corre MbrList. C if *in01 * Se la libreria e' quella ricevuta nei parametri. C if MBLIB = PPLIB * Cancella il record. C delete QWHFDMBR * Se la libreria e' diversa da quella ricevuta nei parametri. C else * Rilascia il record. C unlock jsrclst1 * End. C endif * Se corre MbrList. C endif *--------------------------------------------------------------------------------------------- * Inizializza. C *inzsr begsr * Scambia parametri. C *entry plist C parm PPLIB 10 I Library C endsr *--------------------------------------------------------------------------------------------- //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSRCLSTL) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Claudio Neroni 19-04-2014 Creato. */ /* Source list. Libl. Cmd */ /* Lista le librerie richieste e chiama la lista sorgenti */ /* di ogni singola libreria. */ /* Lo scopo di questo cappello e' evitare la molto impegnativa */ /* lista iniziale dei membri sorgenti quando la lista librerie */ /* richiesta e' molto vasta. */ /* La creazione della lista iniziale delle librerie da esaminare */ /* permette di ottenere una migliore visibilita' dell'avanzamento */ /* dell'elaborazione. */ /* */ CMD PROMPT('Source list by library list') PARM KWD(FROMLIBL) TYPE(*CHAR) LEN(10) DFT(*ALL) + SPCVAL((*USRLIBL) (*LIBL) (*ALLUSR) + (*ALL)) PROMPT('From library list') PARM KWD(OUTSRCLST) TYPE(OUTSRCLST) + PROMPT('Output source list') OUTSRCLST: QUAL TYPE(*NAME) LEN(9) DFT(JSRCLSTT) QUAL TYPE(*NAME) DFT(REFALL) MIN(0) + PROMPT('Library') PARM KWD(CRTOUTF) TYPE(*CHAR) LEN(10) RSTD(*YES) + DFT(*NO) VALUES(*NO *YES) PROMPT('Create + outfile if inexistent') PARM KWD(REFPGM) TYPE(*NAME) LEN(10) DFT(*CPP) + SPCVAL((*CPP)) PROMPT('Reference program + for messages') //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSRCLSTL.S) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JSRCLSTL.) JOBD(NERONI2/NERONI2) OUTQ(QPRINTS) + ENDSEV(60) LOG(4 00 *SECLVL) LOGCLPGM(*YES) + MSGQ(*USRPRF) CCSID(280) jmy jcmd /* Se il job viene interrotto prima di scrivere *END nel testo dell'output */ /* file, il rilancio dello stesso job completa l'attivita' senza ripetizioni. */ JSRCLSTL FROMLIBL(*ALL) OUTSRCLST(REFALL/JSRCLSTT) CRTOUTF(*YES) + REFPGM(*CPP) //ENDBCHJOB //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSRCLSTLC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Claudio Neroni 19-04-2014 Creato. */ /* Source list. Libl. Cpp */ /* Lista le librerie richieste e chiama la lista sorgenti */ /* di ogni singola libreria. */ /* Lo scopo di questo cappello e' evitare la molto impegnativa */ /* lista iniziale dei membri sorgenti quando la lista librerie */ /* richiesta e' molto vasta. */ /* La creazione della lista iniziale delle librerie da esaminare */ /* permette di ottenere una migliore visibilita' dell'avanzamento */ /* dell'elaborazione. */ /* */ PGM PARM(&FROMLIB &OUTSRCLST &CRTOUTF &REFPGM) /* Riceve Lista librerie da indagare. */ DCL VAR(&FROMLIB) TYPE(*CHAR) LEN(10) /* Riceve Nome qualificato del file di emissione. */ DCL VAR(&OUTSRCLST) TYPE(*CHAR) LEN(19) /* File di emissione. */ DCL VAR(&OUTSRCLSTF) TYPE(*CHAR) LEN(9) /* Libreria del File di emissione. */ DCL VAR(&OUTSRCLSTL) TYPE(*CHAR) LEN(10) /* Riceve Richiesta di creare il file di emissione se mancante. */ DCL VAR(&CRTOUTF) TYPE(*CHAR) LEN(4) /* Riceve Programma di riferimento per i messaggi. */ DCL VAR(&REFPGM) TYPE(*CHAR) LEN(10) /* Libreria del File di emissione. */ DCL VAR(&OUTSRCLSTL) TYPE(*CHAR) LEN(10) /* Definisce il file prototipo e il relativo level check. */ DCL VAR(&PROTO) TYPE(*CHAR) LEN(10) VALUE(JSRCLST1) DCL VAR(&LVLCHKP) TYPE(*CHAR) LEN(13) /* Definisce il level check del preesistente file di emissione */ DCL VAR(&LVLCHK) TYPE(*CHAR) LEN(13) /* Richiesta di aggiunta o sostituzione totale o parziale */ /* dei dati nel file di emissione. */ DCL VAR(&MBROPT) TYPE(*CHAR) LEN(10) /* Outfile mancante. */ DCL VAR(&NOTFOUND) TYPE(*LGL) VALUE('0') /* System Library List. */ DCL VAR(&SYSLIBL) TYPE(*CHAR) LEN(165) /* Current Library. */ DCL VAR(&CURLIB) TYPE(*CHAR) LEN(10) /* User Library List. */ DCL VAR(&USRLIBL) TYPE(*CHAR) LEN(2750) /* Total Library List. */ DCL VAR(&TLIBL) TYPE(*CHAR) LEN(2926) /* Testo out da imporre. */ DCL VAR(&OUTTXT) TYPE(*CHAR) LEN(50) /* Testo out recuperato. */ DCL VAR(&RTVTXT) TYPE(*CHAR) LEN(50) /* Identification1 = "SrcList: " */ DCL VAR(&RT_ID1) TYPE(*CHAR) LEN(9) /* Identification2 = " Last: " */ DCL VAR(&RT_ID2) TYPE(*CHAR) LEN(7) /* Last From-Library = *ALL oppure *ALLUSR */ DCL VAR(&RT_LF) TYPE(*CHAR) LEN(10) /* Last Library In Process = none dell'ultima libreria in elaborazione. */ DCL VAR(&RT_LL) TYPE(*CHAR) LEN(10) /* Prima libreria da elaborare durante il recupero */ /* di un run *ALL oppure *ALLUSR */ DCL VAR(&FIRST) TYPE(*CHAR) LEN(10) /* Conta le librerie elaborate. */ DCL VAR(&LIBCNT) TYPE(*DEC) LEN(7 0) /* Prenotazione del CPF0001. */ DCL VAR(&CPF0001) TYPE(*LGL) /* Elenco delle librerie indagate. */ DCLF FILE(QADSPOBJ) /* Intercetta gli errori. */ MONMSG MSGID(CPF0000 MCH0000 CEE0000) EXEC(GOTO + CMDLBL(ERRORE)) /* Estrae parametri. */ CHGVAR VAR(&OUTSRCLSTF) VALUE(%SST(&OUTSRCLST 1 9)) CHGVAR VAR(&OUTSRCLSTL) VALUE(%SST(&OUTSRCLST 10 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 /* Fotografa il comando. */ SNDPGMMSG MSGID(JSLA002) MSGF(JSRCLST) MSGDTA(&FROMLIB + *CAT &OUTSRCLSTL *CAT &OUTSRCLSTF *CAT + &CRTOUTF *CAT &REFPGM) TOPGMQ(*PRV + (&REFPGM)) MSGTYPE(*INFO) /* Controlla l'esistenza del file di emissione. */ CHKOBJ OBJ(&OUTSRCLSTL/&OUTSRCLSTF) OBJTYPE(*FILE) /* Se il file NON esiste, annota. */ MONMSG MSGID(CPF0000) EXEC(CHGVAR VAR(&NOTFOUND) + VALUE('1')) /* Se il file NON esiste e non ne e' richiesta la creazione, abbandona. */ IF COND(&NOTFOUND *AND &CRTOUTF *EQ *NO) + THEN(GOTO CMDLBL(ERRORE)) /* Se il file esiste. */ IF COND(*NOT &NOTFOUND) THEN(DO) /* Recupera il level check del prototipo. */ JRTVFD FILE(&PROTO) LVLCHK(&LVLCHKP) /* Recupera il level check del file. */ JRTVFD FILE(&OUTSRCLSTF) LIB(&OUTSRCLSTL) + LVLCHK(&LVLCHK) /* Se il level check del file e' diverso da quello del prototipo, */ /* segnala errore. */ IF COND(&LVLCHK *NE &LVLCHKP) THEN(DO) SNDPGMMSG MSGID(JSL0109) MSGF(JSRCLST) + MSGDTA(&OUTSRCLSTL *CAT &OUTSRCLSTF) + TOPGMQ(*PRV (&REFPGM)) MSGTYPE(*DIAG) GOTO CMDLBL(CPF0001) ENDDO /* Imposta la richiesta di ReplaceLib. */ CHGVAR VAR(&MBROPT) VALUE(*RPLLIB) /* Se il file esiste. */ ENDDO /* Se il file NON esiste e ne e' richiesta la creazione. */ IF COND(&NOTFOUND *AND &CRTOUTF *EQ *YES) THEN(DO) /* Imposta la richiesta di ReplaceAll. */ CHGVAR VAR(&MBROPT) VALUE(*REPLACE) /* Se il file NON esiste e ne e' richiesta la creazione. */ ENDDO /* Definisce l'elenco delle librerie indagate. */ DSPOBJD OBJ(QGPL) OBJTYPE(*LIB) OUTPUT(*OUTFILE) + OUTFILE(QTEMP/JSRCLSTL0) OUTMBR(*FIRST + *REPLACE) CHGPF FILE(QTEMP/JSRCLSTL0) SIZE(*NOMAX) + TEXT('Source list. Libl. List of libraries') CLRPFM FILE(QTEMP/JSRCLSTL0) /* Se corre FROMLIB uguale a *ALL o *ALLUSR. */ IF COND(&FROMLIB *EQ *ALL *OR &FROMLIB *EQ + *ALLUSR) THEN(DO) /* Riempie l'elenco delle librerie indagate. */ DSPOBJD OBJ(&FROMLIB) OBJTYPE(*LIB) OUTPUT(*OUTFILE) + OUTFILE(QTEMP/JSRCLSTL0) OUTMBR(*FIRST + *REPLACE) /* Se il file esiste. */ IF COND(*NOT &NOTFOUND) THEN(DO) /* Recupera il testo del file di emissione. */ RTVOBJD OBJ(&OUTSRCLSTL/&OUTSRCLSTF) OBJTYPE(*FILE) + TEXT(&RTVTXT) /* Estrae dati dal testo recuperato. */ /* Identification1 = "SrcList: " */ CHGVAR VAR(&RT_ID1) VALUE(%SST(&RTVTXT 1 9)) /* Last From Library = *ALL oppure *ALLUSR */ CHGVAR VAR(&RT_LF) VALUE(%SST(&RTVTXT 10 10)) /* Identification2 = " Last: " */ CHGVAR VAR(&RT_ID2) VALUE(%SST(&RTVTXT 20 7)) /* Last Library In Process = nome ultima libreria in elaborazione. */ CHGVAR VAR(&RT_LL) VALUE(%SST(&RTVTXT 27 10)) /* Se corre un run uguale all'ultimo interrotto. */ IF COND((&RT_ID1 *EQ 'SrcList: ') *AND (&RT_ID2 + *EQ ' Last: ') *AND (&FROMLIB *EQ + &RT_LF) *AND (&RT_LL *NE *END)) THEN(DO) /* Annota la prima la prima libreria da rielaborare. */ CHGVAR VAR(&FIRST) VALUE(&RT_LL) /* Se corre un run uguale all'ultimo interrotto. */ ENDDO /* Se il file esiste. */ ENDDO /* Se corre FROMLIB uguale a *ALL o *ALLUSR. */ ENDDO /* Se corre FROMLIB uguale a *LIBL o *USRLIBL. */ IF COND(&FROMLIB *EQ *LIBL *OR &FROMLIB *EQ + *USRLIBL) THEN(DO) /* Recupera la lista delle librerie. */ RTVJOBA SYSLIBL(&SYSLIBL) CURLIB(&CURLIB) + USRLIBL(&USRLIBL) /* Compone la Total Library List. */ IF COND(&FROMLIB *EQ *LIBL) THEN(CHGVAR + VAR(&TLIBL) VALUE(&SYSLIBL *CAT &CURLIB + *CAT ' ' *CAT &USRLIBL)) IF COND(&FROMLIB *EQ *USRLIBL) THEN(CHGVAR + VAR(&TLIBL) VALUE(&USRLIBL)) /* Trascrive la lista librerie nell'elenco delle librerie indagate. */ OVRDBF FILE(QADSPOBJ) TOFILE(JSRCLSTL0) SECURE(*YES) CALL PGM(JSRCLSTLD) PARM(&TLIBL) DLTOVR FILE(QADSPOBJ) /* Se corre FROMLIB uguale a *LIBL o *USRLIBL. */ ENDDO /* Reindirizza l'elenco dei file nella libreria indagata. */ OVRDBF FILE(QADSPOBJ) TOFILE(JSRCLSTL0) SECURE(*YES) /* Cicla sull'elenco. */ DOWHILE COND('1') /* Legge un record dall'elenco. */ RCVF /* Se non ce ne sono altri, abbandona. */ MONMSG MSGID(CPF0864) EXEC(LEAVE) /* Se corre FROMLIB uguale a *ALL o *ALLUSR. */ IF COND(&FROMLIB *EQ *ALL *OR &FROMLIB *EQ + *ALLUSR) THEN(DO) /* Se la libreria corrente inizia con "JRAS", ricicla. */ IF COND(%SST(&ODOBNM 1 4) *EQ JRAS) THEN(ITERATE) /* Se corre il ripristino di un run, */ /* e la libreria corrente e' inferiore all'ultima */ /* in elaborazione al momento dell'interruzione, */ /* ricicla. */ IF COND((&FIRST *NE ' ') *AND (&ODOBNM *LT + &FIRST)) THEN(ITERATE) /* Se il file esiste. */ IF COND(*NOT &NOTFOUND) THEN(DO) /* Annota l'avanzamento nel testo del file di emissione. */ CHGOBJD OBJ(&OUTSRCLSTL/&OUTSRCLSTF) OBJTYPE(*FILE) + TEXT('SrcList: ' *CAT &FROMLIB *CAT ' + Last: ' *CAT &ODOBNM) /* Se il file esiste. */ ENDDO /* Se corre FROMLIB uguale a *ALL o *ALLUSR. */ ENDDO /* Conta le librerie elaborate. */ CHGVAR VAR(&LIBCNT) VALUE(&LIBCNT + 1) /* Estrae informazioni dalla libreria corrente. */ JSRCLST FROMLIB(&ODOBNM) + OUTSRCLST(&OUTSRCLSTL/&OUTSRCLSTF) + MBROPT(&MBROPT) REFPGM(&REFPGM) RQS(*NO) + RGZ(*NO) MONMSG MSGID(CPF0000 MCH0000) /* Modifica la richiesta in ReplaceLib. */ CHGVAR VAR(&MBROPT) VALUE(*RPLLIB) /* Annota file esiste. */ CHGVAR VAR(&NOTFOUND) VALUE('0') /* Cicla sull'elenco. */ ENDDO /* Se corre FROMLIB uguale a *ALL o *ALLUSR. */ IF COND(&FROMLIB *EQ *ALL *OR &FROMLIB *EQ + *ALLUSR) THEN(DO) /* Annota la fine run nel testo del file di emissione. */ CHGOBJD OBJ(&OUTSRCLSTL/&OUTSRCLSTF) OBJTYPE(*FILE) + TEXT('SrcList: ' *CAT &FROMLIB *CAT ' + Last: ' *CAT '*END') /* Se corre FROMLIB uguale a *ALL o *ALLUSR. */ ENDDO /* Salta all'esecuzione delle attivita' finali. */ GOTO CMDLBL(RCLRSC) /* Label di esecuzione delle attivita' finali. */ RCLRSC: /* Se ha elaborato librerie. */ IF COND(&LIBCNT *GT 0) THEN(DO) /* Riorganizza l'elenco dei sorgenti. */ JSRCLST FROMLIB(*NONE) + OUTSRCLST(&OUTSRCLSTL/&OUTSRCLSTF) + MBROPT(*NONE) REFPGM(&REFPGM) RQS(*NO) + RGZ(*ONLY) MONMSG MSGID(CPF0000 MCH0000) /* Se ha elaborato librerie. */ ENDDO /* Riacquisisce le risorse. */ RCLRSC MONMSG MSGID(CPF0000 MCH0000) /* Se richiesto, rilascia il CPF0001. */ IF COND(&CPF0001) THEN(DO) SNDPGMMSG MSGID(CPF0001) MSGF(QCPFMSG) + MSGDTA(JSRCLSTL) MSGTYPE(*ESCAPE) MONMSG MSGID(CPF0000 MCH0000) ENDDO /* Ritorna. */ RETURN /* Label di errore. */ ERRORE: /* Restituisce i messaggi al chiamante, */ /* trasformando eventuali escape in diagnostici. */ JRSNMSG RMV(*NO) MONMSG MSGID(CPF0000 MCH0000) /* Label di prenotazione del CPF0001. */ CPF0001: /* Prenota il CPF0001. */ CHGVAR VAR(&CPF0001) VALUE('1') MONMSG MSGID(CPF0000 MCH0000) /* Salta alle attivita' finali. */ GOTO CMDLBL(RCLRSC) ENDPGM //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSRCLSTLD) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Claudio Neroni 20-04-2016 Creato. * Source list. Libl. WrtLibl * Lista sorgenti. Lista librerie. Trascrive da libl a file di transito. * *--------------------------------------------------------------------------------------------- * Source list. Libl. List of libraries FQADSPOBJ o e disk *--------------------------------------------------------------------------------------------- * Definisce il parametro contenente fino a 266 librerie di 11 car D ppl s 11 dim(266) *--------------------------------------------------------------------------------------------- C TAG TAG *--------------------------------------------------------------------------------------------- * Predispone chiusura. C seton lr * Scambia parametri. C *entry plist C parm ppl I Library list * Cicla per il numero massimo di librerie in lista. C do 266 x 3 0 * Se la libreria corrente e' QTEMP, ricicla. C if ppl(x) = 'QTEMP' C iter C endif * Se la libreria corrente e' valorizzata. C if ppl(x) <> *blank * Scrive un record nell'elenco librerie da esaminare. C eval odobnm = ppl(x) C write QLIDOBJD * Se la libreria corrente e' valorizzata. C endif * Cicla per il numero massimo di librerie in lista. C enddo *--------------------------------------------------------------------------------------------- //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSRCLSTLP) FILETYPE(*SRC) ENDCHAR('//ENDSRC') :PNLGRP. :IMPORT NAME='*' PNLGRP=JPNL. .*------------------------------------------------------------------------------ :HELP NAME=CMD. :H3.Comando JSRCLSTL :H2.Source list by library list :P.Lista le librerie richieste e chiama la lista sorgenti di ogni singola libreria. :P.Il corrente comando serve come cappello di chiamata del comando originale: :DL COMPACT. :DT.JSRCLST :DD.Source member list :EDL. :P.e granularizza l'elaborazione libreria per libreria. :P.Lo scopo di questo cappello e' evitare la molto impegnativa lista iniziale dei membri sorgenti che il comando originale esegue quando la lista librerie richiesta e' molto vasta. :P.La creazione della lista iniziale delle librerie da esaminare, che questo cappello antepone alla chiamata libreria per libreria del comando originale, permette di ottenere una migliore visibilita' dell'avanzamento dell'elaborazione e un avvio piu' rapido dell'estrazione delle liste dei membri sorgente dalle librerie. :P.Il comando annota la libreria in elaborazione nel testo del file di emissione. :P.In virtu' del proprio flusso elaborativo e delle annotazioni di avanzamento, il comando :HP2.JSRCLSTL:EHP2. , richiamato dopo una caduta con la stessa FROMLIBL *ALL o *ALLUSR, e' in grado di eseguire il completamento del precedente run senza richiedere la libreria di ripartenza che viene letta invece dal testo del file di emissione. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/fromlibl'. :H3.From library list (FROMLIBL) :P.Nome della lista di librerie da indagare. :P.Valori permessi: :PARML. :PT.:PK DEF.*ALL:EPK. :PD.Le librerie da cui estrarre l'elenco dei membri sorgente sono tutte quelle presenti sul sistema. :P.In caso di caduta del run, e' prevista la ripartenza automatica risottoponendo il comando con gli stessi parametri. :PT.*ALLUSR :PD.Le librerie da cui estrarre l'elenco dei membri sorgente sono tutte le librerie utente. :P.In caso di caduta del run, e' prevista la ripartenza automatica risottoponendo il comando con gli stessi parametri. :PT.*LIBL :PD.Le librerie da cui estrarre l'elenco dei membri sorgente sono tutte quelle presenti nella lista librerie corrente. :P.In caso di caduta del run, NON e' prevista la ripartenza automatica. :PT.*USRLIBL :PD.Le librerie da cui estrarre l'elenco dei membri sorgente sono tutte quelle presenti nella parte utente della lista librerie corrente. :P.In caso di caduta del run, NON e' prevista la ripartenza automatica. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/OUTSRCLST'. :H3.Output file (OUTSRCLST) - file :P.Nome del file fisico ricevente l'elenco dei membri sorgente. :P.Se il file di emissione preesiste, le informazioni di ogni libreria esaminata sono sostituite con i dati attuali. :P.Se il file di emissione viene creato dal run corrente, le informazioni di ogni libreria esaminata sono inserite nel file. :P.Si nota che il nome richiesto viene usato per il file fisico di emissione; su tale fisico insiste un gruppo di logici il cui nome e' composto aggiungendo un carattere al nome del fisico di base. Per tale ragione il nome del fisico di base e' limitato a 9 caratteri. :P.Vengono rifiutati i nomi usati per i prototipi dei file. :P.Valori permessi: :PARML. :PT.:PK DEF.JSRCLSTT:EPK. :PD.Il file di emissione prende il nome di default JSRCLSTT. :PT.nome-file-emissione :PD.Il nome indicato viene usato per il file di emissione. :EPARML. :H3.Output file (OUTSRCLST) - library :P.Nome della libreria in cui risiede o deve risiedere il file fisico ricevente l'aggiornamento dell'elenco dei membri sorgente. :P.Valori permessi: :PARML. :PT.:PK DEF.REFALL:EPK. :PD.Il file di emissione da creare o aggiornare risiede nella libreria "REFALL". :PT.nome-libreria :PD.Il file di emissione da creare o aggiornare risiede nella libreria richiesta. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/crtoutf'. :H3.Create outfile if inexistent (CRTOUTF) :P.Opzione di creazione del file di emissione richiesto nel parametro :HP2.OUTSRCLST:EHP2. . L'opzione viene presa in considerazione solo se il file di emissione non preesiste. :P.Valori permessi: :PARML. :PT.:PK DEF.*NO:EPK. :PD.Anche se il file di emissione NON esiste, NON ne e' richiesta la creazione. Quindi, se il file di emissione non preesiste, il comando termina in errore. :PT.*YES :PD.Se il file di emissione NON esiste, ne e' richiesta la creazione. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/refpgm'. :IMHELP NAME='refpgm'. :EHELP. .*------------------------------------------------------------------------------ :HELP NAME='CMD/COMMAND/EXAMPLES'. Esempi per JSRCLSTL :XH3.Esempi per JSRCLSTL :P.:HP2.Esempio 1: Esegue l'estrazione dell'elenco dei membri sorgente da tutte le librerie del sistema creando il file di emissione di default.:EHP2. :XMP. Con i soli parametri necessari: JSRCLSTL CRTOUTF(*YES) Anche con i parametri di default: JSRCLSTL FROMLIBL(*ALL) OUTSRCLST(REFALL/JSRCLSTT) CRTOUTF(*YES) REFPGM(*CPP) :EXMP. :P.Questo comando esegue l'esame di tutte le librerie del sistema creando e utilizzando il file JSRCLSTT nella libreria REFALL. :P.Fare attenzione alla durata: 45 ore per 816000 membri sorgente. :P.:HP2.Esempio 2: Nel file ricavato dall'Esempio 1, aggiorna l'elenco dei membri sorgente presenti nella lista librerie utente corrente:EHP2. :XMP. Con i soli parametri necessari: JSRCLSTL FROMLIBL(*USRLIBL) Anche con i parametri di default: JSRCLSTL FROMLIBL(*USRLIBL) OUTSRCLST(REFALL/JSRCLSTT) CRTOUTF(*NO) REFPGM(*CPP) :EXMP. :P.Questo comando esegue l'esame di tutte le librerie presenti nella lista librerie utente corrente e aggiorna le info presenti nel file JSRCLSTT nella libreria REFALL. :EHELP. .*------------------------------------------------------------------------------ :HELP NAME='CMD/ERROR/MESSAGES'. .*--------------------- :XH3.Messaggi informativi e di completamento :P.:HP3.Messaggi *INFO e *COMP:EHP3. :DL COMPACT. :DT.JSLA002 :DD.&MSG(JSLA002,JSRCLST,*LIBL,nosub). :EDL. .*--------------------- :XH3.Messaggi di errore :P.:HP3.Messaggi *DIAG seguiti da *ESCAPE CPF0001:EHP3. :DL COMPACT. :DT.JSL0109 :DD.&MSG(JSL0109,JSRCLST,*LIBL,nosub). :EDL. :P.Il comando puo' restituire anche tutti i diagnostici previsti dal comando :DL COMPACT. :DT.JSRCLST :DD.Source member list :EDL. .*--------------------- :EHELP. .*------------------------------------------------------------------------------ :EPNLGRP. //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSRCLSTP) FILETYPE(*SRC) ENDCHAR('//ENDSRC') :PNLGRP. :IMPORT NAME='*' PNLGRP=JPNL. .*------------------------------------------------------------------------------ :HELP NAME=CMD. :H3.Comando JSRCLST :H2.Source member list :P.Crea e riempie un file di emissione con l'elenco dei membri sorgente di una libreria o di una lista di librerie. :P.Data la notevole durata dell'elaborazione quando si vogliono ottenere le informazioni su un elenco di librerie, e' assolutamente preferibile utilizzare il comando: :DL COMPACT. :DT.JSRCLSTL :DD.Source list by library list :EDL. :P.che e' un cappello di chiamata ciclica del comando corrente :HP2.JSRCLST:EHP2. e che granularizza l'elaborazione libreria per libreria. :P.Tale comando alternativo permette infatti un avvio piu' rapido del lavoro in quanto risolve una libreria alla volta e permette un miglior controllo dell'avanzamento in quanto annota la libreria in elaborazione nel testo del file di emissione. :P.In virtu' di tali caratteristiche, il comando :HP2.JSRCLSTL:EHP2. , richiamato dopo una caduta con la stessa FROMLIBL *ALL o *ALLUSR, e' in grado di eseguire il completamento del precedente run senza richiedere la libreria di ripartenza che viene letta invece dal testo del file di emissione. :P.L'elenco dei membri sorgente puo' essere interrogato tramite query estemporaneo tramite il comando: :DL COMPACT. :DT.JSRCLSTQ :DD.Source member list Query :EDL. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/fromlib'. :H3.From Library (FROMLIB) :P.Nome della libreria o Lista librerie da indagare. :P.Valori permessi: :PARML. :PT.Nome Libreria :PD.La libreria da cui estrarre l'elenco dei membri sorgente. :EPARML. :P.Valori speciali: :PARML. :PT.:PK DEF.*USRLIBL:EPK. :PD.Le librerie da cui estrarre l'elenco dei membri sorgente sono tutte quelle presenti nella parte utente della lista librerie corrente. :PT.*LIBL :PD.Le librerie da cui estrarre l'elenco dei membri sorgente sono tutte quelle presenti nella lista librerie corrente. :PT.*ALLUSR :PD.Le librerie da cui estrarre l'elenco dei membri sorgente sono tutte le librerie utente. :PT.*ALL :PD.Le librerie da cui estrarre l'elenco dei membri sorgente sono tutte quelle presenti sul sistema. :PT.*CURLIB :PD.La libreria da cui estrarre l'elenco dei membri sorgente e' la libreria corrente. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/OUTSRCLST'. :H3.Output file (OUTSRCLST) - file :P.Nome del file fisico ricevente l'elenco dei membri sorgente. :P.Se la libreria di emissione manca e corre MBROPT(*REPLACE), la libreria viene creata. :P.Se il file di emissione manca e corre MBROPT(*REPLACE), il file viene creato. :P.In tutti gli altri casi, se il file di emissione preesiste, il file viene ricoperto, accodato o parzialmente sostituito. :P.Valori permessi: :PARML. :PT.:PK DEF.JSRCLSTT:EPK. :PD.Il file di emissione prende il nome di default JSRCLSTT. :PT.nome-file-emissione :PD.Il nome indicato viene usato per il file di emissione. :EPARML. :H3.Output file (OUTSRCLST) - library :P.Nome della libreria in cui risiede il file fisico ricevente l'elenco dei membri sorgente. :P.Valori permessi: :PARML. :PT.:PK DEF.REF......:EPK. :PD.Il file di emissione viene creato in libreria "REF......" . Questo specifico valore e' solo un promemoria per invitare all'uso di un nome che inizi con "REF" e, in realta', viene rifiutato dai controlli del command processing program. :PT.nome-libreria :PD.Il file di emissione viene creato nella libreria richiesta. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/mbropt'. :H3.Replace/Add/ReplaceLib info (MBROPT) :P.Opzione di Sostituzione/Aggiunta/SostituzioneParziale delle informazioni. :P.Valori permessi: :PARML. :PT.:PK DEF.*REPLACE:EPK. :PD.Sostituisce tutte le informazioni presenti nell'elenco dei membri sorgente con le info ricavate nel run corrente. Se necessario, crea file di emissione e libreria di emissione. :PT.*ADD :PD.Aggiunge le info ricavate dalle librerie esaminate nel run corrente alle informazioni gia' presenti nell'elenco dei membri sorgente. :PT.*RPLLIB :PD.Sostituisce nell'elenco dei membri sorgente le info relative alla libreria riesaminata nel run corrente. :PT.*NONE :PD.Valore permesso e necessario quando e' richiesta la sola riorganizzazione del file di emissione. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/text'. :H3.Short text of Output (TEXT) :P.Testo del file di Output. :P.Valori permessi: :PARML. :PT.Testo descrittivo :PD.Un testo a piacere da attribuire al file di Output per identificare il suo contenuto per un massimo di 42 caratteri. :EPARML. :P.Valori speciali: :PARML. :PT.:PK DEF.*SAME:EPK. - *FROMLIB - *FROMLIBADD :PD.L'attribuzione del testo avviene valutando le condizioni qui sotto specificate nell'ordine in cui sono elencate: :P.Se corrono MBROPT(*REPLACE) e TEXT(*SAME), compone per il file di Output un testo di 50 caratteri riunendo la costante "SrcList:" con il contenuto del parametro FROMLIB. :P.Se corrono MBROPT(*ADD) e TEXT(*FROMLIBADD), accoda al testo gia' attribuito al file di Output un trattino seguito dal contenuto del parametro FROMLIB. :P.Se corre TEXT(*SAME), lascia inalterato il testo gia' attribuito al file di Output. :P.Se corre TEXT(*FROMLIB), compone per il file di Output un testo di 50 caratteri riunendo la costante "SrcList:" con il contenuto del parametro FROMLIB. :P.In tutti gli altri casi, compone per il file di Output un testo di 50 caratteri riunendo la costante "SrcList:" con il contenuto del parametro TEXT. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/refpgm'. :IMHELP NAME='refpgm'. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/rqs'. :H3.Sends final message request (RQS) :P.Opzione di Invio/NonInvio di messaggi finali di richiesta in joblog. :P.Valori permessi: :PARML. :PT.:PK DEF.*YES:EPK. :PD.Alla fine dell'esecuzione vengono spediti in joblog uno o piu' messaggi di richiesta non eseguibili ma duplicabili da video comandi o da riga comandi. Tali messaggi sono solitamente comandi pronti ad uso di indagine sul risultato elaborativo o adatti a richiamare un passo successivo dell'elaborazione :PT.*NO :PD.Alla fine dell'esecuzione NON viene spedito in joblog nessun messaggio di richiesta. Questa scelta evita di sporcare la joblog quando il comando viene richiamato consecutivamente molte volte, ad esempio da: :DL COMPACT. :DT.JSRCLSTL :DD.Source list by library list :EDL. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/rgz'. :H3.Reorganize Output Source List (RGZ) :P.Riorganizza il file di emissione. :P.Valori permessi: :PARML. :PT.:PK DEF.*YES:EPK. :PD.Alla fine dell'esecuzione viene riorganizzato il file di emissione. :PT.*NO :PD.Alla fine dell'esecuzione NON viene riorganizzato il file di emissione. Questa scelta evita di caricare continue riorganizzazioni quando il comando viene richiamato consecutivamente molte volte, ad esempio da: :DL COMPACT. :DT.JSRCLSTL :DD.Source list by library list :EDL. :PT.*ONLY :PD.L'unica azione svolta sul file di emissione e' la riorganizzaione. Necessaria quando si congeda il file di emissione dopo numerose sostituzioni di dati di singole librerie, ad esempio come passo finale nel gia' menzionato comando :HP2.JSRCLSTL:EHP2. . Il corrente valore richiede anche :HP2.FROMLIB(*NONE):EHP2. e :HP2.MBROPT(*NONE):EHP2. . :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP NAME='CMD/COMMAND/EXAMPLES'. Esempi per JSRCLST :XH3.Esempi per JSRCLST :P.:HP2.Esempio 1: Esegue l'estrazione dell'elenco dei membri sorgente dalla libreria NERONI2 nel file di default nella libreria REFNN1.:EHP2. :XMP. Con i soli parametri necessari: JSRCLST FROMLIB(NERONI2) OUTSRCLST(REFNN1/JSRCLSTT) Anche con i parametri di default: JSRCLST FROMLIB(NERONI2) OUTSRCLST(REFNN1/JSRCLSTT) MBROPT(*REPLACE) TEXT(*SAME) REFPGM(*CPP) RQS(*YES) RGZ(*YES) :EXMP. :P.Questo comando esegue l'esame della libreria NERONI2 creando e utilizzando il file JSRCLSTT nella libreria REFNN1. :P.:HP2.Esempio 2: Accoda l'estrazione dell'elenco dei membri sorgente dalla libreria QGPL nel file generato nell'Esempio 1:EHP2. :XMP. Con i soli parametri necessari: JSRCLST FROMLIB(QGPL) OUTSRCLST(REFNN1/JSRCLSTT) MBROPT(*ADD) TEXT(*FROMLIBADD) anche con i parametri di default: JSRCLST FROMLIB(QGPL) OUTSRCLST(REFNN1/JSRCLSTT) MBROPT(*ADD) TEXT(*FROMLIBADD) REFPGM(*CPP) RQS(*YES) RGZ(*YES) :EXMP. :P.Questo comando esegue l'esame della libreria QGPL accodando l'elenco dei membri sorgente al file JSRCLSTT nella libreria REFNN1. :P.:HP2.Esempio 3: Riesegue l'estrazione dell'elenco dei membri sorgente dalla libreria NERONI2 nel file ottenuto in precedenza dai comandi eseguiti nell'Esempio 1 e nell'Esempio 2.:EHP2. :XMP. Con i soli parametri necessari: JSRCLST FROMLIB(NERONI2) OUTSRCLST(REFNN1/JSRCLSTT) MBROPT(*RPLLIB) Anche con i parametri di default: JSRCLST FROMLIB(NERONI2) OUTSRCLST(REFNN1/JSRCLSTT) MBROPT(*RPLLIB) TEXT(*SAME) REFPGM(*CPP) RQS(*YES) RGZ(*YES) :EXMP. :P.Questo comando aggiorna l'elenco dei membri sorgente ottenuti nell'Esempio 1 con i dati attuali senza toccare i dati relativi alla libreria QGPL estratti nell'Esempio 2. :EHELP. .*------------------------------------------------------------------------------ :HELP NAME='CMD/ERROR/MESSAGES'. .*--------------------- :XH3.Messaggi informativi e di completamento :P.:HP3.Messaggi *INFO e *COMP:EHP3. :DL COMPACT. :DT.JSLA001 :DD.&MSG(JSLA001,JSRCLST,*LIBL,nosub). :DT.JSL0190 :DD.&MSG(JSL0190,JSRCLST,*LIBL,nosub). :EDL. .*--------------------- :XH3.Messaggi di errore :P.:HP3.Messaggi *DIAG seguiti da *ESCAPE CPF0001:EHP3. :DL COMPACT. :DT.JSL0103 :DD.&MSG(JSL0103,JSRCLST,*LIBL,nosub). :DT.JSL0104 :DD.&MSG(JSL0104,JSRCLST,*LIBL,nosub). :DT.JSL0105 :DD.&MSG(JSL0105,JSRCLST,*LIBL,nosub). :DT.JSL0106 :DD.&MSG(JSL0106,JSRCLST,*LIBL,nosub). :DT.JSL0107 :DD.&MSG(JSL0107,JSRCLST,*LIBL,nosub). :DT.JSL0109 :DD.&MSG(JSL0109,JSRCLST,*LIBL,nosub). :DT.JSL0110 :DD.&MSG(JSL0110,JSRCLST,*LIBL,nosub). :DT.JSL0111 :DD.&MSG(JSL0111,JSRCLST,*LIBL,nosub). :EDL. .*--------------------- :P.:HP3.Messaggi *DIAG NON seguiti da *ESCAPE CPF0001:EHP3. :DL COMPACT. :DT.JSL0108 :DD.&MSG(JSL0108,JSRCLST,*LIBL,nosub). :EDL. .*--------------------- :EHELP. .*------------------------------------------------------------------------------ :EPNLGRP. //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSRCLSTQ) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Claudio Neroni 28-02-2014 Creato. */ /* Source list. CmdQry */ /* Interroga l'elenco dei sorgenti. */ /* */ CMD PROMPT('Source member list Query') PARM KWD(SEARCH) TYPE(*CHAR) LEN(10) SPCVAL((*)) + MIN(1) PROMPT('Name fragment to search') PARM KWD(COMP) TYPE(*CHAR) LEN(11) RSTD(*YES) + DFT(*LIKE) VALUES(*EQUAL *LIKE *LIKEBEG + *LIKEEND *LIKEALL) PROMPT('Comparison + operator') PARM KWD(SRCLST) TYPE(SRCLST) PROMPT('Input + Source List') SRCLST: QUAL TYPE(*NAME) LEN(9) DFT(JSRCLSTT) QUAL TYPE(*NAME) DFT(REFALL) MIN(0) + PROMPT('Library') //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSRCLSTQC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Claudio Neroni 26-02-2014 Creato. */ /* Source list. CppQry */ /* Interroga l'elenco dei sorgenti. */ /* */ PGM PARM(&SEARCH &COMP &FILEQ) /* Riceve Frammento di nome da cercare. */ DCL VAR(&SEARCH) TYPE(*CHAR) LEN(10) DCL VAR(&SEARCH2) TYPE(*CHAR) LEN(20) /* Riceve Operatore di comparazione */ /* (*EQUAL, *LIKE, *LIKEBEG, *LIKEEND, *LIKEALL). */ DCL VAR(&COMP) TYPE(*CHAR) LEN(11) DCL VAR(&COMP2) TYPE(*CHAR) LEN(20) /* Riceve Nome qualificato del file di emissione. */ DCL VAR(&FILEQ) TYPE(*CHAR) LEN(19) /* File di emissione. */ DCL VAR(&FILE) TYPE(*CHAR) LEN(9) /* Libreria del File di emissione. */ DCL VAR(&LIB) TYPE(*CHAR) LEN(10) /* Numero di record nel membro della lista sorgenti. */ DCL VAR(&NBRCURRCD) TYPE(*DEC) LEN(10 0) DCL VAR(&NBRCURRCDA) TYPE(*CHAR) LEN(6) /* Tempo di creazione del membro della lista sorgenti. */ DCL VAR(&CRTDATE) TYPE(*CHAR) LEN(13) /* Testo del membro della lista sorgenti. */ DCL VAR(&TEXTM) TYPE(*CHAR) LEN(50) /* Testo del file della lista sorgenti. */ DCL VAR(&TEXTF) TYPE(*CHAR) LEN(50) /* Comodo data e ora per inserimento nei messaggi. */ DCL VAR(&DATE) TYPE(*CHAR) LEN(10) DCL VAR(&TIME) TYPE(*CHAR) LEN(8) /* Definisce i file prototipi e i relativi level check. */ DCL VAR(&PROTO2) TYPE(*CHAR) LEN(10) + VALUE(JSRCLST1) DCL VAR(&LVLCHKP2) TYPE(*CHAR) LEN(13) /* Definisce i level check dei file di input. */ DCL VAR(&LVLCHKI2) TYPE(*CHAR) LEN(13) /* Prenotazione del CPF0001. */ DCL VAR(&CPF0001) TYPE(*LGL) /* Intercetta gli errori. */ MONMSG MSGID(CPF0000 MCH0000 CEE0000) EXEC(GOTO + CMDLBL(ERRORE)) /* Estrae parametri. */ CHGVAR VAR(&FILE) VALUE(%SST(&FILEQ 1 9)) CHGVAR VAR(&LIB) VALUE(%SST(&FILEQ 10 10)) /* Recupera esistenza, presenza dati, tempo di creazione, testo del membro. */ RTVMBRD FILE(&LIB/&FILE) MBR(*FIRST) + CRTDATE(&CRTDATE) TEXT(&TEXTM) + NBRCURRCD(&NBRCURRCD) /* Se lista sorgenti non esiste, diagnostica e abbandona. */ MONMSG MSGID(CPF0000 MCH0000) EXEC(DO) SNDPGMMSG MSGID(JSL0201) MSGF(JSRCLST) MSGDTA(&LIB + *CAT &FILE) MSGTYPE(*DIAG) GOTO CMDLBL(CPF0001) ENDDO /* Recupera testo file. */ RTVOBJD OBJ(&LIB/&FILE) OBJTYPE(*FILE) TEXT(&TEXTF) /* Segnala testi di file e membro della lista sorgenti. */ SNDPGMMSG MSGID(JSL0203) MSGF(JSRCLST) MSGDTA(&TEXTF) + MSGTYPE(*INFO) SNDPGMMSG MSGID(JSL0204) MSGF(JSRCLST) MSGDTA(&TEXTM) + MSGTYPE(*INFO) /* Segnala tempo di creazione della lista sorgenti. */ CVTDAT DATE(%SST(&CRTDATE 1 7)) TOVAR(&DATE) + FROMFMT(*CYMD) TOFMT(*DMYY) TOSEP(-) CHGVAR VAR(&TIME) VALUE(%SST(&CRTDATE 8 2) *CAT ':' + *CAT %SST(&CRTDATE 10 2) *CAT ':' *CAT + %SST(&CRTDATE 12 2)) JDECCHA FROMDEC(&NBRCURRCD) TOCHAR6(&NBRCURRCDA) SNDPGMMSG MSGID(JSL0205) MSGF(JSRCLST) MSGDTA(&LIB + *CAT &FILE *CAT &DATE *CAT &TIME *CAT + &NBRCURRCDA) MSGTYPE(*INFO) /* Recupera il level check di Source list File e del prototipo. */ JRTVFD FILE(&FILE) LIB(&LIB) LVLCHK(&LVLCHKI2) JRTVFD FILE(&PROTO2) LVLCHK(&LVLCHKP2) /* Se Source list File non ha lo stesso level check del prototipo, */ /* diagnostica e prenota rilascio. */ IF COND(&LVLCHKI2 *NE &LVLCHKP2) THEN(DO) SNDPGMMSG MSGID(JSL0206) MSGF(JSRCLST) MSGDTA(&LIB + *CAT &FILE *CAT &PROTO2) MSGTYPE(*DIAG) GOTO CMDLBL(CPF0001) ENDDO /* Se richieste solo informazioni, abbandona. */ IF COND(&SEARCH *EQ '*') THEN(GOTO CMDLBL(RCLRSC)) /* Se lista sorgenti e' vuota, diagnostica e abbandona. */ IF COND(&NBRCURRCD *EQ 0) THEN(DO) SNDPGMMSG MSGID(JSL0202) MSGF(JSRCLST) MSGDTA(&LIB + *CAT &FILE) MSGTYPE(*DIAG) GOTO CMDLBL(CPF0001) ENDDO /* Trascrive l'operatore di comparazione. */ IF COND(&COMP *EQ *EQUAL) THEN(CHGVAR + VAR(&COMP2) VALUE('=')) IF COND(&COMP *EQ *LIKE *OR &COMP *EQ *LIKEBEG + *OR &COMP *EQ *LIKEEND *OR &COMP *EQ + *LIKEALL) THEN(CHGVAR VAR(&COMP2) + VALUE(LIKE)) /* Trascrive il frammento di nome cercato nella forma parametro query. */ IF COND(&COMP *EQ *EQUAL) THEN(CHGVAR + VAR(&SEARCH2) VALUE('''' *TCAT &SEARCH + *TCAT '''')) IF COND(&COMP *EQ *LIKE *OR &COMP *EQ *LIKEBEG) + THEN(CHGVAR VAR(&SEARCH2) VALUE('''' + *TCAT &SEARCH *TCAT '%''')) IF COND(&COMP *EQ *LIKEEND) THEN(CHGVAR + VAR(&SEARCH2) VALUE('''%' *TCAT &SEARCH + *TCAT '''')) IF COND(&COMP *EQ *LIKEALL) THEN(CHGVAR + VAR(&SEARCH2) VALUE('''%' *TCAT &SEARCH + *TCAT '%''')) /* Chiama il query. */ STRQMQRY QMQRY(JSRCLSTQM) SETVAR((SEARCH &SEARCH2) + (COMP &COMP2) (LIB &LIB) (FILE &FILE)) /* Salta all'esecuzione delle attivita' finali. */ GOTO CMDLBL(RCLRSC) /* Label di esecuzione delle attivita' finali. */ RCLRSC: /* Riacquisisce le risorse. */ RCLRSC MONMSG MSGID(CPF0000 MCH0000) /* Se richiesto, rilascia il CPF0001. */ IF COND(&CPF0001) THEN(DO) SNDPGMMSG MSGID(CPF0001) MSGF(QCPFMSG) MSGDTA(JSRCLSTQ) + MSGTYPE(*ESCAPE) MONMSG MSGID(CPF0000 MCH0000) ENDDO /* Ritorna. */ RETURN /* Label di errore. */ ERRORE: /* Restituisce i messaggi al chiamante, */ /* trasformando eventuali escape in diagnostici. */ JRSNMSG RMV(*NO) MONMSG MSGID(CPF0000 MCH0000) /* Label di prenotazione del CPF0001. */ CPF0001: /* Prenota il CPF0001. */ CHGVAR VAR(&CPF0001) VALUE('1') MONMSG MSGID(CPF0000 MCH0000) /* Salta alle attivita' finali. */ GOTO CMDLBL(RCLRSC) ENDPGM //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSRCLSTQM) FILETYPE(*SRC) ENDCHAR('//ENDSRC') SELECT MBNAME, MBLIB, MBFILE, MBSEU2, MBMTXT, MBNRCD, MBCDAT, MBUPDD, MBUPDT FROM &LIB/&FILE WHERE MBNAME &COMP &SEARCH ORDER BY MBNAME, MBLIB, MBFILE //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSRCLSTQP) FILETYPE(*SRC) ENDCHAR('//ENDSRC') :PNLGRP. .*------------------------------------------------------------------------------ :HELP NAME=CMD. :H3.Comando JSRCLSTQ :H2.Source member list Query :P.Ricerca il nome di un membro sorgente nell'elenco dei membri sorgente ricavato dal comando preparatorio JSRCLST. :P.Il comando chiama un query estemporaneo parametrizzato di tipo Query Management Query passandogli il nome intero o un frammento del nome e un operatore di comparazione. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/SEARCH'. :H3.Name fragment to search (SEARCH) :P.Nome o frammento del nome dei membri sorgente da elencare. :P.Valori permessi: :PARML. :PT.Nome Membro o un frammento del nome :PD.Il nome del membro cercato o una sua parte da valutare tramite l'operatore di comparazione. :EPARML. :P.Valori speciali: :PARML. :PT.* :PD.Sono richieste solo le informazioni (testo, data, ora) riguardanti il file contenente la lista generata dal comando preparatorio :HP2.JSRCLST:EHP2. . :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/comp'. :H3.Comparison operator (COMP) :P.Operatore di comparazione. :P.Valori permessi: :PARML. :PT.:PK DEF.*LIKE:EPK. :PD.Trova tutti i membri il cui nome inizia con il frammento di nome ricevuto nel parametro SEARCH. :PT.*EQUAL :PD.Trova tutti i membri il cui nome e' uguale al nome ricevuto nel parametro SEARCH. :PT.*LIKEBEG :PD.Trova tutti i membri il cui nome inizia con il frammento di nome ricevuto nel parametro SEARCH. :PT.*LIKEEND :PD.Trova tutti i membri il cui nome finisce con il frammento di nome ricevuto nel parametro SEARCH. :PT.*LIKEALL :PD.Trova tutti i membri il cui nome contiene in qualunque posizione il frammento di nome ricevuto nel parametro SEARCH. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/SRCLST'. :H3.Input Source List (SRCLST) - file :P.Nome del file di input contenente l'elenco dei membri sorgente da esaminare. :P.Valori permessi: :PARML. :PT.:PK DEF.JSRCLSTT:EPK. :PD.Il nome del file di input e' quello di default JSRCLSTT. :PT.nome-file-input :PD.Il nome del file di input da esaminare. :EPARML. :H3.Input Source List (SRCLST) - library :P.Nome della libreria in cui risiede il file di input contenente l'elenco dei membri sorgente. :P.Valori permessi: :PARML. :PT.:PK DEF.REFALL:EPK. :PD.La libreria contenente il file di input e' REFALL. :PT.nome-libreria :PD.La libreria contenente il file di input. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP NAME='CMD/COMMAND/EXAMPLES'. Esempi per JSRCLSTQ :XH3.Esempi per JSRCLSTQ :P.:HP2.Esempio 1: Visualizza l'elenco dei sorgenti il cui nome contiene in qualunque posizione il frammento di nome "ALA".:EHP2. :XMP. Con i soli parametri necessari: JSRCLSTQ SEARCH(ALA) COMP(*LIKEALL) Anche con i parametri di default: JSRCLSTQ SEARCH(ALA) COMP(*LIKEALL) SRCLST(REFALL/JSRCLSTT) :EXMP. :P.Questo comando esplora il file contenente la lista sorgenti di tutto il sistema preparato in precedenza con il comando :HP2.JSRCLST:EHP2. . :P.Cambiando il parametro COMP si ottengono liste diverse a parita' di frammento di ricerca. :P.:HP2.Esempio 2: Visualizza solo le informazione di testo, data e ora riguardanti il file contenente la lista sorgenti.:EHP2. :XMP. Con i soli parametri necessari: JSRCLSTQ SEARCH(*) SRCLST(REFNERONI2/JSRCLSTT) Si riporta un esempio dei messaggi di risposta in joblog. Testo file lista: SrcList: NERONI2-UFNERONI Testo membro lista: Source list. Crt. OutFile Lista in data/ora: 14-03-2016 11:52:04 :EXMP. :P.Questo comando documenta le informazioni relative ad una lista sorgenti specifica di un gruppo di librerie. Gli stessi messaggi compaiono ad ogni esecuzione del comando ma possono essere richiesti in questo modo anche senza eseguire il query principale. :EHELP. .*------------------------------------------------------------------------------ :HELP NAME='CMD/ERROR/MESSAGES'. .*--------------------- :XH3.Messaggi informativi e di completamento :P.:HP3.Messaggi *INFO e *COMP:EHP3. :DL COMPACT. :DT.JSL0203 :DD.&MSG(JSL0203,JSRCLST,*LIBL,nosub). :DT.JSL0204 :DD.&MSG(JSL0204,JSRCLST,*LIBL,nosub). :DT.JSL0205 :DD.&MSG(JSL0205,JSRCLST,*LIBL,nosub). :EDL. .*--------------------- :XH3.Messaggi di errore :P.:HP3.Messaggi *DIAG seguiti da *ESCAPE CPF0001:EHP3. :DL COMPACT. :DT.JSL0201 :DD.&MSG(JSL0201,JSRCLST,*LIBL,nosub). :DT.JSL0202 :DD.&MSG(JSL0202,JSRCLST,*LIBL,nosub). :DT.JSL0206 :DD.&MSG(JSL0206,JSRCLST,*LIBL,nosub). :EDL. .*--------------------- :EHELP. .*------------------------------------------------------------------------------ :EPNLGRP. //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSRCLSTX) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Claudio Neroni 28-02-2014 Creato. */ /* Source list. CmdQry */ /* Interroga l'elenco dei sorgenti. */ /* */ CMD PROMPT('Source member list Query') PARM KWD(SEARCH) TYPE(*CHAR) LEN(20) SPCVAL((*)) + MIN(1) PROMPT('Search value') PARM KWD(COMP) TYPE(*CHAR) LEN(11) RSTD(*YES) + DFT(*LIKE) VALUES(*EQUAL *LIKE) + PROMPT('Comparison operator') PARM KWD(FILE) TYPE(FILE) PROMPT('Cross File') FILE: QUAL TYPE(*NAME) DFT(JSRCLSTT) QUAL TYPE(*NAME) DFT(REFALL) MIN(0) PROMPT('in + library') //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSRCLSTXC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Claudio Neroni 26-02-2014 Creato. */ /* Source list. CppQry */ /* Estrae in un file di emissione */ /* l'elenco dei membri sorgente della libreria richiesta */ /* */ PGM PARM(&SEARCH &COMP &FILEQ) /* Riceve Nome sorgente. */ DCL VAR(&SEARCH) TYPE(*CHAR) LEN(20) /* Riceve Operatore di comparazione */ /* (*EQUAL, *LIKE, *LIKEBEG, *LIKEEND, *LIKEBEGEND). */ DCL VAR(&COMP) TYPE(*CHAR) LEN(11) DCL VAR(&COMP2) TYPE(*CHAR) LEN(20) /* Riceve Nome qualificato del file di emissione. */ DCL VAR(&FILEQ) TYPE(*CHAR) LEN(20) /* File di emissione. */ DCL VAR(&FILE) TYPE(*CHAR) LEN(10) /* Libreria del File di emissione. */ DCL VAR(&LIB) TYPE(*CHAR) LEN(10) /* Numero di record nel membro di cross reference. */ DCL VAR(&NBRCURRCD) TYPE(*DEC) LEN(10 0) /* Tempo di creazione del membro di cross reference. */ DCL VAR(&CRTDATE) TYPE(*CHAR) LEN(13) /* Testo del membro di cross reference. */ DCL VAR(&TEXTM) TYPE(*CHAR) LEN(50) /* Testo del file di cross reference. */ DCL VAR(&TEXTF) TYPE(*CHAR) LEN(50) /* Comodo data e ora per inserimento nei messaggi. */ DCL VAR(&DATE) TYPE(*CHAR) LEN(10) DCL VAR(&TIME) TYPE(*CHAR) LEN(8) /* Prenotazione del CPF0001. */ DCL VAR(&CPF0001) TYPE(*LGL) /* Intercetta gli errori. */ MONMSG MSGID(CPF0000 MCH0000 CEE0000) EXEC(GOTO + CMDLBL(ERRORE)) /* Estrae parametri. */ CHGVAR VAR(&FILE) VALUE(%SST(&FILEQ 1 10)) CHGVAR VAR(&LIB) VALUE(%SST(&FILEQ 11 10)) /* Recupera esistenza, presenza dati, tempo di creazione, testo del membro. */ RTVMBRD FILE(&LIB/&FILE) MBR(*FIRST) + CRTDATE(&CRTDATE) TEXT(&TEXTM) + NBRCURRCD(&NBRCURRCD) /* Se cross reference non esiste, diagnostica e abbandona. */ MONMSG MSGID(CPF0000 MCH0000) EXEC(DO) SNDPGMMSG MSGID(JSL0201) MSGF(JSRCLST) MSGDTA(&LIB + *CAT &FILE) MSGTYPE(*DIAG) GOTO CMDLBL(CPF0001) ENDDO /* Recupera testo file. */ RTVOBJD OBJ(&LIB/&FILE) OBJTYPE(*FILE) TEXT(&TEXTF) /* Segnala testi di file e membro della cross reference. */ SNDPGMMSG MSGID(JSL0203) MSGF(JSRCLST) MSGDTA(&TEXTF) + MSGTYPE(*INFO) SNDPGMMSG MSGID(JSL0204) MSGF(JSRCLST) MSGDTA(&TEXTM) + MSGTYPE(*INFO) /* Segnala tempo di creazione della cross reference. */ CVTDAT DATE(%SST(&CRTDATE 1 7)) TOVAR(&DATE) + FROMFMT(*CYMD) TOFMT(*DMYY) TOSEP(-) CHGVAR VAR(&TIME) VALUE(%SST(&CRTDATE 8 2) *CAT ':' + *CAT %SST(&CRTDATE 10 2) *CAT ':' *CAT + %SST(&CRTDATE 12 2)) SNDPGMMSG MSGID(JSL0205) MSGF(JSRCLST) MSGDTA(&LIB + *CAT &FILE *CAT &DATE *CAT &TIME) + MSGTYPE(*INFO) /* Se richieste solo informazioni, abbandona. */ IF COND(&SEARCH *EQ '*') THEN(GOTO CMDLBL(RCLRSC)) /* Se cross reference e' vuota, diagnostica e abbandona. */ IF COND(&NBRCURRCD *EQ 0) THEN(DO) SNDPGMMSG MSGID(JSL0202) MSGF(JSRCLST) MSGDTA(&LIB + *CAT &FILE) MSGTYPE(*DIAG) GOTO CMDLBL(CPF0001) ENDDO /* Trascrive l'operatore. */ IF COND(&COMP *EQ *EQUAL) THEN(CHGVAR + VAR(&COMP2) VALUE('=')) IF COND(&COMP *EQ *LIKE) THEN(CHGVAR + VAR(&COMP2) VALUE(LIKE)) /* Chiama il query. */ STRQMQRY QMQRY(JSRCLSTQM) SETVAR((NAME &SEARCH) (COMP + &COMP2) (LIB &LIB) (FILE &FILE)) /* Salta all'esecuzione delle attivita' finali. */ GOTO CMDLBL(RCLRSC) /* Label di esecuzione delle attivita' finali. */ RCLRSC: /* Riacquisisce le risorse. */ RCLRSC MONMSG MSGID(CPF0000 MCH0000) /* Se richiesto, rilascia il CPF0001. */ IF COND(&CPF0001) THEN(DO) SNDPGMMSG MSGID(CPF0001) MSGF(QCPFMSG) MSGDTA(JSRCLSTQ) + MSGTYPE(*ESCAPE) MONMSG MSGID(CPF0000 MCH0000) ENDDO /* Ritorna. */ RETURN /* Label di errore. */ ERRORE: /* Restituisce i messaggi al chiamante, */ /* trasformando eventuali escape in diagnostici. */ JRSNMSG RMV(*NO) MONMSG MSGID(CPF0000 MCH0000) /* Label di prenotazione del CPF0001. */ CPF0001: /* Prenota il CPF0001. */ CHGVAR VAR(&CPF0001) VALUE('1') MONMSG MSGID(CPF0000 MCH0000) /* Salta alle attivita' finali. */ GOTO CMDLBL(RCLRSC) ENDPGM //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSRCLST1) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Claudio Neroni 05-03-2016 Creato. * Source list. Crt. OutFile * Output File for DSPFD TYPE(*MBR) A R QWHFDMBR FORMAT(QAFDMBR) //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSRCLST10) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Claudio Neroni 05-03-2016 Creato. * Source list. Crt. OutFile MBR FIL LIB SYS * Output File for DSPFD TYPE(*MBR) * Chiave Membro, File, Libreria, Sistema. * * Il logico corrente definisce: * 2) il tracciato di riferimento di tutti i logici; * 1) la chiave unica fondamentale. * * Chiave unica. A UNIQUE * Fisico di base. A R QWHFDMBR PFILE(JSRCLST1) * Rielenca tutti i campi del fisico. A MBRCEN A MBRDAT A MBRTIM A MBFILE A MBLIB A MBFTYP A MBFILA A MBMXD A MBFATR A MBSYSN A MBASP A MBRES A MBDTAT A MBWAIT A MBWATR A MBSHAR A MBLVLC A MBTXT A MBNOFM A MBFCCN A MBFCDT A MBFCTM A MBFLS A MBICAP A MBRES2 A MBACCP A MBSELO A MBCSEQ A MBNOMB A MBJOIN A MBRES4 A MBNAME A MBCCEN A MBCDAT A MBCTIM A MBECEN A MBEDAT A MBMTXT A MBAPFI A MBAPLB A MBAPMB A MBMAXM A MBMANT A MBRECV A MBFKAP A MBMXKL A MBMXRL A MBJRNL A MBJRNM A MBJRLB A MBJRIM A MBJRSC A MBJRSD A MBJRST A MBSIZ A MBSIZI A MBSIZM A MBCURI A MBRCDC A MBNRCD A MBNDTR A MBALLO A MBCONT A MBUNIT A MBFMTS A MBFMSL A MBFRCR A MBRSHR A MBDLTP A MBDSSZ A MBISIZ A MBIXNT A MBNACC A MBSEU A MBCHGC A MBCHGD A MBCHGT A MBUPDC A MBUPDD A MBUPDT * Aggiunge al tracciato il campo secolo/data/ora unificati * di ultimo update al sorgente. A MBUPD CONCAT(MBUPDC MBUPDD MBUPDT) A COLHDG('Cen/date/time' + A 'last' + A 'source update' ) A MBEXDC A MBEXDD A MBEXDT A MBLEC A MBLED A MBLET A MBSAVC A MBSAVD A MBSAVT A MBRSTC A MBRSTD A MBRSTT A MBNSCM A MBBOF A MBBOL A MBBOM A MBBOLF A MBBOR A MBBOMA A MBJROM A MBIST A MBISF A MBISL A MBISM A MBISMT A MBISRV A MBISFK A MBISUN A MBACPJ A MBALRD A MBALWT A MBALUP A MBALDT A MBSEU2 A MBUCEN A MBUDAT A MBUCNT A MBTCEN A MBTDAT A MBINDX A MBDSZ2 A MBMXK2 A MBOPOP A MBCLOP A MBWROP A MBUPOP A MBDLOP A MBLRDS A MBPRDS A MBCROP A MBDSCP A MBRGOP A MBAPBL A MBRJKY A MBRJNK A MBRJGR A MBACLR A MBACPR A MBISZ2 A MBSTFR A MBUEV1 A MBUKV1 A MBUKV2 A MBUKV3 A MBUKV4 A MBIOVF A MBINTR A MBINJR A MBINJL A MBIASP A MBRBCK A MBMRCN A MBMRDT A MBMRTM * Definisce la chiave unica fondamentale. A K MBNAME A K MBFILE A K MBLIB A K MBSYSN //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSRCLST11) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Claudio Neroni 08-04-2016 Creato. * Source list. Crt. OutFile MBR FIL LIB UPD SYS * Output File for DSPFD TYPE(*MBR) * Chiave Membro, File, Libreria, Update, Sistema. * * La chiave e' virtualmente unica a causa del logico fondamentale. A* UNIQUE * Richiama il fisico di base. A R QWHFDMBR PFILE(JSRCLST1) * Utilizza il tracciato gia' definito nel logico fondamentale. A FORMAT(JSRCLST10) * Definisce la chiave. A K MBNAME A K MBFILE A K MBLIB A K MBUPD A K MBSYSN //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSRCLST12) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Claudio Neroni 08-04-2016 Creato. * Source list. Crt. OutFile MBR FIL UPD LIB SYS * Output File for DSPFD TYPE(*MBRLIST) * Chiave Membro, File, Update, Libreria, Sistema. * * La chiave e' virtualmente unica a causa del logico fondamentale. A* UNIQUE * Richiama il fisico di base. A R QWHFDMBR PFILE(JSRCLST1) * Utilizza il tracciato gia' definito nel logico fondamentale. A FORMAT(JSRCLST10) * Definisce la chiave. A K MBNAME A K MBFILE A K MBUPD A K MBLIB A K MBSYSN //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSRCLST13) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Claudio Neroni 08-04-2016 Creato. * Source list. Crt. OutFile MBR UPD FIL LIB SYS * Output File for DSPFD TYPE(*MBRLIST) * Chiave Membro, Update, File, Libreria, Sistema. * * La chiave e' virtualmente unica a causa del logico fondamentale. A* UNIQUE * Richiama il fisico di base. A R QWHFDMBR PFILE(JSRCLST1) * Utilizza il tracciato gia' definito nel logico fondamentale. A FORMAT(JSRCLST10) * Definisce la chiave. A K MBNAME A K MBUPD A K MBFILE A K MBLIB A K MBSYSN //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSRCLST16) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Claudio Neroni 08-04-2016 Creato. * Source list. Crt. OutFile UPD FIL LIB MBR SYS * Output File for DSPFD TYPE(*MBR) * Chiave Update, File, Libreria, Membro, Sistema. * * La chiave e' virtualmente unica a causa del logico fondamentale. A* UNIQUE * Richiama il fisico di base. A R QWHFDMBR PFILE(JSRCLST1) * Utilizza il tracciato gia' definito nel logico fondamentale. A FORMAT(JSRCLST10) * Definisce la chiave. A K MBUPD A K MBFILE A K MBLIB A K MBNAME A K MBSYSN //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSRCLST17) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Claudio Neroni 08-04-2016 Creato. * Source list. Crt. OutFile UPD FIL MBR LIB SYS * Output File for DSPFD TYPE(*MBRLIST) * Chiave Update, File, Membro, Libreria, Sistema. * * La chiave e' virtualmente unica a causa del logico fondamentale. A* UNIQUE * Richiama il fisico di base. A R QWHFDMBR PFILE(JSRCLST1) * Utilizza il tracciato gia' definito nel logico fondamentale. A FORMAT(JSRCLST10) * Definisce la chiave. A K MBUPD A K MBFILE A K MBNAME A K MBLIB A K MBSYSN //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSRCLST18) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Claudio Neroni 08-04-2016 Creato. * Source list. Crt. OutFile UPD MBR FIL LIB SYS * Output File for DSPFD TYPE(*MBRLIST) * Chiave Update, Membro, File, Libreria, Sistema. * * La chiave e' virtualmente unica a causa del logico fondamentale. A* UNIQUE * Richiama il fisico di base. A R QWHFDMBR PFILE(JSRCLST1) * Utilizza il tracciato gia' definito nel logico fondamentale. A FORMAT(JSRCLST10) * Definisce la chiave. A K MBUPD A K MBNAME A K MBFILE A K MBLIB A K MBSYSN //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSRCLST19) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Claudio Neroni 08-04-2016 Creato. * Source list. Crt. OutFile FIL LIB MBR UPD SYS * Output File for DSPFD TYPE(*MBRLIST) * Chiave File, Libreria, Membro, Update, Sistema. * * La chiave e' virtualmente unica a causa del logico fondamentale. A* UNIQUE * Richiama il fisico di base. A R QWHFDMBR PFILE(JSRCLST1) * Utilizza il tracciato gia' definito nel logico fondamentale. A FORMAT(JSRCLST10) * Definisce la chiave. A K MBFILE A K MBLIB A K MBNAME A K MBUPD A K MBSYSN //ENDSRC //ENDBCHJOB