mirror of https://github.com/snes9xgit/snes9x.git
168 lines
3.9 KiB
C++
Executable File
168 lines
3.9 KiB
C++
Executable File
/*****************************************************************************\
|
|
Snes9x - Portable Super Nintendo Entertainment System (TM) emulator.
|
|
This file is licensed under the Snes9x License.
|
|
For further information, consult the LICENSE file in the root directory.
|
|
\*****************************************************************************/
|
|
|
|
/***********************************************************************************
|
|
SNES9X for Mac OS (c) Copyright John Stiles
|
|
|
|
Snes9x for Mac OS X
|
|
|
|
(c) Copyright 2001 - 2011 zones
|
|
(c) Copyright 2002 - 2005 107
|
|
(c) Copyright 2002 PB1400c
|
|
(c) Copyright 2004 Alexander and Sander
|
|
(c) Copyright 2004 - 2005 Steven Seeger
|
|
(c) Copyright 2005 Ryan Vogt
|
|
***********************************************************************************/
|
|
|
|
|
|
#include "port.h"
|
|
|
|
#include "mac-prefix.h"
|
|
#include "mac-os.h"
|
|
#include "mac-snes9x.h"
|
|
#include "mac-appleevent.h"
|
|
|
|
static AEEventHandlerUPP oappUPP, rappUPP, pdocUPP, quitUPP, odocUPP;
|
|
|
|
static pascal OSErr AEoapp (const AppleEvent *, AppleEvent *, long);
|
|
static pascal OSErr AErapp (const AppleEvent *, AppleEvent *, long);
|
|
static pascal OSErr AEpdoc (const AppleEvent *, AppleEvent *, long);
|
|
static pascal OSErr AEquit (const AppleEvent *, AppleEvent *, long);
|
|
static pascal OSErr AEodoc (const AppleEvent *, AppleEvent *, long);
|
|
|
|
|
|
static pascal OSErr AEoapp (const AppleEvent *theEvent, AppleEvent *theReply, long refCon)
|
|
{
|
|
if (running)
|
|
return (noErr);
|
|
|
|
if (startopendlog)
|
|
{
|
|
if (SNES9X_OpenCart(NULL))
|
|
{
|
|
SNES9X_Go();
|
|
QuitApplicationEventLoop();
|
|
}
|
|
else
|
|
AdjustMenus();
|
|
}
|
|
|
|
return (noErr);
|
|
}
|
|
|
|
static pascal OSErr AErapp (const AppleEvent *theEvent, AppleEvent *theReply, long refCon)
|
|
{
|
|
if (running)
|
|
return (noErr);
|
|
|
|
if (!cartOpen)
|
|
{
|
|
if (startopendlog)
|
|
{
|
|
if (SNES9X_OpenCart(NULL))
|
|
{
|
|
SNES9X_Go();
|
|
QuitApplicationEventLoop();
|
|
}
|
|
else
|
|
AdjustMenus();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
SNES9X_Go();
|
|
QuitApplicationEventLoop();
|
|
}
|
|
|
|
return (noErr);
|
|
}
|
|
|
|
static pascal OSErr AEpdoc (const AppleEvent *theEvent, AppleEvent *theReply, long refCon)
|
|
{
|
|
return (errAEEventNotHandled);
|
|
}
|
|
|
|
static pascal OSErr AEquit (const AppleEvent *theEvent, AppleEvent *theReply, long refCon)
|
|
{
|
|
if (running)
|
|
return (noErr);
|
|
|
|
SNES9X_Quit();
|
|
QuitApplicationEventLoop();
|
|
|
|
return (noErr);
|
|
}
|
|
|
|
static pascal OSErr AEodoc (const AppleEvent *theEvent, AppleEvent *theReply, long refCon)
|
|
{
|
|
OSErr err;
|
|
FSRef ref;
|
|
AEDescList docList;
|
|
AEKeyword keywd;
|
|
DescType rtype;
|
|
Size acsize;
|
|
long count;
|
|
|
|
if (running)
|
|
return (noErr);
|
|
|
|
err = AEGetParamDesc(theEvent, keyDirectObject, typeAEList, &docList);
|
|
if (err)
|
|
return (noErr);
|
|
|
|
err = AECountItems(&docList, &count);
|
|
if (err || (count != 1))
|
|
{
|
|
err = AEDisposeDesc(&docList);
|
|
return (noErr);
|
|
}
|
|
|
|
err = AEGetNthPtr(&docList, 1, typeFSRef, &keywd, &rtype, &ref, sizeof(FSRef), &acsize);
|
|
if (err == noErr)
|
|
{
|
|
if (SNES9X_OpenCart(&ref))
|
|
{
|
|
SNES9X_Go();
|
|
QuitApplicationEventLoop();
|
|
}
|
|
else
|
|
AdjustMenus();
|
|
}
|
|
|
|
err = AEDisposeDesc(&docList);
|
|
|
|
return (noErr);
|
|
}
|
|
|
|
void InitAppleEvents (void)
|
|
{
|
|
OSErr err;
|
|
|
|
oappUPP = NewAEEventHandlerUPP(AEoapp);
|
|
err = AEInstallEventHandler(kCoreEventClass, kAEOpenApplication, oappUPP, 0L, false);
|
|
|
|
odocUPP = NewAEEventHandlerUPP(AEodoc);
|
|
err = AEInstallEventHandler(kCoreEventClass, kAEOpenDocuments, odocUPP, 0L, false);
|
|
|
|
pdocUPP = NewAEEventHandlerUPP(AEpdoc);
|
|
err = AEInstallEventHandler(kCoreEventClass, kAEPrintDocuments, pdocUPP, 0L, false);
|
|
|
|
quitUPP = NewAEEventHandlerUPP(AEquit);
|
|
err = AEInstallEventHandler(kCoreEventClass, kAEQuitApplication, quitUPP, 0L, false);
|
|
|
|
rappUPP = NewAEEventHandlerUPP(AErapp);
|
|
err = AEInstallEventHandler(kCoreEventClass, kAEReopenApplication, rappUPP, 0L, false);
|
|
}
|
|
|
|
void DeinitAppleEvents (void)
|
|
{
|
|
DisposeAEEventHandlerUPP(oappUPP);
|
|
DisposeAEEventHandlerUPP(odocUPP);
|
|
DisposeAEEventHandlerUPP(pdocUPP);
|
|
DisposeAEEventHandlerUPP(quitUPP);
|
|
DisposeAEEventHandlerUPP(rappUPP);
|
|
}
|