//BCHJOB JOB(JZONF) JOBD(NERONI2/NERONI2) OUTQ(QPRINT) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) CCSID(280) /* Open source from www.neroni.it */ /* LA JOB DESCRIPTION "NERONI2/NERONI2" DEVE PREESISTERE. PUO' ESSERE */ /* IDENTICA A QBATCH E PUO' ESSERE SOSTITUITA DA QBATCH O SIMILE. */ /* From System: "DEV720" */ /* From Library: "NERONI2" */ /* Unload Time: 2016-05-31 14:32 */ /* To File : "JZONF" */ /* To Library : "NERONI2" */ /* To Text : "File Zoner. 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 "JZONF.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:\JZONF.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JZONF.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(JZONF) 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/JZONF" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JZONF) MBR(JZONF.) 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/JZONF) CRTSRCPF FILE(NERONI2/JZONF) RCDLEN(112) + TEXT('File Zoner. Src') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JZONF) TOFILE(NERONI2/JZONF) + TOMBR(JZONF) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JZONF) MBR(JZONF) + SRCTYPE(CMD) + TEXT('File zoner. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JZONF.) TOFILE(NERONI2/JZONF) + TOMBR(JZONF.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JZONF) MBR(JZONF.) + SRCTYPE(CL) + TEXT('File zoner. CrtJs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JZONFC) TOFILE(NERONI2/JZONF) + TOMBR(JZONFC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JZONF) MBR(JZONFC) + SRCTYPE(CLLE) + TEXT('File zoner. Cpp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JZONFD) TOFILE(NERONI2/JZONF) + TOMBR(JZONFD) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JZONF) MBR(JZONFD) + SRCTYPE(RPGLE) + TEXT('File zoner. WrtSrcZone') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JZONFE) TOFILE(NERONI2/JZONF) + TOMBR(JZONFE) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JZONF) MBR(JZONFE) + SRCTYPE(RPGLE) + TEXT('File zoner. WrtSrcFlat') /*----------------------------------------------------------------------------*/ //DATA FILE(JZONF) FILETYPE(*SRC) ENDCHAR('//ENDSRC') CMD PROMPT('File Zoner') PARM KWD(FILE) TYPE(FILE) MIN(1) PROMPT('File da + disimpaccare') FILE: QUAL TYPE(*NAME) QUAL TYPE(*NAME) DFT(*LIBL) SPCVAL((*LIBL)) + PROMPT('libreria') PARM KWD(OUTLIB) TYPE(*NAME) LEN(10) MIN(1) + PROMPT('Libreria del disimpaccato') //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JZONF.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JZONF.) JOBD(NERONI2/NERONI2) OUTQ(QPRINTS) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) CCSID(280) jmy /* Claudio Neroni 21/07/2008 Creato. */ /* JZONF */ /* File zoner. */ /* Crea un duplicato del file ricevuto ma con i campi numerici zonati. */ /* Prerequisiti: nessuno. */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella gli oggetti preesistenti. */ DLTCMD CMD(NERONI2/JZONF) DLTPGM PGM(NERONI2/JZONFC) DLTPGM PGM(NERONI2/JZONFD) DLTPGM PGM(NERONI2/JZONFE) /* Crea gli oggetti. */ CRTBNDCL PGM(NERONI2/JZONFC) SRCFILE(JZONF) DBGVIEW(*ALL) CRTBNDRPG PGM(NERONI2/JZONFD) SRCFILE(JZONF) DBGVIEW(*ALL) CRTBNDRPG PGM(NERONI2/JZONFE) SRCFILE(JZONF) DBGVIEW(*ALL) CRTCMD CMD(NERONI2/JZONF) PGM(JZONFC) SRCFILE(JZONF) PRDLIB(NERONI2) CRTPRXCMD CMD(QGPL/JZONF) TGTCMD(NERONI2/JZONF) AUT(*USE) + REPLACE(*YES) //ENDBCHJOB //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JZONFC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* File Zoner. Cpp */ /* Claudio Neroni 21/07/2008 Creato. */ /* */ PGM PARM(&FILEQ &OUTLIB) /* Riceve File qualificato. */ DCL VAR(&FILEQ) TYPE(*CHAR) LEN(20) /* Libreria di emissione. */ DCL VAR(&OUTLIB) TYPE(*CHAR) LEN(10) /* File. */ DCL VAR(&FILE) TYPE(*CHAR) LEN(10) /* Libreria del File. */ DCL VAR(&FILEL) TYPE(*CHAR) LEN(10) /* Testo del file. */ DCL VAR(&TEXT) TYPE(*CHAR) LEN(50) /* Indirizzario. */ DCL VAR(&DIR) TYPE(*CHAR) LEN(100) /* Prenotazione del CPF0001. */ DCL VAR(&CPF0001) TYPE(*LGL) /* Intercetta gli errori. */ MONMSG MSGID(CPF0000 MCH0000 CEE0000) EXEC(GOTO + CMDLBL(ERRORE)) /* Estrae File e Libreria. */ CHGVAR VAR(&FILE) VALUE(%SST(&FILEQ 1 10)) CHGVAR VAR(&FILEL) VALUE(%SST(&FILEQ 11 10)) /* Controlla l'esistenza del file e ne recupera il testo. */ RTVOBJD OBJ(&FILEL/&FILE) OBJTYPE(*FILE) TEXT(&TEXT) /* Controlla l'esistenza della libreria di emissione. */ CHKOBJ OBJ(&OUTLIB) OBJTYPE(*LIB) /* Se la libreria di emissione non esiste, la crea. */ MONMSG MSGID(CPF0000) EXEC(DO) CHGVAR VAR(&DIR) VALUE('/qsys.lib/' *CAT &OUTLIB + *TCAT '.lib') MKDIR DIR(&DIR) CHGLIB LIB(&OUTLIB) TEXT('Duplicato con file + disimpaccati') ENDDO /* Cancella i file temporanei. */ DLTF FILE(QTEMP/JZONF*) MONMSG MSGID(CPF0000 MCH0000) /* Crea il file sorgente dei disimpaccati nella libreria di emissione. */ CRTSRCPF FILE(&OUTLIB/JZONFSRC) TEXT('Sorgenti dei + fisici disimpaccati') MONMSG MSGID(CPF0000 MCH0000) /* Crea il file sorgente dei piatti nella libreria di emissione. */ CRTSRCPF FILE(&OUTLIB/JZONFFLT) TEXT('Sorgenti dei + fisici piatti') MONMSG MSGID(CPF0000 MCH0000) /* Rimuove preliminarmente il membro sorgente del file disimpaccato. */ RMVM FILE(&OUTLIB/JZONFSRC) MBR(&FILE) MONMSG MSGID(CPF0000 MCH0000) /* Rimuove preliminarmente il membro sorgente del file piatto. */ RMVM FILE(&OUTLIB/JZONFFLT) MBR(&FILE) MONMSG MSGID(CPF0000 MCH0000) /* Aggiunge il membro sorgente del file disimpaccato. */ ADDPFM FILE(&OUTLIB/JZONFSRC) MBR(&FILE) + TEXT(&TEXT) SRCTYPE(PF) /* Aggiunge il membro sorgente del file piatto. */ ADDPFM FILE(&OUTLIB/JZONFFLT) MBR(&FILE) + TEXT(&TEXT) SRCTYPE(PF) /* Recupera l'elenco dei campi del file da disimpaccare. */ DSPFFD FILE(&FILEL/&FILE) OUTPUT(*OUTFILE) + OUTFILE(QTEMP/JZONFFFD) /* Aggiunge tali campi al sorgente del file di emissione. */ OVRDBF FILE(QADSPFFD) TOFILE(QTEMP/JZONFFFD) OVRDBF FILE(JZONFSRC) TOFILE(&OUTLIB/JZONFSRC) + MBR(&FILE) CALL PGM(JZONFD) /* Cancella l'eventuale vecchio file disimpaccato. */ DLTF FILE(&OUTLIB/&FILE) MONMSG MSGID(CPF0000 MCH0000) /* Cancella l'eventuale vecchio file piatto. */ DLTF FILE(QTEMP/JZONFFLAT) MONMSG MSGID(CPF0000 MCH0000) /* Crea il file disimpaccato. */ CRTPF FILE(&OUTLIB/&FILE) + SRCFILE(&OUTLIB/JZONFSRC) SRCMBR(&FILE) + MBR(*NONE) MAXMBRS(*NOMAX) SIZE(*NOMAX) /* Recupera l'elenco dei campi del file disimpaccato. */ DSPFFD FILE(&OUTLIB/&FILE) OUTPUT(*OUTFILE) + OUTFILE(QTEMP/JZONFFFD) /* Crea il sorgente del file piatto. */ OVRDBF FILE(QADSPFFD) TOFILE(QTEMP/JZONFFFD) OVRDBF FILE(JZONFFLT) TOFILE(&OUTLIB/JZONFFLT) + MBR(&FILE) CALL PGM(JZONFE) /* Crea il file piatto. */ CRTPF FILE(QTEMP/JZONFFLAT) + SRCFILE(&OUTLIB/JZONFFLT) SRCMBR(&FILE) + SIZE(*NOMAX) /* Cancella gli spool file di compilazione. */ /* Gli spool restano se le compilazioni falliscono. */ DLTSPLF FILE(&FILE) SPLNBR(*LAST) DLTSPLF FILE(JZONFFLAT) SPLNBR(*LAST) /* Salta all'esecuzione delle attivitą finali. */ GOTO CMDLBL(RCLRSC) /* Label di esecuzione delle attivitą finali. */ RCLRSC: /* Cancella i file di lavoro. */ /* ... */ /* Riacquisisce le risorse. */ RCLRSC MONMSG MSGID(CPF0000 MCH0000) /* Se richiesto, rilascia il CPF0001. */ IF COND(&CPF0001) THEN(DO) SNDPGMMSG MSGID(CPF0001) MSGF(QCPFMSG) MSGDTA(JZONF) + 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(JZONFD) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /TITLE File Zoner. WrtSrcZone * Claudio Neroni 21/08/2008 Creato. *--------------------------------------------------------------------- * Scrive il sorgente del file disimpaccato. *--------------------------------------------------------------------- * Display File Field Description. Fqadspffd ip e disk * Sorgente del file fisico duplicato. Fjzonfsrc o f 92 disk *--------------------------------------------------------------------- * Incrementa il contatore. C add 1 cnt * Compone "LIBRERIA/FILE)" C eval libfil=%trim(whlib)+'/'+%trim(whfile)+')' * Se corre il primo campo, * scrive la specifica sorgente del record. C if cnt=1 C except rec C endif * Se corre campo impaccato o binario, richiede campo segnato. C clear zone 1 C if whfldt = 'P' C or whfldt = 'B' C eval zone = 'S' C endif * Scrive le specifiche sorgenti del campo. C except wri * A fine campi, accoda "FINE". Clr add 1 cnt Clr except end *--------------------------------------------------------------------- * Inizializza. C *inzsr begsr * Inizializza il contarighe. C z-add *zero cnt 4 0 * Definisce un comodo per l'emissione. C clear libfil 22 * Prima dei campi, accoda "INIZIO". C except beg C endsr *--------------------------------------------------------------------- * Riga di inizio. Ojzonfsrc e beg O cnt 4 O 6 '00' O 12 '000000' O 18 ' ' O '* INIZIO' * Riga del record. O e rec O cnt 4 O 6 '00' O 12 '000000' O 18 'A' O 29 'R' O whname +1 * Prima riga del campo. O e wri O cnt 4 O 6 '01' O 12 '000000' O 18 'A' O whfldi 40 O 41 'R' O zone 47 O 63 'REFFLD(' O whfldi O ' +' * Seconda riga del campo. O e wri O cnt 4 O 6 '02' O 12 '000000' O 18 'A' O 56 ' ' O libfil * Riga di fine. O e end O cnt 4 O 6 '00' O 12 '000000' O 18 ' ' O '* FINE' *--------------------------------------------------------------------- //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JZONFE) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /TITLE File Zoner. WrtSrcFlat * Claudio Neroni 21/08/2008 Creato. *--------------------------------------------------------------------- * Scrive il sorgente del file piatto. *--------------------------------------------------------------------- * Display File Field Description. Fqadspffd ip e disk * Sorgente del file fisico piatto. Fjzonfflt o f 92 disk *--------------------------------------------------------------------- * Incrementa il contatore. C add 1 cnt * Se corre il primo campo, * scrive la specifica sorgente del record. C if cnt=1 C except rec C endif * Forza fine programma. C seton lr * A fine campi, accoda "FINE". Clr add 1 cnt Clr except end *--------------------------------------------------------------------- * Inizializza. C *inzsr begsr * Inizializza il contarighe. C z-add *zero cnt 4 0 * Definisce un comodo per l'emissione. C clear libfil 22 * Prima dei campi, accoda "INIZIO". C except beg C endsr *--------------------------------------------------------------------- * Sorgente del file fisico piatto. * Riga di inizio. Ojzonfflt e beg O cnt 4 O 6 '00' O 12 '000000' O 18 ' ' O '* INIZIO' * Riga del record. O e rec O cnt 4 O 6 '00' O 12 '000000' O 18 'A' O 29 'R' O +1 'FLATRCD' * Campo piatto. O e rec O cnt 4 O 6 '01' O 12 '000000' O 18 'A' O 29 ' ' O +1 'FLATFLD' O whrlen z 46 * Riga di fine. O e end O cnt 4 O 6 '00' O 12 '000000' O 18 ' ' O '* FINE' *--------------------------------------------------------------------- //ENDSRC //ENDBCHJOB