//BCHJOB JOB(JSPLACT) 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: "S65D69DA" */ /* From Library: "NERONI2" */ /* Unload Time: 2016-08-23 18:09 */ /* To File : "JSPLACT" */ /* To Library : "NERONI2" */ /* To Text : "Spool Action. 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 "JSPLACT.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:\JSPLACT.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JSPLACT.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(JSPLACT) 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/JSPLACT" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JSPLACT) MBR(JSPLACT.) 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/JSPLACT) CRTSRCPF FILE(NERONI2/JSPLACT) RCDLEN(112) + TEXT('Spool Action. Src') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSPLACT) TOFILE(NERONI2/JSPLACT) + TOMBR(JSPLACT) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSPLACT) MBR(JSPLACT) + SRCTYPE(CMD) + TEXT('Spool Action. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSPLACT.) TOFILE(NERONI2/JSPLACT) + TOMBR(JSPLACT.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSPLACT) MBR(JSPLACT.) + SRCTYPE(CL) + TEXT('Spool Action. CrtJs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSPLACTC) TOFILE(NERONI2/JSPLACT) + TOMBR(JSPLACTC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSPLACT) MBR(JSPLACTC) + SRCTYPE(CLLE) + TEXT('Spool Action. Cpp') /*----------------------------------------------------------------------------*/ //DATA FILE(JSPLACT) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Claudio Neroni 09-10-2006 Creato. */ /* Spool Action. Cmd */ /* Azioni sugli spool. Cmd */ CMD PROMPT('Spool Action') PARM KWD(TOUSRID) TYPE(TOUSRID) PROMPT('To user') TOUSRID: ELEM TYPE(*CHAR) LEN(8) PROMPT('User + identification') ELEM TYPE(*CHAR) LEN(8) PROMPT('Address') PARM KWD(FROMUSER) TYPE(*GENERIC) DFT(*CURRENT) + SPCVAL((*CURRENT) (*ALL)) PROMPT('From user') PARM KWD(STATUS) TYPE(*CHAR) LEN(4) RSTD(*YES) + DFT(*ALL) VALUES(SAV RDY HLD) + SPCVAL((*ALL)) PROMPT('Spool status') PARM KWD(FILE) TYPE(*NAME) LEN(10) DFT(*ALL) + SPCVAL((*ALL)) PROMPT('Spool file name') PARM KWD(USRDTA) TYPE(*CHAR) LEN(10) DFT(*ALL) + SPCVAL((*ALL)) PROMPT('User data') PARM KWD(JOB) TYPE(*NAME) LEN(10) DFT(*ALL) + SPCVAL((*ALL)) PROMPT('Job name') PARM KWD(JOBNBR) TYPE(*CHAR) LEN(6) DFT(*ALL) + RANGE('000000' '999999') SPCVAL((*ALL)) + PROMPT('Job number') PARM KWD(OUTQ) TYPE(*NAME) LEN(10) DFT(*ALL) + SPCVAL((*ALL)) PROMPT('Output queue') PARM KWD(ACTION) TYPE(*CHAR) LEN(7) RSTD(*YES) + DFT(*PDF) VALUES(*PDF *DSP *SND *SNDDLT) + PROMPT('Action to play') PARM KWD(DTAFMT) TYPE(*CHAR) LEN(8) RSTD(*YES) + DFT(*ALLDATA) VALUES(*RCDDATA *ALLDATA) + PROMPT('Data format') PARM KWD(TODIR) TYPE(*PNAME) LEN(256) + DFT('/home/jsplact/default') PROMPT('To + directory') PARM KWD(NAMING) TYPE(*CHAR) LEN(10) RSTD(*YES) + DFT(*LONG) VALUES(*LONG *SHORT) + PROMPT('Naming convention') //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSPLACT.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JSPLACT.) JOBD(NERONI2/NERONI2) OUTQ(QPRINTS) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) CCSID(280) /* Claudio Neroni 12-04-2007 Creato. */ /* JSPLACT */ /* Spool Action. */ /* Prerequisiti: JSPLCVT */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella il file messaggi preesistente. */ DLTMSGF MSGF(NERONI2/JSPLACT) /* Cancella i testi d'aiuto preesistenti. */ DLTPNLGRP PNLGRP(NERONI2/JSPLACTP) /* Cancella i logici preesistenti. */ /* Cancella i fisici preesistenti. */ DLTF FILE(NERONI2/JSPLACT0) /* Cancella i comandi preesistenti. */ DLTCMD CMD(NERONI2/JSPLACT) /* Cancella i programmi preesistenti. */ DLTPGM PGM(NERONI2/JSPLACTC) /* Crea i file fisici. */ CRTPF FILE(NERONI2/JSPLACT0) RCDLEN(198) TEXT('Spool Action. + Wrkf') SIZE(*NOMAX) /* Crea i file logici. */ /* Crea i comandi. */ CRTCMD CMD(NERONI2/JSPLACT) PGM(JSPLACTC) SRCFILE(JSPLACT) + HLPPNLGRP(JSPLACTP) HLPID(CMD) PRDLIB(NERONI2) /* Duplica i comandi in QGPL. */ CRTPRXCMD CMD(QGPL/JSPLACT) TGTCMD(NERONI2/JSPLACT) AUT(*USE) + REPLACE(*YES) /* Crea i programmi. */ CRTBNDCL PGM(NERONI2/JSPLACTC) SRCFILE(JSPLACT) TGTRLS(*CURRENT) + DBGVIEW(*LIST) /* Crea il file messaggi. */ CRTMSGF MSGF(NERONI2/JSPLACT) TEXT('Spool Action. Msgf') /* Fotografia comandi (xxxA001). */ /* Messaggi comuni a pgm di comandi diversi (xxx0001). */ ADDMSGD MSGID(SPL0001) MSGF(NERONI2/JSPLACT) MSG('&1 spool.Visti + &2.Spediti &3.Cancellati &4.Convertiti &5.In errore + &6.') FMT((*CHAR 9) (*CHAR 9) (*CHAR 9) (*CHAR 9) + (*CHAR 9) (*CHAR 9)) ADDMSGD MSGID(SPL0002) MSGF(NERONI2/JSPLACT) MSG('Errore + inaspettato. Controlla joblog.') /* Messaggi nei pgm del Cmd 1 (xxx0101). */ /* Messaggi nei pgm del Cmd 2 (xxx0201). */ /* Messaggi dei Cmd (xxx1001). */ /* Crea i testi d'aiuto. */ CRTPNLGRP PNLGRP(NERONI2/JSPLACTP) SRCFILE(JSPLACT) //ENDBCHJOB //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSPLACTC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Claudio Neroni 09-10-2006 Creato. */ /* Spool Action. Cpp */ /* Azioni sugli spool. Cpp */ /* www.neroni.it */ /* */ /* Riceve i parametri. */ PGM PARM(&TOUSRID &FROMUSER &STATUSP &FILEP + &USRDTAP &JOBP &JOBNBRP &OUTQP &ACTION + &DTAFMT &TODIR &NAMING) /* Identificazione utente di destinazione. */ DCL VAR(&TOUSRID) TYPE(*CHAR) LEN(18) /* Utente di provenienza. */ DCL VAR(&FROMUSER) TYPE(*CHAR) LEN(10) /* Stato spool file richiesto. */ DCL VAR(&STATUSP) TYPE(*CHAR) LEN(4) /* Spool file richiesto. */ DCL VAR(&FILEP) TYPE(*CHAR) LEN(10) /* Dati utente richiesti. */ DCL VAR(&USRDTAP) TYPE(*CHAR) LEN(10) /* Lavoro richiesto. */ DCL VAR(&JOBP) TYPE(*CHAR) LEN(10) /* Numero lavoro richiesto. */ DCL VAR(&JOBNBRP) TYPE(*CHAR) LEN(6) /* Coda emissione richiesta. */ DCL VAR(&OUTQP) TYPE(*CHAR) LEN(10) /* Azione richiesta. */ DCL VAR(&ACTION) TYPE(*CHAR) LEN(7) /* Formato dati. */ DCL VAR(&DTAFMT) TYPE(*CHAR) LEN(8) /* Indirizzario di destinazione. */ DCL VAR(&TODIR) TYPE(*CHAR) LEN(256) /* Indirizzario di destinazione accorciato. */ DCL VAR(&TODIR0) TYPE(*CHAR) LEN(257) /* Convenzione di denominazione. */ DCL VAR(&NAMING) TYPE(*CHAR) LEN(10) /* Identificazione utente di destinazione. Utente. */ DCL VAR(&TOUSRIDU) TYPE(*CHAR) LEN(8) /* Identificazione utente di destinazione. Indirizzo. */ DCL VAR(&TOUSRIDA) TYPE(*CHAR) LEN(8) /* Identificazione della riga di stampa. */ DCL VAR(&ID) TYPE(*CHAR) LEN(11) /* Spool file dalla riga di stampa. */ DCL VAR(&FILE) TYPE(*CHAR) LEN(10) /* Utente dalla riga di stampa. */ DCL VAR(&USER) TYPE(*CHAR) LEN(10) /* Lavoro dalla riga di stampa. */ DCL VAR(&JOB) TYPE(*CHAR) LEN(10) /* Numero lavoro dalla riga di stampa. */ DCL VAR(&JOBNBR) TYPE(*CHAR) LEN(6) /* Numero spool dalla riga di stampa. */ DCL VAR(&SPLNBR) TYPE(*CHAR) LEN(10) DCL VAR(&SPLNBRX) TYPE(*DEC) LEN(10) DCL VAR(&SPLNBRA) TYPE(*CHAR) LEN(10) /* Stato spool file dalla riga di stampa. */ DCL VAR(&STATUS) TYPE(*CHAR) LEN(4) /* Dati utente dalla riga di stampa. */ DCL VAR(&USRDTA) TYPE(*CHAR) LEN(10) /* Coda emissione dalla riga di stampa. */ DCL VAR(&OUTQ) TYPE(*CHAR) LEN(10) /* Data dalla riga di stampa. */ DCL VAR(&DATE) TYPE(*CHAR) LEN(6) /* Tempo dalla riga di stampa. */ DCL VAR(&TIME) TYPE(*CHAR) LEN(6) /* Nome del file PDF. */ DCL VAR(&TOSTMF) TYPE(*CHAR) LEN(64) /* Contatore degli spool file esaminati. */ DCL VAR(&CN1) TYPE(*DEC) LEN(9 0) DCL VAR(&CN1A) TYPE(*CHAR) LEN(9) /* Contatore degli spool file visti. */ DCL VAR(&CN2) TYPE(*DEC) LEN(9 0) DCL VAR(&CN2A) TYPE(*CHAR) LEN(9) /* Contatore degli spool file spediti. */ DCL VAR(&CN3) TYPE(*DEC) LEN(9 0) DCL VAR(&CN3A) TYPE(*CHAR) LEN(9) /* Contatore degli spool file cancellati. */ DCL VAR(&CN4) TYPE(*DEC) LEN(9 0) DCL VAR(&CN4A) TYPE(*CHAR) LEN(9) /* Contatore degli spool file in errore. */ DCL VAR(&CN5) TYPE(*DEC) LEN(9 0) DCL VAR(&CN5A) TYPE(*CHAR) LEN(9) /* Contatore degli spool file convertiti in Pdf. */ DCL VAR(&CN6) TYPE(*DEC) LEN(9 0) DCL VAR(&CN6A) TYPE(*CHAR) LEN(9) /* Indice di loop. */ DCL VAR(&X) TYPE(*INT) /* Stampa su file di Work Spool File, file di transito. */ DCLF FILE(JSPLACT0) /* Intercetta gli errori. */ MONMSG MSGID(CPF0000 MCH0000 CEE0000) EXEC(GOTO + CMDLBL(ERRORE)) /* Estrae parametri. */ CHGVAR VAR(&TOUSRIDU) VALUE(%SST(&TOUSRID 3 8)) CHGVAR VAR(&TOUSRIDA) VALUE(%SST(&TOUSRID 11 8)) /* Cancella il file di transito eventualmente preesistente. */ DLTF FILE(QTEMP/JSPLACT0) MONMSG MSGID(CPF0000) /* Toglie l'ultima barra dall'indirizzario, se presente. */ DOFOR VAR(&X) FROM(256) TO(1) BY(-1) IF COND(%SST(&TODIR &X 1) *EQ ' ') THEN(ITERATE) IF COND(%SST(&TODIR &X 1) *NE '/') THEN(LEAVE) CHGVAR VAR(%SST(&TODIR &X 1)) VALUE(' ') LEAVE ENDDO /* Accorcia il nome dell'indirizzario. */ CHGVAR VAR(&TODIR0) VALUE(&TODIR) DOFOR VAR(&X) FROM(256) TO(1) BY(-1) IF COND(%SST(&TODIR0 &X 2) *EQ '/ ') THEN(LEAVE) CHGVAR VAR(%SST(&TODIR0 &X 1)) VALUE(' ') ENDDO /* Tenta la creazione dell'indirizzario ricevente accorciato. */ MKDIR DIR(&TODIR0) MONMSG MSGID(CPF0000 MCH0000) /* Tenta la creazione dell'indirizzario ricevente. */ MKDIR DIR(&TODIR) MONMSG MSGID(CPF0000 MCH0000) /* Crea il file di transito. */ CRTPF FILE(QTEMP/JSPLACT0) RCDLEN(198) TEXT('Change + spool pdf. Wrkf') SIZE(*NOMAX) /* Reindirizza la stampa per manipolarla piu' facilmente. */ OVRPRTF FILE(QPRTSPLF) MAXRCDS(*NOMAX) HOLD(*YES) + SPLFNAME(JSPLACTWRK) /* Stampa l'elenco delle stampe dell'utente richiesto. */ WRKSPLF SELECT(&FROMUSER) OUTPUT(*PRINT) /* Copia la stampa nel file di lavoro. */ CPYSPLF FILE(JSPLACTWRK) TOFILE(QTEMP/JSPLACT0) + SPLNBR(*LAST) /* Cancella la stampa di lavoro. */ DLTSPLF FILE(JSPLACTWRK) SPLNBR(*LAST) /* Reindirizza la lettura del file di lavoro. */ OVRDBF FILE(JSPLACT0) TOFILE(QTEMP/JSPLACT0) /* Inizio lettura. */ BEG: /* Legge una riga di stampa dal file di lavoro. */ RCVF /* Se non ce ne sono altre, abbandona. */ MONMSG MSGID(CPF0864) EXEC(GOTO CMDLBL(END)) /* Estrae l'identificazione della riga. */ CHGVAR VAR(&ID) VALUE(%SST(&JSPLACT0 1 11)) /* Se corre una riga di contorno, ricicla. */ /* ATTENZIONE. */ /* LE IDENTIFICAZIONI QUI CONSIDERATE SI RIFERISCONO AL RELEASE V5R2 */ /* E ALLA LINGUA ITALIANA. */ /* HA FUNZIONATO SENZA MODIFICHE ANCHE SU V5R4 ITALIANO. */ /* CONTROLLARE CHE SIANO EFFICACI SUL RELEASE USATO. */ /* LO STESSO VALE PER LE POSIZIONI DEI CAMPI SULLA RIGA. */ IF COND((&ID *EQ ' 5722SS1 V') *OR (&ID *EQ ' + ') *OR (&ID *EQ ' Num. ') *OR (&ID + *EQ ' * * ') *OR (&ID *EQ ' + (Nessun ') *OR (&ID *EQ ' * ')) + THEN(GOTO CMDLBL(BEG)) /* LE IDENTIFICAZIONI QUI CONSIDERATE SI RIFERISCONO AL RELEASE V7R1 */ /* E ALLA LINGUA ITALIANA. */ /* Non riesco a fare la prova completa sul 7.2 ma la stampa e' la stessa. */ IF COND((&ID *EQ ' 5770SS1 V') *OR (&ID *EQ ' + File ')) THEN(GOTO CMDLBL(BEG)) /* Estrae dalla riga il nome dello spool file. */ CHGVAR VAR(&FILE) VALUE(%SST(&JSPLACT0 2 10)) /* Se lo spool file e' quello di lavoro, ricicla. */ IF COND(&FILE *EQ JSPLACTWRK) THEN(GOTO + CMDLBL(BEG)) /* Conta gli spool file esaminati. */ CHGVAR VAR(&CN1) VALUE(&CN1 +1) /* Estrae dalla riga lo stato dello spool file. */ CHGVAR VAR(&STATUS) VALUE(%SST(&JSPLACT0 46 3)) /* Se lo stato non e' quello richiesto, ricicla. */ IF COND((&STATUSP *NE *ALL) *AND (&STATUS *NE + &STATUSP)) THEN(GOTO CMDLBL(BEG)) /* Se lo spool file non e' quello richiesto, ricicla. */ IF COND((&FILEP *NE *ALL) *AND (&FILE *NE + &FILEP)) THEN(GOTO CMDLBL(BEG)) /* Estrae dalla riga i dati utente dello spool file. */ CHGVAR VAR(&USRDTA) VALUE(%SST(&JSPLACT0 35 10)) /* Se i dati utente non sono quelli richiesti, ricicla. */ IF COND((&USRDTAP *NE *ALL) *AND (&USRDTA *NE + &USRDTAP)) THEN(GOTO CMDLBL(BEG)) /* Estrae dalla riga il lavoro dello spool file. */ CHGVAR VAR(&JOB) VALUE(%SST(&JSPLACT0 108 10)) /* Se il lavoro non e' quello richiesto, ricicla. */ IF COND((&JOBP *NE *ALL) *AND (&JOB *NE &JOBP)) + THEN(GOTO CMDLBL(BEG)) /* Estrae dalla riga la coda di emissione dello spool file. */ CHGVAR VAR(&OUTQ) VALUE(%SST(&JSPLACT0 126 10)) /* Se la coda emissione non e' quella richiesta, ricicla. */ IF COND((&OUTQP *NE *ALL) *AND (&OUTQ *NE + &OUTQP)) THEN(GOTO CMDLBL(BEG)) /* Estrae dalla riga l'utente dello spool file. */ CHGVAR VAR(&USER) VALUE(%SST(&JSPLACT0 13 10)) /* Estrae dalla riga il numero dello spool file. */ CHGVAR VAR(&SPLNBR) VALUE(%SST(&JSPLACT0 100 7)) /* Estrae dalla riga il numero lavoro dello spool file. */ CHGVAR VAR(&JOBNBR) VALUE(%SST(&JSPLACT0 119 6)) /* Se il numero lavoro non e' quello richiesto, ricicla. */ IF COND((&JOBNBRP *NE *ALL) *AND (&JOBNBR *NE + &JOBNBRP)) THEN(GOTO CMDLBL(BEG)) /* Allinea a sinistra il numero lavoro dello spool file. */ CHGVAR VAR(&SPLNBRA) VALUE(&SPLNBR) ALLSPLN: IF COND(%SST(&SPLNBRA 1 1) *EQ ' ') THEN(DO) CHGVAR VAR(&SPLNBRA) VALUE(%SST(&SPLNBRA 2 9)) GOTO CMDLBL(ALLSPLN) ENDDO /* Estrae dalla riga la data dello spool file. */ CHGVAR VAR(&DATE) VALUE(%SST(&JSPLACT0 89 2) *CAT + %SST(&JSPLACT0 86 2) *CAT %SST(&JSPLACT0 + 83 2)) /* Estrae dalla riga l'ora dello spool file. */ CHGVAR VAR(&TIME) VALUE(%SST(&JSPLACT0 92 2) *CAT + %SST(&JSPLACT0 95 2) *CAT %SST(&JSPLACT0 + 98 2)) /* Trasforma in numerico il numero dello spool file. */ CHGVAR VAR(&SPLNBRX) VALUE(&SPLNBR) /* Se richiesta l'azione di conversione in PDF. */ IF COND(&ACTION *EQ *PDF) THEN(DO) /* Compone il nome *LONG del file pdf. */ IF COND(&NAMING *EQ *LONG) THEN(DO) CHGVAR VAR(&TOSTMF) VALUE(&FILE *TCAT '_' *TCAT + &USER *TCAT '_' *TCAT &JOB *TCAT '_' + *TCAT &JOBNBR *TCAT '_' *TCAT &SPLNBRA + *TCAT '_' *TCAT &DATE *TCAT '_' *TCAT + &TIME *TCAT '.PDF') ENDDO /* Compone il nome *SHORT del file pdf. */ IF COND(&NAMING *EQ *SHORT) THEN(DO) CHGVAR VAR(&TOSTMF) VALUE(&USER *TCAT '_' *TCAT + &JOB *TCAT '_' *TCAT &FILE *TCAT '_' + *TCAT &DATE *TCAT '_' *TCAT &TIME *TCAT + '.PDF') ENDDO /* Converte lo spool file. */ JSPLCVT FROMFILE(&FILE) TOSTMF(&TOSTMF) + TODIR(&TODIR) JOB(&JOBNBR/&USER/&JOB) + SPLNBR(&SPLNBRX) TOFMT(*PDF) + STMFOPT(*REPLACE) /* Se la conversione fallisce, conta errore e abbandona. */ MONMSG MSGID(CPF0000 MCH0000) EXEC(DO) CHGVAR VAR(&CN5) VALUE(&CN5 +1) GOTO CMDLBL(NOPDF) ENDDO /* Conta conversione. */ CHGVAR VAR(&CN6) VALUE(&CN6 +1) NOPDF: /* Se richiesta l'azione di conversione in PDF. */ ENDDO /* Se richiesta l'azione di visualizzazione. */ IF COND(&ACTION *EQ *DSP) THEN(DO) /* Visualizza lo spool file. */ DSPSPLF FILE(&FILE) JOB(&JOBNBR/&USER/&JOB) + SPLNBR(&SPLNBRX) /* Se la visualizzazione fallisce, conta errore e abbandona. */ MONMSG MSGID(CPF0000 MCH0000) EXEC(DO) CHGVAR VAR(&CN5) VALUE(&CN5 +1) GOTO CMDLBL(NODSP) ENDDO /* Conta visualizzazione. */ CHGVAR VAR(&CN2) VALUE(&CN2 +1) NODSP: /* Se richiesta l'azione di visualizzazione. */ ENDDO /* Se richiesta l'azione di invio o di invio e cancellazione. */ IF COND(&ACTION *EQ *SND *OR &ACTION *EQ + *SNDDLT) THEN(DO) /* Invia lo spool file. */ SNDNETSPLF FILE(&FILE) TOUSRID((&TOUSRIDU &TOUSRIDA)) + JOB(&JOBNBR/&USER/&JOB) SPLNBR(&SPLNBRX) + DTAFMT(&DTAFMT) /* Se l'invio fallisce, conta errore e abbandona. */ MONMSG MSGID(CPF0000 MCH0000) EXEC(DO) CHGVAR VAR(&CN5) VALUE(&CN5 +1) GOTO CMDLBL(NOSND) ENDDO /* Conta invio. */ CHGVAR VAR(&CN3) VALUE(&CN3 +1) /* Se richiesta l'azione di invio e cancellazione. */ IF COND(&ACTION *EQ *SNDDLT) THEN(DO) /* Cancella lo spool file. */ DLTSPLF FILE(&FILE) JOB(&JOBNBR/&USER/&JOB) + SPLNBR(&SPLNBRX) /* Se la cancellazione riesce, la conta. */ MONMSG MSGID(CPF0000 MCH0000) EXEC(GOTO CMDLBL(NODLT)) CHGVAR VAR(&CN4) VALUE(&CN4 +1) NODLT: /* Se richiesta l'azione di invio e cancellazione. */ ENDDO NOSND: /* Se richiesta l'azione di invio o di invio e cancellazione. */ ENDDO /* Salta a Inizio lettura. */ GOTO CMDLBL(BEG) /* Fine lettura. */ END: /* Allinea a sinistra il Contatore degli spool file esaminati. */ CHGVAR VAR(&CN1A) VALUE(&CN1) ALL1: IF COND((%SST(&CN1A 1 1) *EQ '0') *AND + (%SST(&CN1A 2 1) *NE ' ')) THEN(DO) CHGVAR VAR(&CN1A) VALUE(%SST(&CN1A 2 8)) GOTO CMDLBL(ALL1) ENDDO /* Allinea a sinistra il Contatore degli spool file visti. */ CHGVAR VAR(&CN2A) VALUE(&CN2) ALL2: IF COND((%SST(&CN2A 1 1) *EQ '0') *AND + (%SST(&CN2A 2 1) *NE ' ')) THEN(DO) CHGVAR VAR(&CN2A) VALUE(%SST(&CN2A 2 8)) GOTO CMDLBL(ALL2) ENDDO /* Allinea a sinistra il Contatore degli spool file spediti. */ CHGVAR VAR(&CN3A) VALUE(&CN3) ALL3: IF COND((%SST(&CN3A 1 1) *EQ '0') *AND + (%SST(&CN3A 2 1) *NE ' ')) THEN(DO) CHGVAR VAR(&CN3A) VALUE(%SST(&CN3A 2 8)) GOTO CMDLBL(ALL3) ENDDO /* Allinea a sinistra il Contatore degli spool file cancellati. */ CHGVAR VAR(&CN4A) VALUE(&CN4) ALL4: IF COND((%SST(&CN4A 1 1) *EQ '0') *AND + (%SST(&CN4A 2 1) *NE ' ')) THEN(DO) CHGVAR VAR(&CN4A) VALUE(%SST(&CN4A 2 8)) GOTO CMDLBL(ALL4) ENDDO /* Allinea a sinistra il Contatore degli spool file in errore. */ CHGVAR VAR(&CN5A) VALUE(&CN5) ALL5: IF COND((%SST(&CN5A 1 1) *EQ '0') *AND + (%SST(&CN5A 2 1) *NE ' ')) THEN(DO) CHGVAR VAR(&CN5A) VALUE(%SST(&CN5A 2 8)) GOTO CMDLBL(ALL5) ENDDO /* Allinea a sinistra il Contatore degli spool file convertiti. */ CHGVAR VAR(&CN6A) VALUE(&CN6) ALL6: IF COND((%SST(&CN6A 1 1) *EQ '0') *AND + (%SST(&CN6A 2 1) *NE ' ')) THEN(DO) CHGVAR VAR(&CN6A) VALUE(%SST(&CN6A 2 8)) GOTO CMDLBL(ALL6) ENDDO /* Invia un messaggio di completamento. */ SNDPGMMSG MSGID(SPL0001) MSGF(JSPLACT) MSGDTA(&CN1A + *CAT &CN2A *CAT &CN3A *CAT &CN4A *CAT + &CN6A *CAT &CN5A) MSGTYPE(*COMP) /* Salta a fine. */ GOTO CMDLBL(FINE) ERRORE: /* Invia un messaggio diagnostico. */ SNDPGMMSG MSGID(SPL0002) MSGF(JSPLACT) MSGTYPE(*DIAG) MONMSG MSGID(CPF0000 MCH0000) /* Fine. */ FINE: ENDPGM //ENDSRC //ENDBCHJOB