《DOSマシーンでFORMが使えません》
弊社も、若手社員が入ってきて機械の増設を余儀なくされました。購入するときに悩みました。高価だけれども、<FORM>が使える機械がよいか? 安価で将来増設し易い機械がよいか。
結論は、後者を選びました。将来、もしかすると<FORM>が使えるかも知れない。そうしたら、ラッキーだと思えばよいじゃないか。とりあえずは、プログラムを組むのがめんどうでも、FORMに似せる事は出来るのだから、と時代の流れに乗りました。
みなさん、それぞれ御家の事情が違うでしょうが、スーパーPIPSよりもThe PIPSの方が遥かに使い勝手がいいですからどんどん新しいものにチャレンジして頂きたいと思います。
そんな思いも込めて、報告致します。
《改良点》
-
プログラムを登録してあるキャビネットに,UNIONを設定しました。
-
プログラムのキャビネットとデータのキャビネットを別々にしました。
USEINF(3)を使用していますので、同じキャビネットに混在していますとキャビネット使用不能になります。
-
IUSE から IEND までの時間を、できるだけ短くしました。
-
USEINF の3(読み書き可能)を使用しました。
X変数=1 ------- キャビネット使用可能
X変数=0 ------- キャビネット使用不能
-
次のデータを読むためにその都度 MENUを呼んでいましたが、MENU画面をDISP文で消去する方法にしました(アクセスしなくて済むし、この方が早い)。
《プログラムの手順》
THE PIPS 147号の7〜8頁と比較してください。
行数
| 内容
|
1行目
|
SET の F で設定します。
|
13〜15行目 |
"$読み"の中にあったのを、移動しました。IUSE から IENDまでを、できるだけ短くするためです。
|
16行目 |
IUSE する前に <USEINFCHK> でチェックします。
|
17行目 |
INDEX を OPEN します。
|
18行目 |
該当する共済NO の有無をチェックします。
|
22行目 |
共済NOがなければ、DISP文を表示します。
|
28行目 |
バインダーBANKMの項目 @# に#がなければ、“$読み”に行きます。
|
31行目 |
バインダーBANKMの項目 @# に#があれば、他のクライアントが更新中です。
|
36行目 |
IREAD で項目を読み込む前に @# に#を書き込みます。 もし、他の人が本人の使用している共済NOを入力すれば、@# に#があり、"更新中"のメッセージが表示されます。
|
37行目 |
まとめて IREAD をします。
|
39行目 |
INDEX を END します。 END しないとそのキャビネットを他の人が使用できなくなります。
|
57行目 |
質問の画面になります。 ダミー表に、IREAD で項目を読み込ませ画面上での訂正にします。
|
92行目 |
SET を解除します。
|
102行目 |
IUSE する前に <USEINFCHK> で チェックします。
|
104行目 |
まとめて IWRITE をします。
|
106行目 |
INDEX を END します。 END しないとそのキャビネットを他の人が使用できなくなります。
|
108行目 |
MENU画面 を DISP文 で消去します。 MENU画面 を G するより速いです。
|
《おわりに》
147号にネットワークの事例を発表させていただいてから、入川氏に何度も弊社にご足労を煩わせまして,ご協力頂き大変感謝しております。
また、ソードテレフォンサービスの皆様、ご協力頂き大変感謝しております。
1 《プログラム》
2 SET/N;F;;3;1;4;5;;;
3 LET X40=99;
4 DISP OPEN(1,1,80,22)/N;
5 GOSUB H/KANRI:USEINFCHK;
6 MENU/N/A;G;H/KANRI:2;ESC;
7 LET V21="H/KANRI1:BKIND";
8 $始: DISP [01,21],SP50,COLOR(Y);
9 DISP [55,03],"** 変更画面 **";
10 DISP [58,21],"[ESC]=終了",COLOR(W);
11 INPUT [14,07],V1,U(C:NNNN);
12 IF ERR(0)=55 THEN GOTO $終了;
13 G;H/KANRI:口座変更ダミー/1;
14 LET [4,@共済]=V1;
15 LET Z2=TODAY;LET V5=NUM$(Z2);LET V6=MID$(V5,3,6);
16 GOSUB H/KANRI:USEINFCHK;
17 IUSE V21;ISEARCH V21,V1;
18 IF ERR(0)=34 THEN GOTO $無 ELSE GOTO $更新;
19
20 $無: IEND V21;
21 DISP [01,21],SP70;
22 DISP [01,21],COLOR(R), "該当する共済NO ",V1," は存在していません";
23 DISP COLOR(W);CLEAR V1;
24 BELL;SLEEP 5;GOTO $始;
25
26 $更新:
27 IREAD V21,V2=@# ;
28 IF V2="" THEN GOTO $読み;
29 IEND V21;
30 DISP [01,21],SP70;
31 DISP [01,21],COLOR(M), "共済NO ",V1,"は更新中ですので、呼び出せません!!";
32 DISP COLOR(W);CLEAR V1;
33 BELL;SLEEP 5;GOTO $始;
34
35 $読み:
36 IWRITE V21,@# ="#";
37 IREAD V21,V2=@氏名 ,V3=@支部 ,V4=@班 ,V6=@入力日 ,V7=@預金者名 ;
38 IREAD V21,V8=@銀行名 ,V9=@支店名 ,V10=@ヨ ,V11=@預金 ,V12=@口座NO ,V13=@備考 ;
39 IEND V21;
40
41 LET [4,@氏名]=V2; LET [4,@支部]=V3; LET [4,@班]=V4; LET [4,@入力日]=V6;
42 LET [4,@預金者名]=V7;LET [4,@銀行名]=V8; LET [4,@支店名]=V9;LET [4,@ヨ]=V10;
43 LET [4,@預金]=V11; LET [4,@口座NO]=V12;LET [4,@備考]=V13;
44
45 DISP [22,07],V2, U(%(STRING$(60,16)));
46 DISP [41,07],V3, U(%(STRING$(60,04)));
47 DISP [50,07],V4, U(%(STRING$(60,02)));
48 DISP [59,07],V6, U(%(STRING$(60,06)));
49 DISP [26,09],V7, U(%(STRING$(60,30)));
50 DISP [26,11],V8, U(%(STRING$(60,24)));
51 DISP [26,13],V9, U(%(STRING$(60,24)));
52 DISP [26,15],V10,U(%(STRING$(60,01)));
53 DISP [30,15],V11,U(%(STRING$(60,04)));
54 DISP [26,17],V12,U(%(STRING$(60,07)));
55 DISP [26,19],V13,U(%(STRING$(60,04)));
56
57 $質問: DISP [01,21],SP70;
58 CLEAR V2,13;
59 INPUT [16,21],"番号で訂正(1-5),[RETURN]=登録,[ESC]=キャンセル ",V10,COLOR(Y),U(X/AS);
60 IF ERR(0)=55 THEN GOTO $取消;
61 IF V10="" THEN GOTO $登録;
62 IF 1<=VAL(V10) AND VAL(V10)<=6 THEN GOTO $%V10X;
63 IF VAL(V10)<0 OR VAL(V10)>6 THEN GOTO $AAA;
64 $AAA: BELL;GOTO $質問;DISP [03,22],SP60;
65
66 $1X: LET V2=[4,@預金者名];
67 INPUT [26,09],V2,U(%(STRING$(74,30))/AF/RY); /* 預金者名 */
68 LET [4,@預金者名]=V2;GOTO $質問;
69
70 $2X: LET V2=[4,@銀行名];
71 INPUT [26,11],V2,U(%(STRING$(74,24))/AK/RY); /* 銀行名 */
72 LET [4,@銀行名]=V2;GOTO $質問;
73
74 $3X: LET V2=[4,@支店名];
75 INPUT [26,13],V2,U(%(STRING$(74,24))/AK/RY); /* 支店名 */
76 LET [4,@支店名]=V2;GOTO $質問;
77
78 $4X: DISP [30,15],SP4;
79 INPUT [26,15],V2,U(%(STRING$(74,01))/AS); /* 預金種目 */
80 IF V2<>"1" AND V2<>"2" THEN GOTO $4X;
81 IF V2="1" THEN LET V3="普通";IF V2="2" THEN LET V3="当座";
82 DISP [30,15],COLOR(W),V3,U(%(STRING$(60,04)));
83 LET [4,@ヨ]=V2;LET [4,@預金]=V3;GOTO $質問;
84
85 $5X: INPUT [26,17],V2,U(C:%(STRING$(78,07))/AS/P*); /* 口座番号 */
86 LET [4,@口座NO]=V2;GOTO $質問;
87
88 $6X: LET V2=[4,@備考];
89 INPUT [26,19],V2,U(%(STRING$(88,04))/AS/RY); /* 備考 */
90 LET [4,@備考]=V2;GOTO $質問;
91
92 $終了:SET;F;M;4;0;;;
93 CLOSE;STOP
94
95 $登録:
96 DISP [16,21],COLOR(Y)," 登 録 中",COLOR(W);
97 CLEAR V2,13;
98 LET V2=[4,@入力日];LET V3=[4,@預金者名];LET V4=[4,@銀行名];
99 LET V5=[4,@支店名];LET V6=[4,@ヨ]; LET V7=[4,@預金];
100 LET V8=[4,@口座NO];LET V9=[4,@備考];
101
102 GOSUB H/KANRI:USEINFCHK;
103 IUSE V21;ISEARCH V21,V1;
104 IWRITE V21,@入力日 =V2,@預金者名 =V3 ,@銀行名 =V4 ,@支店名 =V5;
105 IWRITE V21,@ヨ =V6 ,@預金 =V7 ,@口座NO =V8 ,@備考 =V9 ,@# ="";
106 IEND V21;
107
108 $画面消去:
109 DISP [22,07],SP16,[41,07],SP4, [50,07],SP2, [59,07],SP6;
110 DISP [26,09],SP30,[26,11],SP24,[26,13],SP24,[26,15],SP1;
111 DISP [30,15],SP4, [26,17],SP7, [26,19],SP4;
112 GOTO $始;
113
114 $取消:IUSE V21;ISEARCH V21,V1;IWRITE V21,@# ="";IEND V21;
115 GOTO $画面消去;
116
117《USEINFCHK》
118 LET V20="H/KANRI1"; /*##### V21:サーバーのキャビネット名 #####*/
119
120 $#1: LET X2=USEINF(3,V20);
121 IF X2=1 THEN GOTO $#3;
122 $#2: DISP COLOR(Y),[01,21],"キャビネットは使用中";
123 GOTO $#1;
124 $#3: DISP [01,21],SP20;
125 RETURN;
□