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



FL07 - PBXGetVolInfo グルー

(98 年 3 月 24 日)

Q: PBXGetVolInfoSync および PBXGetVolInfoAsync を呼び出すためのグルーはどのようなものでしょうか。

A: 必要なグルーは次の通りです。

#if GENERATINGCFM

#include <Traps.h>
#include <FSM.h>

// kFSMXGetVolInfo は Universal Interfaces 3.0.1 まで導入されていない。

#if UNIVERSAL_INTERFACES_VERSION < 0x0301
    enum {
        kFSMXGetVolInfo = 0x0012
    };
#endif

// PBXGetVolInfo ルーチンの ProcInfoType の値を定義。

enum {
    uppXGetVolInfoProcInfo = kRegisterBased |
        RESULT_SIZE(SIZE_CODE(sizeof(OSErr))) |
        REGISTER_RESULT_LOCATION(kRegisterD0) |
        REGISTER_ROUTINE_PARAMETER(1, kRegisterD0, kFourByteCode) |
        REGISTER_ROUTINE_PARAMETER(2, kRegisterD1, kFourByteCode) |
        REGISTER_ROUTINE_PARAMETER(3, kRegisterA0, SIZE_CODE(sizeof(XVolumeParamPtr)))
};

// 同期ルーチン用のグルー

extern pascal OSErr PBXGetVolInfoSync(XVolumeParamPtr
paramBlock)
{
    return CallOSTrapUniversalProc(GetOSTrapAddress(_FSDispatch), uppXGetVolInfoProcInfo,
        kFSMXGetVolInfo,            // DO レジスタ: セレクタ
        _FSDispatch,                // D1 レジスタ: トラップワード
        paramBlock                  // AO レジスタ: paramBlock
    );
}

// 非同期ルーチン用のグルー

extern pascal OSErr PBXGetVolInfoAsync(XVolumeParamPtr paramBlock)
{
    return CallOSTrapUniversalProc(GetOSTrapAddress(_FSDispatch),
uppXGetVolInfoProcInfo,
        kFSMXGetVolInfo,            // D0 レジスタ: セレクタ
        _FSDispatch | kAsyncMask,   // D1 レジスタ: トラップワード
        paramBlock                  // A0 レジスタ: paramBlock
    );
}

#endif

-- Mark Cookson
devsupport@apple.com


[ Technical Q&A's : Operating System Services : Files : FL07 ]