No.72-3 |
TPSでバインダーを確保する方法は?
| 回答者 入川 精二 | 1998年04月 195号 P.24 |
◆ No.72(1998年3月号)の回答-3
- 1. スーパーPIPSでは1つのPDATAに作れるバインダー数は20〜60と限られていました。The PIPSではこれが32,000になっています。 従って空きバインダーが足りなければ'IN-E'で使えるバインダーを増やせばよいのです。ただし、こうしてどんどん増やして行くと、いずれバインダー一覧を見ても何がなんだか訳が分からなくなります。やっぱりバインダーを作るのにも『節度』が必要ですね。
- 2. 少し真面目に考えましょう。プログラムを走らせてバインダーを幾つ使うかは予め分かりますから、それだけの「空き」があるかどうかをチェックする方法を考えましょう。幸いThe PIPSには'FREE関数’というのがあります。
『装置またはキャビネットの、指定された種類の残量を求めます』という説明がついています。次のように使うとキャビネット内の残りバインダー数を求めることが出来ます。
LET Z1=FREE(4,"装置名/キャビネット名");
ついでながら、この関数の他の機能も表示しておきます。
書式: FREE(X,Y) ・・・・・・ 実数関数(Z変数を使う)
文字列'Y'の機能番号'X'による残量を格納する。
装置名やキャビネット名'Y'は ''(コーテーション)で囲む。
機能番号X | 関数値が持つ内容 |
1 | 指定装置内に作成可能な頁数を格納します |
2 | 指定装置内の残り容量(バイト数)を格納します |
3 | 指定キャビネット内の残り頁数を格納します |
4 | 指定キャビネット内の残りバインダー数を格納します |
5 | 指定キャビネット内の残りオート数を格納します |
6 | 指定キャビネット内の残りメニュー数を格納します |
- 3. 途中経過のバインダーは全て予め削除しておく。
このためにはバインダーの名前を‘WORK2’といった単純な名前にしておきます。 プログラム毎に使うWORKを WORK1〜WORK10 とか WORK31〜WORK38 とか決めておきます。
プログラムの最初に次のような記述をしておきます。
FOR X1=31 TO 38;
IF NAME(3,"WORK"+NUM$(X1))=0 THEN CONTINUE;
BIND;D;WORK%X1;Y;
NEXT;
こうしておけばバインダーの数がやたら増えることを防げます。どうしても残しておきたいデータがあれば、別途'CPP'で保存するようにします。
- 4. 前項のような記述も面倒なときは、処理の後の保存するバインダー名を指定するときに'WORK5/D'のようにすれば、必ず既存データを削除してから保存してくれます(バインダーが存在しないときは新規に作ります)。
□
| |