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

Technote 1194

Mac OS Update 9.0.4


CONTENTS

必要なハードウェア
System ファイルの内部
Alias Manager
ATSUI
Date & Time Utilities
File System Manager
Mac OS USB 1.4.2
Memory Manager
Multiprocessing Services
Power Manager 2.0.1
PPC ToolBox
Resource Manager
Script Manager
SCSI Manager
Time Manager

システム機能拡張
AppleScript 1.4.3
Open Transport 2.6.1
WorldScript I

のテクニカルノートでは、Mac OS 9.0.4 に加えられた変更と修正について説明します。

Mac OS 9.0.4 は Mac OS 9 のリリース後に登場したアップル製品のサポートに必要な機能を含みます。Mac OS 9.0.4 開発途中に出荷された一部の製品は Mac OS 9.0.2 や Mac OS 9.0.3 を搭載しています。特定のリリースだけに存在する機能や変更点は具体的なバージョンが示されています。一般にリリースされているバージョンは Mac OS 9.0.2、Mac OS 9.0.3、Mac OS 9.0.4 です。Mac OS 9.0.4 は Mac OS 9.0.2 と Mac OS 9.0.3 の機能や変更点をすべて含んでいます。Mac OS 9.0.1 は一般にリリースされませんでした。

このテクニカルノートは、Mac OS と互換性を持つ製品開発に関心を持っているすべてのデベロッパを対象に書かれています。





必要なハードウェア

Mac OS 9.0.4 は、PowerPC プロセッサを搭載して出荷されたすべての Macintosh が対象です。Mac OS 9.0.4 をインストールする Macintosh には少なくとも 32 MB の RAM が物理的に実装されていて、40 MB 以上の RAM が論理的に設定されている必要があります(物理的に実装されている RAM の容量が 64 MB未満の場合、仮想メモリの容量はデフォルトで 64 MB に設定されます。)

Apple では、Mac OS 9.0.4 を Apple 製の PowerPC ベースの Mac OS コンピュータでテストを行っており、その動作を保証しています(他社製の Mac OS 互換コンピュータでは Mac OS 9.0.4 のテストを行っていないため、これらのコンピュータで Mac OS 9.0.4 が正常に動作することは保証されていません。)

Mac OS 9.0.4 アップデートをインストールする前に Mac OS 9 がインストールされている必要があります。

先頭に戻る





System File

System ファイルの内部

System ファイルには、コンピュータを動作させるために必要なコードとリソースが含まれています。このセクションでは、System ファイルに加えられた変更やバグフィックスについて説明します。shift キーを押しながらシステムを起動したときにも、System ファイルによって提供される機能は常に Mac OS 9.0.4 の一部としてロードされます。

  • Mac OS 8.6、Mac OS 9 に含まれていたドイツ用キーボードのレイアウトリソースに間違いがありました。ドイツ用キーボードでは Shift-#(キーコード $2A)が押された時にデッドキーではなく、“'”記号にマッピングされるように変更されました。


Alias Manager

Alias Manager はオペレーティングシステムの一部で、File Manager と交信して、ファイルあるいはディレクトリの所在を保存するエイリアスレコードを管理します。Alias Manager 自身は Finder エイリアス・ファイルを生成せず、Finder は Alias Manager が作ったエイリアスレコードを取り込んでエイリアスファイルを作ります。

  • Mac OS 9 では、パスネームを使ったボリュームへのエイリアスは正常に処理されていませんでした。NewAliasMinimalFromFullPath を使って、ボリュームへのエイリアスを作成すると、エイリアスリゾルブ時にそのボリュームが存在しない場合、エラーコードが返されるべきですが、実際にはデフォルトのボリュームが返されていました。この問題は Mac OS 9.0.2 以降で解決されています。

関連資料

Alias Manager 技術文献

先頭に戻る



ATSUI(Apple Type Services for Unicode Imaging)

Unicode は、フラットな 16 ビット数値空間の中で多数の言語の文字をエンコードする文字セットです。ATSUI は QuickDraw API を拡張し、Mac OS アプリケーションによる Unicode テキストの描画を可能にします。ATSUI は Unicode テキストを描画するためのローレベルなサービスを提供するだけでなく、これまでは QuickDraw GX によって行われていたハイエンドなタイポグラフィ制御の多くを提供します。

  • 中国語の naked-CID 形式のフォントを ATSUI で Unicode 変換する際に一部の文字が正しく変換されない問題は Mac OS 9.0.3 以降で解決されています。

  • 一部のアプリケーションで日本語の印刷が極端に遅くなることがありましたが、この問題は Mac OS 9.0.2 以降で解決されています。

関連資料

Apple Type Services for Unicode Imaging(ATSUI) 技術文献
ATSUI SDK

先頭に戻る



Date & Time Utilities

Date & Time Utilities は日時計算関数を提供します。

  • Mac OS 9 の StringToDate 関数が1000年〜1903年の4桁の年を含む文字列を変換する際に、現在の千年期を表す値を、入力された年に加算していました。現在の千年期を表す値はシステムクロックから取得されますが、例えば、現在の日時が2000年3月1日の場合、“1901年3月24日”と言う文字列を変換すると、StringToDate は現在の千年期を表す値(2000)を、入力された年に加算して、3901年3月24日を返してしまいます。この仕組みは、1900年代当時は問題ありませんでしたが、2000年代となった今は1901年3月24日を返す必要があります。StringToDateはこれらの日付けを正しく処理するように修正されました。この問題は Mac OS 9 に含まれている PowerPC 用 Date & Time Utilities のみで発生し、以前のバージョンでは発生しません。この問題は Mac OS 9.0.4 で解決されています。

    技術文献の訂正
    Inside Macintosh: Text 5-32 ページは StringToDate 関数について以下のように述べています。

    “入力された年数が 100 から 1000 までの値である場合、その値に 1000 が加算されます。したがって、日付 1/9/87、1/9/987、1/9/1987 はすべて等しくなります。”


    StringToDate は内部的に次のような処理をしていました。入力された年が2桁の場合、現在の日時を百の位まで取り、入力された年が3桁の場合、現在の日時を千の位だけ取ります。つまり、上記の文書が書かれた当時(1993年)は問題ありませんでした。(3桁の年には1000が足され、2桁の年には1900が足されました。)

    しかし、千の位が2000となった現在、2桁の年と3桁の年については、上記の文章は正しくありません。なぜなら、StringToDate は単純に2桁の年に現在の日時を百の位まで取り、3桁の年に現在の日時を千の位まで取っているからです。Inside Macintosh の文書は以下のように書かれるべきです。

    “入力された年数が 100 から 1000 までの値である場合、現在の千年期(日付の千の位)が年数に加算されます。したがって、日付 1/9/87、1/9/987、1/9/1987 は StringToDate が実行された日付けによって、値が変化します。”



関連資料

Date, Time, and Measurement Utilities 技術文献
Inside Macintosh:TextConverting Formatted Date and Time Strings Into Internal Numeric Representations の章

先頭に戻る



File System Manager

File System Manager は、外部ファイルシステムのインストールや識別を行なったり、外部ファイルシステムとオペレーティングシステムとのインタフェースをとるための一般的な手段を提供します。

  • Mac OS 9 で登場した以下の File System Manager 関数が InterfaceLib に追加されました。

    UTCheckForkPermissions
    UTAddFCBToSearchList
    UTRemoveFCBFromSearchList
    UTLocateFCBInSearchList
    UTGetForkControlBlockSize

関連資料

File System Manager SDK

先頭に戻る



Mac OS USB 1.4.2

Mac OS USB は Mac OS ROM ファイルに組み込まれていて、USB 内蔵の Macintosh システムで USB サポートを有効にします。

  • OHCI UIM のルートハブがポーリング形式から割り込み形式に書き換えられました。また、USB キーボードとポインティングデバイスが MacsBug でも使用できるようにドライバが修正されています。

  • パイプの属性を以下のよう調整するための API USBSetPipePolicy を追加しました。

    • フレームの最大バイト数の調整。Isoc デバイスはエンドポイントで指定されたバンド幅より少ない量を使うことが可能です。

    • IRP の最大データ量の調整。クライアントは usbReqCount の最大値を指定することができます。(このバージョンでは実装されていません。)

    • サービス間隔の最大値の調整。割り込みベースのエンドポイントではポーリング間隔を設定できます。

  • USB オーディオデバイスは 16 ビットのモノラル入力もサポートされるようになりました。

  • USBShim を共有ライブラリとして登録することが可能になりました。この機能を利用するには、USBShimUSBShimDescription 構造体を参照するエキスポートシンボル ShimDescription を追加します。USBShimDescription 構造体の中の USBShimLoadingOptions フィールドは kUSBRegisterShimAsSharedLibrary フラグがセットされている必要があります。また、libraryName フィールドは CFM ライブラリの名前を入れます。

  • 新しい Expert Options Control Panel が追加され、デフォルトの Expert Status レベル、Expert Status メッセージバッファのサイズ、USB デバイスへの固定アドレスの割り振りを設定することができます。USB デバイスに固定アドレスを振ると、各デバイスは起動するたびに同じ USB アドレスを与えられます。

  • USB Device Support ドライバファイルに Power Class ドライバが追加されました。

  • USB オーディオクラスドライバでバッファを超えてデータが入り、ヒープを壊すことがありましたが、この問題は解決されました。この問題で、USB マイクを長時間使用した際に、突然音声入力が止まることがありました。

関連資料

Mac OS USB ウェブサイト
最新の USB DDK

先頭に戻る



Memory Manager

Memory Manager はオペレーティングシステムの一部で、メモリ割り当てリクエストの管理を担当します。

  • Memory Manager の BlockMoveBlockMoveData 関数は Mac OS 9.0.2 以降、Velocity Engine を搭載しているコンピュータで高速に実行されます。

関連資料

Memory Manager 技術文献

先頭に戻る



Multiprocessing Services

Multitasking/Multiprocessing ライブラリにより、アプリケーションは複数のプロセッサを搭載した PowerPC コンピュータでプリエンプティブなマルチタスクオペレーションを実行できるようになります。また、このライブラリにより、ただ 1 つのプロセッサを搭載したマシンでもプリエンプティブなマルチタスクが可能になります。

  • MPEnterCriticalRegionkDurationImmediatekDurationForever 以外のタイムアウト値を指定した場合はシステムがクラッシュすることがありました。この問題は Mac OS 9.0.3 以降で解決されています。

  • Multiprocessing Services はアプリケーション終了時にメモリリークをおこすことがありましたが、この問題は Mac OS 9.0.3 以降で解決されています。

関連資料

Multiprocessing Services 技術文献
Multiprocessing Services SDK

先頭に戻る



Power Manager 2.0.1

Power Manager は Macintosh に内蔵されている各コンポーネントへの電源供給を制御します。

  • UPS(無停電装置)の通知機能が加わりました。UPS 通知機能をサポートする機種は Power.h で新たに定義されている supportsUPSIntegration フラグがオンになります。

  • テクニカルノート 1190“Power Manager 2.0”で解説されている Server Mode API がサーバモードに対応している最近の Macintosh で利用できるようになりました。Server Mode API は Power.h で定義されている supportsServerModeAPIs フラグがオンになっている場合利用できます。

  • UPS 装置から電源供給を受けている場合、省エネルギー設定コントロールパネルでサーバモードがオンになっているにも関わらず、 UPS 装置が電源を供給できなくなった時は自動的に起動しないことがありました。この問題は解決されました。

  • バッテリモニタコントロールバーは、バッテリが2つ挿入された場合でも、正確な残り時間を表示するように修正されました。

  • 一部の G3 機種でスリープから復帰した後にサウンド出力が不可能になる問題が解決されました。

関連資料

テクニカルノート 1190“Power Manager 2.0”
Universal Interfaces 3.3.1

先頭に戻る



PPC ToolBox

PPC(Program-to-Program Communications)Toolbox は、同じマシン上で実行されているプロセス、および AppleTalk ネットワークまたは TCP/IP ネットワークによって接続されている異なるコンピュータ上で実行されているプロセスを対象とするプロセス間通信機能を提供します。

  • IPCKillListPorts は Mac OS 9 で登場しましたが、エントリポイントが InterfaceLib に含まれていません。IPCKillListPorts は trap dispatch テーブル経由でアクセスできます。詳しくはテクニカルノート 1127“「失われたリンク」を求めて*”をご覧下さい。

  • IPCKillListPorts は AppleTalk 経由の接続において無効となります。AppleTalk は IPCKillListPorts ではなく、従来の仕組みでタイムアウトします。

関連資料

PPC Toolbox 技術文献
テクニカルノート 1127“「失われたリンク」を求めて*”

先頭に戻る



Resource Manager

Resource Manager はアプリケーションやオペレーティングシステムに対して、共通のデータファイル保存形式とそれにアクセスするための API を提供します

  • Resource Manager の CreateResFile 関数は内部的に File Manager の呼び出し回数を削減させることによって、パフォーマンスが向上しました。ネットワーク越しの AppleShare または NFS ボリュームに CreateResFile を使ってファイルを作成する際に効果がもっとも表れます。

関連資料

Resource Manager 技術文献

先頭に戻る



Script Manager

Script Manager はローマン文字および非ローマン文字の両方のスクリプトシステムの特性を制御し、変更し、アクセスする機能を提供します。

  • Mac OS 8.6 と Mac OS 9 では IntlTokenize"<>" 文字列を間違って認識し、tokenLesstokenGreat を返していました。正しくは tokenLessGreat ですが、Mac OS 9.0.3 以降は正しい値が返ってきます。

  • Mac OS 9 では IntlTokenize は 8 ビット文字(127 以上の文字)を正しく処理していませんでした。この問題は解決されました。

関連資料

Script Manager 技術文献

先頭に戻る



SCSI Manager

SCSI Manager はオペレーティングシステムと SCSI デバイスを接続します。

  • Mac OS 9 では、Mac OS 起動時にネイティブの SCSI ドライバが正常にロードされていませんでした。その結果、SCSI ドライバは常にそのコンピュータの ROM に含まれているバージョンが使われていました。この問題は解決されました。

関連資料

SCSI Manager 技術文献

先頭に戻る



Time Manager

Time Manager は Mac OS コンピュータにおいて、ミリセカンドやマイクロセカンド単位の正確な時間処理を可能にします。

  • OSErr リザルトコードを返す、新しい Time Manager 関数が InterfaceLib に追加されました。これらの関数は旧 API を置き換えるわけではありませんが、今後は新しい API の使用を推奨します。関数のリストについては下の表をご覧下さい。旧 API はレジスタ D0 にエラーコードを返していましたが、このエラーコードにを取得するための API は存在しませんでした。新しい API によって、エラーコードを確実に得ることができます。

    表 1 リザルトコードを返す新しい Time Manager タスクと旧 API の一覧

    新関数名

    旧関数名

    InstallTimeTask

    InsTime

    InstallXTimeTask

    InsXTime

    PrimeTimeTask

    PrimeTime

    RemoveTimeTask

    RmvTime


    互換性に関する注意
    Time Manager のタスクに関わる関数は限られた条件下で失敗することがあります。例えば、仮想メモリが“入”の場合、Time Manager は InstallTimeTask を正常に実行できない可能性があります。デベロッパは必ず Time Manager の返すエラーコードを確認し、必要に応じて対処する必要があります。

  • Mac OS 9 に含まれている PowerPC 用 Time Manager は、稀に Time Manager TMTask レコードの qType フィールドのハイビットが、タイマーが終了しているにも関わらず、正常にクリアされないことがありました。この問題は Mac OS 9.0.2 で解決されました。

    この問題が目に見える形として表面化した一例として、HyperCard の“visual effect dissolve fast”などの特殊効果が通常より長い時間かかることがありました。

関連資料

Time Manager 技術文献

先頭に戻る





Extensions

システム機能拡張

システム機能拡張はシステムフォルダ内の“機能拡張”フォルダに格納されています。
システム機能拡張をアクティブにするためには、必要なシステム機能拡張がシステム起動時に“機能拡張”フォルダに格納されていなければなりません。
システム起動時に shift キーを押し続けると、機能拡張はロードされません。


World Script 1

AppleScript 1.4.3


AppleScript はスクリプティングインタフェースを提供し、通常はメニューやキーボードを使用する必要のある操作をユーザが自動化することを可能にします。また、さらに重要な点として、AppleScript を使用すると、ユーザは手動によるアクセスが困難であるか、または手動によるアクセスがまったく不可能なアプリケーションの機能にアクセスできるようになります。

  • Mac OS 9 に含まれている AppleScript 1.4 は2つのコンポーネント接続で同時に AppleScript をコンパイルするとクラッシュすることがありました。この問題は AppleScript 1.4.3 以降で解決されています。

  • Mac OS 9 の標準機能追加 1.4 に含まれている mount volume スクリプティングコマンドは Mac OS 9 AFP クライアントの NAM 機能に正しく対応していませんでした。その結果、Mac OS X Server や Windows NT のファイルサーバへのセキュアログインは mount volume で行えませんでした。この問題は標準機能追加 1.4.2 以降で解決されています。

    互換性に関する注意
    CarbonLib 1.0.2 は Mac OS 9.0.4 に含まれていませんが、AppleWorks 6 によってインストールされます。しかし、CarbonLib 1.0.2 は EventManager の Apple イベント idleProcs の扱いが変更されているため、スクリプト編集プログラム 1.4.1 を利用すると Apple イベントの処理が大幅に遅れることがあります。スクリプト編集プログラム 1.4.3 ではこの問題が解決されています。

関連資料

AppleScript for Developers 技術文献
AppleScript for Scripters 技術文献
AppleScript SDK

先頭に戻る



OT

Open Transport 2.6.1


Open Transport は Mac OS 9.0.4 用のネットワーキングテクノロジです。Open Transport 2.6.1 は Mac OS 9 に含まれていた Open Transport 2.5.2 とほぼ同じですが、パフォーマンスと信頼性を向上させるためにいくつかの変更がされています。

  • Open Transport の TCP/IP スタックは Open Transport 2.5 以前のバージョンと同じ IP フレームの受け渡し制御方法(MTU Path Discovery)を採用しています。この変更によって、一部のサービス妨害攻撃を防ぐことができます。

  • 同一ネットワーク上で重複する IP アドレスを割り当てた際に大量のネットワークトラフィックが発生する現象(“ARP storm”)を改善しました。

  • UDP ポート 49152 で空のパケットを受け取る際のクラッシュを解決しました。DNR モジュールが空のパケットを正しく処理していませんでした。

  • DHCP クライアントは非同期に実行するようになりました。これにより、DHCP サーバと交渉する間もユーザ操作が可能になりました。

  • 1時間以上の DHCP リースが正常に更新できるようになりました。

  • DHCP の固定ルーティングオプションの働きを修正しました。

  • TCP/IP の初期設定は DHCP リースの状況を正しく反影します。

  • DHCP を利用した時に、一部の ISDN ルータとの互換性問題を改善しました。

  • DHCP リース更新時のメモリ負担を少なくしました。

  • “rawip”エンドポイントのオプションサイズ(TEndpointInfo.options)の最大値は 256 です。Open Transport 2.5.x は最大値を 233 と報告していました。

  • カーネルログの関数“strlog”が文字列のフォーマットを指定するパラメータを正しく認識するようになりました。Open Transport 2.5.x では正常に動作していませんでした。

  • TCP/IP は一部のルータメーカ(Nortel、Cabletron など)が実装している self-assignment 設定手法をサポートします。

  • TCP/IP パフォーマンス向上のため、良く行われるユーザ操作を取り上げ、TCP/IP の観点でチューニングをしました。

  • AirMac ベースステーションをサポートするための機能が追加されました。

関連資料

Open Transport 技術文献

先頭に戻る



WorldScript 1

WorldScript I


WorldScript は Mac OS 用の各言語のテキストサービスを提供します。

  • WorldScript I は MacsBug の ebbe(Even Better Bus Error)コマンドが実行された時に、システム起動中に2度 MacsBug に落ちます。これは WorldScript I の問題ですが、デベロッパは“g”(Go)コマンドを使用すれば、システムを問題なく起動させることができます。

関連資料

WorldScript I 技術文献

先頭に戻る

 

先頭に戻る


更新: 2000年3月27日