RPG

151. RPG から C/400 の型の指定

ILE-RPG では複数の言語のモジュールをバインドできるという統合型開発環境(IDE) であることは

周知のとおりで、そのために API もほとんどが C/400 で書かれたものが、そのまま公開されている。

このような C/400 で書かれた API やRPG から C/400 の関数を使用するような機会が多くなると

C/400 の型を RPG では、どのように定義すればよいのかが問題となる。

例えば、RPG では 10桁のゾーン10進数は

     10S0

のように定義し、何桁の整数であっても任意に指定することができる。

ところが C/400 での数値変数といえば、

     int, long, short, ....

のようないろいろな型として定義されているのでRPGプログラマーは、これらの型を一体、

何バイトとして定義すればよいのかが混乱していまう。

オープン系のシステムではほとんどというか、すべてが、この型という考えによって定義されている。

これらの型をベースとしてシステムを構成したことが、そもそもが出発点が間違っていて

必要な型を次々と生み出していて最後にはすべての型を統合した VARIANT という

わけのわからない型を生み出してしまって、最後にはツジツマが合わなくなっている。

それに比べて System i では 10桁の数字、というように人間にとってわかりやすく自然な形での

定義である。RPG しか知らない人にとっては C/400 や Java 等の変数の型に初めて出くわすと

面食らって今うのも無理はない話である。

とはいうものの現実にこの不都合な体系が出来上がってしまっているので、

インターフェースとして扱う必要がどうしても出てくる。

C関数や C/400 で書かれた API を ILE-RPG で扱うときには、C/400の関数は ILE-RPG では

次の表に従って定義する必要がある。

これは IBM マニュアルにも記述がないが、ILE 環境で ILE-RPGプログラマーにとっては

重要な表となるだろう。

C言語の型 ILE-RPG記述
タイプ 桁数 小数
char A  1
char* * 16
float F  4
double F  8
longdouble F  8
shortint I  5 0
unsignedshortint U  5 0
int I 10 0
longint I 10 0
unsignedint U 10
* *