* ----------------------------------------------------------------------
* 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
*
#include "gnushogi.h"
char mvstr[4][6];
-char *InPtr;
-int InBackground = false;
+int mycnt1, mycnt2;
+static char *InPtr;
struct display *dsp = &raw_display;
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)
* - 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 (!XSHOGI) {
dsp->Printf("error in algbr: FROM=TO=%d, flag=0x%4x\n", t, flag);
}
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];
dsp->AlwaysShowMessage("Illegal move (no match) %s", s);
- if (!barebones && (cnt > 1))
+ if (!XSHOGI && (cnt > 1))
{
sprintf(buffer, "Ambiguous Move %s!", s);
dsp->ShowMessage(buffer);
}
-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");
-}
-
-
static void
TestSpeed(void(*f)(short side, short ply,
short in_check, short blockable),
printf("%d. %s %ld\n",
++mycnt2, s, TimeControl.clock[player] * 10);
}
-
-#ifdef notdef /* optional pass best line to frontend with move */
- 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]);
- }
- }
- printf("\n");
-#endif
- }
-}
-
-
-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);
}