Macintosh Programming (2) - ダウンロードとPascalに付いて - 2000.July 3. ダウンロード  デベロッパサイト:http://developer.apple.com/ja  (2)を選び、SDKを選ぶと…英語になっちゃいますね。で、Toolsを選ぶと  http://developer.apple.com/tools/index.html  ここで:  Macintosh Programmer's Workshopこれを選び、MPWを落とす。  MPW-GM_Images/MPW-GM.img.bin ←これ。MPW-PRとかは無視して可 /Segmented_Image/* こっちは上の分割版 後、Documentation/MPW_Reference から当面は Introduction to MPWとBldg & Mng Progs in MPW 2nd.を取ってくる。  間違ってたらご免なさい。まぁMPWの所にあるReadmeとかいう名前のファイルを  読めば、インストールの仕方と最初にこれを読め!みたいなことが書いてあります。  #確かMPWはここから落とした。でもResEditのURLは記録してなかった。う〜ん。   私が夢を見ていたので無ければAppleのサイトから落とせるハズなので、各自   何とか探してね(^^;;  テクニカルノートのアドレス:http://developer.apple.com/technotes/  その他の情報群:http://developer.apple.com/techpubs/  Mac OS 8&9の場合は: http://developer.apple.com/techpubs/macos8/mac8.html  PDF版Inside Macintosh (多分)のIndexが: http://developer.apple.com/techpubs/macos8/pdf/pdf.html   で、ここのOperations System UtilitiesやDevicesには地下(笑)があるから注意  MacAppのページ: http://developer.apple.com/techpubs/macos8/DevTools/MacApp/macapp.html  #MacAppというのは汎用の雛形。アプリの基本が盛り込まれているので、これを   元に色々と変更すれば一般的なMacアプリの出来上がり。ということらしい。   歴史的にはPascalで書かれていたらしいけど、探し方が悪いのか見付かったのは   CodeWarrior用のC++版のみ(あっしはMPWなので使えないよぉ[泣])。  結局の所、必須なのはMPWとResEdit。MPWやResEditのドキュメントもまぁあった方が  良い。そしてAppleのドキュメントのほとんどはPDF。後、DiskCopyも落とさないと  MPWとかを展開できなかった気がする。  ちなみに:   MPW: C/C++/Asm処理系。エディタ込み。サンプル付き。コマンドライン指向な      ユーザインタフェースながら、機能的には超強力。マクロも当然組める。      ソース管理システムもあるみたいだし、使いこなせば相当便利なツールと      なりそう。機能拡張も自由自在みたいだし。      でもMacintosh的な雰囲気がほとんどないという、ある意味妙なアプリ。   ResEdit: リソースエディタ。ダイアログとかウィンドウ、アイコンなどを作成      するGUIアプリ。プログラマ以外の人にも利用価値は多々あるみたい。      こいつもユーザによる独自な機能拡張が可能。 4. Pascalに付いて  CとPascalは文法的には良く似ています。が、設計思想的には全く逆と言えます。  まぁ文法的に似ているのはどっちもAlgol-60の流れを受けているからなんでしょうが。  Cは、プログラマが作った通りに動く高級アセンブラであって、プログラムの内容が  無茶苦茶でもコンパイルには成功したりします。  実行した結果、何が起ころうともそれはプログラマがそう作ったからだ。コンパイラ  (C言語)としては知ったことではない。という設計思想ですね。  Pascalは、コンパイル時になるべくエラーを検出する。という設計思想です。  そして教育用言語として良く使用されました。一時期、プログラムのアルゴリズムは  全てPascalか、Pascalによく似た仮想言語で表現するというのが情報工学の論文での  流行(?)でした。  ちなみにPascalの思想をもっと進めたのがModula-2でしたが、余りはやりませんでしたね。  やっぱ、傍若無人に振る舞えるCの方がプログラマには受けが良かったんでしょうかね(笑)  #どーでも良いけど、IntelもCよりPascalが主流になると考えていた。だからIntelの   CPUはCよりPascalの実行に有利なアーキテクチャを採用した(と思った)。   MS-WindowsのAPI関数の定義にPASCAL hoge();とかいう宣言をしていたのは、つまり   そういうこと。Pascal風の関数呼び出しの方がC風の呼び出しよりCPU的には若干高速   だったから、MSはPascal呼び出しをWindowsで採用したのだ。   (ちなみに今はWINAPIと書く。Win32のソースで関数宣言にPASCALとか前置する人は    古い人ですね)  それはともかく。Cの文法は既知として(参考書、一杯売ってるしぃ)、Pascal独自の  文法をあくまでIMを読む際のヒントとして書きます。  とはいえ、あたしはPascalをもう軽く15年以上使ってない(Delphiはお試し版を一瞬しか  使ってない)ので間違っているかも。  ・Pascalでは代入と比較は明確に区別されます   「a := b;」は代入。「a = b;」は比較。つまり代入は「:=」なのです。   #Pascalなリストで「a = b」とか書いてあったら、それは決して代入ではないです。    「a := b」ならアレ?とか思うでしょうが、ぼんやりしてると「a = b」を代入と    理解しちゃって混乱しますのでご注意  ・配列やCASE文で範囲が指定できる   「1..3」は「1から3」です。  ・Call by Value (値渡し)とCall by Reference (参照渡し)   引数の宣言で「VAR i:Integer;」とかあったら、「int *i;」と思うべし。  ・ポインタ   「p^.i;」とかあったら、「p->i;」です。   また:   WITH p^ DO    BEGIN    a := x;    END;   とかあったら、a = p->x;の意味。省略記法ですね。  ・Pascalの文字列はCとは異なる   Cの文字列は「最後に'\0'が付く」ですが、Pascalの場合、「最初のバイトに   文字数がある」です。   まぁその。Cは言語上「文字型」はあっても「文字列型」は存在しませんが。   Cで「"hoge"」と書くと「'h', 'o', 'g', 'e', '\0'」とメモリに格納されます。   Pascalの場合「4, 'h', 'o', 'g', 'e'」と格納されます。   え?じゃあ255文字以上の文字列はどうなるの?とか思ったあなたは鋭い。   MachintoshのAPIの多くはだから255文字までの文字列しか受け取りません。   「Str255」という変数の型はつまりそーゆーことです。   IM:OverViewによれば、Str15/Str27/Str31/Str63/Str255が定義されてるらしい   ですがね。(言うまでもないが、これら定義はCとしてはchar * [unsigned char *かも]   として扱われる)   MPWのCでは「"\phoge"」と書くと「4, 'h', 'o', 'g', 'e', '\0'」と展開されます。   これによりPascal文字列をCで気軽に書けるよう、便宜をはかっている訳です。   ただ、これはCの文字列定数だけで有効なので:   sprintf(foo, "\p%s", bar);とかいうことはできません。   #「"\p"」の展開はコンパイル時にのみ行われる。ということです。まぁ当然で    しょう。無闇とCの文法を変更し、ランタイムライブラリを独自拡張。ってのは    寝覚めが悪いと思いますんで(^^;;   従って:   sprintf(foo, ".%s", bar);   foo[0] = (unsigned char) strlen(foo + 1); ってな細工が必要です。予めダミーな'.' (って、何でも良いんですがね)を 文字列の先頭に用意しておいて、後でそこに文字数を強引に入れる訳です。   #Cの文字列をPascal形式にするAPIもありますけど、ここではあえて上に書いた    方法を紹介してます(API名を忘れたと正直に書け>わし) (EOF)