//BCHJOB JOB(JCTLLF) JOBD(NERONI2/NERONI2) OUTQ(QPRINT) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) /* 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-03-09 12:03 */ /* To File : "JCTLLF" */ /* To Library : "NERONI2" */ /* To Text : "Control logical file pointing. 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 "JCTLLF.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:\JCTLLF.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JCTLLF.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(JCTLLF) 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/JCTLLF" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JCTLLF) MBR(JCTLLF.) 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/JCTLLF) CRTSRCPF FILE(NERONI2/JCTLLF) RCDLEN(112) + TEXT('Control logical file pointing. Src') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCTLLF) TOFILE(NERONI2/JCTLLF) + TOMBR(JCTLLF) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCTLLF) MBR(JCTLLF) + SRCTYPE(CMD) + TEXT('Control logical file pointing. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCTLLF.) TOFILE(NERONI2/JCTLLF) + TOMBR(JCTLLF.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCTLLF) MBR(JCTLLF.) + SRCTYPE(CL) + TEXT('Control logical file pointing. CrtJs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCTLLFC) TOFILE(NERONI2/JCTLLF) + TOMBR(JCTLLFC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCTLLF) MBR(JCTLLFC) + SRCTYPE(CLLE) + TEXT('Control logical file pointing. Cpp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCTLLFD) TOFILE(NERONI2/JCTLLF) + TOMBR(JCTLLFD) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCTLLF) MBR(JCTLLFD) + SRCTYPE(RPGLE) + TEXT('Control logical file pointing. PrtLglOutPhyLib') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCTLLFE) TOFILE(NERONI2/JCTLLF) + TOMBR(JCTLLFE) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCTLLF) MBR(JCTLLFE) + SRCTYPE(RPGLE) + TEXT('Control logical file pointing. PrtPhyOutLglLib') /*---------------------------------------------------------------------*/ //DATA FILE(JCTLLF) FILETYPE(*SRC) ENDCHAR('//ENDSRC') CMD PROMPT('Control logical file pointing') PARM KWD(LIB) TYPE(*NAME) LEN(10) MIN(1) + PROMPT('Library data to be examined') PARM KWD(DSPSPLF) TYPE(*CHAR) LEN(4) RSTD(*YES) + DFT(*YES) VALUES(*YES *NO) + PROMPT('Display spool file') //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JCTLLF.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JCTLLF.) JOBD(NERONI2/NERONI2) OUTQ(QPRINTS) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) /* Claudio Neroni 08-12-2000 Creato. */ /* JCTLLF */ /* Control logical file pointing. CrtJs */ /* Prerequisiti: JRSNMSG */ jmy /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella il file messaggi preesistente. */ DLTMSGF MSGF(NERONI2/JCTLLF) /* Cancella i testi d'aiuto preesistenti. */ DLTPNLGRP PNLGRP(NERONI2/JCTLLFP) /* Cancella i logici preesistenti. */ /* Cancella i fisici preesistenti. */ /* Cancella i comandi preesistenti. */ DLTCMD CMD(NERONI2/JCTLLF) /* Cancella i programmi preesistenti. */ DLTPGM PGM(NERONI2/JCTLLFC) DLTPGM PGM(NERONI2/JCTLLFD) DLTPGM PGM(NERONI2/JCTLLFD) /* Crea i file fisici. */ /* Crea i comandi. */ CRTCMD CMD(NERONI2/JCTLLF) PGM(JCTLLFC) SRCFILE(JCTLLF) + HLPPNLGRP(JCTLLFP) HLPID(CMD) PRDLIB(NERONI2) /* Duplica i comandi in QGPL. */ CRTPRXCMD CMD(QGPL/JCTLLF) TGTCMD(NERONI2/JCTLLF) AUT(*USE) + REPLACE(*YES) /* Crea i programmi. */ CRTBNDCL PGM(NERONI2/JCTLLFC) SRCFILE(JCTLLF) TGTRLS(*CURRENT) + DBGVIEW(*ALL) CRTBNDRPG PGM(NERONI2/JCTLLFD) SRCFILE(JCTLLF) DBGVIEW(*ALL) + TGTRLS(*CURRENT) CRTBNDRPG PGM(NERONI2/JCTLLFE) SRCFILE(JCTLLF) DBGVIEW(*ALL) + TGTRLS(*CURRENT) /* Crea il file messaggi. */ CRTMSGF MSGF(NERONI2/JCTLLF) TEXT('Control logical file pointing. + Msgf') /* Fotografia comandi (xxxA001). */ /* Messaggi comuni a pgm di comandi diversi (xxx0001). */ /* Messaggi nei pgm del Cmd 1 (xxx0101). */ ADDMSGD MSGID(JCL0101) MSGF(NERONI2/JCTLLF) MSG('Libreria in + esame: "&1"') FMT((*CHAR 10)) ADDMSGD MSGID(JCL0102) MSGF(NERONI2/JCTLLF) MSG('Per &1 esistono + sia logici che fisici fuori libreria.') FMT((*CHAR 10)) ADDMSGD MSGID(JCL0103) MSGF(NERONI2/JCTLLF) MSG('Per &1 esistono + logici fuori libreria.') FMT((*CHAR 10)) ADDMSGD MSGID(JCL0104) MSGF(NERONI2/JCTLLF) MSG('Per &1 esistono + fisici fuori libreria.') FMT((*CHAR 10)) ADDMSGD MSGID(JCL0105) MSGF(NERONI2/JCTLLF) MSG('Per &1 non + esistono ne'' logici ne'' fisici fuori libreria.') + FMT((*CHAR 10)) /* Messaggi nei pgm del Cmd 2 (xxx0201). */ /* Messaggi dei Cmd (xxx1001). */ /* Crea i testi d'aiuto. */ CRTPNLGRP PNLGRP(NERONI2/JCTLLFP) SRCFILE(JCTLLF) //ENDBCHJOB //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JCTLLFC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Control logical file pointing. */ /* Claudio Neroni 29/07/2005 Creato. */ /* */ /* Controlla nella libreria esaminata. */ /* 1) La presenza di file fisici portatori di logici fuori libreria. */ /* 2) La presenza di file logici basati su fisici fuori libreria. */ /* */ PGM PARM(&LIB &DSPSPLF) /* Riceve Libreria da esaminare. */ DCL VAR(&LIB) TYPE(*CHAR) LEN(10) /* Riceve Richiesta di visualizzare gli spool file. */ DCL VAR(&DSPSPLF) TYPE(*CHAR) LEN(4) /* Query select. */ DCL VAR(&QRYSLT) TYPE(*CHAR) LEN(512) /* Numero di record nel file. */ DCL VAR(&NCR) TYPE(*DEC) LEN(10) /* Nome sistema. */ DCL VAR(&SYSNAME) TYPE(*CHAR) LEN(8) /* Esistono Logici fuori libreria. */ DCL VAR(&LF) TYPE(*LGL) /* Esistono Fisici fuori libreria. */ DCL VAR(&PF) TYPE(*LGL) /* Identificazione Messaggio. */ DCL VAR(&MSGID) TYPE(*CHAR) LEN(7) /* Prenotazione del CPF0001. */ DCL VAR(&CPF0001) TYPE(*LGL) /* Intercetta gli errori. */ MONMSG MSGID(CPF0000 MCH0000 CEE0000) EXEC(GOTO + CMDLBL(ERRORE)) /* Recupera Nome sistema. */ RTVNETA SYSNAME(&SYSNAME) /* Segnala avanzamento. */ /* JCL0101 Libreria in esame: "&1" */ SNDPGMMSG MSGID(JCL0101) MSGF(NERONI2/JCTLLF) + MSGDTA(&LIB) TOPGMQ(*EXT) MSGTYPE(*STATUS) /* Controlla l'esistenza della libreria. */ CHKOBJ OBJ(QSYS/&LIB) OBJTYPE(*LIB) /* Cancella gli eventuali file di lavoro precedenti. */ DLTF FILE(QTEMP/JCTLLF*) MONMSG MSGID(CPF0000) /* Scarica il Display Data Base Relations di tutti i file della lib. */ DSPDBR FILE(&LIB/*ALL) OUTPUT(*OUTFILE) + OUTFILE(QTEMP/JCTLLF2) /* In assenza di file, salta la stampa. */ MONMSG MSGID(CPF3000) EXEC(GOTO CMDLBL(OLTRE1)) /* Estrae l'elenco dei file fisici portatori di logici fuori libreria. */ CHGVAR VAR(&QRYSLT) VALUE('WHRLI *NE WHRELI *AND + WHRELI *NE " "') OVRDBF FILE(JCTLLF2) TOFILE(QTEMP/JCTLLF2) SHARE(*YES) OPNQRYF FILE((QTEMP/JCTLLF2)) QRYSLT(&QRYSLT) + KEYFLD((WHRFI) (WHRLI) (WHREFI) (WHRELI)) CPYFRMQRYF FROMOPNID(JCTLLF2) TOFILE(QTEMP/JCTLLFY2) + MBROPT(*REPLACE) CRTFILE(*YES) CLOF OPNID(JCTLLF2) /* Recupera il numero dei record emessi. */ RTVMBRD FILE(QTEMP/JCTLLFY2) NBRCURRCD(&NCR) /* In assenza di record, salta la stampa. */ IF COND(&NCR *EQ 0) THEN(GOTO CMDLBL(OLTRE1)) /* Annota la presenza di logici fuori libreria. */ CHGVAR VAR(&LF) VALUE('1') /* Reindirizza la stampa. */ OVRPRTF FILE(QSYSPRT) HOLD(*YES) USRDTA(&LIB) + SPLFNAME(JCTLLF.L) /* Reindirizza i dati da stampare. */ OVRDBF FILE(QADSPDBR) TOFILE(QTEMP/JCTLLFY2) /* Stampa l'elenco dei file fisici portatori di logici fuori libreria. */ CALL PGM(JCTLLFD) PARM(&LIB &SYSNAME) /* Se richiesto, visualizza la stampa appena generata. */ IF COND(&DSPSPLF *EQ *YES) THEN(DO) DSPSPLF FILE(JCTLLF.L) SPLNBR(*LAST) MONMSG MSGID(CPF0000) ENDDO /* Oltre prima stampa. */ OLTRE1: /* Scarica il Display File Description Access Path di tutti i file */ /* logici della libreria. */ DSPFD FILE(&LIB/*ALL) TYPE(*ACCPTH) + OUTPUT(*OUTFILE) FILEATR(*LF) + OUTFILE(QTEMP/JCTLLF3) /* In assenza di logici, salta la stampa. */ MONMSG MSGID(CPF3000) EXEC(GOTO CMDLBL(OLTRE2)) /* Estrae l'elenco dei file logici puntati su fisici fuori libreria . */ CHGVAR VAR(&QRYSLT) VALUE('(APLIB *NE APBOL) *AND + (APKEYN *EQ 0 *OR APKEYN *EQ 1)') OVRDBF FILE(JCTLLF3) TOFILE(QTEMP/JCTLLF3) SHARE(*YES) OPNQRYF FILE((QTEMP/JCTLLF3)) QRYSLT(&QRYSLT) + KEYFLD((APFILE) (APLIB) (APBOF) (APBOL)) CPYFRMQRYF FROMOPNID(JCTLLF3) TOFILE(QTEMP/JCTLLFY3) + MBROPT(*REPLACE) CRTFILE(*YES) CLOF OPNID(JCTLLF3) /* Reindirizza la stampa. */ OVRPRTF FILE(QSYSPRT) HOLD(*YES) USRDTA(&LIB) + SPLFNAME(JCTLLF.F) /* Recupera il numero dei record emessi. */ RTVMBRD FILE(QTEMP/JCTLLFY3) NBRCURRCD(&NCR) /* In assenza di record, salta la stampa. */ IF COND(&NCR *EQ 0) THEN(GOTO CMDLBL(OLTRE2)) /* Annota la presenza di fisici fuori libreria. */ CHGVAR VAR(&PF) VALUE('1') /* Reindirizza i dati da stampare. */ OVRDBF FILE(QAFDACCP) TOFILE(QTEMP/JCTLLFY3) /* Stampa l'elenco dei file logici basati su fisici fuori libreria. */ CALL PGM(JCTLLFE) PARM(&LIB &SYSNAME) /* Se richiesto, visualizza la stampa appena generata. */ IF COND(&DSPSPLF *EQ *YES) THEN(DO) DSPSPLF FILE(JCTLLF.F) SPLNBR(*LAST) MONMSG MSGID(CPF0000) ENDDO /* Oltre seconda stampa. */ OLTRE2: /* Sceglie un messaggio di completamento dell'esecuzione */ /* conforme alle funzioni svolte e al loro esito. */ SELECT /* JCL0102 Per &1 esistono sia logici che fisici fuori libreria. */ WHEN COND(&LF *AND &PF) THEN(CHGVAR VAR(&MSGID) + VALUE(JCL0102)) /* JCL0103 Per &1 esistono logici fuori libreria. */ WHEN COND(&LF) THEN(CHGVAR VAR(&MSGID) + VALUE(JCL0103)) /* JCL0104 Per &1 esistono fisici fuori libreria. */ WHEN COND(&PF) THEN(CHGVAR VAR(&MSGID) + VALUE(JCL0104)) /* JCL0105 Per &1 non esistono ne' logici ne' fisici fuori libreria. */ OTHERWISE CMD(CHGVAR VAR(&MSGID) VALUE(JCL0105)) ENDSELECT /* Manda il messaggio di completamento dell'esecuzione */ SNDPGMMSG MSGID(&MSGID) MSGF(NERONI2/JCTLLF) + MSGDTA(&LIB) MSGTYPE(*COMP) /* Label di esecuzione delle attivitą 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(JCTLLF) + MSGTYPE(*ESCAPE) MONMSG MSGID(CPF0000 MCH0000) ENDDO /* Ritorna. */ RETURN /* Label di errore. */ ERRORE: /* Restituisce i messaggi al chiamante, */ /* trasformando eventuali escape in diagnostici. */ JRSNMSG MONMSG MSGID(CPF0000 MCH0000) /* Label di prenotazione del CPF0001. */ CPF0001: /* Prenota il CPF0001. */ CHGVAR VAR(&CPF0001) VALUE('1') MONMSG MSGID(CPF0000 MCH0000) /* Salta alle attivitą finali. */ GOTO CMDLBL(RCLRSC) ENDPGM //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JCTLLFD) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /TITLE Control logical file pointing. PrtLglOutPhyLib * Claudio Neroni 29-10-2008 Creato. * * Controlla il puntamento dei file logici. * Stampa l'elenco dei logici che puntano ai fisici della libreria in esame * ma si trovano in altre librerie. *--------------------------------------------------------------------------------------------- H decedit('0,') datfmt(*dmy/) datedit(*dmy/) *--------------------------------------------------------------------------------------------- * Display data base relation. Fqadspdbr ip Ae disk * Stampa. Fqsysprt o f 132 printer oflind(*inof) *--------------------------------------------------------------------------------------------- * Trattini. D tra s 132 inz(*all'-') *--------------------------------------------------------------------------------------------- * Controlla l'ordinamento dell'input. IQWHDRDBR I whrfi l4m4 I whrli l3m3 I whrefi l2m2 I whreli l1m1 *--------------------------------------------------------------------------------------------- * Se overflow, stampa intestazione. C if *inof C except int1 C except int3 C endif * Stampa dettaglio. C except det * Stampa fine stampa. Clr except eop *--------------------------------------------------------------------------------------------- * Inizializza. C *inzsr begsr * Scambia parametri. C *entry plist * Riceve Libreria da esaminare. C parm pplib 10 * Riceve Nome del sistema. C parm ppsnam 8 * Time. C time time 6 0 * Compone il comando ricevuto per stamparlo. C clear cmd 132 C eval cmd='JCTLLF LIB(' + C %trim(pplib) + C ')' * Stampa l'intestazione della prima pagina. C except int1 C except int2 C except int3 C endsr *--------------------------------------------------------------------------------------------- * Intestazione. Oqsysprt e int1 2 1 O e int2 1 O cmd O e int3 1 O 'List of Logical file ' O 'out of Physical library' O 70 'Pag' O page +1 O 97 'SysName:' O ppsnam +1 O *date y 120 O time +2 '0 : : ' O e int3 1 O tra O e int3 1 O 'Physical ' O +1 'Library ' O +1 'Logical ' O +1 'Library ' O e int3 1 O 'file ' O +1 ' ' O +1 'file ' O +1 ' ' O e int3 1 O tra * Dettaglio esplosione. O e det 1 O whrfi O whrli +1 O whrefi +1 O whreli +1 * Fine stampa. O e eop 1 O '*** End of print ***' *--------------------------------------------------------------------------------------------- //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JCTLLFE) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /TITLE Control logical file pointing. PrtPhyOutLglLib * Claudio Neroni 29-10-2008 Creato. * * Controlla il puntamento dei file fisici. * Stampa l'elenco dei fisici che sono puntati dai logici * della libreria in esame ma si trovano in altre librerie. *--------------------------------------------------------------------------------------------- H decedit('0,') datfmt(*dmy/) datedit(*dmy/) *--------------------------------------------------------------------------------------------- * Display file description type access path. Fqafdaccp ip Ae disk * Stampa. Fqsysprt o f 132 printer oflind(*inof) *--------------------------------------------------------------------------------------------- * Trattini. D tra s 132 inz(*all'-') *--------------------------------------------------------------------------------------------- * Controlla l'ordinamento dell'input. IQWHFDACP I apfile l4m4 I aplib l3m3 I apbof l2m2 I apbol l1m1 *--------------------------------------------------------------------------------------------- * Se overflow, stampa intestazione. C if *inof C except int1 C except int3 C endif * Stampa dettaglio. C except det * Stampa fine stampa. Clr except eop *--------------------------------------------------------------------------------------------- * Inizializza. C *inzsr begsr * Scambia parametri. C *entry plist * Riceve Libreria da esaminare. C parm pplib 10 * Riceve Nome del sistema. C parm ppsnam 8 * Time. C time time 6 0 * Compone il comando ricevuto per stamparlo. C clear cmd 132 C eval cmd='JCTLLF LIB(' + C %trim(pplib) + C ')' * Stampa l'intestazione della prima pagina. C except int1 C except int2 C except int3 C endsr *--------------------------------------------------------------------------------------------- * Intestazione. Oqsysprt e int1 2 1 O e int2 1 O cmd O e int3 1 O 'List of Physical file ' O 'out of Logical library' O 70 'Pag' O page +1 O 97 'SysName:' O ppsnam +1 O *date y 120 O time +2 '0 : : ' O e int3 1 O tra O e int3 1 O 'Logical ' O +1 'Library ' O +1 'Physical ' O +1 'Library ' O e int3 1 O 'file ' O +1 ' ' O +1 'file ' O +1 ' ' O e int3 1 O tra * Dettaglio esplosione. O e det 1 O apfile O aplib +1 O apbof +1 O apbol +1 * Fine stampa. O e eop 1 O '*** End of print ***' *--------------------------------------------------------------------------------------------- //ENDSRC //ENDBCHJOB