ReactOS  0.4.15-dev-4873-gb671b1c
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 ((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 ((wcsicmp(pCommand->cmd1, cmdptr->cmd1) == 0) &&
76  (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 ((wcsicmp(pCommand->cmd1, cmdptr->cmd1) == 0) &&
88  (wcsicmp(pCommand->cmd2, cmdptr->cmd2) == 0) &&
89  (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  (wcsicmp(argv[1], cmdptr->cmd1) == 0))
138  cmdptr1 = cmdptr;
139 
140  if ((cmdptr2 == NULL) &&
141  (argc >= 3) &&
142  (wcsicmp(argv[1], cmdptr->cmd1) == 0) &&
143  (wcsicmp(argv[2], cmdptr->cmd2) == 0))
144  cmdptr2 = cmdptr;
145 
146  if ((cmdptr3 == NULL) &&
147  (argc >= 4) &&
148  (wcsicmp(argv[1], cmdptr->cmd1) == 0) &&
149  (wcsicmp(argv[2], cmdptr->cmd2) == 0) &&
150  (wcsicmp(argv[3], cmdptr->cmd3) == 0))
151  cmdptr3 = cmdptr;
152  }
153 
154  if (cmdptr3 != NULL)
155  {
156  return HelpCommand(cmdptr3);
157  }
158  else if (cmdptr2 != NULL)
159  {
160  return HelpCommand(cmdptr2);
161  }
162  else if (cmdptr1 != NULL)
163  {
164  return HelpCommand(cmdptr1);
165  }
166 
167  HelpCommandList();
168 
169  return TRUE;
170 }
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:124
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:419
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:3688
#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