#include <ctype.h>
#include <signal.h>
#include <stdio.h>
+#include <stdarg.h>
#include <sys/param.h>
#include <sys/types.h>
#include <curses.h>
#include "gnushogi.h"
-#include "cursesdsp.h"
#if HAVE_UNISTD_H
#include <unistd.h>
#define FLUSH_SCANW fflush(stdout), scanw
-int mycnt1, mycnt2;
-
#define MARGIN (5)
#define TAB (58)
#define VIR_C(s) ((flag.reverse) ? (NO_COLS - 1 - column(s)) : column(s))
#define VIR_R(s) ((flag.reverse) ? (NO_ROWS - 1 - row(s)) : row(s))
-unsigned short MV[MAXDEPTH];
-int MSCORE;
-char *DRAW;
+/****************************************
+ * forward declarations
+ ****************************************/
-/* Forward declarations. */
/* FIXME: change this name, puh-leeze! */
-
static void UpdateCatched(void);
static void DrawPiece(short sq);
static void ShowScore(short score);
+static void Curses_UpdateDisplay(short f, short t, short redraw, short isspec);
+static void Curses_Die(int sig);
+static void Curses_ShowSidetoMove(void);
/****************************************
* Trivial output functions.
}
-void
+static void
Curses_ClearScreen(void)
{
clear();
ClearEoln();
}
-
-void
+static void
Curses_ShowCurrentMove(short pnt, short f, short t)
{
algbr(f, t, false);
}
-void
+static void
Curses_ShowDepth(char ch)
{
gotoXY(TAB, 4);
}
-void
+static void
Curses_ShowGameType(void)
{
if (flag.post)
}
-void
+static void
ShowHeader(void)
{
gotoXY(TAB, 2);
}
-void
+static void
Curses_ShowLine(unsigned short *bstline)
{
}
-void
+static void
Curses_ShowMessage(char *s)
{
gotoXY(TAB, 6);
}
-void
-Curses_AlwaysShowMessage(const char *format, va_list ap)
+static void
+Curses_AlwaysShowMessage(const char *format, ...)
{
static char buffer[60];
+ va_list ap;
+ va_start(ap, format);
vsnprintf(buffer, sizeof(buffer), format, ap);
Curses_ShowMessage(buffer);
+ va_end(ap);
}
-void
-Curses_Printf(const char *format, va_list ap)
+static void
+Curses_Printf(const char *format, ...)
{
static char buffer[60];
+ va_list ap;
+ va_start(ap, format);
vsnprintf(buffer, sizeof(buffer), format, ap);
printw("%s", buffer);
+ va_end(ap);
}
-void
+static void
Curses_doRequestInputString(const char* fmt, char* buffer)
{
FLUSH_SCANW(fmt, buffer);
}
-int
+static int
Curses_GetString(char* sx)
{
fflush(stdout);
}
-void
+static void
Curses_ShowNodeCnt(long NodeCnt)
{
gotoXY(TAB, 22);
}
-void
+static void
Curses_ShowPatternCount(short side, short n)
{
if (flag.post)
}
-void
+static void
Curses_ShowPrompt(void)
{
Curses_ShowSidetoMove();
}
-void
+static void
Curses_ShowResponseTime(void)
{
if (flag.post)
}
-void
+static void
Curses_ShowResults(short score, unsigned short *bstline, char ch)
{
unsigned char d, ply;
}
-void
+static void
Curses_ShowSidetoMove(void)
{
gotoXY(TAB, 14);
}
-void
+static void
Curses_ShowStage(void)
{
gotoXY(TAB, 19);
* End of trivial output routines.
****************************************/
-void
+static void
Curses_Initialize(void)
{
signal(SIGINT, Curses_Die);
}
-void
+static void
Curses_ExitShogi(void)
{
if (!nolist)
}
-void
+static void
Curses_Die(int sig)
{
char s[80];
}
-void
+static void
Curses_TerminateSearch(int sig)
{
signal(SIGINT, SIG_IGN);
}
-void
+static void
Curses_help(void)
{
Curses_ClearScreen();
* P* will put a pawn to the captured pieces.
*/
-void
+static void
Curses_EditBoard(void)
{
short a, c, sq, i, found;
}
}
if (!found)
- AlwaysShowMessage("Invalid piece type '%c'", s[0]);
+ dsp->AlwaysShowMessage("Invalid piece type '%c'", s[0]);
continue;
}
r = ROW_NUM(s[2]);
if ((c < 0) || (c >= NO_COLS) || (r < 0) || (r >= NO_ROWS)) {
- AlwaysShowMessage("Out-of-board '%c%c'", s[1], s[2]);
+ dsp->AlwaysShowMessage("Out-of-board '%c%c'", s[1], s[2]);
continue;
}
}
if (!found)
- AlwaysShowMessage("Invalid piece type '%c'", s[0]);
+ dsp->AlwaysShowMessage("Invalid piece type '%c'", s[0]);
DrawPiece(sq);
}
}
-void
+static void
Curses_SearchStartStuff(short side)
{
short i;
}
-void
+static void
Curses_OutputMove(void)
{
t = (l + h) >> 1;
}
- ShowNodeCnt(NodeCnt);
+ Curses_ShowNodeCnt(NodeCnt);
gotoXY(TAB, 23);
printw("Max Tree = %5d", t);
ClearEoln();
}
-void
+static void
Curses_UpdateClocks(void)
{
short m, s;
printw("%d:%02d ", m, s);
if (flag.post)
- ShowNodeCnt(NodeCnt);
+ Curses_ShowNodeCnt(NodeCnt);
refresh();
}
/*
* Curses_ShowPostnValue(): must have called ExaminePosition() first
*/
-void
+static void
Curses_ShowPostnValue(short sq)
{
- short score;
-
gotoXY(4 + 5 * VIR_C(sq), 5 + 2 * (7 - VIR_R(sq))); /* CHECKME */
- score = ScorePosition(color[sq]);
+ (void) ScorePosition(color[sq]);
if (color[sq] != neutral)
#if defined SAVE_SVALUE
}
-void
+static void
Curses_ShowPostnValues(void)
{
short sq, score;
}
-void
+static void
Curses_UpdateDisplay(short f, short t, short redraw, short isspec)
{
short i, sq, z;
}
-void
+static void
Curses_ChangeAlphaWindow(void)
{
Curses_ShowMessage("WAwindow = ");
}
-void
+static void
Curses_ChangeBetaWindow(void)
{
Curses_ShowMessage("WBwindow = ");
}
-void
+static void
Curses_GiveHint(void)
{
char s[40];
}
-void
-Curses_ChangeSearchDepth(void)
+static void
+Curses_ChangeSearchDepth(char* sx)
{
Curses_ShowMessage("depth = ");
FLUSH_SCANW("%hd", &MaxSearchDepth);
}
-void
+static void
Curses_ChangeHashDepth(void)
{
Curses_ShowMessage("hashdepth = ");
}
-void
+static void
Curses_SetContempt(void)
{
Curses_ShowMessage("contempt = ");
}
-void
+static void
Curses_ChangeXwindow(void)
{
Curses_ShowMessage("xwndw= ");
}
-void
+static void
Curses_SelectLevel(char *sx)
{
int item;
}
-void
+static void
Curses_DoDebug(void)
{
short c, p, sq, tp, tc, tsq, score;
}
-void
+static void
Curses_DoTable(short table[NO_SQUARES])
{
short sq;
}
-void
+static void
Curses_PollForInput(void)
{
int i;
}
-void
+static void
Curses_SetupBoard(void)
{
Curses_ShowMessage("'setup' command is not supported in Cursesmode");
}
+
+
+struct display curses_display =
+{
+ .ChangeAlphaWindow = Curses_ChangeAlphaWindow,
+ .ChangeBetaWindow = Curses_ChangeBetaWindow,
+ .ChangeHashDepth = Curses_ChangeHashDepth,
+ .ChangeSearchDepth = Curses_ChangeSearchDepth,
+ .ChangeXwindow = Curses_ChangeXwindow,
+ .ClearScreen = Curses_ClearScreen,
+ .DoDebug = Curses_DoDebug,
+ .DoTable = Curses_DoTable,
+ .EditBoard = Curses_EditBoard,
+ .ExitShogi = Curses_ExitShogi,
+ .GiveHint = Curses_GiveHint,
+ .Initialize = Curses_Initialize,
+ .ShowNodeCnt = Curses_ShowNodeCnt,
+ .OutputMove = Curses_OutputMove,
+ .PollForInput = Curses_PollForInput,
+ .SetContempt = Curses_SetContempt,
+ .SearchStartStuff = Curses_SearchStartStuff,
+ .SelectLevel = Curses_SelectLevel,
+ .ShowCurrentMove = Curses_ShowCurrentMove,
+ .ShowDepth = Curses_ShowDepth,
+ .ShowGameType = Curses_ShowGameType,
+ .ShowLine = Curses_ShowLine,
+ .ShowMessage = Curses_ShowMessage,
+ .AlwaysShowMessage = Curses_AlwaysShowMessage,
+ .Printf = Curses_Printf,
+ .doRequestInputString = Curses_doRequestInputString,
+ .GetString = Curses_GetString,
+ .SetupBoard = Curses_SetupBoard,
+ .ShowPatternCount = Curses_ShowPatternCount,
+ .ShowPostnValue = Curses_ShowPostnValue,
+ .ShowPostnValues = Curses_ShowPostnValues,
+ .ShowPrompt = Curses_ShowPrompt,
+ .ShowResponseTime = Curses_ShowResponseTime,
+ .ShowResults = Curses_ShowResults,
+ .ShowSidetoMove = Curses_ShowSidetoMove,
+ .ShowStage = Curses_ShowStage,
+ .TerminateSearch = Curses_TerminateSearch,
+ .UpdateClocks = Curses_UpdateClocks,
+ .UpdateDisplay = Curses_UpdateDisplay,
+ .help = Curses_help,
+};