BACKENDS: Implement Win32 version of OSystem::displayLogFile interface

This commit is contained in:
Littleboy 2011-06-04 14:26:37 -04:00
parent b766faa7a6
commit 1dec501ac7
2 changed files with 68 additions and 1 deletions

View file

@ -32,6 +32,7 @@
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#undef ARRAYSIZE // winnt.h defines ARRAYSIZE, but we want our own one...
#include <ShellAPI.h>
#include "backends/platform/sdl/win32/win32.h"
#include "backends/fs/windows/windows-fs-factory.h"
@ -87,6 +88,49 @@ void OSystem_Win32::init() {
OSystem_SDL::init();
}
bool OSystem_Win32::hasFeature(Feature f) {
if (f == kFeatureDisplayLogFile)
return true;
return OSystem_SDL::hasFeature(f);
}
bool OSystem_Win32::displayLogFile() {
if (_logFilePath.empty())
return false;
// Try opening the log file with the default text editor
// log files should be registered as "txtfile" by default and thus open in the default text editor
int shellExec = (int)ShellExecute(NULL, NULL, _logFilePath.c_str(), NULL, NULL, SW_SHOWNORMAL);
if (shellExec > 32)
return true;
// ShellExecute with the default verb failed, try the "Open with..." dialog
PROCESS_INFORMATION processInformation;
STARTUPINFO startupInfo;
memset(&processInformation, 0, sizeof(processInformation));
memset(&startupInfo, 0, sizeof(startupInfo));
startupInfo.cb = sizeof(startupInfo);
char cmdLine[MAX_PATH * 2]; // CreateProcess may change the contents of cmdLine
sprintf(cmdLine, "rundll32 shell32.dll,OpenAs_RunDLL %s", _logFilePath.c_str());
BOOL result = CreateProcess(NULL,
cmdLine,
NULL,
NULL,
FALSE,
NORMAL_PRIORITY_CLASS,
NULL,
NULL,
&startupInfo,
&processInformation);
if (result)
return true;
return false;
}
Common::String OSystem_Win32::getDefaultConfigFileName() {
char configFile[MAXPATHLEN];
@ -136,6 +180,10 @@ Common::String OSystem_Win32::getDefaultConfigFileName() {
}
Common::WriteStream *OSystem_Win32::createLogFile() {
// Start out by resetting _logFilePath, so that in case
// of a failure, we know that no log file is open.
_logFilePath.clear();
char logFile[MAXPATHLEN];
OSVERSIONINFO win32OsVersion;
@ -163,7 +211,11 @@ Common::WriteStream *OSystem_Win32::createLogFile() {
strcat(logFile, "\\scummvm.log");
Common::FSNode file(logFile);
return file.createWriteStream();
Common::WriteStream *stream = file.createWriteStream();
if (stream)
_logFilePath= logFile;
return stream;
} else {
return 0;
}