* Sync up to trunk head (r65426).
[reactos.git] / base / shell / cmd / echo.c
1 /*
2 * ECHO.C - internal echo commands.
3 *
4 *
5 * History:
6 *
7 * 16 Jul 1998 (Hans B Pufal)
8 * Started.
9 *
10 * 16 Jul 1998 (John P Price)
11 * Separated commands into individual files.
12 *
13 * 27-Jul-1998 (John P Price <linux-guru@gcfl.net>)
14 * Added config.h include
15 *
16 * 08-Dec-1998 (Eric Kohl)
17 * Added help text ("/?").
18 *
19 * 19-Jan-1999 (Eric Kohl)
20 * Unicode and redirection ready!
21 *
22 * 13-Jul-2000 (Eric Kohl)
23 * Implemented 'echo.' and 'echoerr.'.
24 *
25 * 28-Apr-2005 (Magnus Olsen <magnus@greatlord.com>)
26 * Remove all hardcoded strings in En.rc
27 */
28
29 #include "precomp.h"
30
31 BOOL
32 OnOffCommand(LPTSTR param, LPBOOL flag, INT message)
33 {
34 TCHAR *p2;
35 if (_tcsnicmp(param, D_OFF, sizeof(D_OFF)/sizeof(TCHAR) - 1) == 0)
36 {
37 p2 = param + sizeof(D_OFF)/sizeof(TCHAR) - 1;
38 while (_istspace(*p2))
39 p2++;
40 if (*p2 == _T('\0'))
41 {
42 *flag = FALSE;
43 return TRUE;
44 }
45 }
46 else if (_tcsnicmp(param, D_ON, sizeof(D_ON)/sizeof(TCHAR) - 1) == 0)
47 {
48 p2 = param + sizeof(D_ON)/sizeof(TCHAR) - 1;
49 while (_istspace(*p2))
50 p2++;
51 if (*p2 == _T('\0'))
52 {
53 *flag = TRUE;
54 return TRUE;
55 }
56 }
57 else if (*param == _T('\0'))
58 {
59 ConOutResPrintf(message, *flag ? D_ON : D_OFF);
60 return TRUE;
61 }
62 return FALSE;
63 }
64
65 INT CommandEcho (LPTSTR param)
66 {
67 LPTSTR p1;
68
69 TRACE ("CommandEcho: '%s'\n", debugstr_aw(param));
70
71 /* skip all spaces for the check of '/?', 'ON' and 'OFF' */
72 p1 = param;
73 while(_istspace(*p1))
74 p1++;
75
76 if (!_tcsncmp (p1, _T("/?"), 2))
77 {
78 ConOutResPaging(TRUE,STRING_ECHO_HELP4);
79 return 0;
80 }
81
82 if (!OnOffCommand(p1, &bEcho, STRING_ECHO_HELP5))
83 {
84 /* skip the first character */
85 ConOutPuts(param + 1);
86 ConOutChar(_T('\n'));
87 }
88 return 0;
89 }
90
91 INT CommandEchos (LPTSTR param)
92 {
93 TRACE ("CommandEchos: '%s'\n", debugstr_aw(param));
94
95 if (!_tcsncmp (param, _T("/?"), 2))
96 {
97 ConOutResPuts(STRING_ECHO_HELP1);
98 return 0;
99 }
100
101 ConOutPrintf (_T("%s"), param);
102 return 0;
103 }
104
105
106 INT CommandEchoerr (LPTSTR param)
107 {
108 TRACE ("CommandEchoerr: '%s'\n", debugstr_aw(param));
109
110 if (!_tcsncmp (param, _T("/?"), 2))
111 {
112 ConOutResPuts(STRING_ECHO_HELP2);
113 return 0;
114 }
115
116 ConErrPuts (param);
117 return 0;
118 }
119
120
121 INT CommandEchoserr (LPTSTR param)
122 {
123 TRACE ("CommandEchoserr: '%s'\n", debugstr_aw(param));
124
125 if (!_tcsncmp (param, _T("/?"), 2))
126 {
127 ConOutResPuts(STRING_ECHO_HELP3);
128 return 0;
129 }
130
131 ConErrPrintf (_T("%s"), param);
132 return 0;
133 }
134
135 /* EOF */