Mercurial > emacs
annotate lwlib/xrdb-cpp.c @ 31384:f6cb7dfe5e7c
(vc-cvs-show-log-entry): New function.
(vc-cvs-stay-local): Allow it to be a hostname regexp
as well.
(vc-cvs-remote-p): Renamed to vc-cvs-stay-local-p. Handle
hostname regexps. Updated all callers.
(vc-cvs-responsible-p): Handle directories as well.
(vc-cvs-could-register): New function.
(vc-cvs-retrieve-snapshot): Parse "cvs update" output, keep file
properties up-to-date.
(vc-cvs-checkout): Do the right thing when the
workfile does not exist.
(vc-cvs-registered): Use new function
vc-cvs-parse-entry to do the actual work.
(vc-cvs-remote-p): Allow FILE to be a directory, too.
(vc-cvs-dir-state): New function.
(vc-cvs-dir-state-heuristic): New function, subroutine of the
above.
(vc-cvs-parse-entry): New function, also to be used in
vc-cvs-registered.
(vc-cvs-checkout): Slight restructuring to make the
control-flow more clear and to avoid running `cvs' twice.
(vc-cvs-workfile-version): Removed comment that this
is not reached. It is.
(vc-cvs-merge): Set state to 'edited after merge.
(vc-cvs-merge-news): Set workfile version to nil if not known.
(vc-cvs-latest-on-branch-p): Recommented. Candidate for removal.
(vc-cvs-checkin): Raise the max-correct status from 0
to 1. Make sure to switch to *vc* before looking for an error
message. Use vc-parse-buffer.
(vc-cvs-create-snapshot): Swap DIR and NAME.
(vc-cvs-retrieve-snapshot): New function (untested).
(vc-cvs-stay-local): Default to t.
(vc-cvs-remote-p): New function and property.
(vc-cvs-state): Stay local only if the above is t.
(vc-handle-cvs): Removed.
(vc-cvs-registered): Don't check vc-handle-cvs -- it should all be
done via vc-handled-backends now.
(vc-cvs-header): Escape Id.
(vc-cvs-state, vc-cvs-fetch-status): Use
with-temp-file. Use the new BUFFER=t argument to vc-do-command.
(vc-cvs-print-log, vc-cvs-diff): Insert in the current buffer.
(vc-cvs-state): Use vc-do-command instead of
vc-simple-command.
(vc-cvs-diff): Remove unused and unsupported argument CMP.
(vc-cvs-registered): Obey vc-handle-cvs.
(vc-cvs-registered): Use with-temp-buffer. Reorder
extraction of fields and call to file-attributes because of a
temporary bug in rcp.el.
(vc-cvs-fetch-status): Use with-current-buffer.
Merge in code
from vc-cvs-hooks.el.
(proto vc-cvs-registered): Require 'vc-cvs instead of
'vc-cvs-hooks. Don't require 'vc anymore.
(vc-cvs-responsible-p): Use expand-file-name instead of concat and
file-directory-p instead of file-exists-p.
(vc-cvs-create-snapshot): New function, replacing
vc-cvs-assign-name.
(vc-cvs-assign-name): Remove.
(vc-cvs-header): New var.
Update Copyright.
(vc-cvs-diff): Remove unused `backend' variable.
(vc-cvs-checkout): Only toggle read-only if the buffer is setup
right.
(tail): Provide vc-cvs.
(vc-cvs-merge-news, vc-cvs-checkout): Removed call to
vc-file-clear-masterprops.
(vc-cvs-state): Typo.
(vc-cvs-merge-news): Return the status code rather than the error
msg.
(vc-cvs-state): Don't overwrite a non-heuristic state
with a heuristic one.
(vc-cvs-merge-news): Just use 'edited for the case with conflicts.
(vc-cvs-checkin): Do a trivial parse to set the state in case of
error. That allows us to get to 'needs-merge even in the
stay-local case. There's still no way to detect 'needs-patch in
such a setup (or to force an update for that matter).
(vc-cvs-logentry-check): Remove, the default works as well.
(vc-cvs-print-log, vc-cvs-diff): Run cvs
asynchronously.
(vc-cvs-stay-local): Renamed from
vc-cvs-simple-toggle. Redocumented.
(vc-cvs-state): If locality is wanted, use vc-cvs-state-heuristic.
(vc-cvs-toggle-read-only): Removed.
(for compiler
warnings).
(vc-cvs-release, vc-cvs-system-release): Remove.
(vc-cvs-use-edit, vc-cvs-simple-toggle): New config variables.
(vc-cvs-dired-state-info): Use `cvs-state' and slightly different
status symbols.
(vc-cvs-parse-status, vc-cvs-state): Move from vc-cvs-hooks.el.
(vc-cvs-toggle-read-only): First cut at a function to allow a
cvs-status-free vc-toggle-read-only.
(vc-cvs-merge-news): Move from cvs-merge-news in vc.el.
(vc-cvs-checkin): Use vc-recompute-state+vc-state instead of
vc-cvs-status. Also set vc-state rather than vc-locking-user.
(vc-cvs-checkout): Modify access rights directly if the user
requested not to use `cvs edit'. And refresh the mode line.
(if
workfile' that got lost when the code was extracted from vc.el.
And merged the tail with the rest of the code (not possible in the
old vc.el where the tail was shared among all backends). And
explicitly set the state to 'edited if `writable' is set.
(vc-cvs-revert,vc-cvs-checkout): References to
`vc-checkout-model' updated to `vc-cvs-update-model'.
(vc-cvs-logentry-check): Function added.
(vc-cvs-revert,vc-cvs-checkout): Function calls to
`vc-checkout-required' updated to `vc-cvs-uses-locking'.
(vc-cvs-admin): Added the query-only option as
required by the vc.el file.
(vc-cvs-annotate-difference): Updated to handle
beginning of annotate buffers correctly.
Rename `vc-uses-locking' to
`vc-checkout-required'. Rename the `locked' state to `reserved'.
(vc-cvs-annotate-difference): Handle possible
millenium problem (merged from mainline).
Split the annotate feature into a BACKEND-specific
part and moved the non-BACKEND stuff to vc.el.
(vc-cvs-latest-on-branch-p): Function added.
(vc-cvs-revert): Merged and adapted "unedit" patch
from main line.
(vc-cvs-diff): Function added.
(vc-cvs-checkout): Function `vc-cvs-checkout' added.
Require vc when compiling.
(vc-cvs-register-switches): Doc fix.
(vc-annotate-color-map, vc-annotate-menu-elements): Fix custom type.
(vc-cvs-print-log, vc-cvs-assign-name, vc-cvs-merge)
(vc-cvs-check-headers, vc-cvs-steal, vc-cvs-revert, vc-cvs-checkin):
New functions (code from vc.el).
(vc-annotate-display-default): Fix interactive spec.
(vc-annotate-time-span): Doc fix.
Moved the annotate functionality from vc.el.
(vc-cvs-admin, vc-cvs-fetch-status): Added from vc.el.
(vc-cvs-system-release):
Renamed from vc-cvs-backend-release.
(vc-cvs-release): Moved from vc.el.
(vc-cvs-backend-release): New function.
(vc-cvs-dired-state-info, vc-cvs-fetch-status): Moved
from vc.el and renamed.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Mon, 04 Sep 2000 19:48:04 +0000 |
parents | e0d966fb548f |
children |
rev | line source |
---|---|
25842 | 1 /* A general interface to the widgets of different toolkits. |
2 Copyright (C) 1992, 1993 Lucid, Inc. | |
3 | |
4 This file is part of the Lucid Widget Library. | |
5 | |
6 The Lucid Widget Library is free software; you can redistribute it and/or | |
7 modify it under the terms of the GNU General Public License as published by | |
8 the Free Software Foundation; either version 2, or (at your option) | |
9 any later version. | |
10 | |
11 The Lucid Widget Library is distributed in the hope that it will be useful, | |
12 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 GNU General Public License for more details. | |
15 | |
16 You should have received a copy of the GNU General Public License | |
17 along with GNU Emacs; see the file COPYING. If not, write to | |
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
19 Boston, MA 02111-1307, USA. */ | |
20 | |
21 /* This code reads a resource database file and filters it through cpp | |
22 with the same set of preprocessor defines that `xrdb' uses. | |
23 Call lwlib_xrdb_initialize(dpy) once, and then call the function | |
24 lwlib_GetFileDatabase() instead of XrmGetFileDatabase(), | |
25 and lwlib_CombineFileDatabase() instead of XrmCombineFileDatabase(). | |
26 */ | |
27 | |
28 #ifndef __STDC_EXTENDED__ | |
29 #define __STDC_EXTENDED__ | |
30 #endif | |
31 | |
26087
e0d966fb548f
Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents:
25842
diff
changeset
|
32 #ifdef HAVE_CONFIG_H |
e0d966fb548f
Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents:
25842
diff
changeset
|
33 #include <config.h> |
e0d966fb548f
Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents:
25842
diff
changeset
|
34 #endif |
e0d966fb548f
Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents:
25842
diff
changeset
|
35 |
25842 | 36 #include <stdio.h> |
37 #include <ctype.h> | |
38 #include <X11/Xlib.h> | |
39 #include <X11/Xos.h> | |
40 #include <X11/Intrinsic.h> | |
41 #include <X11/Xmu/SysUtil.h> | |
42 #include <sys/stat.h> | |
43 | |
44 extern char *index (); | |
45 | |
46 static int | |
47 file_p (path) | |
48 char *path; | |
49 { | |
50 struct stat status; | |
51 | |
52 return (access (path, R_OK) == 0 /* exists and is readable */ | |
53 && stat (path, &status) == 0 /* get the status */ | |
54 && (status.st_mode & S_IFDIR) == 0); /* not a directory */ | |
55 } | |
56 | |
57 #ifndef CPP_PROGRAM | |
58 #define CPP_PROGRAM "/lib/cpp" | |
59 #endif | |
60 | |
61 static char cpp_string [BUFSIZ]; | |
62 static char *cpp_file = 0; | |
63 | |
64 #define Resolution(pixels, mm) ((((pixels) * 100000 / (mm)) + 50) / 100) | |
65 | |
66 void | |
67 lwlib_xrdb_initialize (display) | |
68 Display *display; | |
69 { | |
70 Screen *screen; | |
71 Visual *visual; | |
72 char server [255]; | |
73 char *colon, *s; | |
74 | |
75 #define Push(str) \ | |
76 (strncpy (s, str, sizeof(str)), s += (sizeof(str)-1)) | |
77 | |
78 #define Print(str, thing) \ | |
79 (sprintf (s, str, thing), s = index (s, 0)) | |
80 | |
81 s = cpp_string; | |
82 Push (CPP_PROGRAM); | |
83 | |
84 Push (" -DCLIENTHOST="); | |
85 XmuGetHostname (s, sizeof (cpp_string) - (s - cpp_string)); | |
86 s = index (s, 0); | |
87 Push (" -DSERVERHOST="); | |
88 strcpy (s, XDisplayName (DisplayString (display))); | |
89 colon = index (s, ':'); | |
90 if (colon == s) | |
91 { | |
92 XmuGetHostname (s, sizeof (cpp_string) - (s - cpp_string)); | |
93 s = index (s, 0); | |
94 } | |
95 else if (colon) | |
96 s = colon; | |
97 else | |
98 s = index (s, 0); | |
99 | |
100 Print (" -DVERSION=%d", ProtocolVersion(display)); | |
101 Print (" -DREVISION=%d", ProtocolRevision(display)); | |
102 Print (" -DVENDOR=\"%s\"", ServerVendor(display)); | |
103 Print (" -DRELEASE=%d", VendorRelease(display)); | |
104 screen = DefaultScreenOfDisplay(display); | |
105 visual = DefaultVisualOfScreen(screen); | |
106 Print (" -DWIDTH=%d", screen->width); | |
107 Print (" -DHEIGHT=%d", screen->height); | |
108 Print (" -DX_RESOLUTION=%d", Resolution(screen->width,screen->mwidth)); | |
109 Print (" -DY_RESOLUTION=%d", Resolution(screen->height,screen->mheight)); | |
110 Print (" -DPLANES=%d", DisplayPlanes(display, DefaultScreen(display))); | |
111 Print (" -DBITS_PER_RGB=%d", visual->bits_per_rgb); | |
112 switch(visual->class) { | |
113 case StaticGray: Print (" -DCLASS=%s", "StaticGray"); break; | |
114 case GrayScale: Print (" -DCLASS=%s", "GrayScale"); break; | |
115 case StaticColor: Print (" -DCLASS=%s", "StaticColor"); | |
116 Print (" -DCOLOR", 0); break; | |
117 case PseudoColor: Print (" -DCLASS=%s", "PseudoColor"); | |
118 Print (" -DCOLOR", 0); break; | |
119 case TrueColor: Print (" -DCLASS=%s", "TrueColor"); | |
120 Print (" -DCOLOR", 0); break; | |
121 case DirectColor: Print (" -DCLASS=%s", "DirectColor"); | |
122 Print (" -DCOLOR", 0); break; | |
123 default: | |
124 fprintf (stderr, "unexpected visual class=%d\n", visual->class); | |
125 exit (-1); | |
126 } | |
127 *s++ = ' '; | |
128 *s = 0; | |
129 cpp_file = s; | |
130 } | |
131 | |
132 XrmDatabase | |
133 lwlib_GetFileDatabase (path) | |
134 char *path; | |
135 { | |
136 XrmDatabase db = 0; | |
137 char line [BUFSIZ]; | |
138 char *s; | |
139 FILE *file; | |
140 | |
141 if (! file_p (path)) | |
142 return 0; | |
143 | |
144 strcpy (cpp_file, path); | |
145 if (! (file = popen (cpp_string, "r"))) | |
146 { | |
147 fprintf (stderr, | |
148 "couldn't execute %s; resource file %s file not munged.\n", | |
149 CPP_PROGRAM, path); | |
150 return XrmGetFileDatabase (path); | |
151 } | |
152 while (s = fgets (line, sizeof (line), file)) | |
153 { | |
154 char ch, *tail; | |
155 if (*s == '!') continue; | |
156 for (; ((ch = *s) != '\n') && isspace(ch); s++); | |
157 if ((ch == '\0') || (ch == '\n') || (ch == '#')) continue; | |
158 tail = s + strlen (s); | |
159 if (tail - s < 3) continue; /* this would be syntactically incorrect */ | |
160 while (*(tail-1) == '\n' && /* handle \ at end of line */ | |
161 *(tail-2) == '\\') | |
162 { | |
163 if (! fgets (tail, sizeof (line) - (tail - line), file)) | |
164 continue; | |
165 tail += strlen (tail); | |
166 } | |
167 XrmPutLineResource (&db, s); | |
168 } | |
169 pclose (file); | |
170 return db; | |
171 } | |
172 | |
173 #ifdef THIS_IS_X11R5 | |
174 | |
175 int | |
176 lwlib_CombineFileDatabase (path, target_db, override) | |
177 char *path; | |
178 XrmDatabase *target_db; | |
179 Bool override; | |
180 { | |
181 XrmDatabase source_db = lwlib_GetFileDatabase (path); | |
182 if (! source_db) | |
183 return (! file_p (path)); | |
184 XrmCombineDatabase (source_db, target_db, override); | |
185 return 1; | |
186 } | |
187 | |
188 #endif /* r5 */ |