added shortcuts
[xboard.git] / winboard / jaws.c
index a8555a0..d3856ae 100644 (file)
@@ -153,6 +153,7 @@ VOID SayString(char *mess, BOOL flag)
 static int oldFromX, oldFromY;\r
 static int timeflag;\r
 static int suppressClocks = 0;\r
+static int suppressOneKey = 0;\r
 \r
 BOOL\r
 InitJAWS()\r
@@ -1086,23 +1087,17 @@ NiceTime(int x)
        return (x%3000 == 0);\r
 }\r
 \r
+#if 0\r
+           if(isalpha((char)wParam)) {\r
+               /* capitals of any ind are intercepted and distinguished by left and right shift */\r
+               int mine = GetKeyState(VK_RSHIFT) < 0;\r
+               if(mine || GetKeyState(VK_LSHIFT) < 0) {\r
+#endif\r
+\r
 #define JAWS_ALT_INTERCEPT \\r
-           if(isalpha((char)wParam)) {\\r
-               /* capitals of any ind are intercepted and distinguished by left and right shift */\\r
-               int mine = GetKeyState(VK_RSHIFT) < 0;\\r
-               if(mine || GetKeyState(VK_LSHIFT) < 0) {\\r
-\\r
-                   if(gameMode == IcsPlayingWhite || gameMode == MachinePlaysBlack) mine = !mine;\\r
-\\r
-                   if(ToLower((char)wParam) == 'x') {\\r
-                       SayPieces(mine ? WhitePlay : BlackPlay);\\r
-                       break;\\r
-                   } else\\r
-                   if(CharToPiece((char)wParam) != EmptySquare) {\\r
-                       SayPieces(CharToPiece(mine ? ToUpper((char)wParam) : ToLower((char)wParam)));\\r
-                       break;\\r
-                   }\\r
-               }\\r
+           if(suppressOneKey) {\\r
+               suppressOneKey = 0;\\r
+               if(GetKeyState(VK_MENU) < 0 && GetKeyState(VK_CONTROL) < 0) break;\\r
            }\\r
            if ((char)wParam == 022 && gameMode == EditPosition) { /* <Ctl R>. Pop up piece menu */\\r
                POINT pt; int x, y;\\r
@@ -1126,6 +1121,30 @@ NiceTime(int x)
 #define JAWS_KB_NAVIGATION \\r
 \\r
        case WM_KEYDOWN:\\r
+\\r
+               if(GetKeyState(VK_MENU) < 0 && GetKeyState(VK_CONTROL) < 0) {\\r
+                   /* Control + Alt + letter used for speaking piece positions */\\r
+                   static int lastTime; static char lastChar;\\r
+                   int mine = 0, time = GetTickCount(); char c;\\r
+\\r
+                   if((char)wParam == lastChar && time-lastTime < 250) mine = 1;\\r
+                   lastChar = wParam; lastTime = time;\\r
+                   c = wParam;\\r
+\\r
+                   if(gameMode == IcsPlayingWhite || gameMode == MachinePlaysBlack) mine = !mine;\\r
+\\r
+                   if(ToLower(c) == 'x') {\\r
+                       SayPieces(mine ? WhitePlay : BlackPlay);\\r
+                       suppressOneKey = 1;\\r
+                       break;\\r
+                   } else\\r
+                   if(CharToPiece(c) != EmptySquare) {\\r
+                       SayPieces(CharToPiece(mine ? ToUpper(c) : ToLower(c)));\\r
+                       suppressOneKey = 1;\\r
+                       break;\\r
+                   }\\r
+               }\\r
+\\r
                switch (wParam) {\\r
                case VK_LEFT:\\r
                case VK_RIGHT:\\r