devtty: propogate Brett's keyboard repeat all over the place
authorAlan Cox <alan@linux.intel.com>
Sun, 6 Mar 2016 21:33:31 +0000 (21:33 +0000)
committerAlan Cox <alan@linux.intel.com>
Sun, 6 Mar 2016 21:33:31 +0000 (21:33 +0000)
Kernel/platform-coco2/devtty.c
Kernel/platform-dragon-nx32/devtty.c
Kernel/platform-msx2/devtty.c
Kernel/platform-mtx/devtty.c
Kernel/platform-nc100/devtty.c
Kernel/platform-pcw8256/devtty.c
Kernel/platform-zx128/devtty.c

index fc8d64c..1c7fc8b 100644 (file)
@@ -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();
        }
index 63f80e9..833e3ad 100644 (file)
@@ -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();
        }
index 991a68d..cdbbb92 100644 (file)
@@ -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)
index f3f7acd..a752b06 100644 (file)
@@ -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)
index 231a0fe..9973be2 100644 (file)
@@ -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 */
index ce480d7..7a83ebc 100644 (file)
@@ -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();
 }
-
index 6d8480f..7f16026 100644 (file)
@@ -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 };