Retired Document
Important: This sample code may not represent best practices for current development. The project may use deprecated symbols and illustrate technologies and techniques that are no longer recommended.
Relevant replacement documents include:
MoreAppleEvents/MoreAEObjects.c
/* |
File: MoreAEObjects.c |
Contains: Functions to help you when you are working with Apple event objects. |
Written by: George Warner |
Copyright: Copyright (c) 2000 Apple Computer, Inc., All Rights Reserved. |
You may incorporate this Apple sample source code into your program(s) without |
restriction. This Apple sample source code has been provided "AS IS" and the |
responsibility for its operation is yours. You are not permitted to redistribute |
this Apple sample source code as "Apple sample source code" after having made |
changes. If you're going to re-distribute the source, we require that you make |
it clear in the source that the code was descended from Apple sample source |
code, but that you've made changes. |
Change History (most recent first): |
<1> 3/9/00 GW Intergrating AppleEvent Helper code. First Check In |
*/ |
//******************************************************************************* |
// Conditionals to setup the build environment the way we like it. |
#include "MoreSetup.h" |
//********** Universal Headers **************************************** |
#include <AERegistry.h> |
#include <AEObjects.h> |
#include <AEPackObject.h> |
#include <Aliases.h> |
#include <FinderRegistry.h> |
#include <Icons.h> |
#include <Processes.h> |
//********** Project Headers **************************************** |
#include "MoreAppleEvents.h" |
#include "MoreAEObjects.h" |
//********** Private Prototypes **************************************** |
/* |
Used by MoreFECreateIconFamilyRecord, passed to ForEachIconDo as the IconAction |
function. Puts each icon in an icon suite into the descriptor record passed |
in the myDataPtr parameter. |
*/ |
static pascal OSErr MyIconAction( ResType pIconType, |
const Handle *pIconHdl, |
void *pDataPtr); |
/******************************************************************************** |
Add a parameter of type typeAlias to an AERecord (or AppleEvent) using the provided FSSpec. |
pFSSpec input: Pointer to the FSSpec to use. |
pKeyword input: The key for the data to be added to the record. |
pAERecord input: Pointer to the record (or event) to add the data to. |
RESULT CODES |
____________ |
noErr 0 No error |
paramErr -50 The value of target or alias parameter, or of |
both, is NIL, or the alias record is corrupt |
memFullErr -108 Not enough room in heap zone |
*/ |
pascal OSErr MoreAEOAddAliasParameterFromFSSpec(const FSSpecPtr pFSSpec, |
const DescType pKeyword, |
AERecord *pAERecord ) |
{ |
OSErr anErr = noErr; |
AliasHandle aliasHandle; |
anErr = NewAlias( nil, pFSSpec, &aliasHandle); |
if ( anErr == noErr && aliasHandle == nil ) |
{ |
anErr = paramErr; |
} |
if ( anErr == noErr ) |
{ |
char handleState; |
handleState = HGetState( (Handle)aliasHandle ); |
HLock( (Handle)aliasHandle ); |
anErr = AEPutParamPtr( pAERecord, pKeyword, typeAlias, |
*aliasHandle, (*aliasHandle)->aliasSize); |
HSetState( (Handle)aliasHandle, handleState ); |
DisposeHandle( (Handle)aliasHandle ); |
} |
return anErr; |
}//end AddAliasParameterFromFSS |
/******************************************************************************** |
Create and return an AEDesc of type typeAlias using the provided FSSpec. |
pFSSpec input: Pointer to the FSSpec to use. |
pAliasAEDesc input: Pointer to null AEDesc. |
output: an AEDesc of type typeAlias. |
RESULT CODES |
____________ |
noErr 0 No error |
paramErr -50 The value of target or alias parameter, or of |
both, is NIL, or the alias record is corrupt |
memFullErr -108 Not enough room in heap zone |
*/ |
pascal OSErr MoreAEOCreateAliasDescFromFSSpec( const FSSpecPtr pFSSpec, |
AEDesc *pAliasAEDesc ) |
{ |
OSErr anErr = noErr; |
AliasHandle aliasHandle; |
anErr = NewAlias( nil, pFSSpec, &aliasHandle); |
if ( anErr == noErr && aliasHandle == nil ) |
{ |
anErr = paramErr; |
} |
if ( anErr == noErr ) |
{ |
anErr = MoreAEOCreateAliasDesc( aliasHandle, pAliasAEDesc ); |
DisposeHandle( (Handle)aliasHandle ); |
} |
return anErr; |
}//end MakeAliasObject |
/******************************************************************************** |
Create and return an AEDesc of type typeAlias using the provided |
alias record. |
pAliasHdl input: Handle to an alias record. |
pAliasAEDesc input: Pointer to null AEDesc. |
output: an AEDesc of type typeAlias. |
RESULT CODES |
____________ |
noErr 0 No error |
memFullErr -108 Not enough room in heap zone |
*/ |
pascal OSErr MoreAEOCreateAliasDesc( const AliasHandle pAliasHdl, |
AEDesc *pAliasAEDesc ) |
{ |
OSErr anErr = noErr; |
char handleState = HGetState( (Handle)pAliasHdl ); |
HLock( (Handle)pAliasHdl ); |
anErr = AECreateDesc( typeAlias, *pAliasHdl, GetHandleSize( (Handle)pAliasHdl ), pAliasAEDesc ); |
HSetState( (Handle)pAliasHdl, handleState ); |
return anErr; |
}//end MakeAliasObject |
/******************************************************************************** |
Given an FSSpec, return an object descriptor containing an alias, |
contained by containerObj. |
pFSSpec input: Pointer to the FSSpec to use. |
pContainerAEDesc input: Pointer to container object for object being created. |
pAliasObjectAEDesc input: Pointer to null AEDesc. |
output: an alias object. |
RESULT CODES |
____________ |
noErr 0 No error |
paramErr -50 The value of target or alias parameter, or of |
both, is NIL, or the alias record is corrupt |
memFullErr -108 Not enough room in heap zone |
errAECoercionFail -1700 Data could not be coerced to the requested |
Apple event data type |
errAEWrongDataType -1703 Wrong Apple event data type |
errAENotAEDesc -1704 Not a valid descriptor record |
errAEBadListItem -1705 Operation involving a list item failed |
*/ |
pascal OSErr MoreAEOCreateAliasObjectFromFSSpec( const FSSpecPtr pFSSpec, |
AEDesc *pContainerAEDesc, |
AEDesc *pAliasObjectAEDesc ) |
{ |
OSErr anErr = noErr; |
AEDesc aliasDesc = {typeNull, nil}; |
anErr = MoreAEOCreateAliasDescFromFSSpec( pFSSpec, &aliasDesc ); |
if ( anErr == noErr ) |
{ |
anErr = CreateObjSpecifier( typeAlias, pContainerAEDesc, formAbsolutePosition, |
&aliasDesc, false, pAliasObjectAEDesc ); |
AEDisposeDesc( &aliasDesc ); |
} |
return anErr; |
}//end MakeAliasObject |
/******************************************************************************** |
Given an AliasHandle, return an object descriptor containing an alias, |
contained by containerObj. |
pAliasHdl input: Handle to an alias record. |
pContainerAEDesc input: Pointer to container object for object being created. |
pAliasObjectAEDesc input: Pointer to null AEDesc. |
output: an alias object. |
RESULT CODES |
____________ |
noErr 0 No error |
paramErr -50 Error in parameter list |
memFullErr -108 Not enough room in heap zone |
errAECoercionFail -1700 Data could not be coerced to the requested |
Apple event data type |
errAEWrongDataType -1703 Wrong Apple event data type |
errAENotAEDesc -1704 Not a valid descriptor record |
errAEBadListItem -1705 Operation involving a list item failed |
*/ |
pascal OSErr MoreAEOCreateAliasObject( const AliasHandle pAliasHdl, |
AEDesc *pContainerAEDesc, |
AEDesc *pAliasObjectAEDesc ) |
{ |
OSErr anErr = noErr; |
AEDesc aliasDesc; |
anErr = MoreAEOCreateAliasDesc( pAliasHdl, &aliasDesc ); |
if ( anErr == noErr ) |
{ |
anErr = CreateObjSpecifier( typeAlias, pContainerAEDesc, formAbsolutePosition, |
&aliasDesc, false, pAliasObjectAEDesc ); |
AEDisposeDesc( &aliasDesc ); |
} |
return anErr; |
}//end MakeAliasObject |
/******************************************************************************** |
Given a property type, create an new object descriptor for that property, |
contained by containerObj. |
pPropertyType input: Property type to use for object. |
pContainerAEDesc input: Pointer to container object for object being created. |
propertyObjPtr input: Pointer to null AEDesc. |
output: A property object. |
RESULT CODES |
____________ |
noErr 0 No error |
paramErr -50 Error in parameter list |
memFullErr -108 Not enough room in heap zone |
errAECoercionFail -1700 Data could not be coerced to the requested |
Apple event data type |
errAEWrongDataType -1703 Wrong Apple event data type |
errAENotAEDesc -1704 Not a valid descriptor record |
errAEBadListItem -1705 Operation involving a list item failed |
*/ |
pascal OSErr MoreAEOCreatePropertyObject( const DescType pPropertyType, |
AEDesc *pContainerAEDesc, |
AEDesc *propertyObjPtr ) |
{ |
OSErr anErr = noErr; |
AEDesc propDesc; |
anErr = AECreateDesc( typeType, &pPropertyType, sizeof( pPropertyType ), &propDesc ); |
if ( anErr == noErr ) |
{ |
anErr = CreateObjSpecifier( cProperty, pContainerAEDesc, formPropertyID, |
&propDesc, false, propertyObjPtr ); |
AEDisposeDesc( &propDesc ); |
} |
return anErr; |
}//end MakePropertyObject |
/******************************************************************************** |
Given a ProcessSerialNumber, create an new object descriptor for the PSN, |
contained by containerObj. |
pPSN input: ProcessSerialNumber to use for object. |
pContainerAEDesc input: Pointer to container object for object being created. |
pPSNObjDesc input: Pointer to null AEDesc. |
output: A ProcessSerialNumber object. |
RESULT CODES |
____________ |
noErr 0 No error |
paramErr -50 Error in parameter list |
memFullErr -108 Not enough room in heap zone |
errAECoercionFail -1700 Data could not be coerced to the requested |
Apple event data type |
errAEWrongDataType -1703 Wrong Apple event data type |
errAENotAEDesc -1704 Not a valid descriptor record |
errAEBadListItem -1705 Operation involving a list item failed |
*/ |
pascal OSErr MoreAEOCreateProcessObject( const ProcessSerialNumber *pPSN, |
AEDesc *pContainerAEDesc, |
AEDesc *pPSNObjDesc ) |
{ |
OSErr anErr = noErr; |
AEDesc psnDesc; |
anErr = AECreateDesc( typeProcessSerialNumber, pPSN, sizeof( ProcessSerialNumber ), &psnDesc ); |
if ( anErr == noErr ) |
{ |
anErr = CreateObjSpecifier( cProperty, pContainerAEDesc, formPropertyID, |
&psnDesc, false, pPSNObjDesc ); |
AEDisposeDesc( &psnDesc ); |
} |
return anErr; |
}//end MakePropertyObject |
/******************************************************************************** |
Given selection type, create an new object descriptor for a selection, |
contained by containerObj. |
pSelectionAEDesc input: Selection type to use for object. |
pContainerAEDesc input: Pointer to container object for object being created. |
pSelectionObject input: Pointer to null AEDesc. |
output: A property object. |
RESULT CODES |
____________ |
noErr 0 No error |
paramErr -50 Error in parameter list |
memFullErr -108 Not enough room in heap zone |
errAECoercionFail -1700 Data could not be coerced to the requested |
Apple event data type |
errAEWrongDataType -1703 Wrong Apple event data type |
errAENotAEDesc -1704 Not a valid descriptor record |
errAEBadListItem -1705 Operation involving a list item failed |
*/ |
pascal OSErr MoreAEOCreateSelectionObject( const DescType pSelectionAEDesc, |
AEDesc *pContainerAEDesc, |
AEDesc *pSelectionObject ) |
{ |
OSErr anErr = noErr; |
AEDesc selectionDesc = {typeNull, nil}; |
anErr = AECreateDesc( typeAbsoluteOrdinal, &pSelectionAEDesc, sizeof( pSelectionAEDesc ), &selectionDesc ); |
if ( anErr == noErr ) |
{ |
anErr = CreateObjSpecifier( cObject, pContainerAEDesc, formAbsolutePosition, |
&selectionDesc, false, pSelectionObject ); |
AEDisposeDesc( &selectionDesc ); |
} |
return anErr; |
} |
/******************************************************************************** |
Make position list (a list containing two longs representin the x and y values |
for the position of a Finder item). |
pPosition input: A point specifying the position. |
pPositionAEList input: Pointer to an AEList (contents will be lost, but not disposed). |
output: A new AEList containing the x & y values for the position. |
Result Codes |
____________ |
noErr 0 No error |
memFullErr -108 Not enough room in heap zone |
*/ |
pascal OSErr MoreAEOCreatePositionList( const Point pPosition, |
AEDescList * pPositionAEList ) |
{ |
OSErr anErr = noErr; |
anErr = AECreateList( nil, 0, false, pPositionAEList ); |
if ( anErr == noErr ) |
{ |
anErr = AEPutPtr( pPositionAEList, 0, typeInteger, &(pPosition.h), sizeof( short ) ); |
if ( anErr == noErr ) |
{ |
anErr = AEPutPtr( pPositionAEList, 0, typeInteger, &(pPosition.v), sizeof( short ) ); |
} |
} |
return anErr; |
}//end MoreAEOCreatePositionList |
//******************************************************************************** |
// A simple wrapper around CreateObjSpecifier which creates |
// an object specifier using formUniqueID and the unique ID |
// in pKeyData. |
pascal OSStatus MoreAEOCreateObjSpecifierFormUniqueID(DescType pDesiredClass, const AEDesc *pContainer, |
SInt32 pKeyData, Boolean pDisposeInputs, |
AEDesc *pObjSpecifier) |
{ |
OSStatus err; |
AEDesc keyDesc; |
MoreAssertQ(pContainer != nil); |
MoreAssertQ(pObjSpecifier != nil); |
MoreAENullDesc(&keyDesc); |
err = AECreateDesc(typeLongInteger, &pKeyData, sizeof(SInt32), &keyDesc); |
if (err == noErr) { |
err = CreateObjSpecifier(pDesiredClass, (AEDesc *) pContainer, formUniqueID, &keyDesc, pDisposeInputs, pObjSpecifier); |
} |
MoreAEDisposeDesc(&keyDesc); |
return err; |
} |
//******************************************************************************** |
// A simple wrapper around CreateObjSpecifier which creates |
// an object specifier using formAbsolutePosition, a key of |
// typeLongInteger (rather than typeAbsoluteOrdinal) and the |
// position index in pKeyData. |
pascal OSStatus MoreAEOCreateObjSpecifierFormAbsPos(DescType pDesiredClass, const AEDesc *pContainer, |
SInt32 pKeyData, SInt32 pDisposeInputs, |
AEDesc *pObjSpecifier) |
{ |
OSStatus err; |
AEDesc keyDesc; |
MoreAssertQ(pContainer != nil); |
MoreAssertQ(pObjSpecifier != nil); |
MoreAENullDesc(&keyDesc); |
err = AECreateDesc(typeLongInteger, &pKeyData, sizeof(SInt32), &keyDesc); |
if (err == noErr) { |
err = CreateObjSpecifier(pDesiredClass, (AEDesc *) pContainer, formAbsolutePosition, &keyDesc, pDisposeInputs, pObjSpecifier); |
} |
MoreAEDisposeDesc(&keyDesc); |
return err; |
} |
//******************************************************************************** |
// A simple wrapper around CreateObjSpecifier which creates |
// an object specifier using formName and the name in pKeyData. |
pascal OSStatus MoreAEOCreateObjSpecifierFormName(DescType pDesiredClass, const AEDesc *pContainer, |
ConstStr255Param pKeyData, Boolean pDisposeInputs, |
AEDesc *pObjSpecifier) |
{ |
OSStatus err; |
AEDesc keyDesc; |
MoreAssertQ(pContainer != nil); |
MoreAssertQ(pKeyData != nil); |
MoreAssertQ(pObjSpecifier != nil); |
MoreAENullDesc(&keyDesc); |
err = AECreateDesc(typeText, &pKeyData[1], pKeyData[0], &keyDesc); |
if (err == noErr) { |
err = CreateObjSpecifier(pDesiredClass, (AEDesc *) pContainer, formName, &keyDesc, pDisposeInputs, pObjSpecifier); |
} |
MoreAEDisposeDesc(&keyDesc); |
return err; |
} |
//******************************************************************************** |
// ******************************************* |
// ***** AddTwoIntListToEvent ***** |
// ******************************************* |
// Creates an AEList containing 2 integers, and then adds the list to an Apple event. |
/* |
OSErr AddTwoIntListToEvent( AppleEvent *pAppleEvent, long param1, long param2 ) |
{ |
OSErr anErr; |
AEDescList paramList; |
anErr = AECreateList( nil, 0, false, ¶mList ); |
if ( anErr == noErr ) |
{ |
anErr = AEPutPtr( ¶mList, 0, typeInteger, ¶m1, sizeof( param1 ) ); |
if ( anErr == noErr ) |
{ |
anErr = AEPutPtr( ¶mList, 0, typeInteger, ¶m2, sizeof( param2 ) ); |
if ( anErr == noErr ) |
{ |
anErr = AEPutParamDesc( pAppleEvent, keyDirectObject, ¶mList ); |
} |
} |
} |
AEDisposeDesc( ¶mList ); |
return ( anErr ); |
}// end AddTwoIntListToEvent |
*/ |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-01-14