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.