ScummVM Headers were missing
svn-id: r10381
This commit is contained in:
parent
0f8eca26ab
commit
f2f5f9a9af
6 changed files with 3880 additions and 0 deletions
227
backends/PalmOS/Src/games.cpp
Normal file
227
backends/PalmOS/Src/games.cpp
Normal file
|
@ -0,0 +1,227 @@
|
|||
/* ScummVM - Scumm Interpreter
|
||||
* Copyright (C) 2001 Ludvig Strigeus
|
||||
* Copyright (C) 2001-2003 The ScummVM project
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* $Header$
|
||||
*
|
||||
*/
|
||||
|
||||
#include <PalmOS.h>
|
||||
#include <VFSMgr.h>
|
||||
|
||||
#include "start.h"
|
||||
#include "games.h"
|
||||
|
||||
#include "extend.h"
|
||||
#include "StarterRsc.h"
|
||||
|
||||
DmOpenRef gameDB = NULL;
|
||||
|
||||
static Err GamUpdateList() {
|
||||
if (gameDB) {
|
||||
UInt16 numRecs = DmNumRecords(gameDB);
|
||||
|
||||
if (numRecs > 0) {
|
||||
MemHandle tmpH;
|
||||
UInt32 version, size;
|
||||
UInt32 *versionP;
|
||||
|
||||
// get record size and version
|
||||
tmpH = DmQueryRecord(gameDB, 0);
|
||||
size = MemHandleSize(tmpH);
|
||||
versionP = (UInt32 *)MemHandleLock(tmpH);
|
||||
version = *versionP;
|
||||
MemHandleUnlock(tmpH);
|
||||
|
||||
// check record
|
||||
if (version != curItemVersion && size != sizeof(GameInfoType)) {
|
||||
UInt16 index;
|
||||
GameInfoType gitCur;
|
||||
GameInfoTypeV0 git0;
|
||||
void *tmpP;
|
||||
FormPtr ofmP, frmP;
|
||||
|
||||
// show dialog
|
||||
ofmP = FrmGetActiveForm();
|
||||
frmP = FrmInitForm(ConvertForm);
|
||||
FrmSetActiveForm(frmP);
|
||||
FrmDrawForm(frmP);
|
||||
SysTaskDelay(200);
|
||||
|
||||
// need conversion from V0 -> V2
|
||||
for (index = 0; index < numRecs; index++) {
|
||||
|
||||
// get old data
|
||||
tmpH = DmQueryRecord(gameDB, index);
|
||||
tmpP = MemHandleLock(tmpH);
|
||||
MemMove(&git0, tmpP, sizeof(GameInfoTypeV0));
|
||||
MemHandleUnlock(tmpH);
|
||||
|
||||
// convert to new format
|
||||
gitCur.version = curItemVersion;
|
||||
gitCur.icnID = 0xFFFF;
|
||||
gitCur.selected = git0.selected;
|
||||
StrCopy(gitCur.nameP, git0.nameP);
|
||||
StrCopy(gitCur.pathP, git0.pathP);
|
||||
StrCopy(gitCur.gameP, git0.gameP);
|
||||
gitCur.gfxMode = git0.gfxMode;
|
||||
|
||||
gitCur.autoLoad = git0.autoLoad;
|
||||
gitCur.autoRoom = git0.autoRoom;
|
||||
gitCur.setPlatform = git0.amiga; // amiga become platform amiga/atari-st/machintosh
|
||||
gitCur.subtitles = git0.subtitles;
|
||||
gitCur.talkSpeed = git0.talkSpeed;
|
||||
|
||||
gitCur.loadSlot = git0.loadSlot;
|
||||
gitCur.roomNum = git0.roomNum;
|
||||
gitCur.talkValue = git0.talkValue;
|
||||
gitCur.platform = 0; // default to amiga
|
||||
gitCur.language = git0.language;
|
||||
|
||||
tmpH = DmResizeRecord(gameDB, index, sizeof(GameInfoType)); // TODO : check error on resize tmpH==NULL
|
||||
tmpP = MemHandleLock(tmpH);
|
||||
DmWrite(tmpP, 0, &gitCur, sizeof(GameInfoType));
|
||||
MemPtrUnlock(tmpP);
|
||||
}
|
||||
|
||||
FrmEraseForm(frmP);
|
||||
FrmDeleteForm(frmP);
|
||||
if (ofmP)
|
||||
FrmReturnToForm(MainForm);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return errNone;
|
||||
}
|
||||
|
||||
Err GamOpenDatabase() {
|
||||
Err err = errNone;
|
||||
|
||||
gameDB = DmOpenDatabaseByTypeCreator( 'DATA', appFileCreator, dmModeReadWrite);
|
||||
|
||||
if (!gameDB) {
|
||||
err = DmCreateDatabase(0, "ScummVM-Data", appFileCreator, 'DATA', false);
|
||||
if (!err) {
|
||||
gameDB = DmOpenDatabaseByTypeCreator( 'DATA', appFileCreator, dmModeReadWrite);
|
||||
|
||||
if (!gameDB)
|
||||
err = DmGetLastErr();
|
||||
}
|
||||
}
|
||||
|
||||
if (err)
|
||||
FrmCustomAlert(FrmErrorAlert,"Cannot open/create games list DB !",0,0);
|
||||
else
|
||||
err = GamUpdateList();
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
void GamImportDatabase() {
|
||||
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(gameDB, &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) TODO : check if this is still required, crash now with tapwave !!!
|
||||
// oDbID = DmFindDatabase (oCardNo, "ScummVM-Data-old.pdb");
|
||||
e = DmDeleteDatabase(oCardNo, oDbID);
|
||||
}
|
||||
GamOpenDatabase();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GamCloseDatabase(Boolean ignoreCardParams) {
|
||||
if (gameDB) {
|
||||
LocalID dbID;
|
||||
UInt16 cardNo;
|
||||
|
||||
DmOpenDatabaseInfo(gameDB, &dbID, 0, 0, &cardNo, 0);
|
||||
DmCloseDatabase(gameDB);
|
||||
|
||||
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");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
gameDB = NULL;
|
||||
}
|
||||
|
||||
static Int16 GamCompare(GameInfoType *a, GameInfoType *b, SortRecordInfoPtr, SortRecordInfoPtr, MemHandle) {
|
||||
return StrCaselessCompare(a->nameP, b->nameP);
|
||||
}
|
||||
|
||||
Err GamSortList() {
|
||||
return DmQuickSort (gameDB, (DmComparF *)GamCompare, 0);
|
||||
}
|
||||
|
||||
UInt16 GamGetSelected() {
|
||||
MemHandle record;
|
||||
GameInfoType *game;
|
||||
Boolean selected;
|
||||
UInt16 index = DmNumRecords(gameDB)-1;
|
||||
|
||||
while (index != (UInt16)-1) {
|
||||
record = DmQueryRecord(gameDB, index);
|
||||
game = (GameInfoType *)MemHandleLock(record);
|
||||
selected = game->selected;
|
||||
MemHandleUnlock(record);
|
||||
|
||||
if (selected)
|
||||
return index;
|
||||
|
||||
index--;
|
||||
}
|
||||
|
||||
return dmMaxRecordIndex;
|
||||
}
|
83
backends/PalmOS/Src/games.h
Normal file
83
backends/PalmOS/Src/games.h
Normal file
|
@ -0,0 +1,83 @@
|
|||
/* ScummVM - Scumm Interpreter
|
||||
* Copyright (C) 2001 Ludvig Strigeus
|
||||
* Copyright (C) 2001-2003 The ScummVM project
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* $Header$
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __GAMES_H__
|
||||
#define __GAMES_H__
|
||||
|
||||
// old config structs
|
||||
typedef struct {
|
||||
UInt32 version;
|
||||
UInt16 icnID; // icon to display on the list
|
||||
Boolean selected;
|
||||
|
||||
Char nameP[50]; // game name to display in list
|
||||
Char pathP[150]; // path to the game files
|
||||
Char gameP[10]; // scumm name of the game
|
||||
UInt16 gfxMode;
|
||||
|
||||
Boolean autoLoad;
|
||||
UInt16 loadSlot;
|
||||
Boolean autoRoom;
|
||||
UInt16 roomNum;
|
||||
Boolean amiga;
|
||||
Boolean subtitles;
|
||||
Boolean talkSpeed;
|
||||
UInt16 talkValue;
|
||||
UInt8 language;
|
||||
|
||||
} GameInfoTypeV0;
|
||||
|
||||
// Current config
|
||||
typedef struct {
|
||||
UInt32 version;
|
||||
UInt16 icnID; // icon to display on the list
|
||||
Boolean selected;
|
||||
|
||||
Char nameP[50]; // game name to display in list
|
||||
Char pathP[150]; // path to the game files
|
||||
Char gameP[10]; // scumm name of the game
|
||||
UInt16 gfxMode;
|
||||
|
||||
Boolean autoLoad;
|
||||
Boolean autoRoom;
|
||||
Boolean setPlatform;
|
||||
Boolean subtitles;
|
||||
Boolean talkSpeed;
|
||||
|
||||
UInt16 loadSlot;
|
||||
UInt16 roomNum;
|
||||
UInt16 talkValue;
|
||||
UInt8 platform;
|
||||
UInt8 language;
|
||||
|
||||
} GameInfoType;
|
||||
|
||||
// protos
|
||||
Err GamOpenDatabase ();
|
||||
void GamImportDatabase ();
|
||||
void GamCloseDatabase (Boolean ignoreCardParams);
|
||||
Err GamSortList ();
|
||||
UInt16 GamGetSelected ();
|
||||
|
||||
extern DmOpenRef gameDB;
|
||||
|
||||
#endif
|
105
backends/PalmOS/Src/scumm_globals.cpp
Normal file
105
backends/PalmOS/Src/scumm_globals.cpp
Normal file
|
@ -0,0 +1,105 @@
|
|||
/* ScummVM - Scumm Interpreter
|
||||
* Copyright (C) 2001 Ludvig Strigeus
|
||||
* Copyright (C) 2001-2003 The ScummVM project
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* $Header$
|
||||
*
|
||||
*/
|
||||
#include <PalmOS.h>
|
||||
|
||||
#include "start.h"
|
||||
#include "globals.h"
|
||||
#include "scumm_globals.h"
|
||||
|
||||
static void GlbInitAll() {
|
||||
#ifndef DISABLE_SCUMM
|
||||
CALL_INIT(IMuseDigital)
|
||||
CALL_INIT(NewGui)
|
||||
CALL_INIT(Akos)
|
||||
CALL_INIT(Bundle)
|
||||
CALL_INIT(Codec47)
|
||||
CALL_INIT(Gfx)
|
||||
CALL_INIT(Dialogs)
|
||||
CALL_INIT(Charset)
|
||||
CALL_INIT(Costume)
|
||||
CALL_INIT(PlayerV2)
|
||||
#endif
|
||||
}
|
||||
|
||||
static void GlbReleaseAll() {
|
||||
#ifndef DISABLE_SCUMM
|
||||
CALL_RELEASE(IMuseDigital)
|
||||
CALL_RELEASE(NewGui)
|
||||
CALL_RELEASE(Akos)
|
||||
CALL_RELEASE(Bundle)
|
||||
CALL_RELEASE(Codec47)
|
||||
CALL_RELEASE(Gfx)
|
||||
CALL_RELEASE(Dialogs)
|
||||
CALL_RELEASE(Charset)
|
||||
CALL_RELEASE(Costume)
|
||||
CALL_RELEASE(PlayerV2)
|
||||
#endif
|
||||
}
|
||||
|
||||
//TODO : use Boolean instead of void to check err
|
||||
static DmOpenRef GlbOpenInternal(const Char *nameP) {
|
||||
LocalID dbID = DmFindDatabase(0, nameP);
|
||||
if (dbID) {
|
||||
UInt32 dbType, dbCreator;
|
||||
Err e = DmDatabaseInfo(0, dbID, 0, 0, 0, 0, 0, 0, 0, 0, 0, &dbType, &dbCreator);
|
||||
|
||||
if (!e && dbType == 'GLBS' && dbCreator == appFileCreator)
|
||||
return DmOpenDatabase(0, dbID, dmModeReadOnly);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void GlbOpen() {
|
||||
gVars->globals[GBVARS_SCUMM] = GlbOpenInternal("Scumm-Globals");
|
||||
gVars->globals[GBVARS_SIMON] = GlbOpenInternal("Simon-Globals");
|
||||
gVars->globals[GBVARS_SKY] = GlbOpenInternal("Sky-Globals");
|
||||
|
||||
GlbInitAll();
|
||||
}
|
||||
|
||||
void GlbClose() {
|
||||
GlbReleaseAll();
|
||||
|
||||
if (gVars->globals[GBVARS_SCUMM])
|
||||
DmCloseDatabase(gVars->globals[GBVARS_SCUMM]);
|
||||
if (gVars->globals[GBVARS_SIMON])
|
||||
DmCloseDatabase(gVars->globals[GBVARS_SIMON]);
|
||||
if (gVars->globals[GBVARS_SKY])
|
||||
DmCloseDatabase(gVars->globals[GBVARS_SKY]);
|
||||
}
|
||||
|
||||
void *GlbGetRecord(UInt16 index, UInt16 id) {
|
||||
if (gVars->globals[id]) {
|
||||
MemHandle recordH = DmQueryRecord(gVars->globals[id], index);
|
||||
if (recordH)
|
||||
return MemHandleLock(recordH);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void GlbReleaseRecord(UInt16 index, UInt16 id) {
|
||||
if (gVars->globals[id]) {
|
||||
MemHandle recordH = DmQueryRecord(gVars->globals[id], index);
|
||||
if (recordH)
|
||||
MemHandleUnlock(recordH);
|
||||
}
|
||||
}
|
568
backends/PalmOS/Src/skin.cpp
Normal file
568
backends/PalmOS/Src/skin.cpp
Normal file
|
@ -0,0 +1,568 @@
|
|||
/* ScummVM - Scumm Interpreter
|
||||
* Copyright (C) 2001 Ludvig Strigeus
|
||||
* Copyright (C) 2001-2003 The ScummVM project
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* $Header$
|
||||
*
|
||||
*/
|
||||
|
||||
#include <PalmOS.h>
|
||||
#include <PalmOSGlue.h>
|
||||
|
||||
#include "start.h"
|
||||
#include "games.h"
|
||||
#include "globals.h"
|
||||
#include "skin.h"
|
||||
#include "StarterRsc.h"
|
||||
|
||||
UInt16 lastIndex = dmMaxRecordIndex; // last select index in the list to prevent flash
|
||||
|
||||
static void SknGetListColors(DmOpenRef skinDBP, DmResID resID, UInt8 *text, UInt8 *selected, UInt8 *background) {
|
||||
UInt16 colIndex;
|
||||
MemHandle colH;
|
||||
UInt8 *colTemp;
|
||||
|
||||
// default
|
||||
*text = UIColorGetTableEntryIndex (UIMenuForeground);
|
||||
*selected = UIColorGetTableEntryIndex (UIMenuSelectedForeground);
|
||||
*background = UIColorGetTableEntryIndex (UIMenuSelectedFill);
|
||||
|
||||
if (skinDBP) {
|
||||
colIndex = DmFindResource (skinDBP, sknColorsRsc, resID, NULL);
|
||||
|
||||
if (colIndex != (UInt16)-1) {
|
||||
colH = DmGetResourceIndex(skinDBP, colIndex);
|
||||
|
||||
if (colH) {
|
||||
colTemp = (UInt8 *)MemHandleLock(colH);
|
||||
|
||||
*text = colTemp[0];
|
||||
*selected = colTemp[1];
|
||||
*background = colTemp[2];
|
||||
|
||||
MemPtrUnlock(colTemp);
|
||||
DmReleaseResource(colH);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void SknCopyBits(DmOpenRef skinDBP, DmResID bitmapID, const RectangleType *srcRect, Coord destX, Coord destY, Boolean standard) {
|
||||
MemHandle hTemp;
|
||||
BitmapPtr bmpTemp;
|
||||
UInt16 index;
|
||||
UInt8 *bmpData;
|
||||
|
||||
Coord cx, cy, cw, ch, bw, bh;
|
||||
UInt8 *dst, *src;
|
||||
|
||||
if (skinDBP) {
|
||||
// find the bitmap
|
||||
index = DmFindResource (skinDBP, bitmapRsc, bitmapID, NULL);
|
||||
|
||||
if (index != (UInt16)-1) {
|
||||
hTemp = DmGetResourceIndex(skinDBP,index);
|
||||
|
||||
if (hTemp) {
|
||||
bmpTemp = (BitmapType *)MemHandleLock(hTemp);
|
||||
BmpGlueGetDimensions(bmpTemp, &bw, &bh, 0);
|
||||
|
||||
if (!srcRect) {
|
||||
cx = 0;
|
||||
cy = 0;
|
||||
cw = bw;
|
||||
ch = bh;
|
||||
} else {
|
||||
cx = srcRect->topLeft.x;
|
||||
cy = srcRect->topLeft.y;
|
||||
cw = srcRect->extent.x;
|
||||
ch = srcRect->extent.y;
|
||||
}
|
||||
|
||||
if (ch) {
|
||||
Coord picth = gVars->screenFullWidth;
|
||||
dst = (UInt8 *)BmpGetBits(WinGetBitmap(WinGetDisplayWindow()));
|
||||
|
||||
dst+= destX + destY * picth;
|
||||
bmpData = (UInt8 *)BmpGetBits(bmpTemp);
|
||||
src = bmpData + cx + cy * bw;
|
||||
|
||||
do {
|
||||
MemMove(dst, src, cw);
|
||||
dst += picth;
|
||||
src += bw;
|
||||
} while (--ch);
|
||||
}
|
||||
|
||||
MemPtrUnlock(bmpTemp);
|
||||
DmReleaseResource(hTemp);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SknApplySkin() {
|
||||
DmOpenRef skinDBP;
|
||||
RectangleType r;
|
||||
FormPtr frmP = FrmGetActiveForm();
|
||||
|
||||
WinScreenLock(winLockErase);
|
||||
//SknSetPalette();
|
||||
FrmDrawForm(frmP);
|
||||
|
||||
if (gPrefs->card.volRefNum != sysInvalidRefNum)
|
||||
FrmShowObject(frmP, FrmGetObjectIndex (frmP, MainMSBitMap));
|
||||
else
|
||||
FrmShowObject(frmP, FrmGetObjectIndex (frmP, MainMSNoneBitMap));
|
||||
|
||||
WinSetForeColor(255);
|
||||
WinSetDrawMode(winPaint);
|
||||
WinDrawLine (0, 14, 159, 14);
|
||||
WinDrawLine (0, 13, 159, 13);
|
||||
|
||||
skinDBP = SknOpenSkin();
|
||||
SknGetObjectBounds(skinDBP, skinBackgroundImageTop, &r);
|
||||
SknCopyBits(skinDBP, skinBackgroundImageTop, 0, r.topLeft.x, r.topLeft.y, 0);
|
||||
SknGetObjectBounds(skinDBP, skinBackgroundImageBottom, &r);
|
||||
SknCopyBits(skinDBP, skinBackgroundImageBottom, 0, r.topLeft.x, r.topLeft.y, 0);
|
||||
|
||||
for (UInt16 resID = 1100; resID <= 7000; resID += 100) {
|
||||
SknSetState(skinDBP, resID, sknStateNormal);
|
||||
SknShowObject(skinDBP, resID);
|
||||
}
|
||||
|
||||
SknCloseSkin(skinDBP);
|
||||
WinScreenUnlock();
|
||||
SknUpdateList();
|
||||
|
||||
gVars->skinSet = true; // for winDisplayChangedEvent redraw
|
||||
}
|
||||
|
||||
void SknGetObjectBounds(DmOpenRef skinDBP, DmResID resID, RectangleType *rP) {
|
||||
|
||||
UInt16 bmpIndex, strIndex;
|
||||
MemHandle hBmp, hStr;
|
||||
BitmapType *bmpTemp;
|
||||
UInt8 *strTemp;
|
||||
|
||||
RctSetRectangle(rP, 0, 0, 0, 0);
|
||||
|
||||
if (skinDBP) {
|
||||
bmpIndex = DmFindResource (skinDBP, bitmapRsc, resID, NULL);
|
||||
|
||||
if (bmpIndex != (UInt16)-1) { // if bmp exists
|
||||
strIndex = DmFindResource (skinDBP, sknPosRsc, resID, NULL);
|
||||
|
||||
if (strIndex != (UInt16)-1) { // if params exist
|
||||
hBmp = DmGetResourceIndex(skinDBP,bmpIndex);
|
||||
|
||||
if (hBmp) {
|
||||
hStr = DmGetResourceIndex(skinDBP,strIndex);
|
||||
|
||||
if (hStr) {
|
||||
// buttons : state|x|y|w/h slider|draw mode|x1/y1 keep|x2/y2 keep slider
|
||||
// list (160mode) : state|x|y|w|h|
|
||||
bmpTemp = (BitmapType *)MemHandleLock(hBmp);
|
||||
strTemp = (UInt8 *)MemHandleLock(hStr);
|
||||
|
||||
BmpGlueGetDimensions(bmpTemp, &(rP->extent.x), &(rP->extent.y), 0);
|
||||
rP->topLeft.x = strTemp[sknInfoPosX] * 2;
|
||||
rP->topLeft.y = strTemp[sknInfoPosY] * 2;
|
||||
|
||||
MemPtrUnlock(strTemp);
|
||||
DmReleaseResource(hStr);
|
||||
}
|
||||
|
||||
MemPtrUnlock(bmpTemp);
|
||||
DmReleaseResource(hBmp);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DmOpenRef SknOpenSkin() {
|
||||
return DmOpenDatabase(gPrefs->skin.cardNo, gPrefs->skin.dbID, dmModeReadOnly);
|
||||
}
|
||||
|
||||
void SknCloseSkin(DmOpenRef skinDBP) {
|
||||
if (skinDBP)
|
||||
DmCloseDatabase(skinDBP);
|
||||
}
|
||||
|
||||
UInt8 SknSetState(DmOpenRef skinDBP, DmResID resID, UInt8 newState) {
|
||||
|
||||
UInt16 index;
|
||||
MemHandle hStr;
|
||||
UInt8 *strTemp;
|
||||
UInt8 oldState = 0;
|
||||
|
||||
if (skinDBP) {
|
||||
index = DmFindResource (skinDBP, sknPosRsc, resID, NULL);
|
||||
|
||||
if (index != (UInt16)-1) {
|
||||
hStr = DmGetResourceIndex(skinDBP, index);
|
||||
|
||||
if (hStr) {
|
||||
strTemp = (UInt8 *)MemHandleLock(hStr);
|
||||
oldState = strTemp[sknInfoState];
|
||||
|
||||
if (oldState != newState) {
|
||||
DmWrite(strTemp, 0, &newState, 1);
|
||||
}
|
||||
|
||||
MemPtrUnlock(strTemp);
|
||||
DmReleaseResource(hStr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return oldState;
|
||||
}
|
||||
|
||||
UInt8 SknGetState(DmOpenRef skinDBP, DmResID resID) {
|
||||
|
||||
UInt16 index;
|
||||
MemHandle hStr;
|
||||
UInt8 *strTemp;
|
||||
UInt8 oldState = sknStateDisabled;
|
||||
|
||||
if (skinDBP) {
|
||||
index = DmFindResource (skinDBP, sknPosRsc, resID, NULL);
|
||||
|
||||
if (index != (UInt16)-1) {
|
||||
hStr = DmGetResourceIndex(skinDBP, index);
|
||||
|
||||
if (hStr) {
|
||||
strTemp = (UInt8 *)MemHandleLock(hStr);
|
||||
oldState = strTemp[sknInfoState];
|
||||
MemPtrUnlock(strTemp);
|
||||
DmReleaseResource(hStr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return oldState;
|
||||
}
|
||||
|
||||
void SknShowObject(DmOpenRef skinDBP, DmResID resID) {
|
||||
|
||||
RectangleType r;
|
||||
UInt8 state = SknGetState(skinDBP, resID);
|
||||
SknGetObjectBounds(skinDBP, resID, &r);
|
||||
SknCopyBits(skinDBP, resID + state, NULL, r.topLeft.x, r.topLeft.y, 0);
|
||||
}
|
||||
|
||||
void SknGetListBounds(RectangleType *rAreaP, RectangleType *rArea2xP) {
|
||||
DmOpenRef skinDBP;
|
||||
UInt16 strIndex;
|
||||
MemHandle hStr;
|
||||
UInt8 *strTemp;
|
||||
UInt16 x,y,w,h;
|
||||
|
||||
skinDBP = DmOpenDatabase(gPrefs->skin.cardNo, gPrefs->skin.dbID, dmModeReadOnly);
|
||||
if (skinDBP) {
|
||||
strIndex = DmFindResource (skinDBP, sknPosRsc, skinList, NULL);
|
||||
|
||||
if (strIndex != 0xFFFF) { // if params exist
|
||||
hStr = DmGetResourceIndex(skinDBP,strIndex);
|
||||
if (hStr) {
|
||||
strTemp = (UInt8 *)MemHandleLock(hStr);
|
||||
|
||||
x = strTemp[sknInfoPosX];
|
||||
y = strTemp[sknInfoPosY];
|
||||
w = strTemp[sknInfoListWidth];
|
||||
h = strTemp[sknInfoListSize] * sknInfoListItemSize;
|
||||
|
||||
if (rAreaP)
|
||||
RctSetRectangle(rAreaP ,x, y, w, h);
|
||||
if (rArea2xP)
|
||||
RctSetRectangle(rArea2xP, x+x, y+y, w+w, h+h);
|
||||
|
||||
MemHandleUnlock(hStr);
|
||||
DmReleaseResource(hStr);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
DmCloseDatabase(skinDBP);
|
||||
}
|
||||
}
|
||||
|
||||
static void SknRedrawTools(DmOpenRef skinDBP) {
|
||||
if (GamGetSelected() == dmMaxRecordIndex) {
|
||||
if (SknGetState(skinDBP, skinButtonGameDelete) == sknStateNormal) {
|
||||
SknSetState(skinDBP, skinButtonGameDelete,sknStateDisabled);
|
||||
SknShowObject(skinDBP, skinButtonGameDelete);
|
||||
}
|
||||
if (SknGetState(skinDBP, skinButtonGameEdit) == sknStateNormal) {
|
||||
SknSetState(skinDBP, skinButtonGameEdit,sknStateDisabled);
|
||||
SknShowObject(skinDBP, skinButtonGameEdit);
|
||||
}
|
||||
|
||||
} else {
|
||||
if (SknGetState(skinDBP, skinButtonGameDelete) == sknStateDisabled) {
|
||||
SknSetState(skinDBP, skinButtonGameDelete,sknStateNormal);
|
||||
SknShowObject(skinDBP, skinButtonGameDelete);
|
||||
}
|
||||
if (SknGetState(skinDBP, skinButtonGameEdit) == sknStateDisabled) {
|
||||
SknSetState(skinDBP, skinButtonGameEdit,sknStateNormal);
|
||||
SknShowObject(skinDBP, skinButtonGameEdit);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void SknRedrawSlider(DmOpenRef skinDBP, UInt16 index, UInt16 maxIndex, UInt16 perPage) {
|
||||
if (maxIndex <= perPage) {
|
||||
if (SknGetState(skinDBP,skinSliderUpArrow) != sknStateDisabled) {
|
||||
SknSetState(skinDBP,skinSliderUpArrow,sknStateDisabled);
|
||||
SknShowObject(skinDBP,skinSliderUpArrow);
|
||||
}
|
||||
if (SknGetState(skinDBP,skinSliderDownArrow) != sknStateDisabled) {
|
||||
SknSetState(skinDBP,skinSliderDownArrow,sknStateDisabled);
|
||||
SknShowObject(skinDBP,skinSliderDownArrow);
|
||||
}
|
||||
|
||||
} else {
|
||||
if (SknGetState(skinDBP,skinSliderUpArrow) == sknStateDisabled) {
|
||||
SknSetState(skinDBP,skinSliderUpArrow,sknStateNormal);
|
||||
SknShowObject(skinDBP,skinSliderUpArrow);
|
||||
}
|
||||
if (SknGetState(skinDBP,skinSliderDownArrow) == sknStateDisabled) {
|
||||
SknSetState(skinDBP,skinSliderDownArrow,sknStateNormal);
|
||||
SknShowObject(skinDBP,skinSliderDownArrow);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
static void SknSetPalette() {
|
||||
|
||||
UInt16 palIndex;
|
||||
ColorTableType *palTemp;
|
||||
MemHandle palH;
|
||||
|
||||
DmOpenRef skinDBP = SknOpenSkin();
|
||||
|
||||
if (skinDBP) {
|
||||
palIndex = DmFindResource (skinDBP, colorTableRsc, skinPalette, NULL);
|
||||
|
||||
if (palIndex != 0xFFFF) {
|
||||
palH = DmGetResourceIndex(skinDBP, palIndex);
|
||||
|
||||
if (palH) {
|
||||
palTemp = (ColorTableType *)MemHandleLock(palH);
|
||||
WinPalette(winPaletteSet, 0, 256, ColorTableEntries(palTemp));
|
||||
MemPtrUnlock(palTemp);
|
||||
DmReleaseResource(palH);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SknCloseSkin(skinDBP);
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
void SknUpdateList() {
|
||||
MemHandle record;
|
||||
UInt16 index, maxIndex, maxView;
|
||||
GameInfoType *game;
|
||||
RectangleType rArea, rField, rCopy, rArea2x;
|
||||
DmOpenRef skinDBP;
|
||||
|
||||
UInt8 txtColor, norColor, selColor, bkgColor;
|
||||
UInt16 x,y;
|
||||
|
||||
WinScreenLock(winLockCopy);
|
||||
SknGetListBounds(&rArea, &rArea2x);
|
||||
skinDBP = SknOpenSkin();
|
||||
// set default bg
|
||||
WinSetForeColor(UIColorGetTableEntryIndex (UIFormFill));
|
||||
WinDrawRectangle(&rArea,0);
|
||||
// copy top bg
|
||||
SknGetObjectBounds(skinDBP, skinBackgroundImageTop, &rField);
|
||||
RctGetIntersection(&rArea2x, &rField, &rCopy);
|
||||
x = rCopy.topLeft.x;
|
||||
y = rCopy.topLeft.y;
|
||||
rCopy.topLeft.x -= rField.topLeft.x;
|
||||
rCopy.topLeft.y -= rField.topLeft.y;
|
||||
SknCopyBits(skinDBP, skinBackgroundImageTop, &rCopy, x, y, 0);
|
||||
// copy bottom bg
|
||||
SknGetObjectBounds(skinDBP, skinBackgroundImageBottom, &rField);
|
||||
RctGetIntersection(&rArea2x, &rField, &rCopy);
|
||||
x = rCopy.topLeft.x;
|
||||
y = rCopy.topLeft.y;
|
||||
rCopy.topLeft.x -= rField.topLeft.x;
|
||||
rCopy.topLeft.y -= rField.topLeft.y;
|
||||
SknCopyBits(skinDBP, skinBackgroundImageBottom, &rCopy, x, y, 0);
|
||||
|
||||
FntSetFont(stdFont);
|
||||
|
||||
index = gPrefs->listPosition;
|
||||
maxIndex = DmNumRecords(gameDB);
|
||||
maxView = rArea.extent.y / sknInfoListItemSize;
|
||||
|
||||
if (index > 0 && (index+maxView) > maxIndex) {
|
||||
index -= (index+maxView) - maxIndex;
|
||||
gPrefs->listPosition = index;
|
||||
}
|
||||
SknRedrawSlider(skinDBP, index, maxIndex, maxView);
|
||||
SknRedrawTools(skinDBP);
|
||||
SknGetListColors(skinDBP, skinColors, &norColor, &selColor, &bkgColor);
|
||||
|
||||
SknCloseSkin(skinDBP);
|
||||
|
||||
while (index < (gPrefs->listPosition + maxView) && index < maxIndex) {
|
||||
record = DmQueryRecord(gameDB, index);
|
||||
game = (GameInfoType *)MemHandleLock(record);
|
||||
|
||||
// text box
|
||||
RctSetRectangle(&rField, rArea.topLeft.x, (rArea.topLeft.y + sknInfoListItemSize * (index - gPrefs->listPosition)), rArea.extent.x, sknInfoListItemSize);
|
||||
WinSetClip(&rField);
|
||||
|
||||
if (game->selected) {
|
||||
WinSetDrawMode(winPaint);
|
||||
WinSetForeColor(bkgColor);
|
||||
WinDrawRectangle(&rField,0);
|
||||
txtColor = selColor;
|
||||
}
|
||||
else
|
||||
txtColor = norColor;
|
||||
|
||||
// clipping
|
||||
rField.topLeft.x += 2;
|
||||
rField.extent.x -= 4;
|
||||
WinSetClip(&rField);
|
||||
// draw text mask
|
||||
WinSetTextColor(255);
|
||||
WinSetDrawMode(winMask);
|
||||
WinPaintChars(game->nameP, StrLen(game->nameP), rField.topLeft.x, rField.topLeft.y);
|
||||
// draw text
|
||||
if (txtColor) {
|
||||
WinSetTextColor(txtColor);
|
||||
WinSetDrawMode(winOverlay);
|
||||
WinPaintChars(game->nameP, StrLen(game->nameP), rField.topLeft.x, rField.topLeft.y);
|
||||
}
|
||||
|
||||
MemHandleUnlock(record);
|
||||
index++;
|
||||
}
|
||||
|
||||
RctSetRectangle(&rArea,0,0,160,160);
|
||||
WinSetClip(&rArea);
|
||||
WinScreenUnlock();
|
||||
}
|
||||
|
||||
UInt16 SknCheckClick(DmOpenRef skinDBP, Coord mx, Coord my) {
|
||||
UInt16 resID;
|
||||
RectangleType r;
|
||||
|
||||
mx *= 2;
|
||||
my *= 2;
|
||||
|
||||
if (skinDBP) {
|
||||
for (resID = 1100; resID <= 7000; resID += 100) {
|
||||
if (SknGetState(skinDBP, resID) != sknStateDisabled) {
|
||||
SknGetObjectBounds(skinDBP, resID, &r);
|
||||
if (RctPtInRectangle(mx, my, &r)) {
|
||||
return resID;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void SknSelect(Coord x, Coord y) {
|
||||
RectangleType rArea;
|
||||
SknGetListBounds(&rArea,0);
|
||||
|
||||
if (RctPtInRectangle(x, y, &rArea)) {
|
||||
UInt16 index;
|
||||
MemHandle record;
|
||||
GameInfoType *game;
|
||||
UInt16 oldIndex;
|
||||
|
||||
index = (y - rArea.topLeft.y) / sknInfoListItemSize + gPrefs->listPosition;
|
||||
|
||||
if (index == lastIndex)
|
||||
return;
|
||||
|
||||
if (index < DmNumRecords(gameDB)) {
|
||||
GameInfoType modGame;
|
||||
|
||||
oldIndex = GamGetSelected();
|
||||
record = DmGetRecord(gameDB, index);
|
||||
game = (GameInfoType *)MemHandleLock(record);
|
||||
|
||||
MemMove(&modGame, game, sizeof(GameInfoType));
|
||||
modGame.selected = !modGame.selected;
|
||||
DmWrite(game, 0, &modGame, sizeof(GameInfoType));
|
||||
|
||||
MemHandleUnlock(record);
|
||||
DmReleaseRecord (gameDB, index, 0);
|
||||
|
||||
if (oldIndex != index && oldIndex != dmMaxRecordIndex) {
|
||||
record = DmGetRecord(gameDB, oldIndex);
|
||||
game = (GameInfoType *)MemHandleLock(record);
|
||||
|
||||
MemMove(&modGame, game, sizeof(GameInfoType));
|
||||
modGame.selected = false;
|
||||
DmWrite(game, 0, &modGame, sizeof(GameInfoType));
|
||||
|
||||
MemHandleUnlock(record);
|
||||
DmReleaseRecord (gameDB, oldIndex, 0);
|
||||
}
|
||||
|
||||
lastIndex = index;
|
||||
SknUpdateList();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Boolean SknProcessArrowAction(UInt16 button) {
|
||||
Boolean handled = false;
|
||||
|
||||
switch (button) {
|
||||
case skinSliderUpArrow:
|
||||
if (gPrefs->listPosition > 0) {
|
||||
gPrefs->listPosition--;
|
||||
SknUpdateList();
|
||||
}
|
||||
handled = true;
|
||||
break;
|
||||
|
||||
case skinSliderDownArrow:
|
||||
RectangleType rArea;
|
||||
UInt16 maxView;
|
||||
|
||||
SknGetListBounds(&rArea, 0);
|
||||
maxView = rArea.extent.y / sknInfoListItemSize;
|
||||
|
||||
if (gPrefs->listPosition < DmNumRecords(gameDB)-maxView) {
|
||||
gPrefs->listPosition++;
|
||||
SknUpdateList();
|
||||
}
|
||||
handled = true;
|
||||
break;
|
||||
}
|
||||
|
||||
return handled;
|
||||
}
|
2808
backends/PalmOS/Src/start.cpp
Normal file
2808
backends/PalmOS/Src/start.cpp
Normal file
File diff suppressed because it is too large
Load diff
89
backends/PalmOS/Src/start.h
Normal file
89
backends/PalmOS/Src/start.h
Normal file
|
@ -0,0 +1,89 @@
|
|||
/* ScummVM - Scumm Interpreter
|
||||
* Copyright (C) 2001 Ludvig Strigeus
|
||||
* Copyright (C) 2001-2003 The ScummVM project
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* $Header$
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __START_H__
|
||||
#define __START_H__
|
||||
|
||||
#define appFileCreator 'ScVM'
|
||||
#define curItemVersion sysMakeROMVersion(2,0,0,0,0)
|
||||
|
||||
typedef struct {
|
||||
Char nameP[32];
|
||||
UInt16 cardNo;
|
||||
LocalID dbID;
|
||||
} SkinInfoType, *SkinInfoPtr;
|
||||
|
||||
typedef struct {
|
||||
|
||||
//skin params
|
||||
SkinInfoType skin; // card where is located the skin
|
||||
Boolean soundClick;
|
||||
//
|
||||
Boolean vibrator;
|
||||
Boolean autoOff;
|
||||
|
||||
UInt16 listPosition;
|
||||
|
||||
struct {
|
||||
UInt16 volRefNum;
|
||||
Boolean moveDB;
|
||||
Boolean deleteDB;
|
||||
Boolean confirmMoveDB;
|
||||
} card;
|
||||
|
||||
Boolean debug;
|
||||
UInt16 debugLevel;
|
||||
Boolean saveConfig;
|
||||
Boolean stdPalette;
|
||||
Boolean autoReset;
|
||||
Boolean demoMode;
|
||||
Boolean fullscreen;
|
||||
|
||||
struct {
|
||||
UInt16 speaker;
|
||||
UInt16 headphone;
|
||||
|
||||
UInt16 master;
|
||||
UInt16 music;
|
||||
UInt16 sfx;
|
||||
} volume;
|
||||
|
||||
struct {
|
||||
// midi
|
||||
Boolean multiMidi;
|
||||
Boolean music;
|
||||
UInt8 driver;
|
||||
UInt8 tempo;
|
||||
// CD audio
|
||||
Boolean MP3;
|
||||
Boolean setDefaultTrackLength;
|
||||
UInt16 defaultTrackLength;
|
||||
UInt16 firstTrack;
|
||||
// sound FX
|
||||
Boolean sfx;
|
||||
} sound;
|
||||
|
||||
} GlobalsPreferenceType, *GlobalsPreferencePtr;
|
||||
|
||||
extern GlobalsPreferencePtr gPrefs;
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue