home *** CD-ROM | disk | FTP | other *** search
- /*
- MSAEUtils.c
-
- Version 1.0d4
-
- Copyright © Apple Computer UK Ltd. 1992
-
- All rights reserved
-
- Produced by : UK Developer Technical Support
- AppleLink : UK.DTS
-
- */
-
- #pragma segment Main
-
- #include "MSAEUtils.h"
- #include "MSUtils.h"
-
- #include <AERegistry.h>
-
-
- /**-----------------------------------------------------------------------
- Utility Routines for getting data from AEDesc's
- -----------------------------------------------------------------------**/
-
- pascal void GetRawDataFromDescriptor(const AEDesc *theDesc,
- Ptr destPtr,
- Size destMaxSize,
- Size *actSize)
- {
- Size copySize;
-
-
- if (theDesc->dataHandle)
- {
- HLock((Handle)theDesc->dataHandle);
- *actSize = GetHandleSize((Handle)theDesc->dataHandle);
-
- copySize = LesserOf(*actSize, destMaxSize);
-
- BlockMove(*theDesc->dataHandle, destPtr, copySize);
-
- HUnlock((Handle)theDesc->dataHandle);
- }
- else
- *actSize = 0;
- } /*GetRawDataFromDescriptor*/
-
- pascal OSErr GetPStringFromDescriptor(const AEDesc *sourceDesc, char *resultStr)
-
- {
- OSErr myErr;
- OSErr ignoreErr;
- Size stringSize;
- AEDesc resultDesc;
-
- resultDesc.dataHandle = nil;
-
- resultStr[0] = 0;
-
- myErr = AECoerceDesc(sourceDesc,typeChar,&resultDesc);
-
- if (myErr==noErr)
- GetRawDataFromDescriptor(&resultDesc,
- (Ptr)&resultStr[1],
- 255,
- &stringSize);
- if (stringSize<256)
- resultStr[0] = (char)stringSize;
- else
- myErr = errAECoercionFail;
-
- if (resultDesc.dataHandle)
- ignoreErr = AEDisposeDesc(&resultDesc);
-
- return(myErr);
- }
-
- pascal OSErr GetIntegerFromDescriptor(const AEDesc *sourceDesc, short *result)
- {
- OSErr myErr;
- OSErr ignoreErr;
- Size intSize;
- AEDesc resultDesc;
-
- *result = 0;
- myErr = AECoerceDesc(sourceDesc,typeShortInteger,&resultDesc);
-
- if (myErr==noErr)
- {
- GetRawDataFromDescriptor(&resultDesc,
- (Ptr)result,
- 2,
- &intSize);
- if (intSize>2)
- myErr = errAECoercionFail;
- }
-
- if (resultDesc.dataHandle)
- ignoreErr = AEDisposeDesc(&resultDesc);
-
- return(myErr);
- }
-
- pascal OSErr GetBooleanFromDescriptor(const AEDesc *sourceDesc,
- Boolean *result)
- {
- OSErr myErr;
- OSErr ignoreErr;
- Size boolSize;
- AEDesc resultDesc;
-
- *result = false;
- myErr = AECoerceDesc(sourceDesc,typeBoolean,&resultDesc);
-
- if (myErr==noErr)
- {
- GetRawDataFromDescriptor(&resultDesc,
- (Ptr)result,
- sizeof(Boolean),
- &boolSize);
- if (boolSize>sizeof(Boolean))
- myErr = errAECoercionFail;
- }
-
- if (resultDesc.dataHandle)
- ignoreErr = AEDisposeDesc(&resultDesc);
-
- return(myErr);
- }
-
- pascal OSErr GetLongIntFromDescriptor(const AEDesc *sourceDesc,
- long *result)
- {
- OSErr myErr;
- OSErr ignoreErr;
- Size intSize;
- AEDesc resultDesc;
-
- *result = 0;
- myErr = AECoerceDesc(sourceDesc,typeLongInteger,&resultDesc);
-
- if (myErr==noErr)
- {
- GetRawDataFromDescriptor(&resultDesc,
- (Ptr)result,
- 4,
- &intSize);
- if (intSize>4)
- myErr = errAECoercionFail;
- }
-
- if (resultDesc.dataHandle)
- ignoreErr = AEDisposeDesc(&resultDesc);
-
- return(myErr);
- } /*GetLongIntFromDescriptor*/
-
- pascal OSErr GetRectFromDescriptor(const AEDesc *sourceDesc, Rect *result)
- {
- OSErr myErr;
- OSErr ignoreErr;
- Size rectSize;
- AEDesc resultDesc;
-
- SetRect(result,0,0,0,0);
- myErr = AECoerceDesc(sourceDesc,typeQDRectangle,&resultDesc);
-
- if (myErr==noErr)
- {
- GetRawDataFromDescriptor(&resultDesc,
- (Ptr)result,
- sizeof(Rect),
- &rectSize);
- if (rectSize<sizeof(Rect))
- myErr = errAECoercionFail;
- }
-
- if (resultDesc.dataHandle)
- ignoreErr = AEDisposeDesc(&resultDesc);
-
- return(myErr);
- } /*GetRectFromDescriptor*/
-
- pascal OSErr GetPointFromDescriptor(const AEDesc *sourceDesc,
- Point *result)
- {
- OSErr myErr;
- OSErr ignoreErr;
- Size ptSize;
- AEDesc resultDesc;
-
- SetPt(result,0,0);
-
- myErr = AECoerceDesc(sourceDesc,typeQDPoint,&resultDesc);
-
- if (myErr==noErr)
- {
- GetRawDataFromDescriptor(&resultDesc,
- (Ptr)result,
- sizeof(Point),
- &ptSize);
-
- if (ptSize<sizeof(Point))
- myErr = errAECoercionFail;
-
- }
-
- if (resultDesc.dataHandle)
- ignoreErr = AEDisposeDesc(&resultDesc);
-
- return(myErr);
- } /*GetPointFromDescriptor*/
-
-
- /*
- Name: PutStyledTextFromDescIntoTEHandle
- Purpose: Takes the text in an AEDesc containing typeIntlText and puts it in
- a styled text edit record at the current insertion point.
- Looks for typeIntlText, typeStyledText, typeChar in that order.
- */
-
- pascal OSErr GetStyledTextFromDescIntoTEHandle(const AEDesc *sourceTextDesc, TEHandle theHTE)
- {
- AEDesc styledTextDesc;
- AEDesc textStyleDesc;
- AEDesc rawTextDesc;
- OSErr myErr;
- OSErr ignoreErr;
-
- styledTextDesc.dataHandle = nil;
- textStyleDesc.dataHandle = nil;
- rawTextDesc.dataHandle = nil;
-
- /*
- Coerce to an AERecord and then extract the parts of the
- styled text - works for typeIntlText, typeStyledText
- */
- myErr = AECoerceDesc(sourceTextDesc, typeAERecord, &styledTextDesc);
-
- if (myErr==noErr)
- {
- myErr = AEGetKeyDesc(&styledTextDesc,
- keyAEText,
- typeChar,
- &rawTextDesc);
-
- myErr = AEGetKeyDesc(&styledTextDesc,
- keyAEStyles,
- typeScrapStyles,
- &textStyleDesc);
- }
- else
- {
- myErr = AECoerceDesc(sourceTextDesc, typeChar, &rawTextDesc);
-
- textStyleDesc.dataHandle = nil; /* so that TEStylInsert acts like TEInsert */
- }
-
- HLock((Handle)rawTextDesc.dataHandle);
-
- TEStylInsert((const void *) (*rawTextDesc.dataHandle),
- GetHandleSize(rawTextDesc.dataHandle),
- (StScrpHandle) textStyleDesc.dataHandle,
- theHTE);
-
- HUnlock((Handle)rawTextDesc.dataHandle);
-
- if (textStyleDesc.dataHandle)
- ignoreErr = AEDisposeDesc(&textStyleDesc);
-
- if (rawTextDesc.dataHandle)
- ignoreErr = AEDisposeDesc(&rawTextDesc);
-
- if (styledTextDesc.dataHandle)
- ignoreErr = AEDisposeDesc(&styledTextDesc);
-
- return(myErr);
- }
-