MS-Windows 3.1のアプリを開発


Open WatcomでWindows 3.1アプリを作ってみました。Windows 3.1は16Bitのアプリケーションでした。95以降は32Bitになっています。

いろいろ検索してみたところ、

が見つかり以下のページにたどりつきました。

githubにソースがあります。

forkしてOpen Watcomのwmake用のファイルを用意しました。

いつものようにOpen Watcom V2のLinuxのELFバイナリーをFreeBSDのLinuxエミュレーションで使います。パスを通してWATCOM環境変数を設定するだけでOK牧場です。

% wmake
Open Watcom Make Version 2.0 beta Jun  1 2021 00:24:31 (64-bit)
Copyright (c) 2002-2021 The Open Watcom Contributors. All Rights Reserved.
Portions Copyright (c) 1988-2002 Sybase, Inc. All Rights Reserved.
Source code is available under the Sybase Open Watcom Public License.
See http://www.openwatcom.org/ for details.
        wcc -zW -I"/usr/home/hiroki/watcom/h" -I"/usr/home/hiroki/watcom/h/win" -zq -oaxt -d2 -w8 -fo=.obj AboutDlg
AboutDlg.c(6): Warning! W303: Parameter 'lParam' has been defined, but not referenced
        wcc -zW -I"/usr/home/hiroki/watcom/h" -I"/usr/home/hiroki/watcom/h/win" -zq -oaxt -d2 -w8 -fo=.obj MainWnd
        wcc -zW -I"/usr/home/hiroki/watcom/h" -I"/usr/home/hiroki/watcom/h/win" -zq -oaxt -d2 -w8 -fo=.obj WinMain
WinMain.c(10): Warning! W303: Parameter 'lpCmdLine' has been defined, but not referenced
        %create Win16App.lnk
        wlink @Win16App.lnk
        wrc -I"/usr/home/hiroki/watcom/h/win" Resource.rc Win16App.exe
Open Watcom Windows and OS/2 Resource Compiler
Version 2.0 beta Jun  1 2021 00:34:51 (64-bit)
Copyright (c) 2002-2021 The Open Watcom Contributors. All Rights Reserved.
Portions Copyright (c) 1993-2002 Sybase, Inc. All Rights Reserved.
Source code is available under the Sybase Open Watcom Public License.
See http://www.openwatcom.org/ for details.

最初自力でmakefileを作ろうとしたのですが、オプションとかいろいろわからなかったので、Open Watcomのディレクトリにあるsamples/win/alartのwin16のビルドを参考にしました。

出来上がったEXEはPC-9801FA2のMS-Windows 3.1で動きました。

Windows 7にもある画面キャプチャ機能のプリントスクリーンはWindows 3.1にもあってPC-9801のPrt ScキーはCOPYキーでAltはGRPHキーです。コピーしたものをペイントブラシにはって、サイズを調整してWindows 7にもってきて、JPEGで保存しなおしました。

Open Watcomすんばらしいです。

こちらにもWin16のプログラムを作られた方がいました。

MSVCよりOpen Watcomの方が簡単に使えると思います。

ちなみにWindows 3.0Aで試したら動きませんでした。

もちろんWindows 3.1(Win16)のバイナリはWindows 95(Win32)では動きません。ソースコードレベルでは互換があるようですが、今となって考えるとよくやったもんだと思います。ただWindows 95のバイナリはWindows 7の32Bit環境までだいたい動いていたわけでそこはすごいと思います。