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 の指定を忘れないようにしておくこと。