1 /*
2 Sjeng - a chess variants playing program
3 Copyright (C) 2000 Gian-Carlo Pascutto
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
19 File: rcfile.c
20 Purpose: Read in config file, allocate hash/caches
21
22 */
23
24 #include "sjeng.h"
25 #include "protos.h"
26 #include "extvars.h"
27 #include "config.h"
28
29 FILE *rcfile;
30 char line[STR_BUFF];
31
32 int TTSize;
33 int ECacheSize;
34 int PBSize;
35
36 int cfg_booklearn;
37 int cfg_razordrop;
38 int cfg_cutdrop;
39 int cfg_ksafety[15][9];
40 int cfg_tropism[5][7];
41 int havercfile;
42 int cfg_futprune;
43 int cfg_devscale;
44 int cfg_onerep;
45 int cfg_recap;
46 int cfg_smarteval;
47 int cfg_attackeval;
48 float cfg_scalefac;
49
read_rcfile(void)50 void read_rcfile (void)
51 {
52 int i;
53 unsigned int setc;
54
55 if ((rcfile = fopen ("sjeng.rc", "r")) == NULL)
56 {
57 printf("No configuration file!\n");
58
59 TTSize = 300000;
60 ECacheSize = 200000;
61 PBSize = 200000;
62 EGTBCacheSize = 0;
63 strcpy(EGTBDir, "TB");
64
65 cfg_devscale = 1;
66 cfg_scalefac = 1.0;
67 cfg_razordrop = 1;
68 cfg_cutdrop = 0;
69 cfg_futprune = 1;
70 cfg_smarteval = 1;
71 cfg_attackeval = 0;
72
73 havercfile = 0;
74
75 setc = havercfile
76 + (cfg_devscale << 1)
77 + (((cfg_scalefac == 1.0) ? 1 : 0) << 2)
78 + (cfg_razordrop << 3)
79 + (cfg_cutdrop << 4)
80 + (cfg_futprune << 5)
81 + (cfg_smarteval << 6)
82 + (cfg_attackeval << 7);
83
84
85 sprintf(setcode, "%u", setc);
86
87 initialize_eval();
88 alloc_hash();
89 alloc_ecache();
90
91 return;
92 }
93
94 havercfile = 1;
95
96 /* read in values, possibly seperated by # commented lines */
97 fgets(line, STR_BUFF, rcfile);
98 while (line[0] == '#') fgets(line, STR_BUFF, rcfile);
99 sscanf(line, "%d", &TTSize);
100
101 fgets(line, STR_BUFF, rcfile);
102 while (line[0] == '#') fgets(line, STR_BUFF, rcfile);
103 sscanf(line, "%d", &ECacheSize);
104
105 fgets(line, STR_BUFF, rcfile);
106 while (line[0] == '#') fgets(line, STR_BUFF, rcfile);
107 sscanf(line, "%d", &PBSize);
108
109 fgets(line, STR_BUFF, rcfile);
110 while (line[0] == '#') fgets(line, STR_BUFF, rcfile);
111 sscanf(line, "%f", &cfg_scalefac);
112
113 fgets(line, STR_BUFF, rcfile);
114 while (line[0] == '#') fgets(line, STR_BUFF, rcfile);
115 sscanf(line, "%d", &cfg_devscale);
116
117 fgets(line, STR_BUFF, rcfile);
118 while (line[0] == '#') fgets(line, STR_BUFF, rcfile);
119 sscanf(line, "%d", &cfg_razordrop);
120
121 fgets(line, STR_BUFF, rcfile);
122 while (line[0] == '#') fgets(line, STR_BUFF, rcfile);
123 sscanf(line, "%d", &cfg_cutdrop);
124
125 fgets(line, STR_BUFF, rcfile);
126 while (line[0] == '#') fgets(line, STR_BUFF, rcfile);
127 sscanf(line, "%d", &cfg_booklearn);
128
129 fgets(line, STR_BUFF, rcfile);
130 while (line[0] == '#') fgets(line, STR_BUFF, rcfile);
131 sscanf(line, "%d", &cfg_futprune);
132
133 fgets(line, STR_BUFF, rcfile);
134 while (line[0] == '#') fgets(line, STR_BUFF, rcfile);
135 sscanf(line, "%d", &cfg_onerep);
136
137 fgets(line, STR_BUFF, rcfile);
138 while (line[0] == '#') fgets(line, STR_BUFF, rcfile);
139 sscanf(line, "%d", &cfg_recap);
140
141 fgets(line, STR_BUFF, rcfile);
142 while (line[0] == '#') fgets(line, STR_BUFF, rcfile);
143 sscanf(line, "%d", &cfg_smarteval);
144
145 fgets(line, STR_BUFF, rcfile);
146 while (line[0] == '#') fgets(line, STR_BUFF, rcfile);
147 sscanf(line, "%d", &cfg_attackeval);
148
149 fgets(line, STR_BUFF, rcfile);
150 while (line[0] == '#') fgets(line, STR_BUFF, rcfile);
151
152 for(i = 0; i < 5; i++)
153 {
154 sscanf(line, "%d %d %d %d %d %d %d",
155 &cfg_tropism[i][0], &cfg_tropism[i][1], &cfg_tropism[i][2],&cfg_tropism[i][3],
156 &cfg_tropism[i][4], &cfg_tropism[i][5], &cfg_tropism[i][6]);
157
158 do { fgets(line, STR_BUFF, rcfile);} while (line[0] == '#');
159 }
160
161
162 for(i = 0; i < 15; i++)
163 {
164 sscanf(line, "%d %d %d %d %d %d %d %d %d",
165 &cfg_ksafety[i][0], &cfg_ksafety[i][1],&cfg_ksafety[i][2],&cfg_ksafety[i][3],
166 &cfg_ksafety[i][4], &cfg_ksafety[i][5],&cfg_ksafety[i][6],&cfg_ksafety[i][7],
167 &cfg_ksafety[i][8]);
168
169 do {fgets(line, STR_BUFF, rcfile);} while ((line[0] == '#') && !feof(rcfile));
170 }
171
172 setc = havercfile
173 + (cfg_devscale << 1)
174 + (((cfg_scalefac == 1.0) ? 1 : 0) << 2)
175 + (cfg_razordrop << 3)
176 + (cfg_cutdrop << 4)
177 + (cfg_futprune << 5)
178 + (cfg_smarteval << 6)
179 + (cfg_attackeval << 7);
180
181
182 sprintf(setcode, "%u", setc);
183
184 initialize_eval();
185 alloc_hash();
186 alloc_ecache();
187
188 return;
189
190 }
191