* Massachusetts. \r
*\r
* Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,\r
- * 2007, 2008, 2009, 2010 Free Software Foundation, Inc.\r
+ * 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.\r
*\r
* Enhancements Copyright 2005 Alessandro Scotti\r
*\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
+ ChessSquare piece;\r
} DragInfo;\r
\r
-static DragInfo dragInfo = { {-1,-1}, {-1,-1}, {-1,-1}, {-1,-1} };\r
+static DragInfo dragInfo = { {-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}, EmptySquare };\r
\r
typedef struct {\r
POINT sq[2]; /* board coordinates of from, to squares */\r
\r
if(!name || name[0] == NULLCHAR) return;\r
snprintf(buf, MSG_SIZ, "%s%s", name, strchr(name, '.') ? "" : ".lng"); // auto-append lng extension\r
+ appData.language = oldLanguage;\r
if(!strcmp(buf, oldLanguage)) { barbaric = 1; return; } // this language already loaded; just switch on\r
if((f = fopen(buf, "r")) == NULL) return;\r
while((k = fgetc(f)) != EOF) {\r
int i;\r
WIN32_FIND_DATA fileData;\r
HANDLE hFind;\r
-#define IDM_English 1895\r
+#define IDM_English 1970\r
if(1) {\r
HMENU mainMenu = GetMenu(hwndMain);\r
for (i=GetMenuItemCount(mainMenu)-1; i>=0; i--) {\r
StartupDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
VOID APIENTRY MenuPopup(HWND hwnd, POINT pt, HMENU hmenu, UINT def);\r
void ParseIcsTextMenu(char *icsTextMenuString);\r
-VOID PopUpMoveDialog(char firstchar);\r
VOID PopUpNameDialog(char firstchar);\r
VOID UpdateSampleText(HWND hDlg, int id, MyColorizeAttribs *mca);\r
\r
}\r
\r
if (tinyLayout != oldTinyLayout) {\r
- long style = GetWindowLong(hwndMain, GWL_STYLE);\r
+ long style = GetWindowLongPtr(hwndMain, GWL_STYLE);\r
if (tinyLayout) {\r
style &= ~WS_SYSMENU;\r
InsertMenu(hmenu, IDM_Exit, MF_BYCOMMAND, IDM_Minimize,\r
style |= WS_SYSMENU;\r
RemoveMenu(hmenu, IDM_Minimize, MF_BYCOMMAND);\r
}\r
- SetWindowLong(hwndMain, GWL_STYLE, style);\r
+ SetWindowLongPtr(hwndMain, GWL_STYLE, style);\r
\r
for (i=0; menuBarText[tinyLayout][i]; i++) {\r
ModifyMenu(hmenu, i, MF_STRING|MF_BYPOSITION|MF_POPUP, \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
+ (HINSTANCE) GetWindowLongPtr(hwndMain, GWLP_HINSTANCE), NULL);\r
if (tinyLayout) {\r
SendMessage(buttonDesc[i].hwnd, WM_SETFONT, \r
(WPARAM)font[boardSize][MESSAGE_FONT]->hf,\r
if (buttonDesc[i].id == IDM_Pause)\r
hwndPause = buttonDesc[i].hwnd;\r
buttonDesc[i].wndproc = (WNDPROC)\r
- SetWindowLong(buttonDesc[i].hwnd, GWL_WNDPROC, (LONG) ButtonProc);\r
+ SetWindowLongPtr(buttonDesc[i].hwnd, GWLP_WNDPROC, (LONG_PTR) ButtonProc);\r
}\r
}\r
if (gridPen != NULL) DeleteObject(gridPen);\r
board[dragInfo.from.y][dragInfo.from.x] = dragged_piece;\r
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
+ DrawPieceOnDC(hdcmem, dragInfo.piece,\r
+ ((int) dragInfo.piece < (int) BlackPawn), \r
(dragInfo.from.y + dragInfo.from.x) % 2, x, y, tmphdc);\r
} \r
\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
+ BITMAP b; int i, j=0, m, w, wb, fac=0; char *pData; \r
BITMAPINFOHEADER bih; int color[16], nrColors=0;\r
\r
GetObject(bufferBitmap, sizeof(b), &b);\r
- if(b.bmWidthBytes*b.bmHeight <= 990000) {\r
+ if(pData = malloc(b.bmWidthBytes*b.bmHeight + 10000)) {\r
bih.biSize = sizeof(BITMAPINFOHEADER);\r
bih.biWidth = b.bmWidth;\r
bih.biHeight = b.bmHeight;\r
// write bitmap data\r
for(i=0; i<wb*(b.bmHeight - boardRect.top + OUTER_MARGIN); i++) \r
fputc(pData[i], diagFile);\r
+ free(pData);\r
}\r
}\r
\r
{\r
saveDiagFlag = 1; diagFile = f;\r
HDCDrawPosition(NULL, TRUE, NULL);\r
-\r
saveDiagFlag = 0;\r
\r
-// if(f != NULL) fprintf(f, "Sorry, but this feature is still in preparation\n");\r
- \r
fclose(f);\r
return TRUE;\r
}\r
dragInfo.lastpos.y = boardRect.top + y;\r
dragInfo.from.x = fromX;\r
dragInfo.from.y = fromY;\r
+ dragInfo.piece = boards[currentMove][fromY][fromX];\r
dragInfo.start = dragInfo.from;\r
SetCapture(hwndMain);\r
}\r
dragInfo.pos = dragInfo.lastpos = dragInfo.start;\r
}\r
\r
+void ChangeDragPiece(ChessSquare piece)\r
+{\r
+ dragInfo.piece = piece;\r
+}\r
+\r
/* Event handler for mouse messages */\r
VOID\r
MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)\r
switch (message) {\r
case WM_LBUTTONDOWN:\r
if (PtInRect((LPRECT) &whiteRect, pt)) {\r
- if (gameMode == EditPosition) {\r
- SetWhiteToPlayEvent();\r
- } else if (gameMode == EditGame || GetKeyState(VK_SHIFT) < 0) {\r
- AdjustClock(flipClock, -1);\r
- } else if (gameMode == IcsPlayingBlack ||\r
- gameMode == MachinePlaysWhite) {\r
- CallFlagEvent();\r
- }\r
+ ClockClick(flipClock);\r
} else if (PtInRect((LPRECT) &blackRect, pt)) {\r
- if (gameMode == EditPosition) {\r
- SetBlackToPlayEvent();\r
- } else if (gameMode == EditGame || GetKeyState(VK_SHIFT) < 0) {\r
- AdjustClock(!flipClock, -1);\r
- } else if (gameMode == IcsPlayingWhite ||\r
- gameMode == MachinePlaysBlack) {\r
- CallFlagEvent();\r
- }\r
+ ClockClick(!flipClock);\r
}\r
dragInfo.start.x = dragInfo.start.y = -1;\r
dragInfo.from = dragInfo.start;\r
\r
case WM_MOUSEMOVE:\r
if(SeekGraphClick(Press, pt.x - boardRect.left, pt.y - boardRect.top, 1)) break;\r
+ if(PromoScroll(pt.x - boardRect.left, pt.y - boardRect.top)) break;\r
MovePV(pt.x - boardRect.left, pt.y - boardRect.top, boardRect.bottom - boardRect.top);\r
if ((appData.animateDragging || appData.highlightDragging)\r
&& (wParam & MK_LBUTTON)\r
LRESULT CALLBACK\r
ButtonProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)\r
{\r
- int id = GetWindowLong(hwnd, GWL_ID);\r
+ int id = GetWindowLongPtr(hwnd, GWLP_ID);\r
int i, dir;\r
\r
for (i=0; i<N_BUTTONS; i++) {\r
SendMessage(h, WM_CHAR, wParam, lParam);\r
return TRUE;\r
} else if (isalpha((char)wParam) || isdigit((char)wParam)){\r
- PopUpMoveDialog((char)wParam);\r
+ TypeInEvent((char)wParam);\r
}\r
break;\r
}\r
LONG old_width, new_width;\r
\r
new_width = get_term_width(hText, FALSE);\r
- old_width = GetWindowLong(hText, GWL_USERDATA);\r
+ old_width = GetWindowLongPtr(hText, GWLP_USERDATA);\r
if (new_width != old_width)\r
{\r
ics_update_width(new_width);\r
- SetWindowLong(hText, GWL_USERDATA, new_width);\r
+ SetWindowLongPtr(hText, GWLP_USERDATA, new_width);\r
}\r
}\r
\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
+ TypeInEvent((char)wParam);\r
} else if((char)wParam == 003) CopyGameToClipboard();\r
else if((char)wParam == 026) PasteGameOrFENFromClipboard();\r
}\r
f = OpenFileDialog(hwnd, "wb", defName,\r
"bmp",\r
DIAGRAM_FILT,\r
- "Save Diagram to File", NULL, fileTitle, NULL);\r
+ _("Save Diagram to File"), NULL, fileTitle, NULL);\r
if (f != NULL) {\r
SaveDiagram(f);\r
}\r
if(gameMode != BeginningOfGame) { // allow menu item to remain enabled for better mode highligting\r
DisplayError(_("You can only start a match from the initial position."), 0); break;\r
}\r
- matchMode = 2;// distinguish from command-line-triggered case (matchMode=1)\r
- appData.matchGames = appData.defaultMatchGames;\r
- matchGame = 1;\r
- first.matchWins = second.matchWins = 0;\r
+ appData.matchGames = appData.defaultMatchGames;
+ MatchEvent(2); // distinguish from command-line-triggered case (matchMode=1)\r
+ break;\r
\r
case IDM_TwoMachines:\r
TwoMachinesEvent();\r
break;\r
\r
case IDM_TypeInMove:\r
- PopUpMoveDialog('\000');\r
+ TypeInEvent('\000');\r
break;\r
\r
case IDM_TypeInName:\r
break;\r
\r
case IDM_English:\r
- barbaric = 0;\r
+ barbaric = 0; appData.language = "";\r
TranslateMenus(0);\r
CheckMenuItem(GetMenu(hwndMain), lastChecked, MF_BYCOMMAND|MF_UNCHECKED);\r
CheckMenuItem(GetMenu(hwndMain), IDM_English, MF_BYCOMMAND|MF_CHECKED);\r
break;\r
\r
default:\r
- if(wmId > IDM_English && wmId < IDM_English+5) {\r
+ if(wmId > IDM_English && wmId < IDM_English+20) {\r
LoadLanguageFile(languageFile[wmId - IDM_English - 1]);\r
TranslateMenus(0);\r
CheckMenuItem(GetMenu(hwndMain), lastChecked, MF_BYCOMMAND|MF_UNCHECKED);\r
{\r
char move[MSG_SIZ];\r
HWND hInput;\r
- ChessMove moveType;\r
- int fromX, fromY, toX, toY;\r
- char promoChar;\r
\r
switch (message) {\r
case WM_INITDIALOG:\r
case IDOK:
\r
shiftKey = GetKeyState(VK_SHIFT) < 0; // [HGM] remember last shift status\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
- ToNrEvent(2*n-1);\r
- EndDialog(hDlg, TRUE);\r
- return TRUE;\r
- }\r
- }\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
- UserMoveEvent(fromX, fromY, toX, toY, promoChar); \r
- } else {\r
- DisplayMoveError(_("Could not parse move"));\r
- }\r
- }\r
+ GetDlgItemText(hDlg, OPT_Move, move, sizeof(move));
+ TypeInDoneEvent(move);\r
EndDialog(hDlg, TRUE);\r
return TRUE;\r
case IDCANCEL:\r
PopUpMoveDialog(char firstchar)\r
{\r
FARPROC lpProc;\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
+\r
lpProc = MakeProcInstance((FARPROC)TypeInMoveDialog, hInst);\r
DialogBoxParam(hInst, MAKEINTRESOURCE(DLG_TypeInMove),\r
hwndMain, (DLGPROC)lpProc, (LPARAM)firstchar);\r
FreeProcInstance(lpProc);\r
- }\r
}\r
\r
/*---------------------------------------------------------------------------*\\r
hwndConsole = hDlg;\r
SetFocus(hInput);\r
consoleTextWindowProc = (WNDPROC)\r
- SetWindowLong(hText, GWL_WNDPROC, (LONG) ConsoleTextSubclass);\r
+ SetWindowLongPtr(hText, GWLP_WNDPROC, (LONG_PTR) ConsoleTextSubclass);\r
SendMessage(hText, EM_SETBKGNDCOLOR, FALSE, consoleBackgroundColor);\r
consoleInputWindowProc = (WNDPROC)\r
- SetWindowLong(hInput, GWL_WNDPROC, (LONG) ConsoleInputSubclass);\r
+ SetWindowLongPtr(hInput, GWLP_WNDPROC, (LONG_PTR) ConsoleInputSubclass);\r
SendMessage(hInput, EM_SETBKGNDCOLOR, FALSE, consoleBackgroundColor);\r
Colorize(ColorNormal, TRUE);\r
SendMessage(hInput, EM_SETCHARFORMAT, SCF_ALL, (LPARAM) &consoleCF);\r
wMask = (WORD) SendMessage(hText, EM_GETEVENTMASK, 0, 0L);\r
SendMessage(hText, EM_SETEVENTMASK, 0, wMask | ENM_LINK);\r
SendMessage(hText, EM_AUTOURLDETECT, TRUE, 0L);\r
- SetWindowLong(hText, GWL_USERDATA, 79); // initialize the text window's width\r
+ SetWindowLongPtr(hText, GWLP_USERDATA, 79); // initialize the text window's width\r
\r
return FALSE;\r
\r