//BCHJOB JOB(JACT) 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-07-08 18:33 */ /* To File : "JACT" */ /* To Library : "NERONI2" */ /* To Text : "Job is active? 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 "JACT.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:\JACT.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JACT.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(JACT) 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/JACT" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JACT) MBR(JACT.) 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/JACT) CRTSRCPF FILE(NERONI2/JACT) RCDLEN(112) + TEXT('Job is active? Src') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JACT) TOFILE(NERONI2/JACT) + TOMBR(JACT) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JACT) MBR(JACT) + SRCTYPE(CMD) + TEXT('Job is active? Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JACT.) TOFILE(NERONI2/JACT) + TOMBR(JACT.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JACT) MBR(JACT.) + SRCTYPE(CL) + TEXT('Job is active? CrtJs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JACTI) TOFILE(NERONI2/JACT) + TOMBR(JACTI) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JACT) MBR(JACTI) + SRCTYPE(CMD) + TEXT('Job is active? CmdInter') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JACT1) TOFILE(NERONI2/JACT) + TOMBR(JACT1) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JACT) MBR(JACT1) + SRCTYPE(CLLE) + TEXT('Job is active? Cpp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JACT9) TOFILE(NERONI2/JACT) + TOMBR(JACT9) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JACT) MBR(JACT9) + SRCTYPE(CLLE) + TEXT('Job is active? Test') /*---------------------------------------------------------------------*/ //DATA FILE(JACT) FILETYPE(*SRC) ENDCHAR('//ENDSRC') CMD PROMPT('Job is active?') PARM KWD(JOB) TYPE(*NAME) MIN(1) PROMPT('Job name') PARM KWD(ACTIVE) TYPE(*CHAR) LEN(4) RTNVAL(*YES) + MIN(1) PROMPT('Active *YES/*NO Var 4') //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JACT.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JACT.) JOBD(NERONI2/NERONI2) OUTQ(QPRINTS) ENDSEV(60) + LOG(4 00 *SECLVL) MSGQ(*USRPRF) /* Claudio Neroni 23/09/2006 Creato. */ /* JACT */ /* Job is active? */ /* Prerequisiti: nessuno */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella gli oggetti preesistenti. */ DLTCMD CMD(NERONI2/JACT) DLTCMD CMD(NERONI2/JACTI) DLTF FILE(NERONI2/JACT0) DLTPGM PGM(NERONI2/JACT1) DLTPGM PGM(NERONI2/JACT9) DLTPGM PGM(NERONI2/JACTR) DLTPGM PGM(QGPL/JACTR) /* Crea i comandi. */ CRTCMD CMD(NERONI2/JACT) PGM(NERONI2/JACT1) SRCFILE(JACT) ALLOW(*BPGM + *IPGM) PRDLIB(NERONI2) CRTCMD CMD(NERONI2/JACTI) PGM(NERONI2/JACT1) SRCFILE(JACT) ALLOW(*ALL) + PRDLIB(NERONI2) /* Crea il file di transito 0. */ CRTPF FILE(NERONI2/JACT0) RCDLEN(133) TEXT('Job is active? Wrk') + SIZE(*NOMAX) /* Crea il command processing program. */ CRTBNDCL PGM(NERONI2/JACT1) SRCFILE(JACT) DBGVIEW(*ALL) /* Crea il programma di test. */ CRTBNDCL PGM(NERONI2/JACT9) SRCFILE(JACT) DBGVIEW(*ALL) /* Crea il programma di retrieve. */ CRTBNDCL PGM(NERONI2/JACTR) SRCFILE(JACT) DBGVIEW(*ALL) CRTBNDCL PGM(QGPL/JACTR) SRCFILE(JACT) DBGVIEW(*ALL) //ENDBCHJOB //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JACTI) FILETYPE(*SRC) ENDCHAR('//ENDSRC') CMD PROMPT('Job is active?') PARM KWD(JOB) TYPE(*NAME) MIN(1) PROMPT('Job name') PARM KWD(ACTIVE) TYPE(*CHAR) LEN(4) CONSTANT(*MSG) //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JACT1) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Job is active? Cpp */ /* Claudio Neroni 23/09/2006 Creato. */ /* */ /* */ PGM PARM(&JOB &ACTIVE) /* Riceve il Nome del job. */ DCL VAR(&JOB) TYPE(*CHAR) LEN(10) /* Riceve il Modo richiesto. */ /* Restituisce se Il job è attivo (*YES/*NO). */ DCL VAR(&ACTIVE) TYPE(*CHAR) LEN(4) /* Modo richiesto. */ DCL VAR(&MODE) TYPE(*CHAR) LEN(4) /* Messaggio. */ DCL VAR(&MSG) TYPE(*CHAR) LEN(512) /* Tratti della riga di stampa. */ DCL VAR(&TRE) TYPE(*CHAR) LEN(3) DCL VAR(&QUA) TYPE(*CHAR) LEN(4) DCL VAR(&NAM) TYPE(*CHAR) LEN(10) /* File di transito 1. */ DCLF FILE(JACT0) /* Salva il modo richiesto. */ CHGVAR VAR(&MODE) VALUE(&ACTIVE) /* Assume che il job non sia attivo. */ CHGVAR VAR(&ACTIVE) VALUE(*NO) /* Cancella i file di transito. */ DLTF FILE(QTEMP/JACT0T) MONMSG MSGID(CPF0000) /* Scarica l'elenco dei lavori attivi. */ OVRPRTF FILE(QPDSPAJB) HOLD(*YES) USRDTA(JACT) WRKACTJOB OUTPUT(*PRINT) JOB(&JOB) DLTOVR FILE(QPDSPAJB) /* Crea il file di transito 0. */ CRTPF FILE(QTEMP/JACT0T) RCDLEN(133) TEXT('Job is + active? Wrk') SIZE(*NOMAX) /* Copia l'elenco sul file di transito 0. */ CPYSPLF FILE(QPDSPAJB) TOFILE(QTEMP/JACT0T) + SPLNBR(*LAST) CTLCHAR(*FCFC) /* Cancella l'elenco. */ DLTSPLF FILE(QPDSPAJB) SPLNBR(*LAST) /* Reindirizza il file di transito 0 sul file temporaneo. */ OVRDBF FILE(JACT0) TOFILE(QTEMP/JACT0T) LVLCHK(*NO) /* Inizio lettura. */ READBEG: /* Legge una riga dal file di transito 0. */ RCVF /* Se non ci sono altre righe, salta a fine lettura. */ MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(READEND)) /* Estrae un tratto di riga di stampa utile all'identificazione. */ CHGVAR VAR(&TRE) VALUE(%SST(&JACT0 2 3)) /* Se la riga non è del tipo atteso, ricicla. */ IF COND(&TRE *NE ' ') THEN(GOTO CMDLBL(READBEG)) /* Estrae un tratto di riga di stampa utile all'identificazione. */ CHGVAR VAR(&QUA) VALUE(%SST(&JACT0 2 4)) /* Se la riga non è del tipo atteso, ricicla. */ IF COND(&QUA *EQ ' ') THEN(GOTO CMDLBL(READBEG)) /* Estrae il nome job dalla riga. */ CHGVAR VAR(&NAM) VALUE(%SST(&JACT0 5 10)) /* Se il nome trovato coincide col nome cercato. */ IF COND(&NAM *EQ &JOB) THEN(DO) /* Annota job attivo. */ CHGVAR VAR(&ACTIVE) VALUE(*YES) /* Salta a fine. */ GOTO CMDLBL(READEND) /* Se il nome trovato coincide col nome cercato. */ ENDDO /* Ricicla. */ GOTO CMDLBL(READBEG) /* Fine lettura. */ READEND: /* Se richiesto, manda un messaggio. */ IF COND(&MODE *EQ *MSG) THEN(DO) IF COND(&ACTIVE *EQ *YES) THEN(CHGVAR VAR(&MSG) + VALUE('Il lavoro' *BCAT &JOB *BCAT 'è + ATTIVO.')) ELSE CMD(CHGVAR VAR(&MSG) VALUE('Il lavoro' *BCAT + &JOB *BCAT 'non è attivo.')) SNDPGMMSG MSG(&MSG) ENDDO /* Fine. */ ENDPGM: ENDPGM //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JACT9) FILETYPE(*SRC) ENDCHAR('//ENDSRC') PGM PARM(&JOB) DCL VAR(&JOB) TYPE(*CHAR) LEN(10) DCL VAR(&ACTIVE) TYPE(*CHAR) LEN(4) JACT JOB(&JOB) ACTIVE(&ACTIVE) SNDPGMMSG MSG(&ACTIVE) ENDPGM //ENDSRC //ENDBCHJOB