New memory card dialog, option to move games list to memory card

svn-id: r8392
This commit is contained in:
Chris Apers 2003-06-08 09:26:22 +00:00
parent 5333c8a2db
commit 8cc50d2460
2 changed files with 474 additions and 102 deletions

View file

@ -34,8 +34,6 @@
#include "mathlib.h"
#include "vibrate.h"
void MemExtInit();
void MemExtCleanup();
/***********************************************************************
*
* Internal Structures
@ -78,7 +76,13 @@ typedef struct {
Boolean autoOff;
UInt16 listPosition;
UInt16 volRefNum;
struct {
UInt16 volRefNum;
Boolean moveDB;
Boolean deleteDB;
Boolean confirmMoveDB;
} card;
Boolean debug;
UInt16 debugLevel;
@ -123,6 +127,18 @@ static UInt16 sknLastOn = skinButtonNone;
static Boolean bStartScumm = false;
GlobalsDataType *gVars;
// form list draw
#define ITEM_TYPE_UNKNOWN 'U'
#define ITEM_TYPE_CARD 'C'
#define ITEM_TYPE_SKIN 'S'
#define frmRedrawUpdateMS (frmRedrawUpdateCode+1)
#define frmRedrawUpdateMSImport (frmRedrawUpdateCode+2)
static Char **itemsText = NULL;
static void *itemsList = NULL;
static Char itemsType = ITEM_TYPE_UNKNOWN;
/***********************************************************************
*
* Internal Constants
@ -180,6 +196,7 @@ static void GBInitAll() {
Codec47_initGlobals();
Gfx_initGlobals();
Dialogs_initGlobals();
Charset_initGlobals();
#endif
}
@ -192,9 +209,18 @@ static void GBReleaseAll() {
Codec47_releaseGlobals();
Gfx_releaseGlobals();
Dialogs_releaseGlobals();
Charset_releaseGlobals();
#endif
}
static void FrmReturnToMain(UInt16 updateCode = frmRedrawUpdateMS) {
// if there is a form loaded, prevent crash on OS5
if (FrmGetFirstForm()) {
FrmUpdateForm(MainForm, updateCode);
FrmReturnToForm(MainForm);
}
}
//TODO : use Boolean instead of void to check err
static DmOpenRef GBOpenInternal(const Char *nameP) {
LocalID dbID = DmFindDatabase(0, nameP);
@ -648,7 +674,6 @@ static struct {
//#############################################################################
//#############################################################################
static Err GamOpenDatabase() {
Err err = errNone;
@ -669,9 +694,28 @@ static Err GamOpenDatabase() {
return err;
}
static void GamCloseDatabase() {
if (_dbP)
static void GamCloseDatabase(Boolean ignoreCardParams) {
if (_dbP) {
LocalID dbID;
UInt16 cardNo;
DmOpenDatabaseInfo(_dbP, &dbID, 0, 0, &cardNo, 0);
DmCloseDatabase(_dbP);
if (!ignoreCardParams) {
if (gPrefs->card.moveDB && gPrefs->card.volRefNum != sysInvalidRefNum) {
VFSFileRename(gPrefs->card.volRefNum, "/Palm/Programs/ScummVM/listdata.pdb", "listdata-old.pdb");
Err e = VFSExportDatabaseToFile(gPrefs->card.volRefNum, "/Palm/Programs/ScummVM/listdata.pdb", cardNo, dbID);
if (!e) {
VFSFileDelete(gPrefs->card.volRefNum, "/Palm/Programs/ScummVM/listdata-old.pdb");
if (gPrefs->card.deleteDB)
DmDeleteDatabase(cardNo, dbID);
} else {
VFSFileRename(gPrefs->card.volRefNum, "/Palm/Programs/ScummVM/listdata-old.pdb", "listdata.pdb");
}
}
}
}
_dbP = NULL;
}
@ -899,6 +943,47 @@ static void GamUpdateList() {
WinScreenUnlock();
}
static void GamImportDatabase(Boolean updateList) {
if (gPrefs->card.volRefNum != sysInvalidRefNum && gPrefs->card.moveDB) {
FileRef file;
Err e;
e = VFSFileOpen(gPrefs->card.volRefNum, "/Palm/Programs/ScummVM/listdata.pdb", vfsModeRead, &file);
if (!e) {
UInt16 oCardNo, nCardNo;
LocalID oDbID, nDbID;
UInt32 type = 'ODAT'; // change the type to avoid the old db to be loaded in case of crash
VFSFileClose(file);
if (gPrefs->card.confirmMoveDB)
if (FrmCustomAlert(FrmConfirmAlert, "Do you want to import games database from memory card ?", 0, 0) == FrmConfirmNo) {
// prevent to replace the file on memory card
gPrefs->card.moveDB = false;
return;
}
// get current db info and rename it
DmOpenDatabaseInfo(_dbP, &oDbID, 0, 0, &oCardNo, 0);
GamCloseDatabase(true);
DmSetDatabaseInfo(oCardNo, oDbID, "ScummVM-Data-old.pdb", 0, 0, 0, 0, 0, 0, 0, 0, &type, 0);
e = VFSImportDatabaseFromFile(gPrefs->card.volRefNum, "/Palm/Programs/ScummVM/listdata.pdb", &nCardNo, &nDbID);
if (e) {
type = 'DATA';
FrmCustomAlert(FrmErrorAlert, "Failed to import games database from memory card.", 0, 0);
DmSetDatabaseInfo(oCardNo, oDbID, "ScummVM-Data.pdb", 0, 0, 0, 0, 0, 0, 0, 0, &type, 0);
} else {
// in OS5 the localID may change ... ? (cause Free Handle error)
oDbID = DmFindDatabase (oCardNo, "ScummVM-Data-old.pdb");
DmDeleteDatabase(oCardNo, oDbID);
}
GamOpenDatabase();
if (updateList)
GamUpdateList();
}
}
}
static Boolean ArwProcessAction(UInt16 button)
{
Boolean handled = false;
@ -991,10 +1076,10 @@ static void EditGameFormDelete(Boolean direct) {
FrmCustomAlert(FrmWarnAlert, "Select an entry first.",0,0);
return;
} else if (FrmAlert(FrmDeleteAlert) == 0) {
} else if (FrmCustomAlert(FrmConfirmAlert, "Do you really want to delete this entry ?", 0, 0) == FrmConfirmYes) {
DmRemoveRecord(_dbP, index);
if (!direct)
FrmReturnToForm(MainForm);
FrmReturnToMain();
GamSortList();
GamUpdateList();
}
@ -1136,7 +1221,7 @@ static void EditGameFormSave(UInt16 index) {
}
}
FrmReturnToForm (MainForm);
FrmReturnToMain();
GamUpdateList();
}
@ -1273,7 +1358,7 @@ static Boolean EditGameFormHandleEvent(EventPtr eventP)
break;
case EditGameCancelButton:
FrmReturnToForm(MainForm);
FrmReturnToMain();
break;
case EditGameDeleteButton:
@ -1395,7 +1480,7 @@ static Boolean SystemInfoFormHandleEvent(EventPtr eventP) {
case ctlSelectEvent:
// OK button only
FrmReturnToForm (MainForm);
FrmReturnToMain();
handled = true;
break;
@ -1435,7 +1520,7 @@ static void VolumeFormSave() {
CtlGetSliderValues ((ControlType *)slid4P, 0, 0, 0, &gPrefs->volume.music);
CtlGetSliderValues ((ControlType *)slid5P, 0, 0, 0, &gPrefs->volume.sfx);
FrmReturnToForm (MainForm);
FrmReturnToMain();
}
static void VolumeFormInit() {
@ -1483,7 +1568,7 @@ static Boolean VolumeFormHandleEvent(EventPtr eventP) {
break;
case VolumeCancelButton:
FrmReturnToForm(MainForm);
FrmReturnToMain();
break;
}
handled = true;
@ -1517,7 +1602,7 @@ static void SoundFormSave() {
gPrefs->sound.driver = LstGetSelection(list1P);
gPrefs->sound.tempo = StrAToI(FldGetTextPtr(fld1P));
FrmReturnToForm (MainForm);
FrmReturnToMain();
}
static void SoundFormInit() {
@ -1564,7 +1649,7 @@ static Boolean SoundFormHandleEvent(EventPtr eventP) {
break;
case SoundCancelButton:
FrmReturnToForm(MainForm);
FrmReturnToMain();
break;
case SoundDriverPopTrigger:
@ -1625,7 +1710,7 @@ static void MiscOptionsFormSave() {
gPrefs->debugLevel = StrAToI(FldGetTextPtr(fld1P));
FrmReturnToForm (MainForm);
FrmReturnToMain();
}
static void MiscOptionsFormInit() {
@ -1672,7 +1757,7 @@ static Boolean MiscOptionsFormHandleEvent(EventPtr eventP) {
break;
case MiscOptionsCancelButton:
FrmReturnToForm(MainForm);
FrmReturnToMain();
break;
}
handled = true;
@ -1684,20 +1769,32 @@ static Boolean MiscOptionsFormHandleEvent(EventPtr eventP) {
return handled;
}
///////////////////////////////////////////////////////////////////////
static void CardSlotFromShowHideOptions() {
ControlType *cck1P;
FormPtr frmP = FrmGetActiveForm();
static UInt16 parseCards(Boolean forceDisplay) {
cck1P = (ControlType *)GetObjectPtr(CardSlotMoveCheckbox);
if (CtlGetValue(cck1P)) {
FrmShowObject(frmP, FrmGetObjectIndex (frmP, CardSlotDeleteCheckbox));
FrmShowObject(frmP, FrmGetObjectIndex (frmP, CardSlotConfirmCheckbox));
} else {
FrmHideObject(frmP, FrmGetObjectIndex (frmP, CardSlotDeleteCheckbox));
FrmHideObject(frmP, FrmGetObjectIndex (frmP, CardSlotConfirmCheckbox));
}
}
static UInt16 CardSlotFormInit(Boolean display, Boolean bDraw) {
Err err;
UInt16 volRefNum;
UInt32 volIterator = vfsIteratorStart;
UInt8 counter = 0;
UInt32 other = 1;
MemHandle cards = NULL;
CardInfoType *cardsInfo;
MemHandle items = NULL;
Char **itemsText = NULL;
UInt32 other = 1;
while (volIterator != vfsIteratorStop) {
err = VFSVolumeEnumerate(&volRefNum, &volIterator);
@ -1734,20 +1831,25 @@ static UInt16 parseCards(Boolean forceDisplay) {
}
}
if (counter>0) {
cardsInfo = (CardInfoType *)MemHandleLock(cards);
if (display) {
FormPtr frmP;
ListPtr listP;
ControlType *cck1P, *cck2P, *cck3P;
UInt16 index;
Int16 selected = -1;
CardInfoType *cardsInfo;
MemHandle items = NULL;
if (forceDisplay) {
FormPtr frmP;
ListPtr listP;
Int16 selected = 0;
UInt16 index;
listP = (ListType *)GetObjectPtr(CardSlotSlotList);
cck1P = (ControlType *)GetObjectPtr(CardSlotMoveCheckbox);
cck2P = (ControlType *)GetObjectPtr(CardSlotDeleteCheckbox);
cck3P = (ControlType *)GetObjectPtr(CardSlotConfirmCheckbox);
frmP = FrmInitForm (CardSlotForm);
listP = (ListType *)FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, CardSlotSlotList));
if (counter > 0) {
cardsInfo = (CardInfoType *)MemHandleLock(cards);
for (index = 0; index < counter; index++)
{
for (index = 0; index < counter; index++) {
if (!items)
items = MemHandleNew(sizeof(Char *));
else
@ -1757,20 +1859,280 @@ static UInt16 parseCards(Boolean forceDisplay) {
itemsText[index] = cardsInfo[index].nameP;
MemHandleUnlock(items);
if (cardsInfo[index].volRefNum == gPrefs->volRefNum)
if (cardsInfo[index].volRefNum == gPrefs->card.volRefNum)
selected = index;
}
itemsText = (Char **)MemHandleLock(items);
LstSetListChoices (listP, itemsText, counter);
LstSetSelection(listP, selected);
FrmDoDialog (frmP);
// save globals and set list
itemsText = (Char **)MemHandleLock(items);
itemsList = (void *)cardsInfo;
itemsType = ITEM_TYPE_CARD;
} else {
LstSetListChoices(listP, NULL, 0);
// save globals and set list
itemsText = NULL;
itemsList = NULL;
itemsType = ITEM_TYPE_CARD;
}
// bDraw = true -> draw whole from
// bDraw = false -> redraw list
if (bDraw) {
CtlSetValue(cck1P, gPrefs->card.moveDB);
CtlSetValue(cck2P, gPrefs->card.deleteDB);
CtlSetValue(cck3P, gPrefs->card.confirmMoveDB);
CardSlotFromShowHideOptions();
frmP = FrmGetActiveForm();
FrmDrawForm(frmP);
} else {
WinScreenLock(winLockCopy);
LstDrawList(listP);
WinScreenUnlock();
}
} else { // if !display, we just want to retreive an avaliable card
if (counter > 0) {
UInt16 volRefNum;
cardsInfo = (CardInfoType *)MemHandleLock(cards);
volRefNum = cardsInfo[0].volRefNum; // return the first volref
MemHandleUnlock(cards);
MemHandleFree(cards);
return volRefNum;
}
}
return sysInvalidRefNum; // default
}
static void CardSlotFormExit(Boolean bSave) {
MemHandle cards;
MemHandle items;
CardInfoType *cardsInfo;
UInt16 updateCode = frmRedrawUpdateMS;
if (itemsText && itemsList) {
cardsInfo = (CardInfoType *)itemsList;
cards = MemPtrRecoverHandle(cardsInfo);
items = MemPtrRecoverHandle(itemsText);
itemsText = NULL;
itemsList = NULL;
} else {
cards = NULL;
items = NULL;
}
itemsType = ITEM_TYPE_UNKNOWN;
if (bSave) {
ListType *listP;
ControlType *cck1P, *cck2P, *cck3P;
Int16 selected;
listP = (ListType *)GetObjectPtr(CardSlotSlotList);
cck1P = (ControlType *)GetObjectPtr(CardSlotMoveCheckbox);
cck2P = (ControlType *)GetObjectPtr(CardSlotDeleteCheckbox);
cck3P = (ControlType *)GetObjectPtr(CardSlotConfirmCheckbox);
selected = LstGetSelection(listP);
if (selected == -1) {
gPrefs->card.volRefNum = sysInvalidRefNum;
} else if (gPrefs->card.volRefNum != cardsInfo[selected].volRefNum) {
updateCode = frmRedrawUpdateMSImport;
gPrefs->card.volRefNum = cardsInfo[selected].volRefNum;
}
//gPrefs->card.volRefNum = (selected == -1) ? : cardsInfo[selected].volRefNum;
gPrefs->card.moveDB = CtlGetValue(cck1P);
gPrefs->card.deleteDB = CtlGetValue(cck2P);
gPrefs->card.confirmMoveDB = CtlGetValue(cck3P);
}
FrmReturnToMain(updateCode);
if (items && cards) {
MemHandleUnlock(items);
MemHandleUnlock(cards);
MemHandleFree(items);
MemHandleFree(cards);
}
}
static void CardSlotFormUpdate() {
if (itemsType == ITEM_TYPE_CARD) {
if (itemsText && itemsList) {
MemHandle cards;
MemHandle items;
ListType *listP;
listP = (ListType *)GetObjectPtr(CardSlotSlotList);
cards = MemPtrRecoverHandle(itemsList);
items = MemPtrRecoverHandle(itemsText);
itemsText = NULL;
itemsList = NULL;
itemsType = ITEM_TYPE_UNKNOWN;
MemHandleUnlock(items);
MemHandleUnlock(cards);
MemHandleFree(items);
MemHandleFree(cards);
}
CardSlotFormInit(true, false);
}
}
static Boolean CardSlotFormHandleEvent(EventPtr eventP) {
Boolean handled = false;
switch (eventP->eType) {
case frmOpenEvent:
CardSlotFormInit(true, true);
handled = true;
break;
case frmCloseEvent:
CardSlotFormExit(false);
handled = true;
break;
case ctlSelectEvent:
switch (eventP->data.ctlSelect.controlID)
{
case CardSlotOkButton:
CardSlotFormExit(true);
break;
case CardSlotCancelButton:
CardSlotFormExit(false);
break;
case CardSlotMoveCheckbox:
CardSlotFromShowHideOptions();
break;
}
handled = true;
break;
default:
break;
}
return handled;
}
static UInt16 parseCards() {
UInt16 volRefNum = CardSlotFormInit(false, false);
CardSlotFormExit(false);
return volRefNum;
}
/*
static UInt16 parseCards(Boolean forceDisplay) {
Err err;
UInt16 volRefNum;
UInt32 volIterator = vfsIteratorStart;
UInt8 counter = 0;
MemHandle cards = NULL;
CardInfoType *cardsInfo;
MemHandle items = NULL;
Char **itemsText = NULL;
UInt32 other = 1;
while (volIterator != vfsIteratorStop) {
err = VFSVolumeEnumerate(&volRefNum, &volIterator);
if (!err)
{ Char labelP[expCardInfoStringMaxLen+1];
err = VFSVolumeGetLabel(volRefNum, labelP, expCardInfoStringMaxLen+1);
if (!err) {
if (StrLen(labelP) == 0) { // if no label try to retreive card type
VolumeInfoType volInfo;
err = VFSVolumeInfo(volRefNum, &volInfo);
if (!err) {
ExpCardInfoType info;
err = ExpCardInfo(volInfo.slotRefNum, &info);
StrCopy(labelP, info.deviceClassStr);
}
if (err != errNone) // if err default name
StrPrintF(labelP,"Other Card %ld", other++);
}
if (!cards)
cards = MemHandleNew(sizeof(CardInfoType));
else
MemHandleResize(cards, MemHandleSize(cards) + sizeof(CardInfoType));
cardsInfo = (CardInfoType *)MemHandleLock(cards);
cardsInfo[counter].volRefNum = volRefNum;
StrCopy(cardsInfo[counter].nameP, labelP);
MemHandleUnlock(cards);
counter++;
}
}
}
if (counter > 0) {
cardsInfo = (CardInfoType *)MemHandleLock(cards);
if (forceDisplay) {
FormPtr frmP;
ListPtr listP;
ControlType *cck1P, *cck2P, *cck3P;
Int16 selected = 0;
UInt16 index, button;
frmP = FrmInitForm (CardSlotForm);
listP = (ListType *)FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, CardSlotSlotList));
cck1P = (ControlType *)FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, CardSlotMoveCheckbox));
cck2P = (ControlType *)FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, CardSlotDeleteCheckbox));
cck3P = (ControlType *)FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, CardSlotConfirmCheckbox));
for (index = 0; index < counter; index++) {
if (!items)
items = MemHandleNew(sizeof(Char *));
else
MemHandleResize(items, MemHandleSize(items) + sizeof(Char *));
itemsText = (Char **)MemHandleLock(items);
itemsText[index] = cardsInfo[index].nameP;
MemHandleUnlock(items);
if (cardsInfo[index].volRefNum == gPrefs->card.volRefNum)
selected = index;
}
itemsText = (Char **)MemHandleLock(items);
LstSetListChoices (listP, itemsText, counter);
LstSetSelection(listP, selected);
CtlSetValue(cck1P, gPrefs->card.moveDB);
CtlSetValue(cck2P, gPrefs->card.deleteDB);
CtlSetValue(cck3P, gPrefs->card.confirmMoveDB);
button = FrmDoDialog (frmP);
selected = LstGetSelection(listP);
MemHandleUnlock(items);
MemHandleFree(items);
FrmDeleteForm(frmP);
volRefNum = cardsInfo[selected].volRefNum;
// save preferences
if (button == CardSlotOkButton) {
volRefNum = cardsInfo[selected].volRefNum;
gPrefs->card.moveDB = CtlGetValue(cck1P);
gPrefs->card.deleteDB = CtlGetValue(cck2P);
gPrefs->card.confirmMoveDB = CtlGetValue(cck3P);
}
} else {
volRefNum = cardsInfo[0].volRefNum; // return the first volref
@ -1805,7 +2167,7 @@ static UInt16 parseCards(Boolean forceDisplay) {
return volRefNum;
}
*/
//#############################################################################
//#############################################################################
// Skin manager
@ -1825,7 +2187,7 @@ static void SknApplySkin()
// SknSetPalette();
FrmDrawForm(frmP);
if (gPrefs->volRefNum != sysInvalidRefNum)
if (gPrefs->card.volRefNum != sysInvalidRefNum)
FrmShowObject(frmP, FrmGetObjectIndex (frmP, MainMSBitMap));
else
FrmShowObject(frmP, FrmGetObjectIndex (frmP, MainMSNoneBitMap));
@ -1893,9 +2255,6 @@ static Int16 SkinsFormCompare(SkinInfoType *a, SkinInfoType *b, SortRecordInfoPt
return StrCompare(a->nameP, b->nameP);
}
static Char **itemsText = NULL;
static void *itemsList = NULL;
static void SkinsFormInit(Boolean bDraw) {
MemHandle skins = NULL;
SkinInfoType *skinsInfo;
@ -1964,9 +2323,13 @@ static void SkinsFormInit(Boolean bDraw) {
// save globals and set list
itemsText = (Char **)MemHandleLock(items);
itemsList = (void *)skinsInfo;
itemsType = ITEM_TYPE_SKIN;
LstSetListChoices (listP, itemsText, numSkins);
LstSetSelection(listP, selected);
// bDraw = true -> draw whole from
// bDraw = false -> redraw list
if (bDraw) {
frmP = FrmGetActiveForm();
FrmDrawForm(frmP);
@ -1978,8 +2341,6 @@ static void SkinsFormInit(Boolean bDraw) {
}
}
static void SkinsFormExit(Boolean bSave) {
MemHandle skins;
MemHandle items;
@ -2002,6 +2363,7 @@ static void SkinsFormExit(Boolean bSave) {
itemsText = NULL;
itemsList = NULL;
itemsType = ITEM_TYPE_UNKNOWN;
if (bSave) {
ControlType *cck1P;
@ -2014,7 +2376,7 @@ static void SkinsFormExit(Boolean bSave) {
gPrefs->soundClick = CtlGetValue(cck1P);
}
FrmReturnToForm (MainForm);
FrmReturnToMain();
MemHandleUnlock(items);
MemHandleUnlock(skins);
@ -2079,6 +2441,7 @@ static void SkinsFormDelete() {
itemsText = NULL;
itemsList = NULL;
itemsType = ITEM_TYPE_UNKNOWN;
MemHandleUnlock(items);
MemHandleUnlock(skins);
@ -2142,27 +2505,23 @@ static Boolean MainFormDoCommand(UInt16 command)
FormPtr frmP;
switch (command) {
case MainGamesChooseaCard:
MenuEraseStatus(0);
gPrefs->volRefNum = parseCards(true);
case MainGamesCard:
FrmPopupForm(CardSlotForm);
handled = true;
break;
case MainGamesMemory:
MenuEraseStatus(0);
FrmPopupForm(SystemInfoForm);
handled = true;
break;
case MainGamesNewEdit:
MenuEraseStatus(0);
__editMode__ = edtModeParams;
FrmPopupForm(EditGameForm);
handled = true;
break;
case MainGamesBeamScummVM:
MenuEraseStatus(0);
BeamMe();
//if (BeamMe())
//FrmCustomAlert(FrmErrorAlert,"Unable to beam ScummVM for PalmOS.",0,0);
@ -2170,7 +2529,6 @@ static Boolean MainFormDoCommand(UInt16 command)
break;
case MainOptionsAbout:
MenuEraseStatus(0); // Clear the menu status from the display.
frmP = FrmInitForm (AboutForm);
FrmDoDialog (frmP); // Display the About Box.
FrmDeleteForm (frmP);
@ -2188,19 +2546,17 @@ static Boolean MainFormDoCommand(UInt16 command)
break;
case MainOptionsSkins:
MenuEraseStatus(0); // Clear the menu status from the display.
//SkinsFormDoDialog();
FrmPopupForm(SkinsForm);
handled = true;
break;
case MainOptionsMiscellaneous:
MenuEraseStatus(0); // Clear the menu status from the display.
case MainOptionsMisc:
FrmPopupForm(MiscOptionsForm);
handled = true;
break;
}
MenuEraseStatus(0);
return handled;
}
@ -2405,7 +2761,7 @@ static void StartScummVM() {
MemHandleUnlock(recordH);
}
GamCloseDatabase();
GamCloseDatabase(false);
FrmCloseAllForms();
autoOff = gPrefs->autoOff;
@ -2418,7 +2774,7 @@ static void StartScummVM() {
//gVars->HRrefNum defined in checkHRmode on Clié OS4
//gVars->logFile defined bellow, must be defined only if debug option is checked
gVars->screenLocked = false;
gVars->volRefNum = gPrefs->volRefNum;
gVars->volRefNum = gPrefs->card.volRefNum;
gVars->vibrator = gPrefs->vibrator;
gVars->stdPalette = gPrefs->stdPalette;
gVars->autoReset = gPrefs->autoReset;
@ -2466,14 +2822,11 @@ static void StartScummVM() {
}
}
SavePrefs(); // free globals pref memory
GBOpen();
GBInitAll();
// MemExtInit();
main(argc, argvP);
// MemExtCleanup();
GBReleaseAll();
GBClose();
@ -2580,8 +2933,20 @@ static Boolean MainFormHandleEvent(EventPtr eventP)
DmOpenRef skinDBP;
switch (eventP->eType) {
case frmUpdateEvent:
frmP = FrmGetFormPtr(MainForm);
if (gPrefs->card.volRefNum != sysInvalidRefNum)
FrmShowObject(frmP, FrmGetObjectIndex (frmP, MainMSBitMap));
else
FrmShowObject(frmP, FrmGetObjectIndex (frmP, MainMSNoneBitMap));
if (eventP->data.frmUpdate.updateCode == frmRedrawUpdateMSImport)
GamImportDatabase(true);
handled = true;
break;
case menuEvent:
return MainFormDoCommand(eventP->data.menu.itemID);
handled = MainFormDoCommand(eventP->data.menu.itemID);
break;
case frmOpenEvent:
MainFormInit();
@ -2592,7 +2957,8 @@ static Boolean MainFormHandleEvent(EventPtr eventP)
switch (eventP->data.ctlSelect.controlID)
{
case MainCardsButton:
gPrefs->volRefNum = parseCards(true);
//gPrefs->card.volRefNum = parseCards(true);
FrmPopupForm(CardSlotForm);
break;
case MainAboutButton:
@ -2608,12 +2974,6 @@ static Boolean MainFormHandleEvent(EventPtr eventP)
handled = true;
break;
case frmUpdateEvent:
int a= 0;
// To do any custom drawing here, first call FrmDrawForm(), then do your
// drawing, and then set handled to true.
break;
case penUpEvent:
x = eventP->screenX;
y = eventP->screenY;
@ -2644,7 +3004,7 @@ static Boolean MainFormHandleEvent(EventPtr eventP)
break;
case skinButtonGameStart:
if (gPrefs->volRefNum == sysInvalidRefNum)
if (gPrefs->card.volRefNum == sysInvalidRefNum)
FrmCustomAlert(FrmWarnAlert,"Please select/insert a memory card.", 0, 0);
else
bStartScumm = true;
@ -2759,6 +3119,10 @@ static Boolean AppHandleEvent(EventPtr eventP)
FrmSetEventHandler(frmP, SystemInfoFormHandleEvent);
break;
case CardSlotForm:
FrmSetEventHandler(frmP,CardSlotFormHandleEvent);
break;
default:
// ErrFatalDisplay("Invalid Form Load Event");
break;
@ -2964,7 +3328,7 @@ static void AppStopMathLib() {
static Err AppStart(void)
{
UInt16 dataSize;
UInt16 dataSize, checkSize = 0;
Err error;
// allocate global variables space
@ -2975,6 +3339,7 @@ static Err AppStart(void)
gVars->indicator.on = 255;
gVars->indicator.off = 0;
gVars->HRrefNum = sysInvalidRefNum;
gVars->volRefNum = sysInvalidRefNum;
// allocate prefs space
dataSize = sizeof(GlobalsPreferenceType);
@ -2982,15 +3347,18 @@ static Err AppStart(void)
MemSet(gPrefs, dataSize, 0);
// Read the saved preferences / saved-state information.
if (PrefGetAppPreferences(appFileCreator, appPrefID, gPrefs, &dataSize, true) == noPreferenceFound) {
if (PrefGetAppPreferences(appFileCreator, appPrefID, NULL, &checkSize, true) == noPreferenceFound || checkSize < dataSize) {
UInt32 romVersion;
FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion);
// reset all elements
MemSet(gPrefs, dataSize, 0);
gPrefs->volRefNum = sysInvalidRefNum;
gPrefs->card.volRefNum = sysInvalidRefNum;
gPrefs->autoOff = true;
gPrefs->vibrator = CheckVibratorExists();
gPrefs->debug = false;
FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion);
gPrefs->stdPalette = (romVersion >= kOS5Version);
gPrefs->volume.speaker = 16;
@ -3003,10 +3371,7 @@ static Err AppStart(void)
gPrefs->sound.tempo = 100;
} else {
// tempo was popup trigger and now it's numeric field
// so fix the value to default if it's an old config
if (gPrefs->sound.tempo < 50)
gPrefs->sound.tempo = 100;
PrefGetAppPreferences(appFileCreator, appPrefID, gPrefs, &dataSize, true);
}
error = AppStartCheckMathLib();
@ -3020,15 +3385,16 @@ static Err AppStart(void)
error = GamOpenDatabase();
if (error) return (error);
GamImportDatabase(false);
if (gPrefs->volRefNum != sysInvalidRefNum) { // if volref prviously defined, check if it's a valid one
if (gPrefs->card.volRefNum != sysInvalidRefNum) { // if volref previously defined, check if it's a valid one
VolumeInfoType volInfo;
Err err = VFSVolumeInfo(gPrefs->volRefNum, &volInfo);
Err err = VFSVolumeInfo(gPrefs->card.volRefNum, &volInfo);
if (err)
gPrefs->volRefNum = sysInvalidRefNum;
gPrefs->card.volRefNum = sysInvalidRefNum;
}
else
gPrefs->volRefNum = parseCards(0); // get first volref
gPrefs->card.volRefNum = parseCards(); //parseCards(0); // get first volref
AppStartCheckNotify(); // not fatal error if not avalaible
@ -3070,20 +3436,24 @@ static Err AppStopCheckNotify()
}
static 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
AppStopCheckNotify();
AppStopMathLib();
AppStopHRMode();
// Close all the open forms.
FrmCloseAllForms();
GamCloseDatabase();
// reset if needed
if (gVars) {
Boolean autoReset = gVars->autoReset;
MemPtrFree(gVars);
@ -3115,27 +3485,24 @@ static void AppLaunchCmdNotify(UInt16 LaunchFlags, SysNotifyParamType * pData)
{
case sysNotifyVolumeMountedEvent:
pData->handled = true; // don't switch
CardSlotFormUpdate(); // redraw card list if needed
if (gPrefs->volRefNum == sysInvalidRefNum) {
FormPtr frmP = FrmGetActiveForm();
if (gPrefs->card.volRefNum == sysInvalidRefNum) {
VFSAnyMountParamType *notifyDetailsP = (VFSAnyMountParamType *)pData->notifyDetailsP;
gPrefs->volRefNum = notifyDetailsP->volRefNum;
gPrefs->card.volRefNum = notifyDetailsP->volRefNum;
if (frmP && gPrefs->volRefNum != sysInvalidRefNum) {
MenuEraseStatus(0);
FrmShowObject(frmP, FrmGetObjectIndex (frmP, MainMSBitMap));
}
if (FrmGetFormPtr(MainForm) == FrmGetActiveForm())
if (gPrefs->card.volRefNum != sysInvalidRefNum)
FrmUpdateForm(MainForm, frmRedrawUpdateMSImport);
}
case sysNotifyVolumeUnmountedEvent:
if (gPrefs->volRefNum == (UInt16)pData->notifyDetailsP) {
FormPtr frmP = FrmGetActiveForm();
gPrefs->volRefNum = sysInvalidRefNum;
CardSlotFormUpdate();
if (gPrefs->card.volRefNum == (UInt16)pData->notifyDetailsP) {
gPrefs->card.volRefNum = sysInvalidRefNum;
if (frmP) {
MenuEraseStatus(0);
FrmShowObject(frmP, FrmGetObjectIndex (frmP, MainMSNoneBitMap));
}
if (FrmGetFormPtr(MainForm) == FrmGetActiveForm())
FrmUpdateForm(MainForm, frmRedrawUpdateMS);
}
break;
}