COBOL2002 ユーザーズガイド

[目次][用語][索引][前へ][次へ]

17.2.2 引数の受け取り方法(C言語インタフェースに従った形式の場合)

C言語インタフェースに従った形式でコマンド行に指定した引数を受け取る方法には,次の3種類があります。

それぞれの受け取り方法について,次に示します。

<この項の構成>
(1) アドレスデータ項目を使った引数の受け取り
(2) サービスルーチンを使った引数の受け取り
(3) ACCEPT/DISPLAY文を使った引数の受け取り

(1) アドレスデータ項目を使った引数の受け取り

コマンド行から渡された引数の形式を連絡節(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.
                    :
  1. 作業場所節(WORKING-STORAGE SECTION)で,アドレスデータ項目で参照するデータを定義します。
  2. 連絡節(LINKAGE SECTION)で,受け取る引数の形式を定義します。
  3. アドレスデータ項目のアドレス参照を解決し,引数の値をCOBOLのデータ項目に格納します。

規則
  • COBOLプログラムのコンパイル時に,-Main,Systemオプションを指定する必要があります。
  • 連絡節で定義した受け取る引数の個数と,実際にコマンド行に入力した実行可能ファイル名,および引数の個数が一致していなければなりません。
  • 受け取った引数の終端には,NULL文字(X'00')が付加されています。COBOLプログラム中で引数の長さなどを求める場合は,このNULL文字の分を考慮する必要があります。
  • 最初の引数を受け取るデータ項目は,「PIC 9(9) USAGE COMP」で定義する必要があります。

(2) サービスルーチンを使った引数の受け取り

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.
                    :
  1. CBLARGCサービスルーチンで受け取る引数の個数の領域
  2. CBLARGVサービスルーチンで受け取る引数の長さ
  3. CBLARGVサービスルーチンで受け取る引数の文字列
  4. CBLARGVサービスルーチンに引き渡す引数の順序

規則
  • COBOLプログラムのコンパイル時に,-Main,Systemオプションを指定する必要があります。
  • CBLARGCサービスルーチンで取得した値は,実行可能ファイル名と引数の個数の合計値となります。詳細については,「32.4.4 CBLARGC」を参照してください。
  • CBLARGVサービスルーチンで引数の文字列を受け取る領域は,100バイトで定義する必要があります。受け取ったコマンド行の引数が100バイト未満の場合,残りの領域は,空白文字で埋められます。また,受け取ったコマンド行の引数が100バイトを超える場合は,先頭から100バイトまでが有効となり,以降の文字列は切り捨てられます。詳細は,「32.4.5 CBLARGV」を参照してください。

(3) ACCEPT/DISPLAY文を使った引数の受け取り

ACCEPT文やDISPLAY文を使って,コマンド行に指定された引数の個数や値を取得できます。詳細は,「10.3 コマンド行へのアクセス」を参照してください。