はじめに
備忘録的に、軽く Macintosh Programmer's Workshop (MPW) の使い方を説明します。資料が少ないので "Hello World が書けるまで" くらいの説明しかできません。
See also:
- Macintosh Programmer's Workshop (Wikipedia: en)
- MPW Reference Books (developer.apple.com ミラー)
- 『Macintosh Programmer’s Workshop Object Pascal 日本語版』を読んでみる (Qiita)
- <3> Macintosh 用 Pascal のオブジェクト指向拡張 (Pascal へのオブジェクト指向拡張の歴史と Delphi) (Qiita)
動作環境
検証用として、次のエミュレータを使用しています。
MPW Pascal の使い方
-
[Directory | Set Directory] で作業フォルダを設定します。
Projects/Hello
フォルダを辿って開いて行き、最後に [Select Current Directory] ボタンを押します。一つ前のフォルダ (画像の状態) で [Directory] ボタンを押しても構いません。
-
[File | New] で新しいファイルを作成します。
Projects/Hello
フォルダにHello.p
という名前のファイルを作ります。拡張子は *.p である必要があります。
新規エディタが開きます。分かりやすいように右上に Finder でProjects/Hello
フォルダを開いておきました。
-
[Build | Create Build Commands] でビルドコマンド (.make ファイル) を作成します。
設定項目を埋めます。[Program type] をSIOW App
1、[Target] を68K Only
にすれば SIOW アプリケーション (コンソールアプリケーションのようなもの) が作れます。[68K Model] はModel Near
かModel Far
のいずれかを選びます。
埋めたら [Source Files] ボタンを押し、ソースファイルを指定します。目的のファイルをダブルクリックするか、選択して [Add] ボタンを押し、下側のボックスに移動させます。移動が終わったら [Done] ボタンで確定させます。
[Command Line] が画像のようになっていれば OK です。このまま [CreateMake] ボタンを押します。
hello.make
ファイルができました。
-
もし、コード中でオブジェクト型 (クラス) を使うのなら、リンカに ObjLib.o を渡さないとエラーになります。.make ファイルをダブルクリックするとコードエディタで開けますので、
"{Libraries}"ObjLib.o" ∂
を追加して保存します。
-
[Build | Build] でプロジェクトをビルドします。
プログラム名を尋ねられますのでHello
と入力します。
しばらくするとビルドが完了し、実行ファイルが生成されます。
-
プログラム Hello を実行します。Finder からダブルクリックします。
終了ボタンがなくて面食らうかもしれませんが、MacOS のメニューの [File | Quit] でアプリケーションを終了させる事ができます。
See Also:
- Le Cabinet de "MPW" (JNQT's Lab)
- 六色林檎のお部屋 (LNDMLSの黒猫実験室)
- MPW Pascal に関するツイート (@ht_deko)
- Oberon についての個人的な感想 - 割と簡単に ’標準 Modula-2 / Oberon-2' を試してみたい (Qiita)
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:
MPW Pascal と ANSI Pascal との違い
MPW Pascal は ANSI/IEEE 770X3.97-1983 (ANSI Pascal) (≒ 標準 Pascal Level 0) に準拠していますが、異なる点もあります。
■ ANSI Pascal に対する例外
ANSI Pascal 範囲内での差異についてです。以下、書籍『Macintosh Programmer’s Workshop Object Pascal 日本語版』からの引用です 6。
- 識別子は 63 文字に制限されています。
- at 記号 (@) はキャレット (^) と等価ではありません。
- ポインタに割り当てられる値を New 手続き以外の方法で知ることが可能です。
- SET OF integer の範囲は 0..2039 に制限されています。
- MPW Pascal の文字列型は、長さを示す 1 バイトのフィールドを先頭に付加した文字の並びとして表わされます。ANSI Pascal の文字列型は、PACKED ARRAY [1..n] OF char です。
- MPW Pascal では、text 型は FILE OF char 型とは異なります。FILE OF char型は、レコードの型が char であるようなファイルであり、その char 型の値は入出力操作においていかなる形にも翻訳あるいは変換されることはありません。
- Jensen と Wirth とにより記述された、Pack 手続きと Unpack 手続きはサポートされていません。
- 標準の注釈区切り符号
{ }
と(* *)
はコメントの入れ子を許すために使用されます。 このため、注釈区切り記号{ *)
と(* }
はサポートされていません。
■ ANSI Pascal に対する拡張
ANSI Pascal から拡張された機能についてです。以下、書籍『Macintosh Programmer’s Workshop Object Pascal 日本語版』からの引用です 7。
- 宣言およびインデックスにおいて、定数式が許されます。
- 宣言はどのような順序に書いても構いません。
- Cycle 文がサポートされています。
- Leave 文がサポートされています。
- CASE 文のタグに範囲を使用することができます。
- Standard Apple Numeric Environment (SANE) がサポートされています。
- Exit 手続きがサポートされています。
- 垂直バー (|) 演算子とアンパサンド (&) 演算子がサポートされています。
- 関数が構造型の値を返すことが可能です。
- Univ 引数がサポートされています。
- 型変換がサポートされています。
- ビット操作ルーチンが組み込まれています。
- 指数演算子 ** がサポートされています。
- ユニットと USES 宣言がサポートされています。
- オブジェクトパスカルがサポートされています。
- 標準変数 maxlongint, pi, inf,maxcomp, minnormreal, minnormdou minnormextended, compsecs, compdate, comptime がサポートされています。
- open, blockread, blockwrite, byteread, bytewrite の各ルーチンがサポートされています。
- Arctanh, Cosh, Sinh. Tanh, Log10, Exp10, Arccos, Arcsin, Sincos の各ルーチンがサポートされています。
おわりに
Delphi 1 (や Turbo Pascal for Windows) にも SIOW アプリケーションみたいな WinCRT がありました。
Delphi 1 では MS-DOS アプリケーションを作れない代わりに疑似コンソールアプリケーションを作る事が可能でした。
-
『Building and Managing Programs in MPW』の "Switching between MPW libraries (Table 9-2)" より。 ↩
-
コプロセッサ (68881 / 68882) の有無はビルドコマンドの [68K Options] で指定できます。 ↩ ↩2
-
MacApp なしでオブジェクト指向プログラミングを行う場合には uses に
ObjIntf
を加えた上で、このライブラリをリンクする必要があります。 ↩ -
Apple Computer Inc. (1992). "Macintosh Programmer's Workshop Object Pascal 日本語版" アスキー出版局, p.251. ↩
-
Apple Computer Inc. (1992). "Macintosh Programmer's Workshop Object Pascal 日本語版" アスキー出版局, p.252. ↩