Move ElapsedTime to tcontrl.c, now that there is a single implementation.
[gnushogi.git] / gnushogi / cursesdsp.c
index fb0e9d4..8e2c376 100644 (file)
@@ -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 <ctype.h>
 #include <signal.h>
+#include <stdio.h>
 
 #include <sys/param.h>
 #include <sys/types.h>
 #include "gnushogi.h"
 #include "cursesdsp.h"
 
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#if HAVE_SYS_FILIO_H
+/* Definition of FIONREAD */
+#include <sys/filio.h>
+#endif
+
+#if HAVE_ERRNO_H
+/* Definition of errno(). */
+#include <errno.h>
+#endif
+
 #define FLUSH_SCANW fflush(stdout), scanw
 
 int mycnt1, mycnt2;
@@ -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,19 +97,18 @@ Curses_ClearScreen(void)
 }
 
 
-void
-ClearMessage(void)
+static void
+gotoXY(short x, short y)
 {
-    gotoXY(TAB, 6);
-    ClearEoln();
+    move(y - 1, x - 1);
 }
 
 
-
-void
-gotoXY(short x, short y)
+static void
+ClearMessage(void)
 {
-    move(y - 1, x - 1);
+    gotoXY(TAB, 6);
+    ClearEoln();
 }
 
 
@@ -147,7 +165,40 @@ Curses_ShowMessage(char *s)
 
 
 void
-ShowNodeCnt(long NodeCnt)
+Curses_AlwaysShowMessage(const char *format, va_list ap)
+{
+    static char buffer[60];
+    vsnprintf(buffer, sizeof(buffer), format, ap);
+    Curses_ShowMessage(buffer);
+}
+
+
+void
+Curses_Printf(const char *format, va_list ap)
+{
+    static char buffer[60];
+    vsnprintf(buffer, sizeof(buffer), format, ap);
+    printw("%s", buffer);
+}
+
+
+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); */
@@ -172,7 +223,7 @@ Curses_ShowPatternCount(short side, short n)
 }
 
 
-void
+static void
 ShowPlayers(void)
 {
     gotoXY(5, ((flag.reverse) ? (5 + 2*NO_ROWS) : 2));
@@ -183,8 +234,9 @@ ShowPlayers(void)
 
 
 void
-ShowPrompt(void)
+Curses_ShowPrompt(void)
 {
+    Curses_ShowSidetoMove();
     gotoXY(TAB, 17);
     printw(CP[121]);     /* Your move is? */
     ClearEoln();
@@ -242,7 +294,7 @@ Curses_ShowResults(short score, unsigned short *bstline, char ch)
 }
 
 
-void
+static void
 ShowScore(short score)
 {
     gotoXY(TAB, 5);
@@ -269,12 +321,10 @@ Curses_ShowStage(void)
     ClearEoln();
 }
 
-
 /****************************************
  * End of trivial output routines.
  ****************************************/
 
-
 void
 Curses_Initialize(void)
 {
@@ -301,7 +351,6 @@ Curses_ExitShogi(void)
 }
 
 
-
 void
 Curses_Die(int sig)
 {
@@ -321,7 +370,6 @@ Curses_Die(int sig)
 }
 
 
-
 void
 Curses_TerminateSearch(int sig)
 {
@@ -338,7 +386,6 @@ Curses_TerminateSearch(int sig)
 }
 
 
-
 void
 Curses_help(void)
 {
@@ -537,7 +584,6 @@ Curses_EditBoard(void)
 }
 
 
-
 static void 
 UpdateCatched()
 {
@@ -589,7 +635,6 @@ UpdateCatched()
 }
 
 
-
 void
 Curses_SearchStartStuff(short side)
 {
@@ -606,7 +651,6 @@ Curses_SearchStartStuff(short side)
 }
 
 
-
 void
 Curses_OutputMove(void)
 {
@@ -672,9 +716,8 @@ Curses_OutputMove(void)
 }
 
 
-
 void
-UpdateClocks(void)
+Curses_UpdateClocks(void)
 {
     short m, s;
     long dt;
@@ -711,8 +754,7 @@ UpdateClocks(void)
 }
 
 
-
-void
+static void
 DrawPiece(short sq)
 {
     char y;
@@ -750,12 +792,9 @@ DrawPiece(short sq)
 }
 
 
-
-
 /*
  * Curses_ShowPostnValue(): must have called ExaminePosition() first
  */
-
 void
 Curses_ShowPostnValue(short sq)
 {
@@ -781,7 +820,6 @@ Curses_ShowPostnValue(short sq)
 }
 
 
-
 void
 Curses_ShowPostnValues(void)
 {
@@ -802,7 +840,6 @@ Curses_ShowPostnValues(void)
 }
 
 
-
 void
 Curses_UpdateDisplay(short f, short t, short redraw, short isspec)
 {
@@ -914,9 +951,6 @@ Curses_UpdateDisplay(short f, short t, short redraw, short isspec)
 }
 
 
-extern char *InPtr;
-
-
 void
 Curses_ChangeAlphaWindow(void)
 {
@@ -927,7 +961,6 @@ Curses_ChangeAlphaWindow(void)
 }
 
 
-
 void
 Curses_ChangeBetaWindow(void)
 {
@@ -938,7 +971,6 @@ Curses_ChangeBetaWindow(void)
 }
 
 
-
 void
 Curses_GiveHint(void)
 {
@@ -958,7 +990,6 @@ Curses_GiveHint(void)
 }
 
 
-
 void
 Curses_ChangeSearchDepth(void)
 {
@@ -986,7 +1017,6 @@ Curses_SetContempt(void)
 }
 
 
-
 void
 Curses_ChangeXwindow(void)
 {
@@ -995,7 +1025,6 @@ Curses_ChangeXwindow(void)
 }
 
 
-
 void
 Curses_SelectLevel(char *sx)
 {
@@ -1106,7 +1135,6 @@ Curses_SelectLevel(char *sx)
 }
 
 
-
 void
 Curses_DoDebug(void)
 {
@@ -1154,7 +1182,6 @@ Curses_DoDebug(void)
 }
 
 
-
 void
 Curses_DoTable(short table[NO_SQUARES])
 {
@@ -1169,4 +1196,34 @@ Curses_DoTable(short table[NO_SQUARES])
 } 
 
 
+void
+Curses_PollForInput(void)
+{
+    int  i;
+    int  nchar;
 
+    if ((i = ioctl((int) 0, FIONREAD, &nchar)))
+    {
+        perror("FIONREAD");
+        fprintf(stderr,
+                "You probably have a non-ANSI <ioctl.h>; "
+                "see README. %d %d %x\n",
+                i, errno, FIONREAD);
+        exit(1);
+    }
+
+    if (nchar)
+    {
+        if (!flag.timeout)
+            flag.back = true;
+
+        flag.bothsides = false;
+    }
+}
+
+
+void
+Curses_SetupBoard(void)
+{
+    Curses_ShowMessage("'setup' command is not supported in Cursesmode");
+}