STed2 for WindowsをVC2010でビルドしなおしてみた。少し#include部分をいじる必要があったけどそれ以外はすんなりビルドでき、Windows 7でもちゃんと動いている。
STed2 for Windowsの作りは、できるだけSTedのソースコードを変更せずに動作させるという感じ。画面周りはX68k版のソースコードそのままで動くよう、Win32 APIでラップしている。
面白いのはWinMainからmainを呼び出しているところ。なんとメッセージループが見当たらない。
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_STED2, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
gAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_STED2);
char* argv[2];
argv[0] = "sted2";
argv[1] = NULL;
main(0, argv);
return (int) 0;
}
main関数以降はもともとのSTedのコードで、Human68Kで作られているのでキー入力などはiocsをコールする作りになっている。STed2 for WindowsはこのiocsコールをWin32APIでエミュレートしているんだけど、その際にメッセージを取り出して処理するようになっている。イベント・ドリブンなOS上で逐次処理を実現しているわけだ。なのでメッセージループは見た目ないのであった。
これはこれで良いのだけれど、自分のコードに移植する際は少し考えないといけないな。出来る限り元のコードを変えないで進めたいんだけどね。。