* FILE: rawdsp.c
*
* ----------------------------------------------------------------------
- *
- * Copyright (c) 2012 Free Software Foundation
+ * Copyright (c) 1993, 1994, 1995 Matthias Mutz
+ * Copyright (c) 1999 Michael Vanier and the Free Software Foundation
*
* GNU SHOGI is based on GNU CHESS
*
+ * Copyright (c) 1988, 1989, 1990 John Stanback
+ * Copyright (c) 1992 Free Software Foundation
+ *
* This file is part of GNU SHOGI.
*
* GNU Shogi is free software; you can redistribute it and/or modify it
#include <ctype.h>
#include <signal.h>
+#include <stdarg.h>
#include <sys/param.h>
#include <sys/types.h>
#include <sys/file.h>
}
-/* FIXME: change to ShowPrompt? */
void
-PromptForMove(void)
+Raw_ShowPrompt(void)
{
if (!barebones && !XSHOGI)
{
/* printf("\nYour move is? "); */
- printf(CP[124]);
+ fputs(CP[124], stdout);
}
}
void
+Raw_AlwaysShowMessage(const char *format, ...)
+{
+ va_list ap;
+ va_start(ap, format);
+ vprintf(format, ap);
+ va_end(ap);
+ printf("\n");
+}
+
+
+void
+Raw_Printf(const char *format, ...)
+{
+ va_list ap;
+ va_start(ap, format);
+ vprintf(format, ap);
+ va_end(ap);
+}
+
+
+void
+Raw_doRequestInputString(const char* fmt, char* buffer)
+{
+ scanf(fmt, buffer);
+}
+
+
+int
+Raw_GetString(char* sx)
+{
+ int eof = 0;
+ sx[0] = '\0';
+
+ while(!eof && !sx[0])
+ eof = (fgets(sx, 80, stdin) == NULL);
+ return eof;
+}
+
+
+void
+Raw_ShowNodeCnt(long NodeCnt)
+{
+ printf(CP[91],
+ NodeCnt, (((et) ? ((NodeCnt * 100) / et) : 0)));
+}
+
+
+void
Raw_ShowPatternCount(short side, short n)
{
if (flag.post)
* End of trivial output routines.
****************************************/
-
void
Raw_Initialize(void)
{
}
-
void
Raw_ExitShogi(void)
{
if (!nolist)
ListGame();
+
+ exit(0);
}
}
-
void
Raw_TerminateSearch(int sig)
{
}
-
void
Raw_help(void)
{
"------------------------------\n");
/* printf("7g7f move from 7g to 7f quit
* Exit Shogi\n"); */
- printf(CP[158]);
+ fputs(CP[158], stdout);
/* printf("S6h move silver to 6h beep
* turn %s\n", (flag.beep) ? "off" : "on"); */
printf(CP[86], (flag.beep) ? CP[92] : CP[93]);
printf(CP[174], (flag.hash) ? CP[92] : CP[93]);
/* printf("bd redraw board reverse
* board display\n"); */
- printf(CP[130]);
+ fputs(CP[130], stdout);
/* printf("list game to shogi.lst book
* turn %s used %d of %d\n", (Book) ? "off" : "on", bookcount); */
printf(CP[170], (Book) ? CP[92] : CP[93], bookcount, booksize);
/* printf("undo undo last ply remove
* take back a move\n"); */
- printf(CP[200]);
+ fputs(CP[200], stdout);
/* printf("edit edit board force
* enter game moves\n"); */
- printf(CP[153]);
+ fputs(CP[153], stdout);
/* printf("switch sides with computer both
* computer match\n"); */
- printf(CP[194]);
+ fputs(CP[194], stdout);
/* printf("black computer plays black white
* computer plays white\n"); */
- printf(CP[202]);
+ fputs(CP[202], stdout);
/* printf("depth set search depth clock
* set time control\n"); */
- printf(CP[149]);
+ fputs(CP[149], stdout);
/* printf("post principle variation hint
* suggest a move\n"); */
- printf(CP[177]);
+ fputs(CP[177], stdout);
/* printf("save game to file get
* game from file\n"); */
- printf(CP[188]);
+ fputs(CP[188], stdout);
printf("xsave pos. to xshogi file xget"
" pos. from xshogi file\n");
/* printf("random randomize play new
* start new game\n"); */
- printf(CP[181]);
+ fputs(CP[181], stdout);
printf("--------------------------------"
"--------------------------------\n");
/* printf("Computer: %-12s Opponent: %s\n", */
(TCflag) ? CP[93] : CP[92],
TimeControl.moves[black], TimeControl.clock[black] / 100,
TCadd/100, MaxSearchDepth);
-
- signal(SIGUSR1, Raw_TerminateSearch);
}
-
/*
* 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
Raw_EditBoard(void)
{
Raw_ClearScreen();
Raw_UpdateDisplay(0, 0, 1, 0);
/* printf(". exit to main\n"); */
- printf(CP[29]);
+ fputs(CP[29], stdout);
/* printf("# clear board\n"); */
- printf(CP[28]);
+ fputs(CP[28], stdout);
/* printf("c change sides\n"); */
- printf(CP[136]);
+ fputs(CP[136], stdout);
/* printf("enter piece & location: \n"); */
- printf(CP[155]);
+ fputs(CP[155], stdout);
a = black;
}
else
{
- c = '9' - s[1];
- r = 'i' - s[2];
+ c = COL_NAME(s[1]);
+ r = ROW_NAME(s[2]);
}
if ((c >= 0) && (c < NO_COLS) && (r >= 0) && (r < NO_ROWS))
}
-
-
/*
* Set up a board position.
* 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
SetupBoard(void)
{
Raw_ClearScreen();
Raw_UpdateDisplay(0, 0, 1, 0);
/* printf("Setup successful\n"); */
- printf(CP[106]);
+ fputs(CP[106], stdout);
}
void
Raw_SearchStartStuff(short side)
{
- signal(SIGUSR1, Raw_TerminateSearch);
-
if (flag.post)
{
printf(CP[123],
}
-
void
Raw_OutputMove(void)
{
if (root->flags & draw)
{
/* printf("Drawn game!\n"); */
- printf(CP[57]);
+ fputs(CP[57], stdout);
}
else if (root->score == -(SCORE_LIMIT + 999))
{
}
-
void
Raw_ChangeAlphaWindow(void)
{
}
-
void
Raw_ChangeBetaWindow(void)
{
}
-
void
Raw_GiveHint(void)
{
printf(CP[72], mvstr[0]); /*hint*/
}
else
- printf(CP[223]);
+ fputs(CP[223], stdout);
}
-
void
Raw_SelectLevel(char *sx)
{
/* line empty ask for input */
if (!T[0])
{
- printf(CP[61]);
+ fputs(CP[61], stdout);
fgets(T, NO_SQUARES + 1, stdin);
strcat(T, "XX");
}
TCseconds = 0;
#ifdef OPERATORTIME
- printf(CP[94]);
+ fputs(CP[94], stdout);
scanf("%hd", &OperatorTime);
#endif
}
-
-
void
Raw_ChangeSearchDepth(void)
{
}
-
-
void
Raw_ChangeHashDepth(void)
{
}
-
void
Raw_SetContempt(void)
{
}
-
void
Raw_ChangeXwindow(void)
{
* Raw_ShowPostnValue(short sq)
* must have called ExaminePosition() first
*/
-
void
Raw_ShowPostnValue(short sq)
{
}
-
void
Raw_DoDebug(void)
{
}
-
void
Raw_DoTable(short table[NO_SQUARES])
{
}
-
void
Raw_ShowPostnValues(void)
{
printf("\nhung black %d hung white %d\n", hung[black], hung[white]);
}
+
+/*
+ * Determine the time that has passed since the search was started. If the
+ * elapsed time exceeds the target(ResponseTime + ExtraTime) then set timeout
+ * to true which will terminate the search.
+ * iop = COMPUTE_MODE calculate et, bump ETnodes
+ * iop = COMPUTE_AND_INIT_MODE calculate et, set timeout if time exceeded,
+ * set reference time
+ */
+void
+Raw_ElapsedTime(ElapsedTime_mode iop)
+{
+ long current_time;
+#ifdef HAVE_GETTIMEOFDAY
+ struct timeval tv;
+ gettimeofday(&tv, NULL);
+ current_time = tv.tv_sec*100 + (tv.tv_usec/10000);
+#else
+ et = ((current_time = time((long *) 0)) - time0) * 100;
+#endif
+
+#ifdef INTERRUPT_TEST
+ if (iop == INIT_INTERRUPT_MODE)
+ {
+ itime0 = current_time;
+ }
+ else if (iop == COMPUTE_INTERRUPT_MODE)
+ {
+ it = current_time - itime0;
+ }
+ else
+#endif
+ {
+#ifdef HAVE_GETTIMEOFDAY
+ et = current_time - time0;
+#endif
+ ETnodes = NodeCnt + znodes;
+
+ if (et < 0)
+ {
+#ifdef INTERRUPT_TEST
+ printf("elapsed time %ld not positive\n", et);
+#endif
+ et = 0;
+ }
+
+ if (iop == COMPUTE_AND_INIT_MODE)
+ {
+ if ((et > (ResponseTime + ExtraTime)) && (Sdepth > MINDEPTH))
+ flag.timeout = true;
+
+ time0 = current_time;
+ }
+ }
+}