[BRLTTY] Cursor routing in DOS apps

Samuel Thibault samuel.thibault at ens-lyon.org
Fri May 11 22:36:43 EDT 2007


Hi,

Lars Bjørndal, le Thu 03 May 2007 20:55:09 +0200, a écrit :
> - Try to rout the cursor to another location by using a cursor routing key
>   on your braille display
> 
> It would be great if we could get this working!

Ok, I got it working as well as a few ascii keypresses thanks to the
attached patch, but not so much should be expected, because the w32api
documentation is quite evasive...

Samuel
-------------- next part --------------
Index: ScreenDrivers/Windows/screen.c
===================================================================
--- ScreenDrivers/Windows/screen.c	(revision 3031)
+++ ScreenDrivers/Windows/screen.c	(working copy)
@@ -322,6 +322,49 @@
       key &= ~ SCR_KEY_MOD_META;
     }
     keyE->uChar.AsciiChar = key;
+    if (key >= 'A' && key <= 'Z') {
+      keyE->dwControlKeyState |= SHIFT_PRESSED;
+      keyE->wVirtualKeyCode = key;
+    } else if (key >= 'a' && key <= 'z') {
+      keyE->wVirtualKeyCode = key + 'A' - 'a';
+    } else if (key >= '0' && key <= '9') {
+      keyE->wVirtualKeyCode = key + VK_NUMPAD0 - '0';
+    } else switch(key) {
+      case ' ': keyE->wVirtualKeyCode = VK_SPACE;     break;
+      case '+': keyE->wVirtualKeyCode = VK_ADD;       break;
+      case '-': keyE->wVirtualKeyCode = VK_SUBTRACT;  break;
+      case '*': keyE->wVirtualKeyCode = VK_MULTIPLY;  break;
+      case '/': keyE->wVirtualKeyCode = VK_DIVIDE;    break;
+#ifdef VK_OEM_COMMA
+      case ',': keyE->wVirtualKeyCode = VK_OEM_COMMA; break;
+#endif
+#ifdef VK_OEM_PERIOD
+      case '.': keyE->wVirtualKeyCode = VK_OEM_PERIOD;break;
+#endif
+      case ';': keyE->wVirtualKeyCode = VK_OEM_1;     break;
+      case ':': keyE->dwControlKeyState |= SHIFT_PRESSED;
+                keyE->wVirtualKeyCode = VK_OEM_1;     break;
+      //case '/': keyE->wVirtualKeyCode = VK_OEM_2;     break;
+      case '?': keyE->dwControlKeyState |= SHIFT_PRESSED;
+                keyE->wVirtualKeyCode = VK_OEM_2;     break;
+      case '`': keyE->wVirtualKeyCode = VK_OEM_3;     break;
+      case '~': keyE->dwControlKeyState |= SHIFT_PRESSED;
+                keyE->wVirtualKeyCode = VK_OEM_3;     break;
+      case '[': keyE->wVirtualKeyCode = VK_OEM_4;     break;
+      case '{': keyE->dwControlKeyState |= SHIFT_PRESSED;
+                keyE->wVirtualKeyCode = VK_OEM_4;     break;
+      case '\\':keyE->wVirtualKeyCode = VK_OEM_5;     break;
+      case '|': keyE->dwControlKeyState |= SHIFT_PRESSED;
+                keyE->wVirtualKeyCode = VK_OEM_5;     break;
+      case ']': keyE->wVirtualKeyCode = VK_OEM_6;     break;
+      case '}': keyE->dwControlKeyState |= SHIFT_PRESSED;
+                keyE->wVirtualKeyCode = VK_OEM_6;     break;
+      case '\'':keyE->wVirtualKeyCode = VK_OEM_7;     break;
+      case '"': keyE->dwControlKeyState |= SHIFT_PRESSED;
+                keyE->wVirtualKeyCode = VK_OEM_7;     break;
+      default: LogPrint(LOG_WARNING, "Char %2.2X not suported.", key);
+               return 0;
+    }
   } else {
     switch (key) {
       case SCR_KEY_ENTER:         keyE->wVirtualKeyCode = VK_RETURN; break;
@@ -369,6 +412,7 @@
 
   keyE->wRepeatCount = 1;
   keyE->bKeyDown = TRUE;
+  keyE->wVirtualScanCode = MapVirtualKey(keyE->wVirtualKeyCode, 0);
   if (!doInsert(&buf))
     return 0;
   keyE->bKeyDown = FALSE;


More information about the BRLTTY mailing list