//BCHJOB JOB(JPRTSRC) 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-23 17:58 */ /* To File : "JPRTSRC" */ /* To Library : "NERONI2" */ /* To Text : "Print Source. 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 "JPRTSRC.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:\JPRTSRC.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JPRTSRC.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(JPRTSRC) 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/JPRTSRC" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JPRTSRC) MBR(JPRTSRC.) 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/JPRTSRC) CRTSRCPF FILE(NERONI2/JPRTSRC) RCDLEN(112) + TEXT('Print Source. Src') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JPRTSRC) TOFILE(NERONI2/JPRTSRC) + TOMBR(JPRTSRC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JPRTSRC) MBR(JPRTSRC) + SRCTYPE(CMD) + TEXT('Print Source. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JPRTSRC.) TOFILE(NERONI2/JPRTSRC) + TOMBR(JPRTSRC.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JPRTSRC) MBR(JPRTSRC.) + SRCTYPE(CL) + TEXT('Print Source. CrtJs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JPRTSRCC) TOFILE(NERONI2/JPRTSRC) + TOMBR(JPRTSRCC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JPRTSRC) MBR(JPRTSRCC) + SRCTYPE(CLLE) + TEXT('Print Source. Cpp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JPRTSRCD) TOFILE(NERONI2/JPRTSRC) + TOMBR(JPRTSRCD) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JPRTSRC) MBR(JPRTSRCD) + SRCTYPE(RPGLE) + TEXT('Print Source. Prt') /*---------------------------------------------------------------------*/ //DATA FILE(JPRTSRC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* */ /* CMD §PRTCMN. */ /* */ /* Stampa comunicazione. */ /* */ /* Stampa il contenuto di un membro source senza contorni */ /* di alcun tipo. */ /* */ CMD PROMPT('Stampa comunicazione') PARM KWD(SRCFILE) TYPE(SRCFILE) MIN(1) + PROMPT('File origine') SRCFILE: QUAL TYPE(*NAME) MIN(1) QUAL TYPE(*NAME) DFT(*LIBL) SPCVAL((*LIBL)) + PROMPT('nella libreria') PARM KWD(SRCMBR) TYPE(*NAME) DFT(*FIRST) + SPCVAL((*FIRST)) PROMPT('Membro origine') PARM KWD(OUTQ) TYPE(OUTQ) DFT(*JOB) SNGVAL((*JOB)) + PROMPT('Coda di emissione') OUTQ: QUAL TYPE(*NAME) MIN(1) QUAL TYPE(*NAME) DFT(*LIBL) SPCVAL((*LIBL)) + PROMPT('nella libreria') PARM KWD(FORMTYPE) TYPE(*CHAR) LEN(10) DFT(*STD) + PROMPT('Tipo modulo') PARM KWD(COPIES) TYPE(*DEC) LEN(2 0) DFT(1) + RANGE(1 99) PROMPT('Numero di copie') PARM KWD(LPI) TYPE(*CHAR) LEN(1) RSTD(*YES) DFT(6) + VALUES(6 7 8) PROMPT('Righe per pollice') PARM KWD(RPLUNPRT) TYPE(*CHAR) LEN(1) + PROMPT('Carattere di sostituzione') //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JPRTSRC.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JPRTSRC.) JOBD(QBATCH) OUTQ(QPRINTS) ENDSEV(60) LOG(4 + 00 *SECLVL) MSGQ(*USRPRF) /* Claudio Neroni 08/12/2000 Creato. */ /* JPRTSRC */ /* Print Source. */ /* Prerequisiti: JRSNMSG */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella gli oggetti preesistenti. */ DLTCMD CMD(NERONI2/JPRTSRC) DLTPNLGRP PNLGRP(NERONI2/JPRTSRCP) DLTPGM PGM(NERONI2/JPRTSRCC) DLTPGM PGM(NERONI2/JPRTSRCD) DLTMSGF MSGF(NERONI2/JPRTSRC) /* Crea gli oggetti. */ CRTBNDCL PGM(NERONI2/JPRTSRCC) SRCFILE(JPRTSRC) DBGVIEW(*ALL) CRTBNDRPG PGM(NERONI2/JPRTSRCD) SRCFILE(JPRTSRC) DBGVIEW(*ALL) CRTPNLGRP PNLGRP(NERONI2/JPRTSRCP) SRCFILE(JPRTSRC) CRTCMD CMD(NERONI2/JPRTSRC) PGM(JPRTSRCC) SRCFILE(JPRTSRC) + MSGF(JPRTSRC) HLPPNLGRP(JPRTSRCP) HLPID(CMD) PRDLIB(NERONI2) CRTMSGF MSGF(NERONI2/JPRTSRC) TEXT('Print Source. Msgf') /* Messaggi del Ccp. */ ADDMSGD MSGID(ULA0054) MSGF(NERONI2/JPRTSRC) MSG('Il file &1.&2 non è + di tipo source.') SECLVL('Il membro &3 del file &1 + nella libreria &2 è stato aperto per un''attività che + richiede un file source. Esso tuttavia non possiede + caratteristiche source.') FMT((*CHAR 10) (*CHAR 10) + (*CHAR 10)) ADDMSGD MSGID(ULA0055) MSGF(NERONI2/JPRTSRC) MSG('Dati troncati dal + file source &1.&2.') SECLVL('Il membro &3 del file &1 + nella libreria &2 è stato aperto per un''attività che + richiede un file source. Esso possiede caratteristiche + source ma la sua lunghezza record è superiore a quella + tollerata nell''attività in corso. Il reperimento dei + dati avverrebbe col troncamento della loro parte + finale.') FMT((*CHAR 10) (*CHAR 10) (*CHAR 10)) //ENDBCHJOB //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JPRTSRCC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* */ /* CLP §PRTCMN. */ /* */ /* Stampa comunicazione. */ /* */ /* Stampa il contenuto di un membro source senza contorni */ /* di alcun tipo. */ /* */ PGM PARM(&FILELIB &MBR &OUTQLIB &FORMTYPE &COPIES + &LPI &RPLUNPRT) /* File source e libreria ove risiede. */ DCL VAR(&FILELIB) TYPE(*CHAR) LEN(20) /* Membro source contenente il testo da stampare. */ DCL VAR(&MBR) TYPE(*CHAR) LEN(10) /* Coda di emissione e libreria ove risiede. */ DCL VAR(&OUTQLIB) TYPE(*CHAR) LEN(20) /* Tipo del modulo. */ DCL VAR(&FORMTYPE) TYPE(*CHAR) LEN(10) /* Numero di copie. */ DCL VAR(&COPIES) TYPE(*DEC) LEN(2 0) /* Righe per pollice. */ DCL VAR(&LPI) TYPE(*CHAR) LEN(1) /* Carattere sostitutivo dei caratteri non stampabili. */ DCL VAR(&RPLUNPRT) TYPE(*CHAR) LEN(1) /* File source. */ DCL VAR(&FILE) TYPE(*CHAR) LEN(10) /* Libreria ove risiede il file source. */ DCL VAR(&LIB) TYPE(*CHAR) LEN(10) /* Coda di emissione. */ DCL VAR(&OUTQ) TYPE(*CHAR) LEN(10) /* Libreria ove risiede la coda di emissione. */ DCL VAR(&OUTQL) TYPE(*CHAR) LEN(10) /* Righe per pagina e riga di overflow desunti da righe per pollice. */ DCL VAR(&FORMSIZE1) TYPE(*CHAR) LEN(3) DCL VAR(&OVRFLW) TYPE(*CHAR) LEN(3) /* Deve segnalare che il file aperto non è di tipo source. */ DCL VAR(&NOSRC) TYPE(*LGL) /* Deve segnalare che il file aperto ha una lunghezza record eccessiva.*/ DCL VAR(&TOOLONG) TYPE(*LGL) /* Prenotazione del CPF0001. */ DCL VAR(&CPF0001) TYPE(*LGL) /* Intercetta gli errori. */ MONMSG MSGID(CPF0000 MCH0000 CEE0000) EXEC(GOTO + CMDLBL(ERRORE)) /* Estrae dati dalle variabili ricevute. */ CHGVAR VAR(&FILE) VALUE(%SST(&FILELIB 1 10)) CHGVAR VAR(&LIB) VALUE(%SST(&FILELIB 11 10)) CHGVAR VAR(&OUTQ) VALUE(%SST(&OUTQLIB 1 10)) CHGVAR VAR(&OUTQL) VALUE(%SST(&OUTQLIB 11 10)) /* Riempie righe per pagina e riga di overflow desumendoli */ /* da righe per pollice. */ IF COND(&LPI = '6') THEN(DO) CHGVAR VAR(&FORMSIZE1) VALUE(66) CHGVAR VAR(&OVRFLW) VALUE(60) ENDDO IF COND(&LPI = '7') THEN(DO) CHGVAR VAR(&LPI) VALUE(6) CHGVAR VAR(&FORMSIZE1) VALUE(72) CHGVAR VAR(&OVRFLW) VALUE(66) ENDDO IF COND(&LPI = '8') THEN(DO) CHGVAR VAR(&FORMSIZE1) VALUE(88) CHGVAR VAR(&OVRFLW) VALUE(80) ENDDO /* Controlla l'esistenza del membro source. */ CHKOBJ OBJ(&LIB/&FILE) OBJTYPE(*FILE) MBR(&MBR) /* Ridirige l'input del programma di stampa dei dati source */ /* distinguendo se *FIRST per MBR. */ IF COND(&MBR *EQ *FIRST) THEN(DO) OVRDBF FILE(JPRTSRC) TOFILE(&LIB/&FILE) LVLCHK(*NO) + SECURE(*YES) ENDDO ELSE CMD(DO) OVRDBF FILE(JPRTSRC) TOFILE(&LIB/&FILE) MBR(&MBR) + LVLCHK(*NO) SECURE(*YES) ENDDO /* Ridirige l'output distinguendo se *JOB per OUTQ. */ IF COND(&OUTQ *EQ *JOB) THEN(DO) OVRPRTF FILE(QSYSPRT) PAGESIZE(&FORMSIZE1) LPI(&LPI) + OVRFLW(&OVRFLW) RPLUNPRT(*YES &RPLUNPRT) + OUTQ(&OUTQ) FORMTYPE(&FORMTYPE) + COPIES(&COPIES) SECURE(*YES) ENDDO ELSE CMD(DO) /* Controlla l'esistenza della coda di emissione. */ CHKOBJ OBJ(&OUTQL/&OUTQ) OBJTYPE(*OUTQ) OVRPRTF FILE(QSYSPRT) PAGESIZE(&FORMSIZE1) LPI(&LPI) + OVRFLW(&OVRFLW) RPLUNPRT(*YES &RPLUNPRT) + OUTQ(&OUTQL/&OUTQ) FORMTYPE(&FORMTYPE) + COPIES(&COPIES) SECURE(*YES) ENDDO /* Chiama la stampa. */ CALL PGM(JPRTSRCD) PARM(&NOSRC &TOOLONG) /* Se il file non è di tipo source, messaggia e rilascia. */ IF COND(&NOSRC) THEN(DO) SNDPGMMSG MSGID(ULA0054) MSGF(JPRTSRC) MSGDTA(&FILELIB + *CAT &MBR) MSGTYPE(*DIAG) GOTO CMDLBL(CPF0001) ENDDO /* Se la lunghezza record è maggiore della massima prevista, */ /* messaggia e rilascia. */ IF COND(&TOOLONG) THEN(DO) SNDPGMMSG MSGID(ULA0055) MSGF(JPRTSRC) MSGDTA(&FILELIB + *CAT &MBR) MSGTYPE(*DIAG) GOTO CMDLBL(CPF0001) ENDDO /* 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(JPRTSRC) + 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(JPRTSRCD) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /TITLE Stampa comunicazione. * * RPG §PRTCMN1. * * Stampa un membro di file source fino a 122 byte nel campo dati. * FJPRTSRC IP F 134 6AIDISK KEYLOC(1) F INFDS(FIDS) FQSYSPRT O F 132 PRINTER OFLIND(*INOF) F USROPN D FIDS DS D FIDSSO 163 163 D FIDSLE 283 286B 0 IJPRTSRC NO 01 13 C% I OR 02 13NC% I 13 134 RECORD C *ENTRY PLIST C PARM *IN52 NOSRC 1 C PARM *IN53 TOOLON 1 C N51 DO C SETON 51 C FIDSSO COMP 'Y' 5252 C FIDSLE COMP 122 53 C 52 COR 53 DO C SETON LR C RETURN C END C OPEN QSYSPRT C EXCEPT PRIMAP C END OQSYSPRT E PRIMAP 06 O H OF 06 O D 01 1 06 O OR 02 1 O RECORD 132 O 01 11 ' ' //ENDSRC //ENDBCHJOB