From 97d335d9a32ebeb831d8774b03e8dfe712d39840 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Sun, 6 Mar 2016 21:33:31 +0000 Subject: [PATCH] devtty: propogate Brett's keyboard repeat all over the place --- Kernel/platform-coco2/devtty.c | 14 +++++++++++--- Kernel/platform-dragon-nx32/devtty.c | 13 +++++++++++-- Kernel/platform-msx2/devtty.c | 13 +++++++++++-- Kernel/platform-mtx/devtty.c | 14 ++++++++++++-- Kernel/platform-nc100/devtty.c | 24 ++++++++++++++++++++---- Kernel/platform-pcw8256/devtty.c | 20 ++++++++++++++------ Kernel/platform-zx128/devtty.c | 13 +++++++++++-- 7 files changed, 90 insertions(+), 21 deletions(-) diff --git a/Kernel/platform-coco2/devtty.c b/Kernel/platform-coco2/devtty.c index fc8d64c3..1c7fc8bf 100644 --- a/Kernel/platform-coco2/devtty.c +++ b/Kernel/platform-coco2/devtty.c @@ -26,6 +26,8 @@ struct s_queue ttyinq[NUM_DEV_TTY + 1] = { /* ttyinq[0] is never used */ }; uint8_t vtattr_cap = 0; +struct vt_repeat keyrepeat; +static uint8_t kbd_timer; /* tty1 is the screen tty2 is the serial port */ @@ -50,7 +52,6 @@ ttyready_t tty_writeready(uint8_t minor) void tty_putc(uint8_t minor, unsigned char c) { - irqflags_t irq; if (minor == 1) vtoutput(&c, 1); else @@ -220,8 +221,15 @@ void platform_interrupt(void) *pia_col; newkey = 0; keyproc(); - if (keysdown < 3 && newkey) - keydecode(); + if (keysdown && keysdown < 3) { + if (newkey) { + keydecode(); + kbd_timer = keyrepeat.first; + } else if (! --kbd_timer) { + keydecode(); + kbd_timer = keyrepeat.continual; + } + } // fd_timer_tick(); timer_interrupt(); } diff --git a/Kernel/platform-dragon-nx32/devtty.c b/Kernel/platform-dragon-nx32/devtty.c index 63f80e90..833e3ad1 100644 --- a/Kernel/platform-dragon-nx32/devtty.c +++ b/Kernel/platform-dragon-nx32/devtty.c @@ -29,6 +29,8 @@ uint8_t vtattr_cap = VTA_INVERSE|VTA_UNDERLINE|VTA_ITALIC|VTA_BOLD| VTA_OVERSTRIKE|VTA_NOCURSOR; static uint8_t vmode; +static uint8_t kbd_timer; +struct vt_repeat keyrepeat; /* tty1 is the screen tty2 is the serial port */ @@ -264,8 +266,15 @@ void platform_interrupt(void) *pia_col; newkey = 0; keyproc(); - if (keysdown < 3 && newkey) - keydecode(); + if (keysdown && keysdown < 3) { + if (newkey) { + keydecode(); + kbd_timer = keyrepeat.first; + } else if (! --kbd_timer) { + keydecode(); + kbd_timer = keyrepeat.continual; + } + } fd_timer_tick(); timer_interrupt(); } diff --git a/Kernel/platform-msx2/devtty.c b/Kernel/platform-msx2/devtty.c index 991a68d9..cdbbb92d 100644 --- a/Kernel/platform-msx2/devtty.c +++ b/Kernel/platform-msx2/devtty.c @@ -16,7 +16,9 @@ __sfr __at 0xA9 kbd_row_read; char tbuf1[TTYSIZ]; char tbuf2[TTYSIZ]; +struct vt_repeat keyrepeat; uint8_t vtattr_cap; +static uint8_t kbd_timer; struct s_queue ttyinq[NUM_DEV_TTY + 1] = { /* ttyinq[0] is never used */ {NULL, NULL, NULL, 0, 0, 0}, @@ -158,8 +160,15 @@ void kbd_interrupt(void) update_keyboard(); keyproc(); - if (keysdown < 3 && newkey) - keydecode(); + if (keysdown && keysdown < 3) { + if (newkey) { + keydecode(); + kbd_timer = keyrepeat.first; + } else if (! --kbd_timer) { + keydecode(); + kbd_timer = keyrepeat.continual; + } + } } void tty_sleeping(uint8_t minor) diff --git a/Kernel/platform-mtx/devtty.c b/Kernel/platform-mtx/devtty.c index f3f7acd6..a752b065 100644 --- a/Kernel/platform-mtx/devtty.c +++ b/Kernel/platform-mtx/devtty.c @@ -26,6 +26,9 @@ static struct vt_switch ttysave[2]; it then call the vt ioctl or just intercept the vt ioctl */ uint8_t vtattr_cap; +struct vt_repeat keyrepeat; +static uint8_t kbd_timer; + char tbuf1[TTYSIZ]; char tbuf2[TTYSIZ]; char tbuf3[TTYSIZ]; @@ -286,8 +289,15 @@ void kbd_interrupt(void) { newkey = 0; keyproc(); - if (keysdown < 3 && newkey) - keydecode(); + if (keysdown && keysdown < 3) { + if (newkey) { + keydecode(); + kbd_timer = keyrepeat.first; + } else if (! --kbd_timer) { + keydecode(); + kbd_timer = keyrepeat.continual; + } + } } void tty_interrupt(void) diff --git a/Kernel/platform-nc100/devtty.c b/Kernel/platform-nc100/devtty.c index 231a0feb..9973be23 100644 --- a/Kernel/platform-nc100/devtty.c +++ b/Kernel/platform-nc100/devtty.c @@ -27,6 +27,8 @@ __sfr __at 0xB8 kmap8; __sfr __at 0xB9 kmap9; uint8_t vtattr_cap; +struct vt_repeat keyrepeat; +static uint8_t kbd_timer; char tbuf1[TTYSIZ]; char tbuf2[TTYSIZ]; @@ -313,8 +315,15 @@ void platform_interrupt(void) newkey = 0; keyproc(); - if (keysdown < 3 && newkey) - keydecode(); + if (keysdown && keysdown < 3) { + if (newkey) { + keydecode(); + kbd_timer = keyrepeat.first; + } else if (! --kbd_timer) { + keydecode(); + kbd_timer = keyrepeat.continual; + } + } timer_interrupt(); } if (!(a & 16)) { @@ -357,8 +366,15 @@ void platform_interrupt(void) newkey = 0; keyproc(); - if (keysdown < 3 && newkey) - keydecode(); + if (keysdown && keysdown < 3) { + if (newkey) { + keydecode(); + kbd_timer = keyrepeat.first; + } else if (! --kbd_timer) { + keydecode(); + kbd_timer = keyrepeat.continual; + } + } timer_interrupt(); } /* clear the mask */ diff --git a/Kernel/platform-pcw8256/devtty.c b/Kernel/platform-pcw8256/devtty.c index ce480d7f..7a83ebc6 100644 --- a/Kernel/platform-pcw8256/devtty.c +++ b/Kernel/platform-pcw8256/devtty.c @@ -9,6 +9,8 @@ #undef DEBUG /* UNdefine to delete debug code sequences */ uint8_t vtattr_cap; +struct vt_repeat keyrepeat; +static uint8_t kbd_timer; __sfr __at 0xE0 dart0d; __sfr __at 0xE1 dart0c; @@ -256,10 +258,16 @@ static void keydecode(void) floppy motor etc */ void platform_interrupt(void) { - newkey = 0; - keyproc(); - if (keysdown < 3 && newkey) - keydecode(); - timer_interrupt(); + newkey = 0; + keyproc(); + if (keysdown && keysdown < 3) { + if (newkey) { + keydecode(); + kbd_timer = keyrepeat.first; + } else if (! --kbd_timer) { + keydecode(); + kbd_timer = keyrepeat.continual; + } + } + timer_interrupt(); } - diff --git a/Kernel/platform-zx128/devtty.c b/Kernel/platform-zx128/devtty.c index 6d8480f6..7f160266 100644 --- a/Kernel/platform-zx128/devtty.c +++ b/Kernel/platform-zx128/devtty.c @@ -10,6 +10,8 @@ char tbuf1[TTYSIZ]; uint8_t vtattr_cap; +struct vt_repeat keyrepeat; +static uint8_t kbd_timer; /* buffer for port scan procedure */ uint8_t keybuf[8]; @@ -142,9 +144,16 @@ void tty_pollirq(void) } keymap[i] = keybuf[i]; } + if (keysdown && keysdown < 3) { + if (newkey) { + keydecode(); + kbd_timer = keyrepeat.first; + } else if (! --kbd_timer) { + keydecode(); + kbd_timer = keyrepeat.continual; + } + } - if (keysdown < 3 && newkey) - keydecode(); } static uint8_t cursor[4] = { KEY_LEFT, KEY_DOWN, KEY_UP, KEY_RIGHT }; -- 2.34.1