プログラムへのバインド

この例を完成させるために、サービス・プログラムへバインドされるプログラム CVTHEXPGM から構成される「アプリケーション」を作成します。 これは CVTTOHEX に 7 桁のストリングを 2 回渡しますが、 1 回目には 16 進数ストリングの値が 10 (すなわち 5 桁を変換) で、 2 回目には値が 14、すなわち実際の長さで渡されます。

サービス・プログラム CVTTOHEX の使用を説明するためにプログラム CVTHEXPGM が 使われていることに注意してください。 実際のアプリケーションでは、CVTTOHEX の呼び出し元は CVTTOHEX のテスト以外に別の主要 な目的をもっています。 さらに、サービス・プログラムは通常他の多くのプログラムで使用されるか、 あるいはいくつかのプログラムで頻繁に使用されます。そうでなくては、 初期の呼び出しのオーバーヘッドから考えてこれをサービス・プログラムに したことが正当化されません。

アプリケーション・プログラムを作成するには、次のステップに従ってください。

  1. 次のとおり入力して、図 45 のソースからモジュールを作る。
        CRTRPGMOD MODULE(MYLIB/CVTHEXPGM) SRCFILE(MYLIB/QRPGLESRC)
  2. 次のとおり入力してプログラムを作成する。
        CRTPGM PGM(MYLIB/CVTHEXPGM)
               BNDSRVPGM(MYLIB/CVTTOHEX)
               DETAIL(*BASIC)

    CVTHEXPGM が作成される際、サービス・プログラムとの対話に使用するインターフェースに関する 情報が含められます。 これは CVTTOHEX 用のバインダー言語に反映されるものと同じです。

  3. 次のとおり入力して、プログラムを呼び出す。
    CALL CVTHEXPGM

    CVTHEXPGM を実行可能にする処理の段階で、システムは以下のことを検査しま す。

    上のいずれかが真でなければ、エラー・メッセージが出されます。

CVTHEXPGM の出力を下に示します。 (入力ストリングは 'ABC123*' です。)

Result14++++++
Result10++
C1C2C3F1F2         10 character output
C1C2C3F1F2F35C     14 character output
図 45. テスト・プログラム CVTHEXPGM のソース
      *----------------------------------------------------------------*
      * サービス・プログラム CVTTOHEX をテストするプログラム           *
      *                                                                *
      * 1. 7 文字の入力ストリングを使用                                *
      * 2. 10 文字の 16 進ストリングに変換 (結果が入力ストリング全体に *
      *    とっては小さ過ぎるため、                                    *
      *    入力文字の先頭 5 文字だけが使用されることになります)        *
      * 3. 14 文字の 16 進ストリングに変換 (結果に十分な長さがある     *
      *    ため、入力文字 7 文字すべてが使用されます)                  *
      *----------------------------------------------------------------*
     FQSYSPRT   O    F   80        PRINTER
      * CvtToHex のプロトタイプ
     D/COPY RPGGUIDE/QRPGLE,CVTHEXPR
     D ResultDS        DS
     D   Result14              1     14
     D   Result10              1     10
     D InString        S              7
     D Comment         S             25
     C                   EVAL      InString = 'ABC123*'

      *----------------------------------------------------------------*
      * プロトタイプ呼び出しを使用して、文字ストリングと 10 文字の     *
      * 結果フィールドを渡します。呼び出されたプロシージャー           *
      * CvtToHex の必要に応じて、操作記述子が渡されます。              *
      *----------------------------------------------------------------*
     C                   EVAL      Comment = '10 character output'
     C                   CLEAR                   ResultDS
     C                   CALLP     CvtToHex(Instring : Result10)
     C                   EXCEPT

      *----------------------------------------------------------------*
      * CALLB(D) を使用して、文字ストリングと 14 文字の結果の          *
      * フィールドを渡します。命令拡張 (D) は、渡されたパラメーター    *
      * 用の操作記述子を作成します。CALLB は、上記の CALLP との比較の  *
      * ためにここで使用されます。                                     *
      *----------------------------------------------------------------*
     C                   EVAL      Comment = '14 character output'
     C                   CLEAR                   ResultDS
     C                   CALLB(D)  'CVTTOHEX'
     C                   PARM                    InString
     C                   PARM                    Result14
     C                   EXCEPT
     C                   EVAL      *INLR = *ON

     OQSYSPRT   H    1P
     O                                              'Result14++++++'
     OQSYSPRT   H    1P
     O                                              'Result10++'
     OQSYSPRT   E
     O                       ResultDS
     O                       Comment             +5