X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=gnushogi%2Fcursesdsp.c;h=cb2f458e58bfaf0c032837a619206325ed89beb8;hb=6cdb4afe21c8d0eb740a6a22a02a0adf922fddfc;hp=407e6fa0de78601355f0cad0b3f73633d3099236;hpb=82b026e6376b640a4d3409a461dd6bd83708e33e;p=gnushogi.git diff --git a/gnushogi/cursesdsp.c b/gnushogi/cursesdsp.c index 407e6fa..cb2f458 100644 --- a/gnushogi/cursesdsp.c +++ b/gnushogi/cursesdsp.c @@ -4,11 +4,14 @@ * Curses interface for GNU Shogi * * ---------------------------------------------------------------------- - * - * 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 @@ -30,6 +33,7 @@ #include #include +#include #include #include @@ -39,14 +43,28 @@ #include "gnushogi.h" #include "cursesdsp.h" +#if HAVE_UNISTD_H +#include +#endif + +#if HAVE_SYS_FILIO_H +/* Definition of FIONREAD */ +#include +#endif + +#if HAVE_ERRNO_H +/* Definition of errno(). */ +#include +#endif + #define FLUSH_SCANW fflush(stdout), scanw int mycnt1, mycnt2; #define TAB (58) -#define VIR_C(s) ((flag.reverse) ? (8 - column(s)) : column(s)) -#define VIR_R(s) ((flag.reverse) ? (8 - row(s)) : row(s)) +#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; @@ -56,13 +74,14 @@ char *DRAW; /* FIXME: change this name, puh-leeze! */ static void UpdateCatched(void); - +static void DrawPiece(short sq); +static void ShowScore(short score); /**************************************** * Trivial output functions. ****************************************/ -void +static void ClearEoln(void) { clrtoeol(); @@ -78,7 +97,7 @@ Curses_ClearScreen(void) } -void +static void ClearMessage(void) { gotoXY(TAB, 6); @@ -86,8 +105,7 @@ ClearMessage(void) } - -void +static void gotoXY(short x, short y) { move(y - 1, x - 1); @@ -147,7 +165,46 @@ Curses_ShowMessage(char *s) void -ShowNodeCnt(long NodeCnt) +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, ...) +{ + static char buffer[60]; + va_list ap; + va_start(ap, format); + vsnprintf(buffer, sizeof(buffer), format, ap); + printw("%s", buffer); + va_end(ap); +} + + +void +Curses_doRequestInputString(const char* fmt, char* buffer) +{ + FLUSH_SCANW(fmt, buffer); +} + + +int +Curses_GetString(char* sx) +{ + fflush(stdout); + return (getstr(sx) == ERR); +} + + +void +Curses_ShowNodeCnt(long NodeCnt) { gotoXY(TAB, 22); /* printw(CP[90], NodeCnt, (et > 100) ? NodeCnt / (et / 100) : 0); */ @@ -162,7 +219,7 @@ Curses_ShowPatternCount(short side, short n) { if (flag.post) { - gotoXY(TAB + 10 + 3 * side, 20); + gotoXY(TAB + 10 + 3 * side, 20); /* CHECKME */ if (n >= 0) printw("%3d", n); @@ -172,19 +229,20 @@ Curses_ShowPatternCount(short side, short n) } -void +static void ShowPlayers(void) { - gotoXY(5, ((flag.reverse) ? 23 : 2)); + gotoXY(5, ((flag.reverse) ? (5 + 2*NO_ROWS) : 2)); printw("%s", (computer == white) ? CP[218] : CP[74]); - gotoXY(5, ((flag.reverse) ? 2 : 23)); + gotoXY(5, ((flag.reverse) ? 2 : (5 + 2*NO_ROWS))); printw("%s", (computer == black) ? CP[218] : CP[74]); } -void -ShowPrompt(void) +static void +Curses_ShowPrompt(void) { + Curses_ShowSidetoMove(); gotoXY(TAB, 17); printw(CP[121]); /* Your move is? */ ClearEoln(); @@ -242,7 +300,7 @@ Curses_ShowResults(short score, unsigned short *bstline, char ch) } -void +static void ShowScore(short score) { gotoXY(TAB, 5); @@ -269,12 +327,10 @@ Curses_ShowStage(void) ClearEoln(); } - /**************************************** * End of trivial output routines. ****************************************/ - void Curses_Initialize(void) { @@ -301,7 +357,6 @@ Curses_ExitShogi(void) } - void Curses_Die(int sig) { @@ -321,7 +376,6 @@ Curses_Die(int sig) } - void Curses_TerminateSearch(int sig) { @@ -338,7 +392,6 @@ Curses_TerminateSearch(int sig) } - void Curses_help(void) { @@ -498,8 +551,8 @@ Curses_EditBoard(void) } 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)) @@ -537,7 +590,6 @@ Curses_EditBoard(void) } - static void UpdateCatched() { @@ -589,7 +641,6 @@ UpdateCatched() } - void Curses_SearchStartStuff(short side) { @@ -598,7 +649,7 @@ Curses_SearchStartStuff(short side) signal(SIGINT, Curses_TerminateSearch); signal(SIGQUIT, Curses_TerminateSearch); - for (i = 4; i < 14; i++) + for (i = 4; i < 14; i++) /* CHECKME */ { gotoXY(TAB, i); ClearEoln(); @@ -606,7 +657,6 @@ Curses_SearchStartStuff(short side) } - void Curses_OutputMove(void) { @@ -672,8 +722,7 @@ Curses_OutputMove(void) } - -void +static void UpdateClocks(void) { short m, s; @@ -711,8 +760,7 @@ UpdateClocks(void) } - -void +static void DrawPiece(short sq) { char y; @@ -745,23 +793,20 @@ DrawPiece(short sq) y = pxx[(int)piece]; } - gotoXY(8 + 5 * VIR_C(sq), 4 + 2 * (8 - VIR_R(sq))); + gotoXY(8 + 5 * VIR_C(sq), 4 + 2 * ((NO_ROWS - 1) - VIR_R(sq))); printw("%c%c%c%c", l, p, y, r); } - - /* * Curses_ShowPostnValue(): must have called ExaminePosition() first */ - void Curses_ShowPostnValue(short sq) { short score; - gotoXY(4 + 5 * VIR_C(sq), 5 + 2 * (7 - VIR_R(sq))); + gotoXY(4 + 5 * VIR_C(sq), 5 + 2 * (7 - VIR_R(sq))); /* CHECKME */ score = ScorePosition(color[sq]); if (color[sq] != neutral) @@ -781,7 +826,6 @@ Curses_ShowPostnValue(short sq) } - void Curses_ShowPostnValues(void) { @@ -802,11 +846,11 @@ Curses_ShowPostnValues(void) } - void Curses_UpdateDisplay(short f, short t, short redraw, short isspec) { short i, sq, z; + int j; if (redraw) { @@ -816,31 +860,38 @@ Curses_UpdateDisplay(short f, short t, short redraw, short isspec) i = 2; gotoXY(3, ++i); - printw(" +----+----+----+----+----+----+----+----+----+"); + printw(" +"); + for (j=0; j; " + "see README. %d %d %x\n", + i, errno, FIONREAD); + exit(1); + } + + if (nchar) + { + if (!flag.timeout) + flag.back = true; + + flag.bothsides = false; + } + +#ifdef HAVE_GETTIMEOFDAY + 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; + } + if (!NOT_CURSES) + { +#ifdef QUIETBACKGROUND + if (!background) +#endif + UpdateClocks(); + } + } +} + +void +Curses_SetupBoard(void) +{ + Curses_ShowMessage("'setup' command is not supported in Cursesmode"); +}