@@ -54,10 +54,13 @@ const char *ResourceHandler::determineMimeType(Common::String &filename) {

void ResourceHandler::handle(Client &client) {
Common::String filename = client.path();
filename.deleteChar(0);

// remove leading slash
if (filename.size() > 0 && filename[0] == '/')
filename.deleteChar(0);

// if archive hidden file is requested, ignore
if (filename.size() && filename[0] == '.')
if (filename.size() > 0 && filename[0] == '.')
return;

// if file not found, don't set handler either
@@ -205,7 +205,9 @@ void OSystem_Win32::logMessage(LogMessageType::Type type, const char *message) {
OSystem_SDL::logMessage(type, message);

#if defined( USE_WINDBG )
OutputDebugString(message);
TCHAR *tMessage = Win32::stringToTchar(message);
OutputDebugString(tMessage);
free(tMessage);
#endif
}

@@ -368,7 +368,6 @@ int QuickTimeParser::readTRAK(Atom atom) {
Track *track = new Track();

track->codecType = CODEC_TYPE_MOV_OTHER;
track->startTime = 0; // XXX: check
_tracks.push_back(track);

return readDefault(atom);
@@ -837,7 +836,6 @@ QuickTimeParser::Track::Track() {
codecType = CODEC_TYPE_MOV_OTHER;
frameCount = 0;
duration = 0;
startTime = 0;
mediaDuration = 0;
}

@@ -93,7 +93,7 @@ class QuickTimeParser {

struct TimeToSampleEntry {
int count;
int duration;
int duration; // media time
};

struct SampleToChunkEntry {
@@ -103,9 +103,9 @@ class QuickTimeParser {
};

struct EditListEntry {
uint32 trackDuration;
uint32 timeOffset;
int32 mediaTime;
uint32 trackDuration; // movie time
uint32 timeOffset; // movie time
int32 mediaTime; // media time
Rational mediaRate;
};

@@ -148,7 +148,7 @@ class QuickTimeParser {
uint32 *sampleSizes;
uint32 keyframeCount;
uint32 *keyframes;
int32 timeScale;
int32 timeScale; // media time

uint16 width;
uint16 height;
@@ -158,18 +158,17 @@ class QuickTimeParser {

Common::Array<EditListEntry> editList;

uint32 frameCount;
uint32 duration;
uint32 mediaDuration;
uint32 startTime;
uint32 frameCount; // from stts
uint32 duration; // movie time
uint32 mediaDuration; // media time
Rational scaleFactorX;
Rational scaleFactorY;
};

virtual SampleDesc *readSampleDesc(Track *track, uint32 format, uint32 descSize) = 0;

uint32 _timeScale;
uint32 _duration;
uint32 _timeScale; // movie time
uint32 _duration; // movie time
Rational _scaleFactorX;
Rational _scaleFactorY;
Array<Track *> _tracks;
@@ -121,8 +121,12 @@ void CMakeProvider::createWorkspace(const BuildSetup &setup) {
workspace << "# Generate options for the engines\n";
writeEngineOptions(workspace);

std::string includeDirsList;
for (StringList::const_iterator i = setup.includeDirs.begin(); i != setup.includeDirs.end(); ++i)
includeDirsList += *i + ' ';

workspace << "include_directories(${" << setup.projectDescription << "_SOURCE_DIR}/" << setup.filePrefix << " ${" << setup.projectDescription << "_SOURCE_DIR}/" << setup.filePrefix << "/engines "
"$ENV{"<<LIBS_DEFINE<<"}/include .)\n\n";
<< includeDirsList << "$ENV{"<<LIBS_DEFINE<<"}/include .)\n\n";

workspace << "# Libraries and features\n\n";
writeFeatureLibSearch(setup, workspace, "sdl");
@@ -281,7 +285,10 @@ void CMakeProvider::createProjectFile(const std::string &name, const std::string

project << "# Libraries\n";
const Library *sdlLibrary = getLibraryFromFeature("sdl", setup.useSDL2);
project << "target_link_libraries(" << name << " ${" << sdlLibrary->librariesVar << "} ${SCUMMVM_LIBS})\n";
std::string libraryDirsList;
for (StringList::const_iterator i = setup.libraryDirs.begin(); i != setup.libraryDirs.end(); ++i)
libraryDirsList += *i + ' ';
project << "target_link_libraries(" << name << " " << libraryDirsList << "${" << sdlLibrary->librariesVar << "} ${SCUMMVM_LIBS})\n";

project << "if (WIN32)\n";
project << "\ttarget_sources(" << name << " PUBLIC " << setup.filePrefix << "/dists/" << name << ".rc)\n";
@@ -135,6 +135,9 @@ void CodeBlocksProvider::createProjectFile(const std::string &name, const std::s
writeWarnings(name, project);
writeDefines(setup.defines, project);

for (StringList::const_iterator i = setup.includeDirs.begin(); i != setup.includeDirs.end(); ++i)
project << "\t\t\t\t\t<Add directory=\"" << convertPathToWin(*i) << "\" />\n";

project << "\t\t\t\t\t<Add directory=\"$(" << LIBS_DEFINE << ")include\" />\n"
"\t\t\t\t\t<Add directory=\"$(" << LIBS_DEFINE << ")include\\SDL\" />\n"
"\t\t\t\t\t<Add directory=\"..\\..\\engines\" />\n"
@@ -154,6 +157,9 @@ void CodeBlocksProvider::createProjectFile(const std::string &name, const std::s
project << "\t\t\t\t\t<Add library=\"" << setup.projectName << "\\engines\\" << i->first << "\\lib" << i->first << ".a\" />\n";
}

for (StringList::const_iterator i = setup.libraryDirs.begin(); i != setup.libraryDirs.end(); ++i)
project << "\t\t\t\t\t<Add directory=\"" << convertPathToWin(*i) << "\" />\n";

project << "\t\t\t\t\t<Add directory=\"$(" << LIBS_DEFINE << ")lib\\mingw\" />\n"
"\t\t\t\t\t<Add directory=\"$(" << LIBS_DEFINE << ")lib\" />\n"
"\t\t\t\t</Linker>\n";
@@ -74,6 +74,13 @@ namespace {
*/
std::string unifyPath(const std::string &path);

/**
* Removes trailing slash from path if it exists
*
* @param path Path string.
*/
void removeTrailingSlash(std::string& path);

/**
* Display the help text for the program.
*
@@ -114,9 +121,7 @@ int main(int argc, char *argv[]) {

BuildSetup setup;
setup.srcDir = unifyPath(srcDir);

if (setup.srcDir.at(setup.srcDir.size() - 1) == '/')
setup.srcDir.erase(setup.srcDir.size() - 1);
removeTrailingSlash(setup.srcDir);

setup.filePrefix = setup.srcDir;
setup.outputDir = '.';
@@ -258,18 +263,31 @@ int main(int argc, char *argv[]) {
}

setup.filePrefix = unifyPath(argv[++i]);
if (setup.filePrefix.at(setup.filePrefix.size() - 1) == '/')
setup.filePrefix.erase(setup.filePrefix.size() - 1);
removeTrailingSlash(setup.filePrefix);
} else if (!std::strcmp(argv[i], "--output-dir")) {
if (i + 1 >= argc) {
std::cerr << "ERROR: Missing \"path\" parameter for \"--output-dir\"!\n";
return -1;
}

setup.outputDir = unifyPath(argv[++i]);
if (setup.outputDir.at(setup.outputDir.size() - 1) == '/')
setup.outputDir.erase(setup.outputDir.size() - 1);

removeTrailingSlash(setup.outputDir);
} else if (!std::strcmp(argv[i], "--include-dir")) {
if (i + 1 >= argc) {
std::cerr << "ERROR: Missing \"path\" parameter for \"--include-dir\"!\n";
return -1;
}
std::string includeDir = unifyPath(argv[++i]);
removeTrailingSlash(includeDir);
setup.includeDirs.push_back(includeDir);
} else if (!std::strcmp(argv[i], "--library-dir")) {
if (i + 1 >= argc) {
std::cerr << "ERROR: Missing \"path\" parameter for \"--library-dir\"!\n";
return -1;
}
std::string libraryDir = unifyPath(argv[++i]);
removeTrailingSlash(libraryDir);
setup.libraryDirs.push_back(libraryDir);
} else if (!std::strcmp(argv[i], "--build-events")) {
setup.runBuildEvents = true;
} else if (!std::strcmp(argv[i], "--installer")) {
@@ -678,6 +696,11 @@ std::string unifyPath(const std::string &path) {
return result;
}

void removeTrailingSlash(std::string& path) {
if (path.size() > 0 && path.at(path.size() - 1) == '/')
path.erase(path.size() - 1);
}

void displayHelp(const char *exe) {
using std::cout;

@@ -702,6 +725,8 @@ void displayHelp(const char *exe) {
" --output-dir path overwrite path, where the project files are placed\n"
" By default this is \".\", i.e. the current working\n"
" directory\n"
" --include-dir path add a path to the include search path"
" --library-dir path add a path to the library search path"
"\n"
"MSVC specific settings:\n"
" --msvc-version version set the targeted MSVC version. Possible values:\n";
@@ -1093,6 +1118,7 @@ const Feature s_features[] = {
{ "text-console", "USE_TEXT_CONSOLE_FOR_DEBUGGER", false, false, "Text console debugger" }, // This feature is always applied in xcode projects
{ "tts", "USE_TTS", false, true, "Text to speech support"},
{"builtin-resources", "BUILTIN_RESOURCES", false, true, "include resources (e.g. engine data, fonts) into the binary"},
{ "detection-full", "DETECTION_FULL", false, true, "Include detection objects for all engines" },
{ "detection-static", "USE_DETECTION_FEATURES_STATIC", false, true, "Static linking of detection objects for engines."},
{ "cxx11", "USE_CXX11", false, true, "Compile with c++11 support"}
};
@@ -1571,12 +1597,17 @@ void ProjectProvider::createProject(BuildSetup &setup) {
ex.clear();
std::vector<std::string> detectionModuleDirs;
detectionModuleDirs.reserve(setup.engines.size());
bool detectAllEngines = getFeatureBuildState("detection-full", setup.features);

for (EngineDescList::const_iterator i = setup.engines.begin(), end = setup.engines.end(); i != end; ++i) {
// We ignore all sub engines here because they require no special handling.
if (isSubEngine(i->name, setup.engines)) {
continue;
}
// If we're not detecting all engines then ignore the disabled ones
if (!(detectAllEngines || i->enable)) {
continue;
}
detectionModuleDirs.push_back(setup.srcDir + "/engines/" + i->name);
}

@@ -2133,7 +2164,9 @@ void ProjectProvider::createEnginePluginsTable(const BuildSetup &setup) {
<< "LINK_PLUGIN(" << engineName << ")\n"
<< "#endif\n";

detectionTable << "LINK_PLUGIN(" << engineName << "_DETECTION)\n";
detectionTable << "#if defined(ENABLE_" << engineName << ") || defined(DETECTION_FULL)\n"
<< "LINK_PLUGIN(" << engineName << "_DETECTION)\n"
<< "#endif\n";
}
}
} // namespace CreateProjectTool
@@ -232,6 +232,9 @@ struct BuildSetup {
std::string filePrefix; ///< Prefix for the relative path arguments in the project files.
std::string outputDir; ///< Path where to put the MSVC project files.

StringList includeDirs; ///< List of additional include paths
StringList libraryDirs; ///< List of additional library paths

EngineDescList engines; ///< Engine list for the build (this may contain engines, which are *not* enabled!).
FeatureList features; ///< Feature list for the build (this may contain features, which are *not* enabled!).

@@ -358,13 +358,21 @@ void MSBuildProvider::outputGlobalPropFile(const BuildSetup &setup, std::ofstrea
if (runBuildEvents)
definesList += REVISION_DEFINE ";";

std::string includeDirsList;
for (StringList::const_iterator i = setup.includeDirs.begin(); i != setup.includeDirs.end(); ++i)
includeDirsList += convertPathToWin(*i) + ';';

std::string libraryDirsList;
for (StringList::const_iterator i = setup.libraryDirs.begin(); i != setup.libraryDirs.end(); ++i)
libraryDirsList += convertPathToWin(*i) + ';';

properties << "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
<< "<Project DefaultTargets=\"Build\" ToolsVersion=\"" << _msvcVersion.project << "\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n"
<< "\t<PropertyGroup>\n"
<< "\t\t<_PropertySheetDisplayName>" << setup.projectDescription << "_Global</_PropertySheetDisplayName>\n"
<< "\t\t<ExecutablePath>$(" << LIBS_DEFINE << ")\\bin;$(" << LIBS_DEFINE << ")\\bin\\" << getMSVCArchName(arch) << ";$(" << LIBS_DEFINE << ")\\$(Configuration)\\bin;$(ExecutablePath)</ExecutablePath>\n"
<< "\t\t<LibraryPath>$(" << LIBS_DEFINE << ")\\lib\\" << getMSVCArchName(arch) << ";$(" << LIBS_DEFINE << ")\\lib\\" << getMSVCArchName(arch) << "\\$(Configuration);$(" << LIBS_DEFINE << ")\\lib;$(" << LIBS_DEFINE << ")\\$(Configuration)\\lib;$(LibraryPath)</LibraryPath>\n"
<< "\t\t<IncludePath>$(" << LIBS_DEFINE << ")\\include;$(" << LIBS_DEFINE << ")\\include\\" << (setup.useSDL2 ? "SDL2" : "SDL") << ";$(IncludePath)</IncludePath>\n"
<< "\t\t<LibraryPath>" << libraryDirsList << "$(" << LIBS_DEFINE << ")\\lib\\" << getMSVCArchName(arch) << ";$(" << LIBS_DEFINE << ")\\lib\\" << getMSVCArchName(arch) << "\\$(Configuration);$(" << LIBS_DEFINE << ")\\lib;$(" << LIBS_DEFINE << ")\\$(Configuration)\\lib;$(LibraryPath)</LibraryPath>\n"
<< "\t\t<IncludePath>" << includeDirsList << "$(" << LIBS_DEFINE << ")\\include;$(" << LIBS_DEFINE << ")\\include\\" << (setup.useSDL2 ? "SDL2" : "SDL") << ";$(IncludePath)</IncludePath>\n"
<< "\t\t<OutDir>$(Configuration)" << getMSVCArchName(arch) << "\\</OutDir>\n"
<< "\t\t<IntDir>$(Configuration)" << getMSVCArchName(arch) << "\\$(ProjectName)\\</IntDir>\n"
<< "\t</PropertyGroup>\n"
@@ -187,6 +187,10 @@ void VisualStudioProvider::outputGlobalPropFile(const BuildSetup &setup, std::of
for (StringList::const_iterator i = _globalWarnings.begin(); i != _globalWarnings.end(); ++i)
warnings += *i + ';';

std::string includeDirsList;
for (StringList::const_iterator i = setup.includeDirs.begin(); i != setup.includeDirs.end(); ++i)
includeDirsList += convertPathToWin(*i) + ';';

std::string definesList;
for (StringList::const_iterator i = defines.begin(); i != defines.end(); ++i) {
if (i != defines.begin())
@@ -210,7 +214,7 @@ void VisualStudioProvider::outputGlobalPropFile(const BuildSetup &setup, std::of
<< "\t\tName=\"VCCLCompilerTool\"\n"
<< "\t\tDisableLanguageExtensions=\"" << (setup.devTools ? "false" : "true") << "\"\n"
<< "\t\tDisableSpecificWarnings=\"" << warnings << "\"\n"
<< "\t\tAdditionalIncludeDirectories=\".\\;" << prefix << ";" << prefix << "\\engines;$(" << LIBS_DEFINE << ")\\include;$(" << LIBS_DEFINE << ")\\include\\SDL;" << (setup.tests ? prefix + "\\test\\cxxtest;" : "") << "\"\n"
<< "\t\tAdditionalIncludeDirectories=\".\\;" << prefix << ";" << prefix << "\\engines;" << includeDirsList << "$(" << LIBS_DEFINE << ")\\include;$(" << LIBS_DEFINE << ")\\include\\SDL;" << (setup.tests ? prefix + "\\test\\cxxtest;" : "") << "\"\n"
<< "\t\tPreprocessorDefinitions=\"" << definesList << "\"\n"
<< "\t\tExceptionHandling=\"" << ((setup.devTools || setup.tests || _version == 14) ? "1" : "0") << "\"\n";

@@ -241,7 +245,11 @@ void VisualStudioProvider::outputGlobalPropFile(const BuildSetup &setup, std::of
if (!setup.devTools && !setup.tests)
properties << "\t\tEntryPointSymbol=\"WinMainCRTStartup\"\n";

properties << "\t\tAdditionalLibraryDirectories=\"$(" << LIBS_DEFINE << ")\\lib\\" << getMSVCArchName(arch) << "\"\n"
std::string libraryDirsList;
for (StringList::const_iterator i = setup.libraryDirs.begin(); i != setup.libraryDirs.end(); ++i)
libraryDirsList += convertPathToWin(*i) + ';';

properties << "\t\tAdditionalLibraryDirectories=\"" << libraryDirsList << "$(" << LIBS_DEFINE << ")\\lib\\" << getMSVCArchName(arch) << "\"\n"
<< "\t/>\n"
<< "\t<Tool\n"
<< "\t\tName=\"VCResourceCompilerTool\"\n"
@@ -1068,6 +1068,8 @@ void XcodeProvider::setupBuildConfiguration(const BuildSetup &setup) {
ValueList iPhone_HeaderSearchPaths;
iPhone_HeaderSearchPaths.push_back("$(SRCROOT)/engines/");
iPhone_HeaderSearchPaths.push_back("$(SRCROOT)");
for (StringList::const_iterator i = setup.includeDirs.begin(); i != setup.includeDirs.end(); ++i)
iPhone_HeaderSearchPaths.push_back("\"" + *i + "\"");
iPhone_HeaderSearchPaths.push_back("\"" + projectOutputDirectory + "\"");
iPhone_HeaderSearchPaths.push_back("\"" + projectOutputDirectory + "/include\"");
if (CONTAINS_DEFINE(setup.defines, "USE_SDL_NET")) {
@@ -1079,6 +1081,8 @@ void XcodeProvider::setupBuildConfiguration(const BuildSetup &setup) {
ADD_SETTING_LIST(iPhone_Debug, "HEADER_SEARCH_PATHS", iPhone_HeaderSearchPaths, kSettingsAsList | kSettingsQuoteVariable, 5);
ADD_SETTING_QUOTE(iPhone_Debug, "INFOPLIST_FILE", "$(SRCROOT)/dists/ios7/Info.plist");
ValueList iPhone_LibPaths;
for (StringList::const_iterator i = setup.libraryDirs.begin(); i != setup.libraryDirs.end(); ++i)
iPhone_LibPaths.push_back("\"" + *i + "\"");
iPhone_LibPaths.push_back("$(inherited)");
iPhone_LibPaths.push_back("\"" + projectOutputDirectory + "/lib\"");
ADD_SETTING_LIST(iPhone_Debug, "LIBRARY_SEARCH_PATHS", iPhone_LibPaths, kSettingsAsList, 5);
@@ -1148,6 +1152,8 @@ void XcodeProvider::setupBuildConfiguration(const BuildSetup &setup) {
ADD_SETTING_LIST(scummvmOSX_Debug, "GCC_PREPROCESSOR_DEFINITIONS", scummvmOSX_defines, kSettingsNoQuote | kSettingsAsList, 5);
ADD_SETTING_QUOTE(scummvmOSX_Debug, "GCC_VERSION", "");
ValueList scummvmOSX_HeaderPaths;
for (StringList::const_iterator i = setup.includeDirs.begin(); i != setup.includeDirs.end(); ++i)
scummvmOSX_HeaderPaths.push_back("\"" + *i + "\"");
if (setup.useSDL2) {
scummvmOSX_HeaderPaths.push_back("/usr/local/include/SDL2");
scummvmOSX_HeaderPaths.push_back("/opt/local/include/SDL2");
@@ -1165,6 +1171,8 @@ void XcodeProvider::setupBuildConfiguration(const BuildSetup &setup) {
ADD_SETTING_LIST(scummvmOSX_Debug, "HEADER_SEARCH_PATHS", scummvmOSX_HeaderPaths, kSettingsQuoteVariable | kSettingsAsList, 5);
ADD_SETTING_QUOTE(scummvmOSX_Debug, "INFOPLIST_FILE", "$(SRCROOT)/dists/macosx/Info.plist");
ValueList scummvmOSX_LibPaths;
for (StringList::const_iterator i = setup.libraryDirs.begin(); i != setup.libraryDirs.end(); ++i)
scummvmOSX_LibPaths.push_back("\"" + *i + "\"");
scummvmOSX_LibPaths.push_back("/usr/local/lib");
scummvmOSX_LibPaths.push_back("/opt/local/lib");
scummvmOSX_LibPaths.push_back("\"$(inherited)\"");
@@ -65,6 +65,7 @@ void RivenVideo::load(uint16 id) {
_video->setSoundType(Audio::Mixer::kSFXSoundType);
_video->setChunkBeginOffset(_vm->getResourceOffset(ID_TMOV, id));
_video->loadStream(_vm->getResource(ID_TMOV, id));
_video->enableEditListBoundsCheckQuirk(true); // for Spanish olw.mov
}

void RivenVideo::close() {
@@ -1662,7 +1662,7 @@ bool Console::cmdListSaves(int argc, const char **argv) {
}

bool Console::cmdClassTable(int argc, const char **argv) {
debugPrintf("Available classes (parse a parameter to filter the table by a specific class):\n");
debugPrintf("Available classes (pass a parameter to filter the table by a specific class):\n");

for (uint i = 0; i < _engine->_gamestate->_segMan->classTableSize(); i++) {
Class temp = _engine->_gamestate->_segMan->_classTable[i];
@@ -1673,7 +1673,9 @@ bool Console::cmdClassTable(int argc, const char **argv) {
className,
PRINT_REG(temp.reg),
temp.script);
} else debugPrintf(" Class 0x%x (not loaded; can't get name) (script %d)\n", i, temp.script);
}
} else if (argc == 1) {
debugPrintf(" Class 0x%x (not loaded; can't get name) (script %d)\n", i, temp.script);
}
}