X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=xboard.c;h=e5822a482997246cb0b78a72bbdf5114d1452e03;hb=b12ca738583ee21b1533377b3424baba188ba2e0;hp=bdd49b04b9df958902f5ee978db4c2c32b05dc9f;hpb=d2feaeb247df48ac8539ab7f539ad278eea24f26;p=xboard.git diff --git a/xboard.c b/xboard.c index bdd49b0..e5822a4 100644 --- a/xboard.c +++ b/xboard.c @@ -454,6 +454,7 @@ void TimeControlProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)) void OptionsProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); void NewVariantProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); void IcsTextProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); +void LoadEngineProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); void FirstSettingsProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); void SecondSettingsProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); void GameListOptionsPopUp P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); @@ -699,6 +700,8 @@ MenuItem actionMenu[] = { }; MenuItem engineMenu[] = { + {N_("Load New Engine ..."), "Load Engine", LoadEngineProc}, + {"----", NULL, NothingProc}, {N_("Engine #1 Settings ..."), "Engine #1 Settings", FirstSettingsProc}, {N_("Engine #2 Settings ..."), "Engine #2 Settings", SecondSettingsProc}, {"----", NULL, NothingProc}, @@ -1263,8 +1266,8 @@ xpm_closest_to(dirname, size, ext) fprintf(stderr, _("\ Warning: No DIR structure found on this system --\n\ Unable to autosize for XPM/XIM pieces.\n\ - Please report this error to frankm@hiwaay.net.\n\ - Include system type & operating system in message.\n")); + Please report this error to %s.\n\ + Include system type & operating system in message.\n"), PACKAGE_BUGREPORT);); return size; } #endif /* HAVE_DIR_STRUCT */ @@ -1979,8 +1982,8 @@ main(argc, argv) { // [HGM] initstring: kludge to fix bad bug. expand '\n' characters in init string and computer string. static char buf[MSG_SIZ]; - EscapeExpand(buf, appData.initString); - appData.initString = strdup(buf); + EscapeExpand(buf, appData.firstInitString); + appData.firstInitString = strdup(buf); EscapeExpand(buf, appData.secondInitString); appData.secondInitString = strdup(buf); EscapeExpand(buf, appData.firstComputerString); @@ -2793,7 +2796,9 @@ Enables icsEnables[] = { #endif { "menuEngine.Engine #1 Settings", False }, { "menuEngine.Engine #2 Settings", False }, + { "menuEngine.Load Engine", False }, { "menuEdit.Annotate", False }, + { "menuOptions.Match", False }, { NULL, False } }; @@ -2852,6 +2857,20 @@ Enables gnuEnables[] = { { "menuFile.Mail Move", False }, { "menuFile.Reload CMail Message", False }, + // [HGM] The following have been added to make a switch from ncp to GNU mode possible + { "menuMode.Machine White", True }, + { "menuMode.Machine Black", True }, + { "menuMode.Analysis Mode", True }, + { "menuMode.Analyze File", True }, + { "menuMode.Two Machines", True }, + { "menuMode.Machine Match", True }, + { "menuEngine.Engine #1 Settings", True }, + { "menuEngine.Engine #2 Settings", True }, + { "menuEngine.Hint", True }, + { "menuEngine.Book", True }, + { "menuEngine.Move Now", True }, + { "menuEngine.Retract Move", True }, + { "Action", True }, { NULL, False } }; @@ -2906,7 +2925,7 @@ Enables machineThinkingEnables[] = { { "menuMode.Machine White", False }, { "menuMode.Machine Black", False }, { "menuMode.Two Machines", False }, - { "menuMode.Machine Match", False }, +// { "menuMode.Machine Match", False }, { "menuEngine.Retract Move", False }, { NULL, False } }; @@ -2925,7 +2944,7 @@ Enables userThinkingEnables[] = { { "menuMode.Machine White", True }, { "menuMode.Machine Black", True }, { "menuMode.Two Machines", True }, - { "menuMode.Machine Match", True }, +// { "menuMode.Machine Match", True }, { "menuEngine.Retract Move", True }, { NULL, False } }; @@ -3779,10 +3798,10 @@ void CreateMenuBarPopup(parent, name, mb) mi = mb->mi; while (mi->string != NULL) { if (strcmp(mi->string, "----") == 0) { - entry = XtCreateManagedWidget(mi->string, smeLineObjectClass, + entry = XtCreateManagedWidget(_(mi->string), smeLineObjectClass, menu, args, j); } else { - XtSetArg(args[j], XtNlabel, XtNewString(mi->string)); + XtSetArg(args[j], XtNlabel, XtNewString(_(mi->string))); entry = XtCreateManagedWidget(mi->ref, smeBSBObjectClass, menu, args, j+1); XtAddCallback(entry, XtNcallback, @@ -3820,7 +3839,7 @@ Widget CreateMenuBar(mb) XtSetArg(args[j], XtNlabel, XtNewString(shortName)); j++; } else { - XtSetArg(args[j], XtNlabel, XtNewString(mb->name)); j++; + XtSetArg(args[j], XtNlabel, XtNewString(_(mb->name))); j++; } XtSetArg(args[j], XtNborderWidth, 0); j++; @@ -3968,7 +3987,7 @@ void PieceMenuPopup(w, event, params, num_params) String *params; Cardinal *num_params; { - String whichMenu; int menuNr; + String whichMenu; int menuNr = -2; shiftKey = strcmp(params[0], "menuW"); // used to indicate black if (event->type == ButtonRelease) menuNr = RightClick(Release, event->xbutton.x, event->xbutton.y, &pmFromX, &pmFromY); @@ -5289,6 +5308,8 @@ void ModeHighlight() XtSetValues(XtNameToWidget(menuBarWidget, wname), args, 1); } oldmode = gameMode; + XtSetArg(args[0], XtNleftBitmap, matchMode && matchGame < appData.matchGames ? xMarkPixmap : None); + XtSetValues(XtNameToWidget(menuBarWidget, "menuMode.Machine Match"), args, 1); /* Maybe all the enables should be handled here, not just this one */ XtSetSensitive(XtNameToWidget(menuBarWidget, "menuMode.Training"), @@ -5814,8 +5835,6 @@ void MatchProc(w, event, prms, nprms) String *prms; Cardinal *nprms; { - if(gameMode != BeginningOfGame) { DisplayError(_("You can only start a match from the initial position."), 0); return; } - appData.matchGames = appData.defaultMatchGames; MatchEvent(2); } @@ -6745,6 +6764,8 @@ void DisplayMessage(message, extMessage) }; }; + safeStrCpy(lastMsg, message, MSG_SIZ); // [HGM] make available + /* need to test if messageWidget already exists, since this function can also be called during the startup, if for example a Xresource is not set up correctly */ @@ -7600,50 +7621,40 @@ int OpenTCP(host, port, pr) #if OMIT_SOCKETS DisplayFatalError(_("Socket support is not configured in"), 0, 2); #else /* !OMIT_SOCKETS */ + struct addrinfo hints; + struct addrinfo *ais, *ai; + int error; int s; - struct sockaddr_in sa; - struct hostent *hp; - unsigned short uport; ChildProc *cp; - if ((s = socket(AF_INET, SOCK_STREAM, 6)) < 0) { - return errno; - } - - memset((char *) &sa, (int)0, sizeof(struct sockaddr_in)); - sa.sin_family = AF_INET; - sa.sin_addr.s_addr = INADDR_ANY; - uport = (unsigned short) 0; - sa.sin_port = htons(uport); - if (bind(s, (struct sockaddr *) &sa, sizeof(struct sockaddr_in)) < 0) { - return errno; - } - - memset((char *) &sa, (int)0, sizeof(struct sockaddr_in)); - if (!(hp = gethostbyname(host))) { - int b0, b1, b2, b3; - if (sscanf(host, "%d.%d.%d.%d", &b0, &b1, &b2, &b3) == 4) { - hp = (struct hostent *) calloc(1, sizeof(struct hostent)); - hp->h_addrtype = AF_INET; - hp->h_length = 4; - hp->h_addr_list = (char **) calloc(2, sizeof(char *)); - hp->h_addr_list[0] = (char *) malloc(4); - hp->h_addr_list[0][0] = b0; - hp->h_addr_list[0][1] = b1; - hp->h_addr_list[0][2] = b2; - hp->h_addr_list[0][3] = b3; - } else { - return ENOENT; - } + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + + error = getaddrinfo(host, port, &hints, &ais); + if (error != 0) { + /* a getaddrinfo error is not an errno, so can't return it */ + fprintf(debugFP, "getaddrinfo(%s, %s): %s\n", + host, port, gai_strerror(error)); + return ENOENT; + } + + for (ai = ais; ai != NULL; ai = ai->ai_next) { + if ((s = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol)) < 0) { + error = errno; + continue; + } + if (connect(s, ai->ai_addr, ai->ai_addrlen) < 0) { + error = errno; + continue; + } + error = 0; + break; } - sa.sin_family = hp->h_addrtype; - uport = (unsigned short) atoi(port); - sa.sin_port = htons(uport); - memcpy((char *) &sa.sin_addr, hp->h_addr, hp->h_length); + freeaddrinfo(ais); - if (connect(s, (struct sockaddr *) &sa, - sizeof(struct sockaddr_in)) < 0) { - return errno; + if (error != 0) { + return error; } cp = (ChildProc *) calloc(1, sizeof(ChildProc)); @@ -7652,7 +7663,6 @@ int OpenTCP(host, port, pr) cp->fdFrom = s; cp->fdTo = s; *pr = (ProcRef) cp; - #endif /* !OMIT_SOCKETS */ return 0;