プログラミング
Microsoft Word for Windows 1.1a、ネイティブx64ポート
Microsoft Word for Windows 1.1a, Native X64 Port (github.com)
要約
このプロジェクトは、Microsoft Word for Windows 1.1a(コードネームOpus)をネイティブなWindows x64環境で動作させるための完全なポートです。16ビットアセンブリやWin16プラットフォームの制約を現代的な代替手段で置き換え、オリジナルのWordアプリケーションを64ビット実行可能ファイルとしてビルド・実行します。エミュレーターや再実装ではなく、オリジナルのソースコードとユーザーエクスペリエンスを維持しています。
全文翻訳
Microsoft Word for Windows 1.1a - ネイティブx64ポート
このプロジェクトは、歴史的なコードネームOpusであるMicrosoft Word for Windows 1.1aの、完全に動作するネイティブWindows x64ポートです。オリジナルのWordのソースコードとリソースを、16ビットアセンブリ、セグメントメモリ、Win16プラットフォームの境界に対する現代的な代替手段と共にビルドします。その結果、オリジナルのWordアプリケーションとユーザーエクスペリエンスが、64ビットWindows実行可能ファイルとして動作します。これはエミュレーターやモダンなエディタコントロールを使用した再実装ではありません。
要件
64ビットWindows
Visual Studio 2022(デスクトップ開発(C++)を含む)
Visual Studio経由でインストールされたWindows 10またはWindows 11 SDK
CMake 3.25以降
PowerShell
ビルドと実行
リポジトリをクローンし、含まれるCMakeプリセットを設定し、PowerShellプロンプトからビルドします。
git clone https://github.com/jmarshall23/msword.git
Set-Location msword\src
cmake --preset x64-debug
cmake --build --preset x64-debug & ..\bin\WORD1.exe
最適化されたビルドの場合は、代わりにリリースプリセットを使用します。
cmake --preset x64-release
cmake --build --preset x64-release & ..\bin\WORD1.exe
プリセットはVisual Studio 2022 x64ジェネレーターを使用します。設定後、生成されたソリューションをout\MicrosoftWordX64Port.slnから直接開くこともできます。WORD1をスタートアッププロジェクトとして使用してください。
テスト
リポジトリのルートから完全なデバッグテストスイートを実行します。
ctest --test-dir .\out -C Debug --output-on-failure
または、現在のディレクトリがsrcの場合:
ctest --test-dir ..\out -C Debug --output-on-failure
リリースビルドの場合は、DebugをReleaseに置き換えてください。
スイートは、ポートされたx64ランタイム、オリジナルのWordデータ構造とコマンドテーブル、プロセス起動、およびタイピング、選択、フォーマット、ダイアログ、保存を含む自動化されたUIワークフローをカバーしています。
プロジェクトレイアウト
パス
目的
src/Opus/
オリジナルのMicrosoft Word/Opusアプリケーションソースとリソース
src/OpusEtAl/
オリジナルのサポートツール、ライブラリ、ビルド入力
src/OpusProg/
歴史的なプログラムドキュメント
src/port/original/
x64互換レイヤー、変換されたルーチン、およびテスト
src/port/tools/
歴史的なビルド時ツールのネイティブ代替
src/cmake/
リソースおよびソース生成ヘルパー
out/
CMakeキャッシュおよび生成されたVisual Studioソリューション
build/
中間ツール、テスト、プローブ、PDB、診断
bin/
最終実行可能ファイルおよびランタイムファイル
out、build、binは、設定およびコンパイル中にローカルで生成されます。
ポートの仕組み
オリジナルのCおよびリソースファイルは、権威ある実装のままです。ポートは、64ビットWindowsで安全にコードをビルドおよび実行するために必要なプラットフォーム作業のみを追加します。
16ビットx86アセンブリのエントリポイントは、固定幅のCまたはC++に変換されます。
セグメント化されたおよび二重間接的なメモリハンドルは、x64セーフなネイティブランタイムにマッピングされます。
Win16固有の起動、メッセージング、グラフィックス、ファイル、リソースの動作は、現在のWin32 APIに適応されます。
オリジナルのコマンド、ダイアログ、カーソル、ビットマップ、その他の生成されたアセットは、CMakeグラフの一部としてネイティブホストツールによって再構築されます。
単体テスト、ランタイムテスト、スモークテスト、UIテストは、オリジナルのアルゴリズムとアプリケーションの動作との互換性を保証します。
CMakeはレガシーアセンブリツリーをインベントリしますが、これらのモジュールをネイティブターゲットにコンパイルしません。これにより、歴史的な実装を参照として利用可能にしつつ、出荷されるすべてのコードがAMD64で有効であることを保証します。
有用なターゲット
ターゲット
説明
WORD1
ネイティブx64 Microsoft Word実行可能ファイル
opus_original_engine
x64用にコンパイルされたオリジナルのWordアプリケーションエンジン
opus_x64_runtime
ネイティブランタイムと変換されたアセンブリの動作
opus_word1_ui_test
自動化されたエンドツーエンドUIテストドライバー
legacy_sources
オリジナルのアセンブリのIDE表示可能な参照コレクション
特定のターゲットをビルドするには:
cmake --build --preset x64-debug --target WORD1
貢献
変更はオリジナルのWordの動作を維持しつつ、すべてのネイティブインターフェースがポインタ幅で安全であることを保証する必要があります。歴史的なルーチンのソースコードと同等の変換を優先し、避けられないWindows APIの適応をポート境界に分離し、新しく変換された動作に焦点を当てたテストを追加してください。
著作権
歴史的なソースファイルは、オリジナルのMicrosoftおよびサードパーティの著作権表示を保持します。このリポジトリには現在、トップレベルのライセンスファイルは含まれていません。ソースまたはバイナリを再配布する前に、適用される権利を確認してください。