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