COBOL2002 使用の手引 手引編


29.4.4 CBLARGV

CBLARGVサービスルーチンは,コマンド行に指定した引数の内容を,引数2の領域に転送するものです。コマンド引数の内容は,C言語のmain関数で受け取るargvに該当します。

形式
CALL 'CBLARGV' USING 引数1 引数2
引数
  • 引数1には,CBLARGVサービスルーチンによって受け取るコマンド引数の順序を4バイトの2進項目で指定します。

  • 引数2には,コマンド引数の情報を受け取る領域を指定します。この項目は次の形式で定義します。

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 PARM.
         02 PARM-LENGTH PIC 9(4) USAGE COMP.  …1.
         02 PARM-AREA.
           03 PARM-AREA-DETAIL PIC X(1) 
                    OCCURS 1 TO 100 TIMES  …2.
                    DEPENDING ON PARM-LENGTH.
  1. コマンド引数の長さを格納する領域で,2バイトの2進項目で指定します。コマンド引数が100バイトを超えたときは常に100が設定されます。

  2. コマンド引数の値を格納する領域で,最大長100バイトの可変長項目で定義します。コマンド引数が100バイトを超えたときは先頭から100バイトが格納されます。

戻り値

0:正常終了した場合

1:コマンド引数の長さが100バイトを超えた場合

2:CBLARGCで戻された引数の個数を超えた値で引数1を指定した場合,またはこのサービスルーチンに引き渡された引数1(引数の順序)に示される引数を,実行する実行可能ファイルの引数に指定していない場合

-1:エラーが発生した場合(-Main,Systemオプションを指定した最外側のCOBOLプログラム以外から呼び出した場合)

規則
  • このサービスルーチンは,-Main,Systemオプションを指定した最外側のCOBOLプログラムだけから呼び出せます。これ以外のプログラムから呼び出した場合は,戻り値-1が返されます。

  • このサービスルーチンの戻り値が0または1以外の場合,CBLARGVに渡された引数2の内容は保証しません。

  • 引数2の領域は,コマンド引数として受け取れる最大長分の100バイトを準備する必要があります。引数2に100バイト未満の領域を指定した場合,領域を破壊することがあります。

  • コマンド引数の長さが100バイト未満の場合,引数2の引数格納領域の余った領域には空白が設定されます。

使用例
       IDENTIFICATION DIVISION.
             :
       DATA DIVISION.
        WORKING-STORAGE SECTION.
         77 ARGC    PIC 9(9) USAGE COMP.
         77 COUNTER PIC 9(9) USAGE COMP.
             :
         01 PARM.                              …1.
           02 PARM-LENGTH PIC 9(4) USAGE COMP. …2.
           02 PARM-AREA.                       …3.
               03 PARM-AREA-C PIC X(1)
                   OCCURS 1 TO 100
                   DEPENDING ON PARM-LENGTH.
             :
       PROCEDURE DIVISION.
             :
           CALL 'CBLARGC' USING ARGC.
           IF RETURN-CODE NOT = 0 THEN
               CBLARGC異常時の処理
           END-IF.
             :
           MOVE 1 TO COUNTER.
           PERFORM UNTIL ARGC = 0
               MOVE SPACES TO PARM-AREA
               CALL 'CBLARGV' USING COUNTER PARM
               IF RETURN-CODE NOT = 0 THEN
                  CBLARGV異常時の処理
               END-IF
               CBLARGVで受け取ったパラメタに対応する処理
               ADD 1 TO COUNTER
               SUBTRACT 1 FROM ARGC
           END-PERFORM.
             :
  1. CBLARGVに引き渡す実引数領域です。

  2. CBLARGVによって3.に示す引数格納領域に設定された文字列の長さを示します。最大長を超えて引数を設定したときは100が設定されます。

  3. CBLARGVで設定する引数領域で,最大長100バイトの領域として可変長で定義します。100バイト以上の引数を指定した場合,実際のコマンドに指定した引数情報の先頭から100バイトまでが設定されます。