Subversion Repositories Kolibri OS

Rev

Rev 7787 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1665 Nasarus 1
 
8827 rgimad 2
    int i;
3
1665 Nasarus 4
 
8827 rgimad 5
1665 Nasarus 6
 
8827 rgimad 7
1665 Nasarus 8
 
8827 rgimad 9
        if ( 0 == strcmp( CMD_HISTORY[i], CMD ) )
10
            return;
11
6822 siemargl 12
 
8827 rgimad 13
        strcpy(CMD_HISTORY[i], CMD_HISTORY[i-1]);
14
6825 siemargl 15
 
8827 rgimad 16
1665 Nasarus 17
 
8827 rgimad 18
        CMD_HISTORY_NUM_REAL++;
19
1665 Nasarus 20
 
8827 rgimad 21
4050 Albom 22
 
23
 
7787 rgimad 24
{
25
    unsigned int n1 = strlen( s1 );
26
    unsigned int n2 = strlen( s2 );
27
4050 Albom 28
 
7787 rgimad 29
4050 Albom 30
 
7787 rgimad 31
    for (  i = 0; i < n1 - pos; i++ )
32
    {
33
        s1[n1 + n2 - i - 1] = s1[n1 - i - 1];
34
    }
35
36
 
37
    {
38
        s1[pos+i] = s2[i];
39
    }
40
41
 
42
43
 
44
}
45
46
 
1665 Nasarus 47
 
8827 rgimad 48
 
1665 Nasarus 49
{
50
    unsigned key;
8827 rgimad 51
1665 Nasarus 52
 
8827 rgimad 53
    unsigned cmdLen = 0;
54
    unsigned cmdPos = 0;
55
    CMD[0] = '\0';
56
1665 Nasarus 57
 
8827 rgimad 58
    char* clipBuf; // clipboard buffer
59
    char clipCopy[255+12];
60
4516 Albom 61
 
8827 rgimad 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
1665 Nasarus 76
 
8827 rgimad 77
                    printf("\n\r");
78
                    command_history_add();
79
                    return;
80
1665 Nasarus 81
 
8827 rgimad 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
4015 Albom 89
 
8827 rgimad 90
                            printf ("%c %c", 8, 8);
91
4015 Albom 92
 
8827 rgimad 93
4015 Albom 94
 
8827 rgimad 95
                            printf("%c", 8);
96
4015 Albom 97
 
8827 rgimad 98
                        cmdLen--;
99
                        }
100
                    break;
101
1665 Nasarus 102
 
4015 Albom 103
 
8827 rgimad 104
                    break;
105
106
 
107
 
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
1665 Nasarus 125
 
8827 rgimad 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
4516 Albom 138
 
8827 rgimad 139
 
140
                    if ( cmdLen > 0 )
141
                        {
142
143
 
144
                        *(clipCopy+4)=0;
145
                        *(clipCopy+8)=1;
146
147
 
148
                            *(clipCopy+12+i) = CMD[i];
149
150
 
151
152
 
153
                    break;
154
155
 
156
 
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
2174 Albom 165
 
8827 rgimad 166
                            CMD[i] = CMD[i-1];
167
4015 Albom 168
 
8827 rgimad 169
4015 Albom 170
 
8827 rgimad 171
                            printf("%c %c", 8, 8);
172
4015 Albom 173
 
8827 rgimad 174
4015 Albom 175
 
8827 rgimad 176
                            printf("%c", 8);
177
4015 Albom 178
 
8827 rgimad 179
                        cmdLen++;
180
                        }
181
                    break;
182
1665 Nasarus 183
 
8827 rgimad 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
1665 Nasarus 196
 
8827 rgimad 197
                                printf(" ");
198
4015 Albom 199
 
8827 rgimad 200
                                printf("%c", 8);
201
4015 Albom 202
 
8827 rgimad 203
                                printf("%c", CMD[i]);
204
4015 Albom 205
 
8827 rgimad 206
                                printf("%c", 8);
207
4015 Albom 208
 
8827 rgimad 209
                        }
210
                    break;
211
4015 Albom 212
 
7787 rgimad 213
 
8827 rgimad 214
                    // move internal cursor and cmdPos to the beginning of the line
215
                    for (;cmdPos > 0; cmdPos--) {printf("%c", 8);}
216
                    break;
217
7787 rgimad 218
 
8827 rgimad 219
                    // move internal cursor and cmdPos to the end of the line
220
                    for (;cmdPos < cmdLen; cmdPos++) {printf("%c", CMD[cmdPos]);}
221
                    break;
222
7787 rgimad 223
 
8827 rgimad 224
                    if (cmdPos > 0)
225
                        {
226
                            printf("%c", 8);
227
                            cmdPos--;
228
                        }
229
                    break;
230
4015 Albom 231
 
232
 
8827 rgimad 233
                    if (cmdPos < cmdLen)
234
                        {
235
                            printf("%c", CMD[cmdPos]);
236
                            cmdPos++;
237
                        }
238
                    break;
239
4015 Albom 240
 
241
 
8827 rgimad 242
                    if (CMD_HISTORY_NUM_REAL > 0 && CMD_NUM >= -1)
243
                        {
244
1665 Nasarus 245
 
8827 rgimad 246
                            printf(" ");
247
4015 Albom 248
 
8827 rgimad 249
                            printf("%c %c", 8, 8);
250
4015 Albom 251
 
8827 rgimad 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
4015 Albom 261
 
8827 rgimad 262
263
 
264
1665 Nasarus 265
 
4015 Albom 266
 
8827 rgimad 267
                    if (CMD_HISTORY_NUM_REAL > 0 && CMD_NUM >= 0)
268
                        {
269
1665 Nasarus 270
 
8827 rgimad 271
                            printf(" ");
272
4015 Albom 273
 
8827 rgimad 274
                            printf("%c %c", 8, 8);
275
4015 Albom 276
 
8827 rgimad 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
4050 Albom 286
 
8827 rgimad 287
                    break;
288
1665 Nasarus 289
 
4015 Albom 290
 
8827 rgimad 291
                    cmd_exit(NULL);
292
1665 Nasarus 293
 
8827 rgimad 294
        } // if end
295
    } // for end
296
1665 Nasarus 297
 
4015 Albom 298
1665 Nasarus 299
 
300
 
8827 rgimad 301
 
1665 Nasarus 302
{
303
    unsigned i, len;
8827 rgimad 304
    int quote = 0;
305
3245 Albom 306
 
8827 rgimad 307
    quote = 1;
308
3245 Albom 309
 
8827 rgimad 310
        {
311
        for (i=0;;i++)
312
            {
313
            cmd[i] = CMD[i];
314
            if (0 == cmd[i])
315
                return i;
316
            if ( iswhite(cmd[i]) )
317
                {
318
                cmd[i] = '\0';
319
                break;
320
                }
321
            }
322
        return i+1;
323
        }
324
    else
325
        {
326
        len = 0;
327
        for (i=1;;i++)
328
            {
329
            cmd[len] = CMD[i];
330
            if (0 == cmd[len])
331
                {
332
                i--;
333
                break;
334
                }
335
            if ( cmd[len] == '"' )
336
                {
337
                cmd[len] = '\0';
338
                break;
339
                }
340
            len++;
341
            }
342
        trim(cmd);
343
        return i+1;
344
        }
345
}
1665 Nasarus 346
347
 
348
 
8827 rgimad 349
 
3247 Albom 350
1665 Nasarus 351
 
352
 
8827 rgimad 353
 
1665 Nasarus 354
{
355
    char cmd[256];
8827 rgimad 356
    char args[256];
357
    unsigned arg;
358
    int i;
359
    int result;
360
1665 Nasarus 361
 
8827 rgimad 362
    arg = command_get_cmd(cmd);
363
1665 Nasarus 364
 
8827 rgimad 365
        return;
366
1665 Nasarus 367
 
8827 rgimad 368
    trim(args);
369
1665 Nasarus 370
 
8827 rgimad 371
        if (!strcmp(cmd, COMMANDS[i].name)) {
372
            result = ((handler1_t)COMMANDS[i].handler)(args);
373
            if (result == FALSE) {
374
                printf(UNKNOWN_CMD_ERROR);
375
            }
376
            return;
377
        }
378
    }
379
1665 Nasarus 380
 
8827 rgimad 381
        strcpy(CMD, ALIASES+64*1024+256*alias_search(CMD));
382
        command_execute();
383
        return;
384
    }
385
1665 Nasarus 386
 
8827 rgimad 387
1665 Nasarus 388
 
389