Added URL detection into the console text window for ICS.
authorEric Mullins <emwine@earthlink.net>
Fri, 9 Oct 2009 08:14:22 +0000 (02:14 -0600)
committerEric Mullins <emwine@earthlink.net>
Fri, 9 Oct 2009 08:14:22 +0000 (02:14 -0600)
winboard/winboard.c

index 0fa4807..252e9b0 100644 (file)
@@ -2,7 +2,7 @@
  * WinBoard.c -- Windows NT front end to XBoard\r
  *\r
  * Copyright 1991 by Digital Equipment Corporation, Maynard,\r
- * Massachusetts. \r
+ * Massachusetts.\r
  *\r
  * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,\r
  * 2007, 2008, 2009 Free Software Foundation, Inc.\r
@@ -106,13 +106,13 @@ extern int ics_type;
 void DisplayHoldingsCount(HDC hdc, int x, int y, int align, int copyNumber);\r
 VOID NewVariantPopup(HWND hwnd);\r
 int FinishMove P((ChessMove moveType, int fromX, int fromY, int toX, int toY,\r
-                  /*char*/int promoChar));\r
+           /*char*/int promoChar));\r
 void AnimateAtomicCapture(int fromX, int fromY, int toX, int toY, int nFrames);\r
 void DisplayMove P((int moveNumber));\r
 Boolean ParseFEN P((Board board, int *blackPlaysFirst, char *fen));\r
 void ChatPopUp P(());\r
 typedef struct {\r
-  ChessSquare piece;  \r
+  ChessSquare piece;\r
   POINT pos;      /* window coordinates of current pos */\r
   POINT lastpos;  /* window coordinates of last pos - used for clipping */\r
   POINT from;     /* board coordinates of the piece's orig pos */\r
@@ -131,7 +131,7 @@ typedef struct {
 static DragInfo dragInfo = { {-1,-1}, {-1,-1}, {-1,-1}, {-1,-1} };\r
 \r
 typedef struct {\r
-  POINT sq[2];   /* board coordinates of from, to squares */\r
+  POINT sq[2];    /* board coordinates of from, to squares */\r
 } HighlightInfo;\r
 \r
 static HighlightInfo highlightInfo        = { {{-1, -1}, {-1, -1}} };\r
@@ -185,7 +185,7 @@ HWND hwndMain = NULL;        /* root window*/
 HWND hwndConsole = NULL;\r
 BOOLEAN alwaysOnTop = FALSE;\r
 RECT boardRect;\r
-COLORREF lightSquareColor, darkSquareColor, whitePieceColor, \r
+COLORREF lightSquareColor, darkSquareColor, whitePieceColor,\r
   blackPieceColor, highlightSquareColor, premoveHighlightColor;\r
 HPALETTE hPal;\r
 ColorClass currentColorClass;\r
@@ -232,7 +232,7 @@ static struct { int x; int y; int mode; } backTextureSquareInfo[BOARD_SIZE][BOAR
 #endif\r
 #endif\r
 \r
-char *defaultTextAttribs[] = \r
+char *defaultTextAttribs[] =\r
 {\r
   COLOR_SHOUT, COLOR_SSHOUT, COLOR_CHANNEL1, COLOR_CHANNEL, COLOR_KIBITZ,\r
   COLOR_TELL, COLOR_CHALLENGE, COLOR_REQUEST, COLOR_SEEK, COLOR_NORMAL,\r
@@ -248,7 +248,7 @@ typedef struct {
   int cliWidth, cliHeight;\r
 } SizeInfo;\r
 \r
-SizeInfo sizeInfo[] = \r
+SizeInfo sizeInfo[] =\r
 {\r
   { "tiny",     21, 0, 1, 1, 0, 0 },\r
   { "teeny",    25, 1, 1, 1, 0, 0 },\r
@@ -522,7 +522,7 @@ void ThawUI()
 \r
 int APIENTRY\r
 WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,\r
-       LPSTR lpCmdLine, int nCmdShow)\r
+    LPSTR lpCmdLine, int nCmdShow)\r
 {\r
   MSG msg;\r
   HANDLE hAccelMain, hAccelNoAlt, hAccelNoICS;\r
@@ -552,104 +552,104 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
   /* Acquire and dispatch messages until a WM_QUIT message is received. */\r
 \r
   while (GetMessage(&msg, /* message structure */\r
-                   NULL, /* handle of window receiving the message */\r
-                   0,    /* lowest message to examine */\r
-                   0))   /* highest message to examine */\r
+            NULL, /* handle of window receiving the message */\r
+            0,    /* lowest message to examine */\r
+            0))   /* highest message to examine */\r
     {\r
 \r
       if(msg.message == WM_CHAR && msg.wParam == '\t') {\r
-       // [HGM] navigate: switch between all windows with tab\r
-       HWND e1 = NULL, e2 = NULL, mh = NULL, hInput = NULL, hText = NULL;\r
-       int i, currentElement = 0;\r
-\r
-       // first determine what element of the chain we come from (if any)\r
-       if(appData.icsActive) {\r
-           hInput = GetDlgItem(hwndConsole, OPT_ConsoleInput);\r
-           hText  = GetDlgItem(hwndConsole, OPT_ConsoleText);\r
-       }\r
-       if(engineOutputDialog && EngineOutputIsUp()) {\r
-           e1 = GetDlgItem(engineOutputDialog, IDC_EngineMemo1);\r
-           e2 = GetDlgItem(engineOutputDialog, IDC_EngineMemo2);\r
-       }\r
-       if(moveHistoryDialog && MoveHistoryIsUp()) {\r
-           mh = GetDlgItem(moveHistoryDialog, IDC_MoveHistory);\r
-       }\r
-       if(msg.hwnd == hwndMain) currentElement = 7 ; else\r
-       if(msg.hwnd == engineOutputDialog) currentElement = 2; else\r
-       if(msg.hwnd == e1)                 currentElement = 2; else\r
-       if(msg.hwnd == e2)                 currentElement = 3; else\r
-       if(msg.hwnd == moveHistoryDialog) currentElement = 4; else\r
-       if(msg.hwnd == mh)                currentElement = 4; else\r
-       if(msg.hwnd == evalGraphDialog)    currentElement = 6; else\r
-       if(msg.hwnd == hText)  currentElement = 5; else\r
-       if(msg.hwnd == hInput) currentElement = 6; else\r
-       for (i = 0; i < N_BUTTONS; i++) {\r
-           if (buttonDesc[i].hwnd == msg.hwnd) { currentElement = 1; break; }\r
-       }\r
-\r
-       // determine where to go to\r
-       if(currentElement) { HWND h = NULL; int direction = GetKeyState(VK_SHIFT) < 0 ? -1 : 1;\r
-         do {\r
-           currentElement = (currentElement + direction) % 7;\r
-           switch(currentElement) {\r
-               case 0:\r
-                 h = hwndMain; break; // passing this case always makes the loop exit\r
-               case 1:\r
-                 h = buttonDesc[0].hwnd; break; // could be NULL\r
-               case 2:\r
-                 if(!EngineOutputIsUp()) continue; // skip closed auxiliary windows\r
-                 h = e1; break;\r
-               case 3:\r
-                 if(!EngineOutputIsUp()) continue;\r
-                 h = e2; break;\r
-               case 4:\r
-                 if(!MoveHistoryIsUp()) continue;\r
-                 h = mh; break;\r
-//             case 6: // input to eval graph does not seem to get here!\r
-//               if(!EvalGraphIsUp()) continue;\r
-//               h = evalGraphDialog; break;\r
-               case 5:\r
-                 if(!appData.icsActive) continue;\r
-                 SAY("display");\r
-                 h = hText; break;\r
-               case 6:\r
-                 if(!appData.icsActive) continue;\r
-                 SAY("input");\r
-                 h = hInput; break;\r
-           }\r
-         } while(h == 0);\r
-\r
-         if(currentElement > 4 && IsIconic(hwndConsole)) ShowWindow(hwndConsole, SW_RESTORE);\r
-         if(currentElement < 5 && IsIconic(hwndMain))    ShowWindow(hwndMain, SW_RESTORE); // all open together\r
-         SetFocus(h);\r
-\r
-         continue; // this message now has been processed\r
-       }\r
+    // [HGM] navigate: switch between all windows with tab\r
+    HWND e1 = NULL, e2 = NULL, mh = NULL, hInput = NULL, hText = NULL;\r
+    int i, currentElement = 0;\r
+\r
+    // first determine what element of the chain we come from (if any)\r
+    if(appData.icsActive) {\r
+        hInput = GetDlgItem(hwndConsole, OPT_ConsoleInput);\r
+        hText  = GetDlgItem(hwndConsole, OPT_ConsoleText);\r
+    }\r
+    if(engineOutputDialog && EngineOutputIsUp()) {\r
+        e1 = GetDlgItem(engineOutputDialog, IDC_EngineMemo1);\r
+        e2 = GetDlgItem(engineOutputDialog, IDC_EngineMemo2);\r
+    }\r
+    if(moveHistoryDialog && MoveHistoryIsUp()) {\r
+        mh = GetDlgItem(moveHistoryDialog, IDC_MoveHistory);\r
+    }\r
+    if(msg.hwnd == hwndMain) currentElement = 7 ; else\r
+    if(msg.hwnd == engineOutputDialog) currentElement = 2; else\r
+    if(msg.hwnd == e1)                 currentElement = 2; else\r
+    if(msg.hwnd == e2)                 currentElement = 3; else\r
+    if(msg.hwnd == moveHistoryDialog) currentElement = 4; else\r
+    if(msg.hwnd == mh)                currentElement = 4; else\r
+    if(msg.hwnd == evalGraphDialog)    currentElement = 6; else\r
+    if(msg.hwnd == hText)  currentElement = 5; else\r
+    if(msg.hwnd == hInput) currentElement = 6; else\r
+    for (i = 0; i < N_BUTTONS; i++) {\r
+        if (buttonDesc[i].hwnd == msg.hwnd) { currentElement = 1; break; }\r
+    }\r
+\r
+    // determine where to go to\r
+    if(currentElement) { HWND h = NULL; int direction = GetKeyState(VK_SHIFT) < 0 ? -1 : 1;\r
+      do {\r
+        currentElement = (currentElement + direction) % 7;\r
+        switch(currentElement) {\r
+        case 0:\r
+          h = hwndMain; break; // passing this case always makes the loop exit\r
+        case 1:\r
+          h = buttonDesc[0].hwnd; break; // could be NULL\r
+        case 2:\r
+          if(!EngineOutputIsUp()) continue; // skip closed auxiliary windows\r
+          h = e1; break;\r
+        case 3:\r
+          if(!EngineOutputIsUp()) continue;\r
+          h = e2; break;\r
+        case 4:\r
+          if(!MoveHistoryIsUp()) continue;\r
+          h = mh; break;\r
+//      case 6: // input to eval graph does not seem to get here!\r
+//        if(!EvalGraphIsUp()) continue;\r
+//        h = evalGraphDialog; break;\r
+        case 5:\r
+          if(!appData.icsActive) continue;\r
+          SAY("display");\r
+          h = hText; break;\r
+        case 6:\r
+          if(!appData.icsActive) continue;\r
+          SAY("input");\r
+          h = hInput; break;\r
+        }\r
+      } while(h == 0);\r
+\r
+      if(currentElement > 4 && IsIconic(hwndConsole)) ShowWindow(hwndConsole, SW_RESTORE);\r
+      if(currentElement < 5 && IsIconic(hwndMain))    ShowWindow(hwndMain, SW_RESTORE); // all open together\r
+      SetFocus(h);\r
+\r
+      continue; // this message now has been processed\r
+    }\r
       }\r
 \r
       if (!(commentDialog && IsDialogMessage(commentDialog, &msg)) &&\r
           !(moveHistoryDialog && IsDialogMessage(moveHistoryDialog, &msg)) &&\r
           !(evalGraphDialog && IsDialogMessage(evalGraphDialog, &msg)) &&\r
           !(engineOutputDialog && IsDialogMessage(engineOutputDialog, &msg)) &&\r
-         !(editTagsDialog && IsDialogMessage(editTagsDialog, &msg)) &&\r
-         !(gameListDialog && IsDialogMessage(gameListDialog, &msg)) &&\r
-         !(errorDialog && IsDialogMessage(errorDialog, &msg)) &&\r
-         !(!frozen && TranslateAccelerator(hwndMain, hAccelMain, &msg)) && JAWS_ACCEL\r
+      !(editTagsDialog && IsDialogMessage(editTagsDialog, &msg)) &&\r
+      !(gameListDialog && IsDialogMessage(gameListDialog, &msg)) &&\r
+      !(errorDialog && IsDialogMessage(errorDialog, &msg)) &&\r
+      !(!frozen && TranslateAccelerator(hwndMain, hAccelMain, &msg)) && JAWS_ACCEL\r
           !(!hwndConsole && TranslateAccelerator(hwndMain, hAccelNoICS, &msg)) &&\r
-         !(!hwndConsole && TranslateAccelerator(hwndMain, hAccelNoAlt, &msg))) {\r
-       int done = 0, i; // [HGM] chat: dispatch cat-box messages\r
-       for(i=0; i<MAX_CHAT; i++) \r
-           if(chatHandle[i] && IsDialogMessage(chatHandle[i], &msg)) {\r
-               done = 1; break;\r
-       }\r
-       if(done) continue; // [HGM] chat: end patch\r
-       TranslateMessage(&msg); /* Translates virtual key codes */\r
-       DispatchMessage(&msg);  /* Dispatches message to window */\r
+      !(!hwndConsole && TranslateAccelerator(hwndMain, hAccelNoAlt, &msg))) {\r
+    int done = 0, i; // [HGM] chat: dispatch cat-box messages\r
+    for(i=0; i<MAX_CHAT; i++)\r
+        if(chatHandle[i] && IsDialogMessage(chatHandle[i], &msg)) {\r
+        done = 1; break;\r
+    }\r
+    if(done) continue; // [HGM] chat: end patch\r
+    TranslateMessage(&msg); /* Translates virtual key codes */\r
+    DispatchMessage(&msg);  /* Dispatches message to window */\r
       }\r
     }\r
 \r
 \r
-  return (msg.wParam); /* Returns the value from PostQuitMessage */\r
+  return (msg.wParam);  /* Returns the value from PostQuitMessage */\r
 }\r
 \r
 /*---------------------------------------------------------------------------*\\r
@@ -664,12 +664,12 @@ SetUserLogo()
     static char oldUserName[MSG_SIZ], *curName;\r
 \r
     if(appData.autoLogo) {\r
-         curName = UserName();\r
-         if(strcmp(curName, oldUserName)) {\r
-               sprintf(oldUserName, "logos\\%s.bmp", curName);\r
-               userLogo = LoadImage( 0, oldUserName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );    \r
-               strcpy(oldUserName, curName);\r
-         }\r
+      curName = UserName();\r
+      if(strcmp(curName, oldUserName)) {\r
+        sprintf(oldUserName, "logos\\%s.bmp", curName);\r
+        userLogo = LoadImage( 0, oldUserName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );\r
+        strcpy(oldUserName, curName);\r
+      }\r
     }\r
 }\r
 \r
@@ -682,15 +682,15 @@ InitApplication(HINSTANCE hInstance)
   /* main window. */\r
 \r
   wc.style         = CS_HREDRAW | CS_VREDRAW; /* Class style(s). */\r
-  wc.lpfnWndProc   = (WNDPROC)WndProc; /* Window Procedure */\r
-  wc.cbClsExtra    = 0;                        /* No per-class extra data. */\r
-  wc.cbWndExtra    = 0;                        /* No per-window extra data. */\r
-  wc.hInstance     = hInstance;                /* Owner of this class */\r
+  wc.lpfnWndProc   = (WNDPROC)WndProc;  /* Window Procedure */\r
+  wc.cbClsExtra    = 0;         /* No per-class extra data. */\r
+  wc.cbWndExtra    = 0;         /* No per-window extra data. */\r
+  wc.hInstance     = hInstance;     /* Owner of this class */\r
   wc.hIcon         = LoadIcon(hInstance, "icon_white");\r
-  wc.hCursor       = LoadCursor(NULL, IDC_ARROW);      /* Cursor */\r
-  wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); /* Default color */\r
-  wc.lpszMenuName  = szAppName;                        /* Menu name from .RC */\r
-  wc.lpszClassName = szAppName;                        /* Name to register as */\r
+  wc.hCursor       = LoadCursor(NULL, IDC_ARROW);   /* Cursor */\r
+  wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);  /* Default color */\r
+  wc.lpszMenuName  = szAppName;         /* Menu name from .RC */\r
+  wc.lpszClassName = szAppName;         /* Name to register as */\r
 \r
   /* Register the window class and return success/failure code. */\r
   if (!RegisterClass(&wc)) return FALSE;\r
@@ -733,7 +733,7 @@ InitInstance(HINSTANCE hInstance, int nCmdShow, LPSTR lpCmdLine)
   WINDOWPLACEMENT wp;\r
   char *filepart;\r
 \r
-  hInst = hInstance;   /* Store instance handle in our global variable */\r
+  hInst = hInstance;    /* Store instance handle in our global variable */\r
 \r
   if (SearchPath(NULL, "WinBoard.exe", NULL, MSG_SIZ, installDir, &filepart)) {\r
     *filepart = NULLCHAR;\r
@@ -755,9 +755,9 @@ InitInstance(HINSTANCE hInstance, int nCmdShow, LPSTR lpCmdLine)
 \r
   /* Create a main window for this application instance. */\r
   hwnd = CreateWindow(szAppName, szTitle,\r
-                     (WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX),\r
-                     CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,\r
-                     NULL, NULL, hInstance, NULL);\r
+              (WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX),\r
+              CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,\r
+              NULL, NULL, hInstance, NULL);\r
   hwndMain = hwnd;\r
 \r
   /* If window could not be created, return "failure" */\r
@@ -774,9 +774,9 @@ InitInstance(HINSTANCE hInstance, int nCmdShow, LPSTR lpCmdLine)
       }\r
   } else if(appData.autoLogo) {\r
       if(appData.firstDirectory && appData.firstDirectory[0]) {\r
-       char buf[MSG_SIZ];\r
-       sprintf(buf, "%s/logo.bmp", appData.firstDirectory);\r
-       first.programLogo = LoadImage( 0, buf, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );   \r
+    char buf[MSG_SIZ];\r
+    sprintf(buf, "%s/logo.bmp", appData.firstDirectory);\r
+    first.programLogo = LoadImage( 0, buf, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );\r
       }\r
   }\r
 \r
@@ -789,12 +789,12 @@ InitInstance(HINSTANCE hInstance, int nCmdShow, LPSTR lpCmdLine)
   } else if(appData.autoLogo) {\r
       char buf[MSG_SIZ];\r
       if(appData.icsActive) { // [HGM] logo: in ICS mode second can be used for ICS\r
-       sprintf(buf, "logos\\%s.bmp", appData.icsHost);\r
-       second.programLogo = LoadImage( 0, buf, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );\r
+    sprintf(buf, "logos\\%s.bmp", appData.icsHost);\r
+    second.programLogo = LoadImage( 0, buf, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );\r
       } else\r
       if(appData.secondDirectory && appData.secondDirectory[0]) {\r
-       sprintf(buf, "%s\\logo.bmp", appData.secondDirectory);\r
-       second.programLogo = LoadImage( 0, buf, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );  \r
+    sprintf(buf, "%s\\logo.bmp", appData.secondDirectory);\r
+    second.programLogo = LoadImage( 0, buf, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );\r
       }\r
   }\r
 \r
@@ -824,7 +824,7 @@ InitInstance(HINSTANCE hInstance, int nCmdShow, LPSTR lpCmdLine)
 \r
   /* [AS] Load textures if specified */\r
   ZeroMemory( &backTextureSquareInfo, sizeof(backTextureSquareInfo) );\r
-  \r
+\r
   if( appData.liteBackTextureFile && appData.liteBackTextureFile[0] != NULLCHAR && appData.liteBackTextureFile[0] != '*' ) {\r
       liteBackTexture = LoadImage( 0, appData.liteBackTextureFile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );\r
       liteBackTextureMode = appData.liteBackTextureMode;\r
@@ -833,7 +833,7 @@ InitInstance(HINSTANCE hInstance, int nCmdShow, LPSTR lpCmdLine)
           fprintf( debugFP, "Unable to load lite texture bitmap '%s'\n", appData.liteBackTextureFile );\r
       }\r
   }\r
-  \r
+\r
   if( appData.darkBackTextureFile && appData.darkBackTextureFile[0] != NULLCHAR && appData.darkBackTextureFile[0] != '*' ) {\r
       darkBackTexture = LoadImage( 0, appData.darkBackTextureFile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );\r
       darkBackTextureMode = appData.darkBackTextureMode;\r
@@ -891,7 +891,7 @@ InitInstance(HINSTANCE hInstance, int nCmdShow, LPSTR lpCmdLine)
 \r
 \r
 typedef enum {\r
-  ArgString, ArgInt, ArgFloat, ArgBoolean, ArgTrue, ArgFalse, ArgNone, \r
+  ArgString, ArgInt, ArgFloat, ArgBoolean, ArgTrue, ArgFalse, ArgNone,\r
   ArgColor, ArgAttribs, ArgFilename, ArgBoardSize, ArgFont, ArgCommSettings,\r
   ArgSettingsFilename,\r
   ArgX, ArgY, ArgZ // [HGM] placement: for window-placement options stored relative to main window\r
@@ -1063,7 +1063,7 @@ ArgDescriptor argDescriptors[] = {
   { "popup", ArgTrue, (LPVOID) &appData.popupMoveErrors, FALSE },\r
   { "xpopup", ArgFalse, (LPVOID) &appData.popupMoveErrors, FALSE },\r
   { "-popup", ArgFalse, (LPVOID) &appData.popupMoveErrors, FALSE },\r
-  { "popUpErrors", ArgBoolean, (LPVOID) &appData.popupMoveErrors, \r
+  { "popUpErrors", ArgBoolean, (LPVOID) &appData.popupMoveErrors,\r
     FALSE }, /* only so that old WinBoard.ini files from betas can be read */\r
   { "clockFont", ArgFont, (LPVOID) CLOCK_FONT, TRUE },\r
   { "messageFont", ArgFont, (LPVOID) MESSAGE_FONT, TRUE },\r
@@ -1212,13 +1212,13 @@ ArgDescriptor argDescriptors[] = {
   { "soundMove", ArgFilename, (LPVOID) &sounds[(int)SoundMove].name, TRUE },\r
   { "soundBell", ArgFilename, (LPVOID) &sounds[(int)SoundBell].name, TRUE },\r
   { "soundIcsWin", ArgFilename, (LPVOID) &sounds[(int)SoundIcsWin].name,TRUE },\r
-  { "soundIcsLoss", ArgFilename, \r
+  { "soundIcsLoss", ArgFilename,\r
     (LPVOID) &sounds[(int)SoundIcsLoss].name, TRUE },\r
-  { "soundIcsDraw", ArgFilename, \r
+  { "soundIcsDraw", ArgFilename,\r
     (LPVOID) &sounds[(int)SoundIcsDraw].name, TRUE },\r
-  { "soundIcsUnfinished", ArgFilename, \r
+  { "soundIcsUnfinished", ArgFilename,\r
     (LPVOID) &sounds[(int)SoundIcsUnfinished].name, TRUE},\r
-  { "soundIcsAlarm", ArgFilename, \r
+  { "soundIcsAlarm", ArgFilename,\r
     (LPVOID) &sounds[(int)SoundAlarm].name, TRUE },\r
   { "reuseFirst", ArgBoolean, (LPVOID) &appData.reuseFirst, FALSE },\r
   { "reuse", ArgTrue, (LPVOID) &appData.reuseFirst, FALSE },\r
@@ -1301,7 +1301,7 @@ ArgDescriptor argDescriptors[] = {
   { "polyglotDir", ArgFilename, (LPVOID) &appData.polyglotDir, TRUE },\r
   { "usePolyglotBook", ArgBoolean, (LPVOID) &appData.usePolyglotBook, TRUE },\r
   { "polyglotBook", ArgFilename, (LPVOID) &appData.polyglotBook, TRUE },\r
-  { "defaultHashSize", ArgInt, (LPVOID) &appData.defaultHashSize, TRUE }, \r
+  { "defaultHashSize", ArgInt, (LPVOID) &appData.defaultHashSize, TRUE },\r
   { "defaultCacheSizeEGTB", ArgInt, (LPVOID) &appData.defaultCacheSizeEGTB, TRUE },\r
   { "defaultPathEGTB", ArgFilename, (LPVOID) &appData.defaultPathEGTB, TRUE },\r
 \r
@@ -1486,7 +1486,7 @@ ParseFontName(char *name, MyFontParams *mfp)
     while (*p && !isdigit(*p)) {\r
       *q++ = *p++;\r
       if (q - mfp->faceName >= sizeof(mfp->faceName))\r
-       ExitArgError("Font name too long:", name);\r
+    ExitArgError("Font name too long:", name);\r
     }\r
     while (q > mfp->faceName && q[-1] == ' ') q--;\r
     *q = NULLCHAR;\r
@@ -1510,7 +1510,7 @@ ParseColorName(char *name)
 \r
   count = sscanf(name, "#%2x%2x%2x", &red, &green, &blue);\r
   if (count != 3) {\r
-    count = sscanf(name, "%3d%*[^0-9]%3d%*[^0-9]%3d", \r
+    count = sscanf(name, "%3d%*[^0-9]%3d%*[^0-9]%3d",\r
       &red, &green, &blue);\r
   }\r
   if (count != 3) {\r
@@ -1624,17 +1624,17 @@ ParseArgs(GetFunc get, void *cl)
       /* Switch */\r
       q = argName;\r
       while (ch != ' ' && ch != '=' && ch != ':' && ch != NULLCHAR &&\r
-            ch != '\n' && ch != '\t') {\r
-       *q++ = ch;\r
-       ch = get(cl);\r
+         ch != '\n' && ch != '\t') {\r
+    *q++ = ch;\r
+    ch = get(cl);\r
       }\r
       *q = NULLCHAR;\r
 \r
       for (ad = argDescriptors; ad->argName != NULL; ad++)\r
-       if (strcmp(ad->argName, argName + 1) == 0) break;\r
+    if (strcmp(ad->argName, argName + 1) == 0) break;\r
 \r
       if (ad->argName == NULL)\r
-       ExitArgError("Unrecognized argument", argName);\r
+    ExitArgError("Unrecognized argument", argName);\r
 \r
     } else if (ch == '@') {\r
       /* Indirection file */\r
@@ -1666,104 +1666,104 @@ ParseArgs(GetFunc get, void *cl)
       start = ch;\r
       ch = get(cl);\r
       while (start) {\r
-       switch (ch) {\r
-       case NULLCHAR:\r
-         start = NULLCHAR;\r
-         break;\r
-         \r
-       case '}':\r
-         ch = get(cl);\r
-         start = NULLCHAR;\r
-         break;\r
-\r
-       default:\r
-         *q++ = ch;\r
-         ch = get(cl);\r
-         break;\r
-       }\r
-      }          \r
+    switch (ch) {\r
+    case NULLCHAR:\r
+      start = NULLCHAR;\r
+      break;\r
+\r
+    case '}':\r
+      ch = get(cl);\r
+      start = NULLCHAR;\r
+      break;\r
+\r
+    default:\r
+      *q++ = ch;\r
+      ch = get(cl);\r
+      break;\r
+    }\r
+      }\r
     } else if (ch == '\'' || ch == '"') {\r
       // Quoting with ' ' or " ", with \ as escape character.\r
       // Inconvenient for long strings that may contain Windows filenames.\r
       start = ch;\r
       ch = get(cl);\r
       while (start) {\r
-       switch (ch) {\r
-       case NULLCHAR:\r
-         start = NULLCHAR;\r
-         break;\r
+    switch (ch) {\r
+    case NULLCHAR:\r
+      start = NULLCHAR;\r
+      break;\r
 \r
-       default:\r
+    default:\r
         not_special:\r
-         *q++ = ch;\r
-         ch = get(cl);\r
-         break;\r
-\r
-       case '\'':\r
-       case '\"':\r
-         if (ch == start) {\r
-           ch = get(cl);\r
-           start = NULLCHAR;\r
-           break;\r
-         } else {\r
-           goto not_special;\r
-         }\r
-\r
-       case '\\':\r
+      *q++ = ch;\r
+      ch = get(cl);\r
+      break;\r
+\r
+    case '\'':\r
+    case '\"':\r
+      if (ch == start) {\r
+        ch = get(cl);\r
+        start = NULLCHAR;\r
+        break;\r
+      } else {\r
+        goto not_special;\r
+      }\r
+\r
+    case '\\':\r
           if (ad->argType == ArgFilename\r
-             || ad->argType == ArgSettingsFilename) {\r
-             goto not_special;\r
-         }\r
-         ch = get(cl);\r
-         switch (ch) {\r
-         case NULLCHAR:\r
-           ExitArgError("Incomplete \\ escape in value for", argName);\r
-           break;\r
-         case 'n':\r
-           *q++ = '\n';\r
-           ch = get(cl);\r
-           break;\r
-         case 'r':\r
-           *q++ = '\r';\r
-           ch = get(cl);\r
-           break;\r
-         case 't':\r
-           *q++ = '\t';\r
-           ch = get(cl);\r
-           break;\r
-         case 'b':\r
-           *q++ = '\b';\r
-           ch = get(cl);\r
-           break;\r
-         case 'f':\r
-           *q++ = '\f';\r
-           ch = get(cl);\r
-           break;\r
-         default:\r
-           octval = 0;\r
-           for (i = 0; i < 3; i++) {\r
-             if (ch >= '0' && ch <= '7') {\r
-               octval = octval*8 + (ch - '0');\r
-               ch = get(cl);\r
-             } else {\r
-               break;\r
-             }\r
-           }\r
-           if (i > 0) {\r
-             *q++ = (char) octval;\r
-           } else {\r
-             *q++ = ch;\r
-             ch = get(cl);\r
-           }\r
-           break;\r
-         }\r
-         break;\r
-       }\r
+          || ad->argType == ArgSettingsFilename) {\r
+          goto not_special;\r
+      }\r
+      ch = get(cl);\r
+      switch (ch) {\r
+      case NULLCHAR:\r
+        ExitArgError("Incomplete \\ escape in value for", argName);\r
+        break;\r
+      case 'n':\r
+        *q++ = '\n';\r
+        ch = get(cl);\r
+        break;\r
+      case 'r':\r
+        *q++ = '\r';\r
+        ch = get(cl);\r
+        break;\r
+      case 't':\r
+        *q++ = '\t';\r
+        ch = get(cl);\r
+        break;\r
+      case 'b':\r
+        *q++ = '\b';\r
+        ch = get(cl);\r
+        break;\r
+      case 'f':\r
+        *q++ = '\f';\r
+        ch = get(cl);\r
+        break;\r
+      default:\r
+        octval = 0;\r
+        for (i = 0; i < 3; i++) {\r
+          if (ch >= '0' && ch <= '7') {\r
+        octval = octval*8 + (ch - '0');\r
+        ch = get(cl);\r
+          } else {\r
+        break;\r
+          }\r
+        }\r
+        if (i > 0) {\r
+          *q++ = (char) octval;\r
+        } else {\r
+          *q++ = ch;\r
+          ch = get(cl);\r
+        }\r
+        break;\r
+      }\r
+      break;\r
+    }\r
       }\r
     } else {\r
       while (ch != ' ' && ch != NULLCHAR && ch != '\t' && ch != '\n') {\r
-       *q++ = ch;\r
-       ch = get(cl);\r
+    *q++ = ch;\r
+    ch = get(cl);\r
       }\r
     }\r
     *q = NULLCHAR;\r
@@ -1774,7 +1774,7 @@ ParseArgs(GetFunc get, void *cl)
       break;\r
 \r
     case ArgX:\r
-      *(int *) ad->argLoc = atoi(argValue) + boardX; // [HGM] placement: translate stored relative to absolute \r
+      *(int *) ad->argLoc = atoi(argValue) + boardX; // [HGM] placement: translate stored relative to absolute\r
       break;\r
 \r
     case ArgY:\r
@@ -1783,7 +1783,7 @@ ParseArgs(GetFunc get, void *cl)
 \r
     case ArgZ:\r
       *(int *) ad->argLoc = atoi(argValue);\r
-      EnsureOnScreen(&boardX, &boardY, minX, minY); \r
+      EnsureOnScreen(&boardX, &boardY, minX, minY);\r
       break;\r
 \r
     case ArgFloat:\r
@@ -1797,17 +1797,17 @@ ParseArgs(GetFunc get, void *cl)
 \r
     case ArgSettingsFilename:\r
       {\r
-       char fullname[MSG_SIZ];\r
-       if (ParseSettingsFile(argValue, fullname)) {\r
-         if (ad->argLoc != NULL) {\r
-           *(char **) ad->argLoc = strdup(fullname);\r
-         }\r
-       } else {\r
-         if (ad->argLoc != NULL) {\r
-         } else {\r
-           ExitArgError("Failed to open indirection file", argValue);\r
-         }\r
-       }\r
+    char fullname[MSG_SIZ];\r
+    if (ParseSettingsFile(argValue, fullname)) {\r
+      if (ad->argLoc != NULL) {\r
+        *(char **) ad->argLoc = strdup(fullname);\r
+      }\r
+    } else {\r
+      if (ad->argLoc != NULL) {\r
+      } else {\r
+        ExitArgError("Failed to open indirection file", argValue);\r
+      }\r
+    }\r
       }\r
       break;\r
 \r
@@ -1815,15 +1815,15 @@ ParseArgs(GetFunc get, void *cl)
       switch (argValue[0]) {\r
       case 't':\r
       case 'T':\r
-       *(Boolean *) ad->argLoc = TRUE;\r
-       break;\r
+    *(Boolean *) ad->argLoc = TRUE;\r
+    break;\r
       case 'f':\r
       case 'F':\r
-       *(Boolean *) ad->argLoc = FALSE;\r
-       break;\r
+    *(Boolean *) ad->argLoc = FALSE;\r
+    break;\r
       default:\r
-       ExitArgError("Unrecognized boolean argument value", argValue);\r
-       break;\r
+    ExitArgError("Unrecognized boolean argument value", argValue);\r
+    break;\r
       }\r
       break;\r
 \r
@@ -1836,7 +1836,7 @@ ParseArgs(GetFunc get, void *cl)
       ParseAttribs(&textAttribs[cc].color, &textAttribs[cc].effects, argValue);\r
       }\r
       break;\r
-      \r
+\r
     case ArgBoardSize:\r
       *(BoardSize *)ad->argLoc = ParseBoardSize(argValue);\r
       break;\r
@@ -1892,9 +1892,9 @@ SetDefaultTextAttribs()
 {\r
   ColorClass cc;\r
   for (cc = (ColorClass)0; cc < NColorClasses; cc++) {\r
-    ParseAttribs(&textAttribs[cc].color, \r
-                &textAttribs[cc].effects, \r
-                defaultTextAttribs[cc]);\r
+    ParseAttribs(&textAttribs[cc].color,\r
+         &textAttribs[cc].effects,\r
+             defaultTextAttribs[cc]);\r
   }\r
 }\r
 \r
@@ -2049,16 +2049,16 @@ InitAppData(LPSTR lpCmdLine)
   saveSettingsOnExit = TRUE;\r
   boardX = CW_USEDEFAULT;\r
   boardY = CW_USEDEFAULT;\r
-  analysisX = CW_USEDEFAULT; \r
-  analysisY = CW_USEDEFAULT; \r
+  analysisX = CW_USEDEFAULT;\r
+  analysisY = CW_USEDEFAULT;\r
   analysisW = CW_USEDEFAULT;\r
   analysisH = CW_USEDEFAULT;\r
-  commentX = CW_USEDEFAULT; \r
-  commentY = CW_USEDEFAULT; \r
+  commentX = CW_USEDEFAULT;\r
+  commentY = CW_USEDEFAULT;\r
   commentW = CW_USEDEFAULT;\r
   commentH = CW_USEDEFAULT;\r
-  editTagsX = CW_USEDEFAULT; \r
-  editTagsY = CW_USEDEFAULT; \r
+  editTagsX = CW_USEDEFAULT;\r
+  editTagsY = CW_USEDEFAULT;\r
   editTagsW = CW_USEDEFAULT;\r
   editTagsH = CW_USEDEFAULT;\r
   icsTextMenuString = ICS_TEXT_MENU_DEFAULT;\r
@@ -2180,7 +2180,7 @@ InitAppData(LPSTR lpCmdLine)
       ParseFontName(font[j][i]->def, &font[j][i]->mfp);\r
     }\r
   }\r
-  \r
+\r
   /* Parse default settings file if any */\r
   if (ParseSettingsFile(settingsFileName, buf)) {\r
     settingsFileName = strdup(buf);\r
@@ -2235,7 +2235,7 @@ InitAppData(LPSTR lpCmdLine)
       (chessProgram && (*appData.firstChessProgram == NULLCHAR ||\r
                         *appData.secondChessProgram == NULLCHAR))) {\r
     FARPROC lpProc;\r
-    \r
+\r
     lpProc = MakeProcInstance((FARPROC)StartupDialog, hInst);\r
     DialogBox(hInst, MAKEINTRESOURCE(DLG_Startup), NULL, (DLGPROC)lpProc);\r
     FreeProcInstance(lpProc);\r
@@ -2293,12 +2293,12 @@ InitMenuChecks()
   HMENU hmenu = GetMenu(hwndMain);\r
 \r
   (void) EnableMenuItem(hmenu, IDM_CommPort,\r
-                       MF_BYCOMMAND|((appData.icsActive &&\r
-                                      *appData.icsCommPort != NULLCHAR) ?\r
-                                     MF_ENABLED : MF_GRAYED));\r
+            MF_BYCOMMAND|((appData.icsActive &&\r
+                       *appData.icsCommPort != NULLCHAR) ?\r
+                      MF_ENABLED : MF_GRAYED));\r
   (void) CheckMenuItem(hmenu, IDM_SaveSettingsOnExit,\r
-                      MF_BYCOMMAND|(saveSettingsOnExit ?\r
-                                    MF_CHECKED : MF_UNCHECKED));\r
+               MF_BYCOMMAND|(saveSettingsOnExit ?\r
+                     MF_CHECKED : MF_UNCHECKED));\r
 }\r
 \r
 \r
@@ -2375,7 +2375,7 @@ SaveSettings(char* name)
 \r
   /* [AS] Move history */\r
   wpMoveHistory.visible = MoveHistoryIsUp();\r
-  \r
+\r
   if( moveHistoryDialog ) {\r
     GetWindowPlacement(moveHistoryDialog, &wp);\r
     wpMoveHistory.x = wp.rcNormalPosition.left;\r
@@ -2411,28 +2411,28 @@ SaveSettings(char* name)
     switch (ad->argType) {\r
     case ArgString:\r
       {\r
-       char *p = *(char **)ad->argLoc;\r
-       if ((strchr(p, '\\') || strchr(p, '\n')) && !strchr(p, '}')) {\r
-         /* Quote multiline values or \-containing values\r
-            with { } if possible */\r
-         fprintf(f, "/%s={%s}\n", ad->argName, p);\r
-       } else {\r
-         /* Else quote with " " */\r
-         fprintf(f, "/%s=\"", ad->argName);\r
-         while (*p) {\r
-           if (*p == '\n') fprintf(f, "\n");\r
-           else if (*p == '\r') fprintf(f, "\\r");\r
-           else if (*p == '\t') fprintf(f, "\\t");\r
-           else if (*p == '\b') fprintf(f, "\\b");\r
-           else if (*p == '\f') fprintf(f, "\\f");\r
-           else if (*p < ' ') fprintf(f, "\\%03o", *p);\r
-           else if (*p == '\"') fprintf(f, "\\\"");\r
-           else if (*p == '\\') fprintf(f, "\\\\");\r
-           else putc(*p, f);\r
-           p++;\r
-         }\r
-         fprintf(f, "\"\n");\r
-       }\r
+    char *p = *(char **)ad->argLoc;\r
+    if ((strchr(p, '\\') || strchr(p, '\n')) && !strchr(p, '}')) {\r
+      /* Quote multiline values or \-containing values\r
+         with { } if possible */\r
+      fprintf(f, "/%s={%s}\n", ad->argName, p);\r
+    } else {\r
+      /* Else quote with " " */\r
+      fprintf(f, "/%s=\"", ad->argName);\r
+      while (*p) {\r
+        if (*p == '\n') fprintf(f, "\n");\r
+        else if (*p == '\r') fprintf(f, "\\r");\r
+        else if (*p == '\t') fprintf(f, "\\t");\r
+        else if (*p == '\b') fprintf(f, "\\b");\r
+        else if (*p == '\f') fprintf(f, "\\f");\r
+        else if (*p < ' ') fprintf(f, "\\%03o", *p);\r
+        else if (*p == '\"') fprintf(f, "\\\"");\r
+        else if (*p == '\\') fprintf(f, "\\\\");\r
+        else putc(*p, f);\r
+        p++;\r
+      }\r
+      fprintf(f, "\"\n");\r
+    }\r
       }\r
       break;\r
     case ArgInt:\r
@@ -2449,8 +2449,8 @@ SaveSettings(char* name)
       fprintf(f, "/%s=%g\n", ad->argName, *(float *)ad->argLoc);\r
       break;\r
     case ArgBoolean:\r
-      fprintf(f, "/%s=%s\n", ad->argName, \r
-       (*(Boolean *)ad->argLoc) ? "true" : "false");\r
+      fprintf(f, "/%s=%s\n", ad->argName,\r
+    (*(Boolean *)ad->argLoc) ? "true" : "false");\r
       break;\r
     case ArgTrue:\r
       if (*(Boolean *)ad->argLoc) fprintf(f, "/%s\n", ad->argName);\r
@@ -2460,48 +2460,48 @@ SaveSettings(char* name)
       break;\r
     case ArgColor:\r
       {\r
-       COLORREF color = *(COLORREF *)ad->argLoc;\r
-       fprintf(f, "/%s=#%02lx%02lx%02lx\n", ad->argName, \r
-         color&0xff, (color>>8)&0xff, (color>>16)&0xff);\r
+    COLORREF color = *(COLORREF *)ad->argLoc;\r
+    fprintf(f, "/%s=#%02lx%02lx%02lx\n", ad->argName,\r
+      color&0xff, (color>>8)&0xff, (color>>16)&0xff);\r
       }\r
       break;\r
     case ArgAttribs:\r
       {\r
-       MyTextAttribs* ta = &textAttribs[(ColorClass)ad->argLoc];\r
-       fprintf(f, "/%s=\"%s%s%s%s%s#%02lx%02lx%02lx\"\n", ad->argName,\r
+    MyTextAttribs* ta = &textAttribs[(ColorClass)ad->argLoc];\r
+    fprintf(f, "/%s=\"%s%s%s%s%s#%02lx%02lx%02lx\"\n", ad->argName,\r
           (ta->effects & CFE_BOLD) ? "b" : "",\r
           (ta->effects & CFE_ITALIC) ? "i" : "",\r
           (ta->effects & CFE_UNDERLINE) ? "u" : "",\r
           (ta->effects & CFE_STRIKEOUT) ? "s" : "",\r
           (ta->effects) ? " " : "",\r
-         ta->color&0xff, (ta->color >> 8)&0xff, (ta->color >> 16)&0xff);\r
+      ta->color&0xff, (ta->color >> 8)&0xff, (ta->color >> 16)&0xff);\r
       }\r
       break;\r
     case ArgFilename:\r
       if (strchr(*(char **)ad->argLoc, '\"')) {\r
-       fprintf(f, "/%s='%s'\n", ad->argName, *(char **)ad->argLoc);\r
+    fprintf(f, "/%s='%s'\n", ad->argName, *(char **)ad->argLoc);\r
       } else {\r
-       fprintf(f, "/%s=\"%s\"\n", ad->argName, *(char **)ad->argLoc);\r
+    fprintf(f, "/%s=\"%s\"\n", ad->argName, *(char **)ad->argLoc);\r
       }\r
       break;\r
     case ArgBoardSize:\r
       fprintf(f, "/%s=%s\n", ad->argName,\r
-             sizeInfo[*(BoardSize *)ad->argLoc].name);\r
+          sizeInfo[*(BoardSize *)ad->argLoc].name);\r
       break;\r
     case ArgFont:\r
       {\r
         int bs;\r
-       for (bs=0; bs<NUM_SIZES; bs++) {\r
-         MyFontParams *mfp = &font[bs][(int) ad->argLoc]->mfp;\r
+    for (bs=0; bs<NUM_SIZES; bs++) {\r
+      MyFontParams *mfp = &font[bs][(int) ad->argLoc]->mfp;\r
           fprintf(f, "/size=%s ", sizeInfo[bs].name);\r
-         fprintf(f, "/%s=\"%s:%g%s%s%s%s%s\"\n",\r
-           ad->argName, mfp->faceName, mfp->pointSize,\r
+      fprintf(f, "/%s=\"%s:%g%s%s%s%s%s\"\n",\r
+        ad->argName, mfp->faceName, mfp->pointSize,\r
             mfp->bold || mfp->italic || mfp->underline || mfp->strikeout ? " " : "",\r
-           mfp->bold ? "b" : "",\r
-           mfp->italic ? "i" : "",\r
-           mfp->underline ? "u" : "",\r
-           mfp->strikeout ? "s" : "");\r
-       }\r
+        mfp->bold ? "b" : "",\r
+        mfp->italic ? "i" : "",\r
+        mfp->underline ? "u" : "",\r
+        mfp->strikeout ? "s" : "");\r
+    }\r
       }\r
       break;\r
     case ArgCommSettings:\r
@@ -2587,43 +2587,43 @@ static void DrawTile( int dx, int dy, int dw, int dh, HDC dst, HDC src, int mode
 \r
 /* [AS] [HGM] Make room for more piece types, so all pieces can be different */\r
 enum {\r
-    PM_WP = (int) WhitePawn, \r
-    PM_WN = (int) WhiteKnight, \r
-    PM_WB = (int) WhiteBishop, \r
-    PM_WR = (int) WhiteRook, \r
-    PM_WQ = (int) WhiteQueen, \r
-    PM_WF = (int) WhiteFerz, \r
-    PM_WW = (int) WhiteWazir, \r
-    PM_WE = (int) WhiteAlfil, \r
-    PM_WM = (int) WhiteMan, \r
-    PM_WO = (int) WhiteCannon, \r
-    PM_WU = (int) WhiteUnicorn, \r
-    PM_WH = (int) WhiteNightrider, \r
-    PM_WA = (int) WhiteAngel, \r
-    PM_WC = (int) WhiteMarshall, \r
-    PM_WAB = (int) WhiteCardinal, \r
-    PM_WD = (int) WhiteDragon, \r
-    PM_WL = (int) WhiteLance, \r
-    PM_WS = (int) WhiteCobra, \r
-    PM_WV = (int) WhiteFalcon, \r
-    PM_WSG = (int) WhiteSilver, \r
-    PM_WG = (int) WhiteGrasshopper, \r
+    PM_WP = (int) WhitePawn,\r
+    PM_WN = (int) WhiteKnight,\r
+    PM_WB = (int) WhiteBishop,\r
+    PM_WR = (int) WhiteRook,\r
+    PM_WQ = (int) WhiteQueen,\r
+    PM_WF = (int) WhiteFerz,\r
+    PM_WW = (int) WhiteWazir,\r
+    PM_WE = (int) WhiteAlfil,\r
+    PM_WM = (int) WhiteMan,\r
+    PM_WO = (int) WhiteCannon,\r
+    PM_WU = (int) WhiteUnicorn,\r
+    PM_WH = (int) WhiteNightrider,\r
+    PM_WA = (int) WhiteAngel,\r
+    PM_WC = (int) WhiteMarshall,\r
+    PM_WAB = (int) WhiteCardinal,\r
+    PM_WD = (int) WhiteDragon,\r
+    PM_WL = (int) WhiteLance,\r
+    PM_WS = (int) WhiteCobra,\r
+    PM_WV = (int) WhiteFalcon,\r
+    PM_WSG = (int) WhiteSilver,\r
+    PM_WG = (int) WhiteGrasshopper,\r
     PM_WK = (int) WhiteKing,\r
-    PM_BP = (int) BlackPawn, \r
-    PM_BN = (int) BlackKnight, \r
-    PM_BB = (int) BlackBishop, \r
-    PM_BR = (int) BlackRook, \r
-    PM_BQ = (int) BlackQueen, \r
-    PM_BF = (int) BlackFerz, \r
-    PM_BW = (int) BlackWazir, \r
-    PM_BE = (int) BlackAlfil, \r
+    PM_BP = (int) BlackPawn,\r
+    PM_BN = (int) BlackKnight,\r
+    PM_BB = (int) BlackBishop,\r
+    PM_BR = (int) BlackRook,\r
+    PM_BQ = (int) BlackQueen,\r
+    PM_BF = (int) BlackFerz,\r
+    PM_BW = (int) BlackWazir,\r
+    PM_BE = (int) BlackAlfil,\r
     PM_BM = (int) BlackMan,\r
-    PM_BO = (int) BlackCannon, \r
-    PM_BU = (int) BlackUnicorn, \r
-    PM_BH = (int) BlackNightrider, \r
-    PM_BA = (int) BlackAngel, \r
-    PM_BC = (int) BlackMarshall, \r
-    PM_BG = (int) BlackGrasshopper, \r
+    PM_BO = (int) BlackCannon,\r
+    PM_BU = (int) BlackUnicorn,\r
+    PM_BH = (int) BlackNightrider,\r
+    PM_BA = (int) BlackAngel,\r
+    PM_BC = (int) BlackMarshall,\r
+    PM_BG = (int) BlackGrasshopper,\r
     PM_BAB = (int) BlackCardinal,\r
     PM_BD = (int) BlackDragon,\r
     PM_BL = (int) BlackLance,\r
@@ -2638,9 +2638,9 @@ static HBITMAP hPieceMask[(int) EmptySquare];
 static HBITMAP hPieceFace[(int) EmptySquare];\r
 static int fontBitmapSquareSize = 0;\r
 static char pieceToFontChar[(int) EmptySquare] =\r
-                              { 'p', 'n', 'b', 'r', 'q', \r
+                              { 'p', 'n', 'b', 'r', 'q',\r
                       'n', 'b', 'p', 'n', 'b', 'r', 'b', 'r', 'q', 'k',\r
-                      'k', 'o', 'm', 'v', 't', 'w', \r
+                      'k', 'o', 'm', 'v', 't', 'w',\r
                       'v', 't', 'o', 'm', 'v', 't', 'v', 't', 'w', 'l',\r
                                                               'l' };\r
 \r
@@ -2663,7 +2663,7 @@ static void SetPieceBackground( HDC hdc, COLORREF color, int mode )
     SetRect( &rc, 0, 0, squareSize, squareSize );\r
     FillRect( hdc, &rc, hbrush );\r
     DeleteObject( hbrush );\r
-    \r
+\r
     if( mode == 1 ) {\r
         /* Vertical gradient, good for pawn, knight and rook, less for queen and king */\r
         int steps = squareSize / 2;\r
@@ -2726,9 +2726,9 @@ static void CreatePieceMaskFromFont( HDC hdc_window, HDC hdc, int index )
     RECT rc;\r
     SIZE sz;\r
     POINT pt;\r
-    int backColor = whitePieceColor; \r
+    int backColor = whitePieceColor;\r
     int foreColor = blackPieceColor;\r
-    \r
+\r
     if( index < (int)BlackPawn && appData.fontBackColorWhite != appData.fontForeColorWhite ) {\r
         backColor = appData.fontBackColorWhite;\r
         foreColor = appData.fontForeColorWhite;\r
@@ -2769,7 +2769,7 @@ static void CreatePieceMaskFromFont( HDC hdc_window, HDC hdc, int index )
     ExtFloodFill( hdc, squareSize-1, 0, 0, FLOODFILLSURFACE );\r
     ExtFloodFill( hdc, squareSize-1, squareSize-1, 0, FLOODFILLSURFACE );\r
     SelectObject( hdc, GetStockObject(BLACK_BRUSH) );\r
-    /* \r
+    /*\r
         Step 4: this is the tricky part, the area inside the piece is filled with black,\r
         but if the start point is not inside the piece we're lost!\r
         There should be a better way to do this... if we could create a region or path\r
@@ -2794,7 +2794,7 @@ static void CreatePieceMaskFromFont( HDC hdc_window, HDC hdc, int index )
     }\r
 \r
     SetTextColor( hdc, 0 );\r
-    /* \r
+    /*\r
         Step 5: some fonts have "disconnected" areas that are skipped by the fill:\r
         draw the piece again in black for safety.\r
     */\r
@@ -2822,8 +2822,8 @@ static void CreatePieceMaskFromFont( HDC hdc_window, HDC hdc, int index )
         SelectObject( dc2, bm2 );\r
         FillRect( dc2, &rc, GetStockObject(WHITE_BRUSH) );\r
         BitBlt( dc2, 0, 0, squareSize, squareSize, dc1, 0, 0, SRCINVERT );\r
-        \r
-        /* \r
+\r
+        /*\r
             Now dc2 contains the inverse of the piece mask, i.e. a mask that preserves\r
             the piece background and deletes (makes transparent) the rest.\r
             Thanks to that mask, we are free to paint the background with the greates\r
@@ -3087,9 +3087,9 @@ void CreatePiecesFromFont()
             CreatePieceMaskFromFont( hdc_window, hdc, PM_BL );\r
             CreatePieceMaskFromFont( hdc_window, hdc, PM_BS );\r
 #else\r
-           for(i=(int)WhitePawn; i<(int)EmptySquare; i++) /* [HGM] made a loop for this */\r
-               if(PieceToChar((ChessSquare)i) != '.')     /* skip unused pieces         */\r
-                   CreatePieceMaskFromFont( hdc_window, hdc, i );\r
+        for(i=(int)WhitePawn; i<(int)EmptySquare; i++) /* [HGM] made a loop for this */\r
+        if(PieceToChar((ChessSquare)i) != '.')     /* skip unused pieces         */\r
+            CreatePieceMaskFromFont( hdc_window, hdc, i );\r
 #endif\r
             SelectObject( hdc, hfont_old );\r
 \r
@@ -3155,7 +3155,7 @@ InitDrawingColors()
      */\r
     pLogPal = (NPLOGPALETTE)\r
       LocalAlloc(LMEM_FIXED, (sizeof(LOGPALETTE) +\r
-                             (sizeof(PALETTEENTRY) * (PALETTESIZE))));\r
+                  (sizeof(PALETTEENTRY) * (PALETTESIZE))));\r
     pLogPal->palVersion    = 0x300;\r
   }\r
   pLogPal->palNumEntries = 0;\r
@@ -3209,11 +3209,11 @@ ResizeBoard(int newSizeX, int newSizeY, int flags)
   if (recurse > 0) return;\r
   recurse++;\r
   while (newSize > 0) {\r
-       InitDrawingSizes(newSize+1000, 0); // [HGM] kludge to update sizeInfo without visible effects\r
-       if(newSizeX >= sizeInfo[newSize].cliWidth &&\r
-          newSizeY >= sizeInfo[newSize].cliHeight) break;\r
+    InitDrawingSizes(newSize+1000, 0); // [HGM] kludge to update sizeInfo without visible effects\r
+    if(newSizeX >= sizeInfo[newSize].cliWidth &&\r
+       newSizeY >= sizeInfo[newSize].cliHeight) break;\r
     newSize--;\r
-  } \r
+  }\r
   boardSize = newSize;\r
   InitDrawingSizes(boardSize, flags);\r
   recurse--;\r
@@ -3263,7 +3263,7 @@ InitDrawingSizes(BoardSize boardSize, int flags)
     if (tinyLayout) {\r
       style &= ~WS_SYSMENU;\r
       InsertMenu(hmenu, IDM_Exit, MF_BYCOMMAND, IDM_Minimize,\r
-                "&Minimize\tCtrl+F4");\r
+         "&Minimize\tCtrl+F4");\r
     } else {\r
       style |= WS_SYSMENU;\r
       RemoveMenu(hmenu, IDM_Minimize, MF_BYCOMMAND);\r
@@ -3271,8 +3271,8 @@ InitDrawingSizes(BoardSize boardSize, int flags)
     SetWindowLong(hwndMain, GWL_STYLE, style);\r
 \r
     for (i=0; menuBarText[tinyLayout][i]; i++) {\r
-      ModifyMenu(hmenu, i, MF_STRING|MF_BYPOSITION|MF_POPUP, \r
-       (UINT)GetSubMenu(hmenu, i), menuBarText[tinyLayout][i]);\r
+      ModifyMenu(hmenu, i, MF_STRING|MF_BYPOSITION|MF_POPUP,\r
+    (UINT)GetSubMenu(hmenu, i), menuBarText[tinyLayout][i]);\r
     }\r
     DrawMenuBar(hwndMain);\r
   }\r
@@ -3298,16 +3298,16 @@ InitDrawingSizes(BoardSize boardSize, int flags)
   /* Compute where everything goes */\r
   if((first.programLogo || second.programLogo) && !tinyLayout) {\r
         /* [HGM] logo: if either logo is on, reserve space for it */\r
-       logoHeight =  2*clockSize.cy;\r
-       leftLogoRect.left   = OUTER_MARGIN;\r
-       leftLogoRect.right  = leftLogoRect.left + 4*clockSize.cy;\r
-       leftLogoRect.top    = OUTER_MARGIN;\r
-       leftLogoRect.bottom = OUTER_MARGIN + logoHeight;\r
+    logoHeight =  2*clockSize.cy;\r
+    leftLogoRect.left   = OUTER_MARGIN;\r
+    leftLogoRect.right  = leftLogoRect.left + 4*clockSize.cy;\r
+    leftLogoRect.top    = OUTER_MARGIN;\r
+    leftLogoRect.bottom = OUTER_MARGIN + logoHeight;\r
 \r
-       rightLogoRect.right  = OUTER_MARGIN + boardWidth;\r
-       rightLogoRect.left   = rightLogoRect.right - 4*clockSize.cy;\r
-       rightLogoRect.top    = OUTER_MARGIN;\r
-       rightLogoRect.bottom = OUTER_MARGIN + logoHeight;\r
+    rightLogoRect.right  = OUTER_MARGIN + boardWidth;\r
+    rightLogoRect.left   = rightLogoRect.right - 4*clockSize.cy;\r
+    rightLogoRect.top    = OUTER_MARGIN;\r
+    rightLogoRect.bottom = OUTER_MARGIN + logoHeight;\r
 \r
 \r
     whiteRect.left = leftLogoRect.right;\r
@@ -3358,7 +3358,7 @@ InitDrawingSizes(BoardSize boardSize, int flags)
   winHeight = winH; //       without disturbing window attachments\r
   GetWindowRect(hwndMain, &wrect);\r
   SetWindowPos(hwndMain, NULL, 0, 0, winWidth, winHeight,\r
-              SWP_NOCOPYBITS|SWP_NOZORDER|SWP_NOMOVE);\r
+           SWP_NOCOPYBITS|SWP_NOZORDER|SWP_NOMOVE);\r
 \r
   // [HGM] placement: let attached windows follow size change.\r
   ReattachAfterSize( &oldRect, winWidth, winHeight, moveHistoryDialog, &wpMoveHistory );\r
@@ -3373,22 +3373,22 @@ InitDrawingSizes(BoardSize boardSize, int flags)
   winHeight += offby;\r
   switch (flags) {\r
   case WMSZ_TOPLEFT:\r
-    SetWindowPos(hwndMain, NULL, \r
-                 wrect.right - winWidth, wrect.bottom - winHeight, \r
+    SetWindowPos(hwndMain, NULL,\r
+                 wrect.right - winWidth, wrect.bottom - winHeight,\r
                  winWidth, winHeight, SWP_NOCOPYBITS|SWP_NOZORDER);\r
     break;\r
 \r
   case WMSZ_TOPRIGHT:\r
   case WMSZ_TOP:\r
-    SetWindowPos(hwndMain, NULL, \r
-                 wrect.left, wrect.bottom - winHeight, \r
+    SetWindowPos(hwndMain, NULL,\r
+                 wrect.left, wrect.bottom - winHeight,\r
                  winWidth, winHeight, SWP_NOCOPYBITS|SWP_NOZORDER);\r
     break;\r
 \r
   case WMSZ_BOTTOMLEFT:\r
   case WMSZ_LEFT:\r
-    SetWindowPos(hwndMain, NULL, \r
-                 wrect.right - winWidth, wrect.top, \r
+    SetWindowPos(hwndMain, NULL,\r
+                 wrect.right - winWidth, wrect.top,\r
                  winWidth, winHeight, SWP_NOCOPYBITS|SWP_NOZORDER);\r
     break;\r
 \r
@@ -3409,21 +3409,21 @@ InitDrawingSizes(BoardSize boardSize, int flags)
     }\r
     if (appData.showButtonBar) {\r
       buttonDesc[i].hwnd =\r
-       CreateWindow("BUTTON", buttonDesc[i].label,\r
-                    WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,\r
-                    boardRect.right - BUTTON_WIDTH*(N_BUTTONS-i),\r
-                    messageRect.top, BUTTON_WIDTH, messageSize.cy, hwndMain,\r
-                    (HMENU) buttonDesc[i].id,\r
-                    (HINSTANCE) GetWindowLong(hwndMain, GWL_HINSTANCE), NULL);\r
+    CreateWindow("BUTTON", buttonDesc[i].label,\r
+             WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,\r
+             boardRect.right - BUTTON_WIDTH*(N_BUTTONS-i),\r
+             messageRect.top, BUTTON_WIDTH, messageSize.cy, hwndMain,\r
+             (HMENU) buttonDesc[i].id,\r
+             (HINSTANCE) GetWindowLong(hwndMain, GWL_HINSTANCE), NULL);\r
       if (tinyLayout) {\r
-       SendMessage(buttonDesc[i].hwnd, WM_SETFONT, \r
-                   (WPARAM)font[boardSize][MESSAGE_FONT]->hf,\r
-                   MAKELPARAM(FALSE, 0));\r
+    SendMessage(buttonDesc[i].hwnd, WM_SETFONT,\r
+            (WPARAM)font[boardSize][MESSAGE_FONT]->hf,\r
+            MAKELPARAM(FALSE, 0));\r
       }\r
       if (buttonDesc[i].id == IDM_Pause)\r
-       hwndPause = buttonDesc[i].hwnd;\r
+    hwndPause = buttonDesc[i].hwnd;\r
       buttonDesc[i].wndproc = (WNDPROC)\r
-       SetWindowLong(buttonDesc[i].hwnd, GWL_WNDPROC, (LONG) ButtonProc);\r
+    SetWindowLong(buttonDesc[i].hwnd, GWL_WNDPROC, (LONG) ButtonProc);\r
     }\r
   }\r
   if (gridPen != NULL) DeleteObject(gridPen);\r
@@ -3440,7 +3440,7 @@ InitDrawingSizes(BoardSize boardSize, int flags)
       ExtCreatePen(PS_GEOMETRIC|PS_SOLID|PS_ENDCAP_FLAT|PS_JOIN_MITER,\r
                    lineGap, &logbrush, 0, NULL);\r
 \r
-    logbrush.lbColor = premoveHighlightColor; \r
+    logbrush.lbColor = premoveHighlightColor;\r
     premovePen =\r
       ExtCreatePen(PS_GEOMETRIC|PS_SOLID|PS_ENDCAP_FLAT|PS_JOIN_MITER,\r
                    lineGap, &logbrush, 0, NULL);\r
@@ -3449,7 +3449,7 @@ InitDrawingSizes(BoardSize boardSize, int flags)
     for (i = 0; i < BOARD_HEIGHT + 1; i++) {\r
       gridEndpoints[i*2].x = boardRect.left + lineGap / 2;\r
       gridEndpoints[i*2].y = gridEndpoints[i*2 + 1].y =\r
-       boardRect.top + lineGap / 2 + (i * (squareSize + lineGap));\r
+    boardRect.top + lineGap / 2 + (i * (squareSize + lineGap));\r
       gridEndpoints[i*2 + 1].x = boardRect.left + lineGap / 2 +\r
         BOARD_WIDTH * (squareSize + lineGap);\r
       gridVertexCounts[i*2] = gridVertexCounts[i*2 + 1] = 2;\r
@@ -3458,7 +3458,7 @@ InitDrawingSizes(BoardSize boardSize, int flags)
       gridEndpoints[i*2 + BOARD_HEIGHT*2 + 2].y = boardRect.top + lineGap / 2;\r
       gridEndpoints[i*2 + BOARD_HEIGHT*2 + 2].x =\r
         gridEndpoints[i*2 + 1 + BOARD_HEIGHT*2 + 2].x = boardRect.left +\r
-       lineGap / 2 + (i * (squareSize + lineGap));\r
+    lineGap / 2 + (i * (squareSize + lineGap));\r
       gridEndpoints[i*2 + 1 + BOARD_HEIGHT*2 + 2].y =\r
         boardRect.top + BOARD_HEIGHT * (squareSize + lineGap);\r
       gridVertexCounts[i*2] = gridVertexCounts[i*2 + 1] = 2;\r
@@ -3481,9 +3481,9 @@ InitDrawingSizes(BoardSize boardSize, int flags)
   for (i=0; i<=2; i++) {\r
     for (piece = WhitePawn;\r
          (int) piece < (int) BlackPawn;\r
-        piece = (ChessSquare) ((int) piece + 1)) {\r
+     piece = (ChessSquare) ((int) piece + 1)) {\r
       if (pieceBitmap[i][piece] != NULL)\r
-       DeleteObject(pieceBitmap[i][piece]);\r
+    DeleteObject(pieceBitmap[i][piece]);\r
     }\r
   }\r
 \r
@@ -3515,7 +3515,7 @@ InitDrawingSizes(BoardSize boardSize, int flags)
     pieceBitmap[2][WhiteQueen] = DoLoadBitmap(hInst, "q", squareSize, "w");\r
   }\r
 \r
-  if(squareSize <= 72 && squareSize >= 33) { \r
+  if(squareSize <= 72 && squareSize >= 33) {\r
     /* A & C are available in most sizes now */\r
     if(squareSize != 49 && squareSize != 72 && squareSize != 33) { // Vortex-like\r
       pieceBitmap[0][WhiteAngel] = DoLoadBitmap(hInst, "a", squareSize, "s");\r
@@ -3748,7 +3748,7 @@ DrawCoordsOnDC(HDC hdc)
     str[0] = ranks[start + i];\r
     ExtTextOut(hdc, x + squareSize - 2, y - 1, 0, NULL, str, 1, NULL);\r
     x += squareSize + lineGap;\r
-  }    \r
+  }\r
 \r
   SelectObject(hdc, oldBrush);\r
   SetBkMode(hdc, oldMode);\r
@@ -3760,7 +3760,7 @@ VOID
 DrawGridOnDC(HDC hdc)\r
 {\r
   HPEN oldPen;\r
\r
+\r
   if (lineGap != 0) {\r
     oldPen = SelectObject(hdc, gridPen);\r
     PolyPolyline(hdc, gridEndpoints, gridVertexCounts, BOARD_WIDTH+BOARD_HEIGHT + 2);\r
@@ -3803,18 +3803,18 @@ DrawHighlightsOnDC(HDC hdc)
 {\r
   int i;\r
   for (i=0; i<2; i++) {\r
-    if (highlightInfo.sq[i].x >= 0 && highlightInfo.sq[i].y >= 0) \r
+    if (highlightInfo.sq[i].x >= 0 && highlightInfo.sq[i].y >= 0)\r
       DrawHighlightOnDC(hdc, TRUE,\r
-                       highlightInfo.sq[i].x, highlightInfo.sq[i].y,\r
-                       HIGHLIGHT_PEN);\r
+            highlightInfo.sq[i].x, highlightInfo.sq[i].y,\r
+            HIGHLIGHT_PEN);\r
   }\r
   for (i=0; i<2; i++) {\r
-    if (premoveHighlightInfo.sq[i].x >= 0 && \r
-       premoveHighlightInfo.sq[i].y >= 0) {\r
-       DrawHighlightOnDC(hdc, TRUE,\r
-                         premoveHighlightInfo.sq[i].x, \r
-                         premoveHighlightInfo.sq[i].y,\r
-                         PREMOVE_PEN);\r
+    if (premoveHighlightInfo.sq[i].x >= 0 &&\r
+    premoveHighlightInfo.sq[i].y >= 0) {\r
+    DrawHighlightOnDC(hdc, TRUE,\r
+              premoveHighlightInfo.sq[i].x,\r
+              premoveHighlightInfo.sq[i].y,\r
+              PREMOVE_PEN);\r
     }\r
   }\r
 }\r
@@ -3862,10 +3862,10 @@ DrawPieceOnDC(HDC hdc, ChessSquare piece, int color, int sqcolor, int x, int y,
   }\r
 \r
   if (appData.monoMode) {\r
-    SelectObject(tmphdc, PieceBitmap(piece, \r
+    SelectObject(tmphdc, PieceBitmap(piece,\r
       color == sqcolor ? OUTLINE_PIECE : SOLID_PIECE));\r
     BitBlt(hdc, x, y, squareSize, squareSize, tmphdc, 0, 0,\r
-          sqcolor ? SRCCOPY : NOTSRCCOPY);\r
+       sqcolor ? SRCCOPY : NOTSRCCOPY);\r
   } else {\r
     tmpSize = squareSize;\r
     if(minorSize &&\r
@@ -3889,7 +3889,7 @@ DrawPieceOnDC(HDC hdc, ChessSquare piece, int color, int sqcolor, int x, int y,
 #if 0\r
       /* Use black piece color for outline of white pieces */\r
       /* Not sure this looks really good (though xboard does it).\r
-        Maybe better to have another selectable color, default black */\r
+     Maybe better to have another selectable color, default black */\r
       SelectObject(hdc, blackPieceBrush); /* could have own brush */\r
       SelectObject(tmphdc, PieceBitmap(piece, OUTLINE_PIECE));\r
       BitBlt(hdc, x, y, tmpSize, tmpSize, tmphdc, 0, 0, 0x00B8074A);\r
@@ -3905,9 +3905,9 @@ DrawPieceOnDC(HDC hdc, ChessSquare piece, int color, int sqcolor, int x, int y,
 #if 0\r
       /* Use white piece color for details of black pieces */\r
       /* Requires filled-in solid bitmaps (BLACK_PIECE class); the\r
-        WHITE_PIECE ones aren't always the right shape. */\r
+     WHITE_PIECE ones aren't always the right shape. */\r
       /* Not sure this looks really good (though xboard does it).\r
-        Maybe better to have another selectable color, default medium gray? */\r
+     Maybe better to have another selectable color, default medium gray? */\r
       oldBitmap = SelectObject(tmphdc, PieceBitmap(piece, BLACK_PIECE));\r
       oldBrush = SelectObject(hdc, whitePieceBrush); /* could have own brush */\r
       BitBlt(hdc, x, y, tmpSize, tmpSize, tmphdc, 0, 0, 0x00B8074A);\r
@@ -3934,7 +3934,7 @@ int GetBackTextureMode( int algo )
 {\r
     int result = BACK_TEXTURE_MODE_DISABLED;\r
 \r
-    switch( algo ) \r
+    switch( algo )\r
     {\r
         case BACK_TEXTURE_MODE_PLAIN:\r
             result = 1; /* Always use identity map */\r
@@ -3947,7 +3947,7 @@ int GetBackTextureMode( int algo )
     return result;\r
 }\r
 \r
-/* \r
+/*\r
     [AS] Compute and save texture drawing info, otherwise we may not be able\r
     to handle redraws cleanly (as random numbers would always be different).\r
 */\r
@@ -4074,7 +4074,7 @@ VOID DrawArrowBetweenPoints( HDC hdc, int s_x, int s_y, int d_x, int d_y )
         /* [AS] Needed a lot of paper for this! :-) */\r
         dy = (double) (d_y - s_y) / (double) (d_x - s_x);\r
         dx = (double) (s_x - d_x) / (double) (s_y - d_y);\r
-  \r
+\r
         j = sqrt( Sqr(A_WIDTH) / (1.0 + Sqr(dx)) );\r
 \r
         k = sqrt( Sqr(A_WIDTH*A_HEIGHT_FACTOR) / (1.0 + Sqr(dy)) );\r
@@ -4234,8 +4234,8 @@ HRGN GetArrowHighlightClipRegion( HDC hdc )
 }\r
 \r
 /*\r
-    Warning: this function modifies the behavior of several other functions. \r
-    \r
+    Warning: this function modifies the behavior of several other functions.\r
+\r
     Basically, Winboard is optimized to avoid drawing the whole board if not strictly\r
     needed. Unfortunately, the decision whether or not to perform a full or partial\r
     repaint is scattered all over the place, which is not good for features such as\r
@@ -4247,7 +4247,7 @@ HRGN GetArrowHighlightClipRegion( HDC hdc )
 \r
     In such patched places, I always try refer to this function so there is a single\r
     place to maintain knowledge.\r
-    \r
+\r
     To restore the original behavior, just return FALSE unconditionally.\r
 */\r
 BOOL IsFullRepaintPreferrable()\r
@@ -4262,19 +4262,19 @@ BOOL IsFullRepaintPreferrable()
     return result;\r
 }\r
 \r
-/* \r
+/*\r
     This function is called by DrawPosition to know whether a full repaint must\r
     be forced or not.\r
 \r
-    Only DrawPosition may directly call this function, which makes use of \r
-    some state information. Other function should call DrawPosition specifying \r
+    Only DrawPosition may directly call this function, which makes use of\r
+    some state information. Other function should call DrawPosition specifying\r
     the repaint flag, and can use IsFullRepaintPreferrable if needed.\r
 */\r
 BOOL DrawPositionNeedsFullRepaint()\r
 {\r
     BOOL result = FALSE;\r
 \r
-    /* \r
+    /*\r
         Probably a slightly better policy would be to trigger a full repaint\r
         when animInfo.piece changes state (i.e. empty -> non-empty and viceversa),\r
         but animation is fast enough that it's difficult to notice.\r
@@ -4299,9 +4299,9 @@ DrawBoardOnDC(HDC hdc, Board board, HDC tmphdc)
   /* [AS] Initialize background textures if needed */\r
   if( liteBackTexture != NULL || darkBackTexture != NULL ) {\r
       static int backTextureBoardSize; /* [HGM] boardsize: also new texture if board format changed */\r
-      if( backTextureSquareSize != squareSize \r
+      if( backTextureSquareSize != squareSize\r
        || backTextureBoardSize != BOARD_WIDTH+BOARD_SIZE*BOARD_HEIGHT) {\r
-         backTextureBoardSize = BOARD_WIDTH+BOARD_SIZE*BOARD_HEIGHT;\r
+      backTextureBoardSize = BOARD_WIDTH+BOARD_SIZE*BOARD_HEIGHT;\r
           backTextureSquareSize = squareSize;\r
           RebuildTextureSquareInfo();\r
       }\r
@@ -4311,7 +4311,7 @@ DrawBoardOnDC(HDC hdc, Board board, HDC tmphdc)
 \r
   for (row = 0; row < BOARD_HEIGHT; row++) {\r
     for (column = 0; column < BOARD_WIDTH; column++) {\r
-  \r
+\r
       SquareToPos(row, column, &x, &y);\r
 \r
       piece = board[row][column];\r
@@ -4338,7 +4338,7 @@ DrawBoardOnDC(HDC hdc, Board board, HDC tmphdc)
             if( row < gameInfo.holdingsSize )\r
                 square_color = 1;\r
             else {\r
-                DisplayHoldingsCount(hdc, x, y, 0, 0); \r
+                DisplayHoldingsCount(hdc, x, y, 0, 0);\r
                 continue;\r
             }\r
       }\r
@@ -4350,20 +4350,20 @@ DrawBoardOnDC(HDC hdc, Board board, HDC tmphdc)
       if (appData.monoMode) {\r
         if (piece == EmptySquare) {\r
           BitBlt(hdc, x, y, squareSize, squareSize, 0, 0, 0,\r
-                square_color ? WHITENESS : BLACKNESS);\r
+         square_color ? WHITENESS : BLACKNESS);\r
         } else {\r
           DrawPieceOnDC(hdc, piece, piece_color, square_color, x, y, tmphdc);\r
         }\r
-      } \r
+      }\r
       else if( backTextureSquareInfo[row][column].mode > 0 ) {\r
           /* [AS] Draw the square using a texture bitmap */\r
           HBITMAP hbm = SelectObject( texture_hdc, square_color ? liteBackTexture : darkBackTexture );\r
-         int r = row, c = column; // [HGM] do not flip board in flipView\r
-         if(flipView) { r = BOARD_HEIGHT-1 - r; c = BOARD_WIDTH-1 - c; }\r
+      int r = row, c = column; // [HGM] do not flip board in flipView\r
+      if(flipView) { r = BOARD_HEIGHT-1 - r; c = BOARD_WIDTH-1 - c; }\r
 \r
-          DrawTile( x, y, \r
-              squareSize, squareSize, \r
-              hdc, \r
+          DrawTile( x, y,\r
+              squareSize, squareSize,\r
+              hdc,\r
               texture_hdc,\r
               backTextureSquareInfo[r][c].mode,\r
               backTextureSquareInfo[r][c].x,\r
@@ -4395,10 +4395,10 @@ DrawBoardOnDC(HDC hdc, Board board, HDC tmphdc)
 int saveDiagFlag = 0; FILE *diagFile; // [HGM] diag\r
 void fputDW(FILE *f, int x)\r
 {\r
-       fputc(x     & 255, f);\r
-       fputc(x>>8  & 255, f);\r
-       fputc(x>>16 & 255, f);\r
-       fputc(x>>24 & 255, f);\r
+    fputc(x     & 255, f);\r
+    fputc(x>>8  & 255, f);\r
+    fputc(x>>16 & 255, f);\r
+    fputc(x>>24 & 255, f);\r
 }\r
 \r
 #define MAX_CLIPS 200   /* more than enough */\r
@@ -4416,14 +4416,14 @@ DrawLogoOnDC(HDC hdc, RECT logoRect, HBITMAP logo)
   if(logo == NULL) return;\r
 //  GetClientRect(hwndMain, &Rect);\r
 //  bufferBitmap = CreateCompatibleBitmap(hdc, Rect.right-Rect.left+1,\r
-//                                     Rect.bottom-Rect.top+1);\r
+//                  Rect.bottom-Rect.top+1);\r
   tmphdc = CreateCompatibleDC(hdc);\r
   hbm = SelectObject(tmphdc, logo);\r
   if( GetObject( logo, sizeof(bi), &bi ) > 0 ) {\r
             w = bi.bmWidth;\r
             h = bi.bmHeight;\r
   }\r
-  StretchBlt(hdc, logoRect.left, logoRect.top, logoRect.right - logoRect.left, \r
+  StretchBlt(hdc, logoRect.left, logoRect.top, logoRect.right - logoRect.left,\r
                   logoRect.bottom - logoRect.top, tmphdc, 0, 0, w, h, SRCCOPY);\r
   SelectObject(tmphdc, hbm);\r
   DeleteDC(tmphdc);\r
@@ -4450,7 +4450,7 @@ HDCDrawPosition(HDC hdc, BOOLEAN repaint, Board board)
    * caller tell it that.  I think this can safely be set to FALSE - but\r
    * if we trust the callers not to request full repaints unnessesarily, then\r
    * we could skip some clipping work.  In other words, only request a full\r
-   * redraw when the majority of pieces have changed positions (ie. flip, \r
+   * redraw when the majority of pieces have changed positions (ie. flip,\r
    * gamestart and similar)  --Hawk\r
    */\r
   Boolean fullrepaint = repaint;\r
@@ -4505,9 +4505,9 @@ HDCDrawPosition(HDC hdc, BOOLEAN repaint, Board board)
                    "dragInfo.from (%d,%d)\n"\r
                    "dragInfo.start (%d,%d)\n"\r
                    "dragInfo.pos (%d,%d)\n"\r
-                   "dragInfo.lastpos (%d,%d)\n", \r
+                   "dragInfo.lastpos (%d,%d)\n",\r
                     repaint ? "TRUE" : "FALSE",\r
-                    dragInfo.from.x, dragInfo.from.y, \r
+                    dragInfo.from.x, dragInfo.from.y,\r
                     dragInfo.start.x, dragInfo.start.y,\r
                     dragInfo.pos.x, dragInfo.pos.y,\r
                     dragInfo.lastpos.x, dragInfo.lastpos.y);\r
@@ -4540,66 +4540,66 @@ HDCDrawPosition(HDC hdc, BOOLEAN repaint, Board board)
     if(dragInfo.from.x == BOARD_LEFT-2 ) {\r
             if(--board[dragInfo.from.y][dragInfo.from.x+1] == 0 )\r
         board[dragInfo.from.y][dragInfo.from.x] = EmptySquare;\r
-    } else \r
+    } else\r
     if(dragInfo.from.x == BOARD_RGHT+1) {\r
             if(--board[dragInfo.from.y][dragInfo.from.x-1] == 0 )\r
         board[dragInfo.from.y][dragInfo.from.x] = EmptySquare;\r
-    } else \r
+    } else\r
         board[dragInfo.from.y][dragInfo.from.x] = EmptySquare;\r
   }\r
 \r
-  /* Figure out which squares need updating by comparing the \r
+  /* Figure out which squares need updating by comparing the\r
    * newest board with the last drawn board and checking if\r
    * flipping has changed.\r
    */\r
   if (!fullrepaint && lastDrawnValid && lastDrawnFlipView == flipView) {\r
     for (row = 0; row < BOARD_HEIGHT; row++) { /* [HGM] true size, not 8 */\r
       for (column = 0; column < BOARD_WIDTH; column++) {\r
-       if (lastDrawn[row][column] != board[row][column]) {\r
-         SquareToPos(row, column, &x, &y);\r
-         clips[num_clips++] =\r
-           CreateRectRgn(x, y, x + squareSize, y + squareSize);\r
-       }\r
+    if (lastDrawn[row][column] != board[row][column]) {\r
+      SquareToPos(row, column, &x, &y);\r
+      clips[num_clips++] =\r
+        CreateRectRgn(x, y, x + squareSize, y + squareSize);\r
+    }\r
       }\r
     }\r
     for (i=0; i<2; i++) {\r
       if (lastDrawnHighlight.sq[i].x != highlightInfo.sq[i].x ||\r
-         lastDrawnHighlight.sq[i].y != highlightInfo.sq[i].y) {\r
-       if (lastDrawnHighlight.sq[i].x >= 0 &&\r
-           lastDrawnHighlight.sq[i].y >= 0) {\r
-         SquareToPos(lastDrawnHighlight.sq[i].y,\r
-                     lastDrawnHighlight.sq[i].x, &x, &y);\r
-         clips[num_clips++] =\r
-           CreateRectRgn(x - lineGap, y - lineGap, \r
-                         x + squareSize + lineGap, y + squareSize + lineGap);\r
-       }\r
-       if (highlightInfo.sq[i].x >= 0 && highlightInfo.sq[i].y >= 0) {\r
-         SquareToPos(highlightInfo.sq[i].y, highlightInfo.sq[i].x, &x, &y);\r
-         clips[num_clips++] =\r
-           CreateRectRgn(x - lineGap, y - lineGap, \r
-                         x + squareSize + lineGap, y + squareSize + lineGap);\r
-       }\r
+      lastDrawnHighlight.sq[i].y != highlightInfo.sq[i].y) {\r
+    if (lastDrawnHighlight.sq[i].x >= 0 &&\r
+        lastDrawnHighlight.sq[i].y >= 0) {\r
+      SquareToPos(lastDrawnHighlight.sq[i].y,\r
+              lastDrawnHighlight.sq[i].x, &x, &y);\r
+      clips[num_clips++] =\r
+        CreateRectRgn(x - lineGap, y - lineGap,\r
+                      x + squareSize + lineGap, y + squareSize + lineGap);\r
+    }\r
+    if (highlightInfo.sq[i].x >= 0 && highlightInfo.sq[i].y >= 0) {\r
+      SquareToPos(highlightInfo.sq[i].y, highlightInfo.sq[i].x, &x, &y);\r
+      clips[num_clips++] =\r
+        CreateRectRgn(x - lineGap, y - lineGap,\r
+                      x + squareSize + lineGap, y + squareSize + lineGap);\r
+    }\r
       }\r
     }\r
     for (i=0; i<2; i++) {\r
       if (lastDrawnPremove.sq[i].x != premoveHighlightInfo.sq[i].x ||\r
-         lastDrawnPremove.sq[i].y != premoveHighlightInfo.sq[i].y) {\r
-       if (lastDrawnPremove.sq[i].x >= 0 &&\r
-           lastDrawnPremove.sq[i].y >= 0) {\r
-         SquareToPos(lastDrawnPremove.sq[i].y,\r
-                     lastDrawnPremove.sq[i].x, &x, &y);\r
-         clips[num_clips++] =\r
-           CreateRectRgn(x - lineGap, y - lineGap, \r
-                         x + squareSize + lineGap, y + squareSize + lineGap);\r
-       }\r
-       if (premoveHighlightInfo.sq[i].x >= 0 && \r
-           premoveHighlightInfo.sq[i].y >= 0) {\r
-         SquareToPos(premoveHighlightInfo.sq[i].y, \r
-                     premoveHighlightInfo.sq[i].x, &x, &y);\r
-         clips[num_clips++] =\r
-           CreateRectRgn(x - lineGap, y - lineGap, \r
-                         x + squareSize + lineGap, y + squareSize + lineGap);\r
-       }\r
+      lastDrawnPremove.sq[i].y != premoveHighlightInfo.sq[i].y) {\r
+    if (lastDrawnPremove.sq[i].x >= 0 &&\r
+        lastDrawnPremove.sq[i].y >= 0) {\r
+      SquareToPos(lastDrawnPremove.sq[i].y,\r
+              lastDrawnPremove.sq[i].x, &x, &y);\r
+      clips[num_clips++] =\r
+        CreateRectRgn(x - lineGap, y - lineGap,\r
+                      x + squareSize + lineGap, y + squareSize + lineGap);\r
+    }\r
+    if (premoveHighlightInfo.sq[i].x >= 0 &&\r
+        premoveHighlightInfo.sq[i].y >= 0) {\r
+      SquareToPos(premoveHighlightInfo.sq[i].y,\r
+              premoveHighlightInfo.sq[i].x, &x, &y);\r
+      clips[num_clips++] =\r
+        CreateRectRgn(x - lineGap, y - lineGap,\r
+                      x + squareSize + lineGap, y + squareSize + lineGap);\r
+    }\r
       }\r
     }\r
   } else {\r
@@ -4613,7 +4613,7 @@ HDCDrawPosition(HDC hdc, BOOLEAN repaint, Board board)
    */\r
   GetClientRect(hwndMain, &Rect);\r
   bufferBitmap = CreateCompatibleBitmap(hdc, Rect.right-Rect.left+1,\r
-                                       Rect.bottom-Rect.top+1);\r
+                    Rect.bottom-Rect.top+1);\r
   oldBitmap = SelectObject(hdcmem, bufferBitmap);\r
   if (!appData.monoMode) {\r
     SelectPalette(hdcmem, hPal, FALSE);\r
@@ -4641,8 +4641,8 @@ HDCDrawPosition(HDC hdc, BOOLEAN repaint, Board board)
     }\r
   }\r
 \r
-  /* Are we animating a move?  \r
-   * If so, \r
+  /* Are we animating a move?\r
+   * If so,\r
    *   - remove the piece from the board (temporarely)\r
    *   - calculate the clipping region\r
    */\r
@@ -4655,12 +4655,12 @@ HDCDrawPosition(HDC hdc, BOOLEAN repaint, Board board)
       y2 = boardRect.top + animInfo.pos.y;\r
       clips[num_clips++] = CreateRectRgn(MIN(x,x2), MIN(y,y2), MAX(x,x2)+squareSize, MAX(y,y2)+squareSize);\r
       /* Slight kludge.  The real problem is that after AnimateMove is\r
-        done, the position on the screen does not match lastDrawn.\r
-        This currently causes trouble only on e.p. captures in\r
-        atomic, where the piece moves to an empty square and then\r
-        explodes.  The old and new positions both had an empty square\r
-        at the destination, but animation has drawn a piece there and\r
-        we have to remember to erase it. [HGM] moved until after setting lastDrawn */\r
+     done, the position on the screen does not match lastDrawn.\r
+     This currently causes trouble only on e.p. captures in\r
+     atomic, where the piece moves to an empty square and then\r
+     explodes.  The old and new positions both had an empty square\r
+     at the destination, but animation has drawn a piece there and\r
+     we have to remember to erase it. [HGM] moved until after setting lastDrawn */\r
       lastDrawn[animInfo.to.y][animInfo.to.x] = animInfo.piece;\r
     }\r
   }\r
@@ -4680,61 +4680,61 @@ HDCDrawPosition(HDC hdc, BOOLEAN repaint, Board board)
 \r
   /* Do all the drawing to the memory DC */\r
   if(explodeInfo.radius) { // [HGM] atomic\r
-       HBRUSH oldBrush;\r
-       int x, y, r=(explodeInfo.radius * squareSize)/100;\r
+    HBRUSH oldBrush;\r
+    int x, y, r=(explodeInfo.radius * squareSize)/100;\r
         board[explodeInfo.fromY][explodeInfo.fromX] = EmptySquare; // suppress display of capturer\r
-       SquareToPos(explodeInfo.toY, explodeInfo.toX, &x, &y);\r
-       x += squareSize/2;\r
-       y += squareSize/2;\r
+    SquareToPos(explodeInfo.toY, explodeInfo.toX, &x, &y);\r
+    x += squareSize/2;\r
+    y += squareSize/2;\r
         if(!fullrepaint) {\r
-         clips[num_clips] = CreateRectRgn(x-r, y-r, x+r, y+r);\r
-         ExtSelectClipRgn(hdcmem, clips[num_clips++], RGN_OR);\r
-       }\r
-       DrawGridOnDC(hdcmem);\r
-       DrawHighlightsOnDC(hdcmem);\r
-       DrawBoardOnDC(hdcmem, board, tmphdc);\r
-       oldBrush = SelectObject(hdcmem, explodeBrush);\r
-       Ellipse(hdcmem, x-r, y-r, x+r, y+r);\r
-       SelectObject(hdcmem, oldBrush);\r
+      clips[num_clips] = CreateRectRgn(x-r, y-r, x+r, y+r);\r
+      ExtSelectClipRgn(hdcmem, clips[num_clips++], RGN_OR);\r
+    }\r
+    DrawGridOnDC(hdcmem);\r
+    DrawHighlightsOnDC(hdcmem);\r
+    DrawBoardOnDC(hdcmem, board, tmphdc);\r
+    oldBrush = SelectObject(hdcmem, explodeBrush);\r
+    Ellipse(hdcmem, x-r, y-r, x+r, y+r);\r
+    SelectObject(hdcmem, oldBrush);\r
   } else {\r
     DrawGridOnDC(hdcmem);\r
     DrawHighlightsOnDC(hdcmem);\r
     DrawBoardOnDC(hdcmem, board, tmphdc);\r
   }\r
   if(logoHeight) {\r
-       HBITMAP whiteLogo = (HBITMAP) first.programLogo, blackLogo = (HBITMAP) second.programLogo;\r
-       if(appData.autoLogo) {\r
-         \r
-         switch(gameMode) { // pick logos based on game mode\r
-           case IcsObserving:\r
-               whiteLogo = second.programLogo; // ICS logo\r
-               blackLogo = second.programLogo;\r
-           default:\r
-               break;\r
-           case IcsPlayingWhite:\r
-               if(!appData.zippyPlay) whiteLogo = userLogo;\r
-               blackLogo = second.programLogo; // ICS logo\r
-               break;\r
-           case IcsPlayingBlack:\r
-               whiteLogo = second.programLogo; // ICS logo\r
-               blackLogo = appData.zippyPlay ? first.programLogo : userLogo;\r
-               break;\r
-           case TwoMachinesPlay:\r
-               if(first.twoMachinesColor[0] == 'b') {\r
-                   whiteLogo = second.programLogo;\r
-                   blackLogo = first.programLogo;\r
-               }\r
-               break;\r
-           case MachinePlaysWhite:\r
-               blackLogo = userLogo;\r
-               break;\r
-           case MachinePlaysBlack:\r
-               whiteLogo = userLogo;\r
-               blackLogo = first.programLogo;\r
-         }\r
-       }\r
-       DrawLogoOnDC(hdc, leftLogoRect, flipClock ? blackLogo : whiteLogo);\r
-       DrawLogoOnDC(hdc, rightLogoRect, flipClock ? whiteLogo : blackLogo);\r
+    HBITMAP whiteLogo = (HBITMAP) first.programLogo, blackLogo = (HBITMAP) second.programLogo;\r
+    if(appData.autoLogo) {\r
+\r
+      switch(gameMode) { // pick logos based on game mode\r
+        case IcsObserving:\r
+        whiteLogo = second.programLogo; // ICS logo\r
+        blackLogo = second.programLogo;\r
+        default:\r
+        break;\r
+        case IcsPlayingWhite:\r
+        if(!appData.zippyPlay) whiteLogo = userLogo;\r
+        blackLogo = second.programLogo; // ICS logo\r
+        break;\r
+        case IcsPlayingBlack:\r
+        whiteLogo = second.programLogo; // ICS logo\r
+        blackLogo = appData.zippyPlay ? first.programLogo : userLogo;\r
+        break;\r
+        case TwoMachinesPlay:\r
+            if(first.twoMachinesColor[0] == 'b') {\r
+            whiteLogo = second.programLogo;\r
+            blackLogo = first.programLogo;\r
+        }\r
+        break;\r
+        case MachinePlaysWhite:\r
+        blackLogo = userLogo;\r
+        break;\r
+        case MachinePlaysBlack:\r
+        whiteLogo = userLogo;\r
+        blackLogo = first.programLogo;\r
+      }\r
+    }\r
+    DrawLogoOnDC(hdc, leftLogoRect, flipClock ? blackLogo : whiteLogo);\r
+    DrawLogoOnDC(hdc, rightLogoRect, flipClock ? whiteLogo : blackLogo);\r
   }\r
 \r
   if( appData.highlightMoveWithArrow ) {\r
@@ -4758,21 +4758,21 @@ HDCDrawPosition(HDC hdc, BOOLEAN repaint, Board board)
     x = dragInfo.pos.x - squareSize / 2;\r
     y = dragInfo.pos.y - squareSize / 2;\r
     DrawPieceOnDC(hdcmem, dragged_piece,\r
-                 ((int) dragged_piece < (int) BlackPawn), \r
+          ((int) dragged_piece < (int) BlackPawn),\r
                   (dragInfo.from.y + dragInfo.from.x) % 2, x, y, tmphdc);\r
-  }   \r
-  \r
+  }\r
+\r
   /* Put the animated piece back into place and draw it */\r
   if (animInfo.piece != EmptySquare) {\r
     board[animInfo.from.y][animInfo.from.x]  = animInfo.piece;\r
     x = boardRect.left + animInfo.pos.x;\r
     y = boardRect.top + animInfo.pos.y;\r
     DrawPieceOnDC(hdcmem, animInfo.piece,\r
-                 ((int) animInfo.piece < (int) BlackPawn),\r
+          ((int) animInfo.piece < (int) BlackPawn),\r
                   (animInfo.from.y + animInfo.from.x) % 2, x, y, tmphdc);\r
   }\r
 \r
-  /* Release the bufferBitmap by selecting in the old bitmap \r
+  /* Release the bufferBitmap by selecting in the old bitmap\r
    * and delete the memory DC\r
    */\r
   SelectObject(hdcmem, oldBitmap);\r
@@ -4784,7 +4784,7 @@ HDCDrawPosition(HDC hdc, BOOLEAN repaint, Board board)
     for (x = 1; x < num_clips; x++) {\r
       if (ExtSelectClipRgn(hdc, clips[x], RGN_OR) == ERROR)\r
         abort();   // this should never ever happen!\r
-    } \r
+    }\r
   }\r
 \r
   /* Copy the new bitmap onto the screen in one go.\r
@@ -4792,66 +4792,66 @@ HDCDrawPosition(HDC hdc, BOOLEAN repaint, Board board)
    */\r
   oldBitmap = SelectObject(tmphdc, bufferBitmap);\r
   BitBlt(hdc, boardRect.left, boardRect.top,\r
-        boardRect.right - boardRect.left,\r
-        boardRect.bottom - boardRect.top,\r
-        tmphdc, boardRect.left, boardRect.top, SRCCOPY);\r
-  if(saveDiagFlag) { \r
-    BITMAP b; int i, j=0, m, w, wb, fac=0; char pData[1000000]; \r
+     boardRect.right - boardRect.left,\r
+     boardRect.bottom - boardRect.top,\r
+     tmphdc, boardRect.left, boardRect.top, SRCCOPY);\r
+  if(saveDiagFlag) {\r
+    BITMAP b; int i, j=0, m, w, wb, fac=0; char pData[1000000];\r
     BITMAPINFOHEADER bih; int color[16], nrColors=0;\r
 \r
     GetObject(bufferBitmap, sizeof(b), &b);\r
     if(b.bmWidthBytes*b.bmHeight <= 990000) {\r
-       bih.biSize = sizeof(BITMAPINFOHEADER);\r
-       bih.biWidth = b.bmWidth;\r
-       bih.biHeight = b.bmHeight;\r
-       bih.biPlanes = 1;\r
-       bih.biBitCount = b.bmBitsPixel;\r
-       bih.biCompression = 0;\r
-       bih.biSizeImage = b.bmWidthBytes*b.bmHeight;\r
-       bih.biXPelsPerMeter = 0;\r
-       bih.biYPelsPerMeter = 0;\r
-       bih.biClrUsed = 0;\r
-       bih.biClrImportant = 0;\r
-//     fprintf(diagFile, "t=%d\nw=%d\nh=%d\nB=%d\nP=%d\nX=%d\n", \r
-//             b.bmType,  b.bmWidth,  b.bmHeight, b.bmWidthBytes,  b.bmPlanes,  b.bmBitsPixel);\r
-       GetDIBits(tmphdc,bufferBitmap,0,b.bmHeight,pData,(BITMAPINFO*)&bih,DIB_RGB_COLORS);\r
-//     fprintf(diagFile, "%8x\n", (int) pData);\r
+    bih.biSize = sizeof(BITMAPINFOHEADER);\r
+    bih.biWidth = b.bmWidth;\r
+    bih.biHeight = b.bmHeight;\r
+    bih.biPlanes = 1;\r
+    bih.biBitCount = b.bmBitsPixel;\r
+    bih.biCompression = 0;\r
+    bih.biSizeImage = b.bmWidthBytes*b.bmHeight;\r
+    bih.biXPelsPerMeter = 0;\r
+    bih.biYPelsPerMeter = 0;\r
+    bih.biClrUsed = 0;\r
+    bih.biClrImportant = 0;\r
+//  fprintf(diagFile, "t=%d\nw=%d\nh=%d\nB=%d\nP=%d\nX=%d\n",\r
+//      b.bmType,  b.bmWidth,  b.bmHeight, b.bmWidthBytes,  b.bmPlanes,  b.bmBitsPixel);\r
+    GetDIBits(tmphdc,bufferBitmap,0,b.bmHeight,pData,(BITMAPINFO*)&bih,DIB_RGB_COLORS);\r
+//  fprintf(diagFile, "%8x\n", (int) pData);\r
 \r
 #if 1\r
-       wb = b.bmWidthBytes;\r
-       // count colors\r
-       for(i=0; i<wb*(b.bmHeight - boardRect.top + OUTER_MARGIN)>>2; i++) {\r
-               int k = ((int*) pData)[i];\r
-               for(j=0; j<nrColors; j++) if(color[j] == k) break;\r
-               if(j >= 16) break;\r
-               color[j] = k;\r
-               if(j >= nrColors) nrColors = j+1;\r
-       }\r
-       if(j<16) { // 16 colors is enough. Compress to 4 bits per pixel\r
-               INT p = 0;\r
-               for(i=0; i<b.bmHeight - boardRect.top + OUTER_MARGIN; i++) {\r
-                   for(w=0; w<(wb>>2); w+=2) {\r
-                       int k = ((int*) pData)[(wb*i>>2) + w];\r
-                       for(j=0; j<nrColors; j++) if(color[j] == k) break;\r
-                       k = ((int*) pData)[(wb*i>>2) + w + 1];\r
-                       for(m=0; m<nrColors; m++) if(color[m] == k) break;\r
-                       pData[p++] = m | j<<4;\r
-                   }\r
-                   while(p&3) pData[p++] = 0;\r
-               }\r
-               fac = 3;\r
-               wb = ((wb+31)>>5)<<2;\r
-       }\r
-       // write BITMAPFILEHEADER\r
-       fprintf(diagFile, "BM");\r
+    wb = b.bmWidthBytes;\r
+    // count colors\r
+    for(i=0; i<wb*(b.bmHeight - boardRect.top + OUTER_MARGIN)>>2; i++) {\r
+        int k = ((int*) pData)[i];\r
+        for(j=0; j<nrColors; j++) if(color[j] == k) break;\r
+        if(j >= 16) break;\r
+        color[j] = k;\r
+        if(j >= nrColors) nrColors = j+1;\r
+    }\r
+    if(j<16) { // 16 colors is enough. Compress to 4 bits per pixel\r
+        INT p = 0;\r
+        for(i=0; i<b.bmHeight - boardRect.top + OUTER_MARGIN; i++) {\r
+            for(w=0; w<(wb>>2); w+=2) {\r
+            int k = ((int*) pData)[(wb*i>>2) + w];\r
+            for(j=0; j<nrColors; j++) if(color[j] == k) break;\r
+            k = ((int*) pData)[(wb*i>>2) + w + 1];\r
+            for(m=0; m<nrColors; m++) if(color[m] == k) break;\r
+            pData[p++] = m | j<<4;\r
+            }\r
+            while(p&3) pData[p++] = 0;\r
+        }\r
+        fac = 3;\r
+        wb = ((wb+31)>>5)<<2;\r
+    }\r
+    // write BITMAPFILEHEADER\r
+    fprintf(diagFile, "BM");\r
         fputDW(diagFile, wb*(b.bmHeight - boardRect.top + OUTER_MARGIN)+0x36 + (fac?64:0));\r
         fputDW(diagFile, 0);\r
         fputDW(diagFile, 0x36 + (fac?64:0));\r
-       // write BITMAPINFOHEADER\r
+    // write BITMAPINFOHEADER\r
         fputDW(diagFile, 40);\r
         fputDW(diagFile, b.bmWidth);\r
         fputDW(diagFile, b.bmHeight - boardRect.top + OUTER_MARGIN);\r
-       if(fac) fputDW(diagFile, 0x040001);   // planes and bits/pixel\r
+    if(fac) fputDW(diagFile, 0x040001);   // planes and bits/pixel\r
         else    fputDW(diagFile, 0x200001);   // planes and bits/pixel\r
         fputDW(diagFile, 0);\r
         fputDW(diagFile, 0);\r
@@ -4859,12 +4859,12 @@ HDCDrawPosition(HDC hdc, BOOLEAN repaint, Board board)
         fputDW(diagFile, 0);\r
         fputDW(diagFile, 0);\r
         fputDW(diagFile, 0);\r
-       // write color table\r
-       if(fac)\r
-       for(i=0; i<16; i++) fputDW(diagFile, color[i]);\r
-       // write bitmap data\r
-       for(i=0; i<wb*(b.bmHeight - boardRect.top + OUTER_MARGIN); i++) \r
-               fputc(pData[i], diagFile);\r
+    // write color table\r
+    if(fac)\r
+    for(i=0; i<16; i++) fputDW(diagFile, color[i]);\r
+    // write bitmap data\r
+    for(i=0; i<wb*(b.bmHeight - boardRect.top + OUTER_MARGIN); i++)\r
+        fputc(pData[i], diagFile);\r
 #endif\r
      }\r
   }\r
@@ -4878,9 +4878,9 @@ HDCDrawPosition(HDC hdc, BOOLEAN repaint, Board board)
   DeleteDC(tmphdc);\r
   DeleteObject(bufferBitmap);\r
 \r
-  if (releaseDC) \r
+  if (releaseDC)\r
     ReleaseDC(hwndMain, hdc);\r
-  \r
+\r
   if (lastDrawnFlipView != flipView) {\r
     if (flipView)\r
       CheckMenuItem(GetMenu(hwndMain),IDM_FlipView, MF_BYCOMMAND|MF_CHECKED);\r
@@ -4906,7 +4906,7 @@ SaveDiagram(f)
     saveDiagFlag = 0;\r
 \r
 //    if(f != NULL) fprintf(f, "Sorry, but this feature is still in preparation\n");\r
-    \r
+\r
     fclose(f);\r
     return TRUE;\r
 }\r
@@ -4929,15 +4929,15 @@ PaintProc(HWND hwnd)
       DrawIcon(hdc, 2, 2, iconCurrent);\r
     } else {\r
       if (!appData.monoMode) {\r
-       SelectPalette(hdc, hPal, FALSE);\r
-       RealizePalette(hdc);\r
+    SelectPalette(hdc, hPal, FALSE);\r
+    RealizePalette(hdc);\r
       }\r
       HDCDrawPosition(hdc, 1, NULL);\r
       oldFont =\r
-       SelectObject(hdc, font[boardSize][MESSAGE_FONT]->hf);\r
+    SelectObject(hdc, font[boardSize][MESSAGE_FONT]->hf);\r
       ExtTextOut(hdc, messageRect.left, messageRect.top,\r
-                ETO_CLIPPED|ETO_OPAQUE,\r
-                &messageRect, messageText, strlen(messageText), NULL);\r
+         ETO_CLIPPED|ETO_OPAQUE,\r
+         &messageRect, messageText, strlen(messageText), NULL);\r
       SelectObject(hdc, oldFont);\r
       DisplayBothClocks();\r
     }\r
@@ -4994,16 +4994,16 @@ SetupDropMenu(HMENU hmenu)
 \r
   for (i=0; i<sizeof(dropEnables)/sizeof(DropEnable); i++) {\r
     p = strchr(gameMode == IcsPlayingWhite ? white_holding : black_holding,\r
-              dropEnables[i].piece);\r
+           dropEnables[i].piece);\r
     count = 0;\r
     while (p && *p++ == dropEnables[i].piece) count++;\r
     sprintf(item, "%s  %d", dropEnables[i].name, count);\r
     enable = count > 0 || !appData.testLegality\r
       /*!!temp:*/ || (gameInfo.variant == VariantCrazyhouse\r
-                     && !appData.icsActive);\r
+              && !appData.icsActive);\r
     ModifyMenu(hmenu, dropEnables[i].command,\r
-              MF_BYCOMMAND | (enable ? MF_ENABLED : MF_GRAYED) | MF_STRING,\r
-              dropEnables[i].command, item);\r
+           MF_BYCOMMAND | (enable ? MF_ENABLED : MF_GRAYED) | MF_STRING,\r
+           dropEnables[i].command, item);\r
   }\r
 }\r
 \r
@@ -5024,15 +5024,15 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
   if (recursive) {\r
     if (message == WM_MBUTTONUP) {\r
       /* Hideous kludge to fool TrackPopupMenu into paying attention\r
-        to the middle button: we simulate pressing the left button too!\r
-        */\r
+     to the middle button: we simulate pressing the left button too!\r
+     */\r
       PostMessage(hwnd, WM_LBUTTONDOWN, wParam, lParam);\r
       PostMessage(hwnd, WM_LBUTTONUP, wParam, lParam);\r
     }\r
     return;\r
   }\r
   recursive++;\r
-  \r
+\r
   pt.x = LOWORD(lParam);\r
   pt.y = HIWORD(lParam);\r
   x = EventToSquare(pt.x - boardRect.left);\r
@@ -5047,23 +5047,23 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
   switch (message) {\r
   case WM_LBUTTONDOWN:\r
     if(promotionChoice) { // we are waiting for a click to indicate promotion piece\r
-       promotionChoice = FALSE; // only one chance: if click not OK it is interpreted as cancel\r
-       if(appData.debugMode) fprintf(debugFP, "promotion click, x=%d, y=%d\n", x, y);\r
-       if(gameInfo.holdingsWidth && \r
-               (WhiteOnMove(currentMove) \r
-                       ? x == BOARD_WIDTH-1 && y < gameInfo.holdingsSize && y > 0\r
-                       : x == 0 && y >= BOARD_HEIGHT - gameInfo.holdingsSize && y < BOARD_HEIGHT-1) ) {\r
-           // click in right holdings, for determining promotion piece\r
-           ChessSquare p = boards[currentMove][y][x];\r
-           if(appData.debugMode) fprintf(debugFP, "square contains %d\n", (int)p);\r
-           if(p != EmptySquare) {\r
-               FinishMove(WhitePromotionQueen, fromX, fromY, toX, toY, ToLower(PieceToChar(p)));\r
-               fromX = fromY = -1;\r
-               break;\r
-           }\r
-       }\r
-       DrawPosition(FALSE, boards[currentMove]);\r
-       break;\r
+    promotionChoice = FALSE; // only one chance: if click not OK it is interpreted as cancel\r
+    if(appData.debugMode) fprintf(debugFP, "promotion click, x=%d, y=%d\n", x, y);\r
+    if(gameInfo.holdingsWidth &&\r
+        (WhiteOnMove(currentMove)\r
+            ? x == BOARD_WIDTH-1 && y < gameInfo.holdingsSize && y > 0\r
+            : x == 0 && y >= BOARD_HEIGHT - gameInfo.holdingsSize && y < BOARD_HEIGHT-1) ) {\r
+        // click in right holdings, for determining promotion piece\r
+        ChessSquare p = boards[currentMove][y][x];\r
+        if(appData.debugMode) fprintf(debugFP, "square contains %d\n", (int)p);\r
+        if(p != EmptySquare) {\r
+        FinishMove(WhitePromotionQueen, fromX, fromY, toX, toY, ToLower(PieceToChar(p)));\r
+        fromX = fromY = -1;\r
+        break;\r
+        }\r
+    }\r
+    DrawPosition(FALSE, boards[currentMove]);\r
+    break;\r
     }\r
     ErrorPopDown();\r
     sameAgain = FALSE;\r
@@ -5071,26 +5071,26 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       /* Downclick vertically off board; check if on clock */\r
       if (PtInRect((LPRECT) &whiteRect, pt)) {\r
         if (gameMode == EditPosition) {\r
-         SetWhiteToPlayEvent();\r
-       } else if (gameMode == IcsPlayingBlack ||\r
-                  gameMode == MachinePlaysWhite) {\r
-         CallFlagEvent();\r
+      SetWhiteToPlayEvent();\r
+    } else if (gameMode == IcsPlayingBlack ||\r
+           gameMode == MachinePlaysWhite) {\r
+      CallFlagEvent();\r
         } else if (gameMode == EditGame) {\r
           AdjustClock(flipClock, -1);\r
         }\r
       } else if (PtInRect((LPRECT) &blackRect, pt)) {\r
-       if (gameMode == EditPosition) {\r
-         SetBlackToPlayEvent();\r
-       } else if (gameMode == IcsPlayingWhite ||\r
-                  gameMode == MachinePlaysBlack) {\r
-         CallFlagEvent();\r
+    if (gameMode == EditPosition) {\r
+      SetBlackToPlayEvent();\r
+    } else if (gameMode == IcsPlayingWhite ||\r
+           gameMode == MachinePlaysBlack) {\r
+      CallFlagEvent();\r
         } else if (gameMode == EditGame) {\r
           AdjustClock(!flipClock, -1);\r
-       }\r
+    }\r
       }\r
       if (!appData.highlightLastMove) {\r
         ClearHighlights();\r
-       DrawPosition((int) (forceFullRepaint || FALSE), NULL);\r
+    DrawPosition((int) (forceFullRepaint || FALSE), NULL);\r
       }\r
       fromX = fromY = -1;\r
       dragInfo.start.x = dragInfo.start.y = -1;\r
@@ -5101,32 +5101,32 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
               || x == BOARD_LEFT-1 || x == BOARD_RGHT\r
               || (x == BOARD_LEFT-2 && y < BOARD_HEIGHT-gameInfo.holdingsSize)\r
               || (x == BOARD_RGHT+1 && y >= gameInfo.holdingsSize)\r
-       /* EditPosition, empty square, or different color piece;\r
-          click-click move is possible */\r
+    /* EditPosition, empty square, or different color piece;\r
+       click-click move is possible */\r
                                ) {\r
       break;\r
     } else if (fromX == x && fromY == y) {\r
       /* Downclick on same square again */\r
       ClearHighlights();\r
       DrawPosition(forceFullRepaint || FALSE, NULL);\r
-      sameAgain = TRUE;  \r
+      sameAgain = TRUE;\r
     } else if (fromX != -1 &&\r
-               x != BOARD_LEFT-2 && x != BOARD_RGHT+1 \r
+               x != BOARD_LEFT-2 && x != BOARD_RGHT+1\r
                                                                         ) {\r
       /* Downclick on different square. */\r
       /* [HGM] if on holdings file, should count as new first click ! */\r
       /* [HGM] <sameColor> now always do UserMoveTest(), and check colors there */\r
-       toX = x;\r
-       toY = y;\r
+    toX = x;\r
+    toY = y;\r
         /* [HGM] <popupFix> UserMoveEvent requires two calls now,\r
            to make sure move is legal before showing promotion popup */\r
         moveType = UserMoveTest(fromX, fromY, toX, toY, NULLCHAR, FALSE);\r
-       if(moveType == AmbiguousMove) { /* [HGM] Edit-Position move executed */\r
-               fromX = fromY = -1; \r
-               ClearHighlights();\r
-               DrawPosition(FALSE, boards[currentMove]);\r
-               break; \r
-       } else \r
+    if(moveType == AmbiguousMove) { /* [HGM] Edit-Position move executed */\r
+        fromX = fromY = -1;\r
+        ClearHighlights();\r
+        DrawPosition(FALSE, boards[currentMove]);\r
+        break;\r
+    } else\r
         if(moveType != ImpossibleMove && moveType != Comment) {\r
           /* [HGM] We use PromotionToKnight in Shogi to indicate frorced promotion */\r
           if (moveType == WhitePromotionKnight || moveType == BlackPromotionKnight ||\r
@@ -5143,19 +5143,19 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
                   DrawPosition(forceFullRepaint || FALSE, NULL);\r
                   /* [HGM] <popupFix> Popup calls FinishMove now.\r
                      If promotion to Q is legal, all are legal! */\r
-                 if(gameInfo.variant == VariantSuper || gameInfo.variant == VariantGreat)\r
-                 { ChessSquare p = boards[currentMove][fromY][fromX], q = boards[currentMove][toY][toX];\r
-                   // kludge to temporarily execute move on display, without promoting yet\r
-                   promotionChoice = TRUE;\r
-                   boards[currentMove][fromY][fromX] = EmptySquare; // move Pawn to 8th rank\r
-                   boards[currentMove][toY][toX] = p;\r
-                   DrawPosition(FALSE, boards[currentMove]);\r
-                   boards[currentMove][fromY][fromX] = p; // take back, but display stays\r
-                   boards[currentMove][toY][toX] = q;\r
-                   DisplayMessage("Select piece from holdings", "");\r
-                 } else\r
+          if(gameInfo.variant == VariantSuper || gameInfo.variant == VariantGreat)\r
+          { ChessSquare p = boards[currentMove][fromY][fromX], q = boards[currentMove][toY][toX];\r
+            // kludge to temporarily execute move on display, without promoting yet\r
+            promotionChoice = TRUE;\r
+            boards[currentMove][fromY][fromX] = EmptySquare; // move Pawn to 8th rank\r
+            boards[currentMove][toY][toX] = p;\r
+            DrawPosition(FALSE, boards[currentMove]);\r
+            boards[currentMove][fromY][fromX] = p; // take back, but display stays\r
+            boards[currentMove][toY][toX] = q;\r
+            DisplayMessage("Select piece from holdings", "");\r
+          } else\r
                   PromotionPopup(hwnd);\r
-                 goto noClear;\r
+          goto noClear;\r
           } else { // not a promotion. Move can be illegal if testLegality off, and should be made then.\r
              if (appData.animate || appData.highlightLastMove) {\r
                  SetHighlights(fromX, fromY, toX, toY);\r
@@ -5169,16 +5169,16 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
              }\r
           }\r
           fromX = fromY = -1;\r
-       noClear:\r
-         break;\r
+    noClear:\r
+      break;\r
         }\r
         if (gotPremove && moveType != Comment) {\r
-           SetPremoveHighlights(fromX, fromY, toX, toY);\r
+        SetPremoveHighlights(fromX, fromY, toX, toY);\r
 //            DrawPosition(forceFullRepaint || FALSE, NULL);\r
-       } else ClearHighlights();\r
+    } else ClearHighlights();\r
         fromX = fromY = -1;\r
         DrawPosition(forceFullRepaint || FALSE, NULL);\r
-       if(moveType != Comment) break;\r
+    if(moveType != Comment) break;\r
     }\r
     /* First downclick, or restart on a square with same color piece */\r
     if (!frozen && OKToStartUserMove(x, y)) {\r
@@ -5204,13 +5204,13 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       dragInfo.from.x = dragInfo.from.y = -1;\r
       /* Upclick on same square */\r
       if (sameAgain) {\r
-       /* Clicked same square twice: abort click-click move */\r
-       fromX = fromY = -1;\r
-       gotPremove = 0;\r
-       ClearPremoveHighlights();\r
+    /* Clicked same square twice: abort click-click move */\r
+    fromX = fromY = -1;\r
+    gotPremove = 0;\r
+    ClearPremoveHighlights();\r
       } else {\r
-       /* First square clicked: start click-click move */\r
-       SetHighlights(fromX, fromY, -1, -1);\r
+    /* First square clicked: start click-click move */\r
+    SetHighlights(fromX, fromY, -1, -1);\r
       }\r
       DrawPosition(forceFullRepaint || FALSE, NULL);\r
     } else if (dragInfo.from.x < 0 || dragInfo.from.y < 0) {\r
@@ -5228,80 +5228,80 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       appData.animate = appData.animate && !appData.animateDragging;\r
       moveType = UserMoveTest(fromX, fromY, toX, toY, NULLCHAR, TRUE);\r
       if(moveType == AmbiguousMove) { /* [HGM] Edit-Position move executed */\r
-               fromX = fromY = -1; \r
-               ClearHighlights();\r
-               DrawPosition(FALSE, boards[currentMove]);\r
-               appData.animate = saveAnimate;\r
-               break; \r
-      } else \r
+        fromX = fromY = -1;\r
+        ClearHighlights();\r
+        DrawPosition(FALSE, boards[currentMove]);\r
+        appData.animate = saveAnimate;\r
+        break;\r
+      } else\r
       if(moveType != ImpossibleMove) {\r
           /* [HGM] use move type to determine if move is promotion.\r
              Knight is Shogi kludge for mandatory promotion, Queen means choice */\r
           if (moveType == WhitePromotionKnight || moveType == BlackPromotionKnight ||\r
             ((moveType == WhitePromotionQueen || moveType == BlackPromotionQueen) &&\r
-              appData.alwaysPromoteToQueen)) \r
+              appData.alwaysPromoteToQueen))\r
                FinishMove(moveType, fromX, fromY, toX, toY, 'q');\r
-          else \r
+          else\r
           if (moveType == WhitePromotionQueen || moveType == BlackPromotionQueen ) {\r
                DrawPosition(forceFullRepaint || FALSE, NULL);\r
-                 if(gameInfo.variant == VariantSuper || gameInfo.variant == VariantGreat)\r
-                 { ChessSquare p = boards[currentMove][fromY][fromX], q = boards[currentMove][toY][toX];\r
-                   // kludge to temporarily execute move on display, wthout promotng yet\r
-                   promotionChoice = TRUE;\r
-                   boards[currentMove][fromY][fromX] = EmptySquare; // move Pawn to 8th rank\r
-                   boards[currentMove][toY][toX] = p;\r
-                   DrawPosition(FALSE, boards[currentMove]);\r
-                   boards[currentMove][fromY][fromX] = p; // take back, but display stays\r
-                   boards[currentMove][toY][toX] = q;\r
-                   appData.animate = saveAnimate;\r
-                   DisplayMessage("Select piece from holdings", "");\r
-                   break;\r
-                 } else\r
+          if(gameInfo.variant == VariantSuper || gameInfo.variant == VariantGreat)\r
+          { ChessSquare p = boards[currentMove][fromY][fromX], q = boards[currentMove][toY][toX];\r
+            // kludge to temporarily execute move on display, wthout promotng yet\r
+            promotionChoice = TRUE;\r
+            boards[currentMove][fromY][fromX] = EmptySquare; // move Pawn to 8th rank\r
+            boards[currentMove][toY][toX] = p;\r
+            DrawPosition(FALSE, boards[currentMove]);\r
+            boards[currentMove][fromY][fromX] = p; // take back, but display stays\r
+            boards[currentMove][toY][toX] = q;\r
+            appData.animate = saveAnimate;\r
+            DisplayMessage("Select piece from holdings", "");\r
+            break;\r
+          } else\r
                PromotionPopup(hwnd); /* [HGM] Popup now calls FinishMove */\r
           } else {\r
-           if(saveAnimate /* ^$!%@#$!$ */  && gameInfo.variant == VariantAtomic \r
-                         && (boards[currentMove][toY][toX] != EmptySquare || \r
-                                       moveType == WhiteCapturesEnPassant || \r
-                                       moveType == BlackCapturesEnPassant   ) )\r
-               AnimateAtomicCapture(fromX, fromY, toX, toY, 20);\r
-           FinishMove(moveType, fromX, fromY, toX, toY, NULLCHAR);\r
-         }\r
+        if(saveAnimate /* ^$!%@#$!$ */  && gameInfo.variant == VariantAtomic\r
+              && (boards[currentMove][toY][toX] != EmptySquare ||\r
+                    moveType == WhiteCapturesEnPassant ||\r
+                    moveType == BlackCapturesEnPassant   ) )\r
+        AnimateAtomicCapture(fromX, fromY, toX, toY, 20);\r
+        FinishMove(moveType, fromX, fromY, toX, toY, NULLCHAR);\r
+      }\r
       }\r
       if (gotPremove) SetPremoveHighlights(fromX, fromY, toX, toY);\r
       appData.animate = saveAnimate;\r
       fromX = fromY = -1;\r
       if (appData.highlightDragging && !appData.highlightLastMove) {\r
-       ClearHighlights();\r
+    ClearHighlights();\r
       }\r
       if (appData.animate || appData.animateDragging ||\r
-         appData.highlightDragging || gotPremove) {\r
-       DrawPosition(forceFullRepaint || FALSE, NULL);\r
+      appData.highlightDragging || gotPremove) {\r
+    DrawPosition(forceFullRepaint || FALSE, NULL);\r
       }\r
     }\r
-    dragInfo.start.x = dragInfo.start.y = -1; \r
+    dragInfo.start.x = dragInfo.start.y = -1;\r
     dragInfo.pos = dragInfo.lastpos = dragInfo.start;\r
     break;\r
 \r
   case WM_MOUSEMOVE:\r
     if ((appData.animateDragging || appData.highlightDragging)\r
-       && (wParam & MK_LBUTTON)\r
-       && dragInfo.from.x >= 0) \r
+    && (wParam & MK_LBUTTON)\r
+    && dragInfo.from.x >= 0)\r
     {\r
       BOOL full_repaint = FALSE;\r
 \r
       sameAgain = FALSE; /* [HGM] if we drag something around, do keep square selected */\r
       if (appData.animateDragging) {\r
-       dragInfo.pos = pt;\r
+    dragInfo.pos = pt;\r
       }\r
       if (appData.highlightDragging) {\r
-       SetHighlights(fromX, fromY, x, y);\r
+    SetHighlights(fromX, fromY, x, y);\r
         if( IsDrawArrowEnabled() && (x < 0 || x >= BOARD_WIDTH || y < 0 || y >= BOARD_HEIGHT) ) {\r
             full_repaint = TRUE;\r
         }\r
       }\r
-      \r
+\r
       DrawPosition( full_repaint, NULL);\r
-      \r
+\r
       dragInfo.lastpos = dragInfo.pos;\r
     }\r
     break;\r
@@ -5311,13 +5311,13 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
        /* Mouse Wheel is being rolled forward\r
         * Play moves forward\r
         */\r
-       if((short)HIWORD(wParam) > 0 && currentMove < forwardMostMove) \r
-               { if(lastDir == 1) ForwardEvent(); else lastDir = 1; } // [HGM] suppress first event in direction\r
+       if((short)HIWORD(wParam) > 0 && currentMove < forwardMostMove)\r
+        { if(lastDir == 1) ForwardEvent(); else lastDir = 1; } // [HGM] suppress first event in direction\r
        /* Mouse Wheel is being rolled backward\r
         * Play moves backward\r
         */\r
-       if((short)HIWORD(wParam) < 0 && currentMove > backwardMostMove) \r
-               { if(lastDir == -1) BackwardEvent(); else lastDir = -1; }\r
+       if((short)HIWORD(wParam) < 0 && currentMove > backwardMostMove)\r
+        { if(lastDir == -1) BackwardEvent(); else lastDir = -1; }\r
     }\r
     break;\r
 \r
@@ -5350,25 +5350,25 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       fromX = x;\r
       fromY = y;\r
       if (message == WM_MBUTTONDOWN) {\r
-       buttonCount = 3;  /* even if system didn't think so */\r
-       if (wParam & MK_SHIFT) \r
-         MenuPopup(hwnd, pt, LoadMenu(hInst, "BlackPieceMenu"), -1);\r
-       else\r
-         MenuPopup(hwnd, pt, LoadMenu(hInst, "WhitePieceMenu"), -1);\r
+    buttonCount = 3;  /* even if system didn't think so */\r
+    if (wParam & MK_SHIFT)\r
+      MenuPopup(hwnd, pt, LoadMenu(hInst, "BlackPieceMenu"), -1);\r
+    else\r
+      MenuPopup(hwnd, pt, LoadMenu(hInst, "WhitePieceMenu"), -1);\r
       } else { /* message == WM_RBUTTONDOWN */\r
 #if 0\r
-       if (buttonCount == 3) {\r
-         if (wParam & MK_SHIFT) \r
-           MenuPopup(hwnd, pt, LoadMenu(hInst, "WhitePieceMenu"), -1);\r
-         else\r
-           MenuPopup(hwnd, pt, LoadMenu(hInst, "BlackPieceMenu"), -1);\r
-       } else {\r
-         MenuPopup(hwnd, pt, LoadMenu(hInst, "PieceMenu"), -1);\r
-       }\r
+    if (buttonCount == 3) {\r
+      if (wParam & MK_SHIFT)\r
+        MenuPopup(hwnd, pt, LoadMenu(hInst, "WhitePieceMenu"), -1);\r
+      else\r
+        MenuPopup(hwnd, pt, LoadMenu(hInst, "BlackPieceMenu"), -1);\r
+    } else {\r
+      MenuPopup(hwnd, pt, LoadMenu(hInst, "PieceMenu"), -1);\r
+    }\r
 #else\r
-       /* Just have one menu, on the right button.  Windows users don't\r
-          think to try the middle one, and sometimes other software steals\r
-          it, or it doesn't really exist. */\r
+    /* Just have one menu, on the right button.  Windows users don't\r
+       think to try the middle one, and sometimes other software steals\r
+       it, or it doesn't really exist. */\r
         if(gameInfo.variant != VariantShogi)\r
             MenuPopup(hwnd, pt, LoadMenu(hInst, "PieceMenu"), -1);\r
         else\r
@@ -5382,8 +5382,8 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
     case MachinePlaysWhite:\r
     case MachinePlaysBlack:\r
       if (appData.testLegality &&\r
-         gameInfo.variant != VariantBughouse &&\r
-         gameInfo.variant != VariantCrazyhouse) break;\r
+      gameInfo.variant != VariantBughouse &&\r
+      gameInfo.variant != VariantCrazyhouse) break;\r
       if (x < 0 || y < 0) break;\r
       fromX = x;\r
       fromY = y;\r
@@ -5428,14 +5428,14 @@ ButtonProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       return TRUE;\r
     default:\r
       if (appData.icsActive && (isalpha((char)wParam) || wParam == '0')) {\r
-       // [HGM] movenum: only letters or leading zero should go to ICS input\r
+    // [HGM] movenum: only letters or leading zero should go to ICS input\r
         HWND h = GetDlgItem(hwndConsole, OPT_ConsoleInput);\r
-       if (IsIconic(hwndConsole)) ShowWindow(hwndConsole, SW_RESTORE);\r
-       SetFocus(h);\r
-       SendMessage(h, WM_CHAR, wParam, lParam);\r
-       return TRUE;\r
+    if (IsIconic(hwndConsole)) ShowWindow(hwndConsole, SW_RESTORE);\r
+    SetFocus(h);\r
+    SendMessage(h, WM_CHAR, wParam, lParam);\r
+    return TRUE;\r
       } else if (isalpha((char)wParam) || isdigit((char)wParam)){\r
-       PopUpMoveDialog((char)wParam);\r
+    PopUpMoveDialog((char)wParam);\r
       }\r
       break;\r
     }\r
@@ -5454,39 +5454,39 @@ Promotion(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
   case WM_INITDIALOG: /* message: initialize dialog box */\r
     /* Center the dialog over the application window */\r
     CenterWindow(hDlg, GetWindow(hDlg, GW_OWNER));\r
-    ShowWindow(GetDlgItem(hDlg, PB_King), \r
+    ShowWindow(GetDlgItem(hDlg, PB_King),\r
       (!appData.testLegality || gameInfo.variant == VariantSuicide ||\r
        gameInfo.variant == VariantGiveaway || gameInfo.variant == VariantSuper ) ?\r
-              SW_SHOW : SW_HIDE);\r
+           SW_SHOW : SW_HIDE);\r
     /* [HGM] Only allow C & A promotions if these pieces are defined */\r
     ShowWindow(GetDlgItem(hDlg, PB_Archbishop),\r
        ((PieceToChar(WhiteAngel) >= 'A' &&\r
          PieceToChar(WhiteAngel) != '~') ||\r
         (PieceToChar(BlackAngel) >= 'A' &&\r
          PieceToChar(BlackAngel) != '~')   ) ?\r
-              SW_SHOW : SW_HIDE);\r
-    ShowWindow(GetDlgItem(hDlg, PB_Chancellor), \r
+           SW_SHOW : SW_HIDE);\r
+    ShowWindow(GetDlgItem(hDlg, PB_Chancellor),\r
        ((PieceToChar(WhiteMarshall) >= 'A' &&\r
          PieceToChar(WhiteMarshall) != '~') ||\r
         (PieceToChar(BlackMarshall) >= 'A' &&\r
          PieceToChar(BlackMarshall) != '~')   ) ?\r
-              SW_SHOW : SW_HIDE);\r
+           SW_SHOW : SW_HIDE);\r
     /* [HGM] Hide B & R button in Shogi, use Q as promote, N as defer */\r
     ShowWindow(GetDlgItem(hDlg, PB_Rook),\r
        gameInfo.variant != VariantShogi ?\r
-              SW_SHOW : SW_HIDE);\r
-    ShowWindow(GetDlgItem(hDlg, PB_Bishop), \r
+           SW_SHOW : SW_HIDE);\r
+    ShowWindow(GetDlgItem(hDlg, PB_Bishop),\r
        gameInfo.variant != VariantShogi ?\r
-              SW_SHOW : SW_HIDE);\r
-    ShowWindow(GetDlgItem(hDlg, IDC_Yes), \r
+           SW_SHOW : SW_HIDE);\r
+    ShowWindow(GetDlgItem(hDlg, IDC_Yes),\r
        gameInfo.variant == VariantShogi ?\r
-              SW_SHOW : SW_HIDE);\r
-    ShowWindow(GetDlgItem(hDlg, IDC_No), \r
+           SW_SHOW : SW_HIDE);\r
+    ShowWindow(GetDlgItem(hDlg, IDC_No),\r
        gameInfo.variant == VariantShogi ?\r
-              SW_SHOW : SW_HIDE);\r
-    ShowWindow(GetDlgItem(hDlg, IDC_Centaur), \r
+           SW_SHOW : SW_HIDE);\r
+    ShowWindow(GetDlgItem(hDlg, IDC_Centaur),\r
        gameInfo.variant == VariantSuper ?\r
-              SW_SHOW : SW_HIDE);\r
+           SW_SHOW : SW_HIDE);\r
     return TRUE;\r
 \r
   case WM_COMMAND: /* message: received a command */\r
@@ -5562,9 +5562,9 @@ LoadGameDialog(HWND hwnd, char* title)
   FILE *f;\r
   char fileTitle[MSG_SIZ];\r
   f = OpenFileDialog(hwnd, "rb", "",\r
-                    appData.oldSaveStyle ? "gam" : "pgn",\r
-                    GAME_FILT,\r
-                    title, &number, fileTitle, NULL);\r
+                 appData.oldSaveStyle ? "gam" : "pgn",\r
+             GAME_FILT,\r
+             title, &number, fileTitle, NULL);\r
   if (f != NULL) {\r
     cmailMsgLoaded = FALSE;\r
     if (number == 0) {\r
@@ -5573,7 +5573,7 @@ LoadGameDialog(HWND hwnd, char* title)
         DisplayError("Cannot build game list", error);\r
       } else if (!ListEmpty(&gameList) &&\r
                  ((ListGame *) gameList.tailPred)->number > 1) {\r
-       GameListPopUp(f, fileTitle);\r
+    GameListPopUp(f, fileTitle);\r
         return;\r
       }\r
       GameListDestroy();\r
@@ -5603,16 +5603,16 @@ ChangedConsoleFont()
   cfmt.yHeight = (int)(f->mfp.pointSize * 20.0 + 0.5);\r
   cfmt.bCharSet = f->lf.lfCharSet;\r
   cfmt.bPitchAndFamily = f->lf.lfPitchAndFamily;\r
-  SendMessage(hText, EM_SETCHARFORMAT, SCF_ALL, (LPARAM) &cfmt); \r
-  SendMessage(hInput, EM_SETCHARFORMAT, SCF_ALL, (LPARAM) &cfmt); \r
+  SendMessage(hText, EM_SETCHARFORMAT, SCF_ALL, (LPARAM) &cfmt);\r
+  SendMessage(hInput, EM_SETCHARFORMAT, SCF_ALL, (LPARAM) &cfmt);\r
   /* Why are the following seemingly needed too? */\r
-  SendMessage(hText, EM_SETCHARFORMAT, SCF_DEFAULT, (LPARAM) &cfmt); \r
-  SendMessage(hInput, EM_SETCHARFORMAT, SCF_DEFAULT, (LPARAM) &cfmt); \r
+  SendMessage(hText, EM_SETCHARFORMAT, SCF_DEFAULT, (LPARAM) &cfmt);\r
+  SendMessage(hInput, EM_SETCHARFORMAT, SCF_DEFAULT, (LPARAM) &cfmt);\r
   SendMessage(hText, EM_EXGETSEL, 0, (LPARAM)&sel);\r
   tmpsel.cpMin = 0;\r
   tmpsel.cpMax = -1; /*999999?*/\r
   SendMessage(hText, EM_EXSETSEL, 0, (LPARAM)&tmpsel);\r
-  SendMessage(hText, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &cfmt); \r
+  SendMessage(hText, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &cfmt);\r
   /* Trying putting this here too.  It still seems to tickle a RichEdit\r
    *  bug: sometimes RichEdit indents the first line of a paragraph too.\r
    */\r
@@ -5672,20 +5672,20 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
   JAWS_KB_NAVIGATION\r
 \r
   case WM_CHAR:\r
-    \r
+\r
     JAWS_ALT_INTERCEPT\r
 \r
-    if (appData.icsActive && (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
-       SetFocus(h);\r
-       SendMessage(h, message, wParam, lParam);\r
+    if (appData.icsActive && (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
+    SetFocus(h);\r
+    SendMessage(h, message, wParam, lParam);\r
     } else if(lParam != KF_REPEAT) {\r
-       if (isalpha((char)wParam) || isdigit((char)wParam)) {\r
-               PopUpMoveDialog((char)wParam);\r
-       } else if((char)wParam == 003) CopyGameToClipboard();\r
-        else if((char)wParam == 026) PasteGameOrFENFromClipboard();\r
+    if (isalpha((char)wParam) || isdigit((char)wParam)) {\r
+        PopUpMoveDialog((char)wParam);\r
+    } else if((char)wParam == 003) CopyGameToClipboard();\r
+     else if((char)wParam == 026) PasteGameOrFENFromClipboard();\r
     }\r
 \r
     break;\r
@@ -5697,7 +5697,7 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       SelectPalette(hdc, hPal, TRUE);\r
       nnew = RealizePalette(hdc);\r
       if (nnew > 0) {\r
-       paletteChanged = TRUE;\r
+    paletteChanged = TRUE;\r
 #if 0\r
         UpdateColors(hdc);\r
 #else\r
@@ -5716,7 +5716,7 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       SelectPalette(hdc, hPal, FALSE);\r
       nnew = RealizePalette(hdc);\r
       if (nnew > 0) {\r
-       InvalidateRect(hwnd, &boardRect, FALSE);\r
+    InvalidateRect(hwnd, &boardRect, FALSE);\r
       }\r
       ReleaseDC(hwnd, hdc);\r
       return TRUE;\r
@@ -5767,11 +5767,11 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       }\r
       number = 1;\r
       f = OpenFileDialog(hwnd, "rb", "",\r
-                        appData.oldSaveStyle ? "pos" : "fen",\r
-                        POSITION_FILT,\r
-                        "Load Position from File", &number, fileTitle, NULL);\r
+             appData.oldSaveStyle ? "pos" : "fen",\r
+             POSITION_FILT,\r
+             "Load Position from File", &number, fileTitle, NULL);\r
       if (f != NULL) {\r
-       LoadPosition(f, number, fileTitle);\r
+    LoadPosition(f, number, fileTitle);\r
       }\r
       break;\r
 \r
@@ -5790,33 +5790,33 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
     case IDM_SaveGame:\r
       defName = DefaultFileName(appData.oldSaveStyle ? "gam" : "pgn");\r
       f = OpenFileDialog(hwnd, "a", defName,\r
-                        appData.oldSaveStyle ? "gam" : "pgn",\r
-                        GAME_FILT,\r
-                        "Save Game to File", NULL, fileTitle, NULL);\r
+             appData.oldSaveStyle ? "gam" : "pgn",\r
+             GAME_FILT,\r
+             "Save Game to File", NULL, fileTitle, NULL);\r
       if (f != NULL) {\r
-       SaveGame(f, 0, "");\r
+    SaveGame(f, 0, "");\r
       }\r
       break;\r
 \r
     case IDM_SavePosition:\r
       defName = DefaultFileName(appData.oldSaveStyle ? "pos" : "fen");\r
       f = OpenFileDialog(hwnd, "a", defName,\r
-                        appData.oldSaveStyle ? "pos" : "fen",\r
-                        POSITION_FILT,\r
-                        "Save Position to File", NULL, fileTitle, NULL);\r
+             appData.oldSaveStyle ? "pos" : "fen",\r
+             POSITION_FILT,\r
+             "Save Position to File", NULL, fileTitle, NULL);\r
       if (f != NULL) {\r
-       SavePosition(f, 0, "");\r
+    SavePosition(f, 0, "");\r
       }\r
       break;\r
 \r
     case IDM_SaveDiagram:\r
       defName = "diagram";\r
       f = OpenFileDialog(hwnd, "wb", defName,\r
-                        "bmp",\r
-                        DIAGRAM_FILT,\r
-                        "Save Diagram to File", NULL, fileTitle, NULL);\r
+             "bmp",\r
+             DIAGRAM_FILT,\r
+             "Save Diagram to File", NULL, fileTitle, NULL);\r
       if (f != NULL) {\r
-       SaveDiagram(f);\r
+    SaveDiagram(f);\r
       }\r
       break;\r
 \r
@@ -5854,7 +5854,7 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
         }\r
         else {\r
             EvalGraphPopUp();\r
-           SetFocus(hwndMain);\r
+        SetFocus(hwndMain);\r
         }\r
         break;\r
 \r
@@ -5921,10 +5921,10 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
        * refresh the tags dialog only if it's visible\r
        */\r
       if (gameMode == MachinePlaysWhite && IsWindowVisible(editTagsDialog)) {\r
-         char *tags;\r
-         tags = PGNTags(&gameInfo);\r
-         TagsPopUp(tags, CmailMsg());\r
-         free(tags);\r
+      char *tags;\r
+      tags = PGNTags(&gameInfo);\r
+      TagsPopUp(tags, CmailMsg());\r
+      free(tags);\r
       }\r
       SAY("computer starts playing white");\r
       break;\r
@@ -5935,10 +5935,10 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
        * refresh the tags dialog only if it's visible\r
        */\r
       if (gameMode == MachinePlaysBlack && IsWindowVisible(editTagsDialog)) {\r
-         char *tags;\r
-         tags = PGNTags(&gameInfo);\r
-         TagsPopUp(tags, CmailMsg());\r
-         free(tags);\r
+      char *tags;\r
+      tags = PGNTags(&gameInfo);\r
+      TagsPopUp(tags, CmailMsg());\r
+      free(tags);\r
       }\r
       SAY("computer starts playing black");\r
       break;\r
@@ -5949,10 +5949,10 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
        * refresh the tags dialog only if it's visible\r
        */\r
       if (gameMode == TwoMachinesPlay && IsWindowVisible(editTagsDialog)) {\r
-         char *tags;\r
-         tags = PGNTags(&gameInfo);\r
-         TagsPopUp(tags, CmailMsg());\r
-         free(tags);\r
+      char *tags;\r
+      tags = PGNTags(&gameInfo);\r
+      TagsPopUp(tags, CmailMsg());\r
+      free(tags);\r
       }\r
       SAY("programs start playing each other");\r
       break;\r
@@ -5962,7 +5962,7 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
         sprintf(buf, "%s does not support analysis", first.tidy);\r
         DisplayError(buf, 0);\r
       } else {\r
-       SAY("analyzing current position");\r
+    SAY("analyzing current position");\r
         /* [DM] icsEngineAnlyze [HGM] Why is this front-end??? */\r
         if (appData.icsActive) {\r
                if (gameMode != IcsObserving) {\r
@@ -5970,7 +5970,7 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
                        DisplayError(buf, 0);\r
                        /* secure check */\r
                        if (appData.icsEngineAnalyze) {\r
-                               if (appData.debugMode) \r
+                               if (appData.debugMode)\r
                                        fprintf(debugFP, "Found unexpected active ICS engine analyze \n");\r
                                ExitAnalyzeMode();\r
                                ModeHighlight();\r
@@ -5987,9 +5987,9 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
                        appData.icsEngineAnalyze = TRUE;\r
                        if (appData.debugMode) fprintf(debugFP, "ICS engine analyze starting...\n");\r
                }\r
-        } \r
-       if (!appData.showThinking) ToggleShowThinking();\r
-       AnalyzeModeEvent();\r
+        }\r
+    if (!appData.showThinking) ToggleShowThinking();\r
+    AnalyzeModeEvent();\r
       }\r
       break;\r
 \r
@@ -5999,10 +5999,10 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
         sprintf(buf, "%s does not support analysis", first.tidy);\r
         DisplayError(buf, 0);\r
       } else {\r
-       if (!appData.showThinking) ToggleShowThinking();\r
-       AnalyzeFileEvent();\r
-       LoadGameDialog(hwnd, "Analyze Game from File");\r
-       AnalysisPeriodicEvent(1);\r
+    if (!appData.showThinking) ToggleShowThinking();\r
+    AnalyzeFileEvent();\r
+    LoadGameDialog(hwnd, "Analyze Game from File");\r
+    AnalysisPeriodicEvent(1);\r
       }\r
       break;\r
 \r
@@ -6034,9 +6034,9 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
 \r
     case IDM_EditComment:\r
       if (commentDialogUp && editComment) {\r
-       CommentPopDown();\r
+    CommentPopDown();\r
       } else {\r
-       EditCommentEvent();\r
+    EditCommentEvent();\r
       }\r
       break;\r
 \r
@@ -6143,8 +6143,8 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
 \r
     case IDM_MuteSounds:\r
       mute = !mute; // [HGM] mute: keep track of global muting variable\r
-      CheckMenuItem(GetMenu(hwndMain),IDM_MuteSounds, \r
-                               MF_BYCOMMAND|(mute?MF_CHECKED:MF_UNCHECKED));\r
+      CheckMenuItem(GetMenu(hwndMain),IDM_MuteSounds,\r
+                MF_BYCOMMAND|(mute?MF_CHECKED:MF_UNCHECKED));\r
       break;\r
 \r
     case IDM_GeneralOptions:\r
@@ -6207,8 +6207,8 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
     case IDM_SaveSettingsOnExit:\r
       saveSettingsOnExit = !saveSettingsOnExit;\r
       (void) CheckMenuItem(GetMenu(hwndMain), IDM_SaveSettingsOnExit,\r
-                          MF_BYCOMMAND|(saveSettingsOnExit ?\r
-                                        MF_CHECKED : MF_UNCHECKED));\r
+               MF_BYCOMMAND|(saveSettingsOnExit ?\r
+                     MF_CHECKED : MF_UNCHECKED));\r
       break;\r
 \r
     case IDM_Hint:\r
@@ -6226,59 +6226,59 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
     case IDM_Debug:\r
       appData.debugMode = !appData.debugMode;\r
       if (appData.debugMode) {\r
-       char dir[MSG_SIZ];\r
-       GetCurrentDirectory(MSG_SIZ, dir);\r
-       SetCurrentDirectory(installDir);\r
-       debugFP = fopen(appData.nameOfDebugFile, "w");\r
+    char dir[MSG_SIZ];\r
+    GetCurrentDirectory(MSG_SIZ, dir);\r
+    SetCurrentDirectory(installDir);\r
+    debugFP = fopen(appData.nameOfDebugFile, "w");\r
         SetCurrentDirectory(dir);\r
         setbuf(debugFP, NULL);\r
       } else {\r
-       fclose(debugFP);\r
+    fclose(debugFP);\r
         debugFP = NULL;\r
       }\r
       break;\r
 \r
     case IDM_HELPCONTENTS:\r
       if (!MyHelp (hwnd, "winboard.hlp", HELP_KEY,(DWORD)(LPSTR)"CONTENTS") &&\r
-         !HtmlHelp(hwnd, "winboard.chm", 0, 0) ) {\r
-         MessageBox (GetFocus(),\r
-                   "Unable to activate help",\r
-                   szAppName, MB_SYSTEMMODAL|MB_OK|MB_ICONHAND);\r
+      !HtmlHelp(hwnd, "winboard.chm", 0, 0) ) {\r
+      MessageBox (GetFocus(),\r
+            "Unable to activate help",\r
+            szAppName, MB_SYSTEMMODAL|MB_OK|MB_ICONHAND);\r
       }\r
       break;\r
 \r
     case IDM_HELPSEARCH:\r
         if (!MyHelp (hwnd, "winboard.hlp", HELP_PARTIALKEY, (DWORD)(LPSTR)"") &&\r
-           !HtmlHelp(hwnd, "winboard.chm", 0, 0)       ) {\r
-       MessageBox (GetFocus(),\r
-                   "Unable to activate help",\r
-                   szAppName, MB_SYSTEMMODAL|MB_OK|MB_ICONHAND);\r
+        !HtmlHelp(hwnd, "winboard.chm", 0, 0)   ) {\r
+    MessageBox (GetFocus(),\r
+            "Unable to activate help",\r
+            szAppName, MB_SYSTEMMODAL|MB_OK|MB_ICONHAND);\r
       }\r
       break;\r
 \r
     case IDM_HELPHELP:\r
       if(!WinHelp(hwnd, (LPSTR)NULL, HELP_HELPONHELP, 0)) {\r
-       MessageBox (GetFocus(),\r
-                   "Unable to activate help",\r
-                   szAppName, MB_SYSTEMMODAL|MB_OK|MB_ICONHAND);\r
+    MessageBox (GetFocus(),\r
+            "Unable to activate help",\r
+            szAppName, MB_SYSTEMMODAL|MB_OK|MB_ICONHAND);\r
       }\r
       break;\r
 \r
     case IDM_ABOUT:\r
       lpProc = MakeProcInstance((FARPROC)About, hInst);\r
-      DialogBox(hInst, \r
-       (gameInfo.event && strcmp(gameInfo.event, "Easter Egg Hunt") == 0) ?\r
-       "AboutBox2" : "AboutBox", hwnd, (DLGPROC)lpProc);\r
+      DialogBox(hInst,\r
+    (gameInfo.event && strcmp(gameInfo.event, "Easter Egg Hunt") == 0) ?\r
+    "AboutBox2" : "AboutBox", hwnd, (DLGPROC)lpProc);\r
       FreeProcInstance(lpProc);\r
       break;\r
 \r
     case IDM_DirectCommand1:\r
       AskQuestionEvent("Direct Command",\r
-                      "Send to chess program:", "", "1");\r
+               "Send to chess program:", "", "1");\r
       break;\r
     case IDM_DirectCommand2:\r
       AskQuestionEvent("Direct Command",\r
-                      "Send to second chess program:", "", "2");\r
+               "Send to second chess program:", "", "2");\r
       break;\r
 \r
     case EP_WhitePawn:\r
@@ -6476,10 +6476,10 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
     case ANALYSIS_TIMER_ID:\r
       if ((gameMode == AnalyzeMode || gameMode == AnalyzeFile\r
                  || appData.icsEngineAnalyze) && appData.periodicUpdates) {\r
-       AnalysisPeriodicEvent(0);\r
+    AnalysisPeriodicEvent(0);\r
       } else {\r
-       KillTimer(hwnd, analysisTimerEvent);\r
-       analysisTimerEvent = 0;\r
+    KillTimer(hwnd, analysisTimerEvent);\r
+    analysisTimerEvent = 0;\r
       }\r
       break;\r
     case DELAYED_TIMER_ID:\r
@@ -6505,17 +6505,17 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
             RECT rcMain;\r
 \r
 //            GetWindowRect( hwnd, &rcMain ); //[HGM] sticky: in XP this returned new position, not old\r
-           rcMain.left   = boardX;           //              replace by these 4 lines to reconstruct old rect\r
-           rcMain.right  = boardX + winWidth;\r
-           rcMain.top    = boardY;\r
-           rcMain.bottom = boardY + winHeight;\r
-            \r
+        rcMain.left   = boardX;           //              replace by these 4 lines to reconstruct old rect\r
+        rcMain.right  = boardX + winWidth;\r
+        rcMain.top    = boardY;\r
+        rcMain.bottom = boardY + winHeight;\r
+\r
             ReattachAfterMove( &rcMain, lpwp->x, lpwp->y, moveHistoryDialog, &wpMoveHistory );\r
             ReattachAfterMove( &rcMain, lpwp->x, lpwp->y, evalGraphDialog, &wpEvalGraph );\r
             ReattachAfterMove( &rcMain, lpwp->x, lpwp->y, engineOutputDialog, &wpEngineOutput );\r
             ReattachAfterMove( &rcMain, lpwp->x, lpwp->y, gameListDialog, &wpGameList );\r
             ReattachAfterMove( &rcMain, lpwp->x, lpwp->y, hwndConsole, &wpConsole );\r
-           boardX = lpwp->x;\r
+        boardX = lpwp->x;\r
             boardY = lpwp->y;\r
         }\r
     }\r
@@ -6566,7 +6566,7 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
     }\r
     break;\r
 \r
-  default:     /* Passes it on if unprocessed */\r
+  default:  /* Passes it on if unprocessed */\r
     return (DefWindowProc(hwnd, message, wParam, lParam));\r
   }\r
   return 0;\r
@@ -6598,8 +6598,8 @@ mysrandom(unsigned int seed)
 }\r
 \r
 \r
-/* \r
- * returns TRUE if user selects a different color, FALSE otherwise \r
+/*\r
+ * returns TRUE if user selects a different color, FALSE otherwise\r
  */\r
 \r
 BOOL\r
@@ -6709,7 +6709,7 @@ MyPlaySound(MySound *ms)
   if(mute) return TRUE; // [HGM] mute: suppress all sound play when muted\r
   switch (ms->name[0]) {\r
   case NULLCHAR:\r
-       if(appData.debugMode) fprintf(debugFP, "silence\n");\r
+    if(appData.debugMode) fprintf(debugFP, "silence\n");\r
     /* Silence */\r
     ok = TRUE;\r
     break;\r
@@ -6720,7 +6720,7 @@ MyPlaySound(MySound *ms)
       ok = PlaySound(ms->name + 1, NULL, SND_ALIAS|SND_ASYNC);\r
     }\r
     if (!ok) ok = MessageBeep(MB_OK);\r
-    break; \r
+    break;\r
   case '!':\r
     /* Builtin wave resource, or "!" alone for silence */\r
     if (ms->name[1]) {\r
@@ -6803,8 +6803,8 @@ OpenFileHook(HWND hdlg, UINT uiMsg, WPARAM wParam, LPARAM lParam)
 \r
 FILE *\r
 OpenFileDialog(HWND hwnd, char *write, char *defName, char *defExt, // [HGM] diag: type of 'write' now string\r
-              char *nameFilt, char *dlgTitle, UINT *number,\r
-              char fileTitle[MSG_SIZ], char fileName[MSG_SIZ])\r
+           char *nameFilt, char *dlgTitle, UINT *number,\r
+           char fileTitle[MSG_SIZ], char fileName[MSG_SIZ])\r
 {\r
   OPENFILENAME openFileName;\r
   char buf1[MSG_SIZ];\r
@@ -6833,8 +6833,8 @@ OpenFileDialog(HWND hwnd, char *write, char *defName, char *defExt, // [HGM] dia
   openFileName.nMaxFileTitle     = fileTitle ? MSG_SIZ : 0;\r
   openFileName.lpstrInitialDir   = NULL;\r
   openFileName.lpstrTitle        = dlgTitle;\r
-  openFileName.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY \r
-    | (write[0] != 'r' ? 0 : OFN_FILEMUSTEXIST) \r
+  openFileName.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY\r
+    | (write[0] != 'r' ? 0 : OFN_FILEMUSTEXIST)\r
     | (number ? OFN_ENABLETEMPLATE | OFN_ENABLEHOOK: 0)\r
     | (oldDialog ? 0 : OFN_EXPLORER);\r
   openFileName.nFileOffset       = 0;\r
@@ -6845,13 +6845,13 @@ OpenFileDialog(HWND hwnd, char *write, char *defName, char *defExt, // [HGM] dia
     (LPOFNHOOKPROC) OldOpenFileHook : (LPOFNHOOKPROC) OpenFileHook;\r
   openFileName.lpTemplateName    = (LPSTR)(oldDialog ? 1536 : DLG_IndexNumber);\r
 \r
-  if (write[0] != 'r' ? GetSaveFileName(&openFileName) : \r
+  if (write[0] != 'r' ? GetSaveFileName(&openFileName) :\r
                         GetOpenFileName(&openFileName)) {\r
     /* open the file */\r
     f = fopen(openFileName.lpstrFile, write);\r
     if (f == NULL) {\r
       MessageBox(hwnd, "File open failed", NULL,\r
-                MB_OK|MB_ICONEXCLAMATION);\r
+         MB_OK|MB_ICONEXCLAMATION);\r
       return NULL;\r
     }\r
   } else {\r
@@ -6867,7 +6867,7 @@ OpenFileDialog(HWND hwnd, char *write, char *defName, char *defExt, // [HGM] dia
 VOID APIENTRY\r
 MenuPopup(HWND hwnd, POINT pt, HMENU hmenu, UINT def)\r
 {\r
-  HMENU hmenuTrackPopup;       /* floating pop-up menu  */\r
+  HMENU hmenuTrackPopup;    /* floating pop-up menu  */\r
 \r
   /*\r
    * Get the first pop-up menu in the menu template. This is the\r
@@ -6885,12 +6885,12 @@ MenuPopup(HWND hwnd, POINT pt, HMENU hmenu, UINT def)
 \r
   /* Draw and track the floating pop-up menu. */\r
   TrackPopupMenu(hmenuTrackPopup, TPM_CENTERALIGN | TPM_RIGHTBUTTON,\r
-                pt.x, pt.y, 0, hwnd, NULL);\r
+         pt.x, pt.y, 0, hwnd, NULL);\r
 \r
   /* Destroy the menu.*/\r
   DestroyMenu(hmenu);\r
 }\r
-   \r
+\r
 typedef struct {\r
   HWND hDlg, hText;\r
   int sizeX, sizeY, newSizeX, newSizeY;\r
@@ -6909,7 +6909,7 @@ ResizeEditPlusButtonsCallback(HWND hChild, LPARAM lparam)
   pt.x = rect.left + (cl->newSizeX - cl->sizeX)/2;\r
   pt.y = rect.top + cl->newSizeY - cl->sizeY;\r
   ScreenToClient(cl->hDlg, &pt);\r
-  cl->hdwp = DeferWindowPos(cl->hdwp, hChild, NULL, \r
+  cl->hdwp = DeferWindowPos(cl->hdwp, hChild, NULL,\r
     pt.x, pt.y, rect.right - rect.left, rect.bottom - rect.top, SWP_NOZORDER);\r
   return TRUE;\r
 }\r
@@ -6922,10 +6922,10 @@ ResizeEditPlusButtons(HWND hDlg, HWND hText, int sizeX, int sizeY, int newSizeX,
   RECT rectText;\r
   int newTextHeight, newTextWidth;\r
   ResizeEditPlusButtonsClosure cl;\r
-  \r
+\r
   /*if (IsIconic(hDlg)) return;*/\r
   if (newSizeX == sizeX && newSizeY == sizeY) return;\r
-  \r
+\r
   cl.hdwp = BeginDeferWindowPos(8);\r
 \r
   GetWindowRect(hText, &rectText); /* gives screen coords */\r
@@ -6935,7 +6935,7 @@ ResizeEditPlusButtons(HWND hDlg, HWND hText, int sizeX, int sizeY, int newSizeX,
     newSizeY += -newTextHeight;\r
     newTextHeight = 0;\r
   }\r
-  cl.hdwp = DeferWindowPos(cl.hdwp, hText, NULL, 0, 0, \r
+  cl.hdwp = DeferWindowPos(cl.hdwp, hText, NULL, 0, 0,\r
     newTextWidth, newTextHeight, SWP_NOZORDER|SWP_NOMOVE);\r
 \r
   cl.hDlg = hDlg;\r
@@ -6975,9 +6975,9 @@ BOOL CenterWindowEx(HWND hwndChild, HWND hwndParent, int mode)
     /* Calculate new X position, then adjust for screen */\r
     xNew = rParent.left + ((wParent - wChild) /2);\r
     if (xNew < 0) {\r
-       xNew = 0;\r
+    xNew = 0;\r
     } else if ((xNew+wChild) > wScreen) {\r
-       xNew = wScreen - wChild;\r
+    xNew = wScreen - wChild;\r
     }\r
 \r
     /* Calculate new Y position, then adjust for screen */\r
@@ -6989,14 +6989,14 @@ BOOL CenterWindowEx(HWND hwndChild, HWND hwndParent, int mode)
     }\r
 \r
     if (yNew < 0) {\r
-       yNew = 0;\r
+    yNew = 0;\r
     } else if ((yNew+hChild) > hScreen) {\r
-       yNew = hScreen - hChild;\r
+    yNew = hScreen - hChild;\r
     }\r
 \r
     /* Set it, and return */\r
     return SetWindowPos (hwndChild, NULL,\r
-                        xNew, yNew, 0, 0, SWP_NOSIZE | SWP_NOZORDER);\r
+             xNew, yNew, 0, 0, SWP_NOSIZE | SWP_NOZORDER);\r
 }\r
 \r
 /* Center one window over another */\r
@@ -7121,13 +7121,13 @@ StartupDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
     CenterWindow (hDlg, GetDesktopWindow());\r
     /* Initialize the dialog items */\r
     InitEngineBox(hDlg, GetDlgItem(hDlg, OPT_ChessEngineName),\r
-                 appData.firstChessProgram, "fd", appData.firstDirectory,\r
-                 firstChessProgramNames);\r
+              appData.firstChessProgram, "fd", appData.firstDirectory,\r
+          firstChessProgramNames);\r
     InitEngineBox(hDlg, GetDlgItem(hDlg, OPT_SecondChessEngineName),\r
-                 appData.secondChessProgram, "sd", appData.secondDirectory,\r
-                 secondChessProgramNames);\r
+              appData.secondChessProgram, "sd", appData.secondDirectory,\r
+          secondChessProgramNames);\r
     hwndCombo = GetDlgItem(hDlg, OPT_ChessServerName);\r
-    InitComboStringsFromOption(hwndCombo, icsNames);    \r
+    InitComboStringsFromOption(hwndCombo, icsNames);\r
     sprintf(buf, "%s /icsport=%s", appData.icsHost, appData.icsPort);\r
     if (*appData.icsHelper != NULLCHAR) {\r
       char *q = QuoteForFilename(appData.icsHelper);\r
@@ -7159,38 +7159,38 @@ StartupDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
     case IDOK:\r
       if (IsDlgButtonChecked(hDlg, OPT_ChessEngine)) {\r
         strcpy(buf, "/fcp=");\r
-       GetDlgItemText(hDlg, OPT_ChessEngineName, buf + strlen(buf), sizeof(buf) - strlen(buf));\r
+    GetDlgItemText(hDlg, OPT_ChessEngineName, buf + strlen(buf), sizeof(buf) - strlen(buf));\r
         p = buf;\r
-       ParseArgs(StringGet, &p);\r
+    ParseArgs(StringGet, &p);\r
         strcpy(buf, "/scp=");\r
-       GetDlgItemText(hDlg, OPT_SecondChessEngineName, buf + strlen(buf), sizeof(buf) - strlen(buf));\r
+    GetDlgItemText(hDlg, OPT_SecondChessEngineName, buf + strlen(buf), sizeof(buf) - strlen(buf));\r
         p = buf;\r
-       ParseArgs(StringGet, &p);\r
-       appData.noChessProgram = FALSE;\r
-       appData.icsActive = FALSE;\r
+    ParseArgs(StringGet, &p);\r
+    appData.noChessProgram = FALSE;\r
+    appData.icsActive = FALSE;\r
       } else if (IsDlgButtonChecked(hDlg, OPT_ChessServer)) {\r
         strcpy(buf, "/ics /icshost=");\r
-       GetDlgItemText(hDlg, OPT_ChessServerName, buf + strlen(buf), sizeof(buf) - strlen(buf));\r
+    GetDlgItemText(hDlg, OPT_ChessServerName, buf + strlen(buf), sizeof(buf) - strlen(buf));\r
         p = buf;\r
-       ParseArgs(StringGet, &p);\r
-       if (appData.zippyPlay) {\r
-         strcpy(buf, "/fcp=");\r
-         GetDlgItemText(hDlg, OPT_ChessEngineName, buf + strlen(buf), sizeof(buf) - strlen(buf));\r
-         p = buf;\r
-         ParseArgs(StringGet, &p);\r
-       }\r
+    ParseArgs(StringGet, &p);\r
+    if (appData.zippyPlay) {\r
+      strcpy(buf, "/fcp=");\r
+      GetDlgItemText(hDlg, OPT_ChessEngineName, buf + strlen(buf), sizeof(buf) - strlen(buf));\r
+      p = buf;\r
+      ParseArgs(StringGet, &p);\r
+    }\r
       } else if (IsDlgButtonChecked(hDlg, OPT_View)) {\r
-       appData.noChessProgram = TRUE;\r
-       appData.icsActive = FALSE;\r
+    appData.noChessProgram = TRUE;\r
+    appData.icsActive = FALSE;\r
       } else {\r
-       MessageBox(hDlg, "Choose an option, or cancel to exit",\r
-                  "Option Error", MB_OK|MB_ICONEXCLAMATION);\r
-       return TRUE;\r
+    MessageBox(hDlg, "Choose an option, or cancel to exit",\r
+           "Option Error", MB_OK|MB_ICONEXCLAMATION);\r
+    return TRUE;\r
       }\r
       if (IsDlgButtonChecked(hDlg, OPT_AnyAdditional)) {\r
-       GetDlgItemText(hDlg, OPT_AdditionalOptions, buf, sizeof(buf));\r
-       p = buf;\r
-       ParseArgs(StringGet, &p);\r
+    GetDlgItemText(hDlg, OPT_AdditionalOptions, buf, sizeof(buf));\r
+    p = buf;\r
+    ParseArgs(StringGet, &p);\r
       }\r
       EndDialog(hDlg, TRUE);\r
       return TRUE;\r
@@ -7201,9 +7201,9 @@ StartupDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
 \r
     case IDM_HELPCONTENTS:\r
       if (!WinHelp (hDlg, "winboard.hlp", HELP_KEY,(DWORD)(LPSTR)"CONTENTS")) {\r
-       MessageBox (GetFocus(),\r
-                   "Unable to activate help",\r
-                   szAppName, MB_SYSTEMMODAL|MB_OK|MB_ICONHAND);\r
+    MessageBox (GetFocus(),\r
+            "Unable to activate help",\r
+            szAppName, MB_SYSTEMMODAL|MB_OK|MB_ICONHAND);\r
       }\r
       break;\r
 \r
@@ -7236,7 +7236,7 @@ About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
 \r
   case WM_COMMAND: /* message: received a command */\r
     if (LOWORD(wParam) == IDOK /* "OK" box selected? */\r
-       || LOWORD(wParam) == IDCANCEL) { /* System menu close command? */\r
+    || LOWORD(wParam) == IDCANCEL) { /* System menu close command? */\r
       EndDialog(hDlg, TRUE); /* Exit the dialog */\r
       return (TRUE);\r
     }\r
@@ -7277,8 +7277,8 @@ CommentDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
       SetFocus(GetDlgItem(hDlg, IDOK));\r
     }\r
     SendMessage(GetDlgItem(hDlg, OPT_CommentText),\r
-               WM_SETFONT, (WPARAM)font[boardSize][COMMENT_FONT]->hf,\r
-               MAKELPARAM(FALSE, 0));\r
+        WM_SETFONT, (WPARAM)font[boardSize][COMMENT_FONT]->hf,\r
+        MAKELPARAM(FALSE, 0));\r
     /* Size and position the dialog */\r
     if (!commentDialog) {\r
       commentDialog = hDlg;\r
@@ -7287,26 +7287,26 @@ CommentDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
       sizeX = rect.right;\r
       sizeY = rect.bottom;\r
       if (commentX != CW_USEDEFAULT && commentY != CW_USEDEFAULT &&\r
-         commentW != CW_USEDEFAULT && commentH != CW_USEDEFAULT) {\r
-       WINDOWPLACEMENT wp;\r
-       EnsureOnScreen(&commentX, &commentY, 0, 0);\r
-       wp.length = sizeof(WINDOWPLACEMENT);\r
-       wp.flags = 0;\r
-       wp.showCmd = SW_SHOW;\r
-       wp.ptMaxPosition.x = wp.ptMaxPosition.y = 0;\r
-       wp.rcNormalPosition.left = commentX;\r
-       wp.rcNormalPosition.right = commentX + commentW;\r
-       wp.rcNormalPosition.top = commentY;\r
-       wp.rcNormalPosition.bottom = commentY + commentH;\r
-       SetWindowPlacement(hDlg, &wp);\r
-\r
-       GetClientRect(hDlg, &rect);\r
-       newSizeX = rect.right;\r
-       newSizeY = rect.bottom;\r
+      commentW != CW_USEDEFAULT && commentH != CW_USEDEFAULT) {\r
+    WINDOWPLACEMENT wp;\r
+    EnsureOnScreen(&commentX, &commentY, 0, 0);\r
+    wp.length = sizeof(WINDOWPLACEMENT);\r
+    wp.flags = 0;\r
+    wp.showCmd = SW_SHOW;\r
+    wp.ptMaxPosition.x = wp.ptMaxPosition.y = 0;\r
+    wp.rcNormalPosition.left = commentX;\r
+    wp.rcNormalPosition.right = commentX + commentW;\r
+    wp.rcNormalPosition.top = commentY;\r
+    wp.rcNormalPosition.bottom = commentY + commentH;\r
+    SetWindowPlacement(hDlg, &wp);\r
+\r
+    GetClientRect(hDlg, &rect);\r
+    newSizeX = rect.right;\r
+    newSizeY = rect.bottom;\r
         ResizeEditPlusButtons(hDlg, hwndText, sizeX, sizeY,\r
-                             newSizeX, newSizeY);\r
-       sizeX = newSizeX;\r
-       sizeY = newSizeY;\r
+                  newSizeX, newSizeY);\r
+    sizeX = newSizeX;\r
+    sizeY = newSizeY;\r
       }\r
     }\r
     return FALSE;\r
@@ -7315,22 +7315,22 @@ CommentDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
     switch (LOWORD(wParam)) {\r
     case IDOK:\r
       if (editComment) {\r
-       char *p, *q;\r
-       /* Read changed options from the dialog box */\r
-       hwndText = GetDlgItem(hDlg, OPT_CommentText);\r
-       len = GetWindowTextLength(hwndText);\r
-       str = (char *) malloc(len + 1);\r
-       GetWindowText(hwndText, str, len + 1);\r
-       p = q = str;\r
-       while (*q) {\r
-         if (*q == '\r')\r
-           q++;\r
-         else\r
-           *p++ = *q++;\r
-       }\r
-       *p = NULLCHAR;\r
-       ReplaceComment(commentIndex, str);\r
-       free(str);\r
+    char *p, *q;\r
+    /* Read changed options from the dialog box */\r
+    hwndText = GetDlgItem(hDlg, OPT_CommentText);\r
+    len = GetWindowTextLength(hwndText);\r
+    str = (char *) malloc(len + 1);\r
+    GetWindowText(hwndText, str, len + 1);\r
+    p = q = str;\r
+    while (*q) {\r
+      if (*q == '\r')\r
+        q++;\r
+      else\r
+        *p++ = *q++;\r
+    }\r
+    *p = NULLCHAR;\r
+    ReplaceComment(commentIndex, str);\r
+    free(str);\r
       }\r
       CommentPopDown();\r
       return TRUE;\r
@@ -7400,7 +7400,7 @@ EitherCommentPopUp(int index, char *title, char *str, BOOLEAN edit)
   } else {\r
     lpProc = MakeProcInstance((FARPROC)CommentDialog, hInst);\r
     CreateDialog(hInst, MAKEINTRESOURCE(DLG_EditComment),\r
-                hwndMain, (DLGPROC)lpProc);\r
+         hwndMain, (DLGPROC)lpProc);\r
     FreeProcInstance(lpProc);\r
   }\r
   commentDialogUp = TRUE;\r
@@ -7410,7 +7410,7 @@ EitherCommentPopUp(int index, char *title, char *str, BOOLEAN edit)
 /*---------------------------------------------------------------------------*\\r
  *\r
  * Type-in move dialog functions\r
- * \r
+ *\r
 \*---------------------------------------------------------------------------*/\r
 \r
 LRESULT CALLBACK\r
@@ -7438,40 +7438,40 @@ TypeInMoveDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
     case IDOK:\r
       GetDlgItemText(hDlg, OPT_Move, move, sizeof(move));\r
       { int n; Board board;\r
-       // [HGM] FENedit\r
-       if(gameMode == EditPosition && ParseFEN(board, &n, move) ) {\r
-               EditPositionPasteFEN(move);\r
-               EndDialog(hDlg, TRUE);\r
-               return TRUE;\r
-       }\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
-         EndDialog(hDlg, TRUE);\r
-         DrawPosition(TRUE, boards[currentMove]);\r
-         if(currentMove > backwardMostMove) DisplayMove(currentMove - 1);\r
-         else DisplayMessage("", "");\r
-         return TRUE;\r
-       }\r
+    // [HGM] FENedit\r
+    if(gameMode == EditPosition && ParseFEN(board, &n, move) ) {\r
+        EditPositionPasteFEN(move);\r
+        EndDialog(hDlg, TRUE);\r
+        return TRUE;\r
+    }\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
+      EndDialog(hDlg, TRUE);\r
+      DrawPosition(TRUE, boards[currentMove]);\r
+      if(currentMove > backwardMostMove) DisplayMove(currentMove - 1);\r
+      else DisplayMessage("", "");\r
+      return TRUE;\r
+    }\r
       }\r
-      if (gameMode != EditGame && currentMove != forwardMostMove && \r
-       gameMode != Training) {\r
-       DisplayMoveError("Displayed move is not current");\r
+      if (gameMode != EditGame && currentMove != forwardMostMove &&\r
+    gameMode != Training) {\r
+    DisplayMoveError("Displayed move is not current");\r
       } else {\r
-//     GetDlgItemText(hDlg, OPT_Move, move, sizeof(move)); // moved upstream\r
-       int ok = ParseOneMove(move, gameMode == EditPosition ? blackPlaysFirst : currentMove, \r
-         &moveType, &fromX, &fromY, &toX, &toY, &promoChar);\r
-       if(!ok && move[0] >= 'a') { move[0] += 'A' - 'a'; ok = 2; } // [HGM] try also capitalized\r
-       if (ok==1 || ok && ParseOneMove(move, gameMode == EditPosition ? blackPlaysFirst : currentMove, \r
-         &moveType, &fromX, &fromY, &toX, &toY, &promoChar)) {\r
-         if (gameMode != Training)\r
-             forwardMostMove = currentMove;\r
-         UserMoveEvent(fromX, fromY, toX, toY, promoChar);     \r
-       } else {\r
-         DisplayMoveError("Could not parse move");\r
-       }\r
+//  GetDlgItemText(hDlg, OPT_Move, move, sizeof(move)); // moved upstream\r
+    int ok = ParseOneMove(move, gameMode == EditPosition ? blackPlaysFirst : currentMove,\r
+      &moveType, &fromX, &fromY, &toX, &toY, &promoChar);\r
+    if(!ok && move[0] >= 'a') { move[0] += 'A' - 'a'; ok = 2; } // [HGM] try also capitalized\r
+    if (ok==1 || ok && ParseOneMove(move, gameMode == EditPosition ? blackPlaysFirst : currentMove,\r
+      &moveType, &fromX, &fromY, &toX, &toY, &promoChar)) {\r
+      if (gameMode != Training)\r
+          forwardMostMove = currentMove;\r
+      UserMoveEvent(fromX, fromY, toX, toY, promoChar);\r
+    } else {\r
+      DisplayMoveError("Could not parse move");\r
+    }\r
       }\r
       EndDialog(hDlg, TRUE);\r
       return TRUE;\r
@@ -7490,19 +7490,19 @@ VOID
 PopUpMoveDialog(char firstchar)\r
 {\r
     FARPROC lpProc;\r
-    \r
-    if ((gameMode == BeginningOfGame && !appData.icsActive) || \r
+\r
+    if ((gameMode == BeginningOfGame && !appData.icsActive) ||\r
         gameMode == MachinePlaysWhite || gameMode == MachinePlaysBlack ||\r
-       gameMode == AnalyzeMode || gameMode == EditGame || \r
-       gameMode == EditPosition || gameMode == IcsExamining ||\r
-       gameMode == IcsPlayingWhite || gameMode == IcsPlayingBlack ||\r
-       isdigit(firstchar) && // [HGM] movenum: allow typing in of move nr in 'passive' modes\r
-               ( gameMode == AnalyzeFile || gameMode == PlayFromGameFile ||\r
-                 gameMode == IcsObserving || gameMode == TwoMachinesPlay    ) ||\r
-       gameMode == Training) {\r
+    gameMode == AnalyzeMode || gameMode == EditGame ||\r
+    gameMode == EditPosition || gameMode == IcsExamining ||\r
+    gameMode == IcsPlayingWhite || gameMode == IcsPlayingBlack ||\r
+    isdigit(firstchar) && // [HGM] movenum: allow typing in of move nr in 'passive' modes\r
+        ( gameMode == AnalyzeFile || gameMode == PlayFromGameFile ||\r
+          gameMode == IcsObserving || gameMode == TwoMachinesPlay    ) ||\r
+    gameMode == Training) {\r
       lpProc = MakeProcInstance((FARPROC)TypeInMoveDialog, hInst);\r
       DialogBoxParam(hInst, MAKEINTRESOURCE(DLG_TypeInMove),\r
-       hwndMain, (DLGPROC)lpProc, (LPARAM)firstchar);\r
+    hwndMain, (DLGPROC)lpProc, (LPARAM)firstchar);\r
       FreeProcInstance(lpProc);\r
     }\r
 }\r
@@ -7510,7 +7510,7 @@ PopUpMoveDialog(char firstchar)
 /*---------------------------------------------------------------------------*\\r
  *\r
  * Type-in name dialog functions\r
- * \r
+ *\r
 \*---------------------------------------------------------------------------*/\r
 \r
 LRESULT CALLBACK\r
@@ -7554,22 +7554,22 @@ VOID
 PopUpNameDialog(char firstchar)\r
 {\r
     FARPROC lpProc;\r
-    \r
+\r
       lpProc = MakeProcInstance((FARPROC)TypeInNameDialog, hInst);\r
       DialogBoxParam(hInst, MAKEINTRESOURCE(DLG_TypeInName),\r
-       hwndMain, (DLGPROC)lpProc, (LPARAM)firstchar);\r
+    hwndMain, (DLGPROC)lpProc, (LPARAM)firstchar);\r
       FreeProcInstance(lpProc);\r
 }\r
 \r
 /*---------------------------------------------------------------------------*\\r
  *\r
  *  Error dialogs\r
- * \r
+ *\r
 \*---------------------------------------------------------------------------*/\r
 \r
 /* Nonmodal error box */\r
 LRESULT CALLBACK ErrorDialog(HWND hDlg, UINT message,\r
-                            WPARAM wParam, LPARAM lParam);\r
+                 WPARAM wParam, LPARAM lParam);\r
 \r
 VOID\r
 ErrorPopUp(char *title, char *content)\r
@@ -7583,11 +7583,11 @@ ErrorPopUp(char *title, char *content)
   while (*p) {\r
     if (*p == '\n') {\r
       if (modal) {\r
-       *q++ = ' ';\r
-       p++;\r
+    *q++ = ' ';\r
+    p++;\r
       } else {\r
-       *q++ = '\r';\r
-       *q++ = *p++;\r
+    *q++ = '\r';\r
+    *q++ = *p++;\r
       }\r
     } else {\r
       *q++ = *p++;\r
@@ -7596,13 +7596,13 @@ ErrorPopUp(char *title, char *content)
   *q = NULLCHAR;\r
   strncpy(errorTitle, title, sizeof(errorTitle));\r
   errorTitle[sizeof(errorTitle) - 1] = '\0';\r
-  \r
+\r
   if (modal) {\r
     MessageBox(NULL, errorMessage, errorTitle, MB_OK|MB_ICONEXCLAMATION);\r
   } else {\r
     lpProc = MakeProcInstance((FARPROC)ErrorDialog, hInst);\r
     CreateDialog(hInst, MAKEINTRESOURCE(DLG_Error),\r
-                hwndMain, (DLGPROC)lpProc);\r
+         hwndMain, (DLGPROC)lpProc);\r
     FreeProcInstance(lpProc);\r
   }\r
 }\r
@@ -7628,11 +7628,11 @@ ErrorDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
 \r
     /*\r
     SetWindowPos(hDlg, NULL, rChild.left,\r
-      rChild.top + boardRect.top - (rChild.bottom - rChild.top), \r
+      rChild.top + boardRect.top - (rChild.bottom - rChild.top),\r
       0, 0, SWP_NOZORDER|SWP_NOSIZE);\r
     */\r
 \r
-    /* \r
+    /*\r
         [AS] It seems that the above code wants to move the dialog up in the "caption\r
         area" of the main window, but it uses the dialog height as an hard-coded constant,\r
         and it doesn't work when you resize the dialog.\r
@@ -7679,7 +7679,7 @@ GothicDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
     SetWindowPos(hDlg, NULL, boardX, boardY-height, winWidth, height,\r
                                                              SWP_NOZORDER);\r
 \r
-    /* \r
+    /*\r
         [AS] It seems that the above code wants to move the dialog up in the "caption\r
         area" of the main window, but it uses the dialog height as an hard-coded constant,\r
         and it doesn't work when you resize the dialog.\r
@@ -7724,7 +7724,7 @@ GothicPopUp(char *title, VariantClass variant)
     title = lastTitle;\r
     lpProc = MakeProcInstance((FARPROC)GothicDialog, hInst);\r
     CreateDialog(hInst, MAKEINTRESOURCE(DLG_Error),\r
-                hwndMain, (DLGPROC)lpProc);\r
+         hwndMain, (DLGPROC)lpProc);\r
     FreeProcInstance(lpProc);\r
   }\r
 }\r
@@ -7829,8 +7829,8 @@ ParseIcsTextMenu(char *icsTextMenuString)
       c = ';';\r
       t = strchr(s + 1, c);\r
       if (t == NULL) {\r
-       c = '\n';\r
-       t = strchr(s + 1, c);\r
+    c = '\n';\r
+    t = strchr(s + 1, c);\r
       }\r
       if (t != NULL) *t = NULLCHAR;\r
       e->item = strdup(p);\r
@@ -7845,7 +7845,7 @@ ParseIcsTextMenu(char *icsTextMenuString)
       p = t + 1;\r
     }\r
     e++;\r
-  } \r
+  }\r
 }\r
 \r
 HMENU\r
@@ -7860,15 +7860,15 @@ LoadIcsTextMenu(IcsTextMenuEntry *e)
       AppendMenu(h, MF_SEPARATOR, 0, 0);\r
     } else {\r
       if (e->item[0] == '|') {\r
-       AppendMenu(h, MF_STRING|MF_MENUBARBREAK,\r
-                  IDM_CommandX + i, &e->item[1]);\r
+    AppendMenu(h, MF_STRING|MF_MENUBARBREAK,\r
+           IDM_CommandX + i, &e->item[1]);\r
       } else {\r
-       AppendMenu(h, MF_STRING, IDM_CommandX + i, e->item);\r
+    AppendMenu(h, MF_STRING, IDM_CommandX + i, e->item);\r
       }\r
     }\r
     e++;\r
     i++;\r
-  } \r
+  }\r
   return hmenu;\r
 }\r
 \r
@@ -7892,7 +7892,7 @@ CommandX(HWND hwnd, char *command, BOOLEAN getname, BOOLEAN immediate)
       SetFocus(hInput);\r
     }\r
     return;\r
-  }    \r
+  }\r
   SendMessage(hwnd, EM_EXGETSEL, 0, (LPARAM)&sel);\r
   if (sel.cpMin == sel.cpMax) {\r
     /* Expand to surrounding word */\r
@@ -7942,7 +7942,7 @@ CommandX(HWND hwnd, char *command, BOOLEAN getname, BOOLEAN immediate)
   }\r
 }\r
 \r
-LRESULT CALLBACK \r
+LRESULT CALLBACK\r
 ConsoleTextSubclass(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)\r
 {\r
   HWND hInput;\r
@@ -7967,16 +7967,16 @@ ConsoleTextSubclass(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    if(wParam != '\022') {\r
     if (wParam == '\t') {\r
       if (GetKeyState(VK_SHIFT) < 0) {\r
-       /* shifted */\r
-       if (IsIconic(hwndMain)) ShowWindow(hwndMain, SW_RESTORE);\r
-       if (buttonDesc[0].hwnd) {\r
-         SetFocus(buttonDesc[0].hwnd);\r
-       } else {\r
-         SetFocus(hwndMain);\r
-       }\r
+    /* shifted */\r
+    if (IsIconic(hwndMain)) ShowWindow(hwndMain, SW_RESTORE);\r
+    if (buttonDesc[0].hwnd) {\r
+      SetFocus(buttonDesc[0].hwnd);\r
+    } else {\r
+      SetFocus(hwndMain);\r
+    }\r
       } else {\r
-       /* unshifted */\r
-       SetFocus(GetDlgItem(hwndConsole, OPT_ConsoleInput));\r
+    /* unshifted */\r
+    SetFocus(GetDlgItem(hwndConsole, OPT_ConsoleInput));\r
       }\r
     } else {\r
       hInput = GetDlgItem(hwndConsole, OPT_ConsoleInput);\r
@@ -7987,7 +7987,7 @@ ConsoleTextSubclass(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    } // [HGM] navigate: for Ctrl+R, flow into nex case (moved up here) to summon up menu\r
   case WM_RBUTTONUP:\r
     if (GetKeyState(VK_SHIFT) & ~1) {\r
-      SendDlgItemMessage(hwndConsole, OPT_ConsoleText, \r
+      SendDlgItemMessage(hwndConsole, OPT_ConsoleText,\r
         WM_COMMAND, MAKEWPARAM(IDM_QuickPaste, 0), 0);\r
     } else {\r
       POINT pt;\r
@@ -8020,8 +8020,8 @@ ConsoleTextSubclass(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       SendMessage(hwnd, EM_EXGETSEL, 0, (LPARAM)&sel);\r
       if (sel.cpMin == sel.cpMax) {\r
         sel.cpMin = SendMessage(hwnd, EM_CHARFROMPOS, 0, (LPARAM)&pt); /*doc is wrong*/\r
-       sel.cpMax = sel.cpMin;\r
-       SendMessage(hwnd, EM_EXSETSEL, 0, (LPARAM)&sel);\r
+    sel.cpMax = sel.cpMin;\r
+    SendMessage(hwnd, EM_EXSETSEL, 0, (LPARAM)&sel);\r
       }\r
       SendMessage(hwnd, EM_HIDESELECTION, FALSE, FALSE);\r
     }\r
@@ -8031,12 +8031,12 @@ ConsoleTextSubclass(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
     case IDM_QuickPaste:\r
       {\r
         SendMessage(hwnd, EM_EXGETSEL, 0, (LPARAM)&sel);\r
-       if (sel.cpMin == sel.cpMax) {\r
-         MessageBeep(MB_ICONEXCLAMATION);\r
+    if (sel.cpMin == sel.cpMax) {\r
+      MessageBeep(MB_ICONEXCLAMATION);\r
           return 0;\r
-       }\r
-       SendMessage(hwnd, WM_COPY, 0, 0);\r
-       hInput = GetDlgItem(hwndConsole, OPT_ConsoleInput);\r
+    }\r
+    SendMessage(hwnd, WM_COPY, 0, 0);\r
+    hInput = GetDlgItem(hwndConsole, OPT_ConsoleInput);\r
         SendMessage(hInput, WM_PASTE, 0, 0);\r
         SetFocus(hInput);\r
         return 0;\r
@@ -8052,14 +8052,14 @@ ConsoleTextSubclass(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       return 0;\r
     default:\r
       {\r
-       int i = LOWORD(wParam) - IDM_CommandX;\r
-       if (i >= 0 && i < ICS_TEXT_MENU_SIZE &&\r
-           icsTextMenuEntry[i].command != NULL) {\r
-         CommandX(hwnd, icsTextMenuEntry[i].command,\r
-                  icsTextMenuEntry[i].getname,\r
-                  icsTextMenuEntry[i].immediate);\r
-         return 0;\r
-       }\r
+    int i = LOWORD(wParam) - IDM_CommandX;\r
+    if (i >= 0 && i < ICS_TEXT_MENU_SIZE &&\r
+        icsTextMenuEntry[i].command != NULL) {\r
+      CommandX(hwnd, icsTextMenuEntry[i].command,\r
+           icsTextMenuEntry[i].getname,\r
+           icsTextMenuEntry[i].immediate);\r
+      return 0;\r
+    }\r
       }\r
       break;\r
     }\r
@@ -8099,15 +8099,15 @@ ConsoleInputSubclass(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
     }\r
     switch (wParam) {\r
     case '\r':   /* Enter key */\r
-      is->count = GetWindowText(hwnd, is->buf, INPUT_SOURCE_BUF_SIZE-1);     \r
+      is->count = GetWindowText(hwnd, is->buf, INPUT_SOURCE_BUF_SIZE-1);\r
       if (consoleEcho) SaveInHistory(is->buf);\r
       is->buf[is->count++] = '\n';\r
       is->buf[is->count] = NULLCHAR;\r
       SendMessage(hwndMain, WM_USER_Input, 0, (LPARAM) is);\r
       if (consoleEcho) {\r
-       ConsoleOutput(is->buf, is->count, TRUE);\r
+    ConsoleOutput(is->buf, is->count, TRUE);\r
       } else if (appData.localLineEditing) {\r
-       ConsoleOutput("\n", 1, TRUE);\r
+    ConsoleOutput("\n", 1, TRUE);\r
       }\r
       /* fall thru */\r
     case '\033': /* Escape key */\r
@@ -8117,23 +8117,23 @@ ConsoleInputSubclass(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       if (consoleEcho) {\r
         cf.crTextColor = textAttribs[ColorNormal].color;\r
       } else {\r
-       cf.crTextColor = COLOR_ECHOOFF;\r
+    cf.crTextColor = COLOR_ECHOOFF;\r
       }\r
       cf.dwEffects = textAttribs[ColorNormal].effects;\r
       SendMessage(hwnd, EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&cf);\r
       return 0;\r
     case '\t':   /* Tab key */\r
       if (GetKeyState(VK_SHIFT) < 0) {\r
-       /* shifted */\r
-       SetFocus(GetDlgItem(hwndConsole, OPT_ConsoleText));\r
+    /* shifted */\r
+    SetFocus(GetDlgItem(hwndConsole, OPT_ConsoleText));\r
       } else {\r
-       /* unshifted */\r
-       if (IsIconic(hwndMain)) ShowWindow(hwndMain, SW_RESTORE);\r
-       if (buttonDesc[0].hwnd) {\r
-         SetFocus(buttonDesc[0].hwnd);\r
-       } else {\r
-         SetFocus(hwndMain);\r
-       }\r
+    /* unshifted */\r
+    if (IsIconic(hwndMain)) ShowWindow(hwndMain, SW_RESTORE);\r
+    if (buttonDesc[0].hwnd) {\r
+      SetFocus(buttonDesc[0].hwnd);\r
+    } else {\r
+      SetFocus(hwndMain);\r
+    }\r
       }\r
       return 0;\r
     case '\023': /* Ctrl+S */\r
@@ -8153,20 +8153,20 @@ ConsoleInputSubclass(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       GetWindowText(hwnd, buf, MSG_SIZ);\r
       p = PrevInHistory(buf);\r
       if (p != NULL) {\r
-       SetWindowText(hwnd, p);\r
-       sel.cpMin = 999999;\r
-       sel.cpMax = 999999;\r
-       SendMessage(hwnd, EM_EXSETSEL, 0, (LPARAM)&sel);\r
+    SetWindowText(hwnd, p);\r
+    sel.cpMin = 999999;\r
+    sel.cpMax = 999999;\r
+    SendMessage(hwnd, EM_EXSETSEL, 0, (LPARAM)&sel);\r
         return 0;\r
       }\r
       break;\r
     case VK_DOWN:\r
       p = NextInHistory();\r
       if (p != NULL) {\r
-       SetWindowText(hwnd, p);\r
-       sel.cpMin = 999999;\r
-       sel.cpMax = 999999;\r
-       SendMessage(hwnd, EM_EXSETSEL, 0, (LPARAM)&sel);\r
+    SetWindowText(hwnd, p);\r
+    sel.cpMin = 999999;\r
+    sel.cpMax = 999999;\r
+    SendMessage(hwnd, EM_EXSETSEL, 0, (LPARAM)&sel);\r
         return 0;\r
       }\r
       break;\r
@@ -8181,12 +8181,12 @@ ConsoleInputSubclass(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
     }\r
     break;\r
   case WM_MBUTTONDOWN:\r
-    SendDlgItemMessage(hwndConsole, OPT_ConsoleText, \r
+    SendDlgItemMessage(hwndConsole, OPT_ConsoleText,\r
       WM_COMMAND, MAKEWPARAM(IDM_QuickPaste, 0), 0);\r
     break;\r
   case WM_RBUTTONUP:\r
     if (GetKeyState(VK_SHIFT) & ~1) {\r
-      SendDlgItemMessage(hwndConsole, OPT_ConsoleText, \r
+      SendDlgItemMessage(hwndConsole, OPT_ConsoleText,\r
         WM_COMMAND, MAKEWPARAM(IDM_QuickPaste, 0), 0);\r
     } else {\r
       POINT pt;\r
@@ -8206,7 +8206,7 @@ ConsoleInputSubclass(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
     }\r
     return 0;\r
   case WM_COMMAND:\r
-    switch (LOWORD(wParam)) { \r
+    switch (LOWORD(wParam)) {\r
     case IDM_Undo:\r
       SendMessage(hwnd, EM_UNDO, 0, 0);\r
       return 0;\r
@@ -8245,6 +8245,23 @@ ConsoleWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
   MINMAXINFO *mmi;\r
 \r
   switch (message) {\r
+  case WM_NOTIFY:\r
+    if (((NMHDR*)lParam)->code == EN_LINK)\r
+    {\r
+      ENLINK *pLink = (ENLINK*)lParam;\r
+      if (pLink->msg == WM_LBUTTONUP)\r
+      {\r
+          TEXTRANGE tr;\r
+\r
+          tr.chrg = pLink->chrg;\r
+          tr.lpstrText = malloc(1+tr.chrg.cpMax-tr.chrg.cpMin);\r
+          hText = GetDlgItem(hDlg, OPT_ConsoleText);\r
+          SendMessage(hText, EM_GETTEXTRANGE, 0, (LPARAM)&tr);\r
+          ShellExecute(NULL, "open", tr.lpstrText, NULL, NULL, SW_SHOW);\r
+          free(tr.lpstrText);\r
+      }\r
+    }\r
+    break;\r
   case WM_INITDIALOG: /* message: initialize dialog box */\r
     hwndConsole = hDlg;\r
     hText = GetDlgItem(hDlg, OPT_ConsoleText);\r
@@ -8263,7 +8280,7 @@ ConsoleWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
     sizeX = rect.right;\r
     sizeY = rect.bottom;\r
     if (wpConsole.x != CW_USEDEFAULT && wpConsole.y != CW_USEDEFAULT &&\r
-       wpConsole.width != CW_USEDEFAULT && wpConsole.height != CW_USEDEFAULT) {\r
+    wpConsole.width != CW_USEDEFAULT && wpConsole.height != CW_USEDEFAULT) {\r
       WINDOWPLACEMENT wp;\r
       EnsureOnScreen(&wpConsole.x, &wpConsole.y, 0, 0);\r
       wp.length = sizeof(WINDOWPLACEMENT);\r
@@ -8319,19 +8336,19 @@ ConsoleWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
       newTextWidth = rectText.right - rectText.left + newSizeX - sizeX;\r
       newTextHeight = rectText.bottom - rectText.top + newSizeY - sizeY;\r
       if (newTextHeight < 0) {\r
-       newSizeY += -newTextHeight;\r
+    newSizeY += -newTextHeight;\r
         newTextHeight = 0;\r
       }\r
       SetWindowPos(hText, NULL, 0, 0,\r
-       newTextWidth, newTextHeight, SWP_NOZORDER|SWP_NOMOVE);\r
+    newTextWidth, newTextHeight, SWP_NOZORDER|SWP_NOMOVE);\r
       GetWindowRect(hInput, &rectInput); /* gives screen coords */\r
       pt.x = rectInput.left;\r
       pt.y = rectInput.top + newSizeY - sizeY;\r
       ScreenToClient(hDlg, &pt);\r
-      SetWindowPos(hInput, NULL, \r
-       pt.x, pt.y, /* needs client coords */   \r
-       rectInput.right - rectInput.left + newSizeX - sizeX,\r
-       rectInput.bottom - rectInput.top, SWP_NOZORDER);\r
+      SetWindowPos(hInput, NULL,\r
+    pt.x, pt.y, /* needs client coords */\r
+    rectInput.right - rectInput.left + newSizeX - sizeX,\r
+    rectInput.bottom - rectInput.top, SWP_NOZORDER);\r
     }\r
     sizeX = newSizeX;\r
     sizeY = newSizeY;\r
@@ -8365,10 +8382,17 @@ ConsoleWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
 VOID\r
 ConsoleCreate()\r
 {\r
-  HWND hCons;\r
+  HWND hCons, hText;\r
+  WORD wMask;\r
   if (hwndConsole) return;\r
   hCons = CreateDialog(hInst, szConsoleName, 0, NULL);\r
   SendMessage(hCons, WM_INITDIALOG, 0, 0);\r
+\r
+  // make the text item in the console do URL links\r
+  hText = GetDlgItem(hCons, OPT_ConsoleText);\r
+  wMask = SendMessage(hText, EM_GETEVENTMASK, 0, 0L);\r
+  SendMessage(hText, EM_SETEVENTMASK, 0, wMask | ENM_LINK);\r
+  SendMessage(hText, EM_AUTOURLDETECT, TRUE, 0L);\r
 }\r
 \r
 \r
@@ -8395,10 +8419,10 @@ ConsoleOutput(char* data, int length, int forceVisible)
   while (length--) {\r
     if (*p == '\n') {\r
       if (*++p) {\r
-       *q++ = '\r';\r
-       *q++ = '\n';\r
+    *q++ = '\r';\r
+    *q++ = '\n';\r
       } else {\r
-       delayLF = 1;\r
+    delayLF = 1;\r
       }\r
     } else if (*p == '\007') {\r
        MyPlaySound(&sounds[(int)SoundBell]);\r
@@ -8526,8 +8550,8 @@ DisplayAClock(HDC hdc, int timeRemaining, int highlight,
   JAWS_SILENCE\r
 \r
   ExtTextOut(hdc, rect->left + MESSAGE_LINE_LEFTMARGIN,\r
-            rect->top, ETO_CLIPPED|ETO_OPAQUE,\r
-            rect, str, strlen(str), NULL);\r
+         rect->top, ETO_CLIPPED|ETO_OPAQUE,\r
+         rect, str, strlen(str), NULL);\r
   if(logoHeight > 0 && appData.clockMode) {\r
       RECT r;\r
       sprintf(buf, "%s %s", buf+7, flagFell);\r
@@ -8536,8 +8560,8 @@ DisplayAClock(HDC hdc, int timeRemaining, int highlight,
       r.right = rect->right;\r
       r.bottom = rect->bottom;\r
       ExtTextOut(hdc, rect->left + MESSAGE_LINE_LEFTMARGIN,\r
-                r.top, ETO_CLIPPED|ETO_OPAQUE,\r
-                &r, str, strlen(str), NULL);\r
+             r.top, ETO_CLIPPED|ETO_OPAQUE,\r
+             &r, str, strlen(str), NULL);\r
   }\r
   (void) SetTextColor(hdc, oldFg);\r
   (void) SetBkColor(hdc, oldBg);\r
@@ -8547,7 +8571,7 @@ DisplayAClock(HDC hdc, int timeRemaining, int highlight,
 \r
 int\r
 DoReadFile(HANDLE hFile, char *buf, int count, DWORD *outCount,\r
-          OVERLAPPED *ovl)\r
+       OVERLAPPED *ovl)\r
 {\r
   int ok, err;\r
 \r
@@ -8570,9 +8594,9 @@ DoReadFile(HANDLE hFile, char *buf, int count, DWORD *outCount,
     if (err == ERROR_IO_PENDING) {\r
       ok = GetOverlappedResult(hFile, ovl, outCount, TRUE);\r
       if (ok)\r
-       err = NO_ERROR;\r
+    err = NO_ERROR;\r
       else\r
-       err = GetLastError();\r
+    err = GetLastError();\r
     }\r
   }\r
   return err;\r
@@ -8580,7 +8604,7 @@ DoReadFile(HANDLE hFile, char *buf, int count, DWORD *outCount,
 \r
 int\r
 DoWriteFile(HANDLE hFile, char *buf, int count, DWORD *outCount,\r
-           OVERLAPPED *ovl)\r
+        OVERLAPPED *ovl)\r
 {\r
   int ok, err;\r
 \r
@@ -8594,9 +8618,9 @@ DoWriteFile(HANDLE hFile, char *buf, int count, DWORD *outCount,
     if (err == ERROR_IO_PENDING) {\r
       ok = GetOverlappedResult(hFile, ovl, outCount, TRUE);\r
       if (ok)\r
-       err = NO_ERROR;\r
+    err = NO_ERROR;\r
       else\r
-       err = GetLastError();\r
+    err = GetLastError();\r
     }\r
   }\r
   return err;\r
@@ -8608,7 +8632,7 @@ void CheckForInputBufferFull( InputSource * is )
     if( is->lineByLine && (is->next - is->buf) >= INPUT_SOURCE_BUF_SIZE ) {\r
         /* Look for end of line */\r
         char * p = is->buf;\r
-        \r
+\r
         while( p < is->next && *p != '\n' ) {\r
             p++;\r
         }\r
@@ -8636,18 +8660,18 @@ InputThread(LPVOID arg)
   ovl.Internal = ovl.InternalHigh = ovl.Offset = ovl.OffsetHigh = 0;\r
   while (is->hThread != NULL) {\r
     is->error = DoReadFile(is->hFile, is->next,\r
-                          INPUT_SOURCE_BUF_SIZE - (is->next - is->buf),\r
-                          &is->count, &ovl);\r
+               INPUT_SOURCE_BUF_SIZE - (is->next - is->buf),\r
+               &is->count, &ovl);\r
     if (is->error == NO_ERROR) {\r
       is->next += is->count;\r
     } else {\r
       if (is->error == ERROR_BROKEN_PIPE) {\r
-       /* Correct for MS brain damage.  EOF reading a pipe is not an error. */\r
-       is->count = 0;\r
+    /* Correct for MS brain damage.  EOF reading a pipe is not an error. */\r
+    is->count = 0;\r
       } else {\r
-       is->count = (DWORD) -1;\r
+    is->count = (DWORD) -1;\r
         /* [AS] The (is->count <= 0) check below is not useful for unsigned values! */\r
-        break; \r
+        break;\r
       }\r
     }\r
 \r
@@ -8683,37 +8707,37 @@ NonOvlInputThread(LPVOID arg)
   is = (InputSource *) arg;\r
   while (is->hThread != NULL) {\r
     is->error = ReadFile(is->hFile, is->next,\r
-                        INPUT_SOURCE_BUF_SIZE - (is->next - is->buf),\r
-                        &is->count, NULL) ? NO_ERROR : GetLastError();\r
+             INPUT_SOURCE_BUF_SIZE - (is->next - is->buf),\r
+             &is->count, NULL) ? NO_ERROR : GetLastError();\r
     if (is->error == NO_ERROR) {\r
       /* Change CRLF to LF */\r
       if (is->next > is->buf) {\r
-       p = is->next - 1;\r
-       i = is->count + 1;\r
+    p = is->next - 1;\r
+    i = is->count + 1;\r
       } else {\r
-       p = is->next;\r
-       i = is->count;\r
+    p = is->next;\r
+    i = is->count;\r
       }\r
       q = p;\r
       prev = NULLCHAR;\r
       while (i > 0) {\r
-       if (prev == '\r' && *p == '\n') {\r
-         *(q-1) = '\n';\r
-         is->count--;\r
-       } else { \r
-         *q++ = *p;\r
-       }\r
-       prev = *p++;\r
-       i--;\r
+    if (prev == '\r' && *p == '\n') {\r
+      *(q-1) = '\n';\r
+      is->count--;\r
+    } else {\r
+      *q++ = *p;\r
+    }\r
+    prev = *p++;\r
+    i--;\r
       }\r
       *q = NULLCHAR;\r
       is->next = q;\r
     } else {\r
       if (is->error == ERROR_BROKEN_PIPE) {\r
-       /* Correct for MS brain damage.  EOF reading a pipe is not an error. */\r
-       is->count = 0; \r
+    /* Correct for MS brain damage.  EOF reading a pipe is not an error. */\r
+    is->count = 0;\r
       } else {\r
-       is->count = (DWORD) -1;\r
+    is->count = (DWORD) -1;\r
       }\r
     }\r
 \r
@@ -8744,8 +8768,8 @@ SocketInputThread(LPVOID arg)
       is->error = NO_ERROR;\r
       is->next += is->count;\r
       if (is->count == 0 && is->second == is) {\r
-       /* End of file on stderr; quit with no message */\r
-       break;\r
+    /* End of file on stderr; quit with no message */\r
+    break;\r
       }\r
     }\r
     SendMessage(hwndMain, WM_USER_Input, 0, (LPARAM) is);\r
@@ -8769,11 +8793,11 @@ InputEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
     char *q = p;\r
     while (q < is->next) {\r
       if (*q++ == '\n') {\r
-       (is->func)(is, is->closure, p, q - p, NO_ERROR);\r
-       p = q;\r
+    (is->func)(is, is->closure, p, q - p, NO_ERROR);\r
+    p = q;\r
       }\r
     }\r
-    \r
+\r
     /* Move any partial line to the start of the buffer */\r
     q = is->buf;\r
     while (p < is->next) {\r
@@ -8783,8 +8807,8 @@ InputEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
 \r
     if (is->error != NO_ERROR || is->count == 0) {\r
       /* Notify backend of the error.  Note: If there was a partial\r
-        line at the end, it is not flushed through. */\r
-      (is->func)(is, is->closure, is->buf, is->count, is->error);   \r
+     line at the end, it is not flushed through. */\r
+      (is->func)(is, is->closure, is->buf, is->count, is->error);\r
     }\r
   } else {\r
     /* Feed in the whole chunk of input at once */\r
@@ -8949,7 +8973,7 @@ Enables userThinkingEnables[] = {
  *\r
  *  Front-end interface functions exported by XBoard.\r
  *  Functions appear in same order as prototypes in frontend.h.\r
- * \r
+ *\r
 \*---------------------------------------------------------------------------*/\r
 VOID\r
 ModeHighlight()\r
@@ -8961,7 +8985,7 @@ ModeHighlight()
   if (pausing != prevPausing) {\r
     prevPausing = pausing;\r
     (void) CheckMenuItem(GetMenu(hwndMain), IDM_Pause,\r
-                        MF_BYCOMMAND|(pausing ? MF_CHECKED : MF_UNCHECKED));\r
+             MF_BYCOMMAND|(pausing ? MF_CHECKED : MF_UNCHECKED));\r
     if (hwndPause) SetWindowText(hwndPause, pausing ? "C" : "P");\r
   }\r
 \r
@@ -9014,17 +9038,17 @@ ModeHighlight()
   }\r
   if (prevChecked != 0)\r
     (void) CheckMenuItem(GetMenu(hwndMain),\r
-                        prevChecked, MF_BYCOMMAND|MF_UNCHECKED);\r
+             prevChecked, MF_BYCOMMAND|MF_UNCHECKED);\r
   if (nowChecked != 0)\r
     (void) CheckMenuItem(GetMenu(hwndMain),\r
-                        nowChecked, MF_BYCOMMAND|MF_CHECKED);\r
+             nowChecked, MF_BYCOMMAND|MF_CHECKED);\r
 \r
   if (nowChecked == IDM_LoadGame || nowChecked == IDM_Training) {\r
-    (void) EnableMenuItem(GetMenu(hwndMain), IDM_Training, \r
-                         MF_BYCOMMAND|MF_ENABLED);\r
+    (void) EnableMenuItem(GetMenu(hwndMain), IDM_Training,\r
+              MF_BYCOMMAND|MF_ENABLED);\r
   } else {\r
-    (void) EnableMenuItem(GetMenu(hwndMain), \r
-                         IDM_Training, MF_BYCOMMAND|MF_GRAYED);\r
+    (void) EnableMenuItem(GetMenu(hwndMain),\r
+              IDM_Training, MF_BYCOMMAND|MF_GRAYED);\r
   }\r
 \r
   prevChecked = nowChecked;\r
@@ -9080,7 +9104,7 @@ SetCmailMode()
   SetMenuEnables(GetMenu(hwndMain), cmailEnables);\r
 }\r
 \r
-VOID \r
+VOID\r
 SetTrainingModeOn()\r
 {\r
   int i;\r
@@ -9136,7 +9160,7 @@ DisplayTitle(char *str)
   } else if (appData.icsActive) {\r
     if (appData.icsCommPort[0] != NULLCHAR)\r
       host = "ICS";\r
-    else \r
+    else\r
       host = appData.icsHost;\r
     sprintf(title, "%s: %s", szTitle, host);\r
   } else if (appData.noChessProgram) {\r
@@ -9185,7 +9209,7 @@ DisplayMessage(char *str1, char *str2)
   hdc = GetDC(hwndMain);\r
   oldFont = SelectObject(hdc, font[boardSize][MESSAGE_FONT]->hf);\r
   ExtTextOut(hdc, messageRect.left, messageRect.top, ETO_CLIPPED|ETO_OPAQUE,\r
-            &messageRect, messageText, strlen(messageText), NULL);\r
+         &messageRect, messageText, strlen(messageText), NULL);\r
   (void) SelectObject(hdc, oldFont);\r
   (void) ReleaseDC(hwndMain, hdc);\r
 }\r
@@ -9200,21 +9224,21 @@ DisplayError(char *str, int error)
     strcpy(buf, str);\r
   } else {\r
     len = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,\r
-                       NULL, error, LANG_NEUTRAL,\r
-                       (LPSTR) buf2, MSG_SIZ, NULL);\r
+            NULL, error, LANG_NEUTRAL,\r
+            (LPSTR) buf2, MSG_SIZ, NULL);\r
     if (len > 0) {\r
       sprintf(buf, "%s:\n%s", str, buf2);\r
     } else {\r
       ErrorMap *em = errmap;\r
       while (em->err != 0 && em->err != error) em++;\r
       if (em->err != 0) {\r
-       sprintf(buf, "%s:\n%s", str, em->msg);\r
+    sprintf(buf, "%s:\n%s", str, em->msg);\r
       } else {\r
-       sprintf(buf, "%s:\nError code %d", str, error);\r
+    sprintf(buf, "%s:\nError code %d", str, error);\r
       }\r
     }\r
   }\r
-  \r
+\r
   ErrorPopUp("Error", buf);\r
 }\r
 \r
@@ -9242,17 +9266,17 @@ DisplayFatalError(char *str, int error, int exitStatus)
 \r
   if (error != 0) {\r
     len = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,\r
-                       NULL, error, LANG_NEUTRAL,\r
-                       (LPSTR) buf2, MSG_SIZ, NULL);\r
+            NULL, error, LANG_NEUTRAL,\r
+            (LPSTR) buf2, MSG_SIZ, NULL);\r
     if (len > 0) {\r
       sprintf(buf, "%s:\n%s", str, buf2);\r
     } else {\r
       ErrorMap *em = errmap;\r
       while (em->err != 0 && em->err != error) em++;\r
       if (em->err != 0) {\r
-       sprintf(buf, "%s:\n%s", str, em->msg);\r
+    sprintf(buf, "%s:\n%s", str, em->msg);\r
       } else {\r
-       sprintf(buf, "%s:\nError code %d", str, error);\r
+    sprintf(buf, "%s:\nError code %d", str, error);\r
       }\r
     }\r
     str = buf;\r
@@ -9262,7 +9286,7 @@ DisplayFatalError(char *str, int error, int exitStatus)
   }\r
   if (appData.popupExitMessage) {\r
     (void) MessageBox(hwndMain, str, label, MB_OK|\r
-                     (exitStatus ? MB_ICONSTOP : MB_ICONINFORMATION));\r
+              (exitStatus ? MB_ICONSTOP : MB_ICONINFORMATION));\r
   }\r
   ExitEvent(exitStatus);\r
 }\r
@@ -9331,7 +9355,7 @@ AskQuestion(char* title, char *question, char *replyPrefix, ProcRef pr)
 {\r
     QuestionParams qp;\r
     FARPROC lpProc;\r
-    \r
+\r
     qp.title = title;\r
     qp.question = question;\r
     qp.replyPrefix = replyPrefix;\r
@@ -9368,10 +9392,10 @@ LRESULT CALLBACK NewGameFRC_Proc(HWND hDlg, UINT message, WPARAM wParam, LPARAM
         case IDOK:\r
             *lpIndexFRC = GetDlgItemInt(hDlg, IDC_NFG_Edit, &index_is_ok, TRUE );\r
             EndDialog( hDlg, 0 );\r
-           shuffleOpenings = TRUE; /* [HGM] shuffle: switch shuffling on for as long as we stay in current variant */\r
+        shuffleOpenings = TRUE; /* [HGM] shuffle: switch shuffling on for as long as we stay in current variant */\r
             return TRUE;\r
         case IDCANCEL:\r
-            EndDialog( hDlg, 1 );   \r
+            EndDialog( hDlg, 1 );\r
             return TRUE;\r
         case IDC_NFG_Edit:\r
             if( HIWORD(wParam) == EN_CHANGE ) {\r
@@ -9532,7 +9556,7 @@ LRESULT CALLBACK GameListOptions_Proc(HWND hDlg, UINT message, WPARAM wParam, LP
     {\r
     case WM_INITDIALOG:\r
         lpUserGLT = (char *) lParam;\r
-        \r
+\r
         strcpy( glt, lpUserGLT );\r
 \r
         CenterWindow(hDlg, GetWindow(hDlg, GW_OWNER));\r
@@ -9603,7 +9627,7 @@ int GameListOptions()
 \r
     if( result == 0 ) {\r
         /* [AS] Memory leak here! */\r
-        appData.gameListTags = strdup( glt ); \r
+        appData.gameListTags = strdup( glt );\r
     }\r
 \r
     return result;\r
@@ -9622,7 +9646,7 @@ DisplayIcsInteractionTitle(char *str)
 void\r
 DrawPosition(int fullRedraw, Board board)\r
 {\r
-  HDCDrawPosition(NULL, (BOOLEAN) fullRedraw, board); \r
+  HDCDrawPosition(NULL, (BOOLEAN) fullRedraw, board);\r
 }\r
 \r
 \r
@@ -9743,8 +9767,8 @@ UserName()
   static char buf[MSG_SIZ];\r
   DWORD bufsiz = MSG_SIZ;\r
 \r
-  if(appData.userName != NULL && appData.userName[0] != 0) { \r
-       return appData.userName; /* [HGM] username: prefer name selected by user over his system login */\r
+  if(appData.userName != NULL && appData.userName[0] != 0) {\r
+    return appData.userName; /* [HGM] username: prefer name selected by user over his system login */\r
   }\r
   if (!GetUserName(buf, &bufsiz)) {\r
     /*DisplayError("Error getting user name", GetLastError());*/\r
@@ -9786,7 +9810,7 @@ void
 StartClockTimer(long millisec)\r
 {\r
   clockTimerEvent = SetTimer(hwndMain, (UINT) CLOCK_TIMER_ID,\r
-                            (UINT) millisec, NULL);\r
+                 (UINT) millisec, NULL);\r
 }\r
 \r
 void\r
@@ -9798,8 +9822,8 @@ DisplayWhiteClock(long timeRemaining, int highlight)
   if(appData.noGUI) return;\r
   hdc = GetDC(hwndMain);\r
   if (!IsIconic(hwndMain)) {\r
-    DisplayAClock(hdc, timeRemaining, highlight, \r
-                       flipClock ? &blackRect : &whiteRect, "White", flag);\r
+    DisplayAClock(hdc, timeRemaining, highlight,\r
+            flipClock ? &blackRect : &whiteRect, "White", flag);\r
   }\r
   if (highlight && iconCurrent == iconBlack) {\r
     iconCurrent = iconWhite;\r
@@ -9822,8 +9846,8 @@ DisplayBlackClock(long timeRemaining, int highlight)
   if(appData.noGUI) return;\r
   hdc = GetDC(hwndMain);\r
   if (!IsIconic(hwndMain)) {\r
-    DisplayAClock(hdc, timeRemaining, highlight, \r
-                       flipClock ? &whiteRect : &blackRect, "Black", flag);\r
+    DisplayAClock(hdc, timeRemaining, highlight,\r
+            flipClock ? &whiteRect : &blackRect, "Black", flag);\r
   }\r
   if (highlight && iconCurrent == iconWhite) {\r
     iconCurrent = iconBlack;\r
@@ -9857,7 +9881,7 @@ void
 StartLoadGameTimer(long millisec)\r
 {\r
   loadGameTimerEvent = SetTimer(hwndMain, (UINT) LOAD_GAME_TIMER_ID,\r
-                               (UINT) millisec, NULL);\r
+                (UINT) millisec, NULL);\r
 }\r
 \r
 void\r
@@ -9869,9 +9893,9 @@ AutoSaveGame()
 \r
   defName = DefaultFileName(appData.oldSaveStyle ? "gam" : "pgn");\r
   f = OpenFileDialog(hwndMain, "a", defName,\r
-                    appData.oldSaveStyle ? "gam" : "pgn",\r
-                    GAME_FILT, \r
-                    "Save Game to File", NULL, fileTitle, NULL);\r
+             appData.oldSaveStyle ? "gam" : "pgn",\r
+             GAME_FILT,\r
+             "Save Game to File", NULL, fileTitle, NULL);\r
   if (f != NULL) {\r
     SaveGame(f, 0, "");\r
     fclose(f);\r
@@ -9893,7 +9917,7 @@ ScheduleDelayedEvent(DelayedEventCallback cb, long millisec)
   }\r
   delayedTimerCallback = cb;\r
   delayedTimerEvent = SetTimer(hwndMain, (UINT) DELAYED_TIMER_ID,\r
-                               (UINT) millisec, NULL);\r
+                (UINT) millisec, NULL);\r
 }\r
 \r
 DelayedEventCallback\r
@@ -9980,9 +10004,9 @@ StartChildProcess(char *cmdLine, char *dir, ProcRef *pr)
 \r
   /* Duplicate the read handle to the pipe, so it is not inherited. */\r
   fSuccess = DuplicateHandle(GetCurrentProcess(), hChildStdoutRd,\r
-                            GetCurrentProcess(), &hChildStdoutRdDup, 0,\r
-                            FALSE,     /* not inherited */\r
-                            DUPLICATE_SAME_ACCESS);\r
+                 GetCurrentProcess(), &hChildStdoutRdDup, 0,\r
+                 FALSE, /* not inherited */\r
+                 DUPLICATE_SAME_ACCESS);\r
   if (! fSuccess) {\r
     return GetLastError();\r
   }\r
@@ -10002,9 +10026,9 @@ StartChildProcess(char *cmdLine, char *dir, ProcRef *pr)
 \r
   /* Duplicate the write handle to the pipe, so it is not inherited. */\r
   fSuccess = DuplicateHandle(GetCurrentProcess(), hChildStdinWr,\r
-                            GetCurrentProcess(), &hChildStdinWrDup, 0,\r
-                            FALSE,     /* not inherited */\r
-                            DUPLICATE_SAME_ACCESS);\r
+                 GetCurrentProcess(), &hChildStdinWrDup, 0,\r
+                 FALSE, /* not inherited */\r
+                 DUPLICATE_SAME_ACCESS);\r
   if (! fSuccess) {\r
     return GetLastError();\r
   }\r
@@ -10031,15 +10055,15 @@ StartChildProcess(char *cmdLine, char *dir, ProcRef *pr)
   siStartInfo.hStdError = hChildStdoutWr;\r
 \r
   fSuccess = CreateProcess(NULL,\r
-                          cmdLine,        /* command line */\r
-                          NULL,           /* process security attributes */\r
-                          NULL,           /* primary thread security attrs */\r
-                          TRUE,           /* handles are inherited */\r
-                          DETACHED_PROCESS|CREATE_NEW_PROCESS_GROUP,\r
-                          NULL,           /* use parent's environment */\r
-                          NULL,\r
-                          &siStartInfo, /* STARTUPINFO pointer */\r
-                          &piProcInfo); /* receives PROCESS_INFORMATION */\r
+               cmdLine,    /* command line */\r
+               NULL,       /* process security attributes */\r
+               NULL,       /* primary thread security attrs */\r
+               TRUE,       /* handles are inherited */\r
+               DETACHED_PROCESS|CREATE_NEW_PROCESS_GROUP,\r
+               NULL,       /* use parent's environment */\r
+               NULL,\r
+               &siStartInfo, /* STARTUPINFO pointer */\r
+               &piProcInfo); /* receives PROCESS_INFORMATION */\r
 \r
   err = GetLastError();\r
   SetCurrentDirectory(buf); /* return to prev directory */\r
@@ -10099,7 +10123,7 @@ DestroyChildProcess(ProcRef pr, int/*boolean*/ signal)
     /*!!if (signal) GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT, cp->pid);*/\r
 \r
     /* [AS] Special termination modes for misbehaving programs... */\r
-    if( signal == 9 ) { \r
+    if( signal == 9 ) {\r
         result = TerminateProcess( cp->hProcess, 0 );\r
 \r
         if ( appData.debugMode) {\r
@@ -10252,7 +10276,7 @@ OpenTCP(char *host, char *port, ProcRef *pr)
 \r
   /* Make connection */\r
   if (connect(s, (struct sockaddr *) &sa,\r
-             sizeof(struct sockaddr_in)) == SOCKET_ERROR) {\r
+          sizeof(struct sockaddr_in)) == SOCKET_ERROR) {\r
     err = WSAGetLastError();\r
     WSACleanup();\r
     return err;\r
@@ -10281,7 +10305,7 @@ OpenCommPort(char *name, ProcRef *pr)
     strcpy(fullname, name);\r
 \r
   h = CreateFile(name, GENERIC_READ | GENERIC_WRITE,\r
-                0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);\r
+         0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);\r
   if (h == (HANDLE) -1) {\r
     return GetLastError();\r
   }\r
@@ -10374,15 +10398,15 @@ OpenRcmd(char* host, char* user, char* cmd, ProcRef* pr)
     }\r
     if (s == INVALID_SOCKET) {\r
       if ((s = socket(PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) {\r
-       err = WSAGetLastError();\r
-       WSACleanup();\r
-       return err;\r
+    err = WSAGetLastError();\r
+    WSACleanup();\r
+    return err;\r
       }\r
     }\r
     uport = (unsigned short) fromPort;\r
     mysa.sin_port = htons(uport);\r
     if (bind(s, (struct sockaddr *) &mysa, sizeof(struct sockaddr_in))\r
-       == SOCKET_ERROR) {\r
+    == SOCKET_ERROR) {\r
       err = WSAGetLastError();\r
       if (err == WSAEADDRINUSE) continue;\r
       WSACleanup();\r
@@ -10392,9 +10416,9 @@ OpenRcmd(char* host, char* user, char* cmd, ProcRef* pr)
       sizeof(struct sockaddr_in)) == SOCKET_ERROR) {\r
       err = WSAGetLastError();\r
       if (err == WSAEADDRINUSE) {\r
-       closesocket(s);\r
+    closesocket(s);\r
         s = -1;\r
-       continue;\r
+    continue;\r
       }\r
       WSACleanup();\r
       return err;\r
@@ -10417,16 +10441,16 @@ OpenRcmd(char* host, char* user, char* cmd, ProcRef* pr)
     }\r
     if (s2 == INVALID_SOCKET) {\r
       if ((s2 = socket(PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) {\r
-       err = WSAGetLastError();\r
-       closesocket(s);\r
-       WSACleanup();\r
-       return err;\r
+    err = WSAGetLastError();\r
+    closesocket(s);\r
+    WSACleanup();\r
+    return err;\r
       }\r
     }\r
     uport = (unsigned short) fromPort;\r
     mysa.sin_port = htons(uport);\r
     if (bind(s2, (struct sockaddr *) &mysa, sizeof(struct sockaddr_in))\r
-       == SOCKET_ERROR) {\r
+    == SOCKET_ERROR) {\r
       err = WSAGetLastError();\r
       if (err == WSAEADDRINUSE) continue;\r
       (void) closesocket(s);\r
@@ -10436,9 +10460,9 @@ OpenRcmd(char* host, char* user, char* cmd, ProcRef* pr)
     if (listen(s2, 1) == SOCKET_ERROR) {\r
       err = WSAGetLastError();\r
       if (err == WSAEADDRINUSE) {\r
-       closesocket(s2);\r
-       s2 = INVALID_SOCKET;\r
-       continue;\r
+    closesocket(s2);\r
+    s2 = INVALID_SOCKET;\r
+    continue;\r
       }\r
       (void) closesocket(s);\r
       (void) closesocket(s2);\r
@@ -10503,7 +10527,7 @@ OpenRcmd(char* host, char* user, char* cmd, ProcRef* pr)
 \r
 InputSourceRef\r
 AddInputSource(ProcRef pr, int lineByLine,\r
-              InputCallback func, VOIDSTAR closure)\r
+           InputCallback func, VOIDSTAR closure)\r
 {\r
   InputSource *is, *is2 = NULL;\r
   ChildProc *cp = (ChildProc *) pr;\r
@@ -10519,7 +10543,7 @@ AddInputSource(ProcRef pr, int lineByLine,
     consoleInputSource = is;\r
   } else {\r
     is->kind = cp->kind;\r
-    /* \r
+    /*\r
         [AS] Try to avoid a race condition if the thread is given control too early:\r
         we create all threads suspended so that the is->hThread variable can be\r
         safely assigned, then let the threads start with ResumeThread.\r
@@ -10529,23 +10553,23 @@ AddInputSource(ProcRef pr, int lineByLine,
       is->hFile = cp->hFrom;\r
       cp->hFrom = NULL; /* now owned by InputThread */\r
       is->hThread =\r
-       CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) NonOvlInputThread,\r
-                    (LPVOID) is, CREATE_SUSPENDED, &is->id);\r
+    CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) NonOvlInputThread,\r
+             (LPVOID) is, CREATE_SUSPENDED, &is->id);\r
       break;\r
 \r
     case CPComm:\r
       is->hFile = cp->hFrom;\r
       cp->hFrom = NULL; /* now owned by InputThread */\r
       is->hThread =\r
-       CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) InputThread,\r
-                    (LPVOID) is, CREATE_SUSPENDED, &is->id);\r
+    CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) InputThread,\r
+             (LPVOID) is, CREATE_SUSPENDED, &is->id);\r
       break;\r
 \r
     case CPSock:\r
       is->sock = cp->sock;\r
       is->hThread =\r
-       CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) SocketInputThread,\r
-                    (LPVOID) is, CREATE_SUSPENDED, &is->id);\r
+    CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) SocketInputThread,\r
+             (LPVOID) is, CREATE_SUSPENDED, &is->id);\r
       break;\r
 \r
     case CPRcmd:\r
@@ -10556,11 +10580,11 @@ AddInputSource(ProcRef pr, int lineByLine,
       is2->sock = cp->sock2;\r
       is2->second = is2;\r
       is->hThread =\r
-       CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) SocketInputThread,\r
-                    (LPVOID) is, CREATE_SUSPENDED, &is->id);\r
+    CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) SocketInputThread,\r
+             (LPVOID) is, CREATE_SUSPENDED, &is->id);\r
       is2->hThread =\r
-       CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) SocketInputThread,\r
-                    (LPVOID) is2, CREATE_SUSPENDED, &is2->id);\r
+    CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) SocketInputThread,\r
+             (LPVOID) is2, CREATE_SUSPENDED, &is2->id);\r
       break;\r
     }\r
 \r
@@ -10602,7 +10626,7 @@ OutputToProcess(ProcRef pr, char *message, int count, int *outError)
   if (pr == NoProc) {\r
     ConsoleOutput(message, count, FALSE);\r
     return count;\r
-  } \r
+  }\r
 \r
   if (ovl.hEvent == NULL) {\r
     ovl.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);\r
@@ -10622,7 +10646,7 @@ OutputToProcess(ProcRef pr, char *message, int count, int *outError)
 \r
   case CPReal:\r
     if (WriteFile(((ChildProc *)pr)->hTo, message, count,\r
-                 &dOutCount, NULL)) {\r
+          &dOutCount, NULL)) {\r
       *outError = NO_ERROR;\r
       outCount = (int) dOutCount;\r
     } else {\r
@@ -10632,7 +10656,7 @@ OutputToProcess(ProcRef pr, char *message, int count, int *outError)
 \r
   case CPComm:\r
     *outError = DoWriteFile(((ChildProc *)pr)->hTo, message, count,\r
-                           &dOutCount, &ovl);\r
+                &dOutCount, &ovl);\r
     if (*outError == NO_ERROR) {\r
       outCount = (int) dOutCount;\r
     }\r
@@ -10643,7 +10667,7 @@ OutputToProcess(ProcRef pr, char *message, int count, int *outError)
 \r
 int\r
 OutputToProcessDelayed(ProcRef pr, char *message, int count, int *outError,\r
-                      long msdelay)\r
+               long msdelay)\r
 {\r
   /* Ignore delay, not implemented for WinBoard */\r
   return OutputToProcess(pr, message, count, outError);\r
@@ -10652,7 +10676,7 @@ OutputToProcessDelayed(ProcRef pr, char *message, int count, int *outError,
 \r
 void\r
 CmailSigHandlerCallBack(InputSourceRef isr, VOIDSTAR closure,\r
-                       char *buf, int count, int error)\r
+            char *buf, int count, int error)\r
 {\r
   DisplayFatalError("Not implemented", 0, 1);\r
 }\r
@@ -10683,7 +10707,7 @@ StartAnalysisClock()
 {\r
   if (analysisTimerEvent) return;\r
   analysisTimerEvent = SetTimer(hwndMain, (UINT) ANALYSIS_TIMER_ID,\r
-                                       (UINT) 2000, NULL);\r
+                                (UINT) 2000, NULL);\r
 }\r
 \r
 LRESULT CALLBACK\r
@@ -10709,26 +10733,26 @@ AnalysisDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
       sizeX = rect.right;\r
       sizeY = rect.bottom;\r
       if (analysisX != CW_USEDEFAULT && analysisY != CW_USEDEFAULT &&\r
-         analysisW != CW_USEDEFAULT && analysisH != CW_USEDEFAULT) {\r
-       WINDOWPLACEMENT wp;\r
-       EnsureOnScreen(&analysisX, &analysisY, 0, 0);\r
-       wp.length = sizeof(WINDOWPLACEMENT);\r
-       wp.flags = 0;\r
-       wp.showCmd = SW_SHOW;\r
-       wp.ptMaxPosition.x = wp.ptMaxPosition.y = 0;\r
-       wp.rcNormalPosition.left = analysisX;\r
-       wp.rcNormalPosition.right = analysisX + analysisW;\r
-       wp.rcNormalPosition.top = analysisY;\r
-       wp.rcNormalPosition.bottom = analysisY + analysisH;\r
-       SetWindowPlacement(hDlg, &wp);\r
-\r
-       GetClientRect(hDlg, &rect);\r
-       newSizeX = rect.right;\r
-       newSizeY = rect.bottom;\r
+      analysisW != CW_USEDEFAULT && analysisH != CW_USEDEFAULT) {\r
+    WINDOWPLACEMENT wp;\r
+    EnsureOnScreen(&analysisX, &analysisY, 0, 0);\r
+    wp.length = sizeof(WINDOWPLACEMENT);\r
+    wp.flags = 0;\r
+    wp.showCmd = SW_SHOW;\r
+    wp.ptMaxPosition.x = wp.ptMaxPosition.y = 0;\r
+    wp.rcNormalPosition.left = analysisX;\r
+    wp.rcNormalPosition.right = analysisX + analysisW;\r
+    wp.rcNormalPosition.top = analysisY;\r
+    wp.rcNormalPosition.bottom = analysisY + analysisH;\r
+    SetWindowPlacement(hDlg, &wp);\r
+\r
+    GetClientRect(hDlg, &rect);\r
+    newSizeX = rect.right;\r
+    newSizeY = rect.bottom;\r
         ResizeEditPlusButtons(hDlg, hwndText, sizeX, sizeY,\r
-                             newSizeX, newSizeY);\r
-       sizeX = newSizeX;\r
-       sizeY = newSizeY;\r
+                  newSizeX, newSizeY);\r
+    sizeX = newSizeX;\r
+    sizeY = newSizeY;\r
       }\r
     }\r
     return FALSE;\r
@@ -10795,10 +10819,10 @@ AnalysisPopUp(char* title, char* str)
     analysisTitle = title;\r
     lpProc = MakeProcInstance((FARPROC)AnalysisDialog, hInst);\r
     CreateDialog(hInst, MAKEINTRESOURCE(DLG_Analysis),\r
-                hwndMain, (DLGPROC)lpProc);\r
+         hwndMain, (DLGPROC)lpProc);\r
     FreeProcInstance(lpProc);\r
   }\r
-  analysisDialogUp = TRUE;  \r
+  analysisDialogUp = TRUE;\r
 }\r
 \r
 VOID\r
@@ -10807,7 +10831,7 @@ AnalysisPopDown()
   if (analysisDialog) {\r
     ShowWindow(analysisDialog, SW_HIDE);\r
   }\r
-  analysisDialogUp = FALSE;  \r
+  analysisDialogUp = FALSE;\r
 }\r
 \r
 \r
@@ -10823,7 +10847,7 @@ SetHighlights(int fromX, int fromY, int toX, int toY)
 VOID\r
 ClearHighlights()\r
 {\r
-  highlightInfo.sq[0].x = highlightInfo.sq[0].y = \r
+  highlightInfo.sq[0].x = highlightInfo.sq[0].y =\r
     highlightInfo.sq[1].x = highlightInfo.sq[1].y = -1;\r
 }\r
 \r
@@ -10839,7 +10863,7 @@ SetPremoveHighlights(int fromX, int fromY, int toX, int toY)
 VOID\r
 ClearPremoveHighlights()\r
 {\r
-  premoveHighlightInfo.sq[0].x = premoveHighlightInfo.sq[0].y = \r
+  premoveHighlightInfo.sq[0].x = premoveHighlightInfo.sq[0].y =\r
     premoveHighlightInfo.sq[1].x = premoveHighlightInfo.sq[1].y = -1;\r
 }\r
 \r
@@ -10869,20 +10893,20 @@ static void Tween( POINT * start, POINT * mid, POINT * finish, int factor,
 \r
 void\r
 AnimateAtomicCapture(int fromX, int fromY, int toX, int toY, int nFrames)\r
-{      // [HGM] atomic: animate blast wave\r
-       int i;\r
+{   // [HGM] atomic: animate blast wave\r
+    int i;\r
 if(appData.debugMode) fprintf(debugFP, "exploding (%d,%d)\n", toX, toY);\r
-       explodeInfo.fromX = fromX;\r
-       explodeInfo.fromY = fromY;\r
-       explodeInfo.toX = toX;\r
-       explodeInfo.toY = toY;\r
-       for(i=1; i<nFrames; i++) {\r
-           explodeInfo.radius = (i*180)/(nFrames-1);\r
-           DrawPosition(FALSE, NULL);\r
-           Sleep(appData.animSpeed);\r
-       }\r
-       explodeInfo.radius = 0;\r
-       DrawPosition(TRUE, NULL);\r
+    explodeInfo.fromX = fromX;\r
+    explodeInfo.fromY = fromY;\r
+    explodeInfo.toX = toX;\r
+    explodeInfo.toY = toY;\r
+    for(i=1; i<nFrames; i++) {\r
+        explodeInfo.radius = (i*180)/(nFrames-1);\r
+        DrawPosition(FALSE, NULL);\r
+        Sleep(appData.animSpeed);\r
+    }\r
+    explodeInfo.radius = 0;\r
+    DrawPosition(TRUE, NULL);\r
 }\r
 \r
 #define kFactor 4\r
@@ -10923,7 +10947,7 @@ AnimateMove(board, fromX, fromY, toX, toY)
        mid.y = start.y + (finish.y - start.y) / 2;\r
      }\r
   }\r
-  \r
+\r
   /* Don't use as many frames for very short moves */\r
   if (abs(toY - fromY) + abs(toX - fromX) <= 2)\r
     Tween(&start, &mid, &finish, kFactor - 1, frames, &nFrames);\r
@@ -10945,9 +10969,9 @@ AnimateMove(board, fromX, fromY, toX, toY)
   animInfo.pos = finish;\r
   DrawPosition(FALSE, NULL);\r
   animInfo.piece = EmptySquare;\r
-  if(gameInfo.variant == VariantAtomic && \r
+  if(gameInfo.variant == VariantAtomic &&\r
      (board[toY][toX] != EmptySquare || fromX != toX && (piece == WhitePawn || piece == BlackPawn) ) )\r
-       AnimateAtomicCapture(fromX, fromY, toX, toY, 2*nFrames);\r
+    AnimateAtomicCapture(fromX, fromY, toX, toY, 2*nFrames);\r
 }\r
 \r
 /*      Convert board position to corner of screen rect and color       */\r
@@ -10992,11 +11016,11 @@ Tween(start, mid, finish, factor, frames, nFrames)
     count ++;\r
     fraction = fraction / 2;\r
   }\r
-  \r
+\r
   /* Midpoint */\r
   frames[count] = *mid;\r
   count ++;\r
-  \r
+\r
   /* Slow out, stepping 1/2, then 1/4, ... */\r
   fraction = 2;\r
   for (n = 0; n < factor; n++) {\r