# Macintosh Programmer's Workshop (MPW) Object Pascal の簡単な使い方 --- tags: Delphi apple Pascal objectpascal created_at: 2020-07-25 updated_at: 2020-10-14 --- # はじめに 備忘録的に、軽く **Macintosh Programmer's Workshop (MPW)** の使い方を説明します。資料が少ないので "Hello World が書けるまで" くらいの説明しかできません。 **See also:** - [Macintosh Programmer's Workshop (Wikipedia: en)](https://en.wikipedia.org/wiki/Macintosh_Programmer%27s_Workshop) - [MPW Reference Books (developer.apple.com ミラー)](http://mirror.informatimago.com/next/developer.apple.com/tools/mpw-tools/books.html) - [『Macintosh Programmer’s Workshop Object Pascal 日本語版』を読んでみる (Qiita)](./faefeb7123d04733ec8c.md) - [<3> Macintosh 用 Pascal のオブジェクト指向拡張 (Pascal へのオブジェクト指向拡張の歴史と Delphi) (Qiita)](./cd245180363e1911afa7.md) ## 動作環境 検証用として、次のエミュレータを使用しています。 - [Basilisk II](http://basilisk.cebix.net/) - [SheepShaver](https://sheepshaver.cebix.net/) 使用する MacOS は 8.1J です。 ![image.png](./images/b89c7ad3-a97d-41a7-a6eb-b0962533e4ed.png) # MPW Pascal の使い方 1. プロジェクト用のフォルダを作成します。ここではデスクトップに `Projects/Hello` フォルダを作成しています。 ![image.png](./images/0aac1946-9eb1-b5d3-a07f-8bbdc3b17bd6.png) 2. MPW Shell を起動します。 ![image.png](./images/f0671ae3-4825-62ba-f67b-a12569d553e6.png) 3. [Directory | Set Directory] で作業フォルダを設定します。 ![image.png](./images/bad66ea5-e00e-08bc-843f-18db49a94a9c.png) `Projects/Hello` フォルダを辿って開いて行き、最後に [Select Current Directory] ボタンを押します。一つ前のフォルダ (画像の状態) で \[Directory\] ボタンを押しても構いません。 ![image.png](./images/12769e7d-ab41-eee5-1137-53b52167c28b.png) 4. \[File | New\] で新しいファイルを作成します。 ![image.png](./images/3286c0e6-c4ec-4be2-915a-83f89fca2722.png) `Projects/Hello` フォルダに `Hello.p` という名前のファイルを作ります。拡張子は *.p である必要があります。 ![image.png](./images/d5a31d01-ad41-3541-82ca-7535ea111878.png) 新規エディタが開きます。分かりやすいように右上に Finder で `Projects/Hello` フォルダを開いておきました。 ![image.png](./images/abae51c5-7f1a-795b-20ef-7f95006ecd78.png) 5. Hello World を記述します。書き終わったら \[File | Save\] で保存しておきます。 ![image.png](./images/9aceeeb3-85ab-efb5-28ce-f42a9765d78b.png) 6. \[Build | Create Build Commands\] でビルドコマンド (.make ファイル) を作成します。 ![image.png](./images/b9ae6df4-cccf-c318-95df-857122d042c0.png) 設定項目を埋めます。\[Program type\] を `SIOW App` [^1]、\[Target\] を `68K Only` にすれば **SIOW アプリケーション** (コンソールアプリケーションのようなもの) が作れます。\[68K Model\] は `Model Near` か `Model Far` のいずれかを選びます。 ![image.png](./images/9122fad7-1cf8-6349-7281-2eaf45a4aca4.png) 埋めたら \[Source Files\] ボタンを押し、ソースファイルを指定します。目的のファイルをダブルクリックするか、選択して [Add] ボタンを押し、下側のボックスに移動させます。移動が終わったら \[Done\] ボタンで確定させます。 ![image.png](./images/97e17c44-86ee-f5fd-cbe9-2152bd23c94c.png) \[Command Line\] が画像のようになっていれば OK です。このまま \[CreateMake\] ボタンを押します。 ![image.png](./images/ad463a96-9dbe-48a0-40ad-a22763a9591d.png) `hello.make` ファイルができました。 ![image.png](./images/e2514bf7-8d7b-ff70-d365-eb79e0d90ed5.png) 7. もし、コード中でオブジェクト型 (クラス) を使うのなら、リンカに ObjLib.o を渡さないとエラーになります。.make ファイルをダブルクリックするとコードエディタで開けますので、`"{Libraries}"ObjLib.o" ∂` を追加して保存します。 ![image.png](./images/51db85a5-bc50-d681-3e5e-e84758ada806.png) 8. \[Build | Build\] でプロジェクトをビルドします。 ![image.png](./images/5e3992a6-600a-0d08-4d6f-2746a0e51408.png) プログラム名を尋ねられますので `Hello` と入力します。 ![image.png](./images/028f41d3-3aab-3ce3-37d6-c605b0a0806f.png) しばらくするとビルドが完了し、実行ファイルが生成されます。 ![image.png](./images/e4f3da19-a4de-cbf8-29b3-c8a2cebf57d8.png) 9. プログラム Hello を実行します。Finder からダブルクリックします。 ![image.png](./images/2b23ba2e-2212-fd82-1395-9f04f92e6e1d.png) 終了ボタンがなくて面食らうかもしれませんが、MacOS のメニューの [File | Quit] でアプリケーションを終了させる事ができます。 **See Also:** - [Le Cabinet de "MPW" (JNQT's Lab)](http://hp.vector.co.jp/authors/VA019253/index.html) - [六色林檎のお部屋 (LNDMLSの黒猫実験室)](http://park12.wakwak.com/~alchemist/mac.html) - [MPW Pascal に関するツイート (@ht_deko)](https://twitter.com/ht_deko/status/1106608477571416064) - [Oberon についての個人的な感想 - 割と簡単に ’標準 Modula-2 / Oberon-2' を試してみたい (Qiita)](./8e8be01f749915167a91.md#oberon-%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%81%AE%E5%80%8B%E4%BA%BA%E7%9A%84%E3%81%AA%E6%84%9F%E6%83%B3) ### MPW Pascal が必要とする標準ライブラリ Pascal コンパイラが必要とする標準ライブラリは次の通りです [^2]。次に挙げる標準ライブラリは最初からビルドコマンドに含まれています。 | 機能 | ライブラリ | 場所| |:---|:--|:---| | 低レベル I/O | IntEnv.o | Libraries| | ToolBox, OS| Interface.o | Libraries| | ランタイムサポート | MacRuntime.o | Libraries| | SANE [^3] | SANELib.o | PLibraries| | SANE [^3] (Far & コプロセッサ [^4] ) | SANELib881.o | PLibraries| | Pascal | PasLib.o | PLibraries| 次に挙げる標準ライブラリはビルドコマンドの `Program Type` によって自動的に追加されます。 | 機能 | ライブラリ | 場所| |:---|:--|:---| | SIOW [^1]| SIOW.o | Libraries| | 標準ライブラリ | Stubs.o | Libraries| | MPW tools | ToolLibs.o | Libraries| 次に挙げる標準ライブラリは追加で指定する必要があります。 | 機能 | ライブラリ | 場所| |:---|:--|:---| | 数値演算 | MathLib.o | Libraries| | 数値演算 (Far & コプロセッサ [^4] ) | MathLib881.o | Libraries| | Object Pascal [^5]| ObjLib.o | Libraries| | 68K セグメント操作 (Far) | RTLib.o | Libraries| **See also:** - [Standard Apple Numerics Environment (Wikipedia:En)](https://en.wikipedia.org/wiki/Standard_Apple_Numerics_Environment) # おわりに Delphi 1 (や Turbo Pascal for Windows) にも SIOW アプリケーションみたいな WinCRT がありました。 Delphi 1 では MS-DOS アプリケーションを作れない代わりに疑似コンソールアプリケーションを作る事が可能でした。 ![image.png](./images/aa2650ea-bd9b-715e-3b64-c8a8d9d74a52.png) [^1]: **S**imple **I**nput/**O**utput **W**indow [^2]: 『Building and Managing Programs in MPW』の "Switching between MPW libraries (Table 9-2)" より。 [^3]: **S**tandard **A**pple **N**umerics **E**nvironment [^4]: コプロセッサ (68881 / 68882) の有無はビルドコマンドの [68K Options] で指定できます。 [^5]: MacApp なしでオブジェクト指向プログラミングを行う場合には **uses** に `ObjIntf` を加えた上で、このライブラリをリンクする必要があります。