unit AE; { This module is adds some AppleEvent support to Image Written and partly debugged by Rob Douglas University of British Columbia douglas@org.ecc.ubc.ca McKellar Designs rdouglas@mckellar.com 30/6/95 RMD Created Image command to send Frontier a script 2/7/95 RMD Added AppleEvents Run Macro [Number, Named ] Run a macro by number or name } interface uses Memory, QuickDraw, Packages, Menus, Events, Fonts, Scrap, ToolUtils,Resources, Errors, Palettes, globals, Utilities, AppleEvents, Macros1, Macros2; procedure InitAE; procedure SendFrontierScript; implementation var FrontierAddress:AEAddressDesc; { This routine will create a targetDesc using the apps signature } {-------------------------------------------------------------------------------} function GetTargetFromSignature (processSig: OSType; var targetDesc: AEAddressDesc): OSErr; {-------------------------------------------------------------------------------} begin GetTargetFromSignature := AECreateDesc(typeApplSignature, @processSig, sizeof(processSig), targetDesc); end; procedure SendFrontierScript; var theAppleEvent:AppleEvent; theError:OSErr; theAEReply:AppleEvent; script: Str255; begin GetArguments(script); theError := AECreateAppleEvent('misc', 'dosc',FrontierAddress, kAutoGenerateReturnID, kAnyTransactionID, theAppleEvent); theError := AEPutParamPtr(theAppleEvent, keyDirectObject, 'TEXT', Ptr(@script[1]), length(script)); theError := AESend(theAppleEvent, theAEReply, kAEWaitReply, kAENormalPriority, kAEDefaultTimeout, nil, nil); theError := AEDisposeDesc(theAppleEvent); theError := AEDisposeDesc(theAEReply); end; function HandleLoadMacros(var theAppleEvent, reply:AppleEvent; RefCon:LongInt):OSerr; VAR theNewName : Str255; err:OSErr; theDirectObject:AEDesc; begin err:=AEGetParamDesc(theAppleEvent, keyDirectObject, typeChar, theDirectObject); if err=noErr then begin with theDirectObject do begin if (descriptorType = 'TEXT') and (dataHandle<>nil) then begin LoadMacrosFromHandle(dataHandle); end end end; HandleLoadMacros := err; end; function GetAEInteger(var inAppleEvent:AppleEvent; inKey: AEKeyWord; var outInteger:LongInt):OSErr; VAR err:OSErr; theMacroNumber:integer; theReturnedType:DescType; theActualSize:Size; theObject:AEDesc; begin GetAEInteger:=AEGetParamPtr(inAppleEvent, inKey, typeLongInteger, theReturnedType, Ptr(@outInteger), Sizeof(LongInt), theActualSize); end; function FindMenuItem(inMenu:MenuHandle; var inString: str255):integer; var i,n:integer; theItem:str255; begin n := CountMItems(inMenu); for i := 1 to n do begin GetMenuItemText(inMenu,i,theItem); if EqualString(theItem, inString, false, false) then begin FindMenuItem := i; exit(FindMenuItem); end; end; FindMenuItem := 0; end; function HandleRunMacro(var theAppleEvent, reply:AppleEvent; RefCon:LongInt):OSerr; VAR err:OSErr; theMacroNumber:LongInt; begin err := GetAEInteger(theAppleEvent, 'Mac#', theMacroNumber); if err=noErr then begin if (theMacroNumber < 1) OR (theMacroNumber > nMacros) then err := -1 else RunMacro (theMacroNumber); end; HandleRunMacro := err; end; function HandleRemainder(var theAppleEvent, reply:AppleEvent; RefCon:LongInt):OSerr; VAR err:OSErr; theMacroNumber:LongInt; theDirectObject:AEDesc; begin CASE RefCon of 1: err := AEGetParamDesc(theAppleEvent, keyDirectObject, typeChar, theDirectObject); otherwise err := -1; end; HandleRemainder := err; end; procedure InitAE; var err:OSErr; signature:OSType; signatur2:OSType; begin err := AEInstallEventHandler('Imag', 'MacL', NewAEEventHandlerProc(@HandleLoadMacros), 1, false); err := AEInstallEventHandler('Imag', 'MacR', NewAEEventHandlerProc(@HandleRunMacro), 2, false); err := AEInstallEventHandler('Imag', '****', NewAEEventHandlerProc(@HandleRemainder), 0, false); err := GetTargetFromSignature('LAND', FrontierAddress); end; end.