Subversion Repositories Kolibri OS

Rev

Rev 6857 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1665 Nasarus 1
 
2
3
 
4050 Albom 4
{
1665 Nasarus 5
6
 
4050 Albom 7
1665 Nasarus 8
 
6822 siemargl 9
10
 
6825 siemargl 11
12
 
4050 Albom 13
	if ( 0 == strcmp( CMD_HISTORY[i], CMD ) )
6822 siemargl 14
		return;
15
1665 Nasarus 16
 
4050 Albom 17
	strcpy(CMD_HISTORY[i], CMD_HISTORY[i-1]);
18
1665 Nasarus 19
 
4050 Albom 20
21
 
22
	CMD_HISTORY_NUM_REAL++;
23
24
 
1665 Nasarus 25
// ============================================================
7787 rgimad 26
1665 Nasarus 27
 
7787 rgimad 28
{
29
    unsigned int n1 = strlen( s1 );
30
    unsigned int n2 = strlen( s2 );
31
4050 Albom 32
 
7787 rgimad 33
4050 Albom 34
 
7787 rgimad 35
    for (  i = 0; i < n1 - pos; i++ )
36
    {
37
        s1[n1 + n2 - i - 1] = s1[n1 - i - 1];
38
    }
39
40
 
41
    {
42
        s1[pos+i] = s2[i];
43
    }
44
45
 
46
47
 
48
}
49
50
 
1665 Nasarus 51
52
 
53
{
54
unsigned key;
55
56
 
4015 Albom 57
unsigned cmdLen = 0;
58
unsigned cmdPos = 0;
59
CMD[0] = '\0';
60
1665 Nasarus 61
 
4516 Albom 62
char* clipBuf; // clipboard buffer
63
char clipCopy[255+12];
64
65
 
1665 Nasarus 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++)
6822 siemargl 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;
1665 Nasarus 82
83
 
84
				printf("\n\r");
85
				command_history_add();
4050 Albom 86
				return;
1665 Nasarus 87
88
 
89
				if (cmdPos > 0)
4015 Albom 90
					{
1665 Nasarus 91
					for (i = cmdPos-1; i < cmdLen; i++)
6822 siemargl 92
										CMD[i] = CMD[i+1];
93
					for (i = 0; i < cmdLen-cmdPos; i++)
94
						printf (" ");
95
4015 Albom 96
 
6822 siemargl 97
						printf ("%c %c", 8, 8);
98
4015 Albom 99
 
100
101
 
6822 siemargl 102
						printf("%c", 8);
103
4015 Albom 104
 
6822 siemargl 105
					cmdLen--;
106
					}
1665 Nasarus 107
				break;
108
109
 
4015 Albom 110
 
1665 Nasarus 111
				break;
112
4516 Albom 113
 
114
 
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
								{
6822 siemargl 126
									// clear previous text
7787 rgimad 127
									for (i = cmdPos; i < cmdLen; i++)
128
										printf(" ");
129
									for (i = cmdLen; i > 0; i--)
130
										printf("%c %c", 8, 8);
131
1665 Nasarus 132
 
7787 rgimad 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
								}
4516 Albom 140
							}
6822 siemargl 141
						}
4516 Albom 142
					}
143
				break;
144
145
 
146
 
147
				if ( cmdLen > 0 )
148
					{
149
150
 
151
					*(clipCopy+4)=0;
152
					*(clipCopy+8)=1;
153
154
 
155
						*(clipCopy+12+i) = CMD[i];
156
157
 
158
159
 
160
				break;
6822 siemargl 161
4516 Albom 162
 
163
 
1665 Nasarus 164
				if (cmdLen < 255)
4015 Albom 165
					{
1665 Nasarus 166
					if ( kol_key_control() & 0x40 ) // ¥á«¨ ¢ª«îçñ­ CapsLock
3247 Albom 167
						if ( (kol_key_control() & 1) || (kol_key_control() & 2)) // ¥á«¨ ­ ¦ âë è¨äâë
4015 Albom 168
							key = tolower(key);
2174 Albom 169
						else
170
							key = toupper(key);
171
172
 
4516 Albom 173
						CMD[i] = CMD[i-1];
174
4015 Albom 175
 
176
177
 
4516 Albom 178
						printf("%c %c", 8, 8);
179
4015 Albom 180
 
181
182
 
4516 Albom 183
						printf("%c", 8);
184
4015 Albom 185
 
186
					cmdLen++;
4516 Albom 187
					}
1665 Nasarus 188
				break;
6822 siemargl 189
1665 Nasarus 190
 
4516 Albom 191
		}
192
	else
6822 siemargl 193
		{
194
		key = (key>>8)&0xff;
195
		switch (key)
196
			{
4516 Albom 197
			case 83: // Del
6822 siemargl 198
				if (cmdPos < cmdLen)
199
					{
200
						for (i = cmdPos; i < cmdLen; i++)
201
							CMD[i] = CMD[i+1];
202
1665 Nasarus 203
 
6822 siemargl 204
							printf(" ");
205
4015 Albom 206
 
6822 siemargl 207
							printf("%c", 8);
208
4015 Albom 209
 
6822 siemargl 210
							printf("%c", CMD[i]);
211
4015 Albom 212
 
6822 siemargl 213
							printf("%c", 8);
214
4015 Albom 215
 
6822 siemargl 216
					}
217
				break;
218
4015 Albom 219
 
7787 rgimad 220
 
221
				// move internal cursor and cmdPos to the beginning of the line
222
				for (;cmdPos > 0; cmdPos--) {printf("%c", 8);}
223
				break;
224
225
 
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
 
6822 siemargl 231
				if (cmdPos > 0)
232
					{
233
						printf("%c", 8);
234
						cmdPos--;
235
					}
236
				break;
237
4015 Albom 238
 
239
 
6822 siemargl 240
				if (cmdPos < cmdLen)
241
					{
242
						printf("%c", CMD[cmdPos]);
243
						cmdPos++;
244
					}
245
				break;
246
4015 Albom 247
 
248
 
6822 siemargl 249
				if (CMD_HISTORY_NUM_REAL > 0 && CMD_NUM >= -1)
250
					{
1665 Nasarus 251
252
 
4050 Albom 253
						printf(" ");
254
4015 Albom 255
 
4050 Albom 256
						printf("%c %c", 8, 8);
257
4015 Albom 258
 
6822 siemargl 259
						CMD_NUM++;
260
/*					else
261
						CMD_NUM = 0;
1665 Nasarus 262
*/
6822 siemargl 263
					printf("%s", CMD_HISTORY[CMD_NUM]);
264
					strcpy(CMD, CMD_HISTORY[CMD_NUM]);
1665 Nasarus 265
					cmdLen = strlen(CMD);
4050 Albom 266
					cmdPos = strlen(CMD);
267
4015 Albom 268
 
1665 Nasarus 269
4050 Albom 270
 
1665 Nasarus 271
272
 
4015 Albom 273
 
6822 siemargl 274
				if (CMD_HISTORY_NUM_REAL > 0 && CMD_NUM >= 0)
275
					{
1665 Nasarus 276
277
 
4050 Albom 278
						printf(" ");
279
4015 Albom 280
 
4050 Albom 281
						printf("%c %c", 8, 8);
282
4015 Albom 283
 
6822 siemargl 284
						CMD_NUM--;
285
/*					else
286
						CMD_NUM = CMD_HISTORY_NUM_REAL-1;
4050 Albom 287
*/
6822 siemargl 288
					printf("%s", CMD_HISTORY[CMD_NUM]);
289
					strcpy(CMD, CMD_HISTORY[CMD_NUM]);
1665 Nasarus 290
					cmdLen = strlen(CMD);
4050 Albom 291
					cmdPos = strlen(CMD);
292
293
 
1665 Nasarus 294
				break;
295
296
 
4015 Albom 297
 
1665 Nasarus 298
				cmd_exit(NULL);
299
300
 
6822 siemargl 301
1665 Nasarus 302
 
6822 siemargl 303
	}
304
1665 Nasarus 305
 
4015 Albom 306
1665 Nasarus 307
 
308
309
 
310
{
311
unsigned i, len;
3245 Albom 312
int quote = 0;
313
314
 
315
   quote = 1;
316
317
 
318
	{
6822 siemargl 319
	for (i=0;;i++)
320
		{
1665 Nasarus 321
		cmd[i] = CMD[i];
6822 siemargl 322
		if (0 == cmd[i])
323
			return i;
324
		if ( iswhite(cmd[i]) )
325
			{
326
			cmd[i] = '\0';
327
			break;
328
			}
329
		}
3245 Albom 330
	return i+1;
6822 siemargl 331
	}
3245 Albom 332
else
6822 siemargl 333
	{
334
	len = 0;
335
	for (i=1;;i++)
336
		{
3245 Albom 337
		cmd[len] = CMD[i];
6822 siemargl 338
		if (0 == cmd[len])
339
			{
340
			i--;
341
			break;
342
			}
343
		if ( cmd[len] == '"' )
344
			{
345
			cmd[len] = '\0';
346
			break;
347
			}
348
		len++;
349
		}
1665 Nasarus 350
	trim(cmd);
6822 siemargl 351
	return i+1;
352
	}
1665 Nasarus 353
}
354
355
 
356
357
 
3247 Albom 358
1665 Nasarus 359
 
360
361
 
362
{
363
char cmd[256];
364
char args[256];
365
unsigned arg;
366
int i;
367
int result;
3247 Albom 368
1665 Nasarus 369
 
370
arg = command_get_cmd(cmd);
371
372
 
373
	return;
374
375
 
376
trim(args);
377
378
 
379
	{
380
	if (!strcmp(cmd, COMMANDS[i].name))
381
		{
382
		result = ((handler1_t)COMMANDS[i].handler)(args);
3247 Albom 383
		if (result == FALSE)
6857 siemargl 384
			{
6822 siemargl 385
			#if LANG_ENG
386
				printf("  Error!\n\r");
387
			#elif LANG_RUS
388
				printf("  Žè¨¡ª !\n\r");
389
			#endif
390
			}
391
		return;
1665 Nasarus 392
		}
393
	}
394
395
 
396
 
397
	{
398
	strcpy(CMD, ALIASES+64*1024+256*alias_search(CMD));
399
	command_execute();
400
	return;
401
	}
402
403
 
404
405
 
406
407
 
408