ReactOS  0.4.15-dev-2100-g9e32854
main.c
Go to the documentation of this file.
1 /*
2  * COPYRIGHT: See COPYING in the top level directory
3  * PROJECT: ReactOS net command
4  * FILE: base/applications/network/net/main.c
5  * PURPOSE:
6  *
7  * PROGRAMMERS: Magnus Olsen (greatlord@reactos.org)
8  */
9 
10 #include "net.h"
11 
12 #define MAX_BUFFER_SIZE 4096
13 
14 typedef struct _COMMAND
15 {
17  INT (*func)(INT, WCHAR**);
18 // VOID (*help)(INT, WCHAR**);
19 } COMMAND, *PCOMMAND;
20 
22 {
23  {L"accounts", cmdAccounts},
24  {L"computer", cmdComputer},
25  {L"config", cmdConfig},
26  {L"continue", cmdContinue},
27  {L"file", unimplemented},
28  {L"group", cmdGroup},
29  {L"help", cmdHelp},
30  {L"helpmsg", cmdHelpMsg},
31  {L"localgroup", cmdLocalGroup},
32  {L"pause", cmdPause},
33  {L"session", unimplemented},
34  {L"share", cmdShare},
35  {L"start", cmdStart},
36  {L"statistics", cmdStatistics},
37  {L"stop", cmdStop},
38  {L"syntax", cmdSyntax},
39  {L"time", unimplemented},
40  {L"use", cmdUse},
41  {L"user", cmdUser},
42  {L"view", unimplemented},
43  {NULL, NULL}
44 };
45 
47 
48 
49 VOID
51  UINT uID,
52  INT nPaddedLength)
53 {
54  INT nLength;
55 
56  nLength = ConResPuts(StdOut, uID);
57  if (nLength < nPaddedLength)
58  PrintPadding(L' ', nPaddedLength - nLength);
59 }
60 
61 
62 VOID
64  WCHAR chr,
65  INT nPaddedLength)
66 {
67  INT i;
68  WCHAR szMsgBuffer[MAX_BUFFER_SIZE];
69 
70  for (i = 0; i < nPaddedLength; i++)
71  szMsgBuffer[i] = chr;
72  szMsgBuffer[nPaddedLength] = UNICODE_NULL;
73 
74  ConPuts(StdOut, szMsgBuffer);
75 }
76 
77 
78 VOID
80  DWORD dwMessage,
81  ...)
82 {
83  PWSTR pBuffer;
84  va_list args = NULL;
85 
86  va_start(args, dwMessage);
87 
90  dwMessage,
92  (LPWSTR)&pBuffer,
93  0,
94  &args);
95  va_end(args);
96 
97  if (pBuffer)
98  {
101  pBuffer = NULL;
102  }
103 }
104 
105 VOID
107  DWORD dwMessage)
108 {
109  PWSTR pBuffer;
110 
114  dwMessage,
116  (LPWSTR)&pBuffer,
117  0,
118  NULL);
119  if (pBuffer)
120  {
123  pBuffer = NULL;
124  }
125 }
126 
127 
128 VOID
130  DWORD dwMessage,
131  INT nPaddedLength)
132 {
133  PWSTR pBuffer;
134  DWORD dwLength;
135 
139  dwMessage,
141  (LPWSTR)&pBuffer,
142  0,
143  NULL);
144  if (pBuffer)
145  {
148  pBuffer = NULL;
149  }
150 
151  if (dwLength < (DWORD)nPaddedLength)
152  PrintPadding(L' ', (DWORD)nPaddedLength - dwLength);
153 }
154 
155 
156 VOID
158  DWORD dwError)
159 {
160  WCHAR szErrorBuffer[16];
161  PWSTR pBuffer;
162  PWSTR pErrorInserts[2] = {NULL, NULL};
163 
164  if (dwError >= MIN_LANMAN_MESSAGE_ID && dwError <= MAX_LANMAN_MESSAGE_ID)
165  {
169  dwError,
171  (LPWSTR)&pBuffer,
172  0,
173  NULL);
174  if (pBuffer)
175  {
176  ConPrintf(StdErr, L"%s\n", pBuffer);
178  pBuffer = NULL;
179  }
180  }
181  else
182  {
185  NULL,
186  dwError,
188  (LPWSTR)&pBuffer,
189  0,
190  NULL);
191  if (pBuffer)
192  {
193  ConPrintf(StdErr, L"%s\n", pBuffer);
195  pBuffer = NULL;
196  }
197  }
198 
199  if (dwError != ERROR_SUCCESS)
200  {
201  /* Format insert for the 3514 message */
202  swprintf(szErrorBuffer, L"%lu", dwError);
203  pErrorInserts[0] = szErrorBuffer;
204 
205  /* Format and print the 3514 message */
209  3514,
211  (LPWSTR)&pBuffer,
212  0,
213  (va_list *)pErrorInserts);
214  if (pBuffer)
215  {
216  ConPrintf(StdErr, L"%s\n", pBuffer);
218  pBuffer = NULL;
219  }
220  }
221 }
222 
223 
224 VOID
226  DWORD dwMessage)
227 {
228  PWSTR pBuffer;
229 
234  dwMessage,
236  (LPWSTR)&pBuffer,
237  0,
238  NULL);
239  if (pBuffer)
240  {
242  ConPuts(StdOut, L"\n");
244  pBuffer = NULL;
245  }
246 }
247 
248 
249 VOID
251  LPWSTR lpInput,
252  DWORD dwLength,
253  BOOL bEcho)
254 {
255  DWORD dwOldMode;
256  DWORD dwRead = 0;
257  HANDLE hFile;
258  LPWSTR p;
259  PCHAR pBuf;
260 
261  pBuf = HeapAlloc(GetProcessHeap(), 0, dwLength - 1);
262  ZeroMemory(lpInput, dwLength * sizeof(WCHAR));
264  GetConsoleMode(hFile, &dwOldMode);
265 
267 
268  ReadFile(hFile, (PVOID)pBuf, dwLength - 1, &dwRead, NULL);
269 
270  MultiByteToWideChar(CP_OEMCP, 0, pBuf, dwRead, lpInput, dwLength - 1);
271  HeapFree(GetProcessHeap(), 0, pBuf);
272 
273  for (p = lpInput; *p; p++)
274  {
275  if (*p == L'\x0d')
276  {
277  *p = L'\0';
278  break;
279  }
280  }
281 
282  SetConsoleMode(hFile, dwOldMode);
283 }
284 
285 
286 int wmain(int argc, WCHAR **argv)
287 {
288  WCHAR szDllBuffer[MAX_PATH];
289  PCOMMAND cmdptr;
290  int nResult = 0;
291  BOOL bRun = FALSE;
292 
293  /* Initialize the Console Standard Streams */
295 
296  /* Load netmsg.dll */
297  GetSystemDirectoryW(szDllBuffer, ARRAYSIZE(szDllBuffer));
298  wcscat(szDllBuffer, L"\\netmsg.dll");
299 
300  hModuleNetMsg = LoadLibrary(szDllBuffer);
301  if (hModuleNetMsg == NULL)
302  {
303  ConPrintf(StdErr, L"Failed to load netmsg.dll\n");
304  return 1;
305  }
306 
307  if (argc < 2)
308  {
309  nResult = 1;
310  goto done;
311  }
312 
313  /* Scan the command table */
314  for (cmdptr = cmds; cmdptr->name; cmdptr++)
315  {
316  if (_wcsicmp(argv[1], cmdptr->name) == 0)
317  {
318  nResult = cmdptr->func(argc, argv);
319  bRun = TRUE;
320  break;
321  }
322  }
323 
324 done:
325  if (bRun == FALSE)
326  {
327  PrintMessageString(4381);
328  ConPuts(StdOut, L"\n");
329  PrintNetMessage(MSG_NET_SYNTAX);
330  }
331 
332  if (hModuleNetMsg != NULL)
334 
335  return nResult;
336 }
337 
339 {
340  ConPuts(StdOut, L"This command is not implemented yet\n");
341  return 1;
342 }
signed char * PCHAR
Definition: retypes.h:7
struct _COMMAND COMMAND
GLenum func
Definition: glext.h:6028
static int argc
Definition: ServiceArgs.c:12
VOID PrintMessageStringV(DWORD dwMessage,...)
Definition: main.c:79
#define ERROR_SUCCESS
Definition: deptool.c:10
#define LoadLibrary
Definition: winbase.h:3718
INT cmdSyntax(INT argc, WCHAR **argv)
Definition: cmdHelp.c:180
#define TRUE
Definition: types.h:120
uint16_t * PWSTR
Definition: typedefs.h:56
#define FORMAT_MESSAGE_ARGUMENT_ARRAY
Definition: winbase.h:421
BOOL WINAPI GetConsoleMode(HANDLE hConsoleHandle, LPDWORD lpMode)
Definition: console.c:1571
#define INT
Definition: polytest.cpp:20
_In_ DWORD nLength
Definition: wincon.h:476
COMMAND cmds[]
Definition: main.c:21
INT ConPuts(IN PCON_STREAM Stream, IN PCWSTR szStr)
Definition: outstream.c:427
INT unimplemented(INT argc, WCHAR **argv)
Definition: main.c:338
BOOL bEcho
Definition: batch.c:73
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
#define ZeroMemory
Definition: winbase.h:1664
INT cmdStart(INT argc, WCHAR **argv)
Definition: cmdStart.c:163
HANDLE WINAPI GetStdHandle(IN DWORD nStdHandle)
Definition: console.c:200
INT(* func)(INT, WCHAR **)
Definition: main.c:17
VOID PrintNetMessage(DWORD dwMessage)
Definition: main.c:225
#define swprintf
Definition: precomp.h:40
#define argv
Definition: mplay32.c:18
DWORD WINAPI FormatMessageW(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPWSTR lpBuffer, DWORD nSize, __ms_va_list *args)
Definition: format_msg.c:583
int wmain(int argc, WCHAR *argv[])
Definition: main.c:269
Definition: match.c:390
int32_t INT
Definition: typedefs.h:58
VOID ReadFromConsole(LPWSTR lpInput, DWORD dwLength, BOOL bEcho)
Definition: main.c:250
#define ENABLE_ECHO_INPUT
Definition: wincon.h:80
INT cmdShare(INT argc, WCHAR **argv)
Definition: cmdShare.c:94
#define ConInitStdStreams()
Definition: stream.h:128
#define va_end(ap)
Definition: acmsvcex.h:90
#define FALSE
Definition: types.h:117
#define UNICODE_NULL
unsigned int BOOL
Definition: ntddk_ex.h:94
struct _COMMAND * PCOMMAND
#define MIN_LANMAN_MESSAGE_ID
Definition: lmcons.h:10
BOOL WINAPI DECLSPEC_HOTPATCH SetConsoleMode(HANDLE hConsoleHandle, DWORD dwMode)
Definition: console.c:1608
VOID PrintErrorMessage(DWORD dwError)
Definition: main.c:157
INT cmdComputer(INT argc, WCHAR **argv)
Definition: cmdComputer.c:11
#define FORMAT_MESSAGE_ALLOCATE_BUFFER
Definition: winbase.h:416
INT cmdConfig(INT argc, WCHAR **argv)
Definition: cmdConfig.c:165
PVOID pBuffer
INT cmdHelp(INT argc, WCHAR **argv)
Definition: cmdHelp.c:12
char * va_list
Definition: acmsvcex.h:78
INT cmdHelpMsg(INT argc, WCHAR **argv)
Definition: cmdHelpMsg.c:14
#define STD_INPUT_HANDLE
Definition: winbase.h:264
#define FORMAT_MESSAGE_FROM_SYSTEM
Definition: winbase.h:420
#define FORMAT_MESSAGE_FROM_HMODULE
Definition: winbase.h:419
#define FreeLibrary(x)
Definition: compat.h:607
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
#define MAX_LANMAN_MESSAGE_ID
Definition: lmcons.h:11
#define MAX_BUFFER_SIZE
Definition: main.c:12
__wchar_t WCHAR
Definition: xmlstorage.h:180
static DWORD DWORD * dwLength
Definition: fusion.c:85
#define MAX_PATH
Definition: compat.h:34
INT cmdAccounts(INT argc, WCHAR **argv)
Definition: cmdAccounts.c:13
unsigned long DWORD
Definition: ntddk_ex.h:95
#define ENABLE_LINE_INPUT
Definition: wincon.h:79
va_start(ap, x)
#define StdErr
Definition: stream.h:83
INT cmdContinue(INT argc, WCHAR **argv)
Definition: cmdContinue.c:12
INT ConResPuts(IN PCON_STREAM Stream, IN UINT uID)
Definition: outstream.c:610
static const WCHAR L[]
Definition: oid.c:1250
INT cmdUse(INT argc, WCHAR **argv)
Definition: cmdUse.c:104
INT __cdecl ConPrintf(IN PCON_STREAM Stream, IN PCWSTR szStr,...)
Definition: outstream.c:520
INT cmdUser(INT argc, WCHAR **argv)
Definition: cmdUser.c:1148
INT cmdStop(INT argc, WCHAR **argv)
Definition: cmdStop.c:12
_In_ HANDLE hFile
Definition: mswsock.h:90
int chr(char *serport)
Definition: gdblib.c:152
#define FORMAT_MESSAGE_IGNORE_INSERTS
Definition: winbase.h:417
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
VOID PrintPaddedMessageString(DWORD dwMessage, INT nPaddedLength)
Definition: main.c:129
VOID PrintPaddedResourceString(UINT uID, INT nPaddedLength)
Definition: main.c:50
VOID PrintMessageString(DWORD dwMessage)
Definition: main.c:106
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1577
INT cmdStatistics(INT argc, WCHAR **argv)
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
Definition: path.c:2312
#define ReadFile(a, b, c, d, e)
Definition: compat.h:601
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
unsigned int UINT
Definition: ndis.h:50
INT cmdLocalGroup(INT argc, WCHAR **argv)
#define NULL
Definition: types.h:112
VOID PrintPadding(WCHAR chr, INT nPaddedLength)
Definition: main.c:63
#define MultiByteToWideChar
Definition: compat.h:110
#define StdOut
Definition: stream.h:82
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:838
INT cmdPause(INT argc, WCHAR **argv)
Definition: cmdPause.c:12
HMODULE hModuleNetMsg
Definition: main.c:46
GLfloat GLfloat p
Definition: glext.h:8902
WCHAR * LPWSTR
Definition: xmlstorage.h:184
INT cmdGroup(INT argc, WCHAR **argv)
Definition: cmdGroup.c:154
Definition: main.c:14
#define CP_OEMCP
Definition: winnls.h:228
#define HeapFree(x, y, z)
Definition: compat.h:594
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define LANG_USER_DEFAULT
Definition: tnerror.cpp:50
WCHAR * name
Definition: main.c:16