Fix of ancient WinBoard bug: check value of int options
[xboard.git] / winboard / winboard.c
index 31afd62..a7705c4 100644 (file)
@@ -347,7 +347,7 @@ static char *commentText;
 static int commentIndex;\r
 static Boolean editComment = FALSE;\r
 HWND commentDialog = NULL;\r
-BOOLEAN commentDialogUp = FALSE;\r
+int commentUp = FALSE;\r
 static int commentX, commentY, commentH, commentW;\r
 \r
 static char *analysisTitle;\r
@@ -435,7 +435,7 @@ BOOLEAN evalGraphDialogUp = FALSE;
 WindowPlacement wpEvalGraph;\r
 \r
 HWND engineOutputDialog = NULL;\r
-BOOLEAN engineOutputDialogUp = FALSE;\r
+int engineOutputDialogUp = FALSE;\r
 \r
 WindowPlacement wpEngineOutput;\r
 WindowPlacement wpGameList;\r
@@ -1462,6 +1462,15 @@ ExitArgError(char *msg, char *badArg)
   exit(2);\r
 }\r
 \r
+int\r
+ValidateInt(char *s)\r
+{\r
+  char *p = s;\r
+  if(*p == '-' || *p == '+') p++;\r
+  while(*p) if(!isdigit(*p++)) ExitArgError("Bad integer value", s);\r
+  return atoi(s);\r
+}\r
+\r
 /* Command line font name parser.  NULL name means do nothing.\r
    Syntax like "Courier New:10.0 bi" or "Arial:10" or "Arial:10b"\r
    For backward compatibility, syntax without the colon is also\r
@@ -1773,19 +1782,19 @@ ParseArgs(GetFunc get, void *cl)
 \r
     switch (ad->argType) {\r
     case ArgInt:\r
-      *(int *) ad->argLoc = atoi(argValue);\r
+      *(int *) ad->argLoc = ValidateInt(argValue);\r
       break;\r
 \r
     case ArgX:\r
-      *(int *) ad->argLoc = atoi(argValue) + boardX; // [HGM] placement: translate stored relative to absolute \r
+      *(int *) ad->argLoc = ValidateInt(argValue) + boardX; // [HGM] placement: translate stored relative to absolute \r
       break;\r
 \r
     case ArgY:\r
-      *(int *) ad->argLoc = atoi(argValue) + boardY; // (this is really kludgey, it should be done where used...)\r
+      *(int *) ad->argLoc = ValidateInt(argValue) + boardY; // (this is really kludgey, it should be done where used...)\r
       break;\r
 \r
     case ArgZ:\r
-      *(int *) ad->argLoc = atoi(argValue);\r
+      *(int *) ad->argLoc = ValidateInt(argValue);\r
       EnsureOnScreen(&boardX, &boardY, minX, minY); \r
       break;\r
 \r
@@ -4214,7 +4223,7 @@ BOOL DrawPositionNeedsFullRepaint()
         but animation is fast enough that it's difficult to notice.\r
     */\r
     if( animInfo.piece == EmptySquare ) {\r
-        if( (appData.highlightLastMove || appData.highlightDragging) && IsDrawArrowEnabled() && HasHighlightInfo() ) {\r
+        if( (appData.highlightLastMove || appData.highlightDragging) && IsDrawArrowEnabled() /*&& HasHighlightInfo()*/ ) {\r
             result = TRUE;\r
         }\r
     }\r
@@ -4847,7 +4856,7 @@ PaintProc(HWND hwnd)
  *   subtracted from x.\r
  */\r
 int EventToSquare(x, limit)\r
-     int x;\r
+     int x, limit;\r
 {\r
   if (x <= 0)\r
     return -2;\r
@@ -5428,7 +5437,7 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
     \r
     JAWS_ALT_INTERCEPT\r
 \r
-    if (appData.icsActive && (char)wParam > ' ' && !((char)wParam >= '1' && (char)wParam <= '9')) { \r
+    if (appData.icsActive && ((char)wParam == '\r' || (char)wParam > ' ' && !((char)wParam >= '1' && (char)wParam <= '9'))) { \r
        // [HGM] movenum: for non-zero digits we always do type-in dialog\r
        HWND h = GetDlgItem(hwndConsole, OPT_ConsoleInput);\r
        if (IsIconic(hwndConsole)) ShowWindow(hwndConsole, SW_RESTORE);\r
@@ -5780,7 +5789,7 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       break;\r
 \r
     case IDM_EditComment:\r
-      if (commentDialogUp && editComment) {\r
+      if (commentUp && editComment) {\r
        CommentPopDown();\r
       } else {\r
        EditCommentEvent();\r
@@ -7136,14 +7145,14 @@ EitherCommentPopUp(int index, char *title, char *str, BOOLEAN edit)
 \r
   if (commentDialog) {\r
     SendMessage(commentDialog, WM_INITDIALOG, 0, 0);\r
-    if (!commentDialogUp) ShowWindow(commentDialog, SW_SHOW);\r
+    if (!commentUp) ShowWindow(commentDialog, SW_SHOW);\r
   } else {\r
     lpProc = MakeProcInstance((FARPROC)CommentDialog, hInst);\r
     CreateDialog(hInst, MAKEINTRESOURCE(DLG_EditComment),\r
                 hwndMain, (DLGPROC)lpProc);\r
     FreeProcInstance(lpProc);\r
   }\r
-  commentDialogUp = TRUE;\r
+  commentUp = TRUE;\r
 }\r
 \r
 \r
@@ -7186,13 +7195,8 @@ TypeInMoveDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
        }\r
        // [HGM] movenum: allow move number to be typed in any mode\r
        if(sscanf(move, "%d", &n) == 1 && n != 0 ) {\r
-         currentMove = 2*n-1;\r
-         if(currentMove > forwardMostMove)  currentMove = forwardMostMove;\r
-         if(currentMove < backwardMostMove) currentMove = backwardMostMove;\r
+         ToNrEvent(2*n-1);\r
          EndDialog(hDlg, TRUE);\r
-         DrawPosition(TRUE, boards[currentMove]);\r
-         if(currentMove > backwardMostMove) DisplayMove(currentMove - 1);\r
-         else DisplayMessage("", "");\r
          return TRUE;\r
        }\r
       }\r
@@ -9436,7 +9440,7 @@ CommentPopDown(void)
   if (commentDialog) {\r
     ShowWindow(commentDialog, SW_HIDE);\r
   }\r
-  commentDialogUp = FALSE;\r
+  commentUp = FALSE;\r
 }\r
 \r
 VOID\r