Open PL/I プログラムでのコマンド・ライン引数へのアクセス

場合によっては、プログラムの動作にバリエーションを持たせるようにするために、コマンド・ラインで 1 つ以上の引数を指定したプログラムを実行できると、役立つ場合があります。例えば、部門の経費レポート・プログラムを実行する場合に、deptexp summary コマンドを発行して、すべての行項目ではなくカテゴリの合計のみを確認したいことを示すことができます。

コマンド・ラインの引数には、次の方法を使用して PL/I メイン・プログラムからアクセスできます。

/* PL/I main program accessing command line args.*/ 

PMAIN:PROCEDURE OPTIONS(MAIN); 

DECLARE ARGC_     FIXED BIN(31) EXTERNAL STATIC; 
DECLARE ARGV_     POINTER EXTERNAL STATIC; 
DECLARE ARG(10)   POINTER BASED; 
DECLARE ARGS      CHAR(50) BASED; 
DECLARE ARGSV     CHAR(50) VARYING; 
DECLARE I         FIXED BIN(31); 

PUT SKIP EDIT(ARGC_)(f(2)); 
DO I = 1 TO ARGC_; 
ARGSV = SUBSTR(ARGV_->ARG(I)->ARGS,1,
INDEX(ARGV_->ARG(I)->ARGS,BYTE(0))-1); 
PUT SKIP EDIT('"',argsv,'"')(a,a,a); 
END; 
PUT SKIP; 

END PMAIN;

ご使用の PL/I プログラムが C メイン・プログラムによって制御されている場合は、次の方法を使用して、PL/I プログラムを介してコマンド・ライン引数を渡すことができます。

/* C main program calling PL/I subroutine */ 

main(argc,argv) 
int argc; 
char **argv;
{ 
PSUBR(argc,argv); 
}

/* PL/I subroutine receiving command line args 
from C main program */ 

PSUBR:PROCEDURE(ARGC,ARGV); 

DECLARE ARGC      FIXED BIN(31) VALUE;
DECLARE ARGV      POINTER VALUE; 
DECLARE ARG(10)   POINTER BASED; 
DECLARE ARGS      CHAR(50) BASED; 
DECLARE ARGSV     CHAR(50) VARYING; 
DECLARE I         FIXED BIN(31); 

PUT SKIP EDIT(ARGC)(f(2)); 
DO I = 1 TO ARGC; 
ARGSV = SUBSTR(ARGV->ARG(I)->ARGS,1, 
INDEX(ARGV->ARG(I)->ARGS,BYTE(0)));
PUT SKIP EDIT('"',ARGSV,'"')(a,a,a); 
END; 
PUT SKIP; 

END PSUBR;