あまつぶ

7.2

 DiskCopyで「^0」を含むイメージファイルをマウントできない件に関する続き。たぶん今回で終わり。アップルに「なんとかしろー」ってメールを送ったらなんとかしてくれるのかもしれないと思いつつ、どこにメールしたらいいかわかる方、いたら教えてくださいませ。
 あんまりいいことではないとは思いつつ、外から見ているだけではさっぱり原因がわからないので、マウントしようとして止まってしまったところでデバッガに落としてちょっと追ってみることにした(ppcのアセンブラはほとんど知らないのでDiskCopyの「cfrg」リソースを削除して68kのコードで実行させた。よってppcでは多少動作が違うかもしれないが、たぶん同じであろう)。すると、_Mungerというシステムルーチンを呼んでいるループでひたすらぐるぐる回ってしまっている。このルーチンでなにをしているのかがわからないとしょうがないのでこれもまたデバッガで追ってみたところ、要するにある文字列のなんらかの部分を別の文字列に置き換える、という処理をするルーチンらしい。DiskCopyのマウントの時には、「ディスクイメージ“^0”をマウント中です。」という文字列の「^0」をイメージのファイル名に置き換えている。この置き換えは1回だけ起こり、「^0^0」ならば前の「^0」だけが置き換えられる。
 Mungerを一度使うだけでは1つしか置き換えられないから、先に書いたループでは、置き換えが起こったかどうかをチェックして置き換えが起こっている場合は再び置き換えるようになっている。要するに、置き換えたあとの文字列に「^0」が含まれていると永久ループに陥ってしまうわけだ。こうならないようにするためには、置き換えが起こった場所以降をチェックするようにしなければならないのだがそうなっていない。これは「バグ」と呼んでいいだろう。
 「タ0」でも止まってしまう件に関しては、_Mungerの仕様らしいのでこのルーチンを使うかぎりはしかたないと思われる。というよりまず、最初の置き換えで「タ0」に置き換わったところを再び置き換えてしまうわけだからそもそもまずいというわけなのだが。
 イメージを作成するときに「^0」「^1」が使えないという方は調べていないが、たぶん同じことが原因だと思われる。
 結局、DiskCopy6.1.3では、「^0」(「タ0」なども)を含むイメージファイルをマウントすることができない。原因は、「マウント中です」というダイアログを表示するために文字列を作成する部分で永久ループに入ってしまうから、である。

 「^0」「^1」ときくとダイアログを思い出す。ダイアログでも同じような置き換えをしているものがある。ParamTextというルーチンを使って実現するのだが、これを使っても同じようなことが起きるかどうかを少し試してみた。まずは、「^0」に置き換えたらどうなるか。これは、結構不思議なことが起きる。SimpleTextで「^0」というファイル名のファイルを作って、修正して保存せずに閉じようとすると、「閉じる前に書類“”の変更を保存しますか?」と出た。VisualPageでは、ファイル名の部分がなぜか「Visual Page」に置き換えられてしまった。ひょっとすると「^0」を指定したときのParamTextは無効になって、その前に指定したものがそのまま表示されるということかもしれない。と思ったら少し違うか。「あ^0」というファイルを作って試してみたところ、「あ」に置き換えられていた。VisualPageでは「あ Visual Page」になったのがまた不思議だったが…(笑)。
 「タ0」が置き換えられるかどうかも試してみたが、これは置き換えられなかった。ParamTextでは、日本語の判別を正しくやってくれているようだ。ParamTextでどのような置き換えルーチンが使われているのか気になるが、これはまだ調べていない。時間があったら調べるかもしれないけど。

 どうでもいいけどちょっと気になるのは、「タ0」とかいうファイル名だったらどんどん文字列が長くなってそのうちメモリが足りなくなるんじゃないかということかな。これも試してみたが、メモリが足りなくなると置き換えが起こらなくなるだけでループはそのまま回りつづけた。この実験はppcバージョンでやったのだが、途中デバッガで止めてヒープの空きを調べる度にどんどん減っていくのが確認できた。

 とりあえず、この件は、DiskCopyの「バグ」であると思う。たいして実害はないといえばそうだけど、実際ぼくが作ったイメージで問題が起こったわけだし、対処してほしいな…。っていってもここをアップルの人が見ることはきっとないだろうから、前に書いたようにどこにメールしたらいいかを教えてくれるか、あるいはアップルの人に伝えてくれるとうれしいな。
 また、これからディスクイメージを作ろうという方は、ファイル名に注意しましょう。。「^0」は使わないというのはいいとしても、「タ0」は使ってしまう可能性があると思うし。2バイト目が0x5Eの文字のリストは、「/タЭ^運蛙疑型洪賛戎真楚耽顛膿豹某与録竸喊嫂弯擔杰歐濘畤秧綽膺蘓訖躾鐃饋鷽」(一部機種依存文字あり。すみません)。これらの文字のあとに「0」がきたら要注意。自分でマウントできるかどうかを確かめてからにすれば問題ないんだけど。

 「おともだち帳エディタ」のイメージについては、これで確実にマウントできないということが確認できたので早急に対処いたします。プログラム自体にはバグがないようなのでこれで1.0ということにしようかなと思います。なぜかというと「おともだち帳エディタ100.img」なら問題なくマウントできるからです(笑)。

 たぶん次回はGoldenLogresの続き。一応ハイスコアは更新してあるし。5億点弱。やはりフィッシャーキング台を練習しないといけないようだ。


to July 1, 1998 ↑ to July Index → to July 2,1998