Tools

22. 環境変数を取得する GETENV コマンド

Java がらみの開発をしていて環境変数を CLPで取得したい場合に意外なことにGETENV という
コマンドは存在していない。
環境変数の処理(WRKENVVAR) や 環境変数の変更(CHGENVVAR) は提供されているのだが
環境変数を取得できるコマンドはないのである。
そこでユーザーのCLP や RPGなどにも簡単に組み込むことができる GETENV というコマンドを
作成した。

【 CMD: 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)
【 C/400 : GETENV 】
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 の指定を忘れないようにしておくこと。