148 lines
3.9 KiB
C++
148 lines
3.9 KiB
C++
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
#ifndef kGenericError
|
||
|
#define kGenericError -1
|
||
|
#endif
|
||
|
|
||
|
extern char *gErrorMessage;
|
||
|
|
||
|
|
||
|
void SetErrorMessage(const char *theErrorMessage);
|
||
|
void SetErrorMessageAndAppendLongInt(const char *theErrorMessage,const long theLongInt);
|
||
|
void SetErrorMessageAndCStrAndLongInt(const char *theErrorMessage,const char * theCStr,const long theLongInt);
|
||
|
void SetErrorMessageAndCStr(const char *theErrorMessage,const char * theCStr);
|
||
|
void AppendCStrToErrorMessage(const char *theErrorMessage);
|
||
|
void AppendLongIntToErrorMessage(const long theLongInt);
|
||
|
|
||
|
|
||
|
char *GetErrorMessage(void);
|
||
|
OSErr GetErrorMessageInNewHandle(Handle *inoutHandle);
|
||
|
OSErr GetErrorMessageInExistingHandle(Handle inoutHandle);
|
||
|
OSErr AppendErrorMessageToHandle(Handle inoutHandle);
|
||
|
|
||
|
|
||
|
#ifdef __EXCEPTIONS_ENABLED__
|
||
|
void ThrowErrorMessageException(void);
|
||
|
#endif
|
||
|
|
||
|
|
||
|
|
||
|
// A bunch of evil macros that would be unnecessary if I were always using C++ !
|
||
|
|
||
|
#define SetErrorMessageAndBailIfNil(theArg,theMessage) \
|
||
|
{ \
|
||
|
if (theArg == nil) \
|
||
|
{ \
|
||
|
SetErrorMessage(theMessage); \
|
||
|
errCode = kGenericError; \
|
||
|
goto EXITPOINT; \
|
||
|
} \
|
||
|
}
|
||
|
|
||
|
|
||
|
#define SetErrorMessageAndBail(theMessage) \
|
||
|
{ \
|
||
|
SetErrorMessage(theMessage); \
|
||
|
errCode = kGenericError; \
|
||
|
goto EXITPOINT; \
|
||
|
}
|
||
|
|
||
|
|
||
|
#define SetErrorMessageAndLongIntAndBail(theMessage,theLongInt) \
|
||
|
{ \
|
||
|
SetErrorMessageAndAppendLongInt(theMessage,theLongInt); \
|
||
|
errCode = kGenericError; \
|
||
|
goto EXITPOINT; \
|
||
|
}
|
||
|
|
||
|
|
||
|
#define SetErrorMessageAndLongIntAndBailIfError(theErrCode,theMessage,theLongInt) \
|
||
|
{ \
|
||
|
if (theErrCode != noErr) \
|
||
|
{ \
|
||
|
SetErrorMessageAndAppendLongInt(theMessage,theLongInt); \
|
||
|
errCode = theErrCode; \
|
||
|
goto EXITPOINT; \
|
||
|
} \
|
||
|
}
|
||
|
|
||
|
|
||
|
#define SetErrorMessageCStrLongIntAndBailIfError(theErrCode,theMessage,theCStr,theLongInt) \
|
||
|
{ \
|
||
|
if (theErrCode != noErr) \
|
||
|
{ \
|
||
|
SetErrorMessageAndCStrAndLongInt(theMessage,theCStr,theLongInt); \
|
||
|
errCode = theErrCode; \
|
||
|
goto EXITPOINT; \
|
||
|
} \
|
||
|
}
|
||
|
|
||
|
|
||
|
#define SetErrorMessageAndCStrAndBail(theMessage,theCStr) \
|
||
|
{ \
|
||
|
SetErrorMessageAndCStr(theMessage,theCStr); \
|
||
|
errCode = kGenericError; \
|
||
|
goto EXITPOINT; \
|
||
|
}
|
||
|
|
||
|
|
||
|
#define SetErrorMessageAndBailIfError(theErrCode,theMessage) \
|
||
|
{ \
|
||
|
if (theErrCode != noErr) \
|
||
|
{ \
|
||
|
SetErrorMessage(theMessage); \
|
||
|
errCode = theErrCode; \
|
||
|
goto EXITPOINT; \
|
||
|
} \
|
||
|
}
|
||
|
|
||
|
|
||
|
#define SetErrorMessageAndLongIntAndBailIfNil(theArg,theMessage,theLongInt) \
|
||
|
{ \
|
||
|
if (theArg == nil) \
|
||
|
{ \
|
||
|
SetErrorMessageAndAppendLongInt(theMessage,theLongInt); \
|
||
|
errCode = kGenericError; \
|
||
|
goto EXITPOINT; \
|
||
|
} \
|
||
|
}
|
||
|
|
||
|
|
||
|
#define BailIfError(theErrCode) \
|
||
|
{ \
|
||
|
if ((theErrCode) != noErr) \
|
||
|
{ \
|
||
|
goto EXITPOINT; \
|
||
|
} \
|
||
|
}
|
||
|
|
||
|
|
||
|
#define SetErrCodeAndBail(theErrCode) \
|
||
|
{ \
|
||
|
errCode = theErrCode; \
|
||
|
\
|
||
|
goto EXITPOINT; \
|
||
|
}
|
||
|
|
||
|
|
||
|
#define SetErrorCodeAndMessageAndBail(theErrCode,theMessage) \
|
||
|
{ \
|
||
|
SetErrorMessage(theMessage); \
|
||
|
errCode = theErrCode; \
|
||
|
goto EXITPOINT; \
|
||
|
}
|
||
|
|
||
|
|
||
|
#define BailNow() \
|
||
|
{ \
|
||
|
errCode = kGenericError; \
|
||
|
goto EXITPOINT; \
|
||
|
}
|
||
|
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|