[Scummvm-cvs-logs] CVS: scummvm/backends/PalmOS/Src/forms formCards.cpp,NONE,1.1 formCards.h,NONE,1.1 formEditGame.cpp,NONE,1.1 formEditGame.h,NONE,1.1 formMisc.cpp,NONE,1.1 formSkins.cpp,NONE,1.1 formSound.cpp,NONE,1.1 formSystem.cpp,NONE,1.1 formUtil.cpp,NONE,1.1 formUtil.h,NONE,1.1 formVolume.cpp,NONE,1.1 forms.h,NONE,1.1
Chris Apers
chrilith at users.sourceforge.net
Mon Nov 3 08:02:12 CET 2003
Update of /cvsroot/scummvm/scummvm/backends/PalmOS/Src/forms
In directory sc8-pr-cvs1:/tmp/cvs-serv32133
Added Files:
formCards.cpp formCards.h formEditGame.cpp formEditGame.h
formMisc.cpp formSkins.cpp formSound.cpp formSystem.cpp
formUtil.cpp formUtil.h formVolume.cpp forms.h
Log Message:
One form in one source file
--- NEW FILE: formCards.cpp ---
#include <PalmOS.h>
#include <VFSMgr.h>
#include "start.h"
#include "forms.h"
typedef struct {
UInt16 volRefNum;
Char nameP[expCardInfoStringMaxLen+1];
} CardInfoType;
void CardSlotCreateDirs() {
if (gPrefs->card.volRefNum != sysInvalidRefNum) {
VFSDirCreate(gPrefs->card.volRefNum, "/PALM");
VFSDirCreate(gPrefs->card.volRefNum, "/PALM/Programs");
VFSDirCreate(gPrefs->card.volRefNum, "/PALM/Programs/ScummVM");
VFSDirCreate(gPrefs->card.volRefNum, "/PALM/Programs/ScummVM/Games");
VFSDirCreate(gPrefs->card.volRefNum, "/PALM/Programs/ScummVM/Saved");
}
}
static void CardSlotFromShowHideOptions() {
ControlType *cck1P;
FormPtr frmP = FrmGetActiveForm();
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;
while (volIterator != vfsIteratorStop) {
err = VFSVolumeEnumerate(&volRefNum, &volIterator);
if (!err) {
Char labelP[expCardInfoStringMaxLen+1];
err = VFSVolumeGetLabel(volRefNum, labelP, expCardInfoStringMaxLen+1);
if (err || 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) // 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 (display) {
FormPtr frmP;
ListPtr listP;
ControlType *cck1P, *cck2P, *cck3P;
UInt16 index;
Int16 selected = -1;
CardInfoType *cardsInfo;
MemHandle items = NULL;
listP = (ListType *)GetObjectPtr(CardSlotSlotList);
cck1P = (ControlType *)GetObjectPtr(CardSlotMoveCheckbox);
cck2P = (ControlType *)GetObjectPtr(CardSlotDeleteCheckbox);
cck3P = (ControlType *)GetObjectPtr(CardSlotConfirmCheckbox);
if (counter > 0) {
cardsInfo = (CardInfoType *)MemHandleLock(cards);
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);
// 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.moveDB = CtlGetValue(cck1P);
gPrefs->card.deleteDB = CtlGetValue(cck2P);
gPrefs->card.confirmMoveDB = CtlGetValue(cck3P);
CardSlotCreateDirs();
}
FrmReturnToMain(updateCode);
if (items && cards) {
MemHandleUnlock(items);
MemHandleUnlock(cards);
MemHandleFree(items);
MemHandleFree(cards);
}
}
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);
}
}
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;
}
UInt16 parseCards() {
UInt16 volRefNum = CardSlotFormInit(false, false);
CardSlotFormExit(false);
return volRefNum;
}
--- NEW FILE: formCards.h ---
#ifndef __FORMCARDS_H__
#define __FORMCARDS_H__
UInt16 parseCards();
void CardSlotFormUpdate();
void CardSlotCreateDirs();
#endif
--- NEW FILE: formEditGame.cpp ---
#include <PalmOS.h>
#include "forms.h"
#include "start.h"
#include "games.h"
#include "skin.h"
UInt8 gFormEditMode;
/***********************************************************************
*
* FUNCTION: EditGameFormSave
* FUNCTION: EditGameFormInit
* FUNCTION: EditGameFormHandleEvent
*
* DESCRIPTION:
*
* REVISION HISTORY:
*
*
***********************************************************************/
void EditGameFormDelete(Boolean direct) {
UInt16 index = GamGetSelected();
if (index == dmMaxRecordIndex) {
FrmCustomAlert(FrmWarnAlert, "Select an entry first.",0,0);
return;
} else if (FrmCustomAlert(FrmConfirmAlert, "Do you really want to delete this entry ?", 0, 0) == FrmConfirmYes) {
DmRemoveRecord(gameDB, index);
if (!direct)
FrmReturnToMain();
GamSortList();
SknUpdateList();
}
}
static void EditGameFormSave(UInt16 index) {
FieldType *fld1P, *fld2P, *fld3P, *fld4P, *fld5P, *fld6P; // need to change this with good names
ControlType *cck1P, *cck2P, *cck3P, *cck4P, *cck5P;
ListType *list1P, *list2P, *list3P;
FormPtr frmP;
MemHandle recordH;
GameInfoType *gameInfo, newGameInfo;
// UInt16 index;
list1P = (ListType *)GetObjectPtr(EditGameGfxListList);
list2P = (ListType *)GetObjectPtr(EditGameLanguageList);
list3P = (ListType *)GetObjectPtr(EditGamePlatformList);
fld1P = (FieldType *)GetObjectPtr(EditGameEntryNameField);
fld2P = (FieldType *)GetObjectPtr(EditGamePathField);
fld3P = (FieldType *)GetObjectPtr(EditGameGameField);
fld4P = (FieldType *)GetObjectPtr(EditGameLoadSlotField);
fld5P = (FieldType *)GetObjectPtr(EditGameStartRoomField);
fld6P = (FieldType *)GetObjectPtr(EditGameTalkSpeedField);
cck1P = (ControlType *)GetObjectPtr(EditGameLoadSlotCheckbox);
cck2P = (ControlType *)GetObjectPtr(EditGameStartRoomCheckbox);
cck3P = (ControlType *)GetObjectPtr(EditGameAmigaCheckbox);
cck4P = (ControlType *)GetObjectPtr(EditGameSubtitlesCheckbox);
cck5P = (ControlType *)GetObjectPtr(EditGameTalkSpeedCheckbox);
frmP = FrmGetActiveForm();
FldTrimText(fld1P);
FldTrimText(fld2P);
FldTrimText(fld3P);
if (FldGetTextLength(fld1P) == 0) {
FrmCustomAlert(FrmWarnAlert,"You must specified an entry name.",0,0);
FrmSetFocus(frmP, FrmGetObjectIndex(frmP, EditGameEntryNameField));
return;
} else if (FldGetTextLength(fld2P) == 0) {
FrmCustomAlert(FrmWarnAlert,"You must specified a path.",0,0);
FrmSetFocus(frmP, FrmGetObjectIndex(frmP, EditGamePathField));
return;
} else if (FldGetTextLength(fld3P) == 0) {
FrmCustomAlert(FrmWarnAlert,"You must specified a game.",0,0);
FrmSetFocus(frmP, FrmGetObjectIndex(frmP, EditGameGameField));
return;
} else if (FldGetTextLength(fld5P) == 0 && CtlGetValue(cck2P) == 1) {
FrmCustomAlert(FrmWarnAlert,"You must specified a room number.",0,0);
FrmSetFocus(frmP, FrmGetObjectIndex(frmP, EditGameStartRoomField));
return;
} else if (FldGetTextLength(fld6P) == 0 && CtlGetValue(cck5P) == 1) {
FrmCustomAlert(FrmWarnAlert,"You must specified a talk speed.",0,0);
FrmSetFocus(frmP, FrmGetObjectIndex(frmP, EditGameTalkSpeedField));
return;
}
// index = GamGetSelected();
if (index != dmMaxRecordIndex) {
recordH = DmGetRecord(gameDB, index);
} else {
index = dmMaxRecordIndex;
GamUnselect();
recordH = DmNewRecord(gameDB, &index, sizeof(GameInfoType));
}
gameInfo = (GameInfoType *)MemHandleLock(recordH);
StrCopy(newGameInfo.nameP, FldGetTextPtr(fld1P));
StrCopy(newGameInfo.pathP, FldGetTextPtr(fld2P));
StrCopy(newGameInfo.gameP, FldGetTextPtr(fld3P));
if (newGameInfo.pathP[StrLen(newGameInfo.pathP)-1] != '/')
StrCat(newGameInfo.pathP, "/");
newGameInfo.version = curItemVersion;
newGameInfo.icnID = 0xFFFF;
newGameInfo.gfxMode = LstGetSelection(list1P);
newGameInfo.language = LstGetSelection(list2P);
newGameInfo.platform = LstGetSelection(list3P);
newGameInfo.selected = true;
newGameInfo.autoLoad = CtlGetValue(cck1P);
newGameInfo.loadSlot = StrAToI(FldGetTextPtr(fld4P));
newGameInfo.bootParam = CtlGetValue(cck2P);
newGameInfo.bootValue = StrAToI(FldGetTextPtr(fld5P));
newGameInfo.setPlatform = CtlGetValue(cck3P);
newGameInfo.subtitles = !(CtlGetValue(cck4P));
newGameInfo.talkValue = StrAToI(FldGetTextPtr(fld6P));
newGameInfo.talkSpeed = CtlGetValue(cck5P);
DmWrite(gameInfo, 0, &newGameInfo, sizeof(GameInfoType));
MemHandleUnlock(recordH);
DmReleaseRecord (gameDB, index, 0);
GamSortList();
// update list position
{
RectangleType rArea;
UInt16 posIndex, maxIndex, maxView;
// get the sorted index
index = GamGetSelected();
// if new item is out of the list bounds, change current list pos
SknGetListBounds(&rArea, NULL);
maxView = rArea.extent.y / sknInfoListItemSize;
posIndex = gPrefs->listPosition;
maxIndex = DmNumRecords(gameDB);
if (index == 0 && posIndex > 0) {
gPrefs->listPosition = 0;
} else if ((maxView + posIndex) <= index) {
posIndex = index - (maxView - posIndex) + 1;
gPrefs->listPosition = posIndex;
}
}
FrmReturnToMain();
SknUpdateList();
}
static void EditGameFormInit(UInt16 index) {
FieldType *fld1P, *fld2P, *fld3P, *fld4P, *fld5P, *fld6P;
FormPtr frmP;
ListType *list1P, *list2P, *list3P;
Char *nameP, *pathP, *gameP, *loadP, *roomP, *talkP;
MemHandle nameH, pathH, gameH, loadH, roomH, talkH;
MemHandle recordH = NULL;
GameInfoType *game;
list1P = (ListType *)GetObjectPtr(EditGameGfxListList);
list2P = (ListType *)GetObjectPtr(EditGameLanguageList);
list3P = (ListType *)GetObjectPtr(EditGamePlatformList);
fld1P = (FieldType *)GetObjectPtr(EditGameEntryNameField);
fld2P = (FieldType *)GetObjectPtr(EditGamePathField);
fld3P = (FieldType *)GetObjectPtr(EditGameGameField);
fld4P = (FieldType *)GetObjectPtr(EditGameLoadSlotField);
fld5P = (FieldType *)GetObjectPtr(EditGameStartRoomField);
fld6P = (FieldType *)GetObjectPtr(EditGameTalkSpeedField);
nameH = MemHandleNew(FldGetMaxChars(fld1P)+1);
pathH = MemHandleNew(FldGetMaxChars(fld2P)+1);
gameH = MemHandleNew(FldGetMaxChars(fld3P)+1);
loadH = MemHandleNew(FldGetMaxChars(fld4P)+1);
roomH = MemHandleNew(FldGetMaxChars(fld5P)+1);
talkH = MemHandleNew(FldGetMaxChars(fld6P)+1);
nameP = (Char *)MemHandleLock(nameH);
pathP = (Char *)MemHandleLock(pathH);
gameP = (Char *)MemHandleLock(gameH);
loadP = (Char *)MemHandleLock(loadH);
roomP = (Char *)MemHandleLock(roomH);
talkP = (Char *)MemHandleLock(talkH);
// index = GamGetSelected();
if (index != dmMaxRecordIndex) {
recordH = DmQueryRecord(gameDB, index);
game = (GameInfoType *)MemHandleLock(recordH);
StrCopy(nameP, game->nameP);
StrCopy(pathP, game->pathP);
StrCopy(gameP, game->gameP);
LstSetSelection(list1P, game->gfxMode);
LstSetSelection(list2P, game->language);
LstSetSelection(list3P, game->platform);
StrIToA(loadP, game->loadSlot);
StrIToA(roomP, game->bootValue);
StrIToA(talkP, game->talkValue);
CtlSetValue((ControlType *)GetObjectPtr(EditGameLoadSlotCheckbox), game->autoLoad);
CtlSetValue((ControlType *)GetObjectPtr(EditGameStartRoomCheckbox), game->bootParam);
CtlSetValue((ControlType *)GetObjectPtr(EditGameAmigaCheckbox), game->setPlatform);
CtlSetValue((ControlType *)GetObjectPtr(EditGameSubtitlesCheckbox), !game->subtitles);
CtlSetValue((ControlType *)GetObjectPtr(EditGameTalkSpeedCheckbox), game->talkSpeed);
MemHandleUnlock(recordH);
CtlSetUsable((ControlType *)GetObjectPtr(EditGameDeleteButton),true);
}
else {
MemSet(nameP,MemHandleSize(nameH),0);
MemSet(pathP,MemHandleSize(pathH),0);
MemSet(gameP,MemHandleSize(gameH),0);
StrIToA(loadP, 0);
StrIToA(roomP, 0);
StrIToA(talkP, 60);
CtlSetValue((ControlType *)GetObjectPtr(EditGameLoadSlotCheckbox), 0);
CtlSetValue((ControlType *)GetObjectPtr(EditGameStartRoomCheckbox), 0);
CtlSetValue((ControlType *)GetObjectPtr(EditGameAmigaCheckbox), 0);
CtlSetValue((ControlType *)GetObjectPtr(EditGameSubtitlesCheckbox), 0);
CtlSetValue((ControlType *)GetObjectPtr(EditGameTalkSpeedCheckbox), 0);
LstSetSelection(list1P, 1);
LstSetSelection(list2P, 0);
LstSetSelection(list3P, 0);
CtlSetUsable((ControlType *)GetObjectPtr(EditGameDeleteButton),false);
}
MemHandleUnlock(nameH);
MemHandleUnlock(pathH);
MemHandleUnlock(gameH);
MemHandleUnlock(loadH);
MemHandleUnlock(roomH);
MemHandleUnlock(talkH);
FldSetTextHandle(fld1P, nameH);
FldSetTextHandle(fld2P, pathH);
FldSetTextHandle(fld3P, gameH);
FldSetTextHandle(fld4P, loadH);
FldSetTextHandle(fld5P, roomH);
FldSetTextHandle(fld6P, talkH);
CtlSetLabel((ControlType *)GetObjectPtr(EditGameGfxPopupPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P)));
CtlSetLabel((ControlType *)GetObjectPtr(EditGameLanguagePopTrigger), LstGetSelectionText(list2P, LstGetSelection(list2P)));
CtlSetLabel((ControlType *)GetObjectPtr(EditGamePlatformPopTrigger), LstGetSelectionText(list3P, LstGetSelection(list3P)));
frmP = FrmGetActiveForm();
FrmDrawForm(frmP);
}
Boolean EditGameFormHandleEvent(EventPtr eventP)
{
Boolean handled = false;
switch (eventP->eType) {
case frmOpenEvent:
switch (gFormEditMode) {
case edtModeAdd:
EditGameFormInit(dmMaxRecordIndex);
break;
case edtModeEdit:
case edtModeParams:
default :
EditGameFormInit(GamGetSelected());
break;
}
handled = true;
break;
case ctlSelectEvent:
switch (eventP->data.ctlSelect.controlID)
{
case EditGameOKButton:
switch (gFormEditMode) {
case edtModeAdd:
EditGameFormSave(dmMaxRecordIndex);
break;
case edtModeEdit:
case edtModeParams:
default :
EditGameFormSave(GamGetSelected());
break;
}
break;
case EditGameCancelButton:
FrmReturnToMain();
break;
case EditGameDeleteButton:
EditGameFormDelete(false);
break;
case EditGameGfxPopupPopTrigger:
FrmList(eventP, EditGameGfxListList);
break;
case EditGameLanguagePopTrigger:
FrmList(eventP, EditGameLanguageList);
break;
case EditGamePlatformPopTrigger:
FrmList(eventP, EditGamePlatformList);
break;
}
handled = true;
break;
default:
break;
}
return handled;
}
--- NEW FILE: formEditGame.h ---
#ifndef __FORMEDITGAME_H__
#define __FORMEDITGAME_H__
// edit game mode
enum {
edtModeAdd,
edtModeEdit,
edtModeParams
};
extern UInt8 gFormEditMode;
void EditGameFormDelete(Boolean direct);
#endif
--- NEW FILE: formMisc.cpp ---
#include <PalmOS.h>
#include "start.h"
#include "forms.h"
/***********************************************************************
*
* FUNCTION: MiscOptionsFormSave
* FUNCTION: MiscOptionsFormInit
* FUNCTION: MiscOptionsFormHandleEvent
*
* DESCRIPTION: Misc. Options form functions
*
* REVISION HISTORY:
*
*
***********************************************************************/
static void MiscOptionsFormSave() {
FieldType *fld1P;
ControlType *cck1P, *cck2P, *cck3P, *cck4P, *cck5P, *cck6P, *cck7P, *cck8P;
FormPtr frmP;
fld1P = (FieldType *)GetObjectPtr(MiscOptionsDebugLevelField);
cck1P = (ControlType *)GetObjectPtr(MiscOptionsVibratorCheckbox);
cck2P = (ControlType *)GetObjectPtr(MiscOptionsNoAutoOffCheckbox);
cck3P = (ControlType *)GetObjectPtr(MiscOptionsStdPaletteCheckbox);
cck4P = (ControlType *)GetObjectPtr(MiscOptionsDebugCheckbox);
cck5P = (ControlType *)GetObjectPtr(MiscOptionsWriteIniCheckbox);
cck6P = (ControlType *)GetObjectPtr(MiscOptionsAutoResetCheckbox);
cck7P = (ControlType *)GetObjectPtr(MiscOptionsDemoCheckbox);
cck8P = (ControlType *)GetObjectPtr(MiscOptionsFullscreenCheckbox);
frmP = FrmGetActiveForm();
if (FldGetTextLength(fld1P) == 0 && CtlGetValue(cck4P) == 1) {
FrmCustomAlert(FrmWarnAlert,"You must specified a debug level.",0,0);
FrmSetFocus(frmP, FrmGetObjectIndex(frmP, MiscOptionsDebugLevelField));
return;
}
gPrefs->vibrator = CtlGetValue(cck1P);
gPrefs->autoOff = !CtlGetValue(cck2P);
gPrefs->stdPalette = CtlGetValue(cck3P);
gPrefs->debug = CtlGetValue(cck4P);
gPrefs->saveConfig = CtlGetValue(cck5P);
gPrefs->autoReset = CtlGetValue(cck6P);
gPrefs->demoMode = CtlGetValue(cck7P);
gPrefs->fullscreen = CtlGetValue(cck8P);
gPrefs->debugLevel = StrAToI(FldGetTextPtr(fld1P));
FrmReturnToMain();
}
static void MiscOptionsFormInit() {
FieldType *fld1P;
FormPtr frmP;
Char *levelP;
MemHandle levelH;
CtlSetValue((ControlType *)GetObjectPtr(MiscOptionsVibratorCheckbox), gPrefs->vibrator);
CtlSetValue((ControlType *)GetObjectPtr(MiscOptionsNoAutoOffCheckbox), !gPrefs->autoOff);
CtlSetValue((ControlType *)GetObjectPtr(MiscOptionsStdPaletteCheckbox), gPrefs->stdPalette);
CtlSetValue((ControlType *)GetObjectPtr(MiscOptionsAutoResetCheckbox), gPrefs->autoReset);
CtlSetValue((ControlType *)GetObjectPtr(MiscOptionsDebugCheckbox), gPrefs->debug);
CtlSetValue((ControlType *)GetObjectPtr(MiscOptionsWriteIniCheckbox), gPrefs->saveConfig);
CtlSetValue((ControlType *)GetObjectPtr(MiscOptionsDemoCheckbox), gPrefs->demoMode);
CtlSetValue((ControlType *)GetObjectPtr(MiscOptionsFullscreenCheckbox), gPrefs->fullscreen);
fld1P = (FieldType *)GetObjectPtr(MiscOptionsDebugLevelField);
levelH = MemHandleNew(FldGetMaxChars(fld1P)+1);
levelP = (Char *)MemHandleLock(levelH);
StrIToA(levelP, gPrefs->debugLevel);
MemHandleUnlock(levelH);
FldSetTextHandle(fld1P, levelH);
frmP = FrmGetActiveForm();
FrmDrawForm(frmP);
}
Boolean MiscOptionsFormHandleEvent(EventPtr eventP) {
Boolean handled = false;
switch (eventP->eType) {
case frmOpenEvent:
MiscOptionsFormInit();
handled = true;
break;
case ctlSelectEvent:
switch (eventP->data.ctlSelect.controlID)
{
case MiscOptionsOKButton:
MiscOptionsFormSave();
break;
case MiscOptionsCancelButton:
FrmReturnToMain();
break;
}
handled = true;
break;
default:
break;
}
return handled;
}
--- NEW FILE: formSkins.cpp ---
#include <PalmOS.h>
#include "start.h"
#include "forms.h"
#include "skin.h"
static Int16 SkinsFormCompare(SkinInfoType *a, SkinInfoType *b, SortRecordInfoPtr, SortRecordInfoPtr, MemHandle) {
return StrCompare(a->nameP, b->nameP);
}
static void SkinsFormInit(Boolean bDraw) {
MemHandle skins = NULL;
SkinInfoType *skinsInfo;
UInt16 numSkins = 0;
FormPtr frmP;
ListType *listP;
MemHandle items = NULL;
ControlType *cck1P;
DmSearchStateType stateInfo;
UInt16 cardNo;
LocalID dbID;
Err errInfo;
Char nameP[32];
itemsText = NULL;
// parse and save skins
Err err = DmGetNextDatabaseByTypeCreator(true, &stateInfo, 'skin', appFileCreator, false, &cardNo, &dbID);
while (!err && dbID) {
errInfo = DmDatabaseInfo (cardNo, dbID, nameP, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
if (!errInfo)
{
if (!skins)
skins = MemHandleNew(sizeof(SkinInfoType));
else
MemHandleResize(skins, MemHandleSize(skins) + sizeof(SkinInfoType));
skinsInfo = (SkinInfoType *)MemHandleLock(skins);
StrCopy(skinsInfo[numSkins].nameP, nameP);
skinsInfo[numSkins].cardNo = cardNo;
skinsInfo[numSkins].dbID = dbID;
MemHandleUnlock(skins);
numSkins++;
}
err = DmGetNextDatabaseByTypeCreator(false, &stateInfo, 'skin', appFileCreator, false, &cardNo, &dbID);
}
Int16 selected = -1;
cck1P = (ControlType *)GetObjectPtr(SkinsSoundClickCheckbox);
CtlSetValue(cck1P, gPrefs->soundClick);
listP = (ListType *)GetObjectPtr(SkinsSkinList);
skinsInfo = (SkinInfoType *)MemHandleLock(skins);
SysQSort(skinsInfo, numSkins, sizeof(SkinInfoType), (CmpFuncPtr)SkinsFormCompare, 0);
// create itemsText (TODO: create a custom draw function)
for (UInt16 index=0; index < numSkins; index++)
{
if (!items)
items = MemHandleNew(sizeof(Char *));
else
MemHandleResize(items, MemHandleSize(items) + sizeof(Char *));
itemsText = (Char **)MemHandleLock(items);
itemsText[index] = skinsInfo[index].nameP;
MemHandleUnlock(items);
if ( gPrefs->skin.cardNo == skinsInfo[index].cardNo &&
gPrefs->skin.dbID == skinsInfo[index].dbID &&
StrCompare(gPrefs->skin.nameP, skinsInfo[index].nameP) == 0)
selected = index;
}
// 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);
} else {
WinScreenLock(winLockCopy);
LstDrawList(listP);
WinScreenUnlock();
// LstSetSelection(listP, 0);
}
}
static void SkinsFormExit(Boolean bSave) {
MemHandle skins;
MemHandle items;
SkinInfoType *skinsInfo;
ListType *listP;
Int16 selected;
listP = (ListType *)GetObjectPtr(SkinsSkinList);
selected = LstGetSelection(listP);
if (bSave && selected == -1) { // may never occured...
FrmCustomAlert(FrmWarnAlert, "You didn't select a skin.", 0, 0);
return;
}
skinsInfo = (SkinInfoType *)itemsList;
skins = MemPtrRecoverHandle(skinsInfo);
items = MemPtrRecoverHandle(itemsText);
itemsText = NULL;
itemsList = NULL;
itemsType = ITEM_TYPE_UNKNOWN;
if (bSave) {
ControlType *cck1P;
StrCopy(gPrefs->skin.nameP, skinsInfo[selected].nameP);
gPrefs->skin.cardNo = skinsInfo[selected].cardNo;
gPrefs->skin.dbID = skinsInfo[selected].dbID;
cck1P = (ControlType *)GetObjectPtr(SkinsSoundClickCheckbox);
gPrefs->soundClick = CtlGetValue(cck1P);
}
FrmReturnToMain();
MemHandleUnlock(items);
MemHandleUnlock(skins);
MemHandleFree(items);
MemHandleFree(skins);
if (bSave)
SknApplySkin();
}
static void SkinsFormBeam() {
SkinInfoType *skinsInfo;
ListType *listP;
Int16 selected;
Err err;
listP = (ListType *)GetObjectPtr(SkinsSkinList);
selected = LstGetSelection(listP);
if (selected == -1) { // may never occured...
FrmCustomAlert(FrmWarnAlert, "You didn't select a skin.", 0, 0);
return;
}
skinsInfo = (SkinInfoType *)itemsList;
err = SendDatabase(0, skinsInfo[selected].dbID, "skin.pdb", "\nScummVM Skin");
// if (err)
// FrmCustomAlert(FrmErrorAlert, "Unable to beam this skin.",0,0);
}
static void SkinsFormDelete() {
MemHandle skins;
MemHandle items;
SkinInfoType *skinsInfo;
ListType *listP;
Int16 selected;
listP = (ListType *)GetObjectPtr(SkinsSkinList);
selected = LstGetSelection(listP);
if (selected == -1) { // may never occured...
FrmCustomAlert(FrmInfoAlert, "You didn't select a skin.", 0, 0);
return;
}
skinsInfo = (SkinInfoType *)itemsList;
skins = MemPtrRecoverHandle(skinsInfo);
items = MemPtrRecoverHandle(itemsText);
if ( gPrefs->skin.cardNo == skinsInfo[selected].cardNo &&
gPrefs->skin.dbID == skinsInfo[selected].dbID &&
StrCompare(gPrefs->skin.nameP, skinsInfo[selected].nameP) == 0) {
FrmCustomAlert(FrmInfoAlert, "You cannot delete the active skin.",0,0);
return;
} else {
Err err = DmDeleteDatabase(0, skinsInfo[selected].dbID);
if (!err) {
itemsText = NULL;
itemsList = NULL;
itemsType = ITEM_TYPE_UNKNOWN;
MemHandleUnlock(items);
MemHandleUnlock(skins);
MemHandleFree(items);
MemHandleFree(skins);
SkinsFormInit(false);
} else {
FrmCustomAlert(FrmErrorAlert, "Skin deletion failed.",0,0);
}
}
}
Boolean SkinsFormHandleEvent(EventPtr eventP) {
Boolean handled = false;
switch (eventP->eType) {
case frmOpenEvent:
SkinsFormInit(true);
handled = true;
break;
case frmCloseEvent:
SkinsFormExit(false);
handled = true;
break;
case ctlSelectEvent:
switch (eventP->data.ctlSelect.controlID)
{
case SkinsOKButton:
SkinsFormExit(true);
break;
case SkinsCancelButton:
SkinsFormExit(false);
break;
case SkinsBeamButton:
SkinsFormBeam();
break;
case SkinsDeleteButton:
SkinsFormDelete();
break;
}
handled = true;
break;
default:
break;
}
return handled;
}
--- NEW FILE: formSound.cpp ---
#include <PalmOS.h>
#include "start.h"
#include "forms.h"
static void SoundFormSave() {
ControlType *cck1P, *cck2P, *cck3P, *cck4P;
ListType *list1P;
FieldType *fld1P, *fld2P, *fld3P;
UInt8 tempo;
UInt16 firstTrack;
cck1P = (ControlType *)GetObjectPtr(SoundMusicCheckbox);
cck2P = (ControlType *)GetObjectPtr(SoundMultiMidiCheckbox);
cck3P = (ControlType *)GetObjectPtr(SoundMP3Checkbox);
cck4P = (ControlType *)GetObjectPtr(SoundTrackLengthCheckbox);
list1P = (ListType *)GetObjectPtr(SoundDriverList);
fld1P = (FieldType *)GetObjectPtr(SoundTempoField);
fld2P = (FieldType *)GetObjectPtr(SoundLengthSecsField);
fld3P = (FieldType *)GetObjectPtr(SoundFirstTrackField);
tempo = StrAToI(FldGetTextPtr(fld1P));
if (tempo < 50 || tempo > 200) {
FrmCustomAlert(FrmErrorAlert, "Invalid tempo value (50...200)", 0, 0);
return;
}
firstTrack = StrAToI(FldGetTextPtr(fld3P));
if (firstTrack < 1 || firstTrack > 999) {
FrmCustomAlert(FrmErrorAlert, "Invalid track value (1...999)", 0, 0);
return;
}
gPrefs->sound.music = CtlGetValue(cck1P);
gPrefs->sound.multiMidi = CtlGetValue(cck2P);
gPrefs->sound.MP3 = CtlGetValue(cck3P);
gPrefs->sound.setDefaultTrackLength = CtlGetValue(cck4P);
gPrefs->sound.driver = LstGetSelection(list1P);
gPrefs->sound.tempo = tempo;
gPrefs->sound.defaultTrackLength = StrAToI(FldGetTextPtr(fld2P));
gPrefs->sound.firstTrack = firstTrack;
FrmReturnToMain();
}
static void SoundFormInit() {
ControlType *cck1P, *cck2P, *cck3P, *cck4P;
ListType *list1P;
FieldType *fld1P, *fld2P, *fld3P;
FormPtr frmP;
MemHandle tempoH, lengthH, firstTrackH;
Char *tempoP, *lengthP, *firstTrackP;
cck1P = (ControlType *)GetObjectPtr(SoundMusicCheckbox);
cck2P = (ControlType *)GetObjectPtr(SoundMultiMidiCheckbox);
cck3P = (ControlType *)GetObjectPtr(SoundMP3Checkbox);
cck4P = (ControlType *)GetObjectPtr(SoundTrackLengthCheckbox);
list1P = (ListType *)GetObjectPtr(SoundDriverList);
fld1P = (FieldType *)GetObjectPtr(SoundTempoField);
fld2P = (FieldType *)GetObjectPtr(SoundLengthSecsField);
fld3P = (FieldType *)GetObjectPtr(SoundFirstTrackField);
CtlSetValue(cck1P, gPrefs->sound.music);
CtlSetValue(cck2P, gPrefs->sound.multiMidi);
CtlSetValue(cck3P, gPrefs->sound.MP3);
CtlSetValue(cck4P, gPrefs->sound.setDefaultTrackLength);
LstSetSelection(list1P, gPrefs->sound.driver);
CtlSetLabel((ControlType *)GetObjectPtr(SoundDriverPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P)));
tempoH = MemHandleNew(FldGetMaxChars(fld1P)+1);
tempoP = (Char *)MemHandleLock(tempoH);
StrIToA(tempoP, gPrefs->sound.tempo);
MemHandleUnlock(tempoH);
FldSetTextHandle(fld1P, tempoH);
lengthH = MemHandleNew(FldGetMaxChars(fld2P)+1);
lengthP = (Char *)MemHandleLock(lengthH);
StrIToA(lengthP, gPrefs->sound.defaultTrackLength);
MemHandleUnlock(lengthH);
FldSetTextHandle(fld2P, lengthH);
firstTrackH = MemHandleNew(FldGetMaxChars(fld3P)+1);
firstTrackP = (Char *)MemHandleLock(firstTrackH);
StrIToA(firstTrackP, gPrefs->sound.firstTrack);
MemHandleUnlock(firstTrackH);
FldSetTextHandle(fld3P, firstTrackH);
frmP = FrmGetActiveForm();
FrmDrawForm(frmP);
}
Boolean SoundFormHandleEvent(EventPtr eventP) {
Boolean handled = false;
switch (eventP->eType) {
case frmOpenEvent:
SoundFormInit();
handled = true;
break;
case ctlSelectEvent:
switch (eventP->data.ctlSelect.controlID)
{
case SoundOKButton:
SoundFormSave();
break;
case SoundCancelButton:
FrmReturnToMain();
break;
case SoundDriverPopTrigger:
FrmList(eventP, SoundDriverList);
break;
}
handled = true;
break;
default:
break;
}
return handled;
}
--- NEW FILE: formSystem.cpp ---
#include <PalmOS.h>
#include "start.h"
#include "forms.h"
/***********************************************************************
*
* FUNCTION: SystemInfoFormInit
* FUNCTION: SystemInfoFormHandleEvent
*
* DESCRIPTION:
*
* REVISION HISTORY:
*
*
***********************************************************************/
static void GetMemory(UInt32* storageMemoryP, UInt32* dynamicMemoryP, UInt32 *storageFreeP, UInt32 *dynamicFreeP) {
UInt32 free, max;
Int16 i;
Int16 nCards;
UInt16 cardNo;
UInt16 heapID;
UInt32 storageMemory = 0;
UInt32 dynamicMemory = 0;
UInt32 storageFree = 0;
UInt32 dynamicFree = 0;
// Iterate through each card to support devices with multiple cards.
nCards = MemNumCards();
for (cardNo = 0; cardNo < nCards; cardNo++) {
// Iterate through the RAM heaps on a card (excludes ROM).
for (i=0; i< MemNumRAMHeaps(cardNo); i++) {
// Obtain the ID of the heap.
heapID = MemHeapID(cardNo, i);
// Calculate the total memory and free memory of the heap.
MemHeapFreeBytes(heapID, &free, &max);
// If the heap is dynamic, increment the dynamic memory total.
if (MemHeapDynamic(heapID)) {
dynamicMemory += MemHeapSize(heapID);
dynamicFree += free;
// The heap is nondynamic (storage ?).
} else {
storageMemory += MemHeapSize(heapID);
storageFree += free;
}
}
}
// Reduce the stats to KB. Round the results.
dynamicMemory = dynamicMemory / 1024L;
storageMemory = storageMemory / 1024L;
dynamicFree = dynamicFree / 1024L;
storageFree = storageFree / 1024L;
if (dynamicMemoryP) *dynamicMemoryP = dynamicMemory;
if (storageMemoryP) *storageMemoryP = storageMemory;
if (dynamicFreeP) *dynamicFreeP = dynamicFree;
if (storageFreeP) *storageFreeP = storageFree;
}
static void SystemInfoFormInit() {
FormPtr frmP;
Coord x;
UInt32 dm, sm, df, sf;
Char num[10];
GetMemory(&sm, &dm, &sf, &df);
frmP = FrmGetActiveForm();
FrmDrawForm(frmP);
WinSetTextColor(255);
FntSetFont(stdFont);
StrIToA(num, dm);
x = 149 - FntCharsWidth(num, StrLen(num));
WinDrawChars(num, StrLen(num), x, 30);
StrIToA(num, sm);
x = 149 - FntCharsWidth(num, StrLen(num));
WinDrawChars(num, StrLen(num), x, 42);
StrIToA(num, df);
x = 109 - FntCharsWidth(num, StrLen(num));
WinDrawChars(num, StrLen(num), x, 30);
StrIToA(num, sf);
x = 109 - FntCharsWidth(num, StrLen(num));
WinDrawChars(num, StrLen(num), x, 42);
}
Boolean SystemInfoFormHandleEvent(EventPtr eventP) {
Boolean handled = false;
switch (eventP->eType) {
case frmOpenEvent:
SystemInfoFormInit();
handled = true;
break;
case ctlSelectEvent:
// OK button only
FrmReturnToMain();
handled = true;
break;
default:
break;
}
return handled;
}
--- NEW FILE: formUtil.cpp ---
#include <PalmOS.h>
#include <TxtGlue.h>
#include "forms.h"
Char **itemsText = NULL;
void *itemsList = NULL;
Char itemsType = ITEM_TYPE_UNKNOWN;
void FrmReturnToMain(UInt16 updateCode) {
// if there is a form loaded, prevent crash on OS5
if (FrmGetFirstForm()) {
FrmUpdateForm(MainForm, updateCode);
FrmReturnToForm(MainForm);
}
}
void FldTrimText(FieldPtr fldP) {
MemHandle tmpH;
Char *tmpP;
tmpH = FldGetTextHandle(fldP);
FldSetTextHandle(fldP, NULL);
tmpP = (Char *)MemHandleLock(tmpH);
TxtGlueStripSpaces(tmpP, true, true);
MemHandleUnlock(tmpH);
FldSetTextHandle(fldP, tmpH);
}
/***********************************************************************
*
* FUNCTION: GetObjectPtr
*
* DESCRIPTION: This routine returns a pointer to an object in the current
* form.
*
* PARAMETERS: formId - id of the form to display
*
* RETURNED: void *
*
* REVISION HISTORY:
*
*
***********************************************************************/
void * GetObjectPtr(UInt16 objectID) {
FormPtr frmP;
frmP = FrmGetActiveForm();
return FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, objectID));
}
void FrmList(EventPtr eventP, UInt16 objectID) {
ListType *listP;
UInt16 listItem;
listP = (ListType *)GetObjectPtr(objectID);
listItem = LstPopupList(listP);
CtlSetLabel(eventP->data.ctlSelect.pControl, LstGetSelectionText(listP, LstGetSelection(listP)));
}
--- NEW FILE: formUtil.h ---
#ifndef __FORMUTIL_H__
#define __FORMUTIL_H__
#define frmRedrawUpdateMS (frmRedrawUpdateCode + 1)
#define frmRedrawUpdateMSImport (frmRedrawUpdateCode + 2)
// form list draw
#define ITEM_TYPE_UNKNOWN 'U'
#define ITEM_TYPE_CARD 'C'
#define ITEM_TYPE_SKIN 'S'
extern Char **itemsText;
extern void *itemsList;
extern Char itemsType;
void FrmReturnToMain(UInt16 updateCode = frmRedrawUpdateMS);
void * GetObjectPtr(UInt16 objectID);
void FldTrimText(FieldPtr fldP);
void FrmList(EventPtr eventP, UInt16 objectID);
#endif
--- NEW FILE: formVolume.cpp ---
#include <PalmOS.h>
#include "start.h"
#include "forms.h"
/***********************************************************************
*
* FUNCTION: VolumeFormSave
* FUNCTION: VolumeFormInit
* FUNCTION: VolumeFormHandleEvent
*
* DESCRIPTION:
*
* REVISION HISTORY:
*
*
***********************************************************************/
static void VolumeFormSave() {
SliderControlType *slid1P, *slid2P, *slid3P, *slid4P, *slid5P;
slid1P = (SliderControlType *)GetObjectPtr(VolumeSpeakerSliderControl);
slid2P = (SliderControlType *)GetObjectPtr(VolumeHeadphoneSliderControl);
slid3P = (SliderControlType *)GetObjectPtr(VolumeMasterSliderControl);
slid4P = (SliderControlType *)GetObjectPtr(VolumeMusicSliderControl);
slid5P = (SliderControlType *)GetObjectPtr(VolumeSfxSliderControl);
CtlGetSliderValues ((ControlType *)slid1P, 0, 0, 0, &gPrefs->volume.speaker) ;
CtlGetSliderValues ((ControlType *)slid2P, 0, 0, 0, &gPrefs->volume.headphone) ;
CtlGetSliderValues ((ControlType *)slid3P, 0, 0, 0, &gPrefs->volume.master);
CtlGetSliderValues ((ControlType *)slid4P, 0, 0, 0, &gPrefs->volume.music);
CtlGetSliderValues ((ControlType *)slid5P, 0, 0, 0, &gPrefs->volume.sfx);
FrmReturnToMain();
}
static void VolumeFormInit() {
SliderControlType *slid1P, *slid2P, *slid3P, *slid4P, *slid5P;
FormPtr frmP;
UInt16 value;
slid1P = (SliderControlType *)GetObjectPtr(VolumeSpeakerSliderControl);
slid2P = (SliderControlType *)GetObjectPtr(VolumeHeadphoneSliderControl);
slid3P = (SliderControlType *)GetObjectPtr(VolumeMasterSliderControl);
slid4P = (SliderControlType *)GetObjectPtr(VolumeMusicSliderControl);
slid5P = (SliderControlType *)GetObjectPtr(VolumeSfxSliderControl);
value = gPrefs->volume.speaker;
CtlSetSliderValues ((ControlType *)slid1P, 0, 0, 0, &value);
value = gPrefs->volume.headphone;
CtlSetSliderValues ((ControlType *)slid2P, 0, 0, 0, &value);
value = gPrefs->volume.master;
CtlSetSliderValues ((ControlType *)slid3P, 0, 0, 0, &value);
value = gPrefs->volume.music;
CtlSetSliderValues ((ControlType *)slid4P, 0, 0, 0, &value);
value = gPrefs->volume.sfx;
CtlSetSliderValues ((ControlType *)slid5P, 0, 0, 0, &value);
frmP = FrmGetActiveForm();
FrmDrawForm(frmP);
}
Boolean VolumeFormHandleEvent(EventPtr eventP) {
Boolean handled = false;
switch (eventP->eType) {
case frmOpenEvent:
VolumeFormInit();
handled = true;
break;
case ctlSelectEvent:
switch (eventP->data.ctlSelect.controlID)
{
case VolumeOKButton:
VolumeFormSave();
break;
case VolumeCancelButton:
FrmReturnToMain();
break;
}
handled = true;
break;
default:
break;
}
return handled;
}
--- NEW FILE: forms.h ---
#ifndef __FORMS_H__
#define __FORMS_H__
#include "StarterRsc.h"
#include "formUtil.h"
#include "formEditGame.h"
#include "formCards.h"
#define HANDLER(x) Boolean x##FormHandleEvent(EventPtr eventP);
HANDLER(EditGame)
HANDLER(Volume)
HANDLER(SystemInfo)
HANDLER(Sound)
HANDLER(MiscOptions)
HANDLER(CardSlot)
HANDLER(Skins)
#endif
More information about the Scummvm-git-logs
mailing list