static void WIN32_UnregisterClasses (void)
{
- systray (hHiddenWnd, TRUE);
- DestroyWindow (hHiddenWnd);
+ if (hHiddenWnd) {
+ systray (hHiddenWnd, TRUE);
+ DestroyWindow (hHiddenWnd);
+ }
}
static int WIN32_RegisterClasses (void)
}
}
- write_log (_T("\n%s (%d.%d.%d %s%s[%d])"), VersionStr,
+ write_log (_T("%s (%d.%d.%d %s%s[%d])"), VersionStr,
osVersion.dwMajorVersion, osVersion.dwMinorVersion, osVersion.dwBuildNumber, osVersion.szCSDVersion,
_tcslen (osVersion.szCSDVersion) > 0 ? _T(" ") : _T(""), os_admin);
write_log (_T(" %d-bit %X.%X.%X %d %s %d"),
HANDLE hMutex;
TCHAR **argv = NULL, **argv2 = NULL, **argv3;
int argc, i;
+ int versiononly = 0;
if (!osdetect ())
return 0;
argv2 = WIN32_InitRegistry (argv);
if (regqueryint (NULL, _T("log_disabled"), &i)) {
- if (i)
+ if (i) {
logging_disabled = true;
+ }
}
getstartpaths ();
makeverstr (VersionStr);
logging_init ();
- if (_tcslen (lpCmdLine) > 0)
+
+ if (_tcslen (lpCmdLine) > 0) {
write_log (_T("'%s'\n"), lpCmdLine);
+ }
if (argv3 && argv3[0]) {
write_log (_T("params:\n"));
- for (i = 0; argv3[i]; i++)
+ for (i = 0; argv3[i]; i++) {
write_log (_T("%d: '%s'\n"), i + 1, argv3[i]);
+ if (!_tcsicmp(argv3[i], _T("-version"))) {
+ versiononly = 1;
+ }
+ if (!_tcsicmp(argv3[i], _T("-bootlogonly"))) {
+ versiononly = -1;
+ }
+ }
}
if (argv2) {
write_log (_T("extra params:\n"));
- for (i = 0; argv2[i]; i++)
+ for (i = 0; argv2[i]; i++) {
write_log (_T("%d: '%s'\n"), i + 1, argv2[i]);
+ }
}
- if (preinit_shm () && WIN32_RegisterClasses () && WIN32_InitLibraries ()) {
- DWORD i;
+
+ if (versiononly <= 0) {
+ if (preinit_shm () && WIN32_RegisterClasses () && WIN32_InitLibraries ()) {
+ DWORD i;
#ifdef RETROPLATFORM
- if (rp_param != NULL) {
- if (FAILED (rp_init ()))
- goto end;
- }
-#endif
- WIN32_HandleRegistryStuff ();
- write_log (_T("Enumerating display devices.. \n"));
- enumeratedisplays ();
- write_log (_T("Sorting devices and modes..\n"));
- sortdisplays ();
- enumerate_sound_devices ();
- for (i = 0; i < MAX_SOUND_DEVICES && sound_devices[i]; i++) {
- int type = sound_devices[i]->type;
- write_log (_T("%d:%s: %s\n"), i, type == SOUND_DEVICE_XAUDIO2 ? _T("XA") : (type == SOUND_DEVICE_DS ? _T("DS") : (type == SOUND_DEVICE_AL ? _T("AL") : (type == SOUND_DEVICE_WASAPI ? _T("WA") : (type == SOUND_DEVICE_WASAPI_EXCLUSIVE ? _T("WX") : _T("PA"))))), sound_devices[i]->name);
- }
- write_log (_T("Enumerating recording devices:\n"));
- for (i = 0; i < MAX_SOUND_DEVICES && record_devices[i]; i++) {
- int type = record_devices[i]->type;
- write_log (_T("%d:%s: %s\n"), i, type == SOUND_DEVICE_XAUDIO2 ? _T("XA") : (type == SOUND_DEVICE_DS ? _T("DS") : (type == SOUND_DEVICE_AL ? _T("AL") : (type == SOUND_DEVICE_WASAPI ? _T("WA") : (type == SOUND_DEVICE_WASAPI_EXCLUSIVE ? _T("WX") : _T("PA"))))), record_devices[i]->name);
- }
- write_log (_T("done\n"));
-#if 0
- DEVMODE devmode;
- memset (&devmode, 0, sizeof (devmode));
- devmode.dmSize = sizeof (DEVMODE);
- if (EnumDisplaySettings (NULL, ENUM_CURRENT_SETTINGS, &devmode)) {
- default_freq = devmode.dmDisplayFrequency;
- if (default_freq >= 70)
- default_freq = 70;
- else
- default_freq = 60;
- }
+ if (rp_param != NULL) {
+ if (FAILED (rp_init ()))
+ goto end;
+ }
#endif
- WIN32_InitLang ();
- unicode_init ();
- can_D3D11(false);
- if (betamessage ()) {
- keyboard_settrans ();
+ WIN32_HandleRegistryStuff ();
+ write_log (_T("Enumerating display devices.. \n"));
+ enumeratedisplays ();
+ write_log (_T("Sorting devices and modes..\n"));
+ sortdisplays ();
+ enumerate_sound_devices ();
+ for (i = 0; i < MAX_SOUND_DEVICES && sound_devices[i]; i++) {
+ int type = sound_devices[i]->type;
+ write_log (_T("%d:%s: %s\n"), i, type == SOUND_DEVICE_XAUDIO2 ? _T("XA") : (type == SOUND_DEVICE_DS ? _T("DS") : (type == SOUND_DEVICE_AL ? _T("AL") : (type == SOUND_DEVICE_WASAPI ? _T("WA") : (type == SOUND_DEVICE_WASAPI_EXCLUSIVE ? _T("WX") : _T("PA"))))), sound_devices[i]->name);
+ }
+ write_log (_T("Enumerating recording devices:\n"));
+ for (i = 0; i < MAX_SOUND_DEVICES && record_devices[i]; i++) {
+ int type = record_devices[i]->type;
+ write_log (_T("%d:%s: %s\n"), i, type == SOUND_DEVICE_XAUDIO2 ? _T("XA") : (type == SOUND_DEVICE_DS ? _T("DS") : (type == SOUND_DEVICE_AL ? _T("AL") : (type == SOUND_DEVICE_WASAPI ? _T("WA") : (type == SOUND_DEVICE_WASAPI_EXCLUSIVE ? _T("WX") : _T("PA"))))), record_devices[i]->name);
+ }
+ write_log (_T("done\n"));
+ WIN32_InitLang ();
+ unicode_init ();
+ can_D3D11(false);
+ if (betamessage ()) {
+ keyboard_settrans ();
#ifdef CATWEASEL
- catweasel_init ();
+ catweasel_init ();
#endif
#ifdef PARALLEL_PORT
- paraport_mask = paraport_init ();
+ paraport_mask = paraport_init ();
#endif
- globalipc = createIPC (_T("WinUAE"), 0);
- shmem_serial_create();
- enumserialports ();
- enummidiports ();
- real_main (argc, argv);
+ globalipc = createIPC (_T("WinUAE"), 0);
+ shmem_serial_create();
+ enumserialports ();
+ enummidiports ();
+ if (!versiononly) {
+ real_main (argc, argv);
+ }
+ }
}
- }
-end:
- closeIPC (globalipc);
- shmem_serial_delete();
- write_disk_history ();
- target_save_debugger_config();
- timeend ();
+ end:
+ closeIPC (globalipc);
+ shmem_serial_delete();
+ write_disk_history ();
+ target_save_debugger_config();
+ timeend ();
#ifdef AVIOUTPUT
- AVIOutput_Release ();
+ AVIOutput_Release ();
#endif
#ifdef AHI
- ahi_close_sound ();
+ ahi_close_sound ();
#endif
#ifdef PARALLEL_PORT
- paraport_free ();
- closeprinter ();
+ paraport_free ();
+ closeprinter ();
#endif
- create_afnewdir (1);
+ create_afnewdir (1);
#ifdef RETROPLATFORM
- rp_free ();
+ rp_free ();
#endif
+ }
+
CloseHandle (hMutex);
WIN32_CleanupLibraries ();
WIN32_UnregisterClasses ();
static int bootlogmode;
static CRITICAL_SECTION cs;
static int cs_init;
+static bool logtostdoutput;
FILE *debugfile = NULL;
int console_logging = 0;
{
CONSOLE_SCREEN_BUFFER_INFO csbi;
- stdinput = GetStdHandle (STD_INPUT_HANDLE);
- stdoutput = GetStdHandle (STD_OUTPUT_HANDLE);
+ stdinput = GetStdHandle(STD_INPUT_HANDLE);
+ stdoutput = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleMode (stdinput, ENABLE_PROCESSED_INPUT|ENABLE_LINE_INPUT|ENABLE_ECHO_INPUT|ENABLE_PROCESSED_OUTPUT);
console_input_linemode = 1;
SetConsoleCP (65001);
static void open_console_window (void)
{
+ if (logtostdoutput) {
+ return;
+ }
if (!consoleopen) {
previousactivewindow = GetForegroundWindow();
}
return;
if (consoleopen >= 0)
return;
+ if (logtostdoutput)
+ return;
hwnd = myGetConsoleWindow ();
if (hwnd) {
int newpos = 1;
TCHAR *bufp;
va_list parms;
- if (!cs_init)
+ if (!cs_init) {
return;
+ }
EnterCriticalSection (&cs);
va_start (parms, format);
count = _vsntprintf (bufp, bufsize - 1, format, parms);
if (count < 0) {
bufsize *= 10;
- if (bufp != buffer)
+ if (bufp != buffer) {
xfree (bufp);
+ }
bufp = xmalloc (TCHAR, bufsize);
continue;
}
_ftprintf (debugfile, _T("%s"), bufp);
}
lfdetected = 0;
- if (bufp[0] != '\0' && bufp[_tcslen (bufp) - 1] == '\n')
+ if (bufp[0] != '\0' && bufp[_tcslen (bufp) - 1] == '\n') {
lfdetected = 1;
+ }
va_end (parms);
- if (bufp != buffer)
+ if (bufp != buffer) {
xfree (bufp);
+ }
LeaveCriticalSection (&cs);
}
TCHAR *bufp;
va_list parms;
- if (!SHOW_CONSOLE && !console_logging && !debugfile)
+ if (!SHOW_CONSOLE && !console_logging && !debugfile) {
return;
+ }
- if (!cs_init)
+ if (!cs_init) {
return;
+ }
premsg ();
- if (!_tcsicmp (format, _T("*")))
+ if (!_tcsicmp (format, _T("*"))) {
count = 0;
+ }
EnterCriticalSection (&cs);
va_start (parms, format);
break;
}
bufp[bufsize - 1] = 0;
- if (!_tcsncmp (bufp, _T("write "), 6))
+ if (!_tcsncmp (bufp, _T("write "), 6)) {
bufsize--;
+ }
ts = write_log_get_ts();
- if (bufp[0] == '*')
+ if (bufp[0] == '*') {
count++;
+ }
if (SHOW_CONSOLE || console_logging) {
- if (lfdetected && ts)
+ if (lfdetected && ts) {
writeconsole (ts);
+ }
writeconsole (bufp);
}
if (debugfile) {
- if (lfdetected && ts)
+ if (lfdetected && ts) {
_ftprintf (debugfile, _T("%s"), ts);
+ }
_ftprintf (debugfile, _T("%s"), bufp);
}
+ if (logtostdoutput) {
+ DWORD temp;
+ if (lfdetected && ts) {
+ char *utf8_ts = uutf8(ts);
+ WriteFile(stdoutput, utf8_ts, strlen(utf8_ts), &temp, NULL);
+ xfree(utf8_ts);
+ }
+ char *utf8 = uutf8(bufp);
+ WriteFile(stdoutput, utf8, strlen(utf8), &temp, NULL);
+ xfree(utf8);
+ }
#if 0
static int is_debugger_present = -1;
#endif
lfdetected = 0;
- if (bufp[0] != '\0' && bufp[_tcslen (bufp) - 1] == '\n')
+ if (bufp[0] != '\0' && bufp[_tcslen (bufp) - 1] == '\n') {
lfdetected = 1;
+ }
va_end (parms);
- if (bufp != buffer)
+ if (bufp != buffer) {
xfree (bufp);
- if (always_flush_log)
+ }
+ if (always_flush_log) {
flush_log ();
+ if (logtostdoutput) {
+ FlushFileBuffers(stdoutput);
+ }
+ }
LeaveCriticalSection (&cs);
}
void flush_log (void)
{
- if (debugfile)
+ if (debugfile) {
fflush (debugfile);
+ }
flushconsole ();
}
va_list parms;
va_start (parms, format);
- if (f == NULL || !consoleopen)
+ if (f == NULL || !consoleopen) {
return;
+ }
count = _vsntprintf (buffer, WRITE_LOG_BUF_SIZE - 1, format, parms);
openconsole ();
writeconsole (buffer);
va_list parms;
va_start (parms, format);
- if (buffer == NULL)
+ if (buffer == NULL) {
return 0;
+ }
count = _vsntprintf(buffer, (*bufsize) - 1, format, parms);
va_end (parms);
*bufsize -= uaetcslen(buffer);
{
FILE *f = NULL;
- if (!cs_init)
+ if (!cs_init) {
InitializeCriticalSection (&cs);
+ HANDLE so = GetStdHandle(STD_OUTPUT_HANDLE);
+ if (so) {
+ if (GetFileType(so) == FILE_TYPE_DISK) {
+ logtostdoutput = true;
+ stdinput = GetStdHandle(STD_INPUT_HANDLE);
+ stdoutput = so;
+ }
+ }
+ }
cs_init = 1;
if (name != NULL) {