1 /*
2 * preferences.c
3 *
4 *
5 * Created by Guillaume Borios on 03/08/04.
6 * Copyright 2004 iOS. All rights reserved.
7 *
8 */
9
10 #include "preferences.h"
11
12
13 #ifdef __APPLE__
14
15 #include <CoreFoundation/CoreFoundation.h>
16
SetIntPreference(const char * name,int value)17 void SetIntPreference(const char * name, int value)
18 {
19 CFStringRef nom = CFStringCreateWithCString (NULL,name,CFStringGetSystemEncoding());
20 if (nom != NULL)
21 {
22 CFNumberRef aValue = CFNumberCreate(NULL,kCFNumberIntType,&value);
23 if (aValue != NULL)
24 {
25 CFPreferencesSetAppValue (nom,aValue,kCFPreferencesCurrentApplication);
26 (void)CFPreferencesAppSynchronize(kCFPreferencesCurrentApplication);
27 CFRelease(aValue);
28 }
29 CFRelease(nom);
30 }
31 }
32
SetBoolPreference(const char * name,int value)33 void SetBoolPreference(const char * name, int value)
34 {
35 CFStringRef nom = CFStringCreateWithCString (NULL,name,CFStringGetSystemEncoding());
36 if (nom != NULL)
37 {
38 CFPreferencesSetAppValue (nom,value?CFSTR("YES"):CFSTR("NO"),kCFPreferencesCurrentApplication);
39 (void)CFPreferencesAppSynchronize(kCFPreferencesCurrentApplication);
40 CFRelease(nom);
41 }
42 }
43
GetIntPreference(const char * name,int defaut)44 int GetIntPreference(const char * name, int defaut)
45 {
46 int retour = defaut;
47
48 CFStringRef nom = CFStringCreateWithCString (NULL,name,CFStringGetSystemEncoding());
49
50 if (nom != NULL)
51 {
52 CFNumberRef value = (CFNumberRef)CFPreferencesCopyAppValue(nom,kCFPreferencesCurrentApplication);
53
54 if (value != NULL)
55 {
56 if (CFGetTypeID(value) == CFNumberGetTypeID ())
57 {
58 if (CFNumberGetValue (value, kCFNumberIntType,&retour) == false)
59 retour = defaut;
60 }
61 CFRelease(value);
62 }
63 CFRelease(nom);
64 }
65
66 return retour;
67 }
68
GetBoolPreference(const char * name,int defaut)69 int GetBoolPreference(const char * name, int defaut)
70 {
71 int retour = defaut;
72
73 CFStringRef nom = CFStringCreateWithCString (NULL,name,CFStringGetSystemEncoding());
74
75 if (nom != NULL)
76 {
77 CFStringRef value = (CFStringRef)CFPreferencesCopyAppValue(nom,kCFPreferencesCurrentApplication);
78
79 if (value != NULL)
80 {
81 if (CFGetTypeID(value) == CFStringGetTypeID ())
82 {
83 retour = (CFStringCompare(value, CFSTR("YES"), kCFCompareCaseInsensitive) == kCFCompareEqualTo) ? 1 : 0;
84 }
85 CFRelease(value);
86 }
87 CFRelease(nom);
88 }
89
90
91 return retour;
92 }
93
SetStrPreference(const char * name,const char * value)94 void SetStrPreference (const char *name, const char *value)
95 {
96 CFStringRef nom = CFStringCreateWithCString (NULL,name,CFStringGetSystemEncoding());
97 if (nom != NULL)
98 {
99 CFStringRef val = CFStringCreateWithCString (NULL,value,CFStringGetSystemEncoding());
100 if (val != NULL)
101 {
102 CFPreferencesSetAppValue (nom,val,kCFPreferencesCurrentApplication);
103 (void)CFPreferencesAppSynchronize(kCFPreferencesCurrentApplication);
104 CFRelease(val);
105 }
106 CFRelease(nom);
107 }
108 }
109
GetStrPreference(const char * name,char * out,const char * defaut,const int bufferSize)110 void GetStrPreference (const char *name, char *out, const char *defaut, const int bufferSize)
111 {
112 if ((out==NULL) || (name==NULL)) return;
113
114 if (defaut != NULL)
115 {
116 strncpy(out,defaut,bufferSize-1);
117 out[bufferSize-1]=0;
118 }
119 else out[0]=0;
120
121 CFStringRef nom = CFStringCreateWithCString (NULL,name,CFStringGetSystemEncoding());
122
123 if (nom != NULL)
124 {
125 CFStringRef value = (CFStringRef)CFPreferencesCopyAppValue(nom,kCFPreferencesCurrentApplication);
126
127 if (value != NULL)
128 {
129 if (CFGetTypeID(value) == CFStringGetTypeID ())
130 {
131 if ((!CFStringGetCString (value, out, bufferSize, CFStringGetSystemEncoding())) && (defaut != NULL))
132 strcpy(out,defaut);
133 }
134 CFRelease(value);
135 }
136 CFRelease(nom);
137 }
138 }
139
140 #else /* Not __APPLE__ */
141
142 #include <stdio.h>
143 #include <stdlib.h>
144 #include <string.h>
145 #include <sys/types.h>
146 #include <sys/stat.h>
147
148 static const char * prefsfile = ".flobopuyorc";
149 static const char * sep = "\n\r";
150
151 static char * file = NULL;
152 static char * home = NULL;
153
fetchFile(void)154 static void fetchFile(void)
155 {
156 FILE * prefs;
157 struct stat myStat;
158
159 if (home == NULL)
160 {
161 #ifndef _WIN32
162 char * h = getenv("HOME");
163 #else
164 char * h = ".";
165 #endif
166 if (h==NULL) return;
167 home = (char *)malloc(strlen(h)+strlen(prefsfile)+2);
168 strcpy(home,h);
169 strcat(home,"/");
170 strcat(home,prefsfile);
171 }
172
173 if (file != NULL)
174 {
175 free(file);
176 file = NULL;
177 }
178
179 prefs = fopen(home, "r");
180 if (prefs == NULL) return;
181
182 if (stat(home,&myStat) == 0)
183 {
184 file = (char *)malloc((size_t)(myStat.st_size)+1);
185 int l = fread(file, 1,(size_t)(myStat.st_size), prefs);
186 file[l]=0;
187 }
188
189 fclose(prefs);
190 }
191
192
SetBoolPreference(const char * name,int value)193 void SetBoolPreference(const char *name, int value)
194 {
195 SetIntPreference(name, value);
196 }
197
SetIntPreference(const char * name,int value)198 void SetIntPreference(const char *name, int value)
199 {
200 char var[256];
201 sprintf(var,"%d",value);
202 SetStrPreference(name,var);
203 }
204
205
GetBoolPreference(const char * name,int defaut)206 int GetBoolPreference(const char *name, int defaut)
207 {
208 return GetIntPreference(name,defaut)?true:false;
209 }
210
GetIntPreference(const char * name,int defaut)211 int GetIntPreference(const char *name, int defaut)
212 {
213 char var[256];
214 var[0] = 0;
215 GetStrPreference(name,var,NULL,256);
216 if (var[0]) return atoi(var);
217 return defaut;
218 }
219
SetStrPreference(const char * name,const char * value)220 void SetStrPreference (const char *name, const char *value)
221 {
222 char * key;
223 FILE * prefs;
224
225 fetchFile();
226
227 if (home == NULL) return;
228
229 prefs = fopen(home, "w+");
230 if (prefs == NULL) return;
231
232 if (file != NULL)
233 {
234 for (key = strtok(file, sep); key; key = strtok(NULL, sep))
235 {
236 if (strstr(key,name)==NULL)
237 {
238 fprintf(prefs,"%s\n",key);
239 }
240 }
241 free(file);
242 file = NULL;
243 }
244
245 fprintf(prefs,"%s=%s\n",name,value);
246
247 fclose(prefs);
248 }
249
250
GetStrPreference(const char * name,char * out,const char * defaut,const int bufferSize)251 void GetStrPreference (const char *name, char *out, const char *defaut, const int bufferSize)
252 {
253 char * key, *copiedfile;
254 int tmplen;
255
256 if ((out==NULL) || (name==NULL)) return;
257
258 if (defaut != NULL)
259 {
260 strncpy(out,defaut,bufferSize-1);
261 out[bufferSize-1]=0;
262 }
263 else out[0]=0;
264
265 if (file==NULL) fetchFile();
266 if (file==NULL) return;
267
268 char tmp[256];
269 sprintf(tmp,"%s=",name);
270 tmplen = strlen(tmp);
271
272 copiedfile = strdup(file);
273
274 for (key = strtok(copiedfile, sep); key; key = strtok(NULL, sep))
275 {
276 if (strncmp(key, tmp, tmplen) == 0)
277 {
278 strncpy(out, key+tmplen, bufferSize-1);
279 out[bufferSize-1] = 0;
280 free(copiedfile);
281 return;
282 }
283 }
284 free(copiedfile);
285
286 return;
287 }
288
289
290 #endif /* Not __APPLE__ */
291
292