| #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 |