RPG

226. 80桁表示と 132桁表示を同時にサポートするには

5250エミュレータの設定を 27*132 の画面サイズで作成しておくと
24*80 サイズの表示装置ファイルのプログラム、27*132 サイズの表示装置ファイルのプログラムの
どちらも表示することができる。

しかし24*80 の画面サイズで設定された 5250エミュレータでは 27*132 の
表示装置ファイルのプログラムを実行しようとすると装置エラーとなって
実行することはできない。

そこで、ここでは 24*80, 27*132 のどちらのサイズでも実行可能な DSPF の作成の方法を
紹介する。

■ DSPSIZ の指定


   A                                      DSPSIZ(27 132 *DS4 24 80 *DS3)
【解説】

ファイル・レベルのキー・ワードとして DSPSIZ を上記のように指定する。
これは 27*132 サイズを記号 *DS4 で表し、24*80 サイズを *DS3 で表すことを意味する。

この記述は


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

*DS3*DS4 の順序を逆転して記述してはならない。
順序は必ず *DS4 *DS3 の順序で記述すること。

■ MSGLOC の指定

MSGLOC とはエラー・メッセージの出力行の指定である。
エラー・メッセージとは ERRMSG キー・ワードおよび SFLMSG キー・ワードによって
出力されるエラー・メッセージのことである。
(エラー・メッセージをフィールドとして出力しているのはエラー・メッセージとは
 呼ばない)

MSGLOC*DS3*DS4 を使って次のように指定する。


   A  *DS3                                MSGLOC(24)
   A  *DS4                                MSGLOC(27)

従ってファイル・レベルの記述は次のようになる。


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

■ 80 桁オーバーのフィールドの記述


   A            ZKSU           5Y 0O  9 82TEXT(' 在庫数 ')
   A N08                                  DSPATR(ND)      
   A                                      EDTCDE(K)       
   A            THSU           5Y 0O  9 92TEXT(' 手配数 ')
   A N08                                  DSPATR(ND)      
   A                                      EDTCDE(K)       
【解説】

27*132 サイズの環境下のみで表示されるフィールドも132桁以内に収まるように
自由に記述することができる。
CRTDSPF では 80桁以上をオーバーしていてもエラーにはならない。
ただし24*80 サイズの実行時には 80桁をオーバーするフィールドは
出力されないようにするために標識で制御する必要がある。

上記の例では


   A N08                                  DSPATR(ND)

によって標識 08 がオフのときには表示されないように制御している。

■ 環境による表示位置の変更

24*80, 27*132 サイズのどちらの環境でも表示されるフィールドであっても
それぞれの環境における表示位置を変更することもできる。


   A                                  4 82' 納期 '      
   A  *DS3                            4 62              
   A            JUNOKI         8Y 0B  4 91TEXT(' 納期 ')
   A  *DS3                            4 71              

■ RPG で表示サイズを取得して制御する

RPG プログラム側で今、表示された環境が 24*80 なのか 27*132 であるのかを
判断するのは次のように INFDS の項目によって判断する。


   FANS201FM  CF   E             WORKSTN
   F                                     INFDS(INFDS)
      :
   D INFDS           DS                 
   D  NUM_ROWS             152    153B 0
   D  NUM_COLS             154    155B 0
      :
   C******************************************************
   C     *INZSR        BEGSR                              
   C******************************************************
   C     NUM_COLS      COMP      132                                    08
   C                   ENDSR
【解説】

INFDSNUM_ROWS には画面サイズの行数の値が入り、
NUM_COLS には画面サイズの桁数が入る。
これらの値によって今、表示されている画面サイズを判断することができる。

なお IBM RPG 解説書に公開されている NUM_ROWS, NUM_COLS の桁位置は誤りであり
実際はこの値が正しい。