//BCHJOB JOB(JWSF) 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-07-18 10:06 */ /* To File : "JWSF" */ /* To Library : "NERONI2" */ /* To Text : "Work Spool File Outfile. 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 "JWSF.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:\JWSF.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JWSF.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(JWSF) 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/JWSF" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JWSF) MBR(JWSF.) 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/JWSF) CRTSRCPF FILE(NERONI2/JWSF) RCDLEN(112) + TEXT('Work Spool File Outfile. Src') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JWSF) TOFILE(NERONI2/JWSF) + TOMBR(JWSF) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JWSF) MBR(JWSF) + SRCTYPE(CMD) + TEXT('Work Spool File Outfile. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JWSF.) TOFILE(NERONI2/JWSF) + TOMBR(JWSF.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JWSF) MBR(JWSF.) + SRCTYPE(CL) + TEXT('Work Spool File Outfile. CrtJs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JWSFC) TOFILE(NERONI2/JWSF) + TOMBR(JWSFC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JWSF) MBR(JWSFC) + SRCTYPE(CLLE) + TEXT('Work Spool File Outfile. Cpp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JWSFD) TOFILE(NERONI2/JWSF) + TOMBR(JWSFD) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JWSF) MBR(JWSFD) + SRCTYPE(RPGLE) + TEXT('Work Spool File Outfile. Exe') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JWSFV) TOFILE(NERONI2/JWSF) + TOMBR(JWSFV) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JWSF) MBR(JWSFV) + SRCTYPE(CLLE) + TEXT('Work Spool File Outfile. Vcp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JWSF1) TOFILE(NERONI2/JWSF) + TOMBR(JWSF1) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JWSF) MBR(JWSF1) + SRCTYPE(PF) + TEXT('Work Spool File Outfile. OutFile') /*----------------------------------------------------------------------------*/ //DATA FILE(JWSF) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Work Spool File Outfile. Cmd */ /* Claudio Neroni 26-02-2009 Creato. */ CMD PROMPT('Work Spool File Outfile') PARM KWD(SELECT) TYPE(SELECT) PROMPT('Scelta file + per') SELECT: ELEM TYPE(*NAME) DFT(*CURRENT) SPCVAL((*CURRENT) + (*ALL)) PROMPT('Utente') ELEM TYPE(*NAME) DFT(*ALL) SPCVAL((*ALL) (*OUTQ)) + PROMPT('Unità di stampa') ELEM TYPE(*CHAR) LEN(10) DFT(*ALL) SPCVAL((*ALL) + (*STD)) PROMPT('Tipo modulo') ELEM TYPE(*CHAR) LEN(10) DFT(*ALL) SPCVAL((*ALL)) + PROMPT('Dati utente') ELEM TYPE(*INT2) DFT(*ALL) RANGE(1 32) + SPCVAL((*BLANK -1) (*ALL 0) (*SYSTEM 1) + (*ASPDEV -2)) PROMPT('ASP') ELEM TYPE(*NAME) DFT(*ALL) SPCVAL((*ALL)) + PROMPT('File in spool') PARM KWD(JOB) TYPE(JOB) SNGVAL((*)) PROMPT('Nome + lavoro') JOB: QUAL TYPE(*NAME) QUAL TYPE(*NAME) PROMPT('Utente') QUAL TYPE(*CHAR) LEN(6) RANGE('000001' '999999') + SPCVAL((' ')) PROMPT('Numero') PARM KWD(PERIOD) TYPE(PERIOD) PROMPT('Periodo di + tempo') PERIOD: ELEM TYPE(BEG) PROMPT('Inizio') ELEM TYPE(END) PROMPT('Fine') BEG: ELEM TYPE(*TIME) DFT(*AVAIL) SPCVAL((*AVAIL + 000000)) PROMPT('Ora di inizio') ELEM TYPE(*DATE) DFT(*BEGIN) SPCVAL((*BEGIN + 0280824) (*CURRENT 1991231)) PROMPT('Data + di inizio') END: ELEM TYPE(*TIME) DFT(*AVAIL) SPCVAL((*AVAIL + 235959)) PROMPT('Ora di fine') ELEM TYPE(*DATE) DFT(*END) SPCVAL((*END 1710509) + (*CURRENT 1991231)) PROMPT('Data di fine') PARM KWD(ASPDEV) TYPE(*NAME) DFT(*) SPCVAL((*) + (*SYSBAS) (*CURASPGRP)) PROMPT('Unità ASP') PARM KWD(OUTFILE) TYPE(OUTFILE) PROMPT('Output + File') OUTFILE: QUAL TYPE(*NAME) DFT(JWSFT) QUAL TYPE(*NAME) DFT(QTEMP) MIN(0) PROMPT('in + library') //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JWSF.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JWSF.) JOBD(NERONI2/NERONI2) OUTQ(QPRINTS) ENDSEV(60) + LOG(4 00 *SECLVL) MSGQ(*USRPRF) CCSID(280) /* Claudio Neroni 10-12-2001 Creato. */ /* JWSF */ /* Work Spool File Outfile. */ /* Prerequisiti: JRSNMSG, JCPYCLR */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella il file messaggi preesistente. */ DLTMSGF MSGF(NERONI2/JWSF) /* Cancella i testi d'aiuto preesistenti. */ DLTPNLGRP PNLGRP(NERONI2/JWSFP) /* Cancella i logici preesistenti. */ /* Cancella i fisici preesistenti. */ DLTF FILE(NERONI2/JWSF1) /* Cancella i comandi preesistenti. */ DLTCMD CMD(NERONI2/JWSF) /* Cancella i programmi preesistenti. */ DLTPGM PGM(NERONI2/JWSFC) DLTPGM PGM(NERONI2/JWSFD) DLTPGM PGM(NERONI2/JWSFV) /* Crea i file fisici. */ CRTPF FILE(NERONI2/JWSF1) SRCFILE(JWSF) SIZE(*NOMAX) /* Crea i file logici. */ /* Crea i comandi. */ CRTCMD CMD(NERONI2/JWSF) PGM(JWSFC) SRCFILE(JWSF) VLDCKR(JWSFV) + MSGF(JWSF) HLPPNLGRP(JWSFP) HLPID(CMD) PRDLIB(NERONI2) /* Duplica i comandi in QGPL. */ CRTPRXCMD CMD(QGPL/JWSF) TGTCMD(NERONI2/JWSF) AUT(*USE) REPLACE(*YES) /* Crea i programmi. */ CRTBNDCL PGM(NERONI2/JWSFC) SRCFILE(JWSF) TGTRLS(*CURRENT) + DBGVIEW(*ALL) CRTBNDRPG PGM(NERONI2/JWSFD) SRCFILE(JWSF) DBGVIEW(*ALL) + TGTRLS(*CURRENT) CRTBNDCL PGM(NERONI2/JWSFV) SRCFILE(JWSF) TGTRLS(*CURRENT) + DBGVIEW(*ALL) /* Crea il file messaggi. */ CRTMSGF MSGF(NERONI2/JWSF) TEXT('Work Spool File Outfile. Msgf') /* Fotografia comandi (xxxA001). */ /* Messaggi comuni a pgm di comandi diversi (xxx0001). */ /* Messaggi nei pgm del Cmd 1 (xxx0101). */ /* Messaggi nei pgm del Cmd 2 (xxx0201). */ /* Messaggi dei Cmd (xxx1001). */ /* Messaggi del Validity Checker Program (xxx2001). */ ADDMSGD MSGID(JWS2001) MSGF(NERONI2/JWSF) MSG('Parametri SELECT e + JOB sono in alternativa.') SECLVL('La api QUSLSPL, + chiamata in esecuzione dal corrente comando, accetta + uno solo dei parametri di parzializzazione + dell''elenco di spool file da generare. &N O SELECT + oppure JOB ma non entrambi.') SEV(30) FMT((*CHAR 4)) ADDMSGD MSGID(JWS2002) MSGF(NERONI2/JWSF) MSG('Parametro SELECT + non ancora gestito.') SECLVL('La api + QUSLSPL, chiamata in esecuzione dal corrente comando, + non accetta il parametro in questione. &N Forse + risolverò con comparazioni sui dati durante la + scrittura dell''elenco.') SEV(30) FMT((*CHAR 4)) ADDMSGD MSGID(JWS2003) MSGF(NERONI2/JWSF) MSG('Parametro ASPDEV + (Unità ASP) non ancora gestito.') SECLVL('La api + QUSLSPL, chiamata in esecuzione dal corrente comando, + accetta il parametro in questione ma, purtroppo, non + l''ho ancora implementato. &N Prossimamente su questi + schermi!') SEV(30) FMT((*CHAR 4)) /* Crea i testi d'aiuto. */ CRTPNLGRP PNLGRP(NERONI2/JWSFP) SRCFILE(JWSF) //ENDBCHJOB //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JWSFC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Work Spool File Outfile. Cpp */ /* Claudio Neroni 26-02-2009 Creato. */ PGM PARM(&SELECT &JOB &PERIOD &ASPDEV &OUTFILEQ) /* Riceve Scelta dei file. */ DCL VAR(&SELECT) TYPE(*CHAR) LEN(62) /* Riceve Lavoro. */ DCL VAR(&JOB) TYPE(*CHAR) LEN(26) /* Riceve Periodo. */ DCL VAR(&PERIOD) TYPE(*CHAR) LEN(36) /* Riceve Unità ASP. */ DCL VAR(&ASPDEV) TYPE(*CHAR) LEN(10) /* Riceve Nome qualificato del file di emissione. */ DCL VAR(&OUTFILEQ) TYPE(*CHAR) LEN(20) /* Utente da visualizzare. */ DCL VAR(&SELECTUSR) TYPE(*CHAR) LEN(10) /* Unità da visualizzare. */ DCL VAR(&SELECTDEV) TYPE(*CHAR) LEN(10) DCL VAR(&SELECTDEVQ) TYPE(*CHAR) LEN(20) /* Tipo modulo da visualizzare. */ DCL VAR(&SELECTMOD) TYPE(*CHAR) LEN(10) /* Dati utente da visualizzare. */ DCL VAR(&SELECTDTA) TYPE(*CHAR) LEN(10) /* ASP da visualizzare. */ DCL VAR(&SELECTASP) TYPE(*DEC) LEN(5 0) /* File in spool. */ DCL VAR(&SELECTFIL) TYPE(*CHAR) LEN(10) /* Utente del lavoro. */ DCL VAR(&USER) TYPE(*CHAR) LEN(10) /* Periodo. Ora inizio. */ DCL VAR(&PERIODBT) TYPE(*CHAR) LEN(6) /* Periodo. Data inizio. */ DCL VAR(&PERIODBD) TYPE(*CHAR) LEN(7) /* Periodo. Ora fine. */ DCL VAR(&PERIODET) TYPE(*CHAR) LEN(6) /* Periodo. Data fine. */ DCL VAR(&PERIODED) TYPE(*CHAR) LEN(7) /* File di emissione. */ DCL VAR(&OUTFILE) TYPE(*CHAR) LEN(10) /* Libreria del File di emissione. */ DCL VAR(&OUTLIB) TYPE(*CHAR) LEN(10) /* Data corrente. */ DCL VAR(&CENTURY) TYPE(*CHAR) LEN(1) DCL VAR(&YEAR) TYPE(*CHAR) LEN(2) DCL VAR(&MONTH) TYPE(*CHAR) LEN(2) DCL VAR(&DAY) TYPE(*CHAR) LEN(2) DCL VAR(&CURRENT) TYPE(*CHAR) LEN(7) /* Contatore record. */ DCL VAR(&CNT) TYPE(*CHAR) LEN(10) /* Prenotazione del CPF0001. */ DCL VAR(&CPF0001) TYPE(*LGL) /* Intercetta gli errori. */ MONMSG MSGID(CPF0000 MCH0000 CEE0000) EXEC(GOTO + CMDLBL(ERRORE)) /* Estrae parametri. */ CHGVAR VAR(&OUTFILE) VALUE(%SST(&OUTFILEQ 1 10)) CHGVAR VAR(&OUTLIB) VALUE(%SST(&OUTFILEQ 11 10)) /* Recupera gli attributi del lavoro. */ RTVJOBA USER(&USER) /* Compone la data corrente. */ RTVSYSVAL SYSVAL(QCENTURY) RTNVAR(&CENTURY) RTVSYSVAL SYSVAL(QYEAR) RTNVAR(&YEAR) RTVSYSVAL SYSVAL(QMONTH) RTNVAR(&MONTH) RTVSYSVAL SYSVAL(QDAY) RTNVAR(&DAY) CHGVAR VAR(&CURRENT) VALUE(&CENTURY *CAT &YEAR *CAT + &MONTH *CAT &DAY) /* Travasa le variabili ricevute da parametro select. */ CHGVAR VAR(&SELECTUSR) VALUE(%SST(&SELECT 03 10)) CHGVAR VAR(&SELECTDEV) VALUE(%SST(&SELECT 13 10)) CHGVAR VAR(&SELECTMOD) VALUE(%SST(&SELECT 23 10)) CHGVAR VAR(&SELECTDTA) VALUE(%SST(&SELECT 33 10)) CHGVAR VAR(&SELECTASP) VALUE(%BIN(&SELECT 43 2)) CHGVAR VAR(&SELECTFIL) VALUE(%SST(&SELECT 45 10)) /* Travasa le variabili ricevute da parametro period. */ /* OCCHIO: SONO A ROVESCIO RISPETTO ALL'ORDINE DI DEFINIZIONE NEL CMD */ CHGVAR VAR(&PERIODET) VALUE(%SST(&PERIOD 09 6)) CHGVAR VAR(&PERIODED) VALUE(%SST(&PERIOD 15 7)) CHGVAR VAR(&PERIODBT) VALUE(%SST(&PERIOD 24 6)) CHGVAR VAR(&PERIODBD) VALUE(%SST(&PERIOD 30 7)) /* Se richiesta, assume da data corrente. */ IF COND(&PERIODBD *EQ '1991231') THEN(CHGVAR + VAR(&PERIODBD) VALUE(&CURRENT)) IF COND(&PERIODED *EQ '1991231') THEN(CHGVAR + VAR(&PERIODED) VALUE(&CURRENT)) /* Manipola coda. */ IF COND(&SELECTDEV *EQ *ALL) THEN(CHGVAR + VAR(&SELECTDEVQ) VALUE(&SELECTDEV)) ELSE CMD(CHGVAR VAR(&SELECTDEVQ) VALUE(&SELECTDEV + *CAT *LIBL)) /* Se presente job, sbianca select causa incompatibilità nell'api. */ IF COND(&JOB *NE ' ') THEN(DO) CHGVAR VAR(&SELECTUSR) VALUE(' ') CHGVAR VAR(&SELECTDEV) VALUE(' ') CHGVAR VAR(&SELECTDEVQ) VALUE(' ') CHGVAR VAR(&SELECTMOD) VALUE(' ') CHGVAR VAR(&SELECTDTA) VALUE(' ') CHGVAR VAR(&SELECTASP) VALUE(-1) CHGVAR VAR(&SELECTFIL) VALUE(' ') ENDDO /* Crea il file di emissione. */ JCPYCLR FROMFILE(JWSF1) TOFILE(&OUTLIB/&OUTFILE) /* Ridirige la scrittura sul file di emissione. */ OVRDBF FILE(JWSF1) TOFILE(&OUTLIB/&OUTFILE) /* Chiama il riempimento del file di emissione. */ CALL PGM(JWSFD) PARM(&SELECTUSR &SELECTDEVQ + &SELECTMOD &SELECTDTA &SELECTASP &JOB + &PERIODBD &PERIODBT &PERIODED &PERIODET &CNT) /* Messaggia per esito felice. */ SNDPGMMSG MSG('Creato in' *BCAT &OUTLIB *TCAT '/' + *TCAT &OUTFILE *BCAT 'l''elenco di' *BCAT + &CNT *BCAT 'file di spool.') /* Salta all'esecuzione delle attività finali. */ GOTO CMDLBL(RCLRSC) /* 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(JSPOL) + 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(JWSFD) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /TITLE Work Spool File Outfile. Exe * Claudio Neroni 26-02-2009 Creato. * http://www.think400.dk/apier_2.htm#eks0017 * Thanks to Scott Klement *--------------------------------------------------------------------------------------------- H DFTACTGRP(*NO) *--------------------------------------------------------------------------------------------- * Output file. Fjwsf1 o e disk *--------------------------------------------------------------------------------------------- * User space name. D userspace ds D userspacename 10 inz('JWSFU') D userspacelib 10 inz('QTEMP') D usattrib S 10 INZ('temporary') D ussize S 9b 0 INZ(265535) D usinitvalu S 1 INZ(x'00') D usauth S 10 INZ('*ALL') D ustext S 50 INZ('Work Spool File Outfile. + D UsrSpc') * Retrieve Pointer to User Space (QUSPTRUS) API D QUSPTRUS PR ExtPgm('QUSPTRUS') D UsrSpc 20A CONST D Pointer * D GetStatus PR 4A D StatusCode 10I 0 value D p_UsrSpc s * D dsLH DS BASED(p_UsrSpc) qualified D Filler1 103A D Status 1A D Filler2 12A D HdrOffset 10I 0 D HdrSize 10I 0 D ListOffset 10I 0 D ListSize 10I 0 D NumEntries 10I 0 D EntrySize 10I 0 D p_Entry s * D xx DS BASED(p_Entry) qualified D JobName 10A D UserName 10A D JobNumber 6A D SplfName 10A D SplfNbr 10I 0 D SplfStatus 10I 0 D OpenDate 7A D OpenTime 6A D Schedule 1A D SysName 10A D UserData 10A D FormType 10A D OutQueue 10A D OutQueueLib 10A D AuxPool 10I 0 D SplfSize 10I 0 D SizeMult 10I 0 D TotalPages 10I 0 D CopiesLeft 10I 0 D Priority 1A D Reserved 3A * API Error Structure D dsEC DS qualified D BytesProvided 10I 0 inz(%size(dsEC)) D BytesAvail 10I 0 inz(0) D MessageID 7A D Reserved 1A D MessageData 240A D Keys s 10I 0 dim(1) D size s 10I 0 D sf s 10I 0 D msg s 52A * Auxiliary storage pool. D AuxStgPool s 10I 0 *--------------------------------------------------------------------------------------------- * Receive parameters. C *entry plist C parm ppusr 10 I C parm ppoutq 20 I C parm ppfor 10 I C parm ppdta 10 I C parm ppasp 5 0 I C parm ppjob 26 I C parm ppbegd 7 I C parm ppbegt 6 I C parm ppendd 7 I C parm ppendt 6 I C parm ppcnt 10 O * Delete user space. C CALL 'QUSDLTUS' 50 C PARM userspace C PARM dsEC * Create user space. C CALL 'QUSCRTUS' C PARM userspace C PARM usattrib C PARM ussize C PARM usinitvalu C PARM usauth C PARM ustext * Fill User Space with api QUSLSPL (List Spooled Files) 16 parms. C call 'QUSLSPL' * Required parameters. C parm userspace UsrSpc 20 C parm 'SPLF0300' Format 8 C parm ppusr UserName 10 C parm ppoutq QualOutQ 20 C parm ppfor FormType 10 C parm ppdta UserData 10 * Optional parameters group 1. C parm dsEC * Optional parameters group 2. C parm ppjob QualJob 26 C parm x'00000000' FieldKeys 4 C parm x'00000000' NumFields 4 * Optional parameters group 3. C parm ppasp AuxStgPool * Optional parameters group 4. C parm '*ALL' JobSysName 8 C parm ppbegd StartCrtDate 7 C parm ppbegt StartCrtTime 6 C parm ppendd EndCrtDate 7 C parm ppendt EndCrtTime 6 *--------------------------------------------------------------------------------------------- /free // Get a pointer to the returned user space QUSPTRUS(userspace: p_UsrSpc); // Loop through list, for each spooled file, display the // spooled file name, number and status. p_Entry = p_UsrSpc + dsLH.ListOffset; for sf = 1 to dsLH.NumEntries; WSFSEQ = WSFSEQ + 1 ; WSFNAM = xx.JobName ; WSFUSR = xx.UserName ; WSFNUM = xx.JobNumber ; WSFSNA = xx.SplfName ; WSFSNU = xx.SplfNbr ; WSFSST = xx.SplfStatus ; WSFSSD = GetStatus(xx.SplfStatus); WSFOPD = xx.OpenDate ; WSFOPT = xx.OpenTime ; WSFSCH = xx.Schedule ; WSFSYS = xx.SysName ; WSFUDA = xx.UserData ; WSFFOR = xx.FormType ; WSFOUQ = xx.OutQueue ; WSFOUL = xx.OutQueueLib ; WSFPOO = xx.AuxPool ; WSFSIZ = xx.SplfSize ; WSFMUL = xx.SizeMult ; WSFPAG = xx.TotalPages ; WSFCOP = xx.CopiesLeft ; WSFPTY = xx.Priority ; write wsf; p_Entry += dsLH.EntrySize; endfor; /end-free *--------------------------------------------------------------------------------------------- * Delete user space. C CALL 'QUSDLTUS' 50 C PARM userspace C PARM dsEC * Edit counter. C eval ppcnt = %trim(%editc(WSFSEQ:'L')) * Exit. C seton lr *--------------------------------------------------------------------------------------------- * get human-readable status code for a numeric status code: P GetStatus B D GetStatus PI 4A D StatusCode 10I 0 value /free if (StatusCode = 1); return 'RDY'; elseif (StatusCode = 2); return 'OPN'; elseif (StatusCode = 3); return 'CLO'; elseif (StatusCode = 4); return 'SAV'; elseif (StatusCode = 5); return 'WTR'; elseif (StatusCode = 6); return 'HLD'; elseif (StatusCode = 7); return 'MSGW'; elseif (StatusCode = 8); return 'PND'; elseif (StatusCode = 9); return 'PRT'; elseif (StatusCode = 10); return 'FIN'; elseif (StatusCode = 11); return 'SND'; elseif (StatusCode = 12); return 'DFR'; else; return '???'; endif; /end-free P E *--------------------------------------------------------------------------------------------- //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JWSFV) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Work Spool File Outfile. Vcp */ /* Validity Checker Program. */ /* Claudio Neroni 01-03-2009 Creato. */ PGM PARM(&SELECT &JOB &PERIOD &ASPDEV &OUTFILEQ) /* Riceve Scelta dei file. */ DCL VAR(&SELECT) TYPE(*CHAR) LEN(62) /* Riceve Lavoro. */ DCL VAR(&JOB) TYPE(*CHAR) LEN(26) /* Riceve Periodo. */ DCL VAR(&PERIOD) TYPE(*CHAR) LEN(36) /* Riceve Unità ASP. */ DCL VAR(&ASPDEV) TYPE(*CHAR) LEN(10) /* Riceve Nome qualificato del file di emissione. */ DCL VAR(&OUTFILEQ) TYPE(*CHAR) LEN(20) /* Utente da visualizzare. */ DCL VAR(&SELECTUSR) TYPE(*CHAR) LEN(10) /* Unità da visualizzare. */ DCL VAR(&SELECTDEV) TYPE(*CHAR) LEN(10) /* Tipo modulo da visualizzare. */ DCL VAR(&SELECTMOD) TYPE(*CHAR) LEN(10) /* Dati utente da visualizzare. */ DCL VAR(&SELECTDTA) TYPE(*CHAR) LEN(10) /* ASP da visualizzare. */ DCL VAR(&SELECTASP) TYPE(*DEC) LEN(5 0) /* File in spool. */ DCL VAR(&SELECTFIL) TYPE(*CHAR) LEN(10) /* Periodo. Ora inizio. */ DCL VAR(&PERIODBT) TYPE(*CHAR) LEN(6) /* Periodo. Data inizio. */ DCL VAR(&PERIODBD) TYPE(*CHAR) LEN(7) /* Periodo. Ora fine. */ DCL VAR(&PERIODET) TYPE(*CHAR) LEN(6) /* Periodo. Data fine. */ DCL VAR(&PERIODED) TYPE(*CHAR) LEN(7) /* File di emissione. */ DCL VAR(&OUTFILE) TYPE(*CHAR) LEN(10) /* Libreria del File di emissione. */ DCL VAR(&OUTLIB) TYPE(*CHAR) LEN(10) /* Prenotazione del CPF0002. */ DCL VAR(&CPF0002) TYPE(*LGL) /* Intercetta gli errori. */ MONMSG MSGID(CPF0000 MCH0000 CEE0000) EXEC(GOTO + CMDLBL(ERRORE)) /* Estrae parametri. */ CHGVAR VAR(&OUTFILE) VALUE(%SST(&OUTFILEQ 1 10)) CHGVAR VAR(&OUTLIB) VALUE(%SST(&OUTFILEQ 11 10)) /* Travasa le variabili ricevute da parametro select. */ CHGVAR VAR(&SELECTUSR) VALUE(%SST(&SELECT 03 10)) CHGVAR VAR(&SELECTDEV) VALUE(%SST(&SELECT 13 10)) CHGVAR VAR(&SELECTMOD) VALUE(%SST(&SELECT 23 10)) CHGVAR VAR(&SELECTDTA) VALUE(%SST(&SELECT 33 10)) CHGVAR VAR(&SELECTASP) VALUE(%BIN(&SELECT 43 2)) CHGVAR VAR(&SELECTFIL) VALUE(%SST(&SELECT 45 10)) /* Travasa le variabili ricevute da parametro period. */ /* OCCHIO: SONO A ROVESCIO RISPETTO ALL'ORDINE DI DEFINIZIONE NEL CMD */ CHGVAR VAR(&PERIODET) VALUE(%SST(&PERIOD 09 6)) CHGVAR VAR(&PERIODED) VALUE(%SST(&PERIOD 15 7)) CHGVAR VAR(&PERIODBT) VALUE(%SST(&PERIOD 24 6)) CHGVAR VAR(&PERIODBD) VALUE(%SST(&PERIOD 30 7)) /* Se è specificato il parametro job. */ IF COND(&JOB *NE ' ') THEN(DO) /* Se il parametro select è diverso dal default. */ IF COND(&SELECTUSR *NE *CURRENT *OR &SELECTDEV + *NE *ALL *OR &SELECTMOD *NE *ALL *OR + &SELECTDTA *NE *ALL *OR &SELECTASP *NE 0 + *OR &SELECTFIL *NE *ALL) THEN(DO) /* Diagnostica. */ SNDPGMMSG MSGID(JWS2001) MSGF(JWSF) MSGDTA('0000') + MSGTYPE(*DIAG) /* Prenota il CPF0002. */ CHGVAR VAR(&CPF0002) VALUE('1') /* Se il parametro select è diverso dal default. */ ENDDO /* Se è specificato il parametro job. */ ENDDO /* Se è specificato il parametro select spool file name. */ IF COND(&SELECTFIL *NE *ALL) THEN(DO) /* Diagnostica. */ SNDPGMMSG MSGID(JWS2002) MSGF(JWSF) MSGDTA('0000') + MSGTYPE(*DIAG) /* Prenota il CPF0002. */ CHGVAR VAR(&CPF0002) VALUE('1') /* Se è specificato il parametro select spool file name. */ ENDDO /* Se è specificato il parametro Unità ASP. */ IF COND(&ASPDEV *NE '*') THEN(DO) /* Diagnostica. */ SNDPGMMSG MSGID(JWS2003) MSGF(JWSF) MSGDTA('0000') + MSGTYPE(*DIAG) /* Prenota il CPF0002. */ CHGVAR VAR(&CPF0002) VALUE('1') /* Se è specificato il parametro select spool file name. */ ENDDO /* Se richiesto, rilascia il CPF0002. */ IF COND(&CPF0002) THEN(DO) SNDPGMMSG MSGID(CPF0002) MSGF(QCPFMSG) MSGTYPE(*ESCAPE) ENDDO /* Label di errore. */ ERRORE: ENDPGM //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JWSF1) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Work Spool File Outfile. OutFile * Claudio Neroni 26-02-2009 Creato. A R WSF A TEXT('Work Spool File Outfile') A WSFSEQ 9 0 A COLHDG('List' + A 'sequence') A EDTCDE(L) A WSFNAM 10 A COLHDG('Job' + A 'name') A WSFUSR 10 A COLHDG('User' + A 'name') A WSFNUM 6 A COLHDG('Job' + A 'number') A WSFSNA 10 A COLHDG('Spooled file' + A 'name') A WSFSNU 10 0 A COLHDG('Spooled file' + A 'number') A EDTCDE(L) A WSFSST 10 0 A COLHDG('Spooled file' + A 'status') A EDTCDE(L) A WSFSSD 4 A COLHDG('Status' + A 'description') A WSFOPD 7 A COLHDG('Date file' + A 'was opened' + A '(created)') A WSFOPT 6 A COLHDG('Time file' + A 'was opened' + A '(created)') A WSFSCH 1 A COLHDG('Spooled file' + A 'schedule') A WSFSYS 10 A COLHDG('Spooled file' + A 'system name') A WSFUDA 10 A COLHDG('User-specified' + A 'data') A WSFFOR 10 A COLHDG('Form' + A 'type') A WSFOUQ 10 A COLHDG('Output queue' + A 'name') A WSFOUL 10 A COLHDG('Output queue' + A 'library name') A WSFPOO 10 0 A COLHDG('Auxiliary' + A 'storage pool') A EDTCDE(L) A WSFSIZ 10 0 A COLHDG('Size of' + A 'spooled file') A EDTCDE(L) A WSFMUL 10 0 A COLHDG('Spooled file' + A 'size multiplier') A EDTCDE(L) A WSFPAG 10 0 A COLHDG('Total' + A 'pages') A EDTCDE(L) A WSFCOP 10 0 A COLHDG('Copies left' + A 'to produce') A EDTCDE(L) A WSFPTY 1 A COLHDG('Priority') //ENDSRC //ENDBCHJOB