mirror of
https://github.com/amiwm/amiwm.git
synced 2026-04-14 11:04:18 +00:00
Initial commit!
This commit is contained in:
191
rc.c
Normal file
191
rc.c
Normal file
@@ -0,0 +1,191 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <X11/Xmu/CharSet.h>
|
||||
|
||||
#include "alloc.h"
|
||||
#include "prefs.h"
|
||||
#include "drawinfo.h"
|
||||
#include "screen.h"
|
||||
#include "gram.h"
|
||||
#include "icc.h"
|
||||
#include "style.h"
|
||||
|
||||
#ifdef AMIGAOS
|
||||
#include <pragmas/xmu1_pragmas.h>
|
||||
extern struct Library *Xmu1Base;
|
||||
#endif
|
||||
|
||||
extern void set_sys_palette(void);
|
||||
extern int yyparse (void);
|
||||
|
||||
struct prefs_struct prefs;
|
||||
|
||||
#ifndef RC_FILENAME
|
||||
#define RC_FILENAME ".amiwmrc"
|
||||
#endif
|
||||
|
||||
FILE *rcfile;
|
||||
int ParseError=0;
|
||||
|
||||
void read_rc_file(char *filename, int manage_all)
|
||||
{
|
||||
char *home, *fn;
|
||||
|
||||
memset(&prefs, 0, sizeof(prefs));
|
||||
prefs.manage_all = manage_all;
|
||||
prefs.sizeborder=Psizeright;
|
||||
prefs.icondir=AMIWM_HOME;
|
||||
prefs.module_path=AMIWM_HOME;
|
||||
prefs.defaulticon="def_tool.info";
|
||||
prefs.borderwidth=1;
|
||||
prefs.titleclockinterval=1;
|
||||
prefs.opaquemove=False;
|
||||
prefs.opaqueresize=False;
|
||||
prefs.screenmenu=False;
|
||||
prefs.firststyle=NULL;
|
||||
prefs.laststyle=NULL;
|
||||
set_sys_palette();
|
||||
|
||||
if(filename!=NULL && (rcfile=fopen(filename, "r"))) {
|
||||
yyparse();
|
||||
fclose(rcfile);
|
||||
rcfile=NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
home=getenv("HOME");
|
||||
#ifdef AMIGAOS
|
||||
{
|
||||
char fn[256];
|
||||
strncpy(fn, home, sizeof(fn)-1);
|
||||
fn[sizeof(fn)-1]='\0';
|
||||
AddPart(fn, RC_FILENAME, sizeof(fn));
|
||||
if((rcfile=fopen(fn, "r"))) {
|
||||
yyparse();
|
||||
fclose(rcfile);
|
||||
rcfile=NULL;
|
||||
return;
|
||||
}
|
||||
}
|
||||
#else
|
||||
#ifdef HAVE_ALLOCA
|
||||
if((fn=alloca(strlen(home)+strlen(RC_FILENAME)+4))) {
|
||||
#else
|
||||
if((fn=malloc(strlen(home)+strlen(RC_FILENAME)+4))) {
|
||||
#endif
|
||||
sprintf(fn, "%s/"RC_FILENAME, home);
|
||||
if((rcfile=fopen(fn, "r"))) {
|
||||
yyparse();
|
||||
fclose(rcfile);
|
||||
#ifndef HAVE_ALLOCA
|
||||
free(fn);
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
#ifndef HAVE_ALLOCA
|
||||
free(fn);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
if((rcfile=fopen(AMIWM_HOME"/system"RC_FILENAME, "r"))) {
|
||||
yyparse();
|
||||
fclose(rcfile);
|
||||
}
|
||||
}
|
||||
|
||||
struct keyword { char *name; int token; } keywords[] = {
|
||||
{ "always", ALWAYS },
|
||||
{ "auto", AUTO },
|
||||
{ "autoraise", AUTORAISE },
|
||||
{ "backgroundpen", T_BACKGROUNDPEN },
|
||||
{ "barblockpen", T_BARBLOCKPEN },
|
||||
{ "bardetailpen", T_BARDETAILPEN },
|
||||
{ "bartrimpen", T_BARTRIMPEN },
|
||||
{ "blockpen", T_BLOCKPEN },
|
||||
{ "both", BOTH },
|
||||
{ "bottom", BOTTOM },
|
||||
{ "class", CLASS },
|
||||
{ "clicktotype", CLICKTOTYPE },
|
||||
{ "customiconsonly", CUSTOMICONSONLY },
|
||||
{ "defaulticon", DEFAULTICON },
|
||||
{ "detailpen", T_DETAILPEN },
|
||||
{ "false", NO },
|
||||
{ "fastquit", FASTQUIT },
|
||||
{ "fillpen", T_FILLPEN },
|
||||
{ "filltextpen", T_FILLTEXTPEN },
|
||||
{ "focus", FOCUS },
|
||||
{ "followmouse", FOLLOWMOUSE },
|
||||
{ "forcemove", FORCEMOVE },
|
||||
{ "highlighttextpen", T_HIGHLIGHTTEXTPEN },
|
||||
{ "icon", ICON },
|
||||
{ "icondir", ICONDIR },
|
||||
{ "iconfont", ICONFONT },
|
||||
{ "iconpalette", ICONPALETTE },
|
||||
{ "icontitle", ICONTITLE },
|
||||
{ "interscreengap", INTERSCREENGAP },
|
||||
{ "magicwb", MAGICWB },
|
||||
{ "manual", MANUAL },
|
||||
{ "module", MODULE },
|
||||
{ "modulepath", MODULEPATH },
|
||||
{ "no", NO },
|
||||
{ "none", NONE },
|
||||
{ "off", NO },
|
||||
{ "on", YES },
|
||||
{ "opaquemove", OPAQUEMOVE },
|
||||
{ "opaqueresize", OPAQUERESIZE },
|
||||
{ "right", RIGHT },
|
||||
{ "schwartz", SCHWARTZ },
|
||||
{ "screen", SCREEN },
|
||||
{ "screenfont", SCREENFONT },
|
||||
{ "screenmenu", SCREENMENU },
|
||||
{ "separator", SEPARATOR },
|
||||
{ "shadowpen", T_SHADOWPEN },
|
||||
{ "shinepen", T_SHINEPEN },
|
||||
{ "shortlabelicons", SHORTLABELICONS },
|
||||
{ "sizeborder", SIZEBORDER },
|
||||
{ "sloppy", SLOPPY },
|
||||
{ "style", STYLE },
|
||||
{ "system", SYSTEM },
|
||||
{ "textpen", T_TEXTPEN },
|
||||
{ "title", TITLE },
|
||||
{ "titlebarclock", TITLEBARCLOCK },
|
||||
{ "titleclockformat", TITLECLOCKFORMAT },
|
||||
{ "toolitem", TOOLITEM },
|
||||
{ "true", YES },
|
||||
{ "yes", YES }
|
||||
};
|
||||
|
||||
#define N_KW (sizeof(keywords)/sizeof(keywords[0]))
|
||||
|
||||
int parse_keyword(char *str)
|
||||
{
|
||||
int l=0, h=N_KW-1;
|
||||
|
||||
XmuCopyISOLatin1Lowered (str, str);
|
||||
while(h>=l) {
|
||||
int i=(h+l)>>1, c=strcmp(str, keywords[i].name);
|
||||
if(!c)
|
||||
return keywords[i].token;
|
||||
else if(c>=0)
|
||||
l=i+1;
|
||||
else
|
||||
h=i-1;
|
||||
}
|
||||
return ERRORTOKEN;
|
||||
}
|
||||
|
||||
void free_prefs()
|
||||
{
|
||||
Style *s;
|
||||
while((s = prefs.firststyle)) {
|
||||
prefs.firststyle = s->next;
|
||||
if(s->style_class) free(s->style_class);
|
||||
if(s->style_title) free(s->style_title);
|
||||
if(s->style_icon_title) free(s->style_icon_title);
|
||||
if(s->icon_name) free(s->icon_name);
|
||||
free_icon_pms(&s->icon_pms);
|
||||
free(s);
|
||||
}
|
||||
prefs.laststyle = NULL;
|
||||
}
|
||||
Reference in New Issue
Block a user