C言語インタフェースに従った形式でコマンド行に指定した引数を受け取る方法には,次の3種類があります。
それぞれの受け取り方法について,次に示します。
コマンド行から渡された引数の形式を連絡節(LINKAGE SECTION)で定義して,直接COBOLプログラムから参照する方法です。なお,引数の値は,アドレスとして渡されるため,アドレスデータ項目で参照する必要があります。
アドレスデータ項目を使った引数の受け取りの例
:
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE1.
:
DATA DIVISION.
WORKING-STORAGE SECTION. …1.
01 CMDN-G ADDRESSED BY A-CMDN.
02 CMDN PIC X(8).
01 OPT1-G ADDRESSED BY A-OPT1.
02 OPT1 PIC X(8).
01 OPT2-G ADDRESSED BY A-OPT2.
02 OPT2 PIC X(8).
:
LINKAGE SECTION. …2.
01 ARGC PIC 9(9) USAGE COMP.
01 ARGV.
02 ARGV1 USAGE ADDRESS.
02 ARGV2 USAGE ADDRESS.
02 ARGV3 USAGE ADDRESS.
:
PROCEDURE DIVISION USING …3.
BY VALUE ARGC
BY REFERENCE ARGV.
COMPUTE A-CMDN = ARGV1.
COMPUTE A-OPT1 = ARGV2.
COMPUTE A-OPT2 = ARGV3.
:
CBLARGCサービスルーチンおよびCBLARGVサービスルーチンを呼び出して,引数を受け取る方法です。
CBLARGCサービスルーチンでコマンド行の引数の個数を取得し,引数の個数だけCBLARGVサービスルーチンを繰り返し呼び出すことで,すべてのコマンド行の引数を取得できます。
サービスルーチンを使った引数の受け取りの例
:
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE1.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 ARGC PIC 9(9) USAGE COMP. …1.
01 ARGV.
02 ARGV-LENGTH PIC 9(4) USAGE COMP. …2.
02 ARGV-AREA. …3.
03 ARGV-AREA-C PIC X(1)
OCCURS 1 TO 100 DEPENDING ON ARGV-LENGTH.
77 CMD-NO PIC 9(9) USAGE COMP. …4.
:
PROCEDURE DIVISION.
CALL 'CBLARGC' USING BY REFERENCE ARGC.
IF RETURN-CODE NOT = 0 THEN
(CBLARGC異常時の処理)
END-IF.
:
MOVE 1 TO CMD-NO.
PERFORM UNTIL ARGC = 0
CALL 'CBLARGV' USING BY REFERENCE CMD-NO ARGV
IF RETURN-CODE NOT = 0 THEN
(CBLARGV異常時の処理)
END-IF
(CBLARGVで受け取った引数の処理)
ADD 1 TO CMD-NO
SUBTRACT 1 FROM ARGC
END-PERFORM.
:
ACCEPT文やDISPLAY文を使って,コマンド行に指定された引数の個数や値を取得できます。詳細は,「10.3 コマンド行へのアクセス」を参照してください。