Mercurial > pidgin
annotate src/gaimrc.c @ 268:f8a29745247c
[gaim-migrate @ 278]
Two star college football players need to pass the final to play in the big
game. The professor loves football, but knows these guys aren't the brightest
bulbs in teh box, so he gives them a special final, puts them in a room by
themselves, and gives them an hour.
The guys look at each other, and start in on the final, which has only one
question: "What did Old MacDonald have?"
One guy looks at the other and says, "Do you know the answer to this?"
The other guy says, "Duh, a farm."
"How do you spell that?"
"Stupid! EIEIO!"
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Thu, 25 May 2000 18:58:21 +0000 |
parents | b8c5efaef154 |
children | d9894fee20fe |
rev | line source |
---|---|
1 | 1 /* |
2 * gaim | |
3 * | |
4 * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net> | |
5 * | |
6 * This program is free software; you can redistribute it and/or modify | |
7 * it under the terms of the GNU General Public License as published by | |
8 * the Free Software Foundation; either version 2 of the License, or | |
9 * (at your option) any later version. | |
10 * | |
11 * This program is distributed in the hope that it will be useful, | |
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 * GNU General Public License for more details. | |
15 * | |
16 * You should have received a copy of the GNU General Public License | |
17 * along with this program; if not, write to the Free Software | |
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
19 * | |
20 */ | |
21 | |
22 #include <string.h> | |
23 #include <sys/time.h> | |
24 | |
25 #include <sys/types.h> | |
26 #include <sys/stat.h> | |
27 | |
28 #include <unistd.h> | |
29 #include <stdio.h> | |
30 #include <stdlib.h> | |
31 #include <gtk/gtk.h> | |
32 #include "gaim.h" | |
33 #include "proxy.h" | |
34 | |
84 | 35 #ifdef USE_APPLET |
82 | 36 #include "gnome_applet_mgr.h" |
37 #endif | |
38 | |
230
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
39 /* for people like myself, who are too lazy to add an away msg :) */ |
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
40 #define BORING_DEFAULT_AWAY_MSG "sorry, i ran out for a while. bbl" |
1 | 41 |
42 struct aim_user *current_user = NULL; | |
43 GList *aim_users = NULL; | |
44 int general_options; | |
45 int display_options; | |
46 int sound_options; | |
47 int font_options; | |
230
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
48 char *fontface; |
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
49 char *fontname; |
1 | 50 |
51 int report_idle, web_browser; | |
52 struct save_pos blist_pos; | |
53 char web_command[2048]; | |
54 char aim_host[512]; | |
55 int aim_port; | |
56 char login_host[512]; | |
57 int login_port; | |
180 | 58 char latest_ver[25]; |
1 | 59 |
60 struct parse { | |
61 char option[256]; | |
62 char value[6][256]; | |
63 }; | |
64 | |
65 static struct parse *parse_line(char *line) | |
66 { | |
67 char *c = line; | |
68 int inopt = 1, inval = 0, curval = -1; | |
69 int optlen = 0, vallen = 0; | |
70 static struct parse p; | |
71 | |
72 | |
73 while(*c) { | |
74 if (*c == '\t') { | |
75 c++; | |
76 continue; | |
77 } | |
78 if (inopt) { | |
79 // if ((*c < 'a' || *c > 'z') && *c != '_') { | |
80 if ((*c < 'a' || *c > 'z') && *c != '_' && (*c < 'A' || *c > 'Z')) { | |
81 inopt = 0; | |
82 p.option[optlen] = 0; | |
83 c++; | |
84 continue; | |
85 } | |
86 | |
87 p.option[optlen] = *c; | |
88 optlen++; | |
89 c++; | |
90 continue; | |
91 } else if (inval) { | |
92 if ( (*c == '}') ) { | |
93 if (*(c-1) == '\\') { | |
94 p.value[curval][vallen - 1] = *c; | |
95 c++; | |
96 continue; | |
97 } else { | |
98 p.value[curval][vallen - 1] = 0; | |
99 inval = 0; | |
100 c++; | |
101 continue; | |
102 } | |
103 } else { | |
104 p.value[curval][vallen] = *c; | |
105 vallen++; | |
106 c++; | |
107 continue; } | |
108 } else if (*c == '{') { | |
109 if (*(c-1) == '\\') { | |
110 p.value[curval][vallen-1] = *c; | |
111 c++; | |
112 continue; | |
113 } | |
114 else | |
115 { | |
116 curval++; | |
117 vallen = 0; | |
118 inval = 1; | |
119 c++; | |
120 c++; | |
121 continue; | |
122 } | |
123 } | |
124 c++; | |
125 } | |
126 return &p; | |
127 } | |
128 | |
129 | |
130 static int gaimrc_parse_tag(FILE *f) | |
131 { | |
132 char buf[2048]; | |
133 char tag[256]; | |
134 buf[0] = '#'; | |
135 | |
136 while (buf[0] == '#' && !feof(f)) | |
137 fgets(buf, sizeof(buf), f); | |
138 | |
139 if (feof(f)) | |
140 return -1; | |
141 | |
142 sscanf(buf, "%s {", tag); | |
143 | |
144 if (!strcmp(tag, "users")) { | |
145 return 0; | |
146 } else if (!strcmp(tag, "options")) { | |
147 return 1; | |
148 } else if (!strcmp(tag, "away")) { | |
149 return 2; | |
142
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
150 } else if (!strcmp(tag, "plugins")) { |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
151 return 3; |
1 | 152 } |
153 | |
154 return -1; | |
155 } | |
156 | |
157 void filter_break(char *msg) | |
158 { | |
44 | 159 char *c; |
160 int mc; | |
161 int cc; | |
162 | |
163 c = g_malloc(strlen(msg)+1); | |
164 strcpy(c, msg); | |
1 | 165 |
44 | 166 mc = 0; |
167 cc = 0; | |
168 while (c[cc] != '\0') | |
169 { | |
170 if (c[cc] == '\\') { | |
171 cc++; | |
172 msg[mc] = c[cc]; | |
173 } | |
174 else { | |
175 msg[mc] = c[cc]; | |
176 } | |
177 mc++; | |
178 cc++; | |
179 } | |
180 msg[mc] = 0; | |
181 g_free(c); | |
1 | 182 } |
183 | |
44 | 184 |
1 | 185 static void gaimrc_read_away(FILE *f) |
186 { | |
187 struct parse *p; | |
188 char buf[4096]; | |
189 struct away_message *a; | |
190 | |
191 buf[0] = 0; | |
192 | |
193 while (buf[0] != '}') | |
194 { | |
195 if (!fgets(buf, sizeof(buf), f)) | |
196 return; | |
197 | |
198 if (buf[0] == '}') | |
199 return; | |
200 | |
201 p = parse_line(buf); | |
15 | 202 if (!strcmp(p->option, "message")) |
203 { | |
204 a = g_new0(struct away_message, 1); | |
1 | 205 |
15 | 206 g_snprintf(a->name, sizeof(a->name), "%s", p->value[0]); |
207 g_snprintf(a->message, sizeof(a->message), "%s", p->value[1]); | |
208 filter_break(a->message); | |
209 away_messages = g_list_append(away_messages, a); | |
210 } | |
1 | 211 } |
212 } | |
213 | |
214 static void gaimrc_write_away(FILE *f) | |
215 { | |
216 GList *awy = away_messages; | |
217 struct away_message *a; | |
218 | |
219 fprintf(f, "away {\n"); | |
220 | |
230
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
221 if (awy) |
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
222 { |
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
223 while (awy) { |
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
224 char *str1, *str2; |
26 | 225 |
230
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
226 a = (struct away_message *)awy->data; |
26 | 227 |
230
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
228 str1 = escape_text2(a->name); |
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
229 str2 = escape_text2(a->message); |
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
230 |
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
231 fprintf(f, "\tmessage { %s } { %s }\n", str1, str2); |
26 | 232 |
230
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
233 /* escape_text2 uses malloc(), so we don't want to g_free these */ |
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
234 free(str1); |
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
235 free(str2); |
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
236 |
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
237 awy = awy->next; |
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
238 } |
1 | 239 } |
230
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
240 else |
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
241 fprintf(f, "\tmessage { boring default } { %s }\n", BORING_DEFAULT_AWAY_MSG); |
1 | 242 |
243 fprintf(f, "}\n"); | |
244 } | |
245 | |
142
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
246 #ifdef GAIM_PLUGINS |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
247 static void gaimrc_write_plugins(FILE *f) |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
248 { |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
249 GList *pl = plugins; |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
250 struct gaim_plugin *p; |
1 | 251 |
142
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
252 fprintf(f, "plugins {\n"); |
1 | 253 |
142
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
254 while (pl) { |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
255 char *path; |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
256 |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
257 p = (struct gaim_plugin *)pl->data; |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
258 |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
259 path = escape_text2(p->filename); |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
260 |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
261 fprintf(f, "\tplugin { %s }\n", path); |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
262 |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
263 free(path); |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
264 |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
265 pl = pl->next; |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
266 } |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
267 |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
268 fprintf(f, "}\n"); |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
269 } |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
270 |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
271 static void gaimrc_read_plugins(FILE *f) |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
272 { |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
273 struct parse *p; |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
274 char buf[4096]; |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
275 |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
276 buf[0] = 0; |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
277 |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
278 while (buf[0] != '}') |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
279 { |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
280 if (!fgets(buf, sizeof(buf), f)) |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
281 return; |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
282 |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
283 if (buf[0] == '}') |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
284 return; |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
285 |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
286 p = parse_line(buf); |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
287 if (!strcmp(p->option, "plugin")) |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
288 { |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
289 load_plugin(p->value[0]); |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
290 } |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
291 } |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
292 } |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
293 #endif /* GAIM_PLUGINS */ |
1 | 294 |
295 static struct aim_user *gaimrc_read_user(FILE *f) | |
296 { | |
297 struct parse *p; | |
298 struct aim_user *u; | |
299 char buf[4096]; | |
300 | |
301 if (!fgets(buf, sizeof(buf), f)) | |
302 return NULL; | |
303 | |
304 p = parse_line(buf); | |
305 | |
306 if (strcmp(p->option, "ident")) | |
307 return NULL; | |
308 | |
309 u = g_new0(struct aim_user, 1); | |
310 | |
311 strcpy(u->username, p->value[0]); | |
312 strcpy(u->password, p->value[1]); | |
313 | |
314 u->user_info[0] = 0; | |
315 | |
316 if (!fgets(buf, sizeof(buf), f)) | |
317 return u; | |
318 | |
319 if (strcmp(buf, "\t\tuser_info {\n")) { | |
320 return u; | |
321 } | |
322 | |
323 if (!fgets(buf, sizeof(buf), f)) | |
324 return u; | |
325 | |
326 while (strncmp(buf, "\t\t}", 3)) { | |
327 if (strlen(buf) > 3) | |
328 strcat(u->user_info, &buf[3]); | |
329 | |
330 if (!fgets(buf, sizeof(buf), f)) { | |
331 return u; | |
332 } | |
333 } | |
334 | |
335 return u; | |
336 | |
337 } | |
338 | |
339 static void gaimrc_write_user(FILE *f, struct aim_user *u) | |
340 { | |
341 char *c; | |
342 int nl = 1;; | |
131
350d88f043b6
[gaim-migrate @ 141]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
84
diff
changeset
|
343 if (general_options & OPT_GEN_REMEMBER_PASS) |
350d88f043b6
[gaim-migrate @ 141]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
84
diff
changeset
|
344 fprintf(f, "\t\tident { %s } { %s }\n", u->username, u->password); |
350d88f043b6
[gaim-migrate @ 141]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
84
diff
changeset
|
345 else |
350d88f043b6
[gaim-migrate @ 141]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
84
diff
changeset
|
346 fprintf(f, "\t\tident { %s } { }\n", u->username); |
1 | 347 fprintf(f, "\t\tuser_info {"); |
348 c = u->user_info; | |
349 while(*c) { | |
350 /* This is not as silly as it looks. */ | |
351 if (*c == '\n') { | |
352 nl++; | |
353 } else { | |
354 if (nl) { | |
355 while(nl) { | |
356 fprintf(f, "\n\t\t\t"); | |
357 nl--; | |
358 } | |
359 } | |
360 fprintf(f, "%c", *c); | |
361 } | |
362 c++; | |
363 } | |
364 fprintf(f, "\n\t\t}\n"); | |
365 | |
366 } | |
367 | |
368 | |
369 static void gaimrc_read_users(FILE *f) | |
370 { | |
371 char buf[2048]; | |
372 struct aim_user *u; | |
373 struct parse *p; | |
374 int cur = 0; | |
375 | |
376 buf[0] = 0; | |
377 | |
378 while (buf[0] != '}') { | |
379 if (buf[0] == '#') | |
380 continue; | |
381 | |
382 if (!fgets(buf, sizeof(buf), f)) | |
383 return; | |
384 | |
385 | |
386 | |
387 p = parse_line(buf); | |
388 | |
389 if (!strcmp(p->option, "current_user")) { | |
158
e9414f13d8b7
[gaim-migrate @ 168]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
156
diff
changeset
|
390 cur = 1; |
1 | 391 } else if (strcmp(p->option, "user")) { |
158
e9414f13d8b7
[gaim-migrate @ 168]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
156
diff
changeset
|
392 cur = 0; |
1 | 393 continue; |
159
d56878f647fb
[gaim-migrate @ 169]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
158
diff
changeset
|
394 } else { |
d56878f647fb
[gaim-migrate @ 169]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
158
diff
changeset
|
395 cur = 0; |
d56878f647fb
[gaim-migrate @ 169]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
158
diff
changeset
|
396 } |
1 | 397 |
398 u = gaimrc_read_user(f); | |
399 | |
400 if (cur) | |
401 current_user = u; | |
402 | |
403 aim_users = g_list_append(aim_users, u); | |
404 } | |
405 } | |
406 | |
407 static void gaimrc_write_users(FILE *f) | |
408 { | |
409 GList *usr = aim_users; | |
410 struct aim_user *u; | |
411 | |
412 fprintf(f, "users {\n"); | |
413 | |
414 while(usr) { | |
415 u = (struct aim_user *)usr->data; | |
416 if (current_user == u) { | |
417 fprintf(f, "\tcurrent_user {\n"); | |
418 } else { | |
419 fprintf(f, "\tuser {\n"); | |
420 } | |
421 gaimrc_write_user(f, u); | |
422 | |
423 fprintf(f, "\t}\n"); | |
424 | |
425 usr = usr->next; | |
426 } | |
427 | |
428 fprintf(f, "}\n"); | |
429 } | |
430 | |
431 | |
432 | |
433 | |
434 static void gaimrc_read_options(FILE *f) | |
435 { | |
436 char buf[2048]; | |
437 struct parse *p; | |
438 | |
439 buf[0] = 0; | |
440 | |
441 while (buf[0] != '}') { | |
442 if (buf[0] == '#') | |
443 continue; | |
444 | |
445 if (!fgets(buf, sizeof(buf), f)) | |
446 return; | |
447 | |
448 p = parse_line(buf); | |
449 | |
450 if (!strcmp(p->option, "general_options")) { | |
451 general_options = atoi(p->value[0]); | |
452 } else if (!strcmp(p->option, "display_options")) { | |
453 display_options = atoi(p->value[0]); | |
454 } else if (!strcmp(p->option, "sound_options")) { | |
455 sound_options = atoi(p->value[0]); | |
230
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
456 } else if (!strcmp(p->option, "font_options")) { |
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
457 font_options = atoi(p->value[0]); |
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
458 } else if (!strcmp(p->option, "font_face")) { |
233 | 459 if (p->value[0] != NULL) |
460 fontface = g_strconcat(p->value[0], '\0'); | |
230
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
461 } else if (!strcmp(p->option, "font_name")) { |
233 | 462 if (p->value[0] != NULL) |
463 fontname = g_strconcat(p->value[0], '\0'); | |
230
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
464 } else if (!strcmp(p->option, "latest_ver")) { |
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
465 g_snprintf(latest_ver, BUF_LONG, "%s", p->value[0]); |
1 | 466 } else if (!strcmp(p->option, "report_idle")) { |
467 report_idle = atoi(p->value[0]); | |
468 } else if (!strcmp(p->option, "web_browser")) { | |
469 web_browser = atoi(p->value[0]); | |
470 } else if (!strcmp(p->option, "web_command")) { | |
471 strcpy(web_command, p->value[0]); | |
472 } else if (!strcmp(p->option, "proxy_type")) { | |
473 proxy_type = atoi(p->value[0]); | |
474 } else if (!strcmp(p->option, "proxy_host")) { | |
475 strcpy(proxy_host, p->value[0]); | |
476 } else if (!strcmp(p->option, "proxy_port")) { | |
477 proxy_port = atoi(p->value[0]); | |
478 } else if (!strcmp(p->option, "aim_host")) { | |
479 strcpy(aim_host, p->value[0]); | |
480 } else if (!strcmp(p->option, "aim_port")) { | |
481 aim_port = atoi(p->value[0]); | |
482 } else if (!strcmp(p->option, "login_host")) { | |
483 strcpy(login_host, p->value[0]); | |
484 } else if (!strcmp(p->option, "login_port")) { | |
485 login_port = atoi(p->value[0]); | |
486 } else if (!strcmp(p->option, "blist_pos")) { | |
487 blist_pos.x = atoi(p->value[0]); | |
488 blist_pos.y = atoi(p->value[1]); | |
489 blist_pos.width = atoi(p->value[2]); | |
490 blist_pos.height = atoi(p->value[3]); | |
491 blist_pos.xoff = atoi(p->value[4]); | |
492 blist_pos.yoff = atoi(p->value[5]); | |
82 | 493 } |
1 | 494 |
495 } | |
496 | |
497 } | |
498 | |
499 static void gaimrc_write_options(FILE *f) | |
500 { | |
501 | |
502 fprintf(f, "options {\n"); | |
503 fprintf(f, "\tgeneral_options { %d }\n", general_options); | |
504 fprintf(f, "\tdisplay_options { %d }\n", display_options); | |
505 fprintf(f, "\tsound_options { %d }\n", sound_options); | |
230
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
506 fprintf(f, "\tfont_options { %d }\n", font_options); |
232 | 507 if (fontface) |
230
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
508 fprintf(f, "\tfont_face { %s }\n", fontface); |
232 | 509 if (fontname) |
230
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
180
diff
changeset
|
510 fprintf(f, "\tfont_name { %s }\n", fontname); |
1 | 511 fprintf(f, "\treport_idle { %d }\n", report_idle); |
512 fprintf(f, "\tweb_browser { %d }\n", web_browser); | |
513 fprintf(f, "\tweb_command { %s }\n", web_command); | |
514 fprintf(f, "\tproxy_type { %d }\n", proxy_type); | |
515 fprintf(f, "\tproxy_host { %s }\n", proxy_host); | |
516 fprintf(f, "\tproxy_port { %d }\n", proxy_port); | |
517 fprintf(f, "\taim_host { %s }\n", aim_host); | |
518 fprintf(f, "\taim_port { %d }\n", aim_port); | |
519 fprintf(f, "\tlogin_host { %s }\n", login_host); | |
520 fprintf(f, "\tlogin_port { %d }\n", login_port); | |
521 fprintf(f, "\tblist_pos { %d } { %d } { %d } { %d } { %d } { %d }\n", | |
522 blist_pos.x, blist_pos.y, blist_pos.width, blist_pos.height, | |
523 blist_pos.xoff, blist_pos.yoff); | |
180 | 524 fprintf(f, "\tlatest_ver { %s }\n", latest_ver); |
1 | 525 fprintf(f, "}\n"); |
526 } | |
527 | |
528 | |
529 void set_defaults() | |
530 { | |
531 general_options = | |
532 OPT_GEN_SEND_LINKS | | |
533 OPT_GEN_ENTER_SENDS | | |
534 OPT_GEN_SAVED_WINDOWS | | |
535 OPT_GEN_REMEMBER_PASS | | |
180 | 536 OPT_GEN_REGISTERED | |
537 OPT_GEN_CHECK_VERSIONS; | |
1 | 538 display_options = |
539 OPT_DISP_SHOW_IDLETIME | | |
540 OPT_DISP_SHOW_TIME | | |
541 OPT_DISP_SHOW_PIXMAPS | | |
542 OPT_DISP_SHOW_BUTTON_XPM; | |
543 font_options = 0; | |
156 | 544 sound_options = OPT_SOUND_LOGIN | OPT_SOUND_LOGOUT | OPT_SOUND_RECV | OPT_SOUND_SEND | OPT_SOUND_SILENT_SIGNON; |
1 | 545 report_idle = IDLE_GAIM; |
546 web_browser = BROWSER_NETSCAPE; | |
547 proxy_type = PROXY_NONE; | |
548 | |
549 aim_port = TOC_PORT; | |
550 login_port = AUTH_PORT; | |
551 g_snprintf(aim_host, sizeof(aim_host), "%s", TOC_HOST); | |
552 g_snprintf(login_host, sizeof(login_host), "%s", AUTH_HOST); | |
553 proxy_host[0] = 0; | |
554 proxy_port = 0; | |
555 g_snprintf(web_command, sizeof(web_command), "xterm -e lynx %%s"); | |
556 blist_pos.width = 0; | |
557 blist_pos.height = 0; | |
558 blist_pos.x = 0; | |
559 blist_pos.y = 0; | |
560 blist_pos.xoff = 0; | |
561 blist_pos.yoff = 0; | |
180 | 562 g_snprintf(latest_ver, BUF_LONG, "%s", VERSION); |
1 | 563 } |
564 | |
565 | |
566 void load_prefs() | |
567 { | |
568 FILE *f; | |
569 char buf[1024]; | |
570 int ver = 0; | |
571 | |
572 if (getenv("HOME")) { | |
573 g_snprintf(buf, sizeof(buf), "%s/.gaimrc", getenv("HOME")); | |
574 if ((f = fopen(buf,"r"))) { | |
575 fgets(buf, sizeof(buf), f); | |
576 sscanf(buf, "# .gaimrc v%d", &ver); | |
15 | 577 if ( (ver <= 1) || (buf[0] != '#')) { |
1 | 578 fclose(f); |
579 set_defaults(); | |
580 save_prefs(); | |
581 load_prefs(); | |
582 return; | |
583 } | |
584 while(!feof(f)) { | |
585 switch(gaimrc_parse_tag(f)) { | |
586 case -1: | |
587 /* Let the loop end, EOF*/ | |
588 break; | |
589 case 0: | |
590 gaimrc_read_users(f); | |
591 break; | |
592 case 1: | |
593 gaimrc_read_options(f); | |
594 break; | |
595 case 2: | |
596 gaimrc_read_away(f); | |
597 break; | |
142
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
598 #ifdef GAIM_PLUGINS |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
599 case 3: |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
600 gaimrc_read_plugins(f); |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
601 break; |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
602 #endif |
1 | 603 default: |
604 /* NOOP */ | |
605 break; | |
606 } | |
607 } | |
608 fclose(f); | |
609 } | |
610 } | |
611 | |
612 } | |
613 | |
614 void save_prefs() | |
615 { | |
616 FILE *f; | |
617 char buf[BUF_LONG]; | |
618 | |
619 if (getenv("HOME")) { | |
620 g_snprintf(buf, sizeof(buf), "%s/.gaimrc", getenv("HOME")); | |
621 if ((f = fopen(buf,"w"))) { | |
15 | 622 fprintf(f, "# .gaimrc v%d\n", 2); |
1 | 623 gaimrc_write_users(f); |
624 gaimrc_write_options(f); | |
625 gaimrc_write_away(f); | |
142
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
626 #ifdef GAIM_PLUGINS |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
627 gaimrc_write_plugins(f); |
fbabd28795d2
[gaim-migrate @ 152]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
131
diff
changeset
|
628 #endif |
1 | 629 fclose(f); |
630 chmod(buf, S_IRUSR | S_IWUSR); | |
631 } | |
632 | |
633 } | |
634 } | |
635 |