X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=gnushogi%2Fcommondsp.c;h=a6f567d1ea86fda729df94d7e770b221d06bddbb;hb=1907f35d3370f971df16e40dec4135110386a84c;hp=a5a3b422ad2162f957120c5bc288d27607954dbe;hpb=9da823015c78c8e9131cf76f14598a1071d29192;p=gnushogi.git diff --git a/gnushogi/commondsp.c b/gnushogi/commondsp.c index a5a3b42..a6f567d 100644 --- a/gnushogi/commondsp.c +++ b/gnushogi/commondsp.c @@ -6,6 +6,7 @@ * ---------------------------------------------------------------------- * Copyright (c) 1993, 1994, 1995 Matthias Mutz * Copyright (c) 1999 Michael Vanier and the Free Software Foundation + * Copyright (c) 2008, 2013, 2014 Yann Dirson and the Free Software Foundation * * GNU SHOGI is based on GNU CHESS * @@ -31,6 +32,10 @@ * */ +/* request *snprintf prototypes */ +#define _POSIX_C_SOURCE 200112L +#include + #if defined HAVE_GETTIMEOFDAY #include #endif @@ -124,8 +129,6 @@ movealgbr(short m, char *s) #endif /* BOOKTEST */ - - /* * Generate move strings in different formats. * @@ -217,7 +220,6 @@ algbr(short f, short t, short flag) } - /* * Compare the string 's' to the list of legal moves available for the * opponent. If a match is found, make the move on the board. @@ -352,9 +354,8 @@ VerifyMove(char *s, VerifyMove_mode iop, unsigned short *mv) } - static int -parser(char *f, int side, short *fpiece) +parser(char *f, short *fpiece) { int c1, r1, c2, r2; short i, p = false; @@ -402,7 +403,6 @@ skip() } - void skipb() { @@ -429,7 +429,7 @@ void RequestInputString(char* buffer, unsigned bufsize) } -void +static void GetGame(void) { FILE *fd; @@ -593,7 +593,7 @@ GetGame(void) InPtr = fname; skipb(); g = &GameList[GameCnt]; - g->gmove = parser(InPtr, side, &g->fpiece); + g->gmove = parser(InPtr, &g->fpiece); skip(); g->score = atoi(InPtr); skip(); @@ -652,8 +652,7 @@ GetGame(void) } - -void +static void SaveGame(void) { FILE *fd; @@ -800,13 +799,12 @@ SaveGame(void) } - /* * GetXGame, SaveXGame and BookGame used to only be defined if * xshogi wasn't defined -- wonder why? */ -void +static void GetXGame(void) { FILE *fd; @@ -935,7 +933,7 @@ GetXGame(void) } -void +static void SaveXGame(void) { FILE *fd; @@ -1015,7 +1013,7 @@ SaveXGame(void) } -void +static void BookSave(void) { FILE *fd; @@ -1107,7 +1105,6 @@ BookSave(void) } - void ListGame(void) { @@ -1235,8 +1232,7 @@ ListGame(void) } - -void +static void FlagMove(char c) { switch(c) @@ -1258,13 +1254,11 @@ FlagMove(char c) } - - /* * Undo the most recent half-move. */ -void +static void Undo(void) { short f, t; @@ -1321,7 +1315,6 @@ Undo(void) } - void FlagString(unsigned short flags, char *s) { @@ -1374,8 +1367,7 @@ FlagString(unsigned short flags, char *s) } - -void +static void TestSpeed(void(*f)(short side, short ply, short in_check, short blockable), unsigned j) @@ -1429,11 +1421,10 @@ TestSpeed(void(*f)(short side, short ply, } - -void +static void TestPSpeed(short(*f) (short side), unsigned j) { - short i; + unsigned i; long cnt, t1, t2; #ifdef HAVE_GETTIMEOFDAY struct timeval tv; @@ -1467,20 +1458,18 @@ TestPSpeed(short(*f) (short side), unsigned j) } - -void -SetOppTime(char *s) +static void +SetOppTime(char *time) { - char *time; int m, t, sec; sec = 0; - time = &s[strlen("otime")]; t = (int)strtol(time, &time, 10); if (*time == ':') { time++; + /* FIXME: sec is parsed but ignored */ sec = (int)strtol(time, &time, 10); } @@ -1502,20 +1491,18 @@ SetOppTime(char *s) } - -void -SetMachineTime(char *s) +static void +SetMachineTime(char *time) { - char *time; int m, t, sec; - time = &s[strlen("time")]; sec = 0; t = (int)strtol(time, &time, 10); if (*time == ':') { time++; + /* FIXME: sec is parsed but ignored */ sec = (int)strtol(time, &time, 10); } @@ -1537,24 +1524,19 @@ SetMachineTime(char *s) } - - - /* FIXME! This is truly the function from hell! */ /* * Process the user's command. If easy mode is OFF (the computer is thinking * on opponents time) and the program is out of book, then make the 'hint' * move on the board and call SelectMove() to find a response. The user - * terminates the search by entering ^C (quit siqnal) before entering a - * command. If the opponent does not make the hint move, then set Sdepth to - * zero. + * terminates the search by entering a command. If the opponent does not make + * the hint move, then set Sdepth to zero. */ void InputCommand(char *command) { - int eof = 0; short have_shown_prompt = false; short ok, done, is_move = false; unsigned short mv; @@ -1581,10 +1563,8 @@ InputCommand(char *command) algbr((short) hint >> 8, (short) hint & 0xff, false); strcpy(s, mvstr[0]); -#if !defined NOPOST if (flag.post) dsp->GiveHint(); -#endif /* do the hint move */ if (VerifyMove(s, VERIFY_AND_TRY_MODE, &mv)) @@ -1648,21 +1628,16 @@ InputCommand(char *command) #endif /* QUIETBACKGROUND */ if (command == NULL) { - if (NOT_CURSES) - s[0] = '\0'; - - eof = dsp->GetString(sx); + int eof = dsp->GetString(sx); + if (eof) + dsp->ExitShogi(); } else { strcpy(sx, command); done = true; } - sscanf(sx, "%s", s); - - if (eof) - dsp->ExitShogi(); - - if (s[0] == '\0') + /* extract first word */ + if (sscanf(sx, "%s", s) < 1) continue; if (strcmp(s, "bd") == 0) /* bd -- display board */ @@ -1685,25 +1660,19 @@ InputCommand(char *command) } else if (strcmp(s, "alg") == 0) { - /* noop */ ; /* alg */ + /* noop */ ; } else if ((strcmp(s, "quit") == 0) || (strcmp(s, "exit") == 0)) { flag.quit = true; } -#if !defined NOPOST - else if (strcmp(s, "post") == 0) - { - flag.post = !flag.post; - } -#endif else if ((strcmp(s, "set") == 0) || (strcmp(s, "edit") == 0)) { dsp->EditBoard(); } - else if ((strcmp(s, "setup") == 0)) + else if (strcmp(s, "setup") == 0) { dsp->SetupBoard(); } @@ -1761,10 +1730,13 @@ InputCommand(char *command) { ListGame(); } - else if ((strcmp(s, "level") == 0) - || (strcmp(s, "clock") == 0)) + else if (strcmp(s, "level") == 0) + { + dsp->SelectLevel(sx + strlen("level")); + } + else if (strcmp(s, "clock") == 0) { - dsp->SelectLevel(sx); + dsp->SelectLevel(sx + strlen("clock")); } else if (strcmp(s, "hash") == 0) { @@ -1780,11 +1752,11 @@ InputCommand(char *command) } else if (strcmp(s, "time") == 0) { - SetMachineTime(sx); + SetMachineTime(sx + strlen("time")); } else if (strcmp(s, "otime") == 0) { - SetOppTime(sx); + SetOppTime(sx + strlen("otime")); } else if (strcmp(s, "Awindow") == 0) { @@ -1893,7 +1865,11 @@ InputCommand(char *command) } else if (strcmp(s, "depth") == 0) { - dsp->ChangeSearchDepth(); + dsp->ChangeSearchDepth(sx + strlen("depth")); + } + else if (strcmp(s, "sd") == 0) + { + dsp->ChangeSearchDepth(sx + strlen("sd")); } else if (strcmp(s, "hashdepth") == 0) { @@ -2040,8 +2016,6 @@ InputCommand(char *command) } #ifdef notdef /* optional pass best line to frontend with move */ -# if !defined NOPOST - if (flag.post && !flag.mate) { int i; @@ -2054,15 +2028,12 @@ InputCommand(char *command) printf("%5s ", mvstr[0]); } } -# endif printf("\n"); #endif } } - - void SetTimeControl(void) {