/* * pHatt - PalmOS(TM) Hattrick (http://www.hattrick.org) Manager Assistant * * phat.c - main event loop * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "phat.h" FormPtr gpForm; FormPtr bgForm; struct player *players; struct player *editedPlayer; UInt8 NofPlayers; Char **playerNameList; struct preferences prefs; Boolean firstStart; Boolean showWelcome; static MemHandle starHandle; BitmapType *starBitmap; static Err StartApp() { editedPlayer = NULL; NofPlayers = 0; playerNameList = NULL; firstStart = false; showWelcome = false; starHandle = NULL; OpenPlayerDatabase(); SetNextAlarm(); starHandle = DmGetResource(bitmapRsc, Bitmap_Star); ErrFatalDisplayIf(!starHandle, "Could not get bitmap family resource"); starBitmap = MemHandleLock(starHandle); if (firstStart) { showWelcome = true; EditPlayer(-1); } else FrmGotoForm(prefs.selectedScreen); return 0; } static void StopApp() { if ( editedPlayer ) deletePlayer(&editedPlayer); if ( playerNameList ) MemPtrFree(playerNameList); if ( starHandle) { MemHandleUnlock(starHandle); DmReleaseResource(starHandle); } if ( bgForm ) { FrmEraseForm(bgForm); FrmDeleteForm(bgForm); bgForm = NULL; } FrmCloseAllForms(); saveDB(); } static void *getScreenHandler(UInt16 id) { switch (id) { case ArenaScreen: return ArenaScreenEHandler; case PlayerScreen: return PlayerScreenEHandler; case PositionScreen: case PositionScreen2: case PositionScreen3: return PositionScreenEHandler; case PlayerEditScreen: case PlayerEditScreen2: case PlayerEditScreen3: return PlayerEditEHandler; case PrefsPlayerScreen: return PlayerPrefsEHandler; case PrefsArenaScreen: return ArenaPrefsEHandler; case PrefsVariousScreen: return VariousPrefsEHandler; case ChangesScreen: return ChangesScreenEHandler; case TransferScreen: return TransferScreenEHandler; default: return 0; } } static Boolean HandleEvent(EventPtr event) { Boolean handled = false; switch (event->eType) { case frmLoadEvent: { FormPtr pForm = FrmInitForm(event->data.frmLoad.formID); FrmSetActiveForm(pForm); prefs.selectedScreen = event->data.frmLoad.formID; FrmSetEventHandler(pForm, getScreenHandler(event->data.frmLoad.formID)); handled = true; break; } default: break; } return handled; } static void EventLoop() { EventType event; UInt16 error; do { EvtGetEvent(&event, evtWaitForever); if ( ! SysHandleEvent(&event)) { if ( ! MenuHandleEvent(0, &event, &error)) { if ( ! HandleEvent(&event)) { FrmDispatchEvent(&event); } } } } while (event.eType != appStopEvent); } UInt32 PilotMain(UInt16 launchCode, MemPtr cmdPBP, UInt16 lauchFlags) { Err err = 0; UInt16 cardNo; LocalID dbID; if ( launchCode == sysAppLaunchCmdNormalLaunch) { if (! ( err = StartApp())) { EventLoop(); StopApp(); } } if ( launchCode == sysAppLaunchCmdAlarmTriggered ) SndPlaySystemSound(sndAlarm); if ( launchCode == sysAppLaunchCmdDisplayAlarm ) { DbSetPlayer(((SysDisplayAlarmParamType *)cmdPBP)->ref); SysCurAppDatabase(&cardNo, &dbID); SysUIAppSwitch(cardNo, dbID, sysAppLaunchCmdNormalLaunch, NULL); } return err; }