牛、豚、鶏、どれか一つ食べられなくなるとしたら?

現コンパイラがサポートしていない関数について

現コンパイラとしてC++ビルダー2009付属のコンパイラBCC32を使用している。
ストリームエデイタ(SED)のソースコードを入手して,色々調べてみている。
SEDのなかで「intdos」関数を使用している。
現コンパイラはintdosをサポートしていない。dos.hのなかでintdosは定義されていない。
SEDの中で使用している
intdosのAH=4EHはfindfirst関数に、
intdosのAH=4FHはfindnext関数に、に置き換えられることがわかった。
SEDではpsp(プログラム・セグメント・プレフィックス)のアドレスがグローバル変数_pspに格納されていることを使用している。pspのアドレスはintdosのAH=51HまたはAH=62Hで取得できる。

さて質問です。intdosが使用できないときに、pspのアドレスを取得する方法を教えて下さい。
よろしくお願いします。

A 回答 (2件)

そもそもなんのためにPSP領域を参照しているのでしょうか?



DOS用のsedというだけで詳細がわかりませんが、PSP領域の後半にある
コマンドラインで入力された内容を直接解析しているのではないでしょうか?

であれば、WindowsプログラムでPSP領域のアドレスをどうこう、ではなく、
Windows API でコマンドライン領域を取得するというやり方で代替すべきでは
ないかと思います。

GetCommandLine 関数
http://msdn.microsoft.com/ja-jp/library/cc429108 …
    • good
    • 0

intdosはMS-DOSサービスコールを呼び出す関数なので、それってDOSベースのソースファイル(つまり16ビットモデル)ですよね。

もう少し別物を参照した方が・・・って言う答えは却下ですか?

Win32にintdosはないので、これを使えと言うヒントがマイクロソフトから示されていますが、その中に51H,62Hは含まれていません。まあ、思いっきりMS-DOSに依存した処理内容のサービスコールなので、どうしようもない気が。

http://msdn.microsoft.com/ja-jp/library/cc438736 …

次の説明を見てもらえれば、そのソースをベタ移植してWin32で動かすのは絶望的に感じられると思います。

http://www5c.biglobe.ne.jp/~ecb/assembler2/7_5.h …

一応、サービスコール一覧はこちらからどうぞ。実はこれ、DR-DOSのものですが、互換性があるので説明は通用するはず。

http://hp.vector.co.jp/authors/VA003720/lpproj/d …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!