Start.h
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:17k
- /*
- File: Start.h
-
- Contains: Start Manager Interfaces.
-
- Version: Technology: Mac OS 8.5
- Release: QuickTime 6.0.2
-
- Copyright: (c) 1987-2001 by Apple Computer, Inc., all rights reserved
-
- Bugs?: For bug reports, consult the following page on
- the World Wide Web:
-
- http://developer.apple.com/bugreporter/
-
- */
- #ifndef __START__
- #define __START__
- #ifndef __MACTYPES__
- #include "MacTypes.h"
- #endif
- #ifndef __FILES__
- #include "Files.h"
- #endif
- #if PRAGMA_ONCE
- #pragma once
- #endif
- #ifdef __cplusplus
- extern "C" {
- #endif
- #if PRAGMA_IMPORT
- #pragma import on
- #endif
- #if PRAGMA_STRUCT_ALIGN
- #pragma options align=mac68k
- #elif PRAGMA_STRUCT_PACKPUSH
- #pragma pack(push, 2)
- #elif PRAGMA_STRUCT_PACK
- #pragma pack(2)
- #endif
- /*
- Important: When the major version number of kExtensionTableVersion and the value
- returned by gestaltExtensionTableVersion change, it indicates that the Extension
- Table startup mechanism has radically changed and code that doesn't know about
- the new major version must not attempt to use the Extension Table startup
- mechanism.
-
- Changes to the minor version number of kExtensionTableVersion indicate that the
- definition of the ExtensionElement structure has been extended, but the fields
- defined for previous minor versions of kExtensionTableVersion have not changed.
- */
- enum {
- kExtensionTableVersion = 0x00000100 /* current ExtensionTable version (1.0.0) */
- };
- /* ExtensionNotification message codes */
- enum {
- extNotificationBeforeFirst = 0, /* Before any extensions have loaded */
- extNotificationAfterLast = 1, /* After all extensions have loaded */
- extNotificationBeforeCurrent = 2, /* Before extension at extElementIndex is loaded */
- extNotificationAfterCurrent = 3 /* After extension at extElementIndex is loaded */
- };
- struct ExtensionElement {
- Str31 fileName; /* The file name */
- long parentDirID; /* the file's parent directory ID */
- /* and everything after ioNamePtr in the HParamBlockRec.fileParam variant */
- short ioVRefNum; /* always the real volume reference number (not a drive, default, or working dirID) */
- short ioFRefNum;
- SInt8 ioFVersNum;
- SInt8 filler1;
- short ioFDirIndex; /* always 0 in table */
- SInt8 ioFlAttrib;
- SInt8 ioFlVersNum;
- FInfo ioFlFndrInfo;
- long ioDirID;
- unsigned short ioFlStBlk;
- long ioFlLgLen;
- long ioFlPyLen;
- unsigned short ioFlRStBlk;
- long ioFlRLgLen;
- long ioFlRPyLen;
- unsigned long ioFlCrDat;
- unsigned long ioFlMdDat;
- };
- typedef struct ExtensionElement ExtensionElement;
- typedef ExtensionElement * ExtensionElementPtr;
- struct ExtensionTableHeader {
- UInt32 extTableHeaderSize; /* size of ExtensionTable header ( equal to offsetof(ExtensionTable, extElements[0]) ) */
- UInt32 extTableVersion; /* current ExtensionTable version (same as returned by gestaltExtTableVersion Gestalt selector) */
- UInt32 extElementIndex; /* current index into ExtensionElement records (zero-based) */
- UInt32 extElementSize; /* size of ExtensionElement */
- UInt32 extElementCount; /* number of ExtensionElement records in table (1-based) */
- };
- typedef struct ExtensionTableHeader ExtensionTableHeader;
- struct ExtensionTable {
- ExtensionTableHeader extTableHeader; /* the ExtensionTableHeader */
- ExtensionElement extElements[1]; /* one element for each extension to load */
- };
- typedef struct ExtensionTable ExtensionTable;
- typedef ExtensionTable * ExtensionTablePtr;
- typedef ExtensionTablePtr * ExtensionTableHandle;
- typedef CALLBACK_API( void , ExtensionNotificationProcPtr )(UInt32 message, void *param, ExtensionElementPtr extElement);
- typedef CALLBACK_API( void , ExtensionTableHandlerProcPtr )(UInt32 message, void *param, ExtensionTableHandle extTableHandle);
- typedef STACK_UPP_TYPE(ExtensionNotificationProcPtr) ExtensionNotificationUPP;
- typedef STACK_UPP_TYPE(ExtensionTableHandlerProcPtr) ExtensionTableHandlerUPP;
- #if OPAQUE_UPP_TYPES
- #if CALL_NOT_IN_CARBON
- EXTERN_API(ExtensionNotificationUPP)
- NewExtensionNotificationUPP (ExtensionNotificationProcPtr userRoutine);
- EXTERN_API(ExtensionTableHandlerUPP)
- NewExtensionTableHandlerUPP (ExtensionTableHandlerProcPtr userRoutine);
- EXTERN_API(void)
- DisposeExtensionNotificationUPP (ExtensionNotificationUPP userUPP);
- EXTERN_API(void)
- DisposeExtensionTableHandlerUPP (ExtensionTableHandlerUPP userUPP);
- EXTERN_API(void)
- InvokeExtensionNotificationUPP (UInt32 message,
- void * param,
- ExtensionElementPtr extElement,
- ExtensionNotificationUPP userUPP);
- EXTERN_API(void)
- InvokeExtensionTableHandlerUPP (UInt32 message,
- void * param,
- ExtensionTableHandle extTableHandle,
- ExtensionTableHandlerUPP userUPP);
- #endif /* CALL_NOT_IN_CARBON */
- #else
- enum { uppExtensionNotificationProcInfo = 0x00000FC0 }; /* pascal no_return_value Func(4_bytes, 4_bytes, 4_bytes) */
- enum { uppExtensionTableHandlerProcInfo = 0x00000FC0 }; /* pascal no_return_value Func(4_bytes, 4_bytes, 4_bytes) */
- #define NewExtensionNotificationUPP(userRoutine) (ExtensionNotificationUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppExtensionNotificationProcInfo, GetCurrentArchitecture())
- #define NewExtensionTableHandlerUPP(userRoutine) (ExtensionTableHandlerUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppExtensionTableHandlerProcInfo, GetCurrentArchitecture())
- #define DisposeExtensionNotificationUPP(userUPP) DisposeRoutineDescriptor(userUPP)
- #define DisposeExtensionTableHandlerUPP(userUPP) DisposeRoutineDescriptor(userUPP)
- #define InvokeExtensionNotificationUPP(message, param, extElement, userUPP) CALL_THREE_PARAMETER_UPP((userUPP), uppExtensionNotificationProcInfo, (message), (param), (extElement))
- #define InvokeExtensionTableHandlerUPP(message, param, extTableHandle, userUPP) CALL_THREE_PARAMETER_UPP((userUPP), uppExtensionTableHandlerProcInfo, (message), (param), (extTableHandle))
- #endif
- /* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */
- #define NewExtensionNotificationProc(userRoutine) NewExtensionNotificationUPP(userRoutine)
- #define NewExtensionTableHandlerProc(userRoutine) NewExtensionTableHandlerUPP(userRoutine)
- #define CallExtensionNotificationProc(userRoutine, message, param, extElement) InvokeExtensionNotificationUPP(message, param, extElement, userRoutine)
- #define CallExtensionTableHandlerProc(userRoutine, message, param, extTableHandle) InvokeExtensionTableHandlerUPP(message, param, extTableHandle, userRoutine)
- union DefStartRec {
- struct {
- SignedByte sdExtDevID;
- SignedByte sdPartition;
- SignedByte sdSlotNum;
- SignedByte sdSRsrcID;
- } slotDev;
- struct {
- SignedByte sdReserved1;
- SignedByte sdReserved2;
- short sdRefNum;
- } scsiDev;
- };
- typedef union DefStartRec DefStartRec;
- typedef DefStartRec * DefStartPtr;
- struct DefVideoRec {
- SignedByte sdSlot;
- SignedByte sdsResource;
- };
- typedef struct DefVideoRec DefVideoRec;
- typedef DefVideoRec * DefVideoPtr;
- struct DefOSRec {
- SignedByte sdReserved;
- SignedByte sdOSType;
- };
- typedef struct DefOSRec DefOSRec;
- typedef DefOSRec * DefOSPtr;
- #if CALL_NOT_IN_CARBON
- #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
- #pragma parameter GetDefaultStartup(__A0)
- #endif
- EXTERN_API( void )
- GetDefaultStartup (DefStartPtr paramBlock) ONEWORDINLINE(0xA07D);
- #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
- #pragma parameter SetDefaultStartup(__A0)
- #endif
- EXTERN_API( void )
- SetDefaultStartup (DefStartPtr paramBlock) ONEWORDINLINE(0xA07E);
- #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
- #pragma parameter GetVideoDefault(__A0)
- #endif
- EXTERN_API( void )
- GetVideoDefault (DefVideoPtr paramBlock) ONEWORDINLINE(0xA080);
- #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
- #pragma parameter SetVideoDefault(__A0)
- #endif
- EXTERN_API( void )
- SetVideoDefault (DefVideoPtr paramBlock) ONEWORDINLINE(0xA081);
- #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
- #pragma parameter GetOSDefault(__A0)
- #endif
- EXTERN_API( void )
- GetOSDefault (DefOSPtr paramBlock) ONEWORDINLINE(0xA084);
- #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
- #pragma parameter SetOSDefault(__A0)
- #endif
- EXTERN_API( void )
- SetOSDefault (DefOSPtr paramBlock) ONEWORDINLINE(0xA083);
- #endif /* CALL_NOT_IN_CARBON */
- #if CALL_NOT_IN_CARBON
- EXTERN_API( void )
- SetTimeout (short count);
- EXTERN_API( void )
- GetTimeout (short * count);
- #endif /* CALL_NOT_IN_CARBON */
- /*
- InstallExtensionNotificationProc
- Installs an ExtensionNotificationUPP.
- Parameters:
- extNotificationProc The ExtensionNotificationUPP to install.
- Results:
- noErr 0 The ExtensionNotificationUPP was installed.
- paramErr -50 This ExtensionNotificationUPP has already been installed.
- memFullErr -108 Not enough memory to install the ExtensionNotificationUPP.
- */
- #if CALL_NOT_IN_CARBON
- EXTERN_API( OSErr )
- InstallExtensionNotificationProc (ExtensionNotificationUPP extNotificationProc) TWOWORDINLINE(0x7000, 0xAA7D);
- /*
- RemoveExtensionNotificationProc
- Removes an ExtensionNotificationUPP.
-
- Note: ExtensionNotificationUPPs can't call RemoveExtensionNotificationProc.
- Parameters:
- extNotificationProc The ExtensionNotificationUPP to remove.
- Results:
- noErr 0 The ExtensionNotificationUPP was removed.
- paramErr -50 The ExtensionNotificationUPP was not found, or
- RemoveExtensionNotificationProc was called from within
- a ExtensionNotificationUPP (ExtensionNotificationUPPs can't
- call RemoveExtensionNotificationProc).
- */
- EXTERN_API( OSErr )
- RemoveExtensionNotificationProc (ExtensionNotificationUPP extNotificationProc) TWOWORDINLINE(0x7001, 0xAA7D);
- /*
- InstallExtensionTableHandlerProc
- Installs an ExtensionTableHandlerUPP. Control is taken away from the system's default
- handler and the ExtensionTableHandlerUPP is responsible for all changes to the
- ExtensionTable (except for incrementing extElementIndex between extensions). This is
- always the first handler called with extNotificationBeforeFirst and
- extNotificationBeforeCurrent messages and the last handler called with
- extNotificationAfterLast and extNotificationAfterCurrent messages. extElementIndex
- is always incremented immediately after the ExtensionTableHandlerUPP is called with
- the extNotificationAfterCurrent message.
-
- There can only be one ExtensionTableHandler installed.
-
- Warning: The only safe time to change what ExtensionElement is at
- ExtensionTable.extElements[extElementIndex] is when your
- ExtensionTableHandlerUPP is called with the extNotificationAfterCurrent
- message. You may change the ExtensionTable or the extElementIndex at other
- times, but you must ensure that the ExtensionElement at
- ExtensionTable.extElements[extElementIndex] stays the same.
-
- Note: If the ExtensionTable or the contents of the folders included in the
- ExtensionTable are changed after installing an ExtensionTableHandler,
- RemoveExtensionTableHandlerProc cannot be called.
- Parameters:
- extMgrProc The ExtensionTableHandlerUPP to install.
- extTable A pointer to an ExtensionTableHandle where
- InstallExtensionTableHandlerProc will return the current
- ExtensionTableHandle. You don't own the handle itself and
- must not dispose of it, but you can change the extElementIndex.
- the extElementCount, and the ExtensionElements in the table.
- Results:
- noErr 0 The ExtensionTableHandlerUPP was installed.
- paramErr -50 Another ExtensionTableHandlerUPP has already been installed.
- memFullErr -108 Not enough memory to install the ExtensionTableHandlerUPP.
- */
- EXTERN_API( OSErr )
- InstallExtensionTableHandlerProc (ExtensionTableHandlerUPP extMgrProc,
- ExtensionTableHandle * extTable) TWOWORDINLINE(0x7002, 0xAA7D);
- /*
- RemoveExtensionTableHandlerProc
- Remove an ExtensionTableUPP. Control is passed back to the default handler.
- Parameters:
- extMgrProc The ExtensionTableUPP to remove.
- Results:
- noErr 0 The ExtensionTableUPP was removed.
- paramErr -50 This ExtensionTableUPP was not installed,
- or the ExtensionTable no longer matches the
- original boot ExtensionTable.
- */
- EXTERN_API( OSErr )
- RemoveExtensionTableHandlerProc (ExtensionTableHandlerUPP extMgrProc) TWOWORDINLINE(0x7003, 0xAA7D);
- #endif /* CALL_NOT_IN_CARBON */
- #if PRAGMA_STRUCT_ALIGN
- #pragma options align=reset
- #elif PRAGMA_STRUCT_PACKPUSH
- #pragma pack(pop)
- #elif PRAGMA_STRUCT_PACK
- #pragma pack()
- #endif
- #ifdef PRAGMA_IMPORT_OFF
- #pragma import off
- #elif PRAGMA_IMPORT
- #pragma import reset
- #endif
- #ifdef __cplusplus
- }
- #endif
- #endif /* __START__ */