Diffstat (limited to 'noncore/games/sfcave-sdl/settings.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/games/sfcave-sdl/settings.cpp | 98 |
1 files changed, 48 insertions, 50 deletions
diff --git a/noncore/games/sfcave-sdl/settings.cpp b/noncore/games/sfcave-sdl/settings.cpp index 914c4ec..20cce4f 100644 --- a/noncore/games/sfcave-sdl/settings.cpp +++ b/noncore/games/sfcave-sdl/settings.cpp | |||
@@ -2,32 +2,27 @@ | |||
2 | #include <stdlib.h> | 2 | #include <stdlib.h> |
3 | #include <sys/stat.h> | 3 | #include <sys/stat.h> |
4 | #include <vector> | 4 | #include <vector> |
5 | 5 | ||
6 | #include "settings.h" | 6 | #include "settings.h" |
7 | 7 | ||
8 | // Defined in util.h | ||
9 | string getHomeDir(); | ||
8 | 10 | ||
9 | #define DEFAULT_DIR "." | 11 | #define DEFAULT_DIR "." |
10 | #define DEFAULT_FILE "Settings.cfg" | 12 | #define DEFAULT_FILE "Settings.cfg" |
11 | #define MAX_LINE_SIZE 2048 | 13 | #define MAX_LINE_SIZE 2048 |
12 | 14 | ||
13 | 15 | ||
14 | Settings::Settings( char * env_file, char * env_dir ) | 16 | Settings::Settings( char * env_file, char * env_dir ) |
15 | { | 17 | { |
16 | // Store the correct environment directory | 18 | // Store the correct environment directory |
17 | if (env_dir == NULL) | 19 | if (env_dir == NULL) |
18 | { | 20 | { |
19 | char * homeDir = getenv( "HOME" );; | 21 | envFile = getHomeDir(); |
20 | 22 | envFile.append("/"); | |
21 | if ( homeDir ) | ||
22 | { | ||
23 | envFile.append(homeDir); | ||
24 | envFile.append("/"); | ||
25 | } | ||
26 | else | ||
27 | printf( "Environment var HOME not set!\n" ); | ||
28 | 23 | ||
29 | envFile.append(DEFAULT_DIR); | 24 | envFile.append(DEFAULT_DIR); |
30 | } | 25 | } |
31 | else | 26 | else |
32 | envFile.append(env_dir); | 27 | envFile.append(env_dir); |
33 | 28 | ||
@@ -39,21 +34,14 @@ Settings::Settings( char * env_file, char * env_dir ) | |||
39 | else | 34 | else |
40 | envFile.append(env_file); | 35 | envFile.append(env_file); |
41 | } | 36 | } |
42 | 37 | ||
43 | Settings::Settings() | 38 | Settings::Settings() |
44 | { | 39 | { |
45 | char * homeDir = getenv("HOME"); | 40 | envFile = getHomeDir(); |
46 | 41 | envFile.append("/"); | |
47 | if ( homeDir) | ||
48 | { | ||
49 | envFile.append(homeDir); | ||
50 | envFile.append("/"); | ||
51 | } | ||
52 | else | ||
53 | printf( "Environment var HOME not set!\n" ); | ||
54 | 42 | ||
55 | envFile.append(DEFAULT_DIR); | 43 | envFile.append(DEFAULT_DIR); |
56 | envFile.append("/"); | 44 | envFile.append("/"); |
57 | 45 | ||
58 | envFile.append(DEFAULT_FILE); | 46 | envFile.append(DEFAULT_FILE); |
59 | } | 47 | } |
@@ -107,12 +95,24 @@ bool Settings::readSetting(const string key_str,unsigned long& result) | |||
107 | return true; | 95 | return true; |
108 | } | 96 | } |
109 | else | 97 | else |
110 | return false; | 98 | return false; |
111 | } | 99 | } |
112 | 100 | ||
101 | bool Settings::readSetting(const string key_str,double& result) | ||
102 | { | ||
103 | string Buffer; | ||
104 | if (readSetting(key_str,Buffer)) | ||
105 | { | ||
106 | result = atof( Buffer.c_str() ); | ||
107 | return true; | ||
108 | } | ||
109 | else | ||
110 | return false; | ||
111 | } | ||
112 | |||
113 | bool Settings::readSetting(const string key_str,bool& result) | 113 | bool Settings::readSetting(const string key_str,bool& result) |
114 | { | 114 | { |
115 | string Buffer; | 115 | string Buffer; |
116 | if (readSetting(key_str,Buffer)) | 116 | if (readSetting(key_str,Buffer)) |
117 | { | 117 | { |
118 | result = (Buffer == "true"); | 118 | result = (Buffer == "true"); |
@@ -156,12 +156,20 @@ bool Settings::readSetting(const string key_str,string& results) | |||
156 | 156 | ||
157 | void Settings::writeSetting(const string key_str,const bool value) | 157 | void Settings::writeSetting(const string key_str,const bool value) |
158 | { | 158 | { |
159 | value ?writeSetting(key_str,string("true")) :writeSetting(key_str,string("false")); | 159 | value ?writeSetting(key_str,string("true")) :writeSetting(key_str,string("false")); |
160 | } | 160 | } |
161 | 161 | ||
162 | void Settings::writeSetting(const string key_str,const double value) | ||
163 | { | ||
164 | char Buffer[30]; | ||
165 | |||
166 | sprintf(Buffer,"%lf",value); | ||
167 | writeSetting(key_str,string(Buffer)); | ||
168 | } | ||
169 | |||
162 | void Settings::writeSetting(const string key_str,const int value) | 170 | void Settings::writeSetting(const string key_str,const int value) |
163 | { | 171 | { |
164 | char Buffer[30]; | 172 | char Buffer[30]; |
165 | 173 | ||
166 | sprintf(Buffer,"%i",value); | 174 | sprintf(Buffer,"%i",value); |
167 | writeSetting(key_str,string(Buffer)); | 175 | writeSetting(key_str,string(Buffer)); |
@@ -192,47 +200,40 @@ void Settings::writeSetting(const string key_str,const unsigned long value) | |||
192 | } | 200 | } |
193 | 201 | ||
194 | void Settings::writeSetting(const string key_str,const string value) | 202 | void Settings::writeSetting(const string key_str,const string value) |
195 | { | 203 | { |
196 | // This function will write a value for the key key_str. If the key_str | 204 | // This function will write a value for the key key_str. If the key_str |
197 | // already exists then it will be overwritten. | 205 | // already exists then it will be overwritten. |
198 | |||
199 | std::vector<string> FileEntries; | ||
200 | FILE *fd=NULL,*ftemp=NULL; | 206 | FILE *fd=NULL,*ftemp=NULL; |
201 | char * dir_str; | ||
202 | char * dir_ptr; | ||
203 | char buf[MAX_LINE_SIZE]; | 207 | char buf[MAX_LINE_SIZE]; |
204 | char tempname[12]; | ||
205 | 208 | ||
206 | dir_str = strdup(envFile.c_str()); | 209 | string tmp = getHomeDir() + "/tmpsfcave.dat"; |
207 | printf( "dir = %s, file - %s\n", dir_str, envFile.c_str() ); | 210 | |
208 | if (dir_str) | 211 | // if file exists we need to save contents |
212 | fd = fopen( envFile.c_str(), "r" ); | ||
213 | ftemp = fopen( tmp.c_str(), "w" ); | ||
214 | if ( fd != NULL && ftemp != NULL ) | ||
209 | { | 215 | { |
210 | // remove file from the directory string | 216 | while (fgets(buf, MAX_LINE_SIZE-1, fd)) |
211 | dir_ptr = strrchr(dir_str, (int)'/'); | ||
212 | if (dir_ptr) | ||
213 | { | 217 | { |
214 | *dir_ptr = 0; | 218 | if ( strncmp( buf, key_str.c_str(), key_str.size() ) != 0 ) |
215 | 219 | fprintf( ftemp, "%s", buf ); | |
216 | // make the directory path if it does not exist | 220 | } |
217 | // mkdir(dir_str, 777 ); | 221 | fclose(fd); |
222 | } | ||
218 | 223 | ||
219 | // if file exists we need to save contents | 224 | if ( ftemp != NULL ) |
220 | if ((fd = fopen(envFile.c_str(), "r")) != NULL) | 225 | { |
221 | { | 226 | fprintf(ftemp, "%s\t%s\n", key_str.c_str(),value.c_str()); |
222 | while (fgets(buf, MAX_LINE_SIZE-1, fd)) | 227 | fclose( ftemp ); |
223 | FileEntries.push_back(string(buf)); | ||
224 | fclose(fd); | ||
225 | } | ||
226 | 228 | ||
227 | char *home = getenv( "HOME" ); | 229 | remove(envFile.c_str()); |
228 | string tmp; | 230 | rename( tmp.c_str(), envFile.c_str() ); |
229 | if ( home ) | 231 | } |
230 | tmp = home + string( "/" ) + "tmpsfcave.dat"; | 232 | /* |
231 | else | 233 | string tmp = getHomeDir() + "/tmpsfcave.dat"; |
232 | tmp = "./tmpsfcave.dat"; | ||
233 | strcpy(tempname,tmp.c_str() ); | 234 | strcpy(tempname,tmp.c_str() ); |
234 | printf( "tmp - %s\n", tempname ); | 235 | printf( "tmp - %s\n", tempname ); |
235 | if ((ftemp = fopen(tempname,"w")) != NULL) | 236 | if ((ftemp = fopen(tempname,"w")) != NULL) |
236 | { | 237 | { |
237 | char *key1,*key2; | 238 | char *key1,*key2; |
238 | char buff1[80],buff2[80]; | 239 | char buff1[80],buff2[80]; |
@@ -251,23 +252,20 @@ void Settings::writeSetting(const string key_str,const string value) | |||
251 | } | 252 | } |
252 | } | 253 | } |
253 | 254 | ||
254 | fprintf(ftemp, "%s\t%s\n", key_str.c_str(),value.c_str()); | 255 | fprintf(ftemp, "%s\t%s\n", key_str.c_str(),value.c_str()); |
255 | fflush(ftemp); | 256 | fflush(ftemp); |
256 | fclose(ftemp); | 257 | fclose(ftemp); |
257 | |||
258 | remove(envFile.c_str()); | ||
259 | |||
260 | rename( tempname, envFile.c_str() ); | ||
261 | } | 258 | } |
262 | else | 259 | else |
263 | printf( "Can't open file %s\n", envFile.c_str() ); | 260 | printf( "Can't open file %s\n", envFile.c_str() ); |
264 | } | 261 | } |
265 | 262 | ||
266 | delete dir_str; | 263 | delete dir_str; |
267 | } | 264 | } |
265 | */ | ||
268 | } | 266 | } |
269 | 267 | ||
270 | void Settings::deleteFile(void) | 268 | void Settings::deleteFile(void) |
271 | { | 269 | { |
272 | remove(envFile.c_str()); | 270 | remove(envFile.c_str()); |
273 | } | 271 | } |