久しぶりのIBMi①

久しぶりのIBMiでの開発で忘れていそうな事を備忘録として記載したいと思う。

■RPGⅢの数値型パラメータについて
RPGプログラムをコマンドラインから直接CALLする場合、
パラメータに数値項目があるとエラーとなるご経験御座いませんか?
それはRPGの数値型パラメータはパック 10 進整数となる為、
パック 10 進整数でパラメータにセットする必要があるのですが
このパック10 進整数、久しぶりに使うと???となる方が多いような気がしますので
私なりに出来るだけ簡単に説明したいと思います。

1バイト(256ビット)を二つに割ると16ビット×16ビットになるので
この16ビット、16パターン作れるので16パターンあれば0~9までは入るよね~として、
数値として利用しようとした型になります。
16ビットを1つの数値として扱う為、16進数(X)で表します。
※XはheXadecimal(ヘキサデシマル)のXが由来です。

また、正の整数、負の整数を持たせる為、符号も持たせています。
符号の種類
正の整数:C
負の整数:D
無符号の整数:F
※ま、ほぼほぼFを使用する事が多いかと思います。

具体的な例で示します。
例)125の場合
1バイトを2つに分けますので下記の様に1バイトを2つに分けた図を作成します。
①~④の順番に後ろからセットしていきます。なので必ず符号からセットします。

これをXを使って表しますと下記になります。
X’125F’

これを数値パラメータにセットしてCALLします。
CALL PGM(TEST) PARM(X’125F’)

例)1253の場合
必ず符号が含まれる為、偶数桁の数値項目は余りが出ます。
余りには0を入れます。

これをXを使って表しますと下記になります。
X’01253F’

これを数値パラメータにセットしてCALLします。
CALL PGM(TEST) PARM(X’01253F’)

上記からも分かる通り、偶数桁のパック 10 進整数は必ず余りが出るので
無駄が多いので奇数桁で設計する様にする方も多いのではないでしょうか。