Rev 7787 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 7787 | Rev 8827 | ||
---|---|---|---|
1 | /// =========================================================== |
1 | void command_history_add() { |
- | 2 | int i; |
|
2 | - | ||
3 | void command_history_add() |
- | |
4 | { |
- | |
5 | - | ||
6 | int i; |
- | |
7 | 3 | ||
8 | if ('\0' == CMD[0]) return; |
4 | if ('\0' == CMD[0]) return; |
9 | 5 | ||
10 | CMD_NUM = -1; |
6 | CMD_NUM = -1; |
11 | 7 | ||
12 | for (i = 0; i < CMD_HISTORY_NUM_REAL; i++) |
8 | for (i = 0; i < CMD_HISTORY_NUM_REAL; i++) |
13 | if ( 0 == strcmp( CMD_HISTORY[i], CMD ) ) |
9 | if ( 0 == strcmp( CMD_HISTORY[i], CMD ) ) |
14 | return; |
10 | return; |
15 | 11 | ||
16 | for (i = CMD_HISTORY_NUM_REAL; i > 0 ; i--) |
12 | for (i = CMD_HISTORY_NUM_REAL; i > 0 ; i--) |
17 | strcpy(CMD_HISTORY[i], CMD_HISTORY[i-1]); |
13 | strcpy(CMD_HISTORY[i], CMD_HISTORY[i-1]); |
18 | - | ||
- | 14 | ||
19 | strcpy(CMD_HISTORY[0], CMD); |
15 | strcpy(CMD_HISTORY[0], CMD); |
20 | 16 | ||
21 | if (CMD_HISTORY_NUM_REAL < CMD_HISTORY_NUM-1) |
17 | if (CMD_HISTORY_NUM_REAL < CMD_HISTORY_NUM-1) |
22 | CMD_HISTORY_NUM_REAL++; |
18 | CMD_HISTORY_NUM_REAL++; |
23 | 19 | ||
24 | } |
20 | } |
25 | // ============================================================ |
21 | |
26 | 22 | ||
27 | char * insert_string( char s1[], unsigned int pos, const char s2[] ) |
23 | char * insert_string( char s1[], unsigned int pos, const char s2[] ) |
28 | { |
24 | { |
29 | unsigned int n1 = strlen( s1 ); |
25 | unsigned int n1 = strlen( s1 ); |
30 | unsigned int n2 = strlen( s2 ); |
26 | unsigned int n2 = strlen( s2 ); |
31 | 27 | ||
32 | if ( n1 < pos ) pos = n1; |
28 | if ( n1 < pos ) pos = n1; |
33 | 29 | ||
34 | unsigned int i; |
30 | unsigned int i; |
35 | for ( i = 0; i < n1 - pos; i++ ) |
31 | for ( i = 0; i < n1 - pos; i++ ) |
36 | { |
32 | { |
37 | s1[n1 + n2 - i - 1] = s1[n1 - i - 1]; |
33 | s1[n1 + n2 - i - 1] = s1[n1 - i - 1]; |
38 | } |
34 | } |
39 | 35 | ||
40 | for ( i = 0; i < n2; i++) |
36 | for ( i = 0; i < n2; i++) |
41 | { |
37 | { |
42 | s1[pos+i] = s2[i]; |
38 | s1[pos+i] = s2[i]; |
43 | } |
39 | } |
44 | 40 | ||
45 | s1[n1 + n2] = '\0'; |
41 | s1[n1 + n2] = '\0'; |
46 | 42 | ||
47 | return s1; |
43 | return s1; |
48 | } |
44 | } |
49 | 45 | ||
50 | /// =========================================================== |
- | |
- | 46 | ||
51 | 47 | ||
52 | void command_get() |
48 | void command_get() |
53 | { |
49 | { |
54 | unsigned key; |
50 | unsigned key; |
55 | 51 | ||
56 | unsigned i; |
- | |
57 | unsigned cmdLen = 0; |
- | |
58 | unsigned cmdPos = 0; |
- | |
59 | CMD[0] = '\0'; |
- | |
60 | - | ||
61 | int clipNum; // number of clipboard slots |
- | |
62 | char* clipBuf; // clipboard buffer |
- | |
63 | char clipCopy[255+12]; |
- | |
64 | - | ||
65 | for (;;) |
- | |
66 | { |
- | |
67 | key = getch(); |
- | |
68 | if ( 0 != (key & 0xff) ) |
- | |
69 | { |
- | |
70 | key &= 0xff; |
- | |
71 | switch (key) |
- | |
72 | { |
- | |
73 | case 27: // ESC |
- | |
74 | for (i = cmdPos; i < cmdLen; i++) |
- | |
75 | printf(" "); |
- | |
76 | for (i = cmdLen; i > 0; i--) |
- | |
77 | printf("%c %c", 8, 8); |
- | |
78 | cmdLen = 0; |
- | |
79 | cmdPos = 0; |
- | |
80 | CMD[0] = '\0'; |
- | |
81 | break; |
- | |
82 | - | ||
83 | case 13: // ENTER |
- | |
84 | printf("\n\r"); |
- | |
85 | command_history_add(); |
- | |
86 | return; |
- | |
87 | - | ||
88 | case 8: // BACKSPACE |
- | |
89 | if (cmdPos > 0) |
- | |
90 | { |
- | |
91 | for (i = cmdPos-1; i < cmdLen; i++) |
- | |
92 | CMD[i] = CMD[i+1]; |
- | |
93 | for (i = 0; i < cmdLen-cmdPos; i++) |
- | |
94 | printf (" "); |
- | |
95 | - | ||
96 | for (i = 0; i < cmdLen; i++) |
- | |
97 | printf ("%c %c", 8, 8); |
- | |
98 | - | ||
99 | printf("%s", CMD); |
- | |
100 | - | ||
101 | for (i = 0; i < cmdLen-cmdPos; i++) |
- | |
102 | printf("%c", 8); |
- | |
103 | - | ||
104 | cmdPos--; |
- | |
105 | cmdLen--; |
- | |
106 | } |
- | |
107 | break; |
- | |
108 | - | ||
109 | - | ||
110 | case 9: // TAB |
- | |
111 | break; |
- | |
112 | - | ||
113 | - | ||
114 | case 22: // Ctrl+V |
- | |
115 | clipNum = kol_clip_num(); |
- | |
116 | if (clipNum > 0) |
- | |
117 | { |
- | |
118 | clipBuf = kol_clip_get(clipNum-1); |
- | |
119 | // printf("Length: %d, Type: %d, Encoding: %d\n", (int) *clipBuf, (int)*(clipBuf+4), (int)*(clipBuf+8)); |
- | |
120 | if ( (int) *clipBuf > 0 ) // is clipboard empty? |
- | |
121 | { |
- | |
122 | if ((int)*(clipBuf+4)==0) // text? |
- | |
123 | { |
- | |
124 | if ((int)*(clipBuf+8)==1) // 866 encoding? |
- | |
125 | { |
- | |
126 | // clear previous text |
- | |
127 | for (i = cmdPos; i < cmdLen; i++) |
- | |
128 | printf(" "); |
- | |
129 | for (i = cmdLen; i > 0; i--) |
- | |
130 | printf("%c %c", 8, 8); |
- | |
131 | - | ||
132 | char *pasteText = clipBuf + 12; |
- | |
133 | int pasteLen = strlen(pasteText); |
- | |
134 | insert_string(CMD, cmdPos, pasteText); |
- | |
135 | cmdLen = strlen(CMD); |
- | |
136 | cmdPos += pasteLen; |
- | |
137 | printf("%s", CMD); |
- | |
138 | for (i = 0; i < cmdLen-cmdPos; i++) printf("%c", 8); // rewind the internal console cursor |
- | |
139 | } |
- | |
140 | } |
- | |
141 | } |
- | |
142 | } |
- | |
143 | break; |
- | |
144 | - | ||
145 | - | ||
146 | case 3: // Ctrl+C |
- | |
147 | if ( cmdLen > 0 ) |
- | |
148 | { |
- | |
149 | - | ||
150 | *clipCopy = 12 + cmdLen; |
- | |
151 | *(clipCopy+4)=0; |
- | |
152 | *(clipCopy+8)=1; |
- | |
153 | - | ||
154 | for (i = 0; i <= cmdLen; i++) |
- | |
155 | *(clipCopy+12+i) = CMD[i]; |
- | |
156 | - | ||
157 | kol_clip_set(12+cmdLen, clipCopy); |
- | |
158 | - | ||
159 | } |
- | |
160 | break; |
- | |
161 | - | ||
162 | - | ||
163 | default: |
- | |
164 | if (cmdLen < 255) |
- | |
165 | { |
- | |
166 | if ( kol_key_control() & 0x40 ) // ¥á«¨ ¢ª«îçñ CapsLock |
- | |
167 | if ( (kol_key_control() & 1) || (kol_key_control() & 2)) // ¥á«¨ ¦ âë è¨äâë |
- | |
168 | key = tolower(key); |
- | |
169 | else |
- | |
170 | key = toupper(key); |
- | |
171 | - | ||
172 | for (i = cmdLen+1; i > cmdPos; i--) |
- | |
173 | CMD[i] = CMD[i-1]; |
- | |
174 | - | ||
175 | CMD[cmdPos] = key; |
- | |
176 | - | ||
177 | for (i = cmdPos; i > 0; i--) |
- | |
178 | printf("%c %c", 8, 8); |
- | |
179 | - | ||
180 | printf("%s", CMD); |
- | |
181 | - | ||
182 | for (i = 0; i < cmdLen-cmdPos; i++) |
- | |
183 | printf("%c", 8); |
- | |
184 | - | ||
185 | cmdPos++; |
- | |
186 | cmdLen++; |
- | |
187 | } |
- | |
188 | break; |
- | |
189 | - | ||
190 | } |
- | |
191 | } |
- | |
192 | else |
- | |
193 | { |
- | |
194 | key = (key>>8)&0xff; |
- | |
195 | switch (key) |
- | |
196 | { |
- | |
197 | case 83: // Del |
- | |
198 | if (cmdPos < cmdLen) |
- | |
199 | { |
- | |
200 | for (i = cmdPos; i < cmdLen; i++) |
- | |
201 | CMD[i] = CMD[i+1]; |
- | |
202 | - | ||
203 | for (i = 0; i < cmdLen-cmdPos; i++) |
- | |
204 | printf(" "); |
- | |
205 | - | ||
206 | for (i = 0; i < cmdLen-cmdPos; i++) |
- | |
207 | printf("%c", 8); |
- | |
208 | - | ||
209 | for (i = cmdPos; i < cmdLen; i++) |
- | |
210 | printf("%c", CMD[i]); |
- | |
211 | - | ||
212 | for (i = 0; i < cmdLen-cmdPos; i++) |
- | |
213 | printf("%c", 8); |
- | |
214 | - | ||
215 | cmdLen--; |
- | |
216 | } |
- | |
217 | break; |
- | |
218 | - | ||
219 | - | ||
220 | case 0x47: // Home |
- | |
221 | // move internal cursor and cmdPos to the beginning of the line |
- | |
222 | for (;cmdPos > 0; cmdPos--) {printf("%c", 8);} |
- | |
223 | break; |
- | |
224 | - | ||
225 | case 0x4F: // End |
- | |
226 | // move internal cursor and cmdPos to the end of the line |
- | |
227 | for (;cmdPos < cmdLen; cmdPos++) {printf("%c", CMD[cmdPos]);} |
- | |
228 | break; |
- | |
229 | - | ||
230 | case 75: // Left |
- | |
231 | if (cmdPos > 0) |
- | |
232 | { |
- | |
233 | printf("%c", 8); |
- | |
234 | cmdPos--; |
- | |
235 | } |
- | |
236 | break; |
- | |
237 | - | ||
238 | - | ||
239 | case 77: // Right |
- | |
240 | if (cmdPos < cmdLen) |
- | |
241 | { |
- | |
242 | printf("%c", CMD[cmdPos]); |
- | |
243 | cmdPos++; |
- | |
244 | } |
- | |
245 | break; |
- | |
246 | - | ||
247 | - | ||
248 | case 72: // Up |
- | |
249 | if (CMD_HISTORY_NUM_REAL > 0 && CMD_NUM >= -1) |
- | |
250 | { |
- | |
251 | - | ||
252 | for (i = cmdPos; i < cmdLen; i++) |
- | |
253 | printf(" "); |
- | |
254 | - | ||
255 | for (i = cmdLen; i > 0; i--) |
- | |
256 | printf("%c %c", 8, 8); |
- | |
257 | - | ||
258 | if (CMD_NUM < CMD_HISTORY_NUM_REAL-1) |
- | |
259 | CMD_NUM++; |
- | |
260 | /* else |
- | |
261 | CMD_NUM = 0; |
- | |
262 | */ |
- | |
263 | printf("%s", CMD_HISTORY[CMD_NUM]); |
- | |
264 | strcpy(CMD, CMD_HISTORY[CMD_NUM]); |
- | |
265 | cmdLen = strlen(CMD); |
- | |
266 | cmdPos = strlen(CMD); |
- | |
267 | - | ||
268 | } |
- | |
269 | - | ||
270 | break; |
- | |
271 | - | ||
272 | - | ||
273 | case 80: // Down |
- | |
274 | if (CMD_HISTORY_NUM_REAL > 0 && CMD_NUM >= 0) |
- | |
275 | { |
- | |
276 | - | ||
277 | for (i = cmdPos; i < cmdLen; i++) |
- | |
278 | printf(" "); |
- | |
279 | - | ||
280 | for (i = cmdLen; i > 0; i--) |
- | |
281 | printf("%c %c", 8, 8); |
- | |
282 | - | ||
283 | if (CMD_NUM > 0) |
- | |
284 | CMD_NUM--; |
- | |
285 | /* else |
- | |
286 | CMD_NUM = CMD_HISTORY_NUM_REAL-1; |
- | |
287 | */ |
- | |
288 | printf("%s", CMD_HISTORY[CMD_NUM]); |
- | |
289 | strcpy(CMD, CMD_HISTORY[CMD_NUM]); |
- | |
290 | cmdLen = strlen(CMD); |
- | |
291 | cmdPos = strlen(CMD); |
- | |
292 | - | ||
293 | } |
- | |
294 | break; |
- | |
295 | - | ||
296 | - | ||
297 | case 0: // console window closed |
- | |
298 | cmd_exit(NULL); |
- | |
299 | - | ||
300 | } |
- | |
301 | - | ||
- | 52 | unsigned i; |
|
- | 53 | unsigned cmdLen = 0; |
|
- | 54 | unsigned cmdPos = 0; |
|
- | 55 | CMD[0] = '\0'; |
|
- | 56 | ||
- | 57 | int clipNum; // number of clipboard slots |
|
- | 58 | char* clipBuf; // clipboard buffer |
|
- | 59 | char clipCopy[255+12]; |
|
- | 60 | ||
- | 61 | for (;;) { |
|
- | 62 | key = getch(); |
|
- | 63 | if ( 0 != (key & 0xff) ) { |
|
- | 64 | key &= 0xff; |
|
- | 65 | switch (key) { |
|
- | 66 | case 27: // ESC |
|
- | 67 | for (i = cmdPos; i < cmdLen; i++) |
|
- | 68 | printf(" "); |
|
- | 69 | for (i = cmdLen; i > 0; i--) |
|
- | 70 | printf("%c %c", 8, 8); |
|
- | 71 | cmdLen = 0; |
|
- | 72 | cmdPos = 0; |
|
- | 73 | CMD[0] = '\0'; |
|
- | 74 | break; |
|
- | 75 | ||
- | 76 | case 13: // ENTER |
|
- | 77 | printf("\n\r"); |
|
- | 78 | command_history_add(); |
|
- | 79 | return; |
|
- | 80 | ||
- | 81 | case 8: // BACKSPACE |
|
- | 82 | if (cmdPos > 0) |
|
- | 83 | { |
|
- | 84 | for (i = cmdPos-1; i < cmdLen; i++) |
|
- | 85 | CMD[i] = CMD[i+1]; |
|
- | 86 | for (i = 0; i < cmdLen-cmdPos; i++) |
|
- | 87 | printf (" "); |
|
- | 88 | ||
- | 89 | for (i = 0; i < cmdLen; i++) |
|
- | 90 | printf ("%c %c", 8, 8); |
|
- | 91 | ||
- | 92 | printf("%s", CMD); |
|
- | 93 | ||
- | 94 | for (i = 0; i < cmdLen-cmdPos; i++) |
|
- | 95 | printf("%c", 8); |
|
- | 96 | ||
- | 97 | cmdPos--; |
|
- | 98 | cmdLen--; |
|
- | 99 | } |
|
- | 100 | break; |
|
- | 101 | ||
- | 102 | ||
- | 103 | case 9: // TAB |
|
- | 104 | break; |
|
- | 105 | ||
- | 106 | ||
- | 107 | case 22: // Ctrl+V |
|
- | 108 | clipNum = _ksys_clip_num(); |
|
- | 109 | if (clipNum > 0) |
|
- | 110 | { |
|
- | 111 | clipBuf = _ksys_clip_get(clipNum-1); |
|
- | 112 | // printf("Length: %d, Type: %d, Encoding: %d\n", (int) *clipBuf, (int)*(clipBuf+4), (int)*(clipBuf+8)); |
|
- | 113 | if ( (int) *clipBuf > 0 ) // is clipboard empty? |
|
- | 114 | { |
|
- | 115 | if ((int)*(clipBuf+4)==0) // text? |
|
- | 116 | { |
|
- | 117 | if ((int)*(clipBuf+8)==1) // 866 encoding? |
|
- | 118 | { |
|
- | 119 | // clear previous text |
|
- | 120 | for (i = cmdPos; i < cmdLen; i++) |
|
- | 121 | printf(" "); |
|
- | 122 | for (i = cmdLen; i > 0; i--) |
|
- | 123 | printf("%c %c", 8, 8); |
|
- | 124 | ||
- | 125 | char *pasteText = clipBuf + 12; |
|
- | 126 | int pasteLen = strlen(pasteText); |
|
- | 127 | insert_string(CMD, cmdPos, pasteText); |
|
- | 128 | cmdLen = strlen(CMD); |
|
- | 129 | cmdPos += pasteLen; |
|
- | 130 | printf("%s", CMD); |
|
- | 131 | for (i = 0; i < cmdLen-cmdPos; i++) printf("%c", 8); // rewind the internal console cursor |
|
- | 132 | } |
|
- | 133 | } |
|
- | 134 | } |
|
- | 135 | } |
|
- | 136 | break; |
|
- | 137 | ||
- | 138 | ||
- | 139 | case 3: // Ctrl+C |
|
- | 140 | if ( cmdLen > 0 ) |
|
- | 141 | { |
|
- | 142 | ||
- | 143 | *clipCopy = 12 + cmdLen; |
|
- | 144 | *(clipCopy+4)=0; |
|
- | 145 | *(clipCopy+8)=1; |
|
- | 146 | ||
- | 147 | for (i = 0; i <= cmdLen; i++) |
|
- | 148 | *(clipCopy+12+i) = CMD[i]; |
|
- | 149 | ||
- | 150 | _ksys_clip_set(12+cmdLen, clipCopy); |
|
- | 151 | ||
- | 152 | } |
|
- | 153 | break; |
|
- | 154 | ||
- | 155 | ||
- | 156 | default: |
|
- | 157 | if (cmdLen < 255) |
|
- | 158 | { |
|
- | 159 | if ( kol_key_control() & 0x40 ) // � ������ CapsLock |
|
- | 160 | if ( (kol_key_control() & 1) || (kol_key_control() & 2)) // � ������ ���� |
|
- | 161 | key = tolower(key); |
|
- | 162 | else |
|
- | 163 | key = toupper(key); |
|
- | 164 | ||
- | 165 | for (i = cmdLen+1; i > cmdPos; i--) |
|
- | 166 | CMD[i] = CMD[i-1]; |
|
- | 167 | ||
- | 168 | CMD[cmdPos] = key; |
|
- | 169 | ||
- | 170 | for (i = cmdPos; i > 0; i--) |
|
- | 171 | printf("%c %c", 8, 8); |
|
- | 172 | ||
- | 173 | printf("%s", CMD); |
|
- | 174 | ||
- | 175 | for (i = 0; i < cmdLen-cmdPos; i++) |
|
- | 176 | printf("%c", 8); |
|
- | 177 | ||
- | 178 | cmdPos++; |
|
- | 179 | cmdLen++; |
|
- | 180 | } |
|
- | 181 | break; |
|
- | 182 | ||
- | 183 | } |
|
- | 184 | } |
|
- | 185 | else |
|
- | 186 | { |
|
- | 187 | key = (key>>8)&0xff; |
|
- | 188 | switch (key) |
|
- | 189 | { |
|
- | 190 | case 83: // Del |
|
- | 191 | if (cmdPos < cmdLen) |
|
- | 192 | { |
|
- | 193 | for (i = cmdPos; i < cmdLen; i++) |
|
- | 194 | CMD[i] = CMD[i+1]; |
|
- | 195 | ||
- | 196 | for (i = 0; i < cmdLen-cmdPos; i++) |
|
- | 197 | printf(" "); |
|
302 | } |
198 | |
- | 199 | for (i = 0; i < cmdLen-cmdPos; i++) |
|
- | 200 | printf("%c", 8); |
|
303 | } |
201 | |
- | 202 | for (i = cmdPos; i < cmdLen; i++) |
|
- | 203 | printf("%c", CMD[i]); |
|
- | 204 | ||
- | 205 | for (i = 0; i < cmdLen-cmdPos; i++) |
|
- | 206 | printf("%c", 8); |
|
- | 207 | ||
- | 208 | cmdLen--; |
|
- | 209 | } |
|
- | 210 | break; |
|
- | 211 | ||
- | 212 | ||
- | 213 | case 0x47: // Home |
|
- | 214 | // move internal cursor and cmdPos to the beginning of the line |
|
- | 215 | for (;cmdPos > 0; cmdPos--) {printf("%c", 8);} |
|
- | 216 | break; |
|
- | 217 | ||
- | 218 | case 0x4F: // End |
|
- | 219 | // move internal cursor and cmdPos to the end of the line |
|
- | 220 | for (;cmdPos < cmdLen; cmdPos++) {printf("%c", CMD[cmdPos]);} |
|
- | 221 | break; |
|
- | 222 | ||
- | 223 | case 75: // Left |
|
- | 224 | if (cmdPos > 0) |
|
- | 225 | { |
|
- | 226 | printf("%c", 8); |
|
- | 227 | cmdPos--; |
|
- | 228 | } |
|
- | 229 | break; |
|
- | 230 | ||
- | 231 | ||
- | 232 | case 77: // Right |
|
- | 233 | if (cmdPos < cmdLen) |
|
- | 234 | { |
|
- | 235 | printf("%c", CMD[cmdPos]); |
|
- | 236 | cmdPos++; |
|
- | 237 | } |
|
- | 238 | break; |
|
- | 239 | ||
- | 240 | ||
- | 241 | case 72: // Up |
|
- | 242 | if (CMD_HISTORY_NUM_REAL > 0 && CMD_NUM >= -1) |
|
- | 243 | { |
|
- | 244 | ||
- | 245 | for (i = cmdPos; i < cmdLen; i++) |
|
- | 246 | printf(" "); |
|
- | 247 | ||
- | 248 | for (i = cmdLen; i > 0; i--) |
|
- | 249 | printf("%c %c", 8, 8); |
|
- | 250 | ||
- | 251 | if (CMD_NUM < CMD_HISTORY_NUM_REAL-1) |
|
- | 252 | CMD_NUM++; |
|
- | 253 | /* else |
|
- | 254 | CMD_NUM = 0; |
|
- | 255 | */ |
|
- | 256 | printf("%s", CMD_HISTORY[CMD_NUM]); |
|
- | 257 | strcpy(CMD, CMD_HISTORY[CMD_NUM]); |
|
- | 258 | cmdLen = strlen(CMD); |
|
- | 259 | cmdPos = strlen(CMD); |
|
- | 260 | ||
- | 261 | } |
|
- | 262 | ||
- | 263 | break; |
|
- | 264 | ||
- | 265 | ||
- | 266 | case 80: // Down |
|
- | 267 | if (CMD_HISTORY_NUM_REAL > 0 && CMD_NUM >= 0) |
|
- | 268 | { |
|
- | 269 | ||
- | 270 | for (i = cmdPos; i < cmdLen; i++) |
|
- | 271 | printf(" "); |
|
- | 272 | ||
- | 273 | for (i = cmdLen; i > 0; i--) |
|
- | 274 | printf("%c %c", 8, 8); |
|
- | 275 | ||
- | 276 | if (CMD_NUM > 0) |
|
- | 277 | CMD_NUM--; |
|
- | 278 | /* else |
|
- | 279 | CMD_NUM = CMD_HISTORY_NUM_REAL-1; |
|
- | 280 | */ |
|
- | 281 | printf("%s", CMD_HISTORY[CMD_NUM]); |
|
- | 282 | strcpy(CMD, CMD_HISTORY[CMD_NUM]); |
|
- | 283 | cmdLen = strlen(CMD); |
|
- | 284 | cmdPos = strlen(CMD); |
|
- | 285 | ||
- | 286 | } |
|
- | 287 | break; |
|
- | 288 | ||
- | 289 | ||
- | 290 | case 0: // console window closed |
|
- | 291 | cmd_exit(NULL); |
|
- | 292 | ||
- | 293 | } // switch end |
|
- | 294 | } // if end |
|
- | 295 | } // for end |
|
304 | 296 | ||
305 | } |
297 | } |
306 | 298 | ||
307 | /// =========================================================== |
- | |
- | 299 | ||
308 | 300 | ||
309 | int command_get_cmd(char cmd[]) |
301 | int command_get_cmd(char cmd[]) |
310 | { |
302 | { |
311 | unsigned i, len; |
303 | unsigned i, len; |
312 | int quote = 0; |
304 | int quote = 0; |
313 | 305 | ||
314 | if (CMD[0]=='"') |
306 | if (CMD[0]=='"') |
315 | quote = 1; |
307 | quote = 1; |
316 | 308 | ||
317 | if (quote == 0) |
309 | if (quote == 0) |
318 | { |
310 | { |
319 | for (i=0;;i++) |
311 | for (i=0;;i++) |
320 | { |
312 | { |
321 | cmd[i] = CMD[i]; |
313 | cmd[i] = CMD[i]; |
322 | if (0 == cmd[i]) |
314 | if (0 == cmd[i]) |
323 | return i; |
315 | return i; |
324 | if ( iswhite(cmd[i]) ) |
316 | if ( iswhite(cmd[i]) ) |
325 | { |
317 | { |
326 | cmd[i] = '\0'; |
318 | cmd[i] = '\0'; |
327 | break; |
319 | break; |
328 | } |
320 | } |
329 | } |
321 | } |
330 | return i+1; |
322 | return i+1; |
331 | } |
323 | } |
332 | else |
324 | else |
333 | { |
325 | { |
334 | len = 0; |
326 | len = 0; |
335 | for (i=1;;i++) |
327 | for (i=1;;i++) |
336 | { |
328 | { |
337 | cmd[len] = CMD[i]; |
329 | cmd[len] = CMD[i]; |
338 | if (0 == cmd[len]) |
330 | if (0 == cmd[len]) |
339 | { |
331 | { |
340 | i--; |
332 | i--; |
341 | break; |
333 | break; |
342 | } |
334 | } |
343 | if ( cmd[len] == '"' ) |
335 | if ( cmd[len] == '"' ) |
344 | { |
336 | { |
345 | cmd[len] = '\0'; |
337 | cmd[len] = '\0'; |
346 | break; |
338 | break; |
347 | } |
339 | } |
348 | len++; |
340 | len++; |
349 | } |
341 | } |
350 | trim(cmd); |
342 | trim(cmd); |
351 | return i+1; |
343 | return i+1; |
352 | } |
344 | } |
353 | } |
- | |
- | 345 | } |
|
354 | 346 | ||
355 | /// =========================================================== |
347 | |
356 | 348 | ||
357 | typedef int (*handler1_t)(char* arg); |
349 | typedef int (*handler1_t)(char* arg); |
358 | 350 | ||
359 | /// =========================================================== |
- | |
- | 351 | ||
360 | 352 | ||
361 | void command_execute() |
353 | void command_execute() |
362 | { |
354 | { |
363 | char cmd[256]; |
355 | char cmd[256]; |
364 | char args[256]; |
356 | char args[256]; |
365 | unsigned arg; |
357 | unsigned arg; |
366 | int i; |
358 | int i; |
367 | int result; |
359 | int result; |
368 | 360 | ||
369 | trim(CMD); |
361 | trim(CMD); |
370 | arg = command_get_cmd(cmd); |
362 | arg = command_get_cmd(cmd); |
371 | 363 | ||
372 | if ( !strlen(cmd) ) |
364 | if ( !strlen(cmd) ) |
373 | return; |
365 | return; |
374 | 366 | ||
375 | strcpy(args, CMD+arg); |
367 | strcpy(args, CMD+arg); |
376 | trim(args); |
368 | trim(args); |
377 | 369 | ||
378 | for (i = 0; i < NUM_OF_CMD; i++) |
370 | for (i = 0; i < NUM_OF_CMD; i++) { |
379 | { |
371 | if (!strcmp(cmd, COMMANDS[i].name)) { |
380 | if (!strcmp(cmd, COMMANDS[i].name)) |
- | |
381 | { |
372 | result = ((handler1_t)COMMANDS[i].handler)(args); |
382 | result = ((handler1_t)COMMANDS[i].handler)(args); |
- | |
383 | if (result == FALSE) |
373 | if (result == FALSE) { |
384 | { |
374 | printf(UNKNOWN_CMD_ERROR); |
385 | #if LANG_ENG |
- | |
386 | printf(" Error!\n\r"); |
- | |
387 | #elif LANG_RUS |
375 | } |
388 | printf(" 訡ª !\n\r"); |
376 | return; |
389 | #endif |
- | |
390 | } |
- | |
391 | return; |
- | |
392 | } |
377 | } |
393 | } |
- | |
394 | - | ||
395 | - | ||
396 | if ( -1 != alias_search(CMD) ) |
- | |
397 | { |
- | |
398 | strcpy(CMD, ALIASES+64*1024+256*alias_search(CMD)); |
- | |
399 | command_execute(); |
- | |
400 | return; |
- | |
401 | } |
378 | } |
402 | 379 | ||
403 | executable_run(cmd, args); |
- | |
404 | - | ||
- | 380 | if ( -1 != alias_search(CMD) ) { |
|
- | 381 | strcpy(CMD, ALIASES+64*1024+256*alias_search(CMD)); |
|
- | 382 | command_execute(); |
|
- | 383 | return; |
|
405 | } |
384 | } |
406 | 385 | ||
- | 386 | executable_run(cmd, args); |
|
407 | /// ===========================================================>>>>>>>>>>>>>>=>>>>>>>>>>>>> |
387 | |
- | 388 | }>>>>>>>>>>>>>>=>>>>>>>>>>>>> |