//BCHJOB JOB(JFSS) 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-04-01 17:35 */ /* To File : "JFSS" */ /* To Library : "NERONI2" */ /* To Text : "Find Stream Support. Src 112" */ /********* 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 "JFSS.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:\JFSS.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JFSS.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(JFSS) 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/JFSS" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JFSS) MBR(JFSS.) 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/JFSS) CRTSRCPF FILE(NERONI2/JFSS) RCDLEN(112) + TEXT('Find Stream Support. Src 112') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JFSS) TOFILE(NERONI2/JFSS) + TOMBR(JFSS) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JFSS) MBR(JFSS) + SRCTYPE(CMD) + TEXT('Find Stream Support. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JFSS.) TOFILE(NERONI2/JFSS) + TOMBR(JFSS.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JFSS) MBR(JFSS.) + SRCTYPE(CL) + TEXT('Find Stream Support. CrtJs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JFSSC) TOFILE(NERONI2/JFSS) + TOMBR(JFSSC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JFSS) MBR(JFSSC) + SRCTYPE(CLLE) + TEXT('Find Stream Support. Cpp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JFSSD) TOFILE(NERONI2/JFSS) + TOMBR(JFSSD) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JFSS) MBR(JFSSD) + SRCTYPE(RPGLE) + TEXT('Find Stream Support. DltRows') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JFSSE) TOFILE(NERONI2/JFSS) + TOMBR(JFSSE) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JFSS) MBR(JFSSE) + SRCTYPE(RPGLE) + TEXT('Find Stream Support. DltMbrs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JFSSF) TOFILE(NERONI2/JFSS) + TOMBR(JFSSF) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JFSS) MBR(JFSSF) + SRCTYPE(RPGLE) + TEXT('Find Stream Support. CntMbrs') /*---------------------------------------------------------------------*/ //DATA FILE(JFSS) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Find Stream Support. Cmd */ /* Claudio Neroni 22-04-2014 Creato */ CMD PROMPT('Find Stream Support') PARM KWD(STREAM) TYPE(*CHAR) LEN(40) MIN(1) + PROMPT('Find string') PARM KWD(FILE) TYPE(FILE) MIN(1) PROMPT('Search + file') FILE: QUAL TYPE(*NAME) LEN(10) QUAL TYPE(*NAME) LEN(10) DFT(*LIBL) + SPCVAL((*LIBL)) PROMPT('Library') //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JFSS.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JFSS.) JOBD(NERONI2/NERONI2) OUTQ(QPRINTS) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) /* Claudio Neroni 23/04/2014 Creato. */ /* JFSS */ /* Find Stream Support. CrtJs */ /* Prerequisiti: JTBL */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella i programmi preesistenti. */ DLTPGM PGM(NERONI2/JFSSC) DLTPGM PGM(NERONI2/JFSSD) DLTPGM PGM(NERONI2/JFSSE) DLTPGM PGM(NERONI2/JFSSF) /* Cancella i comandi preesistenti. */ DLTCMD CMD(NERONI2/JFSS) /* Crea i programmi. */ CRTBNDRPG PGM(NERONI2/JFSSD) SRCFILE(JFSS) DBGVIEW(*LIST) CRTBNDRPG PGM(NERONI2/JFSSE) SRCFILE(JFSS) DBGVIEW(*LIST) CRTBNDRPG PGM(NERONI2/JFSSF) SRCFILE(JFSS) DBGVIEW(*LIST) CRTBNDCL PGM(NERONI2/JFSSC) SRCFILE(JFSS) DBGVIEW(*LIST) /* Crea i comandi. */ CRTCMD CMD(NERONI2/JFSS) PGM(JFSSC) SRCFILE(JFSS) + HLPPNLGRP(JFSSP) HLPID(CMD) PRDLIB(NERONI2) //ENDBCHJOB //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JFSSC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Find Stream Support. Cpp */ /* Parzializza la stampa di una ricerca pdm dei pgm source rpg ile */ /* per sapere quali programmi pasticciano un certo file. */ /* */ /* ATTENZIONE: La procedura corrente è sensibile */ /* al release e alla lingua del sistema operativo. */ /* Contiene comunque uno schema di ricerca */ /* che, non facendo uso degli oggetti, permette */ /* di costruire una lista "where used" sui sorgenti */ /* in situazioni di sfasatura tra sorgenti e oggetti */ /* o in assenza di oggetti. */ /* */ /* Stampa il Find Stream Pdm di un file source rpg ile. */ /* Lo copia in un file. */ /* Sceglie le specifiche F (Definizione di file) che corrispondono */ /* nel nome ai primi 5 caratteri della stringa di ricerca e che */ /* definiscono il file come Update, Output o Add. */ /* Cancella le altre righe di stampa ad eccezione di quelle */ /* che riportano i nomi dei membri. */ /* Cancella le righe dei membri senza righe di dettaglio. */ /* Stampa le righe superstiti compresa la conta dei membri superstiti. */ /* */ /* Claudio Neroni 22-04-2014 Creato */ PGM PARM(&STRING &FILEQ) /* Riceve Stringa da cercare nel file source. */ DCL VAR(&STRING) TYPE(*CHAR) LEN(40) /* Riceve File source qualificato da esaminare. */ DCL VAR(&FILEQ) TYPE(*CHAR) LEN(20) /* File. */ DCL VAR(&FILE) TYPE(*CHAR) LEN(10) /* Libreria del File. */ DCL VAR(&FILEL) TYPE(*CHAR) LEN(10) /* Estrae parametri. */ CHGVAR VAR(&FILE) VALUE(%SST(&FILEQ 1 10)) CHGVAR VAR(&FILEL) VALUE(%SST(&FILEQ 11 10)) /* Prenota il congelamento dello spool. */ OVRPRTF FILE(QPUOPRTF) HOLD(*YES) USRDTA(&FILE) /* Stampa i record source contenenti la stringa di ricerca. */ FNDSTRPDM STRING(&STRING) FILE(&FILEL/&FILE) MBR(*ALL) + OPTION(*NONE) PRTRCDS(*ALL *CHAR *NOMARK) /* Crea il fisico temporaneo. */ DLTF FILE(QTEMP/JFSS1T) MONMSG MSGID(CPF0000) CRTPF FILE(QTEMP/JFSS1T) RCDLEN(132) SIZE(*NOMAX) /* Copia lo spool in un fisico temporaneo. */ CPYSPLF FILE(QPUOPRTF) TOFILE(QTEMP/JFSS1T) + SPLNBR(*LAST) /* Reindirizza il file fisico. */ OVRDBF FILE(JFSS1) TOFILE(QTEMP/JFSS1T) /* Cancella dal fisico le righe inutili. */ CALL PGM(JFSSD) /* Cancella dal fisico le righe relative ai membri senza righe. */ CALL PGM(JFSSE) /* Conta i membri elencati nel file e scrive il totale nel file stesso. */ CALL PGM(JFSSF) /* Reindirizza lo spool. */ OVRPRTF FILE(QSYSPRT) HOLD(*YES) USRDTA(&FILE) + SPLFNAME(JFSSP) /* Stampa il contenuto superstite. */ CPYF FROMFILE(QTEMP/JFSS1T) TOFILE(QSYSPRT) /* Rimuove i reindirizzamenti. */ DLTOVR FILE(*ALL) /* Visualizza la stampa ottenuta. */ DSPSPLF FILE(JFSSP) SPLNBR(*LAST) ENDPGM //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JFSSD) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /TITLE Find Stream Support. DltRows * Claudio Neroni 22-04-2014 Creato *--------------------------------------------------------------------------------------------- * Copy spool su file fisico. FJFSS1 UP F 132 DISK *--------------------------------------------------------------------------------------------- * Lettura del record e dei campi identificativi dei record utili. D rcd ds 132 D rowid 1 23 D fil 18 23 D sch 27 31 D mbr 27 36 D iou 29 29 D add 32 32 * Lettura del record caratteri maiuscoli. D rcdup ds 132 D rowidup 1 23 D filup 18 23 D schup 27 31 D mbrup 27 36 D iouup 29 29 D addup 32 32 *--------------------------------------------------------------------------------------------- * Legge il record. IJFSS1 NO 01 I 1 132 rcd *--------------------------------------------------------------------------------------------- * Ad ogni record letto. C 01 do * Rialza il record. C *like define rcd XLATDA C CALL 'QDCXLATE' C PARM 132 XLATLE 5 0 I Lungh dati C rcdup PARM rcd XLATDA U Dati C PARM 'JTBLUP' XLATTB 10 I Tabella * Se non ancora estratto il campo di ricerca. C if not *in51 * Se corre riga identificativa del campo di ricerca. C if rowid = 'Ricerca . . . . . . . :' * Estrae il campo di ricerca. C eval fsch = 'F'+schup * Annota estrazione avvenuta. C seton 51 * Se corre riga identificativa del campo di ricerca. C endif * Se non ancora estratto il campo di ricerca. C endif * Se corre riga identificativa del membro sorgente * e se membro corrente è diverso da ultimo membro, * annota ultimo membro e abbandona. C if rowid = 'Membro . . . . . . . :' C and mbrup <> mbrul C eval mbrul = mbrup C leave C endif * Se corre riga identificativa del file cercato. C if filup = fsch * Se corre file di output o di update, abbandona. C if iouup = 'O' C or iouup = 'U' C leave C endif * Se corre file di aggiunta, abbandona. C if addup = 'A' C leave C endif * Se corre riga identificativa del file cercato. C endif * Cancella il record corrente. C delete jfss1 * Ad ogni record letto. C enddo *--------------------------------------------------------------------------------------------- * Inizializza. C *inzsr begsr * Inizializza il campo di ricerca. C eval fsch = *loval C *like define sch fsch +1 * Inizializza il nome ultimo membro. C eval mbrul = *loval C *like define mbrup mbrul C endsr *--------------------------------------------------------------------------------------------- //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JFSSE) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /TITLE Find Stream Support. DltMbrs * Claudio Neroni 23-04-2014 Creato *--------------------------------------------------------------------------------------------- * Copy spool su file fisico. FJFSS1 UF F 132 DISK *--------------------------------------------------------------------------------------------- * Lettura del record e dei campi identificativi dei record utili. D rcd ds 132 D rowid 1 23 D fil 18 23 D sch 27 31 D mbr 27 36 D iou 29 29 D add 32 32 * Lettura del record caratteri maiuscoli. D rcdup ds 132 D rowidup 1 23 D filup 18 23 D schup 27 31 D mbrup 27 36 D iouup 29 29 D addup 32 32 *--------------------------------------------------------------------------------------------- * Legge il record. IJFSS1 NO 01 I 1 132 rcd *--------------------------------------------------------------------------------------------- * Prenota chiusura. C seton lr * Azzera il contatore di righe diverse da membro. C clear cnt 7 0 * Elabora il file dalla fine all'inizio. * Si posiziona alla fine del file. C *hival setgt jfss1 * Cicla. C do *hival * Legge il record precedente. C readp jfss1 * Se non ce ne sono altri, abbandona. C if %eof(jfss1) C leave C endif * Rialza il record letto. C *like define rcd XLATDA C CALL 'QDCXLATE' C PARM 132 XLATLE 5 0 I Lungh dati C rcdup PARM rcd XLATDA U Dati C PARM 'JTBLUP' XLATTB 10 I Tabella * Se non corre riga identificativa del membro sorgente. C if rowid <> 'Membro . . . . . . . :' * Incrementa il contatore di righe diverse da membro. C eval cnt = cnt + 1 * Ricicla. C iter * Se non corre riga identificativa del membro sorgente. C endif * Se il contatore di righe diverse da membro è zero. C if cnt = *zero * Cancella il record membro corrente. C delete jfss1 * Ricicla. C iter * Se il contatore di righe diverse da membro è zero. C endif * Azzera il contatore di righe diverse da membro. C clear cnt * Cicla. C enddo *--------------------------------------------------------------------------------------------- //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JFSSF) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /TITLE Find Stream Support. CntMbrs * Claudio Neroni 22-04-2014 Creato *--------------------------------------------------------------------------------------------- * Copy spool su file fisico. FJFSS1 IP A F 132 DISK *--------------------------------------------------------------------------------------------- * Lettura del record e dei campi identificativi dei record utili. D rcd ds 132 D rowid 1 23 D fil 18 23 D sch 27 31 D mbr 27 36 D iou 29 29 D add 32 32 *--------------------------------------------------------------------------------------------- * Legge il record. IJFSS1 NO 01 I 1 132 rcd *--------------------------------------------------------------------------------------------- * Ad ogni record letto, * se corre riga identificativa del membro sorgente, * conta il record. C 01 if rowid = 'Membro . . . . . . . :' C add 1 cntmbr 7 0 C endif *--------------------------------------------------------------------------------------------- * Emette il contatore come ultima riga del file esaminato. Clr except totale *--------------------------------------------------------------------------------------------- Ojfss1 eadd totale O '*** Numero di membri:' O cntmbr 3 O +1 '***' *--------------------------------------------------------------------------------------------- //ENDSRC //ENDBCHJOB