プロが教える店舗&オフィスのセキュリティ対策術

下記のURLのプログラムらをUNIX(Solaris)上でコンパイルするとdos.hファイルが見つからない,というようなエラーが出ます。これらのプログラムをSolaris上でコンパイルし,実行できるようにするにはどう書き換えればよろしいのでしょうか。課題の一部なのですが宜しくお願いします。
http://www-itolab.ics.nitech.ac.jp/creport/enshu …

http://www-itolab.ics.nitech.ac.jp/creport/enshu …

http://www-itolab.ics.nitech.ac.jp/creport/enshu …

A 回答 (3件)

「/* Display routine for PC98 */」の部分が問題ですね。


NECのPC-9801に依存したコードがあるようです。
check_point()を書き換えなきゃいけないんじゃないかな。
あとは、自分で考えてみてください。

この回答への補足

本題から外れるかもしれませんが
http://www-itolab.ics.nitech.ac.jp/creport/enshu …

/* checks to see if the point is an '*' */
/* Check routine for IBM-PC
check_point(a,b)
int a,b;
{
union REGS regs;

gotoxy(a,b);
regs.h.ah=8;
regs.h.bh=0;
int86(16,&regs,&regs);
if(regs.h.al=='*') return 1;
return 0;
}
*/
の部分なのですけど,このcheck_point(a,b)はコメント扱いになっているのでしょうか。また,int86やregsとはなんなのでしょうか。

補足日時:2002/12/15 15:07
    • good
    • 0

dos.hは、86系のMS-DOS(PC-DOS)でしか有効でないですよ。


int86()とか使ってレジスタに設定してるみたいだし。VRAMをいじってるし。
20年くらい前のソースでは?
おそらくgraphicまわりは、SolarisにあわせてX-Window上のgraphicライブラリ
やらを使うように書き換えなくてはならないと思います。
    • good
    • 0

#1です。



>このcheck_point(a,b)はコメント扱いになっているのでしょうか。
そうですね。Cでは、/* から */ はコメントです。
これは、IBM-PC用のコードのようです。で、下のほうにある同じ関数が、
NEC PC-9801用のコードのようです。
(IBM-PC用のソースをPC-9801用に移植したものかもしれません)
機能としては、カーソル位置の文字が'*'かどうかを検査するものです。

>また,int86やregsとはなんなのでしょうか。
int86は、Pentiummのご先祖様の8086CPUのソフトウェア割り込みです。
今でもDOSモードで動くと思います。BIOSをCALLする時などに使用します。
(例では、IBM-PCのVIDEO BIOSである INT 10h を呼び出しています)

regsというのは、CPUのレジスタに値をセットするための共用体変数です。
regsにレジスタにセットしたい値をセットして、int86関数をCALLすると、
アセンブラで呼び出すようなことがCで可能になるのです。

サンプル(課題)のソースのコメントアウトされている方の関数(IBM-PC用)を
有効にして、下にある同じ関数名の方(PC-9801用)をコメントアウトして
DOS用のCコンパイラでコンパイル/リンクするとDOSプロンプトで実行できる
と思います。(PC-9801でない普通のWindowsマシンなら)

int86についてはこちらをご参考に。
http://www2.muroran-it.ac.jp/circle/mpc/old/pc98 …

フリーのDOS用のCコンパイラはこちらからダウンロードできます。
http://www.vector.co.jp/soft/maker/lsi/se001169. …

本題については、Solarisでこの機能(check_point()関数)をどう実現
するかということになろうかと思います。

参考URL:http://www2.muroran-it.ac.jp/circle/mpc/old/pc98 …
    • good
    • 0
この回答へのお礼

>これは、IBM-PC用のコードのようです。で、下のほうにある同じ関数が、
NEC PC-9801用のコードのようです

気が付きませんでした。適切なご指摘ありがとうございました。あとは自分で考えてみようと思います。

お礼日時:2002/12/16 21:29

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