1629 lines
50 KiB
Plaintext
1629 lines
50 KiB
Plaintext
.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium
|
|
.\"
|
|
.\" Permission is hereby granted, free of charge, to any person obtaining
|
|
.\" a copy of this software and associated documentation files (the
|
|
.\" "Software"), to deal in the Software without restriction, including
|
|
.\" without limitation the rights to use, copy, modify, merge, publish,
|
|
.\" distribute, sublicense, and/or sell copies of the Software, and to
|
|
.\" permit persons to whom the Software is furnished to do so, subject to
|
|
.\" the following conditions:
|
|
.\"
|
|
.\" The above copyright notice and this permission notice shall be included
|
|
.\" in all copies or substantial portions of the Software.
|
|
.\"
|
|
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
|
.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
|
.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
.\" OTHER DEALINGS IN THE SOFTWARE.
|
|
.\"
|
|
.\" Except as contained in this notice, the name of the X Consortium shall
|
|
.\" not be used in advertising or otherwise to promote the sale, use or
|
|
.\" other dealings in this Software without prior written authorization
|
|
.\" from the X Consortium.
|
|
.\"
|
|
.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by
|
|
.\" Digital Equipment Corporation
|
|
.\"
|
|
.\" Portions Copyright \(co 1990, 1991 by
|
|
.\" Tektronix, Inc.
|
|
.\"
|
|
.\" Permission to use, copy, modify and distribute this documentation for
|
|
.\" any purpose and without fee is hereby granted, provided that the above
|
|
.\" copyright notice appears in all copies and that both that copyright notice
|
|
.\" and this permission notice appear in all copies, and that the names of
|
|
.\" Digital and Tektronix not be used in in advertising or publicity pertaining
|
|
.\" to this documentation without specific, written prior permission.
|
|
.\" Digital and Tektronix makes no representations about the suitability
|
|
.\" of this documentation for any purpose.
|
|
.\" It is provided ``as is'' without express or implied warranty.
|
|
.\"
|
|
\&
|
|
.sp 1
|
|
.ce 3
|
|
\s+1\fBChapter 15\fP\s-1
|
|
|
|
\s+1\fBResource Manager Functions\fP\s-1
|
|
.sp 2
|
|
.nr H1 15
|
|
.nr H2 0
|
|
.nr H3 0
|
|
.nr H4 0
|
|
.nr H5 0
|
|
.na
|
|
.LP
|
|
.XS
|
|
Chapter 15: Resource Manager Functions
|
|
.XE
|
|
A program often needs a variety of options in the X environment
|
|
(for example, fonts, colors, icons, and cursors).
|
|
Specifying all of these options on the command line is awkward
|
|
because users may want to customize many aspects of the program
|
|
and need a convenient way to establish these customizations as
|
|
the default settings.
|
|
The resource manager is provided for this purpose.
|
|
Resource specifications are usually stored in human-readable files
|
|
and in server properties.
|
|
.LP
|
|
The resource manager is a database manager with a twist.
|
|
In most database systems,
|
|
you perform a query using an imprecise specification,
|
|
and you get back a set of records.
|
|
The resource manager, however, allows you to specify a large
|
|
set of values with an imprecise specification, to query the database
|
|
with a precise specification, and to get back only a single value.
|
|
This should be used by applications that need to know what the
|
|
user prefers for colors, fonts, and other resources.
|
|
It is this use as a database for dealing with X resources that
|
|
inspired the name ``Resource Manager,''
|
|
although the resource manager can be and is used in other ways.
|
|
.LP
|
|
For example,
|
|
a user of your application may want to specify
|
|
that all windows should have a blue background
|
|
but that all mail-reading windows should have a red background.
|
|
With well-engineered and coordinated applications,
|
|
a user can define this information using only two lines of specifications.
|
|
.LP
|
|
As an example of how the resource manager works,
|
|
consider a mail-reading application called xmh.
|
|
Assume that it is designed so that it uses a
|
|
complex window hierarchy all the way down to individual command buttons,
|
|
which may be actual small subwindows in some toolkits.
|
|
These are often called objects or widgets.
|
|
In such toolkit systems,
|
|
each user interface object can be composed of other objects
|
|
and can be assigned a name and a class.
|
|
Fully qualified names or classes can have arbitrary numbers of component names,
|
|
but a fully qualified name always has the same number of component names as a
|
|
fully qualified class.
|
|
This generally reflects the structure of the application as composed
|
|
of these objects, starting with the application itself.
|
|
.LP
|
|
For example, the xmh mail program has a name ``xmh'' and is one
|
|
of a class of ``Mail'' programs.
|
|
By convention, the first character of class components is capitalized,
|
|
and the first letter of name components is in lowercase.
|
|
Each name and class finally has an attribute
|
|
(for example, ``foreground'' or ``font'').
|
|
If each window is properly assigned a name and class,
|
|
it is easy for the user to specify attributes of any portion
|
|
of the application.
|
|
.LP
|
|
At the top level,
|
|
the application might consist of a paned window (that is, a window divided
|
|
into several sections) named ``toc''.
|
|
One pane of the paned window is a button box window named ``buttons''
|
|
and is filled with command buttons.
|
|
One of these command buttons is used to incorporate
|
|
new mail and has the name ``incorporate''.
|
|
This window has a fully qualified name, ``xmh.toc.buttons.incorporate'',
|
|
and a fully qualified class, ``Xmh.Paned.Box.Command''.
|
|
Its fully qualified name is the name of its parent, ``xmh.toc.buttons'',
|
|
followed by its name, ``incorporate''.
|
|
Its class is the class of its parent, ``Xmh.Paned.Box'',
|
|
followed by its particular class, ``Command''.
|
|
The fully qualified name of a resource is
|
|
the attribute's name appended to the object's fully qualified
|
|
name, and the fully qualified class is its class appended to the object's
|
|
class.
|
|
.LP
|
|
The incorporate button might need the following resources:
|
|
Title string,
|
|
Font,
|
|
Foreground color for its inactive state,
|
|
Background color for its inactive state,
|
|
Foreground color for its active state, and
|
|
Background color for its active state.
|
|
Each resource is considered
|
|
to be an attribute of the button and, as such, has a name and a class.
|
|
For example, the foreground color for the button in
|
|
its active state might be named ``activeForeground'',
|
|
and its class might be ``Foreground''.
|
|
.LP
|
|
When an application looks up a resource (for example, a color),
|
|
it passes the complete name and complete class of the resource
|
|
to a look-up routine.
|
|
The resource manager compares this complete specification
|
|
against the incomplete specifications of entries in the resource
|
|
database, finds the best match, and returns the corresponding
|
|
value for that entry.
|
|
.LP
|
|
The definitions for the resource manager are contained in
|
|
.hN X11/Xresource.h .
|
|
.NH 2
|
|
Resource File Syntax
|
|
.XS
|
|
\*(SN Resource File Syntax
|
|
.XE
|
|
.LP
|
|
The syntax of a resource file is a sequence of resource lines
|
|
terminated by newline characters or the end of the file.
|
|
The syntax of an individual resource line is:
|
|
.LP
|
|
.\" Start marker code here
|
|
.Ds 0
|
|
.TA 1.5i 1.75i
|
|
.ta 1.5i 1.75i
|
|
ResourceLine = Comment | IncludeFile | ResourceSpec | <empty line>
|
|
Comment = "!" {<any character except null or newline>}
|
|
IncludeFile = "#" WhiteSpace "include" WhiteSpace FileName WhiteSpace
|
|
FileName = <valid filename for operating system>
|
|
ResourceSpec = WhiteSpace ResourceName WhiteSpace ":" WhiteSpace Value
|
|
ResourceName = [Binding] {Component Binding} ComponentName
|
|
Binding = "\&." | "*"
|
|
WhiteSpace = {<space> | <horizontal tab>}
|
|
Component = "?" | ComponentName
|
|
ComponentName = NameChar {NameChar}
|
|
NameChar = "a"\-"z" | "A"\-"Z" | "0"\-"9" | "_" | "-"
|
|
Value = {<any character except null or unescaped newline>}
|
|
.De
|
|
.\" End marker code here
|
|
.LP
|
|
Elements separated by vertical bar (|) are alternatives.
|
|
Curly braces ({\&.\&.\&.}) indicate zero or more repetitions
|
|
of the enclosed elements.
|
|
Square brackets ([\&.\&.\&.]) indicate that the enclosed element is optional.
|
|
Quotes ("\&.\&.\&.") are used around literal characters.
|
|
.LP
|
|
IncludeFile lines are interpreted by replacing the line with the
|
|
contents of the specified file.
|
|
The word ``include'' must be in lowercase.
|
|
The file name is interpreted relative to the directory of the file in
|
|
which the line occurs (for example, if the file name contains no
|
|
directory or contains a relative directory specification).
|
|
.LP
|
|
If a ResourceName contains a contiguous sequence of two or more Binding
|
|
characters, the sequence will be replaced with a single ``\&.'' character
|
|
if the sequence contains only ``\&.'' characters;
|
|
otherwise, the sequence will be replaced with a single ``*'' character.
|
|
.LP
|
|
A resource database never contains more than one entry for a given
|
|
ResourceName. If a resource file contains multiple lines with the
|
|
same ResourceName, the last line in the file is used.
|
|
.LP
|
|
Any white space characters before or after the name or colon in a ResourceSpec
|
|
are ignored.
|
|
To allow a Value to begin with white space,
|
|
the two-character sequence ``\^\\\^\fIspace\fP'' (backslash followed by space)
|
|
is recognized and replaced by a space character,
|
|
and the two-character sequence ``\^\\\^\fItab\fP''
|
|
(backslash followed by horizontal tab)
|
|
is recognized and replaced by a horizontal tab character.
|
|
To allow a Value to contain embedded newline characters,
|
|
the two-character sequence ``\^\\\^n'' is recognized and replaced by a
|
|
newline character.
|
|
To allow a Value to be broken across multiple lines in a text file,
|
|
the two-character sequence ``\^\\\^\fInewline\fP''
|
|
(backslash followed by newline) is
|
|
recognized and removed from the value.
|
|
To allow a Value to contain arbitrary character codes,
|
|
the four-character sequence ``\^\\\^\fInnn\fP'',
|
|
where each \fIn\fP is a digit character in the range of ``0''\^\-``7'',
|
|
is recognized and replaced with a single byte that contains
|
|
the octal value specified by the sequence.
|
|
Finally, the two-character sequence ``\^\\\\'' is recognized
|
|
and replaced with a single backslash.
|
|
.LP
|
|
As an example of these sequences,
|
|
the following resource line contains a value consisting of four
|
|
characters: a backslash, a null, a ``z'', and a newline:
|
|
.Ds
|
|
magic.values: \\\\\\\^000\^\\
|
|
z\\\^n
|
|
.De
|
|
.NH 2
|
|
Resource Manager Matching Rules
|
|
.XS
|
|
\*(SN Resource Manager Matching Rules
|
|
.XE
|
|
.LP
|
|
The algorithm for determining which resource database entry
|
|
matches a given query is the heart of the resource manager.
|
|
All queries must fully specify the name and class of the desired resource
|
|
(use of the characters ``*'' and ``?'' is not permitted).
|
|
The library supports up to 100 components in a full name or class.
|
|
Resources are stored in the database with only partially specified
|
|
names and classes, using pattern matching constructs.
|
|
An asterisk (*) is a loose binding and is used to represent any number
|
|
of intervening components, including none.
|
|
A period (.) is a tight binding and is used to separate immediately
|
|
adjacent components.
|
|
A question mark (?) is used to match any single component name or class.
|
|
A database entry cannot end in a loose binding;
|
|
the final component (which cannot be the character ``?'') must be specified.
|
|
The lookup algorithm searches the database for the entry that most
|
|
closely matches (is most specific for) the full name and class being queried.
|
|
When more than one database entry matches the full name and class,
|
|
precedence rules are used to select just one.
|
|
.LP
|
|
The full name and class are scanned from left to right (from highest
|
|
level in the hierarchy to lowest), one component at a time.
|
|
At each level, the corresponding component and/or binding of each
|
|
matching entry is determined, and these matching components and
|
|
bindings are compared according to precedence rules.
|
|
Each of the rules is applied at each level before moving to the next level,
|
|
until a rule selects a single entry over all others.
|
|
The rules, in order of precedence, are:
|
|
.IP 1. 5
|
|
An entry that contains a matching component (whether name, class,
|
|
or the character ``?'')
|
|
takes precedence over entries that elide the level (that is, entries
|
|
that match the level in a loose binding).
|
|
.IP 2. 5
|
|
An entry with a matching name takes precedence over both
|
|
entries with a matching class and entries that match using the character ``?''.
|
|
An entry with a matching class takes precedence over
|
|
entries that match using the character ``?''.
|
|
.IP 3. 5
|
|
An entry preceded by a tight binding takes precedence over entries
|
|
preceded by a loose binding.
|
|
.LP
|
|
To illustrate these rules,
|
|
consider the following resource database entries:
|
|
.Ds
|
|
.TA 2.5i 3.5i
|
|
.ta 2.5i 3.5i
|
|
xmh*Paned*activeForeground: red \fI(entry A)\fP
|
|
*incorporate.Foreground: blue \fI(entry B)\fP
|
|
xmh.toc*Command*activeForeground: green \fI(entry C)\fP
|
|
xmh.toc*?.Foreground: white \fI(entry D)\fP
|
|
xmh.toc*Command.activeForeground: black \fI(entry E)\fP
|
|
.De
|
|
.LP
|
|
Consider a query for the resource:
|
|
.LP
|
|
.Ds
|
|
.TA 3.5i
|
|
.ta 3.5i
|
|
xmh.toc.messagefunctions.incorporate.activeForeground \fI(name)\fP
|
|
Xmh.Paned.Box.Command.Foreground \fI(class)\fP
|
|
.De
|
|
.LP
|
|
At the first level (xmh, Xmh), rule 1 eliminates entry B.
|
|
At the second level (toc, Paned), rule 2 eliminates entry A.
|
|
At the third level (messagefunctions, Box), no entries are eliminated.
|
|
At the fourth level (incorporate, Command), rule 2 eliminates entry D.
|
|
At the fifth level (activeForeground, Foreground), rule 3 eliminates entry C.
|
|
.NH 2
|
|
Quarks
|
|
.XS
|
|
\*(SN Quarks
|
|
.XE
|
|
.LP
|
|
Most uses of the resource manager involve defining names,
|
|
classes, and representation types as string constants.
|
|
However, always referring to strings in the resource manager can be slow,
|
|
because it is so heavily used in some toolkits.
|
|
To solve this problem,
|
|
a shorthand for a string is used in place of the string
|
|
in many of the resource manager functions.
|
|
Simple comparisons can be performed rather than string comparisons.
|
|
The shorthand name for a string is called a quark and is the
|
|
type
|
|
.PN XrmQuark .
|
|
On some occasions,
|
|
you may want to allocate a quark that has no string equivalent.
|
|
.LP
|
|
A quark is to a string what an atom is to a string in the server,
|
|
but its use is entirely local to your application.
|
|
.LP
|
|
.sp
|
|
To allocate a new quark, use
|
|
.PN XrmUniqueQuark .
|
|
.IN "XrmUniqueQuark" "" "@DEF@"
|
|
.sM
|
|
.FD 0
|
|
XrmQuark XrmUniqueQuark\^(\|)
|
|
.FN
|
|
.LP
|
|
.eM
|
|
The
|
|
.PN XrmUniqueQuark
|
|
function allocates a quark that is guaranteed not to represent any string that
|
|
is known to the resource manager.
|
|
.LP
|
|
.sp
|
|
Each name, class, and representation type is typedef'd as an
|
|
.PN XrmQuark .
|
|
.LP
|
|
.sM
|
|
.Ds 0
|
|
typedef int XrmQuark, *XrmQuarkList;
|
|
typedef XrmQuark XrmName;
|
|
typedef XrmQuark XrmClass;
|
|
typedef XrmQuark XrmRepresentation;
|
|
#define NULLQUARK ((XrmQuark) 0)
|
|
.De
|
|
.LP
|
|
.eM
|
|
Lists are represented as null-terminated arrays of quarks.
|
|
The size of the array must be large enough for the number of components used.
|
|
.LP
|
|
.sM
|
|
.Ds 0
|
|
typedef XrmQuarkList XrmNameList;
|
|
typedef XrmQuarkList XrmClassList;
|
|
.De
|
|
.LP
|
|
.eM
|
|
.sp
|
|
To convert a string to a quark, use
|
|
.PN XrmStringToQuark
|
|
or
|
|
.PN XrmPermStringToQuark .
|
|
.IN "XrmStringToQuark" "" "@DEF@"
|
|
.IN "XrmPermStringToQuark" "" "@DEF@"
|
|
.sM
|
|
.FD 0
|
|
#define XrmStringToName(string) XrmStringToQuark(string)
|
|
#define XrmStringToClass(string) XrmStringToQuark(string)
|
|
#define XrmStringToRepresentation(string) XrmStringToQuark(string)
|
|
.sp
|
|
XrmQuark XrmStringToQuark\^(\^\fIstring\fP\^)
|
|
.br
|
|
char *\fIstring\fP\^;
|
|
.sp
|
|
XrmQuark XrmPermStringToQuark\^(\^\fIstring\fP\^)
|
|
.br
|
|
char *\fIstring\fP\^;
|
|
.FN
|
|
.ds Ql
|
|
.IP \fIstring\fP 1i
|
|
Specifies the string for which a quark\*(Ql is to be allocated.
|
|
.LP
|
|
.eM
|
|
These functions can be used to convert from string to quark representation.
|
|
If the string is not in the Host Portable Character Encoding,
|
|
the conversion is implementation-dependent.
|
|
The string argument to
|
|
.PN XrmStringToQuark
|
|
need not be permanently allocated storage.
|
|
.PN XrmPermStringToQuark
|
|
is just like
|
|
.PN XrmStringToQuark ,
|
|
except that Xlib is permitted to assume the string argument is permanently
|
|
allocated,
|
|
and, hence, that it can be used as the value to be returned by
|
|
.PN XrmQuarkToString .
|
|
.LP
|
|
For any given quark, if
|
|
.PN XrmStringToQuark
|
|
returns a non-NULL value,
|
|
all future calls will return the same value (identical address).
|
|
.LP
|
|
.sp
|
|
To convert a quark to a string, use
|
|
.PN XrmQuarkToString .
|
|
.IN "XrmQuarkToString" "" "@DEF@"
|
|
.sM
|
|
.FD 0
|
|
#define XrmNameToString(name) XrmQuarkToString(name)
|
|
#define XrmClassToString(class) XrmQuarkToString(class)
|
|
#define XrmRepresentationToString(type) XrmQuarkToString(type)
|
|
.sp
|
|
char *XrmQuarkToString\^(\^\fIquark\fP\^)
|
|
.br
|
|
XrmQuark \fIquark\fP\^;
|
|
.FN
|
|
.IP \fIquark\fP 1i
|
|
Specifies the quark for which the equivalent string is desired.
|
|
.LP
|
|
.eM
|
|
These functions can be used to convert from quark representation to string.
|
|
The string pointed to by the return value must not be modified or freed.
|
|
The returned string is byte-for-byte equal to the original
|
|
string passed to one of the string-to-quark routines.
|
|
If no string exists for that quark,
|
|
.PN XrmQuarkToString
|
|
returns NULL.
|
|
For any given quark, if
|
|
.PN XrmQuarkToString
|
|
returns a non-NULL value,
|
|
all future calls will return the same value (identical address).
|
|
.LP
|
|
.sp
|
|
To convert a string with one or more components to a quark list, use
|
|
.PN XrmStringToQuarkList .
|
|
.IN "XrmStringToQuarkList" "" "@DEF@"
|
|
.sM
|
|
.FD 0
|
|
#define XrmStringToNameList(str, name) XrmStringToQuarkList((str), (name))
|
|
#define XrmStringToClassList(str, class) XrmStringToQuarkList((str), (class))
|
|
.sp
|
|
void XrmStringToQuarkList\^(\^\fIstring\fP, \fIquarks_return\fP\^)
|
|
.br
|
|
char *\fIstring\fP\^;
|
|
.br
|
|
XrmQuarkList \fIquarks_return\fP\^;
|
|
.FN
|
|
.ds Ql \ list
|
|
.IP \fIstring\fP 1i
|
|
Specifies the string for which a quark\*(Ql is to be allocated.
|
|
.IP \fIquarks_return\fP 1i
|
|
Returns the list of quarks.
|
|
The caller must allocate sufficient space for the quarks list before calling
|
|
.PN XrmStringToQuarkList .
|
|
.LP
|
|
.eM
|
|
The
|
|
.PN XrmStringToQuarkList
|
|
function converts the null-terminated string (generally a fully qualified name)
|
|
to a list of quarks.
|
|
Note that the string must be in the valid ResourceName format
|
|
(see section 15.1).
|
|
If the string is not in the Host Portable Character Encoding,
|
|
the conversion is implementation-dependent.
|
|
.LP
|
|
A binding list is a list of type
|
|
.PN XrmBindingList
|
|
and indicates if components of name or class lists are bound tightly or loosely
|
|
(that is, if wildcarding of intermediate components is specified).
|
|
.LP
|
|
.Ds 0
|
|
typedef enum {XrmBindTightly, XrmBindLoosely} XrmBinding, *XrmBindingList;
|
|
.De
|
|
.LP
|
|
.PN XrmBindTightly
|
|
indicates that a period separates the components, and
|
|
.PN XrmBindLoosely
|
|
indicates that an asterisk separates the components.
|
|
.LP
|
|
.sp
|
|
To convert a string with one or more components to a binding list
|
|
and a quark list, use
|
|
.PN XrmStringToBindingQuarkList .
|
|
.IN "XrmStringToBindingQuarkList" "" "@DEF@"
|
|
.sM
|
|
.FD 0
|
|
XrmStringToBindingQuarkList\^(\^\fIstring\fP, \fIbindings_return\fP, \
|
|
\fIquarks_return\fP\^)
|
|
.br
|
|
char *\fIstring\fP\^;
|
|
.br
|
|
XrmBindingList \fIbindings_return\fP\^;
|
|
.br
|
|
XrmQuarkList \fIquarks_return\fP\^;
|
|
.FN
|
|
.ds Ql \ list
|
|
.IP \fIstring\fP 1i
|
|
Specifies the string for which a quark\*(Ql is to be allocated.
|
|
.IP \fIbindings_return\fP 1i
|
|
Returns the binding list.
|
|
The caller must allocate sufficient space for the binding list before calling
|
|
.PN XrmStringToBindingQuarkList .
|
|
.IP \fIquarks_return\fP 1i
|
|
Returns the list of quarks.
|
|
The caller must allocate sufficient space for the quarks list before calling
|
|
.PN XrmStringToBindingQuarkList .
|
|
.LP
|
|
.eM
|
|
Component names in the list are separated by a period or
|
|
an asterisk character.
|
|
The string must be in the format of a valid ResourceName (see section 15.1).
|
|
If the string does not start with a period or an asterisk,
|
|
a tight binding is assumed.
|
|
For example, the string ``*a.b*c'' becomes:
|
|
.LP
|
|
.Ds 0
|
|
.TA .75i 1.5i 2.25i
|
|
.ta .75i 1.5i 2.25i
|
|
quarks: a b c
|
|
bindings: loose tight loose
|
|
.De
|
|
.NH 2
|
|
Creating and Storing Databases
|
|
.XS
|
|
\*(SN Creating and Storing Databases
|
|
.XE
|
|
.LP
|
|
.IN "XrmDatabase" "" "@DEF@"
|
|
A resource database is an opaque type,
|
|
.PN XrmDatabase .
|
|
Each database value is stored in an
|
|
.PN XrmValue
|
|
structure.
|
|
This structure consists of a size, an address, and a representation type.
|
|
The size is specified in bytes.
|
|
The representation type is a way for you to store data tagged by some
|
|
application-defined type (for example, the strings ``font'' or ``color'').
|
|
It has nothing to do with the C data type or with its class.
|
|
The
|
|
.PN XrmValue
|
|
structure is defined as:
|
|
.LP
|
|
.IN "XrmValue" "" "@DEF@"
|
|
.sM
|
|
.Ds 0
|
|
.TA .5i 3i
|
|
.ta .5i 3i
|
|
typedef struct {
|
|
unsigned int size;
|
|
XPointer addr;
|
|
} XrmValue, *XrmValuePtr;
|
|
.De
|
|
.LP
|
|
.eM
|
|
.sp
|
|
To initialize the resource manager, use
|
|
.PN XrmInitialize .
|
|
.IN "XrmInitialize" "" "@DEF@"
|
|
.sM
|
|
.FD 0
|
|
void XrmInitialize\^(\|);
|
|
.FN
|
|
.LP
|
|
.eM
|
|
To retrieve a database from disk, use
|
|
.PN XrmGetFileDatabase .
|
|
.IN "XrmGetFileDatabase" "" "@DEF@"
|
|
.sM
|
|
.FD 0
|
|
XrmDatabase XrmGetFileDatabase\^(\^\fIfilename\fP\^)
|
|
.br
|
|
char *\fIfilename\fP\^;
|
|
.FN
|
|
.IP \fIfilename\fP 1i
|
|
Specifies the resource database file name.
|
|
.LP
|
|
.eM
|
|
The
|
|
.PN XrmGetFileDatabase
|
|
function opens the specified file,
|
|
creates a new resource database, and loads it with the specifications
|
|
read in from the specified file.
|
|
The specified file should contain a sequence of entries in valid ResourceLine
|
|
format (see section 15.1); the database that results from reading a file
|
|
with incorrect syntax is implementation-dependent.
|
|
The file is parsed in the current locale,
|
|
and the database is created in the current locale.
|
|
If it cannot open the specified file,
|
|
.PN XrmGetFileDatabase
|
|
returns NULL.
|
|
.LP
|
|
.sp
|
|
To store a copy of a database to disk, use
|
|
.PN XrmPutFileDatabase .
|
|
.IN "XrmPutFileDatabase" "" "@DEF@"
|
|
.sM
|
|
.FD 0
|
|
void XrmPutFileDatabase\^(\^\fIdatabase\fP, \fIstored_db\fP\^)
|
|
.br
|
|
XrmDatabase \fIdatabase\fP\^;
|
|
.br
|
|
char *\fIstored_db\fP\^;
|
|
.FN
|
|
.IP \fIdatabase\fP 1i
|
|
Specifies the database that is to be used.
|
|
.IP \fIstored_db\fP 1i
|
|
Specifies the file name for the stored database.
|
|
.LP
|
|
.eM
|
|
The
|
|
.PN XrmPutFileDatabase
|
|
function stores a copy of the specified database in the specified file.
|
|
Text is written to the file as a sequence of entries in valid
|
|
ResourceLine format (see section 15.1).
|
|
The file is written in the locale of the database.
|
|
Entries containing resource names that are not in the Host Portable Character
|
|
Encoding or containing values that are not in the encoding of the database
|
|
locale, are written in an implementation-dependent manner.
|
|
The order in which entries are written is implementation-dependent.
|
|
Entries with representation types other than ``String'' are ignored.
|
|
.LP
|
|
.sp
|
|
To obtain a pointer to the screen-independent resources of a display, use
|
|
.PN XResourceManagerString .
|
|
.IN "XResourceManagerString" "" "@DEF@"
|
|
.sM
|
|
.FD 0
|
|
char *XResourceManagerString\^(\^\fIdisplay\fP\^)
|
|
.br
|
|
Display *\fIdisplay\fP\^;
|
|
.FN
|
|
.IP \fIdisplay\fP 1i
|
|
Specifies the connection to the X server.
|
|
.LP
|
|
.eM
|
|
The
|
|
.PN XResourceManagerString
|
|
function returns the RESOURCE_MANAGER property from the server's root
|
|
window of screen zero, which was returned when the connection was opened using
|
|
.PN XOpenDisplay .
|
|
The property is converted from type STRING to the current locale.
|
|
The conversion is identical to that produced by
|
|
.PN XmbTextPropertyToTextList
|
|
for a single element STRING property.
|
|
The returned string is owned by Xlib and should not be freed by the client.
|
|
The property value must be in a format that is acceptable to
|
|
.PN XrmGetStringDatabase .
|
|
If no property exists, NULL is returned.
|
|
.LP
|
|
.sp
|
|
To obtain a pointer to the screen-specific resources of a screen, use
|
|
.PN XScreenResourceString .
|
|
.IN "XScreenResourceString" "" "@DEF@"
|
|
.sM
|
|
.FD 0
|
|
char *XScreenResourceString\^(\^\fIscreen\fP\^)
|
|
.br
|
|
Screen *\fIscreen\fP\^;
|
|
.FN
|
|
.IP \fIscreen\fP 1i
|
|
Specifies the screen.
|
|
.LP
|
|
.eM
|
|
The
|
|
.PN XScreenResourceString
|
|
function returns the SCREEN_RESOURCES property from the root window of the
|
|
specified screen.
|
|
The property is converted from type STRING to the current locale.
|
|
The conversion is identical to that produced by
|
|
.PN XmbTextPropertyToTextList
|
|
for a single element STRING property.
|
|
The property value must be in a format that is acceptable to
|
|
.PN XrmGetStringDatabase .
|
|
If no property exists, NULL is returned.
|
|
The caller is responsible for freeing the returned string by using
|
|
.PN XFree .
|
|
.LP
|
|
.sp
|
|
To create a database from a string, use
|
|
.PN XrmGetStringDatabase .
|
|
.IN "XrmGetStringDatabase" "" "@DEF@"
|
|
.sM
|
|
.FD 0
|
|
XrmDatabase XrmGetStringDatabase\^(\^\fIdata\fP\^)
|
|
.br
|
|
char *\fIdata\fP\^;
|
|
.FN
|
|
.IP \fIdata\fP 1i
|
|
Specifies the database contents using a string.
|
|
.LP
|
|
.eM
|
|
The
|
|
.PN XrmGetStringDatabase
|
|
function creates a new database and stores the resources specified
|
|
in the specified null-terminated string.
|
|
.PN XrmGetStringDatabase
|
|
is similar to
|
|
.PN XrmGetFileDatabase
|
|
except that it reads the information out of a string instead of out of a file.
|
|
The string should contain a sequence of entries in valid ResourceLine
|
|
format (see section 15.1) terminated by a null character;
|
|
the database that results from using a string
|
|
with incorrect syntax is implementation-dependent.
|
|
The string is parsed in the current locale,
|
|
and the database is created in the current locale.
|
|
.LP
|
|
.sp
|
|
To obtain the locale name of a database, use
|
|
.PN XrmLocaleOfDatabase .
|
|
.IN "XrmLocaleOfDatabase" "" "@DEF@"
|
|
.sM
|
|
.FD 0
|
|
char *XrmLocaleOfDatabase\^(\^\fIdatabase\fP\^)
|
|
.br
|
|
XrmDatabase \fIdatabase\fP\^;
|
|
.FN
|
|
.IP \fIdatabase\fP 1i
|
|
Specifies the resource database.
|
|
.LP
|
|
.eM
|
|
The
|
|
.PN XrmLocaleOfDatabase
|
|
function returns the name of the locale bound to the specified
|
|
database, as a null-terminated string.
|
|
The returned locale name string is owned by Xlib and should not be
|
|
modified or freed by the client.
|
|
Xlib is not permitted to free the string until the database is destroyed.
|
|
Until the string is freed,
|
|
it will not be modified by Xlib.
|
|
.LP
|
|
.sp
|
|
To destroy a resource database and free its allocated memory, use
|
|
.PN XrmDestroyDatabase .
|
|
.IN "XrmDestroyDatabase" "" "@DEF@"
|
|
.sM
|
|
.FD 0
|
|
void XrmDestroyDatabase\^(\^\fIdatabase\fP\^)
|
|
.br
|
|
XrmDatabase \fIdatabase\fP\^;
|
|
.FN
|
|
.IP \fIdatabase\fP 1i
|
|
Specifies the resource database.
|
|
.LP
|
|
.eM
|
|
If database is NULL,
|
|
.PN XrmDestroyDatabase
|
|
returns immediately.
|
|
.LP
|
|
.sp
|
|
To associate a resource database with a display, use
|
|
.PN XrmSetDatabase .
|
|
.IN "XrmSetDatabase" "" "@DEF@"
|
|
.sM
|
|
.FD 0
|
|
void XrmSetDatabase\^(\^\fIdisplay\fP\^, \fIdatabase\fP\^)
|
|
.br
|
|
Display *\fIdisplay\fP\^;
|
|
.br
|
|
XrmDatabase \fIdatabase\fP\^;
|
|
.FN
|
|
.IP \fIdisplay\fP 1i
|
|
Specifies the connection to the X server.
|
|
.IP \fIdatabase\fP 1i
|
|
Specifies the resource database.
|
|
.LP
|
|
.eM
|
|
The
|
|
.PN XrmSetDatabase
|
|
function associates the specified resource database (or NULL)
|
|
with the specified display.
|
|
The database previously associated with the display (if any) is not destroyed.
|
|
A client or toolkit may find this function convenient for retaining a database
|
|
once it is constructed.
|
|
.LP
|
|
.sp
|
|
To get the resource database associated with a display, use
|
|
.PN XrmGetDatabase .
|
|
.IN "XrmGetDatabase" "" "@DEF@"
|
|
.sM
|
|
.FD 0
|
|
XrmDatabase XrmGetDatabase\^(\^\fIdisplay\fP\^)
|
|
.br
|
|
Display *\fIdisplay\fP\^;
|
|
.FN
|
|
.IP \fIdisplay\fP 1i
|
|
Specifies the connection to the X server.
|
|
.LP
|
|
.eM
|
|
The
|
|
.PN XrmGetDatabase
|
|
function returns the database associated with the specified display.
|
|
It returns NULL if a database has not yet been set.
|
|
.NH 2
|
|
Merging Resource Databases
|
|
.XS
|
|
\*(SN Merging Resource Databases
|
|
.XE
|
|
.LP
|
|
To merge the contents of a resource file into a database, use
|
|
.PN XrmCombineFileDatabase .
|
|
.IN "XrmCombineFileDatabase" "" "@DEF@"
|
|
.sM
|
|
.FD 0
|
|
Status XrmCombineFileDatabase(\^\fIfilename\fP, \fItarget_db\fP, \fIoverride\fP\^)
|
|
.br
|
|
char *\fIfilename\fP;
|
|
.br
|
|
XrmDatabase *\fItarget_db\fP\^;
|
|
.br
|
|
Bool \fIoverride\fP;
|
|
.FN
|
|
.IP \fIfilename\fP 1i
|
|
Specifies the resource database file name.
|
|
.IP \fItarget_db\fP 1i
|
|
Specifies the resource database into which the source
|
|
database is to be merged.
|
|
.IP \fIoverride\fP 1i
|
|
Specifies whether source entries override target ones.
|
|
.LP
|
|
.eM
|
|
The
|
|
.PN XrmCombineFileDatabase
|
|
function merges the contents of a resource file into a database.
|
|
If the same specifier is used for an entry in both the file and
|
|
the database,
|
|
the entry in the file will replace the entry in the database
|
|
if override is
|
|
.PN True ;
|
|
otherwise, the entry in the file is discarded.
|
|
The file is parsed in the current locale.
|
|
If the file cannot be read,
|
|
a zero status is returned;
|
|
otherwise, a nonzero status is returned.
|
|
If target_db contains NULL,
|
|
.PN XrmCombineFileDatabase
|
|
creates and returns a new database to it.
|
|
Otherwise, the database pointed to by target_db is not destroyed by the merge.
|
|
The database entries are merged without changing values or types,
|
|
regardless of the locale of the database.
|
|
The locale of the target database is not modified.
|
|
.LP
|
|
.sp
|
|
To merge the contents of one database into another database, use
|
|
.PN XrmCombineDatabase .
|
|
.IN "XrmCombineDatabase" "" "@DEF@"
|
|
.sM
|
|
.FD 0
|
|
void XrmCombineDatabase(\^\fIsource_db\fP, \fItarget_db\fP, \fIoverride\fP\^)
|
|
.br
|
|
XrmDatabase \fIsource_db\fP, *\fItarget_db\fP\^;
|
|
.br
|
|
Bool \fIoverride\fP;
|
|
.FN
|
|
.IP \fIsource_db\fP 1i
|
|
Specifies the resource database that is to be merged into the target database.
|
|
.IP \fItarget_db\fP 1i
|
|
Specifies the resource database into which the source
|
|
database is to be merged.
|
|
.IP \fIoverride\fP 1i
|
|
Specifies whether source entries override target ones.
|
|
.LP
|
|
.eM
|
|
The
|
|
.PN XrmCombineDatabase
|
|
function merges the contents of one database into another.
|
|
If the same specifier is used for an entry in both databases,
|
|
the entry in the source_db will replace the entry in the target_db
|
|
if override is
|
|
.PN True ;
|
|
otherwise, the entry in source_db is discarded.
|
|
If target_db contains NULL,
|
|
.PN XrmCombineDatabase
|
|
simply stores source_db in it.
|
|
Otherwise, source_db is destroyed by the merge, but the database pointed
|
|
to by target_db is not destroyed.
|
|
The database entries are merged without changing values or types,
|
|
regardless of the locales of the databases.
|
|
The locale of the target database is not modified.
|
|
.LP
|
|
.sp
|
|
To merge the contents of one database into another database with override
|
|
semantics, use
|
|
.PN XrmMergeDatabases .
|
|
.IN "XrmMergeDatabases" "" "@DEF@"
|
|
.sM
|
|
.FD 0
|
|
void XrmMergeDatabases(\^\fIsource_db\fP, \fItarget_db\fP\^)
|
|
.br
|
|
XrmDatabase \fIsource_db\fP, *\fItarget_db\fP\^;
|
|
.FN
|
|
.IP \fIsource_db\fP 1i
|
|
Specifies the resource database that is to be merged into the target database.
|
|
.IP \fItarget_db\fP 1i
|
|
Specifies the resource database into which the source
|
|
database is to be merged.
|
|
.LP
|
|
.eM
|
|
Calling the
|
|
.PN XrmMergeDatabases
|
|
function is equivalent to calling the
|
|
.PN XrmCombineDatabase
|
|
function with an override argument of
|
|
.PN True .
|
|
.NH 2
|
|
Looking Up Resources
|
|
.XS
|
|
\*(SN Looking Up Resources
|
|
.XE
|
|
.LP
|
|
To retrieve a resource from a resource database, use
|
|
.PN XrmGetResource ,
|
|
.PN XrmQGetResource ,
|
|
or
|
|
.PN XrmQGetSearchResource .
|
|
.LP
|
|
.sp
|
|
.IN "XrmGetResource" "" "@DEF@"
|
|
.sM
|
|
.FD 0
|
|
Bool XrmGetResource\^(\^\fIdatabase\fP, \fIstr_name\fP, \fIstr_class\fP, \
|
|
\fIstr_type_return\fP, \fIvalue_return\fP\^)
|
|
.br
|
|
XrmDatabase \fIdatabase\fP\^;
|
|
.br
|
|
char *\fIstr_name\fP\^;
|
|
.br
|
|
char *\fIstr_class\fP\^;
|
|
.br
|
|
char **\fIstr_type_return\fP\^;
|
|
.br
|
|
XrmValue *\fIvalue_return\fP\^;
|
|
.FN
|
|
.IP \fIdatabase\fP 1i
|
|
Specifies the database that is to be used.
|
|
.IP \fIstr_name\fP 1i
|
|
Specifies the fully qualified name of the value being retrieved (as a string).
|
|
.IP \fIstr_class\fP 1i
|
|
Specifies the fully qualified class of the value being retrieved (as a string).
|
|
.IP \fIstr_type_return\fP 1i
|
|
Returns the representation type of the destination (as a string).
|
|
.IP \fIvalue_return\fP 1i
|
|
Returns the value in the database.
|
|
.LP
|
|
.eM
|
|
.sp
|
|
.IN "XrmQGetResource" "" "@DEF@"
|
|
.sM
|
|
.FD 0
|
|
Bool XrmQGetResource\^(\^\fIdatabase\fP, \fIquark_name\fP, \fIquark_class\fP, \
|
|
\fIquark_type_return\fP, \fIvalue_return\fP\^)
|
|
.br
|
|
XrmDatabase \fIdatabase\fP\^;
|
|
.br
|
|
XrmNameList \fIquark_name\fP\^;
|
|
.br
|
|
XrmClassList \fIquark_class\fP\^;
|
|
.br
|
|
XrmRepresentation *\fIquark_type_return\fP\^;
|
|
.br
|
|
XrmValue *\fIvalue_return\fP\^;
|
|
.FN
|
|
.IP \fIdatabase\fP 1i
|
|
Specifies the database that is to be used.
|
|
.IP \fIquark_name\fP 1i
|
|
Specifies the fully qualified name of the value being retrieved (as a quark).
|
|
.IP \fIquark_class\fP 1i
|
|
Specifies the fully qualified class of the value being retrieved (as a quark).
|
|
.IP \fIquark_type_return\fP 1i
|
|
Returns the representation type of the destination (as a quark).
|
|
.IP \fIvalue_return\fP 1i
|
|
Returns the value in the database.
|
|
.LP
|
|
.eM
|
|
The
|
|
.PN XrmGetResource
|
|
and
|
|
.PN XrmQGetResource
|
|
functions retrieve a resource from the specified database.
|
|
Both take a fully qualified name/class pair, a destination
|
|
resource representation, and the address of a value
|
|
(size/address pair).
|
|
The value and returned type point into database memory;
|
|
therefore, you must not modify the data.
|
|
.LP
|
|
The database only frees or overwrites entries on
|
|
.PN XrmPutResource ,
|
|
.PN XrmQPutResource ,
|
|
or
|
|
.PN XrmMergeDatabases .
|
|
A client that is not storing new values into the database or
|
|
is not merging the database should be safe using the address passed
|
|
back at any time until it exits.
|
|
If a resource was found, both
|
|
.PN XrmGetResource
|
|
and
|
|
.PN XrmQGetResource
|
|
return
|
|
.PN True ;
|
|
otherwise, they return
|
|
.PN False .
|
|
.LP
|
|
.sp
|
|
.EQ
|
|
delim %%
|
|
.EN
|
|
Most applications and toolkits do not make random probes
|
|
into a resource database to fetch resources.
|
|
The X toolkit access pattern for a resource database is quite stylized.
|
|
A series of from 1 to 20 probes is made with only the
|
|
last name/class differing in each probe.
|
|
The
|
|
.PN XrmGetResource
|
|
function is at worst a %2 sup n% algorithm,
|
|
where \fIn\fP is the length of the name/class list.
|
|
This can be improved upon by the application programmer by prefetching a list
|
|
of database levels that might match the first part of a name/class list.
|
|
.LP
|
|
.sp
|
|
To obtain a list of database levels, use
|
|
.PN XrmQGetSearchList .
|
|
.IN "XrmQGetSearchList" "" "@DEF@"
|
|
.sM
|
|
.FD 0
|
|
typedef XrmHashTable *XrmSearchList;
|
|
.sp
|
|
Bool XrmQGetSearchList\^(\^\fIdatabase\fP, \fInames\fP, \fIclasses\fP, \
|
|
\fIlist_return\fP, \fIlist_length\fP\^)
|
|
.br
|
|
XrmDatabase \fIdatabase\fP\^;
|
|
.br
|
|
XrmNameList \fInames\fP\^;
|
|
.br
|
|
XrmClassList \fIclasses\fP\^;
|
|
.br
|
|
XrmSearchList \fIlist_return\fP\^;
|
|
.br
|
|
int \fIlist_length\fP\^;
|
|
.FN
|
|
.IP \fIdatabase\fP 1i
|
|
Specifies the database that is to be used.
|
|
.IP \fInames\fP 1i
|
|
Specifies a list of resource names.
|
|
.IP \fIclasses\fP 1i
|
|
Specifies a list of resource classes.
|
|
.IP \fIlist_return\fP 1i
|
|
Returns a search list for further use.
|
|
The caller must allocate sufficient space for the list before calling
|
|
.PN XrmQGetSearchList .
|
|
.IP \fIlist_length\fP 1i
|
|
Specifies the number of entries (not the byte size) allocated for list_return.
|
|
.LP
|
|
.eM
|
|
The
|
|
.PN XrmQGetSearchList
|
|
function takes a list of names and classes
|
|
and returns a list of database levels where a match might occur.
|
|
The returned list is in best-to-worst order and
|
|
uses the same algorithm as
|
|
.PN XrmGetResource
|
|
for determining precedence.
|
|
If list_return was large enough for the search list,
|
|
.PN XrmQGetSearchList
|
|
returns
|
|
.PN True ;
|
|
otherwise, it returns
|
|
.PN False .
|
|
.LP
|
|
The size of the search list that the caller must allocate is
|
|
dependent upon the number of levels and wildcards in the resource specifiers
|
|
that are stored in the database.
|
|
The worst case length is %3 sup n%,
|
|
where \fIn\fP is the number of name or class components in names or classes.
|
|
.LP
|
|
When using
|
|
.PN XrmQGetSearchList
|
|
followed by multiple probes for resources with a common name and class prefix,
|
|
only the common prefix should be specified in the name and class list to
|
|
.PN XrmQGetSearchList .
|
|
.LP
|
|
.sp
|
|
To search resource database levels for a given resource, use
|
|
.PN XrmQGetSearchResource .
|
|
.IN "XrmQGetSearchResource" "" "@DEF@"
|
|
.sM
|
|
.FD 0
|
|
Bool XrmQGetSearchResource\^(\^\fIlist\fP, \fIname\fP, \fIclass\fP, \
|
|
\fItype_return\fP, \fIvalue_return\fP\^)
|
|
.br
|
|
XrmSearchList \fIlist\fP\^;
|
|
.br
|
|
XrmName \fIname\fP\^;
|
|
.br
|
|
XrmClass \fIclass\fP\^;
|
|
.br
|
|
XrmRepresentation *\fItype_return\fP\^;
|
|
.br
|
|
XrmValue *\fIvalue_return\fP\^;
|
|
.FN
|
|
.IP \fIlist\fP 1i
|
|
Specifies the search list returned by
|
|
.PN XrmQGetSearchList .
|
|
.IP \fIname\fP 1i
|
|
Specifies the resource name.
|
|
.IP \fIclass\fP 1i
|
|
Specifies the resource class.
|
|
.IP \fItype_return\fP 1i
|
|
Returns data representation type.
|
|
.IP \fIvalue_return\fP 1i
|
|
Returns the value in the database.
|
|
.LP
|
|
.eM
|
|
The
|
|
.PN XrmQGetSearchResource
|
|
function searches the specified database levels for the resource
|
|
that is fully identified by the specified name and class.
|
|
The search stops with the first match.
|
|
.PN XrmQGetSearchResource
|
|
returns
|
|
.PN True
|
|
if the resource was found;
|
|
otherwise, it returns
|
|
.PN False .
|
|
.LP
|
|
A call to
|
|
.PN XrmQGetSearchList
|
|
with a name and class list containing all but the last component
|
|
of a resource name followed by a call to
|
|
.PN XrmQGetSearchResource
|
|
with the last component name and class returns the same database entry as
|
|
.PN XrmGetResource
|
|
and
|
|
.PN XrmQGetResource
|
|
with the fully qualified name and class.
|
|
.NH 2
|
|
Storing into a Resource Database
|
|
.XS
|
|
\*(SN Storing into a Resource Database
|
|
.XE
|
|
.LP
|
|
To store resources into the database, use
|
|
.PN XrmPutResource
|
|
or
|
|
.PN XrmQPutResource .
|
|
Both functions take a partial resource specification, a
|
|
representation type, and a value.
|
|
This value is copied into the specified database.
|
|
.LP
|
|
.sp
|
|
.IN "XrmPutResource" "" "@DEF@"
|
|
.sM
|
|
.FD 0
|
|
void XrmPutResource\^(\^\fIdatabase\fP, \fIspecifier\fP, \fItype\fP, \fIvalue\fP\^)
|
|
.br
|
|
XrmDatabase *\fIdatabase\fP\^;
|
|
.br
|
|
char *\fIspecifier\fP\^;
|
|
.br
|
|
char *\fItype\fP\^;
|
|
.br
|
|
XrmValue *\fIvalue\fP\^;
|
|
.FN
|
|
.IP \fIdatabase\fP 1i
|
|
Specifies the resource database.
|
|
.IP \fIspecifier\fP 1i
|
|
Specifies a complete or partial specification of the resource.
|
|
.IP \fItype\fP 1i
|
|
Specifies the type of the resource.
|
|
.IP \fIvalue\fP 1i
|
|
Specifies the value of the resource, which is specified as a string.
|
|
.LP
|
|
.eM
|
|
If database contains NULL,
|
|
.PN XrmPutResource
|
|
creates a new database and returns a pointer to it.
|
|
.PN XrmPutResource
|
|
is a convenience function that calls
|
|
.PN XrmStringToBindingQuarkList
|
|
followed by:
|
|
.LP
|
|
.Ds
|
|
XrmQPutResource(database, bindings, quarks, XrmStringToQuark(type), value)
|
|
.De
|
|
If the specifier and type are not in the Host Portable Character Encoding,
|
|
the result is implementation-dependent.
|
|
The value is stored in the database without modification.
|
|
.LP
|
|
.sp
|
|
.IN "XrmQPutResource" "" "@DEF@"
|
|
.sM
|
|
.FD 0
|
|
void XrmQPutResource\^(\^\fIdatabase\fP, \fIbindings\fP, \fIquarks\fP, \
|
|
\fItype\fP, \fIvalue\fP\^)
|
|
.br
|
|
XrmDatabase *\fIdatabase\fP\^;
|
|
.br
|
|
XrmBindingList \fIbindings\fP\^;
|
|
.br
|
|
XrmQuarkList \fIquarks\fP\^;
|
|
.br
|
|
XrmRepresentation \fItype\fP\^;
|
|
.br
|
|
XrmValue *\fIvalue\fP\^;
|
|
.FN
|
|
.IP \fIdatabase\fP 1i
|
|
Specifies the resource database.
|
|
.IP \fIbindings\fP 1i
|
|
Specifies a list of bindings.
|
|
.IP \fIquarks\fP 1i
|
|
Specifies the complete or partial name or the class list of the resource.
|
|
.IP \fItype\fP 1i
|
|
Specifies the type of the resource.
|
|
.IP \fIvalue\fP 1i
|
|
Specifies the value of the resource, which is specified as a string.
|
|
.LP
|
|
.eM
|
|
If database contains NULL,
|
|
.PN XrmQPutResource
|
|
creates a new database and returns a pointer to it.
|
|
If a resource entry with the identical bindings and quarks already
|
|
exists in the database, the previous type and value are replaced by the new
|
|
specified type and value.
|
|
The value is stored in the database without modification.
|
|
.LP
|
|
.sp
|
|
To add a resource that is specified as a string, use
|
|
.PN XrmPutStringResource .
|
|
.IN "XrmPutStringResource" "" "@DEF@"
|
|
.sM
|
|
.FD 0
|
|
void XrmPutStringResource\^(\^\fIdatabase\fP, \fIspecifier\fP, \fIvalue\fP\^)
|
|
.br
|
|
XrmDatabase *\fIdatabase\fP\^;
|
|
.br
|
|
char *\fIspecifier\fP\^;
|
|
.br
|
|
char *\fIvalue\fP\^;
|
|
.FN
|
|
.IP \fIdatabase\fP 1i
|
|
Specifies the resource database.
|
|
.IP \fIspecifier\fP 1i
|
|
Specifies a complete or partial specification of the resource.
|
|
.IP \fIvalue\fP 1i
|
|
Specifies the value of the resource, which is specified as a string.
|
|
.LP
|
|
.eM
|
|
If database contains NULL,
|
|
.PN XrmPutStringResource
|
|
creates a new database and returns a pointer to it.
|
|
.PN XrmPutStringResource
|
|
adds a resource with the specified value to the specified database.
|
|
.PN XrmPutStringResource
|
|
is a convenience function that first calls
|
|
.PN XrmStringToBindingQuarkList
|
|
on the specifier and then calls
|
|
.PN XrmQPutResource ,
|
|
using a ``String'' representation type.
|
|
If the specifier is not in the Host Portable Character Encoding,
|
|
the result is implementation-dependent.
|
|
The value is stored in the database without modification.
|
|
.LP
|
|
.sp
|
|
To add a string resource using quarks as a specification, use
|
|
.PN XrmQPutStringResource .
|
|
.IN "XrmQPutStringResource" "" "@DEF@"
|
|
.sM
|
|
.FD 0
|
|
void XrmQPutStringResource\^(\^\fIdatabase\fP, \fIbindings\fP, \fIquarks\fP, \
|
|
\fIvalue\fP\^)
|
|
.br
|
|
XrmDatabase *\fIdatabase\fP\^;
|
|
.br
|
|
XrmBindingList \fIbindings\fP\^;
|
|
.br
|
|
XrmQuarkList \fIquarks\fP\^;
|
|
.br
|
|
char *\fIvalue\fP\^;
|
|
.FN
|
|
.IP \fIdatabase\fP 1i
|
|
Specifies the resource database.
|
|
.IP \fIbindings\fP 1i
|
|
Specifies a list of bindings.
|
|
.IP \fIquarks\fP 1i
|
|
Specifies the complete or partial name or the class list of the resource.
|
|
.IP \fIvalue\fP 1i
|
|
Specifies the value of the resource, which is specified as a string.
|
|
.LP
|
|
.eM
|
|
If database contains NULL,
|
|
.PN XrmQPutStringResource
|
|
creates a new database and returns a pointer to it.
|
|
.PN XrmQPutStringResource
|
|
is a convenience routine that constructs an
|
|
.PN XrmValue
|
|
for the value string (by calling
|
|
.PN strlen
|
|
to compute the size) and
|
|
then calls
|
|
.PN XrmQPutResource ,
|
|
using a ``String'' representation type.
|
|
The value is stored in the database without modification.
|
|
.LP
|
|
.sp
|
|
To add a single resource entry that is specified as a string that contains
|
|
both a name and a value, use
|
|
.PN XrmPutLineResource .
|
|
.IN "XrmPutLineResource" "" "@DEF@"
|
|
.sM
|
|
.FD 0
|
|
void XrmPutLineResource\^(\^\fIdatabase\fP, \fIline\fP\^)
|
|
.br
|
|
XrmDatabase *\fIdatabase\fP\^;
|
|
.br
|
|
char *\fIline\fP\^;
|
|
.FN
|
|
.IP \fIdatabase\fP 1i
|
|
Specifies the resource database.
|
|
.IP \fIline\fP 1i
|
|
Specifies the resource name and value pair as a single string.
|
|
.LP
|
|
.eM
|
|
If database contains NULL,
|
|
.PN XrmPutLineResource
|
|
creates a new database and returns a pointer to it.
|
|
.PN XrmPutLineResource
|
|
adds a single resource entry to the specified database.
|
|
The line should be in valid ResourceLine format (see section 15.1)
|
|
terminated by a newline or null character;
|
|
the database that results from using a string
|
|
with incorrect syntax is implementation-dependent.
|
|
The string is parsed in the locale of the database.
|
|
If the
|
|
.PN ResourceName
|
|
is not in the Host Portable Character Encoding,
|
|
the result is implementation-dependent.
|
|
Note that comment lines are not stored.
|
|
.NH 2
|
|
Enumerating Database Entries
|
|
.XS
|
|
\*(SN Enumerating Database Entries
|
|
.XE
|
|
.LP
|
|
To enumerate the entries of a database, use
|
|
.PN XrmEnumerateDatabase .
|
|
.IN "XrmEnumerateDatabase" "" "@DEF@"
|
|
.sM
|
|
.TS
|
|
lw(.5i) lw(2i) lw(2.5i).
|
|
T{
|
|
#define
|
|
T} T{
|
|
.PN XrmEnumAllLevels
|
|
T} T{
|
|
0
|
|
T}
|
|
T{
|
|
#define
|
|
T} T{
|
|
.PN XrmEnumOneLevel
|
|
T} T{
|
|
1
|
|
T}
|
|
.TE
|
|
.FD 0
|
|
Bool XrmEnumerateDatabase\^(\^\fIdatabase\fP, \fIname_prefix\fP, \fIclass_prefix\fP, \fImode\fP, \fIproc\fP, \fIarg\fP\^)
|
|
.br
|
|
XrmDatabase \fIdatabase\fP\^;
|
|
.br
|
|
XrmNameList \fIname_prefix\fP\^;
|
|
.br
|
|
XrmClassList \fIclass_prefix\fP\^;
|
|
.br
|
|
int \fImode\fP\^;
|
|
.br
|
|
Bool (\^*\fIproc\fP\^)\^(\^)\^;
|
|
.br
|
|
XPointer \fIarg\fP\^;
|
|
.FN
|
|
.IP \fIdatabase\fP 1i
|
|
Specifies the resource database.
|
|
.IP \fIname_prefix\fP 1i
|
|
Specifies the resource name prefix.
|
|
.IP \fIclass_prefix\fP 1i
|
|
Specifies the resource class prefix.
|
|
.IP \fImode\fP 1i
|
|
Specifies the number of levels to enumerate.
|
|
.IP \fIproc\fP 1i
|
|
Specifies the procedure that is to be called for each matching entry.
|
|
.IP \fIarg\fP 1i
|
|
Specifies the user-supplied argument that will be passed to the procedure.
|
|
.LP
|
|
.eM
|
|
The
|
|
.PN XrmEnumerateDatabase
|
|
function calls the specified procedure for each resource in the database
|
|
that would match some completion of the given name/class resource prefix.
|
|
The order in which resources are found is implementation-dependent.
|
|
If mode is
|
|
.PN XrmEnumOneLevel ,
|
|
a resource must match the given name/class prefix with
|
|
just a single name and class appended. If mode is
|
|
.PN XrmEnumAllLevels ,
|
|
the resource must match the given name/class prefix with one or more names and
|
|
classes appended.
|
|
If the procedure returns
|
|
.PN True ,
|
|
the enumeration terminates and the function returns
|
|
.PN True .
|
|
If the procedure always returns
|
|
.PN False ,
|
|
all matching resources are enumerated and the function returns
|
|
.PN False .
|
|
.LP
|
|
The procedure is called with the following arguments:
|
|
.LP
|
|
.\" Start marker code here
|
|
.Ds 0
|
|
.TA .5i 3i
|
|
.ta .5i 3i
|
|
(*\fIproc\fP\^)(\^\fIdatabase\fP, \fIbindings\fP, \fIquarks\fP, \fItype\fP, \fIvalue\fP, \fIarg\fP\^)
|
|
XrmDatabase *\fIdatabase\fP\^;
|
|
XrmBindingList \fIbindings\fP\^;
|
|
XrmQuarkList \fIquarks\fP\^;
|
|
XrmRepresentation *\fItype\fP\^;
|
|
XrmValue *\fIvalue\fP\^;
|
|
XPointer \fIarg\fP\^;
|
|
.De
|
|
.\" End marker code here
|
|
.LP
|
|
The bindings and quarks lists are terminated by
|
|
.PN NULLQUARK .
|
|
Note that pointers
|
|
to the database and type are passed, but these values should not be modified.
|
|
.LP
|
|
The procedure must not modify the database.
|
|
If Xlib has been initialized for threads, the procedure is called with
|
|
the database locked and the result of a call by the procedure to any
|
|
Xlib function using the same database is not defined.
|
|
.NH 2
|
|
Parsing Command Line Options
|
|
.XS
|
|
\*(SN Parsing Command Line Options
|
|
.XE
|
|
.LP
|
|
The
|
|
.PN XrmParseCommand
|
|
function can be used to parse the command line arguments to a program
|
|
and modify a resource database with selected entries from the command line.
|
|
.LP
|
|
.IN "XrmOptionKind" "" "@DEF@"
|
|
.sM
|
|
.Ds 0
|
|
.TA .5i 2.5i
|
|
.ta .5i 2.5i
|
|
typedef enum {
|
|
XrmoptionNoArg, /* Value is specified in XrmOptionDescRec.value */
|
|
XrmoptionIsArg, /* Value is the option string itself */
|
|
XrmoptionStickyArg, /* Value is characters immediately following option */
|
|
XrmoptionSepArg, /* Value is next argument in argv */
|
|
XrmoptionResArg, /* Resource and value in next argument in argv */
|
|
XrmoptionSkipArg, /* Ignore this option and the next argument in argv */
|
|
XrmoptionSkipLine, /* Ignore this option and the rest of argv */
|
|
XrmoptionSkipNArgs /* Ignore this option and the next
|
|
\ \ \ XrmOptionDescRec.value arguments in argv */
|
|
} XrmOptionKind;
|
|
.De
|
|
.LP
|
|
.eM
|
|
Note that
|
|
.PN XrmoptionSkipArg
|
|
is equivalent to
|
|
.PN XrmoptionSkipNArgs
|
|
with the
|
|
.PN XrmOptionDescRec.value
|
|
field containing the value one.
|
|
Note also that the value zero for
|
|
.PN XrmoptionSkipNArgs
|
|
indicates that only the option itself is to be skipped.
|
|
.LP
|
|
.IN "XrmOptionDescRec" "" "@DEF@"
|
|
.sM
|
|
.Ds 0
|
|
.TA .5i 2.5i
|
|
.ta .5i 2.5i
|
|
typedef struct {
|
|
char *option; /* Option specification string in argv */
|
|
char *specifier; /* Binding and resource name (sans application name) */
|
|
XrmOptionKind argKind; /* Which style of option it is */
|
|
XPointer value; /* Value to provide if XrmoptionNoArg or
|
|
\ \ \ XrmoptionSkipNArgs */
|
|
} XrmOptionDescRec, *XrmOptionDescList;
|
|
.De
|
|
.LP
|
|
.eM
|
|
.sp
|
|
To load a resource database from a C command line, use
|
|
.PN XrmParseCommand .
|
|
.IN "XrmParseCommand" "" "@DEF@"
|
|
.sM
|
|
.FD 0
|
|
void XrmParseCommand\^(\^\fIdatabase\fP\^, \^\fItable\fP\^, \^\fItable_count\fP\^, \
|
|
\^\fIname\fP\^, \^\fIargc_in_out\fP\^, \^\fIargv_in_out\fP\^)
|
|
.br
|
|
XrmDatabase *\fIdatabase\fP\^;
|
|
.br
|
|
XrmOptionDescList \fItable\fP\^;
|
|
.br
|
|
int \fItable_count\fP\^;
|
|
.br
|
|
char *\fIname\fP\^;
|
|
.br
|
|
int *\fIargc_in_out\fP\^;
|
|
.br
|
|
char **\fIargv_in_out\fP\^;
|
|
.FN
|
|
.IP \fIdatabase\fP 1i
|
|
Specifies the resource database.
|
|
.IP \fItable\fP 1i
|
|
Specifies the table of command line arguments to be parsed.
|
|
.IP \fItable_count\fP 1i
|
|
Specifies the number of entries in the table.
|
|
.IP \fIname\fP 1i
|
|
Specifies the application name.
|
|
.IP \fIargc_in_out\fP 1i
|
|
Specifies the number of arguments and returns the number of remaining arguments.
|
|
.IP \fIargv_in_out\fP 1i
|
|
Specifies the command line arguments
|
|
and returns the remaining arguments.
|
|
.LP
|
|
.eM
|
|
The
|
|
.PN XrmParseCommand
|
|
function parses an (argc, argv) pair according to the specified option table,
|
|
loads recognized options into the specified database with type ``String,''
|
|
and modifies the (argc, argv) pair to remove all recognized options.
|
|
If database contains NULL,
|
|
.PN XrmParseCommand
|
|
creates a new database and returns a pointer to it.
|
|
Otherwise, entries are added to the database specified.
|
|
If a database is created, it is created in the current locale.
|
|
.LP
|
|
The specified table is used to parse the command line.
|
|
Recognized options in the table are removed from argv,
|
|
and entries are added to the specified resource database
|
|
in the order they occur in argv.
|
|
The table entries contain information on the option string,
|
|
the option name, the style of option,
|
|
and a value to provide if the option kind is
|
|
.PN XrmoptionNoArg .
|
|
The option names are compared byte-for-byte to arguments in argv,
|
|
independent of any locale.
|
|
The resource values given in the table are stored in the resource database
|
|
without modification.
|
|
All resource database entries are created
|
|
using a ``String'' representation type.
|
|
The argc argument specifies the number of arguments in argv
|
|
and is set on return to the remaining number of arguments that were not parsed.
|
|
The name argument should be the name of your application
|
|
for use in building the database entry.
|
|
The name argument is prefixed to the resourceName in the option table
|
|
before storing a database entry.
|
|
The name argument is treated as a single component, even if it
|
|
has embedded periods.
|
|
No separating (binding) character is inserted,
|
|
so the table must contain either a period (.) or an asterisk (*)
|
|
as the first character in each resourceName entry.
|
|
To specify a more completely qualified resource name,
|
|
the resourceName entry can contain multiple components.
|
|
If the name argument and the resourceNames are not in the
|
|
Host Portable Character Encoding,
|
|
the result is implementation-dependent.
|
|
.LP
|
|
The following provides a sample option table:
|
|
.LP
|
|
.Ds 0
|
|
.TA 1.25i 3.25i 4.75i
|
|
.ta 1.25i 3.25i 4.75i
|
|
static XrmOptionDescRec opTable[] = {
|
|
{"\-background", "*background", XrmoptionSepArg, (XPointer) NULL},
|
|
{"\-bd", "*borderColor", XrmoptionSepArg, (XPointer) NULL},
|
|
{"\-bg", "*background", XrmoptionSepArg, (XPointer) NULL},
|
|
{"\-borderwidth", "*TopLevelShell.borderWidth", XrmoptionSepArg, (XPointer) NULL},
|
|
{"\-bordercolor", "*borderColor", XrmoptionSepArg, (XPointer) NULL},
|
|
{"\-bw", "*TopLevelShell.borderWidth", XrmoptionSepArg, (XPointer) NULL},
|
|
{"\-display", ".display", XrmoptionSepArg, (XPointer) NULL},
|
|
{"\-fg", "*foreground", XrmoptionSepArg, (XPointer) NULL},
|
|
{"\-fn", "*font", XrmoptionSepArg, (XPointer) NULL},
|
|
{"\-font", "*font", XrmoptionSepArg, (XPointer) NULL},
|
|
{"\-foreground", "*foreground", XrmoptionSepArg, (XPointer) NULL},
|
|
{"\-geometry", ".TopLevelShell.geometry", XrmoptionSepArg, (XPointer) NULL},
|
|
{"\-iconic", ".TopLevelShell.iconic", XrmoptionNoArg, (XPointer) "on"},
|
|
{"\-name", ".name", XrmoptionSepArg, (XPointer) NULL},
|
|
{"\-reverse", "*reverseVideo", XrmoptionNoArg, (XPointer) "on"},
|
|
{"\-rv", "*reverseVideo", XrmoptionNoArg, (XPointer) "on"},
|
|
{"\-synchronous", "*synchronous", XrmoptionNoArg, (XPointer) "on"},
|
|
{"\-title", ".TopLevelShell.title", XrmoptionSepArg, (XPointer) NULL},
|
|
{"\-xrm", NULL, XrmoptionResArg, (XPointer) NULL},
|
|
};
|
|
.De
|
|
.LP
|
|
In this table, if the \-background (or \-bg) option is used to set
|
|
background colors, the stored resource specifier matches all
|
|
resources of attribute background.
|
|
If the \-borderwidth option is used,
|
|
the stored resource specifier applies only to border width
|
|
attributes of class TopLevelShell (that is, outer-most windows, including
|
|
pop-up windows).
|
|
If the \-title option is used to set a window name,
|
|
only the topmost application windows receive the resource.
|
|
.LP
|
|
When parsing the command line,
|
|
any unique unambiguous abbreviation for an option name in the table is
|
|
considered a match for the option.
|
|
Note that uppercase and lowercase matter.
|
|
.bp
|