新しく発言する EXIT インデックスへ
EXECUTE-PAUSEについての3つの疑問

  EXECUTE - PAUSE についての3つの疑問 Takuji 2005/08/22 22:03:36 
  Windows95(4.00.950a),IE5.5のとき、 白石 和夫 2005/08/23 09:38:46 
  │└ハードウェアアクセラレータの設定を最大-大... takuji 2005/08/31 00:49:50 
  │ └WindowsMeでもやってみましたが、問題はない... 白石和夫 2005/08/31 07:31:34 
  │  └相変わらずここでのトラブルが解決できませ... Takuji 2005/10/03 07:19:07 
  │   ├BASICプログラムに対するCHAIN文,EXECUTE文... 白石 和夫 2006/01/14 08:16:19 
  │   │└呼び出された側で保存し,呼び出した側で読... 白石 和夫 2006/01/14 12:04:32 
  │   └END文は実行文ではないので,PAUSE文の次の... 白石 和夫 2006/01/14 08:36:34 
  1)は正常な動作です。すぐに終了させないた... 白石 和夫 2006/01/14 08:56:34 

  EXECUTE - PAUSE についての3つの疑問 Takuji 2005/08/22 22:03:36  ツリーへ

EXECUTE - PAUSE についての3つの疑問 返事を書く
Takuji 2005/08/22 22:03:36
http://hp.vector.co.jp/authors/VA008683/ExtProg.htm
外部プログラムの利用
 1. BASICプログラムを書き出して実行する

関数f(x)をBASICの文法で入力すると,そのグラフを描く
100 DATA "SET WINDOW -4,4,-4,4"
110 DATA "FOR x=-4 TO 4 STEP 0.01"
120 DATA " PLOT LINES:x,f(x);"
130 DATA "NEXT x"
140 DATA "PAUSE " ! 終了の指示を待つために必要
150 DATA "END"
160 INPUT PROMPT "f(x)=":s$
170 OPEN #1:NAME "temp.bas" ! ファイル名には,拡張子.BASを付加する
180 ERASE #1
190 PRINT #1:"DEF f(x)=";s$
200 DO
210 READ IF MISSING THEN EXIT DO: s$
220 PRINT #1:s$
230 LOOP
240 CLOSE #1
250 EXECUTE "temp" ! ファイル名は,拡張子を省いて指定する
260 FILE DELETE "temp.bas" ! 後始末
270 END

Windows 95(4.00.950a)上で(仮称)十進BASIC Version 5.0.8を上記
の例で実行した場合、次の3点が問題になりました。
1) PAUSEで"OK"をクリックした時点でEXECUTEで呼び出された側の
ウィンドウ(タスク)が直ちに煙と消えて(終了して)しまう。
2) PAUSEダイアログ表示の時点で先に呼び出された(主?)プログラム
側のグラフィック・ツール(タスク?)・バーをクリックすると、
(クリック音がして)以後WindowsがHang up(Freezing)してしまう。
(Ctrl+Alt+DeleteでBASICの終了はできる。)
3) 十進Basicフォルダに含まれる Revision.txt [修正・変更の履歴]に、
"ver 5.0.8 PAUSE文で表示されるダイアログで×をクリックすると
デバッグ状態に移行するようにした。"
とあるのですが、EXECUTE文で呼び出された方のBASICが全て終了して
しまう、つまり 1)と同様である。
これが当方だけの問題なのか、Windows 95での問題なのか判別出来ない
でいます。Windows 98、Windows Meで試してみる前に御意見を伺いたい
のですが。

  Windows95(4.00.950a),IE5.5のとき、 白石 和夫 2005/08/23 09:38:46  ツリーへ

Re: EXECUTE - PAUSE についての3つの疑問 返事を書く
白石 和夫 2005/08/23 09:38:46
Windows95(4.00.950a), IE 5.5のとき、
十進BASIC 5.0.10 ですが、特に問題はないようです。
症状から判断すると、ビデオドライバの問題の可能性もあるので、
コントロールパネル−システム−パフォーマンス−グラフィックスで、
ハードウェアアクセラレータの設定を下げてテストしてみてください。

  │└ハードウェアアクセラレータの設定を最大-大... takuji 2005/08/31 00:49:50  ツリーへ

Re: Windows95(4.00.950a),IE5.5のとき、 返事を書く
takuji 2005/08/31 00:49:50
ハードウェアアクセラレータの設定を 最大->大->基本->なし と下げて
見ましたが結果は同じでした。
そこでBasic50h.exe(十進BASIC 5.0.10)をフロッピーに展開して、
Windows 95,98(IE 5),Me(IE 5.5)上で同じ例題で実行した結果は、
やはり 2)のFreezingの現象はいずれも起こります。
Basic51g.exe(ver. 5.1.16)も同時にDownloadはしているので一応
やってみる準備は出来ているのですが・・・。

  │ └WindowsMeでもやってみましたが、問題はない... 白石和夫 2005/08/31 07:31:34  ツリーへ

Re: ハードウェアアクセラレータの設定を最大-大... 返事を書く
白石和夫 2005/08/31 07:31:34
Windows Meでもやってみましたが、問題はないようです(ver. 5.0.17)
もし、フロッピーディスクから実行されているようでしたら、ハードディスクにコピーしてから実行してみてください。

  │  └相変わらずここでのトラブルが解決できませ... Takuji 2005/10/03 07:19:07  ツリーへ

Re: WindowsMeでもやってみましたが、問題はない... 返事を書く
Takuji 2005/10/03 07:19:07
相変わらずここでのトラブルが解決できません。
140 DATA "PAUSE " ! 終了の指示を待つために必要
をダミーとして、
140 DATA "CHARACTER INPUT C$" ! 終了の指示を待つために必要
に替えて見ると、
2)のFreezingの現象は回避できますが、1)のEXECUTE文で呼び出された方の
BASICが全て終了してしまう と云う問題は残ります。
つまり、140行での待ち時間以降は何も出来ないということです。
(描かれたグラフの後処理ができない、即ちGraphic Windowの ファイル(F)、
編集(E)にshadow(半透明)が懸かっている状態)
3)の "ver 5.0.8 PAUSE文で表示されるダイアログで×をクリックすると
デバッグ状態に移行するようにした。"
とあるのは多分この問題を回避するためのものであろうと思うのですが。

追伸
今回、Windows 2000(Professional)をインストール(Windows 98とのDual boot)
してみたところ、PAUSEでのFreezingの問題は解消されました。
しかし temp.basの実行後終了してしまう現象は残りました。
次の如く変更してみてもbreak point --> ENDで全て消えてしまいます。

90 DATA "DEBUG ON" ! 追加 <--
100 DATA "SET WINDOW -4,4,-10,10"
110 DATA "FOR x=-4 TO 4 STEP 0.01"
120 DATA " PLOT LINES:x,f(x);"
130 DATA "NEXT x"
140 DATA "BREAK" ! 終了の指示を待つために必要 PAUSE --> BREAKに変更
145 DATA "DEBUG OFF" ! 追加 <--
150 DATA "END"
160 INPUT PROMPT "f(x)=":s$
170 OPEN #1:NAME "temp.bas" ! ファイル名には,拡張子.BASを付加する
180 ERASE #1
190 PRINT #1:"DEF f(x)=";s$
200 DO
210 READ IF MISSING THEN EXIT DO: s$
220 PRINT #1:s$
230 LOOP
240 CLOSE #1
250 EXECUTE "temp" ! ファイル名は,拡張子を省いて指定する
260 FILE DELETE "temp.bas" ! 後始末
270 END

  │   ├BASICプログラムに対するCHAIN文,EXECUTE文... 白石 和夫 2006/01/14 08:16:19  ツリーへ

Re: 相変わらずここでのトラブルが解決できませ... 返事を書く
白石 和夫 2006/01/14 08:16:19
BASICプログラムに対するCHAIN文,EXECUTE文では,起動された側のBASIC.EXEはプログラムの実行が終えると終了します。
したがって,描かれたグラフの保存はプログラムで行わなければなりません。
たとえば,次のようにすれば,保存が可能です。
DATA "SET WINDOW -4,4,-4,4"
DATA "FOR x=-4 TO 4 STEP 0.01"
DATA " PLOT LINES:x,f(x);"
DATA "NEXT x"
DATA "INPUT s$"
DATA "IF s$=""Y"" THEN"
DATA " GSAVE ""TEMP.BMP"""
DATA "END IF"
DATA "END"
INPUT PROMPT "f(x)=":s$
OPEN #1:NAME "temp.bas" ! ファイル名には,拡張子.BASを付加する
ERASE #1
PRINT #1:"DEF f(x)=";s$
DO
READ IF MISSING THEN EXIT DO: s$
PRINT #1:s$
LOOP
CLOSE #1
EXECUTE "temp" ! ファイル名は,拡張子を省いて指定する
FILE DELETE "temp.bas" ! 後始末
END

なお,BASICのプログラムとしてではなく,OS上のプログラムとしてBASIC.EXEを起動する方法も考えられます。
BASIC.EXEには,
(1)プログラムを実行して直ちに終了する
(2)プログラムをロードして実行を待つ
の2つの選択肢しかないので,(2)を選ぶと実行の指示は利用者が行う必要があります。

EXECUTE "C:\BASICw32\BASIC.EXE" with ("/NR", "TEMP.BAS")


  │   │└呼び出された側で保存し,呼び出した側で読... 白石 和夫 2006/01/14 12:04:32  ツリーへ

Re: BASICプログラムに対するCHAIN文,EXECUTE文... 返事を書く
白石 和夫 2006/01/14 12:04:32
呼び出された側で保存し,呼び出した側で読み込むことにすればOkでした。
100 DATA "SET WINDOW -4,4,-4,4"
110 DATA "FOR x=-4 TO 4 STEP 0.01"
120 DATA " PLOT LINES:x,f(x);"
130 DATA "NEXT x"
140 DATA " GSAVE ""TEMP.BMP"""
150 DATA "END"
160 INPUT PROMPT "f(x)=":s$
170 OPEN #1:NAME "temp.bas" ! ファイル名には,拡張子.BASを付加する
180 ERASE #1
190 PRINT #1:"DEF f(x)=";s$
200 DO
210 READ IF MISSING THEN EXIT DO: s$
220 PRINT #1:s$
230 LOOP
240 CLOSE #1
250 EXECUTE "temp" ! ファイル名は,拡張子を省いて指定する
260 GLOAD "TEMP.BMP"
270 SET WINDOW -4,4,-4,4
280 FILE DELETE "TEMP.BMP"
290 FILE DELETE "temp.bas" ! 後始末
300 END


  │   └END文は実行文ではないので,PAUSE文の次の... 白石 和夫 2006/01/14 08:36:34  ツリーへ

Re: 相変わらずここでのトラブルが解決できませ... 返事を書く
白石 和夫 2006/01/14 08:36:34
END文は実行文ではないので,PAUSE文の次の文がEND文だと,デバッグ状態に移行してもすぐに終了してしまいます。
デバッグ状態を実現したい場合は,PAUSE文のあとに何らかの実行文を書いてください。
なお,デバッグ状態は実行中なので,グラフィックウィンドウのファイルメニューは有効にはなりません。(デバッグ中にグラフィックウィンドウのファイルメニューが使える状態になったらバグです)

  1)は正常な動作です。すぐに終了させないた... 白石 和夫 2006/01/14 08:56:34  ツリーへ

Re: EXECUTE - PAUSE についての3つの疑問 返事を書く
白石 和夫 2006/01/14 08:56:34
1)は正常な動作です。すぐに終了させないためにPAUSE文があります。
3)は,PAUSE文の次が非実行文のEND文なので,デバッグ状態に移行してもすぐに終了します。(デバッグウィンドウを表示するためには,PAUSE文の次に何らかの実行文(PRINT文など))を書く必要があります。


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。