//BCHJOB JOB(JARAPRT) JOBD(QBATCH) OUTQ(QPRINT) ENDSEV(60) + LOG(4 00 *SECLVL) MSGQ(*USRPRF) /* Open source scaricabile da www.neroni.it */ /* SE L'USO DELLA JOB DESCRIPTION "QBATCH" TI E' IMPEDITO, */ /* UTILIZZANE UNA DIVERSA. */ /* From System: "S65D69DA" */ /* From Library: "NERONI2" */ /* Unload Time: 2014-02-03 17:00 */ /* To File : "JARAPRT" */ /* To Library : "NERONI2" */ /* To Text : "Data area print. 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 "JARAPRT.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:\JARAPRT.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JARAPRT.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(JARAPRT) 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/JARAPRT" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JARAPRT) MBR(JARAPRT.) 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/JARAPRT) CRTSRCPF FILE(NERONI2/JARAPRT) RCDLEN(112) + TEXT('Data area print. Src') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JARAPRT) TOFILE(NERONI2/JARAPRT) + TOMBR(JARAPRT) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JARAPRT) MBR(JARAPRT) + SRCTYPE(CMD) + TEXT('Data area print. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JARAPRT.) TOFILE(NERONI2/JARAPRT) + TOMBR(JARAPRT.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JARAPRT) MBR(JARAPRT.) + SRCTYPE(CL) + TEXT('Data area print. CrtJs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JARAPRTA) TOFILE(NERONI2/JARAPRT) + TOMBR(JARAPRTA) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JARAPRT) MBR(JARAPRTA) + SRCTYPE(CMD) + TEXT('Data area print All. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JARAPRTAC) TOFILE(NERONI2/JARAPRT) + TOMBR(JARAPRTAC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JARAPRT) MBR(JARAPRTAC) + SRCTYPE(CLLE) + TEXT('Data area print. All') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JARAPRTC) TOFILE(NERONI2/JARAPRT) + TOMBR(JARAPRTC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JARAPRT) MBR(JARAPRTC) + SRCTYPE(CLLE) + TEXT('Data area print. Cpp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JARAPRTD) TOFILE(NERONI2/JARAPRT) + TOMBR(JARAPRTD) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JARAPRT) MBR(JARAPRTD) + SRCTYPE(RPGLE) + TEXT('Data area print. Write') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JARAPRTF) TOFILE(NERONI2/JARAPRT) + TOMBR(JARAPRTF) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JARAPRT) MBR(JARAPRTF) + SRCTYPE(PF) + TEXT('Data area print. Pf') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JARAPRTP) TOFILE(NERONI2/JARAPRT) + TOMBR(JARAPRTP) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JARAPRT) MBR(JARAPRTP) + SRCTYPE(RPGLE) + TEXT('Data area print. Print') /*---------------------------------------------------------------------*/ //DATA FILE(JARAPRT) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Data area print. Cmd */ /* Claudio Neroni 02-01-2009 Creato. */ CMD PROMPT('Data area print') PARM KWD(DTAARA) TYPE(DTAARA) SNGVAL((*BEGIN) + (*END)) MIN(1) PROMPT('Data area') DTAARA: QUAL TYPE(*NAME) QUAL TYPE(*NAME) DFT(*LIBL) SPCVAL((*LIBL)) + PROMPT('library') //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JARAPRT.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JARAPRT.) JOBD(QBATCH) OUTQ(QPRINTS) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) /* Claudio Neroni 02-01-2009 Creato. */ /* JARAPRT */ /* Data area print. */ /* Prerequisiti: JAI, JCV, JCPYCLR */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella gli oggetti preesistenti. */ DLTCMD CMD(NERONI2/JARAPRT) DLTCMD CMD(NERONI2/JARAPRTA) DLTPGM PGM(NERONI2/JARAPRTC) DLTPGM PGM(NERONI2/JARAPRTAC) DLTPGM PGM(NERONI2/JARAPRTD) DLTPGM PGM(NERONI2/JARAPRTP) DLTF FILE(NERONI2/JARAPRTF) /* Crea gli oggetti. */ CRTPF FILE(NERONI2/JARAPRTF) SRCFILE(JARAPRT) MAXMBRS(*NOMAX) + SIZE(*NOMAX) CRTBNDCL PGM(NERONI2/JARAPRTC) SRCFILE(JARAPRT) DBGVIEW(*ALL) CRTBNDRPG PGM(NERONI2/JARAPRTD) SRCFILE(JARAPRT) DBGVIEW(*ALL) CRTBNDRPG PGM(NERONI2/JARAPRTP) SRCFILE(JARAPRT) DBGVIEW(*ALL) CRTCMD CMD(NERONI2/JARAPRT) PGM(JARAPRTC) SRCFILE(JARAPRT) PRDLIB(NERONI2) CRTBNDCL PGM(NERONI2/JARAPRTAC) SRCFILE(JARAPRT) DBGVIEW(*ALL) CRTCMD CMD(NERONI2/JARAPRTA) PGM(JARAPRTAC) SRCFILE(JARAPRT) + PRDLIB(NERONI2) //ENDBCHJOB //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JARAPRTA) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Data area print All. Cmd */ /* Claudio Neroni 02-01-2009 Creato. */ CMD PROMPT('Data area print All') PARM KWD(DTAARA) TYPE(DTAARA) MIN(1) PROMPT('Data + area') DTAARA: QUAL TYPE(*GENERIC) SPCVAL((*ALL)) QUAL TYPE(*NAME) DFT(*LIBL) SPCVAL((*LIBL) + (*USRLIBL) (*CURLIB) (*ALL) (*ALLUSR)) + PROMPT('library') //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JARAPRTAC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Data area print All. Cpp */ /* Claudio Neroni 03-02-2014 Creato. */ /* */ PGM PARM(&DTAARAQ) /* Riceve Nome qualificato di un'Area Dati da stampare. */ /* Nome generico o *ALL. */ /* Libreria o valori speciali *LIBL *USRLIBL *CURLIB *ALL *ALLUSR. */ DCL VAR(&DTAARAQ) TYPE(*CHAR) LEN(20) /* Nome Area Dati da stampare. */ DCL VAR(&DTAARA) TYPE(*CHAR) LEN(10) /* Nome Libreria dell'Area Dati da stampare. */ DCL VAR(&DTAARAL) TYPE(*CHAR) LEN(10) /* Nome Libreria dell'Area Dati da stampare. */ DCL VAR(&ON) TYPE(*LGL) VALUE('1') /* Outfile del comando Display Object Description. */ DCLF FILE(QADSPOBJ) /* Estrae parametri. */ CHGVAR VAR(&DTAARA) VALUE(%SST(&DTAARAQ 1 10)) CHGVAR VAR(&DTAARAL) VALUE(%SST(&DTAARAQ 11 10)) /* Scrive l'elenco delle aree dati in libreria temporanea. */ DSPOBJD OBJ(&DTAARAL/&DTAARA) OBJTYPE(*DTAARA) + OUTPUT(*OUTFILE) OUTFILE(QTEMP/JARAPRTALL) MONMSG MSGID(CPF0000) EXEC(DO) SNDPGMMSG MSG('Elenco vuoto') MSGTYPE(*DIAG) GOTO CMDLBL(FINE) ENDDO /* Apre la stampa. */ JARAPRT DTAARA(*BEGIN) /* Indirizza la lettura dell'elenco in libreria temporanea. */ OVRDBF FILE(QADSPOBJ) TOFILE(QTEMP/JARAPRTALL) /* Cicla all'infinito leggendo l'elenco. */ DOWHILE COND(&ON) /* Legge un record dell'elenco. */ RCVF RCDFMT(*FILE) /* Se non ce ne sono altri, abbandona. */ MONMSG MSGID(CPF0864) EXEC(LEAVE) /* Stampa l'area dati corrente. */ JARAPRT DTAARA(&ODLBNM/&ODOBNM) /* Cicla all'infinito leggendo l'elenco. */ ENDDO /* Chiude la stampa. */ JARAPRT DTAARA(*END) /* Fine. */ FINE: ENDPGM //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JARAPRTC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Data area print. Cpp */ /* Claudio Neroni 02-01-2009 Creato. */ /* */ PGM PARM(&DTAARAQ) /* Riceve Nome qualificato di un'Area Dati da stampare. */ /* Se riceve *BEGIN, inizializza l'elenco. */ /* Se riceve *END, stampa l'elenco. */ DCL VAR(&DTAARAQ) TYPE(*CHAR) LEN(20) /* Nome Area Dati da stampare. */ DCL VAR(&DTAARA) TYPE(*CHAR) LEN(10) /* Nome Libreria dell'Area Dati da stampare. */ DCL VAR(&DTAARAL) TYPE(*CHAR) LEN(10) /* Se riceve *BEGIN, inizializza l'elenco. */ IF COND(&DTAARAQ *EQ *BEGIN) THEN(DO) JCPYCLR FROMFILE(JARAPRTF) TOFILE(JARAPRTFT) GOTO CMDLBL(FINE) ENDDO /* Indirizza l'elenco in libreria temporanea. */ OVRDBF FILE(JARAPRTF) TOFILE(QTEMP/JARAPRTFT) /* Se riceve *END, stampa l'elenco. */ IF COND(&DTAARAQ *EQ *END) THEN(DO) OVRPRTF FILE(QSYSPRT) PAGESIZE(66 153) LPI(6) + CPI(15) OVRFLW(60) CALL PGM(JARAPRTP) GOTO CMDLBL(FINE) ENDDO /* Estrae parametri. */ CHGVAR VAR(&DTAARA) VALUE(%SST(&DTAARAQ 1 10)) CHGVAR VAR(&DTAARAL) VALUE(%SST(&DTAARAQ 11 10)) /* Scrive l'Area Dati nell'elenco in libreria temporanea. */ CALL PGM(JARAPRTD) PARM(&DTAARA &DTAARAL) /* Fine. */ FINE: ENDPGM //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JARAPRTD) FILETYPE(*SRC) ENDCHAR('//ENDSRC') Fjaraprtf o E DISK C *entry plist C parm ppara 10 I Dtaara C parm pplib 10 I Library C call 'JAIRDA2' RtvDtaAraNoErr C parm ppara qqara 10 I Dtaara C parm pplib qqlib 10 U Library C parm qqtyp 10 O Type C parm qqlen 9 0 O Lenght C parm qqdec 9 0 O Decimal C parm qqdta 2000 O Data C clear ar C eval arara = qqara C eval arlib = qqlib C eval artyp = qqtyp C eval arlen = qqlen C eval ardec = qqdec C eval ardta = qqdta C write ar C seton lr //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JARAPRTF) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Data area print. Pf * Claudio Neroni 02-01-2009 Creato. A R AR A TEXT('Area dati') A ARARA 10 A COLHDG('Area' 'dati') A ARLIB 10 A COLHDG('Libreria') A ARTYP 10 A COLHDG('Tipo') A ARLEN 9 0 A COLHDG('Lunghezza') A ARDEC 9 0 A COLHDG('Decimali') A ARDTA 2000 A COLHDG('Dati') //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JARAPRTP) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /TITLE Data area print. Print * Claudio Neroni 02-01-2009 Creato. * Stampa il contenuto delle aree dati fotografate nel file di elenco. *--------------------------------------------------------------------------------------------- * Elenco aree dati con caratteristiche e valore. Fjaraprtf ip e disk * Stampa. Fqsysprt o f 153 printer oflind(*inof) *--------------------------------------------------------------------------------------------- * Spezza il campo dati. D ardta ds D dta 100 dim(20) *--------------------------------------------------------------------------------------------- D jpsdsile sds D ps_program 334 343 *--------------------------------------------------------------------------------------------- * Trattini. D tra s 153 inz(*all'-') *--------------------------------------------------------------------------------------------- * Conta i record. C add 1 cnt 9 0 * Se corre il primo record, accende overflow. C if cnt = 1 B01 C seton of 01 C endif E01 * Se overflow, stampa intestazioni. C of except int * Se corre area dati numerica. C if artyp = '*DEC' B01 * Converte da impaccato carattere a stringa. * Conversion. PackCharToString C call 'JCVPCST' 01 * Riceve i dati impaccati allineati a sinistra in un alfanumerico. C parm ardta inp 16 01 * Riceve il numero di cifre contenute nei dati. C parm arlen len 9 0 01 * Riceve il numero di decimali contenuti nei dati. C parm ardec dec 9 0 01 * Restituisce il numero contenuto nei dati * in una stringa composta dalle seguenti parti: * Segno : se negativo, il carattere "-"; altrimenti assente. * Interi: le cifre significative della parte intera. * Se sono presenti decimali * Virgola: il carattere ",". * Decimali: tutte le cifre della parte decimale. C parm out 32 01 * Stampa dato numerico. C of except int C except detdec 01 * Se corre area dati carattere (o altro). C else X01 * Stampa dato carattere prima riga. C of except int C except detcha1 01 * Calcola il numero di righe necessarie a stampare i dati carattere. C arlen div 100 im 3 0 01 C mvr ix 3 0 01 C if ix > *zero B02 C add 1 im 02 C endif E02 * Stampa le righe carattere successive alla prima. C if im > 1 B02 C 2 do im ix B03 C if dta(ix) <> *blank C of except int C eval ix2 = (ix-1) * 100 C z-add ix2 ix2 4 0 C except detcha2 03 C endif C enddo E03 C endif E02 * Se corre area dati carattere (o altro). C endif E01 * Se a fine lavoro ha stampato, emette fine stampa. Clr if cnt > *zero Clr except fs Clr endif *--------------------------------------------------------------------------------------------- * Inizializza. C *inzsr begsr C time time 6 0 C endsr *--------------------------------------------------------------------------------------------- * Intestazioni. Oqsysprt e int 2 1 1 O ps_program O *date y +2 O time +2 '0 : : ' O +2 'Pag' O page +1 O e int 1 O 'Area dati ' O +1 'Libreria ' O +1 'Tipo ' O +1 'Lunghezza' O +1 ' Decimali' O +1 'Dati' O e int 1 O tra O e int 2 O 53 ' ' O '*...+....1....+....2' O '....+....3....+....4' O '....+....5....+....6' O '....+....7....+....8' O '....+....9....+...10' * Stampa dato numerico. O e detdec 1 O arara O arlib +1 O artyp +1 O arlen 3 +1 O ardec 3 +1 O out +1 * Stampa dato carattere prima riga. O e detcha1 1 O arara O arlib +1 O artyp +1 O arlen 3 +1 O ardec 4 +1 O dta(01) +1 * Stampa dato carattere righe successive. O e detcha2 1 O ix2 z 46 O '>' O 53 ' ' O dta(ix) * Fine stampa. O e fs 1 O '*** Fine stampa ***' O +3 'Numero aree dati:' O cnt 3 *--------------------------------------------------------------------------------------------- //ENDSRC //ENDBCHJOB