Subversion Repositories HelenOS

Rev

Rev 4011 | Rev 4132 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4011 Rev 4089
Line 293... Line 293...
293
    strncpy(name, output, MAX_SYMBOL_NAME);
293
    strncpy(name, output, MAX_SYMBOL_NAME);
294
    return found;
294
    return found;
295
   
295
   
296
}
296
}
297
 
297
 
298
static char *clever_readline(const char *prompt, chardev_t *input)
298
static char *clever_readline(const char *prompt, indev_t *input)
299
{
299
{
300
    static int histposition = 0;
300
    static int histposition = 0;
301
 
301
 
302
    static char tmp[MAX_CMDLINE + 1];
302
    static char tmp[MAX_CMDLINE + 1];
303
    int curlen = 0, position = 0;
303
    int curlen = 0, position = 0;
Line 454... Line 454...
454
    }
454
    }
455
    current[curlen] = '\0';
455
    current[curlen] = '\0';
456
    return current;
456
    return current;
457
}
457
}
458
 
458
 
-
 
459
bool kconsole_check_poll(void)
-
 
460
{
-
 
461
    return check_poll(stdin);
-
 
462
}
-
 
463
 
459
/** Kernel console prompt.
464
/** Kernel console prompt.
460
 *
465
 *
461
 * @param prompt Kernel console prompt (e.g kconsole/panic).
466
 * @param prompt Kernel console prompt (e.g kconsole/panic).
462
 * @param msg    Message to display in the beginning.
467
 * @param msg    Message to display in the beginning.
463
 * @param kcon   Wait for keypress to show the prompt
468
 * @param kcon   Wait for keypress to show the prompt
Line 467... Line 472...
467
void kconsole(char *prompt, char *msg, bool kcon)
472
void kconsole(char *prompt, char *msg, bool kcon)
468
{
473
{
469
    cmd_info_t *cmd_info;
474
    cmd_info_t *cmd_info;
470
    count_t len;
475
    count_t len;
471
    char *cmdline;
476
    char *cmdline;
472
 
477
   
473
    if (!stdin) {
478
    if (!stdin) {
474
        LOG("No stdin for kernel console");
479
        LOG("No stdin for kernel console");
475
        return;
480
        return;
476
    }
481
    }
477
   
482
   
478
    if (msg)
483
    if (msg)
479
        printf("%s", msg);
484
        printf("%s", msg);
480
   
485
   
481
    if (kcon)
486
    if (kcon)
482
        _getc(stdin);
487
        _getc(stdin);
-
 
488
    else
-
 
489
        printf("Type \"exit\" to leave the console.\n");
483
   
490
   
484
    while (true) {
491
    while (true) {
485
        cmdline = clever_readline((char *) prompt, stdin);
492
        cmdline = clever_readline((char *) prompt, stdin);
486
        len = strlen(cmdline);
493
        len = strlen(cmdline);
487
        if (!len)
494
        if (!len)
488
            continue;
495
            continue;
489
       
496
       
-
 
497
        if ((!kcon) && (len == 4) && (strncmp(cmdline, "exit", 4) == 0))
-
 
498
            break;
-
 
499
       
490
        cmd_info = parse_cmdline(cmdline, len);
500
        cmd_info = parse_cmdline(cmdline, len);
491
        if (!cmd_info)
501
        if (!cmd_info)
492
            continue;
502
            continue;
493
       
503
       
494
        if ((!kcon)
-
 
495
            && (strncmp(cmd_info->name, "exit", min(strlen(cmd_info->name), 5)) == 0))
-
 
496
            break;
-
 
497
       
-
 
498
        (void) cmd_info->func(cmd_info->argv);
504
        (void) cmd_info->func(cmd_info->argv);
499
    }
505
    }
500
}
506
}
501
 
507
 
502
/** Kernel console managing thread.
508
/** Kernel console managing thread.