//BCHJOB JOB(JRLSJOB) 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: 2015-07-17 17:05 */ /* To File : "JRLSJOB" */ /* To Library : "NERONI2" */ /* To Text : "Releases Jobs. 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 "JRLSJOB.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:\JRLSJOB.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JRLSJOB.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(JRLSJOB) 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/JRLSJOB" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JRLSJOB) MBR(JRLSJOB.) 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/JRLSJOB) CRTSRCPF FILE(NERONI2/JRLSJOB) RCDLEN(112) + TEXT('Releases Jobs. Src') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JRLSJOB) TOFILE(NERONI2/JRLSJOB) + TOMBR(JRLSJOB) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JRLSJOB) MBR(JRLSJOB) + SRCTYPE(CMD) + TEXT('Releases Jobs. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JRLSJOB.) TOFILE(NERONI2/JRLSJOB) + TOMBR(JRLSJOB.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JRLSJOB) MBR(JRLSJOB.) + SRCTYPE(CL) + TEXT('Releases Jobs. Jobstr') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JRLSJOBC) TOFILE(NERONI2/JRLSJOB) + TOMBR(JRLSJOBC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JRLSJOB) MBR(JRLSJOBC) + SRCTYPE(CLLE) + TEXT('Releases Jobs. Cpp') /*---------------------------------------------------------------------*/ //DATA FILE(JRLSJOB) FILETYPE(*SRC) ENDCHAR('//ENDSRC') CMD PROMPT('Releases Jobs') PARM KWD(USRJOB) TYPE(*NAME) DFT(*CURRENT) + SPCVAL((*CURRENT)) PROMPT('User of jobs + to be released') //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JRLSJOB.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JRLSJOB.) JOBD(NERONI2/NERONI2) OUTQ(QPRINTS) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) /* Claudio Neroni 17-07-2015 Creato. */ /* JRLSJOB */ /* Releases Jobs. */ /* Prerequisiti: JRSNMSG, JWUJ */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella gli oggetti preesistenti. */ DLTCMD CMD(NERONI2/JRLSJOB) DLTPGM PGM(NERONI2/JRLSJOBC) /* Crea gli oggetti. */ CRTBNDCL PGM(NERONI2/JRLSJOBC) SRCFILE(JRLSJOB) TGTRLS(*CURRENT) + DBGVIEW(*ALL) CRTCMD CMD(NERONI2/JRLSJOB) PGM(JRLSJOBC) SRCFILE(JRLSJOB) + PRDLIB(NERONI2) //ENDBCHJOB //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JRLSJOBC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Releases Jobs. Cpp */ /* Claudio Neroni 17-07-2015 Creato. */ /* */ /* Rilascia tutti i lavori in coda dell'utente richiesto. */ /* */ PGM PARM(&USER) /* Riceve Utente. */ DCL VAR(&USER) TYPE(*CHAR) LEN(10) /* Messaggio. */ DCL VAR(&MSG) TYPE(*CHAR) LEN(512) /* Contatore job rilasciati. */ DCL VAR(&CNT) TYPE(*DEC) LEN(5 0) /* Contatore job NON rilasciati. */ DCL VAR(&CNTNO) TYPE(*DEC) LEN(5 0) /* Prenotazione del CPF0001. */ DCL VAR(&CPF0001) TYPE(*LGL) /* Dichiara Outfile di JWUJ (Work User Jobs Outfile). */ DCLF FILE(JWUJ1) /* Intercetta gli errori. */ MONMSG MSGID(CPF0000 MCH0000 CEE0000) EXEC(GOTO + CMDLBL(ERRORE)) /* Se richiesto, recupera l'utente corrente. */ IF COND(&USER *EQ *CURRENT) THEN(RTVJOBA + CURUSER(&USER)) /* Scarica l'elenco dei lavori in job queue. */ JWUJ STATUS(*JOBQ) OUTFILE(QTEMP/JWUJT) /* Reindirizza l'elenco dei lavori in jobq. */ OVRDBF FILE(JWUJ1) TOFILE(QTEMP/JWUJT) /* Cicla. */ DOWHILE COND('1') /* Legge dall'elenco dei job. */ RCVF /* Se non ce ne sono altri, abbandona. */ MONMSG MSGID(CPF0864) EXEC(LEAVE) /* Se lo stato del job non č "in coda", ricicla. */ IF COND(&WUJSTA *NE *JOBQ) THEN(ITERATE) /* Se l'utente non č quello richiesto, ricicla. */ IF COND(&WUJUSR *NE &USER) THEN(ITERATE) /* Rilascia il lavoro. */ RLSJOB JOB(&WUJNUM/&WUJUSR/&WUJNAM) /* Se non riesce a rilasciare. */ MONMSG MSGID(CPF0000 MCH0000) EXEC(DO) /* Conta. */ CHGVAR VAR(&CNTNO) VALUE(&CNTNO +1) /* Messaggia. */ SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA('NON + rilasciato il job' *BCAT &WUJNAM *TCAT + '/' *CAT &WUJUSR *TCAT '/' *CAT &WUJNUM) /* Ricicla. */ ITERATE /* Se non riesce a rilasciare. */ ENDDO /* Conta i lavori rilasciati. */ CHGVAR VAR(&CNT) VALUE(&CNT +1) /* Messaggia. */ SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) + MSGDTA('Rilasciato il job' *BCAT &WUJNAM + *TCAT '/' *CAT &WUJUSR *TCAT '/' *CAT + &WUJNUM) /* Cicla. */ 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(JRLSJOB) + MSGTYPE(*ESCAPE) MONMSG MSGID(CPF0000 MCH0000) ENDDO /* Ritorna. */ RETURN /* Label di errore. */ ERRORE: /* Restituisce i messaggi al chiamante, */ /* trasformando eventuali escape in diagnostici. */ JRSNMSG 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 //ENDBCHJOB