* Massachusetts.
*
* Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,
- * 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
+ * 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Free
+ * Software Foundation, Inc.
*
* The following terms apply to Digital Equipment Corporation's copyright
* interest in XBoard:
#include <locale.h>
#endif
+#include <X11/keysym.h>
#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include <X11/Shell.h>
#include "draw.h"
#define SLASH '/'
-#define DATADIR "~~"
#ifdef __EMX__
#ifndef HAVE_USLEEP
void DisplayMove P((int moveNumber));
void update_ics_width P(());
int CopyMemoProc P(());
+static int FindLogo P((char *place, char *name, char *buf));
/*
* XBoard depends on Xt R4 or higher
void
ParseColor (int n, char *name)
{ // in XBoard, just copy the color-name string
- if(colorVariable[n]) *(char**)colorVariable[n] = strdup(name);
+ if(colorVariable[n] && *name == '#') *(char**)colorVariable[n] = strdup(name);
}
char *
boardWidget = optList[W_BOARD].handle;
menuBarWidget = optList[W_MENU].handle;
dropMenu = optList[W_DROP].handle;
- titleWidget = optList[optList[W_TITLE].type != -1 ? W_TITLE : W_SMALL].handle;
+ titleWidget = optList[optList[W_TITLE].type != Skip ? W_TITLE : W_SMALL].handle;
formWidget = XtParent(boardWidget);
XtSetArg(args[0], XtNbackground, &timerBackgroundPixel);
XtSetArg(args[1], XtNforeground, &timerForegroundPixel);
CatchDeleteWindow(shellWidget, "QuitProc");
- CreateAnyPieces();
+ CreateAnyPieces(1);
CreateGrid();
if(appData.logoSize)
{ // locate and read user logo
- char buf[MSG_SIZ];
- snprintf(buf, MSG_SIZ, "%s/%s.png", appData.logoDir, UserName());
+ char buf[MSG_SIZ], name[MSG_SIZ];
+ snprintf(name, MSG_SIZ, "/home/%s", UserName());
+ if(!FindLogo(name, ".logo", buf))
+ FindLogo(appData.logoDir, name + 6, buf);
ASSIGN(userLogo, buf);
}
if(sqy < sqx) sqx = sqy;
if(sqx != squareSize) {
squareSize = sqx; // adopt new square size
- CreatePNGPieces(); // make newly scaled pieces
+ CreatePNGPieces(appData.pieceDirectory); // make newly scaled pieces
InitDrawingSizes(0, 0); // creates grid etc.
} else ResizeBoardWindow(BOARD_WIDTH * (squareSize + lineGap) + lineGap, BOARD_HEIGHT * (squareSize + lineGap) + lineGap, 0);
w = BOARD_WIDTH * (squareSize + lineGap) + lineGap;
{
Arg args[16];
static int oldPausing = FALSE;
- static GameMode oldmode = (GameMode) -1;
+ static GameMode oldMode = (GameMode) -1;
char *wname;
if (!boardWidget || !XtIsRealized(boardWidget)) return;
}
}
- wname = ModeToWidgetName(oldmode);
+ wname = ModeToWidgetName(oldMode);
if (wname != NULL) {
MarkMenuItem(wname, False);
}
if (wname != NULL) {
MarkMenuItem(wname, True);
}
- oldmode = gameMode;
+ if(oldMode == TwoMachinesPlay) EnableNamedMenuItem("Mode.MachineMatch", True);
MarkMenuItem("Mode.MachineMatch", matchMode && matchGame < appData.matchGames);
+ oldMode = gameMode;
/* Maybe all the enables should be handled here, not just this one */
EnableNamedMenuItem("Mode.Training", gameMode == Training || gameMode == PlayFromGameFile);
Atom *type, XtPointer value, unsigned long *len, int *format)
{
FILE* f;
+ int flip = appData.flipView;
if (value == NULL || *len == 0) {
return; /* nothing had been selected to copy */
}
fwrite(value, 1, *len, f);
fclose(f);
XtFree(value);
+ if(!appData.autoFlipView) appData.flipView = flipView;
LoadGameFromFile(gamePasteFilename, 0, gamePasteFilename, TRUE);
+ appData.flipView = flip;
}
/* called when Paste Game button is pressed,
}
void
+InfoProc ()
+{
+ char buf[MSG_SIZ];
+ snprintf(buf, sizeof(buf), "xterm -e info --directory %s --directory . -f %s &",
+ INFODIR, INFOFILE);
+ system(buf);
+}
+
+void
SetWindowTitle (char *text, char *title, char *icon)
{
Arg args[16];
#endif
+static int
+FindLogo (char *place, char *name, char *buf)
+{ // check if file exists in given place
+ FILE *f;
+ if(!place) return 0;
+ snprintf(buf, MSG_SIZ, "%s/%s.png", place, name);
+ if(*place && strcmp(place, ".") && (f = fopen(buf, "r")) ) {
+ fclose(f);
+ return 1;
+ }
+ return 0;
+}
+
static void
LoadLogo (ChessProgramState *cps, int n, Boolean ics)
{
} else if(appData.autoLogo) {
if(ics) { // [HGM] logo: in ICS mode second can be used for ICS
sprintf(buf, "%s/%s.png", appData.logoDir, appData.icsHost);
- } else if(appData.logoDir && appData.logoDir[0]) {
- sprintf(buf, "%s/%s.png", appData.logoDir, cps->tidy);
+ } else { // engine; cascade
+ if(!FindLogo(appData.logoDir, cps->tidy, buf) && // first try user log folder
+ !FindLogo(appData.directory[n], "logo", buf) && // then engine directory
+ !FindLogo("/usr/local/share/games/plugins/logos", cps->tidy, buf) ) // then system folders
+ FindLogo("/usr/share/games/plugins/logos", cps->tidy, buf);
}
}
if(logoName[0])