//BCHJOB JOB(JCLRSPL) JOBD(NERONI2/NERONI2) OUTQ(QPRINT) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) /* Open source scaricabile da 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: 2014-10-24 15:28 */ /* To File : "JCLRSPL" */ /* To Library : "NERONI2" */ /* To Text : "Clear Spool. 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 "JCLRSPL.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:\JCLRSPL.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JCLRSPL.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(JCLRSPL) 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/JCLRSPL" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JCLRSPL) MBR(JCLRSPL.) 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/JCLRSPL) CRTSRCPF FILE(NERONI2/JCLRSPL) RCDLEN(112) + TEXT('Clear Spool. Src') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCLRSPL) TOFILE(NERONI2/JCLRSPL) + TOMBR(JCLRSPL) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCLRSPL) MBR(JCLRSPL) + SRCTYPE(CMD) + TEXT('Clear Spool. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCLRSPL.) TOFILE(NERONI2/JCLRSPL) + TOMBR(JCLRSPL.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCLRSPL) MBR(JCLRSPL.) + SRCTYPE(CL) + TEXT('Clear Spool. CrtJs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCLRSPLA) TOFILE(NERONI2/JCLRSPL) + TOMBR(JCLRSPLA) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCLRSPL) MBR(JCLRSPLA) + SRCTYPE(PF) + TEXT('Clear Spool. Outq List') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCLRSPLP) TOFILE(NERONI2/JCLRSPL) + TOMBR(JCLRSPLP) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCLRSPL) MBR(JCLRSPLP) + SRCTYPE(PNLGRP) + TEXT('Clear Spool. Help') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCLRSPL1) TOFILE(NERONI2/JCLRSPL) + TOMBR(JCLRSPL1) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCLRSPL) MBR(JCLRSPL1) + SRCTYPE(CLLE) + TEXT('Clear Spool. Cpp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCLRSPL2) TOFILE(NERONI2/JCLRSPL) + TOMBR(JCLRSPL2) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCLRSPL) MBR(JCLRSPL2) + SRCTYPE(CLLE) + TEXT('Clear Spool. Clr Outq') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCLRSPL3) TOFILE(NERONI2/JCLRSPL) + TOMBR(JCLRSPL3) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCLRSPL) MBR(JCLRSPL3) + SRCTYPE(RPGLE) + TEXT('Clear Spool. Date') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCLRSPL4) TOFILE(NERONI2/JCLRSPL) + TOMBR(JCLRSPL4) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCLRSPL) MBR(JCLRSPL4) + SRCTYPE(RPGLE) + TEXT('Clear Spool. Refresh Outq List') /*---------------------------------------------------------------------*/ //DATA FILE(JCLRSPL) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Claudio Neroni 03/04/2006 Creato. */ CMD PROMPT('Clear Spool') PARM KWD(OUTQ) TYPE(OUTQ) SNGVAL((*CLR) (*RFR) + (*DFU) (*MNG) (*FILE)) MIN(1) + PROMPT('Output queue') OUTQ: QUAL TYPE(*NAME) QUAL TYPE(*NAME) DFT(*LIBL) SPCVAL((*LIBL)) + PROMPT('library') PARM KWD(DAYS) TYPE(*DEC) LEN(5 0) DFT(60) + RANGE(2 3650) PROMPT('Number of retained + days') //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JCLRSPL.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JCLRSPL.) JOBD(NERONI2/NERONI2) OUTQ(QPRINTS) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) /* Claudio Neroni 03/04/2006 Creato. */ /* JCLRSPL */ /* Clear Spool. */ /* Prerequisiti: nessuno. */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella gli oggetti preesistenti. */ DLTCMD CMD(NERONI2/JCLRSPL) DLTPNLGRP PNLGRP(NERONI2/JCLRSPLP) DLTF FILE(NERONI2/JCLRSPLA) DLTF FILE(NERONI2/JCLRSPL0) DLTPGM PGM(NERONI2/JCLRSPL1) DLTPGM PGM(NERONI2/JCLRSPL2) DLTPGM PGM(NERONI2/JCLRSPL3) DLTPGM PGM(NERONI2/JCLRSPL4) DLTMSGF MSGF(NERONI2/JCLRSPL) /* Crea gli oggetti. */ CRTPF FILE(NERONI2/JCLRSPLA) SRCFILE(JCLRSPL) SIZE(*NOMAX) CRTPF FILE(NERONI2/JCLRSPL0) RCDLEN(132) TEXT('Clear Spool. Wrkf') + SIZE(*NOMAX) CRTBNDCL PGM(NERONI2/JCLRSPL1) SRCFILE(JCLRSPL) DBGVIEW(*ALL) CRTBNDCL PGM(NERONI2/JCLRSPL2) SRCFILE(JCLRSPL) DBGVIEW(*ALL) CRTBNDRPG PGM(NERONI2/JCLRSPL3) SRCFILE(JCLRSPL) DBGVIEW(*ALL) CRTBNDRPG PGM(NERONI2/JCLRSPL4) SRCFILE(JCLRSPL) DBGVIEW(*ALL) CRTPNLGRP PNLGRP(NERONI2/JCLRSPLP) SRCFILE(JCLRSPL) CRTCMD CMD(NERONI2/JCLRSPL) PGM(JCLRSPL1) SRCFILE(JCLRSPL) + MSGF(JCLRSPL) HLPPNLGRP(JCLRSPLP) HLPID(CMD) PRDLIB(NERONI2) /* Crea il file messaggi. */ CRTMSGF MSGF(NERONI2/JCLRSPL) TEXT('Clear Spool. Msgf') /* Messaggi del Ccp. */ ADDMSGD MSGID(CLR0001) MSGF(NERONI2/JCLRSPL) MSG('Cancellati &3 + spoolfile dalla coda &2/&1.') SECLVL('L''utility + JCLRSPL ha cancellato &3 spoolfile dalla coda &1 nella + libreria &2 perché più vecchi di &5 giorni. Conservati + &4 spoolfile con data &8/&7/&6 o più recente.') + FMT((*CHAR 10) (*CHAR 10) (*CHAR 9) (*CHAR 9) (*CHAR + 5) (*CHAR 4) (*CHAR 2) (*CHAR 2)) ADDMSGD MSGID(CLR0002) MSGF(NERONI2/JCLRSPL) MSG('Cancellati &3 + spoolfile dalle code elencate nel file guida.') + SECLVL('L''utility JCLRSPL ha cancellato &3 spoolfile + dalle code elencate nel file guida perché più vecchi + di &5 giorni. Conservati &4 spoolfile con data + &8/&7/&6 o più recente. Il file guida è visionabile e + personalizzabile con il comando "JCLRSPL *MNG".') + FMT((*CHAR 10) (*CHAR 10) (*CHAR 9) (*CHAR 9) (*CHAR + 5) (*CHAR 4) (*CHAR 2) (*CHAR 2)) /* Messaggi del Cmd. */ /* Nessuno. */ //ENDBCHJOB //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JCLRSPLA) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Claudio Neroni 03/04/2006 Creato. A UNIQUE A R RCS A TEXT('Output Queues List') A C0ACTV 1 A COLHDG('Clear' + A 'active') A VALUES(' ' '1') A C0LOST 1 A COLHDG('Lost' + A 'outq') A VALUES(' ' '1') A C0OUTQ 10 A COLHDG('Output' + A 'queue') A C0LIBR 10 A COLHDG('Library') A C0NOTA 20 A COLHDG('Automatic' + A 'note') A C0NOTM 20 A COLHDG('Manual' + A 'note') A C0DESC 50 A COLHDG('Description') A K C0OUTQ A K C0LIBR //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JCLRSPLP) FILETYPE(*SRC) ENDCHAR('//ENDSRC') :PNLGRP. .*--------------------------------------------------------------------- :HELP NAME=CMD. :H3.Comando JCLRSPL :H2.Cancella gli spoolfile vecchi. :P.Cancella gli spoolfile più vecchi dei giorni richiesti da una coda di emissione oppure da un elenco di code. :H2.NOTE SUL FILE DI PERSONALIZZAZIONE :P.L'elenco delle code risiede in un apposito file di personalizzazione :HP2.JCLRSPLA:EHP2. che viene pulito, riempito e gestito tramite le opzioni presenti sul primo parametro del presente comando. :P.In particolare, al primo uso occorre eseguire una tantum l'opzione :HP2.*CLR:EHP2. per eliminarne completamente il contenuto. :P.L'opzione :HP2.*RFR:EHP2. inizializza o rinfresca il contenuto del file di personalizzazione. Nel caso di rinfrescamento, non rimuove i flag di pulizia già impostati manualmente ma si limita ad aggiungere le code nuove e a contrassegnare le code perdute. :P.Occorre quindi eseguire periodicamente l'opzione :HP2.*DFU:EHP2. o l'opzione :HP2.*MNG:EHP2. per gestire il flag di richiesta di pulizia di ogni singola coda elencata. :P.Infine, l'opzione :HP2.*FILE:EHP2. esegue la pulizia delle code elencate nel file di personalizzazione che portano il flag manuale di richiesta pulizia. :EHELP. .*--------------------------------------------------------------------- :HELP name='CMD/outq'. :H3.Output queue (OUTQ) - queue :P.Nome della coda di emissione dalla quale si vogliono pulire gli spool vecchi. :P.Valori permessi: :PARML. :PT.nome-coda-emissione :PD.Il valore è obbligatorio. :PT.*CLR :PD.Viene pulito il file di personalizzazione. :PT.*RFR :PD.Viene rinfrescato il contenuto del file di personalizzazione mediante l'aggiunta delle code nuove e la segnatura delle code scomparse. :PT.*DFU :PD.Esegue un :HP2.UPDDTA:EHP2. estemporaneo sul file di personalizzazione. :PT.*MNG :PD.Esegue un :HP2.WRKDBF:EHP2. sul file di personalizzazione. :PT.*FILE :PD.Vengono pulite tutte le code elencate nel file di personalizzazione e contrassegnate esplicitamente come "da pulire". :EPARML. :H3.Output queue (OUTQ) - library :P.Nome della libreria in cui risiede la coda di emissione. :P.Valori permessi: :PARML. :PT.:PK DEF.*LIBL:EPK. :PD.La coda di emissione viene cercata in lista librerie. :PT.nome-libreria :PD.La coda di emissione viene cercata nella libreria richiesta. :EPARML. :EHELP. .*--------------------------------------------------------------------- :HELP name='CMD/days'. :H3.Number of retained days (DAYS) :P.Numero massimo dei giorni di anzianità degli spoolfile da conservare. :P.Questo parametro ha significato solo se nel parametro OUTQ è menzionata una coda o l'opzione *FILE. :P.Valori permessi: :PARML. :PT.:PK DEF.60:EPK. :PD.Gli spool più vecchi di 60 giorni vengono cancellati. :PT.2-3650 :PD.Gli spool più vecchi del numero di giorni richiesto vengono cancellati. :EPARML. :EHELP. .*--------------------------------------------------------------------- :EPNLGRP. //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JCLRSPL1) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Clear Spool. Command Processing Program. */ /* Claudio Neroni 03/04/2006 Creato. */ PGM PARM(&OUTQQ &DAYS) DCL VAR(&OUTQQ) TYPE(*CHAR) LEN(20) DCL VAR(&OUTQQ2) TYPE(*CHAR) LEN(20) DCL VAR(&DAYS) TYPE(*DEC) LEN(5 0) DCL VAR(&DAYSA) TYPE(*CHAR) LEN(5) DCL VAR(&RPY) TYPE(*CHAR) LEN(7) DCL VAR(&CLR) TYPE(*DEC) LEN(9 0) DCL VAR(&CLRA) TYPE(*CHAR) LEN(9) DCL VAR(&UNC) TYPE(*DEC) LEN(9 0) DCL VAR(&UNCA) TYPE(*CHAR) LEN(9) DCL VAR(&DATA) TYPE(*CHAR) LEN(8) DCLF FILE(JCLRSPLA) MONMSG MSGID(CPF0000 MCH0000 CEE0000) /* Converte giorni in alfa. */ CHGVAR VAR(&DAYSA) VALUE(&DAYS) ALL0: IF COND((%SST(&DAYSA 1 1) *EQ '0') *AND + (%SST(&DAYSA 2 1) *NE ' ')) THEN(DO) CHGVAR VAR(&DAYSA) VALUE(%SST(&DAYSA 2 4)) GOTO CMDLBL(ALL0) ENDDO /* Pulisce i dati. */ IF COND(&OUTQQ *EQ *CLR) THEN(DO) SNDUSRMSG MSG('Vuoi davvero cancellare l''elenco delle + code di emissione da pulire?') VALUES(NO + DAVVERO) DFT(NO) TOMSGQ(*EXT) MSGRPY(&RPY) IF COND(&RPY *EQ DAVVERO) THEN(DO) CLRPFM FILE(JCLRSPLA) MONMSG MSGID(CPF0000) SNDPGMMSG MSG('Cleared outq list') ENDDO GOTO CMDLBL(FINE) ENDDO /* Rinfresca i dati. */ IF COND(&OUTQQ *EQ *RFR) THEN(DO) DLTF FILE(QTEMP/JCLRSPLALL) MONMSG MSGID(CPF0000) DSPOBJD OBJ(*ALL/*ALL) OBJTYPE(*OUTQ) + OUTPUT(*OUTFILE) OUTFILE(QTEMP/JCLRSPLALL) OVRDBF FILE(QADSPOBJ) TOFILE(QTEMP/JCLRSPLALL) CALL PGM(JCLRSPL4) SNDPGMMSG MSG('Refreshed outq list') GOTO CMDLBL(FINE) ENDDO /* Gestisce l'elenco delle code con dfu. */ IF COND(&OUTQQ *EQ *DFU) THEN(DO) UPDDTA FILE(JCLRSPLA) MONMSG MSGID(CPF0000) GOTO CMDLBL(FINE) ENDDO /* Gestisce l'elenco delle code con Work Database File. */ IF COND(&OUTQQ *EQ *MNG) THEN(DO) WRKDBF FILENAME(JCLRSPLA) MONMSG MSGID(CPF0000) GOTO CMDLBL(FINE) ENDDO /* Gestisce l'elenco code. */ IF COND(&OUTQQ *EQ *FILE) THEN(DO) BEG: RCVF MONMSG MSGID(CPF0864) EXEC(GOTO CMDLBL(END)) IF COND(&C0ACTV *NE '1') THEN(GOTO CMDLBL(BEG)) IF COND(&C0LOST *EQ '1') THEN(GOTO CMDLBL(BEG)) CHGVAR VAR(&OUTQQ2) VALUE(&C0OUTQ *CAT &C0LIBR) SNDPGMMSG MSG(%SST(&OUTQQ2 1 10) *CAT ' ' *CAT + %SST(&OUTQQ2 11 10)) CALL PGM(JCLRSPL2) PARM(&OUTQQ2 &DAYS &CLR &UNC + &DATA) GOTO CMDLBL(BEG) END: CHGVAR VAR(&CLRA) VALUE(&CLR) ALL1: IF COND((%SST(&CLRA 1 1) *EQ '0') *AND + (%SST(&CLRA 2 1) *NE ' ')) THEN(DO) CHGVAR VAR(&CLRA) VALUE(%SST(&CLRA 2 8)) GOTO CMDLBL(ALL1) ENDDO CHGVAR VAR(&UNCA) VALUE(&UNC) ALL3: IF COND((%SST(&UNCA 1 1) *EQ '0') *AND + (%SST(&UNCA 2 1) *NE ' ')) THEN(DO) CHGVAR VAR(&UNCA) VALUE(%SST(&UNCA 2 8)) GOTO CMDLBL(ALL3) ENDDO SNDPGMMSG MSGID(CLR0002) MSGF(JCLRSPL) MSGDTA(&OUTQQ + *CAT &CLRA *CAT &UNCA *CAT &DAYSA *CAT &DATA) SNDPGMMSG MSGID(CLR0002) MSGF(JCLRSPL) MSGDTA(&OUTQQ + *CAT &CLRA *CAT &UNCA *CAT &DAYSA *CAT + &DATA) TOMSGQ(*SYSOPR) GOTO CMDLBL(FINE) ENDDO /* Gestisce la coda singola. */ DO SNDPGMMSG MSG(%SST(&OUTQQ 1 10) *CAT ' ' *CAT + %SST(&OUTQQ 11 10)) CALL PGM(JCLRSPL2) PARM(&OUTQQ &DAYS &CLR &UNC &DATA) CHGVAR VAR(&CLRA) VALUE(&CLR) ALL2: IF COND((%SST(&CLRA 1 1) *EQ '0') *AND + (%SST(&CLRA 2 1) *NE ' ')) THEN(DO) CHGVAR VAR(&CLRA) VALUE(%SST(&CLRA 2 8)) GOTO CMDLBL(ALL2) ENDDO CHGVAR VAR(&UNCA) VALUE(&UNC) ALL4: IF COND((%SST(&UNCA 1 1) *EQ '0') *AND + (%SST(&UNCA 2 1) *NE ' ')) THEN(DO) CHGVAR VAR(&UNCA) VALUE(%SST(&UNCA 2 8)) GOTO CMDLBL(ALL4) ENDDO SNDPGMMSG MSGID(CLR0001) MSGF(JCLRSPL) MSGDTA(&OUTQQ + *CAT &CLRA *CAT &UNCA *CAT &DAYSA *CAT &DATA) GOTO CMDLBL(FINE) ENDDO FINE: ENDPGM //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JCLRSPL2) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Clear Spool. Clear output queue. */ /* Claudio Neroni 03/04/2006 Creato. */ /* Scambia parametri. */ PGM PARM(&OUTQQ &DAYS &CLR &UNC &DATA) /* Riceve Output Queue qualificata. */ DCL VAR(&OUTQQ) TYPE(*CHAR) LEN(20) /* Riceve Numero di giorni da conservare. */ DCL VAR(&DAYS) TYPE(*DEC) LEN(5 0) /* Ritorna Numero spoolfile cancellati. */ DCL VAR(&CLR) TYPE(*DEC) LEN(9 0) /* Ritorna Numero spoolfile conservati. */ DCL VAR(&UNC) TYPE(*DEC) LEN(9 0) /* Ritorna Data limite. */ DCL VAR(&DATA) TYPE(*CHAR) LEN(8) /* Output Queue. */ DCL VAR(&OUTQ) TYPE(*CHAR) LEN(10) /* Output Queue Library. */ DCL VAR(&OUTQL) TYPE(*CHAR) LEN(10) /* Identificazione della riga di stampa. */ DCL VAR(&ID) TYPE(*CHAR) LEN(11) /* Estremi identificativi dello spoolfile estratti dalla riga di stampa. */ DCL VAR(&FILE) TYPE(*CHAR) LEN(10) DCL VAR(&USER) TYPE(*CHAR) LEN(10) DCL VAR(&JOB) TYPE(*CHAR) LEN(10) DCL VAR(&JOBNBR) TYPE(*CHAR) LEN(6) DCL VAR(&SPLNBR) TYPE(*CHAR) LEN(10) DCL VAR(&SPLNBRX) TYPE(*DEC) LEN(10) DCL VAR(&DATE) TYPE(*CHAR) LEN(8) DCL VAR(&DATE2) TYPE(*CHAR) LEN(8) /* Data sistema. */ DCL VAR(&QDATE) TYPE(*CHAR) LEN(6) /* Date di comodo per parametrizzare il cacolo data limite. */ DCL VAR(&INIZIO) TYPE(*CHAR) LEN(8) DCL VAR(&FINE) TYPE(*CHAR) LEN(8) /* Prenotazione della cancellazione del singolo spoolfile. */ DCL VAR(&DLT) TYPE(*CHAR) LEN(3) /* File di servizio dove trascrivere la stampa. */ DCLF FILE(JCLRSPL0) /* Intercetta tutti gli errori saltando a segnalazione. */ MONMSG MSGID(CPF0000 MCH0000 CEE0000) EXEC(GOTO + CMDLBL(ERRORE)) /* Spezza Output Queue qualificata in coda e libreria. */ CHGVAR VAR(&OUTQ) VALUE(%SST(&OUTQQ 1 10)) CHGVAR VAR(&OUTQL) VALUE(%SST(&OUTQQ 11 10)) /* Recupera data sistema. */ RTVSYSVAL SYSVAL(QDATE) RTNVAR(&QDATE) /* Converte il formato della data sistema. */ CVTDAT DATE(&QDATE) TOVAR(&INIZIO) FROMFMT(*SYSVAL) + TOFMT(*YYMD) TOSEP(*NONE) /* Calcola data limite. */ /* Riceve Data inizio YYYYMMDD. */ /* Riceve Numero giorni da togliere. */ /* Restituisce Data fine YYYYMMDD. */ CALL PGM(JCLRSPL3) PARM(&INIZIO &DAYS &FINE) /* Trascrive la data fine in Data Limite. */ CHGVAR VAR(&DATA) VALUE(&FINE) /* Cancella file di servizio in libreria temporanea. */ DLTF FILE(QTEMP/JCLRSPL0) MONMSG MSGID(CPF0000) /* Crea file di servizio in libreria temporanea. */ CRTPF FILE(QTEMP/JCLRSPL0) RCDLEN(132) TEXT('Clear + Spool. Wrkf') SIZE(*NOMAX) /* Prenota congelamento della stampa. */ OVRPRTF FILE(QPRTSPLQ) HOLD(*YES) /* Stampa il contenuto della coda. */ WRKOUTQ OUTQ(&OUTQL/&OUTQ) OUTPUT(*PRINT) /* Copia la stampa nel file di servizio. */ CPYSPLF FILE(QPRTSPLQ) TOFILE(QTEMP/JCLRSPL0) + SPLNBR(*LAST) /* Cancella la stampa. */ DLTSPLF FILE(QPRTSPLQ) SPLNBR(*LAST) /* Reindirizza la stampa. */ OVRDBF FILE(JCLRSPL0) TOFILE(QTEMP/JCLRSPL0) /* Cicla */ DOWHILE COND('1') /* Legge una riga di stampa. */ RCVF /* Se non ce ne sono altre, abbandona. */ MONMSG MSGID(CPF0864) EXEC(LEAVE) /* Estrae i primi caratteri per identificarla. */ CHGVAR VAR(&ID) VALUE(%SST(&JCLRSPL0 1 11)) /* Identifica le righe di contorno per scartarle. */ IF COND(&ID *EQ ' 5722SS1 V') THEN(ITERATE) IF COND(&ID *EQ ' File ') THEN(ITERATE) IF COND(&ID *EQ ' * ') THEN(ITERATE) IF COND(&ID *EQ ' (Nessu') THEN(ITERATE) /* Identifica le righe specifiche del rel V6R1M0. */ IF COND(&ID *EQ ' 5761SS1 V6') THEN(ITERATE) /* Identifica le righe specifiche del rel V7R1M0. */ IF COND(&ID *EQ ' 5770SS1 V7') THEN(ITERATE) /* Dopo tutti gli scarti, restano le righe degli spoolfile da esaminare. */ /* Estrae dati dalla riga di stampa. */ CHGVAR VAR(&FILE) VALUE(%SST(&JCLRSPL0 2 10)) CHGVAR VAR(&USER) VALUE(%SST(&JCLRSPL0 13 10)) CHGVAR VAR(&JOB) VALUE(%SST(&JCLRSPL0 84 10)) CHGVAR VAR(&JOBNBR) VALUE(%SST(&JCLRSPL0 95 6)) CHGVAR VAR(&SPLNBR) VALUE(%SST(&JCLRSPL0 69 10)) CHGVAR VAR(&DATE) VALUE(%SST(&JCLRSPL0 102 8)) /* Trasforma la data di generazione dello spoolfile. */ CVTDAT DATE(&DATE) TOVAR(&DATE2) FROMFMT(*SYSVAL) + TOFMT(*YYMD) TOSEP(*NONE) /* Se la data di generazione è minore della data limite, */ /* prenota cancellazione. */ IF COND(&DATE2 *LT &FINE) THEN(CHGVAR VAR(&DLT) + VALUE(DLT)) /* Se la data di generazione non è minore della data limite, */ /* prenota conservazione. */ ELSE CMD(CHGVAR VAR(&DLT) VALUE(' ')) /* Logga lo spoolfile. */ SNDPGMMSG MSG(&FILE *CAT ' ' *CAT &USER *CAT ' ' *CAT + &JOB *CAT ' ' *CAT &JOBNBR *CAT ' ' *CAT + &SPLNBR *CAT ' ' *CAT &DATE *CAT ' ' *CAT + &DATE2 *CAT ' ' *CAT &DLT) /* Se richiesta cancellazione. */ IF COND(&DLT *EQ DLT) THEN(DO) /* Converte da alfa a numerico. */ CHGVAR VAR(&SPLNBRX) VALUE(&SPLNBR) /* Cancella lo spoolfile. */ DLTSPLF FILE(&FILE) JOB(&JOBNBR/&USER/&JOB) + SPLNBR(&SPLNBRX) /* Conta la cancellazione. */ CHGVAR VAR(&CLR) VALUE(&CLR + 1) /* Se richiesta cancellazione. */ ENDDO /* Se richiesta conservazione. */ IF COND(&DLT *NE DLT) THEN(DO) /* Conta la conservazione. */ CHGVAR VAR(&UNC) VALUE(&UNC + 1) /* Se richiesta conservazione. */ ENDDO /* Cicla */ ENDDO /* Ritorna. */ RETURN /* Label di Errore. */ ERRORE: /* Segnala errore. */ SNDPGMMSG MSG(&OUTQ *CAT ' ' *CAT &OUTQL *CAT ' + Errore') TOPGMQ(*PRV (JCLRSPL1)) ENDPGM //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JCLRSPL3) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /TITLE Clear Spool. Date * Claudio Neroni 04/04/2006 Creato. * Calcola data limite. *--------------------------------------------------------------------- * Data inizio. D datai s d * Data fine. D dataf s d *--------------------------------------------------------------------- * Scambia parametri. C *entry plist * Riceve Data inizio YYYYMMDD. C parm ppdatai 8 * Riceve Numero giorni da togliere. C parm ppng 5 0 * Restituisce Data fine YYYYMMDD. C parm ppdataf 8 * Assume Data fine vuota (non cancellare nessuno spool). C clear ppdataf * Riceve data inizio. C move(p) ppdatai ppdatain 8 0 C *iso move ppdatain datai * Calcola data fine. C datai subdur ppng:*d dataf * Restituisce data fine. C *iso move dataf ppdatafn 8 0 C move(p) ppdatafn ppdataf * Chiude. C seton lr *--------------------------------------------------------------------- //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JCLRSPL4) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /TITLE Clear Spool. Refresh Outq List * Claudio Neroni 08/04/2006 Creato. * Trascrive l'elenco delle code di emissione nel * file guida della pulizia di massa. *--------------------------------------------------------------------- * Elenco generale delle code di emissione. FQADSPOBJ ip e disk * Guida della pulizia di massa. Fjclrspla uf a e k disk *--------------------------------------------------------------------- * Cerca la coda nella guida. C kguida klist C kfld odobnm C kfld odlbnm C kguida chain rcs 50 C if *in50 C clear rcs C eval c0outq=odobnm C eval c0libr=odlbnm C eval c0desc=odobtx C eval c0nota='From ' + date + ' ' + time C write rcs C else C eval c0lost=*blank C eval c0desc=odobtx C update rcs C endif *--------------------------------------------------------------------- C *inzsr begsr C clear daten 8 0 C eval daten= *year*10000 + *month*100 + *day C movel(p) daten date 8 C time timen 6 0 C movel(p) timen time 6 C *loval setll rcs C do *hival C read rcs 50 C 50 leave C eval c0lost='1' C update rcs C enddo C endsr *--------------------------------------------------------------------- //ENDSRC //ENDBCHJOB