summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoland Mainz <roland.mainz@nrubsig.org>2004-04-10 10:08:42 +0000
committerRoland Mainz <roland.mainz@nrubsig.org>2004-04-10 10:08:42 +0000
commit40967f22d344900087307d6f3eea631ecb4d2c32 (patch)
treea48ff866b43af23726fb39535ea3f2f609d7ff46
parent6cf32b778611e87717724b5aa388b44d0051d0eb (diff)
Resync to 2004-04-10 XORG-RELEASE-1 branch (step 2: Adding missing files
and removing obsolete ones)
-rw-r--r--hw/xfree86/common/xorgHelper.c20
-rw-r--r--hw/xfree86/common/xorgVersion.h51
-rw-r--r--hw/xfree86/doc/man/Xorg.man.pre691
-rw-r--r--hw/xfree86/doc/man/xorg.conf.man.pre1872
-rw-r--r--hw/xfree86/getconfig/xorg.cfg50
-rw-r--r--hw/xfree86/utils/xorgcfg/XOrgCfg.pre1851
-rw-r--r--hw/xfree86/utils/xorgcfg/xorgcfg.man.pre152
-rw-r--r--hw/xfree86/utils/xorgconfig/xorgconfig.c2906
-rw-r--r--hw/xfree86/utils/xorgconfig/xorgconfig.man.pre22
-rw-r--r--hw/xfree86/xorgconf.cpp626
10 files changed, 8241 insertions, 0 deletions
diff --git a/hw/xfree86/common/xorgHelper.c b/hw/xfree86/common/xorgHelper.c
new file mode 100644
index 000000000..998725ca1
--- /dev/null
+++ b/hw/xfree86/common/xorgHelper.c
@@ -0,0 +1,20 @@
+/* $XdotOrg: xc/programs/Xserver/hw/xfree86/common/xorgHelper.c,v 1.1.6.1 2004/04/02 21:47:17 eich Exp $ */
+
+#include "X.h"
+#include "os.h"
+#include "servermd.h"
+#include "pixmapstr.h"
+#include "windowstr.h"
+#include "propertyst.h"
+#include "gcstruct.h"
+#include "loaderProcs.h"
+#include "xf86.h"
+#include "xf86Priv.h"
+#include "xorgVersion.h"
+
+
+CARD32
+xorgGetVersion()
+{
+ return XORG_VERSION_CURRENT;
+}
diff --git a/hw/xfree86/common/xorgVersion.h b/hw/xfree86/common/xorgVersion.h
new file mode 100644
index 000000000..018bbdb0d
--- /dev/null
+++ b/hw/xfree86/common/xorgVersion.h
@@ -0,0 +1,51 @@
+/* $XdotOrg: xc/programs/Xserver/hw/xfree86/xorgVersion.h,v 1.1.6.1 2004/04/02 21:47:17 eich Exp $ */
+
+/*
+ * Copyright (c) 2004, X.Org Foundation
+ *
+ * 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 COPYRIGHT HOLDER(S) OR AUTHOR(S) 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 copyright holder(s)
+ * and author(s) 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 copyright holder(s) and author(s).
+ */
+
+#ifndef XORG_VERSION_H
+# define XORG_VERSION_H
+
+# ifndef XORG_VERSION_CURRENT
+# error
+# endif
+
+# define XORG_VERSION_NUMERIC(major,minor,patch,snap,dummy) \
+ (((major) * 10000000) + ((minor) * 100000) + ((patch) * 1000) + snap)
+
+# define XORG_GET_MAJOR_VERSION(vers) ((vers) / 10000000)
+# define XORG_GET_MINOR_VERSION(vers) (((vers) % 10000000) / 100000)
+# define XORG_GET_PATCH_VERSION(vers) (((vers) % 100000) / 1000)
+# define XORG_GET_SNAP_VERSION(vers) ((vers) % 1000)
+
+# define XORG_VERSION_MAJOR XORG_GET_MAJOR_VERSION(XORG_VERSION_CURRENT)
+# define XORG_VERSION_MINOR XORG_GET_MINOR_VERSION(XORG_VERSION_CURRENT)
+# define XORG_VERSION_PATCH XORG_GET_PATCH_VERSION(XORG_VERSION_CURRENT)
+# define XORG_VERSION_SNAP XORG_GET_PATCH_VERSION(XORG_VERSION_CURRENT)
+
+#endif
+/* $XdotOrg: xc/programs/Xserver/hw/xfree86/xorgVersion.h,v 1.1.6.1 2004/04/02 21:47:17 eich Exp $ */
diff --git a/hw/xfree86/doc/man/Xorg.man.pre b/hw/xfree86/doc/man/Xorg.man.pre
new file mode 100644
index 000000000..44c42e53f
--- /dev/null
+++ b/hw/xfree86/doc/man/Xorg.man.pre
@@ -0,0 +1,691 @@
+.\" $XdotOrg: xc/programs/Xserver/hw/xfree86/Xorg.man,v 1.1.6.1 2004/04/02 21:47:16 eich Exp $
+.TH __xservername__ __appmansuffix__ __vendorversion__
+.SH NAME
+__xservername__ - X11R6 X server
+.SH SYNOPSIS
+.B __xservername__
+.RI [\fB:\fP display ]
+.RI [ option
+.IR ... ]
+.SH DESCRIPTION
+.B __xservername__
+is a full featured X server that was originally designed for UNIX and
+UNIX-like operating systems running on Intel x86 hardware. It now runs
+on a wider range of hardware and OS platforms.
+.PP
+This work was derived from
+.I "XFree86\ 4.4rc2"
+by the X.Org Foundation.
+The XFree86 4.4rc2 release was originally derived from
+.I "X386\ 1.2"
+by Thomas Roell which was contributed to X11R5 by Snitily Graphics
+Consulting Service. The
+.B __xservername__
+server architecture includes
+among many other things a loadable module system derived from code
+donated by Metro Link, Inc. The current __xservername__ release is compatible
+with X11R6.6.
+.SH PLATFORMS
+.PP
+.B __xservername__
+operates under a wide range of operating systems and hardware platforms.
+The Intel x86 (IA32) architecture is the most widely supported hardware
+platform. Other hardware platforms include Compaq Alpha, Intel IA64,
+SPARC and PowerPC. The most widely supported operating systems are the
+free/OpenSource UNIX-like systems such as Linux, FreeBSD, NetBSD and
+OpenBSD. Commercial UNIX operating systems such as Solaris (x86) and
+UnixWare are also supported. Other supported operating systems include
+LynxOS, and GNU Hurd. Darwin and Mac OS X are supported with the
+XDarwin(1) X server. Win32/Cygwin is supported with the XWin X server.
+.PP
+.SH "NETWORK CONNECTIONS"
+.B __xservername__
+supports connections made using the following reliable
+byte-streams:
+.TP 4
+.I "Local"
+On most platforms, the "Local" connection type is a UNIX-domain socket.
+On some System V platforms, the "local" connection types also include
+STREAMS pipes, named pipes, and some other mechanisms.
+.TP 4
+.I TCP\/IP
+.B __xservername__
+listens on port
+.RI 6000+ n ,
+where
+.I n
+is the display number. This connection type can be disabled with the
+.B \-nolisten
+option (see the Xserver(1) man page for details).
+.SH "ENVIRONMENT VARIABLES"
+For operating systems that support local connections other than Unix
+Domain sockets (SVR3 and SVR4), there is a compiled-in list specifying
+the order in which local connections should be attempted. This list
+can be overridden by the
+.I XLOCAL
+environment variable described below. If the display name indicates a
+best-choice connection should be made (e.g.
+.BR :0.0 ),
+each connection mechanism is tried until a connection succeeds or no
+more mechanisms are available. Note: for these OSs, the Unix Domain
+socket connection is treated differently from the other local connection
+types. To use it the connection must be made to
+.BR unix:0.0 .
+.PP
+The
+.I XLOCAL
+environment variable should contain a list of one more
+more of the following:
+.PP
+.RS 8
+.nf
+NAMED
+PTS
+SCO
+ISC
+.fi
+.RE
+.PP
+which represent SVR4 Named Streams pipe, Old-style USL Streams pipe,
+SCO XSight Streams pipe, and ISC Streams pipe, respectively. You can
+select a single mechanism (e.g.
+.IR XLOCAL=NAMED ),
+or an ordered list (e.g. \fIXLOCAL="NAMED:PTS:SCO"\fP).
+his variable overrides the compiled-in defaults. For SVR4 it is
+recommended that
+.I NAMED
+be the first preference connection. The default setting is
+.IR PTS:NAMED:ISC:SCO .
+.PP
+To globally override the compiled-in defaults, you should define (and
+export if using
+.B sh
+or
+.BR ksh )
+.I XLOCAL
+globally. If you use startx(1) or xinit(1), the definition should be
+at the top of your
+.I .xinitrc
+file. If you use xdm(1), the definitions should be early on in the
+.I __projectroot__/lib/X11/xdm/Xsession
+script.
+.SH OPTIONS
+.B __xservername__
+supports several mechanisms for supplying/obtaining configuration and
+run-time parameters: command line options, environment variables, the
+__xconfigfile__(__filemansuffix__) configuration file, auto-detection, and
+fallback defaults. When the same information is supplied in more than
+one way, the highest precedence mechanism is used. The list of mechanisms
+is ordered from highest precedence to lowest. Note that not all parameters
+can be supplied via all methods. The available command line options
+and environment variables (and some defaults) are described here and in
+the Xserver(1) manual page. Most configuration file parameters, with
+their defaults, are described in the __xconfigfile__(__filemansuffix__) manual
+page. Driver and module specific configuration parameters are described
+in the relevant driver or module manual page.
+.PP
+In addition to the normal server options described in the Xserver(1)
+manual page,
+.B __xservername__
+accepts the following command line switches:
+.TP 8
+.BI vt XX
+.I XX
+specifies the Virtual Terminal device number which
+.B __xservername__
+will use. Without this option,
+.B __xservername__
+will pick the first available Virtual Terminal that it can locate. This
+option applies only to platforms such as Linux, BSD, SVR3 and SVR4, that
+have virtual terminal support.
+.TP
+.B \-allowMouseOpenFail
+Allow the server to start up even if the mouse device can't be opened
+or initialised. This is equivalent to the
+.B AllowMouseOpenFail
+__xconfigfile__(__filemansuffix__) file option.
+.TP 8
+.B \-allowNonLocalModInDev
+Allow changes to keyboard and mouse settings from non-local clients.
+By default, connections from non-local clients are not allowed to do
+this. This is equivalent to the
+.B AllowNonLocalModInDev
+__xconfigfile__(__filemansuffix__) file option.
+.TP 8
+.B \-allowNonLocalXvidtune
+Make the VidMode extension available to remote clients. This allows
+the xvidtune client to connect from another host. This is equivalent
+to the
+.B AllowNonLocalXvidtune
+__xconfigfile__(__filemansuffix__) file option. By default non-local
+connections are not allowed.
+.TP 8
+.BI \-bgamma " value"
+Set the blue gamma correction.
+.I value
+must be between 0.1 and 10.
+The default is 1.0. Not all drivers support this. See also the
+.BR \-gamma ,
+.BR \-rgamma ,
+and
+.B \-ggamma
+options.
+.TP 8
+.BI \-bpp " n"
+No longer supported. Use
+.B \-depth
+to set the color depth, and use
+.B \-fbbpp
+if you really need to force a non-default framebuffer (hardware) pixel
+format.
+.TP
+.B \-configure
+When this option is specified, the
+.B __xservername__
+server loads all video driver modules, probes for available hardware,
+and writes out an initial __xconfigfile__(__filemansuffix__) file based on
+what was detected. This option currently has some problems on some
+platforms, but in most cases it is a good way to bootstrap the
+configuration process. This option is only available when the server
+is run as root (i.e, with real-uid 0).
+.TP 8
+.BI "\-crt /dev/tty" XX
+SCO only. This is the same as the
+.B vt
+option, and is provided for compatibility with the native SCO X server.
+.TP 8
+.BI \-depth " n"
+Sets the default color depth. Legal values are 1, 4, 8, 15, 16, and
+24. Not all drivers support all values.
+.TP 8
+.B \-disableModInDev
+Disable dynamic modification of input device settings. This is equivalent
+to the
+.B DisableModInDev
+__xconfigfile__(__filemansuffix__) file option.
+.TP 8
+.B \-disableVidMode
+Disable the the parts of the VidMode extension (used by the xvidtune
+client) that can be used to change the video modes. This is equivalent
+to the
+.B DisableVidModeExtension
+__xconfigfile__(__filemansuffix__) file option.
+.TP 8
+.B \-fbbpp \fIn\fP
+Sets the number of framebuffer bits per pixel. You should only set this
+if you're sure it's necessary; normally the server can deduce the correct
+value from
+.B \-depth
+above. Useful if you want to run a depth 24 configuration with a 24
+bpp framebuffer rather than the (possibly default) 32 bpp framebuffer
+(or vice versa). Legal values are 1, 8, 16, 24, 32. Not all drivers
+support all values.
+.TP 8
+.B \-flipPixels
+Swap the default values for the black and white pixels.
+.TP 8
+.BI \-gamma " value"
+Set the gamma correction.
+.I value
+must be between 0.1 and 10. The default is 1.0. This value is applied
+equally to the R, G and B values. Those values can be set independently
+with the
+.BR \-rgamma ,
+.BR \-bgamma ,
+and
+.B \-ggamma
+options. Not all drivers support this.
+.TP 8
+.BI \-ggamma " value"
+Set the green gamma correction.
+.I value
+must be between 0.1 and 10. The default is 1.0. Not all drivers support
+this. See also the
+.BR \-gamma ,
+.BR \-rgamma ,
+and
+.B \-bgamma
+options.
+.TP 8
+.B \-ignoreABI
+The
+.B __xservername__
+server checks the ABI revision levels of each module that it loads. It
+will normally refuse to load modules with ABI revisions that are newer
+than the server's. This is because such modules might use interfaces
+that the server does not have. When this option is specified, mismatches
+like this are downgraded from fatal errors to warnings. This option
+should be used with care.
+.TP 8
+.B \-keeptty
+Prevent the server from detaching its initial controlling terminal.
+This option is only useful when debugging the server. Not all platforms
+support (or can use) this option.
+.TP 8
+.BI \-keyboard " keyboard-name"
+Use the __xconfigfile__(__filemansuffix__) file
+.B InputDevice
+section called
+.I keyboard-name
+as the core keyboard. This option is ignored when the
+.B Layout
+section specifies a core keyboard. In the absence of both a Layout
+section and this option, the first relevant
+.B InputDevice
+section is used for the core keyboard.
+.TP 8
+.BI \-layout " layout-name"
+Use the __xconfigfile__(__filemansuffix__) file
+.B Layout
+section called
+.IR layout-name .
+By default the first
+.B Layout
+section is used.
+.TP 8
+.BI \-logfile " filename"
+Use the file called
+.I filename
+as the
+.B __xservername__
+server log file. The default log file is
+.BI __logdir__/__xservername__. n .log
+on most platforms, where
+.I n
+is the display number of the
+.B __xservername__
+server. The default may be in a different directory on some platforms.
+This option is only available when the server is run as root (i.e, with
+real-uid 0).
+.TP 8
+.BR \-logverbose " [\fIn\fP]"
+Sets the verbosity level for information printed to the
+.B __xservername__
+server log file. If the
+.I n
+value isn't supplied, each occurrence of this option increments the log
+file verbosity level. When the
+.I n
+value is supplied, the log file verbosity level is set to that value.
+The default log file verbosity level is 3.
+.TP 8
+.BI \-modulepath " searchpath"
+Set the module search path to
+.IR searchpath .
+.I searchpath
+is a comma separated list of directories to search for
+.B __xservername__
+server modules. This option is only available when the server is run
+as root (i.e, with real-uid 0).
+.TP 8
+.B \-nosilk
+Disable Silken Mouse support.
+.TP 8
+.B \-pixmap24
+Set the internal pixmap format for depth 24 pixmaps to 24 bits per pixel.
+The default is usually 32 bits per pixel. There is normally little
+reason to use this option. Some client applications don't like this
+pixmap format, even though it is a perfectly legal format. This is
+equivalent to the
+.B Pixmap
+__xconfigfile__(__filemansuffix__) file option.
+.TP 8
+.B \-pixmap32
+Set the internal pixmap format for depth 24 pixmaps to 32 bits per pixel.
+This is usually the default. This is equivalent to the
+.B Pixmap
+__xconfigfile__(__filemansuffix__) file option.
+.TP 8
+.BI \-pointer " pointer-name"
+Use the __xconfigfile__(__filemansuffix__) file
+.B InputDevice
+section called
+.I pointer-name
+as the core pointer. This option is ignored when the
+.B Layout
+section specifies a core pointer. In the absence of both a Layout
+section and this option, the first relevant
+.B InputDevice
+section is used for the core pointer.
+.TP 8
+.B \-probeonly
+Causes the server to exit after the device probing stage. The
+__xconfigfile__(__filemansuffix__) file is still used when this option is
+given, so information that can be auto-detected should be commented out.
+.TP 8
+.B \-quiet
+Suppress most informational messages at startup. The verbosity level
+is set to zero.
+.TP 8
+.BI \-rgamma " value"
+Set the red gamma correction.
+.I value
+must be between 0.1 and 10. The default is 1.0. Not all drivers support
+this. See also the
+.BR \-gamma ,
+.BR \-bgamma ,
+and
+.B \-ggamma
+options.
+.TP 8
+.B \-scanpci
+When this option is specified, the
+.B __xservername__
+server scans the PCI bus, and prints out some information about each
+device that was detected. See also scanpci(1) and pcitweak(1).
+.TP 8
+.BI \-screen " screen-name"
+Use the __xconfigfile__(__filemansuffix__) file
+.B Screen
+section called
+.IR screen-name .
+By default the screens referenced by the default
+.B Layout
+section are used, or the first
+.B Screen
+section when there are no
+.B Layout
+sections.
+.TP 8
+.B \-showconfig
+This is the same as the
+.B \-version
+option, and is included for compatibility reasons. It may be removed
+in a future release, so the
+.B \-version
+option should be used instead.
+.TP 8
+.BI \-weight " nnn"
+Set RGB weighting at 16 bpp. The default is 565. This applies only to
+those drivers which support 16 bpp.
+.TP 8
+.BR \-verbose " [\fIn\fP]"
+Sets the verbosity level for information printed on stderr. If the
+.I n
+value isn't supplied, each occurrence of this option increments the
+verbosity level. When the
+.I n
+value is supplied, the verbosity level is set to that value. The default
+verbosity level is 0.
+.TP 8
+.B \-version
+Print out the server version, patchlevel, release date, the operating
+system/platform it was built on, and whether it includes module loader
+support.
+.TP 8
+.BI \-config " file"
+Read the server configuration from
+.IR file .
+This option will work for any file when the server is run as root (i.e,
+with real-uid 0), or for files relative to a directory in the config
+search path for all other users.
+.SH "KEYBOARD"
+.PP
+The
+.B __xservername__
+server is normally configured to recognize various special combinations
+of key presses that instruct the server to perform some action, rather
+than just sending the key press event to a client application. The
+default XKEYBOARD keymap defines the key combinations listed below.
+The server also has these key combinations builtin to its event handler
+for cases where the XKEYBOARD extension is not being used. When using
+the XKEYBOARD extension, which key combinations perform which actions
+is completely configurable.
+.PP
+For more information about when the builtin event handler
+is used to recognize the special key combinations, see
+the documentation on the
+.B HandleSpecialKeys
+option in the __xconfigfile__(__filemansuffix__) man page.
+.PP
+The special combinations of key presses recognized directly
+by
+.B __xservername__
+are:
+.TP 8
+.B Ctrl+Alt+Backspace
+Immediately kills the server -- no questions asked. This can be disabled
+with the
+.B DontZap
+__xconfigfile__(__filemansuffix__) file option.
+.TP 8
+.B Ctrl+Alt+Keypad-Plus
+Change video mode to next one specified in the configuration file.
+This can be disabled with the
+.B DontZoom
+__xconfigfile__(__filemansuffix__) file option.
+.TP 8
+.B Ctrl+Alt+Keypad-Minus
+Change video mode to previous one specified in the configuration file.
+This can be disabled with the
+.B DontZoom
+__xconfigfile__(__filemansuffix__) file option.
+.TP 8
+.B Ctrl+Alt+Keypad-Multiply
+Not treated specially by default. If the
+.B AllowClosedownGrabs
+__xconfigfile__(__filemansuffix__) file option is specified, this key sequence
+kills clients with an active keyboard or mouse grab as well as killing any
+application that may have locked the server, normally using the
+XGrabServer(__libmansuffix__) Xlib function.
+.TP 8
+.B Ctrl+Alt+Keypad-Divide
+Not treated specially by default. If the
+.B AllowDeactivateGrabs
+__xconfigfile__(__filemansuffix__) file option is specified, this key sequence
+deactivates any active keyboard and mouse grabs.
+.TP 8
+.B Ctrl+Alt+F1...F12
+For BSD and Linux systems with virtual terminal support, these keystroke
+combinations are used to switch to virtual terminals 1 through 12,
+respectively. This can be disabled with the
+.B DontVTSwitch
+__xconfigfile__(__filemansuffix__) file option.
+.SH CONFIGURATION
+.B __xservername__
+typically uses a configuration file called
+.B __xconfigfile__
+for its initial setup.
+Refer to the __xconfigfile__(__filemansuffix__) manual page for information
+about the format of this file.
+.PP
+Starting with version 4.4,
+.B __xservername__
+has a mechanism for automatically generating a built-in configuration
+at run-time when no
+.B __xconfigfile__
+file is present. The current version of this automatic configuration
+mechanism works in three ways.
+.PP
+The first is via enhancements that have made many components of the
+.B __xconfigfile__
+file optional. This means that information that can be probed or
+reasonably deduced doesn't need to be specified explicitly, greatly
+reducing the amount of built-in configuration information that needs to
+be generated at run-time.
+.PP
+The second is to use an external utility called getconfig(1), when
+available, to use meta-configuration information to generate a suitable
+configuration for the primary video device. The meta-configuration
+information can be updated to allow an existing installation to get the
+best out of new hardware or to work around bugs that are found
+post-release.
+.PP
+The third is to have "safe" fallbacks for most configuration information.
+This maximises the likelihood that the
+.B __xservername__
+server will start up in some usable configuration even when information
+about the specific hardware is not available.
+.PP
+The automatic configuration support for __xservername__ is work in progress.
+It is currently aimed at the most popular hardware and software platforms
+supported by __xservername__. Enhancements are planned for future releases.
+.SH FILES
+The
+.B __xservername__
+server config file can be found in a range of locations. These are
+documented fully in the __xconfigfile__(__filemansuffix__) manual page. The
+most commonly used locations are shown here.
+.TP 30
+.B /etc/X11/__xconfigfile__
+Server configuration file.
+.TP 30
+.B /etc/X11/__xconfigfile__-4
+Server configuration file.
+.TP 30
+.B /etc/__xconfigfile__
+Server configuration file.
+.TP 30
+.B __projectroot__/etc/__xconfigfile__
+Server configuration file.
+.TP 30
+.B __projectroot__/lib/X11/__xconfigfile__
+Server configuration file.
+.TP 30
+.BI __logdir__/__xservername__. n .log
+Server log file for display
+.IR n .
+.TP 30
+.B __projectroot__/bin/\(**
+Client binaries.
+.TP 30
+.B __projectroot__/include/\(**
+Header files.
+.TP 30
+.B __projectroot__/lib/\(**
+Libraries.
+.TP 30
+.B __projectroot__/lib/X11/fonts/\(**
+Fonts.
+.TP 30
+.B __projectroot__/lib/X11/rgb.txt
+Color names to RGB mapping.
+.TP 30
+.B __projectroot__/lib/X11/XErrorDB
+Client error message database.
+.TP 30
+.B __projectroot__/lib/X11/app-defaults/\(**
+Client resource specifications.
+.TP 30
+.B __projectroot__/man/man?/\(**
+Manual pages.
+.TP 30
+.BI /etc/X n .hosts
+Initial access control list for display
+.IR n .
+.SH "SEE ALSO"
+X(__miscmansuffix__), Xserver(__appmansuffix__), xdm(__appmansuffix__), xinit(__appmansuffix__),
+__xconfigfile__(__filemansuffix__), xorgconfig(__appmansuffix__), xorgcfg(__appmansuffix__), xvidtune(__appmansuffix__),
+apm(__drivermansuffix__),
+ati(__drivermansuffix__),
+chips(__drivermansuffix__),
+cirrus(__drivermansuffix__),
+cyrix(__drivermansuffix__),
+fbdev(__drivermansuffix__),
+glide(__drivermansuffix__),
+glint(__drivermansuffix__),
+i128(__drivermansuffix__),
+i740(__drivermansuffix__),
+i810(__drivermansuffix__),
+imstt(__drivermansuffix__),
+mga(__drivermansuffix__),
+neomagic(__drivermansuffix__),
+nsc(__drivermansuffix__),
+nv(__drivermansuffix__),
+r128(__drivermansuffix__),
+rendition(__drivermansuffix__),
+s3virge(__drivermansuffix__),
+siliconmotion(__drivermansuffix__),
+sis(__drivermansuffix__),
+sunbw2(__drivermansuffix__),
+suncg14(__drivermansuffix__),
+suncg3(__drivermansuffix__),
+suncg6(__drivermansuffix__),
+sunffb(__drivermansuffix__),
+sunleo(__drivermansuffix__),
+suntcx(__drivermansuffix__),
+tdfx(__drivermansuffix__),
+tga(__drivermansuffix__),
+trident(__drivermansuffix__),
+tseng(__drivermansuffix__),
+v4l(__drivermansuffix__),
+vesa(__drivermansuffix__),
+vga(__drivermansuffix__),
+vmware(__drivermansuffix__),
+.br
+Web site
+.IR <http://www.x.org> .
+
+.SH AUTHORS
+__xservername__ has many contributors world wide. The names of most of them
+can be found in the documentation, CHANGELOG files in the source tree,
+and in the actual source code.
+.PP
+__xservername__ was originally based on XFree86 4.4rc2.
+That was originally based on \fIX386 1.2\fP by Thomas Roell, which
+was contributed to the then X Consortium's X11R5 distribution by SGCS.
+.PP
+__xservername__ is released by the X.org Foundation.
+.PP
+The project that became XFree86 was originally founded in 1992 by
+David Dawes, Glenn Lai, Jim Tsillas and David Wexelblat.
+.PP
+XFree86 was later integrated in the then X Consortium's X11R6 release
+by a group of dedicated XFree86 developers, including the following:
+.PP
+.RS 4
+.nf
+Stuart Anderson \fIanderson@metrolink.com\fP
+Doug Anson \fIdanson@lgc.com\fP
+Gertjan Akkerman \fIakkerman@dutiba.twi.tudelft.nl\fP
+Mike Bernson \fImike@mbsun.mlb.org\fP
+Robin Cutshaw \fIrobin@XFree86.org\fP
+David Dawes \fIdawes@XFree86.org\fP
+Marc Evans \fImarc@XFree86.org\fP
+Pascal Haible \fIhaible@izfm.uni-stuttgart.de\fP
+Matthieu Herrb \fIMatthieu.Herrb@laas.fr\fP
+Dirk Hohndel \fIhohndel@XFree86.org\fP
+David Holland \fIdavidh@use.com\fP
+Alan Hourihane \fIalanh@fairlite.demon.co.uk\fP
+Jeffrey Hsu \fIhsu@soda.berkeley.edu\fP
+Glenn Lai \fIglenn@cs.utexas.edu\fP
+Ted Lemon \fImellon@ncd.com\fP
+Rich Murphey \fIrich@XFree86.org\fP
+Hans Nasten \fInasten@everyware.se\fP
+Mark Snitily \fImark@sgcs.com\fP
+Randy Terbush \fIrandyt@cse.unl.edu\fP
+Jon Tombs \fItombs@XFree86.org\fP
+Kees Verstoep \fIversto@cs.vu.nl\fP
+Paul Vixie \fIpaul@vix.com\fP
+Mark Weaver \fIMark_Weaver@brown.edu\fP
+David Wexelblat \fIdwex@XFree86.org\fP
+Philip Wheatley \fIPhilip.Wheatley@ColumbiaSC.NCR.COM\fP
+Thomas Wolfram \fIwolf@prz.tu-berlin.de\fP
+Orest Zborowski \fIorestz@eskimo.com\fP
+.fi
+.RE
+.PP
+__xservername__ source is available from the FTP server
+\fI<ftp://ftp.x.org/>\fP, and from the X.org
+server \fI<http://www.freedesktop.org/cvs/>\fP. Documentation and other
+information can be found from the X.org web site
+\fI<http://www.x.org/>\fP.
+
+.SH LEGAL
+.PP
+.B __xservername__
+is copyright software, provided under licenses that permit modification
+and redistribution in source and binary form without fee.
+.B __xservername__ is copyright by numerous authors and
+contributors from around the world. Licensing information can be found
+at
+.IR <http://www.x.org> .
+Refer to the source code for specific copyright notices.
+.PP
+.B XFree86(TM)
+is a trademark of The XFree86 Project, Inc.
+.PP
+.B X11(TM)
+and
+.B X Window System(TM)
+are trademarks of The Open Group.
diff --git a/hw/xfree86/doc/man/xorg.conf.man.pre b/hw/xfree86/doc/man/xorg.conf.man.pre
new file mode 100644
index 000000000..79a9ee43e
--- /dev/null
+++ b/hw/xfree86/doc/man/xorg.conf.man.pre
@@ -0,0 +1,1872 @@
+.\" $XdotOrg: xc/programs/Xserver/hw/xfree86/xorg.conf.man,v 1.1.6.1 2004/04/02 21:47:17 eich Exp $
+.\" shorthand for double quote that works everywhere.
+.ds q \N'34'
+.TH __xconfigfile__ __filemansuffix__ __vendorversion__
+.SH NAME
+__xconfigfile__ - Configuration File for __xservername__
+.SH INTRODUCTION
+.B __xservername__
+supports several mechanisms for supplying/obtaining configuration and
+run-time parameters: command line options, environment variables, the
+__xconfigfile__ configuration file, auto-detection, and fallback defaults.
+When the same information is supplied in more than one way, the highest
+precedence mechanism is used. The list of mechanisms is ordered from
+highest precedence to lowest. Note that not all parameters can be
+supplied via all methods. The available command line options and
+environment variables (and some defaults) are described in the Xserver(__appmansuffix__)
+and __xservername__(__appmansuffix__) manual pages. Most configuration file parameters, with
+their defaults, are described below. Driver and module specific
+configuration parameters are described in the relevant driver or module
+manual page.
+.SH DESCRIPTION
+.B __xservername__
+uses a configuration file called
+.B __xconfigfile__
+for its initial setup. This configuration file is searched for in the
+following places when the server is started as a normal user:
+.PP
+.RS 4
+.nf
+.IR /etc/X11/ <cmdline>
+.IR __projectroot__/etc/X11/ <cmdline>
+.IB /etc/X11/ $XORGCONFIG
+.IB __projectroot__/etc/X11/ $XORGCONFIG
+.I /etc/X11/__xconfigfile__-4
+.I /etc/X11/__xconfigfile__
+.I /etc/__xconfigfile__
+.IR __projectroot__/etc/X11/__xconfigfile__. <hostname>
+.I __projectroot__/etc/X11/__xconfigfile__-4
+.I __projectroot__/etc/X11/__xconfigfile__
+.IR __projectroot__/lib/X11/__xconfigfile__. <hostname>
+.I __projectroot__/lib/X11/__xconfigfile__-4
+.I __projectroot__/lib/X11/__xconfigfile__
+.fi
+.RE
+.PP
+where
+.I <cmdline>
+is a relative path (with no ".." components) specified with the
+.B \-config
+command line option,
+.B $XORGCONFIG
+is the relative path (with no ".." components) specified by that
+environment variable, and
+.I <hostname>
+is the machine's hostname as reported by gethostname(3).
+.PP
+When the __xservername__ server is started by the "root" user, the config file
+search locations are as follows:
+.PP
+.RS 4
+.nf
+<cmdline>
+.IR /etc/X11/ <cmdline>
+.IR __projectroot__/etc/X11/ <cmdline>
+.B $XORGCONFIG
+.IB /etc/X11/ $XORGCONFIG
+.IB __projectroot__/etc/X11/ $XORGCONFIG
+.BI $HOME /__xconfigfile__
+.I /etc/X11/__xconfigfile__-4
+.I /etc/X11/__xconfigfile__
+.I /etc/__xconfigfile__
+.IR __projectroot__/etc/X11/__xconfigfile__. <hostname>
+.I __projectroot__/etc/X11/__xconfigfile__-4
+.I __projectroot__/etc/X11/__xconfigfile__
+.IR __projectroot__/lib/X11/__xconfigfile__. <hostname>
+.I __projectroot__/lib/X11/__xconfigfile__-4
+.I __projectroot__/lib/X11/__xconfigfile__
+.fi
+.RE
+.PP
+where
+.I <cmdline>
+is the path specified with the
+.B \-config
+command line option (which may be absolute or relative),
+.B $XORGCONFIG
+is the path specified by that
+environment variable (absolute or relative),
+.B $HOME
+is the path specified by that environment variable (usually the home
+directory), and
+.I <hostname>
+is the machine's hostname as reported by gethostname(3).
+.PP
+The
+.B __xconfigfile__
+file is composed of a number of sections which may be present in any
+order. Each section has
+the form:
+.PP
+.RS 4
+.nf
+.BI "Section \*q" SectionName \*q
+.RI " " SectionEntry
+ ...
+.B EndSection
+.fi
+.RE
+.PP
+The section names are:
+.PP
+.RS 4
+.nf
+.BR "Files " "File pathnames"
+.BR "ServerFlags " "Server flags"
+.BR "Module " "Dynamic module loading"
+.BR "InputDevice " "Input device description"
+.BR "Device " "Graphics device description"
+.BR "VideoAdaptor " "Xv video adaptor description"
+.BR "Monitor " "Monitor description"
+.BR "Modes " "Video modes descriptions"
+.BR "Screen " "Screen configuration"
+.BR "ServerLayout " "Overall layout"
+.BR "DRI " "DRI-specific configuration"
+.BR "Vendor " "Vendor-specific configuration"
+.fi
+.RE
+.PP
+The following obsolete section names are still recognised for compatibility
+purposes. In new config files, the
+.B InputDevice
+section should be used instead.
+.PP
+.RS 4
+.nf
+.BR "Keyboard " "Keyboard configuration"
+.BR "Pointer " "Pointer/mouse configuration"
+.fi
+.RE
+.PP
+The old
+.B XInput
+section is no longer recognised.
+.PP
+The
+.B ServerLayout
+sections are at the highest level. They bind together the input and
+output devices that will be used in a session. The input devices
+are described in the
+.B InputDevice
+sections. Output devices usually consist of multiple independent
+components (e.g., and graphics board and a monitor). These multiple
+components are bound together in the
+.B Screen
+sections, and it is these that are referenced by the
+.B ServerLayout
+section. Each
+.B Screen
+section binds together a graphics board and a monitor. The graphics
+boards are described in the
+.B Device
+sections, and the monitors are described in the
+.B Monitor
+sections.
+.PP
+Config file keywords are case-insensitive, and "_" characters are
+ignored. Most strings (including
+.B Option
+names) are also case-insensitive, and insensitive to white space and
+"_" characters.
+.PP
+Each config file entry usually takes up a single line in the file.
+They consist of a keyword, which is possibly followed by one or
+more arguments, with the number and types of the arguments depending
+on the keyword. The argument types are:
+.PP
+.RS 4
+.nf
+.BR "Integer " "an integer number in decimal, hex or octal"
+.BR "Real " "a floating point number"
+.BR "String " "a string enclosed in double quote marks (\*q)"
+.fi
+.RE
+.PP
+Note: hex integer values must be prefixed with "0x", and octal values
+with "0".
+.PP
+A special keyword called
+.B Option
+may be used to provide free-form data to various components of the server.
+The
+.B Option
+keyword takes either one or two string arguments. The first is the option
+name, and the optional second argument is the option value. Some commonly
+used option value types include:
+.PP
+.RS 4
+.nf
+.BR "Integer " "an integer number in decimal, hex or octal"
+.BR "Real " "a floating point number"
+.BR "String " "a sequence of characters"
+.BR "Boolean " "a boolean value (see below)"
+.BR "Frequency " "a frequency value (see below)"
+.fi
+.RE
+.PP
+Note that
+.I all
+.B Option
+values, not just strings, must be enclosed in quotes.
+.PP
+Boolean options may optionally have a value specified. When no value
+is specified, the option's value is
+.BR TRUE .
+The following boolean option values are recognised as
+.BR TRUE :
+.PP
+.RS 4
+.BR 1 ,
+.BR on ,
+.BR true ,
+.B yes
+.RE
+.PP
+and the following boolean option values are recognised as
+.BR FALSE :
+.PP
+.RS 4
+.BR 0 ,
+.BR off ,
+.BR false ,
+.B no
+.RE
+.PP
+If an option name is prefixed with
+.RB \*q No \*q,
+then the option value is negated.
+.PP
+Example: the following option entries are equivalent:
+.PP
+.RS 4
+.nf
+.B "Option \*qAccel\*q \*qOff\*q"
+.B "Option \*qNoAccel\*q"
+.B "Option \*qNoAccel\*q \*qOn\*q"
+.B "Option \*qAccel\*q \*qfalse\*q"
+.B "Option \*qAccel\*q \*qno\*q"
+.fi
+.RE
+.PP
+Frequency option values consist of a real number that is optionally
+followed by one of the following frequency units:
+.PP
+.RS 4
+.BR Hz ,
+.BR k ,
+.BR kHz ,
+.BR M ,
+.B MHz
+.RE
+.PP
+When the unit name is omitted, the correct units will be determined from
+the value and the expectations of the appropriate range of the value.
+It is recommended that the units always be specified when using frequency
+option values to avoid any errors in determining the value.
+.SH FILES SECTION
+The
+.B Files
+section is used to specify some path names required by the server.
+Some of these paths can also be set from the command line (see Xserver(__appmansuffix__)
+and __xservername__(__appmansuffix__)). The command line settings override the values specified
+in the config file. The
+.B Files
+section is optional, as are all of the entries that may appear in it.
+.PP
+The entries that can appear in this section are:
+.TP 7
+.BI "FontPath \*q" path \*q
+sets the search path for fonts. This path is a comma separated list of
+font path elements which the __xservername__ server searches for font databases.
+Multiple
+.B FontPath
+entries may be specified, and they will be concatenated to build up the
+fontpath used by the server. Font path elements may be either absolute
+directory paths, or a font server identifier. Font server identifiers
+have the form:
+.PP
+.RS 11
+.IR <trans> / <hostname> : <port-number>
+.RE
+.PP
+.RS 7
+where
+.I <trans>
+is the transport type to use to connect to the font server (e.g.,
+.B unix
+for UNIX-domain sockets or
+.B tcp
+for a TCP/IP connection),
+.I <hostname>
+is the hostname of the machine running the font server, and
+.I <port-number>
+is the port number that the font server is listening on (usually 7100).
+.PP
+When this entry is not specified in the config file, the server falls back
+to the compiled-in default font path, which contains the following
+font path elements:
+.PP
+.RS 4
+.nf
+.I __projectroot__/lib/X11/fonts/misc/
+.I __projectroot__/lib/X11/fonts/Speedo/
+.I __projectroot__/lib/X11/fonts/Type1/
+.I __projectroot__/lib/X11/fonts/CID/
+.I __projectroot__/lib/X11/fonts/75dpi/
+.I __projectroot__/lib/X11/fonts/100dpi/
+.fi
+.RE
+.PP
+The recommended font path contains the following font path elements:
+.PP
+.RS 4
+.nf
+.I __projectroot__/lib/X11/fonts/local/
+.I __projectroot__/lib/X11/fonts/misc/
+.I __projectroot__/lib/X11/fonts/75dpi/:unscaled
+.I __projectroot__/lib/X11/fonts/100dpi/:unscaled
+.I __projectroot__/lib/X11/fonts/Type1/
+.I __projectroot__/lib/X11/fonts/CID/
+.I __projectroot__/lib/X11/fonts/Speedo/
+.I __projectroot__/lib/X11/fonts/75dpi/
+.I __projectroot__/lib/X11/fonts/100dpi/
+.fi
+.RE
+.PP
+Font path elements that are found to be invalid are removed from the
+font path when the server starts up.
+.RE
+.TP 7
+.BI "RGBPath \*q" path \*q
+sets the path name for the RGB color database.
+When this entry is not specified in the config file, the server falls back
+to the compiled-in default RGB path, which is:
+.PP
+.RS 11
+.I __projectroot__/lib/X11/rgb
+.RE
+.PP
+Note that an implicit
+.I .txt
+is added to this path if the server was compiled to use text rather than
+binary format RGB color databases.
+.TP 7
+.BI "ModulePath \*q" path \*q
+sets the search path for loadable __xservername__ server modules. This path is
+a comma separated list of directories which the __xservername__ server searches
+for loadable modules loading in the order specified. Multiple
+.B ModulePath
+entries may be specified, and they will be concatenated to build the
+module search path used by the server.
+.\" The LogFile keyword is not currently implemented
+.ig
+.TP 7
+.BI "LogFile \*q" path \*q
+sets the name of the __xservername__ server log file. The default log file name
+is
+.PP
+.RS 11
+.RI __logdir__/__xservername__. <n> .log
+.RE
+.PP
+.RS 7
+where
+.I <n>
+is the display number for the __xservername__ server.
+..
+.SH SERVERFLAGS SECTION
+The
+.B ServerFlags
+section is used to specify some global
+__xservername__ server options. All of the entries in this section are
+.BR Options ,
+although for compatibility purposes some of the old style entries are
+still recognised. Those old style entries are not documented here, and
+using them is discouraged. The
+.B ServerFlags
+section is optional, as are the entries that may be specified in it.
+.PP
+.B Options
+specified in this section (with the exception of the
+.B \*qDefaultServerLayout\*q
+.BR Option )
+may be overridden by
+.B Options
+specified in the active
+.B ServerLayout
+section. Options with command line equivalents are overridden when their
+command line equivalent is used. The options recognised by this section
+are:
+.TP 7
+.BI "Option \*qDefaultServerLayout\*q \*q" layout-id \*q
+This specifies the default
+.B ServerLayout
+section to use in the absence of the
+.B \-layout
+command line option.
+.TP 7
+.BI "Option \*qNoTrapSignals\*q \*q" boolean \*q
+This prevents the __xservername__ server from trapping a range of unexpected
+fatal signals and exiting cleanly. Instead, the __xservername__ server will die
+and drop core where the fault occurred. The default behaviour is
+for the __xservername__ server to exit cleanly, but still drop a core file. In
+general you never want to use this option unless you are debugging
+an __xservername__ server problem and know how to deal with the consequences.
+.TP 7
+.BI "Option \*qDontVTSwitch\*q \*q" boolean \*q
+This disallows the use of the
+.BI Ctrl+Alt+F n
+sequence (where
+.RI F n
+refers to one of the numbered function keys). That sequence is normally
+used to switch to another \*qvirtual terminal\*q on operating systems
+that have this feature. When this option is enabled, that key sequence has
+no special meaning and is passed to clients. Default: off.
+.TP 7
+.BI "Option \*qDontZap\*q \*q" boolean \*q
+This disallows the use of the
+.B Ctrl+Alt+Backspace
+sequence. That sequence is normally used to terminate the __xservername__ server.
+When this option is enabled, that key sequence has no special meaning
+and is passed to clients. Default: off.
+.TP 7
+.BI "Option \*qDontZoom\*q \*q" boolean \*q
+This disallows the use of the
+.B Ctrl+Alt+Keypad-Plus
+and
+.B Ctrl+Alt+Keypad-Minus
+sequences. These sequences allows you to switch between video modes.
+When this option is enabled, those key sequences have no special meaning
+and are passed to clients. Default: off.
+.TP 7
+.BI "Option \*qDisableVidModeExtension\*q \*q" boolean \*q
+This disables the parts of the VidMode extension used by the xvidtune client
+that can be used to change the video modes. Default: the VidMode extension
+is enabled.
+.TP 7
+.BI "Option \*qAllowNonLocalXvidtune\*q \*q" boolean \*q
+This allows the xvidtune client (and other clients that use the VidMode
+extension) to connect from another host. Default: off.
+.TP 7
+.BI "Option \*qDisableModInDev\*q \*q" boolean \*q
+This disables the parts of the __xservername__-Misc extension that can be used to
+modify the input device settings dynamically. Default: that functionality
+is enabled.
+.TP 7
+.BI "Option \*qAllowNonLocalModInDev\*q \*q" boolean \*q
+This allows a client to connect from another host and change keyboard
+and mouse settings in the running server. Default: off.
+.TP 7
+.BI "Option \*qAllowMouseOpenFail\*q \*q" boolean \*q
+This allows the server to start up even if the mouse device can't be
+opened/initialised. Default: false.
+.TP 7
+.BI "Option \*qVTInit\*q \*q" command \*q
+Runs
+.I command
+after the VT used by the server has been opened.
+The command string is passed to "/bin/sh -c", and is run with the
+real user's id with stdin and stdout set to the VT. The purpose
+of this option is to allow system dependent VT initialisation
+commands to be run. This option should rarely be needed. Default: not set.
+.TP 7
+.BI "Option \*qVTSysReq\*q \*q" boolean \*q
+enables the SYSV-style VT switch sequence for non-SYSV systems
+which support VT switching. This sequence is
+.B Alt-SysRq
+followed
+by a function key
+.RB ( Fn ).
+This prevents the __xservername__ server trapping the
+keys used for the default VT switch sequence, which means that clients can
+access them. Default: off.
+.TP 7
+.BI "Option \*qXkbDisable\*q \*q" boolean \*q
+disable/enable the XKEYBOARD extension. The \-kb command line
+option overrides this config file option. Default: XKB is enabled.
+.\" The following four options are "undocumented".
+.ig
+.TP 7
+.BI "Option \*qPciProbe1\*q"
+Use PCI probe method 1. Default: set.
+.TP 7
+.BI "Option \*qPciProbe2\*q"
+Use PCI probe method 2. Default: not set.
+.TP 7
+.BI "Option \*qPciForceConfig1\*q"
+Force the use PCI config type 1. Default: not set.
+.TP 7
+.BI "Option \*qPciForceConfig2\*q"
+Force the use PCI config type 2. Default: not set.
+..
+.TP 7
+.BI "Option \*qBlankTime\*q \*q" time \*q
+sets the inactivity timeout for the blanking phase of the screensaver.
+.I time
+is in minutes. This is equivalent to the __xservername__ server's `-s' flag,
+and the value can be changed at run-time with xset(__appmansuffix__). Default: 10
+minutes.
+.TP 7
+.BI "Option \*qStandbyTime\*q \*q" time \*q
+sets the inactivity timeout for the "standby" phase of DPMS mode.
+.I time
+is in minutes, and the value can be changed at run-time with xset(__appmansuffix__).
+Default: 20 minutes. This is only suitable for VESA DPMS compatible
+monitors, and may not be supported by all video drivers. It is only
+enabled for screens that have the
+.B \*qDPMS\*q
+option set (see the MONITOR section below).
+.TP 7
+.BI "Option \*qSuspendTime\*q \*q" time \*q
+sets the inactivity timeout for the "suspend" phase of DPMS mode.
+.I time
+is in minutes, and the value can be changed at run-time with xset(__appmansuffix__).
+Default: 30 minutes. This is only suitable for VESA DPMS compatible
+monitors, and may not be supported by all video drivers. It is only
+enabled for screens that have the
+.B \*qDPMS\*q
+option set (see the MONITOR section below).
+.TP 7
+.BI "Option \*qOffTime\*q \*q" time \*q
+sets the inactivity timeout for the "off" phase of DPMS mode.
+.I time
+is in minutes, and the value can be changed at run-time with xset(__appmansuffix__).
+Default: 40 minutes. This is only suitable for VESA DPMS compatible
+monitors, and may not be supported by all video drivers. It is only
+enabled for screens that have the
+.B \*qDPMS\*q
+option set (see the MONITOR section below).
+.TP 7
+.BI "Option \*qPixmap\*q \*q" bpp \*q
+This sets the pixmap format to use for depth 24. Allowed values for
+.I bpp
+are 24 and 32. Default: 32 unless driver constraints don't allow this
+(which is rare). Note: some clients don't behave well when this value
+is set to 24.
+.TP 7
+.BI "Option \*qPC98\*q \*q" boolean \*q
+Specify that the machine is a Japanese PC-98 machine. This should not
+be enabled for anything other than the Japanese-specific PC-98
+architecture. Default: auto-detected.
+.\" Doubt this should be documented.
+.ig
+.TP 7
+.BI "Option \*qEstimateSizesAggressively\*q \*q" value \*q
+This option affects the way that bus resource sizes are estimated.
+Default: 0.
+..
+.TP 7
+.BI "Option \*qNoPM\*q \*q" boolean \*q
+Disables something to do with power management events. Default: PM
+enabled on platforms that support it.
+.TP 7
+.BI "Option \*qXinerama\*q \*q" boolean \*q
+enable or disable XINERAMA extension. Default is disabled.
+.TP 7
+.BI "Option \*qAllowDeactivateGrabs\*q \*q" boolean \*q
+This option enables the use of the
+.B Ctrl+Alt+Keypad-Divide
+key sequence to deactivate any active keyboard and mouse grabs. Default:
+off.
+.TP 7
+.BI "Option \*qAllowClosedownGrabs\*q \*q" boolean \*q
+This option enables the use of the
+.B Ctrl+Alt+Keypad-Multiply
+key sequence to kill clients with an active keyboard or mouse grab as
+well as killing any application that may have locked the server, normally
+using the XGrabServer(__libmansuffix__) Xlib function. Default: off.
+.br
+Note that the options
+.BI AllowDeactivateGrabs
+and
+.BI AllowClosedownGrabs
+will allow users to remove the grab used by screen saver/locker programs.
+An API was written to such cases. If you enable this option, make sure
+your screen saver/locker is updated.
+.TP 7
+.BI "Option \*qHandleSpecialKeys\*q \*q" when \*q
+This option controls when the server uses the builtin handler to process
+special key combinations (such as
+.BR Ctrl+Alt+Backspace ).
+Normally the XKEYBOARD extension keymaps will provide mappings for each
+of the special key combinations, so the builtin handler is not needed
+unless the XKEYBOARD extension is disabled. The value of
+.I when
+can be
+.BR Always ,
+.BR Never ,
+or
+.BR WhenNeeded .
+Default: Use the builtin handler only if needed. The server will scan
+the keymap for a mapping to the
+.B Terminate
+action and, if found, use XKEYBOARD for processing actions, otherwise
+the builtin handler will be used.
+.SH MODULE SECTION
+The
+.B Module
+section is used to specify which __xservername__ server modules should be loaded.
+This section is ignored when the __xservername__ server is built in static form.
+The types of modules normally loaded in this section are __xservername__ server
+extension modules, and font rasteriser modules. Most other module types
+are loaded automatically when they are needed via other mechanisms.
+The
+.B Module
+section is optional, as are all of the entries that may be specified in
+it.
+.PP
+Entries in this section may be in two forms. The first and most commonly
+used form is an entry that uses the
+.B Load
+keyword, as described here:
+.TP 7
+.BI "Load \*q" modulename \*q
+This instructs the server to load the module called
+.IR modulename .
+The module name given should be the module's standard name, not the
+module file name. The standard name is case-sensitive, and does not
+include the "lib" prefix, or the ".a", ".o", or ".so" suffixes.
+.PP
+.RS 7
+Example: the Type 1 font rasteriser can be loaded with the following entry:
+.PP
+.RS 4
+.B "Load \*qtype1\*q"
+.RE
+.RE
+.PP
+The second form of entry is a
+.BR SubSection,
+with the subsection name being the module name, and the contents of the
+.B SubSection
+being
+.B Options
+that are passed to the module when it is loaded.
+.PP
+Example: the extmod module (which contains a miscellaneous group of
+server extensions) can be loaded, with the __xservername__-DGA extension
+disabled by using the following entry:
+.PP
+.RS 4
+.nf
+.B "SubSection \*qextmod\*q"
+.B " Option \*qomit XFree86-DGA\*q"
+.B EndSubSection
+.fi
+.RE
+.PP
+Modules are searched for in each directory specified in the
+.B ModulePath
+search path, and in the drivers, input, extensions, fonts, and
+internal subdirectories of each of those directories.
+In addition to this, operating system specific subdirectories of all
+the above are searched first if they exist.
+.PP
+To see what font and extension modules are available, check the contents
+of the following directories:
+.PP
+.RS 4
+.nf
+__projectroot__/lib/modules/fonts
+__projectroot__/lib/modules/extensions
+.fi
+.RE
+.PP
+The "bitmap" font modules is loaded automatically. It is recommended
+that at very least the "extmod" extension module be loaded. If it isn't
+some commonly used server extensions (like the SHAPE extension) will not be
+available.
+.SH INPUTDEVICE SECTION
+The config file may have multiple
+.B InputDevice
+sections. There will normally be at least two: one for the core (primary)
+keyboard, and one of the core pointer. If either of these two is missing,
+a default configuration for the missing ones will be used. Currently the
+default configuration may not work as expected on all platforms.
+.PP
+.B InputDevice
+sections have the following format:
+.PP
+.RS 4
+.nf
+.B "Section \*qInputDevice\*q"
+.BI " Identifier \*q" name \*q
+.BI " Driver \*q" inputdriver \*q
+.I " options"
+.I " ..."
+.B "EndSection"
+.fi
+.RE
+.PP
+The
+.B Identifier
+and
+.B Driver
+entries are required in all
+.B InputDevice
+sections. All other entries are optional.
+.PP
+The
+.B Identifier
+entry specifies the unique name for this input device. The
+.B Driver
+entry specifies the name of the driver to use for this input device.
+When using the loadable server, the input driver module
+.RI \*q inputdriver \*q
+will be loaded for each active
+.B InputDevice
+section. An
+.B InputDevice
+section is considered active if it is referenced by an active
+.B ServerLayout
+section, if it is referenced by the
+.B \-keyboard
+or
+.B \-pointer
+command line options, or if it is selected implicitly as the core pointer
+or keyboard device in the absence of such explicit references.
+The most commonly used input drivers are "keyboard" and "mouse".
+.PP
+In the absence of an explicitly specified core input device, the first
+.B InputDevice
+marked as
+.B CorePointer
+(or
+.BR CoreKeyboard )
+is used. If there is no match there, the first
+.B InputDevice
+that uses the "mouse" (or "keyboard" or "kbd") driver is used. The final
+fallback is to use built-in default configurations.
+.PP
+.B InputDevice
+sections recognise some driver-independent
+.BR Options ,
+which are described here. See the individual input driver manual pages
+for a description of the device-specific options.
+.TP 7
+.BI "Option \*qCorePointer\*q"
+When this is set, the input device is installed as the core (primary)
+pointer device. There must be exactly one core pointer. If this option
+is not set here, or in the
+.B ServerLayout
+section, or from the
+.B \-pointer
+command line option, then the first input device that is capable of
+being used as a core pointer will be selected as the core pointer.
+This option is implicitly set when the obsolete
+.B Pointer
+section is used.
+.TP 7
+.BI "Option \*qCoreKeyboard\*q"
+When this is set, the input device is to be installed as the core
+(primary) keyboard device. There must be exactly one core keyboard. If
+this option is not set here, in the
+.B ServerLayout
+section, or from the
+.B \-keyboard
+command line option, then the first input device that is capable of
+being used as a core keyboard will be selected as the core keyboard.
+This option is implicitly set when the obsolete
+.B Keyboard
+section is used.
+.TP 7
+.BI "Option \*qAlwaysCore\*q \*q" boolean \*q
+.TP 7
+.BI "Option \*qSendCoreEvents\*q \*q" boolean \*q
+Both of these options are equivalent, and when enabled cause the
+input device to always report core events. This can be used, for
+example, to allow an additional pointer device to generate core
+pointer events (like moving the cursor, etc).
+.TP 4
+.BI "Option \*qHistorySize\*q \*q" number \*q
+Sets the motion history size. Default: 0.
+.TP 7
+.BI "Option \*qSendDragEvents\*q \*q" boolean \*q
+???
+.SH DEVICE SECTION
+The config file may have multiple
+.B Device
+sections. There must be at least one, for the video card being used.
+.PP
+.B Device
+sections have the following format:
+.PP
+.RS 4
+.nf
+.B "Section \*qDevice\*q"
+.BI " Identifier \*q" name \*q
+.BI " Driver \*q" driver \*q
+.I " entries"
+.I " ..."
+.B "EndSection"
+.fi
+.RE
+.PP
+The
+.B Identifier
+and
+.B Driver
+entries are required in all
+.B Device
+sections. All other entries are optional.
+.PP
+The
+.B Identifier
+entry specifies the unique name for this graphics device. The
+.B Driver
+entry specifies the name of the driver to use for this graphics device.
+When using the loadable server, the driver module
+.RI \*q driver \*q
+will be loaded for each active
+.B Device
+section. A
+.B Device
+section is considered active if it is referenced by an active
+.B Screen
+section.
+.PP
+.B Device
+sections recognise some driver-independent entries and
+.BR Options ,
+which are described here. Not all drivers make use of these
+driver-independent entries, and many of those that do don't require them
+to be specified because the information is auto-detected. See the
+individual graphics driver manual pages for further information about
+this, and for a description of the device-specific options.
+Note that most of the
+.B Options
+listed here (but not the other entries) may be specified in the
+.B Screen
+section instead of here in the
+.B Device
+section.
+.TP 7
+.BI "BusID \*q" bus-id \*q
+This specifies the bus location of the graphics card. For PCI/AGP cards,
+the
+.I bus-id
+string has the form
+.BI PCI: bus : device : function
+(e.g., "PCI:1:0:0" might be appropriate for an AGP card).
+This field is usually optional in single-head configurations when using
+the primary graphics card. In multi-head configurations, or when using
+a secondary graphics card in a single-head configuration, this entry is
+mandatory. Its main purpose is to make an unambiguous connection between
+the device section and the hardware it is representing. This information
+can usually be found by running the __xservername__ server with the
+.B \-scanpci
+command line option.
+.TP 7
+.BI "Screen " number
+This option is mandatory for cards where a single PCI entity can drive more
+than one display (i.e., multiple CRTCs sharing a single graphics accelerator
+and video memory). One
+.B Device
+section is required for each head, and this
+parameter determines which head each of the
+.B Device
+sections applies to. The legal values of
+.I number
+range from 0 to one less than the total number of heads per entity.
+Most drivers require that the primary screen (0) be present.
+.TP 7
+.BI "Chipset \*q" chipset \*q
+This usually optional entry specifies the chipset used on the graphics
+board. In most cases this entry is not required because the drivers
+will probe the hardware to determine the chipset type. Don't
+specify it unless the driver-specific documentation recommends that you
+do.
+.TP 7
+.BI "Ramdac \*q" ramdac-type \*q
+This optional entry specifies the type of RAMDAC used on the graphics
+board. This is only used by a few of the drivers, and in most cases it
+is not required because the drivers will probe the hardware to determine
+the RAMDAC type where possible. Don't specify it unless the
+driver-specific documentation recommends that you do.
+.TP 7
+.BI "DacSpeed " speed
+.TP 7
+.BI "DacSpeed " "speed-8 speed-16 speed-24 speed-32"
+This optional entry specifies the RAMDAC speed rating (which is usually
+printed on the RAMDAC chip). The speed is in MHz. When one value is
+given, it applies to all framebuffer pixel sizes. When multiple values
+are give, they apply to the framebuffer pixel sizes 8, 16, 24 and 32
+respectively. This is not used by many drivers, and only needs to be
+specified when the speed rating of the RAMDAC is different from the
+defaults built in to driver, or when the driver can't auto-detect the
+correct defaults. Don't specify it unless the driver-specific
+documentation recommends that you do.
+.TP 7
+.BI "Clocks " "clock ..."
+specifies the pixel that are on your graphics board. The clocks are in
+MHz, and may be specified as a floating point number. The value is
+stored internally to the nearest kHz. The ordering of the clocks is
+important. It must match the order in which they are selected on the
+graphics board. Multiple
+.B Clocks
+lines may be specified, and each is concatenated to form the list. Most
+drivers do not use this entry, and it is only required for some older
+boards with non-programmable clocks. Don't specify this entry unless
+the driver-specific documentation explicitly recommends that you do.
+.TP
+.BI "ClockChip \*q" clockchip-type \*q
+This optional entry is used to specify the clock chip type on graphics
+boards which have a programmable clock generator. Only a few __xservername__
+drivers support programmable clock chips. For details, see the appropriate
+driver manual page.
+.TP 7
+.BI "VideoRam " "mem"
+This optional entry specifies the amount of video ram that is installed
+on the graphics board. This is measured in kBytes. In most cases this
+is not required because the __xservername__ server probes the graphics board to
+determine this quantity. The driver-specific documentation should
+indicate when it might be needed.
+.TP 7
+.BI "BiosBase " "baseaddress"
+This optional entry specifies the base address of the video BIOS for
+the VGA board. This address is normally auto-detected, and should only
+be specified if the driver-specific documentation recommends it.
+.TP 7
+.BI "MemBase " "baseaddress"
+This optional entry specifies the memory base address of a graphics
+board's linear frame buffer. This entry is not used by many drivers,
+and it should only be specified if the driver-specific documentation
+recommends it.
+.TP 7
+.BI "IOBase " "baseaddress"
+This optional entry specifies the IO base address. This entry is not
+used by many drivers, and it should only be specified if the
+driver-specific documentation recommends it.
+.TP 7
+.BI "ChipID " "id"
+This optional entry specifies a numerical ID representing the chip type.
+For PCI cards, it is usually the device ID. This can be used to override
+the auto-detection, but that should only be done when the driver-specific
+documentation recommends it.
+.TP 7
+.BI "ChipRev " "rev"
+This optional entry specifies the chip revision number. This can be
+used to override the auto-detection, but that should only be done when
+the driver-specific documentation recommends it.
+.TP 7
+.BI "TextClockFreq " "freq"
+This optional entry specifies the pixel clock frequency that is used
+for the regular text mode. The frequency is specified in MHz. This is
+rarely used.
+.ig
+.TP 7
+This optional entry allows an IRQ number to be specified.
+..
+.TP 7
+.B Options
+Option flags may be specified in the
+.B Device
+sections. These include driver-specific options and driver-independent
+options. The former are described in the driver-specific documentation.
+Some of the latter are described below in the section about the
+.B Screen
+section, and they may also be included here.
+
+.SH VIDEOADAPTOR SECTION
+Nobody wants to say how this works. Maybe nobody knows ...
+
+.SH MONITOR SECTION
+The config file may have multiple
+.B Monitor
+sections. There should normally be at least one, for the monitor being used,
+but a default configuration will be created when one isn't specified.
+.PP
+.B Monitor
+sections have the following format:
+.PP
+.RS 4
+.nf
+.B "Section \*qMonitor\*q"
+.BI " Identifier \*q" name \*q
+.I " entries"
+.I " ..."
+.B "EndSection"
+.fi
+.RE
+.PP
+The only mandatory entry in a
+.B Monitor
+section is the
+.B Identifier
+entry.
+.PP
+The
+.B Identifier
+entry specifies the unique name for this monitor. The
+.B Monitor
+section provides information about the specifications of the monitor,
+monitor-specific
+.BR Options ,
+and information about the video modes to use with the monitor. Specifying
+video modes is optional because the server now has a built-in list of
+VESA standard modes. When modes are specified explicitly in the
+.B Monitor
+section (with the
+.BR Modes ,
+.BR ModeLine ,
+or
+.B UseModes
+keywords), built-in modes with the same names are not included. Built-in
+modes with different names are, however, still implicitly included.
+.PP
+The entries that may be used in
+.B Monitor
+sections are described below.
+.TP 7
+.BI "VendorName \*q" vendor \*q
+This optional entry specifies the monitor's manufacturer.
+.TP 7
+.BI "ModelName \*q" model \*q
+This optional entry specifies the monitor's model.
+.TP 7
+.BI "HorizSync " "horizsync-range"
+gives the range(s) of horizontal sync frequencies supported by the
+monitor.
+.I horizsync-range
+may be a comma separated list of either discrete values or ranges of
+values. A range of values is two values separated by a dash. By default
+the values are in units of kHz. They may be specified in MHz or Hz if
+.B MHz
+or
+.B Hz
+is added to the end of the line. The data given here is used by the
+__xservername__ server to determine if video modes are within the specifications
+of the monitor. This information should be available in the monitor's
+handbook. If this entry is omitted, a default range of 28\-33kHz is
+used.
+.TP 7
+.BI "VertRefresh " "vertrefresh-range"
+gives the range(s) of vertical refresh frequencies supported by the
+monitor.
+.I vertrefresh-range
+may be a comma separated list of either discrete values or ranges of
+values. A range of values is two values separated by a dash. By default
+the values are in units of Hz. They may be specified in MHz or kHz if
+.B MHz
+or
+.B kHz
+is added to the end of the line. The data given here is used by the
+__xservername__ server to determine if video modes are within the specifications
+of the monitor. This information should be available in the monitor's
+handbook. If this entry is omitted, a default range of 43-72Hz is used.
+.TP 7
+.BI "DisplaySize " "width height"
+This optional entry gives the width and height, in millimetres, of the
+picture area of the monitor. If given this is used to calculate the
+horizontal and vertical pitch (DPI) of the screen.
+.TP 7
+.BI "Gamma " "gamma-value"
+.TP 7
+.BI "Gamma " "red-gamma green-gamma blue-gamma"
+This is an optional entry that can be used to specify the gamma correction
+for the monitor. It may be specified as either a single value or as
+three separate RGB values. The values should be in the range 0.1 to
+10.0, and the default is 1.0. Not all drivers are capable of using this
+information.
+.TP 7
+.BI "UseModes \*q" modesection-id \*q
+Include the set of modes listed in the
+.B Modes
+section called
+.IR modesection-id.
+This make all of the modes defined in that section available for use by
+this monitor.
+.TP 7
+.BI "Mode \*q" name \*q
+This is an optional multi-line entry that can be used to provide
+definitions for video modes for the monitor. In most cases this isn't
+necessary because the built-in set of VESA standard modes will be
+sufficient. The
+.B Mode
+keyword indicates the start of a multi-line video mode description.
+The mode description is terminated with the
+.B EndMode
+keyword. The mode description consists of the following entries:
+.RS 7
+.TP 4
+.BI "DotClock " clock
+is the dot (pixel) clock rate to be used for the mode.
+.TP 4
+.BI "HTimings " "hdisp hsyncstart hsyncend htotal"
+specifies the horizontal timings for the mode.
+.TP 4
+.BI "VTimings " "vdisp vsyncstart vsyncend vtotal"
+specifies the vertical timings for the mode.
+.TP 4
+.BI "Flags \*q" flag \*q " ..."
+specifies an optional set of mode flags, each of which is a separate
+string in double quotes.
+.B \*qInterlace\*q
+indicates that the mode is interlaced.
+.B \*qDoubleScan\*q
+indicates a mode where each scanline is doubled.
+.B \*q+HSync\*q
+and
+.B \*q\-HSync\*q
+can be used to select the polarity of the HSync signal.
+.B \*q+VSync\*q
+and
+.B \*q\-VSync\*q
+can be used to select the polarity of the VSync signal.
+.B \*qComposite\*q
+can be used to specify composite sync on hardware where this is supported.
+Additionally, on some hardware,
+.B \*q+CSync\*q
+and
+.B \*q\-CSync\*q
+may be used to select the composite sync polarity.
+.TP 4
+.BI "HSkew " hskew
+specifies the number of pixels (towards the right edge of the screen)
+by which the display enable signal is to be skewed. Not all drivers
+use this information. This option might become necessary to override
+the default value supplied by the server (if any). "Roving" horizontal
+lines indicate this value needs to be increased. If the last few pixels
+on a scan line appear on the left of the screen, this value should be
+decreased.
+.TP 4
+.BI "VScan " vscan
+specifies the number of times each scanline is painted on the screen.
+Not all drivers use this information. Values less than 1 are treated
+as 1, which is the default. Generally, the
+.B \*qDoubleScan\*q
+.B Flag
+mentioned above doubles this value.
+.RE
+.TP 7
+.BI "ModeLine \*q" name \*q " mode-description"
+This entry is a more compact version of the
+.B Mode
+entry, and it also can be used to specify video modes for the monitor.
+is a single line format for specifying video modes. In most cases this
+isn't necessary because the built-in set of VESA standard modes will be
+sufficient.
+.PP
+.RS 7
+The
+.I mode-description
+is in four sections, the first three of which are mandatory. The first
+is the dot (pixel) clock. This is a single number specifying the pixel
+clock rate for the mode in MHz. The second section is a list of four
+numbers specifying the horizontal timings. These numbers are the
+.IR hdisp ,
+.IR hsyncstart ,
+.IR hsyncend ,
+and
+.I htotal
+values. The third section is a list of four numbers specifying the
+vertical timings. These numbers are the
+.IR vdisp ,
+.IR vsyncstart ,
+.IR vsyncend ,
+and
+.I vtotal
+values. The final section is a list of flags specifying other
+characteristics of the mode.
+.B Interlace
+indicates that the mode is interlaced.
+.B DoubleScan
+indicates a mode where each scanline is doubled.
+.B +HSync
+and
+.B \-HSync
+can be used to select the polarity of the HSync signal.
+.B +VSync
+and
+.B \-VSync
+can be used to select the polarity of the VSync signal.
+.B Composite
+can be used to specify composite sync on hardware where this is supported.
+Additionally, on some hardware,
+.B +CSync
+and
+.B \-CSync
+may be used to select the composite sync polarity. The
+.B HSkew
+and
+.B VScan
+options mentioned above in the
+.B Modes
+entry description can also be used here.
+.RE
+.TP 7
+.B Options
+Some
+.B Option
+flags that may be useful to include in
+.B Monitor
+sections (when needed) include
+.BR \*qDPMS\*q ,
+and
+.BR \*qSyncOnGreen\*q .
+
+.SH MODES SECTION
+The config file may have multiple
+.B Modes
+sections, or none. These sections provide a way of defining sets of
+video modes independently of the
+.B Monitor
+sections.
+.B Monitor
+sections may include the definitions provided in these sections by
+using the
+.B UseModes
+keyword. In most cases the
+.B Modes
+sections are not necessary because the built-in set of VESA standard modes
+will be sufficient.
+.PP
+.B Modes
+sections have the following format:
+.PP
+.RS 4
+.nf
+.B "Section \*qModes\*q"
+.BI " Identifier \*q" name \*q
+.I " entries"
+.I " ..."
+.B "EndSection"
+.fi
+.RE
+.PP
+The
+.B Identifier
+entry specifies the unique name for this set of mode descriptions.
+The other entries permitted in
+.B Modes
+sections are the
+.B Mode
+and
+.B ModeLine
+entries that are described above in the
+.B Monitor
+section.
+.SH SCREEN SECTION
+The config file may have multiple
+.B Screen
+sections. There must be at least one, for the "screen" being used.
+A "screen" represents the binding of a graphics device
+.RB ( Device
+section) and a monitor
+.RB ( Monitor
+section). A
+.B Screen
+section is considered "active" if it is referenced by an active
+.B ServerLayout
+section or by the
+.B \-screen
+command line option. If neither of those is present, the first
+.B Screen
+section found in the config file is considered the active one.
+.PP
+.B Screen
+sections have the following format:
+.PP
+.RS 4
+.nf
+.B "Section \*qScreen\*q"
+.BI " Identifier \*q" name \*q
+.BI " Device \*q" devid \*q
+.BI " Monitor \*q" monid \*q
+.I " entries"
+.I " ..."
+.BI " SubSection \*qDisplay\*q"
+.I " entries"
+.I " ...
+.B " EndSubSection"
+.I " ..."
+.B "EndSection"
+.fi
+.RE
+.PP
+The
+.B Identifier
+and
+.B Device
+entries are mandatory. All others are optional.
+.PP
+The
+.B Identifier
+entry specifies the unique name for this screen. The
+.B Screen
+section provides information specific to the whole screen, including
+screen-specific
+.BR Options .
+In multi-head configurations, there will be multiple active
+.B Screen
+sections, one for each head.
+The entries available
+for this section are:
+.TP 7
+.BI "Device \*q" device-id \*q
+This mandatory entry specifies the
+.B Device
+section to be used for this screen. This is what ties a specific
+graphics card to a screen. The
+.I device-id
+must match the
+.B Identifier
+of a
+.B Device
+section in the config file.
+.TP 7
+.BI "Monitor \*q" monitor-id \*q
+specifies which monitor description is to be used for this screen.
+If a
+.B Monitor
+name is not specified, a default configuration is used. Currently the default
+configuration may not function as expected on all platforms.
+.TP 7
+.BI "VideoAdaptor \*q" xv-id \*q
+specifies an optional Xv video adaptor description to be used with this
+screen.
+.TP 7
+.BI "DefaultDepth " depth
+specifies which color depth the server should use by default. The
+.B \-depth
+command line option can be used to override this. If neither is specified,
+the default depth is driver-specific, but in most cases is 8.
+.TP 7
+.BI "DefaultFbBpp " bpp
+specifies which framebuffer layout to use by default. The
+.B \-fbbpp
+command line option can be used to override this. In most cases the
+driver will chose the best default value for this. The only case where
+there is even a choice in this value is for depth 24, where some hardware
+supports both a packed 24 bit framebuffer layout and a sparse 32 bit
+framebuffer layout.
+.TP 7
+.B Options
+Various
+.B Option
+flags may be specified in the
+.B Screen
+section. Some are driver-specific and are described in the driver
+documentation. Others are driver-independent, and will eventually be
+described here.
+.\" XXX These should really be in an xaa man page.
+.TP 7
+.BI "Option \*qAccel\*q"
+Enables XAA (X Acceleration Architecture), a mechanism that makes video
+cards' 2D hardware acceleration available to the
+__xservername__ server. This
+option is on by default, but it may be necessary to turn it off if there
+are bugs in the driver. There are many options to disable specific
+accelerated operations, listed below. Note that disabling an operation
+will have no effect if the operation is not accelerated (whether due to
+lack of support in the hardware or in the driver).
+.TP 7
+.BI "Option \*qBiosLocation\*q \*q" address \*q
+Set the location of the BIOS for the Int10 module. One may select a BIOS
+of another card for posting or the legacy V_BIOS range located at 0xc0000
+or an alternative address (BUS_ISA). This is only useful under very
+special circumstances and should be used with extreme care.
+.TP 7
+.BI "Option \*qInitPrimary\*q \*q" boolean \*q
+Use the Int10 module to initialize the primary graphics card. Normally,
+only secondary cards are soft-booted using the Int10 module, as the
+primary card has already been initialized by the BIOS at boot time.
+Default: false.
+.TP 7
+.BI "Option \*qNoInt10\*q \*q" boolean \*q
+Disables the Int10 module, a module that uses the int10 call to the BIOS
+of the graphics card to initialize it. Default: false.
+.TP 7
+.BI "Option \*qNoMTRR\*q"
+Disables MTRR (Memory Type Range Register) support, a feature of modern
+processors which can improve video performance by a factor of up to 2.5.
+Some hardware has buggy MTRR support, and some video drivers have been
+known to exhibit problems when MTRR's are used.
+.TP 7
+.BI "Option \*qXaaNoCPUToScreenColorExpandFill\*q"
+Disables accelerated rectangular expansion blits from source patterns
+stored in system memory (using a memory-mapped aperture).
+.TP 7
+.BI "Option \*qXaaNoColor8x8PatternFillRect\*q"
+Disables accelerated fills of a rectangular region with a full-color
+pattern.
+.TP 7
+.BI "Option \*qXaaNoColor8x8PatternFillTrap\*q"
+Disables accelerated fills of a trapezoidal region with a full-color
+pattern.
+.TP 7
+.BI "Option \*qXaaNoDashedBresenhamLine\*q"
+Disables accelerated dashed Bresenham line draws.
+.TP 7
+.BI "Option \*qXaaNoDashedTwoPointLine\*q"
+Disables accelerated dashed line draws between two arbitrary points.
+.TP 7
+.BI "Option \*qXaaNoImageWriteRect\*q"
+Disables accelerated transfers of full-color rectangular patterns from
+system memory to video memory (using a memory-mapped aperture).
+.TP 7
+.BI "Option \*qXaaNoMono8x8PatternFillRect\*q"
+Disables accelerated fills of a rectangular region with a monochrome
+pattern.
+.TP 7
+.BI "Option \*qXaaNoMono8x8PatternFillTrap\*q"
+Disables accelerated fills of a trapezoidal region with a monochrome
+pattern.
+.TP 7
+.BI "Option \*qXaaNoOffscreenPixmaps\*q"
+Disables accelerated draws into pixmaps stored in offscreen video memory.
+.TP 7
+.BI "Option \*qXaaNoPixmapCache\*q"
+Disables caching of patterns in offscreen video memory.
+.TP 7
+.BI "Option \*qXaaNoScanlineCPUToScreenColorExpandFill\*q"
+Disables accelerated rectangular expansion blits from source patterns
+stored in system memory (one scan line at a time).
+.TP 7
+.BI "Option \*qXaaNoScanlineImageWriteRect\*q"
+Disables accelerated transfers of full-color rectangular patterns from
+system memory to video memory (one scan line at a time).
+.TP 7
+.BI "Option \*qXaaNoScreenToScreenColorExpandFill\*q"
+Disables accelerated rectangular expansion blits from source patterns
+stored in offscreen video memory.
+.TP 7
+.BI "Option \*qXaaNoScreenToScreenCopy\*q"
+Disables accelerated copies of rectangular regions from one part of
+video memory to another part of video memory.
+.TP 7
+.BI "Option \*qXaaNoSolidBresenhamLine\*q"
+Disables accelerated solid Bresenham line draws.
+.TP 7
+.BI "Option \*qXaaNoSolidFillRect\*q"
+Disables accelerated solid-color fills of rectangles.
+.TP 7
+.BI "Option \*qXaaNoSolidFillTrap\*q"
+Disables accelerated solid-color fills of Bresenham trapezoids.
+.TP 7
+.BI "Option \*qXaaNoSolidHorVertLine\*q"
+Disables accelerated solid horizontal and vertical line draws.
+.TP 7
+.BI "Option \*qXaaNoSolidTwoPointLine\*q"
+Disables accelerated solid line draws between two arbitrary points.
+.PP
+Each
+.B Screen
+section may optionally contain one or more
+.B Display
+subsections. Those subsections provide depth/fbbpp specific configuration
+information, and the one chosen depends on the depth and/or fbbpp that
+is being used for the screen. The
+.B Display
+subsection format is described in the section below.
+
+.SH DISPLAY SUBSECTION
+Each
+.B Screen
+section may have multiple
+.B Display
+subsections.
+The "active"
+.B Display
+subsection is the first that matches the depth and/or fbbpp values being
+used, or failing that, the first that has neither a depth or fbbpp value
+specified. The
+.B Display
+subsections are optional. When there isn't one that matches the depth
+and/or fbbpp values being used, all the parameters that can be specified
+here fall back to their defaults.
+.PP
+.B Display
+subsections have the following format:
+.PP
+.RS 4
+.nf
+.B " SubSection \*qDisplay\*q"
+.BI " Depth " depth
+.I " entries"
+.I " ..."
+.B " EndSubSection"
+.fi
+.RE
+.PP
+.TP 7
+.BI "Depth " depth
+This entry specifies what colour depth the
+.B Display
+subsection is to be used for. This entry is usually specified,
+but it may be omitted to create a match-all
+.B Display
+subsection or when wishing to match only against the
+.B FbBpp
+parameter. The range of
+.I depth
+values that are allowed depends on the driver. Most driver support
+8, 15, 16 and 24. Some also support 1 and/or 4, and some may support
+other values (like 30). Note:
+.I depth
+means the number of bits in a pixel that are actually used to determine
+the pixel colour. 32 is not a valid
+.I depth
+value. Most hardware that uses 32 bits per pixel only uses 24 of them
+to hold the colour information, which means that the colour depth is
+24, not 32.
+.TP 7
+.BI "FbBpp " bpp
+This entry specifies the framebuffer format this
+.B Display
+subsection is to be used for. This entry is only needed when providing
+depth 24 configurations that allow a choice between a 24 bpp packed
+framebuffer format and a 32bpp sparse framebuffer format. In most cases
+this entry should not be used.
+.TP 7
+.BI "Weight " "red-weight green-weight blue-weight"
+This optional entry specifies the relative RGB weighting to be used
+for a screen is being used at depth 16 for drivers that allow multiple
+formats. This may also be specified from the command line with the
+.B \-weight
+option (see __xservername__(__appmansuffix__)).
+.TP 7
+.BI "Virtual " "xdim ydim"
+This optional entry specifies the virtual screen resolution to be used.
+.I xdim
+must be a multiple of either 8 or 16 for most drivers, and a multiple
+of 32 when running in monochrome mode. The given value will be rounded
+down if this is not the case. Video modes which are too large for the
+specified virtual size will be rejected. If this entry is not present,
+the virtual screen resolution will be set to accommodate all the valid
+video modes given in the
+.B Modes
+entry. Some drivers/hardware combinations do not support virtual screens.
+Refer to the appropriate driver-specific documentation for details.
+.TP 7
+.BI "ViewPort " "x0 y0"
+This optional entry sets the upper left corner of the initial display.
+This is only relevant when the virtual screen resolution is different
+from the resolution of the initial video mode. If this entry is not
+given, then the initial display will be centered in the virtual display
+area.
+.TP 7
+.BI "Modes \*q" mode-name \*q " ..."
+This optional entry specifies the list of video modes to use. Each
+.I mode-name
+specified must be in double quotes. They must correspond to those
+specified or referenced in the appropriate
+.B Monitor
+section (including implicitly referenced built-in VESA standard modes).
+The server will delete modes from this list which don't satisfy various
+requirements. The first valid mode in this list will be the default
+display mode for startup. The list of valid modes is converted internally
+into a circular list. It is possible to switch to the next mode with
+.B Ctrl+Alt+Keypad-Plus
+and to the previous mode with
+.BR Ctrl+Alt+Keypad-Minus .
+When this entry is omitted, the valid modes referenced by the appropriate
+.B Monitor
+section will be used. If the
+.B Monitor
+section contains no modes, then the selection will be taken from the
+built-in VESA standard modes.
+.TP 7
+.BI "Visual \*q" visual-name \*q
+This optional entry sets the default root visual type. This may also
+be specified from the command line (see the Xserver(__appmansuffix__) man page). The
+visual types available for depth 8 are (default is
+.BR PseudoColor ):
+.PP
+.RS 11
+.nf
+.B StaticGray
+.B GrayScale
+.B StaticColor
+.B PseudoColor
+.B TrueColor
+.B DirectColor
+.fi
+.RE
+.PP
+.RS 7
+The visual type available for the depths 15, 16 and 24 are (default is
+.BR TrueColor ):
+.PP
+.RS 4
+.nf
+.B TrueColor
+.B DirectColor
+.fi
+.RE
+.PP
+Not all drivers support
+.B DirectColor
+at these depths.
+.PP
+The visual types available for the depth 4 are (default is
+.BR StaticColor ):
+.PP
+.RS 4
+.nf
+.B StaticGray
+.B GrayScale
+.B StaticColor
+.B PseudoColor
+.fi
+.RE
+.PP
+The visual type available for the depth 1 (monochrome) is
+.BR StaticGray .
+.RE
+.TP 7
+.BI "Black " "red green blue"
+This optional entry allows the "black" colour to be specified. This
+is only supported at depth 1. The default is black.
+.TP 7
+.BI "White " "red green blue"
+This optional entry allows the "white" colour to be specified. This
+is only supported at depth 1. The default is white.
+.TP 7
+.B Options
+Option flags may be specified in the
+.B Display
+subsections. These may include driver-specific options and
+driver-independent options. The former are described in the
+driver-specific documentation. Some of the latter are described above
+in the section about the
+.B Screen
+section, and they may also be included here.
+.SH SERVERLAYOUT SECTION
+The config file may have multiple
+.B ServerLayout
+sections.
+A "server layout" represents the binding of one or more screens
+.RB ( Screen
+sections) and one or more input devices
+.RB ( InputDevice
+sections) to form a complete configuration. In multi-head configurations,
+it also specifies the relative layout of the heads. A
+.B ServerLayout
+section is considered "active" if it is referenced by the
+.B \-layout
+command line option or by an
+.B "Option \*qDefaultServerLayout\*q"
+entry in the
+.B ServerFlags
+section (the former takes precedence over the latter). If those options are
+not used, the first
+.B ServerLayout
+section found in the config file is considered the active one. If no
+.B ServerLayout
+sections are present, the single active screen and two active (core)
+input devices are selected as described in the relevant sections above.
+.PP
+.B ServerLayout
+sections have the following format:
+.PP
+.RS 4
+.nf
+.B "Section \*qServerLayout\*q"
+.BI " Identifier \*q" name \*q
+.BI " Screen \*q" screen-id \*q
+.I " ..."
+.BI " InputDevice \*q" idev-id \*q
+.I " ..."
+.I " options"
+.I " ..."
+.B "EndSection"
+.fi
+.RE
+.PP
+Each
+.B ServerLayout
+section must have an
+.B Identifier
+entry and at least one
+.B Screen
+entry.
+.PP
+The
+.B Identifier
+entry specifies the unique name for this server layout. The
+.B ServerLayout
+section provides information specific to the whole session, including
+session-specific
+.BR Options .
+The
+.B ServerFlags
+options (described above) may be specified here, and ones given here
+override those given in the
+.B ServerFlags
+section.
+.PP
+The entries that may be used in this section are described here.
+.TP 7
+.BI "Screen " "screen-num" " \*qscreen-id\*q " "position-information"
+One of these entries must be given for each screen being used in
+a session. The
+.I screen-id
+field is mandatory, and specifies the
+.B Screen
+section being referenced. The
+.I screen-num
+field is optional, and may be used to specify the screen number
+in multi-head configurations. When this field is omitted, the
+screens will be numbered in the order that they are listed in.
+The numbering starts from 0, and must be consecutive. The
+.I position-information
+field describes the way multiple screens are positioned. There are
+a number of different ways that this information can be provided:
+.RS 7
+.TP 4
+.I "x y"
+.TP 4
+.BI "Absolute " "x y"
+These both specify that the upper left corner's coordinates are
+.RI ( x , y ).
+The
+.B Absolute
+keyword is optional. Some older versions of __xservername__ (4.2 and earlier) don't
+recognise the
+.B Absolute
+keyword, so it's safest to just specify the coordinates without it.
+.TP 4
+.BI "RightOf \*q" screen-id \*q
+.TP 4
+.BI "LeftOf \*q" screen-id \*q
+.TP 4
+.BI "Above \*q" screen-id \*q
+.TP 4
+.BI "Below \*q" screen-id \*q
+.TP 4
+.BI "Relative \*q" screen-id \*q " x y"
+These give the screen's location relative to another screen. The first four
+position the screen immediately to the right, left, above or below the
+other screen. When positioning to the right or left, the top edges are
+aligned. When positioning above or below, the left edges are aligned.
+The
+.B Relative
+form specifies the offset of the screen's origin (upper left corner)
+relative to the origin of another screen.
+.RE
+.TP 7
+.BI "InputDevice \*q" idev-id "\*q \*q" option \*q " ..."
+One of these entries should be given for each input device being used in
+a session. Normally at least two are required, one each for the core
+pointer and keyboard devices. If either of those is missing, suitable
+.B InputDevice
+entries are searched for using the method described above in the
+.B INPUTDEVICE
+section. The
+.I idev-id
+field is mandatory, and specifies the name of the
+.B InputDevice
+section being referenced. Multiple
+.I option
+fields may be specified, each in double quotes. The options permitted
+here are any that may also be given in the
+.B InputDevice
+sections. Normally only session-specific input device options would be
+used here. The most commonly used options are:
+.PP
+.RS 11
+.nf
+.B \*qCorePointer\*q
+.B \*qCoreKeyboard\*q
+.B \*qSendCoreEvents\*q
+.fi
+.RE
+.PP
+.RS 7
+and the first two should normally be used to indicate the core pointer
+and core keyboard devices respectively.
+.RE
+.TP 7
+.B Options
+Any option permitted in the
+.B ServerFlags
+section may also be specified here. When the same option appears in both
+places, the value given here overrides the one given in the
+.B ServerFlags
+section.
+.PP
+Here is an example of a
+.B ServerLayout
+section for a dual headed configuration with two mice:
+.PP
+.RS 4
+.nf
+.B "Section \*qServerLayout\*q"
+.B " Identifier \*qLayout 1\*q"
+.B " Screen \*qMGA 1\*q"
+.B " Screen \*qMGA 2\*q RightOf \*qMGA 1\*q"
+.B " InputDevice \*qKeyboard 1\*q \*qCoreKeyboard\*q"
+.B " InputDevice \*qMouse 1\*q \*qCorePointer\*q"
+.B " InputDevice \*qMouse 2\*q \*qSendCoreEvents\*q"
+.B " Option \*qBlankTime\*q \*q5\*q"
+.B "EndSection"
+.fi
+.RE
+.SH DRI SECTION
+This optional section is used to provide some information for the
+Direct Rendering Infrastructure. Details about the format of this section
+can be found in the README.DRI document, which is also available on-line
+at
+.IR <http://www.x.org> .
+.SH VENDOR SECTION
+The optional
+.B Vendor
+section may be used to provide vendor-specific configuration information.
+Multiple
+.B Vendor
+sections may be present, and they may contain an
+.B Identifier
+entry and multiple
+.B Option
+flags. The data therein is not used in this release.
+.PP
+.SH FILES
+For an example of an __xconfigfile__ file, see the file installed as
+__projectroot__/lib/X11/__xconfigfile__.eg.
+.fi
+.SH "SEE ALSO"
+X(__miscmansuffix__),
+Xserver(__appmansuffix__),
+__xservername__(__appmansuffix__),
+apm(__drivermansuffix__),
+.\" .IR ati(__drivermansuffix__),
+chips(__drivermansuffix__),
+cirrus(__drivermansuffix__),
+cyrix(__drivermansuffix__),
+fbdev(__drivermansuffix__),
+glide(__drivermansuffix__),
+glint(__drivermansuffix__),
+i128(__drivermansuffix__),
+i740(__drivermansuffix__),
+i810(__drivermansuffix__),
+imstt(__drivermansuffix__),
+mga(__drivermansuffix__),
+neomagic(__drivermansuffix__),
+nv(__drivermansuffix__),
+r128(__drivermansuffix__),
+rendition(__drivermansuffix__),
+savage(__drivermansuffix__),
+s3virge(__drivermansuffix__),
+.\" .IR shadowfb(__drivermansuffix__),
+siliconmotion(__drivermansuffix__),
+sis(__drivermansuffix__),
+sunbw2(__drivermansuffix__),
+suncg14(__drivermansuffix__),
+suncg3(__drivermansuffix__),
+suncg6(__drivermansuffix__),
+sunffb(__drivermansuffix__),
+sunleo(__drivermansuffix__),
+suntcx(__drivermansuffix__),
+tdfx(__drivermansuffix__),
+tga(__drivermansuffix__),
+trident(__drivermansuffix__),
+tseng(__drivermansuffix__),
+v4l(__drivermansuffix__),
+vesa(__drivermansuffix__),
+vga(__drivermansuffix__),
+vmware(__drivermansuffix__),
+.br
+.SH AUTHORS
+This manual page was largely rewritten by David Dawes
+.IR <dawes@xfree86.org> .
diff --git a/hw/xfree86/getconfig/xorg.cfg b/hw/xfree86/getconfig/xorg.cfg
new file mode 100644
index 000000000..6853ca2bd
--- /dev/null
+++ b/hw/xfree86/getconfig/xorg.cfg
@@ -0,0 +1,50 @@
+# $XdotOrg: xc/programs/Xserver/hw/xfree86/getconfig/xorg.cfg,v 1.1.6.1 2004/04/02 21:47:28 eich Exp $
+
+# Base Xorg getconfig rules file.
+
+#
+# The line below is the getconfig rules file signature, and must be the
+# first non-blank, non-comment line.
+#
+
+Xorg Project getconfig rules file. Version: 1.0
+
+#
+# Set the weight for the following rules. This should be set, otherwise
+# the previously set weight will get used, and you have no idea of knowing
+# what that might be.
+#
+
+$weight = 1000
+
+#
+# Rules. Rules consist of a condition (in perl code) followed by
+# a driver name and optionally some additional strings. The start of a
+# rule is indicated by a line with no leading white space. subsequent
+# lines making up a rule must be indented. Logical lines may be split
+# over multiple physical lines by using the usual continuation '\'.
+#
+# Rules that are not followed by a driver name may be used to do other
+# things, like setting the weight as above.
+#
+
+#
+# Pre-defined variables include:
+#
+# $vendor PCI vendor ID
+# $device PCI device ID
+# $revision PCI revision ID
+# $subsys PCI subsystem ID
+# $subsysVendor PCI subsystem vendor ID
+# $class PCI class
+# $XorgVersion Xorg version, as a 'v' string.
+#
+# The Xorg version information is also available as the following:
+#
+# $XorgVersionNumeric
+# $XorgVersionMajor
+# $XorgVersionMinor
+# $XorgVersionPatch
+# $XorgVersionSnap
+#
+
diff --git a/hw/xfree86/utils/xorgcfg/XOrgCfg.pre b/hw/xfree86/utils/xorgcfg/XOrgCfg.pre
new file mode 100644
index 000000000..580998cb3
--- /dev/null
+++ b/hw/xfree86/utils/xorgcfg/XOrgCfg.pre
@@ -0,0 +1,1851 @@
+!!
+!! Copyright (c) 2000 by Conectiva S.A. (http://www.conectiva.com)
+!!
+!! 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
+!! CONECTIVA LINUX 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 Conectiva Linux shall
+!! not be used in advertising or otherwise to promote the sale, use or other
+!! dealings in this Software without prior written authorization from
+!! Conectiva Linux.
+!!
+!! Author: Paulo César Pereira de Andrade <pcpa@conectiva.com.br>
+!!
+!! $XFree86: xc/programs/Xserver/hw/xfree86/xf86cfg/XF86Cfg.ad,v 1.13 2001/05/15 18:22:23 paulo Exp $
+!!
+
+*Form.background: gray85
+*Label.background: gray85
+!! keyboard
+*Core.background: gray85
+*Label.foreground: gray20
+*Command.background: gray80
+*Command.foreground: gray20
+*Command.borderWidth: 0
+*Command.displayList:\
+foreground gray60;\
+lines 1,-1,-1,-1,-1,1;\
+foreground gray90;\
+lines -1,0,0,0,0,-1
+
+*Text.?.foreground: gray20
+*Text.borderWidth: 0
+*Text.background: gray96
+*Text.?.cursorColor: rgb:d/5/5
+*Text.displayList:\
+foreground white;\
+lines 1,-1,-1,-1,-1,1;\
+foreground gray40;\
+lines -1,0,0,0,0,-1
+
+*baseTranslations: #override \
+<Key>Escape: vidmode-restore()
+
+*List.background: gray96
+*List.foreground: gray20
+*Viewport.borderColor: gray40
+*List.borderColor: gray40
+
+*MenuButton.background: gray80
+*MenuButton.foreground: gray20
+*MenuButton.borderWidth: 0
+*MenuButton.displayList:\
+line-style solid;\
+foreground gray40;\
+lines 1,-1,-1,-1,-1,1;\
+foreground gray90;\
+lines -1,0,0,0,0,-1;\
+line-style onoffdash;\
+foreground gray80;\
+draw-rect 1,1,-2,-2
+
+*SimpleMenu.background: gray80
+*SimpleMenu.?.foreground: gray20
+*SimpleMenu.borderWidth: 0
+*SimpleMenu.displayList:\
+foreground gray40;\
+lines 1,-1,-1,-1,-1,1;\
+foreground gray90;\
+lines -1,0,0,0,0,-1
+
+*Dialog.displayList:\
+foreground gray40;\
+lines 1,-1,-1,-1,-1,1;\
+foreground gray90;\
+lines -1,0,0,0,0,-1
+
+*Toggle.background: gray80
+*Toggle.foreground: gray20
+*Toggle.borderWidth: 0
+*Toggle.displayList:\
+foreground gray90;\
+lines 1,-1,-1,-1,-1,1;\
+foreground gray40;\
+lines -1,0,0,0,0,-1
+
+*mouse.bitmap: mouse.xbm
+*keyboard.bitmap: keyboard.xbm
+*card.bitmap: card.xbm
+*monitor.bitmap: monitor.xbm
+
+*Label.borderWidth: 0
+*Viewport.forceBars: True
+*Viewport.allowVert: True
+*Viewport.useRight: True
+
+.xf86cfg.geometry: 320x400
+.xf86cfg.minWidth: 320
+.xf86cfg.minHeight: 400
+.xf86cfg.maxWidth: 320
+.xf86cfg.maxHeight: 400
+
+.xf86cfg.config.geometry: 320x369
+.xf86cfg.config.minWidth: 320
+.xf86cfg.config.maxWidth: 320
+.xf86cfg.config.minHeight: 369
+.xf86cfg.config.maxHeight: 369
+
+*work.width: 320
+*work.height: 240
+
+*error.label.label:\
+Not all required fields\n\
+were filled, or the specified\n\
+identifier is duplicated.
+*error.label.vertDistance: 30
+*error.label.borderWidth: 0
+*error.label.leftBitmap: Excl
+*error.command.fromVert: label
+*error.command.label: Ok
+*error.command.vertDistance: 20
+
+*Scrollbar.translations:\
+<BtnDown>: StartScroll(Continuous) MoveThumb() NotifyThumb()\n\
+<BtnMotion>: MoveThumb() NotifyThumb()\n\
+<BtnUp>: NotifyScroll(Proportional) EndScroll()
+
+*Scrollbar.background: gray80
+*Scrollbar.foreground: rgb:a/5/5
+*Scrollbar.borderWidth: 0
+*Scrollbar.thumb: vlines2
+*Scrollbar.displayList:\
+foreground gray90;\
+lines 1,-1,-1,-1,-1,1;\
+foreground gray40;\
+lines -1,0,0,0,0,-1
+
+*Text.Translations: #override \
+<Enter>: no-op()\n\
+<Leave>: no-op()\n\
+<Btn1Down>: set-keyboard-focus() select-start()
+
+*top.identifier.Translations: #override \
+<Enter>: no-op()\n\
+<Leave>: no-op()\n\
+<Key>Return: no-op()\n\
+<Btn1Down>: set-keyboard-focus() select-start()
+
+*List.showCurrent: True
+*Tip.timeout: 100
+*Tip.background: rgb:f/f/8
+*Tip.foreground: gray20
+*Tip.borderWidth: 0
+*Tip.displayList:\
+foreground rgb:8/8/4;\
+lines 1,-1,-1,-1,-1,1;\
+foreground rgb:f/f/c;\
+lines -1,0,0,0,0,-1
+
+*Toggle.internalHeight: 2
+*Toggle.internalWidth: 2
+*mouse.label: Mouse
+*keyboard.label: Keyboard
+*card.label: Card
+*monitor.label: Monitor
+
+*commands.borderWidth: 0
+*commands.defaultDistance: 2
+*commands.?.bottom: chainTop
+*commands.height: 50
+
+*commands.keyboard.fromHoriz: mouse
+*card.fromHoriz: keyboard
+*monitor.fromHoriz: card
+
+*commands.mouse*new.label: Add new mouse
+*commands.keyboard*new.label: Add new keyboard
+*commands.card*new.label: Add new video card
+*commands.monitor*new.label: Add new monitor
+*commands.mouse*configure.label: Configure mouse(s)
+*commands.keyboard*configure.label: Configure keyboard(s)
+*commands.card*configure.label: Configure video card(s)
+*commands.monitor*configure.label: Configure monitor(s)
+*commands.mouse*SimpleMenu*newMouse.label: New mouse
+*commands.keyboard*SimpleMenu*newKeyboard.label:New keyboard
+*commands.card*SimpleMenu*newcard.label: New card
+*commands.monitor*SimpleMenu*newMonitor.label: New monitor
+
+*commands.MenuButton.translations: \
+<Enter>: highlight()\n\
+<Leave>: reset()\n\
+Any<BtnDown>: highlight() set() PopupMenu()
+
+*hpane.showGrip: False
+*hpane.expert.label: Expert Mode
+*topM.min: 200
+*topM.max: 200
+*topM.justify: left
+*topM.label: Configure Layout
+*topM*layout.label: Configure Layout
+*topM*screen.label: Configure Screen
+*topM*modeline.label: Configure Modeline
+*topM*accessx.label: Configure AccessX
+*topM.showGrip: False
+*work.showGrip: False
+
+*MenuButton.leftBitmap: menu10
+*SmeBSB.HorizontalMargins: 18
+
+*back.label: << Back
+*next.label: Next >>
+*ok.label: Ok
+*cancel.label: Cancel
+*yes.label: Yes
+*no.label: No
+
+*help.label: Help
+*quit.label: Quit
+*next.fromHoriz: back
+*config*ok.fromHoriz: next
+*bottom*cancel.fromHoriz: ok
+*top.displayList:\
+foreground gray60;\
+lines 1,-1,-1,-1,-1,1;\
+foreground white;\
+lines -1,0,0,0,0,-1
+*bottom.displayList:\
+foreground gray60;\
+lines 1,-1,-1,-1,-1,1;\
+foreground white;\
+lines -1,0,0,0,0,-1
+*work.displayList:\
+foreground gray60;\
+lines 1,-1,-1,-1,-1,1;\
+foreground white;\
+lines -1,0,0,0,0,-1
+*options.pane.Form.displayList:\
+foreground gray60;\
+lines 1,-1,-1,-1,-1,1;\
+foreground white;\
+lines -1,0,0,0,0,-1
+
+*top.label.label: Identifier:
+*top.label.borderWidth: 0
+*top.identifier.fromHoriz: label
+*top.label.internalHeight: 3
+*top.label.justify: left
+*top.label.left: chainLeft
+*top.label.right: chainLeft
+*top.identifier.left: chainLeft
+*top.identifier.right: chainRight
+
+*bottom.layout.translations: #override \
+<Key>Return: rename-layout()
+*bottom.layout.label: New server layout
+*bottom.layout.tip: Type a text and press Return to rename this layout
+*bottom.Command.height: 19
+*bottom.Text.height: 19
+*bottom.MenuButton.height: 19
+*bottom*new.label: New server layout
+*layout.fromHoriz: select
+*help.fromHoriz: layout
+*bottom.layout.justify: left
+*bottom.select.label: Layout
+*bottom.select.left: chainLeft
+*bottom.select.right: chainLeft
+*bottom.layout.left: chainLeft
+*quit.fromHoriz: help
+*bottom.?.left: chainRight
+*bottom.?.right: chainRight
+*bottom.?.top: chainBottom
+*bottom.?.bottom: chainBottom
+
+*pane.bottom.min: 30
+*pane.bottom.max: 30
+*pane.bottom.showGrip: False
+*pane.bottom.defaultDistance: 5
+
+!! Wellcome message
+*work.wellcome.borderWidth: 0
+*work.wellcome.label: Welcome to __VENDORNAME__ 4.0 setup program
+*work.?.borderWidth: 0
+!*work.?.width: 310
+*work.?.height: 290
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!! mouseDP widget
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+*mouseDP*Label.internalHeight: 0
+*mouseDP*Label.borderWidth: 0
+*mouseDP.labelD.vertDistance: 0
+*mouseDP.labelD.label: Select mouse device
+*mouseDP.device.fromVert: labelD
+*mouseDP.viewportD.fromVert: device
+*mouseDP.device.width: 302
+*mouseDP.viewportD.vertDistance: 2
+*mouseDP.viewportD.listD.longest: 135
+*mouseDP.viewportD.width: 302
+*mouseDP.viewportD.height: 87
+*mouseDP.labelP.label: Select mouse protocol
+*mouseDP.labelP.vertDistance: 10
+*mouseDP.labelP.fromVert: viewportD
+*mouseDP.viewportP.fromVert: labelP
+*mouseDP.viewportP.forceBars: True
+*mouseDP.viewportP.allowVert: True
+*mouseDP.viewportP.useRight: True
+*mouseDP.viewportP.listP.longest: 135
+*mouseDP.viewportP.width: 302
+*mouseDP.viewportP.height: 110
+*mouseDP.viewportP.vertDistance: 6
+*mouseDP*List.verticalList: True
+*mouseDP.emulate3.fromVert: viewportP
+*mouseDP.emulate3.width: 180
+*mouseDP.apply.label: Apply changes
+*mouseDP.apply.fromVert: viewportP
+*mouseDP.apply.fromHoriz: emulate3
+*mouseDP.apply.width: 116
+*mouseDP.emulate3.vertDistance: 10
+*mouseDP.apply.vertDistance: 10
+*mouseDP.emulate3.label: Emulate 3 buttons
+*mouseDP.emulate3.tip: Select if your mouse has only two buttons
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!! keyboardML widget
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+*keyboardML.Label.vertDistance: 8
+*keyboardML.MenuButton.vertDistance: 8
+*keyboardML.keyboard.vertDistance: 10
+*keyboardML.Label.borderWidth: 0
+*keyboardML.Label.width: 115
+*keyboardML.MenuButton.width: 185
+*keyboardML.MenuButton.justify: left
+*keyboardML.Label.internalWidth: 0
+*keyboardML.Label.justify: right
+*keyboardML.labelR.label: Xkb rules:
+*keyboardML.rules.left: chainRight
+*keyboardML.rules.right: chainRight
+*keyboardML.rules.fromHoriz: labelR
+*keyboardML.model.fromVert: rules
+*keyboardML.labelM.fromVert: rules
+*keyboardML.model.left: chainRight
+*keyboardML.model.right: chainRight
+*keyboardML.model.fromHoriz: labelM
+*keyboardML.labelM.label: Keyboard model:
+*keyboardML.layout.left: chainRight
+*keyboardML.layout.right: chainRight
+*keyboardML.layout.fromVert: model
+*keyboardML.labelL.fromVert: model
+*keyboardML.layout.fromHoriz: labelL
+*keyboardML.labelL.label: Keyboard layout:
+*keyboardML.variant.fromVert: labelL
+*keyboardML.variant.fromHoriz: labelV
+*keyboardML.labelV.fromVert: labelL
+*keyboardML.labelV.label: Xkb variant:
+*keyboardML.options.fromVert: labelV
+*keyboardML.options.fromHoriz: labelO
+*keyboardML.labelO.fromVert: labelV
+*keyboardML.labelO.label: Xkb options:
+*keyboardML.keyboard.fromVert: labelO
+*keyboardML.keyboard.borderWidth: 0
+*keyboardML.keyboard.width: 305
+*keyboardML.keyboard.height: 121
+*keyboardML.apply.vertDistance: 16
+*keyboardML.apply.fromVert: keyboard
+*keyboardML.apply.label: Apply changes
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!! cardModel widget
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+*cardModel.label.internalHeight: 0
+*cardModel.keyboard.borderWidth: 0
+*cardModel.label.label: Card model filter
+*cardModel.label.internalHeight: 2
+*cardModel.label.borderWidth: 0
+*cardModel.viewport.vertDistance: 2
+*cardModel.viewport.fromVert: filter
+*cardModel.filter.fromHoriz: label
+*cardModel.filter.width: 171
+*cardModel.viewport.width: 302
+*cardModel.viewport.height: 212
+*cardModel.driver.justify: left
+*cardModel.driverL.label: Driver
+*cardModel.driverL.fromVert: viewport
+*cardModel.driverL.width: 50
+*cardModel.driverL.justify: right
+*cardModel.driver.fromVert: viewport
+*cardModel.driver.fromHoriz: driverL
+*cardModel.driver.width: 250
+*cardModel.driver.left: chainRight
+*cardModel.driver.right: chainRight
+*cardModel.busidL.label: BusID
+*cardModel.busidL.fromVert: driver
+*cardModel.busidL.width: 50
+*cardModel.busidL.justify: right
+*cardModel.busid.fromVert: driver
+*cardModel.busid.fromHoriz: busidL
+*cardModel.busid.width: 250
+*cardModel.busid.left: chainRight
+*cardModel.busid.right: chainRight
+*cardModel.viewport.forceBars: True
+*cardModel.viewport.allowVert: True
+*cardModel.viewport.useRight: True
+*cardModel.viewport.list.longest: 277
+*cardModel.filter.tip: Type name or vendor of your card and press enter
+*cardModel.filter.translations: #override \
+<Key>Return: filter-card()
+
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!! main widget
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+*work.cpu.backgroundPixmap: computer.xpm
+*work.mouse.backgroundPixmap: mouse.xpm
+*work.keyboard.backgroundPixmap: keyboard.xpm
+*work.card.backgroundPixmap: card.xpm
+*work.monitor.backgroundPixmap: monitor.xpm
+
+*work.cpu.x: 130
+*work.cpu.y: 160
+*work.cpu.width: 30
+*work.cpu.height: 50
+*work.mouse.width: 26
+*work.mouse.height: 35
+*work.keyboard.width: 60
+*work.keyboard.height: 28
+*work.card.width: 41
+*work.card.height: 40
+*work.monitor.width: 47
+*work.monitor.height: 40
+
+.xf86cfg.pane.work.Simple.borderWidth: 1
+.xf86cfg.pane.work.Simple.translations:\
+Any<Btn1Down>: select-device()\n\
+Any<Btn1Motion>: move-device()\n\
+Any<Btn1Up>: unselect-device()\n\
+Any<Btn3Down>: device-popup()\n\
+Any<Btn3Up>: device-popdown()
+
+.xf86cfg.pane.work.screen.translations:\
+Any<Btn1Down>: select-device()\n\
+Any<Btn1Motion>: move-device()\n\
+Any<Btn1Up>: unselect-device()\n\
+Any<Btn3Down>: device-popup()\n\
+Any<Btn3Up>: device-popdown()
+
+XF86Cfg.translations: #override \
+<Message>WM_PROTOCOLS: quit()
+.xf86cfg.config.translations: #override \
+<Message>WM_PROTOCOLS: config-cancel()
+.xf86cfg.options.translations: #override \
+<Message>WM_PROTOCOLS: options-cancel()
+.xf86cfg.quit.translations: #override \
+<Message>WM_PROTOCOLS: quit-cancel()
+.xf86cfg.error.translations: #override \
+<Message>WM_PROTOCOLS: error-cancel()
+.xf86cfg.force.translations: #override \
+<Message>WM_PROTOCOLS: addmode-cancel()
+.xf86cfg.addMode.translations: #override \
+<Message>WM_PROTOCOLS: addmode-cancel()
+.xf86cfg.accessx.translations: #override \
+<Message>WM_PROTOCOLS: accessx-close()
+.xf86cfg.test.translations: #override \
+<Message>WM_PROTOCOLS: testmode-cancel()
+.xf86cfg.Expert.translations: #override \
+<Message>WM_PROTOCOLS: expert-close()
+.xf86cfg.options.moduleOptions.translations: #override \
+<Message>WM_PROTOCOLS: module-options-close()
+
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!! Options
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+.xf86cfg.options.geometry: 400x176
+.xf86cfg.options.minWidth: 400
+.xf86cfg.options.maxWidth: 400
+.xf86cfg.options.minHeight: 176
+.xf86cfg.options.maxHeight: 176
+
+*options*commands.remove.fromHoriz: add
+*options*commands.update.fromHoriz: remove
+*options*commands.help.fromHoriz: update
+*options*commands.min: 30
+*options*commands.max: 30
+*options*commands.showGrip: False
+*options*commands.defaultDistance: 4
+*options*commands.?.width: 100
+*options*commands.?.height: 20
+
+*options*name.fromHoriz: label1
+*options*label2.fromHoriz: name
+*options*value.fromHoriz: label2
+*options*label3.fromHoriz: value
+*options*viewport.fromVert: name
+*options*Label.borderWidth: 0
+*options.pane.form.Label.internalWidth: 0
+*options.pane.form.Label.height: 21
+*options.pane.form.Text.height: 19
+*options.pane.form.Label.top: chainTop
+*options.pane.form.Text.top: chainTop
+*options.pane.form.Label.bottom: chainTop
+*options.pane.form.Text.bottom: chainTop
+*options.pane.form.Label.horizDistance: 0
+*options.pane.form.Text.horizDistance: 0
+*options.pane.form.Label.vertDistance: 8
+*options.pane.form.Text.vertDistance: 8
+*options.pane.form.Text.width: 147
+*options*viewport.width: 390
+*options*viewport.height: 50
+
+*options*viewport.horizDistance: 7
+*options*label1.horizDistance: 5
+*options*viewport.left: chainLeft
+*options*viewport.right: chainRight
+*options*list.longest: 376
+
+*options*driverOpts.label: Options for module\
+*options*driverOpts.justify: left
+*options*driverOpts.width: 278
+*options*popdown.label: Popdown dialog
+*options*driverOpts.tip: This menu shows:\n\
+ o option name\n\
+ o option type
+
+.xf86cfg*options.moduleOptions.geometry: 360x245
+.xf86cfg*options.moduleOptions.minWidth: 360
+.xf86cfg*options.moduleOptions.maxWidth: 360
+.xf86cfg*options.moduleOptions.minHeight: 245
+.xf86cfg*options.moduleOptions.maxHeight: 245
+*options.moduleOptions*descriptions*labelType.label: Select option
+*options.moduleOptions*descriptions*labelType.width: 348
+*options.moduleOptions*descriptions*module.fromVert: labelType
+*options.moduleOptions*descriptions*module.label: Module
+*options.moduleOptions*descriptions*Label.horizDistance: 8
+*options.moduleOptions*descriptions*option.fromVert: labelType
+*options.moduleOptions*descriptions*option.label: Option
+*options.moduleOptions*descriptions*option.fromHoriz: viewM
+*options.moduleOptions*descriptions*viewM.fromVert: module
+*options.moduleOptions*descriptions*viewM.width: 120
+*options.moduleOptions*descriptions*viewM.height: 94
+*options.moduleOptions*descriptions*modL.longest: 100
+*options.moduleOptions*descriptions*viewO.fromHoriz: viewM
+*options.moduleOptions*descriptions*viewO.fromVert: option
+*options.moduleOptions*descriptions*viewO.width: 220
+*options.moduleOptions*descriptions*viewO.height: 94
+*options.moduleOptions*descriptions*optL.longest: 220
+*options.moduleOptions*descriptions*desc.horizDistance: 4
+*options.moduleOptions*descriptions*desc.fromVert: viewM
+*options.moduleOptions*descriptions*desc.width: 348
+*options.moduleOptions*descriptions*desc.height: 62
+*options.moduleOptions*descriptions*desc.wrap: word
+*options.moduleOptions*descriptions*desc.scrollVertical: Always
+*options.moduleOptions*descriptions*desc.Scrollbar.foreground: rgb:a/5/5
+*options.moduleOptions*descriptions*desc.Scrollbar.borderWidth: 1
+*options.moduleOptions*descriptions*desc.Scrollbar.borderColor: gray60
+*options.moduleOptions*descriptions.showGrip: False
+*options.moduleOptions*popdown.label: Popdown dialog
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!! monitor
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+*monitorl*Viewport.width: 302
+*monitorl*Text.width: 160
+*monitorl*Text.tip:\
+Select standard value from the list\n\
+below, or enter specific value here.
+
+*monitorl*hlabel.justify: right
+*monitorl*hlabel.width: 138
+*monitorl*hlabel.label: Horizontal sync
+*monitorl*hsync.fromHoriz: hlabel
+*monitorl*hviewport.fromVert: hsync
+*monitorl*hviewport.height: 156
+*monitorl*hlist.longest: 288
+
+*monitorl*vlabel.justify: right
+*monitorl*vlabel.width: 138
+*monitorl*vlabel.vertDistance: 12
+*monitorl*vsync.vertDistance: 12
+*monitorl*vlabel.fromVert: hviewport
+*monitorl*vsync.fromVert: hviewport
+*monitorl*vlabel.label: Vertical sync
+*monitorl*vsync.fromHoriz: vlabel
+*monitorl*vviewport.fromVert: vsync
+*monitorl*vviewport.height: 20
+*monitorl*vlist.longest: 64
+
+*monitorl*clabel.vertDistance: 12
+*monitorl*clabel.fromVert: vviewport
+*monitorl*clabel.label: Select card connected to monitor
+*monitorl*cmenu.fromVert: clabel
+*monitorl*cmenu.width: 302
+*monitorl*cmenu.justify: left
+*monitorl*none.label: None
+
+!! vidtune
+*vidtune.Repeater.borderWidth: 1
+*vidtune.Repeater.borderColor: gray90
+*vidtune.Repeater.shapeStyle: ellipse
+*vidtune.Repeater.foreground: gray30
+*vidtune.Repeater.background: gray80
+*vidtune.Repeater.width: 31
+*vidtune.Repeater.height: 29
+*vidtune.Repeater.repeatDelay: 200
+*vidtune.Repeater.decay: 0
+*vidtune.Repeater.displayList:\
+line-width 2;\
+foreground gray65;\
+draw-arc 0,0,-0,-0,230,180;\
+foreground gray95;\
+draw-arc 0,0,-0,-0,40,180;\
+foreground gray80;\
+draw-arc 0,0,-0,-0,220,10;\
+draw-arc 0,0,-0,-0,40,10
+*vidtune.Repeater.translations:\
+<Enter>: set-values(1, borderColor, gray50)\n\
+<Leave>: set-values(1, borderColor, gray90)\n\
+<Btn1Down>: set-values(1, borderColor, gray90) set() start()\n\
+<Btn1Up>: stop() unset()
+*vidtune.left.bitmap: left.xbm
+*vidtune.right.bitmap: right.xbm
+*vidtune.up.bitmap: up.xbm
+*vidtune.down.bitmap: down.xbm
+*vidtune.wider.bitmap: wider.xbm
+*vidtune.narrower.bitmap: narrower.xbm
+*vidtune.shorter.bitmap: shorter.xbm
+*vidtune.taller.bitmap: taller.xbm
+
+*vidtune.vesaB.label: Add standard VESA mode to current screen
+*vidtune.vesaB.width: 312
+
+*vidtune.screenB.fromVert: mode
+*vidtune.screenB.width: 160
+*vidtune.screenB.horizDistance: 80
+*vidtune.prev.fromVert: vesaB
+*vidtune.mode.fromVert: vesaB
+*vidtune.next.fromVert: vesaB
+*vidtune.prev.horizDistance: 54
+*vidtune.prev.label: <<
+*vidtune.mode.fromHoriz: prev
+*vidtune.mode.width: 160
+*vidtune.next.label: >>
+*vidtune.next.fromHoriz: mode
+
+*vidtune.up.fromVert: screenB
+*vidtune.up.horizDistance: 143
+*vidtune.left.horizDistance: 98
+*vidtune.left.vertDistance: 16
+*vidtune.left.fromVert: up
+*vidtune.monitor.fromVert: up
+*vidtune.monitor.vertDistance: 0
+*vidtune.monitor.fromHoriz: left
+*vidtune.right.vertDistance: 16
+*vidtune.right.fromVert: up
+*vidtune.right.fromHoriz: monitor
+*vidtune.down.horizDistance: 143
+*vidtune.down.fromVert: monitor
+*vidtune.wider.fromVert: left
+*vidtune.wider.horizDistance: 91
+*vidtune.narrower.fromVert: down
+*vidtune.narrower.fromHoriz: wider
+*vidtune.shorter.fromVert: down
+*vidtune.shorter.fromHoriz: narrower
+*vidtune.taller.fromVert: right
+*vidtune.taller.fromHoriz: shorter
+*vidtune.monitor.width: 47
+*vidtune.monitor.height: 40
+*vidtune.monitor.backgroundPixmap: monitor.xpm
+*vidtune.narrower.horizDistance: 0
+*vidtune.shorter.horizDistance: 2
+*vidtune.taller.horizDistance: 0
+*vidtune.wider.vertDistance: 20
+*vidtune.taller.vertDistance: 20
+*vidtune.narrower.vertDistance: 0
+*vidtune.shorter.vertDistance: 0
+*vidtune.down.vertDistance: 0
+
+*vidtune.monitor.tip:\
+\ WARNING\n\
+\ Using the controls here may damage your\n\
+monitor. You can safely skip this section\n\
+of the configuration process.\n\
+\n\
+Press ESC if your monitor goes out of sync.
+
+*vidtune.background: white
+*vidtune.form.borderWidth: 0
+*vidtune.form.background: white
+*vidtune.form.defaultDistance: 0
+*vidtune.form.vertDistance: 3
+*vidtune.form.horizDistance: 4
+*vidtune.form.Label.foreground: gray20
+*vidtune.form.Label.background: white
+*vidtune.form.Label.font: -*-fixed-*-*-*-*-10-*-*-*-*-*-*-1
+*vidtune.form.Label.vertDistance: 0
+*vidtune*Label.justify: right
+
+*vidtune.form.fromVert: auto
+*vidtune*hsyncstart.label: HSyncStart:
+*vidtune*hsyncstart.width: 95
+*vidtune*v-hsyncstart.width: 40
+*vidtune*v-hsyncstart.fromHoriz: hsyncstart
+*vidtune*vsyncstart.fromHoriz: v-hsyncstart
+*vidtune*v-vsyncstart.fromHoriz: vsyncstart
+*vidtune*vsyncstart.label: VSyncStart:
+*vidtune*vsyncstart.width: 95
+*vidtune*v-vsyncstart.width: 40
+*vidtune*hsyncend.label: HSyncEnd:
+*vidtune*hsyncend.width: 95
+*vidtune*v-hsyncend.width: 40
+*vidtune*v-hsyncend.fromHoriz: hsyncend
+*vidtune*hsyncend.fromVert: hsyncstart
+*vidtune*v-hsyncend.fromVert: v-hsyncstart
+*vidtune*vsyncend.label: VSyncEnd:
+*vidtune*vsyncend.width: 95
+*vidtune*v-vsyncend.width: 40
+*vidtune*vsyncend.fromHoriz: v-hsyncend
+*vidtune*v-vsyncend.fromHoriz: vsyncend
+*vidtune*vsyncend.fromVert: hsyncstart
+*vidtune*v-vsyncend.fromVert: v-vsyncstart
+*vidtune*htotal.label: HTotal:
+*vidtune*htotal.width: 95
+*vidtune*v-htotal.width: 40
+*vidtune*v-htotal.fromHoriz: htotal
+*vidtune*htotal.fromVert: hsyncend
+*vidtune*v-htotal.fromVert: v-hsyncend
+*vidtune*vtotal.label: VTotal:
+*vidtune*vtotal.width: 95
+*vidtune*v-vtotal.width: 40
+*vidtune*vtotal.fromHoriz: v-htotal
+*vidtune*v-vtotal.fromHoriz: vtotal
+*vidtune*vtotal.fromVert: vsyncend
+*vidtune*v-vtotal.fromVert: v-vsyncend
+*vidtune*flags.label: Flags:
+*vidtune*flags.width: 142
+*vidtune*v-flags.width: 156
+*vidtune*v-flags.justify: left
+*vidtune*v-flags.fromHoriz: flags
+*vidtune*flags.fromVert: vtotal
+*vidtune*v-flags.fromVert: v-vtotal
+*vidtune*clock.label: Pixel Clock (MHz):
+*vidtune*clock.width: 142
+*vidtune*v-clock.width: 48
+*vidtune*v-clock.fromHoriz: clock
+*vidtune*clock.fromVert: flags
+*vidtune*v-clock.fromVert: v-flags
+*vidtune*hsync.label: Horizontal Sync (kHz):
+*vidtune*hsync.width: 142
+*vidtune*v-hsync.width: 48
+*vidtune*v-hsync.fromHoriz: hsync
+*vidtune*hsync.fromVert: clock
+*vidtune*v-hsync.fromVert: v-clock
+*vidtune*vsync.label: Vertical Sync (Hz):
+*vidtune*vsync.width: 142
+*vidtune*v-vsync.width: 48
+*vidtune*v-vsync.fromHoriz: vsync
+*vidtune*vsync.fromVert: hsync
+*vidtune*v-vsync.fromVert: v-hsync
+
+*vidtune.auto.horizDistance: 43
+*vidtune.auto.fromVert: narrower
+*vidtune.auto.label: Auto
+!*vidtune.auto.state: True
+*vidtune.apply.fromVert: narrower
+*vidtune.apply.fromHoriz: auto
+*vidtune.apply.label: Apply
+*vidtune.restore.fromHoriz: apply
+*vidtune.restore.horizDistance: 4
+*vidtune.restore.fromVert: narrower
+*vidtune.restore.label: Restore
+*vidtune.update.fromVert: narrower
+*vidtune.update.fromHoriz: restore
+*vidtune.update.label: Update
+*vidtune.test.fromVert: narrower
+*vidtune.test.fromHoriz: update
+*vidtune.test.label: Test
+
+*vidtune.Label.background: white
+*vidtune.addto.vertDistance: 4
+*vidtune.addto.fromHoriz: add
+*vidtune.addto.fromVert: form
+*vidtune.addto.label: mode to
+*vidtune.addto.horizDistance: 0
+*vidtune.ident.vertDistance: 4
+*vidtune.ident.horizDistance: 0
+*vidtune.ident.fromVert: form
+*vidtune.ident.fromHoriz: addto
+*vidtune.ident.width: 98
+*vidtune.ident.justify: left
+*vidtune.as.vertDistance: 4
+*vidtune.as.horizDistance: 0
+*vidtune.as.fromVert: form
+*vidtune.as.fromHoriz: ident
+*vidtune.as.label: as:
+*vidtune.text.vertDistance: 4
+*vidtune.text.horizDistance: 0
+*vidtune.text.fromVert: form
+*vidtune.text.fromHoriz: as
+*vidtune.text.width: 98
+*vidtune.add.vertDistance: 4
+*vidtune.add.fromVert: form
+*vidtune.add.label: Add
+.xf86cfg.force.geometry: 268x58
+.xf86cfg.force.minWidth: 268
+.xf86cfg.force.maxWidth: 268
+.xf86cfg.force.minHeight: 58
+.xf86cfg.force.maxHeight: 58
+.xf86cfg.force.?.label: There is already a modeline with the\n\
+specified identifier. Add anyway?
+
+.xf86cfg.addMode.geometry: 350x80
+.xf86cfg.addMode.minWidth: 350
+.xf86cfg.addMode.maxWidth: 350
+.xf86cfg.addMode.minHeight: 80
+.xf86cfg.addMode.maxHeight: 80
+.xf86cfg.addMode.?.label: XF86VidModeAddModeLine returned True,\n\
+but no modeline was added to the current Screen.\n\
+Do you want to add it to the Monitor section?
+
+.xf86cfg.test.?.label: \ Testing modeline...\n\n\
+Press ESC or stop button to quit.
+.xf86cfg.test.geometry: 250x72
+.xf86cfg.test.minWidth: 250
+.xf86cfg.test.maxWidth: 250
+.xf86cfg.test.minHeight: 72
+.xf86cfg.test.maxHeight: 72
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!! screen
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+*screenD*depthL.label: Default color depth:
+*screenD*depthL.height: 20
+*screenD*1.fromHoriz: depthL
+*screenD*4.fromHoriz: 1
+*screenD*8.fromHoriz: 4
+*screenD*16.fromHoriz: 8
+*screenD*24.fromHoriz: 16
+*screenD*1.width: 24
+*screenD*4.width: 24
+*screenD*8.width: 24
+*screenD*16.width: 24
+*screenD*24.width: 24
+*screenD*1.horizDistance: 5
+*screenD*4.horizDistance: 5
+*screenD*8.horizDistance: 5
+*screenD*16.horizDistance: 5
+*screenD*24.horizDistance: 5
+*screenD*modeL.fromVert: depthL
+*screenD*modeL.vertDistance: 14
+*screenD*modeL.label: Select resolution(s):
+*screenD*viewL.fromVert: modeL
+*screenD*select.fromHoriz: viewL
+*screenD*unselect.fromHoriz: viewL
+*screenD*select.fromVert: modeL
+*screenD*unselect.fromVert: select
+*screenD*up.fromHoriz: viewL
+*screenD*down.fromHoriz: viewL
+*screenD*up.fromVert: unselect
+*screenD*down.fromVert: up
+*screenD*viewR.fromHoriz: select
+*screenD*viewR.fromVert: modeL
+*screenD*select.bitmap: right.xbm
+*screenD*unselect.bitmap: left.xbm
+*screenD*up.bitmap: up.xbm
+*screenD*down.bitmap: down.xbm
+*screenD*viewL.width: 133
+*screenD*viewR.width: 133
+*screenD*viewL.height: 184
+*screenD*viewR.height: 184
+*screenD*listLeft.longest: 128
+*screenD*listRight.longest: 128
+*screenD*rotate.tip: Don't select any option if\n\
+your monitor is not rotated.
+*screenD*rotate.vertDistance: 14
+*screenD*rotate.fromVert: viewL
+*screenD*rotate.label: Rotate screen:
+*screenD*CW.tip: Clock wise
+*screenD*CW.vertDistance: 14
+*screenD*CW.fromVert: viewL
+*screenD*CW.fromHoriz: rotate
+*screenD*CW.label: CW
+*screenD*CW.width: 40
+*screenD*CCW.tip: Counter-clock wise
+*screenD*CCW.vertDistance: 14
+*screenD*CCW.fromVert: viewL
+*screenD*CCW.fromHoriz: CW
+*screenD*CCW.label: CCW
+*screenD*CCW.width: 40
+
+*work.screen.width: 100
+*work.screen.height: 80
+
+
+*Dialog.background: gray85
+*quit.ask.label: Write configuration to
+*quit.ask.value.translations: #override \
+<Key>Return: write-config()
+*quit.ask.label.justify: left
+*quit.ask.value.width: 222
+*quit.ask.icon: Excl
+.xf86cfg.quit.geometry: 230x92
+.xf86cfg.quit.minWidth: 230
+.xf86cfg.quit.maxWidth: 230
+.xf86cfg.quit.minHeight: 92
+.xf86cfg.quit.maxHeight: 92
+
+*error.notice.label: Failed to write configuration file.
+.xf86cfg.error.geometry: 280x50
+.xf86cfg.error.minWidth: 260
+.xf86cfg.error.maxWidth: 260
+.xf86cfg.error.minHeight: 50
+.xf86cfg.error.maxHeight: 50
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!! accessx
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+*Accessx*Label.font: -*-fixed-medium-r-*-*-13-*-*-*-*-*-iso8859-1
+*Accessx.Form.Toggle.font: -*-fixed-medium-r-*-*-13-*-*-*-*-*-iso8859-1
+*Accessx*Label.background: white
+*Accessx*Label.justify: left
+*Accessx*Label.internalHeight: 0
+*Accessx*Label.internalWidth: 0
+*Accessx*Label.foreground: gray35
+*Accessx*Toggle.internalHeight: 0
+*Accessx.Toggle.internalWidth: 18
+*Accessx.Toggle.justify: left
+*Accessx.Toggle.foreground: gray30
+*Accessx.Toggle.background: white
+*Accessx*Toggle.highlightThickness: 0
+*Accessx.Toggle.foreground: rgb:f/7/7
+*Accessx.Toggle.displayList:\
+foreground white;\
+points 0,0,-1,0;\
+foreground rgb:f/7/7;\
+fill-poly 0,2,0,-3,8,6
+*Accessx.Toggle.translations: \
+<Btn1Down>,<Btn1Up>: toggle() notify()\n\
+<Enter>: set-values(1, displayList, "foreground white;points 0,0,-1,0;fill-poly 0,1,10,6,0,-2;foreground rgb:7/7/f;fill-poly 0,2,0,-3,8,6")\n\
+<Leave>: set-values(1, displayList, "foreground white;points 0,0,-1,0;foreground rgb:f/7/7;fill-poly 0,2,0,-3,8,6")
+*Accessx.Form.borderWidth: 1
+*Accessx.Form.borderColor: rgb:f/a/a
+*Accessx.Form.vertDistance: 0
+*Accessx.Form.defaultDistance: 2
+*Accessx.borderWidth: 0
+*accessxForm.background: white
+*Accessx*Form.background: white
+*Accessx.background: white
+*accessxForm.enable.label: Enable AccessX
+*accessxForm.enable.width: 208
+*accessxForm.apply.fromHoriz: enable
+*accessxForm.apply.label: Apply changes
+*accessxForm.Accessx.fromVert: enable
+*Accessx.timeoutToggle.background: white
+*Accessx.timeoutToggle.foreground: rgb:7/7/f
+*Accessx.timeoutToggle.displayList:\
+foreground rgb:a/a/f;\
+lines 1,-1,-1,-1,-1,1;\
+foreground rgb:2/2/a;\
+lines -1,0,0,0,0,-1
+
+*Accessx.Form.Toggle.background: white
+*Accessx.Form.Toggle.foreground: rgb:7/7/f
+*Accessx.Form.Toggle.displayList:\
+foreground rgb:a/a/f;\
+lines 1,-1,-1,-1,-1,1;\
+foreground rgb:2/2/a;\
+lines -1,0,0,0,0,-1
+*Accessx.Form.Toggle.translations: \
+<Btn1Down>,<Btn1Up>: toggle() notify()\n\
+<Enter>: set-values(1, displayList, "foreground rgb:a/a/f;lines 1,-1,-1,-1,-1,1;foreground rgb:2/2/a;lines -1,0,0,0,0,-1;foreground rgb:f/7/7;draw-rect 1,1,-2,-2")\n\
+<Leave>: set-values(1, displayList, "foreground rgb:a/a/f;lines 1,-1,-1,-1,-1,1;foreground rgb:2/2/a;lines -1,0,0,0,0,-1")
+
+*Accessx.timeoutToggle.internalWidth: 4
+*Accessx.timeoutToggle.translations:\
+<Btn1Down>,<Btn1Up>: toggle() notify()
+*Accessx.timeoutToggle.internalWidth: 4
+*Accessx.timeoutToggle.internalHeight: 1
+*Accessx.timeoutToggle.vertDistance: 6
+*Accessx.timeoutToggle.label: Time Out
+*Accessx.timeoutLabel.fromHoriz: timeoutToggle
+*Accessx.timeoutLabel.vertDistance: 7
+*Accessx.timeoutLabel.label: Time (min)
+*Accessx.Label.background: white
+*Accessx.timeoutNumber.vertDistance: 1
+*Accessx.timeoutNumber.fromHoriz: timeoutLabel
+*Accessx.timeoutNumber.font: 6x9
+*Accessx.timeoutNumber.label: ??
+*Accessx.timeoutScroller.fromVert: timeoutNumber
+*Accessx.timeoutScroller.fromHoriz: timeoutLabel
+*Accessx.timeoutScroller.width: 133
+*Accessx.timeoutScroller.horizDistance: 31
+*Accessx*Scrollbar.vertDistance: 0
+*Accessx*Scrollbar.orientation: horizontal
+*Accessx*Scrollbar.thumb: black
+*Accessx*Scrollbar.height: 8
+*Accessx*Scrollbar.minimumThumb: 5
+*Accessx*Scrollbar.borderWidth: 1
+*Accessx*Scrollbar.borderColor: white
+*Accessx*Scrollbar.foreground: rgb:f/7/7
+*Accessx*Scrollbar.background: gray95
+*Accessx*Scrollbar.displayList:\
+foreground gray80;\
+lines 1,-1,-1,-1,-1,1;\
+foreground gray90;\
+lines -1,0,0,0,0,-1
+*Accessx.sticky.fromVert: timeoutToggle
+*Accessx.sticky.vertDistance: 6
+*Accessx.sticky.label: Enable StickyKeys
+*Accessx.sticky.width: 304
+*Accessx.stickyForm.fromVert: sticky
+*Accessx.stickyForm.Toggle.width: 148
+*Accessx.stickyForm.Toggle.internalHeight: 1
+*Accessx.stickyForm.auto.label: Auto off
+*Accessx.stickyForm.beep.fromHoriz: auto
+*Accessx.stickyForm.beep.label: Modifiers beep
+*Accessx.mouseKeys.fromVert: stickyForm
+*Accessx.mouseKeys.width: 304
+*Accessx.mouseKeys.vertDistance: 6
+*Accessx.mouseKeys.label: Enable MouseKeys
+*Accessx.mouseForm.fromVert: mouseKeys
+*Accessx.mouseForm.speedLabel.vertDistance: 7
+*Accessx.mouseForm.speedLabel.label: Peak speed (pixels/sec)
+*Accessx.mouseForm.speedNumber.fromHoriz: speedLabel
+*Accessx.mouseForm.speedNumber.font: 6x9
+*Accessx.mouseForm.speedNumber.label: ???
+*Accessx.mouseForm.speedScroller.fromHoriz: speedLabel
+*Accessx.mouseForm.speedScroller.fromVert: speedNumber
+*Accessx.mouseForm.speedScroller.width: 133
+*Accessx.mouseForm.timeLabel.fromVert: speedScroller
+*Accessx.mouseForm.timeLabel.label: Time to peak (sec)
+*Accessx.mouseForm.timeLabel.vertDistance: 7
+*Accessx.mouseForm.timeNumber.label: ???
+*Accessx.mouseForm.timeNumber.fromVert: speedScroller
+*Accessx.mouseForm.timeNumber.fromHoriz: timeLabel
+*Accessx.mouseForm.timeNumber.font: 6x9
+*Accessx.mouseForm.timeScroller.fromHoriz: timeLabel
+*Accessx.mouseForm.timeScroller.fromVert: timeNumber
+*Accessx.mouseForm.timeScroller.width: 133
+*Accessx.mouseForm.timeScroller.horizDistance: 37
+*Accessx.mouseForm.delayLabel.fromVert: timeScroller
+*Accessx.mouseForm.delayLabel.label: Motion delay (sec)
+*Accessx.mouseForm.delayLabel.tip:\
+Time between the initial key press\n\
+and the first repeated motion event
+*Accessx.mouseForm.delayLabel.vertDistance: 7
+*Accessx.mouseForm.delayNumber.label: ???
+*Accessx.mouseForm.delayNumber.fromVert: timeScroller
+*Accessx.mouseForm.delayNumber.fromHoriz: delayLabel
+*Accessx.mouseForm.delayNumber.font: 6x9
+*Accessx.mouseForm.delayScroller.fromHoriz: delayLabel
+*Accessx.mouseForm.delayScroller.fromVert: delayNumber
+*Accessx.mouseForm.delayScroller.width: 133
+*Accessx.mouseForm.delayScroller.horizDistance: 37
+*Accessx.repeatKeys.fromVert: mouseForm
+*Accessx.repeatKeys.width: 304
+*Accessx.repeatKeys.vertDistance: 6
+*Accessx.repeatKeys.label: Enable RepeatKeys
+*Accessx.repeatForm.fromVert: repeatKeys
+*Accessx.repeatForm.rateLabel.vertDistance: 7
+*Accessx.repeatForm.rateLabel.label: Repeat rate (sec/key)
+*Accessx.repeatForm.rateNumber.fromHoriz: rateLabel
+*Accessx.repeatForm.rateNumber.font: 6x9
+*Accessx.repeatForm.rateNumber.label: ????
+*Accessx.repeatForm.rateScroller.fromHoriz: rateLabel
+*Accessx.repeatForm.rateScroller.fromVert: rateNumber
+*Accessx.repeatForm.rateScroller.width: 133
+*Accessx.repeatForm.rateScroller.horizDistance: 16
+*Accessx.repeatForm.delayLabel.fromVert: rateScroller
+*Accessx.repeatForm.delayLabel.label: Repeat delay (sec)
+*Accessx.repeatForm.delayLabel.vertDistance: 7
+*Accessx.repeatForm.delayNumber.label: ????
+*Accessx.repeatForm.delayNumber.fromVert: rateScroller
+*Accessx.repeatForm.delayNumber.fromHoriz: delayLabel
+*Accessx.repeatForm.delayNumber.font: 6x9
+*Accessx.repeatForm.delayScroller.fromHoriz: delayLabel
+*Accessx.repeatForm.delayScroller.fromVert: delayNumber
+*Accessx.repeatForm.delayScroller.width: 133
+*Accessx.repeatForm.delayScroller.horizDistance: 37
+*Accessx.slow.fromVert: repeatForm
+*Accessx.slow.vertDistance: 6
+*Accessx.slow.label: Enable SlowKeys
+*Accessx.slow.width: 304
+*Accessx.slowForm.fromVert: slow
+*Accessx.slowForm.Toggle.horizDistance: 4
+*Accessx.slowForm.Toggle.internalWidth: 4
+*Accessx.slowForm.Toggle.internalHeight: 1
+*Accessx.slowForm.beep.label: Beep when key is
+*Accessx.slowForm.beep.vertDistance: 3
+*Accessx.slowForm.pressed.fromHoriz: beep
+*Accessx.slowForm.pressed.label: pressed
+*Accessx.slowForm.accepted.fromHoriz: pressed
+*Accessx.slowForm.accepted.label: accepted
+*Accessx.slowForm.slowLabel.fromVert: accepted
+*Accessx.slowForm.slowLabel.label: Key delay (sec)
+*Accessx.slowForm.slowLabel.vertDistance: 7
+*Accessx.slowForm.slowNumber.label: ???
+*Accessx.slowForm.slowNumber.fromVert: accepted
+*Accessx.slowForm.slowNumber.fromHoriz: slowLabel
+*Accessx.slowForm.slowNumber.font: 6x9
+*Accessx.slowForm.slowScroller.fromHoriz: slowLabel
+*Accessx.slowForm.slowScroller.fromVert: slowNumber
+*Accessx.slowForm.slowScroller.width: 133
+*Accessx.slowForm.slowScroller.horizDistance: 58
+*Accessx.bounce.fromVert: slowForm
+*Accessx.bounce.vertDistance: 6
+*Accessx.bounce.label: Enable BounceKeys
+*Accessx.bounce.width: 304
+*Accessx.bounceForm.fromVert: bounce
+*Accessx.bounceForm.bounceLabel.label: Debounce time (sec)
+*Accessx.bounceForm.bounceLabel.vertDistance: 7
+*Accessx.bounceForm.bounceNumber.label: ???
+*Accessx.bounceForm.bounceNumber.fromHoriz: bounceLabel
+*Accessx.bounceForm.bounceNumber.font: 6x9
+*Accessx.bounceForm.bounceScroller.fromHoriz: bounceLabel
+*Accessx.bounceForm.bounceScroller.fromVert: bounceNumber
+*Accessx.bounceForm.bounceScroller.width: 133
+*Accessx.bounceForm.bounceScroller.horizDistance: 30
+
+*accessx.geometry: 220x253
+*accessx.minWidth: 220
+*accessx.maxWidth: 220
+*accessx.minHeight: 253
+*accessx.maxHeight: 253
+*accessx*lock.fromVert: label
+*accessx*div.fromVert: label
+*accessx*div.fromHoriz: lock
+*accessx*mul.fromVert: label
+*accessx*mul.fromHoriz: div
+*accessx*minus.fromVert: label
+*accessx*minus.fromHoriz: mul
+*accessx*7.fromVert: lock
+*accessx*8.fromVert: div
+*accessx*8.fromHoriz: 7
+*accessx*9.fromVert: mul
+*accessx*9.fromHoriz: 8
+*accessx*plus.fromVert: minus
+*accessx*plus.fromHoriz: 9
+*accessx*4.fromVert: 7
+*accessx*5.fromVert: 8
+*accessx*5.fromHoriz: 4
+*accessx*6.fromVert: 9
+*accessx*6.fromHoriz: 5
+*accessx*1.fromVert: 4
+*accessx*2.fromVert: 5
+*accessx*2.fromHoriz: 1
+*accessx*3.fromVert: 6
+*accessx*3.fromHoriz: 2
+*accessx*enter.fromVert: plus
+*accessx*enter.fromHoriz: 3
+*accessx*0.fromVert: 2
+*accessx*del.fromVert: 3
+*accessx*del.fromHoriz: 0
+*accessx.form.background: gray80
+*accessx*Label.displayList:\
+foreground gray20;\
+lines +1,-1,-1,-1,-1,+1;\
+foreground white;\
+lines -1,0,0,0,0,-1
+*accessx*label.font: fixed
+*accessx*Label.font: -*-helvetica-bold-o-*-*-10-*-*-*-*-*-*-1
+*accessx*Label.width: 50
+*accessx*Label.height: 35
+*accessx*label.width: 212
+*accessx*label.height: 50
+*accessx*plus.height: 74
+*accessx*enter.height: 74
+*accessx*0.width: 104
+*accessx*lock.label: Num\nLock
+*accessx*div.label: /\n\
+*accessx*mul.label: *\n\
+*accessx*minus.label: -\n\
+*accessx*7.label: 7\n\
+*accessx*8.label: 8\n\
+*accessx*9.label: 9\n\
+*accessx*plus.label: +\n\ \n\ \n\ \n\
+*accessx*4.label: 4\n\
+*accessx*5.label: 5\n\
+*accessx*6.label: 6\n\
+*accessx*1.label: 1\n\
+*accessx*2.label: 2\n\
+*accessx*3.label: 3\n\
+*accessx*enter.label: Enter\n\ \n\ \n\ \n\
+*accessx*0.label: 0\n\
+*accessx*del.label: .\n\ \n\
+*accessx*label.displayList:\
+foreground white;\
+lines +1,-1,-1,-1,-1,+1;\
+foreground gray20;\
+lines -1,0,0,0,0,-1
+*accessx*label.label:\
+If your mouse does not work, use\n\
+the numeric keypad, following\n\
+the diagram bellow.
+*accessx*div.displayList:\
+foreground gray20;\
+lines +1,-1,-1,-1,-1,+1;\
+foreground white;\
+lines -1,0,0,0,0,-1;\
+foreground red;\
+font -*-helvetica-bold-o-*-*-10-*-*-*-*-*-*-1;\
+draw-string 4,30, "Button 1"
+*accessx*mul.displayList:\
+foreground gray20;\
+lines +1,-1,-1,-1,-1,+1;\
+foreground white;\
+lines -1,0,0,0,0,-1;\
+foreground red;\
+font -*-helvetica-bold-o-*-*-10-*-*-*-*-*-*-1;\
+draw-string 4,30, "Button 2"
+*accessx*minus.displayList:\
+foreground gray20;\
+lines +1,-1,-1,-1,-1,+1;\
+foreground white;\
+lines -1,0,0,0,0,-1;\
+foreground red;\
+font -*-helvetica-bold-o-*-*-10-*-*-*-*-*-*-1;\
+draw-string 4,30, "Button 3"
+*accessx*7.displayList:\
+foreground gray20;\
+lines +1,-1,-1,-1,-1,+1;\
+foreground white;\
+lines -1,0,0,0,0,-1;\
+foreground red;\
+fill-poly 20,20,20,30,30,20
+*accessx*8.displayList:\
+foreground gray20;\
+lines +1,-1,-1,-1,-1,+1;\
+foreground white;\
+lines -1,0,0,0,0,-1;\
+foreground red;\
+fill-poly 30,20,20,30,40,30
+*accessx*9.displayList:\
+foreground gray20;\
+lines +1,-1,-1,-1,-1,+1;\
+foreground white;\
+lines -1,0,0,0,0,-1;\
+foreground red;\
+fill-poly 20,20,30,30,30,20
+*accessx*plus.displayList:\
+foreground gray20;\
+lines +1,-1,-1,-1,-1,+1;\
+foreground white;\
+lines -1,0,0,0,0,-1;\
+foreground red;\
+font -*-helvetica-bold-o-*-*-10-*-*-*-*-*-*-1;\
+draw-string 9,46, "Double";\
+draw-string 14,60, "Click"
+*accessx*4.displayList:\
+foreground gray20;\
+lines +1,-1,-1,-1,-1,+1;\
+foreground white;\
+lines -1,0,0,0,0,-1;\
+foreground red;\
+fill-poly 22,22,30,30,30,14
+*accessx*5.displayList:\
+foreground gray20;\
+lines +1,-1,-1,-1,-1,+1;\
+foreground white;\
+lines -1,0,0,0,0,-1;\
+foreground red;\
+font -*-helvetica-bold-o-*-*-10*-*-*-*-*-*-1;\
+draw-string 14,30, "Click"
+*accessx*6.displayList:\
+foreground gray20;\
+lines +1,-1,-1,-1,-1,+1;\
+foreground white;\
+lines -1,0,0,0,0,-1;\
+foreground red;\
+fill-poly 30,22,22,30,22,14
+*accessx*1.displayList:\
+foreground gray20;\
+lines +1,-1,-1,-1,-1,+1;\
+foreground white;\
+lines -1,0,0,0,0,-1;\
+foreground red;\
+fill-poly 20,20,20,30,30,30
+*accessx*2.displayList:\
+foreground gray20;\
+lines +1,-1,-1,-1,-1,+1;\
+foreground white;\
+lines -1,0,0,0,0,-1;\
+foreground red;\
+fill-poly 28,30,20,22,36,22
+*accessx*3.displayList:\
+foreground gray20;\
+lines +1,-1,-1,-1,-1,+1;\
+foreground white;\
+lines -1,0,0,0,0,-1;\
+foreground red;\
+fill-poly 20,30,30,30,30,20
+*accessx*enter.displayList:\
+foreground gray20;\
+lines +1,-1,-1,-1,-1,+1;\
+foreground white;\
+lines -1,0,0,0,0,-1;\
+foreground red;\
+font -*-helvetica-bold-o-*-*-10-*-*-*-*-*-*-1;\
+draw-string 9,46, "Toggle";\
+draw-string 10,60, "Speed"
+*accessx*0.displayList:\
+foreground gray20;\
+lines +1,-1,-1,-1,-1,+1;\
+foreground white;\
+lines -1,0,0,0,0,-1;\
+foreground red;\
+font -*-helvetica-bold-o-*-*-10-*-*-*-*-*-*-1;\
+draw-string 26,30, "Button Lock"
+*accessx*del.displayList:\
+foreground gray20;\
+lines +1,-1,-1,-1,-1,+1;\
+foreground white;\
+lines -1,0,0,0,0,-1;\
+foreground red;\
+font -*-helvetica-bold-o-*-*-8-*-*-*-*-*-*-1;\
+draw-string 12,21, "Button";\
+draw-string 9,30, "Release"
+
+*panner.width: 100
+*panner.height: 100
+
+*help*text.properties:\
+default?family=Times&weight=Medium&slant=R&pixelsize=12&registry=ISO8859&encoding=1,\
+b?weight=Bold,\
+strong?weight=Bold,\
+i?slant=I,\
+em?slant=I,\
+address?slant=I,\
+h1?pixelsize=24&weight=Bold,\
+h2?pixelsize=20&weight=Bold,\
+h3?pixelsize=17&weight=Bold,\
+h4?pixelsize=14&weight=Bold,\
+h5?pixelsize=12&weight=Bold,\
+h6?pixelsize=10&weight=Bold,\
+pre?family=Courier&pixelsize=10,\
+kbd?family=Courier&pixelsize=10,\
+code?family=Courier&pixelsize=10,\
+samp?family=Courier&pixelsize=10,\
+tt?family=Courier&pixelsize=10
+*help*commands.min: 22
+*help*commands.max: 22
+*help*commands.showGrip:False
+*help*wrap: word
+*help*commands.close.label: Close
+.xf86cfg.help.geometry: 320x369
+.xf86cfg.help.minWidth: 320
+.xf86cfg.help.maxWidth: 320
+.xf86cfg.help.minHeight: 369
+.xf86cfg.help.maxHeight: 369
+.xf86cfg.help.translations: #override \
+<Message>WM_PROTOCOLS: help-close()
+*help*text.translations:\
+<Key>Up: scroll-one-line-down()\n\
+<Key>Down: scroll-one-line-up()\n\
+<Key>Next: next-page()\n\
+<Key>Prior: previous-page()\n\
+<Key>space: next-page()\n\
+<Key>BackSpace: previous-page()\n\
+<Key>Home: beginning-of-file()\n\
+<Key>End: end-of-file()
+*help*text*displayCaret: False
+*help*text.leftMargin: 10
+*help*text.rightMargin: 10
+
+*help.helpDevices:\
+<h2>Configuring devices</h2>\
+You can arrange the icons pressing the <i>left mouse button</i> \
+and dragging them.\
+<p>\
+To configure a device, press the <i>right mouse button</i> and choose the \
+<tt>configure</tt> option.\
+
+*help.helpScreen:\
+<h2>Configuring screens</h2>\
+You can drag the monitors to set the screen layout form <b>Xinerama</b> \
+pressing the <i>left mouse button</i> and moving them.\
+<p>\
+Press the <i>right mouse button</i> to set configure or set options for \
+the given screen.
+
+*help.helpModeline:\
+<h2>Configuring modelines</h2>\
+<b><font size=+1 color=red>The controls here may damage your \
+monitor.</font></b> \
+<p>\
+You can safelly skip this stage of the configuration process.\
+<p>\
+When not running in <b>Xinerama</b> mode, you can configure modelines \
+for every configured monitor. Set the <b>Auto</b> toggle to see the changes \
+while the <i>control buttons</i> are pressed.\
+<p>\
+Note that the <i>arrow</i> buttons are repeaters. Press they only once \
+and they will show the changes in the <i>text labels</i>.\
+<p>\
+<font color=forestgreen>Press <b>ESC</b> if the monitor goes out of sync.</font>
+
+*help.helpAccessX:\
+<h2>Configuring accessx</h2>\
+This interface is expected to allow customizing most of the <b>accessx</b> \
+options.\
+<p>\
+Press in the <b>Enable ???</b> label to set specific options.\
+<p>\
+<font color=red>Note</font>: currently, if you press the \
+<tt><b>Apply changes</b></tt> button there is no way to undo your changes.</font>
+
+
+*Expert.geometry: 640x460
+*Expert*vpane.min: 64
+*Expert*vpane.max: 64
+*Expert*vpane.showGrip: False
+*Expert*vpane.close.showGrip: False
+*Expert*vpane.close.min: 26
+*Expert*vpane.close.max: 26
+*panner.internalSpace: 1
+*panner.shadowThickness: 0
+*panner.shadowColor: gray60
+*panner.backgroundStipple: black
+*panner.borderColor: gray40
+
+*expert*tree.hSpace: 12
+*expert*tree*Box.hSpace: 4
+*expert*tree*vSpace: 4
+*expert*tree*LogFile.Text.width: 192
+*expert*tree*RgbPath.Text.width: 192
+*expert*tree*ModulePath.Text.width: 192
+
+*expert*tree*Form.defaultDistance: 4
+
+*expert*tree.backgroundPixmap: xlogo64?foreground=gray90&background=gray92
+*expert*tree.foreground: gray45
+
+*expert*tree*Label.backgroundPixmap: ParentRelative
+
+*expert*tree*Box.backgroundPixmap: gradient:vertical?dimension=3&start=gray85&end=gray95
+*expert*tree*Box.borderWidth: 0
+*expert*tree*Box.background: gray85
+*expert*Box.displayList:\
+foreground gray40;\
+lines 1,-1,-1,-1,-1,1;\
+foreground white;\
+lines -1,0,0,0,0,-1
+
+*expert*tree*Form.backgroundPixmap: gradient:vertical?dimension=3&start=gray85&end=gray95
+*expert*tree*Form.borderWidth: 0
+*expert*tree*Form.background: gray85
+*expert*Form.displayList:\
+foreground gray40;\
+lines 1,-1,-1,-1,-1,1;\
+foreground white;\
+lines -1,0,0,0,0,-1
+
+*expert*tree*Text.width: 160
+
+*expert*tree*fontpath.Text.width: 228
+*expert*tree*fontpath.up.fromHoriz: remove
+*expert*tree*fontpath.down.fromHoriz: up
+*expert*tree*fontpath.value.fromVert: remove
+*expert*tree*fontpath.valueNew.fromVert: new
+
+*expert*tree*modulepath.Text.width: 228
+*expert*tree*modulepath.value.fromVert: remove
+*expert*tree*modulepath.valueNew.fromVert: new
+
+*expert*tree*module.options.fromHoriz: remove
+*expert*tree*module.label.fromVert: remove
+*expert*tree*module.value.fromHoriz: new
+*expert*tree*module.value.width: 78
+
+*expert*tree*video*Label.justify: left
+*expert*tree*video.options.fromHoriz: remove
+*expert*tree*video.adaptor.fromHoriz: options
+*expert*tree*video.vendorL.width: 78
+*expert*tree*video.vendorL.label: VendorName
+*expert*tree*video.vendorL.fromVert: remove
+*expert*tree*video.vendor.fromVert: remove
+*expert*tree*video.vendor.fromHoriz: vendorL
+*expert*tree*video.boardL.width: 78
+*expert*tree*video.boardL.label: BoardName
+*expert*tree*video.boardL.fromVert: vendor
+*expert*tree*video.board.fromVert: vendor
+*expert*tree*video.board.fromHoriz: boardL
+*expert*tree*video.busidL.width: 78
+*expert*tree*video.busidL.label: BusID
+*expert*tree*video.busidL.fromVert: board
+*expert*tree*video.busid.fromVert: board
+*expert*tree*video.busid.fromHoriz: busidL
+*expert*tree*video.driverL.width: 78
+*expert*tree*video.driverL.label: Driver
+*expert*tree*video.driverL.fromVert: busid
+*expert*tree*video.driver.fromVert: busid
+*expert*tree*video.driver.fromHoriz: driverL
+*expert*tree*video.value.fromHoriz: new
+*expert*tree*video.value.width: 78
+*expert*tree*VideoPort.fromVert: driver
+*expert*tree*VideoPort.horizDistance: 120
+*expert*tree*video.value.width: 149
+
+*expert*tree*port.value.fromHoriz: new
+*expert*tree*port.options.fromHoriz: remove
+*expert*tree*port.label.fromVert: remove
+*expert*tree*port.value.width: 78
+
+*expert*tree*modes.mode.fromHoriz: remove
+*expert*tree*modes.value.fromHoriz: new
+*expert*tree*modes.value.width: 78
+
+*expert*tree*modeline.label.fromHoriz: remove
+*expert*tree*modeline.modeline.fromVert: remove
+*expert*tree*modeline.modeline.width: 480
+*expert*tree*modeline.value.fromHoriz: new
+*expert*tree*modeline.value.width: 120
+*expert*tree*modeline.modelineNew.fromVert: value
+*expert*tree*modeline.modelineNew.width: 480
+
+*expert*tree*monitor.options.fromHoriz: remove
+*expert*tree*monitor.label.fromHoriz: options
+
+*expert*tree*monitor.Label.justify: left
+*expert*tree*monitor.Text.width: 120
+*expert*tree*monitor.vendorL.width: 100
+*expert*tree*monitor.vendorL.label: VendorName
+*expert*tree*monitor.vendorL.fromVert: remove
+*expert*tree*monitor.vendor.fromVert: remove
+*expert*tree*monitor.vendor.fromHoriz: vendorL
+*expert*tree*monitor.modelnameL.width: 100
+*expert*tree*monitor.modelnameL.label: ModelName
+*expert*tree*monitor.modelnameL.fromVert: vendor
+*expert*tree*monitor.modelname.fromVert: vendor
+*expert*tree*monitor.modelname.fromHoriz: modelnameL
+*expert*tree*monitor.widthL.width: 100
+*expert*tree*monitor.widthL.label: Width (mm)
+*expert*tree*monitor.widthL.fromVert: modelname
+*expert*tree*monitor.width.fromVert: modelname
+*expert*tree*monitor.width.fromHoriz: widthL
+*expert*tree*monitor.heightL.width: 100
+*expert*tree*monitor.heightL.label: Height (mm)
+*expert*tree*monitor.heightL.fromVert: width
+*expert*tree*monitor.height.fromVert: width
+*expert*tree*monitor.height.fromHoriz: heightL
+*expert*tree*monitor.hsyncL.width: 100
+*expert*tree*monitor.hsyncL.label: Hsync
+*expert*tree*monitor.hsyncL.fromVert: heightL
+*expert*tree*monitor.hsync.fromVert: height
+*expert*tree*monitor.hsync.fromHoriz: hsyncL
+*expert*tree*monitor.vrefreshL.width: 100
+*expert*tree*monitor.vrefreshL.label: Vrefresh
+*expert*tree*monitor.vrefreshL.fromVert: hsync
+*expert*tree*monitor.vrefresh.fromVert: hsync
+*expert*tree*monitor.vrefresh.fromHoriz: vrefreshL
+*expert*tree*monitor.gammaRedL.width: 100
+*expert*tree*monitor.gammaRedL.label: Gamma (red)
+*expert*tree*monitor.gammaRedL.fromVert: vrefresh
+*expert*tree*monitor.gammaRed.fromVert: vrefresh
+*expert*tree*monitor.gammaRed.fromHoriz: gammaRedL
+*expert*tree*monitor.gammaGreenL.width: 100
+*expert*tree*monitor.gammaGreenL.label: Gamma (green)
+*expert*tree*monitor.gammaGreenL.fromVert: gammaRed
+*expert*tree*monitor.gammaGreen.fromVert: gammaRed
+*expert*tree*monitor.gammaGreen.fromHoriz: gammaGreenL
+*expert*tree*monitor.gammaBlueL.width: 100
+*expert*tree*monitor.gammaBlueL.label: Gamma (blue)
+*expert*tree*monitor.gammaBlueL.fromVert: gammaGreen
+*expert*tree*monitor.gammaBlue.fromVert: gammaGreen
+*expert*tree*monitor.gammaBlue.fromHoriz: gammaBlueL
+*expert*tree*monitor.value.width: 191
+*expert*tree*monitor.value.fromHoriz: new
+
+*expert*tree*device.Label.justify: left
+*expert*tree*device.options.fromHoriz: remove
+*expert*tree*device.label.fromHoriz: options
+*expert*tree*device.vendorL.label: VendorName
+*expert*tree*device.vendorL.width: 100
+*expert*tree*device.vendorL.fromVert: remove
+*expert*tree*device.vendor.fromVert: remove
+*expert*tree*device.vendor.fromHoriz: vendorL
+*expert*tree*device.boardL.label: BoardName
+*expert*tree*device.boardL.width: 100
+*expert*tree*device.boardL.fromVert: vendor
+*expert*tree*device.board.fromVert: vendor
+*expert*tree*device.board.fromHoriz: boardL
+*expert*tree*device.chipsetL.label: Chipset
+*expert*tree*device.chipsetL.width: 100
+*expert*tree*device.chipsetL.fromVert: board
+*expert*tree*device.chipset.fromVert: board
+*expert*tree*device.chipset.fromHoriz: chipsetL
+*expert*tree*device.busidL.label: BusID
+*expert*tree*device.busidL.width: 100
+*expert*tree*device.busidL.fromVert: chipset
+*expert*tree*device.busid.fromVert: chipset
+*expert*tree*device.busid.fromHoriz: chipsetL
+*expert*tree*device.cardL.label: Card
+*expert*tree*device.cardL.width: 100
+*expert*tree*device.cardL.fromVert: busid
+*expert*tree*device.card.fromVert: busid
+*expert*tree*device.card.fromHoriz: cardL
+*expert*tree*device.driverL.label: Driver
+*expert*tree*device.driverL.width: 100
+*expert*tree*device.driverL.fromVert: card
+*expert*tree*device.driver.fromVert: card
+*expert*tree*device.driver.fromHoriz: driverL
+*expert*tree*device.ramdacL.label: Ramdac
+*expert*tree*device.ramdacL.width: 100
+*expert*tree*device.ramdacL.fromVert: driverL
+*expert*tree*device.ramdac.fromVert: driver
+*expert*tree*device.ramdac.fromHoriz: ramdacL
+*expert*tree*device.dacSpeedL.label: DacSpeed
+*expert*tree*device.dacSpeedL.width: 100
+*expert*tree*device.dacSpeedL.fromVert: ramdac
+*expert*tree*device.dacSpeed.fromVert: ramdac
+*expert*tree*device.dacSpeed.fromHoriz: dacSpeedL
+*expert*tree*device.videoRamL.label: VideoRam
+*expert*tree*device.videoRamL.width: 100
+*expert*tree*device.videoRamL.fromVert: dacSpeed
+*expert*tree*device.videoRam.fromVert: dacSpeed
+*expert*tree*device.videoRam.fromHoriz: videoRamL
+*expert*tree*device.textClockFreqL.label: TextClockFreq
+*expert*tree*device.textClockFreqL.width: 100
+*expert*tree*device.textClockFreqL.fromVert: videoRam
+*expert*tree*device.textClockFreq.fromVert: videoRam
+*expert*tree*device.textClockFreq.fromHoriz: textClockFreqL
+*expert*tree*device.biosBaseL.label: BiosBase
+*expert*tree*device.biosBaseL.width: 100
+*expert*tree*device.biosBaseL.fromVert: textClockFreq
+*expert*tree*device.biosBase.fromVert: textClockFreq
+*expert*tree*device.biosBase.fromHoriz: biosBaseL
+*expert*tree*device.memBaseL.label: MemBase
+*expert*tree*device.memBaseL.width: 100
+*expert*tree*device.memBaseL.fromVert: biosBase
+*expert*tree*device.memBase.fromVert: biosBase
+*expert*tree*device.memBase.fromHoriz: memBaseL
+*expert*tree*device.ioBaseL.label: IOBase
+*expert*tree*device.ioBaseL.width: 100
+*expert*tree*device.ioBaseL.fromVert: memBase
+*expert*tree*device.ioBase.fromVert: memBase
+*expert*tree*device.ioBase.fromHoriz: ioBaseL
+*expert*tree*device.clockChipL.label: ClockChip
+*expert*tree*device.clockChipL.width: 100
+*expert*tree*device.clockChipL.fromVert: ioBase
+*expert*tree*device.clockChip.fromVert: ioBase
+*expert*tree*device.clockChip.fromHoriz: clockChipL
+*expert*tree*device.devClockL.label: Clocks
+*expert*tree*device.devClockL.width: 100
+*expert*tree*device.devClockL.fromVert: clockChip
+*expert*tree*device.devClock.fromVert: clockChip
+*expert*tree*device.devClock.fromHoriz: devClockL
+*expert*tree*device.chipIdL.label: ChipId
+*expert*tree*device.chipIdL.width: 100
+*expert*tree*device.chipIdL.fromVert: devClock
+*expert*tree*device.chipId.fromVert: devClock
+*expert*tree*device.chipId.fromHoriz: chipIdL
+*expert*tree*device.chipRevL.label: ChipRev
+*expert*tree*device.chipRevL.width: 100
+*expert*tree*device.chipRevL.fromVert: chipId
+*expert*tree*device.chipRev.fromVert: chipId
+*expert*tree*device.chipRev.fromHoriz: chipRevL
+*expert*tree*device.irqL.label: IRQ
+*expert*tree*device.irqL.width: 100
+*expert*tree*device.irqL.fromVert: chipRev
+*expert*tree*device.irq.fromVert: chipRev
+*expert*tree*device.irq.fromHoriz: irqL
+*expert*tree*device.screenL.label: Screen
+*expert*tree*device.screenL.width: 100
+*expert*tree*device.screenL.fromVert: irq
+*expert*tree*device.screen.fromVert: irq
+*expert*tree*device.screen.fromHoriz: screenL
+*expert*tree*device.value.fromHoriz: new
+
+*expert*tree*screen.Label.justify: left
+*expert*tree*screen.options.fromHoriz: remove
+*expert*tree*screen.label.fromHoriz: options
+*expert*tree*screen.defaultDepthL.label: DefaultDepth
+*expert*tree*screen.defaultDepthL.width: 92
+*expert*tree*screen.defaultDepthL.fromVert: remove
+*expert*tree*screen.defaultDepth.fromVert: remove
+*expert*tree*screen.defaultDepth.fromHoriz: defaultDepthL
+*expert*tree*screen.defaultBppL.label: DefaultBpp
+*expert*tree*screen.defaultBppL.width: 92
+*expert*tree*screen.defaultBppL.fromVert: defaultDepth
+*expert*tree*screen.defaultBpp.fromVert: defaultDepth
+*expert*tree*screen.defaultBpp.fromHoriz: defaultBppL
+*expert*tree*screen.defaultFbBppL.label: DefaultFbBpp
+*expert*tree*screen.defaultFbBppL.width: 92
+*expert*tree*screen.defaultFbBppL.fromVert: defaultBpp
+*expert*tree*screen.defaultFbBpp.fromVert: defaultBpp
+*expert*tree*screen.defaultFbBpp.fromHoriz: defaultFbBppL
+*expert*tree*screen.monitorL.label: Monitor
+*expert*tree*screen.monitorL.width: 92
+*expert*tree*screen.monitorL.fromVert: defaultFbBpp
+*expert*tree*screen.monitor.fromVert: defaultFbBpp
+*expert*tree*screen.monitor.fromHoriz: monitorL
+*expert*tree*screen.deviceL.label: Device
+*expert*tree*screen.deviceL.width: 92
+*expert*tree*screen.deviceL.fromVert: monitor
+*expert*tree*screen.device.fromVert: monitor
+*expert*tree*screen.device.fromHoriz: deviceL
+*expert*tree*screen.value.fromHoriz: new
+
+*expert*tree*adaptor.label.fromHoriz: remove
+
+*expert*tree*display.Label.width: 64
+*expert*tree*display.Label.justify: left
+*expert*tree*display.options.fromHoriz: remove
+*expert*tree*display.viewportL.label: Viewport
+*expert*tree*display.viewportL.fromVert: remove
+*expert*tree*display.viewport.fromVert: remove
+*expert*tree*display.viewport.fromHoriz: viewportL
+*expert*tree*display.virtualL.label: Virtual
+*expert*tree*display.virtualL.fromVert: viewport
+*expert*tree*display.virtual.fromVert: viewport
+*expert*tree*display.virtual.fromHoriz: virtualL
+*expert*tree*display.depthL.label: Depth
+*expert*tree*display.depthL.fromVert: virtual
+*expert*tree*display.depth.fromVert: virtual
+*expert*tree*display.depth.fromHoriz: depthL
+*expert*tree*display.bppL.label: FbBPP
+*expert*tree*display.bppL.fromVert: depth
+*expert*tree*display.bpp.fromVert: depth
+*expert*tree*display.bpp.fromHoriz: bppL
+*expert*tree*display.visualL.label: Visual
+*expert*tree*display.visualL.fromVert: bpp
+*expert*tree*display.visual.fromVert: bpp
+*expert*tree*display.visual.fromHoriz: visualL
+*expert*tree*display.weightL.label: Weight
+*expert*tree*display.weightL.fromVert: visual
+*expert*tree*display.weight.fromVert: visual
+*expert*tree*display.weight.fromHoriz: weightL
+*expert*tree*display.blackL.label: Black
+*expert*tree*display.blackL.fromVert: weight
+*expert*tree*display.black.fromVert: weight
+*expert*tree*display.black.fromHoriz: blackL
+*expert*tree*display.whiteL.label: White
+*expert*tree*display.whiteL.fromVert: black
+*expert*tree*display.white.fromVert: black
+*expert*tree*display.white.fromHoriz: whiteL
+
+*expert*tree*mode.label.fromHoriz: remove
+*expert*tree*mode.value.fromHoriz: new
+*expert*tree*mode.value.width: 100
+
+*expert*tree*input.options.fromHoriz: remove
+*expert*tree*input.label.fromHoriz: options
+*expert*tree*input.driverL.label: Driver
+*expert*tree*input.driverL.fromVert: remove
+*expert*tree*input.driver.fromVert: remove
+*expert*tree*input.driver.fromHoriz: driverL
+*expert*tree*input.value.fromHoriz: new
+
+*expert*tree*layout.options.fromHoriz: remove
+*expert*tree*layout.label.fromHoriz: options
+*expert*tree*layout.value.fromHoriz: new
+
+*expert*tree*adjacency.Text.width: 46
+*expert*tree*adjacency.MenuButton.width: 122
+*expert*tree*adjacency.label.fromHoriz: remove
+*expert*tree*adjacency.scrnumL.label: Screen number
+*expert*tree*adjacency.scrnumL.horizDistance: 50
+*expert*tree*adjacency.scrnum.width: 32
+*expert*tree*adjacency.scrnumL.fromVert: remove
+*expert*tree*adjacency.scrnum.fromVert: remove
+*expert*tree*adjacency.scrnum.fromHoriz: scrnumL
+*expert*tree*adjacency.above.label: Above
+*expert*tree*adjacency.above.fromVert: scrnumL
+*expert*tree*adjacency.above.vertDistance: 20
+*expert*tree*adjacency.above.horizDistance: 96
+*expert*tree*adjacency.below.label: Below
+*expert*tree*adjacency.below.horizDistance: 96
+*expert*tree*adjacency.leftOf.label: LeftOf
+*expert*tree*adjacency.leftOf.fromVert: above
+*expert*tree*adjacency.screen.fromVert: above
+*expert*tree*adjacency.screen.fromHoriz: leftOf
+*expert*tree*adjacency.rightOf.label: RightOf
+*expert*tree*adjacency.rightOf.fromVert: above
+*expert*tree*adjacency.rightOf.fromHoriz: screen
+*expert*tree*adjacency.below.fromVert: screen
+*expert*tree*adjacency.relative.label: Relative
+*expert*tree*adjacency.relative.horizDistance: 53
+*expert*tree*adjacency.relative.fromVert: below
+*expert*tree*adjacency.absolute.fromVert: below
+*expert*tree*adjacency*absolute.label: Absolute
+*expert*tree*adjacency*absolute.fromHoriz: relative
+*expert*tree*adjacency*adjxL.label: X
+*expert*tree*adjacency*adjxL.horizDistance: 42
+*expert*tree*adjacency*adjxL.fromVert: absolute
+*expert*tree*adjacency*adjx.fromVert: absolute
+*expert*tree*adjacency*adjx.fromHoriz: adjxL
+*expert*tree*adjacency*adjyL.label: Y
+*expert*tree*adjacency*adjyL.horizDistance: 12
+*expert*tree*adjacency*adjyL.fromVert: absolute
+*expert*tree*adjacency*adjyL.fromHoriz: adjx
+*expert*tree*adjacency*adjy.fromVert: absolute
+*expert*tree*adjacency*adjy.fromHoriz: adjyL
+
+*expert*tree*inputref.options.fromHoriz: remove
+*expert*tree*inputref.label.fromHoriz: options
+
+*expert*tree*vendor.Text.width: 100
+*expert*tree*vendor.options.fromHoriz: remove
+*expert*tree*vendor.label.fromHoriz: options
+*expert*tree*vendor.value.fromHoriz: new
+
+*expert*tree*vendorSub.Text.width: 140
+*expert*tree*vendorSub.options.fromHoriz: remove
+*expert*tree*vendorSub.label.fromHoriz: options
+*expert*tree*vendorSub.nameL.label: Name
+*expert*tree*vendorSub.nameL.fromVert: remove
+*expert*tree*vendorSub.name.fromVert: remove
+*expert*tree*vendorSub.name.fromHoriz: nameL
+*expert*tree*vendorSub.value.fromHoriz: new
+
+*expert*tree*dri.Text.width: 100
+*expert*tree*dri.Label.width: 78
+*expert*tree*dri.Label.justify: left
+*expert*tree*dri.nameL.label: Group name
+*expert*tree*dri.name.fromHoriz: nameL
+*expert*tree*dri.groupL.label: Group
+*expert*tree*dri.groupL.fromVert: name
+*expert*tree*dri.group.fromVert: name
+*expert*tree*dri.group.fromHoriz: groupL
+*expert*tree*dri.modeL.label: Mode
+*expert*tree*dri.modeL.fromVert: group
+*expert*tree*dri.mode.fromVert: group
+*expert*tree*dri.mode.fromHoriz: modeL
+
+*expert*tree*buffers.Label.width: 50
+*expert*tree*buffers.Text.width: 100
+*expert*tree*buffers.countL.label: Count
+*expert*tree*buffers.countL.fromVert: remove
+*expert*tree*buffers.count.fromVert: remove
+*expert*tree*buffers.count.fromHoriz: countL
+*expert*tree*buffers.sizeL.label: Size
+*expert*tree*buffers.sizeL.fromVert: count
+*expert*tree*buffers.size.fromVert: count
+*expert*tree*buffers.size.fromHoriz: sizeL
+*expert*tree*buffers.flagsL.label: Flags
+*expert*tree*buffers.flagsL.fromVert: size
+*expert*tree*buffers.flags.fromVert: size
+*expert*tree*buffers.flags.fromHoriz: flagsL
+*Expert*close.label: Close
diff --git a/hw/xfree86/utils/xorgcfg/xorgcfg.man.pre b/hw/xfree86/utils/xorgcfg/xorgcfg.man.pre
new file mode 100644
index 000000000..bade75d42
--- /dev/null
+++ b/hw/xfree86/utils/xorgcfg/xorgcfg.man.pre
@@ -0,0 +1,152 @@
+.\"
+.\" Copyright (c) 2000 by Conectiva S.A. (http://www.conectiva.com)
+.\"
+.\" 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
+.\" CONECTIVA LINUX 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 Conectiva Linux shall
+.\" not be used in advertising or otherwise to promote the sale, use or other
+.\" dealings in this Software without prior written authorization from
+.\" Conectiva Linux.
+.\"
+.\" Author: Paulo César Pereira de Andrade <pcpa@conectiva.com.br>
+.\"
+.\" $XFree86: xc/programs/Xserver/hw/xfree86/xf86cfg/xf86cfg.man,v 1.9 2002/12/30 14:34:02 herrb Exp $
+.\"
+.TH xorgcfg __appmansuffix__ __vendorversion__
+.SH NAME
+xorgcfg - Graphical configuration tool for __xservername__
+.SH SYNOPSIS
+.B xorgcfg
+[-config\fI __xconfigfile__\fP] [-modulepath \fImoduledir\fP]
+[-fontpath \fIfontsdir\fP] [-toolkitoption ...]
+.SH DESCRIPTION
+.I Xorgcfg
+is a tool to configure\fI __xservername__\fP, and can be used to either write the
+initial configuration file or make customizations to the current configuration.
+.PP
+When the \fBDISPLAY\fP environment variable is not set, xorgcfg will run
+the command\fI __xservername__ -configure\fP to allow the xserver detect the
+hardware in the computer, and write an initial\fI __xconfigfile__\fP file
+in the user's home directory. Then, it will start
+__xservername__ and allow customizations.
+.br
+If the \fBDISPLAY\fP environment variable is set, xorgcfg will read the
+default\fI __xconfigfile__\fP, that may not be the same being used by the current
+server, and allow customizations.
+.PP
+To use an alternative location for modules or fonts the respective search
+paths may be specified.
+.PP
+Unless there is an \fBApply\fP button in the current xorgcfg dialog, the
+changes made will take place the next time\fI __xservername__\fP is started.
+
+.PP
+Xorgcfg allows addition and configuration of new devices, such as video cards,
+monitors, keyboards and mouses.
+.PP
+Screen layout configuration for xinerama or traditional multi-head is also
+available.
+.PP
+Modelines can be configured or optimized.
+.PP
+AccessX basic configurations can be made in the xorgcfg's accessx section.
+
+.SH OPTIONS
+.TP 8
+.I -config
+Specifies an alternate __xconfigfile__ file for configuration.
+.TP 8
+.I -modulepath
+Specifies where xorgcfg, and the server it may start, should look for
+__xservername__ modules.
+.TP 8
+.I -serverpath
+Specifies the complete path, not including the binary name, of the
+__xservername__ binary.
+.TP 8
+.I -fontpath
+Specifies the path to the fonts that should be used by the server started
+by xorgcfg.
+.TP 8
+.I -rgbpath
+Specifies the path to the rgb.txt file that should be used by the server
+started by xorgcfg, if any.
+.TP 8
+.I -textmode
+If xorgcfg was compiled with support to ncurses, this option makes xorgcfg
+enters a text mode interface.
+.TP 8
+.I -nomodules
+When built with support for loading modules, this options changes xorgcfg
+behaviour, so that it will not load any modules, and thus start quicker.
+
+.SH ENVIRONMENT
+.TP 8
+.I DISPLAY
+Default host and display number
+.TP 8
+.I XWINHOME
+Directory where __xservername__ was installed, defaults to /usr/X11R6.
+.TP 8
+.I XENVIRONMENT
+Name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property
+
+.SH FILES
+.TP 8
+.I /etc/__xconfigfile__
+Server configuration file
+.TP 8
+.I /etc/X11/__xconfigfile__
+Server configuration file
+.TP 8
+.I /usr/X11R6/etc/__xconfigfile__
+Server configuration file
+.TP 8
+.IR __projectroot__/lib/X11/__xconfigfile__. hostname
+Server configuration file
+.TP 8
+.I __projectroot__/lib/X11/__xconfigfile__
+Server configuration file
+.TP 8
+.I __projectroot__/lib/X11/app-default/XOrgCfg
+Specifies xorgcfg resources
+.TP 8
+.I __projectroot__/lib/X11/xkb/X0-config.keyboard
+Keyboard specific configuration
+
+.SH "SEE ALSO"
+.IR __xservername__ (__appmansuffix__)
+.IR __xconfigfile__ (__filemansuffix__)
+
+.SH COPYRIGHT
+.TP 8
+Copyright 2000, Conectiva Linux S.A.
+\fIhttp://www.conectiva.com\fP
+.TP 8
+Copyright 2000, The XFree86 Project
+\fIhttp://www.XFree86.org\fP
+
+.SH AUTHORS
+.TP 8
+Paulo C\'esar Pereira de Andrade \fI<pcpa@conectiva.com.br>\fP
+originally for The XFree86 Project.
+
+.SH BUGS
+Probably.
diff --git a/hw/xfree86/utils/xorgconfig/xorgconfig.c b/hw/xfree86/utils/xorgconfig/xorgconfig.c
new file mode 100644
index 000000000..7f4c18d6a
--- /dev/null
+++ b/hw/xfree86/utils/xorgconfig/xorgconfig.c
@@ -0,0 +1,2906 @@
+/* $XFree86: xc/programs/Xserver/hw/xfree86/xf86config/xf86config.c,v 3.69 2003/02/20 04:05:15 dawes Exp $ */
+
+/*
+ * This is a configuration program that will create a base XF86Config
+ * file based on menu choices. Its main feature is that clueless users
+ * may be less inclined to select crazy sync rates way over monitor spec,
+ * by presenting a menu with standard monitor types. Also some people
+ * don't read docs unless an executable that they can run tells them to.
+ *
+ * It assumes a 24-line or bigger text console.
+ *
+ * Revision history:
+ * 25Sep94 Initial version.
+ * 27Sep94 Fix hsync range of monitor types to match with best possible mode.
+ * Remove 'const'.
+ * Tweak descriptions.
+ * 28Sep94 Fixes from J"org Wunsch:
+ * Don't use gets().
+ * Add mouse device prompt.
+ * Fix lines overrun for 24-line console.
+ * Increase buffer size for probeonly output.
+ * 29Sep94 Fix bad bug with old XF86Config preserving during probeonly run.
+ * Add note about vertical refresh in interlaced modes.
+ * Name gets() replacement getstring().
+ * Add warning about binary paths.
+ * Fixes from David Dawes:
+ * Don't use 'ln -sf'.
+ * Omit man path reference in comment.
+ * Generate only a generic 320x200 SVGA section for accel cards.
+ * Only allow writing to /usr/X11R6/lib/X11 if root, and use
+ * -xf86config for the -probeonly phase (root only).
+ * Fix bug that forces screen type to accel in some cases.
+ * 30Sep94 Continue after clocks probe fails.
+ * Note about programmable clocks.
+ * Rename to 'xf86config'. Not to be confused with XF86Config
+ * or the -xf86config option.
+ * 07Oct94 Correct hsync in standard mode timings comments, and include
+ * the proper +/-h/vsync flags.
+ * 11Oct94 Skip 'numclocks:' and 'pixel clocks:' lines when probing for
+ * clocks.
+ * 18Oct94 Add check for existence of /usr/X11R6.
+ * Add note about ctrl-alt-backspace.
+ * 06Nov94 Add comment above standard mode timings in XF86Config.
+ * 24Dec94 Add low-resolution modes using doublescan.
+ * 29Dec94 Add note in horizontal sync range selection.
+ * Ask about ClearDTR/RTS option for Mouse Systems mice.
+ * Ask about writing to /etc/XF86Config.
+ * Allow link to be set in /var/X11R6/bin.
+ * Note about X -probeonly crashing.
+ * Add keyboard Alt binding option for non-ASCII characters.
+ * Add card database selection.
+ * Write temporary XF86Config for clock probing in /tmp instead
+ * of /usr/X11R6/lib/X11.
+ * Add RAMDAC and Clockchip menu.
+ * 27Mar99 Modified for XFree86 4.0 config file format
+ * 06Sep02 Write comment block about 'DontVTSwitch'.
+ *
+ * Possible enhancements:
+ * - Add more standard mode timings (also applies to README.Config). Missing
+ * are 1024x768 @ 72 Hz, 1152x900 modes, and 1280x1024 @ ~70 Hz.
+ * I suspect there is a VESA standard for 1024x768 @ 72 Hz with 77 MHz dot
+ * clock, and 1024x768 @ 75 Hz with 78.7 MHz dot clock. New types of
+ * monitors probably work better with VESA 75 Hz timings.
+ * - Add option for creation of clear, minimal XF86Config.
+ * - The card database doesn't include most of the entries in previous
+ * databases.
+ *
+ * Send comments to H.Hanemaayer@inter.nl.net.
+ *
+ * Things to keep up-to-date:
+ * - Accelerated server names.
+ * - Ramdac and Clockchip settings.
+ * - The card database.
+ *
+ */
+/* Oct2000
+ * New 'Configuration of XKB' section.
+ * Author: Ivan Pascal The XFree86 Project.
+ */
+/*
+ * Nov2002
+ * Some enhancements:
+ * - Add new PS/2 mouse protocol.
+ * "IMPS/2","ExplorerPS/2","ThinkingMousePS/2","MouseManPlusPS/2",
+ * "GlidePointPS/2","NetMousePS/2" and "NetScrollPS/2".
+ * - Add mouse-speed setting for PS/2 mouse.
+ * - Fix seg.fault problem on Solaris.
+ * - Add modestring "1400x1050"(for ATI Mobile-Rage).
+ * - Add videomemory 8192, 16384, 32768, 65536, 131072 and 262144.
+ * - Load "speedo" module.
+ * - Ready to DRI.
+ * - Load xtt module instead of freetype module.
+ * - Add font path "/fonts/TrueType/" and "/fonts/freefont/".
+ * Chisato Yamauchi(cyamauch@phyas.aichi-edu.ac.jp)
+ */
+/* $XConsortium: xf86config.c /main/21 1996/10/28 05:43:57 kaleb $ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+/* hv: fix a few EMX problems, will disappear with real UnixOS/2 */
+#ifdef __UNIXOS2__
+#define sync() /*nothing*/
+static int getuid() { return 0; }
+#endif
+
+
+#include <X11/Xlib.h>
+#include <X11/extensions/XKBstr.h>
+#include <X11/extensions/XKBrules.h>
+#define MAX_XKBOPTIONS 5
+
+#include "cards.h"
+
+
+/*
+ * Define the following to 310 to remove references to XFree86 features that
+ * have been added since XFree86 3.1 (e.g. DoubleScan modes).
+ * or to 311 to remove certain new modelines
+ */
+#define XFREE86_VERSION 400
+
+/*
+ * This is the filename of the temporary XF86Config file that is written
+ * when the program is told to probe clocks (which can only happen for
+ * root).
+ */
+#define TEMPORARY_XF86CONFIG_DIR_PREFIX "/tmp/.xf86config"
+#define TEMPORARY_XF86CONFIG_FILENAME "XF86Config.tmp"
+
+/*
+ * Define this to have /etc/X11/XF86Config prompted for as the default
+ * location to write the XF86Config file to.
+ */
+#define PREFER_XF86CONFIG_IN_ETC
+
+/*
+ * Define this to force the user to go through XKB configuration section.
+ *
+ */
+#define FORCE_XKB_DIALOG
+
+/*
+ * Configuration variables.
+ */
+
+#define MAX_CLOCKS_LINES 16
+
+#define DUMBCONFIG2 "dumbconfig.2"
+#define DUMBCONFIG3 "dumbconfig.3"
+#ifndef __UNIXOS2__
+#define XSERVERNAME_FOR_PROBE "X"
+#else
+#define XSERVERNAME_FOR_PROBE "/usr/X11R6/bin/"__XSERVERNAME__
+#endif
+
+/* some more vars to make path names in texts more flexible. OS/2 users
+ * may be more irritated than Unix users
+ */
+#ifndef PROJECTROOT
+#define PROJECTROOT "/usr/X11R6"
+#endif
+#define TREEROOT PROJECTROOT
+#define TREEROOTLX TREEROOT "/lib/X11"
+#define TREEROOTCFG TREEROOT "/etc/X11"
+#define MODULEPATH TREEROOT "/lib/modules"
+
+#ifndef XCONFIGFILE
+#define XCONFIGFILE "XF86Config"
+#endif
+#define CONFIGNAME XCONFIGFILE
+
+#ifndef XF86_VERSION_MAJOR
+#ifdef XVERSION
+#if XVERSION > 40000000
+#define XF86_VERSION_MAJOR (XVERSION / 10000000)
+#else
+#define XF86_VERSION_MAJOR (XVERSION / 1000)
+#endif
+#else
+#define XF86_VERSION_MAJOR 4
+#endif
+#endif
+
+
+int config_mousetype; /* Mouse. */
+int config_emulate3buttons;
+int config_chordmiddle;
+int config_cleardtrrts;
+char *config_pointerdevice;
+int config_altmeta; /* Keyboard. */
+int config_monitortype; /* Monitor. */
+char *config_hsyncrange;
+char *config_vsyncrange;
+char *config_monitoridentifier;
+int config_videomemory; /* Video card. */
+int config_screentype; /* mono, vga16, svga, accel */
+char *config_deviceidentifier;
+int config_numberofclockslines;
+char *config_clocksline[MAX_CLOCKS_LINES];
+char *config_modesline8bpp;
+char *config_modesline16bpp;
+char *config_modesline24bpp;
+int config_virtual; /* 1 (yes) or 0 (no) */
+int config_virtualx8bpp, config_virtualy8bpp;
+int config_virtualx16bpp, config_virtualy16bpp;
+int config_virtualx24bpp, config_virtualy24bpp;
+char *config_ramdac;
+char *config_dacspeed;
+char *config_clockchip;
+#if defined(__OpenBSD__) && defined(WSCONS_SUPPORT) && !defined(PCVT_SUPPORT)
+char *config_keyboard_dev = "/dev/wskbd0";
+#endif
+int config_xkbdisable = 0;
+char *config_xkbrules;
+char *config_xkbmodel = "pc101";
+char *config_xkblayout = "us";
+char *config_xkbvariant = (char *) 0;
+char *config_xkboptions = (char *) 0;
+char *config_depth;
+
+char *temp_dir = "";
+
+/*
+ * These are from the selected card definition. Parameters from the
+ * definition are offered during the questioning about the video card.
+ */
+
+int card_selected; /* Card selected from database. */
+
+
+static void write_XF86Config(char *filename);
+
+
+/*
+ * This is the initial intro text that appears when the program is started.
+ */
+
+static char *intro_text =
+"\n"
+"This program will create a basic " CONFIGNAME " file, based on menu selections you\n"
+"make.\n"
+"\n"
+"The " CONFIGNAME " file usually resides in " TREEROOTCFG " or /etc/X11. A sample\n"
+CONFIGNAME " file is supplied with "__XSERVERNAME__"; it is configured for a standard\n"
+"VGA card and monitor with 640x480 resolution. This program will ask for a\n"
+"pathname when it is ready to write the file.\n"
+"\n"
+"You can either take the sample " CONFIGNAME " as a base and edit it for your\n"
+"configuration, or let this program produce a base " CONFIGNAME " file for your\n"
+"configuration and fine-tune it.\n"
+#if 0
+" Refer to " TREEROOTLX "/doc/README.Config\n"
+"for a detailed overview of the configuration process.\n"
+"\n"
+"(what should we change this section to?)\n"
+"For accelerated servers (including accelerated drivers in the SVGA server),\n"
+"there are many chipset and card-specific options and settings. This program\n"
+"does not know about these. On some configurations some of these settings must\n"
+"be specified. Refer to the server man pages and chipset-specific READMEs.\n"
+#endif
+"\n"
+"Before continuing with this program, make sure you know what video card\n"
+"you have, and preferably also the chipset it uses and the amount of video\n"
+"memory on your video card. SuperProbe may be able to help with this.\n"
+"\n"
+;
+
+static char *finalcomment_text =
+"File has been written. Take a look at it before running 'startx'. Note that\n"
+"the " CONFIGNAME " file must be in one of the directories searched by the server\n"
+"(e.g. /etc/X11) in order to be used. Within the server press\n"
+"ctrl, alt and '+' simultaneously to cycle video resolutions. Pressing ctrl,\n"
+"alt and backspace simultaneously immediately exits the server (use if\n"
+"the monitor doesn't sync for a particular mode).\n"
+"\n"
+"For further configuration, refer to the " XCONFIGFILE "(5) manual page.\n"
+"\n";
+
+static void *
+Malloc(int i) {
+ void *p;
+
+ p = malloc(i);
+ if (p == NULL) {
+ printf("Fatal malloc error\n");
+ exit(-1);
+ }
+ return p;
+}
+
+static char *
+Strdup(const char *s){
+ char *d;
+
+ d = Malloc(strlen(s) + 1);
+ strcpy(d, s);
+ return d;
+}
+
+static void
+createtmpdir(void) {
+ /* length of prefix + 20 (digits in 2**64) + 1 (slash) + 1 */
+ temp_dir = Malloc(strlen(TEMPORARY_XF86CONFIG_DIR_PREFIX) + 22);
+ sprintf(temp_dir, "%s%ld", TEMPORARY_XF86CONFIG_DIR_PREFIX,
+ (long)getpid());
+ if (mkdir(temp_dir, 0700) != 0) {
+ printf("Cannot create directory %s\n", temp_dir);
+ exit(-1);
+ }
+ /* append a slash */
+ strcat(temp_dir, "/");
+}
+
+
+void
+keypress(void) {
+ printf("Press enter to continue, or ctrl-c to abort.");
+ getchar();
+ printf("\n");
+}
+
+static void
+emptylines(void) {
+ int i;
+ for (i = 0; i < 50; i++)
+ printf("\n");
+}
+
+static int
+answerisyes(char *s)
+{
+ if (s[0] == '\'') /* For fools that type the ' literally. */
+ return tolower(s[1]) == 'y';
+ return tolower(s[0]) == 'y';
+}
+
+/*
+ * This is a replacement for gets(). Limit is 80 chars.
+ * The 386BSD descendants scream about using gets(), for good reason.
+ */
+
+static void
+getstring(char *s)
+{
+ char *cp;
+ if (fgets(s, 80, stdin) == NULL)
+ exit(1);
+ cp = strchr(s, '\n');
+ if (cp)
+ *cp=0;
+}
+
+/*
+ * Mouse configuration.
+ *
+ * (hv) OS/2 (__UNIXOS2__) only has an OS supported mouse, so user has no options
+ * the server will enable a third button automatically if there is one
+ * We also do the same for QNX4, since we use the OS mouse drivers.
+ */
+
+int M_OSMOUSE, M_WSMOUSE, M_AUTO,
+ M_SYSMOUSE, M_MOUSESYSTEMS, M_PS2,
+ M_MICROSOFT, M_BUSMOUSE, M_IMPS2,
+ M_EXPLORER_PS2, M_GLIDEPOINT_PS2, M_MOUSEMANPLUS_PS2,
+ M_NETMOUSE_PS2, M_NETSCROLL_PS2, M_THINKINGMOUSE_PS2,
+ M_ACECAD, M_GLIDEPOINT, M_INTELLIMOUSE,
+ M_LOGITECH, M_MMHITTAB, M_MMSERIES,
+ M_MOUSEMAN, M_THINKINGMOUSE;
+
+struct {
+ char *name;
+ int *ident;
+ char *desc;
+} mouse_info[] = {
+#if defined(__UNIXOS2__) || defined(QNX4)
+#define DEF_PROTO_STRING "OSMOUSE"
+ {"OSMOUSE", &M_OSMOUSE,
+ "OSMOUSE"
+ },
+#endif
+#ifdef WSCONS_SUPPORT
+#define WS_MOUSE_STRING "wsmouse"
+#define DEF_PROTO_STRING WS_MOUSE_STRING
+ {WS_MOUSE_STRING, &M_WSMOUSE,
+ "wsmouse protocol"
+ },
+#endif
+#ifndef DEF_PROTO_STRING
+#define DEF_PROTO_STRING "Auto"
+#endif
+ {"Auto", &M_AUTO,
+ "Auto detect"
+ },
+ {"SysMouse", &M_SYSMOUSE,
+ "SysMouse"
+ },
+#define M_MOUSESYSTEMS_STRING "MouseSystems"
+ {M_MOUSESYSTEMS_STRING, &M_MOUSESYSTEMS,
+ "Mouse Systems (3-button protocol)"
+ },
+ {"PS/2", &M_PS2,
+ "PS/2 Mouse"
+ },
+#define M_MICROSOFT_STRING "Microsoft"
+ {M_MICROSOFT_STRING, &M_MICROSOFT,
+ "Microsoft compatible (2-button protocol)"
+ },
+ {"Busmouse", &M_BUSMOUSE,
+ "Bus Mouse"
+ },
+#ifndef __FreeBSD__
+ {"IMPS/2", &M_IMPS2,
+ "IntelliMouse PS/2"
+ },
+ {"ExplorerPS/2", &M_EXPLORER_PS2,
+ "Explorer PS/2"
+ },
+ {"GlidePointPS/2", &M_GLIDEPOINT_PS2,
+ "GlidePoint PS/2"
+ },
+ {"MouseManPlusPS/2", &M_MOUSEMANPLUS_PS2,
+ "MouseManPlus PS/2"
+ },
+ {"NetMousePS/2", &M_NETMOUSE_PS2,
+ "NetMouse PS/2"
+ },
+ {"NetScrollPS/2", &M_NETSCROLL_PS2,
+ "NetScroll PS/2"
+ },
+ {"ThinkingMousePS/2", &M_THINKINGMOUSE_PS2,
+ "ThinkingMouse PS/2"
+ },
+#endif
+ {"AceCad", &M_ACECAD,
+ "AceCad"
+ },
+ {"GlidePoint", &M_GLIDEPOINT,
+ "GlidePoint"
+ },
+ {"IntelliMouse", &M_INTELLIMOUSE,
+ "Microsoft IntelliMouse"
+ },
+ {"Logitech", &M_LOGITECH,
+ "Logitech Mouse (serial, old type, Logitech protocol)"
+ },
+ {"MMHitTab", &M_MMHITTAB,
+ "MM HitTablet"
+ },
+ {"MMSeries", &M_MMSERIES,
+ "MM Series" /* XXXX These descriptions should be improved. */
+ },
+ {"MouseMan", &M_MOUSEMAN,
+ "Logitech MouseMan (Microsoft compatible)"
+ },
+ {"ThinkingMouse", &M_THINKINGMOUSE,
+ "ThinkingMouse"
+ },
+};
+
+#ifndef __UNIXOS2__
+static char *mouseintro_text =
+"First specify a mouse protocol type. Choose one from the following list:\n"
+"\n";
+
+static char *mousedev_text =
+"Now give the full device name that the mouse is connected to, for example\n"
+"/dev/tty00. Just pressing enter will use the default, /dev/mouse.\n"
+#ifdef WSCONS_SUPPORT
+"On systems with wscons, the default is /dev/wsmouse.\n"
+#endif
+#ifdef __FreeBSD__
+"On FreeBSD, the default is /dev/sysmouse.\n"
+#endif
+"\n";
+
+static char *mousecomment_text =
+"The recommended protocol is " DEF_PROTO_STRING ". If you have a very old mouse\n"
+"or don't want OS support or auto detection, and you have a two-button\n"
+"or three-button serial mouse, it is most likely of type " M_MICROSOFT_STRING ".\n"
+#ifdef WSCONS_SUPPORT
+"\n"
+"If your system uses the wscons console driver, with a PS/2 type mouse,\n"
+"select " WS_MOUSE_STRING ".\n"
+#endif
+"\n";
+
+static char *twobuttonmousecomment_text =
+"You have selected a two-button mouse protocol. It is recommended that you\n"
+"enable Emulate3Buttons.\n";
+
+static char *threebuttonmousecomment_text =
+"You have selected a three-button mouse protocol. It is recommended that you\n"
+"do not enable Emulate3Buttons, unless the third button doesn't work.\n";
+
+static char *unknownbuttonsmousecomment_text =
+"If your mouse has only two buttons, it is recommended that you enable\n"
+"Emulate3Buttons.\n";
+
+static char *microsoftmousecomment_text =
+"You have selected a Microsoft protocol mouse. If your mouse was made by\n"
+"Logitech, you might want to enable ChordMiddle which could cause the\n"
+"third button to work.\n";
+
+static char *mousesystemscomment_text =
+"You have selected a Mouse Systems protocol mouse. If your mouse is normally\n"
+"in Microsoft-compatible mode, enabling the ClearDTR and ClearRTS options\n"
+"may cause it to switch to Mouse Systems mode when the server starts.\n";
+
+static char *logitechmousecomment_text =
+"You have selected a Logitech protocol mouse. This is only valid for old\n"
+"Logitech mice.\n";
+
+static char *mousemancomment_text =
+"You have selected a Logitech MouseMan type mouse. You might want to enable\n"
+"ChordMiddle which could cause the third button to work.\n";
+
+#endif /* !__UNIXOS2__ */
+
+static void
+mouse_configuration(void) {
+
+#if !defined(__UNIXOS2__) && !defined(QNX4)
+ int i, j;
+ char s[80];
+
+#define MOUSETYPE_COUNT sizeof(mouse_info)/sizeof(mouse_info[0])
+ for (i = 0; i < MOUSETYPE_COUNT; i++)
+ *(mouse_info[i].ident) = i;
+
+ for (i=0;;) {
+ emptylines();
+ printf("%s", mouseintro_text);
+ for (j = i; j < i + 14 && j < MOUSETYPE_COUNT; j++)
+ printf("%2d. %s\n", j + 1, mouse_info[j].name);
+ printf("\n");
+ printf("%s", mousecomment_text);
+ printf("Enter a protocol number: ");
+ getstring(s);
+ if (strlen(s) == 0) {
+ i += 14;
+ if (i >= MOUSETYPE_COUNT)
+ i = 0;
+ continue;
+ }
+ config_mousetype = atoi(s) - 1;
+ if (config_mousetype >= 0 && config_mousetype < MOUSETYPE_COUNT)
+ break;
+ }
+ printf("\n");
+
+ if (config_mousetype == M_LOGITECH) {
+ /* Logitech. */
+ printf("%s", logitechmousecomment_text);
+ printf("\n");
+ printf("Please answer the following question with either 'y' or 'n'.\n");
+ printf("Are you sure it's really not a Microsoft compatible one? ");
+ getstring(s);
+ if (!answerisyes(s))
+ config_mousetype = M_MICROSOFT;
+ printf("\n");
+ }
+
+ config_chordmiddle = 0;
+ if (config_mousetype == M_MICROSOFT || config_mousetype == M_MOUSEMAN) {
+ /* Microsoft or MouseMan. */
+ if (config_mousetype == M_MICROSOFT)
+ printf("%s", microsoftmousecomment_text);
+ else
+ printf("%s", mousemancomment_text);
+ printf("\n");
+ printf("Please answer the following question with either 'y' or 'n'.\n");
+ printf("Do you want to enable ChordMiddle? ");
+ getstring(s);
+ if (answerisyes(s))
+ config_chordmiddle = 1;
+ printf("\n");
+ }
+
+ config_cleardtrrts = 0;
+ if (config_mousetype == M_MOUSESYSTEMS) {
+ /* Mouse Systems. */
+ printf("%s", mousesystemscomment_text);
+ printf("\n");
+ printf("Please answer the following question with either 'y' or 'n'.\n");
+ printf("Do you want to enable ClearDTR and ClearRTS? ");
+ getstring(s);
+ if (answerisyes(s))
+ config_cleardtrrts = 1;
+ printf("\n");
+ }
+
+ if (config_mousetype == M_MICROSOFT) {
+ if (config_chordmiddle)
+ printf("%s", threebuttonmousecomment_text);
+ else
+ printf("%s", twobuttonmousecomment_text);
+ }
+ else if (config_mousetype == M_MOUSESYSTEMS ||
+ config_mousetype == M_INTELLIMOUSE) {
+ printf("%s", threebuttonmousecomment_text);
+ }
+ else {
+ printf("%s", unknownbuttonsmousecomment_text);
+ }
+
+ printf("\n");
+
+ printf("Please answer the following question with either 'y' or 'n'.\n");
+ printf("Do you want to enable Emulate3Buttons? ");
+ getstring(s);
+ if (answerisyes(s))
+ config_emulate3buttons = 1;
+ else
+ config_emulate3buttons = 0;
+ printf("\n");
+
+ printf("%s", mousedev_text);
+ printf("Mouse device: ");
+ getstring(s);
+ if (strlen(s) == 0)
+#ifdef WSCONS_SUPPORT
+ config_pointerdevice = "/dev/wsmouse";
+#elif defined(__FreeBSD__)
+ config_pointerdevice = "/dev/sysmouse";
+#else
+ config_pointerdevice = "/dev/mouse";
+#endif
+ else {
+ config_pointerdevice = Malloc(strlen(s) + 1);
+ strcpy(config_pointerdevice, s);
+ }
+ printf("\n");
+
+#else /* __UNIXOS2__ */
+ /* set some reasonable defaults for OS/2 */
+ config_mousetype = M_OSMOUSE;
+ config_chordmiddle = 0;
+ config_cleardtrrts = 0;
+ config_emulate3buttons = 0;
+#if !defined(QNX4)
+ config_pointerdevice = "OS2MOUSE";
+#else
+ config_pointerdevice = "QNXMOUSE";
+#endif
+#endif /* __UNIXOS2__ */
+}
+
+
+/*
+ * Keyboard configuration.
+ */
+
+/*
+ * Configuration of XKB
+ */
+static char *xkbmodeltext =
+"Please select one of the following keyboard types that is the better\n"
+"description of your keyboard. If nothing really matches,\n"
+"choose 1 (Generic 101-key PC)\n\n";
+
+static char *xkblayouttext =
+"Please select the layout corresponding to your keyboard\n";
+
+static char *xkbvarianttext =
+"Please enter a variant name for '%s' layout. Or just press enter\n"
+"for default variant\n\n";
+
+static char *xkboptionstext =
+"Please answer the following question with either 'y' or 'n'.\n"
+"Do you want to select additional XKB options (group switcher,\n"
+"group indicator, etc.)? ";
+
+#if defined(__OpenBSD__) && defined(WSCONS_SUPPORT) && !defined(PCVT_SUPPORT)
+static char *kbdevtext =
+"Please enter the device name for your keyboard or just press enter\n"
+"for the default of wskbd0\n\n";
+#endif
+
+static void
+keyboard_configuration(void)
+{
+ int i, j;
+ char s[80];
+ char *rulesfile;
+ int number, options[MAX_XKBOPTIONS], num_options;
+ XkbRF_RulesPtr rules;
+
+#if defined(__OpenBSD__) && defined(WSCONS_SUPPORT) && !defined(PCVT_SUPPORT)
+ printf(kbdevtext);
+ getstring(s);
+ if (strlen(s) != 0) {
+ config_keyboard_dev = Malloc(strlen(s) + 1);
+ strcpy(config_keyboard_dev, s);
+ }
+#endif
+
+#ifdef XFREE98_XKB
+ config_xkbrules = "xfree98"; /* static */
+ rulesfile = XKB_RULES_DIR "/xfree98";
+#else
+ config_xkbrules = __XKBDEFRULES__; /* static */
+ rulesfile = XKB_RULES_DIR "/";
+#endif
+
+ rules = XkbRF_Load(rulesfile, "", True, False);
+ emptylines();
+
+ if (!rules) {
+ printf("XKB rules file '%s' not found\n", rulesfile);
+ printf("Keyboard XKB options will be set to default values.\n");
+ keypress();
+ return;
+ }
+
+ number = -1;
+ for (i=0;;) {
+ emptylines();
+ printf(xkbmodeltext);
+ for (j = i; j < i + 16 && j < rules->models.num_desc; j++)
+ printf("%3d %-50s\n", j+1, rules->models.desc[j].desc);
+ printf("\nEnter a number to choose the keyboard.\n\n");
+ if (rules->models.num_desc >= 16)
+ printf("Press enter for the next page\n");
+ getstring(s);
+ if (strlen(s) == 0) {
+ i += 16;
+ if (i > rules->models.num_desc)
+ i = 0;
+ continue;
+ }
+ number = atoi(s) - 1;
+ if (number >= 0 && number < rules->models.num_desc)
+ break;
+ }
+
+ i = strlen(rules->models.desc[number].name) + 1;
+ config_xkbmodel = Malloc(i);
+ sprintf(config_xkbmodel,"%s", rules->models.desc[number].name);
+
+ emptylines();
+ printf(xkblayouttext);
+
+ number = -1;
+ for (i=0;;) {
+ emptylines();
+ for (j = i; j < i + 18 && j < rules->layouts.num_desc; j++)
+ printf("%3d %-50s\n", j+1,
+ rules->layouts.desc[j].desc);
+ printf("\n");
+ printf("Enter a number to choose the country.\n");
+ if (rules->layouts.num_desc >= 18)
+ printf("Press enter for the next page\n");
+ printf("\n");
+ getstring(s);
+ if (strlen(s) == 0) {
+ i += 18;
+ if (i > rules->layouts.num_desc)
+ i = 0;
+ continue;
+ }
+ number = atoi(s) - 1;
+ if (number >= 0 && number < rules->layouts.num_desc)
+ break;
+ }
+ config_xkblayout = Malloc(strlen(rules->layouts.desc[number].name)+1);
+ sprintf(config_xkblayout,"%s", rules->layouts.desc[number].name);
+
+ emptylines();
+ printf(xkbvarianttext, config_xkblayout);
+ getstring(s);
+ if (strlen(s) != 0) {
+ config_xkbvariant = Malloc(strlen(s) + 1);
+ strcpy(config_xkbvariant, s);
+ }
+
+ emptylines();
+ printf(xkboptionstext);
+ getstring(s);
+ if (!answerisyes(s))
+ return;
+
+ num_options = 0;
+ for (j=0,i=0;;) {
+ if (!strchr(rules->options.desc[i].name, ':')) {
+ emptylines();
+ printf(" %s\n\n", rules->options.desc[i].desc);
+ j = i;
+ } else {
+ printf("%3d %-50s\n", i - j, rules->options.desc[i].desc);
+ }
+ i++;
+ if ( i == rules->options.num_desc ||
+ !strchr(rules->options.desc[i].name, ':')) {
+ printf("\nPlease select the option or just press enter if none\n");
+ getstring(s);
+ if (strlen(s) != 0) {
+ number = atoi(s);
+ if (number && (num_options < MAX_XKBOPTIONS)) {
+ options[num_options++] = number + j;
+ }
+ }
+ }
+ if (i == rules->options.num_desc)
+ break;
+ }
+
+ if (!num_options)
+ return;
+
+ for (j=0,i=0; i<num_options; i++) {
+ j += strlen(rules->options.desc[options[i]].name);
+ }
+ config_xkboptions = Malloc(j + num_options);
+ for (j=0,i=0; i<num_options; i++) {
+ j += sprintf(config_xkboptions+j,"%s%s",
+ i == 0 ? "": "," ,rules->options.desc[options[i]].name);
+ }
+ return;
+}
+
+
+
+/*
+ * Monitor configuration.
+ */
+
+static char *monitorintro_text =
+"Now we want to set the specifications of the monitor. The two critical\n"
+"parameters are the vertical refresh rate, which is the rate at which the\n"
+"the whole screen is refreshed, and most importantly the horizontal sync rate,\n"
+"which is the rate at which scanlines are displayed.\n"
+"\n"
+"The valid range for horizontal sync and vertical sync should be documented\n"
+"in the manual of your monitor. If in doubt, check the monitor database\n"
+TREEROOTLX "/doc/Monitors to see if your monitor is there.\n"
+"\n";
+
+static char *hsyncintro_text =
+"You must indicate the horizontal sync range of your monitor. You can either\n"
+"select one of the predefined ranges below that correspond to industry-\n"
+"standard monitor types, or give a specific range.\n"
+"\n"
+"It is VERY IMPORTANT that you do not specify a monitor type with a horizontal\n"
+"sync range that is beyond the capabilities of your monitor. If in doubt,\n"
+"choose a conservative setting.\n"
+"\n";
+
+static char *customhsync_text =
+"Please enter the horizontal sync range of your monitor, in the format used\n"
+"in the table of monitor types above. You can either specify one or more\n"
+"continuous ranges (e.g. 15-25, 30-50), or one or more fixed sync frequencies.\n"
+"\n";
+
+static char *vsyncintro_text =
+"You must indicate the vertical sync range of your monitor. You can either\n"
+"select one of the predefined ranges below that correspond to industry-\n"
+"standard monitor types, or give a specific range. For interlaced modes,\n"
+"the number that counts is the high one (e.g. 87 Hz rather than 43 Hz).\n"
+"\n"
+" 1 50-70\n"
+" 2 50-90\n"
+" 3 50-100\n"
+" 4 40-150\n"
+" 5 Enter your own vertical sync range\n";
+
+static char *monitordescintro_text =
+"You must now enter a few identification/description strings, namely an\n"
+"identifier, a vendor name, and a model name. Just pressing enter will fill\n"
+"in default names.\n"
+"\n";
+
+#define NU_MONITORTYPES 10
+
+static char *monitortype_range[NU_MONITORTYPES] = {
+ "31.5",
+ "31.5 - 35.1",
+ "31.5, 35.5",
+ "31.5, 35.15, 35.5",
+ "31.5 - 37.9",
+ "31.5 - 48.5",
+ "31.5 - 57.0",
+ "31.5 - 64.3",
+ "31.5 - 79.0",
+ "31.5 - 82.0"
+};
+
+static char *monitortype_name[NU_MONITORTYPES] = {
+ "Standard VGA, 640x480 @ 60 Hz",
+ "Super VGA, 800x600 @ 56 Hz",
+ "8514 Compatible, 1024x768 @ 87 Hz interlaced (no 800x600)",
+ "Super VGA, 1024x768 @ 87 Hz interlaced, 800x600 @ 56 Hz",
+ "Extended Super VGA, 800x600 @ 60 Hz, 640x480 @ 72 Hz",
+ "Non-Interlaced SVGA, 1024x768 @ 60 Hz, 800x600 @ 72 Hz",
+ "High Frequency SVGA, 1024x768 @ 70 Hz",
+ "Monitor that can do 1280x1024 @ 60 Hz",
+ "Monitor that can do 1280x1024 @ 74 Hz",
+ "Monitor that can do 1280x1024 @ 76 Hz"
+};
+
+static void
+monitor_configuration(void) {
+ int i;
+ char s[80];
+ printf("%s", monitorintro_text);
+
+ keypress();
+ emptylines();
+
+ printf("%s", hsyncintro_text);
+
+ printf(" hsync in kHz; monitor type with characteristic modes\n");
+ for (i = 0; i < NU_MONITORTYPES; i++)
+ printf("%2d %s; %s\n", i + 1, monitortype_range[i],
+ monitortype_name[i]);
+
+ printf("%2d Enter your own horizontal sync range\n",
+ NU_MONITORTYPES + 1);
+ printf("\n");
+
+ printf("Enter your choice (1-%d): ", NU_MONITORTYPES + 1);
+ getstring(s);
+ config_monitortype = atoi(s) - 1;
+ if (config_monitortype < 0)
+ config_monitortype = 0;
+
+ printf("\n");
+
+ if (config_monitortype < NU_MONITORTYPES)
+ config_hsyncrange = monitortype_range[config_monitortype];
+ else {
+ /* Custom hsync range option selected. */
+ printf("%s", customhsync_text);
+ printf("Horizontal sync range: ");
+ getstring(s);
+ config_hsyncrange = Malloc(strlen(s) + 1);
+ strcpy(config_hsyncrange, s);
+ printf("\n");
+ }
+
+ printf("%s", vsyncintro_text);
+ printf("\n");
+
+ printf("Enter your choice: ");
+ getstring(s);
+ printf("\n");
+ switch (atoi(s)) {
+ case 0 :
+ case 1 :
+ config_vsyncrange = "50-70";
+ break;
+ case 2 :
+ config_vsyncrange = "50-90";
+ break;
+ case 3 :
+ config_vsyncrange = "50-100";
+ break;
+ case 4 :
+ config_vsyncrange = "40-150";
+ break;
+ case 5 :
+ /* Custom vsync range option selected. */
+ printf("Vertical sync range: ");
+ getstring(s);
+ config_vsyncrange = Malloc(strlen(s) + 1);
+ strcpy(config_vsyncrange, s);
+ printf("\n");
+ break;
+ }
+ printf("%s", monitordescintro_text);
+ printf("The strings are free-form, spaces are allowed.\n");
+ printf("Enter an identifier for your monitor definition: ");
+ getstring(s);
+ if (strlen(s) == 0)
+ config_monitoridentifier = "My Monitor";
+ else {
+ config_monitoridentifier = Malloc(strlen(s) + 1);
+ strcpy(config_monitoridentifier, s);
+ }
+}
+
+
+/*
+ * Card database.
+ */
+
+static char *cardintro_text =
+"Now we must configure video card specific settings. At this point you can\n"
+"choose to make a selection out of a database of video card definitions.\n"
+"Because there can be variation in Ramdacs and clock generators even\n"
+"between cards of the same model, it is not sensible to blindly copy\n"
+"the settings (e.g. a Device section). For this reason, after you make a\n"
+"selection, you will still be asked about the components of the card, with\n"
+"the settings from the chosen database entry presented as a strong hint.\n"
+"\n"
+"The database entries include information about the chipset, what driver to\n"
+"run, the Ramdac and ClockChip, and comments that will be included in the\n"
+"Device section. However, a lot of definitions only hint about what driver\n"
+"to run (based on the chipset the card uses) and are untested.\n"
+"\n"
+"If you can't find your card in the database, there's nothing to worry about.\n"
+"You should only choose a database entry that is exactly the same model as\n"
+"your card; choosing one that looks similar is just a bad idea (e.g. a\n"
+"GemStone Snail 64 may be as different from a GemStone Snail 64+ in terms of\n"
+"hardware as can be).\n"
+"\n";
+
+static char *cardunsupported_text =
+"This card is basically UNSUPPORTED. It may only work as a generic\n"
+"VGA-compatible card. If you have an "__XSERVERNAME__" version more recent than what\n"
+"this card definition was based on, there's a chance that it is now\n"
+"supported.\n";
+
+static void
+carddb_configuration(void) {
+ int i;
+ char s[80];
+ card_selected = -1;
+ printf("%s", cardintro_text);
+ printf("Do you want to look at the card database? ");
+ getstring(s);
+ printf("\n");
+ if (!answerisyes(s))
+ return;
+
+ /*
+ * Choose a database entry.
+ */
+ if (parse_database()) {
+ printf("Couldn't read card database file %s.\n",
+ CARD_DATABASE_FILE);
+ keypress();
+ return;
+ }
+
+ i = 0;
+ for (;;) {
+ int j;
+ emptylines();
+ for (j = i; j < i + 18 && j <= lastcard; j++) {
+ char *name = card[j].name,
+ *chipset = card[j].chipset;
+
+ printf("%3d %-50s%s\n", j,
+ name ? name : "-",
+ chipset ? chipset : "-");
+ }
+ printf("\n");
+ printf("Enter a number to choose the corresponding card definition.\n");
+ printf("Press enter for the next page, q to continue configuration.\n");
+ printf("\n");
+ getstring(s);
+ if (s[0] == 'q')
+ break;
+ if (strlen(s) == 0) {
+ i += 18;
+ if (i > lastcard)
+ i = 0;
+ continue;
+ }
+ card_selected = atoi(s);
+ if (card_selected >= 0 && card_selected <= lastcard)
+ break;
+ }
+
+ /*
+ * Look at the selected card.
+ */
+ if (card_selected != -1) {
+ char *name = card[card_selected].name,
+ *chipset = card[card_selected].chipset;
+
+ printf("\nYour selected card definition:\n\n");
+ printf("Identifier: %s\n", name ? name : "-");
+ printf("Chipset: %s\n", chipset ? chipset : "-");
+ if (!card[card_selected].driver)
+ card[card_selected].driver = "unknown";
+ printf("Driver: %s\n", card[card_selected].driver);
+
+ if (card[card_selected].ramdac != NULL)
+ printf("Ramdac: %s\n", card[card_selected].ramdac);
+ if (card[card_selected].dacspeed != NULL)
+ printf("DacSpeed: %s\n", card[card_selected].dacspeed);
+ if (card[card_selected].clockchip != NULL)
+ printf("Clockchip: %s\n", card[card_selected].clockchip);
+ if (card[card_selected].flags & NOCLOCKPROBE)
+ printf("Do NOT probe clocks or use any Clocks line.\n");
+ if (card[card_selected].flags & UNSUPPORTED)
+ printf("%s", cardunsupported_text);
+#if 0 /* Might be confusing. */
+ if (strlen(card[card_selected].lines) > 0)
+ printf("Device section text:\n%s",
+ card[card_selected].lines);
+#endif
+ printf("\n");
+ keypress();
+ }
+}
+
+
+/*
+ * Screen/video card configuration.
+ */
+
+static char *deviceintro_text =
+"Now you must give information about your video card. This will be used for\n"
+"the \"Device\" section of your video card in " CONFIGNAME ".\n"
+"\n";
+
+static char *videomemoryintro_text =
+"It is probably a good idea to use the same approximate amount as that detected\n"
+"by the server you intend to use. If you encounter problems that are due to the\n"
+"used server not supporting the amount memory you have, specify the maximum\n"
+"amount supported by the server.\n"
+"\n"
+"How much video memory do you have on your video card:\n"
+"\n";
+
+static char *carddescintro_text =
+"You must now enter a few identification/description strings, namely an\n"
+"identifier, a vendor name, and a model name. Just pressing enter will fill\n"
+"in default names (possibly from a card definition).\n"
+"\n";
+
+#if 0
+static char *devicesettingscomment_text =
+"Especially for accelerated drivers, Ramdac, Dacspeed and ClockChip settings\n"
+"or special options may be required in the Device section.\n"
+"\n";
+
+static char *ramdaccomment_text =
+"The RAMDAC setting only applies to some drivers. Some RAMDAC's are\n"
+"auto-detected by the server. The detection of a RAMDAC is forced by using a\n"
+"Ramdac \"identifier\" line in the Device section. The identifiers are shown\n"
+"at the right of the following table of RAMDAC types:\n"
+"\n";
+
+#define NU_RAMDACS 24
+
+static char *ramdac_name[NU_RAMDACS] = {
+ "AT&T 20C490 (S3 and AGX servers, ARK driver)",
+ "AT&T 20C498/21C498/22C498 (S3, autodetected)",
+ "AT&T 20C409/20C499 (S3, autodetected)",
+ "AT&T 20C505 (S3)",
+ "BrookTree BT481 (AGX)",
+ "BrookTree BT482 (AGX)",
+ "BrookTree BT485/9485 (S3)",
+ "Sierra SC15025 (S3, AGX)",
+#if XFREE86_VERSION >= 311
+ "S3 GenDAC (86C708) (autodetected)",
+ "S3 SDAC (86C716) (autodetected)",
+#else
+ "S3 GenDAC (86C708)",
+ "S3 SDAC (86C716)",
+#endif
+ "STG-1700 (S3, autodetected)",
+ "STG-1703 (S3, autodetected)",
+ "TI 3020 (S3, autodetected)",
+ "TI 3025 (S3, autodetected)",
+ "TI 3026 (S3, autodetected)",
+ "IBM RGB 514 (S3, autodetected)",
+ "IBM RGB 524 (S3, autodetected)",
+ "IBM RGB 525 (S3, autodetected)",
+ "IBM RGB 526 (S3)",
+ "IBM RGB 528 (S3, autodetected)",
+ "ICS5342 (S3, ARK)",
+ "ICS5341 (W32)",
+ "IC Works w30C516 ZoomDac (ARK)",
+ "Normal DAC"
+};
+
+static char *ramdac_id[NU_RAMDACS] = {
+ "att20c490", "att20c498", "att20c409", "att20c505", "bt481", "bt482",
+ "bt485", "sc15025", "s3gendac", "s3_sdac", "stg1700","stg1703",
+ "ti3020", "ti3025", "ti3026", "ibm_rgb514", "ibm_rgb524",
+ "ibm_rgb525", "ibm_rgb526", "ibm_rgb528", "ics5342", "ics5341",
+ "zoomdac", "normal"
+};
+
+static char *clockchipcomment_text =
+"A Clockchip line in the Device section forces the detection of a\n"
+"programmable clock device. With a clockchip enabled, any required\n"
+"clock can be programmed without requiring probing of clocks or a\n"
+"Clocks line. Most cards don't have a programmable clock chip.\n"
+"Choose from the following list:\n"
+"\n";
+
+#define NU_CLOCKCHIPS 12
+
+static char *clockchip_name[] = {
+ "Chrontel 8391",
+ "ICD2061A and compatibles (ICS9161A, DCS2824)",
+ "ICS2595",
+ "ICS5342 (similar to SDAC, but not completely compatible)",
+ "ICS5341",
+ "S3 GenDAC (86C708) and ICS5300 (autodetected)",
+ "S3 SDAC (86C716)",
+ "STG 1703 (autodetected)",
+ "Sierra SC11412",
+ "TI 3025 (autodetected)",
+ "TI 3026 (autodetected)",
+ "IBM RGB 51x/52x (autodetected)",
+};
+
+static char *clockchip_id[] = {
+ "ch8391", "icd2061a", "ics2595", "ics5342", "ics5341",
+ "s3gendac", "s3_sdac",
+ "stg1703", "sc11412", "ti3025", "ti3026", "ibm_rgb5xx",
+};
+
+static char *deviceclockscomment_text =
+"For most modern configurations, a Clocks line is neither required or\n"
+"desirable. However for some older hardware it can be useful since it\n"
+"prevents the slow and nasty sounding clock probing at server start-up.\n"
+"Probed clocks are displayed at server startup, along with other server\n"
+"and hardware configuration info. You can save this information in a file\n"
+"by running 'X -probeonly 2>output_file'. Be warned that clock probing is\n"
+"inherently imprecise; some clocks may be slightly too high (varies per run).\n"
+"\n";
+
+static char *deviceclocksquestion_text =
+"At this point I can run X -probeonly, and try to extract the clock information\n"
+"from the output. It is recommended that you do this yourself and if a set of\n"
+"clocks is shown then you add a clocks line (note that the list of clocks may\n"
+"be split over multiple Clocks lines) to your Device section afterwards. Be\n"
+"aware that a clocks line is not appropriate for most modern hardware that\n"
+"has programmable clocks.\n"
+"\n"
+"You must be root to be able to run X -probeonly now.\n"
+"\n";
+
+static char *probeonlywarning_text =
+"It is possible that the hardware detection routines in the server will somehow\n"
+"cause the system to crash and the screen to remain blank. If this is the\n"
+"case, do not choose this option the next time. The server may need a\n"
+"Ramdac, ClockChip or special option (e.g. \"nolinear\" for S3) to probe\n"
+"and start-up correctly.\n"
+"\n";
+#endif
+
+static char *modesorderintro_text =
+"For each depth, a list of modes (resolutions) is defined. The default\n"
+"resolution that the server will start-up with will be the first listed\n"
+"mode that can be supported by the monitor and card.\n"
+"Currently it is set to:\n"
+"\n";
+
+static char *modesorder_text2 =
+"Modes that cannot be supported due to monitor or clock constraints will\n"
+"be automatically skipped by the server.\n"
+"\n"
+" 1 Change the modes for 8-bit (256 colors)\n"
+" 2 Change the modes for 16-bit (32K/64K colors)\n"
+" 3 Change the modes for 24-bit (24-bit color)\n"
+" 4 The modes are OK, continue.\n"
+"\n";
+
+static char *modeslist_text =
+"Please type the digits corresponding to the modes that you want to select.\n"
+"For example, 432 selects \"1024x768\" \"800x600\" \"640x480\", with a\n"
+"default mode of 1024x768.\n"
+"\n";
+
+static char *virtual_text =
+"You can have a virtual screen (desktop), which is screen area that is larger\n"
+"than the physical screen and which is panned by moving the mouse to the edge\n"
+"of the screen. If you don't want virtual desktop at a certain resolution,\n"
+"you cannot have modes listed that are larger. Each color depth can have a\n"
+"differently-sized virtual screen\n"
+"\n";
+
+static int videomemory[] = {
+ 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144
+};
+
+/* Is this required? */
+#if XFREE86_VERSION >= 400
+#define NU_MODESTRINGS 13
+#else
+#if XFREE86_VERSION >= 330
+#define NU_MODESTRINGS 12
+#else
+#if XFREE86_VERSION >= 311
+#define NU_MODESTRINGS 8
+#else
+#define NU_MODESTRINGS 5
+#endif
+#endif
+#endif
+
+static char *modestring[NU_MODESTRINGS] = {
+ "\"640x400\"",
+ "\"640x480\"",
+ "\"800x600\"",
+ "\"1024x768\"",
+ "\"1280x1024\"",
+#if XFREE86_VERSION >= 311
+ "\"320x200\"",
+ "\"320x240\"",
+ "\"400x300\""
+#endif
+#if XFREE86_VERSION >= 330
+ ,"\"1152x864\"",
+ "\"1600x1200\"",
+ "\"1800x1400\"",
+ "\"512x384\""
+#endif
+#if XFREE86_VERSION >= 400
+ ,"\"1400x1050\""
+#endif
+};
+
+#ifdef __EMX__
+/* yet another instance of this code, sigh! */
+char *
+__XOS2RedirRoot(char *path, char sep)
+{
+ static char pn[300];
+ char *root;
+ int i,l;
+ if ((isalpha(path[0]) && path[1]==':') || path[0] != '/')
+ return path;
+
+ root = getenv("X11ROOT");
+ if (!root) root = "";
+ sprintf(pn,"%s%s",root,path);
+ if (sep=='\\') {
+ l = strlen(pn);
+ for (i=0; i<l; i++)
+ if (pn[i]=='/') pn[i]='\\';
+ }
+ return pn;
+}
+#endif
+
+/* (hv) to avoid the UNIXISM to try to open a dir to check for existance */
+static int exists_dir(char *name) {
+ struct stat sbuf;
+
+#ifdef __EMX__
+ name = __XOS2RedirRoot(name,'/');
+#endif
+ /* is it there ? */
+ if (stat(name,&sbuf) == -1)
+ return 0;
+
+ /* is there, but is it a dir? */
+ return S_ISDIR(sbuf.st_mode) ? 1 : 0;
+}
+
+static void
+screen_configuration(void) {
+ int i, c/*, np*/;
+ char s[80];
+
+ /*
+ * Configure the "Device" section for the video card.
+ */
+
+ printf("%s", deviceintro_text);
+
+ printf("%s", videomemoryintro_text);
+
+ for (i = 0; i < sizeof(videomemory) / sizeof(videomemory[0]); i++)
+ printf("%2d %dK\n", i + 1, videomemory[i]);
+ printf("%2d Other\n\n", i + 1);
+
+ printf("Enter your choice: ");
+ getstring(s);
+ printf("\n");
+
+ c = atoi(s) - 1;
+ if (c >= 0 && c < sizeof(videomemory) / sizeof(videomemory[0]))
+ config_videomemory = videomemory[c];
+ else {
+ printf("Amount of video memory in Kbytes: ");
+ getstring(s);
+ config_videomemory = atoi(s);
+ printf("\n");
+ }
+
+ printf("%s", carddescintro_text);
+ if (card_selected != -1)
+ printf("Your card definition is %s.\n\n",
+ card[card_selected].name);
+ printf("The strings are free-form, spaces are allowed.\n");
+ printf("Enter an identifier for your video card definition: ");
+ getstring(s);
+ if (strlen(s) == 0)
+ if (card_selected != -1)
+ config_deviceidentifier = card[card_selected].name;
+ else
+ config_deviceidentifier = "My Video Card";
+ else {
+ config_deviceidentifier = Malloc(strlen(s) + 1);
+ strcpy(config_deviceidentifier, s);
+ }
+ printf("\n");
+
+ emptylines();
+
+ /*
+ * Initialize screen mode variables for svga and accel
+ * to default values.
+ * XXXX Doesn't leave room for off-screen caching in 16/32bpp modes
+ * for the accelerated servers in some situations.
+ */
+ config_modesline8bpp =
+ config_modesline16bpp =
+ config_modesline24bpp = "\"640x480\"";
+ config_virtualx8bpp = config_virtualx16bpp = config_virtualx24bpp =
+ config_virtualy8bpp = config_virtualy16bpp = config_virtualy24bpp = 0;
+ if (config_videomemory >= 4096) {
+ config_virtualx8bpp = 1600;
+ config_virtualy8bpp = 1280;
+ if (card_selected != -1 && !(card[card_selected].flags & UNSUPPORTED)) {
+ /*
+ * Allow room for font/pixmap cache for accel
+ * servers.
+ */
+ config_virtualx16bpp = 1280;
+ config_virtualy16bpp = 1024;
+ }
+ else {
+ config_virtualx16bpp = 1600;
+ config_virtualy16bpp = 1280;
+ }
+ if (card_selected != -1 && !(card[card_selected].flags & UNSUPPORTED)) {
+ config_virtualx24bpp = 1152;
+ config_virtualy24bpp = 900;
+ }
+ else {
+ config_virtualx24bpp = 1280;
+ config_virtualy24bpp = 1024;
+ }
+ /* Add 1600x1280 */
+ config_modesline8bpp = "\"1280x1024\" \"1024x768\" \"800x600\" \"640x480\"";
+ config_modesline16bpp = "\"1280x1024\" \"1024x768\" \"800x600\" \"640x480\"";
+ config_modesline24bpp = "\"1280x1024\" \"1024x768\" \"800x600\" \"640x480\"";
+
+ }
+ else
+ if (config_videomemory >= 2048) {
+ if (card_selected != -1 && !(card[card_selected].flags & UNSUPPORTED)) {
+ /*
+ * Allow room for font/pixmap cache for accel
+ * servers.
+ * Also the mach32 is has a limited width.
+ */
+ config_virtualx8bpp = 1280;
+ config_virtualy8bpp = 1024;
+ }
+ else {
+ config_virtualx8bpp = 1600;
+ config_virtualy8bpp = 1200;
+ }
+ if (card_selected != -1 && !(card[card_selected].flags & UNSUPPORTED)) {
+ config_virtualx16bpp = 1024;
+ config_virtualy16bpp = 768;
+ }
+ else {
+ config_virtualx16bpp = 1152;
+ config_virtualy16bpp = 900;
+ }
+ config_virtualx24bpp = 800;
+ config_virtualy24bpp = 600;
+ if (config_videomemory >= 2048 + 256) {
+ config_virtualx24bpp = 1024;
+ config_virtualy24bpp = 768;
+ }
+ config_modesline8bpp = "\"1280x1024\" \"1024x768\" \"800x600\" \"640x480\"";
+ config_modesline16bpp = "\"1024x768\" \"800x600\" \"640x480\"";
+ if (config_videomemory >= 2048 + 256)
+ config_modesline24bpp = "\"1024x768\" \"800x600\" \"640x480\"";
+ else
+ config_modesline24bpp = "\"800x600\" \"640x480\"";
+ }
+ else
+ if (config_videomemory >= 1024) {
+ if (card_selected != -1 && !(card[card_selected].flags & UNSUPPORTED)) {
+ /*
+ * Allow room for font/pixmap cache for accel
+ * servers.
+ */
+ config_virtualx8bpp = 1024;
+ config_virtualy8bpp = 768;
+ }
+ else {
+ config_virtualx8bpp = 1152;
+ config_virtualy8bpp = 900;
+ }
+ config_virtualx16bpp = 800; /* Forget about cache space; */
+ config_virtualy16bpp = 600; /* it's small enough as it is. */
+ config_virtualx24bpp = 640;
+ config_virtualy24bpp = 480;
+ config_modesline8bpp = "\"1024x768\" \"800x600\" \"640x480\"";
+ config_modesline16bpp = "\"800x600\" \"640x480\"";
+ config_modesline24bpp = "\"640x480\"";
+ }
+ else
+ if (config_videomemory >= 512) {
+ config_virtualx8bpp = 800;
+ config_virtualy8bpp = 600;
+ config_modesline8bpp = "\"800x600\" \"640x480\"";
+ config_modesline16bpp = "\"640x400\"";
+ }
+ else
+ if (config_videomemory >= 256) {
+ config_modesline8bpp = "\"640x400\"";
+ config_virtualx8bpp = 640;
+ config_virtualy8bpp = 400;
+ }
+ else {
+ printf("Fatal error: Invalid amount of video memory.\n");
+ exit(-1);
+ }
+
+#if 0
+ /*
+ * Handle the Ramdac/Clockchip setting.
+ */
+
+ printf("%s", devicesettingscomment_text);
+
+ if (card_selected == -1 || (card[card_selected].flags & UNSUPPORTED))
+ goto skipramdacselection;
+
+ printf("%s", ramdaccomment_text);
+
+ /* meanwhile there are so many RAMDACs that they do no longer fit on
+ * on page
+ */
+ for (np=12, i=0 ;;) {
+ int j;
+ for (j = i; j < i + np && j < NU_RAMDACS; j++)
+ printf("%3d %-60s%s\n", j+1,
+ ramdac_name[j],
+ ramdac_id[j]);
+
+ printf("\n");
+ if (card_selected != -1)
+ if (card[card_selected].ramdac != NULL)
+ printf("The card definition has Ramdac \"%s\".\n\n",
+ card[card_selected].ramdac);
+ printf("\n");
+ printf("Enter a number to choose the corresponding RAMDAC.\n");
+ printf("Press enter for the next page, q to quit without selection of a RAMDAC.\n");
+ printf("\n");
+ getstring(s);
+
+ config_ramdac = NULL;
+ if (s[0] == 'q')
+ break;
+
+ if (strlen(s) > 0) {
+ c = atoi(s)-1;
+ if (c >= 0 && c < NU_RAMDACS) {
+ config_ramdac = ramdac_id[atoi(s)-1];
+ break;
+ }
+ }
+
+ i += np;
+ if (np==12) np = 18; /* account intro lines only displayed 1st time */
+ if (i >= NU_RAMDACS)
+ i = 0;
+ emptylines();
+ }
+
+skipramdacselection:
+ emptylines();
+ printf("%s", clockchipcomment_text);
+
+ for (i = 0; i < NU_CLOCKCHIPS; i++)
+ printf("%2d %-60s%s\n",
+ i + 1, clockchip_name[i], clockchip_id[i]);
+
+ printf("\n");
+
+ if (card_selected != -1)
+ if (card[card_selected].clockchip != NULL)
+ printf("The card definition has Clockchip \"%s\"\n\n",
+ card[card_selected].clockchip);
+
+ printf("Just press enter if you don't want a Clockchip setting.\n");
+ printf("What Clockchip setting do you want (1-%d)? ", NU_CLOCKCHIPS);
+
+ getstring(s);
+ config_clockchip = NULL;
+ if (strlen(s) > 0)
+ config_clockchip = clockchip_id[atoi(s) - 1];
+
+ emptylines();
+
+ /*
+ * Optionally run X -probeonly to figure out the clocks.
+ */
+
+ config_numberofclockslines = 0;
+
+ printf("%s", deviceclockscomment_text);
+
+ printf("%s", deviceclocksquestion_text);
+#endif
+
+#if 0
+ /*
+ * XXX Change this to check for a CLOCKPROBE flag rather than an
+ * NOCLOCKPROBE.
+ */
+ if (card_selected != -1)
+ if (card[card_selected].flags & NOCLOCKPROBE)
+ printf("The card definition says to NOT probe clocks.\n");
+
+ if (config_clockchip != NULL) {
+ printf("Because you have enabled a Clockchip line, there's no need for clock\n"
+ "probing.\n");
+ keypress();
+ goto skipclockprobing;
+ }
+
+ printf("Do you want me to run 'X -probeonly' now? ");
+ getstring(s);
+ printf("\n");
+ if (answerisyes(s)) {
+ /*
+ * Write temporary XF86Config and run X -probeonly.
+ * Only allow when root.
+ */
+ FILE *f;
+ char *buf;
+ char syscmdline[2*256+100]; /* enough */
+ char *fname = NULL;
+ char *d2name = NULL;
+ char *d3name = NULL;
+
+ if (getuid() != 0) {
+ printf("Sorry, you must be root to do this.\n\n");
+ goto endofprobeonly;
+ }
+ printf("%s", probeonlywarning_text);
+ keypress();
+ fname = Malloc(strlen(temp_dir) +
+ strlen(TEMPORARY_XF86CONFIG_FILENAME) + 1);
+ sprintf(fname, "%s%s", temp_dir,
+ TEMPORARY_XF86CONFIG_FILENAME);
+ d2name = Malloc(strlen(temp_dir) + strlen(DUMBCONFIG2) + 1);
+ sprintf(d2name, "%s%s", temp_dir, DUMBCONFIG2);
+ d3name = Malloc(strlen(temp_dir) + strlen(DUMBCONFIG3) + 1);
+ sprintf(d3name, "%s%s", temp_dir, DUMBCONFIG3);
+ printf("Running X -probeonly -pn -xf86config %s.\n", fname);
+ write_XF86Config(fname);
+#ifndef __EMX__
+ sync();
+#endif
+ /* compose a line with the real path */
+#ifndef __EMX__
+ sprintf(syscmdline, "X -probeonly -pn -xf86config %s 2> %s",
+ fname, d2name);
+#else
+ /* OS/2 does not have symlinks, so "X" does not exist,
+ * call the real X server
+ */
+ sprintf(syscmdline,"%s/"__XSERVERNAME__" -probeonly -pn -xf86config "
+ TEMPORARY_XF86CONFIG_FILENAME " 2>" DUMBCONFIG2,
+ __XOS2RedirRoot("/"__XSERVERNAME__"/bin",'\\'),
+ card[card_selected].server);
+#endif
+
+ if (system(syscmdline)) {
+ printf("X -probeonly call failed.\n");
+ printf("No Clocks line inserted.\n");
+ goto clocksprobefailed;
+ }
+ /* Look for 'clocks:' (case sensitive). */
+ sprintf(syscmdline, "grep clocks\\: %s > %s", d2name, d3name);
+ if (system(syscmdline)) {
+ printf("grep failed.\n");
+ printf("Cannot find clocks in server output.\n");
+ goto clocksprobefailed;
+ }
+ f = fopen(d3name, "r");
+ buf = Malloc(8192);
+ /* Parse lines. */
+ while (fgets(buf, 8192, f) != NULL) {
+ char *clks;
+ clks = strstr(buf, "clocks: ") + 8;
+ if (clks >= buf + 3 && strcmp(clks - 11, "num") == 0)
+ /* Reject lines with 'numclocks:'. */
+ continue;
+ if (clks >= buf + 8 && strcpy(clks - 14, "pixel ") == 0)
+ /* Reject lines with 'pixel clocks:'. */
+ continue;
+ clks[strlen(clks) - 1] = '\0'; /* Remove '\n'. */
+ config_clocksline[config_numberofclockslines] =
+ Malloc(strlen(clks) + 1);
+ strcpy(config_clocksline[config_numberofclockslines],
+ clks);
+ printf("Clocks %s\n", clks);
+ config_numberofclockslines++;
+ }
+ fclose(f);
+clocksprobefailed:
+ unlink(d3name);
+ unlink(d2name);
+ unlink(fname);
+ printf("\n");
+
+endofprobeonly:
+ keypress();
+ }
+skipclockprobing:
+#endif
+
+ /*
+ * For vga driver, no further configuration is required.
+ */
+ if (card_selected == -1 || (card[card_selected].flags & UNSUPPORTED))
+ return;
+
+ /*
+ * Configure the modes order.
+ */
+ config_virtual = 0;
+ for (;;) {
+ char modes[128];
+
+ emptylines();
+
+ printf("%s", modesorderintro_text);
+ printf("%s for 8-bit\n", config_modesline8bpp);
+ printf("%s for 16-bit\n", config_modesline16bpp);
+ printf("%s for 24-bit\n", config_modesline24bpp);
+ printf("\n");
+ printf("%s", modesorder_text2);
+
+ printf("Enter your choice: ");
+ getstring(s);
+ printf("\n");
+
+ c = atoi(s) - 1;
+ if (c < 0 || c >= 3)
+ break;
+
+ printf("Select modes from the following list:\n\n");
+
+ for (i = 0; i < NU_MODESTRINGS; i++)
+ printf(" %c %s\n", i < 9 ? '1' + i :
+ 'a' + i - 9,
+ modestring[i]);
+ printf("\n");
+
+ printf("%s", modeslist_text);
+
+ printf("Which modes? ");
+ getstring(s);
+ printf("\n");
+
+ modes[0] = '\0';
+ for (i = 0; i < strlen(s); i++) {
+ if ( NU_MODESTRINGS > 9 ) {
+ if ((s[i] < '1' || s[i] > '9') &&
+ (s[i] < 'a' || s[i] > 'a' + NU_MODESTRINGS - 10)) {
+ printf("Invalid mode skipped.\n");
+ continue;
+ }
+ }
+ else {
+ if (s[i] < '1' || s[i] > '0' + NU_MODESTRINGS) {
+ printf("Invalid mode skipped.\n");
+ continue;
+ }
+ }
+ if (i > 0)
+ strcat(modes, " ");
+ strcat(modes, modestring[s[i] <= '9' ? s[i] - '1' :
+ s[i] - 'a' + 9]);
+ }
+ switch (c) {
+ case 0 :
+ config_modesline8bpp = Malloc(strlen(modes) + 1);
+ strcpy(config_modesline8bpp, modes);
+ break;
+ case 1 :
+ config_modesline16bpp = Malloc(strlen(modes) + 1);
+ strcpy(config_modesline16bpp, modes);
+ break;
+ case 2 :
+ config_modesline24bpp = Malloc(strlen(modes) + 1);
+ strcpy(config_modesline24bpp, modes);
+ break;
+ }
+
+ printf("%s", virtual_text);
+
+ printf("Please answer the following question with either 'y' or 'n'.\n");
+ printf("Do you want a virtual screen that is larger than the physical screen?");
+ getstring(s);
+ if (answerisyes(s))
+ config_virtual = 1;
+ }
+}
+
+static char *defaultdepthtext =
+"Please specify which color depth you want to use by default:\n"
+"\n";
+
+static struct depth_str {
+ char *name;
+ char *desc;
+} depth_list[] = {
+ { "1", "1 bit (monochrome)" },
+ { "4", "4 bits (16 colors)" },
+ { "8", "8 bits (256 colors)" },
+ { "16", "16 bits (65536 colors)" },
+ { "24", "24 bits (16 million colors)" }
+};
+
+static int ndepths = sizeof(depth_list)/sizeof(struct depth_str);
+
+static void
+depth_configuration(void)
+{
+ int i;
+ char s[80];
+ int depth;
+
+ printf(defaultdepthtext);
+ for (i=0; i<ndepths; i++) {
+ printf("%3d %-50s\n",i+1,depth_list[i].desc);
+ }
+
+ printf("\nEnter a number to choose the default depth.\n\n");
+ getstring(s);
+ if (strlen(s) == 0)
+ depth = 0;
+ else {
+ i = atoi(s)-1;
+ depth = (i < 0 || i > ndepths) ? 0 : i;
+ }
+ config_depth = depth_list[depth].name;
+}
+
+/*
+ * Create the XF86Config file.
+ */
+
+static char *XF86Config_firstchunk_text =
+"# File generated by xf86config.\n"
+"\n"
+"#\n"
+"# Copyright (c) 2004, by the "XVENDORNAMESHORT"\n"
+"#\n"
+"# Permission is hereby granted, free of charge, to any person obtaining a\n"
+"# copy of this software and associated documentation files (the \"Software\"),\n"
+"# to deal in the Software without restriction, including without limitation\n"
+"# the rights to use, copy, modify, merge, publish, distribute, sublicense,\n"
+"# and/or sell copies of the Software, and to permit persons to whom the\n"
+"# Software is furnished to do so, subject to the following conditions:\n"
+"# \n"
+"# The above copyright notice and this permission notice shall be included in\n"
+"# all copies or substantial portions of the Software.\n"
+"# \n"
+"# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n"
+"# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n"
+"# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n"
+"# THE XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n"
+"# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF\n"
+"# OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n"
+"# SOFTWARE.\n"
+"# \n"
+"# Except as contained in this notice, the name of "XVENDORNAMESHORT" shall\n"
+"# not be used in advertising or otherwise to promote the sale, use or other\n"
+"# dealings in this Software without prior written authorization from the\n"
+"# "XVENDORNAMESHORT".\n"
+"#\n"
+"\n"
+"# **********************************************************************\n"
+"# Refer to the XF86Config(4/5) man page for details about the format of \n"
+"# this file.\n"
+"# **********************************************************************\n"
+"\n"
+"# **********************************************************************\n"
+"# Module section -- this section is used to specify\n"
+"# which dynamically loadable modules to load.\n"
+"# **********************************************************************\n"
+"#\n"
+"Section \"Module\"\n"
+"\n"
+"# This loads the DBE extension module.\n"
+"\n"
+" Load \"dbe\" # Double buffer extension\n"
+"\n"
+"# This loads the miscellaneous extensions module, and disables\n"
+"# initialisation of the XFree86-DGA extension within that module.\n"
+" SubSection \"extmod\"\n"
+" Option \"omit xfree86-dga\" # don't initialise the DGA extension\n"
+" EndSubSection\n"
+"\n"
+"# This loads the Type1 and FreeType font modules\n"
+" Load \"type1\"\n"
+" Load \"speedo\"\n"
+" Load \"freetype\"\n"
+"# Load \"xtt\"\n"
+"\n"
+"# This loads the GLX module\n"
+"# Load \"glx\"\n"
+"# This loads the DRI module\n"
+"# Load \"dri\"\n"
+"\n"
+"EndSection\n"
+"\n"
+"# **********************************************************************\n"
+"# Files section. This allows default font and rgb paths to be set\n"
+"# **********************************************************************\n"
+"\n"
+"Section \"Files\"\n"
+"\n"
+"# The location of the RGB database. Note, this is the name of the\n"
+"# file minus the extension (like \".txt\" or \".db\"). There is normally\n"
+"# no need to change the default.\n"
+"\n"
+" RgbPath \"" TREEROOTLX "/rgb\"\n"
+"\n"
+"# Multiple FontPath entries are allowed (which are concatenated together),\n"
+"# as well as specifying multiple comma-separated entries in one FontPath\n"
+"# command (or a combination of both methods)\n"
+"# \n"
+"# If you don't have a floating point coprocessor and emacs, Mosaic or other\n"
+"# programs take long to start up, try moving the Type1 and Speedo directory\n"
+"# to the end of this list (or comment them out).\n"
+"# \n"
+"\n";
+
+static char *XF86Config_fontpaths[] =
+{
+/* " FontPath \"" TREEROOTLX "/fonts/75dpi/\"\n"*/
+ "/fonts/local/",
+ "/fonts/misc/",
+ "/fonts/75dpi/:unscaled",
+ "/fonts/100dpi/:unscaled",
+ "/fonts/Speedo/",
+ "/fonts/Type1/",
+ "/fonts/TrueType/",
+ "/fonts/freefont/",
+ "/fonts/75dpi/",
+ "/fonts/100dpi/",
+ 0 /* end of fontpaths */
+};
+
+static char *XF86Config_fontpathchunk_text =
+
+"\n"
+"# The module search path. The default path is shown here.\n"
+"\n"
+"# ModulePath \"" MODULEPATH "\"\n"
+"\n"
+"EndSection\n"
+"\n"
+"# **********************************************************************\n"
+"# Server flags section.\n"
+"# **********************************************************************\n"
+"\n"
+"Section \"ServerFlags\"\n"
+"\n"
+"# Uncomment this to cause a core dump at the spot where a signal is \n"
+"# received. This may leave the console in an unusable state, but may\n"
+"# provide a better stack trace in the core dump to aid in debugging\n"
+"\n"
+"# Option \"NoTrapSignals\"\n"
+"\n"
+"# Uncomment this to disable the <Crtl><Alt><Fn> VT switch sequence\n"
+"# (where n is 1 through 12). This allows clients to receive these key\n"
+"# events.\n"
+"\n"
+"# Option \"DontVTSwitch\"\n"
+"\n"
+"# Uncomment this to disable the <Crtl><Alt><BS> server abort sequence\n"
+"# This allows clients to receive this key event.\n"
+"\n"
+"# Option \"DontZap\"\n"
+"\n"
+"# Uncomment this to disable the <Crtl><Alt><KP_+>/<KP_-> mode switching\n"
+"# sequences. This allows clients to receive these key events.\n"
+"\n"
+"# Option \"Dont Zoom\"\n"
+"\n"
+"# Uncomment this to disable tuning with the xvidtune client. With\n"
+"# it the client can still run and fetch card and monitor attributes,\n"
+"# but it will not be allowed to change them. If it tries it will\n"
+"# receive a protocol error.\n"
+"\n"
+"# Option \"DisableVidModeExtension\"\n"
+"\n"
+"# Uncomment this to enable the use of a non-local xvidtune client. \n"
+"\n"
+"# Option \"AllowNonLocalXvidtune\"\n"
+"\n"
+"# Uncomment this to disable dynamically modifying the input device\n"
+"# (mouse and keyboard) settings. \n"
+"\n"
+"# Option \"DisableModInDev\"\n"
+"\n"
+"# Uncomment this to enable the use of a non-local client to\n"
+"# change the keyboard or mouse settings (currently only xset).\n"
+"\n"
+"# Option \"AllowNonLocalModInDev\"\n"
+"\n"
+"EndSection\n"
+"\n"
+"# **********************************************************************\n"
+"# Input devices\n"
+"# **********************************************************************\n"
+"\n"
+"# **********************************************************************\n"
+"# Core keyboard's InputDevice section\n"
+"# **********************************************************************\n"
+"\n"
+"Section \"InputDevice\"\n"
+"\n"
+" Identifier \"Keyboard1\"\n"
+" Driver \"Keyboard\"\n"
+"\n"
+"# For most OSs the protocol can be omitted (it defaults to \"Standard\").\n"
+"# When using XQUEUE (only for SVR3 and SVR4, but not Solaris),\n"
+"# uncomment the following line.\n"
+"\n"
+"# Option \"Protocol\" \"Xqueue\"\n"
+"\n"
+" Option \"AutoRepeat\" \"500 30\"\n"
+"\n"
+"# Specify which keyboard LEDs can be user-controlled (eg, with xset(1))\n"
+"# Option \"Xleds\" \"1 2 3\"\n"
+"\n";
+
+static char *keyboardchunk2_text =
+"\n";
+
+static char *keyboardchunk3_text =
+"# To customise the XKB settings to suit your keyboard, modify the\n"
+"# lines below (which are the defaults). For example, for a non-U.S.\n"
+"# keyboard, you will probably want to use:\n"
+"# Option \"XkbModel\" \"pc102\"\n"
+"# If you have a US Microsoft Natural keyboard, you can use:\n"
+"# Option \"XkbModel\" \"microsoft\"\n"
+"#\n"
+"# Then to change the language, change the Layout setting.\n"
+"# For example, a german layout can be obtained with:\n"
+"# Option \"XkbLayout\" \"de\"\n"
+"# or:\n"
+"# Option \"XkbLayout\" \"de\"\n"
+"# Option \"XkbVariant\" \"nodeadkeys\"\n"
+"#\n"
+"# If you'd like to switch the positions of your capslock and\n"
+"# control keys, use:\n"
+"# Option \"XkbOptions\" \"ctrl:swapcaps\"\n"
+"\n"
+"# These are the default XKB settings for "XVENDORNAMESHORT"\n"
+"# Option \"XkbRules\" \"__XKBDEFRULES__\"\n"
+"# Option \"XkbModel\" \"pc101\"\n"
+"# Option \"XkbLayout\" \"us\"\n"
+"# Option \"XkbVariant\" \"\"\n"
+"# Option \"XkbOptions\" \"\"\n"
+"\n";
+
+static char *keyboardlastchunk_text =
+"\n"
+"EndSection\n"
+"\n"
+"\n";
+
+static char *pointersection_text1 =
+"# **********************************************************************\n"
+"# Core Pointer's InputDevice section\n"
+"# **********************************************************************\n"
+"\n"
+"Section \"InputDevice\"\n"
+"\n"
+"# Identifier and driver\n"
+"\n"
+" Identifier \"Mouse1\"\n"
+" Driver \"mouse\"\n"
+;
+
+static char *pointersection_text2 =
+"\n"
+"# Mouse-speed setting for PS/2 mouse.\n"
+"\n"
+"# Option \"Resolution\" \"256\"\n"
+"\n"
+"# When using XQUEUE, comment out the above two lines, and uncomment\n"
+"# the following line.\n"
+"\n"
+"# Option \"Protocol\" \"Xqueue\"\n"
+"\n"
+"# Baudrate and SampleRate are only for some Logitech mice. In\n"
+"# almost every case these lines should be omitted.\n"
+"\n"
+"# Option \"BaudRate\" \"9600\"\n"
+"# Option \"SampleRate\" \"150\"\n"
+"\n"
+"# Emulate3Buttons is an option for 2-button Microsoft mice\n"
+"# Emulate3Timeout is the timeout in milliseconds (default is 50ms)\n"
+"\n";
+
+static char *xinputsection_text =
+"# **********************************************************************\n"
+"# Other input device sections \n"
+"# this is optional and is required only if you\n"
+"# are using extended input devices. This is for example only. Refer\n"
+"# to the XF86Config man page for a description of the options.\n"
+"# **********************************************************************\n"
+"#\n"
+"# Section \"InputDevice\" \n"
+"# Identifier \"Mouse2\"\n"
+"# Driver \"mouse\"\n"
+"# Option \"Protocol\" \"MouseMan\"\n"
+"# Option \"Device\" \"/dev/mouse2\"\n"
+"# EndSection\n"
+"#\n"
+"# Section \"InputDevice\"\n"
+"# Identifier \"spaceball\"\n"
+"# Driver \"magellan\"\n"
+"# Option \"Device\" \"/dev/cua0\"\n"
+"# EndSection\n"
+"#\n"
+"# Section \"InputDevice\"\n"
+"# Identifier \"spaceball2\"\n"
+"# Driver \"spaceorb\"\n"
+"# Option \"Device\" \"/dev/cua0\"\n"
+"# EndSection\n"
+"#\n"
+"# Section \"InputDevice\"\n"
+"# Identifier \"touchscreen0\"\n"
+"# Driver \"microtouch\"\n"
+"# Option \"Device\" \"/dev/ttyS0\"\n"
+"# Option \"MinX\" \"1412\"\n"
+"# Option \"MaxX\" \"15184\"\n"
+"# Option \"MinY\" \"15372\"\n"
+"# Option \"MaxY\" \"1230\"\n"
+"# Option \"ScreenNumber\" \"0\"\n"
+"# Option \"ReportingMode\" \"Scaled\"\n"
+"# Option \"ButtonNumber\" \"1\"\n"
+"# Option \"SendCoreEvents\"\n"
+"# EndSection\n"
+"#\n"
+"# Section \"InputDevice\"\n"
+"# Identifier \"touchscreen1\"\n"
+"# Driver \"elo2300\"\n"
+"# Option \"Device\" \"/dev/ttyS0\"\n"
+"# Option \"MinX\" \"231\"\n"
+"# Option \"MaxX\" \"3868\"\n"
+"# Option \"MinY\" \"3858\"\n"
+"# Option \"MaxY\" \"272\"\n"
+"# Option \"ScreenNumber\" \"0\"\n"
+"# Option \"ReportingMode\" \"Scaled\"\n"
+"# Option \"ButtonThreshold\" \"17\"\n"
+"# Option \"ButtonNumber\" \"1\"\n"
+"# Option \"SendCoreEvents\"\n"
+"# EndSection\n"
+"\n";
+
+static char *monitorsection_text1 =
+"# **********************************************************************\n"
+"# Monitor section\n"
+"# **********************************************************************\n"
+"\n"
+"# Any number of monitor sections may be present\n"
+"\n"
+"Section \"Monitor\"\n"
+"\n";
+
+static char *monitorsection_text2 =
+"# HorizSync is in kHz unless units are specified.\n"
+"# HorizSync may be a comma separated list of discrete values, or a\n"
+"# comma separated list of ranges of values.\n"
+"# NOTE: THE VALUES HERE ARE EXAMPLES ONLY. REFER TO YOUR MONITOR\'S\n"
+"# USER MANUAL FOR THE CORRECT NUMBERS.\n"
+"\n";
+
+static char *monitorsection_text3 =
+"# HorizSync 30-64 # multisync\n"
+"# HorizSync 31.5, 35.2 # multiple fixed sync frequencies\n"
+"# HorizSync 15-25, 30-50 # multiple ranges of sync frequencies\n"
+"\n"
+"# VertRefresh is in Hz unless units are specified.\n"
+"# VertRefresh may be a comma separated list of discrete values, or a\n"
+"# comma separated list of ranges of values.\n"
+"# NOTE: THE VALUES HERE ARE EXAMPLES ONLY. REFER TO YOUR MONITOR\'S\n"
+"# USER MANUAL FOR THE CORRECT NUMBERS.\n"
+"\n";
+
+#if 0
+static char *monitorsection_text4 =
+"# Modes can be specified in two formats. A compact one-line format, or\n"
+"# a multi-line format.\n"
+"\n"
+"# These two are equivalent\n"
+"\n"
+"# ModeLine \"1024x768i\" 45 1024 1048 1208 1264 768 776 784 817 Interlace\n"
+"\n"
+"# Mode \"1024x768i\"\n"
+"# DotClock 45\n"
+"# HTimings 1024 1048 1208 1264\n"
+"# VTimings 768 776 784 817\n"
+"# Flags \"Interlace\"\n"
+"# EndMode\n"
+"\n";
+
+static char *modelines_text =
+"# This is a set of standard mode timings. Modes that are out of monitor spec\n"
+"# are automatically deleted by the server (provided the HorizSync and\n"
+"# VertRefresh lines are correct), so there's no immediate need to\n"
+"# delete mode timings (unless particular mode timings don't work on your\n"
+"# monitor). With these modes, the best standard mode that your monitor\n"
+"# and video card can support for a given resolution is automatically\n"
+"# used.\n"
+"\n"
+"# 640x400 @ 70 Hz, 31.5 kHz hsync\n"
+"Modeline \"640x400\" 25.175 640 664 760 800 400 409 411 450\n"
+"# 640x480 @ 60 Hz, 31.5 kHz hsync\n"
+"Modeline \"640x480\" 25.175 640 664 760 800 480 491 493 525\n"
+"# 800x600 @ 56 Hz, 35.15 kHz hsync\n"
+"ModeLine \"800x600\" 36 800 824 896 1024 600 601 603 625\n"
+"# 1024x768 @ 87 Hz interlaced, 35.5 kHz hsync\n"
+"Modeline \"1024x768\" 44.9 1024 1048 1208 1264 768 776 784 817 Interlace\n"
+"\n"
+"# 640x400 @ 85 Hz, 37.86 kHz hsync\n"
+"Modeline \"640x400\" 31.5 640 672 736 832 400 401 404 445 -HSync +VSync\n"
+"# 640x480 @ 72 Hz, 36.5 kHz hsync\n"
+"Modeline \"640x480\" 31.5 640 680 720 864 480 488 491 521\n"
+"# 640x480 @ 75 Hz, 37.50 kHz hsync\n"
+"ModeLine \"640x480\" 31.5 640 656 720 840 480 481 484 500 -HSync -VSync\n"
+"# 800x600 @ 60 Hz, 37.8 kHz hsync\n"
+"Modeline \"800x600\" 40 800 840 968 1056 600 601 605 628 +hsync +vsync\n"
+"\n"
+"# 640x480 @ 85 Hz, 43.27 kHz hsync\n"
+"Modeline \"640x480\" 36 640 696 752 832 480 481 484 509 -HSync -VSync\n"
+"# 1152x864 @ 89 Hz interlaced, 44 kHz hsync\n"
+"ModeLine \"1152x864\" 65 1152 1168 1384 1480 864 865 875 985 Interlace\n"
+"\n"
+"# 800x600 @ 72 Hz, 48.0 kHz hsync\n"
+"Modeline \"800x600\" 50 800 856 976 1040 600 637 643 666 +hsync +vsync\n"
+"# 1024x768 @ 60 Hz, 48.4 kHz hsync\n"
+"Modeline \"1024x768\" 65 1024 1032 1176 1344 768 771 777 806 -hsync -vsync\n"
+"\n"
+"# 640x480 @ 100 Hz, 53.01 kHz hsync\n"
+"Modeline \"640x480\" 45.8 640 672 768 864 480 488 494 530 -HSync -VSync\n"
+"# 1152x864 @ 60 Hz, 53.5 kHz hsync\n"
+"Modeline \"1152x864\" 89.9 1152 1216 1472 1680 864 868 876 892 -HSync -VSync\n"
+"# 800x600 @ 85 Hz, 55.84 kHz hsync\n"
+"Modeline \"800x600\" 60.75 800 864 928 1088 600 616 621 657 -HSync -VSync\n"
+"\n"
+"# 1024x768 @ 70 Hz, 56.5 kHz hsync\n"
+"Modeline \"1024x768\" 75 1024 1048 1184 1328 768 771 777 806 -hsync -vsync\n"
+"# 1280x1024 @ 87 Hz interlaced, 51 kHz hsync\n"
+"Modeline \"1280x1024\" 80 1280 1296 1512 1568 1024 1025 1037 1165 Interlace\n"
+"\n"
+"# 800x600 @ 100 Hz, 64.02 kHz hsync\n"
+"Modeline \"800x600\" 69.65 800 864 928 1088 600 604 610 640 -HSync -VSync\n"
+"# 1024x768 @ 76 Hz, 62.5 kHz hsync\n"
+"Modeline \"1024x768\" 85 1024 1032 1152 1360 768 784 787 823\n"
+"# 1152x864 @ 70 Hz, 62.4 kHz hsync\n"
+"Modeline \"1152x864\" 92 1152 1208 1368 1474 864 865 875 895\n"
+"# 1280x1024 @ 61 Hz, 64.2 kHz hsync\n"
+"Modeline \"1280x1024\" 110 1280 1328 1512 1712 1024 1025 1028 1054\n"
+"\n"
+"# 1024x768 @ 85 Hz, 70.24 kHz hsync\n"
+"Modeline \"1024x768\" 98.9 1024 1056 1216 1408 768 782 788 822 -HSync -VSync\n"
+"# 1152x864 @ 78 Hz, 70.8 kHz hsync\n"
+"Modeline \"1152x864\" 110 1152 1240 1324 1552 864 864 876 908\n"
+"\n"
+"# 1280x1024 @ 70 Hz, 74.59 kHz hsync\n"
+"Modeline \"1280x1024\" 126.5 1280 1312 1472 1696 1024 1032 1040 1068 -HSync -VSync\n"
+"# 1600x1200 @ 60Hz, 75.00 kHz hsync\n"
+"Modeline \"1600x1200\" 162 1600 1664 1856 2160 1200 1201 1204 1250 +HSync +VSync\n"
+"# 1152x864 @ 84 Hz, 76.0 kHz hsync\n"
+"Modeline \"1152x864\" 135 1152 1464 1592 1776 864 864 876 908\n"
+"\n"
+"# 1280x1024 @ 74 Hz, 78.85 kHz hsync\n"
+"Modeline \"1280x1024\" 135 1280 1312 1456 1712 1024 1027 1030 1064\n"
+"\n"
+"# 1024x768 @ 100Hz, 80.21 kHz hsync\n"
+"Modeline \"1024x768\" 115.5 1024 1056 1248 1440 768 771 781 802 -HSync -VSync\n"
+"# 1280x1024 @ 76 Hz, 81.13 kHz hsync\n"
+"Modeline \"1280x1024\" 135 1280 1312 1416 1664 1024 1027 1030 1064\n"
+"\n"
+"# 1600x1200 @ 70 Hz, 87.50 kHz hsync\n"
+"Modeline \"1600x1200\" 189 1600 1664 1856 2160 1200 1201 1204 1250 -HSync -VSync\n"
+"# 1152x864 @ 100 Hz, 89.62 kHz hsync\n"
+"Modeline \"1152x864\" 137.65 1152 1184 1312 1536 864 866 885 902 -HSync -VSync\n"
+"# 1280x1024 @ 85 Hz, 91.15 kHz hsync\n"
+"Modeline \"1280x1024\" 157.5 1280 1344 1504 1728 1024 1025 1028 1072 +HSync +VSync\n"
+"# 1600x1200 @ 75 Hz, 93.75 kHz hsync\n"
+"Modeline \"1600x1200\" 202.5 1600 1664 1856 2160 1200 1201 1204 1250 +HSync +VSync\n"
+"# 1600x1200 @ 85 Hz, 105.77 kHz hsync\n"
+"Modeline \"1600x1200\" 220 1600 1616 1808 2080 1200 1204 1207 1244 +HSync +VSync\n"
+"# 1280x1024 @ 100 Hz, 107.16 kHz hsync\n"
+"Modeline \"1280x1024\" 181.75 1280 1312 1440 1696 1024 1031 1046 1072 -HSync -VSync\n"
+"\n"
+"# 1800x1440 @ 64Hz, 96.15 kHz hsync \n"
+"ModeLine \"1800X1440\" 230 1800 1896 2088 2392 1440 1441 1444 1490 +HSync +VSync\n"
+"# 1800x1440 @ 70Hz, 104.52 kHz hsync \n"
+"ModeLine \"1800X1440\" 250 1800 1896 2088 2392 1440 1441 1444 1490 +HSync +VSync\n"
+"\n"
+"# 512x384 @ 78 Hz, 31.50 kHz hsync\n"
+"Modeline \"512x384\" 20.160 512 528 592 640 384 385 388 404 -HSync -VSync\n"
+"# 512x384 @ 85 Hz, 34.38 kHz hsync\n"
+"Modeline \"512x384\" 22 512 528 592 640 384 385 388 404 -HSync -VSync\n"
+"\n"
+#if XFREE86_VERSION >= 311
+"# Low-res Doublescan modes\n"
+"# If your chipset does not support doublescan, you get a 'squashed'\n"
+"# resolution like 320x400.\n"
+"\n"
+"# 320x200 @ 70 Hz, 31.5 kHz hsync, 8:5 aspect ratio\n"
+"Modeline \"320x200\" 12.588 320 336 384 400 200 204 205 225 Doublescan\n"
+"# 320x240 @ 60 Hz, 31.5 kHz hsync, 4:3 aspect ratio\n"
+"Modeline \"320x240\" 12.588 320 336 384 400 240 245 246 262 Doublescan\n"
+"# 320x240 @ 72 Hz, 36.5 kHz hsync\n"
+"Modeline \"320x240\" 15.750 320 336 384 400 240 244 246 262 Doublescan\n"
+"# 400x300 @ 56 Hz, 35.2 kHz hsync, 4:3 aspect ratio\n"
+"ModeLine \"400x300\" 18 400 416 448 512 300 301 302 312 Doublescan\n"
+"# 400x300 @ 60 Hz, 37.8 kHz hsync\n"
+"Modeline \"400x300\" 20 400 416 480 528 300 301 303 314 Doublescan\n"
+"# 400x300 @ 72 Hz, 48.0 kHz hsync\n"
+"Modeline \"400x300\" 25 400 424 488 520 300 319 322 333 Doublescan\n"
+"# 480x300 @ 56 Hz, 35.2 kHz hsync, 8:5 aspect ratio\n"
+"ModeLine \"480x300\" 21.656 480 496 536 616 300 301 302 312 Doublescan\n"
+"# 480x300 @ 60 Hz, 37.8 kHz hsync\n"
+"Modeline \"480x300\" 23.890 480 496 576 632 300 301 303 314 Doublescan\n"
+"# 480x300 @ 63 Hz, 39.6 kHz hsync\n"
+"Modeline \"480x300\" 25 480 496 576 632 300 301 303 314 Doublescan\n"
+"# 480x300 @ 72 Hz, 48.0 kHz hsync\n"
+"Modeline \"480x300\" 29.952 480 504 584 624 300 319 322 333 Doublescan\n"
+"\n"
+#endif
+;
+#endif
+
+static char *devicesection_text =
+"# **********************************************************************\n"
+"# Graphics device section\n"
+"# **********************************************************************\n"
+"\n"
+"# Any number of graphics device sections may be present\n"
+"\n"
+"# Standard VGA Device:\n"
+"\n"
+"Section \"Device\"\n"
+" Identifier \"Standard VGA\"\n"
+" VendorName \"Unknown\"\n"
+" BoardName \"Unknown\"\n"
+"\n"
+"# The chipset line is optional in most cases. It can be used to override\n"
+"# the driver's chipset detection, and should not normally be specified.\n"
+"\n"
+"# Chipset \"generic\"\n"
+"\n"
+"# The Driver line must be present. When using run-time loadable driver\n"
+"# modules, this line instructs the server to load the specified driver\n"
+"# module. Even when not using loadable driver modules, this line\n"
+"# indicates which driver should interpret the information in this section.\n"
+"\n"
+" Driver \"vga\"\n"
+"# The BusID line is used to specify which of possibly multiple devices\n"
+"# this section is intended for. When this line isn't present, a device\n"
+"# section can only match up with the primary video device. For PCI\n"
+"# devices a line like the following could be used. This line should not\n"
+"# normally be included unless there is more than one video device\n"
+"# intalled.\n"
+"\n"
+"# BusID \"PCI:0:10:0\"\n"
+"\n"
+"# VideoRam 256\n"
+"\n"
+"# Clocks 25.2 28.3\n"
+"\n"
+"EndSection\n"
+"\n"
+"# Device configured by xf86config:\n"
+"\n";
+
+static char *screensection_text1 =
+"# **********************************************************************\n"
+"# Screen sections\n"
+"# **********************************************************************\n"
+"\n"
+"# Any number of screen sections may be present. Each describes\n"
+"# the configuration of a single screen. A single specific screen section\n"
+"# may be specified from the X server command line with the \"-screen\"\n"
+"# option.\n";
+
+static char *serverlayout_section_text1 =
+"# **********************************************************************\n"
+"# ServerLayout sections.\n"
+"# **********************************************************************\n"
+"\n"
+"# Any number of ServerLayout sections may be present. Each describes\n"
+"# the way multiple screens are organised. A specific ServerLayout\n"
+"# section may be specified from the X server command line with the\n"
+"# \"-layout\" option. In the absence of this, the first section is used.\n"
+"# When now ServerLayout section is present, the first Screen section\n"
+"# is used alone.\n"
+"\n"
+"Section \"ServerLayout\"\n"
+"\n"
+"# The Identifier line must be present\n"
+" Identifier \"Simple Layout\"\n"
+"\n"
+"# Each Screen line specifies a Screen section name, and optionally\n"
+"# the relative position of other screens. The four names after\n"
+"# primary screen name are the screens to the top, bottom, left and right\n"
+"# of the primary screen. In this example, screen 2 is located to the\n"
+"# right of screen 1.\n"
+"\n";
+
+static char *serverlayout_section_text2 =
+"\n"
+"# Each InputDevice line specifies an InputDevice section name and\n"
+"# optionally some options to specify the way the device is to be\n"
+"# used. Those options include \"CorePointer\", \"CoreKeyboard\" and\n"
+"# \"SendCoreEvents\".\n"
+"\n"
+" InputDevice \"Mouse1\" \"CorePointer\"\n"
+" InputDevice \"Keyboard1\" \"CoreKeyboard\"\n"
+"\n"
+"EndSection\n"
+"\n"
+"# Section \"DRI\"\n"
+"# Mode 0666\n"
+"# EndSection\n"
+"\n";
+
+static void
+write_fontpath_section(FILE *f)
+{
+ /* this will create the Fontpath lines, but only after checking,
+ * that the corresponding dir exists (was THE absolute problem
+ * users had with XFree86/OS2 3.1.2D !)
+ */
+ int i;
+ char cur[256+20],*colon, *hash;
+
+ for (i=0; XF86Config_fontpaths[i]; i++) {
+ strcpy(cur,TREEROOTLX);
+ strcat(cur,XF86Config_fontpaths[i]);
+ /* remove a ':' */
+ colon = strchr(cur+2,':'); /* OS/2: C:/...:scaled */
+ if (colon) *colon = 0;
+ hash = exists_dir(cur) ? "" : "#";
+ fprintf(f,"%s FontPath \"%s%s\"\n",
+ hash,
+ TREEROOTLX,
+ XF86Config_fontpaths[i]);
+ }
+}
+
+static void
+write_XF86Config(char *filename)
+{
+ FILE *f;
+
+ /*
+ * Write the file.
+ */
+
+ f = fopen(filename, "w");
+ if (f == NULL) {
+ printf("Failed to open filename for writing.\n");
+#ifndef __EMX__
+ if (getuid() != 0)
+ printf("Maybe you need to be root to write to the specified directory?\n");
+#endif
+ exit(-1);
+ }
+
+ fprintf(f, "%s", XF86Config_firstchunk_text);
+ write_fontpath_section(f);
+ fprintf(f, "%s", XF86Config_fontpathchunk_text);
+
+ /*
+ * Write keyboard section.
+ */
+ if (config_altmeta) {
+ fprintf(f, " Option \"LeftAlt\" \"Meta\"\n");
+ fprintf(f, " Option \"RightAlt\" \"ModeShift\"\n");
+ }
+ else {
+ fprintf(f, "# Option \"LeftAlt\" \"Meta\"\n");
+ fprintf(f, "# Option \"RightAlt\" \"ModeShift\"\n");
+ }
+#if defined(__OpenBSD__) && defined(WSCONS_SUPPORT) && !defined(PCVT_SUPPORT)
+ /* wscons keyoards need a protocol line */
+ fprintf(f, " Option \"Protocol\" \"wskbd\"\n");
+ fprintf(f, " Option \"Device\" \"%s\"\n", config_keyboard_dev);
+ fprintf(f, " Option \"XkbKeycodes\" \"wscons(ppc)\"\n");
+#endif
+ fprintf(f, "%s", keyboardchunk2_text);
+
+ fprintf(f, "%s", keyboardchunk3_text);
+ if (config_xkbdisable) {
+ fprintf(f, " Option \"XkbDisable\"\n\n");
+ } else {
+ fprintf(f, "# Option \"XkbDisable\"\n\n");
+ }
+ fprintf(f, " Option \"XkbRules\" \"%s\"\n",
+ config_xkbrules);
+ fprintf(f, " Option \"XkbModel\" \"%s\"\n",
+ config_xkbmodel);
+ fprintf(f, " Option \"XkbLayout\" \"%s\"\n",
+ config_xkblayout);
+ if (config_xkbvariant)
+ fprintf(f, " Option \"XkbVariant\" \"%s\"\n",
+ config_xkbvariant);
+ if (config_xkboptions)
+ fprintf(f, " Option \"XkbOptions\" \"%s\"\n",
+ config_xkboptions);
+
+ fprintf(f, "%s",keyboardlastchunk_text);
+
+ /*
+ * Write pointer section.
+ */
+ fprintf(f, "%s", pointersection_text1);
+ fprintf(f, " Option \"Protocol\" \"%s\"\n",
+ mouse_info[config_mousetype].name);
+#if !defined(__UNIXOS2__) && !defined(QNX4)
+ fprintf(f, " Option \"Device\" \"%s\"\n", config_pointerdevice);
+#endif
+ fprintf(f, "%s", pointersection_text2);
+ if (!config_emulate3buttons)
+ fprintf(f, "#");
+ fprintf(f, " Option \"Emulate3Buttons\"\n");
+ fprintf(f, "# Option \"Emulate3Timeout\" \"50\"\n\n");
+ fprintf(f, "# ChordMiddle is an option for some 3-button Logitech mice\n\n");
+ if (!config_chordmiddle)
+ fprintf(f, "#");
+ fprintf(f, " Option \"ChordMiddle\"\n\n");
+ if (config_cleardtrrts) {
+ fprintf(f, " Option \"ClearDTR\"\n");
+ fprintf(f, " Option \"ClearRTS\"\n\n");
+ }
+ fprintf(f, "EndSection\n\n\n");
+
+ /*
+ * Write XInput sample section
+ */
+ fprintf(f, "%s", xinputsection_text);
+
+ /*
+ * Write monitor section.
+ */
+ fprintf(f, "%s", monitorsection_text1);
+ fprintf(f, " Identifier \"%s\"\n", config_monitoridentifier);
+ fprintf(f, "\n");
+ fprintf(f, "%s", monitorsection_text2);
+ fprintf(f, " HorizSync %s\n", config_hsyncrange);
+ fprintf(f, "\n");
+ fprintf(f, "%s", monitorsection_text3);
+ fprintf(f, " VertRefresh %s\n", config_vsyncrange);
+ fprintf(f, "\n");
+#if 0
+ fprintf(f, "%s", monitorsection_text4);
+ fprintf(f, "%s", modelines_text);
+#endif
+ fprintf(f, "EndSection\n\n\n");
+
+ /*
+ * Write Device section.
+ */
+
+ fprintf(f, "%s", devicesection_text);
+ fprintf(f, "Section \"Device\"\n");
+ fprintf(f, " Identifier \"%s\"\n", config_deviceidentifier);
+ if (card_selected != -1) {
+ fprintf(f, " Driver \"%s\"\n", card[card_selected].driver);
+ if (card[card_selected].flags & UNSUPPORTED) {
+ fprintf(f, " # unsupported card\n");
+ }
+ } else {
+ fprintf(f, " Driver \"vga\"\n"
+ " # unsupported card\n");
+ }
+ /* Rely on server to detect video memory. */
+ fprintf(f, " #VideoRam %d\n", config_videomemory);
+ if (card_selected != -1)
+ /* Add comment lines from card definition. */
+ fprintf(f, card[card_selected].lines);
+ if (config_ramdac != NULL)
+ fprintf(f, " Ramdac \"%s\"\n", config_ramdac);
+ if (card_selected != -1)
+ if (card[card_selected].dacspeed != NULL)
+ fprintf(f, " Dacspeed %s\n",
+ card[card_selected].dacspeed);
+ if (config_clockchip != NULL)
+ fprintf(f, " Clockchip \"%s\"\n", config_clockchip);
+ else
+ if (config_numberofclockslines == 0)
+ fprintf(f, " # Insert Clocks lines here if appropriate\n");
+ else {
+ int i;
+ for (i = 0; i < config_numberofclockslines; i++)
+ fprintf(f, " Clocks %s\n", config_clocksline[i]);
+ }
+ fprintf(f, "EndSection\n\n\n");
+
+ /*
+ * Write Screen sections.
+ */
+
+ fprintf(f, "%s", screensection_text1);
+
+ fprintf(f,
+ "Section \"Screen\"\n"
+ " Identifier \"Screen 1\"\n"
+ " Device \"%s\"\n"
+ " Monitor \"%s\"\n"
+ " DefaultDepth %s\n"
+ "\n"
+ " Subsection \"Display\"\n"
+ " Depth 8\n"
+ " Modes %s\n"
+ " ViewPort 0 0\n",
+ config_deviceidentifier,
+ config_monitoridentifier,
+ config_depth,
+ config_modesline8bpp);
+ if (config_virtual)
+ fprintf(f, " Virtual %d %d\n",
+ config_virtualx8bpp, config_virtualy8bpp);
+ fprintf(f,
+ " EndSubsection\n"
+ " Subsection \"Display\"\n"
+ " Depth 16\n"
+ " Modes %s\n"
+ " ViewPort 0 0\n",
+ config_modesline16bpp);
+ if (config_virtual)
+ fprintf(f, " Virtual %d %d\n",
+ config_virtualx16bpp, config_virtualy16bpp);
+ fprintf(f,
+ " EndSubsection\n"
+ " Subsection \"Display\"\n"
+ " Depth 24\n"
+ " Modes %s\n"
+ " ViewPort 0 0\n",
+ config_modesline24bpp);
+ if (config_virtual)
+ fprintf(f, " Virtual %d %d\n",
+ config_virtualx24bpp, config_virtualy24bpp);
+ fprintf(f,
+ " EndSubsection\n"
+ "EndSection\n"
+ "\n");
+
+ /*
+ * ServerLayout section
+ */
+
+ fprintf(f, serverlayout_section_text1);
+ /* replace with screen config */
+ fprintf(f, " Screen \"Screen 1\"\n");
+
+ fprintf(f, serverlayout_section_text2);
+
+ fclose(f);
+}
+
+static char *
+append_version(char *name)
+{
+#ifdef APPEND_VERSION_TO_CONFIG_NAME
+ char *ret = NULL;
+
+ if (XF86_VERSION_MAJOR > 9 || XF86_VERSION_MAJOR < 0)
+ return name;
+
+ ret = Malloc(strlen(name) + 2 + 1);
+ sprintf(ret, "%s-%d", name, XF86_VERSION_MAJOR);
+ free(name);
+ return ret;
+#else
+ return name;
+#endif
+}
+
+/*
+ * Ask where to write XF86Config to. Returns filename.
+ */
+
+static char *
+ask_XF86Config_location(void) {
+ char s[80];
+ char *filename = NULL;
+
+ printf(
+"I am going to write the XF86Config file now. Make sure you don't accidently\n"
+"overwrite a previously configured one.\n\n");
+
+#ifndef __EMX__
+ if (getuid() == 0) {
+#ifdef PREFER_XF86CONFIG_IN_ETC
+ filename = Strdup("/etc/X11/" XCONFIGFILE);
+ filename = append_version(filename);
+ printf("Shall I write it to %s? ", filename);
+ getstring(s);
+ printf("\n");
+ if (answerisyes(s))
+ return filename;
+#endif
+
+ if (filename)
+ free(filename);
+ filename = Strdup(TREEROOTCFG "/" XCONFIGFILE);
+ filename = append_version(filename);
+ printf("Please answer the following question with either 'y' or 'n'.\n");
+ printf("Shall I write it to the default location, %s? ", filename);
+ getstring(s);
+ printf("\n");
+ if (answerisyes(s))
+ return filename;
+
+#ifndef PREFER_XF86CONFIG_IN_ETC
+ if (filename)
+ free(filename);
+ filename = Strdup("/etc/X11/" XCONFIGFILE);
+ filename = append_version(filename);
+ printf("Shall I write it to %s? ", filename);
+ getstring(s);
+ printf("\n");
+ if (answerisyes(s))
+ return filename;
+#endif
+#else /* __EMX__ */
+ {
+ printf("Please answer the following question with either 'y' or 'n'.\n");
+ printf("Shall I write it to the default location, drive:/"__XSERVERNAME__"/lib/X11/XConfig? ");
+ getstring(s);
+ printf("\n");
+ if (answerisyes(s)) {
+ return __XOS2RedirRoot("/"__XSERVERNAME__"/lib/X11/XConfig",'/');
+ }
+#endif /* __EMX__ */
+ }
+
+ if (filename)
+ free(filename);
+ filename = Strdup(XCONFIGFILE);
+ filename = append_version(filename);
+ printf("Do you want it written to the current directory as '%s'? ", filename);
+ getstring(s);
+ printf("\n");
+ if (answerisyes(s)) {
+ return filename;
+ }
+
+ printf("Please give a filename to write to: ");
+ getstring(s);
+ printf("\n");
+ if (filename)
+ free(filename);
+ filename = Strdup(s);
+ return filename;
+}
+
+
+/*
+ * Check if an earlier version of XFree86 is installed; warn about proper
+ * search path order in that case.
+ */
+
+static char *notinstalled_text =
+"The directory " TREEROOT " does not exist. This probably means that you have\n"
+"not yet installed an X11R6-based version of "__XSERVERNAME__". Please install\n"
+"XFree86 3.1+ before running this program, following the instructions in\n"
+"the INSTALL or README that comes with the "__XSERVERNAME__" distribution for your OS.\n"
+"For a minimal installation it is sufficient to only install base binaries,\n"
+"libraries, configuration files and a server that you want to use.\n"
+"\n";
+
+#ifndef __UNIXOS2__
+static char *oldxfree86_text =
+"The directory '/usr/X386/bin' exists. You probably have an old version of\n"
+"__XSERVERNAME__ installed (XFree86 3.1 installs in '" TREEROOT "' instead of\n"
+"'/usr/X386').\n"
+"\n"
+"It is important that the directory '" TREEROOT "' is present in your\n"
+"search path, *before* any occurrence of '/usr/X386/bin'. If you have installed\n"
+"X program binaries that are not in the base __XSERVERNAME__ distribution in\n"
+"'/usr/X386/bin', you can keep the directory in your path as long as it is\n"
+"after '" TREEROOT "'.\n"
+"\n";
+
+static char *pathnote_text =
+"Note that the X binary directory in your path may be a symbolic link.\n"
+"In that case you could modify the symbolic link to point to the new binaries.\n"
+"Example: 'rm -f /usr/bin/X11; ln -s /usr/X11R6/bin /usr/bin/X11', if the\n"
+"link is '/usr/bin/X11'.\n"
+"\n"
+"Make sure the path is OK before continuing.\n";
+#endif
+
+static void
+path_check(void) {
+ char s[80];
+ int ok;
+
+ ok = exists_dir(TREEROOT);
+ if (!ok) {
+ printf("%s", notinstalled_text);
+ printf("Do you want to continue? ");
+ getstring(s);
+ if (!answerisyes(s))
+ exit(-1);
+ printf("\n");
+ }
+
+#ifndef __UNIXOS2__
+ ok = exists_dir("/usr/X386/bin");
+ if (!ok)
+ return;
+
+ printf("%s", oldxfree86_text);
+ printf("Your PATH is currently set as follows:\n%s\n\n",
+ getenv("PATH"));
+ printf("%s", pathnote_text);
+ keypress();
+#endif
+}
+
+
+static void
+configdir_check(void)
+{
+ /* /etc/X11 may not exist on some systems */
+ if (getuid() == 0) {
+ struct stat buf;
+ if (stat("/etc/X11", &buf) == -1 && errno == ENOENT)
+ mkdir("/etc/X11", 0777);
+ if (stat(TREEROOTCFG, &buf) == -1 && errno == ENOENT)
+ mkdir(TREEROOTCFG, 0777);
+ }
+}
+
+
+/*
+ * Program entry point.
+ */
+
+int
+main(int argc, char *argv[]) {
+
+ createtmpdir();
+
+ emptylines();
+
+ printf("%s", intro_text);
+
+ keypress();
+ emptylines();
+
+ path_check();
+
+ emptylines();
+
+ configdir_check();
+
+ emptylines();
+
+ mouse_configuration();
+
+ emptylines();
+
+ keyboard_configuration();
+
+ emptylines();
+
+ monitor_configuration();
+
+ emptylines();
+
+ carddb_configuration();
+
+ emptylines();
+
+ screen_configuration();
+
+ emptylines();
+
+ depth_configuration();
+
+ emptylines();
+
+ write_XF86Config(ask_XF86Config_location());
+
+ printf("%s", finalcomment_text);
+
+ exit(0);
+}
diff --git a/hw/xfree86/utils/xorgconfig/xorgconfig.man.pre b/hw/xfree86/utils/xorgconfig/xorgconfig.man.pre
new file mode 100644
index 000000000..63e55f349
--- /dev/null
+++ b/hw/xfree86/utils/xorgconfig/xorgconfig.man.pre
@@ -0,0 +1,22 @@
+.\" $XFree86: xc/programs/Xserver/hw/xfree86/xf86config/xorgconfig.man,v 1.5 2001/11/01 23:35:34 dawes Exp $
+.TH xorgconfig 1 __vendorversion__
+.SH NAME
+xorgconfig \- generate an __XCONFIGFILE__ file
+.SH SYNOPSIS
+.B xorgconfig
+.SH DESCRIPTION
+\fIxorgconfig\fP is an interactive program for generating an __XCONFIGFILE__ file
+for use with __XSERVERNAME__ X servers.
+.PP
+Note that the default name used by \fIxorgconfig\fP for the __XCONFIGFILE__ file
+is system-dependent. For instance, on some systems, __XCONFIGFILE__-4 is used,
+and on OS/2, XConfig is used.
+.SH FILES
+.TP
+.I __projectroot__/lib/X11/Cards
+Video cards database
+.SH "SEE ALSO"
+__XSERVERNAME__(1), __XCONFIGFILE__(__filemansuffix__), reconfig(1)
+.SH AUTHOR
+Harm Hanemaayer.
+.\" $TOG: xf86conf.man /main/9 1997/07/19 10:53:08 kaleb $
diff --git a/hw/xfree86/xorgconf.cpp b/hw/xfree86/xorgconf.cpp
new file mode 100644
index 000000000..2a502dc92
--- /dev/null
+++ b/hw/xfree86/xorgconf.cpp
@@ -0,0 +1,626 @@
+XCOMM $XdotOrg: xc/programs/Xserver/hw/xfree86/xorgconf.cpp,v 1.1.6.1 2004/04/02 21:47:17 eich Exp $
+XCOMM
+XCOMM Copyright (c) 1994-1998 by The XFree86 Project, Inc.
+XCOMM
+XCOMM Permission is hereby granted, free of charge, to any person obtaining a
+XCOMM copy of this software and associated documentation files (the "Software"),
+XCOMM to deal in the Software without restriction, including without limitation
+XCOMM the rights to use, copy, modify, merge, publish, distribute, sublicense,
+XCOMM and/or sell copies of the Software, and to permit persons to whom the
+XCOMM Software is furnished to do so, subject to the following conditions:
+XCOMM
+XCOMM The above copyright notice and this permission notice shall be included in
+XCOMM all copies or substantial portions of the Software.
+XCOMM
+XCOMM THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+XCOMM IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+XCOMM FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+XCOMM THE XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+XCOMM WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+XCOMM OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+XCOMM SOFTWARE.
+XCOMM
+XCOMM Except as contained in this notice, the name of the XFree86 Project shall
+XCOMM not be used in advertising or otherwise to promote the sale, use or other
+XCOMM dealings in this Software without prior written authorization from the
+XCOMM XFree86 Project.
+XCOMM
+XCOMM $XConsortium: XF86Conf.cpp /main/22 1996/10/23 11:43:51 kaleb $
+
+XCOMM **********************************************************************
+XCOMM This is a sample configuration file only, intended to illustrate
+XCOMM what a config file might look like. Refer to the XF86Config(4/5)
+XCOMM man page for details about the format of this file. This man page
+XCOMM is installed as MANPAGE
+XCOMM **********************************************************************
+
+XCOMM The ordering of sections is not important in version 4.0 and later.
+
+XCOMM **********************************************************************
+XCOMM Files section. This allows default font and rgb paths to be set
+XCOMM **********************************************************************
+
+Section "Files"
+
+XCOMM The location of the RGB database. Note, this is the name of the
+XCOMM file minus the extension (like ".txt" or ".db"). There is normally
+XCOMM no need to change the default.
+
+ RgbPath RGBPATH
+
+XCOMM Multiple FontPath entries are allowed (which are concatenated together),
+XCOMM as well as specifying multiple comma-separated entries in one FontPath
+XCOMM command (or a combination of both methods)
+
+ FontPath LOCALFONTPATH
+ FontPath MISCFONTPATH
+ FontPath DPI75USFONTPATH
+ FontPath DPI100USFONTPATH
+ FontPath T1FONTPATH
+ FontPath TRUETYPEFONTPATH
+ FontPath CIDFONTPATH
+ FontPath SPFONTPATH
+ FontPath DPI75FONTPATH
+ FontPath DPI100FONTPATH
+
+XCOMM ModulePath can be used to set a search path for the X server modules.
+XCOMM The default path is shown here.
+
+XCOMM ModulePath MODULEPATH
+
+EndSection
+
+XCOMM **********************************************************************
+XCOMM Module section -- this is an optional section which is used to specify
+XCOMM which run-time loadable modules to load when the X server starts up.
+XCOMM **********************************************************************
+
+Section "Module"
+
+XCOMM This loads the DBE extension module.
+
+ Load "dbe"
+
+XCOMM This loads the miscellaneous extensions module, and disables
+XCOMM initialisation of the XFree86-DGA extension within that module.
+
+ SubSection "extmod"
+ Option "omit xfree86-dga"
+ EndSubSection
+
+XCOMM This loads the Type1 and FreeType font modules
+
+ Load "type1"
+ Load "freetype"
+
+EndSection
+
+
+XCOMM **********************************************************************
+XCOMM Server flags section. This contains various server-wide Options.
+XCOMM **********************************************************************
+
+Section "ServerFlags"
+
+XCOMM Uncomment this to cause a core dump at the spot where a signal is
+XCOMM received. This may leave the console in an unusable state, but may
+XCOMM provide a better stack trace in the core dump to aid in debugging
+
+XCOMM Option "NoTrapSignals"
+
+XCOMM Uncomment this to disable the <Crtl><Alt><Fn> VT switch sequence
+XCOMM (where n is 1 through 12). This allows clients to receive these key
+XCOMM events.
+
+XCOMM Option "DontVTSwitch"
+
+XCOMM Uncomment this to disable the <Crtl><Alt><BS> server abort sequence
+XCOMM This allows clients to receive this key event.
+
+XCOMM Option "DontZap"
+
+XCOMM Uncomment this to disable the <Crtl><Alt><KP_+>/<KP_-> mode switching
+XCOMM sequences. This allows clients to receive these key events.
+
+XCOMM Option "DontZoom"
+
+XCOMM Uncomment this to disable tuning with the xvidtune client. With
+XCOMM it the client can still run and fetch card and monitor attributes,
+XCOMM but it will not be allowed to change them. If it tries it will
+XCOMM receive a protocol error.
+
+XCOMM Option "DisableVidModeExtension"
+
+XCOMM Uncomment this to enable the use of a non-local xvidtune client.
+
+XCOMM Option "AllowNonLocalXvidtune"
+
+XCOMM Uncomment this to disable dynamically modifying the input device
+XCOMM (mouse and keyboard) settings.
+
+XCOMM Option "DisableModInDev"
+
+XCOMM Uncomment this to enable the use of a non-local client to
+XCOMM change the keyboard or mouse settings (currently only xset).
+
+XCOMM Option "AllowNonLocalModInDev"
+
+XCOMM Set the basic blanking screen saver timeout.
+
+ Option "blank time" "10" # 10 minutes
+
+XCOMM Set the DPMS timeouts. These are set here because they are global
+XCOMM rather than screen-specific. These settings alone don't enable DPMS.
+XCOMM It is enabled per-screen (or per-monitor), and even then only when
+XCOMM the driver supports it.
+
+ Option "standby time" "20"
+ Option "suspend time" "30"
+ Option "off time" "60"
+
+XCOMM On some platform the server needs to estimate the sizes of PCI
+XCOMM memory and pio ranges. This is done by assuming that PCI ranges
+XCOMM don't overlap. Some broken BIOSes tend to set ranges of inactive
+XCOMM devices wrong. Here one can adjust how aggressive the assumptions
+XCOMM should be. Default is 0.
+
+XCOMM Option "EstimateSizesAggresively" "0"
+
+EndSection
+
+XCOMM **********************************************************************
+XCOMM Input devices
+XCOMM **********************************************************************
+
+XCOMM **********************************************************************
+XCOMM Core keyboard's InputDevice section
+XCOMM **********************************************************************
+
+Section "InputDevice"
+
+ Identifier "Keyboard1"
+ Driver "keyboard"
+
+XCOMM For most OSs the protocol can be omitted (it defaults to "Standard").
+XCOMM When using XQUEUE (only for SVR3 and SVR4, but not Solaris), comment
+XCOMM out the above line, and uncomment the following line.
+
+XCOMM Option "Protocol" "Xqueue"
+
+XCOMM Set the keyboard auto repeat parameters. Not all platforms implement
+XCOMM this.
+
+ Option "AutoRepeat" "500 5"
+
+XCOMM Specifiy which keyboard LEDs can be user-controlled (eg, with xset(1)).
+
+XCOMM Option "Xleds" "1 2 3"
+
+XCOMM To disable the XKEYBOARD extension, uncomment XkbDisable.
+
+XCOMM Option "XkbDisable"
+
+XCOMM To customise the XKB settings to suit your keyboard, modify the
+XCOMM lines below (which are the defaults). For example, for a European
+XCOMM keyboard, you will probably want to use one of:
+XCOMM
+XCOMM Option "XkbModel" "pc102"
+XCOMM Option "XkbModel" "pc105"
+XCOMM
+XCOMM If you have a Microsoft Natural keyboard, you can use:
+XCOMM
+XCOMM Option "XkbModel" "microsoft"
+XCOMM
+XCOMM If you have a US "windows" keyboard you will want:
+XCOMM
+XCOMM Option "XkbModel" "pc104"
+XCOMM
+XCOMM Then to change the language, change the Layout setting.
+XCOMM For example, a german layout can be obtained with:
+XCOMM
+XCOMM Option "XkbLayout" "de"
+XCOMM
+XCOMM or:
+XCOMM
+XCOMM Option "XkbLayout" "de"
+XCOMM Option "XkbVariant" "nodeadkeys"
+XCOMM
+XCOMM If you'd like to switch the positions of your capslock and
+XCOMM control keys, use:
+XCOMM
+XCOMM Option "XkbOptions" "ctrl:swapcaps"
+
+
+XCOMM These are the default XKB settings for xorg
+XCOMM
+XCOMM Option "XkbRules" "xorg"
+XCOMM Option "XkbModel" "pc101"
+XCOMM Option "XkbLayout" "us"
+XCOMM Option "XkbVariant" ""
+XCOMM Option "XkbOptions" ""
+
+EndSection
+
+
+XCOMM **********************************************************************
+XCOMM Core Pointer's InputDevice section
+XCOMM **********************************************************************
+
+Section "InputDevice"
+
+XCOMM Identifier and driver
+
+ Identifier "Mouse1"
+ Driver "mouse"
+
+XCOMM The mouse protocol and device. The device is normally set to /dev/mouse,
+XCOMM which is usually a symbolic link to the real device.
+
+ Option "Protocol" "Microsoft"
+ Option "Device" "/dev/mouse"
+
+XCOMM On platforms where PnP mouse detection is supported the following
+XCOMM protocol setting can be used when using a newer PnP mouse:
+
+XCOMM Option "Protocol" "Auto"
+
+XCOMM When using mouse connected to a PS/2 port (aka "MousePort"), set the
+XCOMM the protocol as follows. On some platforms some other settings may
+XCOMM be available.
+
+XCOMM Option "Protocol" "PS/2"
+
+XCOMM When using XQUEUE (only for SVR3 and SVR4, but not Solaris), use
+XCOMM the following instead of any of the lines above. The Device line
+XCOMM is not required in this case.
+
+XCOMM Option "Protocol" "Xqueue"
+
+XCOMM Baudrate and SampleRate are only for some older Logitech mice. In
+XCOMM almost every case these lines should be omitted.
+
+XCOMM Option "BaudRate" "9600"
+XCOMM Option "SampleRate" "150"
+
+XCOMM Emulate3Buttons is an option for 2-button mice
+XCOMM Emulate3Timeout is the timeout in milliseconds (default is 50ms)
+
+XCOMM Option "Emulate3Buttons"
+XCOMM Option "Emulate3Timeout" "50"
+
+XCOMM ChordMiddle is an option for some 3-button Logitech mice, or any
+XCOMM 3-button mouse where the middle button generates left+right button
+XCOMM events.
+
+XCOMM Option "ChordMiddle"
+
+EndSection
+
+Section "InputDevice"
+ Identifier "Mouse2"
+ Driver "mouse"
+ Option "Protocol" "MouseMan"
+ Option "Device" "/dev/mouse2"
+EndSection
+
+XCOMM Some examples of extended input devices
+
+XCOMM Section "InputDevice"
+XCOMM Identifier "spaceball"
+XCOMM Driver "magellan"
+XCOMM Option "Device" "/dev/cua0"
+XCOMM EndSection
+XCOMM
+XCOMM Section "InputDevice"
+XCOMM Identifier "spaceball2"
+XCOMM Driver "spaceorb"
+XCOMM Option "Device" "/dev/cua0"
+XCOMM EndSection
+XCOMM
+XCOMM Section "InputDevice"
+XCOMM Identifier "touchscreen0"
+XCOMM Driver "microtouch"
+XCOMM Option "Device" "/dev/ttyS0"
+XCOMM Option "MinX" "1412"
+XCOMM Option "MaxX" "15184"
+XCOMM Option "MinY" "15372"
+XCOMM Option "MaxY" "1230"
+XCOMM Option "ScreenNumber" "0"
+XCOMM Option "ReportingMode" "Scaled"
+XCOMM Option "ButtonNumber" "1"
+XCOMM Option "SendCoreEvents"
+XCOMM EndSection
+XCOMM
+XCOMM Section "InputDevice"
+XCOMM Identifier "touchscreen1"
+XCOMM Driver "elo2300"
+XCOMM Option "Device" "/dev/ttyS0"
+XCOMM Option "MinX" "231"
+XCOMM Option "MaxX" "3868"
+XCOMM Option "MinY" "3858"
+XCOMM Option "MaxY" "272"
+XCOMM Option "ScreenNumber" "0"
+XCOMM Option "ReportingMode" "Scaled"
+XCOMM Option "ButtonThreshold" "17"
+XCOMM Option "ButtonNumber" "1"
+XCOMM Option "SendCoreEvents"
+XCOMM EndSection
+
+XCOMM **********************************************************************
+XCOMM Monitor section
+XCOMM **********************************************************************
+
+XCOMM Any number of monitor sections may be present
+
+Section "Monitor"
+
+XCOMM The identifier line must be present.
+
+ Identifier "Generic Monitor"
+
+XCOMM HorizSync is in kHz unless units are specified.
+XCOMM HorizSync may be a comma separated list of discrete values, or a
+XCOMM comma separated list of ranges of values.
+XCOMM NOTE: THE VALUES HERE ARE EXAMPLES ONLY. REFER TO YOUR MONITOR'S
+XCOMM USER MANUAL FOR THE CORRECT NUMBERS.
+
+XCOMM HorizSync 31.5 # typical for a single frequency fixed-sync monitor
+XCOMM HorizSync 30-64 # multisync
+XCOMM HorizSync 31.5, 35.2 # multiple fixed sync frequencies
+XCOMM HorizSync 15-25, 30-50 # multiple ranges of sync frequencies
+
+XCOMM VertRefresh is in Hz unless units are specified.
+XCOMM VertRefresh may be a comma separated list of discrete values, or a
+XCOMM comma separated list of ranges of values.
+XCOMM NOTE: THE VALUES HERE ARE EXAMPLES ONLY. REFER TO YOUR MONITOR'S
+XCOMM USER MANUAL FOR THE CORRECT NUMBERS.
+
+XCOMM VertRefresh 60 # typical for a single frequency fixed-sync monitor
+
+XCOMM VertRefresh 50-100 # multisync
+XCOMM VertRefresh 60, 65 # multiple fixed sync frequencies
+XCOMM VertRefresh 40-50, 80-100 # multiple ranges of sync frequencies
+
+XCOMM Modes can be specified in two formats. A compact one-line format, or
+XCOMM a multi-line format.
+
+XCOMM A generic VGA 640x480 mode (hsync = 31.5kHz, refresh = 60Hz)
+XCOMM These two are equivalent
+
+XCOMM ModeLine "640x480" 25.175 640 664 760 800 480 491 493 525
+
+ Mode "640x480"
+ DotClock 25.175
+ HTimings 640 664 760 800
+ VTimings 480 491 493 525
+ EndMode
+
+XCOMM These two are equivalent
+
+XCOMM ModeLine "1024x768i" 45 1024 1048 1208 1264 768 776 784 817 Interlace
+
+XCOMM Mode "1024x768i"
+XCOMM DotClock 45
+XCOMM HTimings 1024 1048 1208 1264
+XCOMM VTimings 768 776 784 817
+XCOMM Flags "Interlace"
+XCOMM EndMode
+
+XCOMM If a monitor has DPMS support, that can be indicated here. This will
+XCOMM enable DPMS when the monitor is used with drivers that support it.
+
+XCOMM Option "dpms"
+
+XCOMM If a monitor requires that the sync signals be superimposed on the
+XCOMM green signal, the following option will enable this when used with
+XCOMM drivers that support it. Only a relatively small range of hardware
+XCOMM (and drivers) actually support this.
+
+XCOMM Option "sync on green"
+
+EndSection
+
+XCOMM **********************************************************************
+XCOMM Graphics device section
+XCOMM **********************************************************************
+
+XCOMM Any number of graphics device sections may be present
+
+Section "Device"
+
+XCOMM The Identifier must be present.
+
+ Identifier "Generic VGA"
+
+XCOMM The Driver line must be present. When using run-time loadable driver
+XCOMM modules, this line instructs the server to load the specified driver
+XCOMM module. Even when not using loadable driver modules, this line
+XCOMM indicates which driver should interpret the information in this section.
+
+ Driver "vga"
+
+XCOMM The chipset line is optional in most cases. It can be used to override
+XCOMM the driver's chipset detection, and should not normally be specified.
+
+XCOMM Chipset "generic"
+
+XCOMM Various other lines can be specified to override the driver's automatic
+XCOMM detection code. In most cases they are not needed.
+
+XCOMM VideoRam 256
+XCOMM Clocks 25.2 28.3
+
+XCOMM The BusID line is used to specify which of possibly multiple devices
+XCOMM this section is intended for. When this line isn't present, a device
+XCOMM section can only match up with the primary video device. For PCI
+XCOMM devices a line like the following could be used. This line should not
+XCOMM normally be included unless there is more than one video device
+XCOMM intalled.
+
+XCOMM BusID "PCI:0:10:0"
+
+XCOMM Various option lines can be added here as required. Some options
+XCOMM are more appropriate in Screen sections, Display subsections or even
+XCOMM Monitor sections.
+
+XCOMM Option "hw cursor" "off"
+
+EndSection
+
+Section "Device"
+ Identifier "any supported Trident chip"
+ Driver "trident"
+EndSection
+
+Section "Device"
+ Identifier "MGA Millennium I"
+ Driver "mga"
+ Option "hw cursor" "off"
+ BusID "PCI:0:10:0"
+EndSection
+
+Section "Device"
+ Identifier "MGA G200 AGP"
+ Driver "mga"
+ BusID "PCI:1:0:0"
+ Option "pci retry"
+EndSection
+
+
+XCOMM **********************************************************************
+XCOMM Screen sections.
+XCOMM **********************************************************************
+
+XCOMM Any number of screen sections may be present. Each describes
+XCOMM the configuration of a single screen. A single specific screen section
+XCOMM may be specified from the X server command line with the "-screen"
+XCOMM option.
+
+Section "Screen"
+
+XCOMM The Identifier, Device and Monitor lines must be present
+
+ Identifier "Screen 1"
+ Device "Generic VGA"
+ Monitor "Generic Monitor"
+
+XCOMM The favoured Depth and/or Bpp may be specified here
+
+ DefaultDepth 8
+
+ SubSection "Display"
+ Depth 8
+ Modes "640x480"
+ ViewPort 0 0
+ Virtual 800 600
+ EndSubsection
+
+ SubSection "Display"
+ Depth 4
+ Modes "640x480"
+ EndSubSection
+
+ SubSection "Display"
+ Depth 1
+ Modes "640x480"
+ EndSubSection
+
+EndSection
+
+
+Section "Screen"
+ Identifier "Screen MGA1"
+ Device "MGA Millennium I"
+ Monitor "Generic Monitor"
+ Option "no accel"
+ DefaultDepth 16
+XCOMM DefaultDepth 24
+
+ SubSection "Display"
+ Depth 8
+ Modes "1280x1024"
+ Option "rgb bits" "8"
+ Visual "StaticColor"
+ EndSubSection
+ SubSection "Display"
+ Depth 16
+ Modes "1280x1024"
+ EndSubSection
+ SubSection "Display"
+ Depth 24
+ Modes "1280x1024"
+ EndSubSection
+EndSection
+
+
+Section "Screen"
+ Identifier "Screen MGA2"
+ Device "MGA G200 AGP"
+ Monitor "Generic Monitor"
+ DefaultDepth 8
+
+ SubSection "Display"
+ Depth 8
+ Modes "1280x1024"
+ Option "rgb bits" "8"
+ Visual "StaticColor"
+ EndSubSection
+EndSection
+
+
+XCOMM **********************************************************************
+XCOMM ServerLayout sections.
+XCOMM **********************************************************************
+
+XCOMM Any number of ServerLayout sections may be present. Each describes
+XCOMM the way multiple screens are organised. A specific ServerLayout
+XCOMM section may be specified from the X server command line with the
+XCOMM "-layout" option. In the absence of this, the first section is used.
+XCOMM When now ServerLayout section is present, the first Screen section
+XCOMM is used alone.
+
+Section "ServerLayout"
+
+XCOMM The Identifier line must be present
+
+ Identifier "Main Layout"
+
+XCOMM Each Screen line specifies a Screen section name, and optionally
+XCOMM the relative position of other screens. The four names after
+XCOMM primary screen name are the screens to the top, bottom, left and right
+XCOMM of the primary screen. In this example, screen 2 is located to the
+XCOMM right of screen 1.
+
+ Screen "Screen MGA 1" "" "" "" "Screen MGA 2"
+ Screen "Screen MGA 2" "" "" "Screen MGA 1" ""
+
+XCOMM Each InputDevice line specifies an InputDevice section name and
+XCOMM optionally some options to specify the way the device is to be
+XCOMM used. Those options include "CorePointer", "CoreKeyboard" and
+XCOMM "SendCoreEvents". In this example, "Mouse1" is the core pointer,
+XCOMM and "Mouse2" is an extended input device that also generates core
+XCOMM pointer events (i.e., both mice will move the standard pointer).
+
+ InputDevice "Mouse1" "CorePointer"
+ InputDevice "Mouse2" "SendCoreEvents"
+ InputDevice "Keyboard1" "CoreKeyboard"
+
+EndSection
+
+
+Section "ServerLayout"
+ Identifier "another layout"
+ Screen "Screen 1"
+ Screen "Screen MGA 1"
+ InputDevice "Mouse1" "CorePointer"
+ InputDevice "Keyboard1" "CoreKeyboard"
+EndSection
+
+
+Section "ServerLayout"
+ Identifier "simple layout"
+ Screen "Screen 1"
+ InputDevice "Mouse1" "CorePointer"
+ InputDevice "Keyboard1" "CoreKeyboard"
+EndSection
+