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.
Sources/MSAEClone.c
// MSAEClone.c |
// |
// Original version by Jon Lansdell and Nigel Humphreys. |
// 4.0 and 3.1 updates by Greg Sutton. |
// ©Apple Computer Inc 1996, all rights reserved. |
/* |
14-Nov-95 : GS : Disposed of all interim descriptors in DoClone(). |
*/ |
#include "MSAEClone.h" |
#include "MSAEUtils.h" |
#include "MSAECreate.h" |
#include "MSAEGetData.h" |
#pragma segment AppleEvent |
// Clone an object - only handles text objects |
pascal OSErr DoClone(const AppleEvent *theAppleEvent, AppleEvent *reply, long refcon) |
{ |
#ifdef __MWERKS__ |
#pragma unused (reply, refcon) |
#endif |
AEDesc directObj = {typeNull, NULL}, |
insertHereDesc = {typeNull, NULL}, |
resultDesc = {typeNull, NULL}; |
OSErr err; |
err = AEGetParamDesc(theAppleEvent, keyDirectObject, typeWildCard, &directObj); |
if (noErr != err) goto done; |
err = AEGetParamDesc(theAppleEvent, keyAEInsertHere, typeWildCard, &insertHereDesc); |
if (noErr != err) goto done; |
err = GotRequiredParams(theAppleEvent); |
if (noErr != err) goto done; |
err = CloneDesc(&directObj, &insertHereDesc, &resultDesc); |
if (noErr != err) goto done; |
err = AddResultToReply(&resultDesc, reply, err); |
done: |
(void)AEDisposeDesc(&directObj); |
(void)AEDisposeDesc(&insertHereDesc); |
(void)AEDisposeDesc(&resultDesc); |
return(err); |
} |
OSErr CloneTextDesc(AEDesc* textDesc, AEDesc* insertHereDesc, AEDesc* result) |
{ |
TextToken aTextToken; |
Size actualSize; |
AEDesc dataDesc = {typeNull, NULL}, |
propertyDesc = {typeNull, NULL}; // Use to pass no properties |
OSErr err; |
if (typeMyText != textDesc->descriptorType) |
return(errAETypeError); |
GetRawDataFromDescriptor(textDesc, (Ptr)&aTextToken, sizeof(aTextToken), &actualSize); |
err = GetTextTextProperty(&aTextToken, &dataDesc); |
if (noErr != err) goto done; |
err = CreateText(cText, &dataDesc, insertHereDesc, &propertyDesc, result); |
done: |
if (dataDesc.dataHandle) |
AEDisposeDesc(&dataDesc); |
return(err); |
} |
OSErr CloneDesc(AEDesc* aDesc, AEDesc* insertHereDesc, AEDesc* result) |
{ |
AEDesc cloneDesc = {typeNull, NULL}, |
textDesc = {typeNull, NULL}; |
OSErr err; |
if (typeObjectSpecifier == aDesc->descriptorType) |
err = AEResolve(aDesc, kAEIDoMinimum, &cloneDesc); |
else if (typeNull != aDesc->descriptorType) |
err = AEDuplicateDesc(aDesc, &cloneDesc); |
if (noErr != err) goto done; |
switch (cloneDesc.descriptorType) |
{ |
case typeAEList: |
err = errAETypeError; |
// We can't handle copying more than one item to the scrap |
break; |
default: |
err = AECoerceDesc(&cloneDesc, typeMyText, &textDesc); |
if (noErr != err) goto done; |
err = CloneTextDesc(&textDesc, insertHereDesc, result); |
} |
done: |
(void)AEDisposeDesc(&cloneDesc); |
(void)AEDisposeDesc(&textDesc); |
return(err); |
} |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-01-14