Module: wine Branch: master Commit: de239dc852c8df5914abe974eac202d60b83611d URL: http://source.winehq.org/git/wine.git/?a=commit;h=de239dc852c8df5914abe974ea...
Author: Andrew Nguyen anguyen@codeweavers.com Date: Mon Aug 16 02:54:10 2010 -0500
ipconfig: Implement basic command-line parsing.
---
programs/ipconfig/En.rc | 30 ++++++++++++++++ programs/ipconfig/Makefile.in | 3 ++ programs/ipconfig/ipconfig.c | 76 ++++++++++++++++++++++++++++++++++++++++- programs/ipconfig/ipconfig.h | 25 +++++++++++++ 4 files changed, 133 insertions(+), 1 deletions(-)
diff --git a/programs/ipconfig/En.rc b/programs/ipconfig/En.rc new file mode 100644 index 0000000..4635ff6 --- /dev/null +++ b/programs/ipconfig/En.rc @@ -0,0 +1,30 @@ +/* + * IP configuration utility + * English language support + * + * Copyright 2010 Andrew Nguyen + * + * 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 + */ + +#include "ipconfig.h" + +LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT + +STRINGTABLE +{ + STRING_USAGE, "Usage: ipconfig [ /? | /all ]\n" + STRING_INVALID_CMDLINE, "Error: Unknown or invalid command line parameters specified\n" +} diff --git a/programs/ipconfig/Makefile.in b/programs/ipconfig/Makefile.in index 0cd8ce6..18a7714 100644 --- a/programs/ipconfig/Makefile.in +++ b/programs/ipconfig/Makefile.in @@ -5,7 +5,10 @@ SRCDIR = @srcdir@ VPATH = @srcdir@ MODULE = ipconfig.exe APPMODE = -mconsole -municode +IMPORTS = user32
C_SRCS = ipconfig.c
+RC_SRCS = En.rc + @MAKE_PROG_RULES@ diff --git a/programs/ipconfig/ipconfig.c b/programs/ipconfig/ipconfig.c index fc5d95c..7c988bb 100644 --- a/programs/ipconfig/ipconfig.c +++ b/programs/ipconfig/ipconfig.c @@ -1,6 +1,7 @@ /* * IP configuration utility * + * Copyright 2008 Andrew Riedi * Copyright 2010 Andrew Nguyen * * This library is free software; you can redistribute it and/or @@ -22,10 +23,83 @@ #include <wine/debug.h> #include <wine/unicode.h>
+#include "ipconfig.h" + WINE_DEFAULT_DEBUG_CHANNEL(ipconfig);
+static int ipconfig_printfW(const WCHAR *msg, ...) +{ + va_list va_args; + int wlen; + DWORD count, ret; + WCHAR msg_buffer[8192]; + + va_start(va_args, msg); + wlen = vsprintfW(msg_buffer, msg, va_args); + va_end(va_args); + + ret = WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), msg_buffer, wlen, &count, NULL); + if (!ret) + { + DWORD len; + char *msgA; + + len = WideCharToMultiByte(GetConsoleOutputCP(), 0, msg_buffer, wlen, + NULL, 0, NULL, NULL); + msgA = HeapAlloc(GetProcessHeap(), 0, len); + if (!msgA) + return 0; + + WideCharToMultiByte(GetConsoleOutputCP(), 0, msg_buffer, wlen, msgA, len, + NULL, NULL); + WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), msgA, len, &count, FALSE); + HeapFree(GetProcessHeap(), 0, msgA); + } + + return count; +} + +static int ipconfig_message(int msg) +{ + static const WCHAR formatW[] = {'%','s',0}; + WCHAR msg_buffer[8192]; + + LoadStringW(GetModuleHandleW(NULL), msg, msg_buffer, + sizeof(msg_buffer)/sizeof(WCHAR)); + return ipconfig_printfW(formatW, msg_buffer); +} + int wmain(int argc, WCHAR *argv[]) { - WINE_FIXME("ipconfig.exe is not implemented\n"); + static const WCHAR slashHelp[] = {'/','?',0}; + static const WCHAR slashAll[] = {'/','a','l','l',0}; + + if (argc > 1) + { + if (!strcmpW(slashHelp, argv[1])) + { + ipconfig_message(STRING_USAGE); + return 1; + } + else if (!strcmpiW(slashAll, argv[1])) + { + if (argv[2]) + { + ipconfig_message(STRING_INVALID_CMDLINE); + ipconfig_message(STRING_USAGE); + return 1; + } + + WINE_FIXME("/all option is not currently handled\n"); + } + else + { + ipconfig_message(STRING_INVALID_CMDLINE); + ipconfig_message(STRING_USAGE); + return 1; + } + } + + WINE_FIXME("Network interface output is not currently implemented\n"); return 0; } diff --git a/programs/ipconfig/ipconfig.h b/programs/ipconfig/ipconfig.h new file mode 100644 index 0000000..f02792d --- /dev/null +++ b/programs/ipconfig/ipconfig.h @@ -0,0 +1,25 @@ +/* + * IP configuration utility private definitions + * + * Copyright 2010 Andrew Nguyen + * + * 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 + */ + +#include <windef.h> + +/* Translation IDs. */ +#define STRING_USAGE 101 +#define STRING_INVALID_CMDLINE 102