//BCHJOB JOB(JGOTO) JOBD(QBATCH) OUTQ(QPRINT) ENDSEV(60) + LOG(4 00 *SECLVL) MSGQ(*USRPRF) /* Open source scaricabile da www.neroni.it di Claudio Neroni */ /* SE L'USO DELLA JOB DESCRIPTION "QBATCH" TI E' IMPEDITO, */ /* UTILIZZANE UNA DIVERSA. */ /* From System: "IUBICSVI" */ /* From Library: "UTI" */ /* Unload Time: 2008-11-24 10:50 */ /* To File : "JGOTO" */ /* To Library : "NERONI2" */ /* To Text : "Stream goto. 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 "JGOTO.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:\JGOTO.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JGOTO.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(JGOTO) 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/JGOTO" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JGOTO) MBR(JGOTO.) 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/JGOTO) CRTSRCPF FILE(NERONI2/JGOTO) RCDLEN(112) + TEXT('Stream goto. Src') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JGOTO) TOFILE(NERONI2/JGOTO) + TOMBR(JGOTO) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JGOTO) MBR(JGOTO) + SRCTYPE(CMD) + TEXT('Stream goto. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JGOTO.) TOFILE(NERONI2/JGOTO) + TOMBR(JGOTO.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JGOTO) MBR(JGOTO.) + SRCTYPE(CL) + TEXT('Stream goto. CrtJs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JGOTOC) TOFILE(NERONI2/JGOTO) + TOMBR(JGOTOC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JGOTO) MBR(JGOTOC) + SRCTYPE(CLLE) + TEXT('Stream goto. Cpp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JGOTOP) TOFILE(NERONI2/JGOTO) + TOMBR(JGOTOP) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JGOTO) MBR(JGOTOP) + SRCTYPE(PNLGRP) + TEXT('Stream goto. Help') /*---------------------------------------------------------------------*/ //DATA FILE(JGOTO) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Stream goto. Cmd */ /* Claudio Neroni 15/12/1986 Creato. */ CMD PROMPT('Stream goto') PARM KWD(LABEL) TYPE(*NAME) MIN(1) + PROMPT('Label') //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JGOTO.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JGOTO.) JOBD(QBATCH) OUTQ(QPRINTS) ENDSEV(60) LOG(4 + 00 *SECLVL) MSGQ(*USRPRF) /* Claudio Neroni 15/12/1986 Creato. */ /* JGOTO */ /* Stream goto. */ /* Prerequisiti: nessuno. */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella gli oggetti preesistenti. */ DLTCMD CMD(NERONI2/JGOTO) DLTPNLGRP PNLGRP(NERONI2/JGOTOP) DLTPGM PGM(NERONI2/JGOTOC) /* Crea gli oggetti. */ CRTBNDCL PGM(NERONI2/JGOTOC) SRCFILE(JGOTO) DBGVIEW(*ALL) CRTPNLGRP PNLGRP(NERONI2/JGOTOP) SRCFILE(JGOTO) CRTCMD CMD(NERONI2/JGOTO) PGM(JGOTOC) SRCFILE(JGOTO) + HLPPNLGRP(JGOTOP) HLPID(CMD) PRDLIB(NERONI2) //ENDBCHJOB //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JGOTOC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Stream goto. Cpp */ /* Claudio Neroni 15/12/1986 Creato. */ PGM PARM(&LABEL) DCL VAR(&LABEL) TYPE(*CHAR) LEN(10) DCL VAR(&CMDNAME) TYPE(*CHAR) LEN(10) DCL VAR(&LABELONCMD) TYPE(*CHAR) LEN(11) DCL VAR(&LABEL2) TYPE(*CHAR) LEN(11) DCL VAR(&MSG) TYPE(*CHAR) LEN(80) DCL VAR(&X) TYPE(*DEC) LEN(3 0) DCL VAR(&XX) TYPE(*DEC) LEN(3 0) CHGVAR VAR(&LABEL2) VALUE(&LABEL *TCAT ')') RCVMSG: RCVMSG PGMQ(*EXT) MSGTYPE(*RQS) RMV(*NO) MSG(&MSG) MONMSG MSGID(CPF2415) EXEC(DO) SNDPGMMSG MSG('L''etichetta' *BCAT &LABEL *BCAT 'non + esiste tra le richieste pendenti.') GOTO CMDLBL(RETURN) ENDDO SNDPGMMSG MSG('Richiesta saltata.') CHGVAR VAR(&CMDNAME) VALUE(%SST(&MSG 1 10)) IF COND(&CMDNAME *NE JLABEL) THEN(GOTO + CMDLBL(RCVMSG)) CHGVAR VAR(&LABELONCMD) VALUE(%SST(&MSG 18 10) *CAT + ')') CHGVAR VAR(&X) VALUE(0) CLR: CHGVAR VAR(&X) VALUE(&X + 1) IF COND(&X *GE 11) THEN(GOTO CMDLBL(CLREND)) IF COND(%SST(&LABELONCMD &X 1) *EQ ')') THEN(DO) CHGVAR VAR(&XX) VALUE(12 - &X) CHGVAR VAR(%SST(&LABELONCMD &X &XX)) VALUE(')') GOTO CMDLBL(CLREND) ENDDO GOTO CMDLBL(CLR) CLREND: IF COND(&LABELONCMD *NE &LABEL2) THEN(GOTO + CMDLBL(RCVMSG)) SNDPGMMSG MSG('Etichetta' *BCAT &LABEL *BCAT 'trovata.') RETURN: RETURN ENDPGM //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JGOTOP) FILETYPE(*SRC) ENDCHAR('//ENDSRC') :PNLGRP. .*--------------------------------------------------------------------- :HELP NAME=CMD. :H3.Comando JGOTO :H2.Salta ad etichetta in stringa. :P.Il comando, usato in una stringa comandi per lavori a blocchi, permette di saltare l'esecuzione dei comandi successivi al JGOTO stesso. :NOTE.Il salto è eseguibile solo verso etichette successive e non verso etichette precedenti. :ENOTE. :P.La normale esecuzione dei comandi della stringa viene ripristinata dal ritrovamento lungo la stringa di una istruzione JLABEL contenente la stessa etichetta menzionata nel JGOTO. :P.Il comando JLABEL deve avere l'esatta forma fornita dal passaggio attraverso il prompter chiamato da un seu con controllo di sintassi CL (Control Language Stream). :P.Se il comando JLABEL non viene riconosciuto o non è presente, nessun comando della stringa viene più eseguito. :P.L'esecuzione del comando JGOTO non è indicata in un lavoro interattivo perché neutralizza la capacità dell'esecutore comandi (QCMD) non solo di smaltire le richieste a venire ma persino di usare il prompter nella composizione dei successivi comandi interattivi. :P.Gli esempi seguenti evidenziano coppie JGOTO-JLABEL. La forma del JGOTO è libera. La forma del JLABEL è rigorosa: maiuscolo, spazi, parola chiave, parentesi. :XMP. *...+....1....+....2....+....3 JGOTO LABEL(OLTRE) JLABEL LABEL(OLTRE) *...+....1....+....2....+....3 Jgoto vaivia JLABEL LABEL(VAIVIA) *...+....1....+....2....+....3 JGoto (Tram_23) JLABEL LABEL(TRAM_23) :EXMP. :EHELP. .*--------------------------------------------------------------------- :HELP name='CMD/label'. :H3.Label (LABEL) :P.Etichetta alla quale saltare evitando l'esecuzione di tutti i comandi intermedi presenti nella stringa del lavoro. :P.Valori permessi: :PARML. :PT.etichetta :PD.Il valore è un nome ed è obbligatorio. :EPARML. :EHELP. .*--------------------------------------------------------------------- :EPNLGRP. //ENDSRC //ENDBCHJOB