Add a limited-shuffle mode like that added to Sixteen and Twiddle in r5769,
[sgt/puzzles] / windows.c
index 45ec69c..383b742 100644 (file)
--- a/windows.c
+++ b/windows.c
@@ -35,8 +35,8 @@
 #define IDM_SEED      0x00A0
 #define IDM_HELPC     0x00B0
 #define IDM_GAMEHELP  0x00C0
+#define IDM_ABOUT     0x00D0
 #define IDM_PRESETS   0x0100
-#define IDM_ABOUT     0x0110
 
 #define HELP_FILE_NAME  "puzzles.hlp"
 #define HELP_CNT_NAME   "puzzles.cnt"
@@ -1221,31 +1221,35 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
       case WM_KEYDOWN:
        {
            int key = -1;
+            BYTE keystate[256];
+            int r = GetKeyboardState(keystate);
+            int shift = (r && (keystate[VK_SHIFT] & 0x80)) ? MOD_SHFT : 0;
+            int ctrl = (r && (keystate[VK_CONTROL] & 0x80)) ? MOD_CTRL : 0;
 
            switch (wParam) {
              case VK_LEFT:
                if (!(lParam & 0x01000000))
                    key = MOD_NUM_KEYPAD | '4';
-               else
-                   key = CURSOR_LEFT;
+                else
+                   key = shift | ctrl | CURSOR_LEFT;
                break;
              case VK_RIGHT:
                if (!(lParam & 0x01000000))
                    key = MOD_NUM_KEYPAD | '6';
-               else
-                   key = CURSOR_RIGHT;
+                else
+                   key = shift | ctrl | CURSOR_RIGHT;
                break;
              case VK_UP:
                if (!(lParam & 0x01000000))
                    key = MOD_NUM_KEYPAD | '8';
-               else
-                   key = CURSOR_UP;
+                else
+                   key = shift | ctrl | CURSOR_UP;
                break;
              case VK_DOWN:
                if (!(lParam & 0x01000000))
                    key = MOD_NUM_KEYPAD | '2';
-               else
-                   key = CURSOR_DOWN;
+                else
+                   key = shift | ctrl | CURSOR_DOWN;
                break;
                /*
                 * Diagonal keys on the numeric keypad.