Mac OS 9
CodeFragments.h
Go to the documentation of this file.
1 
26 #ifndef __CODEFRAGMENTS__
27 #define __CODEFRAGMENTS__
28 
29 #ifndef __MACTYPES__
30 #include <MacTypes.h>
31 #endif
32 
33 #ifndef __CFBUNDLE__
34 #include <CFBundle.h>
35 #endif
36 
37 #ifndef __FILES__
38 #include <Files.h>
39 #endif
40 
41 #ifndef __MULTIPROCESSING__
42 #include <Multiprocessing.h>
43 #endif
44 
45 #if PRAGMA_ONCE
46 #pragma once
47 #endif
48 
49 #ifdef __cplusplus
50 extern "C"
51 {
52 #endif
53 
54 #if PRAGMA_IMPORT
55 #pragma import on
56 #endif
57 
58 #if PRAGMA_STRUCT_ALIGN
59 #pragma options align = mac68k
60 #elif PRAGMA_STRUCT_PACKPUSH
61 #pragma pack(push, 2)
62 #elif PRAGMA_STRUCT_PACK
63 #pragma pack(2)
64 #endif
65 
73  enum
74  {
75  kCFragResourceType = FOUR_CHAR_CODE('cfrg'),
76  kCFragResourceID = 0,
77  kCFragLibraryFileType = FOUR_CHAR_CODE('shlb'),
78  kCFragAllFileTypes = (long)0xFFFFFFFF
79  };
80 
81  typedef OSType CFragArchitecture;
82  enum
83  {
84  /* Values for type CFragArchitecture.*/
85  kPowerPCCFragArch = FOUR_CHAR_CODE('pwpc'),
86  kMotorola68KCFragArch = FOUR_CHAR_CODE('m68k'),
87  kAnyCFragArch = 0x3F3F3F3F
88  };
89 
90 #if TARGET_CPU_PPC
91  enum
92  {
93  kCompiledCFragArch = kPowerPCCFragArch
94  };
95 
96 #endif /* TARGET_CPU_PPC */
97 
98 #if TARGET_CPU_68K
99  enum
100  {
101  kCompiledCFragArch = kMotorola68KCFragArch
102  };
103 
104 #endif /* TARGET_CPU_68K */
105 
106  typedef UInt32 CFragVersionNumber;
107  enum
108  {
109  kNullCFragVersion = 0,
110  kWildcardCFragVersion = (long)0xFFFFFFFF
111  };
112 
113  typedef UInt8 CFragUsage;
114  enum
115  {
116  /* Values for type CFragUsage.*/
117  kImportLibraryCFrag = 0, /* Standard CFM import library.*/
118  kApplicationCFrag = 1, /* MacOS application.*/
119  kDropInAdditionCFrag =
120  2, /* Application or library private extension/plug-in*/
121  kStubLibraryCFrag = 3, /* Import library used for linking only*/
122  kWeakStubLibraryCFrag = 4 /* Import library used for linking only and will be
123  automatically weak linked*/
124  };
125 
126  enum
127  {
128  kIsCompleteCFrag = 0, /* A "base" fragment, not an update.*/
129  kFirstCFragUpdate = 1 /* The first update, others are numbered 2, 3, ...*/
130  };
131 
132  enum
133  {
134  kCFragGoesToEOF = 0
135  };
136 
137  typedef UInt8 CFragLocatorKind;
138  enum
139  {
140  /* Values for type CFragLocatorKind.*/
141  kMemoryCFragLocator = 0, /* Container is in memory.*/
142  kDataForkCFragLocator = 1, /* Container is in a file's data fork.*/
143  kResourceCFragLocator = 2, /* Container is in a file's resource fork.*/
144  kNamedFragmentCFragLocator = 4, /* ! Reserved for possible future use!*/
145  kCFBundleCFragLocator = 5, /* Container is in the executable of a CFBundle*/
146  kCFBundleIntCFragLocator =
147  6 /* passed to init routines in lieu of kCFBundleCFragLocator*/
148  };
149 
162  { /* ! Meaning differs depending on value of "usage".*/
163  UInt32
164  appStackSize; /* If the fragment is an application. (Not used by CFM!)*/
165  };
166  typedef union CFragUsage1Union CFragUsage1Union;
168  { /* ! Meaning differs depending on value of "usage".*/
169  SInt16 appSubdirID; /* If the fragment is an application.*/
170  UInt16 libFlags; /* If the fragment is an import library.*/
171  };
172  typedef union CFragUsage2Union CFragUsage2Union;
173  enum
174  {
175  /* Bit masks for the CFragUsage2Union libFlags variant.*/
176  kCFragLibUsageMapPrivatelyMask =
177  0x0001 /* Put container in app heap if necessary.*/
178  };
179 
181  { /* ! Meaning differs depending on value of "where".*/
182  UInt32
183  spaceID; /* If the fragment is in memory. (Actually an AddressSpaceID.)*/
184  };
185  typedef union CFragWhere1Union CFragWhere1Union;
187  { /* ! Meaning differs depending on value of "where".*/
188  UInt16 reserved;
189  };
190  typedef union CFragWhere2Union CFragWhere2Union;
191  enum
192  {
193  kDefaultCFragNameLen = 16
194  };
195 
197  {
198  CFragArchitecture architecture;
199  UInt16 reservedA; /* ! Must be zero!*/
200  UInt8 reservedB; /* ! Must be zero!*/
201  UInt8 updateLevel;
202  CFragVersionNumber currentVersion;
203  CFragVersionNumber oldDefVersion;
204  CFragUsage1Union uUsage1;
205  CFragUsage2Union uUsage2;
206  CFragUsage usage;
207  CFragLocatorKind where;
208  UInt32 offset;
209  UInt32 length;
210  CFragWhere1Union uWhere1;
211  CFragWhere2Union uWhere2;
212  UInt16 extensionCount; /* The number of extensions beyond the name.*/
213  UInt16 memberSize; /* Size in bytes, includes all extensions.*/
214  unsigned char name[16]; /* ! Actually a sized PString.*/
215  };
219  {
220  UInt16 extensionKind;
221  UInt16 extensionSize;
222  };
226  {
228  OSType libKind;
229  unsigned char qualifiers[1]; /* ! Actually four PStrings.*/
230  };
233  enum
234  {
235  kCFragResourceSearchExtensionKind = 0x30EE
236  };
237 
239  {
240  UInt32 reservedA; /* ! Must be zero!*/
241  UInt32 reservedB; /* ! Must be zero!*/
242  UInt16 reservedC; /* ! Must be zero!*/
243  UInt16 version;
244  UInt32 reservedD; /* ! Must be zero!*/
245  UInt32 reservedE; /* ! Must be zero!*/
246  UInt32 reservedF; /* ! Must be zero!*/
247  UInt32 reservedG; /* ! Must be zero!*/
248  UInt16 reservedH; /* ! Must be zero!*/
249  UInt16 memberCount;
250  CFragResourceMember firstMember;
251  };
252  typedef struct CFragResource CFragResource;
255  enum
256  {
257  kCurrCFragResourceVersion = 1
258  };
259 
260 #define AlignToFour(aValue) (((aValue) + 3) & ~3)
261 #define CFMOffsetOf(structure, field) ((UInt32) & ((structure *)0)->field)
262 #define kBaseCFragResourceMemberSize (CFMOffsetOf(CFragResourceMember, name))
263 #define kBaseCFragResourceSize (CFMOffsetOf(CFragResource, firstMember.name))
264 #define NextCFragResourceMemberPtr(aMemberPtr) \
265  ((CFragResourceMemberPtr)((BytePtr)aMemberPtr + aMemberPtr->memberSize))
266 #define FirstCFragResourceExtensionPtr(aMemberPtr) \
267  ((CFragResourceExtensionHeaderPtr)((BytePtr)aMemberPtr + \
268  AlignToFour( \
269  kBaseCFragResourceMemberSize + \
270  aMemberPtr->name[0] + 1)))
271 #define NextCFragResourceExtensionPtr(anExtensionPtr) \
272  ((CFragResourceExtensionHeaderPtr)((BytePtr)anExtensionPtr + \
273  ((CFragResourceExtensionHeaderPtr) \
274  anExtensionPtr) \
275  ->extensionSize))
276 #define FirstCFragResourceSearchQualifier(searchExtensionPtr) \
277  ((StringPtr)((BytePtr)searchExtensionPtr + \
278  CFMOffsetOf(CFragResourceSearchExtension, qualifiers)))
279 #define NextCFragResourceSearchQualifier(searchQualifierPtr) \
280  ((StringPtr)((BytePtr)searchQualifierPtr + searchQualifierPtr[0] + 1))
281 
282  typedef MPProcessID CFragContextID;
283  typedef struct OpaqueCFragConnectionID *CFragConnectionID;
284  typedef struct OpaqueCFragClosureID *CFragClosureID;
285  typedef struct OpaqueCFragContainerID *CFragContainerID;
286  typedef OptionBits CFragLoadOptions;
287  enum
288  {
289  /* Values for type CFragLoadOptions.*/
290  kReferenceCFrag =
291  0x0001, /* Try to use existing copy, increment reference counts.*/
292  kFindCFrag =
293  0x0002, /* Try find an existing copy, do not increment reference counts.*/
294  kPrivateCFragCopy =
295  0x0005 /* Prepare a new private copy. (kReferenceCFrag | 0x0004)*/
296  };
297 
298  enum
299  {
300  kUnresolvedCFragSymbolAddress = 0
301  };
302 
303  typedef UInt8 CFragSymbolClass;
304  enum
305  {
306  /* Values for type CFragSymbolClass.*/
307  kCodeCFragSymbol = 0,
308  kDataCFragSymbol = 1,
309  kTVectorCFragSymbol = 2,
310  kTOCCFragSymbol = 3,
311  kGlueCFragSymbol = 4
312  };
313 
321 #define CFragHasFileLocation(where) \
322  (((where) == kDataForkCFragLocator) || ((where) == kResourceCFragLocator) || \
323  ((where) == kCFBundleIntCFragLocator))
337  OSErr
338  GetSharedLibrary(ConstStr63Param libName, CFragArchitecture archType,
339  CFragLoadOptions options, CFragConnectionID *connID,
340  Ptr *mainAddr, Str255 errMessage);
341 
350  OSErr
351  GetDiskFragment(const FSSpec *fileSpec, UInt32 offset, UInt32 length,
352  ConstStr63Param fragName, /* can be NULL */
353  CFragLoadOptions options,
354  CFragConnectionID *connID, /* can be NULL */
355  Ptr *mainAddr, /* can be NULL */
356  Str255 errMessage) /* can be NULL */;
357 
366  OSErr
367  GetMemFragment(void *memAddr, UInt32 length,
368  ConstStr63Param fragName, /* can be NULL */
369  CFragLoadOptions options,
370  CFragConnectionID *connID, /* can be NULL */
371  Ptr *mainAddr, /* can be NULL */
372  Str255 errMessage) /* can be NULL */;
373 
382  OSErr
383  CloseConnection(CFragConnectionID *connID);
384 
393  OSErr
395  CFragConnectionID connID, ConstStr255Param symName,
396  Ptr *symAddr, /* can be NULL */
397  CFragSymbolClass *symClass) /* can be NULL */;
398 
407  OSErr
408  CountSymbols(CFragConnectionID connID, long *symCount);
409 
418  OSErr
420  CFragConnectionID connID, long symIndex, Str255 symName, /* can be NULL */
421  Ptr *symAddr, /* can be NULL */
422  CFragSymbolClass *symClass) /* can be NULL */;
423 
463  {
464  LogicalAddress address;
465  UInt32 length;
466  Boolean inPlace;
467  UInt8 reservedA; /* ! Must be zero!*/
468  UInt16 reservedB; /* ! Must be zero!*/
469  };
472  {
473  FSSpec *fileSpec;
474  UInt32 offset;
475  UInt32 length;
476  };
478  /* ! This must have a file specification at the same offset as a disk flat
479  * locator!*/
481  {
482  FSSpec *fileSpec;
483  OSType rsrcType;
484  SInt16 rsrcID;
485  UInt16 reservedA; /* ! Must be zero!*/
486  };
493  {
494  CFBundleRef fragmentBundle; /* Do not call CFRelease on this bundle!*/
495  UInt32 offset;
496  UInt32 length;
497  };
500  {
501  SInt32 where;
502  union
503  {
507  CFragCFBundleLocator inBundle;
508  } u;
509  };
513  {
514  CFragContextID contextID;
515  CFragClosureID closureID;
516  CFragConnectionID connectionID;
517  CFragSystem7Locator fragLocator;
518  StringPtr libName;
519  UInt32 reservedA; /* ! Must be zero!*/
520  };
525  /* These init/term routine types are only of value to CFM itself.*/
526  typedef CALLBACK_API_C(OSErr,
527  CFragInitFunction)(const CFragInitBlock *initBlock);
528  typedef CALLBACK_API_C(void, CFragTermProcedure)(void);
542  OSErr
544 
559  enum
560  {
561  kLoadCFrag = kReferenceCFrag
562  };
563 
564 #if OLDROUTINENAMES
565 #define IsFileLocation CFragHasFileLocation
566  typedef CFragConnectionID ConnectionID;
567  typedef CFragLoadOptions LoadFlags;
568  typedef CFragSymbolClass SymClass;
569  typedef CFragInitBlock InitBlock;
570  typedef CFragInitBlockPtr InitBlockPtr;
571  typedef CFragSystem7MemoryLocator MemFragment;
572  typedef CFragSystem7DiskFlatLocator DiskFragment;
573  typedef CFragSystem7SegmentedLocator SegmentedFragment;
574  typedef CFragSystem7Locator FragmentLocator;
575  typedef CFragSystem7LocatorPtr FragmentLocatorPtr;
576  typedef CFragSystem7MemoryLocator CFragHFSMemoryLocator;
577  typedef CFragSystem7DiskFlatLocator CFragHFSDiskFlatLocator;
578  typedef CFragSystem7SegmentedLocator CFragHFSSegmentedLocator;
579  typedef CFragSystem7Locator CFragHFSLocator;
580  typedef CFragSystem7LocatorPtr CFragHFSLocatorPtr;
581  enum
582  {
583  kPowerPCArch = kPowerPCCFragArch,
584  kMotorola68KArch = kMotorola68KCFragArch,
585  kAnyArchType = kAnyCFragArch,
586  kNoLibName = 0,
587  kNoConnectionID = 0,
588  kLoadLib = kLoadCFrag,
589  kFindLib = kFindCFrag,
590  kNewCFragCopy = kPrivateCFragCopy,
591  kLoadNewCopy = kPrivateCFragCopy,
592  kUseInPlace = 0x80,
593  kCodeSym = kCodeCFragSymbol,
594  kDataSym = kDataCFragSymbol,
595  kTVectSym = kTVectorCFragSymbol,
596  kTOCSym = kTOCCFragSymbol,
597  kGlueSym = kGlueCFragSymbol,
598  kInMem = kMemoryCFragLocator,
599  kOnDiskFlat = kDataForkCFragLocator,
600  kOnDiskSegmented = kResourceCFragLocator,
601  kIsLib = kImportLibraryCFrag,
602  kIsApp = kApplicationCFrag,
603  kIsDropIn = kDropInAdditionCFrag,
604  kFullLib = kIsCompleteCFrag,
605  kUpdateLib = kFirstCFragUpdate,
606  kWholeFork = kCFragGoesToEOF,
607  kCFMRsrcType = kCFragResourceType,
608  kCFMRsrcID = kCFragResourceID,
609  kSHLBFileType = kCFragLibraryFileType,
610  kUnresolvedSymbolAddress = kUnresolvedCFragSymbolAddress
611  };
612 
613  enum
614  {
615  kPowerPC = kPowerPCCFragArch,
616  kMotorola68K = kMotorola68KCFragArch
617  };
618 
619 #endif /* OLDROUTINENAMES */
620 
621 #if PRAGMA_STRUCT_ALIGN
622 #pragma options align = reset
623 #elif PRAGMA_STRUCT_PACKPUSH
624 #pragma pack(pop)
625 #elif PRAGMA_STRUCT_PACK
626 #pragma pack()
627 #endif
628 
629 #ifdef PRAGMA_IMPORT_OFF
630 #pragma import off
631 #elif PRAGMA_IMPORT
632 #pragma import reset
633 #endif
634 
635 #ifdef __cplusplus
636 }
637 #endif
638 
639 #endif /* __CODEFRAGMENTS__ */
OSErr CountSymbols(CFragConnectionID connID, long *symCount)
OSErr FindSymbol(CFragConnectionID connID, ConstStr255Param symName, Ptr *symAddr, CFragSymbolClass *symClass)
OSErr GetSharedLibrary(ConstStr63Param libName, CFragArchitecture archType, CFragLoadOptions options, CFragConnectionID *connID, Ptr *mainAddr, Str255 errMessage)
OSErr GetDiskFragment(const FSSpec *fileSpec, UInt32 offset, UInt32 length, ConstStr63Param fragName, CFragLoadOptions options, CFragConnectionID *connID, Ptr *mainAddr, Str255 errMessage)
OSErr CloseConnection(CFragConnectionID *connID)
OSErr GetIndSymbol(CFragConnectionID connID, long symIndex, Str255 symName, Ptr *symAddr, CFragSymbolClass *symClass)
OSErr ConvertBundlePreLocator(CFragSystem7LocatorPtr initBlockLocator)
OSErr GetMemFragment(void *memAddr, UInt32 length, ConstStr63Param fragName, CFragLoadOptions options, CFragConnectionID *connID, Ptr *mainAddr, Str255 errMessage)
File Manager (MFS, HFS, and HFS+) Interfaces.
Basic Macintosh data types.
unsigned char * StringPtr
Definition: MacTypes.h:477
unsigned char Boolean
Definition: MacTypes.h:318
Multiprocessing interfaces.
Definition: CodeFragments.h:493
Definition: CodeFragments.h:219
Definition: CodeFragments.h:197
Definition: CodeFragments.h:226
Definition: CodeFragments.h:239
Definition: CodeFragments.h:472
Definition: CodeFragments.h:513
Definition: CodeFragments.h:500
Definition: CodeFragments.h:463
Definition: CodeFragments.h:481
Definition: Components.h:266
Definition: MacTypes.h:520
Definition: CodeFragments.h:162
Definition: CodeFragments.h:168
Definition: CodeFragments.h:181
Definition: CodeFragments.h:187