From: Andrew Nguyen Date: Mon, 16 Aug 2010 07:54:10 +0000 (-0500) Subject: ipconfig: Implement basic command-line parsing. X-Git-Tag: wine-1.3.1~172 X-Git-Url: http://git.etersoft.ru/projects/?a=commitdiff_plain;h=de239dc852c8df5914abe974eac202d60b83611d;p=wine%2Feterwine.git ipconfig: Implement basic command-line parsing. --- diff --git a/programs/ipconfig/En.rc b/programs/ipconfig/En.rc new file mode 100644 index 0000000000..4635ff6bd4 --- /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 0cd8ce65c9..18a7714e36 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 fc5d95c1b9..7c988bba81 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 #include +#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 0000000000..f02792d61f --- /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 + +/* Translation IDs. */ +#define STRING_USAGE 101 +#define STRING_INVALID_CMDLINE 102