mac-rom/Internal/C/ResourcesPriv.h

166 lines
6.6 KiB
C
Raw Normal View History

/*
File: ResourcesPriv.h
Contains: C Interfaces to private Resource Manager stuff
Written by: Dean Yu
Copyright: <EFBFBD> 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 <Types.h>
#endif
#ifndef __FILES__
#include <Files.h>
#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<63>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<69>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