topical media & game development
lib-of-vs-libs-QTDevWin-CIncludes-Start.h / h
/*
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__ */
(C) Æliens
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.