/* File: ResourcesPriv.h Contains: C Interfaces to private Resource Manager stuff Written by: Dean Yu Copyright: © 1991-1993 by Apple Computer, Inc., all rights reserved. Change History (most recent first): <15> 5/27/93 JSM Make routine prototypes C++ friendly. <14> 2/24/93 JDR Need to have at least one element in an array for proper C syntax, so I changed the ResourceMap structure from zero length arrays to one element. <13> 1/20/93 DTY Renamed from ResourceMgrPriv.h. <12> 1/4/93 DTY Add mask and bit constants for mapIsOverridden. <11> 6/10/92 DTY Add structures defining the format of a resource map. <10> 5/14/92 DTY #000000: Add interface for CloseResFileUnderSystemMap. <9> 5/8/92 DTY #1029162: Let the caller pass in the desired permission to OpenResFileUnderSystemMap. <8> 1/30/92 DTY Add defines for preventFileFromBeingClosedBit and preventFileFromBeingClosedMask. <7> 12/17/91 DTY Add selector for _ResolveIDConflicts. <6> 12/6/91 DTY Add selector for _OpenResFileUnderSystemMap. <5> 11/8/91 DTY Touch this file to force everybody to rebuild some Process Manager files so they get the correct selectors. <4> 11/5/91 DTY Add interfaces for InsertFontMap, MakeOverrideMap, SetOverrideAttributes, GetOverrideAttributes, and SetScanOverride routines. Change GetMap and IsThisASystemResourceMap to negative selectors since these are really private routines. Switch mask values for DontCountOrIndexDuplicates and TwoDeep to match the bit definitions. <3> 11/1/91 DTY Add interface for IsThisASystemResourceMap(). <2> 10/23/91 DTY Rename GetSystemOverrideMap to GetOverrideMap and let it take a handle parameter, and add GetMap. <1> 10/23/91 DTY first checked in */ #ifndef __RESOURCESPRIV__ #define __RESOURCESPRIV__ #ifndef __TYPES__ #include #endif #ifndef __FILES__ #include #endif // The resource header is the data contained in the first 16 bytes of the resource fork. // A copy of the header can be found in the resource map in memory. struct ResourceHeader { unsigned long resourceDataOffset; // Offset to the resource data from beginning of the file. unsigned long resourceMapOffset; // Offset to the resource map from the beginning of the file. unsigned long resourceDataLength; // Total length of resource data unsigned long resourceMapLength; // Total length of resource map. }; typedef struct ResourceHeader ResourceHeader, *ResourceHeaderPtr; // For each resource type in a resource file, the resource map contains a type entry // which specifies the resource type, how many resources there are of this type, and // the offset from the beginning of the type list to the reference list for this type struct TypeEntry { ResType tType; // The resource type unsigned short tCount; // Number of resources of this type, minus 1 unsigned short tOffset; // Offset to resource reference list for this resource type. }; typedef struct TypeEntry TypeEntry, *TypeEntryPtr; // For each resource in a resource file, the resource map contains a reference entry // which specifies the resource ID, the offset to the resourceÕs name (if any), the // offset to the actual resource data from the beginning of the resource data, and // the handle to the resource data in memory, if itÕs loaded. struct ReferenceEntry { short rID; // Resource ID unsigned short rNameOffset; // Offset to resource name. (-1 if no name) union { unsigned char rAttr; // Attributes for this resource unsigned long rDataLocation; // Offset from beginning of resource data to length of dadta for this resource. } rAttrData; Handle rHandle; // Resource handle. (0 if resource is not loaded) }; typedef struct ReferenceEntry ReferenceEntry, *ReferenceEntryPtr; // The resource map describes all of the resources in a file, with a list of type entries, // reference entries, and a list of resource names. It also contains the file reference // number of the resource file, and some attributes. // // IÕve split the resource map into two structs, the ResourceMapHeader, which contains // information that is in an empty resource map (a resource map that contains no resources) // and the ResourceMap proper, which contains fields which describe type entries, reference // entries, and the name list. struct ResourceMapHeader { ResourceHeader mHeader; // Copy of the resource header struct ResourceMap **mNext; // Handle to next resource map unsigned short mRefNum; // File reference number of this resource file unsigned char mAttr; // Map attributes (read only, compact, changed) unsigned char mInMemoryAttr; // Override attributes & decompression bit unsigned short mTypes; // Offset from start of resource map to type list (typically 0x1C) unsigned short mNames; // Offset from start of resource map to name list }; typedef struct ResourceMapHeader ResourceMapHeader, *ResourceMapHeaderPtr, **ResourceMapHeaderHandle; struct ResourceMap { ResourceMapHeader mapHeader; // Header information for the resource map unsigned short typeCount; // Number of resource types in this map, minus 1 TypeEntry typeList[1]; // Type entries for all the types in this resource file ReferenceEntry referenceList[1]; // Reference entries for all resources in this file char nameList[1]; // String of resource names }; typedef struct ResourceMap ResourceMap, *ResourceMapPtr, **ResourceMapHandle; #define kOverrideNextMapMask 2 #define kDontCountOrIndexDuplicatesMask 4 #define kTwoDeepMask 8 #define kPreventFileFromBeingClosedMask 16 #define kMapIsOverriddenMask 32 #ifdef __cplusplus extern "C" { #endif pascal void CloseResFileUnderSystemMap(short refNum) = {0x70FC,0xA822}; pascal Boolean ResolveIDConflicts(short refNum) = {0x70FD,0xA822}; pascal short OpenResFileUnderSystemMap(FSSpec *fileSpec, SignedByte permission) = {0x70FE,0xA822}; pascal Boolean IsThisASystemResourceMap(Handle resourceMap) = {0x70FF,0xA822}; pascal Handle GetMap(short refNum) = {0x7000,0xA822}; pascal void MakeOverrideMap(Handle mapToOverride) = {0x7004,0xA822}; pascal void InsertOverrideMap(Handle overrideMap, Handle mapToOverride) = {0x7005,0xA822}; pascal Handle GetOverrideMap(Handle resourceMap) = {0x7006,0xA822}; pascal void SetScanOverride(Boolean scanOverrideMap) = {0x7007,0xA822}; pascal SignedByte GetOverrideAttributes(Handle resourceMap) = {0x7008,0xA822}; pascal void SetOverrideAttributes(Handle resourceMap, SignedByte attributeBits) = {0x7009,0xA822}; #ifdef __cplusplus } #endif #endif