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