/* $Header: /cvsroot/macperl/perl/macos/ext/Mac/AppleEvents/CarbonAE.h,v 1.1 2002/12/10 03:06:23 pudge Exp $
*
* Copyright (c) 2002 Matthias Neeracher, Chris Nandor
*
* You may distribute under the terms of the Perl Artistic License,
* as specified in the README file.
*
* $Log: CarbonAE.h,v $
* Revision 1.1 2002/12/10 03:06:23 pudge
* Big update for Carbon support
*
* Revision 1.2 2002/11/14 12:47:58 pudge
* Cast errno to short
*
* Revision 1.1 2002/11/13 02:04:50 pudge
* Aieeeeee! Big ol' Carbon update.
*
*
*/
// these aren't even used, but here's replacement macros just in case
#define CallOSACreateAppleEventProc(userRoutine, theAEEventClass, theAEEventID, target, returnID, transactionID, result, refCon) InvokeOSACreateAppleEventUPP(theAEEventClass, theAEEventID, target, returnID, transactionID, result, refCon, userRoutine)
#define CallOSASendProc(userRoutine, theAppleEvent, reply, sendMode, sendPriority, timeOutInTicks, idleProc, filterProc, refCon) InvokeOSASendUPP(theAppleEvent, reply, sendMode, sendPriority, timeOutInTicks, idleProc, filterProc, refCon, userRoutine)
/* Carbon adds a new paramter for additional error information (see
* AEBuildError), but it is optional and we just pass in NULL for now.
* if we can find a way to return the error information (maybe in $@?),
* then it could be useful.
*/
AEBuildError gBuildError;
#define vAEBuild(theAppleEvent, format, args) \
vAEBuildDesc(theAppleEvent, &gBuildError, format, args)
#define vAEBuildParameters(theAppleEvent, format, args) \
vAEBuildParameters(theAppleEvent, &gBuildError, format, args)
// we don't use AESubDesc at all
#define AESubDesc char
/* The current code uses AEStream, which no longer exists in Carbon.
* AEStreamRef exists in the old headers, and the new, and is a
* pointer to the AEStream structure. Apple changed the names of
* all the functions, too. So kill two birds with one set of macros.
*/
#define AEStream AEStreamRef
#define AEStream_Close(stream, desc) \
AEStreamClose(*stream, desc)
#define AEStream_CloseDesc(stream) \
AEStreamCloseDesc(*stream)
#define AEStream_CloseList(stream) \
AEStreamCloseList(*stream)
#define AEStream_CloseRecord(stream) \
AEStreamCloseRecord(*stream)
#define AEStream_Open \
AEStreamOpen
#define AEStream_OpenDesc(stream, type) \
AEStreamOpenDesc(*stream, type)
#define AEStream_OpenEvent \
AEStreamOpenEvent
#define AEStream_OpenKeyDesc(stream, key, type) \
AEStreamOpenKeyDesc(*stream, key, type)
#define AEStream_OpenList(stream) \
AEStreamOpenList(*stream)
#define AEStream_OpenRecord(stream, type) \
AEStreamOpenRecord(*stream, type)
#define AEStream_OptionalParam(stream, key) \
AEStreamOptionalParam(*stream, key)
#define AEStream_SetRecordType(stream, type) \
AEStreamSetRecordType(*stream, type)
#define AEStream_WriteAEDesc(stream, desc) \
AEStreamWriteAEDesc(*stream, desc)
#define AEStream_WriteData(stream, ptr, length) \
AEStreamWriteData(*stream, ptr, length)
#define AEStream_WriteDesc(stream, type, ptr, length) \
AEStreamWriteDesc(*stream, type, ptr, length)
#define AEStream_WriteKey(stream, key) \
AEStreamWriteKey(*stream, key)
#define AEStream_WriteKeyDesc(stream, key, type, ptr, length) \
AEStreamWriteKeyDesc(*stream, key, type, ptr, length)
static void pAEBuildError()
{
sv_setpvn(ERRSV, "", 0);
if (gBuildError.fError) {
char * errorString;
char * errorString2 = NewPtr(128);
switch (gBuildError.fError) {
case aeBuildSyntaxBadToken:
errorString = "Illegal character";
break;
case aeBuildSyntaxBadEOF:
errorString = "Unexpected end of format string";
break;
case aeBuildSyntaxNoEOF:
errorString = "Unexpected extra stuff past end";
break;
case aeBuildSyntaxBadNegative:
errorString = "\"-\" not followed by digits";
break;
case aeBuildSyntaxMissingQuote:
errorString = "Missing close \"'\"";
break;
case aeBuildSyntaxBadHex:
errorString = "Non-digit in hex string";
break;
case aeBuildSyntaxOddHex:
errorString = "Odd # of hex digits";
break;
case aeBuildSyntaxNoCloseHex:
errorString = "Missing \"È\"";
break;
case aeBuildSyntaxUncoercedHex:
errorString = "Hex string must be coerced to a type";
break;
case aeBuildSyntaxNoCloseString:
errorString = "Missing \"Ó\"";
break;
case aeBuildSyntaxBadDesc:
errorString = "Illegal descriptor";
break;
case aeBuildSyntaxBadData:
errorString = "Bad data value inside (É)";
break;
case aeBuildSyntaxNoCloseParen:
errorString = "Missing \")\" after data value";
break;
case aeBuildSyntaxNoCloseBracket:
errorString = "Expected \",\" or \"]\"";
break;
case aeBuildSyntaxNoCloseBrace:
errorString = "Expected \",\" or \"}\"";
break;
case aeBuildSyntaxNoKey:
errorString = "Missing keyword in record";
break;
case aeBuildSyntaxNoColon:
errorString = "Missing \":\" after keyword in record";
break;
case aeBuildSyntaxCoercedList:
errorString = "Cannot coerce a list";
break;
case aeBuildSyntaxUncoercedDoubleAt:
errorString = "\"@@\" substitution must be coerced";
break;
default:
errorString = "Unknown error";
break;
}
sprintf(errorString2, "%s at character %d",
errorString, gBuildError.fErrorPos);
sv_setpvn(ERRSV, errorString2, strlen(errorString2));
DisposePtr(errorString2);
}
}