|
|
1.1 root 1: #include <copyright.h>
2:
3: /* $Header: XGetDflt.c,v 1.1 87/08/22 10:24:06 ham Exp $ */
4: /* Copyright (c) 1985, Massachusetts Institute of Technology */
5:
6: /*
7: * This routine returns options out of the X user preferences file
8: * found in the RESOURCE_MANAGER property, possibly modified by the
9: * .Xdefaults in the user's home
10: * directory. It either returns a pointer to
11: * the option or returns NULL if option not set. It is patterned after
12: * Andrew's file format (why be different for the sake of being different?).
13: * Andrew's code was NOT examined before writing this routine.
14: * It parses lines of the format "progname.option:value" and returns a pointer
15: * to value.
16: */
17:
18: #include <stdio.h>
19: #include <strings.h>
20: #include <ctype.h>
21: #include "Xlibint.h"
22: #include "Xresource.h"
23: #include "Quarks.h"
24:
25: #define XOPTIONFILE "/.Xdefaults" /* name in home directory of options
26: file. */
27:
28: static XrmResourceDataBase InitDefaults (dpy)
29: Display *dpy; /* display for defaults.... */
30: {
31: XrmResourceDataBase userdb = NULL;
32: XrmResourceDataBase xdb = NULL;
33: char fname[BUFSIZ]; /* longer than any conceivable size */
34: char *getenv();
35: char *home = getenv("HOME");
36:
37: /*
38: * attempt to generate user's file name
39: */
40: fname[0] = '\0';
41: if (home != NULL) {
42: strcpy (fname, home);
43: strcat (fname, XOPTIONFILE);
44: }
45: XrmInitialize();
46:
47: if (fname[0] != '\0') userdb = XrmGetDataBase(fname);
48: xdb = XrmLoadDataBase(dpy->xdefaults);
49: XrmMergeDataBases(userdb, &xdb);
50: return xdb;
51: }
52:
53: char *XGetDefault(dpy, prog, name)
54: Display *dpy; /* display for defaults.... */
55: register char *name; /* name of option program wants */
56: char *prog; /* name of program for option */
57:
58: { /* to get, for example, "font" */
59: char temp[BUFSIZ];
60: XrmName namelist[5];
61: XrmClass classlist[5];
62: XrmValue result;
63:
64: /*
65: * see if database has ever been initialized. Lookups can be done
66: * without locks held.
67: */
68: LockDisplay(dpy);
69: if (dpy->db == NULL) {
70: dpy->db = InitDefaults(dpy);
71: }
72: UnlockDisplay(dpy);
73: sprintf(temp, "%s.%s", prog, name);
74: XrmStringToNameList(temp, namelist);
75: XrmStringToClassList("Program.Name", classlist);
76:
77: XrmGetResource(DefaultScreen(dpy), dpy->db,
78: namelist, classlist, XrmQString, &result);
79: return (result.addr);
80: }
81:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.