Reactos
1/*
2 * regexpl - Console Registry Explorer
3 *
4 * Copyright (C) 2000-2005 Nedko Arnaudov <nedko@users.sourceforge.net>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; see the file COPYING. If not, write to
18 * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 * Boston, MA 02111-1307, USA.
20 */
21
22// ShellCommandHelp.cpp: implementation of the CShellCommandHelp class.
23//
24//////////////////////////////////////////////////////////////////////
25
26#include "ph.h"
27#include "ShellCommandHelp.h"
28
29#define HELP_CMD _T("HELP")
30#define HELP_CMD_SHORT_DESC HELP_CMD _T(" command provides help information about Registry Explorer commands.\n")
31
32//////////////////////////////////////////////////////////////////////
33// Construction/Destruction
34//////////////////////////////////////////////////////////////////////
35
36CShellCommandHelp::CShellCommandHelp(CShellCommandsLinkedList& rCommandsLinkedList):m_rCommandsLinkedList(rCommandsLinkedList)
37{
38}
39
40CShellCommandHelp::~CShellCommandHelp()
41{
42
43}
44
45BOOL CShellCommandHelp::Match(const TCHAR *pchCommand)
46{
47 return _tcsicmp(pchCommand,HELP_CMD) == 0;
48}
49
50int CShellCommandHelp::Execute(CConsole &rConsole, CArgumentParser& rArguments)
51{
52 const TCHAR *pchArg = rArguments.GetNextArgument();
53 CShellCommand *pCommand;
54 if (pchArg == NULL)
55 {
56 POSITION pos = m_rCommandsLinkedList.GetFirstCommandPosition();
57 while(pos)
58 {
59 pCommand = m_rCommandsLinkedList.GetNextCommand(pos);
60 rConsole.Write(pCommand->GetHelpShortDescriptionString());
61 }
62
63 return 0;
64 }
65
66 if (_tcsicmp(pchArg,_T("GPL")) == 0)
67 {
68 HRSRC hrcGPL;
69 HGLOBAL hGPL;
70 char *pchGPL;
71 DWORD dwSize;
72 if ((hrcGPL = FindResource(NULL, _T("GPL"), _T("LICENSE")))&&
73 (hGPL = LoadResource(NULL,hrcGPL))&&
74 (pchGPL = (char *)LockResource(hGPL))&&
75 (dwSize = SizeofResource(NULL,hrcGPL)))
76 {
77 // save last char
78 char pchSaved[2];
79 pchSaved[0] = pchGPL[dwSize-1];
80 pchSaved[1] = 0;
81
82 // make null-terminated string
83 pchGPL[dwSize-1] = 0;
84
85 // replace all non-printable chars except CR, LF and HTAB with spaces
86 for (DWORD i = 0; i < dwSize ; i++)
87 if ((!isprint(pchGPL[i]))&&(pchGPL[i] != '\r')&&(pchGPL[i] != '\n')&&(pchGPL[i] != '\t'))
88 pchGPL[i] = ' ';
89
90 rConsole.Write(pchGPL);
91 rConsole.Write(pchSaved);
92 }
93 else
94 {
95 rConsole.Write(_T("Internal error cannot load GPL.\n"));
96 }
97 return 0;
98 }
99
100 while (pchArg)
101 {
102 pCommand = m_rCommandsLinkedList.Match(pchArg);
103 if ((!pCommand)&&((_tcsicmp(pchArg,_T("/?")) == 0)||(_tcsicmp(pchArg,_T("-?")) == 0)))
104 pCommand = this;
105
106 if (pCommand)
107 {
108 rConsole.Write(pCommand->GetHelpString());
109 }
110 else
111 {
112 rConsole.Write(_T("HELP: Unknown command \""));
113 rConsole.Write(pchArg);
114 rConsole.Write(_T("\"\n"));
115 }
116
117 pchArg = rArguments.GetNextArgument();
118 }
119 return 0;
120}
121
122const TCHAR * CShellCommandHelp::GetHelpString()
123{
124 return HELP_CMD_SHORT_DESC
125 _T("Syntax: ") HELP_CMD _T(" [<COMMAND>] [/?]\n")
126 _T(" COMMAND - Command for which help will be displayed.\n")
127 _T(" /? - This help.\n\n")
128 _T("Without parameters, command lists available commands.\n");
129}
130
131const TCHAR * CShellCommandHelp::GetHelpShortDescriptionString()
132{
133 return HELP_CMD_SHORT_DESC;
134}