プログラミング
HyperCardスタックへのビットマップフォントの埋め込み
Embedding a bitmap font in your HyperCard stack (leadedsolder.com)
要約
この記事では、古典的なMac OSの「リソース」システムを利用して、HyperCardスタック内にカスタムビットマップフォントを埋め込む方法を解説しています。HyperCardスタックがMac OSのリソースフォークをどのように利用しているかを説明し、ResEditツールを使ってフォントリソース(FONDとnfnt)をスタックにコピーし、HyperTalkコマンドでそれを適用する手順を示しています。
全文翻訳
私は長い間HyperCardを愛してきました。子供の頃は、それを使って簡単なゲームを作りました。そして、今では「大人」と呼べる年齢になり、HyperCard自体で遊んで、それがどんな奇妙なことができるかを見てみたいと思っています。今日は、テキストを表示させます…異なるフォントで。
HyperCardは、誰でも素早くインタラクティブなプログラムを作成できるようにするために、オリジナルのMacintosh向けに開発されました。「グラフィックスファースト」のビジュアルオーサリングと、非常に自然なスクリプト言語(実際に使うことはめったにありません)の組み合わせによって、これを実現しています。私が大学にいた頃、何年も前に教授が作った天文学計算機を使うために、まだMac Plusが置いてありました。初期リリース後、HyperCardは、見栄えの良いフロントエンド、単発の科学ユーティリティ、データベースプログラムを作成する手段としてだけでなく、ゲームを構築する手段としても普及しました。アドベンチャーゲームが最も適していました。MystはHyperCardで開発されたことで有名であり、Caper in the Castroも同様で、これは初期のクィアゲームの1つとしてしばしば挙げられます。
興味深いフォント
古いMac関連の情報を読んでいたとき、Sioux LacyによるHyperCard用のConcentration 2.2スタックが特別なビットマップフォントを埋め込んでいたという言及に出くわしました。そのスタックは、一致させるカードのスートと値の表示にカスタムフォントを使用していました。例えば、下の画像では、ダイヤの6とハートの6が一致しているのが見えます。Macの多くのものと同様に、そのフォントは間違いなくリソースを通じてスタックに埋め込まれていました。
リソースシステム
Macの世界における「リソース」とは具体的に何であるかについて話しましょう。おそらく、コンピュータソフトウェアを書いたことがなくても直感的に知っていると思いますが、プログラムにはコード以上のものが含まれています。最も退屈なビジネスアプリケーションでさえ、アイコン、画像、大量のテキスト、サウンド、カラーパレット、カスタムフォントなどの定義が必要になります。歴史的に、これらの多くは#definesやそれに類する構造の形でプログラムコードに直接詰め込まれていました。例えば、私のBBC Bridge Companion Tetrisクローンでは、ブロックコードの近くの上部にすべての小さなタイルのグラフィックを設定しました。
このモデルにはいくつかの大きな問題があります。まず、英語のヘルプテキストを日本語に翻訳したり、アイコンを変更したりするような一般的な作業を行うには、プログラム全体を再ビルド(またはヘックスエディタでハック)する必要があります。より大きな問題は、少なくともAppleにとって1984年頃には、これらの要素が多くのメモリを消費し、常にメモリにそれらが必要なわけではない方が良いということでした。
初期のMacシステムソフトウェアでは、リソースマネージャーは、リソースを要求するために使用するMacintosh Toolkit APIの一部でした。特定の時点でアクティブに使用していないリソースがあれば、システムソフトウェアはそれらに使用されたメモリをリサイクルすることが許可されており、これは128kBのRAMしか搭載していない68000ベースのコンピュータを出荷する際には重要でした。リソースを実装するために、Appleのエンジニアリングは実行可能ファイル(およびその他の種類のファイル)を2つの部分に分割しました:データフォークとリソースフォークです。ダウンロードしたソフトウェアがクラシックMacで動作しない理由について不満を言うときに、これらのことについて聞いたことがあるかもしれません。これらの境界線はコードフラグメントの導入で間もなく曖昧になりましたが、実行可能なアプリケーションの場合、データフォークにはすべてのコードが含まれ、リソースフォークにはすべてのリソースが含まれていました。多くの昔のMacオーナーは、Appleの公式リソースエディタであるResEditでゲームやその他のプログラムを開き、メニューやアイコンなどを変更した楽しい思い出を持っているかもしれません。これはGliderの悪名高いヘルプ画像のResEdit表示です。
コードと「データ」を分離するこのモデルは、他のオペレーティングシステムにも引き継がれていますが、特にWindowsはそれを非常に異なる方法で実装しています。ここでは、HyperCardスタック内に保持されているリソースのみに焦点を当てます。「スタック」はHyperCardプログラムです。HyperCardの急速に古くなっている「インデックスカード」の比喩に沿って、それはカード(または画面)のスタックを表し、HyperCardプログラムのすべてのコードとグラフィックを含んでいます。また、リソースフォークを持ち、リソースを含んでいます!子供の頃、これは私には思いつきませんでした。HyperCardは常に「本物の」Macintoshプログラムとは異なる、囲まれた庭のように感じられたので、スタックにResEditのような本物のツールを使おうとは思いませんでした。結果として、それは16ビットのAppleの世界全体と信じられないほど一貫しています。
リソースを活用する
エミュレートされたBasilisk II環境でHyperCardを起動し、testという名前の新しいスタックを作成しました。スタックにリソースフォークがあることを確認するために、アイコンエディタを使ってアイコンを作成しました。
私の次のステップはHyperCardを閉じることでした。HyperCardは自動保存するため、スタックに意図しない変更を加える際には注意が必要です。その後、ResEditでスタックを開き、新しく作成したICONリソースが同じIDでリストに表示されているのを見ました。ICONはMacで利用可能な多くの種類のアイコンリソースの1つです。System 7のカラーアイコンの登場により、cicn(カラーアイコン)、icl8など、さらに多くのタイプが追加されました。しかし、HyperCardは本質的にモノクロなので、カスタムXCMD(plotcicn2など)なしでは、昔ながらの白黒ICONを使用します。
HyperCardスタックが確かにリソースを使用することを知ったので、フォントが何を含んでいるかを見てみましょう。
こんにちは、Jeff-Nichols
私の膨大なシェアウェアCDコレクションから、お気に入りの1つを取り出しました:Power Tools for Macintosh 2.0。1992年にSoftBitから発行されたこのCDは、基本的にどこかのFTPサーバーから引っ張ってきたランダムなもののタイムカプセルです。そのまばらに説明されたコレクションには、いくつかのフォントが含まれています。適当にJを選び、Jeff-Nichols 72という名前のフォントを見つけました。組み込みのSystem 7フォントビューアでプレビューすると、このようになります。
ああ。大文字のみのフォントで、比較的装飾的なビットマップフォントです。この実験にはこれで十分でしょう。ResEditでフォントを開きました。3つのリソースが含まれています:理解できず必要のないalis、フォントメタデータを含むFOND、そして実際の文字を含むnfntです。FONDとnfntリソースをスタックにコピーした後、すべてを保存してResEditを終了しました。
この新しいフォントの使用
これには少し手間がかかりました。フィールドを作成したかったのです。これはWindowsのInputBoxに似ています。ユーザーが入力するボックスです。HyperCardには、フィールドがどのフォントを使用するかを選択させるための優れたUIがありますが、「Jeff-Nichols」フォントは認識しませんでした。オペレーティングシステムのグローバルフォントフォルダにインストールされているフォントのみが表示されました。
HyperCardにはメッセージボックスという便利な機能があり、command-Mのショートカットでアクセスできます。それを選択すると、画面下部に小さなコマンドプロンプトが表示され、HyperTalkコマンドを入力できます。これらのコマンドはHyperCardランタイムにメッセージとしてディスパッチされるため、この名前が付けられています。HyperTalkはHyperCardの組み込みスクリプト言語で、自然に見える言語と、実際の自然言語を理解できないという完全な無能力を組み合わせています。HyperTalkだけでも何十ものブログエントリを作成できます。
いくつかのバックフリップの後、ついにこの魔法のコマンドにたどり着きました:set textFont of card field 1 to "Jeff-Nichols"
これにより、フォントサイズが12に設定されており、装飾的な72ポイントのフォントが判読できないほど小さくなっていることが明らかになりました。これを修正するために、HyperCardのフォントセレクタ(Jeff-Nicholsフォントの概念を認識するようになっていた)に戻り、フィールドのテキストをサイズ72にする必要があると指示しなければなりませんでした。HyperTalkでもそれを実行する方法はおそらくありますが、簡単な方法を取りました。その後、すべてが機能しました。
また、以前作成したアイコンを、このカードの透明なボタンに使用していることにも気づくでしょう。なぜかって?分かりません。これがどのように機能するかについての私の仮説は、Mac Toolboxがこのフォントを見つけるように要求されたとき、階層を持っているということです。