[解説10]
ロールアップ、ロールダウンとも、この@CLCTLサブファイルの消去をします。つまり、毎回、まっさらの、サブファイルに書き込みます。

[解説15]b_add.gif (360 バイト)
再表示の場合、現在表示中のレコードを再び、サブファイルにロードしなくてはいけません。サブルーチン@BWD(backward)を利用して、1ページ分戻ります。注意すべきは、もし、画面の途中まで表示して、EOFとなっている画面で、F5を押したときです。固定的に1ページのサイズにせず、表示行分のレコード数(W1CNT)だけ戻る事で、解決しています。

※他のユーザーが、レコードを追加したために、表示開始行が変わることがあります。この点は、余り気にしていません。もし、これが問題となる場合は、キーによるアクセス+読み込みにしなくてはなりません。

[解説20]
@READCへのタイミングは、ロールアップダウンの前にしています。この後だと、ロールアップダウンを押されると、いくら入力しても、@CLCTLで、入力値ごと消えてなくなります。

[解説30]
ロールアップ(次ページ)、つまりデータを前方に進める場合は、このまま前回の続きとしてファイルを読めばいい。

[解説40]
ロールダウン(前ページ)、つまり逆方向へファイルを読む場合は、ファイルカーソルの位置を、いったん前に戻してから、ロールアップと同じ処理になる。

[解説45]※見やすくフレームを調整して下さい。
ここは、重要です。サファイルにレコードを書き込む場合、READをいきなりしますので、ファイルカーソルは、画面の先頭行のレコードの一つ前に無いといけないのです。 W1CNTはページの途中で終わった場合のつじつま合わせ用です。

例えば、1ページ3行という前提で考えますと、

  ファイルレコード ページ

W1CNT

Backward

*LOVAL SETLL

BOF

*

*

   
 

1

1

1

3

6

   
 

2

2

2

5

   
 

3

3

1

4

7

 
 

4

2

1

 

3

6

 
 

5

2

 

2

5

 
 

6

3

 

1

4

5

 

7

3

1

   

3

4

 

8

2

   

2

3

 

9

3

   

1

2

 

10

4

1

     

1

*HIVAL SETGT

EOF

     

*

 

  1. 最初のページから前のページに戻るならば、ファイルレコード番号1の前にする(BOF;*LOVALでSETLLします)。
  2. 2ページ表示後、前のページに戻るならば、ファイルレコード番号6から、ファイルレコード番号1にする(-7;BOF;*LOVALでSETLLします)
  3. 3ページ表示後、前のページに戻るならば、ファイルレコード番号9から、ファイルレコード番号3にする(-7)
  4. 4ページ表示後、前のページに戻るならば、ファイルレコード番号EOFから、ファイルレコード番号6にする(-5)

まとめると、
前ページレコード数(=3)+表示中のレコード数、
EOFのページは、ここに+1をすることになります。

[解説50]
一ページ分を取り込む方法はやはり、書き込んだレコードのカウント(W1CNT)をして判断します。W1CNTの代わりにRRN01では、@BWDでおかしくなります。 READCでRRN01が変わるからです。

[解説60]
ここで、EOFになったら、SETGTするのは、この後、オペレータがロールダウン(前ページ)をするかもしれないから。つまり、パターン2では、ロールダウンは、メモリに入った内容を巻き戻すので、明示的にSETGTをする必要がありませんでした。しかし、パターン3では、すべて読み直しをするので、この処理をする必要があります。
ちなみに、READ系の命令では、EOF,BOF後に再び読み込むときは、位置決め命令(SETLL,SETGT)は必須です。

[解説70]
ここでも、EOF検査のあと、SETGTをしないと、この後の、ロールダウン処理がおかしくなります。

[解説80]
書き込み行数のカウント用のフィールドのカウントアップです。

[解説100]
EOFの場合のみ、SETGTをした分、戻りレコード数は、+1します。SETGT後にREADPで読み込むレコードが、最終レコードとなるからです。

[解説110]
ここで、ファイルカーソルを一気にもどします。スクロールバックをしているわけです。

[解説120]
*IN95はBOF(ファイル先頭)に達したので、*LOVAL SETLLをしています。

このあとは、パターン1と同じです。


[ Previous ] [ HOME ] [ Upper ]

You are at K's tips-n-kicks of AS/400

 

SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送