Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1438 lines
40 KiB

/* WARNING: This file was machine generated from "aslm.mpw".
** Changes to this file will be lost when it is next generated.
*/
/* File: LibraryManager.h
Contains: Minimal declarations you need to use the ASLM.
Copyright: © 1991-1993 by Apple Computer, Inc., all rights reserved.
*/
#ifndef __LIBRARYMANAGER__
#define __LIBRARYMANAGER__
/*******************************************************************************
** System-wide Defines
********************************************************************************/
#ifndef qDebug
#define qDebug 1
#endif
#define MACOS 1
#undef SystemSixOrLater
#define SystemSixOrLater 1
#ifndef __STDDEF__
#include "stddef.h"
#endif
#ifndef __STRING__
#undef NULL
#include "String.h"
#endif
#ifdef __SC__
#define MPWC _cdecl
#define VOLATILE volatile
#define SINGLEOBJECT 0
#else
#define MPWC
#define VOLATILE
#if MACOS
#define SINGLEOBJECT 1
#else
#define SINGLEOBJECT 0
#endif
#ifndef __TYPES__
#include "Types.h"
#endif
#endif // /* __SC__ */
/*******************************************************************************
** Some Typedefs and constants
********************************************************************************/
typedef int OSErrParm;
typedef unsigned int BooleanParm;
#ifndef NULL
#define NULL 0
#endif
#ifndef __TYPES__
typedef char *Ptr;
typedef short OSErr;
typedef long (__cdecl *ProcPtr)();
typedef unsigned char Boolean;
typedef unsigned long ResType;
typedef unsigned char Str63[64];
#define false ((Boolean)0)
#define true ((Boolean)1)
#endif
/*******************************************************************************
** Some external routines
********************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
__sysapi char * __cdecl strcpy(char *s1, const char *s2);
#ifdef __cplusplus
};
#endif
/*******************************************************************************
** Error Constants
********************************************************************************/
#define kNoError 0
#define kNotFound -3120
#define kNoParent -3121
#define kParentNotFound -3122
#define kNotRelated -3123
#define kInvalidObject -3124
#define kPoolCorrupted -3125
#define kOutOfMemory -3126
#define kCodeNotLoaded -3127
#define kCouldNotLoadCode -3128
#define kFilePreflighted -3129
#define kFileNotPreflighted -3130
#define kFileNotFound -3131
#define kLibraryManagerNotLoaded -3132
#define kDuplicateFound -3134
#define kSeedChanged -3135
#define kUnconstructedObject -3136
#define kInternalError -3137
#define kVersionError -3138
#define kFolderNotFound -3139
#define kFolderInUse -3140
#define kResourceNotFound -3141
#define kNotAllowedNow -3155
#define kNotSupported -3167
/*******************************************************************************
** Typedefs
********************************************************************************/
typedef void *GlobalWorld;
#define kInvalidWorld ((GlobalWorld)0)
typedef unsigned short Version;
#define kAnyVersion ((Version)0)
#define TFunctionSetID TClassID
#define TLibraryID TClassID
#define FunctionSetID ClassID /* for casting a cstring to a TFunctionSetID */
#define LibraryID ClassID /* for casting a cstring to a TLibraryID */
/*******************************************************************************
** Forward class declarations
********************************************************************************/
#ifdef __cplusplus
class TDynamic;
class TLibraryManager;
class TClassID;
class TFunctionSetID;
class TLibraryID;
class TLibrary;
class TFormattedStream;
class TMemoryPool;
class TStandardPool;
class TLibraryFile;
class TClassInfo;
class TException;
class TSimpleList;
class TFileSpec;
#else
typedef char *TClassID;
typedef void TDynamic;
typedef void TLibraryManager;
typedef void TFormattedStream;
typedef void TStandardPool;
typedef void TClassInfo;
typedef void TLibrary;
#endif
/*******************************************************************************
** Memory definitions
********************************************************************************/
typedef int ZoneType;
#define kSystemZone ((ZoneType)1)
#define kKernelZone ((ZoneType)2)
#define kApplicZone ((ZoneType)3)
#define kCurrentZone ((ZoneType)4)
#define kTempZone ((ZoneType)5)
typedef int MemoryType;
#define kNormalMemory ((MemoryType)1)
#define kHoldMemory ((MemoryType)2)
#define kLockMemory ((MemoryType)3)
#define kLockMemoryContiguous ((MemoryType)4)
/*******************************************************************************
** STACKOBJECTONLY: Use in a class declaration so the object can only be created
** on the stack. This makes the constructors and destructors much smaller since
** they know they will never have to new or delete memory.
********************************************************************************/
#define STACKOBJECTONLY \
private: \
void* operator new(size_t) { return NULL; } \
void operator delete(void*) {}
/*******************************************************************************
** Some "C" Global routines
**
** InitLibraryManager initializes a client to use the LibraryManager. All clients
** must make this call except for LibraryManager libraries. CleanupLibraryManager
** should be called when the client is done using the LibraryManager.
**
** GetLocalLibraryManager can be called after InitLibraryManager is called. If it
** returns NULL then InitLibraryManager failed.
********************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
/* -------------------------------------------------------------------------
These functions are for use by applications or stand-alone code
resources only
------------------------------------------------------------------------- */
#ifdef __cplusplus
__sysapi OSErr __cdecl InitLibraryManager(size_t poolsize = 0, ZoneType = kCurrentZone,
MemoryType = kNormalMemory);
__sysapi void __cdecl CleanupLibraryManager();
#else
__sysapi OSErr __cdecl InitLibraryManager(size_t poolsize, int zoneType, int memType);
__sysapi void __cdecl CleanupLibraryManager(void);
#endif
/* -------------------------------------------------------------------------
These functions can be used by any Shared Library Manager clients
------------------------------------------------------------------------- */
#ifdef __cplusplus
__sysapi Boolean __cdecl IsDerivedFrom(const void *, const TClassID&);
const __sysapi TClassID& __cdecl GetObjectsClassID(const void *);
const __sysapi TClassID& __cdecl GetObjectsParentClassID(const void *);
__sysapi size_t __cdecl GetObjectsSize(const void *);
__sysapi TLibrary * __cdecl GetObjectsLocalLibrary(const void *);
__sysapi TLibraryFile * __cdecl GetObjectsLocalLibraryFile(const void *);
__sysapi TStandardPool * __cdecl GetObjectsLocalPool(const void *);
__sysapi void __cdecl SetObjectsLocalPool(const void *, TStandardPool *);
__sysapi void * __cdecl NewObject(const TClassID&, OSErr * = NULL,
TStandardPool * = NULL);
__sysapi void * __cdecl NewObjectWithParent(const TClassID&,
const TClassID& parentID,
OSErr * = NULL, TStandardPool * = NULL);
__sysapi void * __cdecl NewObjectFromStream(const TFormattedStream&,
OSErr * = NULL, TStandardPool * = NULL);
__sysapi TClassInfo * __cdecl GetClassInfo(const TClassID&, OSErr * = NULL);
__sysapi OSErr __cdecl VerifyClass(const TClassID&, const TClassID& parentID);
__sysapi void * __cdecl CastObject(const void *, const TClassID& parentID, OSErr * = NULL);
__sysapi void * __cdecl CastToMainObject(const void *);
__sysapi OSErr __cdecl LoadClass(const TClassID&, BooleanParm forceAll);
__sysapi OSErr __cdecl UnloadClass(const TClassID&);
__sysapi Boolean __cdecl IsClassLoaded(const TClassID&);
__sysapi OSErr __cdecl LoadFunctionSet(const TFunctionSetID&, BooleanParm forceAll);
__sysapi OSErr __cdecl UnloadFunctionSet(const TFunctionSetID&);
__sysapi Boolean __cdecl IsFunctionSetLoaded(const TFunctionSetID&);
__sysapi ProcPtr __cdecl GetFunctionPointer(const TFunctionSetID&, const char *funcName,
OSErr * = NULL);
__sysapi ProcPtr __cdecl GetIndexedFunctionPointer(const TFunctionSetID&, unsigned int index,
OSErr * = NULL);
__sysapi OSErr __cdecl LoadLibraries(BooleanParm forceAll = true,
BooleanParm doSelf = true);
__sysapi OSErr __cdecl UnloadLibraries();
__sysapi void __cdecl ResetFunctionSet(const TFunctionSetID * = NULL);
__sysapi Boolean __cdecl TraceLogOn();
__sysapi Boolean __cdecl TraceLogOff();
__sysapi void __cdecl RegisterDynamicObject(TDynamic *);
__sysapi void __cdecl UnregisterDynamicObject(TDynamic *);
__sysapi TLibraryManager * __cdecl GetLocalLibraryManager();
__sysapi TStandardPool * __cdecl GetLocalPool();
__sysapi void __cdecl SetLocalPool(TStandardPool *);
__sysapi TStandardPool * __cdecl GetClientPool();
__sysapi TStandardPool * __cdecl GetDefaultPool();
__sysapi void __cdecl SetDefaultPool(TStandardPool *);
__sysapi TStandardPool * __cdecl GetSystemPool();
#else
__sysapi void * __cdecl NewObject(const TClassID, OSErr *, TStandardPool *);
__sysapi void * __cdecl NewObjectWithParent(const TClassID, const TClassID parentID,
OSErr *, TStandardPool *);
__sysapi void * __cdecl NewObjectFromStream(const TFormattedStream *, OSErr *,
TStandardPool *);
#ifdef MACNAMES
__sysapi TClassInfo * __cdecl GetClassInfo(const TClassID, OSErr *);
#endif
__sysapi OSErr __cdecl VerifyClass(const TClassID, const TClassID parentID);
__sysapi void * __cdecl CastObject(const void *, const TClassID parentID, OSErr *);
__sysapi void * __cdecl CastToMainObject(const void *);
__sysapi OSErr __cdecl LoadClass(const TClassID, BooleanParm forceAll);
__sysapi OSErr __cdecl UnloadClass(const TClassID);
__sysapi Boolean __cdecl IsClassLoaded(const TClassID);
__sysapi OSErr __cdecl LoadFunctionSet(const TFunctionSetID, BooleanParm forceAll);
__sysapi OSErr __cdecl UnloadFunctionSet(const TFunctionSetID);
__sysapi Boolean __cdecl IsFunctionSetLoaded(const TFunctionSetID);
__sysapi ProcPtr __cdecl GetFunctionPointer(const TFunctionSetID, const char *funcName,
OSErr *);
__sysapi ProcPtr __cdecl GetIndexedFunctionPointer(const TFunctionSetID, unsigned int index,
OSErr *);
__sysapi OSErr __cdecl LoadLibraries(BooleanParm forceAll, BooleanParm doSelf);
__sysapi OSErr __cdecl UnloadLibraries(void);
__sysapi void __cdecl ResetFunctionSet(const TFunctionSetID);
__sysapi Boolean __cdecl TraceLogOn();
__sysapi Boolean __cdecl TraceLogOff();
__sysapi TLibraryManager * __cdecl GetLocalLibraryManager(void);
__sysapi TStandardPool * __cdecl GetLocalPool();
__sysapi void __cdecl SetLocalPool(TStandardPool *);
__sysapi TStandardPool * __cdecl GetClientPool();
__sysapi TStandardPool * __cdecl GetDefaultPool();
__sysapi void __cdecl SetDefaultPool(TStandardPool *);
__sysapi TStandardPool * __cdecl GetSystemPool();
#endif
/* -------------------------------------------------------------------------
These functions are only used for their inline value.
Do not call them directly.
------------------------------------------------------------------------- */
#ifdef __cplusplus
__sysapi void * __cdecl SLMNewOperator(size_t, TMemoryPool *);
__sysapi void __cdecl SLMDeleteOperator(void *);
}
/*******************************************************************************
** CLASS TSimpleDynamic
**
** A base class for shared-library classes that has no virtual functions. This
** class is NOT shared, since it is intended to be a trivial class that just
** forces the VTable to be at the front of the object.
********************************************************************************/
#if SINGLEOBJECT
class TSimpleDynamic: public SingleObject
#else
class TSimpleDynamic
#endif
{
public:
virtual~ MPWC TSimpleDynamic ();
void *operator new (size_t size, TMemoryPool *); // from specified pool
void *operator new (size_t); // from default pool
void operator delete (void *obj, size_t)
{SLMDeleteOperator (obj);}
const TClassID& MPWC GetObjectsClassID () const;
const TClassID& MPWC GetObjectsParentClassID () const;
size_t MPWC GetObjectsSize () const;
TLibrary *MPWC GetObjectsLocalLibrary () const;
TLibraryFile *MPWC GetObjectsLocalLibraryFile () const;
TStandardPool *MPWC GetObjectsLocalPool () const;
void MPWC SetObjectsLocalPool (TStandardPool *) const;
Boolean MPWC IsDerivedFrom (const TClassID&) const;
protected:
MPWC TSimpleDynamic ();
private:
TSimpleDynamic (const TSimpleDynamic&);
void operator = (const TSimpleDynamic&);
};
/* -------------------------------------------------------------------------
Inline methods for TSimpleDynamic
------------------------------------------------------------------------- */
inline void *TSimpleDynamic:: operator new (size_t size, TMemoryPool *thePool)
{
return SLMNewOperator (size, thePool);
}
inline void *TSimpleDynamic:: operator new (size_t size)
{
return SLMNewOperator (size, NULL);
}
/*******************************************************************************
** CLASS TDynamic
**
** The base class for shared-library classes with a set of common capabilities.
** This class provides the same capabilities as TStdDynamic.
********************************************************************************/
typedef int TraceControlType;
#define kTraceStatus ((TraceControlType)1)
#define kTraceOn ((TraceControlType)2)
#define kTraceOff ((TraceControlType)3)
#define kTDynamicID "!$dyna,1.1"
#if SINGLEOBJECT
class TDynamic: public SingleObject
#else
class TDynamic
#endif
{
public:
virtual~ MPWC TDynamic ();
void *operator new (size_t size, TMemoryPool *); // from specified pool
void *operator new (size_t); // from default pool
void operator delete (void *obj, size_t)
{SLMDeleteOperator (obj);}
const TClassID& MPWC GetObjectsClassID () const;
const TClassID& MPWC GetObjectsParentClassID () const;
size_t MPWC GetObjectsSize () const;
TLibrary *MPWC GetObjectsLocalLibrary () const;
TLibraryFile *MPWC GetObjectsLocalLibraryFile () const;
TStandardPool *MPWC GetObjectsLocalPool () const;
void MPWC SetObjectsLocalPool (TStandardPool *) const;
virtual Boolean MPWC IsValid () const;
virtual OSErr MPWC Inflate (TFormattedStream&);
virtual OSErr MPWC Flatten (TFormattedStream&) const;
virtual TDynamic *MPWC Clone (TStandardPool *) const;
virtual char *MPWC GetVerboseName (char *) const;
virtual void MPWC Dump () const;
void MPWC Trace (char *formatStr, ...) const;
virtual Boolean MPWC TraceControl (TraceControlType) const;
Boolean MPWC IsTraceOn () const;
Boolean MPWC TraceOn () const;
Boolean MPWC TraceOff () const;
Boolean MPWC IsDerivedFrom (const TClassID&) const;
protected:
MPWC TDynamic ();
private:
TDynamic (const TDynamic&);
void operator = (const TDynamic&);
};
/* -------------------------------------------------------------------------
Inline methods for TDynamic
------------------------------------------------------------------------- */
inline void *TDynamic:: operator new (size_t size, TMemoryPool *thePool)
{
return SLMNewOperator (size, thePool);
}
inline void *TDynamic:: operator new (size_t size)
{
return SLMNewOperator (size, NULL);
}
inline Boolean TDynamic:: IsTraceOn () const
{
return TraceControl (kTraceStatus);
}
inline Boolean TDynamic:: TraceOn () const
{
return TraceControl (kTraceOn);
}
inline Boolean TDynamic:: TraceOff () const
{
return TraceControl (kTraceOff);
}
/*******************************************************************************
** CLASS MDynamic
**
** A base class for shared-library classes, which has one 1 virtual function (the
** destructor). This class is NOT shared, since it is intended to be a trivial class
** that can be used to force the VTable to be at the front of the object for
** mixin classes.
********************************************************************************/
class MDynamic
{
public:
virtual~ MDynamic ();
protected:
MDynamic ();
private:
MDynamic (const MDynamic&);
void operator = (const MDynamic&);
};
/*******************************************************************************
** CLASS TStdDynamic
**
** The base class for shared-library classes with a set of common capabilities.
** This class provides the same capabilities as TDynamic below, but is for
** classes that you don't want to descend from SingleObject.
********************************************************************************/
#define kTStdDynamicID "!$sdyn,1.1"
class TStdDynamic
{
public:
virtual~ MPWC TStdDynamic ();
void *operator new (size_t size, TMemoryPool *); // from specified pool
void *operator new (size_t); // from default pool
void operator delete (void *obj, size_t)
{SLMDeleteOperator (obj);}
const TClassID& MPWC GetObjectsClassID () const;
size_t MPWC GetObjectsSize () const;
TLibrary *MPWC GetObjectsLocalLibrary () const;
TLibraryFile *MPWC GetObjectsLocalLibraryFile () const;
TStandardPool *MPWC GetObjectsLocalPool () const;
void MPWC SetObjectsLocalPool (TStandardPool *) const;
virtual Boolean MPWC IsValid () const;
virtual OSErr MPWC Inflate (TFormattedStream&);
virtual OSErr MPWC Flatten (TFormattedStream&) const;
virtual TDynamic *MPWC Clone (TStandardPool *) const;
virtual char *MPWC GetVerboseName (char *) const;
virtual void MPWC Dump () const;
void MPWC Trace (char *formatStr, ...) const;
virtual Boolean MPWC TraceControl (TraceControlType) const;
Boolean IsTraceOn () const;
Boolean TraceOn () const;
Boolean TraceOff () const;
Boolean MPWC IsDerivedFrom (const TClassID&) const;
protected:
MPWC TStdDynamic ();
private:
TStdDynamic (const TDynamic&);
void operator = (const TDynamic&);
};
/* -------------------------------------------------------------------------
Inline methods for TStdDynamic
------------------------------------------------------------------------- */
inline void *TStdDynamic:: operator new (size_t size, TMemoryPool *thePool)
{
return SLMNewOperator (size, thePool);
}
inline void *TStdDynamic:: operator new (size_t size)
{
return SLMNewOperator (size, NULL);
}
inline Boolean TStdDynamic:: IsTraceOn () const
{
return TraceControl (kTraceStatus);
}
inline Boolean TStdDynamic:: TraceOn () const
{
return TraceControl (kTraceOn);
}
inline Boolean TStdDynamic:: TraceOff () const
{
return TraceControl (kTraceOff);
}
/*******************************************************************************
** CLASS TStdSimpleDynamic
**
** A base class for shared-library classes that has no virtual functions. This
** class is NOT shared, since it is intended to be a trivial class that just
** forces the VTable to be at the front of the object.
********************************************************************************/
class TStdSimpleDynamic
{
public:
virtual~ MPWC TStdSimpleDynamic ();
void *operator new (size_t size, TMemoryPool *); // from specified pool
void *operator new (size_t); // from default pool
void operator delete (void *obj, size_t)
{SLMDeleteOperator (obj);}
const TClassID& MPWC GetObjectsClassID () const;
size_t MPWC GetObjectsSize () const;
TLibrary *MPWC GetObjectsLocalLibrary () const;
TLibraryFile *MPWC GetObjectsLocalLibraryFile () const;
TStandardPool *MPWC GetObjectsLocalPool () const;
void MPWC SetObjectsLocalPool (TStandardPool *) const;
Boolean MPWC IsDerivedFrom (const TClassID&) const;
protected:
MPWC TStdSimpleDynamic ();
private:
TStdSimpleDynamic (const TStdSimpleDynamic&);
void operator = (const TStdSimpleDynamic&);
};
/* -------------------------------------------------------------------------
Inline methods for TStdSimpleDynamic
------------------------------------------------------------------------- */
inline void *TStdSimpleDynamic:: operator new (size_t size, TMemoryPool *thePool)
{
return SLMNewOperator (size, thePool);
}
inline void *TStdSimpleDynamic:: operator new (size_t size)
{
return SLMNewOperator (size, NULL);
}
#ifdef __SC__
/*******************************************************************************
** CLASS TSCSimpleDynamic
**
** A base class for shared-library classes that has no virtual functions. This
** class is NOT shared, since it is intended to be a trivial class that just
** forces the VTable to be at the front of the object, and override new to
** use the ASLM operators. It is used as a simple base class for Symantec C++ objects
********************************************************************************/
class TSCSimpleDynamic
{
public:
virtual~ TSCSimpleDynamic ();
void *operator new (size_t size, TMemoryPool *); // from specified pool
void *operator new (size_t); // from default pool
void operator delete (void *obj, size_t)
{SLMDeleteOperator (obj);}
const TClassID& GetObjectsClassID () const;
const TClassID& GetObjectsParentClassID () const;
size_t GetObjectsSize () const;
TLibrary *GetObjectsLocalLibrary () const;
TLibraryFile *GetObjectsLocalLibraryFile () const;
TStandardPool *GetObjectsLocalPool () const;
void SetObjectsLocalPool (TStandardPool *) const;
Boolean IsDerivedFrom (const TClassID&) const;
protected:
TSCSimpleDynamic ();
private:
TSCSimpleDynamic (const TSCSimpleDynamic&);
void operator = (const TSCSimpleDynamic&);
};
/* -------------------------------------------------------------------------
Inline methods for TSCSimpleDynamic
------------------------------------------------------------------------- */
inline void *TSCSimpleDynamic:: operator new (size_t size, TMemoryPool *thePool)
{
return SLMNewOperator (size, thePool);
}
inline void *TSCSimpleDynamic:: operator new (size_t size)
{
return SLMNewOperator (size, NULL);
}
/*******************************************************************************
** CLASS TSCDynamic
**
** The base class for shared-library classes with a set of common capabilities.
** This class provides the same capabilities as TStdDynamic. It is only for
** Symantec C++ implementations
********************************************************************************/
#define kTSCDynamicID "!$scdy,1.1"
class TSCDynamic
{
public:
virtual~ TSCDynamic ();
void *operator new (size_t size, TMemoryPool *); // from specified pool
void *operator new (size_t); // from default pool
void operator delete (void *obj, size_t)
{SLMDeleteOperator (obj);}
const TClassID& GetObjectsClassID () const;
const TClassID& GetObjectsParentClassID () const;
size_t GetObjectsSize () const;
TLibrary *GetObjectsLocalLibrary () const;
TLibraryFile *GetObjectsLocalLibraryFile () const;
TStandardPool *GetObjectsLocalPool () const;
void SetObjectsLocalPool (TStandardPool *) const;
virtual Boolean _cdecl IsValid () const;
virtual OSErr _cdecl Inflate (TFormattedStream&);
virtual OSErr _cdecl Flatten (TFormattedStream&) const;
virtual TSCDynamic *_cdecl Clone (TStandardPool *) const;
virtual char *_cdecl GetVerboseName (char *) const;
virtual void _cdecl Dump () const;
void Trace (char *formatStr, ...) const;
virtual Boolean _cdecl TraceControl (TraceControlType) const;
Boolean IsTraceOn () const;
Boolean TraceOn () const;
Boolean TraceOff () const;
Boolean IsDerivedFrom (const TClassID&) const;
protected:
TSCDynamic ();
private:
TSCDynamic (const TSCDynamic&);
void operator = (const TSCDynamic&);
};
/* -------------------------------------------------------------------------
Inline methods for TSCDynamic
------------------------------------------------------------------------- */
inline void *TSCDynamic:: operator new (size_t size, TMemoryPool *thePool)
{
return SLMNewOperator (size, thePool);
}
inline void *TSCDynamic:: operator new (size_t size)
{
return SLMNewOperator (size, NULL);
}
inline Boolean TSCDynamic:: IsTraceOn () const
{
return TraceControl (kTraceStatus);
}
inline Boolean TSCDynamic:: TraceOn () const
{
return TraceControl (kTraceOn);
}
inline Boolean TSCDynamic:: TraceOff () const
{
return TraceControl (kTraceOff);
}
#endif // /* __SC__ */
#endif // /* __cplusplus */
/*******************************************************************************
** Class TClassID, TFunctionSetID, and TLibraryID
**
** TFunctionSetID and TLibraryID are typedef'd to be the same as TClassID
********************************************************************************/
#define kMaxClassIDSize 255
#ifdef __cplusplus
const TClassID& ClassID(const char *str); // cast a char* to a TClassID
Boolean operator ==(const TClassID&, const char *);
Boolean operator !=(const TClassID&, const char *);
Boolean operator ==(const char *, const TClassID&);
Boolean operator !=(const char *, const TClassID&);
class TClassID
{
public:
void *operator new (size_t, size_t strLen, TMemoryPool *thePool = NULL)
{
return SLMNewOperator (strLen +1, thePool);
}
void *operator new (size_t)
{
return SLMNewOperator (kMaxClassIDSize +1, NULL);
}
void operator delete (void *obj, size_t)
{SLMDeleteOperator (obj);}
TClassID ();
TClassID (const TClassID&);
operator const char * () const; // cast to a const char *
Version MPWC ExtractVersion () const;
size_t MPWC GetLength () const;
TClassID& operator = (const TClassID&);
Boolean operator== (const TClassID&) const;
Boolean operator!= (const TClassID&) const;
private:
char fClassIDStr[kMaxClassIDSize + 1];
};
/* -------------------------------------------------------------------------
Inline methods for TClassID
------------------------------------------------------------------------- */
//
// constructors
//
inline TClassID:: TClassID ()
{
fClassIDStr[0] = 0;
}
inline TClassID:: TClassID (const TClassID& classID)
{
strcpy (fClassIDStr, classID.fClassIDStr);
}
//
// cast operators
//
inline const TClassID& ClassID (const char *str)
{
return * (const TClassID *) str;
}
inline TClassID:: operator const char * () const
{
return fClassIDStr;
}
//
// compare operators
//
inline Boolean TClassID:: operator!= (const TClassID& classID) const
{
return! ( *this== classID);
}
inline Boolean operator!= (const TClassID& id1, const char *id2)
{
return! (id1== ClassID (id2));
}
inline Boolean operator!= (const char *id1, const TClassID& id2)
{
return! (id2== ClassID (id1));
}
inline Boolean operator== (const TClassID& id1, const char *id2)
{
return (id1== ClassID (id2));
}
inline Boolean operator== (const char *id1, const TClassID& id2)
{
return (id2== ClassID (id1));
}
//
// assignment operators
//
inline TClassID& TClassID:: operator = (const TClassID& classID)
{
strcpy (fClassIDStr, classID.fClassIDStr);
return *this;
}
#endif
/*******************************************************************************
** Class TLibraryManager
**
** The user's interface to the world!
********************************************************************************/
#ifdef __cplusplus
#define kTLibraryManagerID "!$lmgr,1.1"
class TLibraryManager: public TDynamic
{
private:
virtual~ MPWC TLibraryManager ();
MPWC TLibraryManager (TStandardPool * = NULL, TLibraryFile * = NULL);
public:
virtual void MPWC Dump () const;
// New Methods
virtual void *MPWC NewObject (const TClassID& classID,
OSErr * = NULL, TStandardPool * = NULL) const;
virtual void *MPWC NewObject (const TClassID& classID, const TClassID& baseClassID,
OSErr * = NULL, TStandardPool * = NULL) const;
virtual void *MPWC NewObject (const TFormattedStream&,
OSErr * = NULL, TStandardPool * = NULL) const;
virtual TClassInfo *MPWC GetClassInfo (const TClassID&, OSErr * = NULL) const;
virtual OSErr MPWC VerifyClass (const TClassID& classID, const TClassID& baseClassID) const;
virtual void *MPWC CastObject (const void *obj, const TClassID& parentID,
OSErr * = NULL) const;
virtual void *MPWC CastToMainObject (const void *obj) const;
virtual OSErr MPWC LoadClass (const TClassID&, BooleanParm loadAll = false);
virtual OSErr MPWC UnloadClass (const TClassID&);
virtual Boolean MPWC IsClassLoaded (const TClassID&) const;
OSErr LoadFunctionSet (const TFunctionSetID&, BooleanParm loadAll = false);
OSErr UnloadFunctionSet (const TFunctionSetID&);
Boolean IsFunctionSetLoaded (const TFunctionSetID&) const;
virtual ProcPtr MPWC GetFunctionPointer (const TFunctionSetID&,
const char *funcName,
OSErr * = NULL);
virtual ProcPtr MPWC GetFunctionPointer (const TFunctionSetID&,
unsigned int index,
OSErr * = NULL);
virtual OSErr MPWC LoadLibraries (BooleanParm forceAll = true,
BooleanParm doSelf = true);
virtual OSErr MPWC UnloadLibraries ();
virtual void MPWC ResetFunctionSet (const TFunctionSetID * = NULL);
virtual Boolean MPWC TraceLogOn ();
virtual Boolean MPWC TraceLogOff ();
virtual void MPWC RegisterDynamicObject (TDynamic *);
virtual void MPWC UnregisterDynamicObject (TDynamic *);
void SetObjectPool (TStandardPool *);
TStandardPool *GetObjectPool () const;
void SetDefaultPool (TStandardPool *);
TStandardPool *GetDefaultPool () const;
GlobalWorld MPWC GetGlobalWorld () const;
virtual TLibrary *MPWC GetLibrary () const;
virtual TLibraryFile *MPWC GetLibraryFile () const;
private:
TLibraryManager (const TLibraryManager&);
void operator = (const TLibraryManager&);
private:
TStandardPool *fPool; // pool used for new objects and local pool
TLibraryFile *fLibraryFile;
TStandardPool *fDefaultPool;
GlobalWorld fGlobalWorld;
};
/* -------------------------------------------------------------------------
Inline Methods for TLibraryManager
------------------------------------------------------------------------- */
inline OSErr TLibraryManager:: LoadFunctionSet (const TFunctionSetID& functionSetID, BooleanParm loadAll)
{
return LoadClass (functionSetID, loadAll);
}
inline OSErr TLibraryManager:: UnloadFunctionSet (const TFunctionSetID& functionSetID)
{
return UnloadClass (functionSetID);
}
inline Boolean TLibraryManager:: IsFunctionSetLoaded (const TFunctionSetID& functionSetID) const
{
return IsClassLoaded (functionSetID);
}
inline TStandardPool *TLibraryManager:: GetObjectPool () const
{
return fPool;
}
inline void TLibraryManager:: SetObjectPool (TStandardPool *thePool)
{
fPool = thePool;
}
inline TStandardPool *TLibraryManager:: GetDefaultPool () const
{
return fDefaultPool;
}
inline void TLibraryManager:: SetDefaultPool (TStandardPool *thePool)
{
fDefaultPool = thePool;
}
inline GlobalWorld TLibraryManager:: GetGlobalWorld () const
{
return fGlobalWorld;
}
/* -------------------------------------------------------------------------
Inline for IsDerivedFrom
------------------------------------------------------------------------- */
inline Boolean IsDerivedFrom (const void *obj, const TClassID& id)
{
return (GetLocalLibraryManager () -> CastObject (obj, id)!= NULL);
}
/* -------------------------------------------------------------------------
Inline methods for TDynamic
------------------------------------------------------------------------- */
inline Boolean TDynamic:: IsDerivedFrom (const TClassID& id) const
{
return:: IsDerivedFrom (this, id);
}
inline const TClassID& TDynamic:: GetObjectsClassID () const
{
return:: GetObjectsClassID (this);
}
inline const TClassID& TDynamic:: GetObjectsParentClassID () const
{
return:: GetObjectsParentClassID (this);
}
inline size_t TDynamic:: GetObjectsSize () const
{
return:: GetObjectsSize (this);
}
inline TLibrary *TDynamic:: GetObjectsLocalLibrary () const
{
return:: GetObjectsLocalLibrary (this);
}
inline TLibraryFile *TDynamic:: GetObjectsLocalLibraryFile () const
{
return:: GetObjectsLocalLibraryFile (this);
}
inline TStandardPool *TDynamic:: GetObjectsLocalPool () const
{
return:: GetObjectsLocalPool (this);
}
inline void TDynamic:: SetObjectsLocalPool (TStandardPool *pool) const
{
:: SetObjectsLocalPool (this, pool);
}
/* -------------------------------------------------------------------------
Inline methods for TSimpleDynamic
------------------------------------------------------------------------- */
inline const TClassID& TSimpleDynamic:: GetObjectsClassID () const
{
return ( (const TDynamic *) this) -> GetObjectsClassID ();
}
inline const TClassID& TSimpleDynamic:: GetObjectsParentClassID () const
{
return ( (const TDynamic *) this) -> GetObjectsParentClassID ();
}
inline size_t TSimpleDynamic:: GetObjectsSize () const
{
return ( (const TDynamic *) this) -> GetObjectsSize ();
}
inline TLibrary *TSimpleDynamic:: GetObjectsLocalLibrary () const
{
return ( (const TDynamic *) this) -> GetObjectsLocalLibrary ();
}
inline TLibraryFile *TSimpleDynamic:: GetObjectsLocalLibraryFile () const
{
return ( (const TDynamic *) this) -> GetObjectsLocalLibraryFile ();
}
inline TStandardPool *TSimpleDynamic:: GetObjectsLocalPool () const
{
return ( (const TDynamic *) this) -> GetObjectsLocalPool ();
}
inline void TSimpleDynamic:: SetObjectsLocalPool (TStandardPool *pool) const
{
( (const TDynamic *) this) -> SetObjectsLocalPool (pool);
}
inline Boolean TSimpleDynamic:: IsDerivedFrom (const TClassID& id) const
{
return ( (const TDynamic *) this) -> IsDerivedFrom (id);
}
/* -------------------------------------------------------------------------
Inline methods for TStdDynamic
------------------------------------------------------------------------- */
inline const TClassID& TStdDynamic:: GetObjectsClassID () const
{
return ( (const TDynamic *) this) -> GetObjectsClassID ();
}
inline size_t TStdDynamic:: GetObjectsSize () const
{
return ( (const TDynamic *) this) -> GetObjectsSize ();
}
inline TLibrary *TStdDynamic:: GetObjectsLocalLibrary () const
{
return ( (const TDynamic *) this) -> GetObjectsLocalLibrary ();
}
inline TLibraryFile *TStdDynamic:: GetObjectsLocalLibraryFile () const
{
return ( (const TDynamic *) this) -> GetObjectsLocalLibraryFile ();
}
inline TStandardPool *TStdDynamic:: GetObjectsLocalPool () const
{
return ( (const TDynamic *) this) -> GetObjectsLocalPool ();
}
inline void TStdDynamic:: SetObjectsLocalPool (TStandardPool *pool) const
{
( (const TDynamic *) this) -> SetObjectsLocalPool (pool);
}
inline Boolean TStdDynamic:: IsDerivedFrom (const TClassID& id) const
{
return ( (const TDynamic *) this) -> IsDerivedFrom (id);
}
/* -------------------------------------------------------------------------
Inline methods for TStdSimpleDynamic
------------------------------------------------------------------------- */
inline const TClassID& TStdSimpleDynamic:: GetObjectsClassID () const
{
return ( (const TDynamic *) this) -> GetObjectsClassID ();
}
inline size_t TStdSimpleDynamic:: GetObjectsSize () const
{
return ( (const TDynamic *) this) -> GetObjectsSize ();
}
inline TLibrary *TStdSimpleDynamic:: GetObjectsLocalLibrary () const
{
return ( (const TDynamic *) this) -> GetObjectsLocalLibrary ();
}
inline TLibraryFile *TStdSimpleDynamic:: GetObjectsLocalLibraryFile () const
{
return ( (const TDynamic *) this) -> GetObjectsLocalLibraryFile ();
}
inline TStandardPool *TStdSimpleDynamic:: GetObjectsLocalPool () const
{
return ( (const TDynamic *) this) -> GetObjectsLocalPool ();
}
inline void TStdSimpleDynamic:: SetObjectsLocalPool (TStandardPool *pool) const
{
( (const TDynamic *) this) -> SetObjectsLocalPool (pool);
}
inline Boolean TStdSimpleDynamic:: IsDerivedFrom (const TClassID& id) const
{
return ( (const TDynamic *) this) -> IsDerivedFrom (id);
}
#ifdef __SC__
/* -------------------------------------------------------------------------
Inline methods for TSCDynamic
------------------------------------------------------------------------- */
inline Boolean TSCDynamic:: IsDerivedFrom (const TClassID& id) const
{
return:: IsDerivedFrom (this, id);
}
inline const TClassID& TSCDynamic:: GetObjectsClassID () const
{
return:: GetObjectsClassID (this);
}
inline const TClassID& TSCDynamic:: GetObjectsParentClassID () const
{
return:: GetObjectsParentClassID (this);
}
inline size_t TSCDynamic:: GetObjectsSize () const
{
return:: GetObjectsSize (this);
}
inline TLibrary *TSCDynamic:: GetObjectsLocalLibrary () const
{
return:: GetObjectsLocalLibrary (this);
}
inline TLibraryFile *TSCDynamic:: GetObjectsLocalLibraryFile () const
{
return:: GetObjectsLocalLibraryFile (this);
}
inline TStandardPool *TSCDynamic:: GetObjectsLocalPool () const
{
return:: GetObjectsLocalPool (this);
}
inline void TSCDynamic:: SetObjectsLocalPool (TStandardPool *pool) const
{
:: SetObjectsLocalPool (this, pool);
}
/* -------------------------------------------------------------------------
Inline methods for TSCSimpleDynamic
------------------------------------------------------------------------- */
inline const TClassID& TSCSimpleDynamic:: GetObjectsClassID () const
{
return ( (const TSCDynamic *) this) -> GetObjectsClassID ();
}
inline const TClassID& TSCSimpleDynamic:: GetObjectsParentClassID () const
{
return ( (const TSCDynamic *) this) -> GetObjectsParentClassID ();
}
inline size_t TSCSimpleDynamic:: GetObjectsSize () const
{
return ( (const TSCDynamic *) this) -> GetObjectsSize ();
}
inline TLibrary *TSCSimpleDynamic:: GetObjectsLocalLibrary () const
{
return ( (const TSCDynamic *) this) -> GetObjectsLocalLibrary ();
}
inline TLibraryFile *TSCSimpleDynamic:: GetObjectsLocalLibraryFile () const
{
return ( (const TSCDynamic *) this) -> GetObjectsLocalLibraryFile ();
}
inline TStandardPool *TSCSimpleDynamic:: GetObjectsLocalPool () const
{
return ( (const TSCSimpleDynamic *) this) -> GetObjectsLocalPool ();
}
inline void TSCSimpleDynamic:: SetObjectsLocalPool (TStandardPool *pool) const
{
( (const TSCSimpleDynamic *) this) -> SetObjectsLocalPool (pool);
}
inline Boolean TSCSimpleDynamic:: IsDerivedFrom (const TClassID& id) const
{
return ( (const TSCSimpleDynamic *) this) -> IsDerivedFrom (id);
}
#endif // /* __SC__ */
#endif // /* __cplusplus */
/*******************************************************************************
** EXCEPTION Handling
**
** Some RULES:
** 1) Never propogate a failure outside of a constructor or destructor.
** If your constructor or destructor can call something which fails, it
** _must_ CATCH the failure and not re-propogate it.
** 2) Never create an object inside of a "try" block which you cannot
** destroy (especially an auto object).
** 3) if you are going to just RERAISE the exception, or Fail
** with a different error, you must manually call the destructors
** of any auto objects that are still in scope!
** 4) Any variables that are changed inside the "try", and which are tested
** inside a CATCH, CATCH_ALL, or FINALLY must be declared "volatile"
** (Use the Volatile macro below until C++ and volatile work!)
** 5) Never call Fail while an auto variable is in scope - it's
** destructor will not be called unless you call it manually.
** 6) FINALLY is always entered after TRY unless a CATCH clause raises
** (or re-raises) an exception (this is true even if an exception was
** not thrown).
********************************************************************************/
struct TException
{
struct TException *fPrev;
size_t fReserved;
long fBuffer[12];
char *fMessage;
void *fPtr;
OSErr fError;
};
#ifdef __cplusplus
extern "C" {
#else
typedef struct TException TException;
#endif
__sysapi void MPWC __cdecl PushException(TException *);
__sysapi TException *MPWC __cdecl PopException(TException *);
__sysapi Boolean MPWC __cdecl MatchException(TException *, long);
#if RS6000
__sysapi int __cdecl SetupException(long *val);
#else
__sysapi int __cdecl SetupException(long *val);
#endif
#ifdef __cplusplus
}
#endif
/* -----------------------------------------------------------------
Some important functions for exception handling
----------------------------------------------------------------- */
#ifdef __cplusplus
extern "C" {
__sysapi void MPWC __cdecl Fail(long err, const char *msg = NULL);
}
#else
__sysapi void MPWC __cdecl Fail(long err, const char *msg);
#endif
#ifdef __cplusplus
inline void FailNULL (void *val, long err, const char *msg = NULL)
{
if (val== 0)
Fail (err, msg);
}
#else
#define FailNULL(val, err, msg) \
if (val == 0) { Fail(err, msg); } else {}
#endif
#if qDebug
#define DebugFail(err, msg) Fail(err, msg)
#define DebugFailNULL(ptr, err, msg) FailNULL(ptr, err, msg)
#else
#define DebugFail(err, msg) Fail(err, NULL)
#define DebugFailNULL(ptr, err, msg) FailNULL(ptr, err, NULL)
#endif
#define ErrorCode() (except.fError)
#define ErrorMessage() (except.fMessage)
#define Volatile(x) ((void) &x)
/* -----------------------------------------------------------------
The TRY/CATCH/CATCH_ALL/FINALLY/ENDTRY macros
----------------------------------------------------------------- */
#define TRY \
{ \
TException except; \
Volatile(except); \
PushException(&except); \
if (SetupException(except.fBuffer) == 0) \
{
#define CATCH(e) \
} \
else if (MatchException(&except, e)) \
{
#define CATCH_ALL \
} \
else \
{
#define RERAISE \
Fail(ErrorCode(), ErrorMessage())
#define FINALLY \
} \
PopException(&except); \
{
#define ENDTRY \
} \
PopException(&except); \
}
#endif