//BCHJOB JOB(JCHKREF) JOBD(QBATCH) OUTQ(QPRINT) ENDSEV(60) + LOG(4 00 *SECLVL) MSGQ(*USRPRF) /* Open source scaricabile da www.neroni.it di Claudio Neroni */ /* SE L'USO DELLA JOB DESCRIPTION "QBATCH" TI E' IMPEDITO, */ /* UTILIZZANE UNA DIVERSA. */ /* From System: "IUBICSVI" */ /* From Library: "UTI" */ /* Unload Time: 2009-01-20 17:09 */ /* To File : "JCHKREF" */ /* To Library : "NERONI2" */ /* To Text : "Check Reference. 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 "JCHKREF.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:\JCHKREF.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JCHKREF.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(JCHKREF) 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/JCHKREF" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JCHKREF) MBR(JCHKREF.) JOBQ(QBATCH) */ /********* FINE ISTRUZIONI *********************************************/ /* Crea la libreria. */ MKDIR DIR('/qsys.lib/NERONI2.lib') CHGLIB LIB(NERONI2) TEXT('Utility di Claudio Neroni') /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP NERONI2 QGPL) /* Crea il file sorgente. */ DLTF FILE(NERONI2/JCHKREF) CRTSRCPF FILE(NERONI2/JCHKREF) RCDLEN(112) + TEXT('Check Reference. Src') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCHKREF) TOFILE(NERONI2/JCHKREF) + TOMBR(JCHKREF) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCHKREF) MBR(JCHKREF) + SRCTYPE(CMD) + TEXT('Check Reference. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCHKREF.) TOFILE(NERONI2/JCHKREF) + TOMBR(JCHKREF.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCHKREF) MBR(JCHKREF.) + SRCTYPE(CL) + TEXT('Check Reference. CrtJs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCHKREFC) TOFILE(NERONI2/JCHKREF) + TOMBR(JCHKREFC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCHKREF) MBR(JCHKREFC) + SRCTYPE(CLLE) + TEXT('Check Reference. Cpp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCHKREFD) TOFILE(NERONI2/JCHKREF) + TOMBR(JCHKREFD) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCHKREF) MBR(JCHKREFD) + SRCTYPE(RPGLE) + TEXT('Check Reference. PrtLost') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCHKREFE) TOFILE(NERONI2/JCHKREF) + TOMBR(JCHKREFE) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCHKREF) MBR(JCHKREFE) + SRCTYPE(CLLE) + TEXT('Check Reference. ChkObj') /*---------------------------------------------------------------------*/ //DATA FILE(JCHKREF) FILETYPE(*SRC) ENDCHAR('//ENDSRC') CMD PROMPT('Check Reference') PARM KWD(LIB) TYPE(*NAME) LEN(10) DFT(*USRLIBL) + SPCVAL((*USRLIBL) (*LIBL) (*CURLIB) + (*ALLUSR) (*ALL)) PROMPT('Library to be + examined') //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JCHKREF.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JCHKREF.) JOBD(QBATCH) OUTQ(QPRINTS) ENDSEV(60) LOG(4 + 00 *SECLVL) MSGQ(*USRPRF) /* Claudio Neroni 20-01-2009 Creato. */ /* JCHKREF */ /* Check Reference. */ /* Prerequisiti: JRSNMSG */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella gli oggetti preesistenti. */ DLTCMD CMD(NERONI2/JCHKREF) DLTPGM PGM(NERONI2/JCHKREFC) DLTPGM PGM(NERONI2/JCHKREFD) DLTPGM PGM(NERONI2/JCHKREFE) /* Crea gli oggetti. */ CRTBNDCL PGM(NERONI2/JCHKREFC) SRCFILE(JCHKREF) DBGVIEW(*ALL) CRTBNDRPG PGM(NERONI2/JCHKREFD) SRCFILE(JCHKREF) DBGVIEW(*ALL) CRTBNDCL PGM(NERONI2/JCHKREFE) SRCFILE(JCHKREF) DBGVIEW(*ALL) CRTCMD CMD(NERONI2/JCHKREF) PGM(JCHKREFC) SRCFILE(JCHKREF) PRDLIB(NERONI2) //ENDBCHJOB //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JCHKREFC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Check Reference. ChkObj */ /* Claudio Neroni 20-01-2009 Creato. */ /* */ /* Controlla per i programmi della libreria esaminata */ /* la presenza in lista librerie degli oggetti referenziati. */ /* */ PGM PARM(&LIB) /* Riceve Libreria da esaminare. */ DCL VAR(&LIB) TYPE(*CHAR) LEN(10) /* Nome sistema. */ DCL VAR(&SYSNAME) TYPE(*CHAR) LEN(8) /* Messaggio. */ DCL VAR(&MSG) TYPE(*CHAR) LEN(512) /* 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. */ SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) + MSGDTA('Libreria in esame: "' *TCAT &LIB + *TCAT '"') TOPGMQ(*EXT) MSGTYPE(*STATUS) /* Se richiesta una libreria specifica. */ /* Controlla l'esistenza della libreria. */ IF COND(%SST(&LIB 1 1) *NE '*') THEN(DO) CHKOBJ OBJ(QSYS/&LIB) OBJTYPE(*LIB) ENDDO /* Cancella gli eventuali file di lavoro precedenti. */ DLTF FILE(QTEMP/JCHKREF*) MONMSG MSGID(CPF0000) /* Scarica il Display Program Reference di tutti i pgm della lib. */ DSPPGMREF PGM(&LIB/*ALL) OUTPUT(*OUTFILE) + OBJTYPE(*ALL) OUTFILE(QTEMP/JCHKREF1) /* In assenza di riferimenti, salta la stampa. */ MONMSG MSGID(CPF3000) EXEC(GOTO CMDLBL(RCLRSC)) /* Reindirizza l'elenco dei riferimenti. */ OVRDBF FILE(QADSPPGM) TOFILE(QTEMP/JCHKREF1) + SHARE(*YES) /* Ordina i riferimenti. */ OPNQRYF FILE((QTEMP/JCHKREF1)) KEYFLD((WHLNAM) + (WHFNAM) (WHOTYP)) /* Reindirizza la stampa. */ OVRPRTF FILE(QSYSPRT) HOLD(*YES) USRDTA(&LIB) + SPLFNAME(JCHKREF) /* Stampa l'elenco dei riferimenti assenti. */ CALL PGM(JCHKREFD) PARM(&LIB &SYSNAME) /* Chiude il file. */ CLOF OPNID(JCHKREF1) /* Elimina i reindirizzamenti. */ DLTOVR FILE(*ALL) /* Visualizza la stampa appena generata. */ DSPSPLF FILE(JCHKREF) SPLNBR(*LAST) MONMSG MSGID(CPF0000) /* Manda un messaggio di completamento dell'esecuzione */ /* conforme alle funzioni svolte e al loro esito. */ CHGVAR VAR(&MSG) VALUE('Esaminata "' *TCAT &LIB + *TCAT '".') SNDPGMMSG MSG(&MSG) 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(JCHKREF) + 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 attivitā finali. */ GOTO CMDLBL(RCLRSC) ENDPGM //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JCHKREFD) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /TITLE Check Reference. PrtLost * Claudio Neroni 20-01-2009 Creato. * * Stampa l'elenco dei riferimenti non trovati in lista librerie. *--------------------------------------------------------------------------------------------- H decedit('0,') datfmt(*dmy/) datedit(*dmy/) *--------------------------------------------------------------------------------------------- * Display data base relation. FQADSPPGM ip Ae disk * Stampa. Fqsysprt o f 132 printer oflind(*inof) *--------------------------------------------------------------------------------------------- * Trattini. D tra s 132 inz(*all'-') *--------------------------------------------------------------------------------------------- * Controlla l'ordinamento dell'input. IQWHDRPPR I whlnam l3m3 I whfnam l2m2 I whotyp l1m1 *--------------------------------------------------------------------------------------------- * Se overflow, stampa intestazione. C if *inof C except int1 C except int3 C endif * Controlla l'esistenza del riferimento in lista librerie. C call(e) 'JCHKREFE' C parm whfnam qqlib 10 C parm whotyp qqtyp 10 C parm qqok 1 * Se la chiamata č in errore o se il riferimento non č trovato. * Stampa dettaglio. C if %error or qqok <> *on C except det C endif * 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='JCHKREF 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 Program Reference ' O 'not found in library list' 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 'Library ' O +1 'Object ' O +1 'Type ' O +1 'Library ' O +1 'Program ' O +1 'Text ' O e int3 1 O tra * Dettaglio esplosione. O e det 1 O whlnam O whfnam +1 O whotyp +1 O whlib +1 O whpnam +1 O whtext +1 * Fine stampa. O e eop 1 O '*** End of print ***' *--------------------------------------------------------------------------------------------- //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JCHKREFE) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Controlla esistenza oggetto. */ PGM PARM(&OBJ &OBJTYPE &OK) /* Riceve Nome oggetto. */ DCL VAR(&OBJ) TYPE(*CHAR) LEN(10) /* Riceve Tipo oggetto. */ DCL VAR(&OBJTYPE) TYPE(*CHAR) LEN(10) /* Restituisce 1=Oggetto esiste. */ DCL VAR(&OK) TYPE(*LGL) /* Assume oggetto esistente. */ CHGVAR VAR(&OK) VALUE('1') /* Controlla l'esistenza dell'oggetto. */ CHKOBJ OBJ(*LIBL/&OBJ) OBJTYPE(&OBJTYPE) /* Se l'oggetto non esiste, lo annota. */ MONMSG MSGID(CPF0000) EXEC(CHGVAR VAR(&OK) VALUE('0')) ENDPGM //ENDSRC //ENDBCHJOB