summaryrefslogtreecommitdiff
path: root/noncore/games/sfcave-sdl/settings.cpp
Unidiff
Diffstat (limited to 'noncore/games/sfcave-sdl/settings.cpp') (more/less context) (show whitespace changes)
-rw-r--r--noncore/games/sfcave-sdl/settings.cpp88
1 files changed, 43 insertions, 45 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
@@ -1,65 +1,53 @@
1#include <stdio.h> 1#include <stdio.h>
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
9string 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
14Settings::Settings( char * env_file, char * env_dir ) 16Settings::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
21 if ( homeDir )
22 {
23 envFile.append(homeDir);
24 envFile.append("/"); 22 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
34 envFile.append("/"); 29 envFile.append("/");
35 30
36 // Store the correct environment file 31 // Store the correct environment file
37 if (env_file == NULL) 32 if (env_file == NULL)
38 envFile.append(DEFAULT_FILE); 33 envFile.append(DEFAULT_FILE);
39 else 34 else
40 envFile.append(env_file); 35 envFile.append(env_file);
41} 36}
42 37
43Settings::Settings() 38Settings::Settings()
44{ 39{
45 char * homeDir = getenv("HOME"); 40 envFile = getHomeDir();
46
47 if ( homeDir)
48 {
49 envFile.append(homeDir);
50 envFile.append("/"); 41 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}
60 48
61Settings::~Settings() 49Settings::~Settings()
62{ 50{
63} 51}
64 52
65bool Settings::readSetting(const string key_str,int& result) 53bool Settings::readSetting(const string key_str,int& result)
@@ -101,24 +89,36 @@ bool Settings::readSetting(const string key_str,long int& result)
101bool Settings::readSetting(const string key_str,unsigned long& result) 89bool Settings::readSetting(const string key_str,unsigned long& result)
102{ 90{
103 string Buffer; 91 string Buffer;
104 if (readSetting(key_str,Buffer)) 92 if (readSetting(key_str,Buffer))
105 { 93 {
106 result = atol(Buffer.c_str()); 94 result = atol(Buffer.c_str());
107 return true; 95 return true;
108 } 96 }
109 else 97 else
110 return false; 98 return false;
111} 99}
112 100
101bool 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
113bool Settings::readSetting(const string key_str,bool& result) 113bool 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");
119 return true; 119 return true;
120 } 120 }
121 else 121 else
122 return false; 122 return false;
123} 123}
124 124
@@ -150,24 +150,32 @@ bool Settings::readSetting(const string key_str,string& results)
150 } 150 }
151 fclose(fd); 151 fclose(fd);
152 } 152 }
153 153
154 return(ret_flag); 154 return(ret_flag);
155} 155}
156 156
157void Settings::writeSetting(const string key_str,const bool value) 157void 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
162void 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
162void Settings::writeSetting(const string key_str,const int value) 170void 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));
168} 176}
169 177
170void Settings::writeSetting(const string key_str,const unsigned int value) 178void Settings::writeSetting(const string key_str,const unsigned int value)
171{ 179{
172 char Buffer[30]; 180 char Buffer[30];
173 181
@@ -186,88 +194,78 @@ void Settings::writeSetting(const string key_str,const long int value)
186void Settings::writeSetting(const string key_str,const unsigned long value) 194void Settings::writeSetting(const string key_str,const unsigned long value)
187{ 195{
188 char Buffer[30]; 196 char Buffer[30];
189 197
190 sprintf(Buffer,"%lu",value); 198 sprintf(Buffer,"%lu",value);
191 writeSetting(key_str,string(Buffer)); 199 writeSetting(key_str,string(Buffer));
192} 200}
193 201
194void Settings::writeSetting(const string key_str,const string value) 202void 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
206 dir_str = strdup(envFile.c_str());
207 printf( "dir = %s, file - %s\n", dir_str, envFile.c_str() );
208 if (dir_str)
209 {
210 // remove file from the directory string
211 dir_ptr = strrchr(dir_str, (int)'/');
212 if (dir_ptr)
213 {
214 *dir_ptr = 0;
215 208
216 // make the directory path if it does not exist 209 string tmp = getHomeDir() + "/tmpsfcave.dat";
217 // mkdir(dir_str, 777 );
218 210
219 // if file exists we need to save contents 211 // if file exists we need to save contents
220 if ((fd = fopen(envFile.c_str(), "r")) != NULL) 212 fd = fopen( envFile.c_str(), "r" );
213 ftemp = fopen( tmp.c_str(), "w" );
214 if ( fd != NULL && ftemp != NULL )
221 { 215 {
222 while (fgets(buf, MAX_LINE_SIZE-1, fd)) 216 while (fgets(buf, MAX_LINE_SIZE-1, fd))
223 FileEntries.push_back(string(buf)); 217 {
218 if ( strncmp( buf, key_str.c_str(), key_str.size() ) != 0 )
219 fprintf( ftemp, "%s", buf );
220 }
224 fclose(fd); 221 fclose(fd);
225 } 222 }
226 223
227 char *home = getenv( "HOME" ); 224 if ( ftemp != NULL )
228 string tmp; 225 {
229 if ( home ) 226 fprintf(ftemp, "%s\t%s\n", key_str.c_str(),value.c_str());
230 tmp = home + string( "/" ) + "tmpsfcave.dat"; 227 fclose( ftemp );
231 else 228
232 tmp = "./tmpsfcave.dat"; 229 remove(envFile.c_str());
230 rename( tmp.c_str(), envFile.c_str() );
231 }
232/*
233 string tmp = getHomeDir() + "/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];
239 240
240 strncpy(buff1,key_str.c_str(),80); 241 strncpy(buff1,key_str.c_str(),80);
241 key1 = strtok(buff1,"\t"); 242 key1 = strtok(buff1,"\t");
242 for (std::vector<string>::iterator iter = FileEntries.begin(); iter < FileEntries.end(); iter++) 243 for (std::vector<string>::iterator iter = FileEntries.begin(); iter < FileEntries.end(); iter++)
243 { 244 {
244 strncpy(buff2,(*iter).c_str(),80); 245 strncpy(buff2,(*iter).c_str(),80);
245 key2 = strtok(buff2,"\t"); 246 key2 = strtok(buff2,"\t");
246 // IF not the key string then write out to file 247 // IF not the key string then write out to file
247 if (strcmp(key1,key2) != 0) 248 if (strcmp(key1,key2) != 0)
248 { 249 {
249 fprintf(ftemp,"%s",iter->c_str()); 250 fprintf(ftemp,"%s",iter->c_str());
250 fflush(ftemp); 251 fflush(ftemp);
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
270void Settings::deleteFile(void) 268void Settings::deleteFile(void)
271{ 269{
272 remove(envFile.c_str()); 270 remove(envFile.c_str());
273} 271}