xref: /reactos/base/applications/network/net/main.c (revision 8c2e9189)
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 {
16     WCHAR *name;
17     INT (*func)(INT, WCHAR**);
18 //    VOID (*help)(INT, WCHAR**);
19 } COMMAND, *PCOMMAND;
20 
21 COMMAND cmds[] =
22 {
23     {L"accounts",   cmdAccounts},
24     {L"computer",   unimplemented},
25     {L"config",     cmdConfig},
26     {L"continue",   cmdContinue},
27     {L"file",       unimplemented},
28     {L"group",      unimplemented},
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", unimplemented},
40     {L"stop",       cmdStop},
41     {L"time",       unimplemented},
42     {L"use",        cmdUse},
43     {L"user",       cmdUser},
44     {L"view",       unimplemented},
45     {NULL,          NULL}
46 };
47 
48 
49 
50 VOID
51 PrintPaddedResourceString(
52     UINT uID,
53     INT nPaddedLength)
54 {
55     INT nLength;
56 
57     nLength = ConResPuts(StdOut, uID);
58     if (nLength < nPaddedLength)
59         PrintPadding(L' ', nPaddedLength - nLength);
60 }
61 
62 
63 VOID
64 PrintPadding(
65     WCHAR chr,
66     INT nPaddedLength)
67 {
68     INT i;
69     WCHAR szMsgBuffer[MAX_BUFFER_SIZE];
70 
71     for (i = 0; i < nPaddedLength; i++)
72          szMsgBuffer[i] = chr;
73     szMsgBuffer[nPaddedLength] = UNICODE_NULL;
74 
75     ConPuts(StdOut, szMsgBuffer);
76 }
77 
78 
79 VOID
80 ReadFromConsole(
81     LPWSTR lpInput,
82     DWORD dwLength,
83     BOOL bEcho)
84 {
85     DWORD dwOldMode;
86     DWORD dwRead = 0;
87     HANDLE hFile;
88     LPWSTR p;
89     PCHAR pBuf;
90 
91     pBuf = HeapAlloc(GetProcessHeap(), 0, dwLength - 1);
92     ZeroMemory(lpInput, dwLength * sizeof(WCHAR));
93     hFile = GetStdHandle(STD_INPUT_HANDLE);
94     GetConsoleMode(hFile, &dwOldMode);
95 
96     SetConsoleMode(hFile, ENABLE_LINE_INPUT | (bEcho ? ENABLE_ECHO_INPUT : 0));
97 
98     ReadFile(hFile, (PVOID)pBuf, dwLength - 1, &dwRead, NULL);
99 
100     MultiByteToWideChar(CP_OEMCP, 0, pBuf, dwRead, lpInput, dwLength - 1);
101     HeapFree(GetProcessHeap(), 0, pBuf);
102 
103     for (p = lpInput; *p; p++)
104     {
105         if (*p == L'\x0d')
106         {
107             *p = L'\0';
108             break;
109         }
110     }
111 
112     SetConsoleMode(hFile, dwOldMode);
113 }
114 
115 
116 int wmain(int argc, WCHAR **argv)
117 {
118     PCOMMAND cmdptr;
119 
120     /* Initialize the Console Standard Streams */
121     ConInitStdStreams();
122 
123     if (argc < 2)
124     {
125         ConResPuts(StdOut, IDS_NET_SYNTAX);
126         return 1;
127     }
128 
129     /* Scan the command table */
130     for (cmdptr = cmds; cmdptr->name; cmdptr++)
131     {
132         if (_wcsicmp(argv[1], cmdptr->name) == 0)
133         {
134             return cmdptr->func(argc, argv);
135         }
136     }
137 
138     ConResPuts(StdOut, IDS_NET_SYNTAX);
139 
140     return 1;
141 }
142 
143 INT unimplemented(INT argc, WCHAR **argv)
144 {
145     ConPuts(StdOut, L"This command is not implemented yet\n");
146     return 1;
147 }
148