回答箱 No.72-2:TPSでバインダーを確保する方法は?

  ◆ 質問箱 No.72    質問者: 元山 よし子  1998年03月 194号 P.19
     ◆ 質問箱 目次へ
No.72-2     TPSでバインダーを確保する方法は? 回答者
  榎村 暢文
1998年04月
195号 P.22
  ◆ No.72(1998年3月号)の回答-2
   編集部注にしたがってバインダー数に余裕があるかどうかをチェックする方法として、LT;B;のバインダーリストを利用します。
   バインダーに余裕があっても頁に余裕がなければ意味がありませんので、それもチェックするようにしまいした。
   また、TPSは頁が不足していてもバインダー数は拡張できるので、50個に限定せず、最大数をチェックし、50個以上の場合にはリストを保管するようにしています。空きスペースをカウントする方法を二通り考えましたので、両方共発表します。
   第一案
      「バインダーリストの一行づつをチェックしカウントする方式」

   注:
  • 1. バインダー登録数が50に限定されているようでしたら、6/8,9/11,13/16の行を消去し、10行目の%V4を消去してください。
  • 2.メインのプログラムからキャビネット名、確保するバインダーの数が送られてくるならば、ACCEPT文は不要と思います。
  • 3.すでに確保されているバインダーがあり、その名称が他と混同しない共通部分を持つならば、15行目のIF文にその条件のものもカウントするようにするか、後に別の変数で既登録のバインダーだけをカウントする、IF文を追加してください。

 1<CHE>
 2 LET X20=0;LET X1=0;
 3 ACCEPT "チェックするキャビネット名は",V1;
 4 CC;%V1;                                          /*対象キャビネットの変更*/
 5 IF MID$(V1,2,1)="/" THEN LET V2=RIGHT$(V1,3);/*キャビネット名と装置の分離*/
 6 LET V1='"'+V1+'"';LET V3=LTINF$(2,8,%V1);    /*最大バインダー数の読込み*/
 7 LET V2='"'+V2+'"';LET Z1=FREE(3,%V2);             /*空き頁数の読込み*/
 8 IF VAL(V3)<=50 THEN GOTO $AA           /*バインダーリスト保管の要不判定*/
 9 ACCEPT "リストを保管するバインダー? ",V4;
10$AA:LT;B;;%V4;;                                            /*バインダーリストの読込み*/
11 IF VAL(V3)<=50 THEN GOTO $CC;             /*バインダー登録数50以上の対応*/
12 LET X20=X20+1;IF X20>IVAL(V3)\50 THEN GOTO $DD;
13 G;%V6/%X20;
14$CC:FOR X10=H TO T;LET V10=[X10,4];
15 IF V10="" THEN LET X1=X1+1;NEXT;               /*未使用バインダーーのカウント*/
16 IF IVAL(V3)<=50 THEN GOTO $DD;GOTO$BB;
17$DD:ACCEPT "確保するバインダー数は?",X2;
18 IF X2<X1 & <INTG(Z1) THEN GOTO $EE;              /*空きスペースの判別*/
19 MESSAGE "空きスペースが不足しています!!";STOP
20$EE:MESSAGE "確保可能です";STOP
    第二案
   「バインダーリストをCSでチェックしカウントする方式」

こちらのほうがステップ数も少なく、すっきりしていると思います。
   注:
  • 1. バインダー登録数が50に限定されているようでしたら、第一案と同様に6/8,9/11,13/16の行を消去し、12行目の%V4を消してください。
  • 2.空きスペースにカウントして良い使用中のバインダーがある場合は14行のCS条件にそれを加えてください。

 1<CHEKB>
 2 LET V4="";                                            /*変数のクリアー*/
 3 ACCEPT "チェックするキャビネット名は",V1;
 4 CC;%V1;                                            /*対象キャビネットの変更*/
 5 IF MID$(V1,2,1)="/" THEN LET V2=RIGHT$(V1,3);/*キャビネット名と装置切り離し*/
 6 LET V1='"'+V1+'"';LET V3=LTINF$(2,8,%V1);      /*最大バインダー数の読込み*/
 7 LET V2='"'+V2+'"';LET Z1=FREE(3,%V2);               /*空き頁数の読込み*/
 8 IF VAL(V3)<=50 THEN GOTO $AA                    /*リスト保管の要不判定*/
 9 ACCEPT "リストを保管するバインダー? ",V4;        /*リスト保管バインダー指定*/
10 LET V6=V4;LET V5='"'+V4+'"';
11 IF NAME(3,%V5)<>0 THEN LET V4=V4+"/D";         /*既存バインダーのゴミ取り*/
12$AA:LT;B;;%V4;;                                   /*バインダーリストの読込み*/
13 ;IF V4="" THEN LET V4="M" ELSE LET V4=V6;
14 CS;%V4;C4="";;;;;LET Z2=RESULT(1)               /*空きスペースのカウント*/
15$DD:ACCEPT "登録予定のバインダー数は?",X2;
16 IF X2<INTEG(Z1) & <INTG(Z2) THEN GOTO $EE;   /*空きスペースの大きさ判別*/
17 MESSAGE "空きスペースが不足しています!!";STOP
18$EE:MESSAGE "登録可能です";STOP                         以上
戻る