add support for /macrofile (bit hacky - but it should work for RosBE)
[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 printf(_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 == ' ')
53 param++;
54
55 /* error if no '=' found */
56 if ((ptr = _tcschr (param, _T('='))) == 0)
57 {
58 return 1;
59 }
60
61 while (*param == ' ')
62 param++;
63
64 /* Split rest into name and substitute */
65 *ptr++ = _T('\0');
66
67 partstrlwr (param);
68
69 if (ptr[0] == _T('\0'))
70 AddConsoleAlias(param, NULL, _T("cmd.exe"));
71 else
72 AddConsoleAlias(param, ptr, _T("cmd.exe"));
73
74 return 0;
75 }
76
77 static VOID ReadFromFile(LPTSTR param)
78 {
79 FILE* fp;
80 char line[MAX_PATH];
81
82 /* FIXME */
83 param += 11;
84
85 fp = _tfopen(param,"r");
86 while ( fgets(line, MAX_PATH, fp) != NULL)
87 SetMacro(line);
88
89 fclose(fp);
90 return;
91 }
92
93 int
94 main (int argc, char **argv)
95 {
96
97 if (argc < 2)
98 return 0;
99
100 if (argv[1][0] == '/')
101 {
102 if (strnicmp(argv[1], "/macrofile", 10) == 0)
103 ReadFromFile(argv[1]);
104 if (stricmp(argv[1], "/macros") == 0)
105 PrintAlias();
106 }
107 else
108 {
109 SetMacro(argv[1]);
110 }
111
112
113
114 return 0;
115 }
116