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