Initial commit of the wince-gcc re-port

svn-id: r24212
This commit is contained in:
Kostas Nakos 2006-10-08 18:15:18 +00:00
parent 1307f597a6
commit 4524b49872
17 changed files with 384 additions and 339 deletions

View File

@ -21,11 +21,16 @@
#ifdef WIN32
#ifdef _WIN32_WCE
#include <windows.h>
#endif
#include "common/stdafx.h"
#include "backends/fs/abstract-fs.h"
#include <stdio.h>
#include <stdlib.h>
#ifndef _WIN32_WCE
#include <windows.h>
#endif
#include <tchar.h>
/*

View File

@ -64,6 +64,11 @@ static HANDLE (WINAPI* _SetPowerRequirement)(PVOID,int,ULONG,PVOID,ULONG) = NULL
static DWORD (WINAPI* _ReleasePowerRequirement)(HANDLE) = NULL;
static HANDLE _hPowerManagement = NULL;
static DWORD _lastTime = 0;
#ifdef __GNUC__
extern "C" void WINAPI SystemIdleTimerReset(void);
#define SPI_GETPLATFORMTYPE 257
#endif
#define TIMER_TRIGGER 9000
@ -82,7 +87,7 @@ void CEDevice::init() {
}
if (_SetPowerRequirement)
_hPowerManagement = _SetPowerRequirement(TEXT("BKL1:"), 0, 1, NULL, 0);
_hPowerManagement = _SetPowerRequirement((PVOID) TEXT("BKL1:"), 0, 1, (PVOID) NULL, 0);
_lastTime = GetTickCount();
}
@ -154,7 +159,7 @@ bool CEDevice::isSmartphone() {
BOOL result = SystemParametersInfo(SPI_GETPLATFORMTYPE, sizeof(platformType), platformType, 0);
if (!result && GetLastError() == ERROR_ACCESS_DENIED)
return true;
return (wcsnicmp(platformType, TEXT("SmartPhone"), 10) == 0);
return (_wcsnicmp(platformType, TEXT("SmartPhone"), 10) == 0);
#endif
}

View File

@ -28,7 +28,7 @@
#include "common/system.h"
#include "common/str.h"
#include <gx.h>
//#include <gx.h>
class CEDevice {
public:

View File

@ -33,6 +33,7 @@ using GUI::kCloseCmd;
using GUI::StaticTextWidget;
using GUI::kTextAlignCenter;
using GUI::CommandSender;
using GUI::Actions;
enum {
kMapCmd = 'map ',

View File

@ -83,7 +83,7 @@ void CELauncherDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 d
}
}
void CELauncherDialog::addCandidate(String &path, DetectedGameList &candidates) {
void CELauncherDialog::addCandidate(Common::String path, DetectedGameList &candidates) {
int idx = -1;
DetectedGame result;
@ -119,7 +119,7 @@ void CELauncherDialog::addCandidate(String &path, DetectedGameList &candidates)
// The auto detector or the user made a choice.
// Pick a domain name which does not yet exist (after all, we
// are *adding* a game to the config, not replacing).
String domain(result.gameid);
Common::String domain(result.gameid);
if (ConfMan.hasGameDomain(domain)) {
char suffix = 'a';
domain += suffix;
@ -150,7 +150,7 @@ void CELauncherDialog::automaticScanDirectory(const FilesystemNode &node) {
FSList files;
node.listDir(files, FilesystemNode::kListFilesOnly);
DetectedGameList candidates(PluginManager::instance().detectGames(files));
addCandidate(node.path(), candidates);
CELauncherDialog::addCandidate((Common::String) node.path(), candidates);
// Then recurse on the subdirectories
FSList dirs;
node.listDir(dirs, FilesystemNode::kListDirectoriesOnly);

View File

@ -33,7 +33,7 @@ public:
virtual void handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data);
protected:
void addGame();
void addCandidate(String &path, DetectedGameList &candidates);
void addCandidate(Common::String path, DetectedGameList &candidates);
void automaticScanDirectory(const FilesystemNode &node);
};

View File

@ -0,0 +1,79 @@
# ScummVM Makefile for Windows CE port
# Uses the VLC toolchain
# $URL:$
# $Id:$
srcdir = ../../..
VPATH = $(srcdir)
#HAVE_GCC3 = false
#DISABLE_SCUMM = 1
#DISABLE_SIMON = 1
#DISABLE_SKY = 1
#DISABLE_QUEEN = 1
#DISABLE_GOB = 1
DISABLE_LURE = 1
DISABLE_CINE = 1
DISABLE_SAGA = 1
#DISABLE_KYRA = 1
DISABLE_AGI = 1
#DISABLE_AGOS = 1
#DISABLE_SWORD1 = 1
#DISABLE_SWORD2 = 1
CXX = arm-wince-pe-g++
LD = arm-wince-pe-g++
AR = arm-wince-pe-ar cru
RANLIB = arm-wince-pe-ranlib
STRIP = arm-wince-pe-strip
WINDRES= arm-wince-pe-windres
MKDIR = mkdir -p
RM = rm -f
RM_REC = rm -rf
ECHO = echo -n
CAT = cat
DEFINES := -D_WIN32_WCE=300 -DARM -D__ARM__ -D_ARM_ -DUNICODE -DSCUMM_NEED_ALIGNMENT -DFPM_DEFAULT -DUSE_MAD -DNONSTANDARD_PORT -DUSE_TREMOR -DUSE_VORBIS -DUSE_MPEG2 -DWIN32 -DUSE_ZLIB
DEFINES += -D__stdcall= -Dcdecl= -D__cdecl__= -D__cdecl= -Wno-multichar
DEFINES += -O2
DEFINES += -DDEBUG -DUSE_WINDBG -g
INCLUDES := -I$(srcdir) -I. -I$(srcdir)/engines -Ilibs/include -Ilibs/include/sdl -ICEgui -ICEkeys
CFLAGS :=
CXXFLAGS := $(CFLAGS)
LDFLAGS := -Llibs/lib -L/usr/local/wince/cross-tools/lib
LIBS := -lSDL -lzlib -lmad -lmpeg2 -ltremorce --entry WinMainCRTStartup
TARGET = scummvm.exe
OBJS :=
MODULE_DIRS += .
OBJS += CEActionsPocket.o CEDevice.o CEKeysDialog.o CEScaler.o \
CEActionsSmartphone.o CELauncherDialog.o wince-sdl.o
OBJS += CEgui/GUIElement.o CEgui/Panel.o CEgui/SDL_ImageResource.o \
CEgui/ItemAction.o CEgui/PanelItem.o CEgui/Toolbar.o \
CEgui/ItemSwitch.o CEgui/PanelKeyboard.o CEgui/ToolbarHandler.o
OBJS += CEkeys/EventsBuffer.o
OBJS += $(srcdir)/gui/Actions.o $(srcdir)/gui/Key.o $(srcdir)/gui/KeysDialog.o
OBJS += ../sdl/sdl.o ../sdl/graphics.o ../sdl/events.o
OBJS += missing/missing.o
OBJS += PocketSCUMM.o
include $(srcdir)/Makefile.common
all: dist
dist: $(TARGET)
bzip2 -fvk $(TARGET)
$(STRIP) $(TARGET)
PocketSCUMM.o:
$(WINDRES) $*.rc $@
$(TARGET): $(OBJS)
$(LD) $^ $(LDFLAGS) $(LIBS) -o $@ -Wl,-Map,scummvm.exe.map -Wl,--stack,65536

View File

@ -1,145 +1,24 @@
//Microsoft eMbedded Visual C++ generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "newres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// French (France) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA)
#ifdef _WIN32
LANGUAGE LANG_FRENCH, SUBLANG_FRENCH
#pragma code_page(1252)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_POCKETSCUMM ICON DISCARDABLE "icons/scumm_icon.ico"
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""newres.h""\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Menubar
//
IDR_SMARTFON_MENUBAR_GAMES MENU DISCARDABLE
BEGIN
POPUP "Games"
BEGIN
POPUP "Play"
BEGIN
MENUITEM SEPARATOR
END
MENUITEM SEPARATOR
MENUITEM "Scan", IDM_SMARTFON_SCAN
MENUITEM SEPARATOR
MENUITEM "Quit", IDM_SMARTFON_QUIT
END
POPUP "Options"
BEGIN
POPUP "Keys Mapping"
BEGIN
MENUITEM SEPARATOR
END
MENUITEM "Sound", IDM_SMARTFON_SOUND
MENUITEM "Help", IDM_SMARTFON_HELP
END
END
/////////////////////////////////////////////////////////////////////////////
//
// Data
//
IDR_SMARTFON_MENUBAR_GAMES SHMENUBAR DISCARDABLE
BEGIN
IDR_SMARTFON_MENUBAR_GAMES, 2,
I_IMAGENONE, ID_MENU_GAMES, TBSTATE_ENABLED,
TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, IDS_CAP_MENUITEM40002, 0, 0,
I_IMAGENONE, ID_MENU_OPTIONS, TBSTATE_ENABLED,
TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, IDS_CAP_OPTIONS, 0, 1,
END
/////////////////////////////////////////////////////////////////////////////
//
// BINARY
//
PANEL_GENERIC BINARY DISCARDABLE "images\\panelbig.bmp"
PANEL_KEYBOARD BINARY DISCARDABLE "images\\keyboard.bmp"
ITEM_SKIP BINARY DISCARDABLE "images\\Action.bmp"
ITEM_OPTIONS BINARY DISCARDABLE "images\\DiskwFolder.bmp"
ITEM_SOUND_ON BINARY DISCARDABLE "images\\SoundOn.bmp"
ITEM_SOUND_OFF BINARY DISCARDABLE "images\\SoundOff.bmp"
ITEM_VIEW_PORTRAIT BINARY DISCARDABLE "images\\MonkeyPortrait.bmp"
ITEM_VIEW_LANDSCAPE BINARY DISCARDABLE "images\\MonkeyLandscape.bmp"
ITEM_BINDKEYS BINARY DISCARDABLE "images\\bindkeys.bmp"
PANEL_GENERIC BINARY DISCARDABLE "images/panelbig.bmp"
PANEL_KEYBOARD BINARY DISCARDABLE "images/keyboard.bmp"
ITEM_SKIP BINARY DISCARDABLE "images/Action.bmp"
ITEM_OPTIONS BINARY DISCARDABLE "images/DiskwFolder.bmp"
ITEM_SOUND_ON BINARY DISCARDABLE "images/SoundOn.bmp"
ITEM_SOUND_OFF BINARY DISCARDABLE "images/SoundOff.bmp"
ITEM_VIEW_PORTRAIT BINARY DISCARDABLE "images/MonkeyPortrait.bmp"
ITEM_VIEW_LANDSCAPE BINARY DISCARDABLE "images/MonkeyLandscape.bmp"
ITEM_BINDKEYS BINARY DISCARDABLE "images/bindkeys.bmp"
HI_RES_AWARE CEUX {1}
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE DISCARDABLE
BEGIN
IDS_CAP_MENUITEM40002 "Games"
IDS_CAP_OPTIONS "Options"
END
#endif // French (France) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View File

@ -9,7 +9,11 @@
#include <string.h>
#include <stdlib.h>
#include "sys/stat.h"
#ifndef __GNUC__
#include "sys/time.h"
#else
#include <stdio.h>
#endif
#include "time.h"
#include "dirent.h"
@ -26,9 +30,159 @@ char *strdup(const char *strSource);
#endif
/* Limited dirent implementation. Used by UI.C and DEVICES.C */
#ifdef __GNUC__
#define EXT_C extern "C"
#else
#define EXT_C
#endif
// common missing functions required by both gcc and evc
void *bsearch(const void *key, const void *base, size_t nmemb,
size_t size, int (*compar)(const void *, const void *)) {
size_t i;
for (i=0; i<nmemb; i++)
if (compar(key, (void*)((size_t)base + size * i)) == 0)
return (void*)((size_t)base + size * i);
return NULL;
}
static WIN32_FIND_DATA wfd;
/* Very limited implementation of stat. Used by UI.C, MEMORY-P.C (latter is not critical) */
int stat(const char *fname, struct stat *ss)
{
TCHAR fnameUnc[MAX_PATH+1];
HANDLE handle;
int len;
if(fname == NULL || ss == NULL)
return -1;
/* Special case (dummy on WinCE) */
len = strlen(fname);
if(len >= 2 && fname[len-1] == '.' && fname[len-2] == '.' &&
(len == 2 || fname[len-3] == '\\'))
{
/* That's everything implemented so far */
memset(ss, 0, sizeof(struct stat));
ss->st_size = 1024;
ss->st_mode |= S_IFDIR;
return 0;
}
MultiByteToWideChar(CP_ACP, 0, fname, -1, fnameUnc, MAX_PATH);
handle = FindFirstFile(fnameUnc, &wfd);
if(handle == INVALID_HANDLE_VALUE)
return -1;
else
{
/* That's everything implemented so far */
memset(ss, 0, sizeof(struct stat));
ss->st_size = wfd.nFileSizeLow;
if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
ss->st_mode |= S_IFDIR;
FindClose(handle);
}
return 0;
}
/* Limited implementation of time.h. time_t formula is possibly incorrect. */
EXT_C time_t time(time_t* res)
{
time_t t;
SYSTEMTIME st;
GetLocalTime(&st);
t = (time_t)(((((((st.wYear-1970)*12+st.wMonth)*31+st.wDay)*7+st.wDayOfWeek)*24+st.wHour)*60+st.wMinute)*60+st.wSecond);
if(res)
*res = t;
return t;
}
EXT_C struct tm* localtime(time_t* timer)
{
static struct tm tmLocalTime;
unsigned long rem = *timer;
tmLocalTime.tm_sec = (short)(rem % 60);
rem /= 60;
tmLocalTime.tm_min = (short)(rem % 60);
rem /= 60;
tmLocalTime.tm_hour = (short)(rem % 24);
rem /= 24;
tmLocalTime.tm_mday = (short)(rem % 7);
rem /= 7;
tmLocalTime.tm_mday = (short)(rem % 31);
rem /= 31;
tmLocalTime.tm_mon = (short)(rem % 12);
rem /= 12;
tmLocalTime.tm_year = (short)(rem+1970);
return &tmLocalTime;
}
char cwd[MAX_PATH+1] = "";
EXT_C char *getcwd(char *buffer, int maxlen)
{
TCHAR fileUnc[MAX_PATH+1];
char* plast;
if(cwd[0] == 0)
{
GetModuleFileName(NULL, fileUnc, MAX_PATH);
WideCharToMultiByte(CP_ACP, 0, fileUnc, -1, cwd, MAX_PATH, NULL, NULL);
plast = strrchr(cwd, '\\');
if(plast)
*plast = 0;
/* Special trick to keep start menu clean... */
if(_stricmp(cwd, "\\windows\\start menu") == 0)
strcpy(cwd, "\\Apps");
}
if(buffer)
strncpy(buffer, cwd, maxlen);
return cwd;
}
#ifdef __GNUC__
#undef GetCurrentDirectory
#endif
EXT_C void GetCurrentDirectory(int len, char *buf)
{
getcwd(buf,len);
};
/*
Windows CE fopen has non-standard behavior -- not
fully qualified paths refer to root folder rather
than current folder (concept not implemented in CE).
*/
#undef fopen
EXT_C FILE *wce_fopen(const char* fname, const char* fmode)
{
char fullname[MAX_PATH+1];
if(!fname || fname[0] == '\0')
return NULL;
if(fname[0] != '\\' && fname[0] != '/')
{
getcwd(fullname, MAX_PATH);
strncat(fullname, "\\", MAX_PATH-strlen(fullname)-1);
strncat(fullname, fname, MAX_PATH-strlen(fullname)-strlen(fname));
return fopen(fullname, fmode);
}
else
return fopen(fname, fmode);
}
// evc only functions follow
#ifndef __GNUC__
/* Limited dirent implementation. Used by UI.C and DEVICES.C */
DIR* opendir(const char* fname)
{
DIR* pdir;
@ -129,45 +283,6 @@ int closedir(DIR* dir)
return 1;
}
/* Very limited implementation of stat. Used by UI.C, MEMORY-P.C (latter is not critical) */
int stat(const char *fname, struct stat *ss)
{
TCHAR fnameUnc[MAX_PATH+1];
HANDLE handle;
int len;
if(fname == NULL || ss == NULL)
return -1;
/* Special case (dummy on WinCE) */
len = strlen(fname);
if(len >= 2 && fname[len-1] == '.' && fname[len-2] == '.' &&
(len == 2 || fname[len-3] == '\\'))
{
/* That's everything implemented so far */
memset(ss, 0, sizeof(struct stat));
ss->st_size = 1024;
ss->st_mode |= S_IFDIR;
return 0;
}
MultiByteToWideChar(CP_ACP, 0, fname, -1, fnameUnc, MAX_PATH);
handle = FindFirstFile(fnameUnc, &wfd);
if(handle == INVALID_HANDLE_VALUE)
return -1;
else
{
/* That's everything implemented so far */
memset(ss, 0, sizeof(struct stat));
ss->st_size = wfd.nFileSizeLow;
if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
ss->st_mode |= S_IFDIR;
FindClose(handle);
}
return 0;
}
/* Remove file by name */
int remove(const char* path)
{
@ -264,70 +379,6 @@ char *strdup(const char *strSource)
return buffer;
}
/* Used in UI.C */
char cwd[MAX_PATH+1] = "";
char *getcwd(char *buffer, int maxlen)
{
TCHAR fileUnc[MAX_PATH+1];
char* plast;
if(cwd[0] == 0)
{
GetModuleFileName(NULL, fileUnc, MAX_PATH);
WideCharToMultiByte(CP_ACP, 0, fileUnc, -1, cwd, MAX_PATH, NULL, NULL);
plast = strrchr(cwd, '\\');
if(plast)
*plast = 0;
/* Special trick to keep start menu clean... */
if(_stricmp(cwd, "\\windows\\start menu") == 0)
strcpy(cwd, "\\Apps");
}
if(buffer)
strncpy(buffer, cwd, maxlen);
return cwd;
}
void GetCurrentDirectory(int len, char *buf)
{
getcwd(buf,len);
};
/* Limited implementation of time.h. time_t formula is possibly incorrect. */
time_t time(time_t* res)
{
time_t t;
SYSTEMTIME st;
GetLocalTime(&st);
t = (time_t)(((((((st.wYear-1970)*12+st.wMonth)*31+st.wDay)*7+st.wDayOfWeek)*24+st.wHour)*60+st.wMinute)*60+st.wSecond);
if(res)
*res = t;
return t;
}
struct tm* localtime(time_t* timer)
{
static struct tm tmLocalTime;
unsigned long rem = *timer;
tmLocalTime.tm_sec = (short)(rem % 60);
rem /= 60;
tmLocalTime.tm_min = (short)(rem % 60);
rem /= 60;
tmLocalTime.tm_hour = (short)(rem % 24);
rem /= 24;
tmLocalTime.tm_mday = (short)(rem % 7);
rem /= 7;
tmLocalTime.tm_mday = (short)(rem % 31);
rem /= 31;
tmLocalTime.tm_mon = (short)(rem % 12);
rem /= 12;
tmLocalTime.tm_year = (short)(rem+1970);
return &tmLocalTime;
}
/* Very limited implementation of sys/time.h */
void gettimeofday(struct timeval* tp, void* dummy)
{
@ -345,30 +396,6 @@ void usleep(long usec)
Sleep(msec);
}
/*
Windows CE fopen has non-standard behavior -- not
fully qualified paths refer to root folder rather
than current folder (concept not implemented in CE).
*/
#undef fopen
FILE* wce_fopen(const char* fname, const char* fmode)
{
char fullname[MAX_PATH+1];
if(!fname || fname[0] == '\0')
return NULL;
if(fname[0] != '\\' && fname[0] != '/')
{
getcwd(fullname, MAX_PATH);
strncat(fullname, "\\", MAX_PATH-strlen(fullname)-1);
strncat(fullname, fname, MAX_PATH-strlen(fullname)-strlen(fname));
return fopen(fullname, fmode);
}
else
return fopen(fname, fmode);
}
/* This may provide for better sync mechanism */
unsigned int clock()
{
@ -399,16 +426,6 @@ char* getenv(char* name)
return "";
}
void *bsearch(const void *key, const void *base, size_t nmemb,
size_t size, int (*compar)(const void *, const void *)) {
size_t i;
for (i=0; i<nmemb; i++)
if (compar(key, (void*)((size_t)base + size * i)) == 0)
return (void*)((size_t)base + size * i);
return NULL;
}
#if _WIN32_WCE < 300 || defined(_TEST_HPC_STDIO)
void *calloc(size_t n, size_t s) {
@ -642,3 +659,40 @@ long int strtol(const char *nptr, char **endptr, int base) {
#endif
// gcc build only functions follow
#else // defined(__GNUC__)
int islower(int c)
{
return (c>='a' && c<='z');
}
int isspace(int c)
{
return (c==' ' || c=='\f' || c=='\n' || c=='\r' || c=='\t' || c=='\v');
}
int isalpha(int c)
{
return (islower(c) || (c>='A' && c<='Z'));
}
int isalnum(int c)
{
return (isalpha(c) || (c>='0' && c<='9'));
}
int isprint(int c)
{
static char punct[] = "!\"#%&'();<=>?[\\]*+,-./:^_{|}~";
int i = 0, flag = 0;
while ((punct[i] != 0) && (flag = (punct[i] != c)))
i++;
return (isalnum(c) || flag);
}
extern "C" int atexit(void (*function)(void))
{
return 0;
}
#endif

View File

@ -16,8 +16,14 @@ struct tm
short tm_sec;
};
time_t time(time_t* dummy);
struct tm* localtime(time_t* dummy);
#ifdef __GNUC__
#define EXT_C extern "C"
#else
#define EXT_C
#endif
EXT_C time_t time(time_t* dummy);
EXT_C struct tm* localtime(time_t* dummy);
unsigned int clock();

View File

@ -43,10 +43,23 @@ char *strpbrk(const char *s, const char *accept);
#ifdef _WIN32_WCE
void *bsearch(const void *, const void *, size_t, size_t, int (*x) (const void *, const void *));
char *getcwd(char *buf, int size);
void GetCurrentDirectory(int len, char *buf);
#define INVALID_FILE_ATTRIBUTES 0xffffffff
#ifndef __GNUC__
void *bsearch(const void *, const void *, size_t, size_t, int (*x) (const void *, const void *));
char *getcwd(char *buf, int size);
typedef int ptrdiff_t;
void GetCurrentDirectory(int len, char *buf);
#define INVALID_FILE_ATTRIBUTES 0xffffffff
#else
#include <math.h>
#undef GetCurrentDirectory
extern "C" void GetCurrentDirectory(int len, char *buf);
#define stricmp _stricmp
#define strnicmp _strnicmp
#define snprintf _snprintf
#define strdup _strdup
#define fopen wce_fopen
#endif
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
@ -59,13 +72,11 @@ void GetCurrentDirectory(int len, char *buf);
#include <assert.h>
#include <mmsystem.h>
#include <ctype.h>
#include <Winuser.h>
#include <direct.h>
#include <time.h>
void drawError(char*);
#define vsnprintf _vsnprintf
typedef int ptrdiff_t;
#endif

View File

@ -1,14 +1,6 @@
//{{NO_DEPENDENCIES}}
// Microsoft eMbedded Visual C++ generated include file.
// Used by PocketSCUMM.rc
//
#define IDI_POCKETSCUMM 101
#define IDR_SMARTFON_MENUBAR_GAMES 102
#define IDR_SMARTFON_MENUBAR_OPTIONS 103
#define IDB_LOGO 106
#define IMAGE_PANEL 109
#define PANEL_GENERIC 109
#define IMAGE_KEYBOARD 110
#define PANEL_KEYBOARD 110
#define ITEM_SKIP 114
#define ITEM_OPTIONS 115
@ -17,23 +9,3 @@
#define ITEM_VIEW_PORTRAIT 120
#define ITEM_VIEW_LANDSCAPE 122
#define ITEM_BINDKEYS 125
#define IDS_CAP_MENUITEM40002 40003
#define ID_MENU_GAMES 40006
#define IDM_SMARTFON_SCAN 40007
#define IDM_SMARTFON_QUIT 40009
#define IDS_CAP_OPTIONS 40015
#define ID_MENU_OPTIONS 40016
#define IDM_SMARTFON_MUSIC 40017
#define IDM_SMARTFON_SOUND 40017
#define IDM_SMARTFON_HELP 40021
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 126
#define _APS_NEXT_COMMAND_VALUE 40022
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

View File

@ -119,10 +119,8 @@ bool isSmartphone() {
return _hasSmartphoneResolution;
}
// ********************************************************************************************
// MAIN
#ifndef __GNUC__
int handleException(EXCEPTION_POINTERS *exceptionPointers) {
CEException::writeException(TEXT("\\scummvmCrash"), exceptionPointers);
drawError("Unrecoverable exception occurred - see crash dump in latest \\scummvmCrash file");
@ -133,28 +131,37 @@ int handleException(EXCEPTION_POINTERS *exceptionPointers) {
exit(0);
return EXCEPTION_EXECUTE_HANDLER;
}
#endif
OSystem *OSystem_WINCE3_create() {
return new OSystem_WINCE3();
}
int SDL_main(int argc, char **argv) {
#ifdef __GNUC__
// Due to incomplete crt0.o implementation, we go through the constructor function
// list provided by the linker and init all of them
// thanks to joostp and DJWillis
extern void (*__CTOR_LIST__)() ;
void (**constructor)() = &__CTOR_LIST__ ;
constructor++ ;
while(*constructor) {
(*constructor)() ;
constructor++ ;
}
#endif
CEDevice::init();
OSystem_WINCE3::initScreenInfos();
/* Sanity check */
//#ifndef WIN32_PLATFORM_WFSP
// if (CEDevice::hasSmartphoneResolution()) {
// MessageBox(NULL, TEXT("This build was not compiled with Smartphone support"), TEXT("ScummVM error"), MB_OK | MB_ICONERROR);
// return 0;
// }
//#endif
/* Avoid print problems - this file will be put in RAM anyway */
stdout_file = fopen("\\scummvm_stdout.txt", "w");
stderr_file = fopen("\\scummvm_stderr.txt", "w");
int res = 0;
#ifndef DEBUG
#if !defined(DEBUG) && !defined(__GNUC__)
__try {
#endif
g_system = OSystem_WINCE3_create();
@ -162,8 +169,9 @@ int SDL_main(int argc, char **argv) {
// Invoke the actual ScummVM main entry point:
res = scummvm_main(argc, argv);
//res = scummvm_main(0, NULL);
g_system->quit(); // TODO: Consider removing / replacing this!
#ifndef DEBUG
#if !defined(DEBUG) && !defined(__GNUC__)
}
__except (handleException(GetExceptionInformation())) {
}
@ -574,14 +582,14 @@ bool OSystem_WINCE3::checkOggHighSampleRate() {
if (!ov_open(testFile, test_ov_file, NULL, 0)) {
bool highSampleRate = (ov_info(test_ov_file, -1)->rate == 22050);
ov_clear(test_ov_file);
delete test_ov_file;
delete test_ov_file;
return highSampleRate;
}
}
// Do not test for OGG samples - too big and too slow anyway :)
delete test_ov_file;
delete test_ov_file;
return false;
}
#endif
@ -1304,12 +1312,14 @@ void OSystem_WINCE3::update_keyboard() {
if (_monkeyKeyboard && !_isSmartphone)
if (!_panelVisible || _toolbarHandler.activeName() != NAME_PANEL_KEYBOARD)
swap_panel();
#ifndef DISABLE_SCUMM
if (_monkeyKeyboard && Scumm::g_scumm->VAR_ROOM != 0xff && Scumm::g_scumm && Scumm::g_scumm->VAR(Scumm::g_scumm->VAR_ROOM) != 108 &&
Scumm::g_scumm->VAR(Scumm::g_scumm->VAR_ROOM) != 90) {
// Switch back to the normal panel now that the keyboard is not used anymore
_monkeyKeyboard = false;
_toolbarHandler.setActive(NAME_MAIN_PANEL);
}
#endif
}
void OSystem_WINCE3::internUpdateScreen() {
@ -2042,7 +2052,7 @@ bool OSystem_WINCE3::pollEvent(Event &event) {
if (_modeChanged) {
_modeChanged = false;
event.type = EVENT_SCREEN_CHANGED;
screenChangeCount++;
_screenChangeCount++;
return true;
}

View File

@ -30,8 +30,8 @@
#include "backends/intern.h"
#include "backends/platform/sdl/sdl-common.h"
#include "CEgui.h"
#include "CEkeys.h"
#include "CEGUI.h"
#include "CEKeys.h"
#include "CEDevice.h"
#include "CEScaler.h"

View File

@ -119,8 +119,10 @@
#define SCUMM_LITTLE_ENDIAN
#define FORCEINLINE __forceinline
#define NORETURN _declspec(noreturn)
#ifndef __GNUC__
#define FORCEINLINE __forceinline
#define NORETURN _declspec(noreturn)
#endif
#define PLUGIN_EXPORT __declspec(dllexport)
#if _WIN32_WCE < 300
@ -133,11 +135,6 @@
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
#if !defined(SDL_COMPILEDVERSION) || (SDL_COMPILEDVERSION < 1210)
typedef signed long int32_t;
typedef unsigned long uint32_t;
#endif
#elif defined(_MSC_VER)
#define scumm_stricmp stricmp

View File

@ -25,6 +25,11 @@
#include "common/system.h"
#include "gui/debugger.h"
#ifdef _WIN32_WCE
// This is required for the debugger attachment
extern bool isSmartphone(void);
#endif
namespace Common {
//

View File

@ -295,10 +295,6 @@ void ScummEngine::processInput() {
#ifdef _WIN32_WCE
if (lastKeyHit == KEY_ALL_SKIP) {
// Skip cutscene
if (_smushActive || vm.cutScenePtr[vm.cutSceneStackPointer])
lastKeyHit = (VAR_CUTSCENEEXIT_KEY != 0xFF) ? (uint)VAR(VAR_CUTSCENEEXIT_KEY) : 27;
else
// Skip talk
if (VAR_TALKSTOP_KEY != 0xFF && _talkDelay > 0)
lastKeyHit = (uint)VAR(VAR_TALKSTOP_KEY);
@ -337,6 +333,7 @@ void ScummEngine_v7::processKeyboard(int lastKeyHit) {
return;
}
#ifndef _WIN32_WCE
if (VAR_CUTSCENEEXIT_KEY != 0xFF && lastKeyHit == VAR(VAR_CUTSCENEEXIT_KEY)) {
// Skip cutscene (or active SMUSH video).
if (_smushActive) {
@ -351,6 +348,30 @@ void ScummEngine_v7::processKeyboard(int lastKeyHit) {
_mouseAndKeyboardStat = lastKeyHit;
return;
}
#else
// On WinCE we've also got one special for skipping cutscenes or dialog, whatever is appropriate
// Since _smushActive is not a member of the base case class ScummEngine::, we detect here if we're
// playing a cutscene and skip it; else we forward the keystroke through to ScummEngine::processInput.
if (lastKeyHit == KEY_ALL_SKIP || (VAR_CUTSCENEEXIT_KEY != 0xFF && lastKeyHit == VAR(VAR_CUTSCENEEXIT_KEY))) {
int bail = 1;
if (_smushActive) {
if (_game.id == GID_FT) {
_insane->escapeKeyHandler();
bail = 0;
} else
_smushVideoShouldFinish = true;
}
if ((!_smushActive && vm.cutScenePtr[vm.cutSceneStackPointer]) || _smushVideoShouldFinish) {
abortCutscene();
bail = 0;
}
if (!bail) {
_mouseAndKeyboardStat = (VAR_CUTSCENEEXIT_KEY != 0xFF) ? (uint)VAR(VAR_CUTSCENEEXIT_KEY) : 27;
return;
}
}
#endif
// Fall back to V6 behavior
ScummEngine_v6::processKeyboard(lastKeyHit);