diff --git a/programs/dxdiag/main.c b/programs/dxdiag/main.c index d24945c..5edfc6e 100644 --- a/programs/dxdiag/main.c +++ b/programs/dxdiag/main.c @@ -20,8 +20,77 @@ #define WIN32_LEAN_AND_MEAN #include +#include "wine/debug.h" -int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmdline, int cmdshow) +WINE_DEFAULT_DEBUG_CHANNEL(dxdiag); + +/* + Process options [/WHQL:ON|OFF][/X outfile][/T outfile] + Returns TRUE if options were present, FALSE otherwise + FIXME: Native behavior seems to be: + Only one of /X and /T is allowed, /WHQL must come before /X and /T, + quotes are optional around the filename, even if it contains spaces. +*/ + +static BOOL ProcessCommandLine(LPWSTR cmdline) +{ + const WCHAR *s = cmdline; + WCHAR outfile[MAX_PATH+1]; + int opt_t = FALSE; + int opt_x = FALSE; + int opt_help = FALSE; + int opt_given = FALSE; + int want_arg = FALSE; + + outfile[0] = 0; + while (*s) { + /* Skip whitespace before arg */ + while (*s == ' ') + s++; + /* Check for option */ + if (*s != '-' && *s != '/') + return FALSE; + s++; + switch (*s++) { + case 'T': + case 't': opt_t = TRUE; want_arg = TRUE; opt_given = TRUE; break; + case 'X': + case 'x': opt_x = TRUE; want_arg = TRUE; opt_given = TRUE; break; + case 'W': + case 'w': + opt_given = TRUE; + while (isalpha(*s) || *s == ':') + s++; + break; + default: opt_help = TRUE; opt_given = TRUE; break; + } + /* Skip any spaces before next option or filename */ + while (*s == ' ') + s++; + if (want_arg) { + int i; + if (*s == '"') + s++; + for (i=0; i < MAX_PATH && *s && *s != '"'; i++, s++) + outfile[i] = *s; + outfile[i] = 0; + break; + } + } + if (opt_help) + WINE_FIXME("help unimplemented\n"); + if (opt_t) + WINE_FIXME("/t unimplemented\n"); + if (opt_x) + WINE_FIXME("/x unimplemented\n"); + return opt_given; +} + +int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpcmdline, int cmdshow) { + WCHAR *cmdline = GetCommandLineW(); + if (ProcessCommandLine(cmdline)) + return 0; + return 0; }