X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=gnushogi%2Fcommondsp.c;h=e35698d4a69f876c00e5fb5e50d6458be09f0480;hb=a5dcd4c22b91b752f4d7c831318311f14125a29d;hp=bcd84e1e18411e297c0cba52f43ddf41f663c528;hpb=bf2b048e82b1ebe7034e9107a61fdd86fce2a6b7;p=gnushogi.git diff --git a/gnushogi/commondsp.c b/gnushogi/commondsp.c index bcd84e1..e35698d 100644 --- a/gnushogi/commondsp.c +++ b/gnushogi/commondsp.c @@ -1493,8 +1493,8 @@ SetMachineTime(char *time) * the hint move, then set Sdepth to zero. */ -void -InputCommand(char *command) +int +InputCommand(char *command, int root) { #ifdef QUIETBACKGROUND short have_shown_prompt = false; @@ -1502,6 +1502,7 @@ InputCommand(char *command) short ok, done, is_move = false; unsigned short mv; char s[80], sx[80]; + static char backlog[80]; ok = flag.quit = done = false; player = opponent; @@ -1511,7 +1512,7 @@ InputCommand(char *command) ZeroTTable(); #endif - if ((hint > 0) && !flag.easy && !flag.force) + if ((hint > 0) && !flag.easy && !flag.force && !command && !backlog[0] && root) { /* * A hint move for the player is available. Compute a move for the @@ -1575,6 +1576,10 @@ InputCommand(char *command) { player = opponent; + if (flag.analyze && !command && !backlog[0] && root) { + SelectMove(opponent, BACKGROUND_MODE); + } + #ifdef QUIETBACKGROUND if (!have_shown_prompt) { @@ -1588,12 +1593,15 @@ InputCommand(char *command) have_shown_prompt = false; #endif /* QUIETBACKGROUND */ + if (!command && backlog[0]) command = backlog; /* pick up backlogged command */ + if (command == NULL) { int eof = dsp->GetString(sx); if (eof) dsp->ExitShogi(); } else { strcpy(sx, command); + backlog[0]= '\0'; /* make sure no backlog is left */ done = true; } @@ -1601,6 +1609,12 @@ InputCommand(char *command) if (sscanf(sx, "%s", s) < 1) continue; + if (!root && strcmp(s, ".")) + { /* during search most commands can only be done after abort */ + strcpy(backlog, sx); /* backlog the command */ + return true; /* and order search abort */ + } + if (strcmp(s, "bd") == 0) /* bd -- display board */ { /* FIXME: Hack alert! */ @@ -1623,14 +1637,20 @@ InputCommand(char *command) { 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; } @@ -1642,16 +1662,44 @@ InputCommand(char *command) } else if (strcmp(s, "protover") == 0) { - printf("feature myname=\"GNU %sShogi %s\" variants=\"%sshogi\" debug=1 setboard=0 sigint=0 done=1\n", + printf("feature myname=\"GNU %s %s\" ", #ifdef MINISHOGI - "mini", PACKAGE_VERSION, "5x5+5_" + "MiniShogi", #else - "", PACKAGE_VERSION, "" + "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, "set") == 0) - || (strcmp(s, "edit") == 0)) + else if (strcmp(s, ".") == 0) + { // periodic update request of analysis info: send stat01 info + ElapsedTime(2); + algbr((short)(currentMove >> 8), (short)(currentMove & 0xFF), 0); + printf("stat01: %4ld %8ld %2d %2d %2d %s\n", + et, NodeCnt, Sdepth, movesLeft, TrPnt[2]-TrPnt[1], mvstr[0]); + fflush(stdout); + if (!root) return false; /* signal no abort needed */ + } + 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(); } @@ -1830,12 +1878,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); @@ -2000,4 +2048,6 @@ InputCommand(char *command) ++mycnt2, s, TimeControl.clock[player] * 10); } } + + return true; }