aboutsummaryrefslogtreecommitdiff
path: root/backends/PalmOS/Src/launch.cpp
diff options
context:
space:
mode:
authorChris Apers2004-11-09 11:54:16 +0000
committerChris Apers2004-11-09 11:54:16 +0000
commit28682e6d095fe4ac37f298c2bdde045021a25d75 (patch)
tree01687e13b89dd6b09f39a9ee84c1d4032ce627f6 /backends/PalmOS/Src/launch.cpp
parentfd2bde21d32a2ef72e34f71d02f37fdfc460c6d4 (diff)
downloadscummvm-rg350-28682e6d095fe4ac37f298c2bdde045021a25d75.tar.gz
scummvm-rg350-28682e6d095fe4ac37f298c2bdde045021a25d75.tar.bz2
scummvm-rg350-28682e6d095fe4ac37f298c2bdde045021a25d75.zip
Major update :
- now modular - modules are located on memory card and imported to storage memory when needed - renamed AddArgs(..) -> ArgsAdd - args related fucntions moved to args.* source files - make some args passed even if no game was selected - modules management stuffs svn-id: r15770
Diffstat (limited to 'backends/PalmOS/Src/launch.cpp')
-rw-r--r--backends/PalmOS/Src/launch.cpp455
1 files changed, 247 insertions, 208 deletions
diff --git a/backends/PalmOS/Src/launch.cpp b/backends/PalmOS/Src/launch.cpp
index bff3de1452..4f2a654f12 100644
--- a/backends/PalmOS/Src/launch.cpp
+++ b/backends/PalmOS/Src/launch.cpp
@@ -1,53 +1,18 @@
#include <PalmOS.h>
-#include <Sonyclie.h>
#include "StarterRsc.h"
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-
#include "games.h"
#include "start.h"
#include "rumble.h"
-#include "pa1lib.h"
#include "extend.h"
#include "globals.h"
#include "features.h"
+#include "formUtil.h"
+#include "modules.h"
+#include "args.h"
-// need to move this on a .h file
-#define sonySysFileCSystem 'SsYs' /* Sony overall System */
-#define sonySysFtrCreatorSystem sonySysFileCSystem
-
-#define sonySysFtrNumSystemBase 10000
-#define sonySysFtrNumSystemAOutSndStateOnHandlerP (sonySysFtrNumSystemBase + 4)
-#define sonySysFtrNumSystemAOutSndStateOffHandlerP (sonySysFtrNumSystemBase + 5)
-
-typedef void (*sndStateOnType)(UInt8 /* kind */, UInt8 /* L volume 0-31 */, UInt8 /* R volume 0-31 */);
-typedef void (*sndStateOffType)(UInt8 /* kind */);
-
-/* kind */
-#define aOutSndKindSp (0) /* Speaker volume */
-#define aOutSndKindHp (2) /* HeadPhone volume */
-////////////////////////////////////////////////////////////
-#define MAX_ARG 25
-
-static void initARM() {
- // init global ARM only
- MemSet(gVars->arm, sizeof(gVars->arm), 0);
- ARM(PNO_COPYRECT ).pnoPtr = _PnoInit(RSC_COPYRECT, &ARM(PNO_COPYRECT).pnoDesc);
- ARM(PNO_COSTUMEPROC3).pnoPtr = _PceInit(RSC_COSTUMEPROC3);
- ARM(PNO_DRAWSTRIP ).pnoPtr = _PceInit(RSC_DRAWSTRIP);
- ARM(PNO_BLIT ).pnoPtr = _PnoInit(RSC_BLIT, &ARM(PNO_BLIT).pnoDesc);
-}
-
-static void releaseARM() {
- _PnoFree(&ARM(PNO_BLIT ).pnoDesc, ARM(PNO_BLIT).pnoPtr);
- _PceFree(ARM(PNO_DRAWSTRIP ).pnoPtr);
- _PceFree(ARM(PNO_COSTUMEPROC3 ).pnoPtr);
- _PnoFree(&ARM(PNO_COPYRECT ).pnoDesc, ARM(PNO_COPYRECT).pnoPtr);
-}
-
+/*
static Boolean checkPath(const Char *pathP) {
FILE *tmpRef;
@@ -58,51 +23,144 @@ static Boolean checkPath(const Char *pathP) {
return true;
}
}
+*/
+
+#define BUILD_FILE(h,m) \
+ StrCopy(filename, "/Palm/Programs/ScummVM/Mods/"); \
+ StrCat(filename, h); \
+ StrCat(filename, m);
+
+#define CHECK_FILE() \
+ e = VFSFileOpen(volRefNum, filename, vfsModeRead, &file); \
+ if (e) \
+ goto onError; \
+ else \
+ VFSFileClose(file);
+
+#define DELET_FILE(f) \
+ del_dbID = DmFindDatabase(0, f); \
+ if (del_dbID) \
+ DmDeleteDatabase(0, del_dbID);
+
+void ModDelete() {
+ LocalID del_dbID;
+
+ DELET_FILE("Glbs::Common");
+ DELET_FILE("Glbs::Scumm");
+ DELET_FILE("Glbs::Simon");
+ DELET_FILE("Glbs::Queen");
+ DELET_FILE("Glbs::Sword1");
+ DELET_FILE("ScummVM-Engine");
+}
-static void AddArg(Char **argvP, const Char *argP, const Char *parmP, UInt8 *countArgP)
-{
- if (argP)
- {
- UInt16 len2 = 0;
- UInt16 len1 = StrLen(argP);
-
- if (len1 > 0)
- {
- if (parmP)
- len2 = StrLen(parmP);
-
- (*countArgP)++;
- *argvP = (Char *)MemPtrNew(len1 + len2 + 1);
- StrCopy(*argvP, argP);
-
- if (parmP)
- StrCat(*argvP, parmP);
+static void ModSetStack(UInt32 newSize, UInt16 cardNo, LocalID dbID) {
+ DmOpenRef dbRef = DmOpenDatabase(cardNo, dbID, dmModeReadWrite);
+
+ if (dbRef) {
+ MemHandle pref = DmGetResource('pref',0);
+ UInt32 size = 0;
+
+ if (pref) {
+ SysAppPrefsType *data = (SysAppPrefsType *)MemHandleLock(pref);
+ size = data->stackSize;
+
+ if (newSize) {
+ SysAppPrefsType newData;
+ MemMove(&newData, data, sizeof(SysAppPrefsType));
+ newData.stackSize = newSize;
+ DmWrite(data, 0, &newData, sizeof(SysAppPrefsType));
+ }
+
+ MemPtrUnlock(data);
+ DmReleaseResource(pref);
}
+
+ DmCloseDatabase(dbRef);
}
}
+static Err ModImport(UInt16 volRefNum, UInt8 engine) {
+ const Char *files[] = {
+ { "scumm" },
+ { "simon" },
+ { "queen" },
+ { "sword1" }
+ };
+
+ char filename[256];
+ UInt16 dum1;
+ UInt32 dum2;
+ FileRef file;
+ Err e;
+ FormPtr ofmP, frmP;
+
+ ofmP = FrmGetActiveForm();
+ frmP = FrmInitForm(ImportForm);
+ FrmSetActiveForm(frmP);
+ FrmDrawForm(frmP);
+
+ BUILD_FILE(files[engine], ".engine"); // engine file ?
+ CHECK_FILE();
+ BUILD_FILE(files[engine], ".data"); // data file ?
+ CHECK_FILE();
+ BUILD_FILE("common", ".data") // common data ?
+ CHECK_FILE();
+
+ BUILD_FILE("common", ".data");
+ e = (e) ? e : VFSImportDatabaseFromFile(volRefNum, filename, &dum1, &dum2);
+ BUILD_FILE(files[engine], ".data");
+ e = (e) ? e : VFSImportDatabaseFromFile(volRefNum, filename, &dum1, &dum2);
+ BUILD_FILE(files[engine], ".engine");
+ e = (e) ? e : VFSImportDatabaseFromFile(volRefNum, filename, &dum1, &dum2);
+
+ // if error, cleanup
+ if (e) ModDelete();
+
+onError:
+ FrmEraseForm(frmP);
+ FrmDeleteForm(frmP);
+ if (e && ofmP) FrmSetActiveForm(ofmP);
+
+ return e;
+}
+
+#undef DELET_FILE
+#undef CHECK_FILE
+#undef BUILD_FILE
+
Boolean StartScummVM() {
- Char *argvP[MAX_ARG];
- UInt8 argc = 0;
- UInt8 count;
+ Char **argvP;
+ UInt8 lightspeed, argc = 0;
+ UInt32 stackSize;
+ Boolean toLauncher;
+ UInt8 engine;
- Boolean autoOff;
- UInt16 autoOffDelay;
UInt16 musicDriver = sysInvalidRefNum; // for launch call
-
UInt16 index = GamGetSelected();
- for(count = 0; count < MAX_ARG; count++)
- argvP[count] = NULL;
+ Char num[6];
+
+ argvP = ArgsInit();
+
+ if (index == dmMaxRecordIndex) {
+ UInt16 whichButton;
+ FormPtr frmP = FrmInitForm(EngineForm);
+ whichButton = FrmDoDialog(frmP);
+ FrmDeleteForm(frmP);
+
+ if (whichButton == EngineCancelButton)
+ return false;
+
+ engine = (whichButton - Engine0Button);
- if (index != dmMaxRecordIndex) {
+ } else {
Char pathP[256];
- Char num[6];
MemHandle recordH;
GameInfoType *gameInfoP;
recordH = DmQueryRecord(gameDB,index);
gameInfoP = (GameInfoType *)MemHandleLock(recordH);
+ engine = gameInfoP->engine;
// build path
StrCopy(pathP,"/Palm/Programs/ScummVM/Games/");
@@ -115,31 +173,29 @@ Boolean StartScummVM() {
if (!checkPath(pathP)) {
MemHandleUnlock(recordH);
FrmCustomAlert(FrmErrorAlert,"The specified path was not found !",0,0);
+ ArgsFree(argvP);
return false;
}
*/
+
// ScummVM
- AddArg(&argvP[argc], "-", NULL, &argc);
+ ArgsAdd(&argvP[argc], "-", NULL, &argc);
// path
- AddArg(&argvP[argc], "-p", pathP, &argc);
+ ArgsAdd(&argvP[argc], "-p", pathP, &argc);
// language
if (gameInfoP->language > 0) {
const Char *lang = "en\0de\0fr\0it\0p\0es\0jp\0z\0kr\0hb\0ru\0cz\0nl\0";
- AddArg(&argvP[argc], "-q", (lang + (gameInfoP->language - 1) * 3), &argc);
+ ArgsAdd(&argvP[argc], "-q", (lang + (gameInfoP->language - 1) * 3), &argc);
}
// fullscreen ?
if (gameInfoP->fullscreen)
- AddArg(&argvP[argc], "-f", NULL, &argc);
+ ArgsAdd(&argvP[argc], "-f", NULL, &argc);
// aspect-ratio ?
- AddArg(&argvP[argc], (gameInfoP->aspectRatio ? "--aspect-ratio" : "--no-aspect-ratio"), NULL, &argc);
-
- // copy protection ?
- if (gPrefs->copyProtection)
- AddArg(&argvP[argc], "--copy-protection", NULL, &argc);
+ ArgsAdd(&argvP[argc], (gameInfoP->aspectRatio ? "--aspect-ratio" : "--no-aspect-ratio"), NULL, &argc);
// gfx mode
gVars->flipping.pageAddr1 = (UInt8 *)(BmpGetBits(WinGetBitmap(WinGetDisplayWindow())));
@@ -148,135 +204,126 @@ Boolean StartScummVM() {
switch (gameInfoP->gfxMode) {
case 1:
- AddArg(&argvP[argc], "-g", "flipping", &argc);
+ ArgsAdd(&argvP[argc], "-g", "flipping", &argc);
gVars->flipping.pageAddr1 = (UInt8 *)WinScreenLock(winLockDontCare);
WinScreenUnlock();
break;
case 2:
- AddArg(&argvP[argc], "-g", "buffered", &argc);
+ ArgsAdd(&argvP[argc], "-g", "buffered", &argc);
break;
case 3:
- AddArg(&argvP[argc], "-g", "wide", &argc);
+ ArgsAdd(&argvP[argc], "-g", "wide", &argc);
gVars->flipping.pageAddr1 = (UInt8 *)WinScreenLock(winLockDontCare);
WinScreenUnlock();
break;
default:
- AddArg(&argvP[argc], "-g", "normal", &argc);
+ ArgsAdd(&argvP[argc], "-g", "normal", &argc);
break;
}
// load state
if (gameInfoP->autoLoad) {
StrIToA(num, gameInfoP->loadSlot);
- AddArg(&argvP[argc], "-x", num, &argc);
+ ArgsAdd(&argvP[argc], "-x", num, &argc);
}
// boot script parameter
if (gameInfoP->bootParam) {
StrIToA(num, gameInfoP->bootValue);
- AddArg(&argvP[argc], "-b", num, &argc);
+ ArgsAdd(&argvP[argc], "-b", num, &argc);
}
// not a PC version
if (gameInfoP->setPlatform) {
switch (gameInfoP->platform) {
case 0:
- AddArg(&argvP[argc], "--platform=", "amiga", &argc);
+ ArgsAdd(&argvP[argc], "--platform=", "amiga", &argc);
break;
case 1:
- AddArg(&argvP[argc], "--platform=", "atari", &argc);
+ ArgsAdd(&argvP[argc], "--platform=", "atari", &argc);
break;
case 2:
- AddArg(&argvP[argc], "--platform=", "mac", &argc);
+ ArgsAdd(&argvP[argc], "--platform=", "mac", &argc);
break;
case 3:
- AddArg(&argvP[argc], "--platform=", "pc", &argc);
+ ArgsAdd(&argvP[argc], "--platform=", "pc", &argc);
break;
case 4:
- AddArg(&argvP[argc], "--platform=", "fmtowns", &argc);
+ ArgsAdd(&argvP[argc], "--platform=", "fmtowns", &argc);
break;
case 5:
- AddArg(&argvP[argc], "--platform=", "windows", &argc);
+ ArgsAdd(&argvP[argc], "--platform=", "windows", &argc);
break;
}
}
// subtitles
if (gameInfoP->subtitles)
- AddArg(&argvP[argc], "-n", NULL, &argc);
-
- // talk speed
- if (gameInfoP->talkSpeed) {
- StrIToA(num, gameInfoP->talkValue);
- AddArg(&argvP[argc], "--talkspeed=", num, &argc);
- }
- // debug level
- if (gPrefs->debug) {
- StrIToA(num, gPrefs->debugLevel);
- AddArg(&argvP[argc], "-d", num, &argc);
- }
- // demo mode ?
- if (gPrefs->demoMode)
- AddArg(&argvP[argc], "--demo-mode", NULL, &argc);
-
- // alternative intro ?
- if (gPrefs->altIntro)
- AddArg(&argvP[argc], "--alt-intro", NULL, &argc);
+ ArgsAdd(&argvP[argc], "-n", NULL, &argc);
// multi midi ?
if (gameInfoP->musicInfo.sound.multiMidi)
- AddArg(&argvP[argc], "--multi-midi", NULL, &argc);
+ ArgsAdd(&argvP[argc], "--multi-midi", NULL, &argc);
+
+ if (engine == ENGINE_SCUMM) {
+ // music tempo
+ StrIToA(num, gameInfoP->musicInfo.sound.tempo);
+ ArgsAdd(&argvP[argc], "--tempo=", num, &argc);
+ // talk speed
+ if (gameInfoP->talkSpeed) {
+ StrIToA(num, gameInfoP->talkValue);
+ ArgsAdd(&argvP[argc], "--talkspeed=", num, &argc);
+ }
+ }
// music driver
musicDriver =gameInfoP->musicInfo.sound.music;
if (musicDriver) {
switch (gameInfoP->musicInfo.sound.drvMusic) {
case 0: // NULL
- AddArg(&argvP[argc], "-e", "null", &argc);
+ ArgsAdd(&argvP[argc], "-e", "null", &argc);
break;
case 1: // built-in MIDI
if (OPTIONS_TST(kOptDeviceZodiac))
- AddArg(&argvP[argc], "-e", "zodiac", &argc); // Tapwave Zodiac
+ ArgsAdd(&argvP[argc], "-e", "zodiac", &argc); // Tapwave Zodiac
else if (OPTIONS_TST(kOptSonyPa1LibAPI))
- AddArg(&argvP[argc], "-e", "ypa1", &argc); // Pa1Lib devices
+ ArgsAdd(&argvP[argc], "-e", "ypa1", &argc); // Pa1Lib devices
else
- AddArg(&argvP[argc], "-e", "null", &argc); // error, no music driver
+ ArgsAdd(&argvP[argc], "-e", "null", &argc); // error, no music driver
break;
case 2: // PC Speaker
- AddArg(&argvP[argc], "-e", "pcspk", &argc);
+ ArgsAdd(&argvP[argc], "-e", "pcspk", &argc);
break;
case 3: // IBM PCjr
- AddArg(&argvP[argc], "-e", "pcjr", &argc);
+ ArgsAdd(&argvP[argc], "-e", "pcjr", &argc);
case 4: // FM Towns
- AddArg(&argvP[argc], "-e", "towns", &argc);
+ ArgsAdd(&argvP[argc], "-e", "towns", &argc);
+ case 5: // AdLib
+ ArgsAdd(&argvP[argc], "-e", "adlib", &argc);
}
}
else // NULL as default
- AddArg(&argvP[argc], "-e", "null", &argc);
-
- // music tempo
- StrIToA(num, gameInfoP->musicInfo.sound.tempo);
- AddArg(&argvP[argc], "--tempo=", num, &argc);
+ ArgsAdd(&argvP[argc], "-e", "null", &argc);
// volume control
StrIToA(num, gameInfoP->musicInfo.volume.master);
- AddArg(&argvP[argc], "-o", num, &argc);
+ ArgsAdd(&argvP[argc], "-o", num, &argc);
StrIToA(num, gameInfoP->musicInfo.volume.sfx);
- AddArg(&argvP[argc], "-s", num, &argc);
+ ArgsAdd(&argvP[argc], "-s", num, &argc);
StrIToA(num, gameInfoP->musicInfo.volume.music);
- AddArg(&argvP[argc], "-m", num, &argc);
+ ArgsAdd(&argvP[argc], "-m", num, &argc);
StrIToA(num, gameInfoP->musicInfo.volume.speech);
- AddArg(&argvP[argc], "-r", num, &argc);
+ ArgsAdd(&argvP[argc], "-r", num, &argc);
// output rate
if (gameInfoP->musicInfo.sound.sfx) {
UInt32 rates[] = {8000, 11025, 22050};
StrIToA(num, rates[gameInfoP->musicInfo.sound.rate]);
- AddArg(&argvP[argc], "--output-rate=", num, &argc);
+ ArgsAdd(&argvP[argc], "--output-rate=", num, &argc);
}
// game name
- AddArg(&argvP[argc], gameInfoP->gameP, NULL, &argc);
+ ArgsAdd(&argvP[argc], gameInfoP->gameP, NULL, &argc);
// use sound
if (!gameInfoP->musicInfo.sound.sfx) {
@@ -295,108 +342,100 @@ Boolean StartScummVM() {
MemHandleUnlock(recordH);
}
- if (argc > MAX_ARG)
- FrmCustomAlert(FrmErrorAlert, "Too many parameters.",0,0);
+ // debug level
+ if (gPrefs->debug) {
+ StrIToA(num, gPrefs->debugLevel);
+ ArgsAdd(&argvP[argc], "-d", num, &argc);
+ }
+
+ if (engine == ENGINE_QUEEN) {
+ // alternative intro ?
+ if (gPrefs->altIntro)
+ ArgsAdd(&argvP[argc], "--alt-intro", NULL, &argc);
+ }
+
+ if (engine == ENGINE_SCUMM) {
+ // copy protection ?
+ if (gPrefs->copyProtection)
+ ArgsAdd(&argvP[argc], "--copy-protection", NULL, &argc);
+ // demo mode ?
+ if (gPrefs->demoMode)
+ ArgsAdd(&argvP[argc], "--demo-mode", NULL, &argc);
+ }
+
+// if (argc > MAX_ARG)
+// FrmCustomAlert(FrmErrorAlert, "Too many parameters.",0,0);
- gVars->skinSet = false;
- gVars->pinUpdate = false;
- GamCloseDatabase(false);
- FrmCloseAllForms();
+ gVars->skinSet = false;
+ gVars->pinUpdate= false;
- autoOff = gPrefs->autoOff;
- if (!autoOff) {
- autoOffDelay = SysSetAutoOffTime(0);
- EvtResetAutoOffTimer();
- }
+ stackSize = (gPrefs->setStack ? STACK_LARGER : STACK_DEFAULT);
+ lightspeed= (gPrefs->lightspeed.enable ? gPrefs->lightspeed.mode : 255);
+ toLauncher= (gPrefs->exitLauncher);
+
+ // gVars values
+ // (gVars->HRrefNum defined in checkHRmode on Clié)
+ gVars->screenLocked = false;
+ gVars->volRefNum = gPrefs->card.volRefNum;
+ gVars->vibrator = gPrefs->vibrator;
+ gVars->stdPalette = gPrefs->stdPalette;
- // gVars values
- //gVars->HRrefNum defined in checkHRmode on Clié OS4
- gVars->screenLocked = false;
- gVars->volRefNum = gPrefs->card.volRefNum;
- gVars->vibrator = gPrefs->vibrator;
- gVars->stdPalette = gPrefs->stdPalette;
- gVars->autoReset = gPrefs->autoReset;
-
// user params
+ HWR_RSTALL();
+
+ if (!gPrefs->autoOff)
+ HWR_SET(INIT_AUTOOFF);
+
if (!gPrefs->arm) {
OPTIONS_RST(kOptDeviceARM);
OPTIONS_RST(kOptDeviceProcX86);
+ } else {
+ HWR_SET(INIT_ARM);
}
if (gVars->vibrator)
- gVars->vibrator = RumbleInit();
-
- // create file for printf, warnings, etc...
- void DrawStatus(Boolean show);
- StdioInit(gVars->volRefNum, "/PALM/Programs/ScummVM/scumm.log", DrawStatus);
- gUnistdCWD = SCUMMVM_SAVEPATH;
-
- // TODO : move this to ypa1.cpp (?)
- void *sndStateOnFuncP = NULL,
- *sndStateOffFuncP = NULL;
-
- if (musicDriver == 1 || musicDriver == 3 || musicDriver == 4 || musicDriver == sysInvalidRefNum) {
-
- Pa1Lib_Open();
+ HWR_SET(INIT_VIBRATOR);
- // Don't work on T4xx and T6xx series ?
- FtrGet(sonySysFtrCreatorSystem, sonySysFtrNumSystemAOutSndStateOnHandlerP, (UInt32*) &sndStateOnFuncP);
- FtrGet(sonySysFtrCreatorSystem, sonySysFtrNumSystemAOutSndStateOffHandlerP, (UInt32*) &sndStateOffFuncP);
-
- if (sndStateOnFuncP && sndStateOffFuncP) {
- ((sndStateOnType)(sndStateOnFuncP))(aOutSndKindSp, 31, 31);
- ((sndStateOnType)(sndStateOnFuncP))(aOutSndKindHp, 31, 31);
- }
+ if ( musicDriver == 1 ||
+ musicDriver == 3 ||
+ musicDriver == 4 ||
+ musicDriver == sysInvalidRefNum) {
+ HWR_SET(INIT_PA1LIB);
+ }
- Pa1Lib_devHpVolume(31, 31);
- Pa1Lib_devSpVolume(31);
+ if (ModImport(gVars->volRefNum, engine) != errNone) {
+ FrmCustomAlert(FrmErrorAlert, "Error importing files:\nplease check that all required files are installed on the selected memory card, and you have enough free storage memory.", 0, 0);
+ ArgsFree(argvP);
+ return false;
}
- // -------------
- SavePrefs(); // free globals pref memory
- GlbOpen();
- initARM();
-
- // reset screen depth
+ // free and save globals pref memory
+ GamCloseDatabase(false);
+ FrmCloseAllForms();
+ SavePrefs();
+
{
- UInt32 depth = 8;
- WinScreenMode(winScreenModeSet, NULL, NULL, &depth, NULL);
- }
+ UInt16 cardNo;
+ UInt32 dbID;
- DO_EXIT( main(argc, argvP); )
-
- // be sure to release feature memory
- FREE_FTR(ftrBufferOverlay)
- FREE_FTR(ftrBufferBackup)
- FREE_FTR(ftrBufferHotSwap)
-
- releaseARM();
- GlbClose();
-
- // TODO : move this to ypa1.cpp (?)
- if (musicDriver == 1 || musicDriver == 3 || musicDriver == 4 || musicDriver == sysInvalidRefNum) {
- if (sndStateOnFuncP && sndStateOffFuncP) {
- ((sndStateOffType)(sndStateOffFuncP))(aOutSndKindSp);
- ((sndStateOffType)(sndStateOffFuncP))(aOutSndKindHp);
- }
+ LaunchParamType *cmdPBP = (LaunchParamType *)MemPtrNew(sizeof(LaunchParamType));
- Pa1Lib_Close();
- }
- // -------------
+ MemPtrSetOwner(cmdPBP, 0);
+ MemPtrSetOwner(gVars, 0);
+ ArgsSetOwner(argvP, 0);
- // close log file
- StdioRelease();
+ cardNo = 0;
+ dbID = DmFindDatabase(0, "ScummVM-Engine");
+ ModSetStack(stackSize, cardNo, dbID);
- for(count = 0; count < MAX_ARG; count++)
- if (argvP[count])
- MemPtrFree(argvP[count]);
-
- if (gVars->vibrator)
- RumbleRelease();
+ cmdPBP->args.argc = argc;
+ cmdPBP->args.argv = argvP;
+ cmdPBP->gVars = gVars;
+ cmdPBP->lightspeed = lightspeed;
+ cmdPBP->exitLauncher = toLauncher;
- if (!autoOff) {
- SysSetAutoOffTime(autoOffDelay);SystemPreferencesChoice
- EvtResetAutoOffTimer();
+ SysUIAppSwitch(cardNo, dbID, sysAppLaunchCmdNormalLaunch, cmdPBP);
+ bLaunched = true;
}
return false;