//BCHJOB JOB(JCPYCLR) 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: 2008-11-03 13:40 */ /* To File : "JCPYCLR" */ /* To Library : "NERONI2" */ /* To Text : "Copy clear. 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 "JCPYCLR.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:\JCPYCLR.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JCPYCLR.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(JCPYCLR) 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/JCPYCLR" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JCPYCLR) MBR(JCPYCLR.) 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/JCPYCLR) CRTSRCPF FILE(NERONI2/JCPYCLR) RCDLEN(112) + TEXT('Copy clear. Src') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCPYCLR) TOFILE(NERONI2/JCPYCLR) + TOMBR(JCPYCLR) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCPYCLR) MBR(JCPYCLR) + SRCTYPE(CMD) + TEXT('Copy clear. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCPYCLR.) TOFILE(NERONI2/JCPYCLR) + TOMBR(JCPYCLR.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCPYCLR) MBR(JCPYCLR.) + SRCTYPE(CL) + TEXT('Copy clear. CrtJs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCPYCLRC) TOFILE(NERONI2/JCPYCLR) + TOMBR(JCPYCLRC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCPYCLR) MBR(JCPYCLRC) + SRCTYPE(CLLE) + TEXT('Copy clear. Cpp') /*---------------------------------------------------------------------*/ //DATA FILE(JCPYCLR) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Copy clear. Cpp */ /* Claudio Neroni 25/01/1982 Creato. */ /* Copia un file dati pulito. */ /* */ CMD PROMPT('Copy clear') PARM KWD(FROMFILE) TYPE(FROMFILE) MIN(1) + PROMPT('From file') FROMFILE: QUAL TYPE(*NAME) QUAL TYPE(*NAME) DFT(*LIBL) SPCVAL((*LIBL)) MIN(0) + PROMPT('library') PARM KWD(TOFILE) TYPE(TOFILE) PROMPT('To empty + file') TOFILE: QUAL TYPE(*NAME) DFT(*FROMFILE) SPCVAL((*FROMFILE)) QUAL TYPE(*NAME) DFT(QTEMP) SPCVAL((*FROMLIB)) + MIN(0) PROMPT('library') PARM KWD(MBR1) TYPE(*NAME) DFT(*FROMFILE) + SPCVAL((*FROMFILE)) PROMPT('Empty member 1') PARM KWD(MBR2) TYPE(*NAME) DFT(*NONE) + SPCVAL((*NONE)) PROMPT('Empty member 2') PARM KWD(MBR3) TYPE(*NAME) DFT(*NONE) + SPCVAL((*NONE)) PROMPT('Empty member 3') PARM KWD(MBR4) TYPE(*NAME) DFT(*NONE) + SPCVAL((*NONE)) PROMPT('Empty member 4') PARM KWD(MBR5) TYPE(*NAME) DFT(*NONE) + SPCVAL((*NONE)) PROMPT('Empty member 5') PARM KWD(MBR6) TYPE(*NAME) DFT(*NONE) + SPCVAL((*NONE)) PROMPT('Empty member 6') PARM KWD(MBR7) TYPE(*NAME) DFT(*NONE) + SPCVAL((*NONE)) PROMPT('Empty member 7') PARM KWD(MBR8) TYPE(*NAME) DFT(*NONE) + SPCVAL((*NONE)) PROMPT('Empty member 8') PARM KWD(MBR9) TYPE(*NAME) DFT(*NONE) + SPCVAL((*NONE)) PROMPT('Empty member 9') PARM KWD(MBRA) TYPE(*NAME) DFT(*NONE) + SPCVAL((*NONE)) PROMPT('Empty member 10') //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JCPYCLR.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JCPYCLR.) JOBD(QBATCH) OUTQ(QPRINTS) ENDSEV(60) LOG(4 + 00 *SECLVL) MSGQ(*USRPRF) /* Claudio Neroni 25/01/1982 Creato. */ /* JCPYCLR */ /* Copy clear. */ /* Prerequisiti: JRSNMSG */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella gli oggetti preesistenti. */ DLTCMD CMD(NERONI2/JCPYCLR) DLTPGM PGM(NERONI2/JCPYCLRC) /* Crea gli oggetti. */ CRTBNDCL PGM(NERONI2/JCPYCLRC) SRCFILE(JCPYCLR) DBGVIEW(*ALL) CRTCMD CMD(NERONI2/JCPYCLR) PGM(JCPYCLRC) SRCFILE(JCPYCLR) + PRDLIB(NERONI2) //ENDBCHJOB //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JCPYCLRC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Copy clear. Cpp */ /* Claudio Neroni 25/01/1982 Creato. */ /* Copia un file dati pulito. */ /* */ PGM PARM(&FROMFL &TOFL &MBR1 &MBR2 &MBR3 &MBR4 + &MBR5 &MBR6 &MBR7 &MBR8 &MBR9 &MBRA) /* Nome qualificato del file originale. */ DCL VAR(&FROMFL) TYPE(*CHAR) LEN(20) /* Nome qualificato del file copiato. */ DCL VAR(&TOFL) TYPE(*CHAR) LEN(20) /* Nome dei membri nel file copiato. */ DCL VAR(&MBR1) TYPE(*CHAR) LEN(10) DCL VAR(&MBR2) TYPE(*CHAR) LEN(10) DCL VAR(&MBR3) TYPE(*CHAR) LEN(10) DCL VAR(&MBR4) TYPE(*CHAR) LEN(10) DCL VAR(&MBR5) TYPE(*CHAR) LEN(10) DCL VAR(&MBR6) TYPE(*CHAR) LEN(10) DCL VAR(&MBR7) TYPE(*CHAR) LEN(10) DCL VAR(&MBR8) TYPE(*CHAR) LEN(10) DCL VAR(&MBR9) TYPE(*CHAR) LEN(10) DCL VAR(&MBRA) TYPE(*CHAR) LEN(10) /* File originale. */ DCL VAR(&FROMFILE) TYPE(*CHAR) LEN(10) /* Libreria del file originale. */ DCL VAR(&FROMLIB) TYPE(*CHAR) LEN(10) /* File copiato. */ DCL VAR(&TOFILE) TYPE(*CHAR) LEN(10) /* Libreria del file copiato. */ DCL VAR(&TOLIB) TYPE(*CHAR) LEN(10) /* Nome recuperato del membro nel file copiato. */ DCL VAR(&RTNMBR) TYPE(*CHAR) LEN(10) /* Intercetta tutti gli errori saltando a fine con errore. */ MONMSG MSGID(CPF0000 MCH0000) EXEC(GOTO + CMDLBL(ERRORE)) /* Estrae parametri. */ CHGVAR VAR(&FROMFILE) VALUE(%SST(&FROMFL 1 10)) CHGVAR VAR(&FROMLIB) VALUE(%SST(&FROMFL 11 10)) CHGVAR VAR(&TOFILE) VALUE(%SST(&TOFL 1 10)) CHGVAR VAR(&TOLIB) VALUE(%SST(&TOFL 11 10)) /* Se il parametro file copiato è uguale a *FROMFILE, */ /* assume il nome dell'originale come nome del copiato. */ IF COND(&TOFILE *EQ *FROMFILE) THEN(CHGVAR + VAR(&TOFILE) VALUE(&FROMFILE)) /* Tenta senz'altro la cancellazione del file eventualmente presente */ /* in QTEMP con il nome del ricevente. */ DLTF FILE(QTEMP/&TOFILE) MONMSG MSGID(CPF0000) /* Controlla l'esistenza del file originale. */ CHKOBJ OBJ(&FROMLIB/&FROMFILE) OBJTYPE(*FILE) /* Se la libreria del file originale è *LIBL. */ IF COND(&FROMLIB *EQ *LIBL) THEN(DO) /* Trasforma *LIBL in un nome di libreria. */ RTVOBJD OBJ(&FROMFILE) OBJTYPE(*FILE) RTNLIB(&FROMLIB) /* Se la libreria del file originale è *LIBL. */ ENDDO /* Se il parametro libreria ricevente è uguale a *FROMLIB, */ /* assume il nome della libreria originale come nome della ricevente. */ IF COND(&TOLIB *EQ *FROMLIB) THEN(CHGVAR + VAR(&TOLIB) VALUE(&FROMLIB)) /* Se originale e copia coincidono, evita la cancellazione della copia.*/ IF COND((&FROMFILE *EQ &TOFILE) *AND (&FROMLIB + *EQ &TOLIB)) THEN(GOTO CMDLBL(NODELETE)) /* Cancella l'eventuale file presente in libreria ricevente. */ DLTF FILE(&TOLIB/&TOFILE) MONMSG MSGID(CPF0000) /* Label di non cancellazione del copiato. */ NODELETE: /* Controlla la presenza di un membro nel file originale. */ CHKOBJ OBJ(&FROMLIB/&FROMFILE) OBJTYPE(*FILE) + MBR(*FIRST) /* Se l'originale non ha membri, duplica invece di copiare. */ MONMSG MSGID(CPF0000) EXEC(DO) /* Duplica l'originale nella copia. */ CRTDUPOBJ OBJ(&FROMFILE) FROMLIB(&FROMLIB) + OBJTYPE(*FILE) TOLIB(&TOLIB) + NEWOBJ(&TOFILE) DATA(*NO) /* Mette la copia in grado di accettare membri e dati. */ CHGPF FILE(&TOLIB/&TOFILE) MAXMBRS(*NOMAX) + SIZE(*NOMAX) /* Aggiunge un membro alla copia. */ ADDPFM FILE(&TOLIB/&TOFILE) MBR(&TOFILE) /* Salta a Fine copia. */ GOTO CMDLBL(CPYEND) /* Se l'originale non ha membri, duplica invece di copiare. */ ENDDO /* Impedisce che altri indirizzamenti influenzino la copiatura. */ OVRDBF FILE(&FROMFILE) SECURE(*YES) OVRDBF FILE(&TOFILE) SECURE(*YES) /* Copia l'originale creando il ricevente. */ CPYF FROMFILE(&FROMLIB/&FROMFILE) + TOFILE(&TOLIB/&TOFILE) MBROPT(*REPLACE) + CRTFILE(*YES) NBRRCDS(1) /* Intercetta l'errore di creato file ma non copiati record. */ /* Tale errore si verifica quando riceve *LIBL nel parametro */ /* libreria dell'originale e la libreria ricevente sta prima */ /* della datrice in lista librerie. */ MONMSG MSGID(CPF2875) /* Fine copia. */ CPYEND: /* Pulisce il duplicato. */ CLRPFM FILE(&TOLIB/&TOFILE) /* Se il primo membro richiesto deve avere un dato nome, glielo impone.*/ RTVMBRD FILE(&TOLIB/&TOFILE) RTNMBR(&RTNMBR) IF COND((&MBR1 *NE *FROMFILE) *AND (&MBR1 *NE + &RTNMBR)) THEN(DO) RNMM FILE(&TOLIB/&TOFILE) MBR(&RTNMBR) NEWMBR(&MBR1) ENDDO /* Se è richiesto un altro membro. */ IF COND((&MBR2 *NE *NONE) *OR (&MBR3 *NE *NONE) + *OR (&MBR4 *NE *NONE) *OR (&MBR5 *NE *NONE) + *OR (&MBR6 *NE *NONE) *OR (&MBR7 *NE *NONE) + *OR (&MBR8 *NE *NONE) *OR (&MBR9 *NE *NONE) + *OR (&MBRA *NE *NONE)) THEN(DO) /* Modifica il file per permettere l'aggiunta di membri. */ CHGPF FILE(&TOLIB/&TOFILE) MAXMBRS(*NOMAX) /* Se è richiesto un altro membro. */ ENDDO /* Per ogni ulteriore membro richiesto, aggiunge il membro. */ IF COND(&MBR2 *NE *NONE) THEN(DO) ADDPFM FILE(&TOLIB/&TOFILE) MBR(&MBR2) ENDDO IF COND(&MBR3 *NE *NONE) THEN(DO) ADDPFM FILE(&TOLIB/&TOFILE) MBR(&MBR3) ENDDO IF COND(&MBR4 *NE *NONE) THEN(DO) ADDPFM FILE(&TOLIB/&TOFILE) MBR(&MBR4) ENDDO IF COND(&MBR5 *NE *NONE) THEN(DO) ADDPFM FILE(&TOLIB/&TOFILE) MBR(&MBR5) ENDDO IF COND(&MBR6 *NE *NONE) THEN(DO) ADDPFM FILE(&TOLIB/&TOFILE) MBR(&MBR6) ENDDO IF COND(&MBR7 *NE *NONE) THEN(DO) ADDPFM FILE(&TOLIB/&TOFILE) MBR(&MBR7) ENDDO IF COND(&MBR8 *NE *NONE) THEN(DO) ADDPFM FILE(&TOLIB/&TOFILE) MBR(&MBR8) ENDDO IF COND(&MBR9 *NE *NONE) THEN(DO) ADDPFM FILE(&TOLIB/&TOFILE) MBR(&MBR9) ENDDO IF COND(&MBRA *NE *NONE) THEN(DO) ADDPFM FILE(&TOLIB/&TOFILE) MBR(&MBRA) ENDDO /* Ritorna felicemente. */ RETURN /* In caso d'errore imprevisto, restituisce i messaggi al chiamante, */ /* trasformando eventuali escape in diagnostici. */ ERRORE: JRSNMSG MONMSG MSGID(CPF0000 MCH0000) /* Rilascia con il CPF0001. */ CPF0001: SNDPGMMSG MSGID(CPF0001) MSGF(QCPFMSG) MSGDTA(JCPYCLR) + MSGTYPE(*ESCAPE) MONMSG MSGID(CPF0000 MCH0000) ENDPGM //ENDSRC //ENDBCHJOB