プログラムへのバインド
この例を完成させるために、サービス・プログラムへバインドされるプログラム CVTHEXPGM から構成される「アプリケーション」を作成します。 これは CVTTOHEX に 7 桁のストリングを 2 回渡しますが、 1 回目には 16 進数ストリングの値が 10 (すなわち 5 桁を変換) で、 2 回目には値が 14、すなわち実際の長さで渡されます。
サービス・プログラム CVTTOHEX の使用を説明するためにプログラム CVTHEXPGM が 使われていることに注意してください。 実際のアプリケーションでは、CVTTOHEX の呼び出し元は CVTTOHEX のテスト以外に別の主要 な目的をもっています。 さらに、サービス・プログラムは通常他の多くのプログラムで使用されるか、 あるいはいくつかのプログラムで頻繁に使用されます。そうでなくては、 初期の呼び出しのオーバーヘッドから考えてこれをサービス・プログラムに したことが正当化されません。
アプリケーション・プログラムを作成するには、次のステップに従ってください。
- 次のとおり入力して、図 1 のソースからモジュールを作る。
CRTRPGMOD MODULE(MYLIB/CVTHEXPGM) SRCFILE(MYLIB/QRPGLESRC) - 次のとおり入力してプログラムを作成する。
CRTPGM PGM(MYLIB/CVTHEXPGM) BNDSRVPGM(MYLIB/CVTTOHEX) DETAIL(*BASIC)CVTHEXPGM が作成される際、サービス・プログラムとの対話に使用するインターフェースに関する 情報が含められます。 これは CVTTOHEX 用のバインダー言語に反映されるものと同じです。
- 次のとおり入力して、プログラムを呼び出す。
CALL CVTHEXPGMCVTHEXPGM を実行可能にする処理の段階で、システムは以下のことを検査しま す。- サービス・プログラム CVTTOHEX はライブラリー MYLIB 内にある。
- 作成時に CVTHEXPGM で使用された共通インターフェースが、実行時にも有効 である。
上のいずれかが真でなければ、エラー・メッセージが出されます。
CVTHEXPGM の出力を下に示します。 (入力ストリングは 'ABC123*' です。)
Result14++++++
Result10++
C1C2C3F1F2 10 character output
C1C2C3F1F2F35C 14 character output
図 1. テスト・プログラム 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