この節では、6.1 の ILE RPG における機能強化について説明します。
制御仕様書で MAIN キーワードを使用して、あるサブプロシージャーをプログラム入り口プロシージャーとして認識されるようにすることができます。 これによって、RPG サイクルを使用するモジュールがない場合も、RPG アプリケーションを開発できるようになります。
サブプロシージャーでは、ファイルをローカルに定義することができます。 ローカル・ファイルに対する入出力は、データ構造を使用することによってのみ実行できます。 サブプロシージャーでは、入力仕様および出力仕様を使用することはできません。 また、外部記述ファイルの入力仕様および出力仕様が、コンパイラーによって生成されることはありません。 デフォルトでは、ローカル・ファイルに関連付けられる記憶域は自動記憶域になります。 サブプロシージャーから戻ったときに、ローカル・ファイルはクローズされます。 STATIC キーワードを使用すると、ファイルに関連付けられる記憶域を静的記憶域にするよう指示できます。 これによって、サブプロシージャーの起動時には常に同じファイルが使用されるようになります。 また、サブプロシージャーから戻った時にファイルがオープンしている場合には、サブプロシージャーが次に呼び出されるまでオープンされたままになります。
QUALIFIED キーワードを指定してファイルが定義されている場合には、レコード様式は MYFILE.MYFMT というファイル名を使用して修飾する必要があります。 修飾ファイルには、コンパイラーによって生成される入力仕様および出力仕様がありません。 入出力を実行するには、データ構造を使用する必要があります。
LIKEFILE キーワードを使用すると、他のファイル仕様書と同じ設定を使用して、ファイルを定義することができます。 この機能は、ファイルをパラメーターとして渡す場合に重要です。 ファイルが外部記述される場合、 QUALIFIED キーワードは暗黙となります。新規ファイルに対して入出力を実行するには、データ構造を使用する必要があります。
LIKEFILE キーワードを使用して、プロトタイプ・パラメーターをファイル・パラメーターとして定義することができます。 同じ LIKEFILE 定義を介して関連付けられたファイルは、パラメーターとしてプロシージャーに渡される場合があります。 呼び出されたプロシージャーまたはプログラム内で、サポートされるすべての操作をそのファイルに 実行することができます。入出力はデータ構造を介してのみ実行できます。
EXTDESC キーワードは、コンパイル時にファイルの外部記述を取得するためにコンパイラーが使用するファイルを決定します。 ファイル名は、「LIBNAME/FILENAME」または「FILENAME」という形式にして、リテラルとして指定します。 これによって、ファイルのコンパイル時の指定変更が不要になります。
EXTFILE キーワードが拡張され、特殊値 *EXTDESC を使用できるようになりました。 これは、EXTDESC によって指定されるファイルを、実行時にも使用するよう指示するものです。
EXTNAME キーワードが拡張され、リテラルを使用して、外部ファイルのライブラリーを指定できるようになりました。 EXTNAME('LIBNAME/FILENAME') または EXTNAME('FILENAME') を使用することができます。 これによって、ファイルのコンパイル時の指定変更が不要になります。
EXFMT 命令が拡張され、結果フィールドでデータ構造を指定できるようになりました。 データ構造は、 使用タイプ *ALL を使用して、レコード様式の外部記述データ構造 (EXTNAME(file:fmt:*ALL) として、またはレコード様式の LIKEREC (LIKEREC(fmt:*ALL) を使用して定義する必要があります。
%ADDR 組み込み関数が拡張され、可変長フィールドのデータ部のアドレスを取得するために、2 番目のパラメーターとして *DATA を使用できるようになりました。
配列または複数回繰り返しデータ構造は、合計サイズが 16,773,104 より大きくなければ、最大 16,773,104 要素を持つことができます。
ファイルおよび変数の定義に TEMPLATE キーワードをコーディングして、 その名前を LIKEFILE、LIKE、または LIKEDS キーワードのみと ともに使用して他のファイルまたは変数を定義するように指示することができます。 プロトタイプ呼び出しのタイプを定義する場合には、テンプレート定義が便利です。 コンパイラーは、他のファイルおよび変数の定義のためにコンパイル時にのみそれらのタイプを使用し、 関連するコードは生成しないためです。
テンプレート・データ構造では、データ構造およびそのサブフィールドに対して INZ キーワードをコーディングでき、それにより INZ(*LIKEDS) の使用が容易になります。
%UCS2 組み込み関数を使用せずに、文字リテラルまたは図形リテラルを使用して、UCS-2 変数を初期化できるようになりました。
CRTBNDRPG コマンドおよび CRTRPGMOD コマンドの OPTION キーワードと、制御仕様書の OPTION キーワードに、値 *UNREF および *NOUNREF が新たに追加されました。 デフォルト値は *UNREF です。 *NOUNREF は、参照されない変数を RPG モジュールに生成しないよう指示します。 これによって、プログラムのサイズを小さくすることができます。 また、インポートされた変数が参照されない場合には、プログラムまたはサービス・プログラムにモジュールをバインドする際にかかる時間を短縮することができます。
Program Call Markup Language (PCML) を、ストリーム・ファイルだけでなく、モジュールにも保管できるようになりました。 PGMINFO コマンド・パラメーターまたは制御仕様書の新しいキーワード PGMINFO、あるいはその両方を組み合わせて使用することにより、RPG プログラマーが PCML 情報の保管先を選択できるようになります。 PCML 情報をモジュールに入れておけば、QBNRPII API を使用して、後で取り出すことができます。 この機能拡張は、V5R4 の PTF でも利用できます。 ただし、その場合に使用できるのは、制御仕様書キーワードのみです。
| 言語単位 | 要素 | 説明 |
|---|---|---|
| 制御仕様書キーワード | OPTION(*UNREF | *NOUNREF) | 参照されない変数を RPG モジュールに生成しないよう指定します。 |
| THREAD(*CONCURRENT) | 新規パラメーター *CONCURRENT によって、複数のスレッドでの並行実行を可能にします。 | |
| ファイル仕様書のキーワード | EXTFILE(*EXTDESC) | EXTDESC キーワードの値を EXTFILE キーワードでも使用するよう指定します。 |
| 組み込み関数 | %ADDR(可変長フィールド : *DATA) | これを使用して、可変長フィールドのデータ部のアドレスが取得できるようになりました。 |
| 定義仕様書キーワード | DIM(16773104) | 1 つの配列に最大 16773104 個の要素を含めることができます。 |
| EXTNAME('LIB/FILE') | ファイル名にリテラルを使用できるようにします。 リテラルには、ファイルのライブラリーを含めることができます。 | |
| OCCURS(16773104) | 1 つの複数オカレンス・データ構造に、最大 16773104 個の要素を含めることができます。 | |
| VARYING {(2|4)} | 長さ接頭部のバイト数を示すパラメーターを指定できるようになりました。 | |
| 定義仕様書 | 長さ入力 | データ構造、およびタイプ A、C、または G の定義に対して最大 9999999 と することができます。 (より長い項目を定義するには、LEN キーワードを 使用する必要があります。) |
| 入力仕様 | 長さ入力 | 英数字フィールドに関しては最大 99999 まで、UCS-2 および図形フィールドに関しては最大 99998 まで、それぞれ可能。 |
| 演算仕様書 | 長さ入力 | 英数字フィールドに関して、最大 99999 まで可能。 |
| 命令コード | EXFMT format { result-ds } | 結果記入項目にデータ構造を入れることができます。 |
| 言語単位 | 要素 | 説明 |
|---|---|---|
| 制御仕様書キーワード | MAIN(サブプロシージャー名) | プログラムのプログラム入り口プロシージャーを指定します。 |
| PGMINFO(*NO | *PCML { : *MODULE } ) | プログラム情報をモジュールに直接入れるかどうかを指示します。 | |
| ファイル仕様書のキーワード | STATIC | あるサブプロシージャーに対する呼び出し全般にわたって、自らのプログラム状態をローカル・ファイルが保持するよう指示します。 |
| QUALIFIED | ファイルのレコード様式名をファイル名 FILE.FMT によって修飾するよう指示します。 | |
| LIKEFILE(ファイル名) | 他のファイルと同じように該当ファイルを定義するよう指示します。 | |
| TEMPLATE | 該当ファイルを後の LIKEFILE 定義でのみ使用するよう指示します。 | |
| EXTDESC(定数-ファイル名) | コンパイル時に外部定義で使用される外部ファイルを指定します。 | |
| 定義仕様書キーワード | STATIC(*ALLTHREAD) | モジュールで実行されるすべてのスレッドで、静的変数の同じインスタンスを使用するよう指示します。 |
| LIKEFILE(ファイル名) | パラメーターがファイルであることを示します。 | |
| TEMPLATE | この定義を、後の LIKE 定義または LIKEDS 定義でのみ使用するよう指示します。 | |
| LEN(長さ) | データ構造の長さ、あるいはタイプ A、C、または G の定義の長さを指定します。 | |
| プロシージャー仕様書のキーワード | SERIALIZE | このプロシージャーが一度に 1 つのスレッドでのみ実行されるよう指示します。 |