Added : UX50 support + fullscreen mode, Fixed : overlay, some memory cards related stuffs,...

svn-id: r9757
This commit is contained in:
Chris Apers 2003-08-18 10:47:14 +00:00
parent 9b5eb1137f
commit d4d1286440
4 changed files with 559 additions and 271 deletions

View File

@ -28,23 +28,24 @@ typedef struct {
UInt16 HRrefNum;
UInt16 volRefNum;
UInt16 slkRefNum;
UInt32 slkVersion;
FileRef logFile;
Boolean screenLocked;
Boolean vibrator;
Boolean stdPalette;
Boolean autoReset;
Boolean screenLocked;
Boolean stdPalette;
Coord screenWidth, screenHeight; // with silkarea
Coord screenFullWidth, screenFullHeight; // without silkarea
struct {
UInt8 on;
UInt8 off;
} indicator;
struct {
UInt8 *pageAddr1;
UInt8 *pageAddr2;
} flipping;
struct {
Boolean MP3;
Boolean setDefaultTrackLength;

File diff suppressed because it is too large Load Diff

View File

@ -46,6 +46,7 @@ typedef struct {
OSystem::SoundProc *proc;
void *param;
OSystem::SoundFormat format;
SndStreamRef sndRefNum;
} SoundDataType;
//-- 02-12-17 --////////////////////////////////////////////////////////////////
@ -100,7 +101,7 @@ public:
// Returns true if an event was retrieved.
bool poll_event(Event *event);
void SimulateArrowKeys(Event *event, Int8 iHoriz, Int8 iVert, Boolean repeat);
void SimulateArrowKeys(Event *event, Int8 iHoriz, Int8 iVert);
/** @name Sound */
//@{
@ -164,13 +165,14 @@ public:
// Savefile management
SaveFileManager *get_savefile_manager();
static OSystem *create(UInt16 gfx_mode);
static OSystem *create(UInt16 gfx_mode, bool full_screen);
UInt8 _sndHandle;
Boolean _isSndPlaying;
protected:
bool _overlay_visible;
byte *_tmpScreenP, *_tmpBackupP;
bool _overlayVisible;
private:
typedef void (OSystem_PALMOS::*RendererProc)();
@ -185,16 +187,24 @@ private:
WinHandle _screenH;
WinHandle _offScreenH;
Boolean _fullscreen;
struct {
Coord x;
Coord y;
UInt32 addr;
} _screenOffset;
public:
byte *_screenP;
int _offScreenPitch;
int _screenPitch;
ThreadEmuType _thread[MAX_THREAD]; // 0: midi native, 1:multi-midi (adlib wrapper)
UInt8 _threadCounter;
UInt8 _threadID;
private:
byte *_offScreenP;
byte *_tmpScreenP;
bool _mouseVisible;
bool _mouseDrawn;
@ -205,7 +215,6 @@ private:
};
int _screenWidth, _screenHeight;
bool _overlaySaved;
struct MousePos {
int16 x,y,w,h;
@ -221,7 +230,6 @@ private:
int _current_shake_pos;
int _new_shake_pos;
UInt16 _decaly, _screeny;
Boolean _vibrate;
UInt32 _exit_delay;
@ -271,8 +279,6 @@ private:
eventsEnum _lastEvent;
UInt16 _wideRefNum;
OSystem_PALMOS();
};

View File

@ -93,6 +93,7 @@ typedef struct {
Boolean stdPalette;
Boolean autoReset;
Boolean demoMode;
Boolean fullscreen;
struct {
UInt16 speaker;
@ -201,25 +202,29 @@ static Char itemsType = ITEM_TYPE_UNKNOWN;
***********************************************************************/
static void GBInitAll() {
#ifndef DISABLE_SCUMM
IMuseDigital_initGlobals();
NewGui_initGlobals();
Akos_initGlobals();
Codec47_initGlobals();
Gfx_initGlobals();
Dialogs_initGlobals();
Charset_initGlobals();
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)
#endif
}
static void GBReleaseAll() {
#ifndef DISABLE_SCUMM
IMuseDigital_releaseGlobals();
NewGui_releaseGlobals();
Akos_releaseGlobals();
Codec47_releaseGlobals();
Gfx_releaseGlobals();
Dialogs_releaseGlobals();
Charset_releaseGlobals();
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)
#endif
}
@ -477,14 +482,16 @@ static void SknCopyBits(DmOpenRef skinDBP, DmResID bitmapID, const RectangleType
}
if (ch) {
Coord picth = gVars->screenFullWidth;
dst = (UInt8 *)BmpGetBits(WinGetBitmap(WinGetDisplayWindow()));
dst+= destX + destY * 320;
dst+= destX + destY * picth;
bmpData = (UInt8 *)BmpGetBits(bmpTemp);
src = bmpData + cx + cy * bw;
do {
MemMove(dst, src, cw);
dst += 320;
dst += picth;
src += bw;
} while (--ch);
}
@ -700,7 +707,7 @@ static void GamCloseDatabase(Boolean ignoreCardParams) {
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");
@ -1726,7 +1733,7 @@ static Boolean SoundFormHandleEvent(EventPtr eventP) {
static void MiscOptionsFormSave() {
FieldType *fld1P;
ControlType *cck1P, *cck2P, *cck3P, *cck4P, *cck5P, *cck6P, *cck7P;
ControlType *cck1P, *cck2P, *cck3P, *cck4P, *cck5P, *cck6P, *cck7P, *cck8P;
FormPtr frmP;
fld1P = (FieldType *)GetObjectPtr(MiscOptionsDebugLevelField);
@ -1738,6 +1745,7 @@ static void MiscOptionsFormSave() {
cck5P = (ControlType *)GetObjectPtr(MiscOptionsWriteIniCheckbox);
cck6P = (ControlType *)GetObjectPtr(MiscOptionsAutoResetCheckbox);
cck7P = (ControlType *)GetObjectPtr(MiscOptionsDemoCheckbox);
cck8P = (ControlType *)GetObjectPtr(MiscOptionsFullscreenCheckbox);
frmP = FrmGetActiveForm();
@ -1754,6 +1762,7 @@ static void MiscOptionsFormSave() {
gPrefs->saveConfig = CtlGetValue(cck5P);
gPrefs->autoReset = CtlGetValue(cck6P);
gPrefs->demoMode = CtlGetValue(cck7P);
gPrefs->fullscreen = CtlGetValue(cck8P);
gPrefs->debugLevel = StrAToI(FldGetTextPtr(fld1P));
@ -1775,6 +1784,7 @@ static void MiscOptionsFormInit() {
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);
@ -1818,6 +1828,16 @@ static Boolean MiscOptionsFormHandleEvent(EventPtr eventP) {
return handled;
}
///////////////////////////////////////////////////////////////////////
static 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();
@ -1846,36 +1866,34 @@ static UInt16 CardSlotFormInit(Boolean display, Boolean bDraw) {
while (volIterator != vfsIteratorStop) {
err = VFSVolumeEnumerate(&volRefNum, &volIterator);
if (!err)
{ Char labelP[expCardInfoStringMaxLen+1];
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 (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 (!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 (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++;
}
}
@ -1993,10 +2011,10 @@ static void CardSlotFormExit(Boolean bSave) {
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);
CardSlotCreateDirs();
}
FrmReturnToMain(updateCode);
@ -2541,7 +2559,7 @@ typedef void (*sndStateOffType)(UInt8 /* kind */);
#define aOutSndKindSp (0) /* Speaker volume */
#define aOutSndKindHp (2) /* HeadPhone volume */
////////////////////////////////////////////////////////////
#define MAX_ARG 20
#define MAX_ARG 25
static Boolean checkPath(const Char *pathP) {
FileRef *tmpRef;
@ -2608,23 +2626,22 @@ static void StartScummVM() {
AddArg(&argvP[argc], "-q", (lang + (gameInfoP->language - 1) * 3), &argc);
}
// fullscreen ?
if (gPrefs->fullscreen) {
AddArg(&argvP[argc], "-f", NULL, &argc);
}
// gfx mode
gVars->flipping.pageAddr1 = (UInt8 *)(BmpGetBits(WinGetBitmap(WinGetDisplayWindow())));
gVars->flipping.pageAddr2 = gVars->flipping.pageAddr1; // default if not flipping mode
switch (gameInfoP->gfxMode)
{
case 1:
AddArg(&argvP[argc], "-g", "flipping", &argc);
gVars->flipping.pageAddr1 = (UInt8 *)WinScreenLock(winLockErase);
WinScreenUnlock();
break;
case 2:
AddArg(&argvP[argc], "-g", "dbuffer", &argc);
break;
case 3:
AddArg(&argvP[argc], "-g", "wide", &argc);
gVars->flipping.pageAddr1 = (UInt8 *)WinScreenLock(winLockErase);
WinScreenUnlock();
break;
default:
AddArg(&argvP[argc], "-g", "normal", &argc);
@ -3200,6 +3217,7 @@ static Err AppStartCheckNotify() {
if (!err) {
SysNotifyRegister(cardNo, dbID, sysNotifyVolumeMountedEvent, NULL, sysNotifyNormalPriority, NULL);
SysNotifyRegister(cardNo, dbID, sysNotifyVolumeUnmountedEvent, NULL, sysNotifyNormalPriority, NULL);
SysNotifyRegister(cardNo, dbID, sonySysNotifyMsaEnforceOpenEvent, NULL, sysNotifyNormalPriority, NULL);
}
}
@ -3269,6 +3287,67 @@ static void AppStopMathLib() {
}
}
static Err AppStartCheckScreenSize() {
SonySysFtrSysInfoP sonySysFtrSysInfoP;
Err error = errNone;
// WinGetDisplayExtent(&gVars->screenWidth, &gVars->screenHeight);
// gVars->screenWidth <<= 1;
// gVars->screenHeight <<= 1;
gVars->screenWidth = 320;
gVars->screenHeight = 320;
gVars->screenFullWidth = gVars->screenWidth;
gVars->screenFullHeight = gVars->screenHeight;
if (!(error = FtrGet(sonySysFtrCreator, sonySysFtrNumSysInfoP, (UInt32*)&sonySysFtrSysInfoP))) {
if (sonySysFtrSysInfoP->libr & sonySysFtrSysInfoLibrSilk) {
if ((error = SysLibFind(sonySysLibNameSilk, &gVars->slkRefNum)))
if (error == sysErrLibNotFound)
error = SysLibLoad( sonySysFileTSilkLib, sonySysFileCSilkLib, &gVars->slkRefNum);
if (!error) {
error = FtrGet(sonySysFtrCreator, sonySysFtrNumVskVersion, &gVars->slkVersion);
// Get screen size
if (error) {
// v1 = NR
error = SilkLibOpen(gVars->slkRefNum);
if(!error) {
gVars->slkVersion = vskVersionNum1;
SilkLibEnableResize(gVars->slkRefNum);
SilkLibResizeDispWin(gVars->slkRefNum, silkResizeMax);
HRWinGetWindowExtent(gVars->HRrefNum, &gVars->screenFullWidth, &gVars->screenFullHeight);
SilkLibResizeDispWin(gVars->slkRefNum, silkResizeNormal);
SilkLibDisableResize(gVars->slkRefNum);
}
} else {
// v2 = NX/NZ
// v3 = UX
error = VskOpen(gVars->slkRefNum);
if(!error) {
VskSetState(gVars->slkRefNum, vskStateEnable, (gVars->slkVersion == vskVersionNum2 ? vskResizeVertically : vskResizeHorizontally));
VskSetState(gVars->slkRefNum, vskStateResize, vskResizeNone);
HRWinGetWindowExtent(gVars->HRrefNum, &gVars->screenFullWidth, &gVars->screenFullHeight);
VskSetState(gVars->slkRefNum, vskStateResize, vskResizeMax);
VskSetState(gVars->slkRefNum, vskStateEnable, vskResizeDisable);
}
}
}
}
}
if (error)
gVars->slkRefNum = sysInvalidRefNum;
return error;
}
static void AppStopSilk() {
if (gVars->slkRefNum != sysInvalidRefNum)
SilkLibClose(gVars->slkRefNum);
}
static Err AppStart(void) {
UInt16 dataSize, checkSize = 0;
@ -3283,6 +3362,7 @@ static Err AppStart(void) {
gVars->indicator.off = 0;
gVars->HRrefNum = sysInvalidRefNum;
gVars->volRefNum = sysInvalidRefNum;
gVars->slkRefNum = sysInvalidRefNum;
// allocate prefs space
dataSize = sizeof(GlobalsPreferenceType);
@ -3324,14 +3404,10 @@ static Err AppStart(void) {
error = AppStartCheckHRmode();
if (error) return (error);
error = AppStartLoadSkin();
if (error) return (error);
error = GamOpenDatabase();
if (error) return (error);
GamImportDatabase(false);
if (gPrefs->card.volRefNum != sysInvalidRefNum) { // if volref previously defined, check if it's a valid one
VolumeInfoType volInfo;
Err err = VFSVolumeInfo(gPrefs->card.volRefNum, &volInfo);
@ -3341,7 +3417,12 @@ static Err AppStart(void) {
else
gPrefs->card.volRefNum = parseCards(); //parseCards(0); // get first volref
error = GamOpenDatabase();
if (error) return (error);
GamImportDatabase(false);
AppStartCheckNotify(); // not fatal error if not avalaible
AppStartCheckScreenSize();
return error;
}
@ -3374,6 +3455,7 @@ static Err AppStopCheckNotify()
if (!err) {
SysNotifyUnregister(cardNo, dbID, sysNotifyVolumeUnmountedEvent, sysNotifyNormalPriority);
SysNotifyUnregister(cardNo, dbID, sysNotifyVolumeMountedEvent, sysNotifyNormalPriority);
// sonySysNotifyMsaEnforceOpenEvent
}
}
@ -3394,6 +3476,7 @@ static void AppStop(void) {
SavePrefs();
// stop all
AppStopSilk();
AppStopCheckNotify();
AppStopMathLib();
AppStopHRMode();
@ -3439,10 +3522,13 @@ static void AppLaunchCmdNotify(UInt16 LaunchFlags, SysNotifyParamType * pData)
gPrefs->card.volRefNum = notifyDetailsP->volRefNum;
if (FrmGetFormPtr(MainForm) == FrmGetActiveForm())
if (gPrefs->card.volRefNum != sysInvalidRefNum)
if (gPrefs->card.volRefNum != sysInvalidRefNum) {
CardSlotCreateDirs();
FrmUpdateForm(MainForm, frmRedrawUpdateMSImport);
}
}
}
break;
case sysNotifyVolumeUnmountedEvent:
if (gPrefs) {
@ -3456,6 +3542,10 @@ static void AppLaunchCmdNotify(UInt16 LaunchFlags, SysNotifyParamType * pData)
}
}
break;
case sonySysNotifyMsaEnforceOpenEvent:
// what am i supposed to do here ???
break;
}
}
@ -3509,4 +3599,4 @@ end:
UInt32 PilotMain( UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags)
{
return ScummVMPalmMain(cmd, cmdPBP, launchFlags);
}
}