|
|
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.