update.
[chise/xemacs-chise.git.1] / lisp / x-misc.el
1 ;;; x-misc.el --- miscellaneous X functions.
2
3 ;; Copyright (C) 1997 Free Software Foundation, Inc.
4 ;; Copyright (C) 1995 Sun Microsystems.
5 ;; Copyright (C) 1995, 1996 Ben Wing.
6
7 ;; Author: Ben Wing <ben@xemacs.org>
8 ;; Maintainer: XEmacs Development Team
9 ;; Keywords: extensions, dumped
10
11 ;; This file is part of XEmacs.
12
13 ;; XEmacs is free software; you can redistribute it and/or modify it
14 ;; under the terms of the GNU General Public License as published by
15 ;; the Free Software Foundation; either version 2, or (at your option)
16 ;; any later version.
17
18 ;; XEmacs is distributed in the hope that it will be useful, but
19 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21 ;; General Public License for more details.
22
23 ;; You should have received a copy of the GNU General Public License
24 ;; along with XEmacs; see the file COPYING.  If not, write to the 
25 ;; Free Software Foundation, 59 Temple Place - Suite 330,
26 ;; Boston, MA 02111-1307, USA.
27
28 ;;; Commentary:
29
30 ;; This file is dumped with XEmacs (when X support is compiled in).
31
32 ;;; Code:
33
34 (defun x-bogosity-check-resource (name class type)
35   "Check for a bogus resource specification."
36   (let ((bogus (x-get-resource
37                 (concat "__no-such-friggin-locale__." name)
38                 (concat "__No-such-friggin-widget__." class)
39                 type 'global nil t)))
40     (if bogus
41         (display-warning
42          'resource
43          (format "Bad resource specification encountered: something like
44      Emacs*%s: %s
45 You should replace the * with a . in order to get proper behavior when
46 you use the specifier and/or `set-face-*' functions." name bogus)))))
47
48 (defun x-init-specifier-from-resources (specifier type locale
49                                                   &rest resource-list)
50   "Initialize a specifier from the resource database.
51 LOCALE specifies the locale that is to be initialized and should be
52 a frame, a device, or 'global.  TYPE is the type of the resource and
53 should be one of 'string, 'boolean, 'integer, or 'natnum.  The
54 remaining args should be conses of names and classes of resources
55 to be examined.  The first resource with a value specified becomes
56 the spec for SPECIFIER in LOCALE. (However, if SPECIFIER already
57 has a spec in LOCALE, nothing is done.) Finally, if LOCALE is 'global,
58 a check is done for bogus resource specifications."
59   (if (eq locale 'global)
60       (mapcar #'(lambda (x)
61                   (x-bogosity-check-resource (car x) (cdr x) type))
62               resource-list))
63   (if (not (specifier-spec-list specifier locale))
64       (catch 'done
65         (while resource-list
66           (let* ((name (caar resource-list))
67                  (class (cdar resource-list))
68                  (resource
69                   (x-get-resource name class type locale nil 'warn)))
70             (if resource
71                 (progn
72                   (add-spec-to-specifier specifier resource locale)
73                   (throw 'done t))))
74           (setq resource-list (cdr resource-list))))))
75
76 (defun x-get-resource-and-bogosity-check (name class type &optional locale)
77   (x-bogosity-check-resource name class type)
78   (x-get-resource name class type locale nil 'warn))
79
80 (defun x-get-resource-and-maybe-bogosity-check (name class type &optional
81                                                      locale)
82   (if (eq locale 'global)
83       (x-bogosity-check-resource name class type))
84   (x-get-resource name class type locale nil 'warn))
85
86 ;;; x-misc.el ends here