* Massachusetts. \r
*\r
* Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,\r
- * 2007, 2008, 2009 Free Software Foundation, Inc.\r
+ * 2007, 2008, 2009, 2010 Free Software Foundation, Inc.\r
*\r
* Enhancements Copyright 2005 Alessandro Scotti\r
*\r
static int commentIndex;\r
static Boolean editComment = FALSE;\r
HWND commentDialog = NULL;\r
-BOOLEAN commentDialogUp = FALSE;\r
+int commentUp = FALSE;\r
static int commentX, commentY, commentH, commentW;\r
\r
static char *analysisTitle;\r
WindowPlacement wpEvalGraph;\r
\r
HWND engineOutputDialog = NULL;\r
-BOOLEAN engineOutputDialogUp = FALSE;\r
+int engineOutputDialogUp = FALSE;\r
\r
WindowPlacement wpEngineOutput;\r
WindowPlacement wpGameList;\r
{ "secondNPS", ArgInt, (LPVOID) &appData.secondNPS, FALSE },\r
{ "noGUI", ArgTrue, (LPVOID) &appData.noGUI, FALSE },\r
{ "keepLineBreaksICS", ArgBoolean, (LPVOID) &appData.noJoin, TRUE },\r
-\r
+ { "wrapContinuationSequence", ArgString, (LPVOID) &appData.wrapContSeq, FALSE },\r
+ { "useInternalWrap", ArgTrue, (LPVOID) &appData.useInternalWrap, FALSE }, /* noJoin usurps this if set */\r
+ \r
// [HGM] placement: put all window layouts last in ini file, but man X,Y before all others\r
{ "minX", ArgZ, (LPVOID) &minX, FALSE }, // [HGM] placement: to make suer auxialary windows can be placed\r
{ "minY", ArgZ, (LPVOID) &minY, FALSE },\r
exit(2);\r
}\r
\r
+int\r
+ValidateInt(char *s)\r
+{\r
+ char *p = s;\r
+ if(*p == '-' || *p == '+') p++;\r
+ while(*p) if(!isdigit(*p++)) ExitArgError("Bad integer value", s);\r
+ return atoi(s);\r
+}\r
+\r
/* Command line font name parser. NULL name means do nothing.\r
Syntax like "Courier New:10.0 bi" or "Arial:10" or "Arial:10b"\r
For backward compatibility, syntax without the colon is also\r
mfp->italic = (strchr(p, 'i') != NULL);\r
mfp->underline = (strchr(p, 'u') != NULL);\r
mfp->strikeout = (strchr(p, 's') != NULL);\r
+ mfp->charset = DEFAULT_CHARSET;\r
+ q = strchr(p, 'c');\r
+ if (q)\r
+ mfp->charset = (BYTE) atoi(q+1);\r
}\r
\r
/* Color name parser.\r
\r
switch (ad->argType) {\r
case ArgInt:\r
- *(int *) ad->argLoc = atoi(argValue);\r
+ *(int *) ad->argLoc = ValidateInt(argValue);\r
break;\r
\r
case ArgX:\r
- *(int *) ad->argLoc = atoi(argValue) + boardX; // [HGM] placement: translate stored relative to absolute \r
+ *(int *) ad->argLoc = ValidateInt(argValue) + boardX; // [HGM] placement: translate stored relative to absolute \r
break;\r
\r
case ArgY:\r
- *(int *) ad->argLoc = atoi(argValue) + boardY; // (this is really kludgey, it should be done where used...)\r
+ *(int *) ad->argLoc = ValidateInt(argValue) + boardY; // (this is really kludgey, it should be done where used...)\r
break;\r
\r
case ArgZ:\r
- *(int *) ad->argLoc = atoi(argValue);\r
+ *(int *) ad->argLoc = ValidateInt(argValue);\r
EnsureOnScreen(&boardX, &boardY, minX, minY); \r
break;\r
\r
lf->lfItalic = mfp->italic;\r
lf->lfUnderline = mfp->underline;\r
lf->lfStrikeOut = mfp->strikeout;\r
- lf->lfCharSet = DEFAULT_CHARSET;\r
+ lf->lfCharSet = mfp->charset;\r
lf->lfOutPrecision = OUT_DEFAULT_PRECIS;\r
lf->lfClipPrecision = CLIP_DEFAULT_PRECIS;\r
lf->lfQuality = DEFAULT_QUALITY;\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
+ fprintf(f, "/%s=\"%s:%g%s%s%s%s%sc%d\"\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
+ mfp->strikeout ? "s" : "",\r
+ (int)mfp->charset);\r
}\r
}\r
break;\r
blackRect.right = blackRect.left + boardWidth/2 - 1;\r
blackRect.top = whiteRect.top;\r
blackRect.bottom = whiteRect.bottom;\r
+\r
+ logoHeight = 0; // [HGM] logo: suppress logo after change to tiny layout!\r
}\r
\r
messageRect.left = OUTER_MARGIN + MESSAGE_LINE_LEFTMARGIN;\r
but animation is fast enough that it's difficult to notice.\r
*/\r
if( animInfo.piece == EmptySquare ) {\r
- if( (appData.highlightLastMove || appData.highlightDragging) && IsDrawArrowEnabled() && HasHighlightInfo() ) {\r
+ if( (appData.highlightLastMove || appData.highlightDragging) && IsDrawArrowEnabled() /*&& HasHighlightInfo()*/ ) {\r
result = TRUE;\r
}\r
}\r
* subtracted from x.\r
*/\r
int EventToSquare(x, limit)\r
- int x;\r
+ int x, limit;\r
{\r
if (x <= 0)\r
return -2;\r
}\r
}\r
\r
+int get_term_width()\r
+{\r
+ HDC hdc;\r
+ TEXTMETRIC tm;\r
+ RECT rc;\r
+ HFONT hfont, hold_font;\r
+ LOGFONT lf;\r
+ HWND hText;\r
+\r
+ if (hwndConsole)\r
+ hText = GetDlgItem(hwndConsole, OPT_ConsoleText);\r
+ else\r
+ return 79;\r
+\r
+ // get the text metrics\r
+ hdc = GetDC(hText);\r
+ lf = font[boardSize][CONSOLE_FONT]->lf;\r
+ if (consoleCF.dwEffects & CFE_BOLD)\r
+ lf.lfWeight = FW_BOLD;\r
+ if (consoleCF.dwEffects & CFE_ITALIC)\r
+ lf.lfItalic = TRUE;\r
+ if (consoleCF.dwEffects & CFE_STRIKEOUT)\r
+ lf.lfStrikeOut = TRUE;\r
+ if (consoleCF.dwEffects & CFE_UNDERLINE)\r
+ lf.lfUnderline = TRUE;\r
+ hfont = CreateFontIndirect(&lf);\r
+ hold_font = SelectObject(hdc, hfont);\r
+ GetTextMetrics(hdc, &tm);\r
+ SelectObject(hdc, hold_font);\r
+ DeleteObject(hfont);\r
+ ReleaseDC(hText, hdc);\r
+\r
+ // get the rectangle\r
+ SendMessage(hText, EM_GETRECT, 0, (LPARAM)&rc);\r
+\r
+ return (rc.right-rc.left) / tm.tmAveCharWidth;\r
+}\r
+\r
void UpdateICSWidth(HWND hText)\r
{\r
- HDC hdc;\r
- TEXTMETRIC tm;\r
- RECT rc;\r
- HFONT hfont, hold_font;\r
- LONG old_width, new_width;\r
- \r
- // get the text metrics\r
- hdc = GetDC(hText);\r
- hfont = CreateFontIndirect(&font[boardSize][CONSOLE_FONT]->lf);\r
- hold_font = SelectObject(hdc, hfont);\r
- GetTextMetrics(hdc, &tm);\r
- SelectObject(hdc, hold_font);\r
- DeleteObject(hfont);\r
- ReleaseDC(hText, hdc);\r
-\r
- // get the rectangle\r
- SendMessage(hText, EM_GETRECT, 0, (LPARAM)&rc);\r
-\r
- // update the width\r
- new_width = (rc.right-rc.left) / tm.tmAveCharWidth;\r
- old_width = GetWindowLong(hText, GWL_USERDATA);\r
- if (new_width != old_width)\r
- {\r
- ics_update_width(new_width);\r
- SetWindowLong(hText, GWL_USERDATA, new_width);\r
- }\r
+ LONG old_width, new_width;\r
+\r
+ new_width = get_term_width(hText, FALSE);\r
+ old_width = GetWindowLong(hText, GWL_USERDATA);\r
+ if (new_width != old_width)\r
+ {\r
+ ics_update_width(new_width);\r
+ SetWindowLong(hText, GWL_USERDATA, new_width);\r
+ }\r
}\r
\r
VOID\r
\r
JAWS_ALT_INTERCEPT\r
\r
- if (appData.icsActive && (char)wParam > ' ' && !((char)wParam >= '1' && (char)wParam <= '9')) { \r
+ if (appData.icsActive && ((char)wParam == '\r' || (char)wParam > ' ' && !((char)wParam >= '1' && (char)wParam <= '9'))) { \r
// [HGM] movenum: for non-zero digits we always do type-in dialog\r
HWND h = GetDlgItem(hwndConsole, OPT_ConsoleInput);\r
if (IsIconic(hwndConsole)) ShowWindow(hwndConsole, SW_RESTORE);\r
break;\r
\r
case IDM_EditComment:\r
- if (commentDialogUp && editComment) {\r
+ if (commentUp && editComment) {\r
CommentPopDown();\r
} else {\r
EditCommentEvent();\r
\r
if (commentDialog) {\r
SendMessage(commentDialog, WM_INITDIALOG, 0, 0);\r
- if (!commentDialogUp) ShowWindow(commentDialog, SW_SHOW);\r
+ if (!commentUp) ShowWindow(commentDialog, SW_SHOW);\r
} else {\r
lpProc = MakeProcInstance((FARPROC)CommentDialog, hInst);\r
CreateDialog(hInst, MAKEINTRESOURCE(DLG_EditComment),\r
hwndMain, (DLGPROC)lpProc);\r
FreeProcInstance(lpProc);\r
}\r
- commentDialogUp = TRUE;\r
+ commentUp = TRUE;\r
}\r
\r
\r
}\r
// [HGM] movenum: allow move number to be typed in any mode\r
if(sscanf(move, "%d", &n) == 1 && n != 0 ) {\r
- currentMove = 2*n-1;\r
- if(currentMove > forwardMostMove) currentMove = forwardMostMove;\r
- if(currentMove < backwardMostMove) currentMove = backwardMostMove;\r
+ ToNrEvent(2*n-1);\r
EndDialog(hDlg, TRUE);\r
- DrawPosition(TRUE, boards[currentMove]);\r
- if(currentMove > backwardMostMove) DisplayMove(currentMove - 1);\r
- else DisplayMessage("", "");\r
return TRUE;\r
}\r
}\r
}\r
\r
// Allow hText to highlight URLs and send notifications on them\r
- wMask = SendMessage(hText, EM_GETEVENTMASK, 0, 0L);\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
if (commentDialog) {\r
ShowWindow(commentDialog, SW_HIDE);\r
}\r
- commentDialogUp = FALSE;\r
+ commentUp = FALSE;\r
}\r
\r
VOID\r
}\r
}\r
\r
+int no_wrap(char *message, int count)\r
+{\r
+ ConsoleOutput(message, count, FALSE);\r
+ return count;\r
+}\r
\r
int\r
OutputToProcess(ProcRef pr, char *message, int count, int *outError)\r
int outCount = SOCKET_ERROR;\r
ChildProc *cp = (ChildProc *) pr;\r
static OVERLAPPED ovl;\r
+ static int line = 0;\r
\r
- if (pr == NoProc) {\r
- ConsoleOutput(message, count, FALSE);\r
- return count;\r
- } \r
+ if (pr == NoProc)\r
+ {\r
+ if (appData.noJoin || !appData.useInternalWrap)\r
+ return no_wrap(message, count);\r
+ else\r
+ {\r
+ int width = get_term_width();\r
+ int len = wrap(NULL, message, count, width, &line);\r
+ char *msg = malloc(len);\r
+ int dbgchk;\r
+\r
+ if (!msg)\r
+ return no_wrap(message, count);\r
+ else\r
+ {\r
+ dbgchk = wrap(msg, message, count, width, &line);\r
+ if (dbgchk != len && appData.debugMode)\r
+ fprintf(debugFP, "wrap(): dbgchk(%d) != len(%d)\n", dbgchk, len);\r
+ ConsoleOutput(msg, len, FALSE);\r
+ free(msg);\r
+ return len;\r
+ }\r
+ }\r
+ }\r
\r
if (ovl.hEvent == NULL) {\r
ovl.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);\r