一つ 余分な手間が入りますが、それで解決します。 まず、実際に動作させたいプログラムの名前が"execute.b99" であるとします。 しかし、そのファイルをすぐには開かずに、そのプログラムを開くためのプログラムを作ります。 ![]() 10 rem "pre-execute" 11 rem 12 clear 300,200,200:rem プログラム領域 300kb / 変数領域 200kb / 文字列領域 200kb 13 load "execute",r:rem "execute.b99"を loadして 即 実行する。 ![]() この場合、"execute.b99"をloadした時点で、 "pre-execute.b99"は破棄されます。 これにより、プログラム領域 300kb が確保された上で"execute.b99"を読み込んで実行することになるので、"execute.b99"の容量が 299kb まで読み込んで実行する事が出来ます。 ※ 上の12行の clear命令を使う際には、プログラム領域・変数領域・文字列領域 の合計が770kb 未満でなければなりません。 |
670 INPUT " 以 上です *同じ仕事( ) *もう一度 画面(y) *終る(999) を";XY$ 680 COLOR 7: IF XY$="999" THEN 300 999を入力すれば、XY$="999"となって、THEN 300でGOTOするはずですが、何故かそうなりません。 試しにダイレクト・コマンドで、 PRINT XY$ を実行してみると、 XY$ は次のように化けています。 以 上です *同じ仕事( ) *もう一度 画面(y) *終る(999) を999 但し何度か、いろいろテストしてみたところ、正しく「999」になっていることもあります。 しかし化ける時とそうでない時の規則性や原因は分かりません。
◇解決策
化ける時の規則性が発見できなかったので、次のように2行に分割することで、回避しました。
670 PRINT " 以 上です *同じ仕事( ) *もう一度 画面(y) *終る(999) を "
675 INPUT XY$
5500 ' ------ Sub. OUTPUT #1-8(VV) ---- 730 5510 W$=SPACE$(250): MID$(W$,1,13)=NA$ 5555 ' MID$(W$,139,6)=LAST$ : MID$(W$,145,2)=MID$(STR$(VAL(POIN$)+VAL(P1$)),2,2) ' N88互換BASIC 5560 MID$(W$,139,6)=LAST$ : MID$(W$,145,2)=MID$(STR$(VAL(POIN$)+VAL(P1$)),1,2) ' 99Basic 5577 'MID$(W$,241,1)=DM$ : MID$(W$,242,2)=A1$ ' N88互換BASIC 5580 MID$(W$,241,1)=DM$ : MID$(W$,243,2)=A1$ ' 99Basic 5582 W$=W$+SPACE$(100): W$=MID$(W$,1,250) 5590 IF A1>9 THEN A1=0 5592 '' NSA$(I)=RIGHT$(STR$(A1),1)+RIGHT$(STR$(SEX+JR),1)+LEFT$(NA$,3)+MID$(I$,2,3) '' N88互換BASIC 5595 NSA$(I)=RIGHT$(STR$(A1),1)+RIGHT$(STR$(SEX+JR),1)+LEFT$(NA$,3)+MID$(I$,1,3) '' 99Basic
100 W$="1234567890" 110 A$=KMID$(W$ , 1 , 3) '' 存在しない KLEFT$($ ,3)と同じ意味の命令になり、A$="123"になります 120 B$=KMID$(W$ , KLEN(W$-3) , 3) '' 存在しないKRIGHT$($ ,3)と同じ意味の命令になり、B$="890"になります
100 FOR N=1 TO 9
150 IF *** = /// THEN 500
200 NEXT
300 PRINT " N= "; N
350 N=N-1
私の不確かな記憶では、DOS-N88BASICやN88互換BASIC for Windows95の場合は、このケースなら N = 9 が表示されたように思います。ところが99Basicでは、Nは +1 されて、10になってしまいます。
注: WRITE 命令とは、「画面やシーケンシャルファイルに数字や文字を表示します」となっています。 このLOCATE が有効なのは、WRITE 命令の画面表示だけであって、シーケンシャルファイル出力では無効ではないかと想像します。但しテストはしていません。 |
ON 数値 GOSUB
2130 INPUT " 訂正があれば、名前(1)、住所(2)、電話(3)、年齢(4) 番号の入力を";Q
2140 IF Q<>0 THEN ON Q GOSUB 2900,3000,3300,3500
このように数値には Q などの変数が使え、もしQ=1ならGOSUB 2900、もしQ=2ならGOSUB 3000、
もしQ=3ならGOSUB 3300、もしQ=4ならGOSUB 3500をします。
ON ERROR
290 ON ERROR GOTO *ONERROR
もしエラーが発生したら、ラベル*ONERRORに GOTO しなさい、というプログラムです。 私の場合、DOS-N88BASICを使っていた時代には、飛び先では主に次の2つの処理をしていました。
1.
DOS-N88BASICのエラーメッセージが英文だったので、日本語で詳しく自作しておいたものを、表示する。
2.
作りかけのデーターがムダにならないように、別名で強制保存する。
または、データーを壊す恐れがある時は、ファイルの書き換えなどをさせずに強制保存する。
ON KEY GOSUB ,,, : KEY () ON
80 ON KEY GOSUB ,,,,,, 16000,15000
90 KEY (7) ON: KEY (8) ON
ファンクション・キー( Fキー)が押された時に、キー番号に応じてGOSUB せよ、という命令です。
サンプルのプログラムでは、80行ではもしF-7キーならGOSUB 16000、F-8キーならGOSUB 15000
そして90行では、この命令を有効にせよ、となっています。
ON MOUSE
100 ON MOUSE GOSUB 2000
110 MOUSE ON
100行で、マウスが何かをしたら GOSUB 2000をせよ、110行でこの命令を有効にせよ、と設定しています。
* ON MOUSEと GET MOUSE の詳しい説明とサンプルのプログラムは、別ページにあります。
◇ ON MOUSE GOSUB や ON KEY GOSUB命令を有効にする