昔のLatticeのCでは、
union REGS inregs;
union REGS outregs;
struct SREGS segregs;
とか言う表現がいっぱい出てくる。
でも、今のVC++6とか
VS2005では、
REGSとか
SREGS自体が
UNKNOWN;
このinregs
とかoutregs
はコードの中で
どんどん出てくるし、
上記の3行をどう書き換えたらいいのだろう?
タイトルですが、
“union REGS inreg;などをVS2005ではどう表現する?”
の間違いでした。
どなたかわかる方がいらっしゃたら、
よろしくお願いします。
かつて、
MS DOS上でのLATTIC C(Ver3.0)
では
union REGS inregs;
union REGS outregs;
struct SREGS segregs;
と言う定義が、ソースの頭の部分で使われていたようです。
VS2005に、そのコードをじかに持って来ると、
ここの部分でエラーが出るので、
3つとも消してしまうと、
今度は、ソースの中の
segread(&segregs);
seg_adrs = segregs.ds;
segregs.ds += (((int)parameters >> 4) & 0xfff) + 1;
などと言う部分が通らなくなってしまいます。
(segreadやseg_adrsなどの関数定義もされていなければ、
inregsとかoutregsとかsegregsというパラメータ定義も見つかっていないせい)
これらの部分、
VC++6用やVS2005用に、どう書き換えればいいのでしょうか?
それはおそらく 16bit の頃の BIOS 呼び出し MS-DOS 呼び出し手順だと思われる。
Windows では BIOS や MS-DOS の呼び出しは原理的に不可能なので、意味がない。
同じ処理に相当する API を呼び出すよう、全面的に書き直すしかないよ。
さっそくのお返事ありがとうございます。
ただ、
確かに、VS2005とかV++6のモードだと、
WINSDOWSからAPIを呼び出すモード
(mainはWinmainになりますよね)
が主流ですが、
設定によっては、
(LINKのシステムでしたっけ)
コンソールでのモードででも
使えるので、
今、こっちで動かす形で
マイナーチェンジで何とかならないかなあ、と考えているのですが。
甘いでしょうか。
なんともならんです。書き換えるしか手段はないです。
コンソールアプリケーションであっても Win32 配下で動作するので
その昔の 16bit 専用機能は今の Win32 (Windows) では原理的に使えない。
特定 CPU 固有の機能を使っているアセンブラソフトを別 CPU に移植する
のと同じこと、といえばあきらめもつくかしらん。
みなさん
いろいろアドバイスいただきありがとうございました。
ゴリゴリインプットしましたが、
書きなおします。