home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / games / chess / Xchess / xchess.h < prev    next >
Encoding:
C/C++ Source or Header  |  1989-10-16  |  7.0 KB  |  302 lines

  1.  
  2. /* This file contains code for X-CHESS.
  3.    Copyright (C) 1986 Free Software Foundation, Inc.
  4.  
  5. This file is part of X-CHESS.
  6.  
  7. X-CHESS is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY.  No author or distributor
  9. accepts responsibility to anyone for the consequences of using it
  10. or for whether it serves any particular purpose or works at all,
  11. unless he says so in writing.  Refer to the X-CHESS General Public
  12. License for full details.
  13.  
  14. Everyone is granted permission to copy, modify and redistribute
  15. X-CHESS, but only under the conditions described in the
  16. X-CHESS General Public License.   A copy of this license is
  17. supposed to have been given to you along with X-CHESS so you
  18. can know your rights and responsibilities.  It should be in a
  19. file named COPYING.  Among other things, the copyright notice
  20. and this notice must be preserved on all copies.  */
  21.  
  22.  
  23. /* RCS Info: $Revision: 1.5 $ on $Date: 86/11/26 12:11:39 $
  24.  *           $Source: /users/faustus/xchess/RCS/xchess.h,v $
  25.  * Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
  26.  *    Permission is granted to do anything with this code except sell it
  27.  *    or remove this message.
  28.  *
  29.  * Definitions for the X chess program.
  30.  */
  31.  
  32. #include "std.h"
  33. #include <X11/Xlib.h>
  34. #include "scrollText/scrollText.h"
  35.  
  36. #define SIZE    8
  37.  
  38. typedef enum piecetype { PAWN, ROOK, KNIGHT, BISHOP, QUEEN, KING } piecetype;
  39. typedef enum movetype { MOVE, QCASTLE, KCASTLE, CAPTURE } movetype;
  40. typedef enum color { WHITE, BLACK, NONE } color;
  41.  
  42. typedef struct piece {
  43.     enum piecetype type;
  44.     enum color color;
  45. } piece;
  46.  
  47. /* The board has y=0 and black at the top...  This probably isn't the best
  48.  * place to keep track of who can castle, but it's part of the game state...
  49.  */
  50.  
  51. typedef struct board {
  52.     piece square[SIZE][SIZE];
  53.     bool white_cant_castle_k;
  54.     bool white_cant_castle_q;
  55.     bool black_cant_castle_k;
  56.     bool black_cant_castle_q;
  57. } board;
  58.  
  59. typedef struct move {
  60.     movetype type;
  61.     piece piece;
  62.     piece taken;
  63.     int fromx, fromy;
  64.     int tox, toy;
  65.     struct move *next;
  66.     bool enpassant;
  67.     bool check;
  68. } move;
  69.  
  70. #define iswhite(win, i, j)    (!(((i) + (j)) % 2))
  71.  
  72. /* Stuff for the display. */
  73.  
  74. typedef struct windata {
  75.     Display *display;
  76.     Window basewin;
  77.     Window boardwin;
  78.     Window recwin;
  79.     Window wclockwin;
  80.     Window bclockwin;
  81.     Window messagewin;
  82.     Window buttonwin;
  83.     Window jailwin;
  84.     Window icon;
  85.     Pixmap iconpixmap;
  86.     XColor blackpiece;
  87.     XColor whitepiece;
  88.     XColor blacksquare;
  89.     XColor whitesquare;
  90.     XColor border;
  91.     XColor textcolor;
  92.     XColor textback;
  93.     XColor errortext;
  94.     XColor playertext;
  95.     XColor cursorcolor;
  96.     XFontStruct *small;
  97.     XFontStruct *medium;
  98.     XFontStruct *large;
  99.     bool bnw;
  100.     color color;
  101.     bool flipped;
  102.     double whitehands[3];
  103.     double blackhands[3];
  104.     char *txtassoc;
  105. } windata;
  106.  
  107. #define SMALL_FONT    "6x10"
  108. #define MEDIUM_FONT    "8x13"
  109. #define LARGE_FONT    "9x15"
  110. #define JAIL_FONT    "6x10"
  111.  
  112. #define SQUARE_WIDTH    80
  113. #define SQUARE_HEIGHT    80
  114.  
  115. #define BORDER_WIDTH    3
  116.  
  117. #define BOARD_WIDTH    8 * SQUARE_WIDTH + 7 * BORDER_WIDTH
  118. #define BOARD_HEIGHT    8 * SQUARE_HEIGHT + 7 * BORDER_WIDTH
  119. #define BOARD_XPOS    0
  120. #define BOARD_YPOS    0
  121.  
  122. #define RECORD_WIDTH    265    /* 40 chars * 6 pixels / character. */
  123. #define RECORD_HEIGHT    433
  124. #define RECORD_XPOS    BOARD_WIDTH + BORDER_WIDTH
  125. #define RECORD_YPOS    0
  126.  
  127. #define JAIL_WIDTH    RECORD_WIDTH
  128. #define JAIL_HEIGHT    163
  129. #define JAIL_XPOS    RECORD_XPOS
  130. #define JAIL_YPOS    RECORD_YPOS + RECORD_HEIGHT + BORDER_WIDTH
  131.  
  132. #define CLOCK_WIDTH    131
  133. #define CLOCK_HEIGHT    131 + BORDER_WIDTH + 20
  134. #define WCLOCK_XPOS    RECORD_XPOS
  135. #define WCLOCK_YPOS    RECORD_HEIGHT + JAIL_HEIGHT + BORDER_WIDTH * 2
  136. #define BCLOCK_XPOS    WCLOCK_XPOS + CLOCK_WIDTH + BORDER_WIDTH
  137. #define BCLOCK_YPOS    WCLOCK_YPOS
  138.  
  139. #define MESS_WIDTH    329
  140. #define MESS_HEIGHT    92
  141. #define MESS_XPOS    0
  142. #define MESS_YPOS    BOARD_HEIGHT + BORDER_WIDTH
  143.  
  144. #define BUTTON_WIDTH    MESS_WIDTH
  145. #define BUTTON_HEIGHT    MESS_HEIGHT
  146. #define BUTTON_XPOS    MESS_WIDTH + BORDER_WIDTH
  147. #define BUTTON_YPOS    MESS_YPOS
  148.  
  149. #define BASE_WIDTH    BOARD_WIDTH + RECORD_WIDTH + BORDER_WIDTH * 3
  150. #define BASE_HEIGHT    BOARD_HEIGHT + MESS_HEIGHT + BORDER_WIDTH * 3
  151.  
  152. #define BASE_XPOS    50
  153. #define BASE_YPOS    50
  154.  
  155. #define BLACK_PIECE_COLOR    "#202020"
  156. #define WHITE_PIECE_COLOR    "#FFFFCC"
  157. #define BLACK_SQUARE_COLOR    "#77A26D"
  158. #define WHITE_SQUARE_COLOR    "#C8C365"
  159. #define BORDER_COLOR        "#902E39"
  160. #define TEXT_COLOR        "#006D6D"
  161. #define TEXT_BACK        "#FFFFDD"
  162. #define ERROR_TEXT        "Red"
  163. #define PLAYER_TEXT        "Blue"
  164. #define CURSOR_COLOR        "#FF606F"
  165.  
  166. #define DEF_RECORD_FILE        "xchess.game"
  167.  
  168. #define NUM_FLASHES        5
  169. #define FLASH_SIZE        10
  170.  
  171. /* xchess.c */
  172.  
  173. extern void main();
  174. extern bool debug;
  175. extern char *progname;
  176. extern char *proghost;
  177. extern char *piecenames[];
  178. extern char *colornames[];
  179. extern char *movetypenames[];
  180. extern char *dispname1, *dispname2;
  181. extern bool oneboard;
  182. extern bool bnwflag;
  183. extern bool progflag;
  184. extern bool blackflag;
  185. extern bool quickflag;
  186. extern int num_flashes;
  187. extern int flash_size;
  188. extern char *black_piece_color;
  189. extern char *white_piece_color;
  190. extern char *black_square_color;
  191. extern char *white_square_color;
  192. extern char *border_color;
  193. extern char *text_color;
  194. extern char *text_back;
  195. extern char *error_text;
  196. extern char *player_text;
  197. extern char *cursor_color;
  198.  
  199. /* board.c */
  200.  
  201. extern void board_setup();
  202. extern void board_drawall();
  203. extern void board_move();
  204. extern board *chessboard;
  205. extern void board_init();
  206.  
  207. /* window.c */
  208.  
  209. extern bool win_setup();
  210. extern void win_redraw();
  211. extern void win_restart();
  212. extern void win_drawboard();
  213. extern void win_drawpiece();
  214. extern void win_erasepiece();
  215. extern void win_process();
  216. extern void win_flash();
  217. extern windata *win1, *win2;
  218. extern bool win_flashmove;
  219.  
  220. /* control.c */
  221.  
  222. extern void button_pressed();
  223. extern void button_released();
  224. extern void move_piece();
  225. extern void prog_move();
  226. extern move *moves;
  227. extern move *foremoves;
  228. extern color nexttomove;
  229. extern void replay();
  230. extern void forward();
  231. extern void cleanup();
  232. extern void restart();
  233. extern bool noisyflag;
  234.  
  235. /* valid.c */
  236.  
  237. extern bool valid_move();
  238.  
  239. /* record.c */
  240.  
  241. extern void record_move();
  242. extern void record_reset();
  243. extern void record_save();
  244. extern void record_back();
  245. extern void record_init();
  246. extern void record_end();
  247. extern bool record_english;
  248. extern char *record_file;
  249. extern int movenum;
  250. extern bool saveflag;
  251.  
  252. /* message.c */
  253.  
  254. extern void message_init();
  255. extern void message_add();
  256. extern void message_send();
  257.  
  258. /* clock.c */
  259.  
  260. extern void clock_init();
  261. extern void clock_draw();
  262. extern void clock_update();
  263. extern void clock_switch();
  264. extern bool clock_started;
  265. extern int movesperunit;
  266. extern int timeunit;
  267. extern int whiteseconds;
  268. extern int blackseconds;
  269.  
  270. /* button.c */
  271.  
  272. extern void button_draw();
  273. extern void button_service();
  274.  
  275. /* jail.c */
  276.  
  277. extern void jail_init();
  278. extern void jail_draw();
  279. extern void jail_add();
  280. extern void jail_remove();
  281.  
  282. /* program.c */
  283. extern bool program_init();
  284. extern void program_end();
  285. extern void program_send();
  286. extern void program_undo();
  287. extern move *program_get();
  288.  
  289. /* parse.c */
  290.  
  291. extern void load_game();
  292. extern move *parse_file();
  293. extern move *parse_move();
  294. extern move *parse_imove();
  295. extern bool loading_flag;
  296. extern bool loading_paused;
  297.  
  298. /* popup.c */
  299.  
  300. extern bool pop_question();
  301.  
  302.