// JLH 01/21/2011 Added SDL initialization
// JLH 06/26/2011 Added fix to keep SDL from hijacking main() on win32
// JLH 05/24/2012 Added option switches
+// JLH 03/05/2013 Fixed console redireciton on win32 platform :-P
//
#include "app.h"
#include <SDL.h>
#include <QApplication>
+#include "gamepad.h"
#include "log.h"
#include "mainwin.h"
+#include "profile.h"
#include "settings.h"
-#include "types.h"
#include "version.h"
// Apparently on win32, SDL is hijacking main from Qt. So let's do this:
#ifdef __GCCWIN32__
#undef main
+#include <windows.h> // Ick, but needed for console redirection on win32 :-O
#endif
// Function prototypes...
//hm. :-/
// This is stuff we pass into the mainWindow...
+// Also, these are defaults. :-)
bool noUntunedTankPlease = false;
bool loadAndGo = false;
-bool useLogfile = true;
+bool useLogfile = false;
QString filename;
// Here's the main application loop--short and simple...
int main(int argc, char * argv[])
{
+ // Win32 console redirection, because MS and their band of super geniuses
+ // decided that nobody would ever launch an app from the command line. :-P
+ // [Unfortunately, this doesn't seem to work on Vista/7. :-(]
+#ifdef __GCCWIN32__
+ BOOL (WINAPI * AttachConsole)(DWORD dwProcessId);
+
+ AttachConsole = (BOOL (WINAPI *)(DWORD))
+ GetProcAddress(LoadLibraryA("kernel32.dll"), "AttachConsole");
+
+ if (AttachConsole != NULL && AttachConsole(((DWORD)-1)))
+ {
+ if (_fileno(stdout) == -1)
+ freopen("CONOUT$","wb",stdout);
+ if (_fileno(stderr) == -1)
+ freopen("CONOUT$","wb",stderr);
+ if (_fileno(stdin) == -1)
+ freopen("CONIN$","rb",stdin);
+
+ // Fix C++
+ std::ios::sync_with_stdio();
+ }
+#endif
+
// Normally, this would be read in from the settings module... :-P
vjs.hardwareTypeAlpine = false;
// This is stuff we pass into the mainWindow...
// Check for options that must be in place be constructing the App object
if (!ParseCommandLine(argc, argv))
+ {
return 0;
+ }
Q_INIT_RESOURCE(virtualjaguar); // This must the same name as the exe filename
//or is it the .qrc filename???
{
WriteLog("VJ: SDL (joystick, audio) successfully initialized.\n");
App app(argc, argv); // Declare an instance of the application
+ Gamepad::AllocateJoysticks();
+ AutoConnectProfiles();
retVal = app.exec(); // And run it!
+ Gamepad::DeallocateJoysticks();
// Free SDL components last...!
SDL_QuitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_AUDIO);
SDL_Quit();
}
+#ifdef __GCCWIN32__
+#if 0
+ fclose(ctt);
+#endif
+#endif
LogDone(); // Close logfile
return retVal;
}
//
// Main app constructor--we stick globally accessible stuff here... (?)
//
-App::App(int argc, char * argv[]): QApplication(argc, argv)
+App::App(int & argc, char * argv[]): QApplication(argc, argv)
{
bool loadAndGo = !filename.isEmpty();
printf(
"Virtual Jaguar " VJ_RELEASE_VERSION " (" VJ_RELEASE_SUBVERSION ")\n"
"Based upon Virtual Jaguar core v1.0.0 by David Raingeard.\n"
- "Written by Niels Wagenaar (Linux/WIN32), Carwin Jones (BeOS),\n"
- "James Hammons (Linux/WIN32) and Adam Green (MacOS)\n"
+ "Written by James Hammons (Linux/WIN32), Niels Wagenaar (Linux/WIN32),\n"
+ "Carwin Jones (BeOS), and Adam Green (MacOS)\n"
"Contact: http://sdlemu.ngemu.com/ | sdlemu@ngemu.com\n"
"\n"
"Usage:\n"
" --log -l Create and use log file\n"
" --no-log Do not use log file\n"
" --help -h Show this message\n"
+ " --please-dont-kill-my-computer\n"
+ " -z Run Virtual Jaguar without \"snow\"\n"
"\n"
"Invoking Virtual Jagaur with no filename will cause it to boot up\n"
- "with the VJ GUI.\n"
+ "with the VJ GUI. Using Alpine mode will enable log file.\n"
"\n");
return false;
}
{
printf("Alpine Mode enabled.\n");
vjs.hardwareTypeAlpine = true;
+ // We also enable logging as well :-)
+ useLogfile = true;
}
- if (strcmp(argv[i], "--please-dont-kill-my-computer") == 0)
+ if ((strcmp(argv[i], "--please-dont-kill-my-computer") == 0) || (strcmp(argv[i], "-z") == 0))
{
noUntunedTankPlease = true;
}
//
// This is to override settings loaded from the config file.
// Note that settings set here will become the new defaults!
+// (Not any more: Settings are only saved if the config dialog was OKed, or
+// the toolbar buttons were pressed.)
//
void ParseOptions(int argc, char * argv[])
{