*\r
* Author: Alessandro Scotti (Dec 2005)\r
*\r
+ * Copyright 2005 Alessandro Scotti\r
+ *\r
+ * Enhancements Copyright 2009 Free Software Foundation, Inc.\r
+ *\r
* ------------------------------------------------------------------------\r
- * This program is free software; you can redistribute it and/or modify\r
+ *\r
+ * GNU XBoard is free software: you can redistribute it and/or modify\r
* it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
- * (at your option) any later version.\r
+ * the Free Software Foundation, either version 3 of the License, or (at\r
+ * your option) any later version.\r
*\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
+ * GNU XBoard is distributed in the hope that it will be useful, but\r
+ * WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * General Public License for more details.\r
*\r
* You should have received a copy of the GNU General Public License\r
- * along with this program; if not, write to the Free Software\r
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\r
+ * along with this program. If not, see http://www.gnu.org/licenses/.\r
+ *\r
* ------------------------------------------------------------------------\r
- */\r
-#include "config.h"
-
-#include <stdio.h>
-#include <ctype.h>
-#include <errno.h>
-#include <sys/types.h>
-
-#if STDC_HEADERS
-# include <stdlib.h>
-# include <string.h>
-#else /* not STDC_HEADERS */
-extern char *getenv();
-# if HAVE_STRING_H
-# include <string.h>
-# else /* not HAVE_STRING_H */
-# include <strings.h>
-# endif /* not HAVE_STRING_H */
-#endif /* not STDC_HEADERS */
-
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-#include <X11/Intrinsic.h>
-#include <X11/StringDefs.h>
-#include <X11/Shell.h>
-#include <X11/Xaw/Dialog.h>
-#include <X11/Xaw/Form.h>
-#include <X11/Xaw/List.h>
-#include <X11/Xaw/Label.h>
-#include <X11/Xaw/SimpleMenu.h>
-#include <X11/Xaw/SmeBSB.h>
-#include <X11/Xaw/SmeLine.h>
-#include <X11/Xaw/Box.h>
-#include <X11/Xaw/Paned.h>
-#include <X11/Xaw/MenuButton.h>
-#include <X11/cursorfont.h>
-#include <X11/Xaw/Text.h>
-#include <X11/Xaw/AsciiText.h>
-#include <X11/Xaw/Viewport.h>
-
-#include "common.h"
-#include "frontend.h"
-#include "backend.h"
-#include "xboard.h"
-// Add xengineo.h later
-
+ ** See the file ChangeLog for a revision history. */\r
+\r
+#include "config.h"\r
+\r
+#include <stdio.h>\r
+#include <ctype.h>\r
+#include <errno.h>\r
+#include <sys/types.h>\r
+\r
+#if STDC_HEADERS\r
+# include <stdlib.h>\r
+# include <string.h>\r
+#else /* not STDC_HEADERS */\r
+extern char *getenv();\r
+# if HAVE_STRING_H\r
+# include <string.h>\r
+# else /* not HAVE_STRING_H */\r
+# include <strings.h>\r
+# endif /* not HAVE_STRING_H */\r
+#endif /* not STDC_HEADERS */\r
+\r
+#if HAVE_UNISTD_H\r
+# include <unistd.h>\r
+#endif\r
+\r
+#include <X11/Intrinsic.h>\r
+#include <X11/StringDefs.h>\r
+#include <X11/Shell.h>\r
+#include <X11/Xaw/Dialog.h>\r
+#include <X11/Xaw/Form.h>\r
+#include <X11/Xaw/List.h>\r
+#include <X11/Xaw/Label.h>\r
+#include <X11/Xaw/SimpleMenu.h>\r
+#include <X11/Xaw/SmeBSB.h>\r
+#include <X11/Xaw/SmeLine.h>\r
+#include <X11/Xaw/Box.h>\r
+#include <X11/Xaw/Paned.h>\r
+#include <X11/Xaw/MenuButton.h>\r
+#include <X11/cursorfont.h>\r
+#include <X11/Xaw/Text.h>\r
+#include <X11/Xaw/AsciiText.h>\r
+#include <X11/Xaw/Viewport.h>\r
+\r
+#include "common.h"\r
+#include "frontend.h"\r
+#include "backend.h"\r
+#include "xboard.h"\r
+// Add xengineo.h later\r
+#include "gettext.h"\r
+\r
+#ifdef ENABLE_NLS\r
+# define _(s) gettext (s)\r
+# define N_(s) gettext_noop (s)\r
+#else\r
+# define _(s) (s)\r
+# define N_(s) s\r
+#endif\r
+\r
#include <X11/xpm.h>\r
-
-// [HGM] pixmaps of some ICONS used in the engine-outut window
-#include "pixmaps/WHITE_14.xpm"
-#include "pixmaps/BLACK_14.xpm"
-#include "pixmaps/CLEAR_14.xpm"
-#include "pixmaps/UNKNOWN_14.xpm"
-#include "pixmaps/THINKING_14.xpm"
-#include "pixmaps/PONDER_14.xpm"
-#include "pixmaps/ANALYZING_14.xpm"
-
+\r
+// [HGM] pixmaps of some ICONS used in the engine-outut window\r
+#include "pixmaps/WHITE_14.xpm"\r
+#include "pixmaps/BLACK_14.xpm"\r
+#include "pixmaps/CLEAR_14.xpm"\r
+#include "pixmaps/UNKNOWN_14.xpm"\r
+#include "pixmaps/THINKING_14.xpm"\r
+#include "pixmaps/PONDER_14.xpm"\r
+#include "pixmaps/ANALYZING_14.xpm"\r
+\r
#ifdef SNAP\r
#include "wsnap.h"\r
-#endif
-
-#define _LL_ 100
-
-// imports from xboard.c
-extern Widget formWidget, shellWidget, boardWidget, menuBarWidget;
-extern Display *xDisplay;
-extern Window xBoardWindow;
-extern int squareSize;
-extern Pixmap xMarkPixmap, wIconPixmap, bIconPixmap;
-extern char *layoutName;
-
-// temporary kludge to avoid compile errors untill all Windows code has been replaced
-#define HICON int *
-#define HWND int *
+#endif\r
+\r
+#define _LL_ 100\r
+\r
+// imports from xboard.c\r
+extern Widget formWidget, shellWidget, boardWidget, menuBarWidget;\r
+extern Display *xDisplay;\r
+extern Window xBoardWindow;\r
+extern int squareSize;\r
+extern Pixmap xMarkPixmap, wIconPixmap, bIconPixmap;\r
+extern char *layoutName;\r
+\r
+// temporary kludge to avoid compile errors untill all Windows code has been replaced\r
+#define HICON int *\r
+#define HWND int *\r
\r
// [HGM] define numbers to indicate icons, for referring to them in platform-independent way\r
#define nColorBlack 1\r
#define SHOW_PONDERING\r
\r
/* Imports from backend.c */\r
-char * SavePart(char *str);
+char * SavePart(char *str);\r
extern int opponentKibitzes;\r
\r
/* Imports from winboard.c */\r
extern Arg layoutArgs[2], formArgs[2], messageArgs[4];\r
\r
//extern WindowPlacement wpEngineOutput;\r
-
-Position engineOutputX = -1, engineOutputY = -1;
-Dimension engineOutputW, engineOutputH;
-Widget engineOutputShell;
-int engineOutputDialogUp;
-
+\r
+Position engineOutputX = -1, engineOutputY = -1;\r
+Dimension engineOutputW, engineOutputH;\r
+Widget engineOutputShell;\r
+int engineOutputDialogUp;\r
+\r
/* Module variables */\r
#define H_MARGIN 2\r
#define V_MARGIN 2\r
char * name;\r
int which;\r
int depth;\r
- unsigned long nodes;\r
+ u64 nodes;\r
int score;\r
int time;\r
char * pv;\r
static int VerifyDisplayMode();\r
static void UpdateControls( EngineOutputData * ed );\r
static SetEngineState( int which, int state, char * state_data );\r
-
-void ReadIcon(char *pixData[], int iconNr)
-{
- int r;
-
+\r
+void ReadIcon(char *pixData[], int iconNr)\r
+{\r
+ int r;\r
+\r
if ((r=XpmCreatePixmapFromData(xDisplay, XtWindow(outputField[0][nColorIcon]),\r
pixData,\r
&(icons[iconNr]),\r
NULL, NULL /*&attr*/)) != 0) {\r
- fprintf(stderr, "Error %d loading icon image\n", r);\r
+ fprintf(stderr, _("Error %d loading icon image\n"), r);\r
exit(1); \r
} \r
-}
-
+}\r
+\r
static void InitializeEngineOutput()\r
-{ int i;
-
+{ int i;\r
+\r
ReadIcon(WHITE_14, nColorWhite);\r
ReadIcon(BLACK_14, nColorBlack);\r
ReadIcon(UNKNOWN_14, nColorUnknown);\r
-
+\r
ReadIcon(CLEAR_14, nClear);\r
ReadIcon(PONDER_14, nPondering);\r
ReadIcon(THINK_14, nThinking);\r
ReadIcon(ANALYZE_14, nAnalyzing);\r
-// icons[nClear] = wIconPixmap;\r
-// icons[nPondering] = bIconPixmap;\r// icons[nThinking] = wIconPixmap;\r
-// icons[nAnalyzing] = bIconPixmap;\r}
-
-#if 0
-// Windows routines commented out
-\r
-// front end\r
-static HICON LoadIconEx( int id )\r
-{\r
- return LoadImage( hInst, MAKEINTRESOURCE(id), IMAGE_ICON, ICON_SIZE, ICON_SIZE, 0 );\r
-}\r
-\r
-// [HGM] the platform-dependent way of indicating where output should go is now all\r
-// concentrated here, where a table of platform-dependent handles are initialized.\r
-// This cleanses most other routines of front-end stuff, so they can go into the back end.\r
-static void InitializeEngineOutput()\r
-{\r
- // if( needInit ) { // needInit was already tested before call\r
- // [HGM] made this into a table, rather than separate global variables\r
- icons[nColorBlack] = LoadIconEx( IDI_BLACK_14 );\r
- icons[nColorWhite] = LoadIconEx( IDI_WHITE_14 );\r
- icons[nColorUnknown] = LoadIconEx( IDI_UNKNOWN_14 );\r
- icons[nClear] = LoadIconEx( IDI_TRANS_14 );\r
- icons[nPondering] = LoadIconEx( IDI_PONDER_14 );\r
- icons[nThinking] = LoadIconEx( IDI_CLOCK_14 );\r
- icons[nAnalyzing] = LoadIconEx( IDI_ANALYZE2_14 );\r
-\r
- // [HGM] also make a table of handles to output controls\r
- // Note that engineOutputDialog must be defined first!\r
- outputField[0][nColorIcon] = GetDlgItem( engineOutputDialog, IDC_Color1 );\r
- outputField[0][nLabel] = GetDlgItem( engineOutputDialog, IDC_EngineLabel1 );\r
- outputField[0][nStateIcon] = GetDlgItem( engineOutputDialog, IDC_StateIcon1 );\r
- outputField[0][nStateData] = GetDlgItem( engineOutputDialog, IDC_StateData1 );\r
- outputField[0][nLabelNPS] = GetDlgItem( engineOutputDialog, IDC_Engine1_NPS );\r
- outputField[0][nMemo] = GetDlgItem( engineOutputDialog, IDC_EngineMemo1 );\r
-\r
- outputField[1][nColorIcon] = GetDlgItem( engineOutputDialog, IDC_Color2 );\r
- outputField[1][nLabel] = GetDlgItem( engineOutputDialog, IDC_EngineLabel2 );\r
- outputField[1][nStateIcon] = GetDlgItem( engineOutputDialog, IDC_StateIcon2 );\r
- outputField[1][nStateData] = GetDlgItem( engineOutputDialog, IDC_StateData2 );\r
- outputField[1][nLabelNPS] = GetDlgItem( engineOutputDialog, IDC_Engine2_NPS );\r
- outputField[1][nMemo] = GetDlgItem( engineOutputDialog, IDC_EngineMemo2 );\r
-// needInit = FALSE;\r
-// }\r
-}\r
-\r
-// front end\r
-static void SetControlPos( HWND hDlg, int id, int x, int y, int width, int height )\r
-{\r
- HWND hControl = GetDlgItem( hDlg, id );\r
-\r
- SetWindowPos( hControl, HWND_TOP, x, y, width, height, SWP_NOZORDER );\r
-}\r
-\r
-#define HIDDEN_X 20000\r
-#define HIDDEN_Y 20000\r
-\r
-// front end\r
-static void HideControl( HWND hDlg, int id )\r
-{\r
- HWND hControl = GetDlgItem( hDlg, id );\r
- RECT rc;\r
-\r
- GetWindowRect( hControl, &rc );\r
-\r
- /* \r
- Avoid hiding an already hidden control, because that causes many\r
- unnecessary WM_ERASEBKGND messages!\r
- */\r
- if( rc.left != HIDDEN_X || rc.top != HIDDEN_Y ) {\r
- SetControlPos( hDlg, id, 20000, 20000, 100, 100 );\r
- }\r
-}\r
-\r
-// front end, although we might make GetWindowRect front end instead\r
-static int GetControlWidth( HWND hDlg, int id )\r
-{\r
- RECT rc;\r
-\r
- GetWindowRect( GetDlgItem( hDlg, id ), &rc );\r
-\r
- return rc.right - rc.left;\r
-}\r
-\r
-// front end?\r
-static int GetControlHeight( HWND hDlg, int id )\r
-{\r
- RECT rc;\r
-\r
- GetWindowRect( GetDlgItem( hDlg, id ), &rc );\r
-\r
- return rc.bottom - rc.top;\r
}\r
\r
-static int GetHeaderHeight()\r
-{\r
- int result = GetControlHeight( engineOutputDialog, IDC_EngineLabel1 );\r
-\r
- if( result < ICON_SIZE ) result = ICON_SIZE;\r
-\r
- return result;\r
-}\r
-\r
-// The size calculations should be backend? If setControlPos is a platform-dependent way of doing things,\r
-// a platform-independent wrapper for it should be supplied.\r
-static void PositionControlSet( HWND hDlg, int x, int y, int clientWidth, int memoHeight, int idColor, int idEngineLabel, int idNPS, int idMemo, int idStateIcon, int idStateData )\r
-{\r
- int label_x = x + ICON_SIZE + H_MARGIN;\r
- int label_h = GetControlHeight( hDlg, IDC_EngineLabel1 );\r
- int label_y = y + ICON_SIZE - label_h;\r
- int nps_w = GetControlWidth( hDlg, IDC_Engine1_NPS );\r
- int nps_x = clientWidth - H_MARGIN - nps_w;\r
- int state_data_w = GetControlWidth( hDlg, IDC_StateData1 );\r
- int state_data_x = nps_x - H_MARGIN - state_data_w;\r
- int state_icon_x = state_data_x - ICON_SIZE - 2;\r
- int max_w = clientWidth - 2*H_MARGIN;\r
- int memo_y = y + ICON_SIZE + LABEL_V_DISTANCE;\r
-\r
- SetControlPos( hDlg, idColor, x, y, ICON_SIZE, ICON_SIZE );\r
- SetControlPos( hDlg, idEngineLabel, label_x, label_y, state_icon_x - label_x, label_h );\r
- SetControlPos( hDlg, idStateIcon, state_icon_x, y, ICON_SIZE, ICON_SIZE );\r
- SetControlPos( hDlg, idStateData, state_data_x, label_y, state_data_w, label_h );\r
- SetControlPos( hDlg, idNPS, nps_x, label_y, nps_w, label_h );\r
- SetControlPos( hDlg, idMemo, x, memo_y, max_w, memoHeight );\r
-}\r
-\r
-// Also here some of the size calculations should go to the back end, and their actual application to a front-end routine\r
-static void ResizeWindowControls( HWND hDlg, int mode )\r
-{\r
- RECT rc;\r
- int headerHeight = GetHeaderHeight();\r
- int labelHeight = GetControlHeight( hDlg, IDC_EngineLabel1 );\r
- int labelOffset = H_MARGIN + ICON_SIZE + H_MARGIN;\r
- int labelDeltaY = ICON_SIZE - labelHeight;\r
- int clientWidth;\r
- int clientHeight;\r
- int maxControlWidth;\r
- int npsWidth;\r
-\r
- /* Initialize variables */\r
- GetClientRect( hDlg, &rc );\r
-\r
- clientWidth = rc.right - rc.left;\r
- clientHeight = rc.bottom - rc.top;\r
-\r
- maxControlWidth = clientWidth - 2*H_MARGIN;\r
-\r
- npsWidth = GetControlWidth( hDlg, IDC_Engine1_NPS );\r
-\r
- /* Resize controls */\r
- if( mode == 0 ) {\r
- /* One engine */\r
- PositionControlSet( hDlg, H_MARGIN, V_MARGIN, \r
- clientWidth, \r
- clientHeight - V_MARGIN - LABEL_V_DISTANCE - headerHeight- V_MARGIN,\r
- IDC_Color1, IDC_EngineLabel1, IDC_Engine1_NPS, IDC_EngineMemo1, IDC_StateIcon1, IDC_StateData1 );\r
-\r
- /* Hide controls for the second engine */\r
- HideControl( hDlg, IDC_Color2 );\r
- HideControl( hDlg, IDC_EngineLabel2 );\r
- HideControl( hDlg, IDC_StateIcon2 );\r
- HideControl( hDlg, IDC_StateData2 );\r
- HideControl( hDlg, IDC_Engine2_NPS );\r
- HideControl( hDlg, IDC_EngineMemo2 );\r
- SendDlgItemMessage( hDlg, IDC_EngineMemo2, WM_SETTEXT, 0, (LPARAM) "" );\r
- /* TODO: we should also hide/disable them!!! what about tab stops?!?! */\r
- }\r
- else {\r
- /* Two engines */\r
- int memo_h = (clientHeight - headerHeight*2 - V_MARGIN*2 - LABEL_V_DISTANCE*2 - SPLITTER_SIZE) / 2;\r
- int header1_y = V_MARGIN;\r
- int header2_y = V_MARGIN + headerHeight + LABEL_V_DISTANCE + memo_h + SPLITTER_SIZE;\r
-\r
- PositionControlSet( hDlg, H_MARGIN, header1_y, clientWidth, memo_h,\r
- IDC_Color1, IDC_EngineLabel1, IDC_Engine1_NPS, IDC_EngineMemo1, IDC_StateIcon1, IDC_StateData1 );\r
-\r
- PositionControlSet( hDlg, H_MARGIN, header2_y, clientWidth, memo_h,\r
- IDC_Color2, IDC_EngineLabel2, IDC_Engine2_NPS, IDC_EngineMemo2, IDC_StateIcon2, IDC_StateData2 );\r
- }\r
-\r
- InvalidateRect( GetDlgItem(hDlg,IDC_EngineMemo1), NULL, FALSE );\r
- InvalidateRect( GetDlgItem(hDlg,IDC_EngineMemo2), NULL, FALSE );\r
-}\r
-\r
-// front end. Actual printing of PV lines into the output field\r
-static void InsertIntoMemo( int which, char * text )\r
-{\r
- SendMessage( outputField[which][nMemo], EM_SETSEL, 0, 0 );\r
-\r
- SendMessage( outputField[which][nMemo], EM_REPLACESEL, (WPARAM) FALSE, (LPARAM) text );\r
-}\r
-\r
-// front end. Associates an icon with an output field ("control" in Windows jargon).\r
-// [HGM] let it find out the output field from the 'which' number by itself\r
-static void SetIcon( int which, int field, int nIcon )\r
-{\r
-\r
- if( nIcon != 0 ) {\r
- SendMessage( outputField[which][field], STM_SETICON, (WPARAM) icons[nIcon], 0 );\r
- }\r
-}\r
-\r
-// front end wrapper for SetWindowText, taking control number in stead of handle\r
-void DoSetWindowText(int which, int field, char *s_label)\r
-{\r
- SetWindowText( outputField[which][field], s_label );\r
-}\r
-#endif
-
void DoSetWindowText(int which, int field, char *s_label)\r
{ \r
Arg arg;\r
XtSetArg(arg, XtNlabel, (XtArgVal) s_label);\r
XtSetValues(outputField[which][field], &arg, 1);\r
}\r
-
+\r
static void InsertIntoMemo( int which, char * text )\r
-{
- Arg arg; XawTextBlock t; Widget edit;
-
+{\r
+ Arg arg; XawTextBlock t; Widget edit;\r
+\r
t.ptr = text; t.firstPos = 0; t.length = strlen(text); t.format = XawFmt8Bit;\r
edit = XtNameToWidget(engineOutputShell, which ? "*form2.text" : "*form.text");\r
- XawTextReplace(edit, 0, 0, &t);
+ XawTextReplace(edit, 0, 0, &t);\r
// XtSetArg(arg, XtNstring, (XtArgVal) text);\r
// XtSetValues(outputField[which][nMemo], &arg, 1);\r
}\r
-
-static void SetIcon( int which, int field, int nIcon )
-{
- Arg arg;
+\r
+static void SetIcon( int which, int field, int nIcon )\r
+{\r
+ Arg arg;\r
\r
if( nIcon != 0 ) {\r
XtSetArg(arg, XtNleftBitmap, (XtArgVal) icons[nIcon]);\r
XtSetValues(outputField[which][field], &arg, 1);\r
}\r
-}
-
-void DoClearMemo(int which)\r{ \r Arg args[16];\r
+}\r
+\r
+void DoClearMemo(int which)\r
+{ \r
+ Arg args[16];\r
int j;\r
Widget edit;\r
-
+\r
edit = XtNameToWidget(engineOutputShell, which ? "*form2.text" : "*form.text");\r
XtCallActionProc(edit, "select-all", NULL, NULL, 0);\r
XtCallActionProc(edit, "kill-selection", NULL, NULL, 0);\r
-}
+}\r
\r
// The following routines are mutated clones of the commentPopUp routines\r
\r
void PositionControlSet(which, form, bw_width)\r
int which;\r
Widget form;\r
- Dimension bw_width;\r{\r
+ Dimension bw_width;\r
+{\r
Arg args[16];\r
Widget edit, NameWidget, ColorWidget, ModeWidget, MoveWidget, NodesWidget;\r
int j, mutable=1;\r
j = 0;\r
- XtSetArg(args[j], XtNborderWidth, (XtArgVal) 0); j++;
+ XtSetArg(args[j], XtNborderWidth, (XtArgVal) 0); j++;\r
XtSetArg(args[j], XtNlabel, (XtArgVal) ""); j++;\r
XtSetArg(args[j], XtNtop, XtChainTop); j++;\r
XtSetArg(args[j], XtNbottom, XtChainTop); j++;\r
- XtSetArg(args[j], XtNleft, XtChainLeft); j++;\r XtSetArg(args[j], XtNright, XtChainLeft); j++;\r XtSetArg(args[j], XtNheight, (XtArgVal) 16); j++;\r
+ XtSetArg(args[j], XtNleft, XtChainLeft); j++;\r
+ XtSetArg(args[j], XtNright, XtChainLeft); j++;\r
+ XtSetArg(args[j], XtNheight, (XtArgVal) 16); j++;\r
XtSetArg(args[j], XtNwidth, (XtArgVal) 17); j++;\r
- outputField[which][nColorIcon] = ColorWidget =
+ outputField[which][nColorIcon] = ColorWidget =\r
XtCreateManagedWidget("Color", labelWidgetClass,\r
form, args, j);\r
-
+\r
j = 0;\r
- XtSetArg(args[j], XtNborderWidth, (XtArgVal) 0); j++;
- XtSetArg(args[j], XtNjustify, (XtArgVal) XtJustifyLeft); j++;
+ XtSetArg(args[j], XtNborderWidth, (XtArgVal) 0); j++;\r
+ XtSetArg(args[j], XtNjustify, (XtArgVal) XtJustifyLeft); j++;\r
XtSetArg(args[j], XtNfromHoriz, (XtArgVal) ColorWidget); j++;\r
XtSetArg(args[j], XtNtop, XtChainTop); j++;\r
XtSetArg(args[j], XtNbottom, XtChainTop); j++;\r
- XtSetArg(args[j], XtNleft, XtChainLeft); j++;\r XtSetArg(args[j], XtNheight, (XtArgVal) 16); j++;\r
+ XtSetArg(args[j], XtNleft, XtChainLeft); j++;\r
+ XtSetArg(args[j], XtNheight, (XtArgVal) 16); j++;\r
XtSetArg(args[j], XtNwidth, (XtArgVal) bw_width/2 - 57); j++;\r
- outputField[which][nLabel] = NameWidget =
+ outputField[which][nLabel] = NameWidget =\r
XtCreateManagedWidget("Engine", labelWidgetClass,\r
form, args, j);\r
-
+\r
j = 0;\r
- XtSetArg(args[j], XtNborderWidth, (XtArgVal) 0); j++;
+ XtSetArg(args[j], XtNborderWidth, (XtArgVal) 0); j++;\r
XtSetArg(args[j], XtNlabel, (XtArgVal) ""); j++;\r
XtSetArg(args[j], XtNfromHoriz, (XtArgVal) NameWidget); j++;\r
XtSetArg(args[j], XtNtop, XtChainTop); j++;\r
XtSetArg(args[j], XtNbottom, XtChainTop); j++;\r
XtSetArg(args[j], XtNheight, (XtArgVal) 16); j++;\r
XtSetArg(args[j], XtNwidth, (XtArgVal) 20); j++;\r
- outputField[which][nStateIcon] = ModeWidget =
+ outputField[which][nStateIcon] = ModeWidget =\r
XtCreateManagedWidget("Mode", labelWidgetClass,\r
form, args, j);\r
-
+\r
j = 0;\r
- XtSetArg(args[j], XtNborderWidth, (XtArgVal) 0); j++;
- XtSetArg(args[j], XtNjustify, (XtArgVal) XtJustifyLeft); j++;
+ XtSetArg(args[j], XtNborderWidth, (XtArgVal) 0); j++;\r
+ XtSetArg(args[j], XtNjustify, (XtArgVal) XtJustifyLeft); j++;\r
XtSetArg(args[j], XtNlabel, (XtArgVal) ""); j++;\r
XtSetArg(args[j], XtNfromHoriz, (XtArgVal) ModeWidget); j++;\r
XtSetArg(args[j], XtNtop, XtChainTop); j++;\r
XtSetArg(args[j], XtNbottom, XtChainTop); j++;\r
- XtSetArg(args[j], XtNright, XtChainRight); j++;\r XtSetArg(args[j], XtNheight, (XtArgVal) 16); j++;\r
+ XtSetArg(args[j], XtNright, XtChainRight); j++;\r
+ XtSetArg(args[j], XtNheight, (XtArgVal) 16); j++;\r
XtSetArg(args[j], XtNwidth, (XtArgVal) bw_width/2 - 102); j++;\r
- outputField[which][nStateData] = MoveWidget =
+ outputField[which][nStateData] = MoveWidget =\r
XtCreateManagedWidget("Move", labelWidgetClass,\r
form, args, j);\r
-
+\r
j = 0;\r
- XtSetArg(args[j], XtNborderWidth, (XtArgVal) 0); j++;
+ XtSetArg(args[j], XtNborderWidth, (XtArgVal) 0); j++;\r
XtSetArg(args[j], XtNjustify, (XtArgVal) XtJustifyRight); j++;\r
- XtSetArg(args[j], XtNlabel, (XtArgVal) "NPS"); j++;\r
+ XtSetArg(args[j], XtNlabel, (XtArgVal) _("NPS")); j++;\r
XtSetArg(args[j], XtNfromHoriz, (XtArgVal) MoveWidget); j++;\r
XtSetArg(args[j], XtNtop, XtChainTop); j++;\r
XtSetArg(args[j], XtNbottom, XtChainTop); j++;\r
- XtSetArg(args[j], XtNleft, XtChainRight); j++;\r XtSetArg(args[j], XtNright, XtChainRight); j++;\r XtSetArg(args[j], XtNheight, (XtArgVal) 16); j++;\r
+ XtSetArg(args[j], XtNleft, XtChainRight); j++;\r
+ XtSetArg(args[j], XtNright, XtChainRight); j++;\r
+ XtSetArg(args[j], XtNheight, (XtArgVal) 16); j++;\r
XtSetArg(args[j], XtNwidth, (XtArgVal) 100); j++;\r
- outputField[which][nLabelNPS] = NodesWidget =
+ outputField[which][nLabelNPS] = NodesWidget =\r
XtCreateManagedWidget("Nodes", labelWidgetClass,\r
form, args, j);\r
-
- // create "text" within "form"
+\r
+ // create "text" within "form"\r
j = 0;\r
if (mutable) {\r
XtSetArg(args[j], XtNeditType, XawtextEdit); j++;\r
#else\r
/* !!Work around an apparent bug in XFree86 4.0.1 (X11R6.4.3) */\r
XtSetArg(args[j], XtNscrollVertical, XawtextScrollAlways); j++;\r
- XtSetArg(args[j], XtNscrollHorizontal, XawtextScrollWhenNeeded); j++;\r#endif\r
+ XtSetArg(args[j], XtNscrollHorizontal, XawtextScrollWhenNeeded); j++;\r
+#endif\r
// XtSetArg(args[j], XtNautoFill, True); j++;\r
// XtSetArg(args[j], XtNwrap, XawtextWrapWord); j++;\r
outputField[which][nMemo] = edit =\r
char *name, *text;\r
{\r
Arg args[16];\r
- Widget shell, layout, form, form2, edit;
+ Widget shell, layout, form, form2, edit;\r
Dimension bw_width, bw_height;\r
int j;\r
\r
- // get board width
+ // get board width\r
j = 0;\r
- XtSetArg(args[j], XtNwidth, &bw_width); j++;\r XtSetArg(args[j], XtNheight, &bw_height); j++;\r XtGetValues(boardWidget, args, j);\r
+ XtSetArg(args[j], XtNwidth, &bw_width); j++;\r
+ XtSetArg(args[j], XtNheight, &bw_height); j++;\r
+ XtGetValues(boardWidget, args, j);\r
\r
- // define form within layout within shell.
+ // define form within layout within shell.\r
j = 0;\r
XtSetArg(args[j], XtNresizable, True); j++;\r
shell =\r
layout =\r
XtCreateManagedWidget(layoutName, formWidgetClass, shell,\r
layoutArgs, XtNumber(layoutArgs));\r
- // divide window vertically into two equal parts, by creating two forms
+ // divide window vertically into two equal parts, by creating two forms\r
form =\r
XtCreateManagedWidget("form", formWidgetClass, layout,\r
formArgs, XtNumber(formArgs));\r
form2 =\r
XtCreateManagedWidget("form2", formWidgetClass, layout,\r
formArgs, XtNumber(formArgs));\r
- j = 0;\r XtSetArg(args[j], XtNfromVert, (XtArgVal) form); j++;\r XtSetValues(form2, args, j);\r
- // make sure width is known in advance, for better placement of child widgets
- j = 0;\r XtSetArg(args[j], XtNwidth, (XtArgVal) bw_width-16); j++;\r XtSetArg(args[j], XtNheight, (XtArgVal) bw_height/2); j++;\r XtSetValues(shell, args, j);\r
-
- // fill up both forms with control elements
- PositionControlSet(0, form, bw_width);
- PositionControlSet(1, form2, bw_width);
+ j = 0;\r
+ XtSetArg(args[j], XtNfromVert, (XtArgVal) form); j++;\r
+ XtSetValues(form2, args, j);\r
+ // make sure width is known in advance, for better placement of child widgets\r
+ j = 0;\r
+ XtSetArg(args[j], XtNwidth, (XtArgVal) bw_width-16); j++;\r
+ XtSetArg(args[j], XtNheight, (XtArgVal) bw_height/2); j++;\r
+ XtSetValues(shell, args, j);\r
+\r
+ // fill up both forms with control elements\r
+ PositionControlSet(0, form, bw_width);\r
+ PositionControlSet(1, form2, bw_width);\r
\r
XtRealizeWidget(shell);\r
-
+\r
if (engineOutputX == -1) {\r
int xx, yy;\r
Window junk;\r
XtSetArg(args[j], XtNheight, &pw_height); j++;\r
XtGetValues(shell, args, j);\r
engineOutputH = pw_height + (lines - 1) * ew_height;\r
- engineOutputW = bw_width - 16;
-#else
- engineOutputH = bw_height/2;\r engineOutputW = bw_width-16;\r#endif
+ engineOutputW = bw_width - 16;\r
+#else\r
+ engineOutputH = bw_height/2;\r
+ engineOutputW = bw_width-16;\r
+#endif\r
\r
XSync(xDisplay, False);\r
#ifdef NOTDEF\r
if (engineOutputY < 0) engineOutputY = 0; /*avoid positioning top offscreen*/\r
}\r
j = 0;\r
- XtSetArg(args[j], XtNheight, engineOutputH); j++;\r XtSetArg(args[j], XtNwidth, engineOutputW); j++;\r
+ XtSetArg(args[j], XtNheight, engineOutputH); j++;\r
+ XtSetArg(args[j], XtNwidth, engineOutputW); j++;\r
XtSetArg(args[j], XtNx, engineOutputX); j++;\r
XtSetArg(args[j], XtNy, engineOutputY); j++;\r
XtSetValues(shell, args, j);\r
return shell;\r
}\r
\r
-void ResizeWindowControls(shell, mode)
- Widget shell;
- int mode;
-{
- Widget form1, form2;
- Arg args[16];
- int j;
- Dimension ew_height, tmp;
-
+void ResizeWindowControls(shell, mode)\r
+ Widget shell;\r
+ int mode;\r
+{\r
+ Widget form1, form2;\r
+ Arg args[16];\r
+ int j;\r
+ Dimension ew_height, tmp;\r
+\r
form1 = XtNameToWidget(shell, "*form");\r
- form2 = XtNameToWidget(shell, "*form2");
-
- j = 0;
- XtSetArg(args[j], XtNheight, (XtArgVal) &ew_height); j++;\r XtGetValues(form1, args, j);
- j = 0;
- XtSetArg(args[j], XtNheight, (XtArgVal) &tmp); j++;\r XtGetValues(form2, args, j);
- ew_height += tmp; // total height
+ form2 = XtNameToWidget(shell, "*form2");\r
+\r
+ j = 0;\r
+ XtSetArg(args[j], XtNheight, (XtArgVal) &ew_height); j++;\r
+ XtGetValues(form1, args, j);\r
+ j = 0;\r
+ XtSetArg(args[j], XtNheight, (XtArgVal) &tmp); j++;\r
+ XtGetValues(form2, args, j);\r
+ ew_height += tmp; // total height\r
\r
if(mode==0) {\r
- j = 0;
+ j = 0;\r
XtSetArg(args[j], XtNheight, (XtArgVal) 5); j++;\r
- XtSetValues(form2, args, j);
- j = 0;
+ XtSetValues(form2, args, j);\r
+ j = 0;\r
XtSetArg(args[j], XtNheight, (XtArgVal) (ew_height-5)); j++;\r
- XtSetValues(form1, args, j);
- } else {
- j = 0;
+ XtSetValues(form1, args, j);\r
+ } else {\r
+ j = 0;\r
XtSetArg(args[j], XtNheight, (XtArgVal) (ew_height/2)); j++;\r
- XtSetValues(form1, args, j);
- j = 0;
+ XtSetValues(form1, args, j);\r
+ j = 0;\r
XtSetArg(args[j], XtNheight, (XtArgVal) (ew_height/2)); j++;\r
- XtSetValues(form2, args, j);
- }\r
-}
-
-#if 0\r
-void EngineOutputCallback(w, client_data, call_data)\r
- Widget w;\r
- XtPointer client_data, call_data;\r
-{\r
- String name;\r
- Arg args[16];\r
- int j;\r
-\r
- j = 0;\r
- XtSetArg(args[j], XtNlabel, &name); j++;\r
- XtGetValues(w, args, j);\r
-\r
- if (strcmp(name, "close") == 0) {\r
- EngineOutputPopDown();\r
- } else if (strcmp(name, "edit") == 0) {\r
- EngineOutputPopDown();\r
- EditCommentEvent();\r
- }\r
-}\r
-#endif
-\r
-#if 0\r
-// This seems pure front end\r
-LRESULT CALLBACK EngineOutputProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )\r
-{\r
- static SnapData sd;\r
-\r
- switch (message) {\r
- case WM_INITDIALOG:\r
- if( engineOutputDialog == NULL ) {\r
- engineOutputDialog = hDlg;\r
-\r
- RestoreWindowPlacement( hDlg, &wpEngineOutput ); /* Restore window placement */\r
-\r
- ResizeWindowControls( hDlg, windowMode );\r
-\r
- SetEngineState( 0, STATE_IDLE, "" );\r
- SetEngineState( 1, STATE_IDLE, "" );\r
- }\r
-\r
- return FALSE;\r
-\r
- case WM_COMMAND:\r
- switch (LOWORD(wParam)) {\r
- case IDOK:\r
- EndDialog(hDlg, TRUE);\r
- return TRUE;\r
-\r
- case IDCANCEL:\r
- EndDialog(hDlg, FALSE);\r
- return TRUE;\r
-\r
- default:\r
- break;\r
- }\r
-\r
- break;\r
-\r
- case WM_GETMINMAXINFO:\r
- {\r
- MINMAXINFO * mmi = (MINMAXINFO *) lParam;\r
- \r
- mmi->ptMinTrackSize.x = 100;\r
- mmi->ptMinTrackSize.y = 160;\r
- }\r
- break;\r
-\r
- case WM_CLOSE:\r
- EngineOutputPopDown();\r
- break;\r
-\r
- case WM_SIZE:\r
- ResizeWindowControls( hDlg, windowMode );\r
- break;\r
-\r
- case WM_ENTERSIZEMOVE:\r
- return OnEnterSizeMove( &sd, hDlg, wParam, lParam );\r
-\r
- case WM_SIZING:\r
- return OnSizing( &sd, hDlg, wParam, lParam );\r
-\r
- case WM_MOVING:\r
- return OnMoving( &sd, hDlg, wParam, lParam );\r
-\r
- case WM_EXITSIZEMOVE:\r
- return OnExitSizeMove( &sd, hDlg, wParam, lParam );\r
+ XtSetValues(form2, args, j);\r
}\r
-\r
- return FALSE;\r
}\r
-#endif
\r
void EngineOutputPopUp(title, text)\r
char *title, *text;\r
CatchDeleteWindow(engineOutputShell, "EngineOutputPopDown");\r
if( needInit ) {\r
InitializeEngineOutput();\r
- needInit = FALSE;\r }\r
+ needInit = FALSE;\r
+ }\r
SetEngineColorIcon( 0 );\r
SetEngineColorIcon( 1 );\r
SetEngineState( 0, STATE_IDLE, "" );\r
SetEngineState( 1, STATE_IDLE, "" );\r
- } else {
+ } else {\r
edit = XtNameToWidget(engineOutputShell, "*form.text");\r
j = 0;\r
XtSetArg(args[j], XtNstring, text); j++;\r
XtPopup(engineOutputShell, XtGrabNone);\r
XSync(xDisplay, False);\r
\r
- j=0;
- XtSetArg(args[j], XtNleftBitmap, xMarkPixmap); j++;
- XtSetValues(XtNameToWidget(menuBarWidget, "menuMode.Show Engine Output"),
- args, j);
-
- engineOutputDialogUp = True;\r
- ShowThinkingEvent(); // [HGM] thinking: might need to prompt engine for thinking output
-}\r
-
-#if 0\r
-// front end\r
-void EngineOutputPopUp()\r
-{\r
- FARPROC lpProc;\r
- \r
- CheckMenuItem(GetMenu(hwndMain), IDM_ShowEngineOutput, MF_CHECKED);\r
-\r
- if( engineOutputDialog ) {\r
- SendMessage( engineOutputDialog, WM_INITDIALOG, 0, 0 );\r
-\r
- if( ! engineOutputDialogUp ) {\r
- ShowWindow(engineOutputDialog, SW_SHOW);\r
- }\r
- }\r
- else {\r
- lpProc = MakeProcInstance( (FARPROC) EngineOutputProc, hInst );\r
-\r
- /* Note to self: dialog must have the WS_VISIBLE style set, otherwise it's not shown! */\r
- CreateDialog( hInst, MAKEINTRESOURCE(DLG_EngineOutput), hwndMain, (DLGPROC)lpProc );\r
+ j=0;\r
+ XtSetArg(args[j], XtNleftBitmap, xMarkPixmap); j++;\r
+ XtSetValues(XtNameToWidget(menuBarWidget, "menuMode.Show Engine Output"),\r
+ args, j);\r
\r
- FreeProcInstance(lpProc);\r
- }\r
-\r
- // [HGM] displaced to after creation of dialog, to allow initialization of output fields\r
- if( needInit ) {\r
- InitializeEngineOutput();\r
- needInit = FALSE;\r
- }\r
-\r
- engineOutputDialogUp = TRUE;\r
+ engineOutputDialogUp = True;\r
+ ShowThinkingEvent(); // [HGM] thinking: might need to prompt engine for thinking output\r
}\r
-#endif
\r
void EngineOutputPopDown()\r
{\r
int j;\r
\r
if (!engineOutputDialogUp) return;\r
- DoClearMemo(1);
+ DoClearMemo(1);\r
j = 0;\r
XtSetArg(args[j], XtNx, &engineOutputX); j++;\r
XtSetArg(args[j], XtNy, &engineOutputY); j++;\r
XtSetArg(args[j], XtNheight, &engineOutputH); j++;\r
XtGetValues(engineOutputShell, args, j);\r
XtPopdown(engineOutputShell);\r
- XSync(xDisplay, False);
- j=0;
- XtSetArg(args[j], XtNleftBitmap, None); j++;
- XtSetValues(XtNameToWidget(menuBarWidget, "menuMode.Show Engine Output"),
- args, j);
+ XSync(xDisplay, False);\r
+ j=0;\r
+ XtSetArg(args[j], XtNleftBitmap, None); j++;\r
+ XtSetValues(XtNameToWidget(menuBarWidget, "menuMode.Show Engine Output"),\r
+ args, j);\r
\r
engineOutputDialogUp = False;\r
- ShowThinkingEvent(); // [HGM] thinking: might need to shut off thinking output
-}\r
-\r
-#if 0
-// front end\r
-void EngineOutputPopDown()\r
-{\r
- CheckMenuItem(GetMenu(hwndMain), IDM_ShowEngineOutput, MF_UNCHECKED);\r
-\r
- if( engineOutputDialog ) {\r
- ShowWindow(engineOutputDialog, SW_HIDE);\r
- }\r
-\r
- engineOutputDialogUp = FALSE;\r
+ ShowThinkingEvent(); // [HGM] thinking: might need to shut off thinking output\r
}\r
\r
-// front end. [HGM] Takes handle of output control from table, so only number is passed\r
-void DoClearMemo(int which)\r
-{\r
- SendMessage( outputField[which][nMemo], WM_SETTEXT, 0, (LPARAM) "" );\r
-}\r
-#endif
-
//------------------------ pure back-end routines -------------------------------\r
\r
\r
return;\r
}\r
\r
- if(gameMode == IcsObserving) return; // [HGM] kibitz: shut up engine if we are observing an ICS game
-
+ if(gameMode == IcsObserving && !appData.icsEngineAnalyze)\r
+ return; // [HGM] kibitz: shut up engine if we are observing an ICS game\r
+\r
which = stats->which;\r
depth = stats->depth;\r
\r
\r
/* Get proper mode for current game */\r
switch( gameMode ) {\r
+ case IcsObserving: // [HGM] ICS analyze\r
+ if(!appData.icsEngineAnalyze) return;\r
case AnalyzeMode:\r
case AnalyzeFile:\r
case MachinePlaysWhite:\r
else if( gameMode == TwoMachinesPlay ) {\r
SetEngineState( ed->which, STATE_THINKING, "" );\r
}\r
- else if( gameMode == AnalyzeMode || gameMode == AnalyzeFile ) {\r
+ else if( gameMode == AnalyzeMode || gameMode == AnalyzeFile \r
+ || gameMode == IcsObserving && appData.icsEngineAnalyze) { // [HGM] ICS-analyze\r
char buf[64];\r
int time_secs = ed->time / 100;\r
int time_mins = time_secs / 60;\r
unsigned long nps_100 = ed->nodes / ed->time;\r
\r
if( nps_100 < 100000 ) {\r
- sprintf( s_label, "NPS: %lu", nps_100 * 100 );\r
+ sprintf( s_label, _("NPS: %lu"), nps_100 * 100 );\r
}\r
else {\r
- sprintf( s_label, "NPS: %.1fk", nps_100 / 10.0 );\r
+ sprintf( s_label, _("NPS: %.1fk"), nps_100 / 10.0 );\r
}\r
}\r
\r
\r
/* Nodes */\r
if( ed->nodes < 1000000 ) {\r
- sprintf( s_nodes, "%lu", ed->nodes );\r
+ sprintf( s_nodes, u64Display, ed->nodes );\r
}\r
else {\r
- sprintf( s_nodes, "%.1fM", ed->nodes / 1000000.0 );\r
+ sprintf( s_nodes, "%.1fM", u64ToDouble(ed->nodes) / 1000000.0 );\r
}\r
\r
/* Score */\r
{\r
return engineOutputDialogUp;\r
}\r
-
-void
-EngineOutputProc(w, event, prms, nprms)
- Widget w;
- XEvent *event;
- String *prms;
- Cardinal *nprms;
-{
- if (engineOutputDialogUp) {
- EngineOutputPopDown();
- } else {
- EngineOutputPopUp("engine output","This feature is experimental");
- }
-// ToNrEvent(currentMove);
-}
-
-// [HGM] kibitz: write kibitz line; split window for it if necessary
-void OutputKibitz(int window, char *text)
-{
- if(!EngineOutputIsUp()) return;
- if(!opponentKibitzes) { // on first kibitz of game, clear memos
- DoClearMemo(1);
- if(gameMode == IcsObserving) DoClearMemo(0);
- }
- opponentKibitzes = TRUE; // this causes split window DisplayMode in ICS modes.
- VerifyDisplayMode();
- if(gameMode == IcsObserving) {
- DoSetWindowText(0, nLabel, gameInfo.white);
- SetIcon( 0, nColorIcon, nColorWhite);
- SetIcon( 0, nStateIcon, nClear);
- }
- DoSetWindowText(1, nLabel, gameMode == IcsPlayingBlack ? gameInfo.white : gameInfo.black); // opponent name
- SetIcon( 1, nColorIcon, gameMode == IcsPlayingBlack ? nColorWhite : nColorBlack);
- SetIcon( 1, nStateIcon, nClear);
- InsertIntoMemo(window-1, text);
-}
-
+\r
+void\r
+EngineOutputProc(w, event, prms, nprms)\r
+ Widget w;\r
+ XEvent *event;\r
+ String *prms;\r
+ Cardinal *nprms;\r
+{\r
+ if (engineOutputDialogUp) {\r
+ EngineOutputPopDown();\r
+ } else {\r
+ EngineOutputPopUp(_("engine output"),_("This feature is experimental"));\r
+ }\r
+// ToNrEvent(currentMove);\r
+}\r
+\r
+// [HGM] kibitz: write kibitz line; split window for it if necessary\r
+void OutputKibitz(int window, char *text)\r
+{\r
+ if(!EngineOutputIsUp()) return;\r
+ if(!opponentKibitzes) { // on first kibitz of game, clear memos\r
+ DoClearMemo(1);\r
+ if(gameMode == IcsObserving) DoClearMemo(0);\r
+ }\r
+ opponentKibitzes = TRUE; // this causes split window DisplayMode in ICS modes.\r
+ VerifyDisplayMode();\r
+ if(gameMode == IcsObserving) {\r
+ DoSetWindowText(0, nLabel, gameInfo.white);\r
+ SetIcon( 0, nColorIcon, nColorWhite);\r
+ SetIcon( 0, nStateIcon, nClear);\r
+ }\r
+ DoSetWindowText(1, nLabel, gameMode == IcsPlayingBlack ? gameInfo.white : gameInfo.black); // opponent name\r
+ SetIcon( 1, nColorIcon, gameMode == IcsPlayingBlack ? nColorWhite : nColorBlack);\r
+ SetIcon( 1, nStateIcon, nClear);\r
+ InsertIntoMemo(window-1, text);\r
+}\r