 |
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 ]
|
|