| /* | |
| * DxDiag Implementation | |
| * | |
| * Copyright 2009 Austin English | |
| * | |
| * This library is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU Lesser General Public | |
| * License as published by the Free Software Foundation; either | |
| * version 2.1 of the License, or (at your option) any later version. | |
| * | |
| * This library is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| * Lesser General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Lesser General Public | |
| * License along with this library; if not, write to the Free Software | |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | |
| */ | |
| #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(const WCHAR *s) | |
| { | |
| 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; | |
| } |