ReactOS  0.4.13-dev-66-gc714b7f
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"name", unimplemented},
33  {L"pause", cmdPause},
34  {L"print", unimplemented},
35  {L"send", unimplemented},
36  {L"session", unimplemented},
37  {L"share", unimplemented},
38  {L"start", cmdStart},
39  {L"statistics", cmdStatistics},
40  {L"stop", cmdStop},
41  {L"syntax", cmdSyntax},
42  {L"time", unimplemented},
43  {L"use", cmdUse},
44  {L"user", cmdUser},
45  {L"view", unimplemented},
46  {NULL, NULL}
47 };
48 
50 
51 
52 VOID
54  UINT uID,
55  INT nPaddedLength)
56 {
57  INT nLength;
58 
59  nLength = ConResPuts(StdOut, uID);
60  if (nLength < nPaddedLength)
61  PrintPadding(L' ', nPaddedLength - nLength);
62 }
63 
64 
65 VOID
67  WCHAR chr,
68  INT nPaddedLength)
69 {
70  INT i;
71  WCHAR szMsgBuffer[MAX_BUFFER_SIZE];
72 
73  for (i = 0; i < nPaddedLength; i++)
74  szMsgBuffer[i] = chr;
75  szMsgBuffer[nPaddedLength] = UNICODE_NULL;
76 
77  ConPuts(StdOut, szMsgBuffer);
78 }
79 
80 
81 VOID
83  DWORD dwMessage,
84  ...)
85 {
86  PWSTR pBuffer;
87  va_list args = NULL;
88 
89  va_start(args, dwMessage);
90 
93  dwMessage,
95  (LPWSTR)&pBuffer,
96  0,
97  &args);
98  va_end(args);
99 
100  if (pBuffer)
101  {
104  pBuffer = NULL;
105  }
106 }
107 
108 VOID
110  DWORD dwMessage)
111 {
112  PWSTR pBuffer;
113 
117  dwMessage,
119  (LPWSTR)&pBuffer,
120  0,
121  NULL);
122  if (pBuffer)
123  {
126  pBuffer = NULL;
127  }
128 }
129 
130 
131 VOID
133  DWORD dwMessage,
134  INT nPaddedLength)
135 {
136  PWSTR pBuffer;
137  DWORD dwLength;
138 
142  dwMessage,
144  (LPWSTR)&pBuffer,
145  0,
146  NULL);
147  if (pBuffer)
148  {
151  pBuffer = NULL;
152  }
153 
154  if (dwLength < (DWORD)nPaddedLength)
155  PrintPadding(L' ', (DWORD)nPaddedLength - dwLength);
156 }
157 
158 
159 VOID
161  DWORD dwError)
162 {
163  WCHAR szErrorBuffer[16];
164  PWSTR pBuffer;
165  PWSTR pErrorInserts[2] = {NULL, NULL};
166 
167  if (dwError >= MIN_LANMAN_MESSAGE_ID && dwError <= MAX_LANMAN_MESSAGE_ID)
168  {
172  dwError,
174  (LPWSTR)&pBuffer,
175  0,
176  NULL);
177  if (pBuffer)
178  {
179  ConPrintf(StdErr, L"%s\n", pBuffer);
181  pBuffer = NULL;
182  }
183  }
184  else
185  {
188  NULL,
189  dwError,
191  (LPWSTR)&pBuffer,
192  0,
193  NULL);
194  if (pBuffer)
195  {
196  ConPrintf(StdErr, L"%s\n", pBuffer);
198  pBuffer = NULL;
199  }
200  }
201 
202  if (dwError != ERROR_SUCCESS)
203  {
204  /* Format insert for the 3514 message */
205  swprintf(szErrorBuffer, L"%lu", dwError);
206  pErrorInserts[0] = szErrorBuffer;
207 
208  /* Format and print the 3514 message */
212  3514,
214  (LPWSTR)&pBuffer,
215  0,
216  (va_list *)pErrorInserts);
217  if (pBuffer)
218  {
219  ConPrintf(StdErr, L"%s\n", pBuffer);
221  pBuffer = NULL;
222  }
223  }
224 }
225 
226 
227 VOID
229  DWORD dwMessage)
230 {
231  PWSTR pBuffer;
232 
237  dwMessage,
239  (LPWSTR)&pBuffer,
240  0,
241  NULL);
242  if (pBuffer)
243  {
245  ConPuts(StdOut, L"\n");
247  pBuffer = NULL;
248  }
249 }
250 
251 
252 VOID
254  LPWSTR lpInput,
255  DWORD dwLength,
256  BOOL bEcho)
257 {
258  DWORD dwOldMode;
259  DWORD dwRead = 0;
260  HANDLE hFile;
261  LPWSTR p;
262  PCHAR pBuf;
263 
264  pBuf = HeapAlloc(GetProcessHeap(), 0, dwLength - 1);
265  ZeroMemory(lpInput, dwLength * sizeof(WCHAR));
267  GetConsoleMode(hFile, &dwOldMode);
268 
270 
271  ReadFile(hFile, (PVOID)pBuf, dwLength - 1, &dwRead, NULL);
272 
273  MultiByteToWideChar(CP_OEMCP, 0, pBuf, dwRead, lpInput, dwLength - 1);
274  HeapFree(GetProcessHeap(), 0, pBuf);
275 
276  for (p = lpInput; *p; p++)
277  {
278  if (*p == L'\x0d')
279  {
280  *p = L'\0';
281  break;
282  }
283  }
284 
285  SetConsoleMode(hFile, dwOldMode);
286 }
287 
288 
289 int wmain(int argc, WCHAR **argv)
290 {
291  WCHAR szDllBuffer[MAX_PATH];
292  PCOMMAND cmdptr;
293  int nResult = 0;
294  BOOL bRun = FALSE;
295 
296  /* Initialize the Console Standard Streams */
298 
299  /* Load netmsg.dll */
300  GetSystemDirectoryW(szDllBuffer, ARRAYSIZE(szDllBuffer));
301  wcscat(szDllBuffer, L"\\netmsg.dll");
302 
303  hModuleNetMsg = LoadLibrary(szDllBuffer);
304  if (hModuleNetMsg == NULL)
305  {
306  ConPrintf(StdErr, L"Failed to load netmsg.dll\n");
307  return 1;
308  }
309 
310  if (argc < 2)
311  {
312  nResult = 1;
313  goto done;
314  }
315 
316  /* Scan the command table */
317  for (cmdptr = cmds; cmdptr->name; cmdptr++)
318  {
319  if (_wcsicmp(argv[1], cmdptr->name) == 0)
320  {
321  nResult = cmdptr->func(argc, argv);
322  bRun = TRUE;
323  break;
324  }
325  }
326 
327 done:
328  if (bRun == FALSE)
329  {
330  PrintMessageString(4381);
331  ConPuts(StdOut, L"\n");
332  PrintNetMessage(MSG_NET_SYNTAX);
333  }
334 
335  if (hModuleNetMsg != NULL)
337 
338  return nResult;
339 }
340 
342 {
343  ConPuts(StdOut, L"This command is not implemented yet\n");
344  return 1;
345 }
signed char * PCHAR
Definition: retypes.h:7
struct _COMMAND COMMAND
GLenum func
Definition: glext.h:6028
static int argc
Definition: ServiceArgs.c:12
#define TRUE
Definition: types.h:120
VOID PrintMessageStringV(DWORD dwMessage,...)
Definition: main.c:82
#define ERROR_SUCCESS
Definition: deptool.c:10
#define LoadLibrary
Definition: winbase.h:3676
INT cmdSyntax(INT argc, WCHAR **argv)
Definition: cmdHelp.c:201
uint16_t * PWSTR
Definition: typedefs.h:54
#define FORMAT_MESSAGE_ARGUMENT_ARRAY
Definition: winbase.h:405
BOOL WINAPI GetConsoleMode(HANDLE hConsoleHandle, LPDWORD lpMode)
Definition: console.c:1571
#define INT
Definition: polytest.cpp:20
_In_ DWORD nLength
Definition: wincon.h:461
COMMAND cmds[]
Definition: main.c:21
INT unimplemented(INT argc, WCHAR **argv)
Definition: main.c:341
BOOL bEcho
Definition: batch.c:68
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
#define ZeroMemory
Definition: winbase.h:1635
INT cmdStart(INT argc, WCHAR **argv)
Definition: cmdStart.c:163
HANDLE WINAPI GetStdHandle(IN DWORD nStdHandle)
Definition: console.c:152
INT(* func)(INT, WCHAR **)
Definition: main.c:17
VOID PrintNetMessage(DWORD dwMessage)
Definition: main.c:228
#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:56
VOID ReadFromConsole(LPWSTR lpInput, DWORD dwLength, BOOL bEcho)
Definition: main.c:253
#define ENABLE_ECHO_INPUT
Definition: wincon.h:77
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
#define ConInitStdStreams()
Definition: stream.h:122
#define va_end(ap)
Definition: acmsvcex.h:90
#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:160
INT cmdComputer(INT argc, WCHAR **argv)
Definition: cmdComputer.c:11
#define FORMAT_MESSAGE_ALLOCATE_BUFFER
Definition: winbase.h:400
INT __cdecl ConPrintf(IN PCON_STREAM Stream, IN LPWSTR szStr,...)
Definition: outstream.c:520
INT cmdConfig(INT argc, WCHAR **argv)
Definition: cmdConfig.c:165
smooth NULL
Definition: ftsmooth.c:416
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:404
#define FORMAT_MESSAGE_FROM_HMODULE
Definition: winbase.h:403
#define FreeLibrary(x)
Definition: compat.h:405
#define GetProcessHeap()
Definition: compat.h:395
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:83
#define MAX_PATH
Definition: compat.h:26
#define swprintf(buf, format,...)
Definition: sprintf.c:56
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:76
#define StdErr
Definition: stream.h:77
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 cmdUser(INT argc, WCHAR **argv)
Definition: cmdUser.c:684
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:401
VOID PrintPaddedMessageString(DWORD dwMessage, INT nPaddedLength)
Definition: main.c:132
VOID PrintPaddedResourceString(UINT uID, INT nPaddedLength)
Definition: main.c:53
VOID PrintMessageString(DWORD dwMessage)
Definition: main.c:109
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
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define va_start(ap, A)
Definition: acmsvcex.h:91
unsigned int UINT
Definition: ndis.h:50
INT cmdLocalGroup(INT argc, WCHAR **argv)
VOID PrintPadding(WCHAR chr, INT nPaddedLength)
Definition: main.c:66
INT ConPuts(IN PCON_STREAM Stream, IN LPWSTR szStr)
Definition: outstream.c:427
#define MultiByteToWideChar
Definition: compat.h:100
#define StdOut
Definition: stream.h:76
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:845
INT cmdPause(INT argc, WCHAR **argv)
Definition: cmdPause.c:12
HMODULE hModuleNetMsg
Definition: main.c:49
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
BOOL WINAPI ReadFile(IN HANDLE hFile, IN LPVOID lpBuffer, IN DWORD nNumberOfBytesToRead, OUT LPDWORD lpNumberOfBytesRead OPTIONAL, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: rw.c:123
#define CP_OEMCP
Definition: winnls.h:228
#define HeapFree(x, y, z)
Definition: compat.h:394
_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