aboutsummaryrefslogtreecommitdiff
path: root/backends/platform/PalmOS/Src/launcher/launch.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'backends/platform/PalmOS/Src/launcher/launch.cpp')
-rw-r--r--backends/platform/PalmOS/Src/launcher/launch.cpp36
1 files changed, 31 insertions, 5 deletions
diff --git a/backends/platform/PalmOS/Src/launcher/launch.cpp b/backends/platform/PalmOS/Src/launcher/launch.cpp
index c57738bb5f..7dd775d77d 100644
--- a/backends/platform/PalmOS/Src/launcher/launch.cpp
+++ b/backends/platform/PalmOS/Src/launcher/launch.cpp
@@ -23,6 +23,7 @@
*/
#include <PalmOS.h>
+#include <PmPalmOSNVFS.h>
#include "StarterRsc.h"
#include "games.h"
@@ -52,15 +53,20 @@
StrCat(filename, h); \
StrCat(filename, m);
+#define FIND_FILE() \
+ if (*volRefNum == vfsInvalidVolRef) \
+ *volRefNum = ModFind(filename);
+
+
#define CHECK_FILE(m) \
- e = VFSFileOpen(volRefNum, filename, vfsModeRead, &file); \
+ e = VFSFileOpen(*volRefNum, filename, vfsModeRead, &file); \
if (e) \
BUILD_ERROR(m) \
else \
VFSFileClose(file);
#define IMPRT_FILE(m) \
- e = VFSImportDatabaseFromFile(volRefNum, filename, &cardNo, &dbID); \
+ e = VFSImportDatabaseFromFile(*volRefNum, filename, &cardNo, &dbID); \
if (e) \
BUILD_ERROR(m)
@@ -77,6 +83,22 @@ void ModDelete() {
DELET_FILE("ScummVM-Engine");
}
+UInt16 ModFind(const Char *f) {
+ Err e;
+ UInt16 volRefNum;
+ FileRef r;
+ UInt32 volIterator = vfsIteratorStart|vfsIncludePrivateVolumes;
+ while (volIterator != vfsIteratorStop) {
+ e = VFSVolumeEnumerate(&volRefNum, &volIterator);
+
+ if (!e) e = VFSFileOpen(volRefNum, f, vfsModeRead, &r);
+ if (!e) e = VFSFileClose(r);
+ if (!e) break;
+ }
+
+ return volRefNum;
+}
+
static void ModSetStack(UInt32 newSize, UInt16 cardNo, LocalID dbID) {
DmOpenRef dbRef = DmOpenDatabase(cardNo, dbID, dmModeReadWrite);
@@ -103,7 +125,7 @@ static void ModSetStack(UInt32 newSize, UInt16 cardNo, LocalID dbID) {
}
}
-static Err ModImport(UInt16 volRefNum, UInt8 engine, Boolean *armP) {
+static Err ModImport(UInt16 *volRefNum, UInt8 engine, Boolean *armP) {
#ifndef _DEBUG_ENGINE
char filename[256];
UInt16 cardNo;
@@ -124,6 +146,7 @@ static Err ModImport(UInt16 volRefNum, UInt8 engine, Boolean *armP) {
#ifndef _DEBUG_ENGINE
// engine file ?
BUILD_FILE(engines[engine].fileP, ".engine");
+ FIND_FILE ();
CHECK_FILE("ScummVM engine file was not found !");
IMPRT_FILE("Cannot import engine file !");
@@ -132,6 +155,7 @@ static Err ModImport(UInt16 volRefNum, UInt8 engine, Boolean *armP) {
e = SysAppLaunch(cardNo, dbID, 0, sysAppLaunchCustomEngineGetInfo, 0, &result);
*armP = ((result & GET_MODEARM) == GET_MODEARM);
+/* ARM ONLY FOR NOW, NOT REQUIRED
// common file ?
if (!e && (result & GET_DATACOMMON)) {
BUILD_FILE("common", ".data");
@@ -144,6 +168,7 @@ static Err ModImport(UInt16 volRefNum, UInt8 engine, Boolean *armP) {
CHECK_FILE("Engine data file was not found !");
IMPRT_FILE("Cannot import engine data file !");
}
+*/
#endif
// if error, cleanup
if (e) ModDelete();
@@ -303,6 +328,7 @@ Boolean StartScummVM() {
"3do",
"acorn",
"amiga",
+ "2gs",
"atari",
"c64",
"pc",
@@ -429,7 +455,7 @@ Boolean StartScummVM() {
// gVars values
// (gVars->HRrefNum defined in checkHRmode on Clié)
- gVars->VFS.volRefNum = gPrefs->card.volRefNum;
+ gVars->VFS.volRefNum = (gPrefs->card.autoDetect ? vfsInvalidVolRef : gPrefs->card.volRefNum);
gVars->vibrator = gPrefs->vibrator;
gVars->stdPalette = gPrefs->stdPalette;
gVars->VFS.cacheSize = (gPrefs->card.useCache ? gPrefs->card.cacheSize : 0);
@@ -460,7 +486,7 @@ Boolean StartScummVM() {
HWR_SET(INIT_PA1LIB);
}
*/
- if (ModImport(gVars->VFS.volRefNum, engine, &isARM) != errNone) {
+ if (ModImport(&gVars->VFS.volRefNum, engine, &isARM) != errNone) {
if (bDirectMode) {
// and force exit if nothing selected
EventType event;