もうこの言語は何年もやっていないのですが…。
今もAS/400の少ない情報に苦しめられている人たちのために、私の当時の覚書を記載していきます。
ディスプレイファイル(DSPF)
DSPATR(DiSPlay ATtRibute)
様式を指定する
- 書式
- DSPATR(様式)
- 様式
- BL(BLink) 明滅
- CS(Column Separator) 桁区切り線を表示
- HI(High Intensity) 高輝度で表示
- ND(None Display) 表示しない
- PC(Position Cursole) カーソルを位置づける
- PR(PRotect) 入力から保護する
- RI(Reverse Image) 反転表示
- UL(Under Line) 下線を表示
※RI+HI+ULの組み合わせは禁止。NDになってしまう。
EDTCDE(EDiT CoDE)
数値の表示方法を指定する(データ型Sを指定するとエラーになる)
カンマ表示・印字 | 値がゼロの時の表示・印字 | 符号無し | CR | 後- | 前- |
---|---|---|---|---|---|
する | する | 1 | A | J | N |
する | しない | 2 | B | K | O |
しない | する | 3 | C | L | P |
しない | しない | 4 | D | M | Q |
※CR(Credit) 2Byte占有する
A 1 63DATE EDTCDE(Y)
A 1 63DATE EDTCDE(W)
A D#NUM 2 0B 8 3EDTCDE(Z)
EDTWRD(EDiT WoRD)
数値の表示方法を指定する(データ型Sを指定するとエラーになる)
A D@DATE 8 0O 10 10EDTWRD(' / / ')
A D@TIEM 6 0O 9 10EDTWRD(' : : ')
A D@TIEM 6 0O 9 10EDTWRD('0 : : ')
EDTMSK(EDiT MaSK)
編集マスク(&)で指定した桁を保護する
A TELNUM 9 0B 8 12EDTWRD('0( ) - ')
A EDTMSK(' & & & ')
上記の例では(, ), -が入力不可領域となる
COLOR(color)
色を指定する
A COLOR(GRN)
A COLOR(RED)
A COLOR(WHT)
A COLOR(TRQ)
A COLOR(YLW)
A COLOR(PNK)
A COLOR(BLU)
CA(Command Attention)
指定した機能キーを使う。
入力は保存されない。標識省略可。説明文は標識を指定すれば書ける。
- 書式
- CAキー(標識'説明文')
A CA03(03 ' 終了 ')
CF(Command Function)
指定した機能キーを使う。
入力は保存される。標識省略可。説明文は標識を指定すれば書ける。
- 書式
- CFキー(標識'説明文')
A CF06(06 ' 更新 ')
サブファイル(SUBFILE)
RRN(Relative Record Number:相対レコード番号)
このフィールドの値を操作することで、サブファイルの任意のレコードにアクセスできる。
FDSPFILE CF E WORKSTN
F W#RRN1KSFILE SFL01
C ADD 1 W#RRN1
C WRITESFL01
SFLRCDNBR(サブファイルレコードナンバー)
このフィールドにRRNの値を入れると、その番号のレコードを先頭にページを表示する
(複数ページにわたるエラーの場合、一番先頭のエラーレコードのRRNをこのフィールドに入れることで先頭のエラーレコードを表示する)
A H#RRN1 4S 0H SFLRCDNBR
INFORMATION DS
サブファイルの読み込みの後で、TOPRRNが0ならば、Z-ADD 1 を、TOPRRNが0でなければTOPRRNをSFLRCDNBRの定義フィールドに転送する。
FDSPFILE CF E WORKSTN
F W#RRN1KSFILE SFL01
F KINFDS INFDS1
IINFDS1 DS
I B 378 3790TOPRRN
隠しフィールド
画面には表示しないが、プログラム内部で使われるフィールドに設定(Hidden)
A H#RRN1 4S 0H SFLRCDNBR
CSRLOC(CurSoR LOCation)
画面に設定した、このフィールドに数値をセットしてEXFMTするとその位置にカーソルが移動する。
A CSRLOC(H#ROW H#CLM)
A H#ROW 3S 0H TEXT(' カーソル行位置 ')
A H#CLM 3S 0H TEXT(' カーソル桁位置 ')
実行キー押下時のカーソル位置が入る。
IINFDS1 DS
I B 370 3710S#CSR
C S#CSR DIV 256 H#ROW
C MVR H#CLM
上記のようなロジックで行と列位置を取りだしセットしてやる。
※カーソルに固定値を入れた後はゼロクリアしてやらないとポジションカーソル(DSPATR(PC))が効かなくなる
RTNCSRLOC(ReTurN CurSoR LOCation)
A RTNCSRLOC(&H#RCD &H#FLD &H#CSRP)
A*
A H#RCD 10A H
A H#FLD 10A H
A H#CSRP 4S 0H
SFL
レコードの定義を始める
A R SFL01 TEXT(' サブファイル ')
A SFL
SFLCTL
制御レコードの定義を始める(SFLよりも後に書かなければならない)
A R CTL01 TEXT(' サブファイル制御 ')
A SFLCTL(SFL01)
SFLSIZ(n)
サブファイルに格納するレコード数nを設定する
※最大値は9999件。それ以上書き込むと落ちる。
A SFLSIZ(9999) SFLPAG(13)
SFLPAG(n)
1画面に表示するレコード数nを設定する
A SFLSIZ(9999) SFLPAG(13)
SFLDSP
レコードのリストを表示する
A 30 SFLDSP
SFLDSPCTL
制御レコードを表示する
A 31 SFLDSPCTL
SFLCLR
サブファイルのデータを消去する
A 32 SFLCLR
SFLEND(*MORE)
継続・終了のガイダンスを表示する
*PLUS(デフォルト) だと「+」、*MOREだと「続く…」「終り」と表示される
A 33 SFLEND(*MORE)
ポップアップウィンドウ
ウィンドウの定義
A R DFWIN WINDOW(5 4 18 70)
A WDWBORDER((*COLOR BLU) +
A (*DSPATR HI RI) +
A (*CHAR ' '))
WINDOW
- 書式
- WINDOW(左上端の開始行 左上端の開始桁 ウィンドウの行数 ウィンドウの桁数)
※パラメータに変数を設定する場合は&変数名とする
- WINDOW(左上端の開始行 左上端の開始桁 ウィンドウの行数 ウィンドウの桁数)
WINDOWキーワードを指定している場合は、事前にウィンドウ・レコードを出力しておく必要がある。
定義を利用するレコード様式には次のように記述する
A R HEAD WINDOW(DFWIN)
A R CTL01 SFLCTL(SFL01)
A WINDOW(DFWIN)
WDWBORDER(WinDoWBORDER)
- 書式
- WDWBORDER((*COLOR 色) (*DSPATR 表示属性) (*CHAR '枠文字'))
※最低一つのパラメータが指定されなければならない
- WDWBORDER((*COLOR 色) (*DSPATR 表示属性) (*CHAR '枠文字'))
枠文字には8Byteの値を設定し、左から順に、
- top-left-corner
- top-border
- top-right-corner
- left-border
- right-border
- bottom-left-corner
- bottom-border
- bottom-right-corner
と割り当てられる
WDWBORDER((*CHAR '+-+||+-+'))
+--------------+
| |
| |
| |
| |
+--------------+
別のレコード様式のパラメータとすることで、ウィンドウ定義を切り離せる
A R FMT01 WINDOW(DFWIN)
ダミー・レコード・フォーマット
ウィンドウをそのまま呼び出して、表示すると背景のウィンドウが消去されてしまう。
これを防ぐために、ASSUMEキーワードを指定し、行1、列2にブランクを入れたダミー・レコード・フォーマットを作成する。
呼び出しもとのRPG内ではこのフォーマットは書き込まない。
A R DUMMY ASSUME
A*
A 1 2' '
A DSPATR(ND)
今見るともうほとんど思い出せないので質問はお手柔らかに…。