aboutsummaryrefslogtreecommitdiff
path: root/backends/PalmOS/Src/app.cpp
diff options
context:
space:
mode:
authorChris Apers2003-11-03 16:18:13 +0000
committerChris Apers2003-11-03 16:18:13 +0000
commita5e443a332738c16c74aedf78b483fb0165f6164 (patch)
tree3a22897b8458b4b74c67684c63be1905458d48fb /backends/PalmOS/Src/app.cpp
parent3b0fcf063765509972b527b7a0d5a0e83fcb5f63 (diff)
downloadscummvm-rg350-a5e443a332738c16c74aedf78b483fb0165f6164.tar.gz
scummvm-rg350-a5e443a332738c16c74aedf78b483fb0165f6164.tar.bz2
scummvm-rg350-a5e443a332738c16c74aedf78b483fb0165f6164.zip
AppStart/AppStop functions
svn-id: r11102
Diffstat (limited to 'backends/PalmOS/Src/app.cpp')
-rw-r--r--backends/PalmOS/Src/app.cpp417
1 files changed, 417 insertions, 0 deletions
diff --git a/backends/PalmOS/Src/app.cpp b/backends/PalmOS/Src/app.cpp
new file mode 100644
index 0000000000..b79e01cdda
--- /dev/null
+++ b/backends/PalmOS/Src/app.cpp
@@ -0,0 +1,417 @@
+#include <PalmOS.h>
+#include <SonyClie.h>
+
+#include "StarterRsc.h"
+#include "start.h"
+#include "globals.h"
+
+#include "mathlib.h"
+#include "formCards.h"
+#include "games.h"
+
+#define kOS5Version sysMakeROMVersion(5,0,0,sysROMStageRelease,0)
+
+/***********************************************************************
+ *
+ * FUNCTION: AppStart
+ *
+ * DESCRIPTION: Get the current application's preferences.
+ *
+ * PARAMETERS: nothing
+ *
+ * RETURNED: Err value 0 if nothing went wrong
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+static Err AppStartCheckHRmode()
+{
+ SonySysFtrSysInfoP sonySysFtrSysInfoP;
+ UInt32 version;
+ Err error = errNone;
+
+ // test if sonyHR is present
+ if (!(error = FtrGet(sonySysFtrCreator, sonySysFtrNumSysInfoP, (UInt32*)&sonySysFtrSysInfoP))) {
+ if (sonySysFtrSysInfoP->libr & sonySysFtrSysInfoLibrHR) { // HR available
+
+ if ((error = SysLibFind(sonySysLibNameHR, &gVars->HRrefNum)))
+ if (error == sysErrLibNotFound) // couldn't find lib
+ error = SysLibLoad( 'libr', sonySysFileCHRLib, &gVars->HRrefNum);
+
+ if (!error) { // Now we can use HR lib. Executes Open library.
+ error = HROpen(gVars->HRrefNum);
+ gVars->options |= optIsClieDevice;
+ }
+ }
+ }
+ // if not Hi-Density ?
+ if (error && !(error = FtrGet(sysFtrCreator, sysFtrNumWinVersion, &version))) {
+ gVars->HRrefNum = sysInvalidRefNum; // Not sony HR
+ gVars->options &= ~optIsClieDevice;
+
+ if (version<4)
+ error = 1;
+ }
+
+ if (!error) { // Not, error processing
+ UInt32 width, height, depth;
+ Boolean color;
+
+ width = hrWidth;
+ height= hrHeight;
+ depth = 8;
+ color = true;
+
+ if (gVars->HRrefNum != sysInvalidRefNum)
+ error = HRWinScreenMode (gVars->HRrefNum, winScreenModeSet, &width, &height, &depth, &color );
+ else
+ error = WinScreenMode (winScreenModeSet, &width, &height, &depth, &color );
+
+ // high-resolution mode entered from here if no error
+ if (error != errNone)
+ FrmCustomAlert(FrmErrorAlert,"Your device doesn't seems to support 256 colors mode.",0,0);
+
+ // check for 16bit mode
+ if (!WinScreenMode(winScreenModeGetSupportedDepths, NULL, NULL, &depth, &color))
+ gVars->options |= ((depth & 0x8000) ? optHas16BitMode : 0);
+ }
+ else
+ FrmCustomAlert(FrmErrorAlert,"This device doesn't seems to support\nHi-Res mode.",0,0);
+
+ return error;
+}
+
+static void AppStopHRMode() {
+ if (gVars->HRrefNum != sysInvalidRefNum) {
+ HRClose(gVars->HRrefNum);
+ //SysLibRemove(gVars->HRrefNum); // never call this !!
+ }
+}
+
+static Err AppStartCheckNotify() {
+ UInt32 romVersion;
+ Err err;
+
+ err = FtrGet(sysFtrCreator, sysFtrNumNotifyMgrVersion, &romVersion);
+ if (!err) {
+ UInt16 cardNo;
+ LocalID dbID;
+
+ err = SysCurAppDatabase(&cardNo, &dbID);
+ if (!err) {
+ SysNotifyRegister(cardNo, dbID, sysNotifyVolumeMountedEvent, NULL, sysNotifyNormalPriority, NULL);
+ SysNotifyRegister(cardNo, dbID, sysNotifyVolumeUnmountedEvent, NULL, sysNotifyNormalPriority, NULL);
+ SysNotifyRegister(cardNo, dbID, sonySysNotifyMsaEnforceOpenEvent, NULL, sysNotifyNormalPriority, NULL);
+ SysNotifyRegister(cardNo, dbID, sysNotifyDisplayResizedEvent, NULL, sysNotifyNormalPriority, NULL);
+ }
+ }
+
+ return err;
+}
+
+static Err AppStartLoadSkin() {
+ Err err = errNone;
+
+ // if skin defined, check if the db still exists
+ if (gPrefs->skin.dbID) {
+ UInt32 type, creator;
+
+ // remember to check version for next revision of the skin
+ err = DmDatabaseInfo (gPrefs->skin.cardNo, gPrefs->skin.dbID, gPrefs->skin.nameP, 0, 0, 0, 0, 0, 0, 0,0, &type, &creator);
+ if (!err)
+ if (type != 'skin' || creator != appFileCreator)
+ err = dmErrInvalidParam;
+
+ if (err)
+ MemSet(&(gPrefs->skin),sizeof(SkinInfoType),0);
+ }
+
+ // No skin ? try to get the first one
+ if (!gPrefs->skin.dbID) {
+ DmSearchStateType stateInfo;
+
+ err = DmGetNextDatabaseByTypeCreator(true, &stateInfo, 'skin', appFileCreator, false, &gPrefs->skin.cardNo, &gPrefs->skin.dbID);
+ if (!err)
+ err = DmDatabaseInfo (gPrefs->skin.cardNo, gPrefs->skin.dbID, gPrefs->skin.nameP, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+ }
+
+ if (err)
+ FrmCustomAlert(FrmErrorAlert,"No skin found.\nPlease install a skin and restart ScummVM.",0,0);
+
+ return err;
+}
+
+static Err AppStartCheckMathLib()
+{
+ Err error = errNone;
+
+ if ((error = SysLibFind(MathLibName, &MathLibRef)))
+ if (error == sysErrLibNotFound) // couldn't find lib
+ error = SysLibLoad( LibType, MathLibCreator, &MathLibRef);
+
+ if (!error) {// Now we can use lib. Executes Open library.
+ error = MathLibOpen(MathLibRef, MathLibVersion);
+ if (error)
+ FrmCustomAlert(FrmErrorAlert,"Can't open MathLib !",0,0);
+
+ } else {
+ FrmCustomAlert(FrmErrorAlert,"Can't find MathLib.\nPlease install it first.",0,0);
+ }
+
+ return error;
+}
+
+static void AppStopMathLib() {
+ UInt16 useCount;
+
+ if (MathLibRef != sysInvalidRefNum) {
+ MathLibClose(MathLibRef, &useCount);
+
+ if (!useCount)
+ SysLibRemove(MathLibRef);
+ }
+}
+
+static Err AppStartCheckScreenSize() {
+ SonySysFtrSysInfoP sonySysFtrSysInfoP;
+ Err error = errNone;
+ UInt32 ftr = 0;
+
+// WinGetDisplayExtent(&gVars->screenWidth, &gVars->screenHeight);
+
+// gVars->screenWidth <<= 1;
+// gVars->screenHeight <<= 1;
+ gVars->screenWidth = 320;
+ gVars->screenHeight = 320;
+
+ gVars->screenFullWidth = gVars->screenWidth;
+ gVars->screenFullHeight = gVars->screenHeight;
+
+ // Sony HiRes+
+ if (!(error = FtrGet(sonySysFtrCreator, sonySysFtrNumSysInfoP, (UInt32*)&sonySysFtrSysInfoP))) {
+ if (sonySysFtrSysInfoP->libr & sonySysFtrSysInfoLibrSilk) {
+
+ if ((error = SysLibFind(sonySysLibNameSilk, &gVars->slkRefNum)))
+ if (error == sysErrLibNotFound)
+ error = SysLibLoad( sonySysFileTSilkLib, sonySysFileCSilkLib, &gVars->slkRefNum);
+
+ if (!error) {
+ error = FtrGet(sonySysFtrCreator, sonySysFtrNumVskVersion, &gVars->slkVersion);
+ // Get screen size
+ if (error) {
+ // v1 = NR
+ error = SilkLibOpen(gVars->slkRefNum);
+ if(!error) {
+ gVars->slkVersion = vskVersionNum1;
+ SilkLibEnableResize(gVars->slkRefNum);
+ SilkLibResizeDispWin(gVars->slkRefNum, silkResizeMax);
+ HRWinGetWindowExtent(gVars->HRrefNum, &gVars->screenFullWidth, &gVars->screenFullHeight);
+ SilkLibResizeDispWin(gVars->slkRefNum, silkResizeNormal);
+ SilkLibDisableResize(gVars->slkRefNum);
+ }
+ } else {
+ // v2 = NX/NZ
+ // v3 = UX
+ error = VskOpen(gVars->slkRefNum);
+ if(!error) {
+ VskSetState(gVars->slkRefNum, vskStateEnable, (gVars->slkVersion == vskVersionNum2 ? vskResizeVertically : vskResizeHorizontally));
+ gVars->options |= (gVars->slkVersion == vskVersionNum2 ? optIsLandscapeMode : 0);
+ VskSetState(gVars->slkRefNum, vskStateResize, vskResizeNone);
+ HRWinGetWindowExtent(gVars->HRrefNum, &gVars->screenFullWidth, &gVars->screenFullHeight);
+ VskSetState(gVars->slkRefNum, vskStateResize, vskResizeMax);
+ VskSetState(gVars->slkRefNum, vskStateEnable, vskResizeDisable);
+ }
+ }
+ }
+ }
+
+ if (error)
+ gVars->slkRefNum = sysInvalidRefNum;
+ else
+ gVars->options |= optHasWideMode;
+ }
+
+ // Tapwave Zodiac and other DIA API compatible devies, TODO : a better handler, read the doc
+ if (error) {
+ if (!(error = FtrGet(sysFtrCreator, sysFtrNumInputAreaFlags, &ftr))) {
+ if (ftr & grfFtrInputAreaFlagLandscape) {
+ UInt16 old = SysGetOrientation();
+ error = SysSetOrientation(sysOrientationLandscape);
+ error = (error) ? error : PINSetInputAreaState(pinInputAreaClosed);
+ error = (error) ? error : StatHide();
+
+ if (!error) {
+ RectangleType r;
+ WinGetBounds(WinGetDisplayWindow(), &r);
+ gVars->screenFullWidth = r.extent.x << 1;
+ gVars->screenFullHeight = r.extent.y << 1;
+ gVars->options |= optHasWideMode|optIsLandscapeMode;
+ }
+
+ error = StatShow();
+ error = PINSetInputAreaState(pinInputAreaOpen);
+ error = SysSetOrientation(old);
+ }
+ }
+ }
+
+ return error;
+}
+
+static void AppStopSilk() {
+ if (gVars->slkRefNum != sysInvalidRefNum)
+ SilkLibClose(gVars->slkRefNum);
+}
+
+Err AppStart(void) {
+ UInt16 dataSize, checkSize = 0;
+ UInt32 ulProcessorType;
+ UInt32 romVersion;
+ Err error;
+
+ // allocate global variables space
+ dataSize = sizeof(GlobalsDataType);
+ gVars = (GlobalsDataType *)MemPtrNew(dataSize);
+ MemSet(gVars, dataSize, 0);
+
+ gVars->indicator.on = 255;
+ gVars->indicator.off = 0;
+ gVars->HRrefNum = sysInvalidRefNum;
+ gVars->volRefNum = sysInvalidRefNum;
+ gVars->slkRefNum = sysInvalidRefNum;
+ gVars->skinSet = false;
+ gVars->options = optNone;
+
+ // OS5 ?
+ if (!FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion))
+ gVars->options |= ((romVersion >= kOS5Version) ? optIsOS5Device : 0);
+
+ // ARM ?
+ if (!FtrGet(sysFileCSystem, sysFtrNumProcessorID, &ulProcessorType))
+ gVars->options |= ((sysFtrNumProcessorIsARM(ulProcessorType)) ? optIsARMDevice : 0);
+
+ // allocate prefs space
+ dataSize = sizeof(GlobalsPreferenceType);
+ gPrefs = (GlobalsPreferenceType *)MemPtrNew(dataSize);
+ MemSet(gPrefs, dataSize, 0);
+
+ // Read the saved preferences / saved-state information.
+ if (PrefGetAppPreferences(appFileCreator, appPrefID, NULL, &checkSize, true) == noPreferenceFound || checkSize != dataSize) {
+ // reset all elements
+ MemSet(gPrefs, dataSize, 0);
+
+ gPrefs->card.volRefNum = sysInvalidRefNum;
+
+ gPrefs->autoOff = true;
+ gPrefs->vibrator = CheckVibratorExists();
+ gPrefs->debug = false;
+
+ gPrefs->stdPalette = (gVars->options & optIsOS5Device);
+
+ gPrefs->volume.speaker = 16;
+ gPrefs->volume.headphone = 16;
+
+ gPrefs->volume.master = 192;
+ gPrefs->volume.music = 192;
+ gPrefs->volume.sfx = 192;
+
+ gPrefs->sound.tempo = 100;
+ gPrefs->sound.defaultTrackLength = 10;
+ gPrefs->sound.firstTrack = 1;
+
+ } else {
+ PrefGetAppPreferences(appFileCreator, appPrefID, gPrefs, &dataSize, true);
+ }
+
+ error = AppStartCheckMathLib();
+ if (error) return (error);
+
+ error = AppStartCheckHRmode();
+ if (error) return (error);
+
+ error = AppStartLoadSkin();
+ if (error) return (error);
+
+ if (gPrefs->card.volRefNum != sysInvalidRefNum) { // if volref previously defined, check if it's a valid one
+ VolumeInfoType volInfo;
+ Err err = VFSVolumeInfo(gPrefs->card.volRefNum, &volInfo);
+ if (err)
+ gPrefs->card.volRefNum = sysInvalidRefNum;
+ }
+ else
+ gPrefs->card.volRefNum = parseCards(); //parseCards(0); // get first volref
+
+ error = GamOpenDatabase();
+ if (error) return (error);
+ GamImportDatabase();
+
+ AppStartCheckNotify(); // not fatal error if not avalaible
+ AppStartCheckScreenSize();
+
+ return error;
+}
+
+/***********************************************************************
+ *
+ * FUNCTION: AppStop
+ *
+ * DESCRIPTION: Save the current state of the application.
+ *
+ * PARAMETERS: nothing
+ *
+ * RETURNED: nothing
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+static Err AppStopCheckNotify()
+{
+ UInt32 romVersion;
+ Err err;
+
+ err = FtrGet(sysFtrCreator, sysFtrNumNotifyMgrVersion, &romVersion);
+ if (!err) {
+ UInt16 cardNo;
+ LocalID dbID;
+
+ err = SysCurAppDatabase(&cardNo, &dbID);
+ if (!err) {
+ SysNotifyUnregister(cardNo, dbID, sysNotifyVolumeUnmountedEvent, sysNotifyNormalPriority);
+ SysNotifyUnregister(cardNo, dbID, sysNotifyVolumeMountedEvent, sysNotifyNormalPriority);
+ // sonySysNotifyMsaEnforceOpenEvent
+ SysNotifyUnregister(cardNo, dbID, sysNotifyDisplayResizedEvent, sysNotifyNormalPriority);
+ }
+ }
+
+ return err;
+}
+
+void AppStop(void) {
+ // Close all the open forms.
+ FrmCloseAllForms();
+ WinEraseWindow();
+ WinPalette(winPaletteSetToDefault, 0, 256, NULL);
+
+ // Close and move Game list database
+ GamCloseDatabase(false);
+
+ // Write the saved preferences / saved-state information. This data
+ // will saved during a HotSync backup.
+ SavePrefs();
+
+ // stop all
+ AppStopSilk();
+ AppStopCheckNotify();
+ AppStopMathLib();
+ AppStopHRMode();
+
+ // reset if needed
+ if (gVars) {
+ Boolean autoReset = gVars->autoReset;
+ MemPtrFree(gVars);
+ if (autoReset)
+ SysReset();
+ }
+} \ No newline at end of file