1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <unistd.h>
5 #include <X11/Xlib.h>
6 #include <math.h>
7 #include "struct.h"
8 #include "patchlevel.h"
9 
10 extern Bool flumping, wflump, fflump, jflump, perfection;
11 int botmode; /* 1 for 2 player, 0 for 1 vs bot */
12 int boards;
13 int botlevel;
14 
15 char *itoa(); /* gross version */
16 char *rand_board();
17 int get_num_boards();
18 
19 char disp[90];
20 Bool fb;
21 char fbd[90];
22 
showopts()23 showopts()
24 {
25 	fprintf(stderr, "Syntax: xataxx <-jnw> <-d displayname> <-l level number>\n");
26 	fprintf(stderr, "	-d display name: name of opponents xhosted display.\n");
27 	fprintf(stderr, "	-j zot only on moves\n");
28 	fprintf(stderr, "	-l level number: number of look-ahead turns for robot (0-9).\n");
29 	fprintf(stderr, "	-n no zotting\n");
30 	fprintf(stderr, "	-p make it perfect\n");
31 	fprintf(stderr, "	-w will zot always\n");
32 }
33 
process_flags(arg,n)34 process_flags(arg, n)
35 char **arg;
36 int n;
37 {
38 	int x;
39 
40 	for(x=1;x<strlen(arg[n]);x++) {
41 		switch(arg[n][x]) {
42 			case 'b':
43   				strcpy(fbd, arg[n+1]);
44   				strcat(fbd, BOARDEXT);
45 				fb = False;
46 				break;
47 			case 'd':
48 				botmode=1;
49 				strcpy(disp, arg[n+1]);
50 				if (arg[n+1][strlen(arg[n+1])-2] != ':')
51 					strcat(disp, ":0");
52 				break;
53 			case 'f':
54 				fflump = False;
55 				break;
56 			case 'h':
57 				showopts();
58 				exit(0);
59 				break;
60 			case 'l':
61 				botlevel = arg[n+1][0] - '0';
62 				if (botlevel < 0 || botlevel > 9) {
63 					showopts();
64 					exit(0);
65 				}
66 				break;
67 			case 'j':
68 				jflump = False;
69 				break;
70 			case 'n':
71 				wflump = False;
72 				break;
73 			case 'p':
74 				perfection = True;
75 				break;
76 			case 'w':
77 				wflump = True;
78 				jflump = True;
79 				flumping = True;
80 				break;
81 			default:
82 				showopts();
83 				exit(0);
84 				break;
85 		}
86 	}
87 }
88 
main(argc,argv)89 main(argc,argv)
90 int argc;
91 char *argv[];
92 {
93   int n, q;
94 
95   botmode = 0;
96   botlevel = 2;
97   flumping = True;
98   wflump = True;
99   fflump = True;
100   jflump = False;
101   perfection = False;
102 
103   fb = True;
104   if (argc>1)
105     for(n=1;n<argc;n++) {
106       if (argv[n][0] == '-')
107       process_flags(argv, n);
108     }
109 
110   chdir(DATADIR);
111 
112   boards = get_num_boards();
113 
114 /* Load the input board */
115   if (fb) {
116     if (load_board(rand_board()))
117       exit(1);
118   }
119   else {
120     if (load_board(fbd)) {
121       fprintf(stderr, "You twit- that's not a valid board #.\n");
122       fprintf(stderr, "If you're gonna try that, talk to Jim to find out how.\n");
123       exit(1);
124     }
125   }
126 
127 /* Start up the windows */
128   initialize_display(disp);
129 
130   readbitmaps();
131 
132   show_title();
133 
134   while(1) {
135     if (waitferkey(8)) {
136       if (!demo())
137       waitferkey(5);
138       show_title();
139     }
140     else {
141       init_pieces();
142       play_loop();
143     }
144     if (load_board(rand_board()))
145       exit(1);
146   }
147 }
148 
rand_board()149 char *rand_board()
150 {
151   int bd;
152   static char fname[200];
153 
154   srandom(time(NULL));
155   bd = random()%boards;
156   bd++;
157   strcpy(fname, itoa(bd));
158   strcat(fname, BOARDEXT);
159   return(fname);
160 }
161 
itoa(x)162 char *itoa(x) /* gross version - replace this hack ASAP */
163 int x;
164 {
165   int z1, z2, z3, z4, z=0;
166   static char nn[6];
167 
168   z1 = (int) (x)/1000;
169   z2 = (int) (x)/100-(10*z1);
170   z3 = (int) (x)/10-(100*z1)-(10*z2);
171   z4 = (int) (x)-(1000*z1)-(100*z2)-(10*z3);
172 
173   if (z1)
174     nn[z++]=(z1+'0');
175   if (z2)
176     nn[z++]=(z2+'0');
177   if (z3)
178     nn[z++]=(z3+'0');
179   if (z4)
180     nn[z++]=(z4+'0');
181   nn[z++]='\0';
182   return(nn);
183 }
184 
get_num_boards()185 int get_num_boards()
186 {
187   FILE *bdfile;
188   int bdx;
189 
190   if((bdfile = fopen(BOARDNUMFILE, "r")) == NULL) {
191     fprintf(stderr, "Cannot open %s for reading.\n", BOARDNUMFILE);
192     exit(1);
193   }
194   boards = 0;
195   fscanf(bdfile, "%d", &bdx);
196   fclose(bdfile);
197   if (bdx<1) {
198     fprintf(stderr, "Invalid number of allowable boards.\n");
199     exit(1);
200   }
201   return(bdx);
202 }
203 
204