RPG

224. DSPF の桁位置を変化させるには ?

画面装置ファイル : DSPF のフィールドの 行、桁 の位置は DDS にいったん記述すると
そのままであり、動的に変更することはできない、と信じられがちであるが
実は変化させる方法がひとつだけあるので紹介する。

DSPF の DDSソースにはファイル・レベルで次のような記述がある。

  A                                      DSPSIZ(24 80 *DS3)

これは画面サイズ( DSPSIZ )を表すキー・ワードであり 24行 80桁のサイズを *DS3
代表することを意味している。
画面項目の桁位置は、実はこの画面サイズによって制御できるのである。

その前に DSPSIZ について、もう少し説明すると DSPSIZ(40 128 *DS5) のように
自由にサイズを指定できるわけではない。
自由にサイズ指定ができればよいのだがそれは残念ながらできない。

  24 80 *DS3     または     27 132 *DS4

の二つだけが有効であり、このふたつなら同時に指定することもできる。

  A                                      DSPSIZ(27 132 *DS4 24 80 *DS3)

とすれば 27*132 および 24*80 の両方をサポートする画面であることを
意味している。

そこで

  A                                      DSPSIZ(27 132 *DS4 24 80 *DS3)
                        :
                        :
  A            ZKSU           5Y 0O  9 82TEXT(' 在庫数 ')
  A  *DS3                           10  2                

のように記述することができる。
これは *DS4 の場合は フィールド : ZKSU は 9行目 82桁に配置し、*DS3 の場合は
10行目 2桁目に配置することを意味している。
このように指定すると *DS3 および *DS4 の画面サイズによってフィールドや
テキスト(固定情報)の位置を制御することができる。

ただし *DS3 の場合と *DS4 の場合によって配置の位置が前後するような指定は
コンパイラー( CRTDSPF ) によってエラーであると判断されてしまう。
これは DSPF の入出力バッファーが *DS3*DS4 によって異なってしまうことになるからである。
とは言うものの読者は DSPF の桁位置を変化させる方法があるとは驚いたかもしれない。