Subversion Repositories Kolibri OS

Rev

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
}