ReactOS 0.4.15-dev-8058-ga7cbb60
alias.c
Go to the documentation of this file.
1/*
2 * ALIAS.C - alias administration module.
3 *
4 *
5 * History:
6 *
7 * 02/02/1996 (Oliver Mueller)
8 * started.
9 *
10 * 02/03/1996 (Oliver Mueller)
11 * Added sorting algorithm and case sensitive substitution by using
12 * partstrupr().
13 *
14 * 27 Jul 1998 John P. Price
15 * added config.h include
16 * added ifdef's to disable aliases
17 *
18 * 09-Dec-1998 Eric Kohl
19 * Fixed crash when removing an alias in DeleteAlias().
20 * Added help text ("/?").
21 *
22 * 14-Jan-1998 Eric Kohl
23 * Clean up and Unicode safe!
24 *
25 * 24-Jan-1998 Eric Kohl
26 * Redirection safe!
27 *
28 * 02-Apr-2005 (Magnus Olsen <magnus@greatlord.com>)
29 * Remove all hardcoded strings in En.rc
30 *
31 * 02-Feb-2008 (Christoph von Wittich <christoph_vw@reactos.org>)
32 * rewrote alias handling for doskey compat
33 */
34
35
36#include "precomp.h"
37
38#ifdef FEATURE_ALIASES
39
40/* module internal functions */
41/* strlwr only for first word in string */
42static VOID
44{
45 LPTSTR c = str;
46 while (*c && !_istspace (*c) && *c != _T('='))
47 {
48 *c = _totlower (*c);
49 c++;
50 }
51}
52
53static VOID
55{
56 LPTSTR Aliases;
57 LPTSTR ptr;
58 DWORD len;
59
60 len = GetConsoleAliasesLength(_T("cmd.exe"));
61 if (len == 0)
62 return;
63
64 /* allocate memory for an extra \0 char to make parsing easier */
65 ptr = cmd_alloc(len + sizeof(TCHAR));
66 if (!ptr)
67 {
68 WARN("Cannot allocate memory for ptr!\n");
69 return;
70 }
71
72 Aliases = ptr;
73
74 ZeroMemory(Aliases, len + sizeof(TCHAR));
75
76 if (GetConsoleAliases(Aliases, len, _T("cmd.exe")) != 0)
77 {
78 while (*Aliases != '\0')
79 {
80 ConOutPrintf(_T("%s\n"), Aliases);
81 Aliases = Aliases + lstrlen(Aliases);
82 Aliases++;
83 }
84 }
86}
87
88/* specified routines */
90{
92 TCHAR *position, *in, *out;
94 LPTSTR tmp;
95
96 tmp = cmd_dup(cmd);
97 if (!tmp)
98 return;
99
100 /* first part is the macro name */
101 position = tmp + _tcscspn(tmp, _T(" \n"));
102 if (position == tmp)
103 {
104 cmd_free(tmp);
105 return;
106 }
107 *position++ = _T('\0');
108 position += _tcsspn(position, _T(" "));
109
110 buffer = cmd_alloc(maxlen);
111 if (!buffer)
112 {
113 WARN("Cannot allocate memory for alias buffer!\n");
114 cmd_free(tmp);
115 return;
116 }
117
118 if (GetConsoleAlias(tmp, buffer, maxlen, _T("cmd.exe")) == 0)
119 {
120 cmd_free(tmp);
122 return;
123 }
124
125 in = buffer;
126 out = cmd;
127 while (*in)
128 {
129 if (*in == _T('$'))
130 {
131 Token = position;
132 if (in[1] >= _T('1') && in[1] <= _T('9'))
133 {
134 /* Copy a single space-delimited token from the input line */
135 INT num;
136 for (num = in[1] - _T('1'); num > 0; num--)
137 {
138 Token += _tcscspn(Token, _T(" \n"));
139 Token += _tcsspn(Token, _T(" "));
140 }
141 while (!_tcschr(_T(" \n"), *Token))
142 {
143 if (out >= &cmd[maxlen - 1])
144 break;
145 *out++ = *Token++;
146 }
147 in += 2;
148 continue;
149 }
150 else if (in[1] == _T('*'))
151 {
152 /* Copy the entire remainder of the line */
153 while (*Token && *Token != _T('\n'))
154 {
155 if (out >= &cmd[maxlen - 1])
156 break;
157 *out++ = *Token++;
158 }
159 in += 2;
160 continue;
161 }
162 }
163 if (out >= &cmd[maxlen - 1])
164 break;
165 *out++ = *in++;
166 }
167 *out++ = _T('\n');
168 *out = _T('\0');
169
171 cmd_free(tmp);
172}
173
175{
176 LPTSTR ptr;
177
178 if (!_tcsncmp (param, _T("/?"), 2))
179 {
181 return 0;
182 }
183
184 nErrorLevel = 0;
185
186 if (param[0] == _T('\0'))
187 {
188 PrintAlias ();
189 return 0;
190 }
191
192 nErrorLevel = 0;
193
194 /* error if no '=' found */
195 if ((ptr = _tcschr (param, _T('='))) == 0)
196 {
197 nErrorLevel = 1;
198 return 1;
199 }
200
201 /* Split rest into name and substitute */
202 *ptr++ = _T('\0');
203
205
206 if (ptr[0] == _T('\0'))
207 AddConsoleAlias(param, NULL, _T("cmd.exe"));
208 else
209 AddConsoleAlias(param, ptr, _T("cmd.exe"));
210
211 return 0;
212}
213#endif
static VOID PrintAlias(VOID)
Definition: alias.c:54
INT CommandAlias(LPTSTR param)
Definition: alias.c:174
VOID ExpandAlias(LPTSTR cmd, INT maxlen)
Definition: alias.c:89
static VOID partstrlwr(LPTSTR str)
Definition: alias.c:43
INT nErrorLevel
Definition: cmd.c:158
VOID ConOutResPaging(BOOL StartPaging, UINT resID)
Definition: console.c:182
#define ConOutPrintf(szStr,...)
Definition: console.h:41
#define STRING_ALIAS_HELP
Definition: resource.h:69
#define WARN(fmt,...)
Definition: debug.h:115
#define cmd_free(ptr)
Definition: cmddbg.h:31
#define cmd_alloc(size)
Definition: cmddbg.h:29
#define cmd_dup(str)
Definition: cmddbg.h:32
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint buffer
Definition: glext.h:5915
const GLubyte * c
Definition: glext.h:8905
GLuint in
Definition: glext.h:9616
GLuint GLuint num
Definition: glext.h:9618
GLfloat param
Definition: glext.h:5796
GLenum GLsizei len
Definition: glext.h:6722
#define _istspace
Definition: tchar.h:1504
#define _tcsncmp
Definition: tchar.h:1428
#define _tcscspn
Definition: tchar.h:1407
#define _tcsspn
Definition: tchar.h:1414
#define _tcschr
Definition: tchar.h:1406
#define _totlower
Definition: tchar.h:1511
static PVOID ptr
Definition: dispmode.c:27
static FILE * out
Definition: regtests2xml.c:44
const WCHAR * str
Definition: ftp_var.h:139
int32_t INT
Definition: typedefs.h:58
#define _T(x)
Definition: vfdio.h:22
#define ZeroMemory
Definition: winbase.h:1712
#define lstrlen
Definition: winbase.h:3876
#define GetConsoleAliases
Definition: wincon.h:771
#define AddConsoleAlias
Definition: wincon.h:769
#define GetConsoleAlias
Definition: wincon.h:770
#define GetConsoleAliasesLength
Definition: wincon.h:772
char TCHAR
Definition: xmlstorage.h:189
CHAR * LPTSTR
Definition: xmlstorage.h:192