高度な検索
Developer Connection
Member Login ログイン | ご入会 ADC連絡先

OPS 08 - 機能拡張のローディングの不思議な順番:バッククォートが"A"と"B"の間にソートされる

(09-Feb-96)

Q: ある機能拡張がシステムの初期化およびスタートアップ手順の最後にロードされるように、その名前の最初にバッククォート文字(`)をつけました。しかし、それを行うことにより、実際には始めのほうでロードされてしまいます。どうなっているのでしょうか?

A: 任意のフォルダの内容をFinderで名前順で表示すると、名前がバッククォートで始まるものはそのリストの中で最後に(あるいは最後に近いところに)表示されるのがわかるでしょう。このリストをソートするために、FinderはPACK 6をコールします。PACK 6は、インターナショナル・ソーティング・ルーチン(international sorting routines)を使用しています。これらのソーティングルーチンは、バッククォートで始まる単語をリストの最後のほうに並べます。
しかしながら、INITをロードしている最中にはPBHGetFInfo()がコールされ、PBHGetFInfo()は順番にRelString()をコールします。RelString()は大文字/小文字と分音符号(diacritical、訳注:ウムラウトなどの発音に関わる記号)を無視する設定でコールされます。残念なことに、HFSに関連するバグのためにバッククォートは"a"と"b"の間にソートされてしまいます。これは、バッククォートで始まる機能拡張は"a"(あるいは"A")で始まる機能拡張と"b"(あるいは"B")で始まるものの間にロードされるということを意味します。

このバグが発見される以前に作成され、このソートの順番を使用しているHFSボリュームとの互換性を確保する必要があるため、この問題をフィックスする予定はありません。

興味深いことに、UpperString()はバッククォートを"a"に変換してしまいますが、その他の記号文字(non-letters)は変更されません。

機能拡張がシステムの初期化プロセスの最後にロードされることを確実にしたいのであれば、チルダ(~)を名前の最初の文字に使用してください。


[ Technical Q&A's : Operating System Services : OS Utilities : OPS08.html ]