annotate src/xrdb.c @ 4413:5a00cec8e9b0

(fill-region-as-paragraph): When we take one word after the fill column, don't stop at period with just one space. When checking whether at beginning of line, if no fill prefix, ignore intervening whitespace.
author Richard M. Stallman <rms@gnu.org>
date Mon, 02 Aug 1993 05:55:56 +0000
parents 04bd0c1a6245
children 0fd9dd894f9f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1 /* Deal with the X Resource Manager.
2961
e94a593c3952 Updated copyright years.
Jim Blandy <jimb@redhat.com>
parents: 2126
diff changeset
2 Copyright (C) 1990, 1993 Free Software Foundation.
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4 This program is free software; you can redistribute it and/or modify
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5 it under the terms of the GNU General Public License as published by
620
88a29c720fa7 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 556
diff changeset
6 the Free Software Foundation; either version 2, or (at your option)
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 any later version.
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 GNU General Public License for more details.
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 You should have received a copy of the GNU General Public License
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15 along with this program; see the file COPYING. If not, write to
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 /* Written by jla, 4/90 */
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
19
1019
aaa628aaf808 * xrdb.c [USG5]: Define SYSV, and then include <unistd.h>. I
Jim Blandy <jimb@redhat.com>
parents: 620
diff changeset
20 #ifdef emacs
aaa628aaf808 * xrdb.c [USG5]: Define SYSV, and then include <unistd.h>. I
Jim Blandy <jimb@redhat.com>
parents: 620
diff changeset
21 #include "config.h"
aaa628aaf808 * xrdb.c [USG5]: Define SYSV, and then include <unistd.h>. I
Jim Blandy <jimb@redhat.com>
parents: 620
diff changeset
22 #endif
aaa628aaf808 * xrdb.c [USG5]: Define SYSV, and then include <unistd.h>. I
Jim Blandy <jimb@redhat.com>
parents: 620
diff changeset
23
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
24 #include <stdio.h>
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
25
1019
aaa628aaf808 * xrdb.c [USG5]: Define SYSV, and then include <unistd.h>. I
Jim Blandy <jimb@redhat.com>
parents: 620
diff changeset
26 #if 1 /* I'd really appreciate it if this code could go away... -JimB */
aaa628aaf808 * xrdb.c [USG5]: Define SYSV, and then include <unistd.h>. I
Jim Blandy <jimb@redhat.com>
parents: 620
diff changeset
27 /* this avoids lossage in the `dual-universe' headers on AT&T SysV X11 */
aaa628aaf808 * xrdb.c [USG5]: Define SYSV, and then include <unistd.h>. I
Jim Blandy <jimb@redhat.com>
parents: 620
diff changeset
28 #ifdef USG5
aaa628aaf808 * xrdb.c [USG5]: Define SYSV, and then include <unistd.h>. I
Jim Blandy <jimb@redhat.com>
parents: 620
diff changeset
29 #define SYSV
aaa628aaf808 * xrdb.c [USG5]: Define SYSV, and then include <unistd.h>. I
Jim Blandy <jimb@redhat.com>
parents: 620
diff changeset
30 #include <unistd.h>
aaa628aaf808 * xrdb.c [USG5]: Define SYSV, and then include <unistd.h>. I
Jim Blandy <jimb@redhat.com>
parents: 620
diff changeset
31 #endif /* USG5 */
aaa628aaf808 * xrdb.c [USG5]: Define SYSV, and then include <unistd.h>. I
Jim Blandy <jimb@redhat.com>
parents: 620
diff changeset
32
aaa628aaf808 * xrdb.c [USG5]: Define SYSV, and then include <unistd.h>. I
Jim Blandy <jimb@redhat.com>
parents: 620
diff changeset
33 #endif /* 1 */
1389
517c3893ec5b * xterm.c, xrdb.c: #include <stdio.h> before "xterm.h", to avoid
Jim Blandy <jimb@redhat.com>
parents: 1200
diff changeset
34
517c3893ec5b * xterm.c, xrdb.c: #include <stdio.h> before "xterm.h", to avoid
Jim Blandy <jimb@redhat.com>
parents: 1200
diff changeset
35 /* This should be included before the X include files; otherwise, we get
517c3893ec5b * xterm.c, xrdb.c: #include <stdio.h> before "xterm.h", to avoid
Jim Blandy <jimb@redhat.com>
parents: 1200
diff changeset
36 warnings about redefining NULL under BSD 4.3. */
517c3893ec5b * xterm.c, xrdb.c: #include <stdio.h> before "xterm.h", to avoid
Jim Blandy <jimb@redhat.com>
parents: 1200
diff changeset
37 #include <sys/param.h>
517c3893ec5b * xterm.c, xrdb.c: #include <stdio.h> before "xterm.h", to avoid
Jim Blandy <jimb@redhat.com>
parents: 1200
diff changeset
38
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
39 #include <X11/Xlib.h>
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
40 #include <X11/Xatom.h>
1126
94d76dbb5ce6 * xrdb.c: Don't include <X11/Xos.h>. Under R4, it stupidly
Jim Blandy <jimb@redhat.com>
parents: 1051
diff changeset
41 #if 0
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
42 #include <X11/Xos.h>
1126
94d76dbb5ce6 * xrdb.c: Don't include <X11/Xos.h>. Under R4, it stupidly
Jim Blandy <jimb@redhat.com>
parents: 1051
diff changeset
43 #endif
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
44 #include <X11/X.h>
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
45 #include <X11/Xutil.h>
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
46 #include <X11/Xresource.h>
556
af0eae450bc9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
47 #ifdef VMS
af0eae450bc9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
48 #include "vms-pwd.h"
af0eae450bc9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
49 #else
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
50 #include <pwd.h>
556
af0eae450bc9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
51 #endif
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52 #include <sys/stat.h>
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
53
1019
aaa628aaf808 * xrdb.c [USG5]: Define SYSV, and then include <unistd.h>. I
Jim Blandy <jimb@redhat.com>
parents: 620
diff changeset
54 #ifndef MAXPATHLEN
aaa628aaf808 * xrdb.c [USG5]: Define SYSV, and then include <unistd.h>. I
Jim Blandy <jimb@redhat.com>
parents: 620
diff changeset
55 #define MAXPATHLEN 256
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
56 #endif
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
57
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
58 extern char *getenv ();
1934
458a1fceb462 * xrdb.c (getuid): Remove declaration.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
59
458a1fceb462 * xrdb.c (getuid): Remove declaration.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
60 /* This does cause trouble on AIX. I'm going to take the comment at
458a1fceb462 * xrdb.c (getuid): Remove declaration.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
61 face value. */
458a1fceb462 * xrdb.c (getuid): Remove declaration.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
62 #if 0
1126
94d76dbb5ce6 * xrdb.c: Don't include <X11/Xos.h>. Under R4, it stupidly
Jim Blandy <jimb@redhat.com>
parents: 1051
diff changeset
63 extern short getuid (); /* If this causes portability problems,
94d76dbb5ce6 * xrdb.c: Don't include <X11/Xos.h>. Under R4, it stupidly
Jim Blandy <jimb@redhat.com>
parents: 1051
diff changeset
64 I think we should just delete it; it'll
94d76dbb5ce6 * xrdb.c: Don't include <X11/Xos.h>. Under R4, it stupidly
Jim Blandy <jimb@redhat.com>
parents: 1051
diff changeset
65 default to `int' anyway. */
1934
458a1fceb462 * xrdb.c (getuid): Remove declaration.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
66 #endif
458a1fceb462 * xrdb.c (getuid): Remove declaration.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
67
4233
a4197ae1927d (getpwuid): Test DECLARE_GETPWUID_WITH_UID_T.
Richard M. Stallman <rms@gnu.org>
parents: 4232
diff changeset
68 #if defined (__bsdi__) || defined (DECLARE_GETPWUID_WITH_UID_T)
3371
fe452e556782 [__bsdi__]: Alternate decls of getpwuid and getpwnam.
Richard M. Stallman <rms@gnu.org>
parents: 3142
diff changeset
69 extern struct passwd *getpwuid (uid_t);
fe452e556782 [__bsdi__]: Alternate decls of getpwuid and getpwnam.
Richard M. Stallman <rms@gnu.org>
parents: 3142
diff changeset
70 extern struct passwd *getpwnam (const char *);
fe452e556782 [__bsdi__]: Alternate decls of getpwuid and getpwnam.
Richard M. Stallman <rms@gnu.org>
parents: 3142
diff changeset
71 #else
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
72 extern struct passwd *getpwuid ();
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
73 extern struct passwd *getpwnam ();
3371
fe452e556782 [__bsdi__]: Alternate decls of getpwuid and getpwnam.
Richard M. Stallman <rms@gnu.org>
parents: 3142
diff changeset
74 #endif
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
75
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
76 /* Make sure not to #include anything after these definitions. Let's
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
77 not step on anyone's prototypes. */
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
78 #ifdef emacs
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
79 #define malloc xmalloc
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
80 #define realloc xrealloc
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
81 #define free xfree
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
82 #endif
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
83
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
84 char *x_get_string_resource ();
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
85 static int file_p ();
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
86
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
87
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
88 /* X file search path processing. */
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
89
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
90
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
91 /* The string which gets substituted for the %C escape in XFILESEARCHPATH
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
92 and friends, or zero if none was specified. */
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
93 char *x_customization_string;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
94
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
95
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
96 /* Return the value of the emacs.customization (Emacs.Customization)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
97 resource, for later use in search path decoding. If we find no
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
98 such resource, return zero. */
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
99 char *
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
100 x_get_customization_string (db, name, class)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
101 XrmDatabase db;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
102 char *name, *class;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
103 {
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
104 char *full_name
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
105 = (char *) alloca (strlen (name) + sizeof ("customization") + 3);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
106 char *full_class
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
107 = (char *) alloca (strlen (class) + sizeof ("Customization") + 3);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
108 char *result;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
109
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
110 sprintf (full_name, "%s.%s", name, "customization");
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
111 sprintf (full_class, "%s.%s", class, "Customization");
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
112
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
113 result = x_get_string_resource (db, full_name, full_class);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
114
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
115 if (result)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
116 return strcpy ((char *) malloc (strlen (result) + 1), result);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
117 else
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
118 return 0;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
119 }
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
120
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
121
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
122 /* Expand all the Xt-style %-escapes in STRING, whose length is given
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
123 by STRING_LEN. Here are the escapes we're supposed to recognize:
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
124
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
125 %N The value of the application's class name
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
126 %T The value of the type parameter ("app-defaults" in this
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
127 context)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
128 %S The value of the suffix parameter ("" in this context)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
129 %L The language string associated with the specified display
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
130 (We use the "LANG" environment variable here, if it's set.)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
131 %l The language part of the display's language string
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
132 (We treat this just like %L. If someone can tell us what
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
133 we're really supposed to do, dandy.)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
134 %t The territory part of the display's language string
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
135 (This never gets used.)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
136 %c The codeset part of the display's language string
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
137 (This never gets used either.)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
138 %C The customization string retrieved from the resource
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
139 database associated with display.
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
140 (This is x_customization_string.)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
141
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
142 Return the expanded file name if it exists and is readable, and
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
143 refers to %L only when the LANG environment variable is set, or
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
144 otherwise provided by X.
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
145
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
146 ESCAPED_SUFFIX and SUFFIX are postpended to STRING if they are
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
147 non-zero. %-escapes in ESCAPED_SUFFIX are expanded; STRING is left
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
148 alone.
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
149
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
150 Return NULL otherwise. */
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
151
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
152 static char *
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
153 magic_file_p (string, string_len, class, escaped_suffix, suffix)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
154 char *string;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
155 int string_len;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
156 char *class, *escaped_suffix, *suffix;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
157 {
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
158 char *lang = getenv ("LANG");
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
159
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
160 int path_size = 100;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
161 char *path = (char *) malloc (path_size);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
162 int path_len = 0;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
163
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
164 char *p = string;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
165
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
166 while (p < string + string_len)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
167 {
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
168 /* The chunk we're about to stick on the end of result. */
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
169 char *next;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
170 int next_len;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
171
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
172 if (*p == '%')
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
173 {
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
174 p++;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
175
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
176 if (p >= string + string_len)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
177 next_len = 0;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
178 else
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
179 switch (*p)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
180 {
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
181 case '%':
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
182 next = "%";
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
183 next_len = 1;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
184 break;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
185
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
186 case 'C':
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
187 next = (x_customization_string
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
188 ? x_customization_string
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
189 : "");
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
190 next_len = strlen (next);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
191 break;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
192
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
193 case 'N':
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
194 next = class;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
195 next_len = strlen (class);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
196 break;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
197
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
198 case 'T':
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
199 next = "app-defaults";
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
200 next_len = strlen (next);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
201 break;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
202
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
203 default:
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
204 case 'S':
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
205 next_len = 0;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
206 break;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
207
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
208 case 'L':
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
209 case 'l':
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
210 if (! lang)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
211 {
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
212 free (path);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
213 return NULL;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
214 }
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
215
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
216 next = lang;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
217 next_len = strlen (next);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
218 break;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
219
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
220 case 't':
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
221 case 'c':
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
222 free (path);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
223 return NULL;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
224 }
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
225 }
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
226 else
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
227 next = p, next_len = 1;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
228
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
229 /* Do we have room for this component followed by a '\0' ? */
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
230 if (path_len + next_len + 1 > path_size)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
231 {
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
232 path_size = (path_len + next_len + 1) * 2;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
233 path = (char *) realloc (path, path_size);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
234 }
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
235
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
236 bcopy (next, path + path_len, next_len);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
237 path_len += next_len;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
238
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
239 p++;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
240
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
241 /* If we've reached the end of the string, append ESCAPED_SUFFIX. */
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
242 if (p >= string + string_len && escaped_suffix)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
243 {
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
244 string = escaped_suffix;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
245 string_len = strlen (string);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
246 p = string;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
247 escaped_suffix = NULL;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
248 }
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
249 }
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
250
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
251 /* Perhaps we should add the SUFFIX now. */
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
252 if (suffix)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
253 {
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
254 int suffix_len = strlen (suffix);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
255
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
256 if (path_len + suffix_len + 1 > path_size)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
257 {
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
258 path_size = (path_len + suffix_len + 1);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
259 path = (char *) realloc (path, path_size);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
260 }
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
261
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
262 bcopy (suffix, path + path_len, suffix_len);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
263 path_len += suffix_len;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
264 }
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
265
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
266 path[path_len] = '\0';
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
267
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
268 if (! file_p (path))
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
269 {
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
270 free (path);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
271 return NULL;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
272 }
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
273
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
274 return path;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
275 }
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
276
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
277
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
278 static char *
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
279 gethomedir ()
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
280 {
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
281 int uid;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
282 struct passwd *pw;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
283 char *ptr;
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
284 char *copy;
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
285
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
286 if ((ptr = getenv ("HOME")) == NULL)
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
287 {
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
288 if ((ptr = getenv ("USER")) != NULL)
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
289 pw = getpwnam (ptr);
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
290 else
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
291 {
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
292 uid = getuid ();
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
293 pw = getpwuid (uid);
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
294 }
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
295
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
296 if (pw)
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
297 ptr = pw->pw_dir;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
298 }
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
299
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
300 if (ptr == NULL)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
301 return "/";
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
302
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
303 copy = (char *) malloc (strlen (ptr) + 2);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
304 strcpy (copy, ptr);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
305 strcat (copy, "/");
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
306
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
307 return copy;
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
308 }
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
309
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
310
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
311 static int
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
312 file_p (path)
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
313 char *path;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
314 {
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
315 struct stat status;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
316
1126
94d76dbb5ce6 * xrdb.c: Don't include <X11/Xos.h>. Under R4, it stupidly
Jim Blandy <jimb@redhat.com>
parents: 1051
diff changeset
317 return (access (path, 4) == 0 /* exists and is readable */
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
318 && stat (path, &status) == 0 /* get the status */
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
319 && (status.st_mode & S_IFDIR) == 0); /* not a directory */
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
320 }
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
321
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
322
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
323 /* Find the first element of SEARCH_PATH which exists and is readable,
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
324 after expanding the %-escapes. Return 0 if we didn't find any, and
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
325 the path name of the one we found otherwise. */
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
326
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
327 static char *
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
328 search_magic_path (search_path, class, escaped_suffix, suffix)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
329 char *search_path, *class, *escaped_suffix, *suffix;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
330 {
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
331 register char *s, *p;
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
332
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
333 for (s = search_path; *s; s = p)
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
334 {
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
335 for (p = s; *p && *p != ':'; p++)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
336 ;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
337
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
338 if (*p == ':' && *(p + 1) == ':')
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
339 {
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
340 char *path;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
341
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
342 s = "%N%S";
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
343 path = magic_file_p (s, strlen (s), class, escaped_suffix, suffix);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
344 if (path)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
345 return path;
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
346
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
347 s = p + 1;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
348 continue;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
349 }
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
350
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
351 if (p > s)
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
352 {
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
353 char *path = magic_file_p (s, p - s, class, escaped_suffix, suffix);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
354 if (path)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
355 return path;
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
356 }
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
357
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
358 if (*p == ':')
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
359 p++;
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
360 }
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
361
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
362 return 0;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
363 }
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
364
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
365 /* Producing databases for individual sources. */
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
366
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
367 #define X_DEFAULT_SEARCH_PATH "/usr/lib/X11/%L/%T/%N%C%S:/usr/lib/X11/%l/%T/%N%C%S:/usr/lib/X11/%T/%N%C%S:/usr/lib/X11/%L/%T/%N%S:/usr/lib/X11/%l/%T/%N%S:/usr/lib/X11/%T/%N%S"
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
368
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
369 static XrmDatabase
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
370 get_system_app (class)
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
371 char *class;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
372 {
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
373 XrmDatabase db = NULL;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
374 char *path;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
375
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
376 path = getenv ("XFILESEARCHPATH");
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
377 if (! path) path = X_DEFAULT_SEARCH_PATH;
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
378
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
379 path = search_magic_path (path, class, 0, 0);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
380 if (path)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
381 {
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
382 db = XrmGetFileDatabase (path);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
383 free (path);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
384 }
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
385
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
386 return db;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
387 }
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
388
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
389
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
390 static XrmDatabase
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
391 get_fallback (display)
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
392 Display *display;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
393 {
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
394 XrmDatabase db;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
395
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
396 return NULL;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
397 }
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
398
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
399
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
400 static XrmDatabase
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
401 get_user_app (class)
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
402 char *class;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
403 {
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
404 char *path;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
405 char *file = 0;
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
406
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
407 /* Check for XUSERFILESEARCHPATH. It is a path of complete file
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
408 names, not directories. */
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
409 if (((path = getenv ("XUSERFILESEARCHPATH"))
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
410 && (file = search_magic_path (path, class, 0, 0)))
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
411
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
412 /* Check for APPLRESDIR; it is a path of directories. In each,
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
413 we have to search for LANG/CLASS and then CLASS. */
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
414 || ((path = getenv ("XAPPLRESDIR"))
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
415 && ((file = search_magic_path (path, class, "/%L/%N", 0))
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
416 || (file = search_magic_path (path, class, "/%N", 0))))
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
417
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
418 /* Check in the home directory. This is a bit of a hack; let's
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
419 hope one's home directory doesn't contain any %-escapes. */
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
420 || (path = gethomedir (),
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
421 ((file = search_magic_path (path, class, "%L/%N", 0))
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
422 || (file = search_magic_path (path, class, "%N", 0)))))
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
423 {
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
424 XrmDatabase db = XrmGetFileDatabase (file);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
425 free (file);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
426 return db;
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
427 }
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
428 else
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
429 return NULL;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
430 }
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
431
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
432
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
433 static XrmDatabase
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
434 get_user_db (display)
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
435 Display *display;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
436 {
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
437 XrmDatabase db;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
438 char *xdefs;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
439
2126
616aeb5c1432 * xrdb.c (get_user_db): Since xrdb.c doesn't #include xterm.h,
Jim Blandy <jimb@redhat.com>
parents: 1934
diff changeset
440 #ifdef PBaseSize /* Cheap way to test for X11R4 or later. */
1051
777ed2b92359 * xrdb.c (get_user_db): Use XResourceManagerString when available
Jim Blandy <jimb@redhat.com>
parents: 1019
diff changeset
441 xdefs = XResourceManagerString (display);
777ed2b92359 * xrdb.c (get_user_db): Use XResourceManagerString when available
Jim Blandy <jimb@redhat.com>
parents: 1019
diff changeset
442 #else
1019
aaa628aaf808 * xrdb.c [USG5]: Define SYSV, and then include <unistd.h>. I
Jim Blandy <jimb@redhat.com>
parents: 620
diff changeset
443 xdefs = display->xdefaults;
1051
777ed2b92359 * xrdb.c (get_user_db): Use XResourceManagerString when available
Jim Blandy <jimb@redhat.com>
parents: 1019
diff changeset
444 #endif
777ed2b92359 * xrdb.c (get_user_db): Use XResourceManagerString when available
Jim Blandy <jimb@redhat.com>
parents: 1019
diff changeset
445
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
446 if (xdefs != NULL)
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
447 db = XrmGetStringDatabase (xdefs);
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
448 else
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
449 {
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
450 char *home;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
451 char *xdefault;
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
452
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
453 home = gethomedir ();
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
454 xdefault = (char *) malloc (strlen (home) + sizeof (".Xdefaults"));
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
455 strcpy (xdefault, home);
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
456 strcat (xdefault, ".Xdefaults");
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
457 db = XrmGetFileDatabase (xdefault);
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
458 free (home);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
459 free (xdefault);
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
460 }
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
461
4366
04bd0c1a6245 * config.h.in (HAVE_XSCREENRESOURCESTRING): New #undef for
Jim Blandy <jimb@redhat.com>
parents: 4233
diff changeset
462 #ifdef HAVE_XSCREENRESOURCESTRING
3654
d9313b9a63ad * xrdb.c (get_user_db): Get the screen-specific database too.
Jim Blandy <jimb@redhat.com>
parents: 3371
diff changeset
463 /* Get the screen-specific resources too. */
d9313b9a63ad * xrdb.c (get_user_db): Get the screen-specific database too.
Jim Blandy <jimb@redhat.com>
parents: 3371
diff changeset
464 xdefs = XScreenResourceString (DefaultScreenOfDisplay (display));
d9313b9a63ad * xrdb.c (get_user_db): Get the screen-specific database too.
Jim Blandy <jimb@redhat.com>
parents: 3371
diff changeset
465 if (xdefs != NULL)
3873
e67c6c10dd7c * xrdb.c (get_user_db): Remember to free the screen-local resource
Jim Blandy <jimb@redhat.com>
parents: 3654
diff changeset
466 {
e67c6c10dd7c * xrdb.c (get_user_db): Remember to free the screen-local resource
Jim Blandy <jimb@redhat.com>
parents: 3654
diff changeset
467 XrmMergeDatabases (XrmGetStringDatabase (xdefs), &db);
e67c6c10dd7c * xrdb.c (get_user_db): Remember to free the screen-local resource
Jim Blandy <jimb@redhat.com>
parents: 3654
diff changeset
468 XFree (xdefs);
e67c6c10dd7c * xrdb.c (get_user_db): Remember to free the screen-local resource
Jim Blandy <jimb@redhat.com>
parents: 3654
diff changeset
469 }
3654
d9313b9a63ad * xrdb.c (get_user_db): Get the screen-specific database too.
Jim Blandy <jimb@redhat.com>
parents: 3371
diff changeset
470 #endif
d9313b9a63ad * xrdb.c (get_user_db): Get the screen-specific database too.
Jim Blandy <jimb@redhat.com>
parents: 3371
diff changeset
471
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
472 return db;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
473 }
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
474
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
475 static XrmDatabase
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
476 get_environ_db ()
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
477 {
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
478 XrmDatabase db;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
479 char *p;
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
480 char *path = 0, *home = 0, *host = 0;
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
481
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
482 if ((p = getenv ("XENVIRONMENT")) == NULL)
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
483 {
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
484 home = gethomedir ();
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
485
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
486 {
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
487 int host_size = 100;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
488 host = (char *) malloc (host_size);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
489
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
490 for (;;)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
491 {
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
492 host[host_size - 1] = '\0';
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
493 gethostname (host, host_size - 1);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
494 if (strlen (host) < host_size - 1)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
495 break;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
496 host = (char *) realloc (host, host_size *= 2);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
497 }
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
498 }
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
499
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
500 path = (char *) malloc (strlen (home)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
501 + sizeof (".Xdefaults-")
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
502 + strlen (host));
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
503 sprintf (path, "%s%s%s", home, ".Xdefaults-", host);
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
504 p = path;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
505 }
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
506
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
507 db = XrmGetFileDatabase (p);
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
508
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
509 if (path) free (path);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
510 if (home) free (home);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
511 if (host) free (host);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
512
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
513 return db;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
514 }
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
515
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
516 /* External interface. */
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
517
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
518 /* Types of values that we can find in a database */
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
519
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
520 #define XrmStringType "String" /* String representation */
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
521 XrmRepresentation x_rm_string; /* Quark representation */
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
522
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
523 /* Load X resources based on the display and a possible -xrm option. */
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
524
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
525 XrmDatabase
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
526 x_load_resources (display, xrm_string, myname, myclass)
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
527 Display *display;
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
528 char *xrm_string, *myname, *myclass;
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
529 {
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
530 char *xdefs;
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
531 XrmDatabase user_database;
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
532 XrmDatabase rdb;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
533 XrmDatabase db;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
534
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
535 x_rm_string = XrmStringToQuark (XrmStringType);
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
536 XrmInitialize ();
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
537 rdb = XrmGetStringDatabase ("");
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
538
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
539 user_database = get_user_db (display);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
540
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
541 /* Figure out what the "customization string" is, so we can use it
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
542 to decode paths. */
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
543 if (x_customization_string)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
544 free (x_customization_string);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
545 x_customization_string
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
546 = x_get_customization_string (user_database, myname, myclass);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
547
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
548 /* Get application system defaults */
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
549 db = get_system_app (myclass);
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
550 if (db != NULL)
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
551 XrmMergeDatabases (db, &rdb);
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
552
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
553 /* Get Fallback resources */
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
554 db = get_fallback (display);
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
555 if (db != NULL)
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
556 XrmMergeDatabases (db, &rdb);
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
557
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
558 /* Get application user defaults */
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
559 db = get_user_app (myclass);
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
560 if (db != NULL)
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
561 XrmMergeDatabases (db, &rdb);
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
562
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
563 /* get User defaults */
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
564 if (user_database != NULL)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
565 XrmMergeDatabases (user_database, &rdb);
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
566
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
567 /* Get Environment defaults. */
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
568 db = get_environ_db ();
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
569 if (db != NULL)
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
570 XrmMergeDatabases (db, &rdb);
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
571
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
572 /* Last, merge in any specification from the command line. */
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
573 if (xrm_string != NULL)
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
574 {
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
575 db = XrmGetStringDatabase (xrm_string);
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
576 if (db != NULL)
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
577 XrmMergeDatabases (db, &rdb);
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
578 }
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
579
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
580 return rdb;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
581 }
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
582
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
583
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
584 /* Retrieve the value of the resource specified by NAME with class CLASS
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
585 and of type TYPE from database RDB. The value is returned in RET_VALUE. */
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
586
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
587 int
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
588 x_get_resource (rdb, name, class, expected_type, ret_value)
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
589 XrmDatabase rdb;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
590 char *name, *class;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
591 XrmRepresentation expected_type;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
592 XrmValue *ret_value;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
593 {
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
594 XrmValue value;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
595 XrmName namelist[100];
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
596 XrmClass classlist[100];
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
597 XrmRepresentation type;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
598
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
599 XrmStringToNameList(name, namelist);
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
600 XrmStringToClassList(class, classlist);
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
601
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
602 if (XrmQGetResource (rdb, namelist, classlist, &type, &value) == True
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
603 && (type == expected_type))
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
604 {
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
605 if (type == x_rm_string)
1200
d2360c870787 * xrdb.c (x_get_resource): Cast the value being assigned to
Jim Blandy <jimb@redhat.com>
parents: 1126
diff changeset
606 ret_value->addr = (char *) value.addr;
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
607 else
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
608 bcopy (value.addr, ret_value->addr, ret_value->size);
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
609
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
610 return value.size;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
611 }
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
612
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
613 return 0;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
614 }
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
615
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
616 /* Retrieve the string resource specified by NAME with CLASS from
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
617 database RDB. */
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
618
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
619 char *
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
620 x_get_string_resource (rdb, name, class)
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
621 XrmDatabase rdb;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
622 char *name, *class;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
623 {
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
624 XrmValue value;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
625
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
626 if (x_get_resource (rdb, name, class, x_rm_string, &value))
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
627 return (char *) value.addr;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
628
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
629 return (char *) 0;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
630 }
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
631
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
632 /* Stand-alone test facilities. */
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
633
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
634 #ifdef TESTRM
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
635
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
636 typedef char **List;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
637 #define arg_listify(len, list) (list)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
638 #define car(list) (*(list))
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
639 #define cdr(list) (list + 1)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
640 #define NIL(list) (! *(list))
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
641 #define free_arglist(list)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
642
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
643 static List
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
644 member (elt, list)
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
645 char *elt;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
646 List list;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
647 {
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
648 List p;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
649
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
650 for (p = list; ! NIL (p); p = cdr (p))
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
651 if (! strcmp (elt, car (p)))
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
652 return p;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
653
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
654 return p;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
655 }
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
656
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
657 static void
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
658 fatal (msg, prog, x1, x2, x3, x4, x5)
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
659 char *msg, *prog;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
660 int x1, x2, x3, x4, x5;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
661 {
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
662 extern int errno;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
663
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
664 if (errno)
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
665 perror (prog);
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
666
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
667 (void) fprintf (stderr, msg, prog, x1, x2, x3, x4, x5);
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
668 exit (1);
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
669 }
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
670
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
671 main (argc, argv)
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
672 int argc;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
673 char **argv;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
674 {
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
675 Display *display;
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
676 char *displayname, *resource_string, *class, *name;
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
677 XrmDatabase xdb;
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
678 List arg_list, lp;
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
679
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
680 arg_list = arg_listify (argc, argv);
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
681
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
682 lp = member ("-d", arg_list);
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
683 if (!NIL (lp))
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
684 displayname = car (cdr (lp));
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
685 else
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
686 displayname = "localhost:0.0";
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
687
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
688 lp = member ("-xrm", arg_list);
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
689 if (! NIL (lp))
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
690 resource_string = car (cdr (lp));
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
691 else
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
692 resource_string = (char *) 0;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
693
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
694 lp = member ("-c", arg_list);
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
695 if (! NIL (lp))
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
696 class = car (cdr (lp));
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
697 else
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
698 class = "Emacs";
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
699
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
700 lp = member ("-n", arg_list);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
701 if (! NIL (lp))
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
702 name = car (cdr (lp));
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
703 else
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
704 name = "emacs";
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
705
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
706 free_arglist (arg_list);
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
707
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
708 if (!(display = XOpenDisplay (displayname)))
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
709 fatal ("Can't open display '%s'\n", XDisplayName (displayname));
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
710
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
711 xdb = x_load_resources (display, resource_string, name, class);
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
712
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
713 /* In a real program, you'd want to also do this: */
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
714 display->db = xdb;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
715
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
716 while (1)
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
717 {
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
718 char query_name[90];
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
719 char query_class[90];
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
720
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
721 printf ("Name: ");
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
722 gets (query_name);
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
723
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
724 if (strlen (query_name))
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
725 {
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
726 char *value;
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
727
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
728 printf ("Class: ");
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
729 gets (query_class);
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
730
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
731 value = x_get_string_resource (xdb, query_name, query_class);
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
732
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
733 if (value != NULL)
4232
f533d585cfc8 Implement search for app-defaults directory and
Jim Blandy <jimb@redhat.com>
parents: 3873
diff changeset
734 printf ("\t%s(%s): %s\n\n", query_name, query_class, value);
159
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
735 else
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
736 printf ("\tNo Value.\n\n");
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
737 }
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
738 else
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
739 break;
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
740 }
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
741 printf ("\tExit.\n\n");
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
742
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
743 XCloseDisplay (display);
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
744 }
e7abb99c2a38 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
745 #endif /* TESTRM */