| /* |
| * 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; |
| } |