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.cpp273
1 files changed, 273 insertions, 0 deletions
diff --git a/noncore/games/sfcave-sdl/settings.cpp b/noncore/games/sfcave-sdl/settings.cpp
new file mode 100644
index 0000000..914c4ec
--- a/dev/null
+++ b/noncore/games/sfcave-sdl/settings.cpp
@@ -0,0 +1,273 @@
1#include <stdio.h>
2#include <stdlib.h>
3#include <sys/stat.h>
4#include <vector>
5
6#include "settings.h"
7
8
9#define DEFAULT_DIR "."
10#define DEFAULT_FILE "Settings.cfg"
11#define MAX_LINE_SIZE 2048
12
13
14Settings::Settings( char * env_file, char * env_dir )
15{
16 // Store the correct environment directory
17 if (env_dir == NULL)
18 {
19 char * homeDir = getenv( "HOME" );;
20
21 if ( homeDir )
22 {
23 envFile.append(homeDir);
24 envFile.append("/");
25 }
26 else
27 printf( "Environment var HOME not set!\n" );
28
29 envFile.append(DEFAULT_DIR);
30 }
31 else
32 envFile.append(env_dir);
33
34 envFile.append("/");
35
36 // Store the correct environment file
37 if (env_file == NULL)
38 envFile.append(DEFAULT_FILE);
39 else
40 envFile.append(env_file);
41}
42
43Settings::Settings()
44{
45 char * homeDir = getenv("HOME");
46
47 if ( homeDir)
48 {
49 envFile.append(homeDir);
50 envFile.append("/");
51 }
52 else
53 printf( "Environment var HOME not set!\n" );
54
55 envFile.append(DEFAULT_DIR);
56 envFile.append("/");
57
58 envFile.append(DEFAULT_FILE);
59}
60
61Settings::~Settings()
62{
63}
64
65bool Settings::readSetting(const string key_str,int& result)
66{
67 string Buffer;
68 if (readSetting(key_str,Buffer))
69 {
70 result = atoi(Buffer.c_str());
71 return true;
72 }
73 else
74 return false;
75}
76
77bool Settings::readSetting(const string key_str,unsigned int& result)
78{
79 string Buffer;
80 if (readSetting(key_str,Buffer))
81 {
82 result = atoi(Buffer.c_str());
83 return true;
84 }
85 else
86 return false;
87}
88
89bool Settings::readSetting(const string key_str,long int& result)
90{
91 string Buffer;
92 if (readSetting(key_str,Buffer))
93 {
94 result = atol(Buffer.c_str());
95 return true;
96 }
97 else
98 return false;
99}
100
101bool Settings::readSetting(const string key_str,unsigned long& result)
102{
103 string Buffer;
104 if (readSetting(key_str,Buffer))
105 {
106 result = atol(Buffer.c_str());
107 return true;
108 }
109 else
110 return false;
111}
112
113bool Settings::readSetting(const string key_str,bool& result)
114{
115 string Buffer;
116 if (readSetting(key_str,Buffer))
117 {
118 result = (Buffer == "true");
119 return true;
120 }
121 else
122 return false;
123}
124
125bool Settings::readSetting(const string key_str,string& results)
126{
127 // This function will read a string from the env file that corresponds to the
128 // key key_str passed in.
129 FILE * fd = 0;
130 char buf[MAX_LINE_SIZE];
131 bool ret_flag = false;
132 char* key;
133 char* value;
134
135 // open file
136 fd = fopen(envFile.c_str(), "r");
137
138 if (fd)
139 {
140 while (fgets(buf, MAX_LINE_SIZE-1, fd))
141 {
142 key = strtok(buf, "\t");
143 value = strtok(NULL, "\n");
144 // find key in file
145 if (!strcasecmp(key,key_str.c_str()))
146 {
147 results = value;
148 ret_flag = true;
149 }
150 }
151 fclose(fd);
152 }
153
154 return(ret_flag);
155}
156
157void Settings::writeSetting(const string key_str,const bool value)
158{
159 value ?writeSetting(key_str,string("true")) :writeSetting(key_str,string("false"));
160}
161
162void Settings::writeSetting(const string key_str,const int value)
163{
164 char Buffer[30];
165
166 sprintf(Buffer,"%i",value);
167 writeSetting(key_str,string(Buffer));
168}
169
170void Settings::writeSetting(const string key_str,const unsigned int value)
171{
172 char Buffer[30];
173
174 sprintf(Buffer,"%i",value);
175 writeSetting(key_str,string(Buffer));
176}
177
178void Settings::writeSetting(const string key_str,const long int value)
179{
180 char Buffer[30];
181
182 sprintf(Buffer,"%li",value);
183 writeSetting(key_str,string(Buffer));
184}
185
186void Settings::writeSetting(const string key_str,const unsigned long value)
187{
188 char Buffer[30];
189
190 sprintf(Buffer,"%lu",value);
191 writeSetting(key_str,string(Buffer));
192}
193
194void Settings::writeSetting(const string key_str,const string value)
195{
196 // This function will write a value for the key key_str. If the key_str
197 // already exists then it will be overwritten.
198
199 std::vector<string> FileEntries;
200 FILE *fd=NULL,*ftemp=NULL;
201 char * dir_str;
202 char * dir_ptr;
203 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
216 // make the directory path if it does not exist
217 // mkdir(dir_str, 777 );
218
219 // if file exists we need to save contents
220 if ((fd = fopen(envFile.c_str(), "r")) != NULL)
221 {
222 while (fgets(buf, MAX_LINE_SIZE-1, fd))
223 FileEntries.push_back(string(buf));
224 fclose(fd);
225 }
226
227 char *home = getenv( "HOME" );
228 string tmp;
229 if ( home )
230 tmp = home + string( "/" ) + "tmpsfcave.dat";
231 else
232 tmp = "./tmpsfcave.dat";
233 strcpy(tempname,tmp.c_str() );
234 printf( "tmp - %s\n", tempname );
235 if ((ftemp = fopen(tempname,"w")) != NULL)
236 {
237 char *key1,*key2;
238 char buff1[80],buff2[80];
239
240 strncpy(buff1,key_str.c_str(),80);
241 key1 = strtok(buff1,"\t");
242 for (std::vector<string>::iterator iter = FileEntries.begin(); iter < FileEntries.end(); iter++)
243 {
244 strncpy(buff2,(*iter).c_str(),80);
245 key2 = strtok(buff2,"\t");
246 // IF not the key string then write out to file
247 if (strcmp(key1,key2) != 0)
248 {
249 fprintf(ftemp,"%s",iter->c_str());
250 fflush(ftemp);
251 }
252 }
253
254 fprintf(ftemp, "%s\t%s\n", key_str.c_str(),value.c_str());
255 fflush(ftemp);
256 fclose(ftemp);
257
258 remove(envFile.c_str());
259
260 rename( tempname, envFile.c_str() );
261 }
262 else
263 printf( "Can't open file %s\n", envFile.c_str() );
264 }
265
266 delete dir_str;
267 }
268}
269
270void Settings::deleteFile(void)
271{
272 remove(envFile.c_str());
273}