//BCHJOB JOB(JSPOL) 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-04-29 17:08 */ /* To File : "JSPOL" */ /* To Library : "NERONI2" */ /* To Text : "Work 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 "JSPOL.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:\JSPOL.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JSPOL.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(JSPOL) 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/JSPOL" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JSPOL) MBR(JSPOL.) 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/JSPOL) CRTSRCPF FILE(NERONI2/JSPOL) RCDLEN(112) + TEXT('Work Spool. Src') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSPOL) TOFILE(NERONI2/JSPOL) + TOMBR(JSPOL) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSPOL) MBR(JSPOL) + SRCTYPE(CMD) + TEXT('Work Spool. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSPOL.) TOFILE(NERONI2/JSPOL) + TOMBR(JSPOL.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSPOL) MBR(JSPOL.) + SRCTYPE(CL) + TEXT('Work Spool. CrtJs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSPOLA) TOFILE(NERONI2/JSPOL) + TOMBR(JSPOLA) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSPOL) MBR(JSPOLA) + SRCTYPE(CLLE) + TEXT('Work Spool. Cpp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSPOLB) TOFILE(NERONI2/JSPOL) + TOMBR(JSPOLB) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSPOL) MBR(JSPOLB) + SRCTYPE(RPGLE) + TEXT('Work Spool. Int') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSPOLBW) TOFILE(NERONI2/JSPOL) + TOMBR(JSPOLBW) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSPOL) MBR(JSPOLBW) + SRCTYPE(DSPF) + TEXT('Work Spool. IntDsp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSPOLC) TOFILE(NERONI2/JSPOL) + TOMBR(JSPOLC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSPOL) MBR(JSPOLC) + SRCTYPE(RPGLE) + TEXT('Work Spool. PagRig') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JSPOLP) TOFILE(NERONI2/JSPOL) + TOMBR(JSPOLP) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JSPOL) MBR(JSPOLP) + SRCTYPE(PNLGRP) + TEXT('Work Spool. Help') /*----------------------------------------------------------------------------*/ //DATA FILE(JSPOL) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Work Spool. Cmd */ /* Claudio Neroni 04/02/1986 Creato. */ /* */ CMD PROMPT('Work Spool') PARM KWD(SELECT) TYPE(SELECT) PROMPT('Scelta file + per:') SELECT: ELEM TYPE(*GENERIC) 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((*ALL -1) (*ASPDEV -2)) PROMPT('ASP') ELEM TYPE(*GENERIC) DFT(*ALL) SPCVAL((*ALL)) + PROMPT('File in spool') PARM KWD(JOB) TYPE(JOB) DFT(*ALL) SNGVAL((*ALL)) + PROMPT('Nome lavoro') JOB: QUAL TYPE(*GENERIC) QUAL TYPE(*GENERIC) DFT(*ALL) SPCVAL((*ALL)) + PROMPT('Utente') QUAL TYPE(*CHAR) LEN(6) DFT(*ALL) RANGE('000001' + '999999') SPCVAL((*ALL)) 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 + 240000)) PROMPT('Ora di inizio') ELEM TYPE(*DATE) DFT(*BEGIN) SPCVAL((*BEGIN + 000000)) PROMPT('Data di inizio') END: ELEM TYPE(*TIME) DFT(*AVAIL) SPCVAL((*AVAIL + 240000)) PROMPT('Ora di fine') ELEM TYPE(*DATE) DFT(*END) SPCVAL((*END 000000)) + PROMPT('Data di fine') PARM KWD(ASPDEV) TYPE(*NAME) DFT(*) SPCVAL((*) + (*SYSBAS) (*CURASPGRP)) PROMPT('Unità ASP') PARM KWD(RMTSYS) TYPE(*CHAR) LEN(255) + SPCVAL((*INTNETADR)) PROMPT('Sistema remoto') PARM KWD(PRTQ) TYPE(*CHAR) LEN(255) PROMPT('Coda + di stampa') PARM KWD(DESTTYP) TYPE(*CHAR) LEN(6) RSTD(*YES) + DFT(*AS400) VALUES(*AS400 *PSF2 *OTHER) + PROMPT('Tipo destinazione') PARM KWD(TRANSFORM) TYPE(*CHAR) LEN(4) RSTD(*YES) + DFT(*NO) VALUES(*NO *YES) + PROMPT('Trasformazione SCS in ASCII') PARM KWD(INTNETADR) TYPE(*CHAR) LEN(15) + PROMPT('Indirizzo Internet') PARM KWD(RETAIN) TYPE(*CHAR) LEN(4) RSTD(*YES) + DFT(*YES) VALUES(*YES *NO) PROMPT('Conserva + i file di lavoro') PARM KWD(AUT) TYPE(*CHAR) LEN(4) RSTD(*YES) + DFT(*YES) VALUES(*YES *NO) + PROMPT('Autorizza tutte le opzioni') PARM KWD(TODIR) TYPE(*PNAME) LEN(256) DFT(*W) + SPCVAL((*H '/home/jspl') (*W + '/webufhtml/jspl')) PROMPT('To directory + for pdf') //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSPOL.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JSPOL.) JOBD(NERONI2/NERONI2) OUTQ(QPRINTS) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) CCSID(280) jmy /* Claudio Neroni 10/12/2001 Creato. */ /* JSPOL */ /* Work Spool. */ /* Prerequisiti: JRSNMSG. */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella gli oggetti preesistenti. */ DLTCMD CMD(NERONI2/JSPOL) DLTPNLGRP PNLGRP(NERONI2/JSPOLP) DLTPGM PGM(NERONI2/JSPOLA) DLTPGM PGM(NERONI2/JSPOLB) DLTPGM PGM(NERONI2/JSPOLC) DLTF FILE(NERONI2/JSPOLBW) DLTMSGF MSGF(NERONI2/JSPOL) /* Crea gli oggetti. */ CRTBNDCL PGM(NERONI2/JSPOLA) SRCFILE(JSPOL) DBGVIEW(*ALL) CRTDSPF FILE(NERONI2/JSPOLBW) SRCFILE(JSPOL) CRTBNDRPG PGM(NERONI2/JSPOLB) SRCFILE(JSPOL) DBGVIEW(*ALL) CRTBNDRPG PGM(NERONI2/JSPOLC) SRCFILE(JSPOL) DBGVIEW(*ALL) CRTPNLGRP PNLGRP(NERONI2/JSPOLP) SRCFILE(JSPOL) CRTCMD CMD(NERONI2/JSPOL) PGM(JSPOLA) SRCFILE(JSPOL) MSGF(JSPOL) + HLPPNLGRP(JSPOLP) HLPID(CMD) PRDLIB(NERONI2) CRTMSGF MSGF(NERONI2/JSPOL) TEXT('Work Spool. Msgf') /* Messaggi del Cpp. */ ADDMSGD MSGID(JSP0001) MSGF(NERONI2/JSPOL) MSG('inutilizzato ') + SECLVL('inutilizzato &1 &2 &3') FMT((*CHAR 10) (*CHAR + 10) (*CHAR 10)) /* Messaggi del Cmd. */ ADDMSGD MSGID(JSP1001) MSGF(NERONI2/JSPOL) MSG('inutilizzato') //ENDBCHJOB //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSPOLA) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Work Spool. Cpp */ /* Claudio Neroni 31/01/1986 Creato. */ /* */ PGM PARM(&SELECT &JOB &PERIOD &ASPDEV &RMTSYS + &PRTQ &DESTTYP &TRANSFORM &INTNETADR + &RETAIN &AUT &TODIR) /* 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 Sistema remoto. */ DCL VAR(&RMTSYS) TYPE(*CHAR) LEN(255) /* Riceve Coda di stampa. */ DCL VAR(&PRTQ) TYPE(*CHAR) LEN(255) /* Riceve Tipo destinazione. */ DCL VAR(&DESTTYP) TYPE(*CHAR) LEN(6) /* Riceve Trasformazione SCS in ASCII. */ DCL VAR(&TRANSFORM) TYPE(*CHAR) LEN(4) /* Riceve Indirizzo Internet. */ DCL VAR(&INTNETADR) TYPE(*CHAR) LEN(4) /* Riceve Conserva i file di lavoro. */ DCL VAR(&RETAIN) TYPE(*CHAR) LEN(4) /* Riceve Autorizza tutte le funzioni. */ DCL VAR(&AUT) TYPE(*CHAR) LEN(4) /* Riceve Indirizzario di destinazione pdf. */ DCL VAR(&TODIR) TYPE(*CHAR) LEN(256) /* 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(&SELECTASPD) TYPE(*DEC) LEN(5 0) DCL VAR(&SELECTASP) TYPE(*CHAR) LEN(10) /* File in spool. */ DCL VAR(&SELECTFIL) TYPE(*CHAR) LEN(10) /* Lavoro. Nome. */ DCL VAR(&JOBNAM) TYPE(*CHAR) LEN(10) /* Lavoro. Utente. */ DCL VAR(&JOBUSR) TYPE(*CHAR) LEN(10) /* Lavoro. Numero. */ DCL VAR(&JOBNBR) TYPE(*CHAR) LEN(6) /* 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(8) DCL VAR(&PERIODBD1) TYPE(*CHAR) LEN(1) DCL VAR(&PERIODBD6) TYPE(*CHAR) LEN(6) /* Periodo. Ora fine. */ DCL VAR(&PERIODET) TYPE(*CHAR) LEN(6) /* Periodo. Data fine. */ DCL VAR(&PERIODED) TYPE(*CHAR) LEN(8) DCL VAR(&PERIODED1) TYPE(*CHAR) LEN(1) DCL VAR(&PERIODED6) TYPE(*CHAR) LEN(6) /* Prenotazione del CPF0001. */ DCL VAR(&CPF0001) TYPE(*LGL) /* Comando battuto nei programmi chiamati. */ DCL VAR(&CMD) TYPE(*CHAR) LEN(2) /* Intercetta gli errori. */ MONMSG MSGID(CPF0000 MCH0000) EXEC(GOTO + CMDLBL(ERRORE)) /* Recupera gli attributi del lavoro. */ RTVJOBA USER(&USER) /* Travasa le variabili ricevute da parametro scelta. */ 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(&SELECTASPD) VALUE(%BIN(&SELECT 43 2)) CHGVAR VAR(&SELECTASP) VALUE(&SELECTASPD) IF COND(&SELECTASPD *EQ -1) THEN(CHGVAR + VAR(&SELECTASP) VALUE('*ALL')) IF COND(&SELECTASPD *EQ -2) THEN(CHGVAR + VAR(&SELECTASP) VALUE('*ASPDEV')) CHGVAR VAR(&SELECTFIL) VALUE(%SST(&SELECT 45 10)) /* Travasa le variabili ricevute da parametro lavoro. */ CHGVAR VAR(&JOBNAM) VALUE(%SST(&JOB 01 10)) CHGVAR VAR(&JOBUSR) VALUE(%SST(&JOB 11 10)) IF COND(&JOBUSR *EQ ' ') THEN(CHGVAR + VAR(&JOBUSR) VALUE('*N')) CHGVAR VAR(&JOBNBR) VALUE(%SST(&JOB 21 06)) IF COND(&JOBNBR *EQ ' ') THEN(CHGVAR + VAR(&JOBNBR) VALUE('*N')) /* Travasa le variabili ricevute da parametro periodo. */ /* 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)) /* Scompone le date in secolo e anno-mese-giorno. */ CHGVAR VAR(&PERIODBD1) VALUE(%SST(&PERIODBD 1 1)) CHGVAR VAR(&PERIODBD6) VALUE(%SST(&PERIODBD 2 6)) CHGVAR VAR(&PERIODED1) VALUE(%SST(&PERIODED 1 1)) CHGVAR VAR(&PERIODED6) VALUE(%SST(&PERIODED 2 6)) /* Manipola ora inizio. */ IF COND(&PERIODBT *EQ '240000') THEN(CHGVAR + VAR(&PERIODBT) VALUE(*AVAIL)) /* Manipola ora fine. */ IF COND(&PERIODET *EQ '240000') THEN(CHGVAR + VAR(&PERIODET) VALUE(*AVAIL)) /* Manipola data inizio. */ IF COND(&PERIODBD *EQ '0000000') THEN(CHGVAR + VAR(&PERIODBD) VALUE(*BEGIN)) ELSE CMD(CVTDAT DATE(&PERIODBD) TOVAR(&PERIODBD) + FROMFMT(*CYMD) TOSEP(*NONE)) /* Manipola data fine. */ IF COND(&PERIODED *EQ '0000000') THEN(CHGVAR + VAR(&PERIODED) VALUE(*END)) ELSE CMD(CVTDAT DATE(&PERIODED) TOVAR(&PERIODED) + FROMFMT(*CYMD) TOSEP(*NONE)) /* Controlla l'esistenza del file di lavoro. */ CHKOBJ OBJ(QTEMP/JSPOL9) OBJTYPE(*FILE) MBR(*FIRST) /* Se manca. */ MONMSG MSGID(CPF0000) EXEC(DO) /* Crea. */ /*********** CRTPF FILE(QTEMP/JSPOL9) RCDLEN(146) TEXT('JSPOL. + File di lavoro.') RECOVER(*NO) SIZE(*NOMAX)*/ /* Crea. V5R2 */ CRTPF FILE(QTEMP/JSPOL9) RCDLEN(173) TEXT('JSPOL. + File di lavoro.') RECOVER(*NO) SIZE(*NOMAX) /* End. */ ENDDO /* Ridirige l'emissione della stampa coda di emissione. */ OVRPRTF FILE(QPRTSPLF) FORMTYPE(JSPOL) + SCHEDULE(*JOBEND) HOLD(*YES) SPLFNAME(JSPOL) /* Rinfrescamento. */ REFRESH: /* Stampa il contenuto della coda di emissione. */ /*V5R3M0 + WRKSPLF SELECT(&SELECTUSR &SELECTDEV &SELECTMOD + &SELECTDTA &SELECTASP) ASPDEV(&ASPDEV) + OUTPUT(*PRINT) /**/ /*V5R4M0*/ WRKSPLF SELECT(&SELECTUSR &SELECTDEV &SELECTMOD + &SELECTDTA &SELECTASP &SELECTFIL) + JOB(&JOBNBR/&JOBUSR/&JOBNAM) + PERIOD((&PERIODBT &PERIODBD) (&PERIODET + &PERIODED)) ASPDEV(&ASPDEV) OUTPUT(*PRINT) /**/ /* Copia la stampa nel file di lavoro. */ CPYSPLF FILE(JSPOL) TOFILE(QTEMP/JSPOL9) + SPLNBR(*LAST) CTLCHAR(*FCFC) /* Cancella la stampa. */ DLTSPLF FILE(JSPOL) SPLNBR(*LAST) /* Ridirige la visualizzazione sul file di lavoro. */ OVRDBF FILE(JSPOL9) TOFILE(QTEMP/JSPOL9) /* Chiama la visualizzazione del file di lavoro. */ CALL PGM(JSPOLB) PARM(&USER &CMD &RMTSYS &PRTQ + &DESTTYP &TRANSFORM &INTNETADR &AUT &TODIR) /* Se richiesto, salta a Rinfrescamento. */ IF COND(&CMD *EQ '05') THEN(GOTO CMDLBL(REFRESH)) /* Salta all'esecuzione delle attività finali. */ GOTO CMDLBL(RCLRSC) /* Label di esecuzione delle attività finali. */ RCLRSC: /* Se non è richiesta la conservazione del file di lavoro. */ IF COND(&RETAIN *NE *YES) THEN(DO) /* Cancella il file di lavoro. */ DLTF FILE(QTEMP/JSPOL9) MONMSG MSGID(CPF0000 MCH0000) /* End. */ ENDDO /* 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 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(JSPOLB) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /TITLE Work Spool. Int * Claudio Neroni 31/01/1986 Creato. * V5R2 * Nel release V5R2 è stato allargato il campo Numero spoolfile V5R2 * da 4 a 6 cifre. *--------------------------------------------------------------------- * Video. FJspolbw cf e workstn sfile(w2:n2) * Work Spool File su disco. 1 byte più lungo della stampa. F***Jspol9 if f 145 disk usropn V5R2 FJspol9 if f 173 disk usropn * Copia. FJspolc o f 198 disk usropn *--------------------------------------------------------------------- * Identificatori dei record da scartare. D via s 10 dim(13) ctdata perrcd(1) Record da scartare * Costante Delete file copia. D dltfc C CONST('DLTF - D ?*FILE(QTEMP/JSPOLC)') * Costante Create file copia. D crtpfc C CONST('CRTPF - D ?*FILE(QTEMP/JSPOLC) - D TEXT(''JSPOL. Riceve - D Copy Spool File.'') - D SIZE(*NOMAX)') *--------------------------------------------------------------------- * Costante Delete file FCFC. D dltff C CONST('DLTF - D ?*FILE(QTEMP/JSPOLF)') * Costante Create file FCFC. D crtpff C CONST('CRTPF - D ?*FILE(QTEMP/JSPOLF) - D TEXT(''JSPOL. Riceve - D Copy Spool File *FCFC.'') - D SIZE(*NOMAX)') *--------------------------------------------------------------------- * Costante Delete file PRTCTL. D dltfp C CONST('DLTF - D ?*FILE(QTEMP/JSPOLP)') * Costante Create file PRTCTL. D crtpfp C CONST('CRTPF - D ?*FILE(QTEMP/JSPOLP) - D TEXT(''JSPOL. Riceve - D Copy Spool File *PRTCTL.'') - D SIZE(*NOMAX)') *--------------------------------------------------------------------- * Costante Delete file PagRig. D dltfr C CONST('DLTF - D ?*FILE(QTEMP/JSPOLR)') * Costante Create file PagRig. D crtpfr C CONST('CRTPF - D ?*FILE(QTEMP/JSPOLR) - D TEXT(''JSPOL. Riceve - D Copy Spool File PagRig.'') - D SIZE(*NOMAX)') *--------------------------------------------------------------------- * Record da disco emesso da Work Spool File *PRINT. IJspol9 no * Carattere di controllo *FCFC. I 1 1 $ide * Identificatore di scarto. I 2 11 $via * Nome Spool file. I 3 12 w2fil * Utente Spool file. I 14 23 w2usr * User data. I 36 45 w2usd * Status. I 47 50 w2sts * Pagine totali. I 51 56 w2rnb * Pagina attuale. I 58 63 w2pga * Numero copie. I 65 67 w2cop * Form type. I 69 78 w2fty * Priorità. I 81 81 w2pty * Data Spool file. I 84 91 w2dat * Ora Spool file. I 93 100 w2hou * Numero Spool file. I******************************* 102 105 w2nbr V5R2 I 102 107 w2nbr * Nome job. I******************************* 107 116 w2job V5R2 I 109 118 w2job * Numero job. I******************************* 118 123 w2jnb V5R2 I 120 125 w2jnb * Coda di emissione. I******************************* 125 134 w2out V5R2 I 127 136 w2out * Libreria della Coda di emissione. I******************************* 136 145 w2lib V5R2 I 138 147 w2lib *--------------------------------------------------------------------- * Scambia parametri. C *entry plist * Riceve l'utente corrente. C parm ppusr 10 * Restituisce il comando battuto a video. C parm ppcmd 2 * Riceve il Sistema remoto. C parm pprmt 255 * Riceve la Coda di stampa. C parm ppprt 255 * Riceve il Tipo destinazione. C parm ppdst 6 * Riceve la Trasformazione SCS in ASCII. C parm pptra 4 * Riceve l'Indirizzo Internet. C parm ppint 15 * Riceve l'autorizzazione a manipolare gli spool di altri utenti. C parm ppaut 4 * Riceve Indirizzario di destinazione pdf. C parm pptodir 256 * Pulisce i parametri di ritorno. C clear ppcmd * Trascrive l'utente corrente a video. C movel(p) ppusr w2usrc * Apre il Work Spool File su disco. C open Jspol9 * Legge il primo record da disco. C 1 chain Jspol9 50 * Annota il primo record come primo identificatore da scartare. * Questo permette di scartare i record di inizio delle pagine * successive, anche se non conosciuti al momento della compilazione * del presente pgm. C movel(p) $via via(1) * Annota nessun record presente per ora nel sfl. C setoff 51 * Pulisce il sfl ed emette l'intestazione per ingannare l'attesa. C seton 3639 C write w2c C setoff 3639 C setoff 32 * Azzera il relative record number del sfl. C clear n2 5 0 * Prenota l'uscita della prima pagina del sfl. C z-add 1 w2srn * Si posiziona lungo il file prima del secondo record. C 2 setll Jspol9 * Riempie il sfl. C do *hival * Legge un record da disco. C read Jspol9 50 * Se non ce ne sono altri, abbandona. C 50 leave * Cerca l'identificatore del record tra quelli da scartare. C $via lookup via 50 * Se il record è da scartare, ricicla. C 50 iter * Se il record significa la stampa di servizio * della presente utility, ricicla. C if w2fil='JSPOL' and w2fty='JSPOL' C iter C endif * Pulisce il campo scelta. C clear w2sce * Annota in un indicatore la diversità tra l'utente del record * e quello corrente. C w2usr comp ppusr 4545 * Memorizza la diversità utente sulla riga di sfl. C movel(p) *in45 w2i45 * Incrementa il relative record number del sfl. C add 1 n2 * Raddoppia gli apici di Form type. C movel(p) w2fty a2i C exsr a2 C movel(p) a2o w2fty20 20 * Raddoppia gli apici di User data. C movel(p) w2usd a2i C exsr a2 C movel(p) a2o w2usd20 20 * Scrive il record di sfl. C write w2 * Annota il caricamento di almeno un record nel sfl. C seton 51 * Riempie il sfl. C enddo * Cicla intorno al video. C do *hival C** SETON 32 * Se il sfl è vuoto, emette il video informativo. C n51 write w2b * Emette il piede. C write w2p * Se il sfl è pieno, prenota l'emissione del sfl. C 51 seton 38 * Prenota l'emissione del controllo del sfl. C seton 39 * Emette il controllo e, se pieno, il sfl. C exfmt w2c * Sprenota emissioni. C setoff 3839 * Spegne errori. C setoff 7071 * Se richiesta fine, prenota chiusura e abbandona. C if *inkc C seton lr C GOTO $END C endif * Se richiesto rinfrescamento. C if *inke * Annota. C movel(p) '05' ppcmd * Impedisce overlay per pulire il video. C seton 32 * Abbandona. C GOTO $END * Se richiesto rinfrescamento. C endif * Se il sfl è vuoto, prenota chiusura e abbandona. C if not *in51 C seton lr C GOTO $END C endif * Annota nessun record presente per ora nel sfl. C setoff 51 * Esamina le scelte. C do *hival * Legge un record di sfl. C readc w2 50 * Se non ce ne sono altri, abbandona. C 50 leave * Annota la presenza di almeno un record nel sfl. C seton 51 * Rivitalizza gli indicatori della riga di sfl. C movel(p) w2i45 *in45 * Assume record di sfl da non segnalare. C setoff 49 * Se richiesto utente titolare e non corre il titolare * e se corrono opzioni permesse solo al titolare, * prenota errore sul record di sfl. C if ppaut<>'*YES' and *in45 C and (w2sce='4' or w2sce='5') C seton 49 C endif * Se corre il primo errore sul record di sfl. C if *in49 and not *in70 * Annota il superamento del primo errore. C seton 70 * Prenota l'uscita della pagina corrente del sfl. C z-add n2 w2srn * Prenota il messaggio di errore sulla riga di sfl. C seton 71 * Se corre il primo errore sul record di sfl. C endif * Rivitalizza lo stato di modifica della riga di sfl. C seton 42 * Ricalca la riga di sfl. C update w2 * Sprenota lo stato di modifica e l'errore della riga di sfl. C setoff 4249 * Esamina le scelte. C enddo * Se presente un errore su sfl, ricicla. C 70 iter * Abbandona. C leave * Cicla intorno al video. C enddo * Se esistono record modificati nel sfl. C if *in51 * Annota nessuna scelta eseguita per ora nel sfl. C setoff 51 * Esegue le scelte. C do *hival * Legge un record di sfl. C readc w2 50 * Se non ce ne sono altri, abbandona. C 50 leave * Se la scelta è piena. C if w2sce<>*blank * Annota scelta eseguita nel sfl. C seton 51 * Esegue la scelta. C exsr $exe * Se la scelta è piena. C endif * Esegue le scelte. C enddo * Se esistono record modificati nel sfl. C endif * Se sono state eseguite scelte nel sfl. C if *in51 * Emette i messaggi ricevuti durante l'esecuzione delle scelte. C seton 02 C movel(p) 'JSPOLB' pgm C write msgc C setoff 02 * Annota la richiesta di rinfrescamento. C movel(p) '05' ppcmd * Abbandona. C GOTO $END * Se sono state eseguite scelte nel sfl. C endif * Prenota chiusura. C seton lr * Fine. C $END TAG * Chiude il Work Spool File su disco. C close Jspol9 * Ritorna. C return *--------------------------------------------------------------------- * Esegue le scelte. C $exe begsr * Se corre una scelta di scarico su database. C if w2sce='C' C or w2sce='F' C or w2sce='P' C or w2sce='R' * Recupera la larghezza dello spool file. C move(p) w2nbr ppnbr C call 'JAIRSFA' C parm w2job ppjobnam 10 I JobName C parm w2usr ppjobusr 10 I JobUser C parm w2jnb ppjobnbr 6 I JobNumber C parm w2fil ppspl 10 I SpoolFileName C parm ppnbr 6 0 I SpoolFileNumber C parm pppagwid 9 0 O SpoolPageWidth * Se corre una scelta di scarico su database. C endif * Alla prima scelta Copy del run. C if w2sce='C' and $c<>*on C movel(p) *on $c 1 * Cancella il file di scarico. C call 'QCMDEXC' 50 C parm dltfc qcmd 1000 C parm 1000 qlen 15 5 * Aggiunge la lunghezza record al comando C eval ccc=%trim(crtpfc) + C ' ??RCDLEN(' + C %trim(%editc(pppagwid:'Z')) + C ')' * Ricrea il file di scarico. C call 'QCMDEXC' 50 C parm ccc qcmd 1000 C parm 1000 qlen 15 5 * Alla prima scelta Copy del run. C endif * Alla prima scelta FCFC del run. C if w2sce='F' and $f<>*on C movel(p) *on $f 1 * Cancella il file di scarico. C call 'QCMDEXC' 50 C parm dltff qcmd 1000 C parm 1000 qlen 15 5 * Aggiunge la lunghezza record al comando C eval ccc=%trim(crtpff) + C ' ??RCDLEN(' + C %trim(%editc(pppagwid+1:'Z')) + C ')' * Ricrea il file di scarico. C call 'QCMDEXC' 50 C parm ccc qcmd 1000 C parm 1000 qlen 15 5 * Alla prima scelta FCFC del run. C endif * Alla prima scelta PRTCTL del run. C if w2sce='P' and $p<>*on C movel(p) *on $p 1 * Cancella il file di scarico. C call 'QCMDEXC' 50 C parm dltfp qcmd 1000 C parm 1000 qlen 15 5 * Aggiunge la lunghezza record al comando C eval ccc=%trim(crtpfp) + C ' ??RCDLEN(' + C %trim(%editc(pppagwid+4:'Z')) + C ')' * Ricrea il file di scarico. C call 'QCMDEXC' 50 C parm ccc qcmd 1000 C parm 1000 qlen 15 5 * Alla prima scelta PRTCTL del run. C endif * Alla prima scelta PagRig del run. C if w2sce='R' and $r<>*on C movel(p) *on $r 1 * Cancella il file di scarico. C call 'QCMDEXC' 50 C parm dltfr qcmd 1000 C parm 1000 qlen 15 5 * Aggiunge la lunghezza record al comando C eval ccc=%trim(crtpfr) + C ' ??RCDLEN(' + C %trim(%editc(pppagwid+13:'Z')) + C ')' * Ricrea il file di scarico. C call 'QCMDEXC' 50 C parm ccc qcmd 1000 C parm 1000 qlen 15 5 * Alla prima scelta PagRig del run. C endif * Sceglie il nome del comando. C select C when w2sce='C' C or w2sce='F' C or w2sce='P' C or w2sce='R' C eval ccc='cpysplf' C when w2sce='S' C eval ccc='sndtcpsplf' C when w2sce='T' C eval ccc='jsplcvt' C when w2sce='2' C eval ccc='chgsplfa' C when w2sce='3' C eval ccc='hldsplf' C when w2sce='4' C eval ccc='dltsplf' C when w2sce='5' C eval ccc='dspsplf' C when w2sce='6' C eval ccc='rlssplf' C when w2sce='8' C eval ccc='wrksplfa' C endsl * Compone la parte centrale del comando in funzione della scelta. C select * Se la scelta è "Change Spool File Attribute". C when w2sce='2' C eval ccc=%trim(ccc) + C ' ?*file(' + C w2fil + C ') ?*job(' + C w2jnb + C '/' + C %trim(w2usr) + C '/' + C %trim(w2job) + C ') ?*splnbr(' + C %trim(w2nbr) + C ')' * Se la scelta è "Convert Spooled File to STMF" C when w2sce='T' C eval ccc=%trim(ccc) + C ' ?*fromfile(' + C w2fil + C ') ??tostmf(' + C %trim(w2usr) + C '_' + C %trim(w2job) + C '_' + C %trim(w2jnb) + C '_' + C %trim(w2nbr) + C '_' + C %trim(w2fil) + C '.pdf' + C ') ??todir(' + C '''' + C %trim(pptodir) + C '''' + C ') ?*job(' + C w2jnb + C '/' + C %trim(w2usr) + C '/' + C %trim(w2job) + C ') ?*splnbr(' + C %trim(w2nbr) + C ') ??tofmt(' + C '*PDF' + C ') ??stmfopt(' + C '*REPLACE' + C ')' * Se la scelta è altro. C other C eval ccc=%trim(ccc) + C ' file(' + C w2fil + C ') job(' + C w2jnb + C '/' + C %trim(w2usr) + C '/' + C %trim(w2job) + C ') splnbr(' + C %trim(w2nbr) + C ')' * Compone la parte centrale del comando in funzione della scelta. C endsl * Compone la parte finale del comando in funzione della scelta. C select * Se la scelta è "Copy Spool File". C when w2sce='C' C eval ccc=%trim(ccc) + C ' tofile(qtemp/Jspolc)' + C ' mbropt(*add)' * Se la scelta è "Copy Spool File FCFC". C when w2sce='F' C eval ccc=%trim(ccc) + C ' tofile(qtemp/Jspolf)' + C ' mbropt(*add)' + C ' CTLCHAR(*FCFC)' * Se la scelta è "Copy Spool File PRTCTL". C when w2sce='P' C eval ccc=%trim(ccc) + C ' tofile(qtemp/Jspolp)' + C ' mbropt(*add)' + C ' CTLCHAR(*PRTCTL)' * Se la scelta è "Copy Spool File PagRig". C when w2sce='R' C eval ccc=%trim(ccc) + C ' tofile(qtemp/Jspolr)' + C ' mbropt(*add)' + C ' CTLCHAR(*PRTCTL)' * Se la scelta è "Send TCP Spool File". C when w2sce='S' C eval ccc=%trim(ccc) + C ' rmtsys(''' + C %trim(pprmt) + C ''')' + C ' prtq(''' + C %trim(ppprt) + C ''')' + C ' desttyp(''' + C %trim(ppdst) + C ''')' + C ' transform(''' + C %trim(pptra) + C ''')' C if ppint <> *blank C eval ccc=%trim(ccc) + C ' intnetadr(''' + C %trim(ppint) + C ''')' C endif * Se la scelta è "Change Spool File Attribute". C when w2sce='2' C eval ccc=%trim(ccc) + C ' ??outq(' + C %trim(w2lib) + C '/' + C %trim(w2out) + C ') ??formtype(''' + C %trim(w2fty20) + C ''') ??copies(' + C %trim(w2cop) + C ') ??save()' + C ' ??usrdta(''' + C %trim(w2usd20) + C ''')' + C ' ??pagerange()' + C ' ??schedule()' * Compone la parte finale del comando in funzione della scelta. C endsl * Esegue il comando composto. C call 'QCMDEXC' 50 C parm ccc 1000 C parm 1000 len 15 5 * Intervalla i dati dei copy. C if w2sce='C' C open Jspolc C movel(p) *all'-=' riga 198 C except rig C close Jspolc C endif * Se la scelta è "Copy Spool File PagRig". C if w2sce='R' C call 'JSPOLC' C endif C endsr *--------------------------------------------------------------------- * Raddoppia gli apici. * Riceve in a2i un campo alfanumerico di 10 caratteri. * Restituisce in a2o un campo alfanumerico di 20 caratteri * contenente gli stessi dati ricevuti ma con gli apici raddoppiati. C a2 begsr C movel(p) a2i a2i 10 C movel(p) a21 a21 1 C clear a2o 20 C clear a2y 3 0 C do 10 a2x 3 0 C eval a21=%subst(a2i:a2x:1) C add 1 a2y C eval %subst(a2o:a2y:1)=a21 C if a21='''' C add 1 a2y C eval %subst(a2o:a2y:1)=a21 C endif C enddo C endsr *--------------------------------------------------------------------- * Intervalla i dati dei copy. OJspolc e rig O riga *--------------------------------------------------------------------- ** VIA ! ??????????! In questo elemento si copia l'inizio del primo record 5763SS1 ! 5769SS1 ! 5722SS1 ! relativo a V5R2M0 5761SS1 ! relativo a V6R1M0 5770SS1 ! relativo a V7R1M0 ! File ! Num. ! (Nessun! (Ness. ! relativo a V6R1M0 (Ness. ! relativo a V7R1M0 *! //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSPOLBW) FILETYPE(*SRC) ENDCHAR('//ENDSRC') A*%%TS SD 20080828 145427 ANPRO15 REL-V5R4M0 5722-WDS A*%%EC A DSPSIZ(24 80 *DS3) A CHGINPDFT A PRINT A R W2 SFL A*%%TS SD 20070417 114553 METHOD4 REL-V5R2M0 5722-WDS A TEXT('File di emissione.') A 42 SFLNXTCHG A W2I45 1A H TEXT('Di altro utente.') A W2OUT 10A H A W2LIB 10A H A W2USD 10A H A W2USD20 20A H A W2FTY20 20A H A W2PGA 6A H A W2DAT 8A H A W2HOU 8A H A W2SCE 1A B 3 2VALUES(' ' 'C' 'F' 'P' 'R' 'S' 'T' - A '2' '3' '4' '5' '6' '8') A TEXT('Scelta.') A DSPATR(UL) A 49 DSPATR(PC) A 49 DSPATR(RI) A W2FIL 10A O 3 4 A W2NBR 6A O 3 15 A W2JOB 10A O 3 22 A W2USR 10A O 3 33 A N45 DSPATR(HI) A W2JNB 6A O 3 44 A W2PTY 1A O 3 51 A W2RNB 6A O 3 53 A W2STS 4A O 3 60 A W2COP 3A O 3 65 A W2FTY 10A O 3 69 A R W2C SFLCTL(W2) A*%%TS SD 20070417 114553 METHOD4 REL-V5R2M0 5722-WDS A SFLSIZ(0034) A SFLPAG(0017) A CA03 A CA05 A TEXT('Controllo subfile file di emi- A ssione.') A BLINK A LOCK A N32 OVERLAY A 38 SFLDSP A 39 SFLDSPCTL A 36 SFLCLR A N40 SFLEND A 71 SFLMSG('Opzione permessa solo al ti- A tolare.') A W2SRN 4S 0H SFLRCDNBR A TEXT('Subfile record number.') A 1 2DATE A EDTCDE(Y) A 1 12TIME A 1 35'Work Spool' A DSPATR(HI) A COLOR(WHT) A 1 61'Utente:' A W2USRC 10A O 1 69DSPATR(HI) A 2 2'S File NumSpl Lavoro Ute- A nte NrLav Pr Pagine Sts Cpy Mo- A dulo ' A DSPATR(UL) A R W2B A*%%TS SD 20020124 143851 NERONI REL-V3R2M0 5763-PW1 A TEXT('Subfile vuoto.') A BLINK A LOCK A OVERLAY A 4 2'(Nessun file di emissione da visua- A lizzare)' A R W2P A*%%TS SD 20080828 145427 ANPRO15 REL-V5R4M0 5722-WDS A TEXT('Piede del subfile.') A BLINK A LOCK A OVERLAY A 21 2'2' A DSPATR(HI) A 21 4'Modifica' A 21 13'3' A DSPATR(HI) A 21 15'Congela' A 21 23'4' A DSPATR(HI) A 21 25'Cancella' A 21 34'5' A DSPATR(HI) A 21 36'Vede' A 21 41'6' A DSPATR(HI) A 21 43'Rilascia' A 21 52'8' A DSPATR(HI) A 21 54'Attributi' A 22 2'C' A DSPATR(HI) A 22 4'CpySplf' A 22 12'F' A DSPATR(HI) A 22 14'FCFC' A 22 19'P' A DSPATR(HI) A 22 21'PRTCTL' A 22 28'R' A DSPATR(HI) A 22 30'PagRig' A 22 37'S' A DSPATR(HI) A 22 39'SndTcpSplf' A 22 50'T' A DSPATR(HI) A 22 52'Pdf' A 22 58'F3' A DSPATR(HI) A 22 61'Finisce' A 22 69'F5' A DSPATR(HI) A 22 72'Rinfresca' A R MSG SFL A SFLMSGRCD(23) A MRK SFLMSGKEY A PGM SFLPGMQ A R MSGC SFLCTL(MSG) A LOCK A SFLSIZ(10) SFLPAG(2) A 02 SFLEND A 02 SFLDSP A 02 SFLDSPCTL A 02 SFLINZ A PGM SFLPGMQ //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JSPOLC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /TITLE Work Spool. PagRig * Claudio Neroni 28/08/2008 Creato. * * Per ottenere l'emissione PagRig, * ristruttura la riga di un emissione PRTCTL. * Inserisce un asterisco in testa e accoda * - salto originale; * - spazio originale; * - pagina 5,0 calcolata sulla base di salto e spazio; * - riga 3,0 calcolata sulla base di salto e spazio; * - dati della riga di spool. *--------------------------------------------------------------------- * Emissione per PagRig. FJspolr up a f 211 disk *--------------------------------------------------------------------- * Legge il record originale emesso da PRTCTL. Ijspolr no 01 1nc* I 1 3 sala I 4 4 spaa I 1 3 0saln I 4 4 0span I 5 202 dati Ijspolr no 02 1 c* *--------------------------------------------------------------------- * Elabora solo i record non ancora elaborati. C if *in01 * Se corre primo record. C if not *in51 * Annota passaggio. C seton 51 * Inizializza il numero di pagina. C z-add 1 pag 5 0 * Trascrive il numero di riga. C z-add saln rig 3 0 * Se non corre primo record. C else * Se corre un salto. C if sala<>*blank * Se il salto è inferiore alla riga corrente. * Incrementa la pagina. C if saln