//BCHJOB JOB(JRTVENV) 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-08-23 11:50 */ /* To File : "JRTVENV" */ /* To Library : "NERONI2" */ /* To Text : "Retrieve Environment Var. Src by Vengoal Chang" */ /********* 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 "JRTVENV.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:\JRTVENV.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JRTVENV.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(JRTVENV) 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/JRTVENV" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JRTVENV) MBR(JRTVENV.) 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/JRTVENV) CRTSRCPF FILE(NERONI2/JRTVENV) RCDLEN(112) + TEXT('Retrieve Environment Var. Src by Vengoal Chang') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JRTVENV) TOFILE(NERONI2/JRTVENV) + TOMBR(JRTVENV) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JRTVENV) MBR(JRTVENV) + SRCTYPE(CMD) + TEXT('Retrieve Environment Var. Cmd Vengoal Chang') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JRTVENV.) TOFILE(NERONI2/JRTVENV) + TOMBR(JRTVENV.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JRTVENV) MBR(JRTVENV.) + SRCTYPE(CL) + TEXT('Retrieve Environment Var. CrtJs Vengoal Chang') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JRTVENVC) TOFILE(NERONI2/JRTVENV) + TOMBR(JRTVENVC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JRTVENV) MBR(JRTVENVC) + SRCTYPE(RPGLE) + TEXT('Retrieve Environment Var. Cpp Vengoal Chang') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JRTVENVO) TOFILE(NERONI2/JRTVENV) + TOMBR(JRTVENVO) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JRTVENV) MBR(JRTVENVO) + SRCTYPE(TXT) + TEXT('Retrieve Environment Var. Original Vengoal Chang') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JRTVENVP) TOFILE(NERONI2/JRTVENV) + TOMBR(JRTVENVP) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JRTVENV) MBR(JRTVENVP) + SRCTYPE(PNLGRP) + TEXT('Retrieve Environment Var. Help Vengoal Chang') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JRTVENVT) TOFILE(NERONI2/JRTVENV) + TOMBR(JRTVENVT) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JRTVENV) MBR(JRTVENVT) + SRCTYPE(CMD) + TEXT('Retrieve Environment Var Test. Cmd Vengoal Chang') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JRTVENVTC) TOFILE(NERONI2/JRTVENV) + TOMBR(JRTVENVTC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JRTVENV) MBR(JRTVENVTC) + SRCTYPE(CLLE) + TEXT('Retrieve Environment Var Test. Cpp Vengoal Chang') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JRTVENVTP) TOFILE(NERONI2/JRTVENV) + TOMBR(JRTVENVTP) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JRTVENV) MBR(JRTVENVTP) + SRCTYPE(PNLGRP) + TEXT('Retrieve Environment Var Test. Help Vengoal Chang') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JRTVENV1) TOFILE(NERONI2/JRTVENV) + TOMBR(JRTVENV1) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JRTVENV) MBR(JRTVENV1) + SRCTYPE(CMD) + TEXT('Retrieve Environment Var. CozziCmd Bob Cozzi') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JRTVENV1.) TOFILE(NERONI2/JRTVENV) + TOMBR(JRTVENV1.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JRTVENV) MBR(JRTVENV1.) + SRCTYPE(CL) + TEXT('Retrieve Environment Var. CozziCrtJs Bob Cozzi') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JRTVENV1C) TOFILE(NERONI2/JRTVENV) + TOMBR(JRTVENV1C) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JRTVENV) MBR(JRTVENV1C) + SRCTYPE(RPGLE) + TEXT('Retrieve Environment Var. CozziCpp Bob Cozzi') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JRTVENV1T) TOFILE(NERONI2/JRTVENV) + TOMBR(JRTVENV1T) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JRTVENV) MBR(JRTVENV1T) + SRCTYPE(CLLE) + TEXT('Retrieve Environment Var. CozziTest Bob Cozzi') /*----------------------------------------------------------------------------*/ //DATA FILE(JRTVENV) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Vengoal Chang 15-02-2008 Pubblicato */ /* su http://code.midrange.com/759f4f422d.html */ /* in data 15/02/2008 02:16:21 */ CMD PROMPT('Retrieve Environment Variable') PARM KWD(ENVVAR) TYPE(*CHAR) LEN(256) MIN(1) + EXPR(*YES) INLPMTLEN(17) + PROMPT('Environment variable') PARM KWD(RTNVAL) TYPE(*CHAR) LEN(1) RTNVAL(*YES) + VARY(*YES) PROMPT('Return value Var + 1-1024 char') PARM KWD(LEVEL) TYPE(*CHAR) LEN(4) RSTD(*YES) + DFT(*JOB) SPCVAL((*JOB) (*SYS)) + PROMPT('Level') //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JRTVENV.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JRTVENV.) JOBD(NERONI2/NERONI2) OUTQ(QPRINTS) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) CCSID(280) jmy /* Vengoal Chang 15-02-2008 Pubblicato */ /* su http://code.midrange.com/759f4f422d.html */ /* in data 15/02/2008 02:16:21 */ /* JRTVENV */ /* Retrieve Environment Variable. CrtJs */ /* "Command RTVENVVAR with API Qp0zGetEnv, Qp0zGetSysEnv" */ /* Prerequisiti: none */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella il file messaggi preesistente. */ DLTMSGF MSGF(NERONI2/JRTVENV) /* Cancella i testi d'aiuto preesistenti. */ DLTPNLGRP PNLGRP(NERONI2/JRTVENVP) DLTPNLGRP PNLGRP(NERONI2/JRTVENVTP) /* Cancella i logici preesistenti. */ /* Cancella i fisici preesistenti. */ /* Cancella i comandi preesistenti. */ DLTCMD CMD(NERONI2/JRTVENV) DLTCMD CMD(NERONI2/JRTVENVT) /* Cancella i programmi preesistenti. */ DLTPGM PGM(NERONI2/JRTVENVC) DLTPGM PGM(NERONI2/JRTVENVTC) /* Crea i file fisici. */ /* Crea i file logici. */ /* Crea i comandi. */ CRTCMD CMD(NERONI2/JRTVENV) PGM(JRTVENVC) SRCFILE(JRTVENV) + ALLOW(*IPGM *BPGM) HLPPNLGRP(JRTVENVP) HLPID(CMD) + PRDLIB(NERONI2) CRTCMD CMD(NERONI2/JRTVENVT) PGM(JRTVENVTC) SRCFILE(JRTVENV) + HLPPNLGRP(JRTVENVTP) HLPID(CMD) PRDLIB(NERONI2) /* Duplica i comandi in QGPL. */ CRTPRXCMD CMD(QGPL/JRTVENV) TGTCMD(NERONI2/JRTVENV) AUT(*USE) + REPLACE(*YES) CRTPRXCMD CMD(QGPL/JRTVENVT) TGTCMD(NERONI2/JRTVENVT) AUT(*USE) + REPLACE(*YES) /* Crea i programmi. */ CRTBNDRPG PGM(NERONI2/JRTVENVC) SRCFILE(JRTVENV) DBGVIEW(*ALL) + TGTRLS(*CURRENT) CRTBNDCL PGM(NERONI2/JRTVENVTC) SRCFILE(JRTVENV) TGTRLS(*CURRENT) + DBGVIEW(*ALL) /* Crea il file messaggi. */ CRTMSGF MSGF(NERONI2/JRTVENV) TEXT('Retrieve Environment Var. Msgf') /* Fotografia comandi (xxxA001). */ /* Messaggi comuni a pgm di comandi diversi (xxx0001). */ ADDMSGD MSGID(JEV0000) MSGF(NERONI2/JRTVENV) MSG('File vuoto') /* Messaggi nei pgm del Cmd 1 (xxx0101). */ /* Messaggi nei pgm del Cmd 2 (xxx0201). */ /* Messaggi dei Cmd (xxx1001). */ /* Crea i testi d'aiuto. */ CRTPNLGRP PNLGRP(NERONI2/JRTVENVP) SRCFILE(JRTVENV) CRTPNLGRP PNLGRP(NERONI2/JRTVENVTP) SRCFILE(JRTVENV) //ENDBCHJOB //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JRTVENVC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Vengoal Chang 15-02-2008 Pubblicato * su http://code.midrange.com/759f4f422d.html * in data 15/02/2008 02:16:21 CN01 * Claudio Neroni 10-04-2016 Modificato CN01 * Modificati nomi per adeguarli a quello con il quale ho compilato. CN01 * Si osserva che nei comandi ADDENVVAR e CHGENVVAR originali: CN01 * 1) il nome della variabile di ambiente, CN01 * qui apparentemente fino a 256 caratteri, CN01 * in realta' e' previsto solo fino a 128; CN01 * 2) la lunghezza della variabile di ritorno, CN01 * qui apparentemente fino a 32766 caratteri, CN01 * in realta' e' previsto solo fino a 1024. H Debug H OPTION(*NODEBUGIO : *SRCSTMT) DFTACTGRP(*NO) BNDDIR('QC2LE') ************************************************************************** ** This program returns the environment variable's value. ** It is stuffed into the CL variable passed on the 2nd parm. ** CPP for RTVENVVAR CL command. ************************************************************************** ** Template definition used for 2nd parameter D CL_RTNVAR_T DS based(pNothing_T) QUALIFIED D nLen 5I 0 D Data 32766A CN01+ ** Program *ENTRY PList prototype CN01-D*RtvEnvVar PR CN01+D JRTVENVC PR D envvar 256A D rtnVar LIKEDS(CL_RTNVAR_T) D envlvl 4A CN01+ ** Program *ENTRY PList CN01-D*RtvEnvVar PI CN01+D JRTVENVC PI D envvar 256A D rtnVar LIKEDS(CL_RTNVAR_T) D envlvl 4A CN01+ ** Prototype for the "Get Env Var" API * Get job level env D Qp0zGetEnv PR * ExtProc('Qp0zGetEnv') D envvar * VALUE OPTIONS(*STRING) D nCCSID 10I 0 CN01+ ** Prototype for the "Get Sys Env Var" API * Get sys level env D Qp0zGetSysEnv PR 10I 0 ExtProc('Qp0zGetSysEnv') D envVarName * VALUE OPTIONS(*STRING) D rtnBuffer 65535A OPTIONS(*VARSIZE) D bufLen 10I 0 D nCCSID 10I 0 D reserved * OPTIONS(*OMIT) D rtnBuffer S 512A D pRtnBuffer S * Inz D pEnv S * Inz D bufLen S 10I 0 D nCCSID S 10I 0 Inz(0) D nRtn S 10I 0 Inz(0) C eval *INLR = *ON C if envlvl = '*JOB' ** Retrieve a pointer to the environment variable's value C eval pEnv = Qp0zGetEnv(%TRIMR(ENVVAR):nCCSID) ** If nothing came back, then the ENVVAR is bad, so return nothing. C if pEnv = *NULL CN01+C eval %subst(rtnVar.Data:1:bufLen) = *blank C return C endif ** Copy the environment variable to the return variable, ** being careful not to overstep the variable's length. C eval %subst(rtnVar.Data:1:rtnVar.nLen) = C %str(pEnv) C else C eval bufLen = %len(rtnBuffer) C eval nRtn = Qp0zGetSysEnv(%TRIMR(ENVVAR): C rtnBuffer : C bufLen : C nCCSID : C *OMIT) C if nRtn <> 0 C dump CN01+C eval %subst(rtnVar.Data:1:bufLen) = *blank C return C endif C eval rtnVar.nLen = bufLen C eval pRtnBuffer = %addr(rtnBuffer) C eval %subst(rtnVar.Data:1:bufLen) = C %str(pRtnBuffer) C endif C return //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JRTVENVO) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Vengoal Chang 15-02-2008 Pubblicato */ /* su http://code.midrange.com/759f4f422d.html */ /* in data 15/02/2008 02:16:21 */ ------------------------------------------------------------------------------- File : QRPGLESRC Member : RTVENVVAR Type : RPGLE Usage : CRTBNDRPG PGM(RTVENVVAR) TGTRLS(V5R1M0) H Debug H OPTION(*NODEBUGIO : *SRCSTMT) DFTACTGRP(*NO) BNDDIR('QC2LE') ************************************************************************** ** This program returns the environment variable's value. ** It is stuffed into the CL variable passed on the 2nd parm. ** CPP for RTVENVVAR CL command. ************************************************************************** ** Template definition used for 2nd parameter D CL_RTNVAR_T DS based(pNothing_T) QUALIFIED D nLen 5I 0 D Data 32766A D RtvEnvVar PR D envvar 256A D rtnVar LIKEDS(CL_RTNVAR_T) D envlvl 4A D RtvEnvVar PI D envvar 256A D rtnVar LIKEDS(CL_RTNVAR_T) D envlvl 4A * Get job level env D Qp0zGetEnv PR * ExtProc('Qp0zGetEnv') D envvar * VALUE OPTIONS(*STRING) D nCCSID 10I 0 * Get sys level env D Qp0zGetSysEnv PR 10I 0 ExtProc('Qp0zGetSysEnv') D envVarName * VALUE OPTIONS(*STRING) D rtnBuffer 65535A OPTIONS(*VARSIZE) D bufLen 10I 0 D nCCSID 10I 0 D reserved * OPTIONS(*OMIT) D rtnBuffer S 512A D pRtnBuffer S * Inz D pEnv S * Inz D bufLen S 10I 0 D nCCSID S 10I 0 Inz(0) D nRtn S 10I 0 Inz(0) C eval *INLR = *ON C if envlvl = '*JOB' ** Retrieve a pointer to the environment variable's value C eval pEnv = Qp0zGetEnv(%TRIMR(ENVVAR):nCCSID) ** If nothing came back, then the ENVVAR is bad, so return nothing. C if pEnv = *NULL C return C endif ** Copy the environment variable to the return variable, ** being careful not to overstep the variable's length. C eval %subst(rtnVar.Data:1:rtnVar.nLen) = C %str(pEnv) C else C eval bufLen = %len(rtnBuffer) C eval nRtn = Qp0zGetSysEnv(%TRIMR(ENVVAR): C rtnBuffer : C bufLen : C nCCSID : C *OMIT) C if nRtn <> 0 C dump C return C endif C eval rtnVar.nLen = bufLen C eval pRtnBuffer = %addr(rtnBuffer) C eval %subst(rtnVar.Data:1:bufLen) = C %str(pRtnBuffer) C endif C return File : QCMDSRC Member : RTVENVVAR Type : CMD Usage : CRTCMD CMD(your-lib/RTVENVVAR) PGM(your-lib/RTVENVVAR) ALLOW(*IPGM *BPGM) RTVENVVAR: CMD PROMPT('Retrieve Environment Variable') /* Command processing program is RTVENVVAR */ PARM KWD(ENVVAR) TYPE(*CHAR) LEN(256) MIN(1) + EXPR(*YES) INLPMTLEN(17) + PROMPT('Environment variable') PARM KWD(RTNVAL) TYPE(*CHAR) LEN(1) RTNVAL(*YES) + VARY(*YES) CHOICE('Environment var return + value') PROMPT('CL Var. for return value') PARM KWD(LEVEL) TYPE(*CHAR) LEN(4) RSTD(*YES) + DFT(*JOB) SPCVAL((*JOB) (*SYS)) + EXPR(*YES) PMTCTL(*PMTRQS) PROMPT('Level') File : QCLSRC Member : RTVENVVARC Type : CLP Usage : CRTCLPGM RTVENVVARC CALL RTVENVVARC /* Before you run the program run following command to set sample */ /* environment variable for testing: */ /* ADDENVVAR ENVVAR(JOBCLASSPATH) VALUE('.:/java') */ /* ADDENVVAR ENVVAR(SYSCLASSPATH) VALUE('.:/system') LEVEL(*SYS) */ /* After you run the program run following command to reset ENVVAR */ /* RMVENVVAR ENVVAR(JOBCLASSPATH) */ /* RMVENVVAR ENVVAR(SYSCLASSPATH) LEVEL(*SYS) */ /* You can browse spooled file QPPGMDMP under current job for job */ /* and system level value same as we set above */ PGM DCL &SYSPATH *CHAR 32 DCL &JOBPATH *CHAR 32 RTVENVVAR ENVVAR(JOBCLASSPATH) RTNVAL(&JOBPATH) RTVENVVAR ENVVAR(SYSCLASSPATH) RTNVAL(&SYSPATH) + LEVEL(*SYS) DMPCLPGM ENDPGM //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JRTVENVP) FILETYPE(*SRC) ENDCHAR('//ENDSRC') :PNLGRP. .*------------------------------------------------------------------------------ :HELP NAME=CMD. :H3.Comando JRTVENV :H2.Retrieve Environment Variable :P.Recupera una variabile di ambiente. :P.Rimedia all'assenza di un comando ufficiale IBM per il recupero delle variabili di ambiente usando le API predisposte. :P.Pubblicato dall'autore Vengoal Chang in data 15/02/2008 al link http://code.midrange.com/759f4f422d.html :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/envvar'. :H3.Environment variable (ENVVAR) :P.Riceve il nome della variabile di cui si vuole recuperare il valore. :P.Il valore e' obbligatorio. :P.Valori permessi: :PARML. :PT.stringa caratteri :PD.Nome della variabile di ambiente. :P.Il nome della variabile di ambiente e' limitato ad una lunghezza massima di 128 byte. I valori validi comprendono tutti i caratteri EBCDIC ad eccezione del segno di uguale (=), del segno di terminazione nullo (X'00') e dello spazio vuoto (X'40'). Se contiene caratteri alfanumerici il nome deve essere racchiuso tra apici. Se un apice e' gia' previsto, devono essere utilizzati i doppi apici (''). :P.Il nome della variabile e' sensibile a maiuscole e minuscole. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/rtnval'. :H3.Return value (ClearAnte) Var (RTNVAL) :P.Variabile di ritorno di tipo carattere adatta a contenere la variabile di ambiente. :P.Il chiamante del corrente comando deve definire una variabile di lunghezza adeguata da 1 a 1024 caratteri. :P.La variabile e' obbligatoria :P.Valori permessi: :PARML. :PT.Variabile di programma. :PD.Da dichiarare nel pgm chiamante di qualunque lunghezza sia adatta a contenere la variabile di ambiente. Si osserva che i comandi originali :HP2.ADDENVVAR:EHP2. e :HP2.CHGENVVAR:EHP2. permettono variabili di ambiente solo fino a 1024 caratteri. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/level'. :H3.Level (LEVEL) :P.Specifica il livello della variabile di ambiente. :P.Valori permessi: :PARML. :PT.:PK DEF.*JOB:EPK. :PD.E' richiesto il recupero della variabile di ambiente a livello di lavoro. :PT.*SYS :PD.E' richiesto il recupero della variabile di ambiente a livello di sistema. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP NAME='CMD/COMMAND/EXAMPLES'. :XH3.Esempi per JRTVENV :P.:HP2.Esempio 1: Chiamata di JRTVENV da programma CL.:EHP2. :P.Preparare nel job una variabile di ambiente da recuperare: :XMP. > ADDENVVAR ENVVAR(ProvaEnvVar) VALUE('Valore per il job') LEVEL(*JOB) Aggiunta variabile di ambiente. :EXMP. :P.All'interno del programma in Control Language, inserire le seguenti istruzioni: :XMP. Dichiarazione DCL VAR(&RTV) TYPE(*CHAR) LEN(1024) Recupero JRTVENV ENVVAR('ProvaEnvVar') RTNVAL(&RTV) LEVEL(*JOB) Utilizzo SNDPGMMSG MSG('*JOB:' *CAT &RTV) :EXMP. :P.Notare nel recupero gli apici di contorno al nome della variabile, necessari per conservare le minuscole. :P.:HP2.Esempio 2: Chiamata del comando JRTVENV dal comando di test JRTVENVT:EHP2. :P.Si rimanda all'help del comando :HP2.JRTVENVT:EHP2. "Retrieve Environment Var: Test" che riporta anche il sorgente Control Language del command processing program. :EHELP. .*------------------------------------------------------------------------------ :HELP NAME='CMD/ERROR/MESSAGES'. &MSG(CPX0005,QCPFMSG). JRTVENV - Help :XH3.&MSG(CPX0005,QCPFMSG). JRTVENV :P.:HP3.&MSG(CPX0006,QCPFMSG). *DIAG:EHP3. seguiti da :HP3.*ESCAPE CPF0001:EHP3. :P.Nessun messaggio previsto. :EHELP. .*------------------------------------------------------------------------------ :EPNLGRP. //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JRTVENVT) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Claudio Neroni 10-04-2016 Creato. */ /* Richiama il test del cmd JRTVENV. */ CMD PROMPT('Retrieve Environment Var: Test') PARM KWD(ENVVAR) TYPE(*CHAR) LEN(256) MIN(1) + EXPR(*YES) INLPMTLEN(17) + PROMPT('Environment variable') //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JRTVENVTC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Claudio Neroni 10-04-2016 Creato. */ /* Testa il cmd JRTVENV. */ PGM PARM(&VAR) DCL VAR(&VAR) TYPE(*CHAR) LEN(256) DCL VAR(&RTV) TYPE(*CHAR) LEN(1024) JRTVENV ENVVAR(&VAR) RTNVAL(&RTV) SNDPGMMSG MSG('*JOB:' *CAT &RTV) JRTVENV ENVVAR(&VAR) RTNVAL(&RTV) LEVEL(*SYS) SNDPGMMSG MSG('*SYS:' *CAT &RTV) ENDPGM //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JRTVENVTP) FILETYPE(*SRC) ENDCHAR('//ENDSRC') :PNLGRP. .*------------------------------------------------------------------------------ :HELP NAME=CMD. :H3.Comando JRTVENVT :H2.Retrieve Environment Var: Test :P.Testa il comando :HP2.JRTVENV:EHP2. che recupera una variabile di ambiente. :P.Riceve il nome di una variabile di ambiente e ne recupera e visualizza con due messaggi in log i valori sia del job che di sistema. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/envvar'. :H3.Environment variable (ENVVAR) :P.Riceve il nome della variabile di cui si vuole testare il recupero. :P.Il valore e' obbligatorio. :P.Valori permessi: :PARML. :PT.stringa caratteri :PD.Nome della variabile di ambiente. :P.Il nome della variabile di ambiente e' limitato ad una lunghezza massima di 128 byte. I valori validi comprendono tutti i caratteri EBCDIC ad eccezione del segno di uguale (=), del segno di terminazione nullo (X'00') e dello spazio vuoto (X'40'). Se contiene caratteri alfanumerici il nome deve essere racchiuso tra apici. Se un apice e' gia' previsto, devono essere utilizzati i doppi apici (''). :P.Il nome della variabile e' sensibile a maiuscole e minuscole. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP NAME='CMD/COMMAND/EXAMPLES'. :XH3.Esempi per JRTVENVT :P.:HP2.Esempio 1: Chiamata di JRTVENVT da video comandi.:EHP2. :P.Preparare sia nel job che nel sistema una variabile di ambiente da testare: :XMP. > ADDENVVAR ENVVAR(ProvaEnvVar) VALUE('Valore per il job') LEVEL(*JOB) Aggiunta variabile di ambiente. > ADDENVVAR ENVVAR(ProvaEnvVar) VALUE('Valore per il sistema') LEVEL(*SYS) Aggiunta variabile di ambiente. :EXMP. :P.Chiamare l'esecuzione del comando JRTVENVT dal video comandi. Notare gli apici di contorno al nome della variabile, necessari per conservare le minuscole. Si ottiene il sequente log: :XMP. > JRTVENVT ENVVAR('ProvaEnvVar') *JOB:Valore per il job *SYS:Valore per il sistema :EXMP. :P.Per completezza, si riporta il sorgente del programma di test: :XMP. PGM PARM(&VAR) DCL VAR(&VAR) TYPE(*CHAR) LEN(256) DCL VAR(&RTV) TYPE(*CHAR) LEN(1024) JRTVENV ENVVAR(&VAR) RTNVAL(&RTV) SNDPGMMSG MSG('*JOB:' *CAT &RTV) JRTVENV ENVVAR(&VAR) RTNVAL(&RTV) LEVEL(*SYS) SNDPGMMSG MSG('*SYS:' *CAT &RTV) ENDPGM :EXMP. :EHELP. .*------------------------------------------------------------------------------ :HELP NAME='CMD/ERROR/MESSAGES'. &MSG(CPX0005,QCPFMSG). JRTVENVT - Help :XH3.&MSG(CPX0005,QCPFMSG). JRTVENVT :P.:HP3.&MSG(CPX0006,QCPFMSG). *DIAG:EHP3. seguiti da :HP3.*ESCAPE CPF0001:EHP3. :P.Nessun messaggio previsto. :EHELP. .*------------------------------------------------------------------------------ :EPNLGRP. //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JRTVENV1) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Robert Cozzi 05-04-2005 Pubblicato su */ /* http://www.mcpressonline.com/programming/rpg/what-is-the-environment.html */ /* in data 05/04/2005 18:00 */ /* Command processing program is JRTVENV1 */ CMD PROMPT('Retrieve Environment Variable') PARM KWD(ENVVAR) TYPE(*CHAR) LEN(256) MIN(1) + EXPR(*YES) INLPMTLEN(17) + PROMPT('Environment variable') PARM KWD(RTNVAL) TYPE(*CHAR) LEN(1) RTNVAL(*YES) + VARY(*YES) CHOICE('Environment var return + value') PROMPT('CL Var. for return value') //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JRTVENV1.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JRTVENV1.) JOBD(NERONI2/NERONI2) OUTQ(QPRINTS) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) /* Robert Cozzi 05-04-2005 Pubblicato su */ /* http://www.mcpressonline.com/programming/rpg/what-is-the-environment.html */ /* in data 05/04/2005 18:00 */ /* JRTVENV1 */ /* Retrieve Environment Variable. CrtJs */ jmy /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella il file messaggi preesistente. */ /* Cancella i testi d'aiuto preesistenti. */ /* Cancella i logici preesistenti. */ /* Cancella i fisici preesistenti. */ /* Cancella i comandi preesistenti. */ DLTCMD CMD(NERONI2/JRTVENV1) /* Cancella i programmi preesistenti. */ DLTPGM PGM(NERONI2/JRTVENV1) DLTPGM PGM(NERONI2/JRTVENV1T) /* Crea i file fisici. */ /* Crea i file logici. */ /* Crea i comandi. */ CRTCMD CMD(NERONI2/JRTVENV1) PGM(JRTVENV1) SRCFILE(JRTVENV) + ALLOW(*IPGM *BPGM) PRDLIB(NERONI2) /* Duplica i comandi in QGPL. */ CRTPRXCMD CMD(QGPL/JRTVENV1) TGTCMD(NERONI2/JRTVENV1) AUT(*USE) + REPLACE(*YES) /* Crea i programmi. */ CRTBNDRPG PGM(NERONI2/JRTVENV1) SRCFILE(JRTVENV) + SRCMBR(JRTVENV1C) DBGVIEW(*ALL) TGTRLS(*CURRENT) CRTBNDCL PGM(NERONI2/JRTVENV1T) SRCFILE(JRTVENV) TGTRLS(*CURRENT) + DBGVIEW(*ALL) /* Crea il file messaggi. */ /* 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). */ /* Crea i testi d'aiuto. */ //ENDBCHJOB //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JRTVENV1C) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Robert Cozzi 05-04-2005 Pubblicato su * http://www.mcpressonline.com/programming/rpg/what-is-the-environment.html * in data 05/04/2005 18:00 H OPTION(*NODEBUGIO : *SRCSTMT) DFTACTGRP(*NO) BNDDIR('QC2LE') ************************************************************** ** This program returns the environment variable's value. ** It is stuffed into the CL variable passed on the 2nd parm. ** (c) Copyright 2005 Robert Cozzi, Jr. All rights reserved. ************************************************************** ** Template definition used for 2nd parameter D CL_RTNVAR_T DS based(pNothing_T) QUALIFIED D nLen 5I 0 D Data 32766A ** Program *ENTRY PList prototype CN01 D JRTVENV1 PR D envvar 256A D rtnVar LIKEDS(CL_RTNVAR_T) ** Program *ENTRY PList CN01 D JRTVENV1 PI D envvar 256A D rtnVar LIKEDS(CL_RTNVAR_T) ** Prototype for the "Get Env Var" API D Qp0zGetEnv PR * ExtProc('Qp0zGetEnv') D envvar * VALUE OPTIONS(*STRING) D nCCSID 10I 0 D pEnv S * Inz D nCCSID S 10I 0 Inz(0) C eval *INLR = *ON ** Retrieve a pointer to the environment variable's value C eval pEnv = Qp0zGetEnv(%TRIMR(ENVVAR):nCCSID) ** If nothing comes back, then ** the ENVVAR is bad, so return nothing. C if pEnv = *NULL C return C endif ** Copy the environment variable to the return variable, ** being careful not to overstep the variable's length. C eval %subst(rtnVar.Data:1:rtnVar.nLen) C = %str(pEnv) C return //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JRTVENV1T) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Claudio Neroni 10-04-2016 Creato. */ /* Richiama il test del cmd JRTVENV1. */ PGM PARM(&VAR) DCL VAR(&VAR) TYPE(*CHAR) LEN(30) DCL VAR(&RTV) TYPE(*CHAR) LEN(500) JRTVENV1 ENVVAR(&VAR) RTNVAL(&RTV) SNDPGMMSG MSG('*JOB:' *CAT &RTV) ENDPGM //ENDSRC //ENDBCHJOB