場合によっては、プログラムの動作にバリエーションを持たせるようにするために、コマンド・ラインで 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;