知識ベース

IBM RPG II

RPG IIは、IBM RPGプログラミング言語の非常に初期の人気バージョンです。

1960年代後半に開発され、IBM 1130、IBM System / 3、System / 32、System / 34、System / 36など、当時の最小のIBMシステムで動作するように設計されました。ただし、System / 370、The Singer System 10、Univac 90 / 25、90 / 30、90 / 40、およびWang VSシリーズでも使用できました。 ICLは、ICL 2903システムおよびVME / Kのバージョンを作成しました。 Burroughs Corporationは、B1700シリーズのコンピューター用のデータベース拡張機能を備えたRPG IIコンパイラーを作成しました。

拡張バージョンのRPG IIIが1978年に登場しました。

以下を含む多くの異常な機能があります。暗黙の処理ループ。また、これは固定形式のプログラミング言語であるため、特別なデバッグテンプレートがないとプログラムを読むことが困難です。

特徴

RPG IIは固定形式のプログラミング言語です。つまり、正しい結果を生成するには、コードを正確な列の位置に配置する必要があります。 8つの異なる仕様タイプがあり、それぞれを記述するために別々のコーディングフォームが使用され、プログラムの印刷出力を読み取るための補助として使用される特別なデバッグテンプレートが使用されます。

すべてのRPG IIプログラムは、暗黙的なループ、プログラムサイクル内で実行され、プログラムをファイルのすべてのレコードに連続的に適用します。これは、デバッグテンプレートの「ロジックフロー」図で文書化されます。各レコード(個々のパンチされたカード)は、プログラムの各行と比較されます。この行は、その行の「インジケータ」が「オン」または「オフ」になっているかどうかに基づいて、レコードに作用します。ユーザー定義の目的で01〜99の番号が付けられた論理変数、またはレコード、フィールド、またはレポート処理機能に基づいた他の小さなセット。 UDATE、UYEAR、PAGEなどの特別な変数は、これらのアクティビティに対する明示的な指示がなくても、プログラムの開始時またはページのオーバーフローが発生したときに入力されます。合計の計算と出力は、固定ロジックによってL1 / LRがオンに設定されている詳細サイクルの後の「合計時間」に実行されます。

RPGのプログラムサイクルの概念は、カードを読み取り、その内容を要約し、結果を印刷する周期的なマシンにきちんと適合しました。この言語は、他の入出力デバイスを処理するために拡張され、プログラミングの高速で効率的な方法を提供します。

ワークステーション(WORKSTN)、キーボード(KEYBORD)、またはコンソール(CONSOLE)などのデバイスには、ジョブの開始時に固定数のレコードがないため、固定ロジックRPGの「最後のレコード」を組み込むためサイクル、LRインジケータはSETON命令でオンに設定できます。 LRはオフに設定できません。

RPG IIは、Advanced / 36のマーケティングが終了した1977年のSystem / 34から2000年への実装からあまり進化しませんでした。 1970年代のバージョンから行われた変更には、IFEQ / IFNE / IFGT / IFGE / IFLT / IFLEおよびENDグループ化が含まれていました。また、call / parmは外部サブルーチンを呼び出すことができます。もう1つの変更点は、内部サブルーチンの場合、C(計算)仕様の列7および8にSRを配置する必要がなくなったことです。

サードパーティのプロバイダーは、RPG IIの制限を超えるためにSystem / 36およびAdvanced / 36プログラマーが使用できる200以上の異なるアセンブラーサブルーチンを販売していました。 Advanced / 36を含むSystem / 3、32、34、36でのRPG IIの制限のいくつかは、64Kの制限と、プログラムに含めることができるファイルの数でした。そのため、多くのプログラミング行がある場合、または大きな配列がある場合、オブジェクトコードの64,000バイトを超えるのは簡単でした。ただし、AS / 400上で実行されているRPG IIおよびその後続のiseriesおよびIBM i(S / 36E(実行環境)と呼ばれるものでOS / 400またはi5 / OSを実行しているもの)これらの制限(64Kバイトとファイル)が大幅に拡張または削除されました。

RPGII仕様

RPG IIの一般的なSystem / 36実装には、8つの異なる仕様タイプがあります。

  1. Uまたは自動レポートの仕様は、自動レポートプログラムにのみ必要です。
  2. Hまたはヘッダーの仕様は、プログラムの上部にあり、最大コンパイルサイズ、プログラムがMRT(Multiple Requestor Terminal)プログラムであるかどうか、プログラムのコンパイル時に生成されるリストの種類などのコンパイラオプションについて説明します。作成されたプログラムのオブジェクト名は、列75〜80にあります。ソースにH仕様がない場合は、RPGOBJという名前が使用されます。
  3. Fまたはファイルの仕様は次であり、プログラムで使用されるファイルについて説明します。ファイルは、ディスクファイル(DISK)でも、プリンター(PRINTER)、ワークステーション(WORKSTN)、キーボード(KEYBORD)、不定形式ディスプレイ(CRTまたはDISPLAY)、またはユーザー定義(SPECIAL)などのデバイスでもかまいません。レコードサイズ、ブロックサイズ、オーバーフローインジケータ、および外部インジケータについて説明します。 RPGプログラムがF仕様を使用しない可能性があります。
  4. 次にEまたは拡張仕様があり、ディスクファイル(入力テーブル)からプリフェッチされ、ソースの最後にある**と/ *シンボルの間の定数から描画されるか、ビルドされる配列とテーブルを記述します。計算から。
  5. Lまたはラインカウンターの仕様は次であり、存在する場合は、印刷するフォームを記述します。ページ内の行数と、印刷の開始位置と終了位置を定義します。
  6. Iまたは入力仕様は次にあり、ファイル内のデータ領域を記述します。 RPG IIは、FLDAという名前のフィールドが、それぞれ1文字の8つの要素を含む配列ARと同じ領域を占めるように、データ領域の再定義を許可します。データ構造などの非記録領域を記述することができます。入力レコードの値に応じて、インジケーターは条件付けられます。
  7. Cまたは計算の仕様は次です。合計フィールドが記述され、蓄積される場合があります。複雑な計算と文字列操作が可能です。インジケータは条件付けられている場合があります。
  8. 最後の仕様はOまたは出力仕様で、フィールドと出力位置の観点から出力レコードを記述します。

1977年までに、9番目の仕様シートであるTまたはTelecommunicationsが前の8つに追加されました。

操作コードは、RPG-II計算仕様の列28〜32に表示されます。

オペコード名前
追加追加
サブ引く
MULT かける
DIV 割る
Z-ADD ゼロと追加
Z-SUB ゼロと減算
MVR 残りの移動
移動移動する
MOVEL 左に移動
MHLZO 高ゾーンから低ゾーンに移動
MLHZO 低ゾーンから高ゾーンに移動
MLLZO ローゾーンからローゾーンに移動
MHHZO ハイゾーンからハイゾーンに移動
BITON ビットオン
BITOF ビットオフ
TESTB テストビット
後藤に行く
鬼ごっこタグ(GOTOの宛先)
EXSR サブルーチンを実行する
BEGSR サブルーチンを開始
ENDSR サブルーチンを終了
上の設定上の設定
SETOF 出発する
抜粋例外
出口出口
RLABL ラベルの再定義
ULABL ユーザーラベル
CALL1 コール
PARM1 パラメータ
読む読む
リード等しい読み取り
READP 前を読む
REDPE 前の等しいを読む
セトル下限を設定する
セットするセットする
時間時刻(000000-235959)
DSPLY 表示
ソルタ配列の並べ替え
XFOOT クロスフット
ムーベア配列を移動
ルックアップルックアップ(配列で検索)
  1. CALL / PARMは、リリース6.0(VASPとも呼ばれる)でRPG IIに追加されました。

CHAINは、ファクター1の値で指定された正確なキーと一致する、ファクター2で名前が付けられたインデックス付きファイル内のレコードを取得します。

SETLLは、ファクター2で指定されたファイルのインデックスポインターを、ファクター1の値で指定された場所に配置します。

SORTAは、名前付き配列を所定の位置に並べ替えます。つまり、要素は順番に表示されます。

Z-SUBは、反対の符号を持つ因子2を計算し、結果フィールドに移動します。

XFOOTは配列を合計し、結果を結果フィールドに移動します。

MVRはDIV操作に従う必要があります。 DIV操作の整数の残りは、結果フィールドに配置されます。 「56÷3」のDIV操作に続くMVRは、結果フィールドに値2を配置します。

指標

インジケータは「設定」されているかされていないため、事実上、組み込みの一連の「フラグ」またはブールデータ型です。

  • 標準:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
  • 停止インジケータ:
H1 H2 H3 H4 H5 H6 H7 H8 H9
  • 一致するインジケーター:
M1 M2 M3 M4 M5 M6 M7 M8 M9 MR
  • コントロールレベルのインジケーター:
L0 L1 L2 L3 L4 L5 L6 L7 L8 L9
  • コマンドキーインジケータ:
KA KB KC KD KE KF KG KH KI KJ KK KL KM KN KP KQ KR KS KT KU KV KW KX KYこれらのインジケーターは、コマンドキー1〜24をこの順序で示します。 KOインジケータがないことに注意してください。
  • 最初のサイクルインジケーター(1ページ目、主にプリンターファイルに使用):
1P
  • 最終レコードインジケータ:
LR
  • オーバーフローインジケーター:
OA OB OC OD OE of OG OV
  • 外部インジケータ:
U1 U2 U3 U4 U5 U6 U7 U8
3 H
5 F /ファイル
6 F /拡張子
7 E
8 L
10 I /ヘッダー
11 I /フィールド
12 C
13 O /ヘッダー
14 O /フィールド

サンプルコード

F ************************************************* ************** F *このプログラムは、請求書ヘッダーファイルF *の内容を読み取り、F *ローカルデータ領域で設定された日付に対して処理された請求書を印刷します。 F *の各ストアには、レベルブレイクと合計があります。 F ************************************************* ************** F * FINVHDR IP F 62プリンターIINVHDRの132枚のディスクプリンターNS 01 1NC I 1 3 STORE L1 I 4 13 INVNO I 14 20 CUSTNO I 21 45 STNAM I 46 53 INVDAT I 54622TOTINV I UDS I 1 8 RPTDAT C 01 INVDAT COMP RPTDAT 11 C 01 11 TOTINV L1TOTを追加92 C 01 11 TOTINV LRTOTを追加92 OPRINTER H 101 1P OまたはOF O 「ビッグ72」「ストア」 O UDATE Y 17 O 8 'RUN DATE' OH 1 1P O OR OF O 73 'DAILY SALES BY STORE' OH 2 1P O OR OF O RPTDAT 83 O 63 'FOR DATE:' OH 1 1P O OR OF O 6 'STORE 'O 18' INVOICE 'O 28' CUSTOMER 'O 58' CUSTOMER 'O 78' INVOICE 'OH 2 1P O OR OF 6 6' NUMBER 'O 18' NUMBER 'O 28' NUMBER 'O 58' NAME 'O 78' TOTAL 'OD 0 L1 O STORE 6 OD 1 01 11 O INVNO 18 O CUSTNO 28 O STNAM 58 O TOTINV1B 78 OT 1 L1 O 45' STORE TOTAL ... 'O L1TOT 1B 78 OT 1 LR O 45' GRAND TOTAL .. 。 'O LRTOT 1 78