Module: wine Branch: master Commit: 93e7c6b23a3d1e0274b3eef44ad26cfa73c85cdd URL: http://source.winehq.org/git/wine.git/?a=commit;h=93e7c6b23a3d1e0274b3eef44a...
Author: Austin English austinenglish@gmail.com Date: Wed Aug 26 15:38:02 2009 -0500
dxdiag: Add basic command line parsing.
Based on a patch by Dan Kegel.
---
programs/dxdiag/main.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 68 insertions(+), 0 deletions(-)
diff --git a/programs/dxdiag/main.c b/programs/dxdiag/main.c index d8a4866..5334b22 100644 --- a/programs/dxdiag/main.c +++ b/programs/dxdiag/main.c @@ -20,9 +20,77 @@
#define WIN32_LEAN_AND_MEAN #include <windows.h> +#include "wine/debug.h" #include "wine/unicode.h"
+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 (isalphaW(*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 wWinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPWSTR cmdline, int cmdshow) { + if (ProcessCommandLine(cmdline)) + return 0; + return 0; }