start the config system, add the config file parser
This commit is contained in:
parent
4502cad550
commit
56dc0446cd
6 changed files with 1840 additions and 2 deletions
|
@ -27,11 +27,11 @@ openbox3_LDADD=@LIBINTL@ ../render/librender.a
|
||||||
openbox3_LDFLAGS=-export-dynamic
|
openbox3_LDFLAGS=-export-dynamic
|
||||||
openbox3_SOURCES=client.c event.c extensions.c focus.c frame.c openbox.c \
|
openbox3_SOURCES=client.c event.c extensions.c focus.c frame.c openbox.c \
|
||||||
prop.c screen.c stacking.c xerror.c themerc.c timer.c dispatch.c \
|
prop.c screen.c stacking.c xerror.c themerc.c timer.c dispatch.c \
|
||||||
engine.c plugin.c action.c grab.c
|
engine.c plugin.c action.c grab.c cparse.l config.c
|
||||||
|
|
||||||
noinst_HEADERS=client.h event.h extensions.h focus.h frame.h geom.h gettext.h \
|
noinst_HEADERS=client.h event.h extensions.h focus.h frame.h geom.h gettext.h \
|
||||||
openbox.h prop.h screen.h stacking.h xerror.h themerc.h dispatch.h \
|
openbox.h prop.h screen.h stacking.h xerror.h themerc.h dispatch.h \
|
||||||
timer.h engine.h plugin.h action.h grab.h
|
timer.h engine.h plugin.h action.h grab.h config.h
|
||||||
|
|
||||||
MAINTAINERCLEANFILES= Makefile.in
|
MAINTAINERCLEANFILES= Makefile.in
|
||||||
|
|
||||||
|
|
37
openbox/config.c
Normal file
37
openbox/config.c
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_STDIO_H
|
||||||
|
# include <stdio.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static GSList *config = NULL;
|
||||||
|
|
||||||
|
/* provided by cparse.l */
|
||||||
|
void cparse_go(FILE *);
|
||||||
|
|
||||||
|
|
||||||
|
void config_startup()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void config_shutdown()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void config_parse()
|
||||||
|
{
|
||||||
|
FILE *file;
|
||||||
|
char *path;
|
||||||
|
|
||||||
|
path = g_build_filename(g_get_home_dir(), ".openbox", "rc3", NULL);
|
||||||
|
if ((file = fopen(path, "r")) != NULL) {
|
||||||
|
cparse_go(file);
|
||||||
|
fclose(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean config_set(char *name, ConfigValueType type, ConfigValue value)
|
||||||
|
{
|
||||||
|
g_message("Setting %s\n", name);
|
||||||
|
return TRUE;
|
||||||
|
}
|
29
openbox/config.h
Normal file
29
openbox/config.h
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
#ifndef __config_h
|
||||||
|
#define __config_h
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
Config_String,
|
||||||
|
Config_Integer
|
||||||
|
} ConfigValueType;
|
||||||
|
|
||||||
|
typedef union {
|
||||||
|
char *string;
|
||||||
|
int integer;
|
||||||
|
} ConfigValue;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char *name;
|
||||||
|
ConfigValueType type;
|
||||||
|
ConfigValue value;
|
||||||
|
} ConfigEntry;
|
||||||
|
|
||||||
|
void config_startup();
|
||||||
|
void config_shutdown();
|
||||||
|
|
||||||
|
gboolean config_set(char *name, ConfigValueType type, ConfigValue value);
|
||||||
|
|
||||||
|
void config_parse();
|
||||||
|
|
||||||
|
#endif
|
1672
openbox/cparse.c
Normal file
1672
openbox/cparse.c
Normal file
File diff suppressed because it is too large
Load diff
95
openbox/cparse.l
Normal file
95
openbox/cparse.l
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
%{
|
||||||
|
#include <glib.h>
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
static int yylineno = 1;
|
||||||
|
static gboolean haserror = FALSE;
|
||||||
|
static ConfigEntry entry = { NULL, -1 };
|
||||||
|
|
||||||
|
static void stringvalue();
|
||||||
|
static void numbervalue();
|
||||||
|
static void identifier();
|
||||||
|
static void newline();
|
||||||
|
static int yywrap();
|
||||||
|
%}
|
||||||
|
|
||||||
|
number [0-9]+
|
||||||
|
string \"[^"\n]*\"
|
||||||
|
identifier [a-zA-Z][a-zA-Z0-9_]*
|
||||||
|
white [ \t]*
|
||||||
|
assign {white}={white}
|
||||||
|
|
||||||
|
%%
|
||||||
|
|
||||||
|
{string}/{white}\n stringvalue();
|
||||||
|
{number}/{white}\n numbervalue();
|
||||||
|
^{identifier}/{assign} identifier();
|
||||||
|
\n newline();
|
||||||
|
=
|
||||||
|
[ \t]
|
||||||
|
. haserror = TRUE;
|
||||||
|
|
||||||
|
%%
|
||||||
|
|
||||||
|
static void stringvalue()
|
||||||
|
{
|
||||||
|
if (!haserror && entry.name != NULL && (signed)entry.type < 0) {
|
||||||
|
entry.type = Config_String;
|
||||||
|
entry.value.string = g_strdup(yytext+1); /* drop the left quote */
|
||||||
|
if (entry.value.string[yyleng-2] != '"')
|
||||||
|
printf("warning: improperly terminated string on line %d\n",
|
||||||
|
yylineno);
|
||||||
|
else
|
||||||
|
entry.value.string[yyleng-2] = '\0';
|
||||||
|
} else
|
||||||
|
haserror = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void numbervalue()
|
||||||
|
{
|
||||||
|
if (!haserror && entry.name != NULL && (signed)entry.type < 0) {
|
||||||
|
entry.type = Config_Integer;
|
||||||
|
entry.value.integer = atoi(yytext);
|
||||||
|
} else
|
||||||
|
haserror = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void identifier()
|
||||||
|
{
|
||||||
|
g_print("identifier: %s\n", yytext);
|
||||||
|
entry.name = g_strdup(yytext);
|
||||||
|
entry.type = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void newline()
|
||||||
|
{
|
||||||
|
if (!haserror && entry.name != NULL && (signed)entry.type >= 0) {
|
||||||
|
if (!config_set(entry.name, entry.type, entry.value))
|
||||||
|
g_warning("Invalid option in config file: '%s'\n", entry.name);
|
||||||
|
} else {
|
||||||
|
printf("Parser error in config file on line %d\n", yylineno);
|
||||||
|
}
|
||||||
|
g_free(entry.name);
|
||||||
|
entry.name = NULL;
|
||||||
|
if (entry.type == Config_String)
|
||||||
|
g_free(entry.value.string);
|
||||||
|
entry.type = -1;
|
||||||
|
|
||||||
|
haserror = FALSE;
|
||||||
|
++yylineno;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int yywrap()
|
||||||
|
{
|
||||||
|
g_free(entry.name);
|
||||||
|
entry.name = NULL;
|
||||||
|
if (entry.type == Config_String)
|
||||||
|
g_free(entry.value.string);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cparse_go(FILE *file)
|
||||||
|
{
|
||||||
|
yyin = file;
|
||||||
|
yylex();
|
||||||
|
}
|
|
@ -8,6 +8,7 @@
|
||||||
#include "focus.h"
|
#include "focus.h"
|
||||||
#include "extensions.h"
|
#include "extensions.h"
|
||||||
#include "gettext.h"
|
#include "gettext.h"
|
||||||
|
#include "config.h"
|
||||||
#include "grab.h"
|
#include "grab.h"
|
||||||
#include "engine.h"
|
#include "engine.h"
|
||||||
#include "themerc.h"
|
#include "themerc.h"
|
||||||
|
@ -143,6 +144,7 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
if (screen_annex()) { /* it will be ours! */
|
if (screen_annex()) { /* it will be ours! */
|
||||||
timer_startup();
|
timer_startup();
|
||||||
|
config_startup();
|
||||||
render_startup();
|
render_startup();
|
||||||
font_startup();
|
font_startup();
|
||||||
themerc_startup();
|
themerc_startup();
|
||||||
|
@ -154,6 +156,8 @@ int main(int argc, char **argv)
|
||||||
grab_startup();
|
grab_startup();
|
||||||
plugin_startup();
|
plugin_startup();
|
||||||
|
|
||||||
|
config_parse();
|
||||||
|
|
||||||
/* XXX load all plugins!! */
|
/* XXX load all plugins!! */
|
||||||
plugin_open("focus");
|
plugin_open("focus");
|
||||||
plugin_open("keyboard");
|
plugin_open("keyboard");
|
||||||
|
@ -180,6 +184,7 @@ int main(int argc, char **argv)
|
||||||
engine_shutdown();
|
engine_shutdown();
|
||||||
themerc_shutdown();
|
themerc_shutdown();
|
||||||
render_shutdown();
|
render_shutdown();
|
||||||
|
config_shutdown();
|
||||||
timer_shutdown();
|
timer_shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue