X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=gnushogi%2Fcommondsp.c;h=ba564012b2f5ce2d6dd9a99e032c9ef2224ec8ab;hb=978d019d1fbc6789be06ecd8564ea5393aaed373;hp=e5efc1707cfb3cc6af303633020404a3be857a43;hpb=7496586755298a8115a3988a8b52b32d41a4dcb7;p=gnushogi.git diff --git a/gnushogi/commondsp.c b/gnushogi/commondsp.c index e5efc17..ba56401 100644 --- a/gnushogi/commondsp.c +++ b/gnushogi/commondsp.c @@ -54,6 +54,7 @@ int mycnt1, mycnt2; static char *InPtr; struct display *dsp = &raw_display; +short xboard = false; #if defined(BOOKTEST) @@ -181,7 +182,7 @@ algbr(short f, short t, short flag) short piece = flag & pmask; mvstr[0][0] = pxx[piece]; - mvstr[0][1] = '*'; + mvstr[0][1] = xboard ? '@' : '*'; mvstr[0][2] = COL_NAME(column(t)); mvstr[0][3] = ROW_NAME(row(t)); mvstr[0][4] = '\0'; @@ -310,7 +311,7 @@ VerifyMove(char *s, VerifyMove_mode iop, unsigned short *mv) if (SqAttacked(PieceList[opponent][0], computer, &blocked)) { UnmakeMove(opponent, &xnode, &tempb, &tempc, &tempsf, &tempst); - dsp->AlwaysShowMessage("Illegal move (in check) %s", s); + dsp->AlwaysShowMessage("Illegal move (in check): %s", s); return false; } else @@ -352,7 +353,7 @@ VerifyMove(char *s, VerifyMove_mode iop, unsigned short *mv) } } - dsp->AlwaysShowMessage("Illegal move (no match) %s", s); + dsp->AlwaysShowMessage("Illegal move (no match): %s", s); if (!XSHOGI && (cnt > 1)) { @@ -1038,8 +1039,10 @@ BookSave(void) RequestInputString(fname, sizeof(fname)-1); } - if (fname[0] == '\0') + if (fname[0] == '\0') { + dsp->AlwaysShowMessage("aborting book save"); return; + } if ((fd = fopen(fname, "a")) != NULL) { @@ -1419,16 +1422,15 @@ TestPSpeed(short(*f) (short side), unsigned j) static void SetOppTime(char *time) { - int m, t, sec; + int m, t; - sec = 0; t = (int)strtol(time, &time, 10); if (*time == ':') { time++; /* FIXME: sec is parsed but ignored */ - sec = (int)strtol(time, &time, 10); + (void)strtol(time, &time, 10); } m = (int)strtol(time, &time, 10); @@ -1452,16 +1454,15 @@ SetOppTime(char *time) static void SetMachineTime(char *time) { - int m, t, sec; + int m, t; - sec = 0; t = (int)strtol(time, &time, 10); if (*time == ':') { time++; /* FIXME: sec is parsed but ignored */ - sec = (int)strtol(time, &time, 10); + (void)strtol(time, &time, 10); } m = (int)strtol(time, &time, 10); @@ -1495,7 +1496,9 @@ SetMachineTime(char *time) void InputCommand(char *command) { +#ifdef QUIETBACKGROUND short have_shown_prompt = false; +#endif short ok, done, is_move = false; unsigned short mv; char s[80], sx[80]; @@ -1508,7 +1511,7 @@ InputCommand(char *command) ZeroTTable(); #endif - if ((hint > 0) && !flag.easy && !flag.force) + if ((hint > 0) && !flag.easy && !flag.force && !command) { /* * A hint move for the player is available. Compute a move for the @@ -1572,6 +1575,10 @@ InputCommand(char *command) { player = opponent; + if (flag.analyze && !command) { + SelectMove(opponent, BACKGROUND_MODE); + } + #ifdef QUIETBACKGROUND if (!have_shown_prompt) { @@ -1614,19 +1621,69 @@ InputCommand(char *command) } else if (strcmp(s, "post") == 0) { - flag.post = !flag.post; + flag.post = (xboard ? 1 : !flag.post); } - else if (strcmp(s, "alg") == 0) + else if (strcmp(s, "nopost") == 0) + { + flag.post = 0; + } +#ifdef MINISHOGI + else if (strcmp(s, "variant") == 0) + { /* only variant we play is minishogi */ + printf("setup (P.BR.S...G.+.++.+Kp.br.s...g.+.++.+k) 5x5+5_shogi rbsgk/4p/5/P4/KGSBR [-] w 0 1\n"); + } +#endif + else if (strcmp(s, "alg") == 0 || + strcmp(s, "accepted") == 0 || strcmp(s, "rejected") == 0 || + strcmp(s, "variant") == 0 || strcmp(s, "computer") == 0) { /* noop */ ; } - else if ((strcmp(s, "quit") == 0) - || (strcmp(s, "exit") == 0)) + else if ((strcmp(s, "quit") == 0) || + (strcmp(s, "exit") == 0) && !xboard) { flag.quit = true; } - else if ((strcmp(s, "set") == 0) - || (strcmp(s, "edit") == 0)) + else if (strcmp(s, "xboard") == 0) + { + xboard = true; + strcpy(ColorStr[0], "White"); + strcpy(ColorStr[1], "Black"); + } + else if (strcmp(s, "protover") == 0) + { + printf("feature myname=\"GNU %s %s\" ", +#ifdef MINISHOGI + "MiniShogi", +#else + "Shogi", +#endif + PACKAGE_VERSION + ); + printf("variants=\"%s\" ", +#ifdef MINISHOGI + "5x5+5_shogi,minishogi" +#else + "shogi" +#endif + ); + printf("debug=1 setboard=0 sigint=0 done=1\n"); + } + else if (strcmp(s, ".") == 0) + { // ignore for now + } + else if (strcmp(s, "exit") == 0) + { + flag.analyze = false; + flag.force = true; + } + else if (strcmp(s, "analyze") == 0) + { + flag.analyze = true; + flag.force = true; + } + else if ((strcmp(s, "set") == 0) || + (strcmp(s, "edit") == 0)) { dsp->EditBoard(); } @@ -1712,7 +1769,8 @@ InputCommand(char *command) { SetMachineTime(sx + strlen("time")); } - else if (strcmp(s, "otime") == 0) + else if ((strcmp(s, "otime") == 0) || + (xboard && (strcmp(s, "otim")) == 0)) { SetOppTime(sx + strlen("otime")); } @@ -1757,7 +1815,7 @@ InputCommand(char *command) ok = true; dsp->UpdateDisplay(0, 0, 1, 0); } - else if (strcmp(s, "black") == 0) + else if (xboard ? strcmp(s, "white") == 0 : strcmp(s, "black") == 0) { computer = white; opponent = black; @@ -1769,7 +1827,7 @@ InputCommand(char *command) * ok = true; don't automatically start with black command */ } - else if (strcmp(s, "white") == 0) + else if (xboard ? strcmp(s, "black") == 0 : strcmp(s, "white") == 0) { computer = black; opponent = white; @@ -1804,12 +1862,12 @@ InputCommand(char *command) BookSave(); } #ifdef EASY_OPENINGS - else if ((strcmp(s, "?") == 0) - || (strcmp(s, "!") == 0) - || (strcmp(s, "~") == 0)) + else if ((strcmp(s, "?") == 0) || + (strcmp(s, "!") == 0) || + (strcmp(s, "~") == 0)) #else - else if ((strcmp(s, "?") == 0) - || (strcmp(s, "!") == 0)) + else if ((strcmp(s, "?") == 0) || + (strcmp(s, "!") == 0)) #endif { FlagMove(*s);