//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