/kernel/trunk/generic/src/console/kconsole.c |
---|
238,6 → 238,7 |
int curlen = 0, position = 0; |
char *current = history[histposition]; |
int i; |
char mod; /* Command Modifier */ |
char c; |
printf("%s> ", prompt); |
309,11 → 310,33 |
continue; |
} |
if (c == 0x1b) { |
mod = _getc(input); |
c = _getc(input); |
if (c!= 0x5b) |
if (mod != 0x5b && mod != 0x4f) |
continue; |
c = _getc(input); |
if (c == 0x44) { /* Left */ |
if (c == 0x33 && _getc(input) == 0x7e) { |
if (position == curlen) |
continue; |
for (i=position+1; i<curlen;i++) { |
putchar(current[i]); |
current[i-1] = current[i]; |
} |
putchar(' '); |
rdln_print_c('\b',curlen-position); |
curlen--; |
} |
else if (c == 0x48) { /* Home */ |
rdln_print_c('\b',position); |
position = 0; |
} |
else if (c == 0x46) { |
for (i=position;i<curlen;i++) |
putchar(current[i]); |
position = curlen; |
} |
else if (c == 0x44) { /* Left */ |
if (position > 0) { |
putchar('\b'); |
position--; |
320,7 → 343,7 |
} |
continue; |
} |
if (c == 0x43) { /* Right */ |
else if (c == 0x43) { /* Right */ |
if (position < curlen) { |
putchar(current[position]); |
position++; |
327,7 → 350,8 |
} |
continue; |
} |
if (c == 0x41 || c == 0x42) { /* Up,down */ |
else if (c == 0x41 || c == 0x42) { |
/* Up,down */ |
rdln_print_c('\b',position); |
rdln_print_c(' ',curlen); |
rdln_print_c('\b',curlen); |
/kernel/trunk/arch/mips32/include/drivers/serial.h |
---|
56,7 → 56,7 |
int irq; |
}serial_t; |
chardev_t * serial_console(void); |
void serial_console(void); |
int serial_init(void); |
#endif |
/kernel/trunk/arch/mips32/include/drivers/arc.h |
---|
215,6 → 215,6 |
extern int arc_enabled(void); |
extern void arc_print_devices(void); |
void arc_frame_init(void); |
chardev_t * arc_console(void); |
void arc_console(void); |
#endif |
/kernel/trunk/arch/mips32/include/drivers/msim.h |
---|
36,6 → 36,6 |
#define MSIM_KBD_ADDRESS 0xB0000000 |
#define MSIM_KBD_IRQ 2 |
chardev_t * msim_console(void); |
void msim_console(void); |
#endif |
/kernel/trunk/arch/mips32/src/console.c |
---|
34,15 → 34,10 |
void console_init(void) |
{ |
chardev_t *console; |
if (arc_enabled()) { |
console = arc_console(); |
arc_console(); |
} else if (serial_init()) { |
console = serial_console(); |
serial_console(); |
} else |
console = msim_console(); |
stdin = console; |
stdout = console; |
msim_console(); |
} |
/kernel/trunk/arch/mips32/src/drivers/serial.c |
---|
101,8 → 101,7 |
serial_interrupt(n, stack); |
} |
#include <print.h> |
chardev_t * serial_console(void) |
void serial_console(void) |
{ |
serial_t *sd = &sconf[0]; |
117,7 → 116,6 |
*/ |
old_timer = int_register(TIMER_IRQ, "serial_drvr_poll", timer_replace); |
return &console; |
stdin = &console; |
stdout = &console; |
} |
/kernel/trunk/arch/mips32/src/drivers/arc.c |
---|
35,6 → 35,7 |
#include <mm/frame.h> |
#include <interrupt.h> |
#include <align.h> |
#include <console/console.h> |
/* This is a good joke, SGI HAS different types than NT bioses... */ |
/* Here is the SGI type */ |
246,14 → 247,14 |
arc_keyboard_poll(); |
} |
chardev_t * arc_console(void) |
void arc_console(void) |
{ |
kbd_polling_enabled = true; |
chardev_initialize("arc_console", &console, &arc_ops); |
old_timer = int_register(TIMER_IRQ, "arc_kb_poll", timer_replace); |
return &console; |
stdin = &console; |
stdout = &console; |
} |
/* Initialize frame zones from ARC firmware. |
/kernel/trunk/arch/mips32/src/drivers/msim.c |
---|
30,6 → 30,7 |
#include <console/chardev.h> |
#include <arch/drivers/msim.h> |
#include <arch/cp0.h> |
#include <console/console.h> |
static chardev_t console; |
77,7 → 78,7 |
/* Return console object representing msim console */ |
chardev_t * msim_console(void) |
void msim_console(void) |
{ |
chardev_initialize("msim_console", &console, &msim_ops); |
85,5 → 86,6 |
cp0_unmask_int(MSIM_KBD_IRQ); |
return &console; |
stdin = &console; |
stdout = &console; |
} |
/kernel/trunk/arch/ia32/include/i8042.h |
---|
42,6 → 42,9 |
#define SC_RIGHTARR 0x4d |
#define SC_UPARR 0x48 |
#define SC_DOWNARR 0x50 |
#define SC_DELETE 0x53 |
#define SC_HOME 0x47 |
#define SC_END 0x4f |
extern void i8042_init(void); |
/kernel/trunk/arch/ia32/src/drivers/i8042.c |
---|
332,6 → 332,22 |
chardev_push_character(&kbrd, 0x5b); |
chardev_push_character(&kbrd, 0x42); |
break; |
case SC_HOME: |
chardev_push_character(&kbrd, 0x1b); |
chardev_push_character(&kbrd, 0x4f); |
chardev_push_character(&kbrd, 0x48); |
break; |
case SC_END: |
chardev_push_character(&kbrd, 0x1b); |
chardev_push_character(&kbrd, 0x4f); |
chardev_push_character(&kbrd, 0x46); |
break; |
case SC_DELETE: |
chardev_push_character(&kbrd, 0x1b); |
chardev_push_character(&kbrd, 0x5b); |
chardev_push_character(&kbrd, 0x33); |
chardev_push_character(&kbrd, 0x7e); |
break; |
default: |
letter = is_lower(ascii); |
capslock = (keyflags & PRESSED_CAPSLOCK) || (lockflags & LOCKED_CAPSLOCK); |