Java がらみの開発をしていて環境変数を CLPで取得したい場合に意外なことにGETENV という
コマンドは存在していない。
環境変数の処理(WRKENVVAR)
や 環境変数の変更(CHGENVVAR)
は提供されているのだが
環境変数を取得できるコマンドはないのである。
そこでユーザーのCLP や RPGなどにも簡単に組み込むことができる GETENV
というコマンドを
作成した。
CMD PROMPT(' 環境変数の取得 ') 0002.00 PARM KWD(ENV) TYPE(*CHAR) LEN(48) + 0003.00 PROMPT(' 環境変数 ') 0004.00 PARM KWD(VALUE) TYPE(*CHAR) LEN(256) RTNVAL(*YES) + 0005.00 PROMPT(' 取得値 ')
CRTCMD CMD(MYOBJLIB/GETENV) PGM(MYOBJLIB/GETENV) SRCFILE(MYSRCLIB/QCMDSRC) ALLOW(*BPGM *IPGM) AUT(*ALL)
0001.00 #include <stdio.h> 0002.00 #include <stdlib.h> 0003.00 #include <string.h> 0004.00 #include <micomput.h> /* triml */ 0005.00 0006.00 #define TRUE 0 0007.00 #define FALSE -1 0008.00 /********************************************************************/ 0009.00 /* m a i n --- main module of this pgm */ 0010.00 /* */ 0011.00 /* <PARAMETER> 1. ENV */ 0012.00 /* 2. VALUE */ 0013.00 /* */ 0014.00 /*------------------------------------------------------------------*/ 0015.00 0016.00 int main(int argc, char *argv[]){ 0017.00 char env[49]; 0018.00 char* value; 0019.00 int len; 0020.00 0021.00 memset(env, 0, sizeof(env)); 0022.00 memcpy(env, argv[1], 48); 0023.00 env[48] = 0x00; 0024.00 len = triml(env, ' '); 0025.00 if(len > 0) env[len] = 0x00; 0026.00 value = getenv(env); 0027.00 if(value != NULL){ 0028.00 strcpy(argv[2], value); 0029.00 } 0030.00 exit(0); 0031.00 }
CRTBNDC PGM(MYOBJLIB/GETENV) SRCFILE(MYSRCLIB/QCSRC) AUT(*ALL)
GETENV コマンドは VALUE キーワードに値を戻すので単なる CRTCMD
ではコンパイル・エラーと
なってしまう。
実行環境として *IPGM *BPGM
の指定を忘れないようにしておくこと。