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.2 $ on $Date: 89/04/28 08:44:02 $
24 * $Source: /usr/local/src/source/X.V11R3/contrib/games/xchess/Xchess/RCS/xchess.c,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
30 #define USAGE "xchess [ -d ] [ -f recordfile ] [ -r savedfile ] [ -i ]\n\
31 \t[ -t moves/timeunit ] [ -c ] [ -p program ] [ -b ] [ -bnw ] [ -s ]\n\
32 \t[ -n ] [ -h host ] [ -v ] [ -R ] [ whitedisplay ] [ blackdisplay ]"
33
34 #include <signal.h>
35 #include "xchess.h"
36
37 bool debug = false;
38 bool oneboard = false;
39 bool bnwflag = false;
40 bool progflag = false;
41 bool blackflag = false;
42 bool quickflag = false;
43
44 char *progname = DEF_PROGRAM;
45 char *proghost = NULL;
46 char *piecenames[] = { "pawn", "rook", "knight", "bishop", "queen", "king" } ;
47 char *colornames[] = { "white", "black", "none" } ;
48 char *movetypenames[] = { "move", "qcastle", "kcastle", "capture" } ;
49 char *dispname1 = NULL, *dispname2 = NULL;
50
51 char *black_piece_color = BLACK_PIECE_COLOR;
52 char *white_piece_color = WHITE_PIECE_COLOR;
53 char *black_square_color = BLACK_SQUARE_COLOR;
54 char *white_square_color = WHITE_SQUARE_COLOR;
55 char *border_color = BORDER_COLOR;
56 char *text_color = TEXT_COLOR;
57 char *text_back = TEXT_BACK;
58 char *error_text = ERROR_TEXT;
59 char *player_text = PLAYER_TEXT;
60 char *cursor_color = CURSOR_COLOR;
61
62 int num_flashes = NUM_FLASHES;
63 int flash_size = FLASH_SIZE;
64 char *program;
65 char *recfile = NULL;
66
67 #ifdef notdef
68 /*
69 * Serves no purpose.
70 */
die()71 die () {
72 fprintf(stderr, "child proc changed status?!\n");
73 }
74 #endif
75
76 void
main(ac,av)77 main(ac, av)
78 char **av;
79 {
80 bool randflag = false;
81 move *m;
82 char *s;
83
84 program = av[0];
85
86 #ifdef notdef
87 signal(SIGCHLD, die);
88 #endif
89
90 /* Process args. */
91 av++; ac--;
92 while (ac > 0 && **av == '-') {
93 if (eq(*av, "-d")) {
94 debug = true;
95 } else if (eq(*av, "-f")) {
96 av++; ac--;
97 if (*av)
98 record_file = *av;
99 else
100 goto usage;
101 } else if (eq(*av, "-r")) {
102 av++; ac--;
103 if (*av)
104 recfile = *av;
105 else
106 goto usage;
107 } else if (eq(*av, "-i")) {
108 record_english = false;
109 } else if (eq(*av, "-R")) {
110 randflag = true;
111 } else if (eq(*av, "-v")) {
112 win_flashmove = true;
113 } else if (eq(*av, "-q")) {
114 quickflag = true;
115 } else if (eq(*av, "-t")) {
116 av++; ac--;
117 if (*av) {
118 movesperunit = atoi(*av);
119 if (s = index(*av, '/'))
120 timeunit = atoi(s + 1) * 60;
121 else
122 timeunit = 60;
123 } else
124 goto usage;
125 } else if (eq(*av, "-p")) {
126 av++; ac--;
127 if (*av)
128 progname = *av;
129 else
130 goto usage;
131 } else if (eq(*av, "-h")) {
132 av++; ac--;
133 if (*av)
134 proghost = *av;
135 else
136 goto usage;
137 } else if (eq(*av, "-b")) {
138 blackflag = true;
139 } else if (eq(*av, "-c")) {
140 progflag = true;
141 } else if (eq(*av, "-bnw")) {
142 bnwflag = true;
143 } else if (eq(*av, "-s")) {
144 saveflag = true;
145 } else if (eq(*av, "-n")) {
146 noisyflag = true;
147 } else
148 goto usage;
149 av++; ac--;
150 }
151 if (ac > 0)
152 dispname1 = av[0];
153 if (ac > 1)
154 dispname2 = av[1];
155 if (ac > 2)
156 goto usage;
157
158 if (!dispname2)
159 oneboard = true;
160
161 srandom(getpid());
162
163 if (!oneboard && randflag && (random() % 2)) {
164 s = dispname1;
165 dispname1 = dispname2;
166 dispname2 = s;
167 }
168
169 if (!dispname1)
170 dispname1 = getenv("DISPLAY");
171
172 /* Set up the board. */
173 board_setup();
174
175 /* Create the windows. */
176 win_setup(dispname1, dispname2);
177
178 board_drawall();
179
180 /* Start the program if necessary. */
181 if (progflag)
182 if (!program_init(progname))
183 exit(1);
184
185 if (recfile)
186 load_game(recfile);
187
188 /* Go into a loop of prompting players alternately for moves, checking
189 * them, and updating things.
190 */
191 for (;;) {
192 win_process(false);
193 clock_update();
194 if (progflag && ((!blackflag && (nexttomove == BLACK)) ||
195 (blackflag && (nexttomove == WHITE)))) {
196 m = program_get();
197 if (m)
198 prog_move(m);
199 }
200 }
201
202 usage: fprintf(stderr, "Usage: %s\n", USAGE);
203 exit(1);
204 }
205
206