|
|
1.1 root 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:32 $
24: * $Source: /users/faustus/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: die () {
68: fprintf(stderr, "child proc changed status?!\n");
69: }
70:
71: void
72: main(ac, av)
73: char **av;
74: {
75: bool randflag = false;
76: move *m;
77: char *s;
78:
79: program = av[0];
80:
81: signal(SIGCHLD, die);
82: /* Process args. */
83: av++; ac--;
84: while (ac > 0 && **av == '-') {
85: if (eq(*av, "-d")) {
86: debug = true;
87: } else if (eq(*av, "-f")) {
88: av++; ac--;
89: if (*av)
90: record_file = *av;
91: else
92: goto usage;
93: } else if (eq(*av, "-r")) {
94: av++; ac--;
95: if (*av)
96: recfile = *av;
97: else
98: goto usage;
99: } else if (eq(*av, "-i")) {
100: record_english = false;
101: } else if (eq(*av, "-R")) {
102: randflag = true;
103: } else if (eq(*av, "-v")) {
104: win_flashmove = true;
105: } else if (eq(*av, "-q")) {
106: quickflag = true;
107: } else if (eq(*av, "-t")) {
108: av++; ac--;
109: if (*av) {
110: movesperunit = atoi(*av);
111: if (s = index(*av, '/'))
112: timeunit = atoi(s + 1) * 60;
113: else
114: timeunit = 60;
115: } else
116: goto usage;
117: } else if (eq(*av, "-p")) {
118: av++; ac--;
119: if (*av)
120: progname = *av;
121: else
122: goto usage;
123: } else if (eq(*av, "-h")) {
124: av++; ac--;
125: if (*av)
126: proghost = *av;
127: else
128: goto usage;
129: } else if (eq(*av, "-b")) {
130: blackflag = true;
131: } else if (eq(*av, "-c")) {
132: progflag = true;
133: } else if (eq(*av, "-bnw")) {
134: bnwflag = true;
135: } else if (eq(*av, "-s")) {
136: saveflag = true;
137: } else if (eq(*av, "-n")) {
138: noisyflag = true;
139: } else
140: goto usage;
141: av++; ac--;
142: }
143: if (ac > 0)
144: dispname1 = av[0];
145: if (ac > 1)
146: dispname2 = av[1];
147: if (ac > 2)
148: goto usage;
149:
150: if (!dispname2)
151: oneboard = true;
152:
153: srandom(getpid());
154:
155: if (!oneboard && randflag && (random() % 2)) {
156: s = dispname1;
157: dispname1 = dispname2;
158: dispname2 = s;
159: }
160:
161: if (!dispname1)
162: dispname1 = getenv("DISPLAY");
163:
164: /* Set up the board. */
165: board_setup();
166:
167: /* Create the windows. */
168: win_setup(dispname1, dispname2);
169:
170: board_drawall();
171:
172: /* Start the program if necessary. */
173: if (progflag)
174: if (!program_init(progname))
175: exit(1);
176:
177: if (recfile)
178: load_game(recfile);
179:
180: /* Go into a loop of prompting players alternately for moves, checking
181: * them, and updating things.
182: */
183: for (;;) {
184: win_process(false);
185: clock_update();
186: if (progflag && ((!blackflag && (nexttomove == BLACK)) ||
187: (blackflag && (nexttomove == WHITE)))) {
188: m = program_get();
189: if (m)
190: prog_move(m);
191: }
192: }
193:
194: usage: fprintf(stderr, "Usage: %s\n", USAGE);
195: exit(1);
196: }
197:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.