X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=gnushogi%2Frawdsp.c;h=0a4e473059a859757a7bddd83188655eaa7dc0d8;hb=0f5d4e2b00e7911f02ed0f404a3d96d699cabd7e;hp=fa121b023d0134c74ad3f7aa3bf88f820ed6f996;hpb=916e9d3b3acd6422ad21f8edbbe5da768737f2b8;p=gnushogi.git diff --git a/gnushogi/rawdsp.c b/gnushogi/rawdsp.c index fa121b0..0a4e473 100644 --- a/gnushogi/rawdsp.c +++ b/gnushogi/rawdsp.c @@ -4,6 +4,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 * @@ -43,60 +44,47 @@ #include "gnushogi.h" -unsigned short MV[MAXDEPTH]; -int MSCORE; - -int mycnt1, mycnt2; -char *DRAW; -extern char *InPtr; -extern short pscore[]; - /**************************************** * forward declarations ****************************************/ -void Raw_UpdateDisplay(short f, short t, short redraw, short isspec); +static void Raw_UpdateDisplay(short f, short t, short redraw, short isspec); /**************************************** * Trivial output functions. ****************************************/ -void +static void Raw_ClearScreen(void) { - if (!barebones && !XSHOGI) + if (!XSHOGI) printf("\n"); } -void +static void Raw_ShowPrompt(void) { - if (!barebones && !XSHOGI) - { + if (!XSHOGI) fputs("\nYour move is? ", stdout); - } } -void +static void Raw_ShowCurrentMove(short pnt, short f, short t) { } -void +static void Raw_ShowDepth(char ch) { - if (!barebones && !XSHOGI) - { - printf("Depth= %d%c ", Sdepth, ch); - printf("\n"); - } + if (!XSHOGI) + printf("Depth= %d%c \n", Sdepth, ch); } -void +static void Raw_ShowGameType(void) { if (flag.post) @@ -104,7 +92,7 @@ Raw_ShowGameType(void) } -void +static void Raw_ShowLine(unsigned short *bstline) { int i; @@ -122,7 +110,7 @@ Raw_ShowLine(unsigned short *bstline) } -void +static void Raw_ShowMessage(char *s) { if (!XSHOGI) @@ -130,7 +118,7 @@ Raw_ShowMessage(char *s) } -void +static void Raw_AlwaysShowMessage(const char *format, ...) { va_list ap; @@ -141,7 +129,7 @@ Raw_AlwaysShowMessage(const char *format, ...) } -void +static void Raw_Printf(const char *format, ...) { va_list ap; @@ -151,26 +139,33 @@ Raw_Printf(const char *format, ...) } -void +static void Raw_doRequestInputString(const char* fmt, char* buffer) { scanf(fmt, buffer); } -int +static int Raw_GetString(char* sx) { int eof = 0; + char *nl; sx[0] = '\0'; while(!eof && !sx[0]) eof = (fgets(sx, 80, stdin) == NULL); + + /* remove any trailing newline */ + nl = strchr(sx, '\n'); + if (nl) + nl[0] = '\0'; + return eof; } -void +static void Raw_ShowNodeCnt(long NodeCnt) { printf("Nodes = %ld Nodes/sec = %ld\n", @@ -178,7 +173,7 @@ Raw_ShowNodeCnt(long NodeCnt) } -void +static void Raw_ShowPatternCount(short side, short n) { if (flag.post) @@ -186,13 +181,13 @@ Raw_ShowPatternCount(short side, short n) } -void +static void Raw_ShowResponseTime(void) { } -void +static void Raw_ShowResults(short score, unsigned short *bstline, char ch) { if (flag.post && !XSHOGI) @@ -205,13 +200,13 @@ Raw_ShowResults(short score, unsigned short *bstline, char ch) } -void +static void Raw_ShowSidetoMove(void) { } -void +static void Raw_ShowStage(void) { printf("stage = %d\n", stage); @@ -223,7 +218,7 @@ Raw_ShowStage(void) * End of trivial output routines. ****************************************/ -void +static void Raw_Initialize(void) { mycnt1 = mycnt2 = 0; @@ -234,13 +229,13 @@ Raw_Initialize(void) /* needed because of inconsistency between MSVC run-time system and gcc includes */ setbuf(stdout, NULL); #else -#ifdef HAVE_SETLINEBUF - setlinebuf(stdout); -#else -# ifdef HAVE_SETVBUF +#ifdef HAVE_SETVBUF setvbuf(stdout, NULL, _IOLBF, BUFSIZ); +#else +# ifdef HAVE_SETLINEBUF + setlinebuf(stdout); # else -# error "Need setlinebuf() or setvbuf() to compile gnushogi!" +# error "Need setvbuf() or setlinebuf() to compile gnushogi!" # endif #endif #endif @@ -255,7 +250,7 @@ Raw_Initialize(void) } -void +static void Raw_ExitShogi(void) { /* CHECKME: what purpose does this next statement serve? */ @@ -268,20 +263,7 @@ Raw_ExitShogi(void) } -void -Raw_Die(int sig) -{ - char s[80]; - - Raw_ShowMessage("Abort? "); - scanf("%s", s); - - if (strcmp(s, "yes") == 0) - Raw_ExitShogi(); -} - - -void +static void Raw_TerminateSearch(int sig) { #ifdef INTERRUPT_TEST @@ -295,32 +277,50 @@ Raw_TerminateSearch(int sig) } -void +static void Raw_help(void) { Raw_ClearScreen(); printf("GNU Shogi %s command summary\n", PACKAGE_VERSION); - printf("----------------------------------" - "------------------------------\n"); - fputs ("7g7f move from 7g to 7f quit Exit Shogi\n", stdout); - printf("S6h move silver to 6h beep turn %s\n", (flag.beep) ? "OFF" : "ON"); - printf("2d2c+ move to 2c and promote material turn %s\n", (flag.material) ? "OFF" : "ON"); - printf("P*5e drop pawn to 5e easy turn %s\n", (flag.easy) ? "OFF" : "ON"); - printf("tsume toggle tsume mode hash turn %s\n", (flag.hash) ? "OFF" : "ON"); - fputs ("bd redraw board reverse board display\n", stdout); - printf("list game to shogi.lst book turn %s used %d of %d\n", (Book) ? "OFF" : "ON", bookcount, booksize); - fputs ("undo undo last ply remove take back a move\n", stdout); - fputs ("edit edit board force toggle manual move mode\n", stdout); - fputs ("switch sides with computer both computer match\n", stdout); - fputs ("black computer plays black white computer plays white\n", stdout); - fputs ("depth set search depth clock set time control\n", stdout); - fputs ("post principle variation hint suggest a move\n", stdout); - fputs ("save game to file get game from file\n", stdout); - printf("xsave pos. to xshogi file xget" - " pos. from xshogi file\n"); - fputs("random randomize play new start new game\n", stdout); - printf("--------------------------------" - "--------------------------------\n"); + printf("----------------------------------------------------------------\n"); + printf("7g7f move from 7g to 7f quit Exit Shogi\n"); + printf("S6h move silver to 6h beep turn %s\n", + (flag.beep) ? "OFF" : "ON"); + printf("2d2c+ move to 2c and promote material turn %s\n", + (flag.material) ? "OFF" : "ON"); + printf("P*5e drop pawn to 5e easy turn %s\n", + (flag.easy) ? "OFF" : "ON"); + printf("tsume toggle tsume mode hash turn %s\n", + (flag.hash) ? "OFF" : "ON"); + printf("bd redraw board reverse board display\n"); + printf("list game to shogi.lst book turn %s used %d of %d\n", + (Book) ? "OFF" : "ON", bookcount, booksize); + printf("undo undo last ply remove take back a move\n"); + printf("edit edit board force toggle manual move mode\n"); + printf("switch sides with computer both computer match\n"); + printf("black computer plays black white computer plays white\n"); + printf("sd set search depth clock set time control\n"); + printf("post principle variation hint suggest a move\n"); + printf("save game to file get game from file\n"); + printf("xsave pos. to xshogi file xget pos. from xshogi file\n"); + printf("random randomize play new start new game\n"); + printf("setup first \n"); + printf("go computer plays now material turn %s\n", + flag.material ? "OFF" : "ON"); + printf("level time control gamein \n"); + printf("time set engine clock otime set opponent clock\n"); + printf("Awindow Bwindow \n"); + printf("rcptr turn %3s bsave book save\n", + flag.rcptr ? "OFF" : "ON "); + printf("hashdepth hard turn easy OFF\n"); + printf("contempt xwndw \n"); + printf("rv turn %3s coords turn %s\n", + flag.rv ? "OFF" : "ON ", flag.coords ? "OFF" : "ON"); + printf("stars turn %3s moves \n", + flag.stars ? "OFF" : "ON "); + printf("test p \n"); + printf("debug depth alias for 'sd'\n"); + printf("----------------------------------------------------------------\n"); printf("Computer: %-12s Opponent: %s\n", ColorStr[computer], ColorStr[opponent]); printf("Depth: %-12d Response time: %ld sec\n", @@ -342,7 +342,7 @@ Raw_help(void) * Set up a board position. Pieces are entered by typing the piece followed * by the location. For example, Nf3 will place a knight on square f3. */ -void +static void Raw_EditBoard(void) { short a, r, c, sq, i, found; @@ -443,7 +443,7 @@ Raw_EditBoard(void) * Nine lines of nine characters are used to setup the board. 9a-1a is the * first line. White pieces are represented by uppercase characters. */ -void +static void Raw_SetupBoard(void) { short r, c, sq, i; @@ -493,7 +493,7 @@ Raw_SetupBoard(void) } -void +static void Raw_SearchStartStuff(short side) { if (flag.post) @@ -505,7 +505,7 @@ Raw_SearchStartStuff(short side) } -void +static void Raw_OutputMove(void) { if (flag.illegal) @@ -518,15 +518,11 @@ Raw_OutputMove(void) goto nomove; if (XSHOGI) - { /* add remaining time in milliseconds to xshogi */ printf("%d. ... %s %ld\n", ++mycnt1, mvstr[0], (TimeControl.clock[player] - et) * 10); - } else - { printf("%d. ... %s\n", ++mycnt1, mvstr[0]); - } nomove: if ((root->flags & draw) || (root->score == -(SCORE_LIMIT + 999)) @@ -571,39 +567,29 @@ Raw_OutputMove(void) summary: if (root->flags & draw) - { fputs("Drawn game!\n", stdout); - } else if (root->score == -(SCORE_LIMIT + 999)) - { printf("%s mates!\n", ColorStr[opponent]); - } else if (root->score == (SCORE_LIMIT + 998)) - { printf("%s mates!\n", ColorStr[computer]); - } #ifdef VERYBUGGY - else if (!barebones && (root->score < -SCORE_LIMIT)) - { + else if (!XSHOGI && (root->score < -SCORE_LIMIT)) printf("%s has a forced mate in %d moves!\n", ColorStr[opponent], SCORE_LIMIT + 999 + root->score - 1); - } - else if (!barebones && (root->score > SCORE_LIMIT)) - { + else if (!XSHOGI && (root->score > SCORE_LIMIT)) printf("%s has a forced mate in %d moves!\n", ColorStr[computer], SCORE_LIMIT + 998 - root->score - 1); - } #endif /* VERYBUGGY */ } -void +static void Raw_UpdateClocks(void) { } -void +static void Raw_UpdateDisplay(short f, short t, short redraw, short isspec) { @@ -662,7 +648,7 @@ Raw_UpdateDisplay(short f, short t, short redraw, short isspec) } -void +static void Raw_ChangeAlphaWindow(void) { printf("WAwindow: "); @@ -672,7 +658,7 @@ Raw_ChangeAlphaWindow(void) } -void +static void Raw_ChangeBetaWindow(void) { printf("WBwindow: "); @@ -682,7 +668,7 @@ Raw_ChangeBetaWindow(void) } -void +static void Raw_GiveHint(void) { if (hint) @@ -695,31 +681,20 @@ Raw_GiveHint(void) } -void +static void Raw_SelectLevel(char *sx) { + /* FIXME: NO_SQUARES is nonsense here */ + char T[NO_SQUARES + 1], *p; - char T[NO_SQUARES + 1], *p, *q; + strncpy(T, sx, NO_SQUARES); + T[NO_SQUARES] = '\0'; - if ((p = strstr(sx, "level")) != NULL) - p += strlen("level"); - else if ((p = strstr(sx, "clock")) != NULL) - p += strlen("clock"); - - strcat(sx, "XX"); - q = T; - *q = '\0'; - - for (; *p != 'X'; *q++ = *p++); - - *q = '\0'; - - /* line empty ask for input */ + /* if line empty, ask for input */ if (!T[0]) { fputs("Enter #moves #minutes: ", stdout); fgets(T, NO_SQUARES + 1, stdin); - strcat(T, "XX"); } /* skip blackspace */ @@ -729,6 +704,7 @@ Raw_SelectLevel(char *sx) if (*p == 'f') { /* its a fischer clock game */ + char *q; p++; TCminutes = (short)strtol(p, &q, 10); TCadd = (short)strtol(q, NULL, 10) *100; @@ -738,6 +714,7 @@ Raw_SelectLevel(char *sx) else { /* regular game */ + char *q; TCadd = 0; TCmoves = (short)strtol(p, &q, 10); TCminutes = (short)strtol(q, &q, 10); @@ -777,16 +754,22 @@ Raw_SelectLevel(char *sx) } -void -Raw_ChangeSearchDepth(void) +static void +Raw_ChangeSearchDepth(char *sx) { - printf("depth = "); - scanf("%hd", &MaxSearchDepth); + char buf[80+1]; + strncpy(buf, sx, 80); buf[80] = '\0'; + /* if line empty, ask for input */ + if (!buf[0]) { + printf("depth = "); + fgets(buf, 80+1, stdin); + } + sscanf(buf, "%hd", &MaxSearchDepth); TCflag = !(MaxSearchDepth > 0); } -void +static void Raw_ChangeHashDepth(void) { printf("hashdepth = "); @@ -796,7 +779,7 @@ Raw_ChangeHashDepth(void) } -void +static void Raw_SetContempt(void) { printf("contempt = "); @@ -804,7 +787,7 @@ Raw_SetContempt(void) } -void +static void Raw_ChangeXwindow(void) { printf("xwndw = "); @@ -816,7 +799,7 @@ Raw_ChangeXwindow(void) * Raw_ShowPostnValue(short sq) * must have called ExaminePosition() first */ -void +static void Raw_ShowPostnValue(short sq) { (void) ScorePosition(color[sq]); @@ -836,7 +819,7 @@ Raw_ShowPostnValue(short sq) } -void +static void Raw_DoDebug(void) { short c, p, sq, tp, tc, tsq, score, j, k; @@ -914,7 +897,7 @@ Raw_DoDebug(void) } -void +static void Raw_DoTable(short table[NO_SQUARES]) { short sq, j, k; @@ -933,7 +916,7 @@ Raw_DoTable(short table[NO_SQUARES]) } -void +static void Raw_ShowPostnValues(void) { short sq, score, j, k; @@ -958,7 +941,7 @@ Raw_ShowPostnValues(void) } -void +static void Raw_PollForInput(void) { #ifdef WIN32