-
ZJI さん
2006-03-10 22:36:46
cttyコマンド使うのはだめでしょうか?
-
かねやす さん
2006-03-11 02:18:10
command.comの標準出力先を nul にすればいいんじゃないでしょうか。
もはやdos時代のやったこと忘れてるんですが QBならたぶん
run "command.com /C [対象ソフト] > nul"
なんとかでは。
-
総額7600円 さん
2006-03-11 10:15:06
どうもありがとうございます。
(QBの)SHELL="[当該ソフト名] <NUL" でメッセージが表示されなくなりました。
しかし相変わらずブラックアウトします。画面左上にも白い矩形が表示されます。
メッセージなし画面を見て気づいたのですが,メッセージを表示している間も当該ソフトが実行されているんですね。
-
総額7600円 さん
2006-03-11 17:50:17
う〜ん,どうしてもブラックアウトします。
もしかしてマニュアルに記載のない資料が別紙で添付されていて,そっちに固有の解決法が書かれていたとかなのかなぁ・・・
-
ぽん さん
2006-03-12 00:49:43
>SHELL="[当該ソフト名] <NUL"
これだと NUL値 を入力してしまうような…
リダイレクトマーク("<"や">")は、向きにより
「意味が全く異なります」ので 注意が必要ですよ。
# "<" は入力値(元)指定
# ">" は出力値(先)指定
-
総額7600円 さん
2006-03-12 08:02:30
あぁごめんなさい。逆向き符号をタイプしてしまいました(汗
">"向きです。
-
ウルトラギブン さん
2006-03-13 23:31:31
>ブラックアウト
COMMAND.COMの子プロセスとしてハイパーフレームを起動させているとしますと、ハイパーフレーム終了後に一度COMMAND.COMに制御が移りその後に親プロセスに復帰するのでは...そう考えますと「ブラックアウト=COMMAND.COMに制御が移った」と言うことで自然な流れに感じます。
(このやり方では解決できなさそうな気がします.)
それでふと頭に浮かんだのですがDOS5以降のタスク切替とかは使えないですかね。
実際に可能かはわかりませんので本当に無責任モードで恐縮いたしますが、DOSSWAP.EXE辺りにヒントがあるかも...
予め裏でハイパーフレームを起動しておいて、必要にむ応じて切り替える...とか。
(...データの受け渡しは...あり?、コピペってできたかな...)
これが駄目ならスマートさに欠けますが...
QB側のプログラムにてテキスト・グラフィック両VRAMをQBとハイパーフレーム双方で取扱える形式で保存してハイパーフレームを終了する直前にVRAMに書き戻すと言うのは出来ませんでしょうか。
-
ウルトラギブン さん
2006-03-14 23:39:40
あ〜...でも、SHELL="[当該ソフト名]"の実態が"COMMAND.COM /C [当該ソフト名]"としたら結局両方とも無理そうですよねぇ...
ちなみに「SHELL="CALL [当該ソフト起動用のバッチファイル]"」でも駄目でしょうか。
-
総額7600円 さん
2006-03-15 13:49:09
ありがとうございます。
バッチファイルを呼び出すようにしてみても同じでした。
QB画面内でのウィンドウ表示を諦め,ハイパーフレーム画面だけを表示させるようにしてみたところ,画面の切り替え(予め表示領域外のVRAMに描画しておいた画像を表示領域内にコピー)に結構時間がかかり(1秒の何分の一とか何十分の一とかなんでしょうけれども),かつ付属DOSソフト実行時に画面が一瞬波打ちます。古い機械は何かと面倒なんですね・・・
#付属のサンプルプログラムはうまく動くので,ボードが故障しているわけではないようです。
-
ウルトラギブン さん
2006-03-16 23:05:25
>予め表示領域外のVRAM
あ、そうか。その手がありましたね(汗)。
思い出してきました。
コピーに時間がかかるとの事ですが、表示領域外のVRAMを使って画面分割機能(画面切替)を利用されてみたらいかがでしょうか(これならコピーしなくても良かった気が...)。
確か画面最下行に表示されるFEPの切替え表示はこの方法を使っていたのではなかったでしたっけ。QBだと難しいのかな...
-
MT さん
2006-03-17 14:36:29
QuickBASICは、グラフィック機能との絡みで、起動・終了時とチャイルドプロセスの実行時に画面モードの変更を行っていたと記憶しています。これが原因ではないでしょうか?
バージョン4.2と4.5で、このあたりの仕様に何か変更があったような気もしますが、かなり昔のことなので、よく覚えていません。
-
総額7600円 さん
2006-03-17 18:14:27
どうもありがとうございます。
>ウルトラギブンさん
>画面分割機能
調べてみます。
>MTさん
QBのバージョンは4.5です。実行後にメッセージを表示しないソフトがあれば,それをQBから呼び出してやることにより直接検証できるかもしれません。MAGとがGIFとか表示するソフトでそういうのがないか調べています。
-
かねやす さん
2006-03-20 17:47:20
何も表示しないプログラムなら自作すればいいんじゃないでしょうか([]内入力後return)。
C>[debug]
-[e 100]
-[cd 20]
-[n test.com]
-[r cx]
CX 0000:[2]
-[r bx]
BX 0000:[0]
-[w]
-[q]
あとは自作でライブラリ作るかどっちかですね。最近DOS+QBなんてやってないので
思い出せるか分かりませんが家に帰って漁ってみますわ〜。
-
KAZZEZ さん
2006-03-20 20:13:00
> 何も表示しないプログラムなら自作すればいいんじゃないでしょうか
メモ帳などのテキストエディタで半角カナの「テ」を入力し、
拡張子をCOMにしてセーブする、というのは邪道でしょうか?
ちなみにIPLware type2の条件を満たしています。(^_^;)
-
かねやす さん
2006-03-21 01:47:16
何となく思い出した。
用意するもの。masm5.1以降、link.exe(16ビット用)、lib.exe、QB45環境
まず masm でqb45にアタッチするソースを書く。
----------------------------------------------------
.model medium,basic
.data
parblk dw 7 dup (0)
.code
runexec proc a:word
cld
mov bx,a;String
mov dx,word ptr [bx+2];buffer adrs
; mov cx,word ptr [bx] ;buffer size
mov dx,si
mov bx,offset parblk
push es
push ds
pop es
int 21h
pop es
ret
runexec endp
end
----------------------------------------------------
アセンブルは
masm %1 ;
link /q %1 ,,,bqlb45
lib %1 - %1 + %1 ;
で、[%1].libが出来上がります。
あとは、VBのライブラリにそのlib追加してソースに
DECLARE FUNCTION runexec% (a$)
と宣言して、内部で
a%=runexec("c:,esthoge.exe")
でOKなはず…
-
かねやす さん
2006-03-21 01:49:54
簡易ディレクティブ使ってるのでmasm4とかoptasm、tasmではダメな気がします。
mov ax,4b00h
int 21h
の仕様がもしかしたら間違ってるかも(汗
-
かねやす さん
2006-03-21 01:54:02
ちうか、上のソースで mov ax,4b00h自体書き忘れてるじゃん、オレ…。ついでにVBじゃなくてQBでした。
-
かねやす さん
2006-03-21 02:03:11
さらに見たら、mov dx,si が不要です。下のでOKかな。
.code
runexec proc a:word
cld
mov bx,a;String
mov dx,word ptr [bx+2];buffer adrs
; mov cx,word ptr [bx] ;buffer size
mov bx,offset parblk ;parameta block
push es
push ds
pop es
mov ax,4b00h
int 21h
pop es
ret
runexec endp
-
かねやす さん
2006-03-21 02:06:28
ひー、呼び出し側も間違っとる。
a%=runexec("c:,esthoge.exe"+Chr$(0))
です。
-
総額7600円 さん
2006-03-24 09:01:18
詳細なご教授ありがとうございます。
SHELL命令を使う限り,どうも瞬時ブラックアウトは避けられない模様ですので,別の手を考えなければならないなと思っています。
HF3.LIBとHF3.Hというファイルが同梱されていることに気付きました。C言語のライブラリファイルとインクルードファイルのようです(Cのリンカ?用のバッチファイルらしきものもありましたので)。このライブラリファイルに,付属のDOSプログラムに相当するルーチンが含まれているようです。
調べたらライブラリファイルはオブジェクトファイルの集合体ということですので,リンカでQBともくっつけられるのかもしれません。ライブラリファイルなんて使ったことがないので,どうやればいいのかはこれから調べないといけませんが・・・('A`;)
-
かねやす さん
2006-03-26 00:33:38
QBのライブラリ使用は難しくないです。起動時に「QB /L <ライブラリ名>」とやるだけでOK。
-
総額7600円 さん
2006-03-28 07:50:18
QBのライブラリマネージャで件のCのライブラリファイルのモジュール操作(削除など)を試みましたが失敗しました。さすがにCを全然知らないでCのライブラリは使えないだろということで,Cの学習を開始しました。大変なことになりましたorz
-
かねやす さん
2006-03-30 00:12:10
もしかして、QC(Quick C)用のライブラリだったりして…。
-
総額7600円 さん
2006-03-30 09:26:49
付属ライブラリは,Microsoft-C Ver6.0/7.0,TurboC Ver2.0,TurboC++ Ver1.0,Borland C++3.0に対応とあります。
Borland Turbo C++4.0J for DOSというのが手に入りましたが,マニュアルが何を言っているのか全く分からぬorz
こんな大変なことになるとは・・・('A`;)
でもハイパーフレーム3は長く憧れのボードだったんで,なんとか頑張ってみます。