1 /*
2 * xtrojka (c) 1994,1995,1996 Maarten Los
3 *
4 * #include "COPYRIGHT"
5 *
6 * created: 26.xi.1995
7 * modified: 04.iv.1996
8 *
9 * This module reads and writes the preferences
10 */
11
12 #include "debug.h"
13 #include "tr_core.h"
14
15 #include <stdio.h>
16 #include <fcntl.h>
17 #include <stdlib.h>
18 #include <sys/types.h>
19 #include <unistd.h>
20
21 #include "xtrojka.h"
22 #include "preferences.h"
23
24 extern flag is_wizard;
25 extern flag is_slick;
26
27 extern int starting_speed;
28 extern int speed;
29 extern char *getenv();
30
31 PREFS prefs;
32
33 char prefsfile[300];
34
35
36
init_preferences(void)37 void init_preferences(void)
38 {
39 char *home;
40
41 DEBUG("preferences.c", "init_preferences")
42
43 /* try to read the prefs from the file */
44 if((home = getenv(DOLLAR_HOME)) == NULL) {
45 /*
46 * we cannot get $HOME, so use some vague tmp-file
47 */
48 sprintf(prefsfile,"/tmp/%s", PREFSFILENAME);
49 return;
50 }
51 sprintf(prefsfile,"%s/%s", home, PREFSFILENAME);
52
53 read_prefs();
54 }
55
56
read_prefs(void)57 void read_prefs(void)
58 {
59 int fd;
60
61 DEBUG("preferences.c", "read_prefs")
62
63 /*
64 * set the default preferences
65 */
66 set_default_prefs();
67
68 if((fd = open(prefsfile, O_RDONLY)) < 0) {
69 create_prefsfile();
70 write_prefs();
71 return;
72 } else
73 if(read(fd, &prefs, sizeof(prefs)) < 0) {
74 fprintf(stderr,"%s\n", app_data.wstr_read_prefs);
75 return;
76 }
77
78 is_wizard = prefs.wizard;
79 is_slick = prefs.slick;
80 starting_speed = speed = prefs.speed;
81
82 if(fd >=0)
83 close(fd);
84 }
85
86
write_prefs(void)87 void write_prefs(void)
88 {
89 int fd;
90
91 DEBUG("preferences.c", "write_prefs")
92
93 /* try to write the prefs to the prefsfile */
94
95 if((fd = open(prefsfile, O_WRONLY)) < 0)
96 fprintf(stderr,"%s\n", app_data.wstr_open_prefs);
97
98 prefs.wizard = is_wizard;
99 prefs.slick = is_slick;
100 prefs.speed = speed;
101
102 if(write(fd, &prefs, sizeof(prefs)) < 0)
103 fprintf(stderr,"%s\n", app_data.wstr_write_prefs);
104 }
105
106
create_prefsfile(void)107 void create_prefsfile(void)
108 {
109 int fd;
110 int oldumask;
111
112 oldumask = umask(0);
113
114 DEBUG("preferences.c", "create_pefsfile")
115
116 if((fd = creat(prefsfile, 0666)) < 0)
117 fprintf(stderr,"%s\n", app_data.wstr_create_prefs);
118
119 if(fd >= 0)
120 close(fd);
121
122 umask(oldumask);
123 }
124
125
set_default_prefs(void)126 void set_default_prefs(void)
127 {
128 DEBUG("preferences.c", "set_default_prefs")
129
130 is_wizard = DEF_IS_WIZARD;
131 is_slick = DEF_IS_SLICK;
132 starting_speed = speed = DEF_SPEED;
133 }
134
135