* ----------------------------------------------------------------------
* 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
*
*
*/
+/* request *snprintf prototypes */
+#define _POSIX_C_SOURCE 200112L
+#include <stdio.h>
+
#if defined HAVE_GETTIMEOFDAY
#include <sys/time.h>
#endif
#include <sys/types.h>
#include <sys/file.h>
-#include <curses.h>
#include "gnushogi.h"
char mvstr[4][6];
-char *InPtr;
-int InBackground = false;
+int mycnt1, mycnt2;
+static char *InPtr;
+struct display *dsp = &raw_display;
#if defined(BOOKTEST)
s++;
*s = '*';
s++;
- *s = cxx[column(t)];
+ *s = COL_NAME(column(t));
s++;
- *s = rxx[row(t)];
+ *s = ROW_NAME(row(t));
s++;
}
else
{
- *s = cxx[column(f)];
+ *s = COL_NAME(column(f));
s++;
- *s = rxx[row(f)];
+ *s = ROW_NAME(row(f));
s++;
- *s = cxx[column(t)];
+ *s = COL_NAME(column(t));
s++;
- *s = rxx[row(t)];
+ *s = ROW_NAME(row(t));
s++;
if (flag & promote)
#endif /* BOOKTEST */
-
-
/*
* Generate move strings in different formats.
*
* - NO_SQUARES <= f NO_SQUARES + 2*NO_PIECES dropped piece modulo NO_PIECES
* - t & 0x7f target square
* - t & 0x80 promotion flag
- * - flag FIXME: must be zero ?
+ * - flag
+ * - if flag & dropmask, piece type encoded in flag & pmask
+ *
+ * FIXME: that makes 2 ways to specify drops and promotions, why ?
*
* OUTPUT:
* - GLOBAL mvstr
if ((f == t) && ((f != 0) || (t != 0)))
{
- if (!barebones)
- {
- if (NOT_CURSES)
- printf("error in algbr: FROM=TO=%d, flag=0x%4x\n", t, flag);
- else
- printw("error in algbr: FROM=TO=%d, flag=0x%4x\n", t, flag);
+ if (!XSHOGI) {
+ dsp->Printf("error in algbr: FROM=TO=%d, flag=0x%4x\n", t, flag);
}
mvstr[0][0] = mvstr[1][0] = mvstr[2][0] = mvstr[3][0] = '\0';
mvstr[0][0] = pxx[piece];
mvstr[0][1] = '*';
- mvstr[0][2] = cxx[column(t)];
- mvstr[0][3] = rxx[row(t)];
+ mvstr[0][2] = COL_NAME(column(t));
+ mvstr[0][3] = ROW_NAME(row(t));
mvstr[0][4] = '\0';
strcpy(mvstr[1], mvstr[0]);
strcpy(mvstr[2], mvstr[0]);
}
else if ((f != 0) || (t != 0))
{
- /* algebraic notation */
- mvstr[0][0] = cxx[column(f)];
- mvstr[0][1] = rxx[row(f)];
- mvstr[0][2] = cxx[column(t)];
- mvstr[0][3] = rxx[row(t)];
- mvstr[0][4] = mvstr[3][0] = '\0';
+ /* pure coordinates notation */
+ mvstr[0][0] = COL_NAME(column(f));
+ mvstr[0][1] = ROW_NAME(row(f));
+ mvstr[0][2] = COL_NAME(column(t));
+ mvstr[0][3] = ROW_NAME(row(t));
+ mvstr[0][4] = '\0';
+
+ /* algebraic notation without disambiguation */
mvstr[1][0] = pxx[board[f]];
+ mvstr[1][1] = mvstr[0][2]; /* to column */
+ mvstr[1][2] = mvstr[0][3]; /* to row */
+ mvstr[1][3] = '\0';
+ /* algebraic notation with row disambiguation */
mvstr[2][0] = mvstr[1][0];
mvstr[2][1] = mvstr[0][1];
+ mvstr[2][2] = mvstr[0][2]; /* to column */
+ mvstr[2][3] = mvstr[0][3]; /* to row */
+ mvstr[2][4] = '\0';
- mvstr[2][2] = mvstr[1][1] = mvstr[0][2]; /* to column */
- mvstr[2][3] = mvstr[1][2] = mvstr[0][3]; /* to row */
- mvstr[2][4] = mvstr[1][3] = '\0';
+ /* algebraic notation with column disambiguation */
strcpy(mvstr[3], mvstr[2]);
mvstr[3][1] = mvstr[0][0];
}
-
/*
* 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.
if (SqAttacked(PieceList[opponent][0], computer, &blocked))
{
UnmakeMove(opponent, &xnode, &tempb, &tempc, &tempsf, &tempst);
-
- if (NOT_CURSES)
- {
- /* Illegal move in check */
- printf(CP[77], mvstr[0]);
- printf("\n");
- }
- else
- {
- /* Illegal move in check */
- sprintf(buffer, CP[77], s);
- ShowMessage(buffer);
- }
-
+ dsp->AlwaysShowMessage("Illegal move (in check) %s", s);
return false;
}
else
if (iop == VERIFY_AND_TRY_MODE)
return true;
- UpdateDisplay(xnode.f, xnode.t, 0, (short) xnode.flags);
+ dsp->UpdateDisplay(xnode.f, xnode.t, 0, (short) xnode.flags);
GameList[GameCnt].depth = GameList[GameCnt].score = 0;
GameList[GameCnt].nodes = 0;
ElapsedTime(COMPUTE_AND_INIT_MODE);
char buf[20];
sprintf(buf, "%s mates!\n", ColorStr[opponent]);
- ShowMessage(buf);
+ dsp->ShowMessage(buf);
flag.mate = true;
}
}
}
}
- if (NOT_CURSES)
- {
- /* Illegal move */
- printf (CP[75], s);
- }
- else /* Curses. */
- {
- /* Illegal move */
- sprintf(buffer, CP[76], s);
- ShowMessage(buffer);
- }
+ dsp->AlwaysShowMessage("Illegal move (no match) %s", s);
- if (!barebones && (cnt > 1))
+ if (!XSHOGI && (cnt > 1))
{
- sprintf(buffer, CP[32], s);
- ShowMessage(buffer);
+ sprintf(buffer, "Ambiguous Move %s!", s);
+ dsp->ShowMessage(buffer);
}
return false;
}
-
static int
-parser(char *f, int side, short *fpiece)
+parser(char *f, short *fpiece)
{
int c1, r1, c2, r2;
short i, p = false;
}
-
void
skipb()
{
}
+void RequestInputString(char* buffer, unsigned bufsize)
+{
+ static char fmt[10];
+ int ret = snprintf(fmt, sizeof(fmt), "%%%us", bufsize);
+ if (ret < 0 ) {
+ perror("RequestInputString snprintf");
+ exit(1);
+ }
+ if (ret >= sizeof(fmt)) {
+ fprintf(stderr,
+ "Insufficient format-buffer size in %s for bufsize=%u\n",
+ __FUNCTION__, bufsize);
+ exit(1);
+ }
+ dsp->doRequestInputString(fmt, buffer);
+}
-void
+
+static void
GetGame(void)
{
FILE *fd;
short sq;
short side, isp;
- if (savefile[0])
- {
+ if (savefile[0]) {
strcpy(fname, savefile);
+ } else {
+ dsp->ShowMessage("Enter file name: ");
+ RequestInputString(fname, sizeof(fname)-1);
}
- else
- {
- /* Enter file name */
- ShowMessage(CP[63]);
- if (NOT_CURSES)
- {
- scanf("%s", fname);
- }
- else
- {
- fflush(stdout);
- scanw("%s", fname);
- }
- }
-
- /* shogi.000 */
if (fname[0] == '\0')
- strcpy(fname, CP[137]);
+ strcpy(fname, "shogi.000");
if ((fd = fopen(fname, "r")) != NULL)
{
skipb();
Captured[side][pawn] = atoi(InPtr);
skip();
+#ifndef MINISHOGI
Captured[side][lance] = atoi(InPtr);
skip();
Captured[side][knight] = atoi(InPtr);
skip();
+#endif
Captured[side][silver] = atoi(InPtr);
skip();
Captured[side][gold] = atoi(InPtr);
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();
}
skip();
- g->color = ((*InPtr == CP[119][0]) ? white : black);
+ g->color = ((*InPtr == 'W') ? white : black);
skip();
g->piece = (*InPtr == '+'
? promoted[piece]
ZeroRPT();
InitializeStats();
- UpdateDisplay(0, 0, 1, 0);
+ dsp->UpdateDisplay(0, 0, 1, 0);
Sdepth = 0;
hint = 0;
}
-
-void
+static void
SaveGame(void)
{
FILE *fd;
short side, piece;
char empty[2] = "\n";
- if (savefile[0])
- {
+ if (savefile[0]) {
strcpy(fname, savefile);
+ } else {
+ dsp->ShowMessage("Enter file name: ");
+ RequestInputString(fname, sizeof(fname)-1);
}
- else
- {
- /* Enter file name */
- ShowMessage(CP[63]);
- if (NOT_CURSES)
- {
- scanf("%s", fname);
- }
- else
- {
- fflush(stdout);
- scanw("%s", fname);
- }
- }
-
- if (fname[0] == '\0') /* shogi.000 */
- strcpy(fname, CP[137]);
+ if (fname[0] == '\0')
+ strcpy(fname, "shogi.000");
if ((fd = fopen(fname, "w")) != NULL)
{
char *b, *w;
- b = w = CP[74];
+ b = w = "Human ";
if (computer == white)
- w = CP[141];
+ w = "computer";
if (computer == black)
- b = CP[141];
+ b = "computer";
- fprintf(fd, CP[37], w, b, Game50,
+ fprintf(fd, "White %s Black %s %d %s\n", w, b, Game50,
flag.force ? "force" : "");
fputs(empty, fd);
- fprintf(fd, CP[111], TCflag, OperatorTime);
- fprintf(fd, CP[117],
+ fprintf(fd, "TimeControl %d Operator Time %d\n", TCflag, OperatorTime);
+ fprintf(fd, "Black Clock %ld Moves %d\nWhite Clock %ld Moves %d\n",
TimeControl.clock[black], TimeControl.moves[black],
TimeControl.clock[white], TimeControl.moves[white]);
fputs(empty, fd);
}
fputs(empty, fd);
- fprintf(fd, " 9 8 7 6 5 4 3 2 1\n"); /* FIXME */
+#ifndef MINISHOGI
+ fprintf(fd, " 9 8 7 6 5 4 3 2 1\n");
fputs(empty, fd);
fprintf(fd, " p l n s g b r k\n");
+#else
+ fprintf(fd, " 5 4 3 2 1\n");
+ fputs(empty, fd);
+ fprintf(fd, " p s g b r k\n");
+#endif
for (side = 0; side <= 1; side++)
{
fprintf(fd, "%c", (side == black) ? 'B' : 'W');
fprintf(fd, " %2d", Captured[side][pawn]);
+#ifndef MINISHOGI
fprintf(fd, " %2d", Captured[side][lance]);
fprintf(fd, " %2d", Captured[side][knight]);
+#endif
fprintf(fd, " %2d", Captured[side][silver]);
fprintf(fd, " %2d", Captured[side][gold]);
fprintf(fd, " %2d", Captured[side][bishop]);
}
fputs(empty, fd);
- fputs(CP[126], fd);
+ fputs(" move score depth nodes time flags capture\n", fd);
for (i = 1; i <= GameCnt; i++)
{
fclose(fd);
- /* Game saved */
- ShowMessage(CP[70]);
+ dsp->ShowMessage("Game saved");
}
else
{
- /* ShowMessage("Could not open file"); */
- ShowMessage(CP[48]);
+ dsp->ShowMessage("Could not open file");
}
}
-
/*
* GetXGame, SaveXGame and BookGame used to only be defined if
* xshogi wasn't defined -- wonder why?
*/
-void
+static void
GetXGame(void)
{
FILE *fd;
short sq;
short side, isp;
- /* Enter file name */
- ShowMessage(CP[63]);
+ dsp->ShowMessage("Enter file name: ");
+ RequestInputString(fname, sizeof(fname)-1);
- if (NOT_CURSES)
- {
- scanf("%s", fname);
- }
- else
- {
- fflush(stdout);
- scanw("%s", fname);
- }
-
- if (fname[0] == '\0') /* XSHOGI.position.read */
- strcpy(fname, CP[205]);
+ if (fname[0] == '\0')
+ strcpy(fname, "xshogi.position.read");
if ((fd = fopen(fname, "r")) != NULL)
{
#ifdef notdef
fname[6] = '\0';
- if (strcmp(fname, CP[206]))
+ if (strcmp(fname, "xshogi"))
return;
#endif
InPtr = fname;
Captured[side][pawn] = atoi(InPtr);
skip();
+#ifndef MINISHOGI
Captured[side][lance] = atoi(InPtr);
skip();
Captured[side][knight] = atoi(InPtr);
skip();
+#endif
Captured[side][silver] = atoi(InPtr);
skip();
Captured[side][gold] = atoi(InPtr);
Game50 = 1;
ZeroRPT();
InitializeStats();
- UpdateDisplay(0, 0, 1, 0);
+ dsp->UpdateDisplay(0, 0, 1, 0);
Sdepth = 0;
hint = 0;
}
-void
+static void
SaveXGame(void)
{
FILE *fd;
short sq, piece;
short side, isp;
- /* Enter file name */
- ShowMessage(CP[63]);
-
- if (NOT_CURSES)
- {
- scanf("%s", fname);
- }
- else
- {
- fflush(stdout);
- scanw("%s", fname);
- }
+ dsp->ShowMessage("Enter file name: ");
+ RequestInputString(fname, sizeof(fname)-1);
- if (fname[0] == '\0') /* XSHOGI.position.read */
- strcpy(fname, CP[205]);
+ if (fname[0] == '\0')
+ strcpy(fname, "xshogi.position.read");
if ((fd = fopen(fname, "w")) != NULL)
{
- /* xshogi position file ... */
fputs("# xshogi position file -- \n", fd);
- /* -- empty line -- */
fputs("\n", fd);
- /* -- empty line -- */
fputs("\n", fd);
for (i = NO_ROWS - 1; i > -1; i--)
for (side = 0; side <= 1; side++)
{
- sprintf(fname, "%d %d %d %d %d %d %d %d\n",
+ sprintf(fname,
+#ifndef MINISHOGI
+ "%d %d %d %d %d %d %d %d\n",
+#else
+ "%d %d %d %d %d %d\n",
+#endif
Captured[side][pawn],
+#ifndef MINISHOGI
Captured[side][lance],
Captured[side][knight],
+#endif
Captured[side][silver],
Captured[side][gold],
Captured[side][bishop],
}
-void
+static void
BookSave(void)
{
FILE *fd;
char fname[256], sflags[4];
short i, j, f, t;
- if (savefile[0])
- {
+ if (savefile[0]) {
strcpy(fname, savefile);
- }
- else
- {
+ } else {
/* Enter file name */
- ShowMessage(CP[63]);
-
- if (NOT_CURSES)
- {
- scanf("%s", fname);
- }
- else
- {
- fflush(stdout);
- scanw("%s", fname);
- }
+ dsp->ShowMessage("Enter file name: ");
+ RequestInputString(fname, sizeof(fname)-1);
}
if (fname[0] == '\0')
fclose(fd);
- /* Game saved */
- ShowMessage(CP[70]);
+ dsp->ShowMessage("Game saved");
}
else
{
- /* ShowMessage("Could not open file"); */
- ShowMessage(CP[48]);
+ dsp->ShowMessage("Could not open file");
}
}
-
void
ListGame(void)
{
dbuf[16] = '\0';
dbuf[19] = '\0';
- /* use format "CLp16.Jan01-020304B" when patchlevel is 16,
+ /* use format "CL.Jan01-020304B" when
date is Jan 1
time is 02:03:04
program played white */
- sprintf(fname, "CLp%s.%s%s-%s%s%s%c",
- patchlevel, dbuf + 4, dbuf + 8, dbuf + 11, dbuf + 14,
+ sprintf(fname, "CL.%s%s-%s%s%s%c",
+ dbuf + 4, dbuf + 8, dbuf + 11, dbuf + 14,
dbuf + 17, ColorStr[computer][0]);
/* replace space padding with 0 */
if (!fd)
{
- printf(CP[219], fname);
+ printf("Open failure for file: %s", fname);
exit(1);
}
- /* fprintf(fd, "gnushogi game %d\n", u); */
- fprintf(fd, CP[161], version, patchlevel);
- fputs(CP[10], fd);
- fputs(CP[11], fd);
+ fprintf(fd, "gnushogi %s game\n", PACKAGE_VERSION);
+ fputs(" score depth nodes time ", fd);
+ fputs(" score depth nodes time\n", fd);
for (i = 1; i <= GameCnt; i++)
{
if (GameList[GameCnt].flags & draw)
{
- fprintf(fd, CP[54], DRAW);
+ fprintf(fd, "Draw %s\n", DRAW);
- if (DRAW == CP[101])
+ if (DRAW == DRAW_REPETITION)
{
short j;
}
-
-void
+static void
FlagMove(char c)
{
switch(c)
}
-
-
/*
* Undo the most recent half-move.
*/
-void
+static void
Undo(void)
{
short f, t;
flag.mate = false;
Sdepth = 0;
player = player ^ 1;
- ShowSidetoMove();
- UpdateDisplay(0, 0, 1, 0);
+ dsp->ShowSidetoMove();
+ dsp->UpdateDisplay(0, 0, 1, 0);
if (flag.regularstart)
Book = false;
}
-
-void
-FlagString(unsigned short flags, char *s)
-{
- short l, piece;
- *s = '\0';
-
- if (flags & promote)
- strcat(s, " promote");
-
- if (flags & dropmask)
- strcat(s, " drop:");
-
- if ((piece = (flags & pmask)))
- {
- l = strlen(s);
-
- if (is_promoted[piece])
- s[l++] = '+';
-
- s[l++] = pxx[piece];
- s[l] = '\0';
- }
-
- if (flags & capture)
- strcat(s, " capture");
-
- if (flags & exact)
- strcat(s, " exact");
-
- if (flags & tesuji)
- strcat(s, " tesuji");
-
- if (flags & check)
- strcat(s, " check");
-
- if (flags & draw)
- strcat(s, " draw");
-
- if (flags & stupid)
- strcat(s, " stupid");
-
- if (flags & questionable)
- strcat(s, " questionable");
-
- if (flags & kingattack)
- strcat(s, " kingattack");
-
- if (flags & book)
- strcat(s, " book");
-}
-
-
-
-void
+static void
TestSpeed(void(*f)(short side, short ply,
short in_check, short blockable),
unsigned j)
#endif
unsigned i;
- long cnt, rate, t1, t2;
+ long cnt, t1, t2;
#ifdef HAVE_GETTIMEOFDAY
struct timeval tv;
else
et = 1;
- rate = (((et) ? ((cnt * 100) / et) : 0));
-
-#ifdef DYNAMIC_ZNODES
- if (rate > 0)
- znodes = rate;
-#endif
-
- if (NOT_CURSES)
- printf(CP[91], cnt, rate);
- else
- ShowNodeCnt(cnt);
+ dsp->ShowNodeCnt(cnt);
}
-
-void
+static void
TestPSpeed(short(*f) (short side), unsigned j)
{
- short i;
- long cnt, rate, t1, t2;
+ unsigned i;
+ long cnt, t1, t2;
#ifdef HAVE_GETTIMEOFDAY
struct timeval tv;
#endif
else
et = 1;
- rate = (et) ? ((cnt * 100) / et) : 0;
-
- /* printf("Nodes= %ld Nodes/sec= %ld\n", cnt, rate); */
-
- if (NOT_CURSES)
- printf(CP[91], cnt, rate);
- else
- ShowNodeCnt(cnt);
+ dsp->ShowNodeCnt(cnt);
}
-
-void
-SetOppTime(char *s)
+static void
+SetOppTime(char *time)
{
- char *time;
int m, t, sec;
sec = 0;
- time = &s[strlen(CP[228])];
t = (int)strtol(time, &time, 10);
if (*time == ':')
{
time++;
+ /* FIXME: sec is parsed but ignored */
sec = (int)strtol(time, &time, 10);
}
}
-
-void
-SetMachineTime(char *s)
+static void
+SetMachineTime(char *time)
{
- char *time;
int m, t, sec;
- time = &s[strlen(CP[197])];
sec = 0;
t = (int)strtol(time, &time, 10);
if (*time == ':')
{
time++;
+ /* FIXME: sec is parsed but ignored */
sec = (int)strtol(time, &time, 10);
}
}
-
-
-
/* 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;
algbr((short) hint >> 8, (short) hint & 0xff, false);
strcpy(s, mvstr[0]);
-#if !defined NOPOST
if (flag.post)
- GiveHint();
-#endif
+ dsp->GiveHint();
/* do the hint move */
if (VerifyMove(s, VERIFY_AND_TRY_MODE, &mv))
Sdepth = 0;
#ifdef QUIETBACKGROUND
- if (NOT_CURSES)
- {
- PromptForMove();
- }
- else
- {
- ShowSidetoMove();
- ShowPrompt();
- }
-
+ dsp->ShowPrompt();
have_shown_prompt = true;
#endif /* QUIETBACKGROUND */
{
#endif /* QUIETBACKGROUND */
- if (NOT_CURSES)
- {
- PromptForMove();
- }
- else
- {
- ShowSidetoMove();
- ShowPrompt();
- }
+ dsp->ShowPrompt();
#ifdef QUIETBACKGROUND
}
have_shown_prompt = false;
#endif /* QUIETBACKGROUND */
- if (command == NULL)
- {
- if (NOT_CURSES)
- {
- s[0] = sx[0] = '\0';
-
- while(!sx[0])
- (void)fgets(sx, 80, stdin);
- }
- else
- {
- fflush(stdout);
- eof = (getstr(sx) == ERR);
- }
- }
- else
- {
+ if (command == NULL) {
+ int eof = dsp->GetString(sx);
+ if (eof)
+ dsp->ExitShogi();
+ } else {
strcpy(sx, command);
done = true;
}
- sscanf(sx, "%s", s);
-
- if (eof)
- ExitShogi();
-
- if (s[0] == '\0')
+ /* extract first word */
+ if (sscanf(sx, "%s", s) < 1)
continue;
- if (strcmp(s, CP[131]) == 0) /* bd -- display board */
+ if (strcmp(s, "bd") == 0) /* bd -- display board */
{
/* FIXME: Hack alert! */
short old_xshogi = XSHOGI;
if (old_xshogi)
display_type = DISPLAY_RAW;
- ClearScreen();
- UpdateDisplay(0, 0, 1, 0);
+ dsp->ClearScreen();
+ dsp->UpdateDisplay(0, 0, 1, 0);
if (old_xshogi)
display_type = DISPLAY_X;
{
flag.post = !flag.post;
}
- else if (strcmp(s, CP[129]) == 0)
+ else if (strcmp(s, "alg") == 0)
{
- /* noop */ ; /* alg */
+ /* noop */ ;
}
- else if ((strcmp(s, CP[180]) == 0)
- || (strcmp(s, CP[216]) == 0)) /* quit exit */
+ else if ((strcmp(s, "quit") == 0)
+ || (strcmp(s, "exit") == 0))
{
flag.quit = true;
}
-#if !defined NOPOST
- else if (strcmp(s, CP[178]) == 0) /* post */
- {
- flag.post = !flag.post;
- }
-#endif
- else if ((strcmp(s, CP[191]) == 0)
- || (strcmp(s, CP[154]) == 0)) /* set edit */
+ else if ((strcmp(s, "set") == 0)
+ || (strcmp(s, "edit") == 0))
{
- EditBoard();
+ dsp->EditBoard();
}
- else if (NOT_CURSES && (strcmp(s, CP[190]) == 0)) /* setup */
+ else if (strcmp(s, "setup") == 0)
{
- SetupBoard();
+ dsp->SetupBoard();
}
- else if (strcmp(s, CP[156]) == 0) /* first */
+ else if (strcmp(s, "first") == 0)
{
ok = true;
}
- else if (strcmp(s, CP[162]) == 0) /* go */
+ else if (strcmp(s, "go") == 0)
{
ok = true;
flag.force = false;
opponent = white;
}
}
- else if (strcmp(s, CP[166]) == 0) /* help */
+ else if (strcmp(s, "help") == 0)
{
- help();
+ dsp->help();
}
- else if (strcmp(s, CP[221]) == 0) /* material */
+ else if (strcmp(s, "material") == 0)
{
flag.material = !flag.material;
}
- else if (strcmp(s, CP[157]) == 0) /* force */
+ else if (strcmp(s, "force") == 0)
{
if (XSHOGI)
{
flag.bothsides = false;
}
}
- else if (strcmp(s, CP[134]) == 0) /* book */
+ else if (strcmp(s, "book") == 0)
{
Book = Book ? 0 : BOOKFAIL;
}
- else if (strcmp(s, CP[172]) == 0) /* new */
+ else if (strcmp(s, "new") == 0)
{
NewGame();
- UpdateDisplay(0, 0, 1, 0);
+ dsp->UpdateDisplay(0, 0, 1, 0);
}
- else if (strcmp(s, CP[171]) == 0) /* list */
+ else if (strcmp(s, "list") == 0)
{
ListGame();
}
- else if ((strcmp(s, CP[169]) == 0)
- || (strcmp(s, CP[217]) == 0)) /* level clock */
+ else if (strcmp(s, "level") == 0)
+ {
+ dsp->SelectLevel(sx + strlen("level"));
+ }
+ else if (strcmp(s, "clock") == 0)
{
- SelectLevel(sx);
+ dsp->SelectLevel(sx + strlen("clock"));
}
- else if (strcmp(s, CP[165]) == 0) /* hash */
+ else if (strcmp(s, "hash") == 0)
{
flag.hash = !flag.hash;
}
- else if (strcmp(s, CP[227]) == 0) /* gamein */
+ else if (strcmp(s, "gamein") == 0)
{
flag.gamein = !flag.gamein;
}
- else if (strcmp(s, CP[226]) == 0) /* beep */
+ else if (strcmp(s, "beep") == 0)
{
flag.beep = !flag.beep;
}
- else if (strcmp(s, CP[197]) == 0) /* time */
+ else if (strcmp(s, "time") == 0)
{
- SetMachineTime(sx);
+ SetMachineTime(sx + strlen("time"));
}
- else if (strcmp(s, CP[228]) == 0) /* otime */
+ else if (strcmp(s, "otime") == 0)
{
- SetOppTime(sx);
+ SetOppTime(sx + strlen("otime"));
}
- else if (strcmp(s, CP[33]) == 0) /* Awindow */
+ else if (strcmp(s, "Awindow") == 0)
{
- ChangeAlphaWindow();
+ dsp->ChangeAlphaWindow();
}
- else if (strcmp(s, CP[39]) == 0) /* Bwindow */
+ else if (strcmp(s, "Bwindow") == 0)
{
- ChangeBetaWindow();
+ dsp->ChangeBetaWindow();
}
- else if (strcmp(s, CP[183]) == 0) /* rcptr */
+ else if (strcmp(s, "rcptr") == 0)
{
flag.rcptr = !flag.rcptr;
}
- else if (strcmp(s, CP[168]) == 0) /* hint */
+ else if (strcmp(s, "hint") == 0)
{
- GiveHint();
+ dsp->GiveHint();
}
- else if (strcmp(s, CP[135]) == 0) /* both */
+ else if (strcmp(s, "both") == 0)
{
flag.bothsides = !flag.bothsides;
flag.force = false;
SelectMove(opponent, FOREGROUND_MODE);
ok = true;
}
- else if (strcmp(s, CP[185]) == 0) /* reverse */
+ else if (strcmp(s, "reverse") == 0)
{
flag.reverse = !flag.reverse;
- ClearScreen();
- UpdateDisplay(0, 0, 1, 0);
+ dsp->ClearScreen();
+ dsp->UpdateDisplay(0, 0, 1, 0);
}
- else if (strcmp(s, CP[195]) == 0) /* switch */
+ else if (strcmp(s, "switch") == 0)
{
computer = computer ^ 1;
opponent = opponent ^ 1;
Sdepth = 0;
ok = true;
}
- else if (strcmp(s, CP[203]) == 0) /* black */
+ else if (strcmp(s, "black") == 0)
{
computer = white;
opponent = black;
* ok = true; don't automatically start with black command
*/
}
- else if (strcmp(s, CP[133]) == 0) /* white */
+ else if (strcmp(s, "white") == 0)
{
computer = black;
opponent = white;
* ok = true; don't automatically start with white command
*/
}
- else if (strcmp(s, CP[201]) == 0 && GameCnt > 0) /* undo */
+ else if (strcmp(s, "undo") == 0 && GameCnt > 0)
{
Undo();
}
- else if (strcmp(s, CP[184]) == 0 && GameCnt > 1) /* remove */
+ else if (strcmp(s, "remove") == 0 && GameCnt > 1)
{
Undo();
Undo();
}
/* CHECKME: are these next three correct? */
- else if (!XSHOGI && strcmp(s, CP[207]) == 0) /* xget */
+ else if (!XSHOGI && strcmp(s, "xget") == 0)
{
GetXGame();
}
- else if (!XSHOGI && strcmp(s, "xsave") == 0) /* xsave */
+ else if (!XSHOGI && strcmp(s, "xsave") == 0)
{
SaveXGame();
}
- else if (!XSHOGI && strcmp(s, "bsave") == 0) /* bsave */
+ else if (!XSHOGI && strcmp(s, "bsave") == 0)
{
BookSave();
}
{
FlagMove(*s);
}
- else if (strcmp(s, CP[160]) == 0) /* get */
+ else if (strcmp(s, "get") == 0)
{
GetGame();
}
- else if (strcmp(s, CP[189]) == 0) /* save */
+ else if (strcmp(s, "save") == 0)
{
SaveGame();
}
- else if (strcmp(s, CP[151]) == 0) /* depth */
+ else if (strcmp(s, "depth") == 0)
+ {
+ dsp->ChangeSearchDepth(sx + strlen("depth"));
+ }
+ else if (strcmp(s, "sd") == 0)
{
- ChangeSearchDepth();
+ dsp->ChangeSearchDepth(sx + strlen("sd"));
}
- else if (strcmp(s, CP[164]) == 0) /* hashdepth */
+ else if (strcmp(s, "hashdepth") == 0)
{
- ChangeHashDepth();
+ dsp->ChangeHashDepth();
}
- else if (strcmp(s, CP[182]) == 0) /* random */
+ else if (strcmp(s, "random") == 0)
{
dither = DITHER;
}
- else if (strcmp(s, CP[229]) == 0) /* hard */
+ else if (strcmp(s, "hard") == 0)
{
flag.easy = false;
}
- else if (strcmp(s, CP[152]) == 0) /* easy */
+ else if (strcmp(s, "easy") == 0)
{
flag.easy = !flag.easy;
}
- else if (strcmp(s, CP[230]) == 0) /* tsume */
+ else if (strcmp(s, "tsume") == 0)
{
flag.tsume = !flag.tsume;
}
- else if (strcmp(s, CP[143]) == 0) /* contempt */
+ else if (strcmp(s, "contempt") == 0)
{
- SetContempt();
+ dsp->SetContempt();
}
- else if (strcmp(s, CP[209]) == 0) /* xwndw */
+ else if (strcmp(s, "xwndw") == 0)
{
- ChangeXwindow();
+ dsp->ChangeXwindow();
}
- else if (strcmp(s, CP[186]) == 0) /* rv */
+ else if (strcmp(s, "rv") == 0)
{
flag.rv = !flag.rv;
- UpdateDisplay(0, 0, 1, 0);
+ dsp->UpdateDisplay(0, 0, 1, 0);
}
- else if (strcmp(s, CP[145]) == 0) /* coords */
+ else if (strcmp(s, "coords") == 0)
{
flag.coords = !flag.coords;
- UpdateDisplay(0, 0, 1, 0);
+ dsp->UpdateDisplay(0, 0, 1, 0);
}
- else if (strcmp(s, CP[193]) == 0) /* stars */
+ else if (strcmp(s, "stars") == 0)
{
flag.stars = !flag.stars;
- UpdateDisplay(0, 0, 1, 0);
+ dsp->UpdateDisplay(0, 0, 1, 0);
}
- else if (!XSHOGI && strcmp(s, CP[5]) == 0) /* moves */
+ else if (!XSHOGI && strcmp(s, "moves") == 0)
{
short temp;
#endif
SwagHt = 0;
- ShowMessage(CP[108]); /* test movelist */
+ dsp->ShowMessage("Testing MoveList Speed");
temp = generate_move_flags;
generate_move_flags = true;
TestSpeed(MoveList, 1);
generate_move_flags = temp;
- ShowMessage(CP[107]); /* test capturelist */
+ dsp->ShowMessage("Testing CaptureList Speed");
TestSpeed(CaptureList, 1);
- ShowMessage(CP[85]); /* test score position */
+ dsp->ShowMessage("Testing Eval Speed");
ExaminePosition(opponent);
TestPSpeed(ScorePosition, 1);
}
- else if (!XSHOGI && strcmp(s, CP[196]) == 0) /* test */
+ else if (!XSHOGI && strcmp(s, "test") == 0)
{
#ifdef SLOW_CPU
- ShowMessage(CP[108]); /* test movelist */
+ dsp->ShowMessage("Testing MoveList Speed");
TestSpeed(MoveList, 2000);
- ShowMessage(CP[107]); /* test capturelist */
+ dsp->ShowMessage("Testing CaptureList Speed");
TestSpeed(CaptureList, 3000);
- ShowMessage(CP[85]); /* test score position */
+ dsp->ShowMessage("Testing Eval Speed");
ExaminePosition(opponent);
TestPSpeed(ScorePosition, 1500);
#else
- ShowMessage(CP[108]); /* test movelist */
+ dsp->ShowMessage("Testing MoveList Speed");
TestSpeed(MoveList, 20000);
- ShowMessage(CP[107]); /* test capturelist */
+ dsp->ShowMessage("Testing CaptureList Speed");
TestSpeed(CaptureList, 30000);
- ShowMessage(CP[85]); /* test score position */
+ dsp->ShowMessage("Testing Eval Speed");
ExaminePosition(opponent);
TestPSpeed(ScorePosition, 15000);
#endif
}
- else if (!XSHOGI && strcmp(s, CP[179]) == 0) /* p */
+ else if (!XSHOGI && strcmp(s, "p") == 0)
{
- ShowPostnValues();
+ dsp->ShowPostnValues();
}
- else if (!XSHOGI && strcmp(s, CP[148]) == 0) /* debug */
+ else if (!XSHOGI && strcmp(s, "debug") == 0)
{
- DoDebug();
+ dsp->DoDebug();
}
else
{
if (rpt >= 3)
{
- DRAW = CP[101];
- ShowMessage(DRAW);
+ DRAW = DRAW_REPETITION;
+ dsp->ShowMessage(DRAW);
GameList[GameCnt].flags |= draw;
flag.mate = true;
printf("%d. %s %ld\n",
++mycnt2, s, TimeControl.clock[player] * 10);
}
-
-#ifdef notdef /* optional pass best line to frontend with move */
-# if !defined NOPOST
-
- if (flag.post && !flag.mate)
- {
- int i;
-
- printf(" %6d ", MSCORE);
-
- for (i = 1; MV[i] > 0; i++)
- {
- algbr((short) (MV[i] >> 8), (short) (MV[i] & 0xFF), false);
- printf("%5s ", mvstr[0]);
- }
- }
-# endif
- printf("\n");
-#endif
}
-
- signal(SIGUSR1, TerminateSearch);
}
-
-
-
-
-void
-SetTimeControl(void)
-{
- if (TCflag)
- {
- TimeControl.moves[black] = TimeControl.moves[white] = TCmoves;
- TimeControl.clock[black] += 6000L * TCminutes + TCseconds * 100;
- TimeControl.clock[white] += 6000L * TCminutes + TCseconds * 100;
- }
- else
- {
- TimeControl.moves[black] = TimeControl.moves[white] = 0;
- TimeControl.clock[black] = TimeControl.clock[white] = 0;
- }
-
- flag.onemove = (TCmoves == 1);
- et = 0;
- ElapsedTime(COMPUTE_AND_INIT_MODE);
-}
-