* Massachusetts.\r
*\r
* Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,\r
- * 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.\r
+ * 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Free Software Foundation, Inc.\r
*\r
* Enhancements Copyright 2005 Alessandro Scotti\r
*\r
Boolean chessProgram;\r
//static int boardX, boardY;\r
int minX, minY; // [HGM] placement: volatile limits on upper-left corner\r
-int squareSize, lineGap, minorSize, border;\r
+int squareSize, lineGap, minorSize;\r
static int winW, winH;\r
static RECT messageRect, whiteRect, blackRect, leftLogoRect, rightLogoRect; // [HGM] logo\r
static int logoHeight = 0;\r
{ DLG_TimeControl, IDC_Babble, OPT_TCUseMoves, OPT_TCUseInc, OPT_TCUseFixed, \r
OPT_TCtext1, OPT_TCtext2, OPT_TCitext1, OPT_TCitext2, OPT_TCftext, GPB_Factors, IDC_Factor1, IDC_Factor2, IDOK, IDCANCEL }, \r
{ DLG_LoadOptions, OPT_Autostep, OPT_AStext1, OPT_Exact, OPT_Subset, OPT_Struct, OPT_Material, OPT_Range, OPT_Difference,\r
- OPT_elo1t, OPT_elo2t, OPT_datet, OPT_Stretch, OPT_Stretcht, OPT_Reversed, OPT_SearchMode, OPT_Mirror, OPT_thresholds, IDOK, IDCANCEL }, \r
+ OPT_elo1t, OPT_elo2t, OPT_datet, OPT_Stretch, OPT_Stretcht, OPT_Reversed, OPT_SearchMode, OPT_Mirror, OPT_thresholds,\r
+ OPT_Ranget, IDOK, IDCANCEL }, \r
{ DLG_SaveOptions, OPT_Autosave, OPT_AVPrompt, OPT_AVToFile, OPT_AVBrowse,\r
801, OPT_PGN, OPT_Old, OPT_OutOfBookInfo, IDOK, IDCANCEL }, \r
{ 1536, 1090, IDC_Directories, 1089, 1091, IDOK, IDCANCEL, 1038, IDC_IndexNr, 1037 }, \r
\r
SizeInfo sizeInfo[] = \r
{\r
- { "tiny", 21, 0, 1, 1, 0, 0 },\r
- { "teeny", 25, 1, 1, 1, 0, 0 },\r
- { "dinky", 29, 1, 1, 1, 0, 0 },\r
- { "petite", 33, 1, 1, 1, 0, 0 },\r
- { "slim", 37, 2, 1, 0, 0, 0 },\r
- { "small", 40, 2, 1, 0, 0, 0 },\r
+ { "tiny", 21, 0, 1, 2, 0, 0 },\r
+ { "teeny", 25, 1, 1, 2, 0, 0 },\r
+ { "dinky", 29, 1, 1, 2, 0, 0 },\r
+ { "petite", 33, 1, 1, 2, 0, 0 },\r
+ { "slim", 37, 2, 1, 1, 0, 0 },\r
+ { "small", 40, 2, 1, 1, 0, 0 },\r
{ "mediocre", 45, 2, 1, 0, 0, 0 },\r
{ "middling", 49, 2, 0, 0, 0, 0 },\r
{ "average", 54, 2, 0, 0, 0, 0 },\r
WNDPROC wndproc;\r
} MyButtonDesc;\r
\r
-#define BUTTON_WIDTH (tinyLayout ? 16 : 32)\r
+#define BUTTON_WIDTH (tinyLayout == 2 ? 16 : 32)\r
#define N_BUTTONS 5\r
\r
MyButtonDesc buttonDesc[N_BUTTONS] =\r
\r
int tinyLayout = 0, smallLayout = 0;\r
#define MENU_BAR_ITEMS 9\r
-char *menuBarText[2][MENU_BAR_ITEMS+1] = {\r
+char *menuBarText[3][MENU_BAR_ITEMS+1] = {\r
{ N_("&File"), N_("&Edit"), N_("&View"), N_("&Mode"), N_("&Action"), N_("E&ngine"), N_("&Options"), N_("&Help"), NULL },\r
+ { N_("&Fil"), N_("&Ed"), N_("&Vw"), N_("&Mod"), N_("&Act"), N_("E&ng"), N_("&Opt"), N_("&Hlp"), NULL },\r
{ N_("&F"), N_("&E"), N_("&V"), N_("&M"), N_("&A"), N_("&N"), N_("&O"), N_("&H"), NULL },\r
};\r
\r
*\r
\*---------------------------------------------------------------------------*/\r
\r
+static void HandleMessage P((MSG *message));\r
+static HANDLE hAccelMain, hAccelNoAlt, hAccelNoICS;\r
+\r
int APIENTRY\r
WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,\r
LPSTR lpCmdLine, int nCmdShow)\r
{\r
MSG msg;\r
- HANDLE hAccelMain, hAccelNoAlt, hAccelNoICS;\r
// INITCOMMONCONTROLSEX ex;\r
\r
debugFP = stderr;\r
0, /* lowest message to examine */\r
0)) /* highest message to examine */\r
{\r
+ HandleMessage(&msg);\r
+ }\r
+\r
+\r
+ return (msg.wParam); /* Returns the value from PostQuitMessage */\r
+}\r
+\r
+static void\r
+HandleMessage (MSG *message)\r
+{\r
+ MSG msg = *message;\r
\r
if(msg.message == WM_CHAR && msg.wParam == '\t') {\r
// [HGM] navigate: switch between all windows with tab\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
+ return; // this message now has been processed\r
}\r
}\r
\r
if(chatHandle[i] && IsDialogMessage(chatHandle[i], &msg)) {\r
done = 1; break;\r
}\r
- if(done) continue; // [HGM] chat: end patch\r
+ if(done) return; // [HGM] chat: end patch\r
TranslateMessage(&msg); /* Translates virtual key codes */\r
DispatchMessage(&msg); /* Dispatches message to window */\r
}\r
- }\r
-\r
+}\r
\r
- return (msg.wParam); /* Returns the value from PostQuitMessage */\r
+void\r
+DoEvents ()\r
+{ /* Dispatch pending messages */\r
+ MSG msg;\r
+ while (PeekMessage(&msg, /* message structure */\r
+ NULL, /* handle of window receiving the message */\r
+ 0, /* lowest message to examine */\r
+ 0, /* highest message to examine */\r
+ PM_REMOVE))\r
+ {\r
+ HandleMessage(&msg);\r
+ }\r
}\r
\r
/*---------------------------------------------------------------------------*\\r
screenGeometry.bottom = screenGeometry.top + screenHeight;\r
}\r
\r
+ChessProgramState broadcast;\r
+\r
BOOL\r
InitInstance(HINSTANCE hInstance, int nCmdShow, LPSTR lpCmdLine)\r
{\r
appData.ringBellAfterMoves = TRUE;\r
}\r
if (appData.debugMode) {\r
- debugFP = fopen(appData.nameOfDebugFile, "w");\r
+ char *c = appData.nameOfDebugFile;\r
+ if(strstr(c, "///") == c) {\r
+ broadcast.which = "broadcaster";\r
+ broadcast.pr = NoProc;\r
+ broadcast.isr = NULL;\r
+ broadcast.program = c + 3;\r
+ broadcast.dir = ".";\r
+ broadcast.host = "localhost";\r
+ StartChessProgram(&broadcast);\r
+ debugFP = (FILE*) _fdopen(_open_osfhandle((long)(((ChildProc*)(broadcast.pr))->hTo), _O_WRONLY), "w");\r
+ } else\r
+ debugFP = fopen(c, "w");\r
setbuf(debugFP, NULL);\r
}\r
\r
(void) CheckMenuItem(hmenu, IDM_SaveSettingsOnExit,\r
MF_BYCOMMAND|(saveSettingsOnExit ?\r
MF_CHECKED : MF_UNCHECKED));\r
+ EnableMenuItem(hmenu, IDM_SaveSelected, MF_GRAYED);\r
}\r
\r
//---------------------------------------------------------------------------------------------------------\r
lf->lfStrikeOut = mfp->strikeout;\r
lf->lfCharSet = mfp->charset;\r
lf->lfOutPrecision = OUT_DEFAULT_PRECIS;\r
+\r
+\r
+\r
lf->lfClipPrecision = CLIP_DEFAULT_PRECIS;\r
lf->lfQuality = DEFAULT_QUALITY;\r
lf->lfPitchAndFamily = DEFAULT_PITCH|FF_DONTCARE;\r
COLORREF chroma = RGB(0xFF,0x00,0xFF);\r
RECT rc;\r
SIZE sz;\r
+\r
+\r
POINT pt;\r
int backColor = whitePieceColor; \r
int foreColor = blackPieceColor;\r
{ // correct board size to one where built-in pieces exist\r
if((v == VariantCapablanca || v == VariantGothic || v == VariantGrand || v == VariantCapaRandom || v == VariantJanus || v == VariantSuper)\r
&& (boardSize < SizePetite || boardSize > SizeBulky) // Archbishop and Chancellor available in entire middle range\r
+\r
|| (v == VariantShogi && boardSize != SizeModerate) // Japanese-style Shogi\r
|| v == VariantKnightmate || v == VariantSChess || v == VariantXiangqi || v == VariantSpartan\r
|| v == VariantShatranj || v == VariantMakruk || v == VariantGreat || v == VariantFairy || v == VariantLion ) {\r
minorSize = 0; /* [HGM] Kludge to see if demagnified pieces need to be shifted */\r
border = appData.useBorder && appData.border[0] ? squareSize/2 : 0;\r
\r
+ // [HGM] decide on tininess based on total board width rather than square size\r
+ tinyLayout = squareSize * (BOARD_WIDTH);\r
+ tinyLayout = tinyLayout < 35*8 ? 2 : tinyLayout < 43*8 ? 1 : 0;\r
+\r
if( appData.overrideLineGap >= 0 && appData.overrideLineGap <= 5 ) {\r
lineGap = appData.overrideLineGap;\r
}\r
\r
if (tinyLayout != oldTinyLayout) {\r
long style = GetWindowLongPtr(hwndMain, GWL_STYLE);\r
- if (tinyLayout) {\r
+ if (tinyLayout == 2) {\r
style &= ~WS_SYSMENU;\r
InsertMenu(hmenu, IDM_Exit, MF_BYCOMMAND, IDM_Minimize,\r
"&Minimize\tCtrl+F4");\r
ReleaseDC(hwndMain, hdc);\r
\r
/* Compute where everything goes */\r
- if((first.programLogo || second.programLogo) && !tinyLayout) {\r
+ if((first.programLogo || second.programLogo) && tinyLayout != 2) {\r
/* [HGM] logo: if either logo is on, reserve space for it */\r
logoHeight = 2*clockSize.cy;\r
leftLogoRect.left = OUTER_MARGIN;\r
messageRect.top, BUTTON_WIDTH, messageSize.cy, hwndMain,\r
(HMENU) buttonDesc[i].id,\r
(HINSTANCE) GetWindowLongPtr(hwndMain, GWLP_HINSTANCE), NULL);\r
- if (tinyLayout) {\r
+ if (tinyLayout == 2) {\r
SendMessage(buttonDesc[i].hwnd, WM_SETFONT, \r
(WPARAM)font[boardSize][MESSAGE_FONT]->hf,\r
MAKELPARAM(FALSE, 0));\r
piece = (ChessSquare) ((int) piece + 1)) {\r
if (pieceBitmap[i][piece] != NULL)\r
DeleteObject(pieceBitmap[i][piece]);\r
+ pieceBitmap[i][piece] = NULL;\r
}\r
}\r
\r
fontBitmapSquareSize = 0; /* [HGM] render: make sure pieces will be recreated, as we might need others now */\r
+\r
// Orthodox Chess pieces\r
pieceBitmap[0][WhitePawn] = DoLoadBitmap(hInst, "p", squareSize, "s");\r
pieceBitmap[0][WhiteKnight] = DoLoadBitmap(hInst, "n", squareSize, "s");\r
pieceBitmap[0][WhiteLance] = DoLoadBitmap(hInst, "l", squareSize, "s");\r
pieceBitmap[1][WhiteLance] = DoLoadBitmap(hInst, "l", squareSize, "o");\r
pieceBitmap[2][WhiteLance] = DoLoadBitmap(hInst, "l", squareSize, "w");\r
+ pieceBitmap[0][WhiteAmazon] = DoLoadBitmap(hInst, "l", squareSize, "s");\r
+ pieceBitmap[1][WhiteAmazon] = DoLoadBitmap(hInst, "l", squareSize, "o");\r
+ pieceBitmap[2][WhiteAmazon] = DoLoadBitmap(hInst, "l", squareSize, "w");\r
pieceBitmap[0][WhiteUnicorn] = DoLoadBitmap(hInst, "u", squareSize, "s");\r
pieceBitmap[1][WhiteUnicorn] = DoLoadBitmap(hInst, "u", squareSize, "o");\r
pieceBitmap[2][WhiteUnicorn] = DoLoadBitmap(hInst, "u", squareSize, "w");\r
pieceBitmap[0][WhiteLion] = DoLoadBitmap(hInst, "ln", squareSize, "s");\r
pieceBitmap[1][WhiteLion] = DoLoadBitmap(hInst, "ln", squareSize, "o");\r
pieceBitmap[2][WhiteLion] = DoLoadBitmap(hInst, "ln", squareSize, "w");\r
-\r
- if(gameInfo.variant == VariantShogi) { /* promoted Gold represemtations */\r
+ pieceBitmap[0][WhiteCub] = DoLoadBitmap(hInst, "ln", squareSize, "s");\r
+ pieceBitmap[1][WhiteCub] = DoLoadBitmap(hInst, "ln", squareSize, "o");\r
+ pieceBitmap[2][WhiteCub] = DoLoadBitmap(hInst, "ln", squareSize, "w");\r
+ pieceBitmap[0][WhiteWolf] = DoLoadBitmap(hInst, "wolf", squareSize, "s");\r
+ pieceBitmap[1][WhiteWolf] = DoLoadBitmap(hInst, "wolf", squareSize, "o");\r
+ pieceBitmap[2][WhiteWolf] = DoLoadBitmap(hInst, "wolf", squareSize, "w");\r
+ pieceBitmap[0][WhiteCamel] = DoLoadBitmap(hInst, "camel", squareSize, "s");\r
+ pieceBitmap[1][WhiteCamel] = DoLoadBitmap(hInst, "camel", squareSize, "o");\r
+ pieceBitmap[2][WhiteCamel] = DoLoadBitmap(hInst, "camel", squareSize, "w");\r
+ pieceBitmap[0][WhiteZebra] = DoLoadBitmap(hInst, "zebra", squareSize, "s");\r
+ pieceBitmap[1][WhiteZebra] = DoLoadBitmap(hInst, "zebra", squareSize, "o");\r
+ pieceBitmap[2][WhiteZebra] = DoLoadBitmap(hInst, "n", squareSize, "w");\r
+\r
+ if(gameInfo.variant == VariantShogi && BOARD_HEIGHT != 7) { /* promoted Gold representations (but not in Tori!)*/\r
pieceBitmap[0][WhiteCannon] = DoLoadBitmap(hInst, "wp", squareSize, "s");\r
pieceBitmap[1][WhiteCannon] = DoLoadBitmap(hInst, "wp", squareSize, "o");\r
pieceBitmap[2][WhiteCannon] = DoLoadBitmap(hInst, "w", squareSize, "w");\r
pieceBitmap[2][WhiteSilver] = DoLoadBitmap(hInst, "sw", squareSize, "w");\r
minorSize = 0;\r
}\r
+\r
+ if(appData.pieceDirectory[0]) for(i=WhitePawn; i<BlackPawn; i++) { // try for all missing pieces with new naming convention\r
+ char buf[MSG_SIZ];\r
+ if(pieceBitmap[0][i]) continue;\r
+ snprintf(buf, MSG_SIZ, "piece%d_", i);\r
+ pieceBitmap[0][i] = DoLoadBitmap(hInst, buf, squareSize, "s");\r
+ pieceBitmap[1][i] = DoLoadBitmap(hInst, buf, squareSize, "o");\r
+ pieceBitmap[2][i] = DoLoadBitmap(hInst, buf, squareSize, "w");\r
+ }\r
}\r
\r
HBITMAP\r
}\r
\r
if( appData.highlightMoveWithArrow ) {\r
+\r
DrawArrowHighlight(hdcmem);\r
}\r
\r
else\r
if(dragInfo.from.x == BOARD_RGHT+1 )\r
board[dragInfo.from.y][dragInfo.from.x-1]++;\r
+\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
LRESULT CALLBACK\r
Promotion(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
{\r
+\r
char promoChar;\r
\r
switch (message) {\r
+\r
case WM_INITDIALOG: /* message: initialize dialog box */\r
/* Center the dialog over the application window */\r
CenterWindow(hDlg, GetWindow(hDlg, GW_OWNER));\r
void\r
PromotionPopUp(char choice)\r
{\r
- promoStyle = (choice == '+');\r
+ promoStyle = (choice == '+' || IS_SHOGI(gameInfo.variant));\r
DrawPosition(TRUE, NULL);\r
PromotionPopup(hwndMain);\r
}\r
WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)\r
{\r
FARPROC lpProc;\r
- int wmId, wmEvent;\r
+ int wmId;\r
char *defName;\r
FILE *f;\r
UINT number;\r
\r
case WM_COMMAND: /* message: command from application menu */\r
wmId = LOWORD(wParam);\r
- wmEvent = HIWORD(wParam);\r
\r
switch (wmId) {\r
case IDM_NewGame:\r
}\r
break;\r
\r
+ case IDM_SaveSelected:\r
+ f = OpenFileDialog(hwnd, "a", "",\r
+ "pgn",\r
+ GAME_FILT,\r
+ _("Save Game to File"), NULL, fileTitle, NULL);\r
+ if (f != NULL) {\r
+ SaveSelected(f, 0, "");\r
+ }\r
+ break;\r
+\r
case IDM_CreateBook:\r
CreateBookEvent();\r
break;\r
break;\r
\r
case IDM_Match: // [HGM] match: flows into next case, after setting Match Mode and nr of Games\r
+ if(matchMode) EnableMenuItem(GetMenu(hwndMain), IDM_Match, MF_BYCOMMAND|MF_GRAYED);\r
MatchEvent(2); // distinguish from command-line-triggered case (matchMode=1)\r
break;\r
\r
case IDM_TwoMachines:\r
TwoMachinesEvent();\r
/*\r
+\r
* refresh the tags dialog only if it's visible\r
*/\r
if (gameMode == TwoMachinesPlay && IsWindowVisible(editTagsDialog)) {\r
if( hwnd == hwndMain && appData.useStickyWindows ) {\r
LPWINDOWPOS lpwp = (LPWINDOWPOS) lParam;\r
\r
- if( ((lpwp->flags & SWP_NOMOVE) == 0) && ((lpwp->flags & SWP_NOSIZE) != 0) ) {\r
+ if( ((lpwp->flags & SWP_NOMOVE) == 0) /*&& ((lpwp->flags & SWP_NOSIZE) != 0)*/ ) { // [HGM] in Win8 size always accompanies move?\r
/* Window is moving */\r
RECT rcMain;\r
\r
ReattachAfterMove( &rcMain, lpwp->x, lpwp->y, hwndConsole, &wpConsole );\r
wpMain.x = lpwp->x;\r
wpMain.y = lpwp->y;\r
+\r
}\r
}\r
break;\r
default: /* Passes it on if unprocessed */\r
return (DefWindowProc(hwnd, message, wParam, lParam));\r
}\r
+\r
+\r
return 0;\r
}\r
\r
CommentDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
{\r
static HANDLE hwndText = NULL;\r
- int len, newSizeX, newSizeY, flags;\r
+ int len, newSizeX, newSizeY;\r
static int sizeX, sizeY;\r
char *str;\r
RECT rect;\r
/* Size and position the dialog */\r
if (!commentDialog) {\r
commentDialog = hDlg;\r
- flags = SWP_NOZORDER;\r
GetClientRect(hDlg, &rect);\r
sizeX = rect.right;\r
sizeY = rect.bottom;\r
case IDOK:\r
GetDlgItemText(hDlg, OPT_Name, move, sizeof(move));\r
appData.userName = strdup(move);\r
- SetUserLogo();\r
+ SetUserLogo(); DisplayLogos();\r
SetGameInfo();\r
if(gameMode == MachinePlaysWhite || gameMode == MachinePlaysBlack) {\r
snprintf(move, MSG_SIZ, "%s vs. %s", gameInfo.white, gameInfo.black);\r
LRESULT CALLBACK\r
ErrorDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
{\r
- HANDLE hwndText;\r
RECT rChild;\r
\r
switch (message) {\r
\r
errorDialog = hDlg;\r
SetWindowText(hDlg, errorTitle);\r
- hwndText = GetDlgItem(hDlg, OPT_ErrorText);\r
SetDlgItemText(hDlg, OPT_ErrorText, errorMessage);\r
return FALSE;\r
\r
LRESULT CALLBACK\r
GothicDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
{\r
- HANDLE hwndText;\r
RECT rChild;\r
int height = GetSystemMetrics(SM_CYCAPTION)+GetSystemMetrics(SM_CYFRAME);\r
\r
*/\r
gothicDialog = hDlg;\r
SetWindowText(hDlg, errorTitle);\r
- hwndText = GetDlgItem(hDlg, OPT_ErrorText);\r
SetDlgItemText(hDlg, OPT_ErrorText, errorMessage);\r
return FALSE;\r
\r
\r
if (twoBoards && partnerUp) return;\r
if (appData.clockMode) {\r
- if (tinyLayout)\r
+ if (tinyLayout == 2)\r
snprintf(buf, sizeof(buf)/sizeof(buf[0]), "%c %s %s", color[0], TimeString(timeRemaining), flagFell);\r
else\r
snprintf(buf, sizeof(buf)/sizeof(buf[0]), "%s:%c%s %s", color, (logoHeight>0 ? 0 : ' '), TimeString(timeRemaining), flagFell);\r
oldFg = SetTextColor(hdc, RGB(0, 0, 0)); /* black */\r
oldBg = SetBkColor(hdc, RGB(255, 255, 255)); /* white */\r
}\r
+\r
oldFont = SelectObject(hdc, font[boardSize][CLOCK_FONT]->hf);\r
\r
JAWS_SILENCE\r
{ IDM_Annotate, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_NewChat, MF_BYCOMMAND|MF_GRAYED },\r
\r
+\r
// Needed to switch from ncp to GNU mode on Engine Load\r
{ ACTION_POS, MF_BYPOSITION|MF_ENABLED },\r
{ IDM_MachineWhite, MF_BYCOMMAND|MF_ENABLED },\r
nowChecked = 0;\r
break;\r
}\r
+ if(prevChecked == IDM_TwoMachines) // [HGM] 'Machine Match' might have gotten disabled when stopping match\r
+ EnableMenuItem(GetMenu(hwndMain), IDM_Match, MF_BYCOMMAND|MF_ENABLED);\r
CheckMark(prevChecked, MF_UNCHECKED);\r
CheckMark(nowChecked, MF_CHECKED);\r
CheckMark(IDM_Match, matchMode && matchGame < appData.matchGames ? MF_CHECKED : MF_UNCHECKED);\r
result = DialogBoxParam( hInst, MAKEINTRESOURCE(DLG_GameListOptions), hwndMain, (DLGPROC)lpProc, (LPARAM)lpUserGLT );\r
\r
if( result == 0 ) {\r
+ char *oldTags = appData.gameListTags;\r
/* [AS] Memory leak here! */\r
appData.gameListTags = strdup( lpUserGLT ); \r
+ if(strcmp(oldTags, appData.gameListTags)) // [HGM] redo Game List when we changed something\r
+ GameListToListBox(NULL, TRUE, ".", NULL, FALSE, FALSE); // "." as filter is kludge to select all\r
}\r
\r
return result;\r
int outCount = SOCKET_ERROR;\r
ChildProc *cp = (ChildProc *) pr;\r
static OVERLAPPED ovl;\r
+\r
static int line = 0;\r
\r
if (pr == NoProc)\r
ov.OffsetHigh = 0;\r
switch(code) {\r
case 1: LockFileEx(hFile, LOCKFILE_EXCLUSIVE_LOCK, 0, 1024, 0, &ov); break; // LOCK_SH\r
+\r
case 2: LockFileEx(hFile, LOCKFILE_EXCLUSIVE_LOCK, 0, 1024, 0, &ov); break; // LOCK_EX\r
case 3: UnlockFileEx(hFile, 0, 1024, 0, &ov); break; // LOCK_UN\r
default: return -1;\r