ReactOS  0.4.15-dev-5463-g138eb58
help.c
Go to the documentation of this file.
1 /*
2  * PROJECT: ReactOS DiskPart
3  * LICENSE: GPL - See COPYING in the top level directory
4  * FILE: base/system/diskpart/help.c
5  * PURPOSE: Manages all the partitions of the OS in an interactive way.
6  * PROGRAMMERS: Lee Schroeder
7  */
8 
9 #include "diskpart.h"
10 
11 /*
12  * HelpCommandList():
13  * shows all the available commands and basic descriptions for diskpart
14  */
15 VOID
17 {
18  PCOMMAND cmdptr;
19  WCHAR szFormat[64];
20  WCHAR szOutput[256];
21 
23 
24  /* Print the header information */
26  ConPuts(StdOut, L"\n");
27 
28  /* List all the commands and the basic descriptions */
29  for (cmdptr = cmds; cmdptr->cmd1; cmdptr++)
30  {
31  if ((cmdptr->cmd1 != NULL) &&
32  (cmdptr->cmd2 == NULL) &&
33  (cmdptr->cmd3 == NULL) &&
34  (cmdptr->help != IDS_NONE))
35  {
36  K32LoadStringW(GetModuleHandle(NULL), cmdptr->help, szOutput, ARRAYSIZE(szOutput));
37  ConPrintf(StdOut, szFormat, cmdptr->cmd1, szOutput);
38  }
39  }
40 
41  ConPuts(StdOut, L"\n");
42 }
43 
44 
45 BOOL
47  PCOMMAND pCommand)
48 {
49  PCOMMAND cmdptr;
50  BOOL bSubCommands = FALSE;
51  WCHAR szFormat[64];
52  WCHAR szOutput[256];
53 
55 
56  ConPuts(StdOut, L"\n");
57 
58  /* List all the commands and the basic descriptions */
59  for (cmdptr = cmds; cmdptr->cmd1; cmdptr++)
60  {
61  if (pCommand->cmd1 != NULL && pCommand->cmd2 == NULL && pCommand->cmd3 == NULL)
62  {
63  if ((cmdptr->cmd1 != NULL && wcsicmp(pCommand->cmd1, cmdptr->cmd1) == 0) &&
64  (cmdptr->cmd2 != NULL) &&
65  (cmdptr->cmd3 == NULL) &&
66  (cmdptr->help != IDS_NONE))
67  {
68  K32LoadStringW(GetModuleHandle(NULL), cmdptr->help, szOutput, ARRAYSIZE(szOutput));
69  ConPrintf(StdOut, szFormat, cmdptr->cmd2, szOutput);
70  bSubCommands = TRUE;
71  }
72  }
73  else if (pCommand->cmd1 != NULL && pCommand->cmd2 != NULL && pCommand->cmd3 == NULL)
74  {
75  if ((cmdptr->cmd1 != NULL && wcsicmp(pCommand->cmd1, cmdptr->cmd1) == 0) &&
76  (cmdptr->cmd2 != NULL && wcsicmp(pCommand->cmd2, cmdptr->cmd2) == 0) &&
77  (cmdptr->cmd3 != NULL) &&
78  (cmdptr->help != IDS_NONE))
79  {
80  K32LoadStringW(GetModuleHandle(NULL), cmdptr->help, szOutput, ARRAYSIZE(szOutput));
81  ConPrintf(StdOut, szFormat, cmdptr->cmd3, szOutput);
82  bSubCommands = TRUE;
83  }
84  }
85  else if (pCommand->cmd1 != NULL && pCommand->cmd2 != NULL && pCommand->cmd3 != NULL)
86  {
87  if ((cmdptr->cmd1 != NULL && wcsicmp(pCommand->cmd1, cmdptr->cmd1) == 0) &&
88  (cmdptr->cmd2 != NULL && wcsicmp(pCommand->cmd2, cmdptr->cmd2) == 0) &&
89  (cmdptr->cmd3 != NULL && wcsicmp(pCommand->cmd3, cmdptr->cmd3) == 0) &&
90  (cmdptr->help_detail != MSG_NONE))
91  {
94  NULL,
95  cmdptr->help_detail,
97  bSubCommands = TRUE;
98  }
99  }
100  }
101 
102  if ((bSubCommands == FALSE) && (pCommand->help_detail != MSG_NONE))
103  {
106  NULL,
107  pCommand->help_detail,
109  }
110 
111  ConPuts(StdOut, L"\n");
112 
113  return TRUE;
114 }
115 
116 
117 /* help_main(char *arg):
118  * main entry point for the help command. Gives help to users who needs it.
119  */
121 {
122  PCOMMAND cmdptr;
123  PCOMMAND cmdptr1 = NULL;
124  PCOMMAND cmdptr2 = NULL;
125  PCOMMAND cmdptr3 = NULL;
126 
127  if (argc == 1)
128  {
129  HelpCommandList();
130  return TRUE;
131  }
132 
133  /* Scan internal command table */
134  for (cmdptr = cmds; cmdptr->cmd1; cmdptr++)
135  {
136  if ((cmdptr1 == NULL) &&
137  (cmdptr->cmd1 != NULL && wcsicmp(argv[1], cmdptr->cmd1) == 0))
138  {
139  cmdptr1 = cmdptr;
140  }
141 
142  if ((cmdptr2 == NULL) &&
143  (argc >= 3) &&
144  (cmdptr->cmd1 != NULL && wcsicmp(argv[1], cmdptr->cmd1) == 0) &&
145  (cmdptr->cmd2 != NULL && wcsicmp(argv[2], cmdptr->cmd2) == 0))
146  {
147  cmdptr2 = cmdptr;
148  }
149 
150  if ((cmdptr3 == NULL) &&
151  (argc >= 4) &&
152  (cmdptr->cmd1 != NULL && wcsicmp(argv[1], cmdptr->cmd1) == 0) &&
153  (cmdptr->cmd2 != NULL && wcsicmp(argv[2], cmdptr->cmd2) == 0) &&
154  (cmdptr->cmd3 != NULL && wcsicmp(argv[3], cmdptr->cmd3) == 0))
155  {
156  cmdptr3 = cmdptr;
157  }
158  }
159 
160  if (cmdptr3 != NULL)
161  {
162  return HelpCommand(cmdptr3);
163  }
164  else if (cmdptr2 != NULL)
165  {
166  return HelpCommand(cmdptr2);
167  }
168  else if (cmdptr1 != NULL)
169  {
170  return HelpCommand(cmdptr1);
171  }
172 
173  HelpCommandList();
174 
175  return TRUE;
176 }
PWSTR cmd2
Definition: diskpart.h:58
static int argc
Definition: ServiceArgs.c:12
BOOL HelpCommand(PCOMMAND pCommand)
Definition: help.c:46
#define TRUE
Definition: types.h:120
#define IDS_NONE
Definition: resource.h:133
COMMAND cmds[]
Definition: main.c:21
BOOL help_main(INT argc, LPWSTR *argv)
Definition: help.c:120
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
INT WINAPI K32LoadStringW(IN HINSTANCE hInstance OPTIONAL, IN UINT uID, OUT LPWSTR lpBuffer, IN INT nBufferMax)
Definition: utils.c:173
#define argv
Definition: mplay32.c:18
int32_t INT
Definition: typedefs.h:58
DWORD help_detail
Definition: diskpart.h:62
void ConPuts(FILE *fp, LPCWSTR psz)
Definition: fc.c:16
#define L(x)
Definition: ntvdm.h:50
#define MSG_NONE
Definition: resource.h:12
PWSTR cmd1
Definition: diskpart.h:57
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
void ConResPuts(FILE *fp, UINT nID)
Definition: fc.c:27
#define FORMAT_MESSAGE_FROM_HMODULE
Definition: winbase.h:422
INT help
Definition: diskpart.h:61
__wchar_t WCHAR
Definition: xmlstorage.h:180
INT ConMsgPuts(IN PCON_STREAM Stream, IN DWORD dwFlags, IN LPCVOID lpSource OPTIONAL, IN DWORD dwMessageId, IN DWORD dwLanguageId)
Definition: outstream.c:837
#define wcsicmp
Definition: compat.h:15
void ConPrintf(FILE *fp, LPCWSTR psz,...)
Definition: fc.c:20
#define GetModuleHandle
Definition: winbase.h:3698
#define NULL
Definition: types.h:112
PWSTR cmd3
Definition: diskpart.h:59
#define IDS_APP_HEADER
Definition: resource.h:14
#define StdOut
Definition: fc.c:14
VOID HelpCommandList(VOID)
Definition: help.c:16
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define IDS_HELP_FORMAT_STRING
Definition: resource.h:64
Definition: main.c:14
#define LANG_USER_DEFAULT
Definition: tnerror.cpp:50