/* File: Resources.h Contains: Resource Manager Interfaces. Version: Technology: Mac OS 8.1 Release: QuickTime 6.0.2 Copyright: (c) 1985-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 __RESOURCES__ #define __RESOURCES__ #ifndef __MACTYPES__ #include #endif #ifndef __MIXEDMODE__ #include #endif #ifndef __FILES__ #include #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 enum { resSysHeap = 64, /*System or application heap?*/ resPurgeable = 32, /*Purgeable resource?*/ resLocked = 16, /*Load it in locked?*/ resProtected = 8, /*Protected?*/ resPreload = 4, /*Load in on OpenResFile?*/ resChanged = 2, /*Resource changed?*/ mapReadOnly = 128, /*Resource file read-only*/ mapCompact = 64, /*Compact resource file*/ mapChanged = 32 /*Write map out at update*/ }; enum { resSysRefBit = 7, /*reference to system/local reference*/ resSysHeapBit = 6, /*In system/in application heap*/ resPurgeableBit = 5, /*Purgeable/not purgeable*/ resLockedBit = 4, /*Locked/not locked*/ resProtectedBit = 3, /*Protected/not protected*/ resPreloadBit = 2, /*Read in at OpenResource?*/ resChangedBit = 1, /*Existing resource changed since last update*/ mapReadOnlyBit = 7, /*is this file read-only?*/ mapCompactBit = 6, /*Is a compact necessary?*/ mapChangedBit = 5 /*Is it necessary to write map?*/ }; enum { kResFileNotOpened = -1, /*ref num return as error when opening a resource file*/ kSystemResFile = 0 /*this is the default ref num to the system file*/ }; typedef CALLBACK_API( void , ResErrProcPtr )(OSErr thErr); /* WARNING: ResErrProcPtr uses register based parameters under classic 68k and cannot be written in a high-level language without the help of mixed mode or assembly glue. */ typedef REGISTER_UPP_TYPE(ResErrProcPtr) ResErrUPP; #if OPAQUE_UPP_TYPES EXTERN_API(ResErrUPP) NewResErrUPP (ResErrProcPtr userRoutine); EXTERN_API(void) DisposeResErrUPP (ResErrUPP userUPP); EXTERN_API(void) InvokeResErrUPP (OSErr thErr, ResErrUPP userUPP); #else enum { uppResErrProcInfo = 0x00001002 }; /* register no_return_value Func(2_bytes:D0) */ #define NewResErrUPP(userRoutine) (ResErrUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppResErrProcInfo, GetCurrentArchitecture()) #define DisposeResErrUPP(userUPP) DisposeRoutineDescriptor(userUPP) #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM #pragma parameter InvokeResErrUPP(__D0, __A0) void InvokeResErrUPP(OSErr thErr, ResErrUPP userUPP) = 0x4E90; #else #define InvokeResErrUPP(thErr, userUPP) CALL_ONE_PARAMETER_UPP((userUPP), uppResErrProcInfo, (thErr)) #endif #endif /* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */ #define NewResErrProc(userRoutine) NewResErrUPP(userRoutine) #define CallResErrProc(userRoutine, thErr) InvokeResErrUPP(thErr, userRoutine) #if !TARGET_OS_MAC /* QuickTime 3.0*/ typedef CALLBACK_API( OSErr , ResourceEndianFilterPtr )(Handle theResource, Boolean currentlyNativeEndian); #endif /* !TARGET_OS_MAC */ #if CALL_NOT_IN_CARBON EXTERN_API( short ) InitResources (void) ONEWORDINLINE(0xA995); EXTERN_API( void ) RsrcZoneInit (void) ONEWORDINLINE(0xA996); #endif /* CALL_NOT_IN_CARBON */ EXTERN_API( void ) CloseResFile (short refNum) ONEWORDINLINE(0xA99A); EXTERN_API( OSErr ) ResError (void) ONEWORDINLINE(0xA9AF); EXTERN_API( short ) CurResFile (void) ONEWORDINLINE(0xA994); EXTERN_API( short ) HomeResFile (Handle theResource) ONEWORDINLINE(0xA9A4); #if CALL_NOT_IN_CARBON EXTERN_API( void ) CreateResFile (ConstStr255Param fileName) ONEWORDINLINE(0xA9B1); EXTERN_API( short ) OpenResFile (ConstStr255Param fileName) ONEWORDINLINE(0xA997); #endif /* CALL_NOT_IN_CARBON */ EXTERN_API( void ) UseResFile (short refNum) ONEWORDINLINE(0xA998); EXTERN_API( short ) CountTypes (void) ONEWORDINLINE(0xA99E); EXTERN_API( short ) Count1Types (void) ONEWORDINLINE(0xA81C); EXTERN_API( void ) GetIndType (ResType * theType, short index) ONEWORDINLINE(0xA99F); EXTERN_API( void ) Get1IndType (ResType * theType, short index) ONEWORDINLINE(0xA80F); EXTERN_API( void ) SetResLoad (Boolean load) ONEWORDINLINE(0xA99B); EXTERN_API( short ) CountResources (ResType theType) ONEWORDINLINE(0xA99C); EXTERN_API( short ) Count1Resources (ResType theType) ONEWORDINLINE(0xA80D); EXTERN_API( Handle ) GetIndResource (ResType theType, short index) ONEWORDINLINE(0xA99D); EXTERN_API( Handle ) Get1IndResource (ResType theType, short index) ONEWORDINLINE(0xA80E); EXTERN_API( Handle ) GetResource (ResType theType, short theID) ONEWORDINLINE(0xA9A0); EXTERN_API( Handle ) Get1Resource (ResType theType, short theID) ONEWORDINLINE(0xA81F); EXTERN_API( Handle ) GetNamedResource (ResType theType, ConstStr255Param name) ONEWORDINLINE(0xA9A1); EXTERN_API( Handle ) Get1NamedResource (ResType theType, ConstStr255Param name) ONEWORDINLINE(0xA820); #if TARGET_OS_MAC #define MacLoadResource LoadResource #endif EXTERN_API( void ) MacLoadResource (Handle theResource) ONEWORDINLINE(0xA9A2); EXTERN_API( void ) ReleaseResource (Handle theResource) ONEWORDINLINE(0xA9A3); EXTERN_API( void ) DetachResource (Handle theResource) ONEWORDINLINE(0xA992); EXTERN_API( short ) UniqueID (ResType theType) ONEWORDINLINE(0xA9C1); EXTERN_API( short ) Unique1ID (ResType theType) ONEWORDINLINE(0xA810); EXTERN_API( short ) GetResAttrs (Handle theResource) ONEWORDINLINE(0xA9A6); EXTERN_API( void ) GetResInfo (Handle theResource, short * theID, ResType * theType, Str255 name) ONEWORDINLINE(0xA9A8); EXTERN_API( void ) SetResInfo (Handle theResource, short theID, ConstStr255Param name) ONEWORDINLINE(0xA9A9); EXTERN_API( void ) AddResource (Handle theData, ResType theType, short theID, ConstStr255Param name) ONEWORDINLINE(0xA9AB); EXTERN_API( long ) GetResourceSizeOnDisk (Handle theResource) ONEWORDINLINE(0xA9A5); EXTERN_API( long ) GetMaxResourceSize (Handle theResource) ONEWORDINLINE(0xA821); #if CALL_NOT_IN_CARBON EXTERN_API( long ) RsrcMapEntry (Handle theResource) ONEWORDINLINE(0xA9C5); #endif /* CALL_NOT_IN_CARBON */ EXTERN_API( void ) SetResAttrs (Handle theResource, short attrs) ONEWORDINLINE(0xA9A7); EXTERN_API( void ) ChangedResource (Handle theResource) ONEWORDINLINE(0xA9AA); EXTERN_API( void ) RemoveResource (Handle theResource) ONEWORDINLINE(0xA9AD); EXTERN_API( void ) UpdateResFile (short refNum) ONEWORDINLINE(0xA999); EXTERN_API( void ) WriteResource (Handle theResource) ONEWORDINLINE(0xA9B0); EXTERN_API( void ) SetResPurge (Boolean install) ONEWORDINLINE(0xA993); EXTERN_API( short ) GetResFileAttrs (short refNum) ONEWORDINLINE(0xA9F6); EXTERN_API( void ) SetResFileAttrs (short refNum, short attrs) ONEWORDINLINE(0xA9F7); EXTERN_API( short ) OpenRFPerm (ConstStr255Param fileName, short vRefNum, SInt8 permission) ONEWORDINLINE(0xA9C4); #if CALL_NOT_IN_CARBON EXTERN_API( Handle ) RGetResource (ResType theType, short theID) ONEWORDINLINE(0xA80C); #endif /* CALL_NOT_IN_CARBON */ EXTERN_API( short ) HOpenResFile (short vRefNum, long dirID, ConstStr255Param fileName, SInt8 permission) ONEWORDINLINE(0xA81A); EXTERN_API( void ) HCreateResFile (short vRefNum, long dirID, ConstStr255Param fileName) ONEWORDINLINE(0xA81B); EXTERN_API( short ) FSpOpenResFile (const FSSpec * spec, SignedByte permission) TWOWORDINLINE(0x700D, 0xAA52); EXTERN_API( void ) FSpCreateResFile (const FSSpec * spec, OSType creator, OSType fileType, ScriptCode scriptTag) TWOWORDINLINE(0x700E, 0xAA52); EXTERN_API( void ) ReadPartialResource (Handle theResource, long offset, void * buffer, long count) TWOWORDINLINE(0x7001, 0xA822); EXTERN_API( void ) WritePartialResource (Handle theResource, long offset, const void * buffer, long count) TWOWORDINLINE(0x7002, 0xA822); EXTERN_API( void ) SetResourceSize (Handle theResource, long newSize) TWOWORDINLINE(0x7003, 0xA822); EXTERN_API( Handle ) GetNextFOND (Handle fondHandle) TWOWORDINLINE(0x700A, 0xA822); #if !TARGET_OS_MAC /* QuickTime 3.0*/ #if CALL_NOT_IN_CARBON EXTERN_API_C( OSErr ) RegisterResourceEndianFilter (ResType theType, ResourceEndianFilterPtr theFilterProc); #endif /* CALL_NOT_IN_CARBON */ #endif /* !TARGET_OS_MAC */ /* Use TempInsertROMMap to force the ROM resource map to be inserted into the chain in front of the system. Note that this call is only temporary - the modified resource chain is only used for the next call to the resource manager. See IM IV 19 for more information. */ #if CALL_NOT_IN_CARBON EXTERN_API( void ) TempInsertROMMap (Boolean tempResLoad) FIVEWORDINLINE(0x70FF, 0x4A1F, 0x56C0, 0x31C0, 0x0B9E); /* _________________________________________________________________________________________________________ o RESOURCE CHAIN LOCATION - for use with the Resource Manager chain manipulation routines under Carbon. _________________________________________________________________________________________________________ */ #endif /* CALL_NOT_IN_CARBON */ typedef SInt16 RsrcChainLocation; enum { kRsrcChainBelowSystemMap = 0, /* Below the system's resource map*/ kRsrcChainBelowApplicationMap = 1, /* Below the application's resource map*/ kRsrcChainAboveApplicationMap = 2 /* Above the application's resource map*/ }; /* If the file is already in the resource chain, it is removed and re-inserted at the specified location If the file has been detached, it is added to the resource chain at the specified location Returns resFNotFound if it's not currently open. */ EXTERN_API( OSErr ) InsertResourceFile (SInt16 refNum, RsrcChainLocation where); /* If the file is not currently in the resource chain, this returns resNotFound Otherwise, the resource file is removed from the resource chain. */ EXTERN_API( OSErr ) DetachResourceFile (SInt16 refNum); /* Returns true if the resource file is already open and known by the Resource Manager (i.e., it is either in the current resource chain or it's a detached resource file.) If it's in the resource chain, the inChain Boolean is set to true on exit and true is returned. If it's an open file, but the file is currently detached, inChain is set to false and true is returned. If the file is open, the refNum to the file is returned. */ EXTERN_API( Boolean ) FSpResourceFileAlreadyOpen (const FSSpec * resourceFile, Boolean * inChain, SInt16 * refNum) TWOWORDINLINE(0x7010, 0xA822); /* FSpOpenOrphanResFile should be used to open a resource file that is persistent across all contexts, because using OpenResFile normally loads a map and all preloaded resources into the application context. FSpOpenOrphanResFile loads everything into the system context and detaches the file from the context in which it was opened. If the file is already in the resource chain and a new instance is not opened, FSpOpenOrphanResFile will return a paramErr. Use with care, as can and will fail if the map is very large or a lot of preload resources exist. */ EXTERN_API( OSErr ) FSpOpenOrphanResFile (const FSSpec * spec, SignedByte permission, SInt16 * refNum); #if CALL_NOT_IN_CARBON EXTERN_API_C( Handle ) getnamedresource (ResType theType, const char * name); EXTERN_API_C( Handle ) get1namedresource (ResType theType, const char * name); EXTERN_API_C( short ) openrfperm (const char * fileName, short vRefNum, char permission); EXTERN_API_C( short ) openresfile (const char * fileName); EXTERN_API_C( void ) createresfile (const char * fileName); EXTERN_API_C( void ) getresinfo (Handle theResource, short * theID, ResType * theType, char * name); EXTERN_API_C( void ) setresinfo (Handle theResource, short theID, const char * name); EXTERN_API_C( void ) addresource (Handle theResource, ResType theType, short theID, const char * name); #endif /* CALL_NOT_IN_CARBON */ #if OLDROUTINENAMES #define SizeResource(theResource) GetResourceSizeOnDisk(theResource) #define MaxSizeRsrc(theResource) GetMaxResourceSize(theResource) #define RmveResource(theResource) RemoveResource(theResource) #endif /* OLDROUTINENAMES */ /* These typedefs were originally created for the Copland Resource Mangager */ typedef short ResFileRefNum; typedef short ResID; typedef short ResAttributes; typedef short ResFileAttributes; #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 /* __RESOURCES__ */