Add DOS editing key support in BUFFERED INPUT.
diff --git a/dlls/winedos/int21.c b/dlls/winedos/int21.c index 345d3b0..c6dff3d 100644 --- a/dlls/winedos/int21.c +++ b/dlls/winedos/int21.c
@@ -246,6 +246,19 @@ #define EL_Serial 0x04 #define EL_Memory 0x05 +/* BIOS Keyboard Scancodes */ +#define KEY_LEFT 0x4B +#define KEY_RIGHT 0x4D +#define KEY_UP 0x48 +#define KEY_DOWN 0x50 +#define KEY_IC 0x52 /* insert char */ +#define KEY_DC 0x53 /* delete char */ +#define KEY_BACKSPACE 0x0E +#define KEY_HOME 0x47 +#define KEY_END 0x4F +#define KEY_NPAGE 0x49 +#define KEY_PPAGE 0x51 + struct magic_device { @@ -1148,19 +1161,21 @@ if (ascii == '\r' || ascii == '\n') { - /* - * FIXME: What should be echoed here? - */ - DOSVM_PutChar( '\r' ); - DOSVM_PutChar( '\n' ); ptr[length] = '\r'; return length + 1; } /* - * FIXME: This function is supposed to support - * DOS editing keys... + * DOS handles only backspace and KEY_LEFT + * perhaps we should do more */ + if (ascii == '\b' || scan == KEY_LEFT) + { + if (length==0) continue; + DOSVM_PutChar( '\b' ); + length--; + continue; + } /* * If the buffer becomes filled to within one byte of
diff --git a/dlls/winedos/vga.c b/dlls/winedos/vga.c index 791a388..00e27189 100644 --- a/dlls/winedos/vga.c +++ b/dlls/winedos/vga.c
@@ -808,7 +808,10 @@ switch(ascii) { case '\b': if (vga_text_x) + { vga_text_x--; + VGA_PutCharAt(vga_text_x, vga_text_y, ' ', 0); + } break; case '\t':