home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-10-07 | 7.3 KB | 225 lines | [TEXT/MPCC] |
- // ----------------------------------------------------------------------------------
- // AEHandler.c
- // ----------------------------------------------------------------------------------
- // Handles the required suite of Apple Events
- //
- // This demo is copywrite 1994 by LexTek Internation. Feel free to use it for
- // whatever purpose you wish. The SpellWright Library may not be copied or
- // distributed, except when linked to your application that adds significant features
- // to the code. ie. you can't take the library, make a new library and sell it. You
- // can, however, use it without royalties in applications or other such projects.
- //
- // LexTek International
- // 2255 N. University Parkway, Suit 15
- // Provo, UT 84604
- // (801) 375.8332 Phone
- // (801) 375.7654 Fax
- //
- // ----------------------------------------------------------------------------------
- // History:
- // 9/11/94 CG Original
- // 10/2/94 CG Added file opening from AE
- //
-
- #include <AppleEvents.h>
- #include "AEHandler.h"
- #include "EventLoop.h"
- #include "WindowHandler.h"
- #include "Globals.h"
-
- void DoHighLevel(EventRecord *theEvent);
- pascal OSErr AEOpenApp(AppleEvent *request, AppleEvent *reply, long handlerRefCon);
- pascal OSErr AEOpenDocs(register AppleEvent *request, AppleEvent *reply, long ref);
- pascal OSErr AEPrintDocs(AppleEvent *request, AppleEvent *reply, long ref);
- pascal OSErr AEQuitApp(AppleEvent *request, AppleEvent *reply, long ref);
- void InitAEHandlers(void);
- OSErr AEGotRequiredParams(AppleEvent *aevt);
- OSErr OpenHandler(AppleEvent *request);
-
-
- // ----------------------------------------------------------------------------------
-
- extern void ErrMsgCode(Str255 msg, short code);
-
- // ----------------------------------------------------------------------------------
- // DoHighLevel
- // ----------------------------------------------------------------------------------
- // Handles a High Level Event by processing the AppleEvent.
-
- void DoHighLevel(EventRecord *theEvent)
- { int theError;
-
- theError = AEProcessAppleEvent(theEvent);
- if ( theError != noErr)
- ErrMsgCode( "\pError in handling Apple Event", theError);
-
- } // HandleHighLevel
-
-
- // ----------------------------------------------------------------------------------
- // AEOpenApp -- Open Application AE
- // ----------------------------------------------------------------------------------
- // Opens the application. This is the first event we get (under Sys7). Here we
- // merely open a new window.
-
- pascal OSErr AEOpenApp(AppleEvent *request, AppleEvent *reply, long handlerRefCon)
- {
- CreateDocWindow();
- return AEGotRequiredParams(request);
- } // AEOpenApp
-
-
- // ----------------------------------------------------------------------------------
- // AEOpenDocs -- Open Document AE
- // ----------------------------------------------------------------------------------
- // Opens our documents. This can happen either at start or any other time.
-
- pascal OSErr
- AEOpenDocs(register AppleEvent *request, AppleEvent *reply, long ref)
- {
- return OpenHandler(request);
-
- } // AEOpenDocs
-
-
- // ----------------------------------------------------------------------------------
- // AEPrintDocs -- Print Document AE
- // ----------------------------------------------------------------------------------
- // This prints our document. As I've not added the printing functionality yet we
- // merely return a not handled error.
-
- pascal OSErr
- AEPrintDocs(AppleEvent *request, AppleEvent *reply, long ref)
- {
- return errAEEventNotHandled;
-
- } // AEPrintDocs
-
-
- // ----------------------------------------------------------------------------------
- // AEQuitApp
- // ----------------------------------------------------------------------------------
- // This quits our app. Right now we merely set the global quit flag to true.
- // Eventually we'd probably want to make this a little more fancy.
-
- pascal OSErr
- AEQuitApp(AppleEvent *request, AppleEvent *reply, long ref)
- {
- register OSErr err;
-
- err = AEGotRequiredParams(request);
-
- if (err == noErr)
- gQuit = TRUE;
-
- return err;
-
- } // AEQuitApp
-
- // ----------------------------------------------------------------------------------
- // InitAEHandlers -- Install our Apple Event Handlers
- // ----------------------------------------------------------------------------------
-
- void
- InitAEHandlers(void)
- {
- int err;
-
- // MPW and Metrowerks have different headers
- #ifndef NewAEEventHandlerProc
- # ifdef NewEventHandlerProc
- # define NewAEEventHandlerProc NewEventHandlerProc
- # else
- # define NewAEEventHandlerProc(proc) (EventHandlerProcPtr)proc
- # endif
- #endif
-
- // Install the Handlers
- err = AEInstallEventHandler(kCoreEventClass, kAEQuitApplication, NewAEEventHandlerProc(AEQuitApp), kAEQuitApplication, false);
- if (err == noErr)
- err = AEInstallEventHandler(kCoreEventClass, kAEOpenDocuments, NewAEEventHandlerProc(AEOpenDocs), kAEOpenDocuments, false);
- if (err == noErr)
- err = AEInstallEventHandler(kCoreEventClass, kAEPrintDocuments, NewAEEventHandlerProc(AEPrintDocs), kAEPrintDocuments, false);
- if (err == noErr)
- err = AEInstallEventHandler(kCoreEventClass, kAEOpenApplication, NewAEEventHandlerProc(AEOpenApp), kAEOpenApplication, false);
-
- // check for errs
- if ( err )
- ErrMsgCode( "\pCouldn't Install Apple Event Handler", err);
-
- } // InitAEHandlers
-
- // ----------------------------------------------------------------------------------
- // AEGotRequiredParams -- check for parameters
- // ----------------------------------------------------------------------------------
- // This routine merely checks to ensure that we've got all the required parameters for
- // our AppleEvents.
-
- OSErr
- AEGotRequiredParams(AppleEvent *aevt)
- {
- register OSErr err;
- Size actualSize;
- DescType typeCode;
-
- // see if we've got all the parameters...
- err = AEGetAttributePtr(aevt, keyMissedKeywordAttr, typeWildCard, &typeCode,
- NULL, 0, &actualSize);
-
- if (err == errAEDescNotFound) // if no "missed keyword" attribute we have the required params
- err = noErr;
- else
- if (err == noErr) // if "missed keyword" attribute exists then we missed at least one
- err = errAEParamMissed;
-
- return err;
- } // AEGotRequiredParams
-
- // ----------------------------------------------------------------------------------
- // OpenHandler
- // ----------------------------------------------------------------------------------
- // Handles the open apple event.
-
- OSErr OpenHandler(AppleEvent *request)
- { OSErr err, err2;
- AEDesc theDesc;
- AEKeyword ignoredKeyWord;
- DescType ignoredType;
- Size ignoredSize;
- FSSpec theFSS;
- long FilesToOpen;
-
- long counter;
-
- err = AEGetParamDesc(request, keyDirectObject, typeAEList, &theDesc);
-
- if (err)
- { ErrMsgCode("\pAEGetParamDesc", err);
- } // if
-
- // check for missing parameters (returns an err if one is missing)
- if ( !AEGotRequiredParams(request) )
- {
- // We have the required parameters. Now we get the direct object, get
- // it's type and then parse it.
-
- if (err = AECountItems(&theDesc, &FilesToOpen))
- ErrMsgCode("\pAECountItems", err);
- else
- { for (counter = 1; ((counter <= FilesToOpen) && (!err)); ++counter)
- { if ( err = AEGetNthPtr(&theDesc, counter, typeFSS, &ignoredKeyWord,
- &ignoredType, (Ptr)&theFSS, sizeof(theFSS), &ignoredSize))
- ErrMsgCode("\pAEGetNthDesc", err);
- else
- DoOpen(&theFSS); // open a file window
-
- } // for
- } // else
-
- } // if
-
- if (err2 = AEDisposeDesc(&theDesc))
- ErrMsgCode("\pAEDisposeDesc of theDesc", err2);
- return (err ? err : err2);
-
- } // OpenHandler