aboutsummaryrefslogtreecommitdiff
path: root/backends/platform/PalmOS/Src/launcher/start.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'backends/platform/PalmOS/Src/launcher/start.cpp')
-rw-r--r--backends/platform/PalmOS/Src/launcher/start.cpp366
1 files changed, 366 insertions, 0 deletions
diff --git a/backends/platform/PalmOS/Src/launcher/start.cpp b/backends/platform/PalmOS/Src/launcher/start.cpp
new file mode 100644
index 0000000000..076c24d6c2
--- /dev/null
+++ b/backends/platform/PalmOS/Src/launcher/start.cpp
@@ -0,0 +1,366 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include <PalmOS.h>
+#include <SonyClie.h>
+
+#include "palmdefs.h"
+#include "start.h"
+#include "games.h"
+#include "globals.h"
+#include "modules.h"
+#include "skin.h"
+
+#include "forms.h"
+
+/***********************************************************************
+ *
+ * Global variables
+ *
+ ***********************************************************************/
+GlobalsPreferencePtr gPrefs;
+GlobalsDataPtr gVars;
+
+Boolean bDirectMode = false;
+Boolean bStartScumm = false;
+Boolean bLaunched = false;
+
+/***********************************************************************
+ *
+ * Internal Constants
+ *
+ ***********************************************************************/
+
+// Define the minimum OS version we support (3.5 for now).
+#define kOurMinVersion sysMakeROMVersion(3,5,0,sysROMStageRelease,0)
+#define kPalmOS10Version sysMakeROMVersion(1,0,0,sysROMStageRelease,0)
+
+/***********************************************************************
+ *
+ * Internal Functions
+ *
+ ***********************************************************************/
+
+// Callback for ExgDBWrite to send data with Exchange Manager
+static Err WriteDBData(const void* dataP, UInt32* sizeP, void* userDataP) {
+ Err err;
+ *sizeP = ExgSend((ExgSocketPtr)userDataP, (void*)dataP, *sizeP, &err);
+ return err;
+}
+
+Err SendDatabase (UInt16 cardNo, LocalID dbID, Char *nameP, Char *descriptionP) {
+ ExgSocketType exgSocket;
+ Err err;
+
+ // Create exgSocket structure
+ MemSet(&exgSocket, sizeof(exgSocket), 0);
+ exgSocket.description = descriptionP;
+ exgSocket.name = nameP;
+
+ // Start an exchange put operation
+ err = ExgPut(&exgSocket);
+ if (!err) {
+ err = ExgDBWrite(WriteDBData, &exgSocket, NULL, dbID, cardNo);
+ err = ExgDisconnect(&exgSocket, err);
+ }
+
+ return err;
+}
+
+
+/***********************************************************************
+ *
+ * FUNCTION: RomVersionCompatible
+ *
+ * DESCRIPTION: This routine checks that a ROM version is meet your
+ * minimum requirement.
+ *
+ * PARAMETERS: requiredVersion - minimum rom version required
+ * (see sysFtrNumROMVersion in SystemMgr.h
+ * for format)
+ * launchFlags - flags that indicate if the application
+ * UI is initialized.
+ *
+ * RETURNED: error code or zero if rom is compatible
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+static Err RomVersionCompatible(UInt32 requiredVersion, UInt16 launchFlags) {
+ UInt32 romVersion;
+
+ // See if we're on in minimum required version of the ROM or later.
+ FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion);
+ if (romVersion < requiredVersion) {
+ if ((launchFlags & (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) ==
+ (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) {
+
+ FrmAlert (RomIncompatibleAlert);
+
+ // Palm OS 1.0 will continuously relaunch this app unless we switch to
+ // another safe one.
+ if (romVersion <= kPalmOS10Version)
+ AppLaunchWithCommand(sysFileCDefaultApp, sysAppLaunchCmdNormalLaunch, NULL);
+
+ }
+ return sysErrRomIncompatible;
+ }
+
+ return errNone;
+}
+
+///////////////////////////////////////////////////////////////////////
+
+
+void SavePrefs() {
+ if (gPrefs) {
+ PrefSetAppPreferences(appFileCreator, appPrefID, appPrefVersionNum, gPrefs, sizeof (GlobalsPreferenceType), true);
+ MemPtrFree(gPrefs);
+ gPrefs = NULL;
+ }
+}
+
+/***********************************************************************
+ *
+ * FUNCTION: AppHandleEvent
+ *
+ * DESCRIPTION: This routine loads form resources and set the event
+ * handler for the form loaded.
+ *
+ * PARAMETERS: event - a pointer to an EventType structure
+ *
+ * RETURNED: true if the event has handle and should not be passed
+ * to a higher level handler.
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+static Boolean AppHandleEvent(EventPtr eventP) {
+ UInt16 formId;
+ FormPtr frmP;
+
+ if (eventP->eType == frmLoadEvent) {
+ // Load the form resource.
+ formId = eventP->data.frmLoad.formID;
+ frmP = FrmInitForm(formId);
+ FrmSetActiveForm(frmP);
+
+ // Set the event handler for the form. The handler of the currently
+ // active form is called by FrmHandleEvent each time is receives an
+ // event.
+ switch (formId) {
+ case MainForm:
+ FrmSetEventHandler(frmP, MainFormHandleEvent);
+ break;
+
+ case SkinsForm:
+ FrmSetEventHandler(frmP, SkinsFormHandleEvent);
+ break;
+
+ case GameEditForm:
+ FrmSetEventHandler(frmP, EditGameFormHandleEvent);
+ break;
+
+ case MiscForm:
+ FrmSetEventHandler(frmP, MiscFormHandleEvent);
+ break;
+
+ case CardSlotForm:
+ FrmSetEventHandler(frmP, CardSlotFormHandleEvent);
+ break;
+
+ case MusicForm:
+ FrmSetEventHandler(frmP, MusicFormHandleEvent);
+ break;
+
+ case InfoForm:
+ FrmSetEventHandler(frmP, InfoFormHandleEvent);
+ break;
+
+ default:
+// ErrFatalDisplay("Invalid Form Load Event");
+ break;
+ }
+ return true;
+ }
+
+ return false;
+}
+
+/***********************************************************************
+ *
+ * FUNCTION: AppEventLoop
+ *
+ * DESCRIPTION: This routine is the event loop for the application.
+ *
+ * PARAMETERS: nothing
+ *
+ * RETURNED: nothing
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+static void AppEventLoop(void) {
+ UInt16 error;
+ EventType event;
+
+ do {
+ EvtGetEvent(&event, evtNoWait);
+
+ if(bStartScumm)
+ bStartScumm = StartScummVM();
+
+ if (! SysHandleEvent(&event))
+ if (! MenuHandleEvent(0, &event, &error))
+ if (! AppHandleEvent(&event))
+ FrmDispatchEvent(&event);
+
+ } while (event.eType != appStopEvent);
+}
+
+/***********************************************************************
+ *
+ * FUNCTION: ScummVMPalmMain
+ *
+ * DESCRIPTION: This is the main entry point for the application.
+ *
+ * PARAMETERS: cmd - word value specifying the launch code.
+ * cmdPB - pointer to a structure that is associated with the launch code.
+ * launchFlags - word value providing extra information about the launch.
+ *
+ * RETURNED: Result of launch
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+static void AppLaunchCmdNotify(UInt16 LaunchFlags, SysNotifyParamType * pData) {
+ switch (pData->notifyType) {
+ case sysNotifyVolumeMountedEvent:
+ pData->handled = true; // don't switch
+
+ if (gPrefs) { // gPrefs exists ? so we are in the palm selector
+ CardSlotFormUpdate(); // redraw card list if needed
+
+ if (gPrefs->card.volRefNum == vfsInvalidVolRef) {
+ VFSAnyMountParamType *notifyDetailsP = (VFSAnyMountParamType *)pData->notifyDetailsP;
+ gPrefs->card.volRefNum = notifyDetailsP->volRefNum;
+
+ if (FrmGetFormPtr(MainForm) == FrmGetActiveForm())
+ if (gPrefs->card.volRefNum != vfsInvalidVolRef) {
+ CardSlotCreateDirs();
+ FrmUpdateForm(MainForm, frmRedrawUpdateMSImport);
+ }
+ }
+ }
+ break;
+
+ case sysNotifyVolumeUnmountedEvent:
+ if (gPrefs) {
+ CardSlotFormUpdate();
+
+ if (gPrefs->card.volRefNum == (UInt16)pData->notifyDetailsP) {
+ gPrefs->card.volRefNum = vfsInvalidVolRef;
+
+ if (FrmGetFormPtr(MainForm) == FrmGetActiveForm())
+ FrmUpdateForm(MainForm, frmRedrawUpdateMS);
+ }
+ }
+ break;
+
+ case sysNotifyDisplayResizedEvent:
+ if (gVars)
+ if (FrmGetFormPtr(MainForm) == FrmGetActiveForm())
+ SknApplySkin();
+ break;
+
+ case sonySysNotifyMsaEnforceOpenEvent:
+ // what am i supposed to do here ???
+ break;
+ }
+}
+
+static UInt32 ScummVMPalmMain(UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) {
+ Err error;
+
+ error = RomVersionCompatible (kOurMinVersion, launchFlags);
+ if (error) return (error);
+
+ switch (cmd) {
+ case sysAppLaunchCmdNotify:
+ AppLaunchCmdNotify(launchFlags, (SysNotifyParamType *) cmdPBP);
+ break;
+
+ case sysAppLaunchCustomEngineDelete:
+#ifndef _DEBUG_ENGINE
+ ModDelete();
+#endif
+ break;
+
+ case sysAppLaunchCmdNormalLaunch:
+ error = AppStart();
+ if (error)
+ goto end;
+
+ if (!bDirectMode) {
+ FrmGotoForm(MainForm);
+ }else {
+ GamUnselect();
+ bStartScumm = true;
+ }
+
+ AppEventLoop();
+end:
+ AppStop();
+ break;
+
+ default:
+ break;
+
+ }
+ return error;
+}
+
+/***********************************************************************
+ *
+ * FUNCTION: PilotMain
+ *
+ * DESCRIPTION: This is the main entry point for the application.
+ *
+ * PARAMETERS: cmd - word value specifying the launch code.
+ * cmdPB - pointer to a structure that is associated with the launch code.
+ * launchFlags - word value providing extra information about the launch.
+ * RETURNED: Result of launch
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+
+UInt32 PilotMain( UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) {
+ return ScummVMPalmMain(cmd, cmdPBP, launchFlags);
+}