Bring back ext2 code from branch
[reactos.git] / reactos / base / applications / cmdutils / doskey / doskey.c
1 #include <windows.h>
2 #include <stdio.h>
3 #include <tchar.h>
4
5 static VOID
6 partstrlwr (LPTSTR str)
7 {
8 LPTSTR c = str;
9 while (*c && !_istspace (*c) && *c != _T('='))
10 {
11 *c = _totlower (*c);
12 c++;
13 }
14 }
15
16 static VOID
17 PrintAlias (VOID)
18 {
19 LPTSTR Aliases;
20 LPTSTR ptr;
21 DWORD len;
22
23 len = GetConsoleAliasesLength(_T("cmd.exe"));
24 if (len <= 0)
25 return;
26
27 /* allocate memory for an extra \0 char to make parsing easier */
28 ptr = HeapAlloc(GetProcessHeap(), 0, (len + sizeof(TCHAR)));
29 if (!ptr)
30 return;
31
32 Aliases = ptr;
33
34 ZeroMemory(Aliases, len + sizeof(TCHAR));
35
36 if (GetConsoleAliases(Aliases, len, _T("cmd.exe")) != 0)
37 {
38 while (*Aliases != '\0')
39 {
40 _tprintf(_T("%s\n"), Aliases);
41 Aliases = Aliases + lstrlen(Aliases);
42 Aliases++;
43 }
44 }
45 HeapFree(GetProcessHeap(), 0 , ptr);
46 }
47
48 INT SetMacro (LPTSTR param)
49 {
50 LPTSTR ptr;
51
52 while (*param == _T(' '))
53 param++;
54
55 /* error if no '=' found */
56 if ((ptr = _tcschr (param, _T('='))) == 0)
57 return 1;
58
59 while (*param == _T(' '))
60 param++;
61
62 while (*ptr == _T(' '))
63 ptr--;
64
65 /* Split rest into name and substitute */
66 *ptr++ = _T('\0');
67
68 partstrlwr (param);
69
70 _tprintf(_T("%s, %s\n"), ptr, param);
71
72 if (ptr[0] == _T('\0'))
73 AddConsoleAlias(param, NULL, _T("cmd.exe"));
74 else
75 AddConsoleAlias(param, ptr, _T("cmd.exe"));
76
77 return 0;
78 }
79
80 static VOID ReadFromFile(LPSTR param)
81 {
82 FILE* fp;
83 char line[MAX_PATH];
84 #ifdef UNICODE
85 WCHAR lineW[MAX_PATH];
86 #endif
87
88 /* FIXME */
89 param += 11;
90
91 fp = fopen(param,"r");
92 while ( fgets(line, MAX_PATH, fp) != NULL)
93 {
94 #ifdef UNICODE
95 MultiByteToWideChar(CP_ACP, 0, line, -1, lineW, MAX_PATH);
96 SetMacro(lineW);
97 #else
98 SetMacro(line);
99 #endif
100 }
101
102 fclose(fp);
103 return;
104 }
105
106 int
107 main (int argc, char **argv)
108 {
109 #ifdef UNICODE
110 WCHAR lineW[MAX_PATH];
111 #endif
112
113 if (argc < 2)
114 return 0;
115
116 if (argv[1][0] == '/')
117 {
118 if (strnicmp(argv[1], "/macrofile", 10) == 0)
119 ReadFromFile(argv[1]);
120 if (stricmp(argv[1], "/macros") == 0)
121 PrintAlias();
122 }
123 else
124 {
125 #ifdef UNICODE
126 MultiByteToWideChar(CP_ACP, 0, argv[1], -1, lineW, MAX_PATH);
127 SetMacro(lineW);
128 #else
129 SetMacro(argv[1]);
130 #endif
131 }
132
133 return 0;
134 }
135