あまつぶ

2.15 0:00 【ResEditに託す】

 ハードディスクの内容がごちゃごちゃしてきたので思いきってフォーマットしてみた。内蔵から外付に必要なファイルをコピーして、外付から起動して内蔵をフォーマット。最後にファイルを戻して、と。その途中で使っていないファイルを消して、かなりすっきりした。
 が、ちょっと問題が発生。DiskCopyで作ったディスクイメージがマウントできなくなってしまった。コピー中にファイルが壊れてしまったのかも知れないとファイルを作りなおしてみたがやはりだめ。「初期化しますか?」と聞かれたあと、「初期化できませんでした」と言われる。一体なにが起こっているのだろう。
 そういえば以前にも同じようなことを経験した記憶がある。あのときはなにがまずかったんだったかなぁ。内蔵のハードディスクをDrive7でフォーマットしたのがまずかったんだろうか(うちにあるのはバージョンが古いから)。外付で起動してドライブ設定のドライバを入れてやればいけるのかな?? ま、あとでやってみよう。

 ファイルをResEditに開いてもらう機能がなんとか完成した。まずプロセスをチェックしてResEditが起動していればResEditにAppleEventを送って開いてもらうと。これはまあ簡単だ。開くファイルのリストのデスクリプタを作って(ファイルのデスクリプタのリスト、ってのが正しいのかな?)'odoc'イベントのダイレクトオブジェクトに追加してResEditに送ってやるだけだし。最初はなにがなんだかよくわからなかったAppleEventだが、送る方だけならだいぶわかってきたし。
 問題はResEditが起動していない時。これはFinderにAppleEventを送るしかないんだけど単に'odoc'イベントをFinderに送るだけではそのファイルの作成アプリケーションで開かれてしまう。そうならないように「ResEditで」という指定をつけてやらないといけないのだが、果たしてどうやるのだろう。AppleEvent Registryを見てみてもそういうオプションについては触れられていないし……。試しにファイルをResEditにドロップするのをスクリプト編集エディタで記録してみたが、単にファイルを開くだけ。記録したスクリプトを実行すれば、指定ファイルの作成アプリケーションが起動するし。
 諦めずにFinderの用語説明を調べてみたら'open'のところに[using reference]というオプションを発見。さっき記録したスクリプトにこれを追加してやると、ちゃんとResEditで開いてくれるようになった。AppleScriptでできたということはAppleEventでもできるはず。AppleEvent Registryに書いていなかったということは以前のバージョンのFinderではサポートされていないのかも知れないがどれがいつからサポートされているのかわからないのでとりあえずは保留。
 ResEditでFinderの'aete'リソースを開き(そのままHexEditorで開いてもなんだかわからないので「ResEdit 'aete' Editor 1.0b4」というのを使って)、'odoc'イベントをチェック。usingというのは'usin'(=keyAEUsing)というキーワードに指定すればいいらしい。ふむふむ、まあ、やってみよう。
 まずResEditを探す。デスクトップデータベースを検索して検索するルーチンはふぉるだ……の時に書いたからそこから持ってくる(そして若干の手直し)。見つかったFSSpecをエイリアスレコードに変換してデスクリプタにし、イベントに追加。そしてイベントを送ると、おお、見事に一発で起動。いい感じだ。あとはいつからサポートされているのかをチェックするくらいかな。KT7とOS8.5.1しかテストできないのがつらいところだけど(^^;;;
 13:30 【68kとPPC】

 テレビをみながらプログラムを書く。なんか今日はトラブルが多いぞ。クイズのボードでいきなり答えが出ていたり(これは笑った)、CMのあとにいきなりドラマの主題歌が途中からかかったり。そのあと画面が真っ黒になって突然「しばらくお待ちください」。しばらくして番組が再開されたけど焦ったろうなぁ(^^;;
 と、、、またか(笑)。いきなり早送りみたいになって「しばらくお待ちください」。話飛んでるし、、もう終わっちゃうよ(笑)。また上におわびがでてるけど、、なにが起こっているのかしら。
 テレビといえばやっぱり今週からぽっかぽか2の再放送がはじまるらしい。ほう。

 IconPartyをPowerBookで動かしてみたらいろいろ問題を発見。一応動作テストの環境に含めているけど、ほとんどFirstClassのサーバになっているだけなのでちょっと不安なことがあった場合にしかテストしていない。うちのメインがPowerPC環境になってもエミュレーションで68k環境も試すことができるから大丈夫かなと思っていたが、やはりそういうわけでもないらしい。
 68k環境で動かすと問題が起こるプログラムでもPowerPC環境では問題なく動いてしまう場合というのがいくつかある(逆もあるが)。ぼくがよくやってしまうのはカレントGWorldの変更し忘れ。SetGWorldを忘れてCopyBitsを呼んでもPowerPC環境ではなぜか問題なく動いてしまう。CopyBitsでは転送先のPixMap(じゃなくてBitMapか)を指定するから正しく書き込めるというのもわからなくはないが、動作が違うというのも困る……。システムのバージョンなどが関係しているのかも知れないが。まあ、原因はぼくのミスにあるわけだから、、気をつけよう。
 プレビューの背景でデスクトップパターンを選んだ場合にタイプ1のエラーで終了してしまうという問題も発見したが、これはなんだろう。LMGetDeskCPatでデスクトップパターンを取得してそれを表示させているだけなのだが。パターンの内容が取得できなかった場合にはLMGetDeskPatternを使うようにとやってみたがこれもだめ。試しにらんだむかべがみを動かしてみたら、、ちゃんといけた。な、なんで?(笑)
 アイコンファイルをResEditで開いてもらう機能については、ResEditが起動している場合にはKT7でもちゃんと動作した。が、起動していない場合はやはりだめ。別の方法を考えないといけないけど、、どうしたらいいのかな。そういえば「フォルダを開く」とかもKT7では動かなかったっけ。このへんがどのバージョンから動くかっていうのはどこで調べられるんだろう……。ひょっとしたらAEPutParamDescを呼んだ時点でエラーが起こっているのかな??

 ディスクイメージの件、かなり面倒だったけど内蔵から再び外付にファイルを移してドライブ設定でフォーマットしなおしてみたところちゃんとマウントできるようになった。今回えた教訓は、「フォーマッタは最新バージョンを使え」かな(笑)。Drive7が有償バージョンアップになった時からバージョンアップしてないんだっけなぁ……。

to February 14, 1999 ↑ to February index → to February 16, 1999