//BCHJOB JOB(JWEB) 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: "DEV720" */ /* From Library: "NERONI2" */ /* Unload Time: 2016-06-15 09:28 */ /* To File : "JWEB" */ /* To Library : "NERONI2" */ /* To Text : "Web Stream. 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 "JWEB.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:\JWEB.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JWEB.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(JWEB) 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/JWEB" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JWEB) MBR(JWEB.) 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/JWEB) CRTSRCPF FILE(NERONI2/JWEB) RCDLEN(112) + TEXT('Web Stream. Src') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JWEB) TOFILE(NERONI2/JWEB) + TOMBR(JWEB) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JWEB) MBR(JWEB) + SRCTYPE(CMD) + TEXT('Web Stream. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JWEB.) TOFILE(NERONI2/JWEB) + TOMBR(JWEB.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JWEB) MBR(JWEB.) + SRCTYPE(CL) + TEXT('Web Stream. CrtJs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JWEBC) TOFILE(NERONI2/JWEB) + TOMBR(JWEBC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JWEB) MBR(JWEBC) + SRCTYPE(CLLE) + TEXT('Web Stream. Cpp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JWEBD) TOFILE(NERONI2/JWEB) + TOMBR(JWEBD) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JWEB) MBR(JWEBD) + SRCTYPE(CLLE) + TEXT('Web Stream. Source copier') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JWEBP) TOFILE(NERONI2/JWEB) + TOMBR(JWEBP) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JWEB) MBR(JWEBP) + SRCTYPE(PNLGRP) + TEXT('Web Stream. Help') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JWEBR) TOFILE(NERONI2/JWEB) + TOMBR(JWEBR) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JWEB) MBR(JWEBR) + SRCTYPE(RPGLE) + TEXT('Web Stream. Write Stream Cmds') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JWEBX) TOFILE(NERONI2/JWEB) + TOMBR(JWEBX) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JWEB) MBR(JWEBX) + SRCTYPE(RPGLE) + TEXT('Web Stream. Transcribe CL Stream') /*----------------------------------------------------------------------------*/ //DATA FILE(JWEB) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Web Stream. Cmd */ /* Claudio Neroni 29/06/2008 Creato. */ /* Crea la stringa per pubblicare un'utility sul web. */ CMD PROMPT('Web Stream') PARM KWD(SRCFILE) TYPE(SRCFILE) MIN(1) + PROMPT('Source file') SRCFILE: QUAL TYPE(*NAME) QUAL TYPE(*NAME) DFT(*LIBL) SPCVAL((*LIBL)) + PROMPT('library') PARM KWD(NEWLIB) TYPE(*NAME) MIN(1) + PROMPT('New library') PARM KWD(STRFILE) TYPE(STRFILE) PROMPT('Stream + file') STRFILE: QUAL TYPE(*NAME) DFT(JWEBSTR) QUAL TYPE(*NAME) DFT(QTEMP) SPCVAL((*LIBL)) + PROMPT('library') PARM KWD(STRMBR) TYPE(*NAME) DFT(*SRCFILE) + SPCVAL((*SRCFILE)) PROMPT('Stream member') PARM KWD(CMT) TYPE(*CHAR) LEN(74) DFT('Open + source scaricabile da') PROMPT('Comment') PARM KWD(LIBTXT) TYPE(*CHAR) LEN(50) DFT('Utility + di') PROMPT('Library text') //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JWEB.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JWEB.) JOBD(NERONI2/NERONI2) OUTQ(QPRINTS) ENDSEV(60) + LOG(4 00 *SECLVL) MSGQ(*USRPRF) CCSID(280) jmy /* Claudio Neroni 20-06-2008 Creato. */ /* JWEB */ /* Web Stream. */ /* Crea la stringa per pubblicare un'utility sul web. */ /* Prerequisiti: nessuno. */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella il file messaggi preesistente. */ DLTMSGF MSGF(NERONI2/JWEB) /* Cancella i testi d'aiuto preesistenti. */ DLTPNLGRP PNLGRP(NERONI2/JWEBP) /* Cancella i logici preesistenti. */ /* Cancella i fisici preesistenti. */ /* Cancella i comandi preesistenti. */ DLTCMD CMD(NERONI2/JWEB) /* Cancella i programmi preesistenti. */ DLTPGM PGM(NERONI2/JWEBC) DLTPGM PGM(NERONI2/JWEBD) DLTPGM PGM(NERONI2/JWEBR) DLTPGM PGM(NERONI2/JWEBX) /* Crea i file fisici. */ /* Crea i file logici. */ /* Crea i comandi. */ CRTCMD CMD(NERONI2/JWEB) PGM(JWEBC) SRCFILE(JWEB) HLPPNLGRP(JWEBP) + HLPID(CMD) PRDLIB(NERONI2) /* Duplica i comandi in QGPL. */ CRTPRXCMD CMD(QGPL/JWEB) TGTCMD(NERONI2/JWEB) AUT(*USE) REPLACE(*YES) /* Crea i programmi. */ CRTBNDCL PGM(NERONI2/JWEBC) SRCFILE(JWEB) TGTRLS(*CURRENT) + DBGVIEW(*ALL) CRTBNDCL PGM(NERONI2/JWEBD) SRCFILE(JWEB) TGTRLS(*CURRENT) + DBGVIEW(*ALL) CRTBNDRPG PGM(NERONI2/JWEBR) SRCFILE(JWEB) DBGVIEW(*ALL) + TGTRLS(*CURRENT) CRTBNDRPG PGM(NERONI2/JWEBX) SRCFILE(JWEB) DBGVIEW(*ALL) + TGTRLS(*CURRENT) /* Crea il file messaggi. */ CRTMSGF MSGF(NERONI2/Jweb) TEXT('Web Stream. Msgf') /* Fotografia comandi (xxxA001). */ /* Messaggi comuni a pgm di comandi diversi (xxx0001). */ /* Messaggi nei pgm del Cmd 1 (xxx0101). */ ADDMSGD MSGID(JWB0101) MSGF(NERONI2/JWEB) MSG('Overflow di almeno + una riga sorgente durante sostituzione variabili.') + SECLVL('In una stringa CL la sostituzione della + vecchia libreria con la nuova ha provocato + l''allungamento di almeno un comando oltre la misura + della riga sorgente.') /* Messaggi nei pgm del Cmd 2 (xxx0201). */ /* Messaggi dei Cmd (xxx1001). */ /* Crea i testi d'aiuto. */ CRTPNLGRP PNLGRP(NERONI2/JWEBP) SRCFILE(JWEB) //ENDBCHJOB //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JWEBC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Web Stream. Cpp */ /* Claudio Neroni 29/06/2008 Creato. */ /* Crea la stringa per pubblicare un'utility sul web. */ /* */ PGM PARM(&SRCFILEQ &NEWLIB &STRFILEQ &STRMBR + &CMT &NEWLIBTXT) /* Riceve File source qualificato. */ DCL VAR(&SRCFILEQ) TYPE(*CHAR) LEN(20) /* Riceve Libreria del nuovo file. */ DCL VAR(&NEWLIB) TYPE(*CHAR) LEN(10) /* Riceve File stringa qualificato. */ DCL VAR(&STRFILEQ) TYPE(*CHAR) LEN(20) /* Riceve Membro stringa. */ DCL VAR(&STRMBR) TYPE(*CHAR) LEN(10) /* Riceve Commento. */ DCL VAR(&CMT) TYPE(*CHAR) LEN(74) /* Riceve Testo libreria nuova. */ DCL VAR(&NEWLIBTXT) TYPE(*CHAR) LEN(50) /* File source. */ DCL VAR(&SRCFILE) TYPE(*CHAR) LEN(10) /* Libreria del file source. */ DCL VAR(&SRCLIB) TYPE(*CHAR) LEN(10) /* File stringa. */ DCL VAR(&STRFILE) TYPE(*CHAR) LEN(10) /* Libreria del file stringa. */ DCL VAR(&STRLIB) TYPE(*CHAR) LEN(10) /* Testo del file source. */ DCL VAR(&TEXT) TYPE(*CHAR) LEN(50) /* Nome del sistema. */ DCL VAR(&SYSNAM) TYPE(*CHAR) LEN(8) /* Tempo. */ DCL VAR(&YEAR) TYPE(*CHAR) LEN(2) DCL VAR(&MONTH) TYPE(*CHAR) LEN(2) DCL VAR(&DAY) TYPE(*CHAR) LEN(2) DCL VAR(&DATEE) TYPE(*CHAR) LEN(10) DCL VAR(&HOUR) TYPE(*CHAR) LEN(2) DCL VAR(&MINUTE) TYPE(*CHAR) LEN(2) DCL VAR(&TIME) TYPE(*CHAR) LEN(16) /* Contatore per individuare il primo membro elaborato. */ DCL VAR(&CNT) TYPE(*DEC) LEN(7 0) /* Errore. */ DCL VAR(&ERR) TYPE(*CHAR) LEN(1) /* Prenotazione del CPF0001. */ DCL VAR(&CPF0001) TYPE(*LGL) /* Elenco dei membri del file source. */ DCLF FILE(QAFDMBR) /* Intercetta gli errori. */ MONMSG MSGID(CPF0000 MCH0000 CEE0000) EXEC(GOTO + CMDLBL(ERRORE)) /* Estrae parametri. */ CHGVAR VAR(&SRCFILE) VALUE(%SST(&SRCFILEQ 1 10)) CHGVAR VAR(&SRCLIB) VALUE(%SST(&SRCFILEQ 11 10)) /* Estrae parametri. */ CHGVAR VAR(&STRFILE) VALUE(%SST(&STRFILEQ 1 10)) CHGVAR VAR(&STRLIB) VALUE(%SST(&STRFILEQ 11 10)) /* Recupera il nome del sistema. */ RTVNETA SYSNAME(&SYSNAM) /* Recupera tempo del sistema. */ RTVSYSVAL SYSVAL(QYEAR) RTNVAR(&YEAR) RTVSYSVAL SYSVAL(QMONTH) RTNVAR(&MONTH) RTVSYSVAL SYSVAL(QDAY) RTNVAR(&DAY) RTVSYSVAL SYSVAL(QHOUR) RTNVAR(&HOUR) RTVSYSVAL SYSVAL(QMINUTE) RTNVAR(&MINUTE) CVTDAT DATE(&YEAR *CAT &MONTH *CAT &DAY) + TOVAR(&DATEE) FROMFMT(*YMD) TOFMT(*YYMD) + TOSEP(-) CHGVAR VAR(&TIME) VALUE(&DATEE *BCAT &HOUR *TCAT + ':' *TCAT &MINUTE) /* Controlla l'esistenza dei file. */ RTVOBJD OBJ(&SRCLIB/&SRCFILE) OBJTYPE(*FILE) + TEXT(&TEXT) /* Se il membro stringa ha lo stesso nome del file source, lo assume. */ IF COND(&STRMBR *EQ *SRCFILE) THEN(CHGVAR + VAR(&STRMBR) VALUE(&SRCFILE)) /* Cancella l'eventuale stringa web presente nel file stringhe. */ RMVM FILE(&STRLIB/&STRFILE) MBR(&STRMBR) MONMSG MSGID(CPF0000) /* Crea la stringa web in libreria temporanea. */ CRTSRCPF FILE(&STRLIB/&STRFILE) RCDLEN(112) + TEXT('Stringhe web') MONMSG MSGID(CPF0000 MCH0000) ADDPFM FILE(&STRLIB/&STRFILE) MBR(&STRMBR) + TEXT(&TEXT) SRCTYPE(CL) /* Genera l'elenco dei membri del file source. */ DSPFD FILE(&SRCLIB/&SRCFILE) TYPE(*MBR) + OUTPUT(*OUTFILE) OUTFILE(QTEMP/JWEBM) /* Ordina l'elenco per nome. */ OVRDBF FILE(QAFDMBR) TOFILE(QTEMP/JWEBM) SHARE(*YES) OPNQRYF FILE((QTEMP/JWEBM)) QRYSLT('*NOT (MBSEU2 + *CT "NO")') KEYFLD((MBNAME)) /* Reindirizza il membro stringa. */ OVRDBF FILE(JWEBS) TOFILE(&STRLIB/&STRFILE) + MBR(&STRMBR) /* Inizio lettura elenco. */ READBEG: /* Legge una riga dell'elenco. */ RCVF /* Se non ce ne sono altre, abbandona. */ MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(READEND)) /* Segnala l'elaborazione al chiamante. */ SNDPGMMSG MSG(&MBSEU2 *CAT &MBNAME *CAT ' ' *CAT &MBMTXT) /* Conta i record letti. */ CHGVAR VAR(&CNT) VALUE(&CNT + 1) /* Se corre il primo record, */ /* scrive in stringa web le istruzioni di testa. */ IF COND(&CNT *EQ 1) THEN(DO) CALL PGM(JWEBR) PARM(BCH &MBNAME &MBFILE &MBLIB + &MBTXT &MBMTXT &MBSEU2 &NEWLIB &SYSNAM + &TIME &CMT &NEWLIBTXT) CALL PGM(JWEBR) PARM(CRT &MBNAME &MBFILE &MBLIB + &MBTXT &MBMTXT &MBSEU2 &NEWLIB &SYSNAM + &TIME &CMT &NEWLIBTXT) ENDDO /* Scrive in stringa web le istruzioni di copiatura sorgente. */ CALL PGM(JWEBR) PARM(CPY &MBNAME &MBFILE &MBLIB + &MBTXT &MBMTXT &MBSEU2 &NEWLIB &SYSNAM + &TIME &CMT &NEWLIBTXT) /* Scrive in stringa web le istruzioni di modifica sorgente. */ CALL PGM(JWEBR) PARM(CHG &MBNAME &MBFILE &MBLIB + &MBTXT &MBMTXT &MBSEU2 &NEWLIB &SYSNAM + &TIME &CMT &NEWLIBTXT) /* Ricicla. */ GOTO CMDLBL(READBEG) /* Fine lettura elenco. */ READEND: /* Chiude l'elenco. */ CLOF OPNID(JWEBM) /* Elimina i reindirizzamenti. */ DLTOVR FILE(*ALL) /* Riacquisisce le risorse. */ RCLRSC /* Copia i sorgenti nella stringa web. */ CALL PGM(JWEBD) PARM(&SRCFILE &SRCLIB &NEWLIB + &STRFILE &STRLIB &STRMBR &SYSNAM &TIME + &CMT &NEWLIBTXT &ERR) IF COND(&ERR *NE ' ') THEN(DO) SNDPGMMSG MSGID(JWB0101) MSGF(JWEB) MSGTYPE(*DIAG) GOTO CMDLBL(ERRORE) ENDDO /* Reindirizza il membro stringa. */ OVRDBF FILE(JWEBS) TOFILE(&STRLIB/&STRFILE) + MBR(&STRMBR) /* Scrive in stringa web le istruzioni di chiusura. */ CALL PGM(JWEBR) PARM(BCE &MBNAME &MBFILE &MBLIB + &MBTXT &MBMTXT &MBSEU2 &NEWLIB &SYSNAM + &TIME &CMT &NEWLIBTXT) /* Salta all'esecuzione delle attivita' finali. */ GOTO CMDLBL(RCLRSC) /* Label di esecuzione delle attivita' finali. */ RCLRSC: /* Cancella i file di lavoro. */ /* ... */ /* Elimina i reindirizzamenti. */ DLTOVR FILE(*ALL) /* Riacquisisce le risorse. */ RCLRSC MONMSG MSGID(CPF0000 MCH0000) /* Se richiesto, rilascia il CPF0001. */ IF COND(&CPF0001) THEN(DO) SNDPGMMSG MSGID(CPF0001) MSGF(QCPFMSG) MSGDTA(JWEB) + 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 attivita' finali. */ GOTO CMDLBL(RCLRSC) ENDPGM //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JWEBD) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Web Stream. Source copier */ /* Claudio Neroni 29/06/2008 Creato. */ /* Copia i sorgenti nella stringa web. */ /* */ PGM PARM(&SRCFILE &SRCLIB &NEWLIB &STRFILE + &STRLIB &STRMBR &SYSNAM &TIME &CMT + &NEWLIBTXT &ERR) /* Riceve File source. */ DCL VAR(&SRCFILE) TYPE(*CHAR) LEN(10) /* Riceve Libreria del file source. */ DCL VAR(&SRCLIB) TYPE(*CHAR) LEN(10) /* Riceve Libreria del nuovo file. */ DCL VAR(&NEWLIB) TYPE(*CHAR) LEN(10) /* Riceve File stringa. */ DCL VAR(&STRFILE) TYPE(*CHAR) LEN(10) /* Riceve Libreria del file stringa. */ DCL VAR(&STRLIB) TYPE(*CHAR) LEN(10) /* Riceve Membro stringa. */ DCL VAR(&STRMBR) TYPE(*CHAR) LEN(10) /* Riceve Nome del sistema. */ DCL VAR(&SYSNAM) TYPE(*CHAR) LEN(8) /* Riceve Tempo. */ DCL VAR(&TIME) TYPE(*CHAR) LEN(16) /* Riceve Commento. */ DCL VAR(&CMT) TYPE(*CHAR) LEN(74) /* Riceve Testo libreria nuova. */ DCL VAR(&NEWLIBTXT) TYPE(*CHAR) LEN(50) /* Restituisce Errore. */ DCL VAR(&ERR) TYPE(*CHAR) LEN(1) /* Elenco dei membri del file source. */ DCLF FILE(QAFDMBR) /* Ordina l'elenco per nome. */ OVRDBF FILE(QAFDMBR) TOFILE(QTEMP/JWEBM) SHARE(*YES) OPNQRYF FILE((QTEMP/JWEBM)) QRYSLT('*NOT (MBSEU2 *CT + "NO")') KEYFLD((MBNAME)) /* Reindirizza il membro stringa. */ OVRDBF FILE(JWEBS) TOFILE(&STRLIB/&STRFILE) + MBR(&STRMBR) /* Inizio lettura elenco. */ READBEG: /* Legge una riga dell'elenco. */ RCVF /* Se non ce ne sono altre, abbandona. */ MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(READEND)) /* Scrive in stringa web le istruzioni di inizio sorgente. */ CALL PGM(JWEBR) PARM(BEG &MBNAME &MBFILE &MBLIB + &MBTXT &MBMTXT &MBSEU2 &NEWLIB &SYSNAM + &TIME &CMT &NEWLIBTXT) /* Se corre un sorgente Control Language Stream (CL), */ /* copia la stringa sostituendo la libreria nuova alla vecchia. */ /* Se errore, abbandona. */ IF COND(&MBSEU2 *EQ CL) THEN(DO) OVRDBF FILE(CLSRC) TOFILE(&SRCLIB/&SRCFILE) + MBR(&MBNAME) CALL PGM(JWEBX) PARM(&MBLIB &NEWLIB &ERR) DLTOVR FILE(CLSRC) IF COND(&ERR *NE ' ') THEN(GOTO CMDLBL(READEND)) ENDDO /* Se corre un sorgente di altro tipo, */ /* copia la stringa senza manipolazioni. */ ELSE CMD(DO) CPYF FROMFILE(&SRCLIB/&SRCFILE) TOFILE(JWEBS) + FROMMBR(&MBNAME) MBROPT(*ADD) FMTOPT(*MAP + *DROP) SRCOPT(*SEQNBR) ENDDO /* Scrive in stringa web le istruzioni di fine sorgente. */ CALL PGM(JWEBR) PARM(END &MBNAME &MBFILE &MBLIB + &MBTXT &MBMTXT &MBSEU2 &NEWLIB &SYSNAM + &TIME &CMT &NEWLIBTXT) /* Ricicla. */ GOTO CMDLBL(READBEG) /* Fine lettura elenco. */ READEND: /* Chiude l'elenco. */ CLOF OPNID(JWEBM) /* Elimina i reindirizzamenti. */ DLTOVR FILE(*ALL) /* Riacquisisce le risorse. */ RCLRSC ENDPGM //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JWEBP) FILETYPE(*SRC) ENDCHAR('//ENDSRC') :PNLGRP. .*------------------------------------------------------------------------------ :HELP NAME=CMD. :H3.Comando JWEB :H2.Genera una stringa sorgente da pubblicare sul WEB :P.Il comando permette di scaricare dall'AS400 datore tutti i membri di un file sorgente in un'unica stringa sorgente da pubbicare come testo sul WEB dove puo' essere facilmente visionata e valutata. :P.La stringa contiene anche istruzioni sommarie per il ricaricamento sull'AS400 ricevente. :P.La stringa puo' quindi essere scaricata su un pc connesso all'AS400 ricevente e da li' copiato in un membro sorgente sulla stessa macchina destinataria. :P.L'esecuzione del contenuto di tale stringa WEB sulla macchina destinataria (o qualunque altra) ricostruisce il file sorgente di partenza nella libreria indicata come :HP2.NEWLIB:EHP2.. :P.Il comando di sistema che esegue la stringa e' :HP2.STRDBJOB:EHP2.. :P.Unico grave difetto del travaso e' la sparizione delle date di modifica delle righe sorgente. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/srcfile'. :H3.Source file (SRCFILE) - file :P.Nome del file sorgente da scaricare nella stringa. :P.Valori permessi: :PARML. :PT.nome-file-sorgente € :PD.Il valore e' obbligatorio. :EPARML. :H3.Source file (SRCFILE) - library :P.Nome della libreria in cui risiede il file. :P.Valori permessi: :PARML. :PT.:PK DEF.*LIBL:EPK.€ :PD.Il file sorgente viene cercato in lista librerie. :PT.nome-libreria :PD.Il file sorgente viene cercato nella libreria richiesta. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/newlib'. :H3.New library (NEWLIB) :P.Nome della libreria che conterra' il file sorgente creato dalla stringa sull'AS400 ricevente. :P.Valori permessi: :PARML. :PT.nome-libreria :PD.Il valore e' obbligatorio. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/strfile'. :H3.Stream file (STRFILE) - file :P.Nome del file sorgente ricevente del membro stringa. :P.Se il file manca ed e' fornito un nome di libreria, il file verra' creato. :P.Se il membro stringa preesiste, verra' ricoperto. :P.Valori permessi: :PARML. :PT.:PK DEF.JWEBSTR:EPK.€ :PD.Il file stringhe prende il nome di default JWEBSTR. :PT.nome-file-sorgente € :PD.Il nome indicato viene usato per il file stringhe. :EPARML. :H3.Stream file (STRFILE) - library :P.Nome della libreria in cui risiede il file sorgente ricevente del membro stringa. :P.Valori permessi: :PARML. :PT.:PK DEF.QTEMP:EPK.€ :PD.Il file stringhe viene cercato in libreria temporanea. :PT.nome-libreria :PD.Il file stringhe viene cercato nella libreria richiesta. :PT.*LIBL :PD.Il file stringhe viene cercato in lista librerie. Questa scelta richiede la preesistenza del file stringhe. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/strmbr'. :H3.Stream member (STRMBR) :P.Nome del membro sorgente ricevente della stringa. :P.Valori permessi: :PARML. :PT.:PK DEF.*SRCFILE:EPK.€ :PD.Il membro stringa prende lo stesso nome del file sorgente. :PT.nome-membro-sorgente € :PD.Il membro stringa assume il nome qui fornito. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/cmt'. :H3.Comment (CMT) :P.Commento da inserire nella stringa. :P.Valori permessi: :PARML. :PT.:PK DEF.Open source scaricabile da:EPK.€ :PD.Suggerisce l'inizio di un commento adatto. :PT.Commento :PD.Un testo a piacere di personalizzazione della stringa per un massimo di 74 caratteri. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/libtxt'. :H3.Library text (LIBTXT) :P.Testo da attribuire alla libreria ricevente. :P.Valori permessi: :PARML. :PT.:PK DEF.Utility di:EPK.€ :PD.Suggerisce l'inizio di un testo libreria adatto. :PT.Testo :PD.Un testo a piacere per la libreria ricevente per un massimo di 50 caratteri. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP NAME='CMD/COMMAND/EXAMPLES'. Esempi per JWEB :XH3.Esempi per JWEB :P.:HP2.Esempio 1: Crea una stringa di installazione nel file sorgente TRANSITO a partire dal file sorgente FILESORGEN della libreria DATRICE per la libreria RICEVENTE.:EHP2. :XMP. JWEB SRCFILE(DATRICE/FILESORGEN) NEWLIB(RICEVENTE) STRFILE(QTEMP/TRANSITO) :EXMP. :P.Questo comando prepara una stringa sorgente che, spedita ad un altro AS400, permette la rigenerazione del file sorgente di partenza. :P.:HP2.Esempio 2: Comando caricato come opzione "WE" del file opzioni PDM per essere esercitato sulla riga di WRKOBJPDM che elenca un file sorgente da trasferire ad altro AS400.:EHP2. :XMP. JWEB SRCFILE(&L/&N) NEWLIB(&L) + STRFILE(&L/JWEBSTR) CMT('Open source from www.neroni.it') LIBTXT('Claudio Neroni Utility') :EXMP. :P.Questo comando e' esattamente quello che uso per lo scarico delle utility da pubblicare sotto forma di stringa sorgente. :EHELP. .*------------------------------------------------------------------------------ :HELP NAME='CMD/ERROR/MESSAGES'. &MSG(CPX0005,QCPFMSG). JWEB - Help :XH3.&MSG(CPX0005,QCPFMSG). JWEB :P.:HP3.&MSG(CPX0006,QCPFMSG). *DIAG:EHP3. seguiti da :HP3.*ESCAPE CPF0001:EHP3. :DL COMPACT. :DT.JWB0101 :DD.&MSG(JWB0101,JWEB,*LIBL,nosub). :EDL. :EHELP. .*------------------------------------------------------------------------------ :EPNLGRP. //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JWEBR) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /TITLE Web Stream. Write Stream Cmds * Claudio Neroni 29/06/2008 Creato. * Scrive un gruppo di comandi nella stringa web. *--------------------------------------------------------------------------------------------- * Stringa web. Fjwebs o f 112 disk *--------------------------------------------------------------------------------------------- * Numero elementi di ciascuna schiera comandi. D max c 40 * Campo di comodo per la manipolazione del singolo comando. D wrk s 100 * Schiera di comodo. D sos s dim(max) like(wrk) * Schiere dei comandi da scrivere nella stringa. D bch s dim(max) ctdata perrcd(1) like(wrk) Batch D crt s dim(max) ctdata perrcd(1) like(wrk) Create D cpy s dim(max) ctdata perrcd(1) like(wrk) Copy D beg s dim(max) ctdata perrcd(1) like(wrk) Data begin D end s dim(max) ctdata perrcd(1) like(wrk) Data end D bce s dim(max) ctdata perrcd(1) like(wrk) Batch end *--------------------------------------------------------------------------------------------- D dex s like(wrk) D sin s like(wrk) D dex2 s 2 D sin2 s 2 *--------------------------------------------------------------------------------------------- * Scambia parametri. C *entry plist C parm mod 3 I Mode C parm mbr 10 I Member C parm fil 10 I File C parm lib 10 I Library C parm ftx 50 I FileText C parm mtx 50 I MemberText C parm sty 10 I SourceType C parm nwl 10 I NewLibrary C parm sys 8 I SystemName C parm tim 16 I Time C parm cmt 74 I Comment C parm nlt 50 I NewLibTxt *--------------------------------------------------------------------------------------------- * Prenota chiusura. C seton lr * Sostituisce apice con doppio apice nei campi sensibili. C eval ftx = %xlate('''':'"':ftx) C eval mtx = %xlate('''':'"':mtx) C eval nlt = %xlate('''':'"':nlt) * Trascrive il gruppo comandi richiesto nella schiera di comodo. C select C when mod = 'BCH' C eval sos = bch C when mod = 'CRT' C eval sos = crt C when mod = 'CPY' C eval sos = cpy C when mod = 'BEG' C eval sos = beg C when mod = 'END' C eval sos = end C when mod = 'BCE' C eval sos = bce C endsl * Elabora il singolo elemento della schiera di comodo. C do max xx 3 0 * Se il comando corrente e' vuoto, abbandona. C if sos(xx) = *blank C leave C endif * Sostituisce le variabili nella riga comando. C eval wrk = sos(xx) C exsr wrks * Scrive il comando nella stringa. C except add * Elabora il singolo elemento della schiera di comodo. C enddo *--------------------------------------------------------------------------------------------- * Sostituisce le variabili nella riga comando. C wrks begsr * Sostituisce nel comando il valore alla variabile Member C do *hival C clear dsp 3 0 C eval dsp = %scan('&mbr': wrk) C if dsp = *zero C leave C endif C eval wrk = %subst(wrk:1:dsp-1) + C %trim(mbr) + C %subst(wrk:dsp+4) C enddo * Sostituisce nel comando il valore alla variabile File C do *hival C clear dsp 3 0 C eval dsp = %scan('&fil': wrk) C if dsp = *zero C leave C endif C eval wrk = %subst(wrk:1:dsp-1) + C %trim(fil) + C %subst(wrk:dsp+4) C enddo * Sostituisce nel comando il valore alla variabile Library C do *hival C clear dsp 3 0 C eval dsp = %scan('&lib': wrk) C if dsp = *zero C leave C endif C eval wrk = %subst(wrk:1:dsp-1) + C %trim(lib) + C %subst(wrk:dsp+4) C enddo * Sostituisce nel comando il valore alla variabile FileText C do *hival C clear dsp 3 0 C eval dsp = %scan('&ftx': wrk) C if dsp = *zero C leave C endif C eval wrk = %subst(wrk:1:dsp-1) + C %trim(ftx) + C %subst(wrk:dsp+4) C enddo * Sostituisce nel comando il valore alla variabile MemberText C do *hival C clear dsp 3 0 C eval dsp = %scan('&mtx': wrk) C if dsp = *zero C leave C endif C eval wrk = %subst(wrk:1:dsp-1) + C %trim(mtx) + C %subst(wrk:dsp+4) C enddo * Sostituisce nel comando il valore alla variabile SourceType C do *hival C clear dsp 3 0 C eval dsp = %scan('&sty': wrk) C if dsp = *zero C leave C endif C eval wrk = %subst(wrk:1:dsp-1) + C %trim(sty) + C %subst(wrk:dsp+4) C enddo * Sostituisce nel comando il valore alla variabile NewLibrary C do *hival C clear dsp 3 0 C eval dsp = %scan('&nwl': wrk) C if dsp = *zero C leave C endif C eval wrk = %subst(wrk:1:dsp-1) + C %trim(nwl) + C %subst(wrk:dsp+4) C enddo * Sostituisce nel comando il valore alla variabile SystemName C do *hival C clear dsp 3 0 C eval dsp = %scan('&sys': wrk) C if dsp = *zero C leave C endif C eval wrk = %subst(wrk:1:dsp-1) + C %trim(sys) + C %subst(wrk:dsp+4) C enddo * Sostituisce nel comando il valore alla variabile Time C do *hival C clear dsp 3 0 C eval dsp = %scan('&tim': wrk) C if dsp = *zero C leave C endif C eval wrk = %subst(wrk:1:dsp-1) + C %trim(tim) + C %subst(wrk:dsp+4) C enddo * Sostituisce nel comando il valore alla variabile Comment C do *hival C clear dsp 3 0 C eval dsp = %scan('&cmt': wrk) C if dsp = *zero C leave C endif C eval wrk = %subst(wrk:1:dsp-1) + C %trim(cmt) + C %subst(wrk:dsp+4) C enddo * Sostituisce nel comando il valore alla variabile NewLibTxt C do *hival C clear dsp 3 0 C eval dsp = %scan('&nlt': wrk) C if dsp = *zero C leave C endif C eval wrk = %subst(wrk:1:dsp-1) + C %trim(nlt) + C %subst(wrk:dsp+4) C enddo * Accomoda i commenti CL. C eval sin = %trim(wrk) C evalr dex = %trim(wrk) C movel(p) sin sin2 C move(p) dex dex2 C if sin2 = '/*' and C dex2 = '*/' C move ' ' dex C eval sin = %trim(dex) C if %subst(sin:79)=*blank C eval wrk = %subst(sin:1:78) + '*/' C endif C endif C endsr *--------------------------------------------------------------------------------------------- * Inizializza. C *inzsr begsr * Mette la costante giusta nell'elemento di schiera destinato * a contenere //ENDSRC poiche' scritto in schiera come gli altrei * comandi disturberebbe il confinamento del sorgente corrente * nella stringa web dell'applicazione stessa. C eval end(1)='//ENDSRC' C endsr *--------------------------------------------------------------------------------------------- * Scrive il comando nella stringa. Ojwebs e add O wrk 112 *--------------------------------------------------------------------------------------------- ** bch Batch Job //BCHJOB JOB(&fil) JOBD(&nwl/&nwl) OUTQ(QPRINT) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) CCSID(280) /* &cmt */ /* LA JOB DESCRIPTION "&nwl/&nwl" DEVE PREESISTERE. PUO' ESSERE */ /* IDENTICA A QBATCH E PUO' ESSERE SOSTITUITA DA QBATCH O SIMILE. */ /* From System: "&sys" */ /* From Library: "&lib" */ /* Unload Time: &tim */ /* To File : "&fil" */ /* To Library : "&nwl" */ /* To Text : "&ftx" */ /********* 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(&nwl/STRINGHE) RCDLEN(112) */ /* 2) SPOSTARE IL FILE "&fil.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:\&fil.txt" "/qsys.lib/&nwl.lib/stringhe.file/&fil.mbr" */ /* 6) ABBANDONARE FTP: */ /* quit */ /* 7) DA UN VIDEO COMANDI DELL'AS400 RICEVENTE */ /* ESEGUIRE LA STRINGA COPIATA NEL MEMBRO SORGENTE: */ /* SBMDBJOB FILE(&nwl/STRINGHE) MBR(&fil) 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 "&nwl/&fil" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(&nwl/&fil) MBR(&fil.) JOBQ(QBATCH) */ /********* FINE ISTRUZIONI ****************************************************/ ** crt /* Crea la libreria. */ MKDIR DIR('/qsys.lib/&nwl.lib') CHGLIB LIB(&nwl) TEXT('&nlt') /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP &nwl QGPL) /* Crea il file sorgente. */ DLTF FILE(&nwl/&fil) CRTSRCPF FILE(&nwl/&fil) RCDLEN(112) + TEXT('&ftx') ** cpy /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(&mbr) TOFILE(&nwl/&fil) + TOMBR(&mbr) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(&nwl/&fil) MBR(&mbr) + SRCTYPE(&sty) + TEXT('&mtx') ** beg Inizio sorgente. /*----------------------------------------------------------------------------*/ //DATA FILE(&mbr) FILETYPE(*SRC) ENDCHAR('//ENDSRC') ** end Fine sorgente. L'elemento corrente e' riempito nella routine di inizializzazione. ** bce End Batch Job. //ENDBCHJOB //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JWEBX) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /TITLE Web Stream. Transcribe CL Stream * Trascrive un sorgente CL nella striga web. * Claudio Neroni 05/07/2008 Creato. *--------------------------------------------------------------------------------------------- * Sorgente da trasformare. Fclsrc ip f 112 disk * Stringa web che riceve il sorgente trasformato. Fjwebs o f 112 disk *--------------------------------------------------------------------------------------------- * Lunghezza del campo dati. D dtalen c %len(dta) * Copie del campo dati. D wrk ds D wrk1 like(dta) D wrk2 like(dta) *--------------------------------------------------------------------------------------------- * Sorgente da trasformare. Iclsrc no I 13 112 dta *--------------------------------------------------------------------------------------------- * Trascrive i dati. C eval wrk = dta * Trasforma i dati della riga sorgente. C exsr tras * Se la trasformazione ha sfondato la lunghezza dei dati, * restituisce errore. C if wrk2 <> *blank C movel *on err C endif * Scrive la riga dati trasformata nella stringa di emissione. C except add *--------------------------------------------------------------------------------------------- * Trasforma i dati della riga sorgente. C tras begsr * Cerca e sostituisce prima variabile di ricerca * con variabile di sostituzione corrispondente. C z-add 1 start 3 0 C do *hival C clear dsp 3 0 C eval dsp = %scan(%trim(lib1): wrk: start) C if dsp = *zero C leave C endif C eval wrk = %subst(wrk:1:dsp-1) + C %trim(new1) + C %subst(wrk:dsp+lib1l) C eval start = dsp + new1l C if start > dtalen-lib1l+1 C leave C endif C enddo * Cerca e sostituisce seconda variabile di ricerca * con variabile di sostituzione corrispondente. C z-add 1 start 3 0 C do *hival C clear dsp 3 0 C eval dsp = %scan(%trim(lib2): wrk: start) C if dsp = *zero C leave C endif C eval wrk = %subst(wrk:1:dsp-1) + C %trim(new2) + C %subst(wrk:dsp+lib2l) C eval start = dsp + new2l C if start > dtalen-lib2l+1 C leave C endif C enddo * Cerca e sostituisce terza variabile di ricerca * con variabile di sostituzione corrispondente. C z-add 1 start 3 0 C do *hival C clear dsp 3 0 C eval dsp = %scan(%trim(lib3): wrk: start) C if dsp = *zero C leave C endif C eval wrk = %subst(wrk:1:dsp-1) + C %trim(new3) + C %subst(wrk:dsp+lib3l) C eval start = dsp + new3l C if start > dtalen-lib3l+1 C leave C endif C enddo C endsr *--------------------------------------------------------------------------------------------- * Inizializza. C *inzsr begsr * Riceve vecchia e nuova libreria. C *entry plist C parm lib 10 I Library C parm new 10 I New library C parm err 1 O Error * Pulisce i parametri di ritorno. C clear err * Prepara la vecchia libreria come variabile di ricerca * aggiungendo parentesi aperta prima e chiusa dopo. C clear lib1 12 C clear lib1l 3 0 C eval lib1 = '(' + %trim(lib) + ')' C eval lib1l= %len(%trim(lib1)) * Prepara la nuova libreria come corrispondente variabile di sostituzione * aggiungendo parentesi aperta prima e chiusa dopo. C clear new1 12 C clear new1l 3 0 C eval new1 = '(' + %trim(new) + ')' C eval new1l= %len(%trim(new1)) * Prepara la vecchia libreria come variabile di ricerca * aggiungendo parentesi aperta prima e barra dopo. C clear lib2 12 C clear lib2l 3 0 C eval lib2 = '(' + %trim(lib) + '/' C eval lib2l= %len(%trim(lib2)) * Prepara la nuova libreria come corrispondente variabile di sostituzione * aggiungendo parentesi aperta prima e barra dopo. C clear new2 12 C clear new2l 3 0 C eval new2 = '(' + %trim(new) + '/' C eval new2l= %len(%trim(new2)) * Prepara la vecchia libreria come variabile di ricerca * aggiungendo barra prima e parentesi chiusa dopo. C clear lib3 12 C clear lib3l 3 0 C eval lib3 = '/' + %trim(lib) + ')' C eval lib3l= %len(%trim(lib3)) * Prepara la nuova libreria come corrispondente variabile di sostituzione * aggiungendo barra prima e parentesi chiusa dopo. C clear new3 12 C clear new3l 3 0 C eval new3 = '/' + %trim(new) + ')' C eval new3l= %len(%trim(new3)) C endsr *--------------------------------------------------------------------------------------------- * Scrive la riga dati trasformata nella stringa web. Ojwebs e add O wrk1 112 *--------------------------------------------------------------------------------------------- //ENDSRC //ENDBCHJOB