Fix use of (COL|ROW)_NAME macros to compute numbers from names.
[gnushogi.git] / gnushogi / gnushogi.h
index 78f03fa..48408d7 100644 (file)
@@ -4,11 +4,15 @@
  *     Main header file 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
+ * Copyright (c) 2008, 2013, 2014 Yann Dirson 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
  * Display options.
  */
 
-typedef enum { DISPLAY_RAW, DISPLAY_CURSES, DISPLAY_X } display_t;
+typedef enum {
+  DISPLAY_RAW,
+#ifdef HAVE_LIBCURSES
+  DISPLAY_CURSES,
+#endif
+  DISPLAY_X
+} display_t;
 extern display_t display_type;
 
 #define XSHOGI     (display_type == DISPLAY_X)
@@ -72,7 +82,6 @@ extern short nolist;          /* Don't list game after exit.           */
 #define small_ushort unsigned char
 
 
-typedef small_short    BYTE;
 typedef small_ushort   UBYTE;
 typedef short          SHORT;
 typedef unsigned short USHORT;
@@ -121,9 +130,13 @@ typedef unsigned long  ULONG;
 
 #include <sys/param.h>
 #include <sys/types.h>
-#include <sys/times.h>
-#include <sys/ioctl.h>
-
+#ifdef WIN32
+#  include <windows.h>
+#else
+   typedef small_short    BYTE;
+#  include <sys/times.h>
+#  include <sys/ioctl.h>
+#endif
 
 #if TIME_WITH_SYS_TIME
 #  include <sys/time.h>
@@ -152,21 +165,30 @@ extern void movealgbr(short m, char *s);
 #define SEEK_SET 0
 #define SEEK_END 2
 
+#ifdef MINISHOGI
+#define NO_PIECES       11
+#define MAX_CAPTURED    19
+#define NO_PTYPE_PIECES 11
+#define NO_COLS          5
+#define NO_ROWS          5
+#else
 #define NO_PIECES       15
 #define MAX_CAPTURED    19
 #define NO_PTYPE_PIECES 15
 #define NO_COLS          9
 #define NO_ROWS          9
+#endif
 #define NO_SQUARES      (NO_COLS*NO_ROWS)
 
 #define ROW_NAME(n) ('a' + NO_ROWS - 1 - n)
 #define COL_NAME(n) ('1' + NO_COLS - 1 - n)
+#define ROW_NUM(c) ('a' + NO_ROWS - 1 - c)
+#define COL_NUM(c) ('1' + NO_COLS - 1 - c)
 
 #if defined HASHFILE || defined CACHE
 #  define PTBLBDSIZE (NO_SQUARES + NO_PIECES)
 #endif
 
-#include "dspwrappers.h"   /* Display functions. */
 #include "eval.h"
 
 #define SCORE_LIMIT 12000
@@ -209,12 +231,18 @@ extern void movealgbr(short m, char *s);
 
 
 /* board properties */
+#ifndef MINISHOGI
 #define InBlackCamp(sq) ((sq) < 27)
 #define InWhiteCamp(sq) ((sq) > 53)
+#else
+#define InBlackCamp(sq) ((sq) < 5)
+#define InWhiteCamp(sq) ((sq) > 19)
+#endif
 #define InPromotionZone(side, sq) \
 (((side) == black) ? InWhiteCamp(sq) : InBlackCamp(sq))
 
 /* constants */
+/* FIXME ? */
 #define OPENING_HINT 0x141d /* P7g-7f (20->29) */
 
 /* truth values */
@@ -235,15 +263,20 @@ extern void movealgbr(short m, char *s);
 enum {
     no_piece = 0,
     pawn,
+#ifndef MINISHOGI
     lance,
     knight,
+#endif
+    /* start of pieces that can be dropped at any square */
     silver,
     gold,
     bishop,
     rook,
     ppawn,
+#ifndef MINISHOGI
     plance,
     pknight,
+#endif
     psilver,
     pbishop,
     prook,
@@ -254,8 +287,10 @@ enum {
 enum {
     ptype_no_piece = 0,
     ptype_pawn = 0,
+#ifndef MINISHOGI
     ptype_lance,
     ptype_knight,
+#endif
     ptype_silver,
     ptype_gold,
     ptype_bishop,
@@ -264,8 +299,10 @@ enum {
     ptype_prook,
     ptype_king,
     ptype_wpawn,
+#ifndef MINISHOGI
     ptype_wlance,
     ptype_wknight,
+#endif
     ptype_wsilver,
     ptype_wgold
 };
@@ -292,10 +329,17 @@ enum {
 #endif
 
 /* move symbols */
-#define pxx (CP[2])
-#define qxx (CP[1])
-#define rxx (CP[4])
-#define cxx (CP[3])
+#ifndef MINISHOGI
+#define pxx (" PLNSGBRPLNSBRK ")
+#define qxx (" plnsgbrplnsbrk ")
+#define rxx ("ihgfedcba")
+#define cxx ("987654321")
+#else
+#define pxx (" PSGBRPSBRK ")
+#define qxx (" psgbrpsbrk ")
+#define rxx ("edcba")
+#define cxx ("54321")
+#endif
 
 /***************** Table limits ********************************************/
 
@@ -341,7 +385,7 @@ enum {
 #define MAXDEPTH  40            /* max depth a search can be carried */
 #define MINDEPTH   2            /* min search depth =1 (no hint), >1 hint */
 #define MAXMOVES 300            /* max number of half moves in a game */
-#define CPSIZE   235            /* size of lang file max */
+#define CPSIZE   241            /* size of lang file max */
 
 #if defined SMALL_MEMORY
 #  if defined SAVE_SSCORE
@@ -720,7 +764,6 @@ extern short balance[2];
 extern small_short ChkFlag[], CptrFlag[], TesujiFlag[];
 extern short Pscore[], Tscore[];
 extern /*unsigned*/ short rehash;  /* -1 is used as a flag --tpm */
-extern char version[], patchlevel[];
 extern unsigned int ttbllimit;
 extern unsigned int TTadd;
 extern unsigned int ttblsize;
@@ -745,7 +788,11 @@ typedef unsigned char next_array[NO_SQUARES][NO_SQUARES];
 typedef small_short distdata_array[NO_SQUARES][NO_SQUARES];
 
 extern const small_short inunmap[NO_SQUARES];
+#ifndef MINISHOGI
 extern const small_short nunmap[(NO_COLS + 2)*(NO_ROWS + 4)];
+#else
+extern const small_short nunmap[(NO_COLS + 2)*(NO_ROWS + 2)];
+#endif
 
 #if defined SAVE_NEXTPOS
 extern const small_short direc[NO_PTYPE_PIECES][8];
@@ -811,7 +858,6 @@ typedef struct hashval drop_hashcode_array[2][NO_PIECES][NO_SQUARES];
 
 extern hashcode_array  *hashcode;
 extern drop_hashcode_array  *drop_hashcode;
-extern char  *CP[];
 
 #ifdef QUIETBACKGROUND
 extern short background;
@@ -854,6 +900,10 @@ extern struct hashentry  *ttable[2];
 extern short rpthash[2][256];
 extern char *DRAW;
 
+extern char* DRAW_REPETITION;
+extern char *DRAW_MAXMOVES;
+extern char *DRAW_JUSTDRAW;
+
 #define row(a)     ((a) / NO_COLS)
 #define column(a)  ((a) % NO_COLS)
 #define locn(a, b) (((a) * NO_COLS) + b)
@@ -1022,7 +1072,6 @@ typedef enum
 #endif
 } ElapsedTime_mode;
 
-extern void  ElapsedTime(ElapsedTime_mode iop);
 extern void  SetResponseTime(short side);
 extern void  CheckForTimeout(int score, int globalscore,
                              int Jscore, int zwndw);
@@ -1033,7 +1082,6 @@ extern void  SearchStartStuff(short side);
 extern void  ShowDepth(char ch);
 extern void  TerminateSearch(int);
 extern void  ShowResults(short score, unsigned short *bstline, char ch);
-extern void  PromptForMove(void);
 extern void  SetupBoard(void);
 extern void  algbr(short f, short t, short flag);
 extern void  OutputMove(void);
@@ -1041,10 +1089,6 @@ extern void  ShowCurrentMove(short pnt, short f, short t);
 extern void  ListGame(void);
 extern void  ShowMessage(char *s);
 extern void  ClearScreen(void);
-extern void  gotoXY(short x, short y);
-extern void  ClearEoln(void);
-extern void  DrawPiece(short sq);
-extern void  UpdateClocks(void);
 extern void  DoDebug(void);
 extern void  DoTable(short table[NO_SQUARES]);
 extern void  ShowPostnValues(void);
@@ -1065,6 +1109,7 @@ extern void  ShowLine(unsigned short *bstline);
 extern int   pick(short p1, short p2);
 extern short repetition(void);
 extern void  TimeCalc(void);
+extern void  ElapsedTime(ElapsedTime_mode iop);
 
 extern short
 DropPossible(short piece, short side, short sq); /* genmoves.c */
@@ -1082,4 +1127,6 @@ typedef enum
 extern int VerifyMove(char *s, VerifyMove_mode iop, unsigned short *mv);
 extern unsigned short TTage;
 
+#include "dspwrappers.h"   /* Display functions. */
+
 #endif /* _GNUSHOGI_H_ */