more virtualization

SVN revision: 3992
This commit is contained in:
Carsten Haitzler 2000-12-14 19:36:33 +00:00
parent 21009504f9
commit 79e0f41973
4 changed files with 138 additions and 41 deletions

View File

@ -1,48 +1,76 @@
#include "e.h"
static char cfg_grabs_db[4096];
static char cfg_settings_db[4096];
static char cfg_actions_db[4096];
static char cfg_borders[4096];
static char cfg_grabs_db[4096] = "";
static char cfg_settings_db[4096] = "";
static char cfg_actions_db[4096] = "";
static char cfg_borders_db[4096] = "";
static char cfg_user_dir[4096] = "";
static char cfg_images_dir[4096] = "";
static char cfg_fonts_dir[4096] = "";
void
e_config_init(void)
{
if (!e_file_is_dir(e_config_user_dir()))
{
char buf[4096];
sprintf(buf, "%s", e_config_user_dir());
e_file_mkdir(buf);
sprintf(buf, "%sappearance", e_config_user_dir());
e_file_mkdir(buf);
sprintf(buf, "%sappearance/borders", e_config_user_dir());
e_file_mkdir(buf);
sprintf(buf, "%sbehavior", e_config_user_dir());
e_file_mkdir(buf);
sprintf(buf, "%sbehavior/grabs.db", e_config_user_dir());
e_file_cp(PACKAGE_DATA_DIR"/data/config/behavior/default/grabs.db", buf);
sprintf(buf, "%sbehavior/settings.db", e_config_user_dir());
e_file_cp(PACKAGE_DATA_DIR"/data/config/behavior/default/settings.db", buf);
sprintf(buf, "%sbehavior/actions.db", e_config_user_dir());
e_file_cp(PACKAGE_DATA_DIR"/data/config/behavior/default/actions.db", buf);
sprintf(buf, "%sappearance/borders/border.bits.db", e_config_user_dir());
e_file_cp(PACKAGE_DATA_DIR"/data/config/appearance/default/borders/border.bits.db", buf);
sprintf(buf, "%sappearance/borders/border2.bits.db", e_config_user_dir());
e_file_cp(PACKAGE_DATA_DIR"/data/config/appearance/default/borders/border2.bits.db", buf);
sprintf(buf, "%sappearance/borders/borderless.bits.db", e_config_user_dir());
e_file_cp(PACKAGE_DATA_DIR"/data/config/appearance/default/borders/borderless.bits.db", buf);
}
}
char *
e_config_user_dir(void)
{
if (cfg_user_dir[0]) return cfg_user_dir;
sprintf(cfg_user_dir, "%s/.e/", e_file_home());
return cfg_user_dir;
}
#define E_CONF(_key, _var, _args...) \
{ \
if (!strcmp(type, _key)) \
{ \
if ((_var)[0]) return (_var); \
sprintf((_var), ## _args); \
return (_var); \
} \
}
char *
e_config_get(char *type)
{
if (!strcmp(type, "grabs"))
{
sprintf(cfg_grabs_db,
PACKAGE_DATA_DIR"/data/config/behavior/default/grabs.db");
return cfg_grabs_db;
}
if (!strcmp(type, "settings"))
{
sprintf(cfg_settings_db,
PACKAGE_DATA_DIR"/data/config/behavior/default/settings.db");
return cfg_settings_db;
}
if (!strcmp(type, "actions"))
{
sprintf(cfg_actions_db,
PACKAGE_DATA_DIR"/data/config/behavior/default/actions.db");
return cfg_actions_db;
}
if (!strcmp(type, "borders"))
{
sprintf(cfg_borders,
PACKAGE_DATA_DIR"/data/config/appearance/default/borders/");
return cfg_borders;
}
if (!strcmp(type, "images"))
{
sprintf(cfg_borders,
PACKAGE_DATA_DIR"/data/images/");
return cfg_borders;
}
if (!strcmp(type, "fonts"))
{
sprintf(cfg_borders,
PACKAGE_DATA_DIR"/data/fonts/");
return cfg_borders;
}
E_CONF("grabs", cfg_grabs_db,
PACKAGE_DATA_DIR"/data/config/behavior/default/grabs.db");
E_CONF("settings", cfg_settings_db,
PACKAGE_DATA_DIR"/data/config/behavior/default/settings.db");
E_CONF("actions", cfg_actions_db,
PACKAGE_DATA_DIR"/data/config/behavior/default/actions.db");
E_CONF("borders", cfg_borders_db,
PACKAGE_DATA_DIR"/data/config/appearance/default/borders/");
E_CONF("images", cfg_images_dir,
PACKAGE_DATA_DIR"/data/images/");
E_CONF("fonts", cfg_fonts_dir,
PACKAGE_DATA_DIR"/data/fonts/");
return "";
}

View File

@ -348,6 +348,11 @@ void e_resist_border(E_Border *b);
time_t e_file_modified_time(char *file);
void e_set_env(char *variable, char *content);
int e_file_exists(char *file);
int e_file_is_dir(char *file);
char *e_file_home(void);
int e_file_mkdir(char *dir);
int e_file_cp(char *src, char *dst);
void e_exec_set_args(int argc, char **argv);
void e_exec_restart(void);
@ -355,4 +360,6 @@ pid_t e_exec_run(char *exe);
pid_t e_exec_run_in_dir(char *exe, char *dir);
pid_t e_run_in_dir_with_env(char *exe, char *dir, int *launch_id_ret, char **env, char *launch_path);
void e_config_init(void);
char *e_config_user_dir(void);
char *e_config_get(char *type);

View File

@ -38,9 +38,10 @@ setup(void)
int
main(int argc, char **argv)
{
atexit(cb_exit);
e_exec_set_args(argc, argv);
atexit(cb_exit);
e_config_init();
e_display_init(NULL);
e_ev_signal_init();
e_event_filter_init();

View File

@ -17,3 +17,64 @@ e_set_env(char *variable, char *content)
sprintf(env, "%s=%s", variable, content);
putenv(env);
}
int
e_file_exists(char *file)
{
struct stat st;
if (stat(file, &st) < 0) return 0;
return 1;
}
int
e_file_is_dir(char *file)
{
struct stat st;
if (stat(file, &st) < 0) return 0;
if (S_ISDIR(st.st_mode)) return 1;
return 0;
}
char *
e_file_home(void)
{
static char *home = NULL;
if (home) return home;
home = getenv("HOME");
if (!home) home = getenv("TMPDIR");
if (!home) home = "/tmp";
return home;
}
static mode_t default_mode = S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;
int
e_file_mkdir(char *dir)
{
if (mkdir(dir, default_mode) < 0) return 0;
return 1;
}
int
e_file_cp(char *src, char *dst)
{
FILE *f1, *f2;
char buf[4096];
size_t num;
f1 = fopen(src, "rb");
if (!f1) return 0;
f2 = fopen(dst, "wb");
if (!f2)
{
fclose(f2);
return 0;
}
while ((num = fread(buf, 1, 4096, f1)) > 0) fwrite(buf, 1, num, f2);
fclose(f1);
fclose(f2);
return 1;
}