jmsellens@watdragon.waterloo.edu.UUCP (02/22/87)
I was fooling with a comsat (mail notification) daemon for use with X, and observed that the author had had to set up a dummy environment variable so that the daemon could read from the mail recipient's .Xdefaults file. So I hacked XGetDefault.c to add a new routine XGetDefaultHome() (for lack of a better name) that allows you to give the routine the home directory to read the .Xdefaults file from. The following is a context diff of what I did. Trivial changes actually ... John Sellens -- Logic Programming and Artificial Intelligence Group {decvax|utzoo|ihnp4|allegra|clyde}!watmath!watdragon!jmsellens jmsellens@dragon.waterloo.{edu,CDN} jsellens@watmta.BITNET jmsellens%dragon@waterloo.csnet *** XGetDefault.c.orig Mon Dec 1 19:04:53 1986 --- XGetDefault.c Fri Feb 20 16:19:04 1987 *************** *** 31,37 **** --- 31,67 ---- char bal; /* for avl use */ } *head; + + #ifdef waterloo + + static char *XGetDefaultInternal(); + static ReadFile(); + static insert(); + + + char * + XGetDefault( prog, name ) + char *prog, *name; + { + return( XGetDefaultInternal( (char *)NULL, prog, name ) ); + } + + char * + XGetDefaultHome( home, prog, name ) + char *home, *prog, *name; + { + return( XGetDefaultInternal( home, prog, name ) ); + } + + #endif + + + #ifdef waterloo + static char *XGetDefaultInternal(home, prog, name) + char *home; /* place to look for the file */ + #else char *XGetDefault(prog, name) + #endif register char *name; /* name of option program wants */ char *prog; /* name of program for option */ { /* to get, for example, "font" */ *************** *** 47,53 **** --- 77,87 ---- pv++; } if (nent == -1) + #ifdef waterloo + nent = ReadFile(home,prog);/* if not, parse the file.*/ + #else nent = ReadFile(prog);/* if not, parse the file.*/ + #endif if (nent == 0) return(NULL); cur = head; *************** *** 59,65 **** --- 93,104 ---- return(NULL); /* if no match, let him know */ } + #ifdef waterloo + static ReadFile(home,prog) + char *home; + #else static ReadFile(prog) + #endif char *prog; /* program name to match */ { register char *point,*colon; /* where in the line the keys are */ *************** *** 72,78 **** --- 111,122 ---- char fname[BUFSIZ]; /* longer than any conceivable size */ char line[BUFSIZ]; /* line buffer for each line of file*/ char *getenv(); + #ifndef waterloo char *home = getenv("HOME"); + #else + if ( home == (char *)NULL ) + home = getenv( "HOME" ); + #endif if ((pv = rindex(prog,'/')) != NULL) prog = pv + 1; /* if full path, get last component */