--- /dev/null
+Index: xc/BUILD
+diff -u xc/BUILD:1.4.2.2 xc/BUILD:1.4.2.3
+--- xc/BUILD:1.4.2.2 Fri Sep 17 15:38:16 2004
++++ xc/BUILD Tue Feb 8 00:44:26 2005
+@@ -1,9 +1,9 @@
+ Building the X Window System from the X.org Source Distribution
+
+- Jim Gettys and Keith Packard (for X11R6.8.1)
++ Jim Gettys and Keith Packard (for X11R6.8.2)
+ David Dawes and Matthieu Herrb (for XFree86 4.4 RC2)
+
+- 17 September 2004
++ 9 February 2005
+
+ Abstract
+
+@@ -22,62 +22,62 @@
+ son, flex, zlib (development package), ncurses (development package), font-
+ config (development package), expat (development package), and Perl.
+
+-1. How to get the X11R6.8.1 distribution source
++1. How to get the X11R6.8.2 distribution source
+
+-One way of getting the X11R6.8.1 source is to obtain it directly from the
++One way of getting the X11R6.8.2 source is to obtain it directly from the
+ X.Org CVS repository. There are several ways of doing that, and they are
+ described in the CVS section of our wiki <URL:http://wiki.x.org> The CVS tag
+-for this release is "XORG-6_8_1". The tag for the maintenance branch for
++for this release is "XORG-6_8_2". The tag for the maintenance branch for
+ this release is "XORG-6_8-branch".
+
+-Another method of getting the X11R6.8.1 source is to either download the
+-6.8.1 source tarballs sites from freedesktop.org using either ftp or http.
++Another method of getting the X11R6.8.2 source is to either download the
++6.8.2 source tarballs sites from freedesktop.org using either ftp or http.
+ The procedure for this is as follows:
+
+- o The X11R6.8.1 source is contained in the files:
++ o The X11R6.8.2 source is contained in the files:
+
+- X11R6.8.1-src1.tar.gz
++ X11R6.8.2-src1.tar.gz
+
+- X11R6.8.1-src2.tar.gz
++ X11R6.8.2-src2.tar.gz
+
+- X11R6.8.1-src3.tar.gz
++ X11R6.8.2-src3.tar.gz
+
+- X11R6.8.1-src4.tar.gz
++ X11R6.8.2-src4.tar.gz
+
+- X11R6.8.1-src5.tar.gz
++ X11R6.8.2-src5.tar.gz
+
+- X11R6.8.1-src6.tar.gz
++ X11R6.8.2-src6.tar.gz
+
+- X11R6.8.1-src7.tar.gz
++ X11R6.8.2-src7.tar.gz
+
+- These can be found at ftp://ftp.freedesktop.org/xorg/X11R6.8.1/src/ or
+- http://freedesktop.org/~xorg/X11R6.8.1/src/ and similar locations on
+- X.org mirror sites. X11R6.8.1-src4.tgz and X11R6.8.1-src5.tar.gz con-
+- tains the fonts. X11R6.8.1-src6.tar.gz contains the documentation
+- source. X11R6.8.1-src7.tar.gz contains the hardcopy documentation.
+- X11R6.8.1-src1.tar.gz, X11R6.8.1-src2.tar.gz and X11R6.8.1-src3.tar.gz
++ These can be found at ftp://ftp.freedesktop.org/xorg/X11R6.8.2/src/ or
++ http://freedesktop.org/~xorg/X11R6.8.2/src/ and similar locations on
++ X.org mirror sites. X11R6.8.2-src4.tgz and X11R6.8.2-src5.tar.gz con-
++ tains the fonts. X11R6.8.2-src6.tar.gz contains the documentation
++ source. X11R6.8.2-src7.tar.gz contains the hardcopy documentation.
++ X11R6.8.2-src1.tar.gz, X11R6.8.2-src2.tar.gz and X11R6.8.2-src3.tar.gz
+ contains everything else. If you don't need the docs or fonts you can
+- get by with only X11R6.8.1-src1.tar.gz, X11R6.8.1-src2.tar.gz and
+- X11R6.8.1-src3.tar.gz.
++ get by with only X11R6.8.2-src1.tar.gz, X11R6.8.2-src2.tar.gz and
++ X11R6.8.2-src3.tar.gz.
+
+ o Extract each of these files by running the following from a directory on
+ a filesystem containing enough space (the full source requires around
+ 305MB, and a similar amount is required in addition to this for the com-
+ piled binaries):
+
+- gzip -d < X11R6.8.1-src1.tar.gz | tar vxf -
++ gzip -d < X11R6.8.2-src1.tar.gz | tar vxf -
+
+- gzip -d < X11R6.8.1-src2.tar.gz | tar vxf -
++ gzip -d < X11R6.8.2-src2.tar.gz | tar vxf -
+
+- gzip -d < X11R6.8.1-src3.tar.gz | tar vxf -
++ gzip -d < X11R6.8.2-src3.tar.gz | tar vxf -
+
+- gzip -d < X11R6.8.1-src4.tar.gz | tar vxf -
++ gzip -d < X11R6.8.2-src4.tar.gz | tar vxf -
+
+- gzip -d < X11R6.8.1-src5.tar.gz | tar vxf -
++ gzip -d < X11R6.8.2-src5.tar.gz | tar vxf -
+
+- gzip -d < X11R6.8.1-src6.tar.gz | tar vxf -
++ gzip -d < X11R6.8.2-src6.tar.gz | tar vxf -
+
+- gzip -d < X11R6.8.1-src7.tar.gz | tar vxf -
++ gzip -d < X11R6.8.2-src7.tar.gz | tar vxf -
+
+ All methods will produce one main source directory called xc.
+
+@@ -96,23 +96,23 @@
+ easy to create build problems by changing the default configuration. Check
+ the configuration parameters specified in the xc/config/cf/README.
+
+-If you are using just the X11R6.8.1-src1.tar.gz, X11R6.8.1-src2.tar.gz and
+-X11R6.8.1-src3.tar.gz parts of the source dist, you will need to define
++If you are using just the X11R6.8.2-src1.tar.gz, X11R6.8.2-src2.tar.gz and
++X11R6.8.2-src3.tar.gz parts of the source dist, you will need to define
+ BuildFonts to NO.
+
+ 3. Using a shadow directory of symbolic links for the build
+
+ A recommended practice is to use a shadow directory of symbolic links to do
+-the build of X11R6.8.1 as this allows you to keep the source directory unmod-
++the build of X11R6.8.2 as this allows you to keep the source directory unmod-
+ ified during the build. It has the following benefits:
+
+ o When you are using CVS to maintain your source tree, the update process
+ is not disturbed by foreign files not under CVS's control.
+
+- o It is possible to build X11R6.8.1 for several different Operating System
++ o It is possible to build X11R6.8.2 for several different Operating System
+ or architectures from the same sources, shared by read-only NFS mounts.
+
+- o It is possible to build X11R6.8.1 with different configuration options,
++ o It is possible to build X11R6.8.2 with different configuration options,
+ by putting a real copy of the host.def file in each build tree and by
+ customizing it separately in each build tree.
+
+@@ -135,7 +135,7 @@
+ See the lndir(1) manual page for details.
+
+ If lndir is not already installed on your system, you can build it manually
+-from the X11R6.8.1 sources by running the following commands:
++from the X11R6.8.2 sources by running the following commands:
+
+ cd xc/config/util
+
+@@ -158,7 +158,7 @@
+ addressed the OS-specific details, go your build directory (either the xc
+ directory or the shadow tree created before) and run "make World" with the
+ BOOTSTRAPCFLAGS set as described in the OS-specific README (if necessary, but
+-most systems supported by X11R6.8.1 don't need BOOTSTRAPCFLAGS). It is
++most systems supported by X11R6.8.2 don't need BOOTSTRAPCFLAGS). It is
+ advisable to redirect stdout and stderr to World.Log so that you can track
+ down problems that might occur during the build.
+
+@@ -197,7 +197,11 @@
+ To do the install, run "make install" and "make install.man". Make sure you
+ have enough space in /usr/X11R6 for the install to succeed. If you want to
+ install on a filesystem other than /usr, make a symbolic link to /usr/X11R6
+-before installing.
++before installing. To install the tree into a different directory than
++/usr/X11R6 you can specify DESTDIR:
++
++ make install DESTDIR=<install_target_dir> make install.man DEST-
++ DIR=<install_target_dir>
+
+ Cross compiling is supported if the appropriate config files for your target
+ platforms exist. You must have the compiler toolchain installed for your tar-
+@@ -231,7 +235,7 @@
+ 6. Other useful make targets
+
+ There are some other useful targets defined in the top level Makefile of
+-X11R6.8.1:
++X11R6.8.2:
+
+ o Everything after a make World, make Everything does everything a make
+ World does, except the cleaning of the tree. It is a way to quickly
+@@ -247,11 +251,11 @@
+ make depend
+ make
+
+- to rebuild the X11R6.8.1.
++ to rebuild the X11R6.8.2.
+
+ o distclean does a full cleaning of the source tree, removing all gener-
+ ated files. After a make distclean, make World is the only option to
+- rebuild X11R6.8.1.
++ rebuild X11R6.8.2.
+
+ o includes generates all generated header files and in-tree symbolic links
+ needed by the build. These files are removed by a make clean.
+@@ -268,4 +272,4 @@
+ $Id$
+
+
+-$XdotOrg: xc/BUILD,v 1.4.2.2 2004/09/17 15:38:16 kem Exp $
++$XdotOrg: xc/BUILD,v 1.4.2.3 2005/02/08 00:44:26 kem Exp $
+Index: xc/ChangeLog
+diff -u xc/ChangeLog:1.365.2.1 xc/ChangeLog:1.365.2.155
+--- xc/ChangeLog:1.365.2.1 Wed Sep 15 15:47:36 2004
++++ xc/ChangeLog Wed Feb 9 18:03:20 2005
+@@ -1,3 +1,1738 @@
++2005-02-09 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/Makefile
++ * xc/config/cf/xorgversion.def
++ Bugzilla #2514 (https://bugs.freedesktop.org/show_bug.cgi?id=2514)
++ attachment #1879 (https://bugs.freedesktop.org/attachment.cgi?id=1879):
++ Bumping version to 6.8.2
++ [Disclaimer: This is just a version bump, X11R6.8.2 is released when
++ you see the official annoucement.]
++
++2005-02-08 Kevin E. Martin <kem-at-freedesktop-dot-org>
++
++ * README:
++ * RELNOTES:
++ * programs/Xserver/hw/xfree86/doc/README:
++ * programs/Xserver/hw/xfree86/doc/RELNOTES:
++ * programs/Xserver/hw/xfree86/doc/sgml/RELNOTES.sgml:
++ Update formatted docs.
++
++2005-02-08 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/doc/sgml/README.sgml
++ * xc/programs/Xserver/hw/xfree86/doc/sgml/RELNOTES.sgml
++ * xc/programs/Xserver/hw/xfree86/doc/sgml/defs.ent
++ Bugzilla #2485 (https://bugs.freedesktop.org/show_bug.cgi?id=2485):
++ Second set of release note updates for upcoming X11R6.8.2 release
++ per feedback from the release-wranglers mailinglist.
++
++2005-02-07 Kevin E. Martin <kem-at-freedesktop-dot-org>
++
++ * BUILD:
++ * README:
++ * RELNOTES:
++ * programs/Xserver/hw/xfree86/doc/BUILD:
++ * programs/Xserver/hw/xfree86/doc/DESIGN:
++ * programs/Xserver/hw/xfree86/doc/Install:
++ * programs/Xserver/hw/xfree86/doc/OS2.Notes:
++ * programs/Xserver/hw/xfree86/doc/README:
++ * programs/Xserver/hw/xfree86/doc/README.DECtga:
++ * programs/Xserver/hw/xfree86/doc/README.Darwin:
++ * programs/Xserver/hw/xfree86/doc/README.I128:
++ * programs/Xserver/hw/xfree86/doc/README.LynxOS:
++ * programs/Xserver/hw/xfree86/doc/README.NetBSD:
++ * programs/Xserver/hw/xfree86/doc/README.OpenBSD:
++ * programs/Xserver/hw/xfree86/doc/README.SCO:
++ * programs/Xserver/hw/xfree86/doc/README.SiS:
++ * programs/Xserver/hw/xfree86/doc/README.Solaris:
++ * programs/Xserver/hw/xfree86/doc/README.XKB-Config:
++ * programs/Xserver/hw/xfree86/doc/README.XKB-Enhancing:
++ * programs/Xserver/hw/xfree86/doc/README.ati:
++ * programs/Xserver/hw/xfree86/doc/README.chips:
++ * programs/Xserver/hw/xfree86/doc/README.dps:
++ * programs/Xserver/hw/xfree86/doc/README.fonts:
++ * programs/Xserver/hw/xfree86/doc/README.i740:
++ * programs/Xserver/hw/xfree86/doc/README.i810:
++ * programs/Xserver/hw/xfree86/doc/README.mouse:
++ * programs/Xserver/hw/xfree86/doc/README.r128:
++ * programs/Xserver/hw/xfree86/doc/README.rendition:
++ * programs/Xserver/hw/xfree86/doc/README.s3virge:
++ * programs/Xserver/hw/xfree86/doc/RELNOTES:
++ * programs/Xserver/hw/xfree86/doc/Versions:
++ * programs/Xserver/hw/xfree86/doc/sgml/defs.ent:
++ * programs/xkbcomp/README.config:
++ * programs/xkbcomp/README.enhancing:
++ Update formatted docs.
++
++2005-02-07 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/doc/sgml/SiS.sgml
++ Bugzilla #2485 (https://bugs.freedesktop.org/show_bug.cgi?id=2485)
++ attachment #1855 (https://bugs.freedesktop.org/attachment.cgi?id=1855):
++ Update release notes for SiS driver.
++ Patch by Thomas Winischhofer <thomas@winischhofer.net>.
++
++2005-02-07 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/doc/sgml/OpenBSD.sgml
++ * xc/programs/Xserver/hw/xfree86/doc/sgml/RELNOTES.sgml
++ * xc/programs/Xserver/hw/xfree86/doc/sgml/SiS.sgml
++ * xc/programs/Xserver/hw/xfree86/doc/sgml/Solaris.sgml
++ * xc/programs/Xserver/hw/xfree86/doc/sgml/defs.ent
++ Bugzilla #2485 (https://bugs.freedesktop.org/show_bug.cgi?id=2485):
++ First set of release note updated for upcoming X11R6.8.2 release.
++
++2005-02-02 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/config/cf/xorgversion.def
++ Bugzilla #2456 (https://bugs.freedesktop.org/show_bug.cgi?id=2456)
++ attachment #1823 (https://bugs.freedesktop.org/attachment.cgi?id=1823):
++ Bump version number for upcoming X11R6.8.2rc4 (release canidate 4) to
++ X11R6.8.1.904.
++
++2005-02-01 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/xf86config/xorgconfig.c
++ Backout of Bugzilla #2206 (https://bugs.freedesktop.org/show_bug.cgi?id=2206)
++ attachment #1622 (https://bugs.freedesktop.org/attachment.cgi?id=1622)
++ as this patch does not work for the branch and causes build failure.
++ Approved in the 2005-01-31 Xorg release-wranglers phone call.
++
++2005-02-01 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/drivers/sis/sis.h
++ Bugzilla #2438 (https://bugs.freedesktop.org/show_bug.cgi?id=2438)
++ attachment #1806 (https://bugs.freedesktop.org/attachment.cgi?id=1806):
++ Fix sis driver to work correctly on AMD64.
++ Patch by Thomas Winischhofer <thomas@winischhofer.net>.
++ Vouchers for commit into X11R6.8.x stable branch are Kevin E.
++ Martin <kem@freedesktop.org> and Roland Mainz
++ <roland.mainz@nrubsig.org>.
++
++2005-02-01 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/drivers/sis/init301.c
++ Bugzilla #2437 (https://bugs.freedesktop.org/show_bug.cgi?id=2437)
++ attachment #1805 (https://bugs.freedesktop.org/attachment.cgi?id=1805):
++ Fix sis driver which was reading wrong data from BIOS image.
++ Patch by Thomas Winischhofer <thomas@winischhofer.net>.
++ Vouchers for commit into X11R6.8.x stable branch are Kevin E.
++ Martin <kem@freedesktop.org> and Roland Mainz
++ <roland.mainz@nrubsig.org>.
++
++2005-02-01 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/os-support/bus/xf86Sbus.h
++ * xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_io.c
++ * xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_kbd.c
++ Bugzilla #825 (https://bugs.freedesktop.org/show_bug.cgi?id=825)
++ attachment #956 (https://bugs.freedesktop.org/attachment.cgi?id=956):
++ Fix build problems on Linux/SPARC.
++ Patch by Jeremy Huddleston <eradicator@gentoo.org>.
++ Approved in the 2005-01-31 Xorg release-wranglers phone call.
++
++2005-02-01 Alexander Gottwald <ago@freedesktop.org>
++ * xc/config/cf/cygwin.cf
++ Bugzilla #1393 (https://bugs.freedesktop.org/show_bug.cgi?id=1393)
++ attachment #1801 (https://bugs.freedesktop.org/attachment.cgi?id=1801):
++ Move xorg version numbers to separate config file (committing the
++ missing parts from attachment #1188, the diff was approved but the
++ changes were accidently never commited to "cygwin.cf"... ;-().
++
++2005-02-01 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/xmore/xmore.man
++ * xc/programs/xmore/xmore.sgml
++ Bugzilla #2415 (https://bugs.freedesktop.org/show_bug.cgi?id=2415)
++ attachment #1786 (https://bugs.freedesktop.org/attachment.cgi?id=1786):
++ Fix formatting problem in the xmore(1x) manual page.
++ Patch by Matthieu Herrb <matthieu.herrb@laas.fr> and Roland Mainz
++ <roland.mainz@nrubsig.org>.
++ Approved in the 2005-01-31 Xorg release-wranglers phone call (the
++ xmore.man diff is an automatic update from the DocBook--->man
++ conversion).
++
++2005-02-01 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/xrx/plugin/include/npapi.h
++ * xc/programs/xrx/xnest-plugin/XnestDis.c
++ Bugzilla #2386 (https://bugs.freedesktop.org/show_bug.cgi?id=2386)
++ attachment #1766 (https://bugs.freedesktop.org/attachment.cgi?id=1766):
++ Fix build bustage on MacOSX/*BSD and AIX platforms (1:1 port of the
++ build bustage fixes from trunk).
++ Patch by Dan McNichol <mcnichol@austin.ibm.com> and Torrey T.
++ Lyons <torrey@mrcla.com>.
++ Approved in the 2005-01-31 Xorg release-wranglers phone call.
++
++2005-02-01 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/config/cf/X11.tmpl
++ Bugzilla #2410 (https://bugs.freedesktop.org/show_bug.cgi?id=2410)
++ attachment #1782 (https://bugs.freedesktop.org/attachment.cgi?id=1782):
++ Build the XRX plugin only if the system supports shared libraries
++ (which is a requirement for this plugin).
++ Patch by Matthieu Herrb <matthieu.herrb@laas.fr>.
++ Approved in the 2005-01-31 Xorg release-wranglers phone call.
++
++2005-02-01 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/os-support/bsd/bsd_kbd.c
++ Bugzilla #2252 (https://bugs.freedesktop.org/show_bug.cgi?id=2252)
++ attachment #1791 (https://bugs.freedesktop.org/attachment.cgi?id=1791):
++ Fix option dontVTSwitch under *BSD, when XKB is disabled.
++ Patch by Matthieu Herrb <matthieu.herrb@laas.fr>.
++ Approved in the 2005-01-31 Xorg release-wranglers phone call.
++
++2005-02-01 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/nls/Compose/pt_BR.UTF-8
++ * xc/nls/XLC_LOCALE/pt_BR.UTF-8
++ Bugzilla #2400 (https://bugs.freedesktop.org/show_bug.cgi?id=2400)
++ attachment #1762 (https://bugs.freedesktop.org/attachment.cgi?id=1762):
++ Fix build bustage caused by broken patch for brazillian locale support
++ (see Bugzilla #1896).
++ Patch by Kevin E. Martin <kem@freedesktop.org>.
++ Approved in the 2005-01-31 Xorg release-wranglers phone call.
++
++2005-01-25 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/config/cf/xorgversion.def
++ Bugzilla #2378 (https://bugs.freedesktop.org/show_bug.cgi?id=2378)
++ attachment #1747 (https://bugs.freedesktop.org/attachment.cgi?id=1747):
++ Bump version number for upcoming X11R6.8.2rc3 (release canidate 3) to
++ X11R6.8.1.903.
++
++2005-01-24 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/drivers/ati/radeon.h
++ * xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_render.c
++ Bugzilla #1424 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1424)
++ attachment #1209 (https://bugs.freedesktop.org/attachment.cgi?id=1209):
++ Fix problems with RENDER extension accerlation on R100 cards (via
++ pre-rendering small texture).
++ Patch by Matthias Hopf <mhopf@suse.de>.
++
++2005-01-24 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/common/xf86pciBus.c
++ Bugzilla #2322 (https://freedesktop.org/bugzilla/show_bug.cgi?id=2322)
++ attachment #1709 (https://bugs.freedesktop.org/attachment.cgi?id=1709):
++ Fix corruption of PCI config BAR1 of native PCI-Express boards
++ on 64-bit platforms.
++ Patch by Michael Yaroslavtsev <mike.work@besm6.org>.
++
++2005-01-24 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/nls/compose.dir
++ * xc/nls/locale.dir
++ * xc/nls/Compose/Imakefile
++ * xc/nls/Compose/pt_BR.UTF-8
++ * xc/nls/XI18N_OBJS/Imakefile
++ * xc/nls/XI18N_OBJS/pt_BR.UTF-8
++ * xc/nls/XLC_LOCALE/Imakefile
++ * xc/nls/XLC_LOCALE/pt_BR.UTF-8
++ * xc/programs/Xserver/XpConfig/Imakefile
++ Bugzilla #1896 (https://bugs.freedesktop.org/show_bug.cgi?id=1896)
++ attachment #1675 (https://bugs.freedesktop.org/attachment.cgi?id=1675):
++ Add support for pt_BR.UTF-8 locale.
++ Patch by Gustavo Noronha Silva, Branden Robinson, Julien Lafon.
++
++2005-01-24 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/lib/font/util/Imakefile
++ * xc/lib/font/util/utilbitmap.c
++ Bugzilla #1804 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1804)
++ attachment #1269 (https://bugs.freedesktop.org/attachment.cgi?id=1269):
++ Fix build failure (caused by missing symbols such as |TwoByteSwap|)
++ when linking the FreeType module and the FreeType library both
++ statically info the Xserver.
++
++2005-01-24 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_ioctl.c
++ Bugzilla #2361 (https://bugs.freedesktop.org/show_bug.cgi?id=2361)
++ attachment #1739 (https://bugs.freedesktop.org/attachment.cgi?id=1739):
++ Fix radeon m7 driver lock-ups on glxgears&co.
++ Patch by Dave Airlie <airlied@freedesktop.org>.
++
++2005-01-24 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/drivers/i810/i810_dri.c
++ Bugzilla #2329 (https://bugs.freedesktop.org/show_bug.cgi?id=2329)
++ attachment #1717 (https://bugs.freedesktop.org/attachment.cgi?id=1717):
++ Unmap XCursor AGP memory on VT switch to prevent system from lockup.
++ Patch by Matthias Hopf <mhopf@suse.de>.
++
++2005-01-23 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/config/cf/X11.tmpl
++ * xc/programs/Imakefile
++ * xc/programs/xrx/Imakefile
++ * xc/programs/xrx/plugin/Imakefile
++ * xc/programs/xrx/plugin/Main.c
++ * xc/programs/xrx/plugin/PProcess.c
++ * xc/programs/xrx/xnest-plugin/Imakefile
++ * xc/programs/xrx/xnest-plugin/NewNDest.c
++ * xc/programs/xrx/xnest-plugin/SetWin.c
++ * xc/programs/xrx/xnest-plugin/XnestDis.c
++ Bugzilla #1372 (https://bugs.freedesktop.org/show_bug.cgi?id=1372)
++ attachment #932 (https://bugs.freedesktop.org/attachment.cgi?id=932)
++ and
++ attachment #1105 (https://bugs.freedesktop.org/attachment.cgi?id=1105)
++ Repairing XRX/Broadway support.
++ This patch fixes both the libxrx.so plugin and the Xnest-based
++ libxrxnest.so plugin and making them compatible to newer versions
++ of Mozilla and removing the backwards compatibility hacks for old
++ Netscape3.x versions with statically linked Motif.
++
++2005-01-23 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/Xprint/spooler.c
++ Bugzilla #2167 (https://bugs.freedesktop.org/show_bug.cgi?id=2167)
++ attachment #1641 (https://bugs.freedesktop.org/attachment.cgi?id=1641):
++ Fix broken Solaris print queue enumeration.
++
++2005-01-23 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/Xprint/Util.c
++ * xc/programs/Xserver/Xprint/attributes.c
++ * xc/programs/Xserver/Xprint/attributes.h
++ * xc/programs/Xserver/Xprint/ps/Ps.h
++ Bugzilla #2254 (https://bugs.freedesktop.org/show_bug.cgi?id=2254)
++ attachment #1654 (https://bugs.freedesktop.org/attachment.cgi?id=1654)
++ and
++ attachment #1659 (https://bugs.freedesktop.org/attachment.cgi?id=1659)
++ Fix for gcc4.0 build failure (including removing |ExecCommand()| -
++ the function has no consumer and can safely be removed).
++ Patch by Egbert Eich <eich@freedesktop.org> and Roland Mainz
++ <roland.mainz@nrubsig.org>.
++
++2005-01-23 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/Xprint/etc/init.d/xprint.cpp
++ Bugzilla #2240 (https://bugs.freedesktop.org/show_bug.cgi?id=2240)
++ attachment #1642 (https://bugs.freedesktop.org/attachment.cgi?id=1642):
++ Fix incorrect usage of /usr/bin/tr in startup script (the used
++ "[\n]" is neither correct or portable, using "\n" seems to be
++ sufficient (this fixes various "random" issues, including
++ including Debian bug #258419 and Debian bug #264983).
++ Patch by Drew Parsons <dparsons@debian.org>.
++
++2005-01-23 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/config/cf/xorg.cf
++ Bugzilla #2264 (https://bugs.freedesktop.org/show_bug.cgi?id=2264)
++ attachment #1665 (https://bugs.freedesktop.org/attachment.cgi?id=1665):
++ - Don't build tdfx DRI driver on any platform but x86 and AXP
++ as therequired Glide3 lib is only available there (if at all).
++ - Readability fixes.
++ Patch by Egbert Eich <eich@freedesktop.org>.
++
++2005-01-23 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/config/cf/xorg.cf
++ Bugzilla #2215 (https://bugs.freedesktop.org/show_bug.cgi?id=2215)
++ attachment #1658 (https://bugs.freedesktop.org/attachment.cgi?id=1658):
++ Add i810 driver for AMD64.
++ Patch by Kristian Høgsberg <krh@bitplanet.net>.
++
++2005-01-23 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/config/cf/xorg.cf
++ Bugzilla #2215 (https://bugs.freedesktop.org/show_bug.cgi?id=2215)
++ attachment #1629 (https://bugs.freedesktop.org/attachment.cgi?id=1629):
++ Cleanup and enhancements in xc/config/cf/xorg.cf
++ Patch by Egbert Eich <eich@freedesktop.org>.
++
++2005-01-23 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/drivers/chips/chips.man
++ Bugzilla #2261 (https://bugs.freedesktop.org/show_bug.cgi?id=2261)
++ attachment #1666 (https://bugs.freedesktop.org/attachment.cgi?id=1666):
++ Update manual page to explain the FpMode option.
++ Patch by Egbert Eich <eich@freedesktop.org>.
++
++2005-01-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/config/cf/xorgversion.def
++ Bugzilla #2272 (https://bugs.freedesktop.org/show_bug.cgi?id=2272)
++ attachment #1672 (https://bugs.freedesktop.org/attachment.cgi?id=1672):
++ Bump version number for upcoming X11R6.8.2rc2 (release canidate 2) to
++ X11R6.8.1.902.
++
++2005-01-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xwin/ChangeLog
++ * xc/programs/Xserver/hw/xwin/winkeybd.h
++ * xc/programs/Xserver/hw/xwin/winkeyhook.c
++ * xc/programs/Xserver/hw/xwin/winmultiwindowclass.c
++ * xc/programs/Xserver/hw/xwin/winmultiwindowwindow.c
++ * xc/programs/Xserver/hw/xwin/winmultiwindowwm.c
++ * xc/programs/Xserver/hw/xwin/winwndproc.c
++ Bugzilla #1831 (https://bugs.freedesktop.org/show_bug.cgi?id=1831)
++ attachment #1656 (https://bugs.freedesktop.org/attachment.cgi?id=1656):
++ CGYWIN update, including the following fixes:
++ - Make keyhook feature work in multiwindowmode too
++ - Hook windows keys
++ - Fix crash with non-nullterminated strings (reported by Øyvind Harboe)
++ - From Bug #1945: Stop unnecessary reordering.
++ Patch by Alexander Gottwald and Kensuke Matsuzaki.
++
++2005-01-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/config/cf/sun.cf
++ * xc/programs/Xserver/hw/xfree86/os-support/sunos/Imakefile
++ * xc/programs/Xserver/hw/xfree86/os-support/sunos/solaris-sparcv8plus.S
++ Bugzilla #2096 (https://bugs.freedesktop.org/show_bug.cgi?id=2096)
++ attachment #1565 (https://bugs.freedesktop.org/attachment.cgi?id=1565):
++ Fix Solaris/SPARC build failure caused by missing assembler code
++ for this platform.
++ Patch by Alan Coopersmith <alan.coopersmith@sun.com>
++
++2005-01-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_tcl.c
++ * xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_swtcl.c
++ * xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_tcl.c
++ Bugzilla #2110 (https://bugs.freedesktop.org/show_bug.cgi?id=2110)
++ attachment #1569 (https://bugs.freedesktop.org/attachment.cgi?id=1569):
++ Fix build bustage in MESA/DRI code with gcc 2.96.
++ Patch by Kevin E. Martin <kem@freedesktop.org>
++
++2005-01-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/common/compiler.h
++ Bugzilla #2114 (https://bugs.freedesktop.org/show_bug.cgi?id=2114)
++ attachment #1576 (https://bugs.freedesktop.org/attachment.cgi?id=1576):
++ Fix build bustage on PPC64 with Linux 2.6.x kernel headers,
++ use system definition of |eieio()|.
++ Originally Gentoo bug #66223.
++ Patch by Tim Yamin and Donnie Berkholz
++
++2005-01-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/ddc/edid.h
++ Bugzilla #1490 (https://bugs.freedesktop.org/show_bug.cgi?id=1490)
++ attachment #1576 (https://bugs.freedesktop.org/attachment.cgi?id=1576):
++ Refix for previous patch (updating to EDID 1.3), this syncs the
++ X11R6.8.x stable branch with todays Xorg trunk.
++ Patch by Jay Cotton <jay.cotton@sun.com>, Alan Coopersmith
++ <alan.coopersmith@sun.com> and Egbert Eich <eich@freedesktop.org>.
++
++2005-01-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/drivers/i810/i830_video.c:
++ Bugzilla #2189 (https://bugs.freedesktop.org/show_bug.cgi?id=2189)
++ attachment #1610 (https://bugs.freedesktop.org/attachment.cgi?id=1610):
++ Fix formatting of XtNextEvent manual page.
++ Patch by Matthieu Herrb <matthieu.herrb@laas.fr>
++
++2005-01-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/drivers/i810/i830_video.c:
++ Bugzilla #1488 (https://bugs.freedesktop.org/show_bug.cgi?id=1488)
++ attachment #1607 (https://bugs.freedesktop.org/attachment.cgi?id=1607):
++ Fix crash on i830 during startup.
++ Patch by Eric Anholt <anholt@FreeBSD.org>
++
++2005-01-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_kbd.c:
++ Bugzilla #2252 (https://bugs.freedesktop.org/show_bug.cgi?id=2252)
++ attachment #1653 (https://bugs.freedesktop.org/attachment.cgi?id=1653):
++ Make option 'DontVTSwitch' work again with kbd driver
++ under Linux.
++ The kbd driver now calls the OS layer to handle special
++ keys. Possibly other special keys and other OSes need to
++ be looked at also.
++ Patch by Egbert Eich <eich@freedesktop.org>.
++
++2005-01-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/xterm/INSTALL
++ * xc/programs/xterm/MANIFEST
++ * xc/programs/xterm/Makefile.in
++ * xc/programs/xterm/Tekproc.c
++ * xc/programs/xterm/VTPrsTbl.c
++ * xc/programs/xterm/VTparse.def
++ * xc/programs/xterm/VTparse.h
++ * xc/programs/xterm/XTerm.ad
++ * xc/programs/xterm/aclocal.m4
++ * xc/programs/xterm/button.c
++ * xc/programs/xterm/charclass.c
++ * xc/programs/xterm/charproc.c
++ * xc/programs/xterm/configure
++ * xc/programs/xterm/configure.in
++ * xc/programs/xterm/ctlseqs.ms
++ * xc/programs/xterm/cursor.c
++ * xc/programs/xterm/doublechr.c
++ * xc/programs/xterm/fontutils.c
++ * xc/programs/xterm/fontutils.h
++ * xc/programs/xterm/input.c
++ * xc/programs/xterm/main.c
++ * xc/programs/xterm/main.h
++ * xc/programs/xterm/menu.c
++ * xc/programs/xterm/menu.h
++ * xc/programs/xterm/misc.c
++ * xc/programs/xterm/os2main.c
++ * xc/programs/xterm/plink.sh
++ * xc/programs/xterm/precompose.c
++ * xc/programs/xterm/print.c
++ * xc/programs/xterm/ptyx.h
++ * xc/programs/xterm/resize.c
++ * xc/programs/xterm/screen.c
++ * xc/programs/xterm/scrollbar.c
++ * xc/programs/xterm/testxmc.c
++ * xc/programs/xterm/trace.c
++ * xc/programs/xterm/util.c
++ * xc/programs/xterm/uxterm
++ * xc/programs/xterm/version.h
++ * xc/programs/xterm/xstrings.c
++ * xc/programs/xterm/xterm.h
++ * xc/programs/xterm/xterm.log.html
++ * xc/programs/xterm/xterm.man
++ * xc/programs/xterm/xterm_io.h
++ * xc/programs/xterm/xtermcfg.hin
++ * xc/programs/xterm/unicode/README
++ * xc/programs/xterm/unicode/make-precompose.sh
++ * xc/programs/xterm/unicode/precompose.c.head
++ Bugzilla #1979 (https://bugs.freedesktop.org/show_bug.cgi?id=1979)
++ attachment #1639 (https://bugs.freedesktop.org/attachment.cgi?id=1639):
++ Update xterm from version #196 to version #197:
++ - modify configure script to remove empty "-DPROJECTROOT="
++ definition which resulted unusable values for luit's default path.
++ - update precompose.c based on Unicode 4.0.1
++ - several minor fixes based on Intel compiler warnings.
++ - change default translations so a BtnDown which is not recognized
++ is simply ignored rather than emitting a bell. That makes it less
++ obtrusive when the user tries to use a mouse which provides more
++ capabilities than the X mouse driver supports, e.g., one with a
++ horizontal scroll wheel (Debian #265133).
++ - note in xterm's manpage that translations is not specific to xterm
++ (Debian #278897).
++ - modify uxterm script to use locale program to verify if the
++ derived locale is installed (Debian #246398).
++ - correct font handling for active icon when in UTF-8 mode (report
++ by Paolo Liberatore).
++ - make active-icon and toolbar configurations work together.
++ - modify the criteria for disowning primary selection. Previously,
++ this happened anytime the cursor was moved before the end of the
++ selection. That would ensure that any insert/delete of char or
++ line, as well as scrolling, would disown the selection. The new
++ criteria change this to checking if the operations would modify
++ the data which is highlighted (Debian #277832).
++ - reimplement DECALN with functions for vt420 rectangles, fixes
++ selection for this case.
++ - implement vt420 rectangle operations.
++ - add parsing, for debug/test of vt220 soft-fonts.
++ - add menu entry, actions and escape sequence to allow
++ enabling/disabling toolbars at runtime.
++ - improve rendering for Xft, allow it to draw non-linedrawing
++ characters such as "pi", which were drawn from internal tables
++ with patch #180 (Freedesktop.org Bugzilla #1260).
++ - add configure option --enable-mini-luit, ifdef'd the mini-luit
++ feature with OPT_MINI_LUIT.
++ - add mini-luit feature, which supports Latin9 directly rather than
++ via luit, provided that Unicode fonts are used (Freedesktop.org
++ Bugzilla #1571, request by Stefan Dirsch, patch by Michael
++ Schroeder).
++ - for Linux, if IUTF8 is defined, e.g., on recent 2.6.x kernels, set
++ the corresponding flag for the slave pty, to enable UTF-8
++ interpretation of backspace in cooked mode (Freedesktop.org
++ Bugzilla #1578, request by Stefan Dirsch).
++ - modify faceSize resource to use a floating-point internal value
++ (adapted from patch by Sam Stephenson).
++ - correct handling selection of tabs over cleared space in UTF-8
++ mode. In this special case, xterm represents the whitespace with a
++ null rather than a space character (Debian #276447).
++ - amend fix for infinite loop from patch #192 to check if there
++ is wrapped text to output in a following iteration (Debian
++ #273202).
++ - fixes ifdef'd with __INTERIX to allow building with Interix
++ (Windows Services for UNIX) 3.5 using the xlibs libraries from
++ freedesktop.org (patch by Min Sik Kim).
++ - amend solution for Debian #252873, #260471 from patch #194 by
++ making the cursor not explicitly colored if only the foreground
++ color is set, and the cursor is on a blank space (Debian #275473).
++ - correct logic for send/receive mode (SRM) with regard to control
++ characters.
++ - fix masking of invisible text in wide-character mode, which did
++ not work for line-drawing characters.
++ - incorporate CF_XOPEN_SOURCE into configure script, replacing
++ CF_GNU_SOURCE.
++ Patch by Thomas Dickey <dickey@radix.net>.
++
++2005-01-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/xf86config/xorgconfig.c:
++ Bugzilla #2211 (https://bugs.freedesktop.org/show_bug.cgi?id=2211)
++ attachment #1627 (https://bugs.freedesktop.org/attachment.cgi?id=1627):
++ xorgconfig default keyboard model outdated (should be pc105,
++ not pc101/pc102).
++ Patch by Alan Coopersmith <alan.coopersmith@sun.com>
++
++2005-01-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/xf86config/xorgconfig.c
++ Bugzilla #2206 (https://bugs.freedesktop.org/show_bug.cgi?id=2206)
++ attachment #1622 (https://bugs.freedesktop.org/attachment.cgi?id=1622):
++ Fix missing return value in xf86config.
++ Patch by Egbert Eich <eich@freedesktop.org>.
++
++2005-01-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/include/Xos.h
++ * xc/include/Xthreads.h
++ Bugzilla #2207 (https://bugs.freedesktop.org/show_bug.cgi?id=2207)
++ attachment #1623 (https://bugs.freedesktop.org/attachment.cgi?id=1623):
++ Replace usag of CPP symbol "linux" with "__linux__" to get the build
++ working with gcc4.0 again.
++ Patch by Egbert Eich <eich@freedesktop.org>.
++
++2005-01-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/Xprint/attributes.c
++ Bugzilla #2205 (https://bugs.freedesktop.org/show_bug.cgi?id=2205)
++ attachment #1621 (https://bugs.freedesktop.org/attachment.cgi?id=1621):
++ Fix missing return value in Xprint's resource handling.
++ Patch by Egbert Eich <eich@freedesktop.org>.
++
++2004-12-16 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/config/cf/xorgversion.def
++ Bugzilla #2086 (https://bugs.freedesktop.org/show_bug.cgi?id=2086)
++ attachment #1557 (https://bugs.freedesktop.org/attachment.cgi?id=1557):
++ Bump version number for upcoming X11R6.8.2rc1 (release canidate 1) to
++ X11R6.8.1.901.
++
++2004-12-16 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/common/xf86Init.c
++ Bugzilla #2086 (https://bugs.freedesktop.org/show_bug.cgi?id=2086)
++ attachment #1556 (https://bugs.freedesktop.org/attachment.cgi?id=1556):
++ Fix problems with printing the release candidate version
++ number for point releases.
++ Patch by Kevin E. Martin <kem@freedesktop.org>
++
++2004-12-16 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/ddc/edid.h
++ * xc/programs/Xserver/hw/xfree86/ddc/interpret_edid.c
++ * xc/programs/Xserver/hw/xfree86/ddc/print_edid.c
++ Bugzilla #1490 (https://bugs.freedesktop.org/show_bug.cgi?id=1490)
++ attachment #1122 (https://bugs.freedesktop.org/attachment.cgi?id=1122):
++ Updating to EDID 1.3.
++ Patch by Jay Cotton <jay.cotton@sun.com> and Egbert Eich
++ <eich@freedesktop.org>.
++
++2004-12-16 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/lib/Xpm/Imakefile
++ * xc/extras/Xpm/lib/Attrib.c
++ * xc/extras/Xpm/lib/CrBufFrI.c
++ * xc/extras/Xpm/lib/CrDatFrI.c
++ * xc/extras/Xpm/lib/RdFToBuf.c
++ * xc/extras/Xpm/lib/RdFToI.c
++ * xc/extras/Xpm/lib/WrFFrBuf.c
++ * xc/extras/Xpm/lib/WrFFrI.c
++ * xc/extras/Xpm/lib/XpmI.h
++ * xc/extras/Xpm/lib/create.c
++ * xc/extras/Xpm/lib/data.c
++ * xc/extras/Xpm/lib/hashtab.c
++ * xc/extras/Xpm/lib/misc.c
++ * xc/extras/Xpm/lib/parse.c
++ * xc/extras/Xpm/lib/scan.c
++ Bugzilla #1920 (https://bugs.freedesktop.org/show_bug.cgi?id=1920)
++ attachment #1514 (https://bugs.freedesktop.org/attachment.cgi?id=1514):
++ libXpm security fixes for CAN-2004-0914.
++ Patch by Thomas Biege.
++
++2004-12-16 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/os-support/bus/460gxPCI.c
++ Bugzilla #1383 (https://bugs.freedesktop.org/show_bug.cgi?id=1383)
++ attachment #902 (https://bugs.freedesktop.org/attachment.cgi?id=902):
++ Fix typo in PCI code for Intel 460gx in X server, which causes a SEGV.
++ Patch by H.J.Lu <hongjiu.lu@intel.com>
++
++2004-12-16 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/fb/fbwindow.c
++ * xc/programs/Xserver/hw/xfree86/xaa/xaaWrapper.c
++ * xc/programs/Xserver/mi/micmap.c
++ Bugzilla #1912 (https://bugs.freedesktop.org/show_bug.cgi?id=1220)
++ attachment #980 (https://bugs.freedesktop.org/attachment.cgi?id=980):
++ Fix (scrolling) performance problems caused by PseudoColor emulation layer.
++ Patch by Egbert Eich <eich@freedesktop.org>
++
++2004-12-16 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c
++ Bugzilla #1912 (https://bugs.freedesktop.org/show_bug.cgi?id=1220)
++ attachment #980 (https://bugs.freedesktop.org/attachment.cgi?id=980):
++ Fix garbage screen on radeon cards which may appear after a system
++ suspend/resume cycle.
++ Patch by Matthias Hopf <mhopf@suse.de>
++
++2004-12-16 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c
++ * xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_reg.h
++ Bugzilla #1912 (https://bugs.freedesktop.org/show_bug.cgi?id=1912)
++ attachment #1433 (https://bugs.freedesktop.org/attachment.cgi?id=1433):
++ Fix hard lockup on Radeon 7000 + SMP due dynamic clock.
++ Patch by Alex Deucher <agd5f@yahoo.com>.
++
++2004-12-16 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c:
++ Bugzilla #1890 (https://bugs.freedesktop.org/show_bug.cgi?id=1890)
++ attachment #1331 (https://bugs.freedesktop.org/attachment.cgi?id=1331):
++ Apply Debian patch to re-POST via VBE if driver thinks it has no
++ video memory (a symptom of incompletely coming up from D3 power
++ state), which fixes some Dell laptops
++ This enables resume from suspend level S3 by asking the Radeon chip if it
++ thinks it has no memory. If so, the card is re-POSTed via the int10
++ interface. Reportedly enables the driver to work for this type of
++ suspend/resume cycle on Dell D600 laptops (Dell D800s as well, if the video
++ BIOS is patched to 4.28.20.31.C1 or later). See Debian Bug #234575.
++ This patch by Emmanuel Thome and Ole Rohne.
++
++2004-12-15 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/input/keyboard/kbd.c
++ Bugzilla #1651 (https://bugs.freedesktop.org/show_bug.cgi?id=1651)
++ attachment #1484 (https://bugs.freedesktop.org/attachment.cgi?id=1484):
++ - set default XkbModel to pc105 (like legacy keyboard driver did)
++ - fix autorepeat
++ Patch by Matthieu Herrb and Petter Urkedal
++
++2004-12-15 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c
++ Bugzilla #1881 (https://bugs.freedesktop.org/show_bug.cgi?id=1881)
++ attachment #1322 (https://bugs.freedesktop.org/attachment.cgi?id=1322):
++ Fix typo in radeon driver
++ Patch by Daniel Stone <daniel@freedesktop.org>
++
++2004-12-15 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_bios.c
++ * xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c
++ Bugzilla #1559 (https://bugs.freedesktop.org/show_bug.cgi?id=1559)
++ attachment #1133 (https://bugs.freedesktop.org/attachment.cgi?id=1133):
++ Fix display detection regression on Radeon Mobile.
++ Patch by HUI YU <hyu@ati.com>
++
++2004-12-15 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c
++ Bugzilla #1306 (https://bugs.freedesktop.org/show_bug.cgi?id=1306)
++ attachment #1292 (https://bugs.freedesktop.org/attachment.cgi?id=1292):
++
++ This patch should work around the panel timing params not being initialized.
++ Here's the problem:
++
++ Previously, the PanelXRes and PanelYRes were either read from the BIOS or were
++ left as 0 (if no BIOS was detected). Then, in RADEONUpdatePanelSize(), the max
++ panel size was found and the timing parameters were initialized, which worked
++ fine for this ppc system.
++
++ Now, the PanelXRes and PanelYRes are either read from the BIOS or are read from
++ the registers. Note that the other timing parameters (in particular the
++ DotClock) are not initialized when reading from the registers. Then, when
++ RADEONUpdatePanelSize() is called, the max panel size is already set, so none
++ of the other timing parameters are initialized here either (or anywhere else
++ for that matter), which appears to be why the new code fails for this ppc
++ system.
++
++ The patch changes the test from < to <= in RADEONUpdatePanelSize() and then
++ tests to make sure that only the first set of timings for the panel size read
++ from the registers will be used -- this mimics the way the previous code
++ worked. The only problem with this code occurs when the registers hold invalid
++ panel size params, which do not match any of the monitor's DDC info. This
++ should never happen; however, if it does, then the only solution in this case
++ is to explicitly set the panel size in the config file.
++
++ Patch by Kevin E. Martin <kem@freedesktop.org>
++
++2004-12-15 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c
++ Bugzilla #1306 (https://bugs.freedesktop.org/show_bug.cgi?id=1306)
++ attachment #1291 (https://bugs.freedesktop.org/attachment.cgi?id=1291):
++ Fix SEGV in "radeon" driver.
++ Patch by Kevin E. Martin <kem@freedesktop.org>
++
++2004-12-15 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_dac.c
++ * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_driver.c
++ * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_hw.c
++ * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_setup.c
++ * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_type.h
++ Bugzilla #1985 (https://bugs.freedesktop.org/show_bug.cgi?id=1985)
++ attachment #1504 (https://bugs.freedesktop.org/attachment.cgi?id=1504)
++ sync to 12/08/04 version of Nvidia driver from Mark Vojkovich,
++ including these fixes since last sync:
++ Fix some DAC/Graphics memory contention issues on newer
++ NVIDIA chips (specifically, NV40).
++ More PCI IDs.
++ Also, I've had trouble getting some panels to work
++ automagically so I expose an FPTweak option to let the user
++ adjust a troublesome register.
++
++2004-12-15 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/drivers/nsc/nsc_gx1_video.c
++ * xc/programs/Xserver/hw/xfree86/drivers/nsc/nsc_gx2_video.c
++ Bug #1937 (https://bugs.freedesktop.org/show_bug.cgi?id=1937)
++ attachment #1396 (https://bugs.freedesktop.org/attachment.cgi?id=1396):
++ XV support doesn't depend on 2D acceleration any more. This patch
++ removes this limitation from the NSC driver. This is a patch that
++ I have committed to XFree86 a while ago but never ported over to
++ X.Org.
++ Patch by Egbert Eich <eich@freedesktop.org> and Matthieu
++ Herrb <matthieu.herrb@laas.fr>
++
++2004-12-15 Alexander Gottwald <ago@freedesktop.org>
++ * xc/programs/Xserver/Imakefile
++ * xc/programs/Xserver/hw/xwin/ChangeLog
++ * xc/programs/Xserver/hw/xwin/Imakefile
++ * xc/programs/Xserver/hw/xwin/InitOutput.c
++ * xc/programs/Xserver/hw/xwin/XWin.rc
++ * xc/programs/Xserver/hw/xwin/win.h
++ * xc/programs/Xserver/hw/xwin/winclipboardthread.c
++ * xc/programs/Xserver/hw/xwin/winclipboardwndproc.c
++ * xc/programs/Xserver/hw/xwin/winclipboardxevents.c
++ * xc/programs/Xserver/hw/xwin/winconfig.c
++ * xc/programs/Xserver/hw/xwin/wincreatewnd.c
++ * xc/programs/Xserver/hw/xwin/winmessages.h
++ * xc/programs/Xserver/hw/xwin/winmouse.c
++ * xc/programs/Xserver/hw/xwin/winmultiwindowwm.c
++ * xc/programs/Xserver/hw/xwin/winmultiwindowwndproc.c
++ * xc/programs/Xserver/hw/xwin/winprocarg.c
++ * xc/programs/Xserver/hw/xwin/winresource.h
++ * xc/programs/Xserver/hw/xwin/winshadddnl.c
++ * xc/programs/Xserver/hw/xwin/winwin32rootlesswndproc.c
++ * xc/programs/Xserver/hw/xwin/winwndproc.c
++ Bug #1831 (https://bugs.freedesktop.org/show_bug.cgi?id=1831)
++ attachment #1547 (https://bugs.freedesktop.org/attachment.cgi?id=1547)
++ attachment #1548 (https://bugs.freedesktop.org/attachment.cgi?id=1548):
++ Cygwin/X patches since 6.8.1, including:
++ - Support for placing the mainwindow by coordinates and monitor
++ - Setting default cursor in multiwindow mode
++ - Added keyboardlayout "French (Switzerland)"
++ - Fixed crashes after switching videomodes
++ - Added support for reading the fontpath from /etc/X11/font-dirs
++ - Make -multiplemonitors for multiwindow modes
++ - Added support for mice with more than 3 buttons
++ - Fixed another clipboard bug with Unicode applications
++
++2004-12-15 Egbert Eich <eich-at-freedesktop-org>
++
++ * programs/Xserver/hw/xfree86/os-support/bus/460gxPCI.c:
++ (xorgProbe460GX), (xf86PreScan460GX):
++ * programs/Xserver/hw/xfree86/os-support/bus/460gxPCI.h:
++ * programs/Xserver/hw/xfree86/os-support/bus/Imakefile:
++ * programs/Xserver/hw/xfree86/os-support/bus/e8870PCI.c:
++ (xorgProbeE8870), (xf86PreScanE8870):
++ * programs/Xserver/hw/xfree86/os-support/bus/e8870PCI.h:
++ * programs/Xserver/hw/xfree86/os-support/bus/ia64Pci.c:
++ * programs/Xserver/hw/xfree86/os-support/bus/zx1PCI.c:
++ (xf86PreScanZX1):
++ * programs/Xserver/hw/xfree86/os-support/bus/zx1PCI.h:
++ * programs/Xserver/hw/xfree86/os-support/linux/Imakefile:
++ * programs/Xserver/hw/xfree86/os-support/linux/lnx_ia64.c:
++ (OS_PROBE_PCI_CHIPSET):
++ * programs/Xserver/hw/xfree86/os-support/shared/ia64Pci.c:
++ (ia64ScanPCIWrapper):
++ * programs/Xserver/hw/xfree86/os-support/shared/ia64Pci.h:
++ Adding support for OS dependent probing of IA64 chipsets.
++ Not all IA64 chipsets can be probed without OS support as
++ probing them is only possible using ACPI. One example of
++ this are the HP ZX1/2 chipsets: previously the code assumed
++ that these chips were present when no other of the known
++ chipsets could be probed. This assumption brought SGI Altrix
++ machines with 64 CPUs to a grinding halt.
++
++2004-12-14 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/drivers/i810/common.h
++ * xc/programs/Xserver/hw/xfree86/drivers/i810/i810.h
++ * xc/programs/Xserver/hw/xfree86/drivers/i810/i810_accel.c
++ * xc/programs/Xserver/hw/xfree86/drivers/i810/i810_dri.c
++ * xc/programs/Xserver/hw/xfree86/drivers/i810/i810_driver.c
++ * xc/programs/Xserver/hw/xfree86/drivers/i810/i810_memory.c
++ * xc/programs/Xserver/hw/xfree86/drivers/i810/i810_reg.h
++ * xc/programs/Xserver/hw/xfree86/drivers/i810/i830.h
++ * xc/programs/Xserver/hw/xfree86/drivers/i810/i830_driver.c
++ * xc/programs/Xserver/hw/xfree86/drivers/i810/i830_memory.c
++ Bug #1944 (https://bugs.freedesktop.org/show_bug.cgi?id=1944)
++ attachment #1403 (https://bugs.freedesktop.org/attachment.cgi?id=1403):
++ Various I8xx driver fixes, including:
++ - Fixed server crash on reset when a structure allocated in
++ PreInit() was freed on CloseScreen().
++ - Fixed ring buffer lock ups that happened because the structure
++ that contained ringbuffer data was not zeroed after allocation.
++ - Fixed numerous warnings due to signed unsigned comparisons.
++
++2004-12-14 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/drivers/ati/r128_accel.c:
++ Bug #1889 (https://bugs.freedesktop.org/show_bug.cgi?id=1889)
++ attachment #1330 (https://bugs.freedesktop.org/attachment.cgi?id=1330):
++ Retry CCE idle commands until the (higher) timeout is reached, and
++ properly stop the engine if we totally fail -- gets rid of serious
++ performance issues and lockups with r128 DRI (see also Debian bug
++ reports #223089, #236187, #236373, #243436).
++ Patch by Daniel Jacobowitz.
++
++2004-12-14 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/drivers/ati/r128_driver.c
++ * xc/programs/Xserver/hw/xfree86/drivers/ati/r128_video.c
++ Bug #1888 (https://bugs.freedesktop.org/show_bug.cgi?id=1888)
++ attachment #1329 (https://bugs.freedesktop.org/attachment.cgi?id=1329):
++ Allow pitches with a granularity of 32, rather than 64, because some
++ clamshell iBooks have 800-byte pitches. Change Xv allocation
++ granularity to 8 bytes, rather than 16 bytes, also (see Debian
++ #148775).
++ Patch by Branden Robinson and Dagfinn Ilmari Mannsåker.
++
++2004-12-14 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/drivers/ati/r128_dri.c
++ Bug #1886 (https://bugs.freedesktop.org/show_bug.cgi?id=1886)
++ attachment #1327 (https://bugs.freedesktop.org/attachment.cgi?id=1327):
++ Disable interrupt handling after the DRM handler has been removed,
++ preventing lockups.
++ Patch by Daniel Stone <daniel@freedesktop.org>
++
++2004-12-14 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/drivers/ati/Imakefile
++ * xc/programs/Xserver/hw/xfree86/drivers/ati/atiprobe.c
++ Bug #1962 (https://bugs.freedesktop.org/show_bug.cgi?id=1962)
++ attachment #1423 (https://bugs.freedesktop.org/attachment.cgi?id=1423):
++ Avoid PIO access on IA64. Some IA64 machine check if legacy ports
++ outside the VGA range are accessed. The ATi driver however does
++ this to probe for ISA Mach8/32/64.
++ Since no IA64 has ISA slots this restriction should not be
++ relevant to the user.
++ Patch by Egbert Eich <eich@freedesktop.org>
++
++2004-12-14 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/drivers/ati/atiprobe.c
++ Bug #1928 (https://bugs.freedesktop.org/show_bug.cgi?id=1928)
++ attachment #1387 (https://bugs.freedesktop.org/attachment.cgi?id=1387):
++ Added some early bailouts to atiprobe if PCI structure pointer is
++ NULL to prevent sig11.
++ Patch by Egbert Eich <eich@freedesktop.org>
++
++2004-12-14 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/drivers/ati/atipreinit.c
++ * xc/programs/Xserver/hw/xfree86/drivers/ati/ativga.c
++ Bug #591 (https://bugs.freedesktop.org/show_bug.cgi?id=591)
++ attachment #308 (https://bugs.freedesktop.org/attachment.cgi?id=308):
++ Fix video timing problems with Sony PCG-C1VN Vaio Picturebook notebook
++ && co.
++ Patch by Marc Aurele La France
++
++2004-12-14 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/doc/man/general/Imakefile
++ * xc/doc/man/general/Xprint.html
++ * xc/doc/man/general/Xprint.man
++ * xc/doc/man/general/Xprint.sgml
++ * xc/programs/Xserver/Xprint/Imakefile
++ * xc/programs/Xserver/Xprint/Xprint.html
++ * xc/programs/Xserver/Xprint/Xprint.man
++ * xc/programs/Xserver/Xprint/Xprint.sgml
++ * xc/programs/Xserver/Xprint/Xprt.html
++ * xc/programs/Xserver/Xprint/Xprt.man
++ * xc/programs/Xserver/Xprint/Xprt.sgml
++ Bug #811 (https://bugs.freedesktop.org/show_bug.cgi?id=811)
++ attachment #1374 (https://bugs.freedesktop.org/attachment.cgi?id=1374),
++ attachment #1379 (https://bugs.freedesktop.org/attachment.cgi?id=1379),
++ attachment #1431 (https://bugs.freedesktop.org/attachment.cgi?id=1431):
++ Add the missing manual page for the Xprt server (and move the Xprint(7)
++ to it's correct location).
++ Authors: Alan Coopersmith, Giuseppe Ghibò, Thomas Gilg, Jay Hobson,
++ Julien Lafon, Masaki Katakai, Roland Mainz, Simon Montagu, Drew Parsons.
++
++2004-12-14 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/doc/man/X11/XGetWProp.man
++ Bug #2056 (https://bugs.freedesktop.org/show_bug.cgi?id=2056)
++ attachment #1515 (https://bugs.freedesktop.org/attachment.cgi?id=1515):
++ Fix the missing XChangeProperty() prototype in man page's
++ synopsis section.
++ Patch by Matthieu Herrb <matthieu.herrb@laas.fr>
++
++2004-12-14 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/config/docbook/docbookconv.sh
++ * xc/doc/hardcopy/XPRINT/Xprint_FAQ.html
++ * xc/doc/hardcopy/XPRINT/Xprint_FAQ.txt
++ * xc/doc/hardcopy/XPRINT/Xprint_FAQ.xml
++ * xc/programs/Xserver/Xprint/Xprint.html
++ * xc/programs/Xserver/Xprint/Xprint.man
++ * xc/programs/Xserver/Xprint/Xprint.sgml
++ * xc/programs/xlsfonts/xlsfonts.man
++ * xc/programs/xlsfonts/xlsfonts.sgml
++ * xc/programs/xphelloworld/xphelloworld/xphelloworld.html
++ * xc/programs/xphelloworld/xphelloworld/xphelloworld.man
++ * xc/programs/xphelloworld/xphelloworld/xphelloworld.sgml
++ * xc/programs/xphelloworld/xpsimplehelloworld/xpsimplehelloworld.html
++ * xc/programs/xphelloworld/xpsimplehelloworld/xpsimplehelloworld.man
++ * xc/programs/xphelloworld/xpsimplehelloworld/xpsimplehelloworld.sgml
++ * xc/programs/xphelloworld/xpxmhelloworld/xpxmhelloworld.html
++ * xc/programs/xphelloworld/xpxmhelloworld/xpxmhelloworld.man
++ * xc/programs/xphelloworld/xpxmhelloworld/xpxmhelloworld.sgml
++ * xc/programs/xphelloworld/xpxthelloworld/xpxthelloworld.html
++ * xc/programs/xphelloworld/xpxthelloworld/xpxthelloworld.man
++ * xc/programs/xphelloworld/xpxthelloworld/xpxthelloworld.sgml
++ * xc/programs/xplsprinters/xplsprinters.html
++ * xc/programs/xplsprinters/xplsprinters.man
++ * xc/programs/xplsprinters/xplsprinters.sgml
++ * xc/programs/xprehashprinterlist/xprehashprinterlist.man
++ * xc/programs/xprehashprinterlist/xprehashprinterlist.sgml
++ Bugzilla #1557 (https://bugs.freedesktop.org/show_bug.cgi?id=1557)
++ attachment #1032 (https://bugs.freedesktop.org/attachment.cgi?id=1391):
++ Update DocBook SGML+XML manual pages and docmentation
++ and the in-tree copies of the generated files (*.man, *.html) to
++ get them properly working with newer versions of the tools within the
++ Xorg tree.
++ Patch by Roland Mainz, Drew Parsons, Julien Lafon, Giuseppe Ghibò
++
++2004-12-14 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/doc/sgml/BUILD.sgml
++ Bug #1932 (https://bugs.freedesktop.org/show_bug.cgi?id=1932)
++ attachment #1391 (https://bugs.freedesktop.org/attachment.cgi?id=1391
++ with typo fixed):
++ Added explanation for DESTDIR to install to a different directory
++ than /.
++ Patch by Egbert Eich <eich@freedesktop.org>
++
++2004-12-14 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/os-support/sunos/Imakefile:
++ Bug #1987 (https://bugs.freedesktop.org/show_bug.cgi?id=1987)
++ attachment #1462 (https://bugs.freedesktop.org/attachment.cgi?id=1462):
++ HAVE_SYSV_IPC should be defined when building libc_wrapper.c on
++ Solaris/SVR4Architecture (otherwise some drivers like those from
++ Nvidia may not work).
++ Patch by Alan Coopersmith <alan.coopersmith@sun.com>
++
++2004-12-14 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/os-support/bus/Pci.c
++ Bug #1965 (https://bugs.freedesktop.org/show_bug.cgi?id=1965)
++ attachment #1425 (https://bugs.freedesktop.org/attachment.cgi?id=1425):
++ Avoid recursive calls of xf86scanpci(). This function normally
++ detects that it has been called before by checking if the PCI
++ structure is filled out. So far if this was not the case
++ (because PCI probing has failed for some reason) the function
++ is traversed again. With the chipset specific PCI bus probing
++ this can lead to an endless recursive loop as the post-probing
++ code calls xf86scanpci() from within this function.
++ Patch by Egbert Eich <eich@freedesktop.org>
++
++2004-12-14 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/os-support/bus/linuxPci.c
++ Bug #1963 (https://bugs.freedesktop.org/show_bug.cgi?id=1963)
++ attachment #1424 (https://bugs.freedesktop.org/attachment.cgi?id=1424):
++ The OS specific PCI code for Linux worked only if bus 0
++ was populated as it checked for the presence of /proc/bus/pci/00.
++ Fixed to check for /proc/bus/pci/<bus_to_look_for> instead.
++ Patch by Egbert Eich <eich@freedesktop.org>
++
++2004-12-14 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/common/xf86Events.c
++ * xc/programs/Xserver/hw/xfree86/common/xf86Init.c
++ Bug #1933 (https://bugs.freedesktop.org/show_bug.cgi?id=1933)
++ attachment #1392 (https://bugs.freedesktop.org/attachment.cgi?id=1392):
++ Improving DPMS handling on VT swich and server
++ termination/abort: previous version called the driver directly and
++ too late.
++ Patch by Egbert Eich <eich@freedesktop.org>
++
++2004-12-14 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/common/xf86Configure.c
++ Bug #1931 (https://bugs.freedesktop.org/show_bug.cgi?id=1931)
++ attachment #1390 (https://bugs.freedesktop.org/attachment.cgi?id=1390):
++ Removing unused DDC sections that caused misinterpretation of
++ DDC data due to a missing break statement in a switch.
++ Patch by Egbert Eich <eich@freedesktop.org>
++
++2004-12-14 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/os-support/bus/ix86Pci.c
++ Bug #1927 (https://bugs.freedesktop.org/show_bug.cgi?id=1927)
++ attachment #1386 (https://bugs.freedesktop.org/attachment.cgi?id=1386):
++ Fixed typo in |ix86PciSelectCfgmech()|: #if <-> #ifdef.
++ Patch by Egbert Eich <eich@freedesktop.org>
++
++2004-12-14 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/Xext/xf86vmode.c
++ Bug #1552 (https://bugs.freedesktop.org/show_bug.cgi?id=1552)
++ attachment #1026 (https://bugs.freedesktop.org/attachment.cgi?id=1026):
++
++ Currently, when a screensaver kicks in, it calls xf86GetModeLine()
++ which causes the Vidmode extension to write out a debugging log
++ message of what the current modeline is. These messages are
++ generally only useful to an X11 developer who is debugging the
++ extension itself, or to an application developer who is developing
++ an application which uses the vidmode extension to get/set the video
++ mode, however they're not very useful for end users.
++
++ The current default Xvidmode verbosity causes the X server to write
++ overly detailed video modeline information to the X server log file
++ whenever any application uses the extension to get, set, or delete
++ modelines. This causes a problem for laptop users on battery power
++ with their hard disks set to power saving mode, because the hard disk
++ will power down, then later the screensaver kicks in, which calls
++ xf86GetModeLine(), which causes the log message to get written out,
++ which causes the hard disk to be powered back up.
++
++ Having these messages off by default solves this problem for laptop
++ users, and seems to make the most sense considering how useful they
++ are in general.
++ By changing the default log level for these messages, developers
++ who need to see these for debugging purposes can increase their X
++ server verbosity level and still see them, so no functionality is lost.
++
++ This patch lowers the default verbosity of the X server's Xvidmode
++ extension log file messages, in order to stop Xvidmode from writing
++ out non-critical log messages to the X server log whenever an
++ application uses this extension.
++
++ Patch by Mike A. Harris <mharris@redhat.com>
++
++2004-12-14 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/config/cf/X11.tmpl
++ * xc/config/cf/cygwin.cf
++ * xc/config/cf/darwin.cf
++ * xc/programs/Xserver/dix/Imakefile
++ * xc/programs/Xserver/miext/damage/Imakefile
++ Bug #1816 (https://bugs.freedesktop.org/show_bug.cgi?id=1816)
++ attachment #1300 (https://bugs.freedesktop.org/attachment.cgi?id=1300):
++ Add BuildRootless Imake variable and ROOTLESS define.
++ Patch by Torrey T. Lyons <torrey@freedesktop.org>
++
++2004-12-14 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/config/cf/cygwin.cf
++ * xc/config/cf/xorg.cf
++ * xc/config/cf/xorgversion.def
++ * xc/config/cf/Imakefile
++ Bug #1393 (https://bugs.freedesktop.org/show_bug.cgi?id=1393)
++ attachment #1188 (https://bugs.freedesktop.org/attachment.cgi?id=1188):
++ Move xorg version numbers to separate config file
++ (xc/config/cf/xorgversion.def).
++ Patch by Alexander Gottwald <ago@freedesktop.org>
++
++2004-12-14 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/lib/GL/mesa/drivers/osmesa/Imakefile
++ Bugzilla #1743 (https://bugs.freedesktop.org/show_bug.cgi?id=1743)
++ attachment #1196 (https://bugs.freedesktop.org/attachment.cgi?id=1196):
++ Fix build failure on Solaris due "ld: fatal:
++ too many symbols require `small' PIC references" via adding
++ |#define LargePICTable YES| to the Imakefile.
++
++2004-12-14 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/xf86cfg/interface.c
++ Bug #1826 (https://bugs.freedesktop.org/show_bug.cgi?id=1826)
++ attachment #1283 (https://bugs.freedesktop.org/attachment.cgi?id=1283):
++ Do not add '-4' to generated default file name (e.g. "xorg.conf"
++ instead of "xorg.conf-4").
++ Patch by Matthieu Herrb <matthieu.herrb@laas.fr>
++
++2004-12-14 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/xkbcomp/symbols/inet
++ Bug #1935 (https://bugs.freedesktop.org/show_bug.cgi?id=1935)
++ attachment #1394 (https://bugs.freedesktop.org/attachment.cgi?id=1394):
++ Changed comment in xkbcomp/symbols/inet to mention xorg (instead of
++ Xfree86).
++ Patch by Egbert Eich <eich@freedesktop.org>
++
++2004-12-14 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/xkbcomp/rules/Imakefile
++ Bug #1929 (https://bugs.freedesktop.org/show_bug.cgi?id=1929)
++ attachment #1388 (https://bugs.freedesktop.org/attachment.cgi?id=1388):
++ Create missing links for backward compatibility to XFree86
++ Patch by Stefan Dirsch <sndirsch@suse.de>.
++
++2004-12-14 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/xkbcomp/symbols/macintosh/us
++ Bug #1872 (https://bugs.freedesktop.org/show_bug.cgi?id=1872)
++ attachment #1315 (https://bugs.freedesktop.org/attachment.cgi?id=1315):
++ Include srvrv_ctrl(xfree86) in macintosh US XKB symbol file so VT
++ switching works again on mac.
++ Patch by Kristian Høgsberg <krh@bitplanet.net>
++
++2004-12-14 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/xdm/resource.c
++ Bug #1825 (https://bugs.freedesktop.org/show_bug.cgi?id=1825)
++ attachment #1282 (https://bugs.freedesktop.org/attachment.cgi?id=1282):
++ Fix typo in prngdSocket resource name in xdm/resource.c.
++ Patch by Matthieu Herrb <matthieu.herrb@laas.fr>
++
++2004-12-14 Adam Jackson <ajax@freedesktop.org>
++ * xc/extras/Mesa/:
++ Bug #2003 (https://bugs.freedesktop.org/show_bug.cgi?id=2003):
++ Merge Mesa 6.2.1.
++ * lib/GL/mesa/drivers/dri/r128/Imakefile.inc:
++ Fix Imakefile for r128 (Sergio Monteiro Basto)
++
++2004-12-14 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/xrx/helper/helper.c
++ Bug #1942 (https://bugs.freedesktop.org/show_bug.cgi?id=1942)
++ attachment #1401 (https://bugs.freedesktop.org/attachment.cgi?id=1401):
++ Fix problems with random return code returned by "xrx".
++ Patch by Egbert Eich <eich@freedesktop.org>
++
++2004-12-14 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/xedit/lisp/lisp.c
++ Bug #1936 (https://bugs.freedesktop.org/show_bug.cgi?id=1936)
++ attachment #1395 (https://bugs.freedesktop.org/attachment.cgi?id=1395):
++ Removed inclusion of unnecessary kernel header on Linux.
++ This may fail in an -ansi environment.
++ Patch by Egbert Eich <eich@freedesktop.org>
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/config/cf/xorgsite.def
++ * xc/config/cf/xprint_site.def
++ Bug #1827 (https://bugs.freedesktop.org/show_bug.cgi?id=1827)
++ attachment #1284 (https://bugs.freedesktop.org/attachment.cgi?id=1284):
++ xf86site.def is referenced in comments in places where
++ xorgsite.def is used
++ Patch by Matthieu Herrb <matthieu.herrb@laas.fr>
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/fonts/bdf/100dpi/Imakefile:
++ * xc/fonts/bdf/75dpi/Imakefile:
++ Bug #1560 (https://bugs.freedesktop.org/show_bug.cgi?id=1560)
++ attachment #1036 (https://bugs.freedesktop.org/attachment.cgi?id=1036):
++ Fix build of lucida fonts which were broken since 6.8.0.
++ Patch by Alexander Gottwald <ago@freedesktop.org>.
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/nls/XLC_LOCALE/en_US.UTF-8
++ Bug #1842 (https://bugs.freedesktop.org/show_bug.cgi?id=1842)
++ attachment #1389 (https://bugs.freedesktop.org/attachment.cgi?id=1298):
++ Move iso10646 last so the "fallback"
++ fonts will actually be used if they are better matches.
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/config/cf/xorgsite.def:
++ Bug 2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/os-support/bsd/bsd_KbdMap.c
++ * xc/programs/Xserver/hw/xfree86/os-support/bsd/bsd_kbd.c
++ Bug #1824 (https://bugs.freedesktop.org/show_bug.cgi?id=1824)
++ attachment #1288 (https://bugs.freedesktop.org/attachment.cgi?id=1288):
++ Fix kbd driver for wskbd protocol and pure wscons console driver
++ Patch by Matthieu Herrb <matthieu.herrb@laas.fr>#1930 (https://bugs.freedesktop.org/show_bug.cgi?id=1930)
++ attachment #1389 (https://bugs.freedesktop.org/attachment.cgi?id=1389):
++ Make Xorg the default server to install.
++ Patch by Egbert Eich <eich@freedesktop.org>
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/os-support/bsd/bsd_KbdMap.c
++ * xc/programs/Xserver/hw/xfree86/os-support/bsd/bsd_kbd.c
++ Bug #1824 (https://bugs.freedesktop.org/show_bug.cgi?id=1824)
++ attachment #1288 (https://bugs.freedesktop.org/attachment.cgi?id=1288):
++ Fix kbd driver for wskbd protocol and pure wscons console driver
++ Patch by Matthieu Herrb <matthieu.herrb@laas.fr>
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/extras/Mesa/src/mesa/drivers/dri/common/dri_util.c
++ * xc/lib/GL/glx/glxext.c
++ Bug #1501 (https://bugs.freedesktop.org/show_bug.cgi?id=1501)
++ attachment #1013 (https://bugs.freedesktop.org/attachment.cgi?id=1013):
++ More complete fix for libglx bugs (double-free etc.).
++ Patch by Egbert Eich and Matthias Hopf.
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/fonts/encodings/Imakefile
++ * xc/fonts/encodings/ascii-0.enc
++ * xc/programs/mkfontscale/mkfontscale.c
++ Bugzilla #1703 (https://bugs.freedesktop.org/show_bug.cgi?id=1703)
++ attachment #1226 (https://bugs.freedesktop.org/attachment.cgi?id=1226):
++ Adding ascii-0 font encoding which helps in
++ cases where a font has all ASCII chars populated but not enougth
++ glyphs to match the requirements for ISO8859-1 (and to add
++ backwards compatibility to ttmkfdir).
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/extras/Mesa/src/mesa/tnl/t_vtx_x86_gcc.S:
++ Bugzilla #1079 (https://bugs.freedesktop.org/show_bug.cgi?id=1079)
++ attachment #636 (https://bugs.freedesktop.org/attachment.cgi?id=636):
++ Add missing check for CYGWIN for adding underscores tosymbol names
++ in assembler. Merged upstream, and should be brought in in
++ the next import.
++ Patch by Alexander Gottwald <ago@freedesktop.org>.
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/xset/Imakefile
++ * xc/programs/xset/xset.c
++ Bugzilla #1659 (https://bugs.freedesktop.org/show_bug.cgi?id=1659)
++ attachment #1120 (https://bugs.freedesktop.org/attachment.cgi?id=1120):
++ Fix Imakefile bug which caused the Xprint support
++ in "xset" not being build.
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/xman/print.c
++ * xc/programs/xmore/print.c
++ * xc/programs/xphelloworld/xpawhelloworld/xpawhelloworld.c
++ Bugzilla #1601 (https://bugs.freedesktop.org/show_bug.cgi?id=1601)
++ attachment #1088 (https://bugs.freedesktop.org/attachment.cgi?id=1088):
++ Fix problems with wrong page counts in xedit&co.
++ when a global "*geometry" resource was overriding the internal
++ geometry management used by XawPrintShell(=usually adjust to
++ current page size, the resource was turning this into a static
++ value).
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/xman/search.c
++ Bugzilla #1481 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1481)
++ attachment #976 (https://bugs.freedesktop.org/attachment.cgi?id=976)
++ Avoid several buffer overflows in xman if search string is too long.
++ Patch by Matthieu Herrb <matthieu.herrb@laas.fr>.
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/Xprint/ps/psout.c
++ Bugzilla #661 (https://freedesktop.org/bugzilla/show_bug.cgi?id=661)
++ attachment #1002 (https://bugs.freedesktop.org/attachment.cgi?id=1002):
++ Xprt producing spurious characters in PS
++ output when using the bitmap cache (Originally reported
++ against Solaris Xprt as Sun bug id #4369307, and
++ fixed in Solaris by Jay Hobson <jay.hobson@sun.com>).
++ Patch by Jay Hobson <jay.hobson@sun.com>.
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/Xprint/ps/PsInit.c
++ Bugzilla #1800 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1800)
++ attachment #1474 (https://bugs.freedesktop.org/attachment.cgi?id=1474):
++ Fix Postscript DDX's 1bit StaticGray visual to report only 1bit
++ of significant bits in color specification (instead of 8bits).
++ Patch by Julien Lafon <julien.lafon@gmail.com>
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/config/cf/xprint_site.def
++ * xc/programs/Xserver/Xprint/ps/Ps.h
++ * xc/programs/Xserver/Xprint/ps/PsPixmap.c
++ * xc/programs/Xserver/Xprint/ps/PsPolygon.c
++ * xc/programs/Xserver/mi/miinitext.c
++ Bugzilla #1664 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1664)
++ attachment #1161 (https://bugs.freedesktop.org/attachment.cgi?id=1161):
++ RFE: Add support for the DOUBLE-BUFFER extension
++ to the Xprint server and DDX. Additionally a "pixmap-scrubber"
++ optimisation is added to the PostScript DDX to remove all content
++ from a vector pixmap when a |PolyFillRect()| call covers the whole
++ pixmap surface with a solid fill (this avoids that a backbuffer
++ vector pixmap gets constantly filled even when the content is
++ not visible anymore after |XdbeSwapBuffers()| has cleared the
++ hidden buffer with the background color).
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/Xprint/attributes.c
++ Bugzilla #1647 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1647)
++ attachment #1117 (https://bugs.freedesktop.org/attachment.cgi?id=1117):
++ Fix the problem that |XpSubmitJob()| returns
++ a random value (patch by Stefan Dirsch/SuSE).
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/Xprint/ps/PsColor.c
++ Bugzilla #1646 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1646)
++ attachment #1116 (https://bugs.freedesktop.org/attachment.cgi?id=1116):
++ Fix the problem that |PsCreateColormap()| returns
++ a random value (patch by Stefan Dirsch/SuSE).
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/Xprint/Oid.c
++ Bugzilla #1637 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1637)
++ attachment #1114 (https://bugs.freedesktop.org/attachment.cgi?id=1114):
++ Fix problems in oid code which may cause the
++ usage of an invalid string pointer (original patch by Egbert Eich).
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/xlsfonts/Imakefile
++ * xc/programs/xlsfonts/xlsfonts.c
++ * xc/programs/xlsfonts/xlsfonts.man
++ * xc/programs/xlsfonts/xlsfonts.sgml
++ * xc/programs/xplsprinters/xplsprinters.html
++ * xc/programs/xplsprinters/xplsprinters.man
++ * xc/programs/xplsprinters/xplsprinters.sgml
++ Bugzilla #1551 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1551)
++ attachment #1025 (https://bugs.freedesktop.org/attachment.cgi?id=1025):
++ Convert "xlsfonts" manual page to DocBook
++ format (and document the new functionality introduced
++ with bug #1518).
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/xlsfonts/Imakefile
++ * xc/programs/xlsfonts/dsimple.c
++ * xc/programs/xlsfonts/dsimple.h
++ * xc/programs/xlsfonts/xlsfonts.c
++ Bugzilla #1518 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1518)
++ attachment #1022 (https://bugs.freedesktop.org/attachment.cgi?id=1022):
++ Add filter support to "xlsfonts" that it can
++ filter builtin-, glyph- and/or other kinds of printer fonts
++ (controlled by the xp-listfonts-modes attribute as described
++ in the CDE DtPrint and Xprint specifications).
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/Xprint/pcl/PclInit.c
++ * xc/programs/Xserver/Xprint/ps/PsInit.c
++ Bugzilla #1629 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1629)
++ attachment #1107 (https://bugs.freedesktop.org/attachment.cgi?id=1107):
++ Fix crash on AMD64, regression caused by bug
++ 1496 ("Xorg Xprt does not support "*xp-listfonts-mode:
++ xp-list-internal-printer-fonts" to toggle the usage of
++ printer-builtin fonts").
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/Xprint/Init.c
++ * xc/programs/Xserver/Xprint/pcl/PclInit.c
++ * xc/programs/Xserver/Xprint/ps/PsInit.c
++ Bugzilla #1496 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1496)
++ attachment #998 (https://bugs.freedesktop.org/attachment.cgi?id=998):
++ Fixed Xprt font handling which did not support
++ "*xp-listfonts-modes: xp-list-internal-printer-fonts" or
++ "*xp-listfonts-modes: xp-list-glyph-fonts" to toggle
++ the usage of printer-builtin and glyph fonts in XListFonts*(),
++ XLoad*Font(), etc.
++ Additionally the Xprint DDX now explicitly list "xp-listfonts-modes"
++ in "document-attributes-supported" (for document-level) or
++ "xp-page-attributes-supported" (for page-level) when the DDX implements
++ this feature (as described in the CDE DtPrint and Xprint
++ specifications).
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/Xprint/ps/PsGC.c
++ * xc/programs/Xserver/Xprint/ps/PsPixmap.c
++ Bugzilla #1416 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1416)
++ attachment #994 (https://bugs.freedesktop.org/attachment.cgi?id=994):
++ Fix Xprt PostScript DDX crashes when copying
++ offscreen pixmap content to the same pixmap (the crash can
++ be reproduced with % x11perf -copypixpix500 ... # or the
++ reduced testcase in bug #1416 (attachment #993)).
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/Xprint/Init.c
++ * xc/programs/Xserver/Xprint/ps/Ps.h
++ * xc/programs/Xserver/Xprint/ps/PsArea.c
++ * xc/programs/Xserver/Xprint/ps/PsColor.c
++ * xc/programs/Xserver/Xprint/ps/PsInit.c
++ * xc/programs/Xserver/Xprint/ps/psout.c
++ * xc/programs/Xserver/Xprint/ps/psout.h
++ Bugzilla #1299 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1299)
++ attachment #1001 (https://bugs.freedesktop.org/attachment.cgi?id=1001):
++ Add more visuals to the Postscript DDX (8bit GrayScale/StaticGray,
++ 1bit StaticGray and the basic infratructure for "deep" visuals with more
++ than 8bits per RGB gun).
++ Patch by Roland Mainz <roland.mainz@nrubsig.org>.
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/lib/GL/glx/glxcmds.c
++ Bugzilla #1672 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1672)
++ attachment #1132 (https://bugs.freedesktop.org/attachment.cgi?id=1132):
++ Prevent libGL segfault if server's GLX version is > 1.2.
++ Patch by Adam Jackson <ajax@freedesktop.org>.
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/lib/GL/mesa/Imakefile
++ * xc/lib/GL/mesa/math/Imakefile
++ * xc/lib/GL/mesa/shader/Imakefile
++ * xc/lib/GL/mesa/sparc/Imakefile
++ * xc/lib/GL/mesa/swrast/Imakefile
++ * xc/lib/GL/mesa/swrast_setup/Imakefile
++ * xc/lib/GL/mesa/tnl/Imakefile
++ * xc/lib/GL/mesa/tnl_dd/Imakefile
++ Bugzilla #1843 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1843)
++ attachment #1301 (https://bugs.freedesktop.org/attachment.cgi?id=1301):
++ Fix build failure in the linker stage of libOSMesa.so.4.0 which
++ happens more or less every couple of months with the message
++ "ld: fatal: too many symbols require `small' PIC references:
++ have 2112, maximum 2048 -- recompile some modules -K PIC.".
++ The fix is to add |#define LargePICTable YES| to _ALL_ relevant
++ Imakefiles (previously this was done only on "on-demand" basis).
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/util/memleak/getretmips.c
++ Bugzilla #758 (https://bugs.freedesktop.org/show_bug.cgi?id=758)
++ attachment #375 (https://bugs.freedesktop.org/attachment.cgi?id=375):
++ Fix a buffer overrun which may happen when the size of the stack buffer
++ is exactly the same as the actual stack size.
++ Patch by Stephen Kennedy <Stephen.Kennedy@havok.com>.
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/extras/Xpm/lib/xpm.h
++ Bugzilla #830 (https://bugs.freedesktop.org/show_bug.cgi?id=830)
++ attachment #1493 (https://bugs.freedesktop.org/attachment.cgi?id=1493):
++ Fix libXpm header (xpm.h) to use the X11 function begin/end marker
++ macros (_XFUNCPROTOBEGIN, _XFUNCPROTOEND) instead of homegrown
++ (native) C++ code.
++ Patch by Kevin DeKorte <kdekorte@yahoo.com>.
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/include/extensions/dpms.h
++ Bugzilla #830 (https://bugs.freedesktop.org/show_bug.cgi?id=830)
++ attachment #1492 (https://bugs.freedesktop.org/attachment.cgi?id=1492):
++ Get DPMS header file (include/extensions/dpms.h) working with C++
++ applications.
++ Patch by Kevin DeKorte <kdekorte@yahoo.com> and Roland
++ Mainz <roland.mainz@nrubsig.org>.
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/Xext/saver.c
++ Bugzilla #1695 (https://bugs.freedesktop.org/show_bug.cgi?id=1695)
++ attachment #1230 (https://bugs.freedesktop.org/attachment.cgi?id=1230):
++ Fix crash in Xscreensaver code which allowed any authentificated X client
++ to crash the Xserver using |XScreenSaverUnsetAttributes()|.
++ Patch by ajax@nwnk.net
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/include/extensions/Imakefile
++ Bugzilla #1871 (https://bugs.freedesktop.org/show_bug.cgi?id=1871)
++ attachment #1314 (https://bugs.freedesktop.org/attachment.cgi?id=1314):
++ Remove old and now obsolete xc/include/extensions/damage.h.
++ Patch by Kristian Høgsberg <krh@bitplanet.net>.
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/include/extensions/Xinerama.h
++ Bugzilla #1897 (https://bugs.freedesktop.org/show_bug.cgi?id=1897)
++ attachment #1338 (https://bugs.freedesktop.org/attachment.cgi?id=1338):
++ xc/include/extensions/Xinerama.h should include <X11/Xlib.h>, since it uses
++ libX11 functions.
++ Patch by Xavier Bestel and Daniel Stone <daniel@freedesktop.org>.
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/lib/Xaw/AsciiSink.c
++ * xc/lib/Xaw/Label.c
++ * xc/lib/Xaw/List.c
++ * xc/lib/Xaw/MultiSink.c
++ * xc/lib/Xaw/SmeBSB.c
++ * xc/lib/Xaw/Tip.c
++ * xc/lib/Xaw/XawIm.c
++ Bugzilla #1941 (https://bugs.freedesktop.org/show_bug.cgi?id=1941)
++ attachment #1400 (https://bugs.freedesktop.org/attachment.cgi?id=1400):
++ Fail during initialization with error if font/fontset is not
++ set for widget. This prevents a sig11 later when the non-existent
++ font/fontset structs are referenced.
++ Patch by Egbert Eich <eich@freedesktop.org>.
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/lib/X11/XKBBind.c
++ Bugzilla #1459 (https://bugs.freedesktop.org/show_bug.cgi?id=1459)
++ attachment #966 (https://bugs.freedesktop.org/attachment.cgi?id=966):
++ Fix |bzero()| size argument so it doesn't trash the stack.
++ Patch by Mike A. Harris <mharris@www.linux.org.uk>.
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/lib/X11/XlibInt.c
++ Bugzilla #1864 (https://bugs.freedesktop.org/show_bug.cgi?id=1864)
++ attachment #1434 (https://bugs.freedesktop.org/attachment.cgi?id=1434):
++ Fix random crashes because |bufp| variable is not initialized in
++ |_XopenFile| (later the pointer is checked for |NULL| and freed
++ otherwise. If the file was not found the pointer is uninitialized and
++ rando memory is freed).
++ Patch by Alexander Gottwald <ago@freedesktop.org>.
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/lib/X11/XlibInt.c
++ Bugzilla #1864 (https://bugs.freedesktop.org/show_bug.cgi?id=1864)
++ attachment #1310 (https://bugs.freedesktop.org/attachment.cgi?id=1310):
++ Fix random crashes because |pbuf| variable is not initialized in
++ |_XFopenFile| (later the pointer is checked for |NULL| and freed
++ otherwise. If the file was not found the pointer is uninitialized and
++ rando memory is freed).
++ Patch by Alexander Gottwald <ago@freedesktop.org>
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/lib/X11/imInsClbk.c
++ Bugzilla #1926 (https://bugs.freedesktop.org/show_bug.cgi?id=1926)
++ attachment #1482 (https://bugs.freedesktop.org/attachment.cgi?id=1482):
++ Unregistering events in XSelectInput() when unregistering IM
++ filter callbacks via |_XimUnRegisterIMInstantiateCallback| may be a
++ bad idea as others may be interested in this event.
++ Removed the call to XSelectInput() altogether as we are in root
++ window anyway.
++ Patch by Lubos Lunak and and Egbert Eich <eich@freedesktop.org>.
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/common/xf86Xinput.c
++ Bugzilla #1688 (https://bugs.freedesktop.org/show_bug.cgi?id=1688)
++ attachment #1530 (https://bugs.freedesktop.org/attachment.cgi?id=1530):
++ Fix the current implementation to make it possible to slow down the
++ mouse pointer or use arbitrary fractions (without running into
++ rounding error issues). The change is using the same method of
++ preserving rounding errors that the exponential method is already
++ using.
++ Patch by Jan Brunner <Jan_B@gmx.ch>.
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/os/WaitFor.c
++ Bugzilla #1934 (https://bugs.freedesktop.org/show_bug.cgi?id=1934)
++ attachment #1393 (https://bugs.freedesktop.org/attachment.cgi?id=1393):
++ Fixing |SetDPMSTimers()| so that DPMS*Time == 0 disables the
++ appropriate timer. This takes advantage of the fact that
++ |TimerSet()| with a timeout argument 0 behaves like |TimerCanel()|.
++ Patch by Egbert Eich <eich@freedesktop.org>.
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/dix/dispatch.c
++ Bugzilla #1939 (https://bugs.freedesktop.org/show_bug.cgi?id=1939)
++ attachment #1398 (https://bugs.freedesktop.org/attachment.cgi?id=1398):
++ Fixe size of a variable that gets assigned the value of
++ SmartScheduleTime (|long|) to |long|. This should help to prevent
++ smart scheduler lockup on 64 bit systems due to datatype overruns.
++ Patch by Andreas Schwab and Egbert Eich <eich@freedesktop.org>.
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/Xext/saver.c
++ Bugzilla #1989 (https://bugs.freedesktop.org/show_bug.cgi?id=1989)
++ attachment #1399 (https://bugs.freedesktop.org/attachment.cgi?id=1399):
++ Fixed sig11 in |ScreenSaverUnsetAttributes()| which occured when
++ calling a |CloseDisplay()| after |XScreenSaverSetAttributes()|
++ followed by |XScreenSaverUnsetAttributes()|. Caused by missing
++ |FreeResource()| in |XScreenSaverUnsetAttributes()|.
++ Patch by Egbert Eich <eich@freedesktop.org>.
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/lib/dmx/dmx.c
++ Bugzilla #1989 (https://bugs.freedesktop.org/show_bug.cgi?id=1989)
++ attachment #1442 (https://bugs.freedesktop.org/attachment.cgi?id=1442):
++ Fix invalid write in libXdmx extension library (for |DMXAddInput()|).
++ Patch by Mark McLoughlin <mark@skynet.ie>.
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/lib/dmx/dmx.c
++ Bugzilla #1989 (https://bugs.freedesktop.org/show_bug.cgi?id=1989)
++ attachment #1441 (https://bugs.freedesktop.org/attachment.cgi?id=1441):
++ Fix invalid write in libXdmx extension library.
++ Patch by Mark McLoughlin <mark@skynet.ie>.
++
++2004-12-12 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/miext/damage/damage.c
++ Bugzilla #1204 (https://bugs.freedesktop.org/show_bug.cgi?id=1204)
++ attachment #1360 (https://bugs.freedesktop.org/attachment.cgi?id=1360):
++ Fix X11 test suite (caused by DAMAGE layer) failure with Xvfb when
++ rendering text using |XDrawText*()| (XDrawText() tests 1, 3, 4, 27, 28,
++ 29, 30, 34, 37, 39, 41, 43 and XDrawText16() tests 1, 3, 9, 10, 11, 12,
++ 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 34,
++ 37, 39, 41, 43).
++ Patch by Hong Bo Peng <penghb@cn.ibm.com> and Stefan Dirsch
++ <sndirsch@suse.de>.
++
++2004-12-08 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/xf86cfg/loader.h
++ Bugzilla #557 (https://bugs.freedesktop.org/show_bug.cgi?id=557)
++ attachment #1255 (https://bugs.freedesktop.org/attachment.cgi?id=1255):
++ Do not use "bool" as a variable name in xf86cfg, to avoid
++ compiler bugs.
++ Patch by Donnie Berkholz <spyderous@gentoo.org>.
++
++2004-12-08 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/Xext/xf86bigfont.c
++ Bugzilla #1402 (https://bugs.freedesktop.org/show_bug.cgi?id=1402)
++ attachment #948 (https://bugs.freedesktop.org/attachment.cgi?id=948):
++ Fix BigFont extension if SHM is compiled in but
++ not working. Does not access SHM and privates if the SHM syscall
++ failed during extension initialization.
++ Patch by Alexander Gottwald <ago@freedesktop.org>.
++
++2004-12-08 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/os/utils.c
++ Bugzilla #1453 (https://bugs.freedesktop.org/show_bug.cgi?id=1453)
++ attachment #964 (https://bugs.freedesktop.org/attachment.cgi?id=964):
++ Fix spaces in usage output for BIGREQUESTS extension (option
++ "-maxbigreqsize").
++
++2004-12-08 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/os/utils.c
++ Bugzilla #1489 (https://bugs.freedesktop.org/show_bug.cgi?id=1489)
++ attachment #979 (https://bugs.freedesktop.org/attachment.cgi?id=979):
++ Use |long| instead of |int| for BIGREQUESTS commandline option.
++
++2004-12-08 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/loader/elfloader.c:
++ Bugzilla #1812 (https://bugs.freedesktop.org/show_bug.cgi?id=1812)
++ attachment #1263 (https://bugs.freedesktop.org/attachment.cgi?id=1263),
++ Sun bug id #6175128:
++ Add Solaris to the platforms on which mprotect() is run to set
++ execute permissions when necessary.
++ Patch by Alan Coopersmith <alan.coopersmith@sun.com>.
++
++2004-12-08 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/xmodmap/pf.c
++ * xc/programs/xmodmap/xmodmap.c
++ * xc/programs/xmodmap/xmodmap.h
++ Bugzilla #1818 (https://bugs.freedesktop.org/show_bug.cgi?id=1818)
++ attachment #1286 (https://bugs.freedesktop.org/attachment.cgi?id=1286):
++ Fixing off-by-one allocation error.
++ Patch by Kristian Høgsberg <krh@bitplanet.net>.
++
++2004-12-08 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/dix/main.c
++ Bugzilla #1404 (https://bugs.freedesktop.org/show_bug.cgi?id=1404):
++ Fixing random crashes (like in DAMAGE code etc.) in Xnest due
++ uninitalised GetWindowPixmap.
++ Original patch by Alexander Gottwald <ago@freedesktop.org>
++
++2004-12-08 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/mi/miinitext.c
++ Bugzilla #1361 (https://bugs.freedesktop.org/show_bug.cgi?id=1361)
++ attachment #1287 (https://bugs.freedesktop.org/attachment.cgi?id=1287):
++ Avoid DRI initalisation when the Xfree86-DRI extension was turned
++ off.
++ Patch by Kristian Høgsberg <krh@bitplanet.net>.
++
++2004-12-08 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/mi/miinitext.c
++ Bugzilla #1361 (https://bugs.freedesktop.org/show_bug.cgi?id=1361)
++ attachment #938 (https://bugs.freedesktop.org/attachment.cgi?id=938):
++ Allow more extensions to be enabled/disabled.
++
++2004-12-08 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/mi/miinitext.c
++ Bugzilla #1361 (https://bugs.freedesktop.org/show_bug.cgi?id=1361)
++ attachment #938 (https://bugs.freedesktop.org/attachment.cgi?id=938):
++ Allow more extensions to be enabled/disabled.
++
++2004-12-08 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/loader/dixsym.c
++ * xc/programs/Xserver/hw/xfree86/loader/extsym.c
++ Bugzilla #1361 (https://bugs.freedesktop.org/show_bug.cgi?id=1361)
++ attachment #899 (https://bugs.freedesktop.org/attachment.cgi?id=899):
++ Fix module loader bustage due duplicate symbols
++ caused by the first patch in Bugzilla #1361
++
++2004-12-08 Roland Mainz <roland.mainz@nrubsig.org>
++ * xc/programs/Xserver/hw/xfree86/loader/dixsym.c
++ * xc/programs/Xserver/include/globals.h
++ * xc/programs/Xserver/mi/miinitext.c
++ * xc/programs/Xserver/os/utils.c
++ Bugzilla #1361 (https://bugs.freedesktop.org/show_bug.cgi?id=1361)
++ attachment #894 (https://bugs.freedesktop.org/attachment.cgi?id=894):
++ Allow turning on/off most of the Xserver extensions
++ (=all except server-specific extensions (e.g. DMX, XpExtension,
++ etc.) via +extension/-extension
++
++2004-11-14 Alan Coopersmith <alan.coopersmith@sun.com>
++
++ * xc/programs/Xserver/hw/xfree86/drivers/nv/nv.man:
++ * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_cursor.c:
++ * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_dac.c:
++ * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_dma.h:
++ * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_driver.c:
++ * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_hw.c:
++ * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_proto.h:
++ * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_setup.c:
++ * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_type.h:
++ * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_video.c:
++ * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_xaa.c:
++
++ (Bugzilla #1777) Import Mark Vojkovich's changes to NV driver
++ since last sync with XFree86, including:
++ Support for new NVIDIA chips.
++ Egbert has a laptop that needs some DPMS ordering reversed.
++ New chip support and workaround for Toshiba M30 laptop issue.
++ PCI-Xpress chip support.
++ DPMS support for DVI.
++ Cursor changes for NV11 so that alpha blended cursors will work
++ in conjunction with dithering (laptop panels). It previously
++ did not.
++ HW support for alpha blended stretch blits on NV5 and higher,
++ though nothing is using them at this point.
++ Add support for VBlank syncing the Xv Blit adaptor on hardware
++ that supports it (NV11 and higher).
++ Make console restoration a little more robust. We were making
++ an assumption that failed on a newer laptop.
++ Workaround for some NV31 DVI artifacts.
++
++ Also add nVidia license statement to nv man page to comply with
++ requirement that it appear in "user documentation"
++
++2004-10-17 Alex Deucher <agd5f@yahoo.com>
++
++ * programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c:
++ (RADEONEnterVT):
++ Fix resume in radeon driver (bug 1220)
++
++----------- 6.8.1 Release
++
++2004-09-17 Kevin E. Martin <kem-at-freedesktop-dot-org>
++
++ * config/cf/xorg.cf:
++ Update the XORG_DATE for the release.
++
++ * config/cf/cygwin.cf:
++ Update cygwin release version.
++
++ * BUILD:
++ * README:
++ * RELNOTES:
++ * programs/Xserver/hw/xfree86/doc/BUILD:
++ * programs/Xserver/hw/xfree86/doc/DESIGN:
++ * programs/Xserver/hw/xfree86/doc/Install:
++ * programs/Xserver/hw/xfree86/doc/OS2.Notes:
++ * programs/Xserver/hw/xfree86/doc/README:
++ * programs/Xserver/hw/xfree86/doc/README.DECtga:
++ * programs/Xserver/hw/xfree86/doc/README.Darwin:
++ * programs/Xserver/hw/xfree86/doc/README.LynxOS:
++ * programs/Xserver/hw/xfree86/doc/README.NetBSD:
++ * programs/Xserver/hw/xfree86/doc/README.OpenBSD:
++ * programs/Xserver/hw/xfree86/doc/README.SCO:
++ * programs/Xserver/hw/xfree86/doc/README.SiS:
++ * programs/Xserver/hw/xfree86/doc/README.Solaris:
++ * programs/Xserver/hw/xfree86/doc/README.XKB-Config:
++ * programs/Xserver/hw/xfree86/doc/README.chips:
++ * programs/Xserver/hw/xfree86/doc/README.dps:
++ * programs/Xserver/hw/xfree86/doc/README.fonts:
++ * programs/Xserver/hw/xfree86/doc/README.i740:
++ * programs/Xserver/hw/xfree86/doc/README.i810:
++ * programs/Xserver/hw/xfree86/doc/README.mouse:
++ * programs/Xserver/hw/xfree86/doc/README.r128:
++ * programs/Xserver/hw/xfree86/doc/README.rendition:
++ * programs/Xserver/hw/xfree86/doc/README.s3virge:
++ * programs/Xserver/hw/xfree86/doc/RELNOTES:
++ * programs/Xserver/hw/xfree86/doc/Versions:
++ * programs/Xserver/hw/xfree86/doc/sgml/defs.ent:
++ * programs/xkbcomp/README.config:
++ Update documentation for release.
++
+ 2004-09-15 Daniel Stone <daniel@freedesktop.org>
+
+ * xc/extras/Xpm/lib/Attrib.c:
+@@ -6404,4 +8139,4 @@
+ so i18n libs from build tree get used instead of installed ones
+ (Egbert Eich).
+
+-$XdotOrg: xc/ChangeLog,v 1.365.2.1 2004/09/15 15:47:36 daniel Exp $
++$XdotOrg: xc/ChangeLog,v 1.365.2.155 2005/02/09 18:03:20 gisburn Exp $
+Index: xc/Makefile
+diff -u xc/Makefile:1.4 xc/Makefile:1.4.2.1
+--- xc/Makefile:1.4 Fri Sep 3 16:18:17 2004
++++ xc/Makefile Wed Feb 9 18:03:20 2005
+@@ -7,7 +7,7 @@
+ # Luna users will need to either run make as "make MAKE=make"
+ # or add "MAKE = make" to this file.
+
+-RELEASE = "Release 6.8"
++RELEASE = "Release 6.8.2"
+ SHELL = /bin/sh
+ RM = rm -f
+ MV = mv
+Index: xc/README
+diff -u xc/README:1.3.2.2 xc/README:1.3.2.4
+--- xc/README:1.3.2.2 Fri Sep 17 15:38:17 2004
++++ xc/README Tue Feb 8 23:54:04 2005
+@@ -1,29 +1,29 @@
+- README for X11R6.8.1
++ README for X11R6.8.2
+
+ The X.Org Foundation
+
+- 17 September 2004
++ 9 February 2005
+
+ Abstract
+
+- X11R6.8.1 is an Open Source version of the X Window System that
++ X11R6.8.2 is an Open Source version of the X Window System that
+ supports many UNIX(R) and UNIX-like operating systems (such as
+ Linux, FreeBSD, NetBSD, OpenBSD and Solaris x86) on Intel and other
+- platforms. This version is compatible with X11R6.8 and other X
++ platforms. This version is compatible with X11R6.8.1 and other X
+ window system implementations which support the X11R6 standard.
+
+-1. What is X11R6.8.1?
++1. What is X11R6.8.2?
+
+-X11R6.8.1 is the eighth full release in the X11R6 series.
++X11R6.8.2 is the eighth full release in the X11R6 series.
+
+-X11R6.8.1 is the current X.Org Foundation release series. The core of
+-X11R6.8.1 is a modular X server. The 6.8.1 version is a new release that
++X11R6.8.2 is the current X.Org Foundation release series. The core of
++X11R6.8.2 is a modular X server. The 6.8.2 version is a new release that
+ includes additional hardware support, functional enhancements and bug fixes.
+ Specific release enhancements can be viewed in the Release Notes.
+
+-Most modern PC video hardware is supported in X11R6.8.1, and most PC video
++Most modern PC video hardware is supported in X11R6.8.2, and most PC video
+ hardware that isn't supported explicitly can be used with the "vesa" driver.
+-The Release Notes has a table showing the drivers provided with X11R6.8.1,
++The Release Notes has a table showing the drivers provided with X11R6.8.2,
+ and links to related documentation.
+
+ The X.Org Foundation X releases are produced by the X.Org Foundation. The
+@@ -34,8 +34,8 @@
+ is free to all participants. Applications for Membership are now being
+ accepted, and active participants in the further development of the X Window
+ Technology are invited to complete a membership application
+-<URL:http://www.x.org/XOrg_Foundation_Membership.html>. The X11R6.8.1 code-
+-base forms the second X window system release since the formation of the
++<URL:http://www.x.org/XOrg_Foundation_Membership.html>. The X11R6.8.2 code-
++base forms the fourth X window system release since the formation of the
+ X.org foundataion and includes code from the X Consortium, the Open Group and
+ the XFree86[tm] project. This release is dedicated to the greater X commu-
+ nity, developers and users alike.
+@@ -96,38 +96,38 @@
+ <URL:http://bugzilla.freedesktop.org/> using the xorg component. This will
+ ensure that they are included in future releases.
+
+-6. How to get X11R6.8.1
++6. How to get X11R6.8.2
+
+-X11R6.8.1 can be found from the X.Org Foundation wiki at
++X11R6.8.2 can be found from the X.Org Foundation wiki at
+ <URL:http://wiki.x.org>, and at mirrors of this server. Information about
+ obtaining and installing binary distributions of this release can be found in
+ the Installation Document. Information about obtaining the release in source
+ form is given below.
+
+-The source for version 6.8.1 is split into seven tarballs:
++The source for version 6.8.2 is split into seven tarballs:
+
+- X11R6.8.1-src1.tar.gz
+- X11R6.8.1-src2.tar.gz
+- X11R6.8.1-src3.tar.gz
+- X11R6.8.1-src4.tar.gz
+- X11R6.8.1-src5.tar.gz
+- X11R6.8.1-src6.tar.gz
+- X11R6.8.1-src7.tar.gz
++ X11R6.8.2-src1.tar.gz
++ X11R6.8.2-src2.tar.gz
++ X11R6.8.2-src3.tar.gz
++ X11R6.8.2-src4.tar.gz
++ X11R6.8.2-src5.tar.gz
++ X11R6.8.2-src6.tar.gz
++ X11R6.8.2-src7.tar.gz
+
+ The first three contain everything except the fonts and general X11 documen-
+-tation. Those three are sufficient for building X11R6.8.1 if you already
++tation. Those three are sufficient for building X11R6.8.2 if you already
+ have a set of fonts. The fourth and fifth contain the fonts. The sixth con-
+ tains the source for the general X11 documentation. The seventh contains the
+ general X11 documentation in hardcopy format.
+
+-To format the X11R6.8.1 documentation use the latest version of our doctools
++To format the X11R6.8.2 documentation use the latest version of our doctools
+ package available from the Xorg CVS repository's "doctools" module.
+
+ The X source code for this and all releases/snapshots as well as development
+ versions can also be accessed via the Freedesktop.org CVS repository. It's
+ also possible to browse the freedesktop CVS repository
+ <URL:http://cvs.freedesktop.org/>. The CVS tag for this version is
+-"XORG-6_8_1". The CVS tag for the stable branch for this release is
++"XORG-6_8_2". The CVS tag for the stable branch for this release is
+ "XORG-6_8-branch". To check out the latest development version, don't spec-
+ ify any tag.
+
+@@ -144,4 +144,4 @@
+ $Id$.
+
+
+-$XdotOrg: xc/README,v 1.3.2.2 2004/09/17 15:38:17 kem Exp $
++$XdotOrg: xc/README,v 1.3.2.4 2005/02/08 23:54:04 kem Exp $
+Index: xc/RELNOTES
+diff -u xc/RELNOTES:1.5.2.1 xc/RELNOTES:1.5.2.3
+--- xc/RELNOTES:1.5.2.1 Fri Sep 17 15:38:17 2004
++++ xc/RELNOTES Tue Feb 8 23:54:04 2005
+@@ -1,19 +1,19 @@
+- Release Notes for X11R6.8.1
++ Release Notes for X11R6.8.2
+
+ The X.Org Foundation
+ The XFree86 Project, Inc.
+
+- 17 September 2004
++ 9 February 2005
+
+ Abstract
+
+ These release notes contains information about features and their
+- status in the X.Org Foundation X11R6.8.1 release. It is based on
++ status in the X.Org Foundation X11R6.8.2 release. It is based on
+ the XFree86 4.4RC2 RELNOTES document published by The XFree86[tm]
+ Project, Inc. There are significant updates and differences in the
+ X.Org release as noted below.
+
+-1. Introduction to the X11R6.8.1 Release
++1. Introduction to the X11R6.8.2 Release
+
+ The release numbering is based on the original MIT X numbering system. X11
+ refers to the version of the network protocol that the X Window system is
+@@ -37,7 +37,7 @@
+ top.org using the xorg product, and discussions on this server take place on
+ <xorg@freedesktop.org>.
+
+-X11R6.8.1 comes with a graphical configuration tool called "xorgcfg", which
++X11R6.8.2 comes with a graphical configuration tool called "xorgcfg", which
+ also has a text mode interface and can be used to create an initial configu-
+ ration file. It can also be used to customise existing configurations.
+
+@@ -63,20 +63,21 @@
+ quick read through the Installation Document. It may save you some time and
+ also help you figure out which of the binary releases you need.
+
+-The next section describes what is new in the latest version (6.8.1) compared
+-with the previous full release (6.8). The other sections below describe some
+-of the new features and changes between 3.3.x and 4.0. There are lots of new
+-features, and we definitely don't have enough space to cover them all here.
++The next section describes what is new in the latest version (6.8.2) compared
++with the previous full release (6.8.1). The other sections below describe
++some of the new features and changes between 3.3.x and 4.0. There are lots
++of new features, and we definitely don't have enough space to cover them all
++here.
+
+-2. Summary of new features in X11R6.8.1
++2. Summary of new features in X11R6.8.2
+
+-This is a sampling of the new features in X11R6.8.1. A more complete list of
++This is a sampling of the new features in X11R6.8.2. A more complete list of
+ changes can be found in the ChangeLog file that is part of the X source tree.
+
+ o Freetype was updated to version 2.1.8. But installing freetype from X
+ distributions would often or usually result in the replacement or use of
+ "stale" versions of freetype. On Linux, FreeBSD, Solaris 10, and SCO5,
+- therefore, X11R6.8.1 will by default use the version of freetype2 that
++ therefore, X11R6.8.2 will by default use the version of freetype2 that
+ is installed on the system. If your system doesn't come with an
+ installed freetype2 and you wish to use the version supplied with this
+ distribution, please add:
+@@ -85,10 +86,10 @@
+
+ to config/cf/host.def.
+
+- o The XTT font module and FreeType1 have been retired because FreeType2
++ o The XTT font module and FreeType1 have been retired because FreeType2
+ subsumes their functionality
+
+- o Retire old PS Type1 font rasterizer (except for CID font usage) since
++ o Retire old PS Type1 font rasterizer (except for CID font usage) since
+ the FreeType2 rasterizer now handles PS Type1 (*.pfa, *.pfb)
+
+ o Render implementation fixes
+@@ -97,6 +98,8 @@
+
+ o Updated SiS driver
+
++ o Updated Nvidia driver (opensource version)
++
+ o Render acceleration for ATI's R100 and R200-series cards
+
+ o Substantial speedups in the software implementation of the render exten-
+@@ -113,11 +116,12 @@
+ o Software mouse cursor is now based on the Damage extension
+
+ o A new keyboard driver is enabled by default. The old driver is disabled
+- unless explicitly compiled in by defining the macro USE_DEPRECATED_KEY-
+- BOARD_DRIVER
++ unless explicitly compiled in by defining the macro |USE_DEPRECATED_KEY-
++ BOARD_DRIVER|.
+
+- o Extensions can be enabled/disabled from the configuration file and from
+- the command line
++ o All extensions (except Xserver-specific extensions "DMX" and "XpExten-
++ sion") can now be enabled/disabled from the configuration file and from
++ the command line.
+
+ o Mac OS X updates:
+
+@@ -134,9 +138,11 @@
+
+ o Fixed some GLX rendering problems on Mac OS X 10.2 and earlier
+
++ o Updated xterm version
++
+ 2.1 New X extensions
+
+-X11R6.8.1 includes four new extensions:
++X11R6.8.2 includes four new extensions:
+
+ XFixes
+ The XFixes extension is a collection of improvements for defi-
+@@ -163,7 +169,7 @@
+ core protocol and the RENDER extension, the compositing manager
+ can create special effects, such as translucennt windows.
+
+- The Composite extension is considered experimental in X11R6.8.1
++ The Composite extension is considered experimental in X11R6.8.2
+ and is turned off by default.
+
+ XEvIE (X Event Interception Extension) (experimental)
+@@ -173,7 +179,7 @@
+ (i.e., interested clients). This feature is required by the GNOME
+ accessibility project.
+
+- The XEvIE extension is considered experimental in X11R6.8.1 and
++ The XEvIE extension is considered experimental in X11R6.8.2 and
+ is turned off by default.
+
+ As noted above, some extensions are disabled by default. They can be enabled
+@@ -189,7 +195,7 @@
+
+ 2.2 Distributed Multihead X (DMX)
+
+-X11R6.8.1 includes a new X server, called Xdmx, that allows users to create a
++X11R6.8.2 includes a new X server, called Xdmx, that allows users to create a
+ single unified desktop from multiple running X servers. It works by creating
+ a local screen on each of these running X servers, which can be distributed
+ across a network, and then presents that set of screens to the user. When
+@@ -201,8 +207,9 @@
+
+ 2.3 Xprint updates
+
+- o Integrated various fixes from xprint.mozdev.org (more or less the whole
+- codebase has been merged)
++ o Integrated various fixes from xprint.mozdev.org
++ <URL:http://xprint.mozdev.org> (more or less the whole codebase has been
++ merged)
+
+ o Integrated various fixes from Sun Microsystems
+
+@@ -211,18 +218,20 @@
+ o New set of maintenance tools for the Xprint server (xplsprinters, xpre-
+ hashprinterlist, etc.)
+
+- o Added new XprintUtils client library to make the usage off Xprint easier
++ o Added new XprintUtils client library to make the usage of Xprint easier
+
+ o Various other features and fixes integrated
+
+ o Athena toolkit now has print support (XawPrintShell) which is included
+- in a separate version of that library (Xaw8)
++ in a new version of that library (Xaw8)
+
+- o Various applications/tools like xman, xedit, xlogo, etc. now have print
+- support
++ o Various applications/tools like xman, xedit, xlogo, xlsfonts, etc. now
++ have print support
+
+ 2.4 Updated Mesa and DRI from upstream sources
+
++ o Mesa version has been updated to 6.2.1 (in X11R6.8.2)
++
+ o More OpenGL extensions
+
+ o MergedFB for Radeon (Dualhead DRI support on these cards)
+@@ -242,23 +251,7 @@
+
+ 2.5 Video driver enhancements
+
+- o SiS driver updates include
+-
+- o output device hotplugging
+-
+- o lots of fixes for 661, 741, 760
+-
+- o extended interface for SiSCtrl?
+-
+- o extended LCD handling (allow more modes)
+-
+- o HDTV support (480p, 480i, 720p. 1080i; 315/330 series)
+-
+- o Added video blitter Xv adapter (315/330 series)
+-
+- o extended RENDER acceleration
+-
+- o Radeon driver updates:
++ o ATI Radeon driver updates:
+
+ o Merged Framebuffer support (dualhead with DRI)
+
+@@ -277,13 +270,9 @@
+
+ o Many other small fixes
+
+- o Neomagic driver updates
+-
+- o Support for Xv on pre-nm2160 chips
+-
+- o Pseudocolor overlay mode
++ o Chips driver update
+
+- o Improved support for lowres double scan modes
++ o Improved BE support
+
+ o MGA driver updates
+
+@@ -291,6 +280,14 @@
+
+ o Updated 3D driver
+
++ o Neomagic driver updates
++
++ o Support for Xv on pre-nm2160 chips
++
++ o Pseudocolor overlay mode (=PseudoColor emulation)
++
++ o Improved support for lowres double scan modes
++
+ o i810 driver updates
+
+ o Dualhead support (i830+)
+@@ -299,17 +296,33 @@
+
+ o New 3D driver (i830+)
+
++ o i810 driver is now supported for AMD64
++
++ o S3 driver updates
++
++ o Support for additional IBM RAMDACS
++
+ o Savage driver updates
+
+ o Pseudocolor overlay mode
+
+- o S3 driver updates
++ o SiS driver updates include
+
+- o Support for additional IBM RAMDACS
++ o output device hotplugging
+
+- o Chips driver update
++ o lots of fixes for 661, 741, 760
+
+- o Improved BE support
++ o extended interface for SiSCtrl?
++
++ o extended LCD handling (allow more modes)
++
++ o HDTV support (480p, 480i, 720p. 1080i; 315/330 series)
++
++ o Added video blitter Xv adapter (315/330 series)
++
++ o extended RENDER acceleration
++
++ o SiS driver now supported on AMD64
+
+ o New Voodoo driver (Alan Cox)
+
+@@ -320,7 +333,7 @@
+
+ 3.1 Video Drivers
+
+-X11R6.8.1 includes the following video drivers:
++X11R6.8.2 includes the following video drivers:
+
+ +--------------+--------------------------+---------------------------------------------+
+ |Driver Name | Description | Further Information |
+@@ -376,48 +389,63 @@
+ Darwin/Mac OS X uses IOKit drivers and does not use the module loader drivers
+ listed above. Further information can be found in README.Darwin.
+
+-X11R6.8.1 includes the following input drivers:
++X11R6.8.2 includes the following print drivers:
++
++3.2 Print Drivers
++
+++------------+----------------------------------------+---------------------+
++|Driver Name | Description | Further Information |
+++------------+----------------------------------------+---------------------+
++|PostScript | PostScript driver | |
++|PCL | PCL color driver | |
++|PCL-MONO | PCL monocrome driver | |
++|RASTER | Monocrome raster driver (XWD, PS, PCL) | |
+++------------+----------------------------------------+---------------------+
++
++Drivers marked with (*) are available for Linux only.
++
++X11R6.8.2 includes the following input drivers:
+
+-3.2 Input Drivers
++3.3 Input Drivers
+
+- +------------+----------------------------------+---------------------+
+- |Driver Name | Description | Further Information |
+- +------------+----------------------------------+---------------------+
+- |aiptek(*) | Aiptek USB tablet | aiptek(4) |
+- |calcomp | Calcomp | |
+- |citron | Citron | citron(4) |
+- |digitaledge | DigitalEdge | |
+- |dmc | DMC | dmc(4) |
+- |dynapro | Dynapro | |
+- |elographics | EloGraphics | |
+- |fpit | Fujitsu Stylistic Tablet PCs | fpit(4) |
+- |hyperpen | Aiptek HyperPen 6000 | |
+- |js_x | JamStudio pentablet | js_x(4) |
+- |kbd | generic keyboards (alternate) | kbd(4) |
+- |keyboard | generic keyboards | keyboard(4) |
+- |microtouch | MicroTouch | |
+- |mouse | most mouse devices | mouse(4) |
+- |mutouch | MicroTouch | |
+- |palmax | Palmax PD1000/PD1100 | palmax(4) |
+- |penmount | PenMount | |
+- |spaceorb | SpaceOrb | |
+- |summa | SummaGraphics | |
+- |tek4957 | Tektronix 4957 tablet | tek4957(4) |
+- |ur98(*) | Union Reality UR-F98 headtracker | ur98(4) |
+- |void | dummy device | void(4) |
+- |wacom | Wacom tablets | wacom(4) |
+- +------------+----------------------------------+---------------------+
++ +------------+-------------------------------------+---------------------+
++ |Driver Name | Description | Further Information |
++ +------------+-------------------------------------+---------------------+
++ |aiptek(*) | Aiptek USB tablet | aiptek(4) |
++ |calcomp | Calcomp | |
++ |citron | Citron | citron(4) |
++ |digitaledge | DigitalEdge | |
++ |dmc | DMC | dmc(4) |
++ |dynapro | Dynapro | |
++ |elographics | EloGraphics | |
++ |fpit | Fujitsu Stylistic Tablet PCs | fpit(4) |
++ |hyperpen | Aiptek HyperPen 6000 | |
++ |js_x | JamStudio pentablet | js_x(4) |
++ |kbd | generic keyboards (loadable module) | kbd(4) |
++ |keyboard | generic keyboards (builtin driver) | keyboard(4) |
++ |microtouch | MicroTouch | |
++ |mouse | most mouse devices | mouse(4) |
++ |mutouch | MicroTouch | |
++ |palmax | Palmax PD1000/PD1100 | palmax(4) |
++ |penmount | PenMount | |
++ |spaceorb | SpaceOrb | |
++ |summa | SummaGraphics | |
++ |tek4957 | Tektronix 4957 tablet | tek4957(4) |
++ |ur98(*) | Union Reality UR-F98 headtracker | ur98(4) |
++ |void | dummy device | void(4) |
++ |wacom | Wacom tablets | wacom(4) |
++ +------------+-------------------------------------+---------------------+
+
+ Drivers marked with (*) are available for Linux only.
+
+-4. Overview of X11R6.8.1
++4. Overview of X11R6.8.2
+
+-On most platforms, X11R6.8.1 has a single X server binary called Xorg. This
++On most platforms, X11R6.8.2 has a single X server binary called Xorg. This
+ binary can either have one or more video and input drivers linked in stati-
+ cally, or more usually, dynamically, and in that manner load the video
+ drivers, input drivers, and other modules that are needed.
+
+-X11R6.8.1 has X server support for most UNIX® and UNIX-like operating systems
++X11R6.8.2 has X server support for most UNIX® and UNIX-like operating systems
+ on Intel/x86 platforms, plus support for Linux and some BSD OSs on Alpha,
+ PowerPC, IA-64, AMD64, Sparc, and Mips platforms, and for Darwin on PowerPC.
+
+@@ -433,7 +461,7 @@
+
+ A main benefit of this, is that when modules are updated, they do not need to
+ be recompiled for every different operating system. The loader in version
+-6.8.1 has support for Intel (x86), Alpha and PowerPC platforms. It also has
++6.8.2 has support for Intel (x86), Alpha and PowerPC platforms. It also has
+ preliminary support for Sparc platforms.
+
+ The X server makes use of modules for video drivers, X server extensions,
+@@ -476,13 +504,13 @@
+ 4.4 XAA
+
+ The XFree86 Acceleration Architecture (XAA) was completely rewritten from
+-scratch for XFree86 4.x and is used in X11R6.8.1. Most drivers implement
++scratch for XFree86 4.x and is used in X11R6.8.2. Most drivers implement
+ acceleration by making use of the XAA module. The Xorg server will accept
+ modules built either for XFree86 4.4 servers or its own.
+
+ 4.5 Multi-head
+
+-Some multi-head configurations are supported in X11R6.8.1, primarily with
++Some multi-head configurations are supported in X11R6.8.2, primarily with
+ multiple PCI/AGP cards.
+
+ One of the main problems is with drivers not sufficiently initialising cards
+@@ -505,7 +533,7 @@
+ Xinerama is not enabled by default, and can be enabled with the +xinerama
+ command line option for the X server.
+
+-Xinerama was included with X11R6.4. The version included in X11R6.8.1 was
++Xinerama was included with X11R6.4. The version included in X11R6.8.2 was
+ completely rewritten for improved performance and correctness.
+
+ Known problems:
+@@ -517,7 +545,7 @@
+
+ 4.7 DGA version 2
+
+-DGA 2.0 is included in 6.8.1. Documentation for the client libraries can be
++DGA 2.0 is included in 6.8.2. Documentation for the client libraries can be
+ found in the XDGA(3) man page. A good degree of backwards compatibility with
+ version 1.0 is provided.
+
+@@ -554,11 +582,11 @@
+
+ 4.10 XVideo Extension (Xv)
+
+-The XVideo extension is supported in X11R6.7.x. An XvQueryPortAttributes
+-function has been added as well as support for XvImages. XvImages are XIm-
+-ages in alternate color spaces such as YUV and can be passed to the server
+-through shared memory segments. This allows clients to display YUV data with
+-high quality hardware scaling and filtering.
++The XVideo extension is supported in X11R6.7.x and newer releases. An
++XvQueryPortAttributes function has been added as well as support for XvIm-
++ages. XvImages are XImages in alternate color spaces such as YUV and can be
++passed to the server through shared memory segments. This allows clients to
++display YUV data with high quality hardware scaling and filtering.
+
+ 4.11 X Rendering Extension (Render)
+
+@@ -589,17 +617,18 @@
+ To allow a graceful transition for applications moving from core text render-
+ ing to the Render extension, Xft can use either the core rendering requests
+ or the Render extension for text. See the section on FreeType support in Xft
+-for instructions on configuring X11R6.8.1 to use an existing FreeType instal-
++for instructions on configuring X11R6.8.2 to use an existing FreeType instal-
+ lation.
+
+ The Xft library uses configuration files, /etc/fonts/fonts.conf and
+ /etc/fonts/local.conf, which contains information about which directories
+ contain font files and also provides a sophisticated font aliasing mechanism.
+-Documentation for that file is included in the Xft(3) man page.
++Documentation for that file is included in the Xft(3), fontconfig(3) and
++fonts.conf(4) man pages.
+
+ 4.11.2 Application Support For Anti-Aliased Text
+
+-Only four applications have been modified in X11R6.8.1 to work with the Ren-
++Only four applications have been modified in X11R6.8.2 to work with the Ren-
+ der extension and the Xft and FreeType libraries to provide anti-aliased
+ text: xterm, xditview, x11perf and xclock. Migration of other applications
+ may occur in future releases.
+@@ -645,32 +674,32 @@
+
+ o Please refer to xedit(1) for more details.
+
+- o XPrint support.
++ o Support for printing via Xprint.
+
+ 4.14 Font support
+
+-Details about the font support in X11R6.8.1.x can be found in the
+-README.fonts document.
++Details about the font support in X11R6.8.x can be found in the README.fonts
++document.
+
+ 4.15 TrueType support
+
+ X11R6.7 came with two TrueType backends. The functionality from the `X-True-
+-Type' backend has been integrated into the `FreeType' backend which is
+-designed to transparently support all of the functionality from the `X-True-
+-Type' backend with the exception of the font encoding libraries; the
+-`FreeType' backend uses only the fontenc-based encoding system .
++Type' (="XTT") backend has been integrated into the `FreeType' backend which
++is designed to transparently support all of the functionality from the `X-
++TrueType' backend with the exception of the font encoding libraries; the
++`FreeType' backend uses only the fontenc-based encoding system.
+
+ 4.16 CID font support
+
+-Support for CID-keyed fonts is included in X11R6.8.1 The CID-keyed font for-
++Support for CID-keyed fonts is included in X11R6.8.2 The CID-keyed font for-
+ mat was designed by Adobe Systems <URL:http://www.adobe.com> for fonts with
+-large character sets. The CID-keyed font support in X11R6.8.1 was donated by
++large character sets. The CID-keyed font support in X11R6.8.2 was donated by
+ SGI <URL:http://www.sgi.com>. See the LICENSE document for a copy of the CID
+ Font Code Public License.
+
+ 4.17 Internationalisation of the scalable font backends
+
+-X11R6.8.1 has a ``fontenc'' layer to allow the scalable font backends to use
++X11R6.8.2 has a ``fontenc'' layer to allow the scalable font backends to use
+ a common method of font re-encoding. This re-encoding makes it possible to
+ uses fonts in encodings other than their their native encoding. This layer
+ is used by the Type1, Speedo and FreeType backends.
+@@ -684,7 +713,7 @@
+
+ 4.19 Unicode/ISO 10646 support
+
+-What is included in X11R6.8.1
++What is included in X11R6.8.2
+
+ o All ``-misc-fixed-*'' BDF fonts are now available in the ISO10646-1
+ encoding and cover at least the 614 characters found in ISO
+@@ -718,7 +747,7 @@
+ 4.20 Xlib Compose file support and extensions
+
+ A more flexible Compose file processing system was added to Xlib in
+-X11R6.8.1. The compose file is searched for in the following order:
++X11R6.8.2. The compose file is searched for in the following order:
+
+ 1. If the environment variable $XCOMPOSEFILE is set, its value is used as
+ the name of the Compose file.
+@@ -765,14 +794,14 @@
+
+ 4.21 Bitstream Vera fonts
+
+-X11R6.8.1 includes the Bitstream Vera family of typefaces in TrueType format.
++X11R6.8.2 includes the Bitstream Vera family of typefaces in TrueType format.
+ This family includes the ``Bitstream Vera Sans'', ``Bitstream Vera Sans
+ Mono'' and ``Bitstream Vera Serif'' in Roman and Bold varients as well as the
+ ``Bitstream Vera Sans'' and ``Bitstream Vera Sans Mono'' in Oblique and Bold
+ Oblique. These fonts include all of the glyphs needed for ISO 8859 parts 1
+ 9 and 15.
+
+-The license terms for the Vera fonts are inclued in the file COPYRIGHT.Vera>.
++The license terms for the Vera fonts are inclued in the file COPYRIGHT.Vera.
+
+ 4.22 Luxi fonts from Bigelow and Holmes
+
+@@ -801,7 +830,7 @@
+
+ 5. Miscellaneous
+
+-This section describes other items of note for the X11R6.8.1 release.
++This section describes other items of note for the X11R6.8.2 release.
+
+ 5.1 Legacy keyboard driver phase-out
+
+@@ -862,22 +891,28 @@
+
+ 6. Attributions/Acknowledgements/Credits
+
+-This section lists the credits for the X11R6.8.1 release. For a more
++This section lists the credits for the X11R6.8.2 release. For a more
+ detailed breakdown, refer to the ChangeLog file in the X.Org source tree, the
+ ChangeLog's in or the 'cvs log' information for individual source files."
+
+- These people contributed in some way to X11R6.8.1
+- Paul Anderson, Eric Anholt, Daniel Berrange, Russ Blaine, Ryan
+- Breen, Alan Coopersmith, Michel Daenzer, David Dawes, Alex
+- Deucher, Stefan Dirsch, Egbert Eich, Rik Faith, Jim Gettys,
+- Alexander Gottwald, Mike A. Harris, John Harper, John Heasley,
+- Matthieu Herrb, Alan Hourihane, Kristian Høsberg, Harold L. Hunt
+- II, Adam Jackson, Deron Johnson, Ivan Kokshaysky, Stuart Kreit-
+- man, Peter Kunzman, Nolan Leake, Ryan Lortie, Andreas Luik, Tor-
+- rey T. Lyons, Roland Mainz, Guy Martin, Kevin E. Martin, Keith
+- Packard, Greg Parker, Aaron Plattner, Søren Sandmann, Ty Sarna,
+- Yu Shao, Bryan Stine, Owen Taylor, Travis Tilley, Ryan Underwood,
+- Ronny Vindenes, Chisato Yamauchi
++ These people contributed in some way to X11R6.8.2
++ Paul Anderson, Eric Anholt, Dave Airlie, Donnie Berkholz, Daniel
++ Berrange, Thomas Biege, Russ Blaine, Ryan Breen, Alan Cooper-
++ smith, Jay Cotton, Michel Daenzer, David Dawes, Kevin DeKorte,
++ Alex Deucher, Stefan Dirsch, Egbert Eich, Rik Faith, Jim Gettys,
++ Giuseppe Ghibò, Thomas Gilg, Alexander Gottwald, Mike A. Harris,
++ John Harper, John Heasley, Jeremy Huddleston, Matthieu Herrb,
++ Alan Hourihane, Jay Hobson, Matthias Hopf, Kristian Høsberg,
++ Harold L. Hunt II, Adam Jackson, Daniel Jacobowitz, Deron John-
++ son, Masaki Katakai, Stephen Kennedy, Ivan Kokshaysky, Stuart
++ Kreitman, Peter Kunzman, Julien Lafon, Nolan Leake, Ryan Lortie,
++ Andreas Luik, Torrey T. Lyons, Roland Mainz, Guy Martin, Kevin E.
++ Martin, Dan McNichol, Dagfinn Ilmari Mannsaker, Simon Montagu,
++ Keith Packard, Greg Parker, Drew Parsons, Aaron Plattner, Branden
++ Robinson, Søren Sandmann, Ty Sarna, Yu Shao, Gustavo Noronha
++ Silva, Bryan Stine, Owen Taylor, Travis Tilley, Ryan Underwood,
++ Ronny Vindenes, Chisato Yamauchi, Mark Vojkovich, Tim Yamin, Hui
++ Yu
+
+ The X Window System has been a collaborative effort from its inception. Our
+ apologies for anyone or organization inadvertently overlooked. Many individ-
+@@ -886,105 +921,103 @@
+
+ This product includes software developed by:
+ Paul Anderson, Michael Bax, Jehan Bing, Peter Breitenlohner, Alan
+- Coopersmith, Egbert Eich, John Dennis, Fabrizio Gennari, Jim Get-
+- tys, Alexander Gottwald, Ralf Habacker Mike Harris, Mattheiu
+- Herrb Alan Hourihane, Harold L Hunt II, Elliot Lee, Jeremy Katz,
+- Kaleb Keithley, Stuart Kreitman, Andreas Luik, Torrey Lyons,
+- Roland Mainz, Kevin E. Martin, Takuma Murakami, Kensuke Mat-
+- suzaki, Keith Packard, Ivan Pascal, Earle F. Philhower III, Ben-
+- jamin Rienfenstahl, Leon Shiman, Toshimitsu Tanaka, Nicholas
+- Wourms.
+-
+- 2d3d Inc., Aaron Plattner, Adam de Boor, Adam Jackson, Adobe Sys-
+- tems Inc., After X-TT Project, AGE Logic Inc., Alan Coopersmith,
+- Alan Cox, Alan Hourihane, Alexander Gottwald, Alex Deucher,
+- Andreas Luik, Andreas Monitzer, Andrew C Aitchison, Andy Ritger,
+- Ani Joshi, Anton Zioviev, Apollo Computer Inc., Apple Computer
+- Inc., Ares Software Corp., AT&T Inc., ATI Technologies Inc., Ben-
+- jamin Rienfenstahl, Bigelow and Holmes, Bill Reynolds, Bitstream
+- Inc., Bitstream, Inc, Brian Fundakowski Feldman, Brian Goines,
+- Brian Paul, Bruno Haible, Bryan Stine, Charles Murcko, Chen
+- Xiangyang, Chisato Yamauchi, Chris Constello, Christian Zietz,
+- Cognition Corp., Compaq Computer Corporation, Concurrent Computer
+- Corporation, Conectiva S.A., Corin Anderson, Craig Struble, Dae-
+- woo Electronics Co. Ltd., Dale Schumacher, Damien Miller, Daniel
+- Berrange, Daniel Stone, Daniver Limited, Daryll Strauss, Data
+- General Corporation, David Bateman, David Dawes, David E. Wexel-
+- blat, David Holland, David J. McKay, David McCullough, David Mos-
+- berger-Tang, David S. Miller, Davor Matic, Deron Johnson, Digital
+- Equipment Corporation, Dirk Hohndel, Doug Anson, Earle F. Phil-
+- hower III, Edouard TISSERANT, Eduardo Horvath, Egbert Eich,
+- Elliot Lee, Eric Anholt, Eric Fortune, Eric Sunshine, Erik For-
+- tune, Erik Nygren, Evans & Sutherland Computer Corporation, Fabio
+- Massimo Di Nitto Fabrizio Gennari, Finn Thoegersen, Frederic Lep-
+- ied, Free Software Foundation Inc., Fujitsu Limited, Fujitsu Open
+- Systems Solutions Inc., Fuji Xerox Co. Ltd., Geert Uytterhoeven,
+- Gerrit Jan Akkerman, Gerry Toll, Glenn G. Lai, GNOME Foundation,
+- Go Watanabe, Gregory Mokhin, Greg Parker, GROUPE BULL, Guy Mar-
+- tin, Hans Oey, Harald Koenig, Harm Hanemaayer, Harold L Hunt II,
+- Harry Langenbacher, Henry A. Worth, Hewlett-Packard Company,
+- Hitachi Ltd, Holger Veit, Howard Greenwell, Hummingbird Communi-
+- cations Ltd., IBM Corporation, Intel Corporation, INTERACTIVE
+- Systems Corporation, International Business Machines Corp., Itai
+- Nahshon, Ivan Kokshaysky, Ivan Pascal, Jakub Jelinek, James Tsil-
+- las, Jason Bacon, Jean-loup Gailly, Jeff Kirk, Jeffrey Hsu, Jehan
+- Bing, Jeremy Katz, Jim Gettys, Jim Tsillas, J. Kean Johnston,
+- John Dennis, John Harper, John Heasley, Jon Block, Jon Tombs,
+- Jorge Delgado, Joseph Friedman, Joseph V. Moss, Juliusz
+- Chroboczek, Jyunji Takagi, Kaleb Keithley, Kaleb S. Keithley,
+- Kazushi (Jam) Marukawa, Kazuyuki (ikko-) Okamoto, Kean Johnston.
+- Keith Packard, Keith Packard, Keith Whitwell, Kensuke Matsuzaki,
+- Kristian Høgsberg, Larry Wall, Lawrence Berkeley Laboratory,
+- Lennart Augustsson, Leon Shiman, Lexmark International Inc.,
+- Linus Torvalds, Luc Verhaegen, Machine Vision Holdings Inc., Man-
+- fred Brands, Marc Aurele La France Mark Adler, Mark J. Kilgard,
+- Mark Leisher, Mark Smulders, Mark Vojkovich, Massachusetts Insti-
+- tute Of Technology, Matrox Graphics, Mattheiu Herrb Matthew
+- Grossman, Matthieu Herrb, Metro Link Inc., Michael Bax, Michael
+- H. Schimek, Michael P. Marking, Michael Schimek, Michael Smith,
+- Michel Daenzer, Mike A. Harris, Mike Harris, Ming Yu, MIPS Com-
+- puter Systems Inc., National Semiconductor, NCR Corporation Inc.,
+- Netscape Communications Corporation, Network Computing Devices
+- Inc., Nicholas Wourms, Noah Levitt, Nolan Leake, Novell Inc.,
+- Nozomi YTOW, NTT Software Corporation, Number Nine Computer
+- Corp., Number Nine Visual Technologies, NVIDIA Corp., Oivier
+- Danet, Oki Technosystems Laboratory Inc., OMRON Corporation, Open
+- Software Foundation, Orest Zborowski, Owen Taylor, Pablo Saratx-
+- aga, Panacea Inc., Panagiotis Tsirigotis, Paolo Severini, Pascal
+- Haible, Patrick Lecoanet, Patrick Lerda, Paul Anderson, Paul
+- Elliott, Peter Breitenlohner, Peter Kunzmann, Peter Trattler,
+- Philip Homburg, Precision Insight Inc., Prentice Hall, Quarter-
+- deck Office Systems, Ralf Habacker Randy Hendry, Ranier Keller,
+- Red Hat Inc., Regents of the University of California, Regis
+- Cridlig, Rene Cougnenc, Richard A. Hecker, Richard Burdick, Rich
+- Murphey, Rickard E. Faith, Rik Faith, Robert Baron, Robert
+- Chesler, Robert Millan. Robert V. Baron, Robin Cutshaw, Roland
+- Mainz, Ronny Vindenes, Russ Blaine, Ryan Breen, Ryan Lortie, Ryan
+- Underwood, S3 Graphics Inc., Sam Leffler, SciTech Software, Scott
+- Laird, Sebastien Marineau, Shigehiro Nomura, ShoGraphics Inc.,
+- Shunsuke Akiyama, Silicon Graphics Computer Systems Inc., Silicon
+- Integrated Systems Corp Inc., Silicon Motion Inc., Simon P.
+- Cooper, Snitily Graphics Consulting Services, Sony Corporation,
+- Søren Sandmann, SRI, Stanislav Brabec, Stefan Dirsch, Stephan
+- Dirsch, Stephan Lang, Steven Lang, Stuart Kreitman, Sun Microsys-
+- tems Inc., SunSoft Inc., SuSE Inc, Sven Luther, Takis Psarogian-
+- nakopoulos, Takuma Murakami, Takuya SHIOZAKI, Tektronix Inc., The
+- DOS-EMU-Development-Team, The Institute of Software Academia
+- Sinica, The NetBSD Foundation, Theo de Raadt, Theodore Ts'o, The
+- Open Group, The Open Software Foundation, The Regents of the Uni-
+- versity of California, The Santa Cruz Operation Inc., The Weather
+- Channel Inc., The X Consortium, The XFree86 Project Inc., Thomas
+- E. Dickey, Thomas G. Lane, Thomas Hellström, Thomas Mueller,
+- Thomas Roell, Thomas Thanner, Thomas Winischhofer, Thomas Wol-
+- fram, Thorsten.Ohl, Tiago Gons, Todd C. Miller, Tomohiro KUBOTA,
+- Torrey Lyons, Torrey T. Lyons, TOSHIBA Corp., Toshimitsu Tanaka,
+- Travis Tilley, Tungsten Graphics Inc., Ty Sarna, UCHIYAMA
+- Yasushi, Unicode Inc., UniSoft Group Limited, University of Utah,
+- UNIX System Laboratories Inc., URW++ GmbH, VA Linux Systems, VIA
+- Technologies Inc., Video Electronics Standard, VMware Inc., Vrije
+- Universiteit, Wittawat Yamwong, Wyse Technology Inc., X Consor-
+- tium, Xi Graphics Inc., X-Oz Technologies, X-TrueType Server Pro-
+- ject and their contributors, Yu Shao,
++ Coopersmith, Thomas Dickey, Egbert Eich, John Dennis, Fabrizio
++ Gennari, Jim Gettys, Alexander Gottwald, Ralf Habacker, Mike Har-
++ ris, Mattheiu Herrb, Alan Hourihane, Harold L Hunt II, Elliot
++ Lee, Jeremy Katz, Kaleb Keithley, Stuart Kreitman, Andreas Luik,
++ Torrey Lyons, Roland Mainz, Kevin E. Martin, Takuma Murakami,
++ Kensuke Matsuzaki, Keith Packard, Ivan Pascal, Earle F. Philhower
++ III, Benjamin Rienfenstahl, Leon Shiman, Toshimitsu Tanaka,
++ Nicholas Wourms, 2d3d Inc., Aaron Plattner, Adam de Boor, Adam
++ Jackson, Adobe Systems Inc., After X-TT Project, AGE Logic Inc.,
++ Alan Coopersmith, Alan Cox, Alan Hourihane, Alexander Gottwald,
++ Alex Deucher, Andreas Luik, Andreas Monitzer, Andrew C Aitchison,
++ Andy Ritger, Ani Joshi, Anton Zioviev, Apollo Computer Inc.,
++ Apple Computer Inc., Ares Software Corp., AT&T Inc., ATI Tech-
++ nologies Inc., Benjamin Rienfenstahl, Bigelow and Holmes, Bill
++ Reynolds, Bitstream Inc., Bitstream, Inc, Brian Fundakowski Feld-
++ man, Brian Goines, Brian Paul, Bruno Haible, Bryan Stine, Charles
++ Murcko, Chen Xiangyang, Chisato Yamauchi, Chris Constello, Chris-
++ tian Zietz, Cognition Corp., Compaq Computer Corporation, Concur-
++ rent Computer Corporation, Conectiva S.A., Corin Anderson, Craig
++ Struble, Daewoo Electronics Co. Ltd., Dale Schumacher, Damien
++ Miller, Daniel Berrange, Daniel Stone, Daniver Limited, Daryll
++ Strauss, Data General Corporation, David Bateman, David Dawes,
++ David E. Wexelblat, David Holland, David J. McKay, David McCul-
++ lough, David Mosberger-Tang, David S. Miller, Davor Matic, Deron
++ Johnson, Digital Equipment Corporation, Dirk Hohndel, Doug Anson,
++ Earle F. Philhower III, Edouard TISSERANT, Eduardo Horvath,
++ Egbert Eich, Elliot Lee, Eric Anholt, Eric Fortune, Eric Sun-
++ shine, Erik Fortune, Erik Nygren, Evans & Sutherland Computer
++ Corporation, Fabio Massimo Di Nitto Fabrizio Gennari, Finn
++ Thoegersen, Frederic Lepied, Free Software Foundation Inc.,
++ Fujitsu Limited, Fujitsu Open Systems Solutions Inc., Fuji Xerox
++ Co. Ltd., Geert Uytterhoeven, Gerrit Jan Akkerman, Gerry Toll,
++ Glenn G. Lai, GNOME Foundation, Go Watanabe, Gregory Mokhin, Greg
++ Parker, GROUPE BULL, Guy Martin, Hans Oey, Harald Koenig, Harm
++ Hanemaayer, Harold L Hunt II, Harry Langenbacher, Henry A. Worth,
++ Hewlett-Packard Company, Hitachi Ltd, Holger Veit, Howard Green-
++ well, Hummingbird Communications Ltd., IBM Corporation, Intel
++ Corporation, INTERACTIVE Systems Corporation, International Busi-
++ ness Machines Corp., Itai Nahshon, Ivan Kokshaysky, Ivan Pascal,
++ Jakub Jelinek, James Tsillas, Jason Bacon, Jean-loup Gailly, Jeff
++ Kirk, Jeffrey Hsu, Jehan Bing, Jeremy Katz, Jim Gettys, Jim Tsil-
++ las, J. Kean Johnston, John Dennis, John Harper, John Heasley,
++ Jon Block, Jon Tombs, Jorge Delgado, Joseph Friedman, Joseph V.
++ Moss, Juliusz Chroboczek, Jyunji Takagi, Kaleb Keithley, Kaleb S.
++ Keithley, Kazushi (Jam) Marukawa, Kazuyuki (ikko-) Okamoto, Kean
++ Johnston. Keith Packard, Keith Packard, Keith Whitwell, Kensuke
++ Matsuzaki, Kristian Høgsberg, Larry Wall, Lawrence Berkeley Labo-
++ ratory, Lennart Augustsson, Leon Shiman, Lexmark International
++ Inc., Linus Torvalds, Luc Verhaegen, Machine Vision Holdings
++ Inc., Manfred Brands, Marc Aurele La France Mark Adler, Mark J.
++ Kilgard, Mark Leisher, Mark Smulders, Mark Vojkovich, Mas-
++ sachusetts Institute Of Technology, Matrox Graphics, Mattheiu
++ Herrb Matthew Grossman, Matthieu Herrb, Metro Link Inc., Michael
++ Bax, Michael H. Schimek, Michael P. Marking, Michael Schimek,
++ Michael Smith, Michel Daenzer, Mike A. Harris, Mike Harris, Ming
++ Yu, MIPS Computer Systems Inc., National Semiconductor, NCR Cor-
++ poration Inc., Netscape Communications Corporation, Network Com-
++ puting Devices Inc., Nicholas Wourms, Noah Levitt, Nolan Leake,
++ Novell Inc., Nozomi YTOW, NTT Software Corporation, Number Nine
++ Computer Corp., Number Nine Visual Technologies, NVIDIA Corp.,
++ Oivier Danet, Oki Technosystems Laboratory Inc., OMRON Corpora-
++ tion, Open Software Foundation, Orest Zborowski, Owen Taylor,
++ Pablo Saratxaga, Panacea Inc., Panagiotis Tsirigotis, Paolo Sev-
++ erini, Pascal Haible, Patrick Lecoanet, Patrick Lerda, Paul
++ Anderson, Paul Elliott, Peter Breitenlohner, Peter Kunzmann,
++ Peter Trattler, Philip Homburg, Precision Insight Inc., Prentice
++ Hall, Quarterdeck Office Systems, Ralf Habacker Randy Hendry,
++ Ranier Keller, Red Hat Inc., Regents of the University of Cali-
++ fornia, Regis Cridlig, Rene Cougnenc, Richard A. Hecker, Richard
++ Burdick, Rich Murphey, Rickard E. Faith, Rik Faith, Robert Baron,
++ Robert Chesler, Robert Millan. Robert V. Baron, Robin Cutshaw,
++ Roland Mainz, Ronny Vindenes, Russ Blaine, Ryan Breen, Ryan Lor-
++ tie, Ryan Underwood, S3 Graphics Inc., Sam Leffler, SciTech Soft-
++ ware, Scott Laird, Sebastien Marineau, Shigehiro Nomura, Sho-
++ Graphics Inc., Shunsuke Akiyama, Silicon Graphics Computer Sys-
++ tems Inc., Silicon Integrated Systems Corp Inc., Silicon Motion
++ Inc., Simon P. Cooper, Snitily Graphics Consulting Services, Sony
++ Corporation, Søren Sandmann, SRI, Stanislav Brabec, Stefan
++ Dirsch, Stephan Dirsch, Stephan Lang, Steven Lang, Stuart Kreit-
++ man, Sun Microsystems Inc., SunSoft Inc., SuSE Inc, Sven Luther,
++ Takis Psarogiannakopoulos, Takuma Murakami, Takuya SHIOZAKI, Tek-
++ tronix Inc., The DOS-EMU-Development-Team, The Institute of Soft-
++ ware Academia Sinica, The NetBSD Foundation, Theo de Raadt,
++ Theodore Ts'o, The Open Group, The Open Software Foundation, The
++ Regents of the University of California, The Santa Cruz Operation
++ Inc., The Weather Channel Inc., The X Consortium, The XFree86
++ Project Inc., Thomas E. Dickey, Thomas G. Lane, Thomas Hellström,
++ Thomas Mueller, Thomas Roell, Thomas Thanner, Thomas Winis-
++ chhofer, Thomas Wolfram, Thorsten.Ohl, Tiago Gons, Todd C.
++ Miller, Tomohiro KUBOTA, Torrey Lyons, Torrey T. Lyons, TOSHIBA
++ Corp., Toshimitsu Tanaka, Travis Tilley, Tungsten Graphics Inc.,
++ Ty Sarna, UCHIYAMA Yasushi, Unicode Inc., UniSoft Group Limited,
++ University of Utah, UNIX System Laboratories Inc., URW++ GmbH, VA
++ Linux Systems, VIA Technologies Inc., Video Electronics Standard,
++ VMware Inc., Vrije Universiteit, Wittawat Yamwong, Wyse Technol-
++ ogy Inc., X Consortium, Xi Graphics Inc., X-Oz Technologies, X-
++ TrueType Server Project and their contributors, Yu Shao,
+
+ This product includes software developed by The XFree86 Project,
+ Inc (http://www.xfree86.org/) and its contributors.
+@@ -1005,4 +1038,4 @@
+ and its contributors.
+
+
+-$XdotOrg: xc/RELNOTES,v 1.5.2.1 2004/09/17 15:38:17 kem Exp $
++$XdotOrg: xc/RELNOTES,v 1.5.2.3 2005/02/08 23:54:04 kem Exp $
+Index: xc/config/cf/Imakefile
+diff -u xc/config/cf/Imakefile:1.3 xc/config/cf/Imakefile:1.3.2.1
+--- xc/config/cf/Imakefile:1.3 Mon Aug 9 22:37:21 2004
++++ xc/config/cf/Imakefile Wed Dec 15 03:26:31 2004
+@@ -26,7 +26,8 @@
+ xorgsite.def \
+ $(VERSIONDEFFILES) \
+ $(HOSTDEFFILES) \
+-site.def
++site.def \
++xorgversion.def
+
+ RULEFILES = \
+ Imake.rules \
+Index: xc/config/cf/OpenBSDLib.tmpl
+diff -u xc/config/cf/OpenBSDLib.tmpl:1.6 xc/config/cf/OpenBSDLib.tmpl:1.6.2.1
+--- xc/config/cf/OpenBSDLib.tmpl:1.6 Thu Sep 2 01:10:28 2004
++++ xc/config/cf/OpenBSDLib.tmpl Mon Dec 13 03:20:44 2004
+@@ -175,7 +175,7 @@
+ # elif OSMajorVersion > 3 || OSMajorVersion == 3 && OSMinorVersion >= 6
+
+ # ifndef SharedX11Rev
+-# define SharedX11Rev 8.0
++# define SharedX11Rev 8.1
+ # endif
+ # ifndef SharedXThrStubRev
+ # define SharedXThrStubRev 8.0
+@@ -225,22 +225,22 @@
+ # endif
+ # endif
+ # ifndef SharedGlxRev
+-# define SharedGlxRev 3.0
++# define SharedGlxRev 3.1
+ # endif
+ # ifndef SharedOSMesaRev
+-# define SharedOSMesaRev 5.0
++# define SharedOSMesaRev 6.0
+ # endif
+ # ifndef SharedGLwRev
+ # define SharedGLwRev 3.0
+ # endif
+ # ifndef SharedXrenderRev
+-# define SharedXrenderRev 3.0
++# define SharedXrenderRev 3.1
+ # endif
+ # ifndef SharedXrandrRev
+ # define SharedXrandrRev 4.0
+ # endif
+ # ifndef SharedXcursorRev
+-# define SharedXcursorRev 2.0
++# define SharedXcursorRev 2.2
+ # endif
+ # ifndef SharedXfontcacheRev
+ # define SharedXfontcacheRev 3.0
+@@ -273,7 +273,7 @@
+ # define SharedXawRev 9.0
+ # endif
+ # ifndef SharedXaw6Rev
+-# define SharedXaw6Rev 8.0
++# define SharedXaw6Rev 8.1
+ # endif
+ # ifndef SharedXiRev
+ # define SharedXiRev 8.0
+@@ -294,7 +294,7 @@
+ # define SharedFSRev 8.0
+ # endif
+ # ifndef SharedFontRev
+-# define SharedFontRev 3.0
++# define SharedFontRev 4.0
+ # endif
+ # ifndef SharedFontEncRev
+ # define SharedFontEncRev 3.0
+@@ -303,16 +303,16 @@
+ # define SharedXpmRev 6.0
+ # endif
+ # ifndef SharedFreetype2Rev
+-# define SharedFreetype2Rev 12.0
++# define SharedFreetype2Rev 13.0
+ # endif
+ # ifndef SharedExpatRev
+ # define SharedExpatRev 5.0
+ # endif
+ # ifndef SharedXft1Rev
+-# define SharedXft1Rev 2.0
++# define SharedXft1Rev 3.0
+ # endif
+ # ifndef SharedXftRev
+-# define SharedXftRev 4.0
++# define SharedXftRev 5.0
+ # endif
+ # ifndef SharedFontconfigRev
+ # define SharedFontconfigRev 2.0
+Index: xc/config/cf/X11.tmpl
+diff -u xc/config/cf/X11.tmpl:1.35 xc/config/cf/X11.tmpl:1.35.2.3
+--- xc/config/cf/X11.tmpl:1.35 Fri Sep 3 16:18:18 2004
++++ xc/config/cf/X11.tmpl Tue Feb 1 04:07:39 2005
+@@ -1,6 +1,6 @@
+ XCOMM ----------------------------------------------------------------------
+ XCOMM X Window System Build Parameters and Rules
+-XCOMM $XdotOrg: xc/config/cf/X11.tmpl,v 1.35 2004/09/03 16:18:18 kem Exp $
++XCOMM $XdotOrg: xc/config/cf/X11.tmpl,v 1.35.2.3 2005/02/01 04:07:39 gisburn Exp $
+ XCOMM $Xorg: X11.tmpl,v 1.6 2000/08/17 19:41:46 cpqbld Exp $
+ XCOMM
+ XCOMM
+@@ -473,7 +473,10 @@
+ #define BuildCup YES
+ #endif
+ #ifndef HasPlugin
+-#define HasPlugin NO
++/* Browser plugins are shared libraries - only build them if the OS
++ * supports shared libs.
++ */
++#define HasPlugin HasSharedLibraries
+ #endif
+ #ifndef BuildPlugin
+ #define BuildPlugin HasPlugin
+@@ -680,6 +683,10 @@
+ #define BuildXevieLibrary !BuildServersOnly
+ #endif
+
++#ifndef BuildRootless
++#define BuildRootless NO
++#endif
++
+ #ifndef BuildXterm
+ #define BuildXterm BuildClients
+ #endif
+@@ -1237,6 +1244,14 @@
+ #endif
+ #endif
+
++#ifndef RootlessDefines
++#if BuildRootless
++#define RootlessDefines -DROOTLESS
++#else
++#define RootlessDefines /**/
++#endif
++#endif
++
+ #ifndef SitePervasiveExtensionDefines
+ #define SitePervasiveExtensionDefines /**/
+ #endif
+@@ -1247,7 +1262,8 @@
+ XF86BigfontExtensionDefines DPMSDefines \
+ LowMemDefines XprintDefines XineramaDefines \
+ SitePervasiveExtensionDefines RenderDefines RandRDefines \
+- XfixesDefines XDamageDefines CompositeDefines XevieDefines
++ XfixesDefines XDamageDefines CompositeDefines XevieDefines \
++ RootlessDefines
+ #endif
+ #ifndef SiteExtensionDefines
+ #define SiteExtensionDefines /**/
+Index: xc/config/cf/cygwin.cf
+diff -u xc/config/cf/cygwin.cf:1.14.2.1 xc/config/cf/cygwin.cf:1.14.2.3
+--- xc/config/cf/cygwin.cf:1.14.2.1 Fri Sep 17 15:38:18 2004
++++ xc/config/cf/cygwin.cf Tue Feb 1 23:55:56 2005
+@@ -1,15 +1,17 @@
+ /* Cygwin/X vendor strings and version */
++#include "xorgversion.def"
++
+ #ifndef CygxVersionMajor
+-# define CygxVersionMajor 6
++# define CygxVersionMajor XORG_VERSION_MAJOR
+ #endif
+ #ifndef CygxVersionMinor
+-# define CygxVersionMinor 8
++# define CygxVersionMinor XORG_VERSION_MINOR
+ #endif
+ #ifndef CygxVersionPatch
+-# define CygxVersionPatch 1
++# define CygxVersionPatch XORG_VERSION_PATCH
+ #endif
+ #ifndef CygxVersionSnap
+-# define CygxVersionSnap 0
++# define CygxVersionSnap XORG_VERSION_SNAP
+ #endif
+ #ifndef CygxVersionServer
+ # define CygxVersionServer 0
+@@ -329,6 +331,7 @@
+ # define XWinMultiWindowDefines
+ #endif /* BuildXWinMultiWindow */
+ #if BuildXWinMultiWindowExtWM
++# define BuildRootless YES
+ # define XWinMultiWindowExtWMDefines -DXWIN_MULTIWINDOWEXTWM
+ #else /* BuildXWinMultiWindowExtWM */
+ # define XWinMultiWindowExtWMDefines
+Index: xc/config/cf/darwin.cf
+diff -u xc/config/cf/darwin.cf:1.4 xc/config/cf/darwin.cf:1.4.2.1
+--- xc/config/cf/darwin.cf:1.4 Thu Sep 2 01:23:45 2004
++++ xc/config/cf/darwin.cf Wed Dec 15 04:53:05 2004
+@@ -1,4 +1,4 @@
+-XCOMM $XdotOrg: xc/config/cf/darwin.cf,v 1.4 2004/09/02 01:23:45 kem Exp $
++XCOMM $XdotOrg: xc/config/cf/darwin.cf,v 1.4.2.1 2004/12/15 04:53:05 gisburn Exp $
+ XCOMM platform: $XFree86: xc/config/cf/darwin.cf,v 1.50 2004/01/20 23:54:50 torrey Exp $
+
+ /* Darwin / Mac OS X configuration by John Carmack <johnc@idsoftware.com> */
+@@ -133,6 +133,7 @@
+ # define GlxExtraDefines -DGLX_DIRECT_RENDERING -DGLX_USE_APPLEGL GlxArchDefines
+ # endif
+
++# define BuildRootless YES
+ #define BuildAppleWMLibrary YES
+
+ #endif /* DarwinQuartzSupport */
+Index: xc/config/cf/sun.cf
+diff -u xc/config/cf/sun.cf:1.9 xc/config/cf/sun.cf:1.9.2.1
+--- xc/config/cf/sun.cf:1.9 Thu Aug 19 16:28:42 2004
++++ xc/config/cf/sun.cf Thu Jan 13 01:18:47 2005
+@@ -1,4 +1,4 @@
+-XCOMM $XdotOrg: xc/config/cf/sun.cf,v 1.9 2004/08/19 16:28:42 kem Exp $
++XCOMM $XdotOrg: xc/config/cf/sun.cf,v 1.9.2.1 2005/01/13 01:18:47 gisburn Exp $
+ XCOMM platform: $Xorg: sun.cf,v 1.4 2000/08/17 19:41:48 cpqbld Exp $
+
+
+@@ -240,6 +240,9 @@
+ # endif
+ # endif
+ #else
++# if HasSunC
++# define CompilerServerExtraDefines $(XF86SRC)/os-support/sunos/sparcv8plus.il
++# endif
+ # define HasPlugin YES
+ #endif
+
+Index: xc/config/cf/xorg.cf
+diff -u xc/config/cf/xorg.cf:1.27.2.2 xc/config/cf/xorg.cf:1.27.2.6
+--- xc/config/cf/xorg.cf:1.27.2.2 Fri Sep 17 15:38:18 2004
++++ xc/config/cf/xorg.cf Mon Jan 24 03:11:42 2005
+@@ -1,4 +1,4 @@
+-XCOMM $XdotOrg: xc/config/cf/xorg.cf,v 1.27.2.2 2004/09/17 15:38:18 kem Exp $
++XCOMM $XdotOrg: xc/config/cf/xorg.cf,v 1.27.2.6 2005/01/24 03:11:42 gisburn Exp $
+ /*
+ * This configuration file contains all of the configuration
+ * information for the Xorg based X Servers.
+@@ -11,13 +11,7 @@
+ /* Get and set version information. */
+
+ #include "date.def"
+-
+-#define XORG_VERSION_MAJOR 6
+-#define XORG_VERSION_MINOR 8
+-#define XORG_VERSION_PATCH 1
+-#define XORG_VERSION_SNAP 0
+-
+-#define XORG_DATE "17 September 2004"
++#include "xorgversion.def"
+
+ #if !defined(XorgVersionString) && \
+ defined(XORG_VERSION_MAJOR) && defined(XORG_VERSION_MINOR) && \
+@@ -421,14 +415,17 @@
+
+ # ifndef DriDrivers
+ # ifndef ia64Architecture
+-# define i386DRIDrivers i810 i915
++# define i386DRIDrivers i810 i915 sis tdfx
+ # else
++ /*
++ * The tdfx driver needs Glide, which is not available for IA64.
++ * SiS is 64-bit unclean as of this writing.
++ */
+ # define i386DRIDrivers /**/
+ # endif
+-# define DriDrivers gamma i386DRIDrivers mga r128 radeon r200 \
+- sis tdfx
++# define DriDrivers gamma i386DRIDrivers mga r128 radeon r200
+ # endif
+-#endif
++#endif /* i386Architecture || ia64Architecture */
+
+ #if defined(AMD64Architecture)
+ /* vgahw module */
+@@ -447,15 +444,17 @@
+ # define XF86CardDrivers mga glint nv tga s3 s3virge sis rendition \
+ neomagic tdfx savage cirrus tseng trident \
+ chips apm i128 ati ark cyrix siliconmotion \
+- vga dummy vesa \
++ vga dummy vesa i810 \
+ XF86OSCardDrivers XF86ExtraCardDrivers
+ # endif
+
+-/* The tdfx driver needs Glide, which is not available for AMD64. SiS is 64-bit
+- * unclean as of this writing.
++/*
++ * The tdfx driver needs Glide, which is not available for AMD64.
++ * SiS is 64-bit unclean as of this writing.
+ */
+-# define DriDrivers gamma mga r128 radeon r200
+-
++# ifndef DriDrivers
++# define DriDrivers i915 gamma mga r128 radeon r200
++# endif
+ #endif /*AMD64Arcitecture*/
+
+ /* SPARC and UltraSPARC drivers */
+@@ -540,7 +539,7 @@
+ DevelDrivers \
+ XF86OSCardDrivers XF86ExtraCardDrivers
+ # endif
+-#endif
++#endif /* OpenBSDArchitecture && Sparc64Architecture */
+
+ /* MIPS drivers */
+
+@@ -564,7 +563,7 @@
+ DevelDrivers newport \
+ XF86OSCardDrivers XF86ExtraCardDrivers
+ # endif
+-#endif
++#endif /* MipsArchitecture */
+
+ /*
+ * DEC Alpha drivers
+@@ -589,11 +588,14 @@
+ savage nv cirrus DevelDrivers siliconmotion \
+ vga XF86OSCardDrivers XF86ExtraCardDrivers
+ # endif
+-/* SiS is 64-bit unclean as of this writing. */
++/*
++ * Glide is available for Alpha, therefore build tdfx DRM module.
++ * SiS is 64-bit unclean as of this writing.
++ */
+ # ifndef DriDrivers
+ # define DriDrivers gamma tdfx mga r128 radeon r200
+ # endif
+-#endif
++#endif /* AlphaArchitecture */
+
+ /*
+ * Motorola 68k and PowerPC drivers
+@@ -623,10 +625,11 @@
+ DevelDrivers vga \
+ XF86OSCardDrivers XF86ExtraCardDrivers
+ # endif
++/* The tdfx driver needs Glide, which is not available for PPC. */
+ # ifndef DriDrivers
+-# define DriDrivers gamma tdfx mga r128 radeon r200
++# define DriDrivers gamma mga r128 radeon r200
+ # endif
+-#endif
++#endif /* PpcArchitecture || Mc68020Architecture */
+
+ /*
+ * Intel StrongARM and Hewlett-Packard PA-RISC
+@@ -672,10 +675,6 @@
+ # ifndef XorgServer
+ # define XorgServer YES
+ # endif
+-/* Amiga framebuffer module */
+-# ifndef XF86AFB
+-# define XF86AFB NO
+-# endif
+ /* 1bpp module */
+ # ifndef XF1Bpp
+ # define XF1Bpp NO
+@@ -700,10 +699,6 @@
+ # ifndef XFShadowFB
+ # define XFShadowFB YES
+ # endif
+-/* vgahw module */
+-# ifndef XF86VgaHw
+-# define XF86VgaHw NO
+-# endif
+ /* fbdevhw module */
+ # ifndef XF86FBDevHw
+ # define XF86FBDevHw YES
+@@ -728,11 +723,23 @@
+ # ifndef XF86RAC
+ # define XF86RAC YES
+ # endif
+-
+ /* int10 module */
+ # ifndef XF86Int10
+ # define XF86Int10 YES
+ # endif
++/* vbe module */
++# ifndef XF86VBE
++# define XF86VBE YES
++# endif
++
++/* vgahw module */
++# ifndef XF86VgaHw
++# define XF86VgaHw NO
++# endif
++/* Amiga framebuffer module */
++# ifndef XF86AFB
++# define XF86AFB NO
++# endif
+
+ # ifndef DevelDrivers
+ # if XFree86Devel
+@@ -756,7 +763,7 @@
+ # ifndef DriDrivers
+ # define DriDrivers gamma r128
+ # endif
+-#endif
++#endif /* Ppc64Architecture */
+
+ /*
+ * For Mips/Arc platforms, the default is to build all modules which
+@@ -1550,7 +1557,7 @@
+ # endif
+ #endif
+
+-#if (GccMajorVersion == 3) && (GccMinorVersion >= 1)
++#if ((GccMajorVersion == 3) && (GccMinorVersion >= 1)) || (GccMajorVersion > 3)
+ # define GccAliasingArgs -fno-strict-aliasing
+ #else
+ # define GccAliasingArgs /* */
+Index: xc/config/cf/xorgsite.def
+diff -u xc/config/cf/xorgsite.def:1.10 xc/config/cf/xorgsite.def:1.10.2.2
+--- xc/config/cf/xorgsite.def:1.10 Sat Aug 21 02:06:44 2004
++++ xc/config/cf/xorgsite.def Mon Dec 13 14:27:33 2004
+@@ -24,7 +24,7 @@
+ * The host.def file will never be patched.
+ *
+ * The distributed version of this file MUST contain no uncommented
+- * definitions. Default definitions belong in xfree86.cf, or <vendor>.cf
++ * definitions. Default definitions belong in xorg.cf, or <vendor>.cf
+ * files.
+ */
+ /******************************************************************************/
+@@ -71,7 +71,7 @@
+ /*
+ * Set the default server (ie the one that gets the sym-link to "X")
+ *
+-#define ServerToInstall XFree86
++#define ServerToInstall Xorg
+ */
+
+ /*
+Index: xc/config/cf/xorgversion.def
+diff -u /dev/null xc/config/cf/xorgversion.def:1.1.4.6
+--- /dev/null Fri Feb 11 21:35:29 2005
++++ xc/config/cf/xorgversion.def Wed Feb 9 18:03:20 2005
+@@ -0,0 +1,6 @@
++#define XORG_VERSION_MAJOR 6
++#define XORG_VERSION_MINOR 8
++#define XORG_VERSION_PATCH 2
++#define XORG_VERSION_SNAP 0
++
++#define XORG_DATE "9 February 2005"
+Index: xc/config/cf/xprint_site.def
+diff -u xc/config/cf/xprint_site.def:1.3 xc/config/cf/xprint_site.def:1.3.4.2
+--- xc/config/cf/xprint_site.def:1.3 Tue May 4 22:58:59 2004
++++ xc/config/cf/xprint_site.def Mon Dec 13 14:27:33 2004
+@@ -90,7 +90,6 @@
+ #define BuildGlxExt NO
+ #define BuildXIE NO
+ /* X extensions not needed */
+-#define BuildDBE NO
+ #define BuildXKB NO
+ #define BuildRECORD NO
+ #define BuildDPMS NO
+@@ -136,7 +135,7 @@
+ #endif /* BuildXprintAppsOnly */
+
+ /* Set our own XVendorString/XVendorRelease
+- * (and to avoid that xfree86.cf sets it's own stuff here) */
++ * (and to avoid that xorg.cf sets it's own stuff here) */
+ #define XVendorString "xprint.mozdev.org"
+ #define XVendorRelease 100000
+
+Index: xc/config/docbook/docbookconv.sh
+diff -u xc/config/docbook/docbookconv.sh:1.2 xc/config/docbook/docbookconv.sh:1.2.6.1
+--- xc/config/docbook/docbookconv.sh:1.2 Fri Apr 23 18:42:00 2004
++++ xc/config/docbook/docbookconv.sh Wed Dec 15 07:17:48 2004
+@@ -1,5 +1,7 @@
+ #!/bin/sh
+
++#set -x
++
+ fatal_error()
+ {
+ echo "$1" 1>&2
+@@ -97,8 +99,15 @@
+ fi
+ ;;
+ "man")
+- cp "${MYCURRDIR}/${infile}" "${infile}.tmp"
+- ${docbook2man} "${infile}.tmp"
++ if [ "${infile}" != "${infile%.sgml}" ] ; then
++ #cp "${MYCURRDIR}/${infile}" "${infile%.sgml}.xml"
++ #${docbook2man} --network "${infile%.sgml}.xml"
++ cp "${MYCURRDIR}/${infile}" "${infile}.tmp"
++ ${docbook2man} --network "${infile}.tmp"
++ else
++ cp "${MYCURRDIR}/${infile}" "${infile}.tmp"
++ ${docbook2man} --network "${infile}.tmp"
++ fi
+ manfile="$(ls -1 ${infile%.*}.__*)"
+
+ verbose_echo "manfile=${manfile}"
+Index: xc/doc/man/X11/XGetWProp.man
+diff -u xc/doc/man/X11/XGetWProp.man:1.2 xc/doc/man/X11/XGetWProp.man:1.2.4.1
+--- xc/doc/man/X11/XGetWProp.man:1.2 Fri Apr 23 18:42:09 2004
++++ xc/doc/man/X11/XGetWProp.man Wed Dec 15 07:22:55 2004
+@@ -153,6 +153,7 @@
+ .HP
+ Atom *XListProperties\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, int
+ *\fInum_prop_return\fP\^);
++.HP
+ int XChangeProperty\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, Atom
+ \fIproperty\fP\^, Atom \fItype\fP\^, int \fIformat\fP\^, int \fImode\fP\^,
+ unsigned char *\fIdata\fP\^, int \fInelements\fP\^);
+Index: xc/doc/man/Xt/XtNextEv.man
+diff -u xc/doc/man/Xt/XtNextEv.man:1.2 xc/doc/man/Xt/XtNextEv.man:1.2.4.1
+--- xc/doc/man/Xt/XtNextEv.man:1.2 Fri Apr 23 18:42:13 2004
++++ xc/doc/man/Xt/XtNextEv.man Wed Jan 12 23:37:05 2005
+@@ -137,7 +137,7 @@
+ Boolean XtPeekEvent(XEvent *\fIevent_return\fP);
+ .HP
+ Boolean XtPending(void);
+-.Hp
++.HP
+ void XtProcessEvent(XtInputMask \fImask\fP);
+ .HP
+ void XtMainLoop(void);
+Index: xc/doc/man/general/Imakefile
+diff -u xc/doc/man/general/Imakefile:1.2 xc/doc/man/general/Imakefile:1.2.4.1
+--- xc/doc/man/general/Imakefile:1.2 Fri Apr 23 18:42:14 2004
++++ xc/doc/man/general/Imakefile Wed Dec 15 07:38:28 2004
+@@ -8,8 +8,16 @@
+ MANSUFFIX = $(MISCMANSUFFIX)
+
+ InstallManPage(X,$(MANDIR))
++InstallManPage(Xprint,$(MANDIR))
+ InstallManPageLong(Consortium,$(MANDIR),XConsortium)
+ InstallManPageLong(Standards,$(MANDIR),XStandards)
+ InstallManPageLong(XProjectTeam,$(MANDIR),XProjectTeam)
+ InstallManPageAliases(XProjectTeam,$(MANDIR),X.Org)
+ InstallManPageLong(security,$(MANDIR),Xsecurity)
++
++#ifdef HasDocBookTools
++all:: Xprint.man Xprint.html
++
++ConvertDocBookToManPage(Xprint.sgml, Xprint.man)
++ConvertDocBookToHTML(Xprint.sgml, Xprint.html)
++#endif /* HasDocBookTools */
+Index: xc/doc/man/general/Xprint.html
+diff -u /dev/null xc/doc/man/general/Xprint.html:1.1.4.1
+--- /dev/null Fri Feb 11 21:35:29 2005
++++ xc/doc/man/general/Xprint.html Wed Dec 15 07:38:28 2004
+@@ -0,0 +1,296 @@
++<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Xprint</title><meta name="generator" content="DocBook XSL Stylesheets V1.62.4"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="Xprint"></a><div class="titlepage"><div></div><div></div></div><div class="refnamediv"><h2>Name</h2><p>Xprint — The "X print service" - a portable, network-transparent printing system based on the X11 protocol</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p>Xprint is a very flexible, extensible, scaleable, client/server
++ print system based on ISO 10175 (and some other specs) and the X11
++ rendering protocol.
++ Using Xprint an application can search, query and use devices like
++ printers, FAX machines or create documents in formats like PDF.
++ In particular, an application can seek a printer, query supported
++ attributes (like paper size, trays, fonts etc.), configure the printer
++ device to match it’s needs and print on it like on any other X device
++ reusing parts of the code which is used for the video card Xserver.
++ </p></div><div xmlns:ns1="" class="refsect1" lang="en"><a name="id2802144"></a><h2>OVERVIEW</h2><p>
++ The "X Print Service" technology allows X rendering to devices such as
++ printers and fax. Most of the service is available in the X11
++ technology stack as Xp, with the remainder in single toolkit stacks (e.g. DtPrint for CDE).
++ Modifications have also been made to the LessTif/Motif/Qt technology
++ stacks to support Xprint.
++ </p><p>
++ The Xp portion consists of:
++ </p><div class="itemizedlist"><ul type="disc"><li><p>Xp Extension for the X-Server (included in the X-Server Xprt)</p></li><li><p>Xp Extension API for the client side (libXp/libXprintUtils)</p></li><li><p>PCL ddx driver that converts core X to native PCL</p></li><li><p>PDF ddx driver that converts core X to native PDF</p></li><li><p>PostScript ddx driver that converts core X to native PostScript</p></li><li><p>Raster ddx driver that generates xwd rasters which can be converted to PCL, PDF or PostScript rasters</p></li></ul></div><p>
++ From an X clients perspective, it can attach to one of two nearly
++ identical X-Servers, a "Video" X-Server, and a "Print" X-Server
++ which has the additional Xp capability but otherwise looks and
++ behaves the same.
++ </p></div><div xmlns:ns2="" class="refsect1" lang="en"><a name="id2804972"></a><h2>HOW THE X PRINT SERVICE WORKS</h2><p>
++ The X Print Service expands on the traditional X-Server and Xlib world
++ in four ways.
++
++ </p><div class="orderedlist"><ol type="1"><li><p>
++ Most obvious is the use of "print ddx drivers" instead of
++ "video ddx drivers". While a video ddx driver modifies pixels
++ in a video frame buffer, a print ddx driver generates "page
++ description language (PDL)" output (such as PCL, PDF or PostScript)
++ or sends the print rendering instructions to a platform-specific
++ print API (like Win32/GDI).
++ </p><p>
++ Once a print ddx driver generates PDL output, it can be sent to
++ a spooler such as <span class="citerefentry"><span class="refentrytitle">lp</span>(1)</span>
++ or retrieved by the client (to implement functionality like "print-to-file").
++ </p><p>
++ Though not currently done, a single X-Server can support both
++ print and video ddx drivers.
++ </p></li><li><p>
++ Since printers support "paged" output, unlike video, a portion
++ of the Xp Extension supports APIs to delineate printed output.
++ For example, <tt class="function">XpStartPage</tt> and <tt class="function">XpEndPage</tt> tell the X-Server where
++ a physical page starts and ends in an otherwise continuous
++ stream of X rendering primitives. Likewise, <tt class="function">XpStartJob</tt> and
++ <tt class="function">XpEndJob</tt> determine when a collection of pages starts and ends.
++ <tt class="function">XpEndJob</tt> typically causes the generated PDL to be submitted to
++ a spooler, such as <span class="citerefentry"><span class="refentrytitle">lp</span>(1)</span>.
++ </p></li><li><p>
++ Since printers have extensive capabilities, another portion of
++ the Xp Extension supports APIs to manipulate "print contexts".
++ </p><p>
++ Once a printer is selected using the Xp Extension API, a print
++ context to represent it can be created. A print context
++ embodies the printer selected - it contains the printer's
++ default capabilities, selectable range of capabilities,
++ printer state, and generated output. Some "attributes" within
++ the print context can be modified by the user, and the
++ X-Server and print ddx driver will react accordingly. For
++ example, the attribute "content-orientation" can be set to
++ "landscape" or "portrait" (if the printer supports these
++ values - which can be queried using the Xprint API as well).
++ </p></li><li><p>
++ Since printers can have "built in" fonts, the Xp Extension in
++ the X-Server works with the print ddx drivers to make
++ available (for printing only) additional fonts on a per print
++ context basis.
++ </p><p>
++ When a print context is created and set for a given printer,
++ the X font calls may be able to access additional printer
++ fonts. To do this (typically), the X-Server must have access
++ to "printer metric files" (.pmf) that describe at minimum the
++ metrics of the built in fonts.
++ </p></li></ol></div></div><div xmlns:ns3="" class="refsect1" lang="en"><a name="id2804885"></a><h2>USAGE</h2><p>
++ There are three tasks to start the X Print Service:
++ </p><div class="orderedlist"><ol type="1"><li><p>configuring the X Print Server,</p></li><li><p>starting the X Print Service</p></li><li><p>configuring the user session so that clients can find the running X Print Service</p></li></ol></div><p>
++ The tasks are described in detail below.
++ </p></div><div xmlns:ns4="" class="refsect1" lang="en"><a name="id2804911"></a><h2>SERVER CONFIGURATION</h2><p>
++ The X Print Server (Xprt) can read a number of configuration files which
++ control its behavior and support for printers. Each vendor platform has
++ a default location for this information. Xprt can also read the
++ environment variable <tt class="envar">XPCONFIGDIR</tt> to locate alternate configuration
++ directories. Common settings include:
++
++ </p><table class="simplelist" border="0" summary="Simple list"><tr><td>export XPCONFIGDIR=/X11/lib/X11/XpConfig/</td></tr><tr><td>export XPCONFIGDIR=/proj/x11/xc/programs/Xserver/XpConfig/</td></tr></table><p>
++ Xprt has many built-in defaults, and lacking any configuration files,
++ will immediately try to support all printers visible via <span class="citerefentry"><span class="refentrytitle">lpstat</span>(1)</span>.
++ </p><p>
++ In order of importance for configuration by a system administrator, the
++ configuration files for a "C" locale are as follows (see <span class="citerefentry"><span class="refentrytitle">Xprt</span>(7)</span> for more
++ details (including support for non-"C" locales)):
++ </p><div class="variablelist"><dl><dt><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/Xprinters</tt></span></dt><dd><p>
++ 'Xprinters' is the top most configuration file. It tells
++ Xprt which specific printer names (e.g. mylaser) should
++ be supported, and whether <span class="citerefentry"><span class="refentrytitle">lpstat</span>(1)</span> or other commands
++ should be used to automatically supplement the list of
++ printers.
++ </p></dd><dt><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/attributes/printer</tt></span></dt><dd><p>
++ The 'printer' file maps printer names to model
++ configurations (see 'model-config' below). For example,
++ "mylaser" could be mapped to a "HPDJ1600C", and all other
++ arbitrary printers could be mapped to a default, such as
++ "HPLJ4SI". When depending on <span class="citerefentry"><span class="refentrytitle">lpstat</span>(1)</span> in the Xprinters
++ file, setting up defaults in 'printer' becomes all the
++ more important.
++ </p></dd><dt><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/attributes/document</tt></span></dt><dd><p>
++ The 'document' file specifies the initial document values
++ for any print jobs. For example, which paper tray to
++ use, what default resolution, etc.
++ </p></dd><dt><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/attributes/job</tt></span></dt><dd><p>
++ The 'job' file specifies the initial job values for any
++ print jobs. For example, "notification-profile" can be
++ set so that when a print job is successfully sent to a
++ printer, e-mail is sent to the user.
++ </p></dd><dt><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/models/PSdefault/model-config</tt>, </span><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/models/PSdefault/fonts/fonts.dir</tt>, </span><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00051.pmf</tt>, </span><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00093.pmf</tt></span></dt><dd><p>
++ The 'model-config' file has attributes that describe the
++ printer model’s capabilities and default settings.
++ Printer model fonts may also be present. The model-config
++ file also identifies the print ddx driver to be used.
++
++ For each printer model supported, a complete hierarchy of
++ files should exist. In most cases, these files do not
++ need to be modified.
++ </p></dd><dt><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/ddx-config/raster/pcl</tt>, </span><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/ddx-config/raster/pdf</tt>, </span><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/ddx-config/raster/postscript</tt></span></dt><dd><p>
++ The print ddx drivers can have highly specific
++ configuration files to control their behavior. In most
++ cases, these files do not need to be modified.
++ </p></dd></dl></div><p>
++
++ More information in how to configure and customize the X print server can be found in the
++ <span class="citerefentry"><span class="refentrytitle">Xprt</span>(7)</span>
++ manual page.
++ </p></div><div xmlns:ns5="" class="refsect1" lang="en"><a name="id2805166"></a><h2>STARTING UP</h2><p>
++ The summary checklist for starting the X Print Service is as follows:
++
++ </p><div class="orderedlist"><ol type="1"><li><p>
++ Choose an execution model for the X Print Service. The X
++ Print Service can be run on a per-user session basis, per
++ machine basis, or can be run on a few machines globally
++ available to a number of users.
++ </p></li><li><p>
++ If print jobs are to be submitted to a spooler (almost always
++ the case), make sure all needed printers are available to the
++ spooler subsystem (most often <span class="citerefentry"><span class="refentrytitle">lp</span>(1)</span>)
++ on the same machine running the X Print Service.
++ </p></li><li><p>
++ Configure the X Print Server. See ``X Print Server
++ Configuration''.
++ </p></li><li><p>
++ Depending on #1, start the X Print Server process "Xprt", and
++ then the toolkit-specific Print Dialog Manager Daemon process
++ (such as CDEnext's "dtpdmd") at the appropriate times.
++ Note that libXprintUtils-based applications/toolkits do not need
++ a Print Dialog Manager Daemon process to use Xprint.
++ </p></li></ol></div><p>
++ The details are described below.
++ </p><p>
++ Because the X Print Service is based on X, it can be easily distributed.
++ The most significant factors in which execution model to choose will be
++ driven by:
++ </p><div class="itemizedlist"><ul type="disc"><li><p>
++ how many printers will be accessable through the printer
++ subsystem on any given machine. A system administrator may
++ choose to cluster printers on a few given machines, or
++ scatter them across an organization and possibly make
++ extensive use of remote spoolers to make them globally
++ available.
++ </p></li><li><p>
++ how many machines will need a copy of the X Print Server
++ configuration files. The files have been architected so
++ that one super-set version of them can be maintained and
++ distributed (e.g. via NFS), and a per-machine or per-user
++ version of the `Xprinters' is all that is needed to have the
++ appropriate information in them utilized or ignored.
++ </p></li><li><p>
++ how many users can demand services from a given X Print
++ Service.
++ </p></li></ul></div><p>
++
++ With the above in mind, some obvious execution models include:
++ </p><div class="itemizedlist"><ul type="disc"><li><p>
++ Global - in this model, the system administrator is choosing
++ to run the X Print Service on a *few* select machines with
++ appropriate printers configured, and allow clients access to
++ the global resource. This can centralize the administration
++ of printers and configuration files, but may have to be
++ monitored for performance loading.
++ </p><p>
++ Startup would likely be done by boot-up scripts (such as <tt class="filename">/etc/init.d/xprint</tt>).
++ </p></li><li><p>
++ Per-machine - every machine with potential X Print Service
++ users would run the service. Printer and configuration file
++ administration is decentralized, and usage would be limited
++ to the users on the machine.
++ </p><p>
++ Startup would likely be done by boot-up scripts (such as <tt class="filename">/etc/init.d/xprint</tt>).
++ </p></li><li><p>
++ Per-user session - every user would run an entire X Print
++ Service for themselves. In the future, the Video X Server
++ normally started may contain Print X Server capability, so
++ this model becomes very natural.
++ </p><p>
++ Startup would likely be done at session login or by
++ launching actions or processes manually once the user
++ logs in. Note: Deamons like "dtpdmd" must be started after Xprt.
++ </p></li></ul></div><p>
++ Starting of the processes is straight forward. In strict order (example is for manually starting the X print server for CDEnext usage):
++ </p><div class="orderedlist"><ol type="1"><li><pre class="programlisting">[machineA] % Xprt [-XpFile Xprinters file] [:dispNum] </pre><p>
++ Note that Xprt will look for configuration files in either
++ a default location or where <tt class="envar">XPCONFIGDIR</tt> points.
++ </p><p><tt class="option">-XpFile</tt> specifies an alternate `Xprinters' file, rather
++ than the default one or `<tt class="filename">${XPCONFIGDIR}/C/print/Xprinters</tt>'.
++ </p></li><li><pre class="programlisting">[machineA] % dtpdmd -d machineA[:dispNum] [-l /tmp/dtpdmd.log] </pre><p>
++ The dtpdmd will maintain an X-Selection on the X-Server,
++ and will start dtpdm's as required to service requests.
++ </p></li></ol></div><p>
++ In all but the per-user session model, the machine running the dtpdmd
++ (thus dtpdm's) will need display authorization to the users video
++ display.
++ </p></div><div xmlns:ns6="" class="refsect1" lang="en"><a name="id2805371"></a><h2>CLIENT CONFIGURATION</h2><p>
++ Once a X Print Server and dtpdmd have been started -- many of them
++ in some cases -- clients will need to find and use them. There are
++ two mechanisms that allow clients to discover X Print Servers and
++ printers.
++
++ </p><div class="itemizedlist"><ul type="disc"><li><p>
++ "X Print Specifier" - assuming usage of the DtPrint/XprintUtils-based print
++ applications, the following notation is understood:
++ </p><pre class="programlisting">printer_name@machine[:dispNum]</pre><p>
++ For example:
++ </p><pre class="programlisting">colorlj7@printhub:2</pre><p>
++ In the above example, the X Print Server running at `printhub:2'
++ is assumed to support the printer named `colorlj7'.
++ </p></li><li><p><tt class="envar">${XPSERVERLIST}</tt> - assuming usage of the DtPrint print dialogs,
++ the environment variable <tt class="envar">${XPSERVERLIST}</tt> can contain a list
++ of X Print Servers. For example:
++ </p><pre class="programlisting">XPSERVERLIST="printhub:2 printhub:3 otherdept:0"</pre><p>
++ Then in the dialogs, only a printer name needs to be entered.
++ The dialog will then search the X Print Servers in <tt class="envar">${XPSERVERLIST}</tt>
++ for a server than supports the printer, and then establish
++ contact.
++ </p></li></ul></div></div><div class="refsect1" lang="en"><a name="id2806227"></a><h2>END-USER SEQUENCE</h2><p>
++ From most CDEnext applications, printing is accomplished by bringing
++ down the File menu and selecting Print.... This will result in
++ the DtPrintSetupBox dialog, which will request the name of a printer,
++ and offer limited capability to configure print options (e.g. number
++ of copies). If the user wishes, they can select Setup..., which
++ will start a dtpdm capable of modifying additional print options.
++ Finally, the user should select Print.
++ </p></div><div class="refsect1" lang="en"><a name="id2806249"></a><h2>ENVIRONMENT</h2><div class="variablelist"><dl><dt><span class="term"><tt class="envar">${XPCONFIGDIR}</tt></span></dt><dd><p> This environment variable points to the root
++ of the Xprint server configuration directory hierarchy.
++ If the variable is not defined, the default
++ path is be assumed. The default path may be
++ <tt class="filename">/usr/X11R6/lib/X11/xserver/</tt>,
++ <tt class="filename">/usr/lib/X11/xserver/</tt>,
++ <tt class="filename">/usr/share/Xprint/xserver/</tt> or
++ <tt class="filename">/usr/openwin/server/etc/XpConfig</tt>, depending on the
++ system, and may be configured in <tt class="filename">/etc/init.d/xprint</tt>.</p></dd><dt><span class="term"><tt class="envar">${LANG}</tt></span></dt><dd><p>
++ This environment variable selects the locale settings used by the Xprint server.
++ Xprt allows language-specific settings (stored in <tt class="filename">${XPCONFIGDIR}/${LANG}/print/</tt>)
++ which will override the default settings (stored in <tt class="filename">${XPCONFIGDIR}/C/print/</tt>).
++ If <tt class="envar">${LANG}</tt> is not set "C" is assumed.
++ </p></dd><dt><span class="term"><tt class="envar">${XPSERVERLIST}</tt></span></dt><dd xmlns:ns7=""><p>The environment variable <tt class="envar">${XPSERVERLIST}</tt> contains a list
++ of display identifiers (separated by whitespace) which tell an
++ application where it can find the Xprint servers. Usually
++ <tt class="envar">${XPSERVERLIST}</tt> is set by the profile startup scripts (e.g.
++ <tt class="filename">/etc/profile</tt> or <tt class="filename">/etc/profile.d/xprint.sh</tt>) using the output of
++ <b class="userinput"><tt>/etc/init.d/xprint get_xpserverlist</tt></b>.</p><p>Example:
++ </p><div class="informalexample"><pre class="programlisting">
++ export XPSERVERLIST="`/etc/init.d/xprint get_xpserverlist`"</pre></div><p>Alternatively <tt class="envar">${XPSERVERLIST}</tt> can be set
++ manually. Example:</p><div class="informalexample"><pre class="programlisting">
++ export XPSERVERLIST="littlecat:80 bitdog:72"</pre></div><p>
++ instructs an application to find an Xprint server at display
++ 80 on the machine "littlecat" and at display 72 on the
++ machine bigdog.
++ </p></dd><dt><span class="term"><tt class="envar">${XPRINTER}</tt></span></dt><dd xmlns:ns8=""><p>The environment variable <tt class="envar">${XPRINTER}</tt>
++ defines the default printer used by print
++ applications. The syntax is either
++ <i class="replaceable"><tt>printername</tt></i> or
++ <i class="replaceable"><tt>printername</tt></i>@<i class="replaceable"><tt>display</tt></i>.</p><p>Examples:
++ </p><div class="variablelist"><dl><dt><span class="term"><b class="userinput"><tt>XPRINTER=ps003</tt></b></span></dt><dd><p>
++ tells an application to look for the
++ first printer named "ps003" on all Xprint
++ servers.</p></dd><dt><span class="term"><b class="userinput"><tt>XPRINTER=hplaser19@littlecat:80</tt></b></span></dt><dd><p>
++ tells an application to use the printer "hplaser19"
++ on the Xprint server at display
++ "littlecat:80".</p></dd></dl></div><p>If <tt class="envar">${XPRINTER}</tt> is not set the applications
++ will examine the values of the <tt class="envar">${PDPRINTER}</tt>,
++ <tt class="envar">${LPDEST}</tt>, and
++ <tt class="envar">${PRINTER}</tt> environment variables (in that order).
++ </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2806468"></a><h2>SEE ALSO</h2><p><span class="simplelist"><span class="citerefentry"><span class="refentrytitle">X11</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">xplsprinters</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">xprehashprinterlist</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">xphelloworld</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">xpxmhelloworld</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">xpawhelloworld</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">xpxthelloworld</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">xpsimplehelloworld</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">Xserver</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">Xprt</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">libXp</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">libXprintUtils</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">libXprintAppUtils</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">XmPrintShell</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">XawPrintShell</span>(3x)</span>, Xprint FAQ (<a href="http://xprint.mozdev.org/docs/Xprint_FAQ.html" target="_top">http://xprint.mozdev.org/docs/Xprint_FAQ.html</a>), Xprint main site (<a href="http://xprint.mozdev.org/" target="_top">http://xprint.mozdev.org/</a>)</span></p></div><div class="refsect1" lang="en"><a name="id2806639"></a><h2>AUTHORS</h2><p>
++ This manual page was written by
++ Roland Mainz <tt class="email"><<a href="mailto:roland.mainz@nrubsig.org">roland.mainz@nrubsig.org</a>></tt> based on the original X11R6.6
++ <tt class="filename">xc/programs/Xserver/XpConfig/README</tt>.
++ </p></div></div></body></html>
+Index: xc/doc/man/general/Xprint.man
+diff -u /dev/null xc/doc/man/general/Xprint.man:1.1.4.1
+--- /dev/null Fri Feb 11 21:35:29 2005
++++ xc/doc/man/general/Xprint.man Wed Dec 15 07:38:28 2004
+@@ -0,0 +1,421 @@
++.\" -*- coding: us-ascii -*-
++.TH Xprint __miscmansuffix__ "8 October 2004"
++.SH NAME
++Xprint \- The "X print service" - a portable, network-transparent printing system based on the X11 protocol
++.SH SYNOPSIS
++Xprint is a very flexible, extensible, scaleable, client/server
++print system based on ISO 10175 (and some other specs) and the X11
++rendering protocol.
++Using Xprint an application can search, query and use devices like
++printers, FAX machines or create documents in formats like PDF.
++In particular, an application can seek a printer, query supported
++attributes (like paper size, trays, fonts etc.), configure the printer
++device to match it\(cqs needs and print on it like on any other X device
++reusing parts of the code which is used for the video card Xserver.
++.SH OVERVIEW
++The "X Print Service" technology allows X rendering to devices such as
++printers and fax. Most of the service is available in the X11
++technology stack as Xp, with the remainder in single toolkit stacks (e.g. DtPrint for CDE).
++Modifications have also been made to the LessTif/Motif/Qt technology
++stacks to support Xprint.
++.PP
++The Xp portion consists of:
++.TP 0.2i
++\(bu
++Xp Extension for the X-Server (included in the X-Server Xprt)
++.TP 0.2i
++\(bu
++Xp Extension API for the client side (libXp/libXprintUtils)
++.TP 0.2i
++\(bu
++PCL ddx driver that converts core X to native PCL
++.TP 0.2i
++\(bu
++PDF ddx driver that converts core X to native PDF
++.TP 0.2i
++\(bu
++PostScript ddx driver that converts core X to native PostScript
++.TP 0.2i
++\(bu
++Raster ddx driver that generates xwd rasters which can be converted to PCL, PDF or PostScript rasters
++.PP
++.PP
++From an X clients perspective, it can attach to one of two nearly
++identical X-Servers, a "Video" X-Server, and a "Print" X-Server
++which has the additional Xp capability but otherwise looks and
++behaves the same.
++.SH "HOW THE X PRINT SERVICE WORKS"
++The X Print Service expands on the traditional X-Server and Xlib world
++in four ways.
++.TP 0.4i
++1.
++Most obvious is the use of "print ddx drivers" instead of
++"video ddx drivers". While a video ddx driver modifies pixels
++in a video frame buffer, a print ddx driver generates "page
++description language (PDL)" output (such as PCL, PDF or PostScript)
++or sends the print rendering instructions to a platform-specific
++print API (like Win32/GDI).
++
++Once a print ddx driver generates PDL output, it can be sent to
++a spooler such as \fBlp\fR(1)
++or retrieved by the client (to implement functionality like "print-to-file").
++
++Though not currently done, a single X-Server can support both
++print and video ddx drivers.
++.TP 0.4i
++2.
++Since printers support "paged" output, unlike video, a portion
++of the Xp Extension supports APIs to delineate printed output.
++For example, XpStartPage and XpEndPage tell the X-Server where
++a physical page starts and ends in an otherwise continuous
++stream of X rendering primitives. Likewise, XpStartJob and
++XpEndJob determine when a collection of pages starts and ends.
++XpEndJob typically causes the generated PDL to be submitted to
++a spooler, such as \fBlp\fR(1).
++.TP 0.4i
++3.
++Since printers have extensive capabilities, another portion of
++the Xp Extension supports APIs to manipulate "print contexts".
++
++Once a printer is selected using the Xp Extension API, a print
++context to represent it can be created. A print context
++embodies the printer selected - it contains the printer's
++default capabilities, selectable range of capabilities,
++printer state, and generated output. Some "attributes" within
++the print context can be modified by the user, and the
++X-Server and print ddx driver will react accordingly. For
++example, the attribute "content-orientation" can be set to
++"landscape" or "portrait" (if the printer supports these
++values - which can be queried using the Xprint API as well).
++.TP 0.4i
++4.
++Since printers can have "built in" fonts, the Xp Extension in
++the X-Server works with the print ddx drivers to make
++available (for printing only) additional fonts on a per print
++context basis.
++
++When a print context is created and set for a given printer,
++the X font calls may be able to access additional printer
++fonts. To do this (typically), the X-Server must have access
++to "printer metric files" (.pmf) that describe at minimum the
++metrics of the built in fonts.
++.PP
++.SH USAGE
++There are three tasks to start the X Print Service:
++.TP 0.4i
++1.
++configuring the X Print Server,
++.TP 0.4i
++2.
++starting the X Print Service
++.TP 0.4i
++3.
++configuring the user session so that clients can find the running X Print Service
++.PP
++.PP
++The tasks are described in detail below.
++.SH "SERVER CONFIGURATION"
++The X Print Server (Xprt) can read a number of configuration files which
++control its behavior and support for printers. Each vendor platform has
++a default location for this information. Xprt can also read the
++environment variable \fBXPCONFIGDIR\fR to locate alternate configuration
++directories. Common settings include:
++
++export XPCONFIGDIR=/X11/lib/X11/XpConfig/
++.PP
++export XPCONFIGDIR=/proj/x11/xc/programs/Xserver/XpConfig/
++
++.PP
++Xprt has many built-in defaults, and lacking any configuration files,
++will immediately try to support all printers visible via \fBlpstat\fR(1).
++.PP
++In order of importance for configuration by a system administrator, the
++configuration files for a "C" locale are as follows (see \fBXprt\fR(__appmansuffix__) for more
++details (including support for non-"C" locales)):
++.TP
++\fB${XPCONFIGDIR}/C/print/Xprinters\fR
++\&'Xprinters' is the top most configuration file. It tells
++Xprt which specific printer names (e.g. mylaser) should
++be supported, and whether \fBlpstat\fR(1) or other commands
++should be used to automatically supplement the list of
++printers.
++.TP
++\fB${XPCONFIGDIR}/C/print/attributes/printer\fR
++The 'printer' file maps printer names to model
++configurations (see 'model-config' below). For example,
++"mylaser" could be mapped to a "HPDJ1600C", and all other
++arbitrary printers could be mapped to a default, such as
++"HPLJ4SI". When depending on \fBlpstat\fR(1) in the Xprinters
++file, setting up defaults in 'printer' becomes all the
++more important.
++.TP
++\fB${XPCONFIGDIR}/C/print/attributes/document\fR
++The 'document' file specifies the initial document values
++for any print jobs. For example, which paper tray to
++use, what default resolution, etc.
++.TP
++\fB${XPCONFIGDIR}/C/print/attributes/job\fR
++The 'job' file specifies the initial job values for any
++print jobs. For example, "notification-profile" can be
++set so that when a print job is successfully sent to a
++printer, e-mail is sent to the user.
++.TP
++\fB${XPCONFIGDIR}/C/print/models/PSdefault/model\-config\fR, \fB${XPCONFIGDIR}/C/print/models/PSdefault/fonts/fonts.dir\fR, \fB${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00051.pmf\fR, \fB${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00093.pmf\fR
++The 'model-config' file has attributes that describe the
++printer model\(cqs capabilities and default settings.
++Printer model fonts may also be present. The model-config
++file also identifies the print ddx driver to be used.
++For each printer model supported, a complete hierarchy of
++files should exist. In most cases, these files do not
++need to be modified.
++.TP
++\fB${XPCONFIGDIR}/C/print/ddx\-config/raster/pcl\fR, \fB${XPCONFIGDIR}/C/print/ddx\-config/raster/pdf\fR, \fB${XPCONFIGDIR}/C/print/ddx\-config/raster/postscript\fR
++The print ddx drivers can have highly specific
++configuration files to control their behavior. In most
++cases, these files do not need to be modified.
++.PP
++More information in how to configure and customize the X print server can be found in the
++\fBXprt\fR(__appmansuffix__)
++manual page.
++.SH "STARTING UP"
++The summary checklist for starting the X Print Service is as follows:
++.TP 0.4i
++1.
++Choose an execution model for the X Print Service. The X
++Print Service can be run on a per-user session basis, per
++machine basis, or can be run on a few machines globally
++available to a number of users.
++.TP 0.4i
++2.
++If print jobs are to be submitted to a spooler (almost always
++the case), make sure all needed printers are available to the
++spooler subsystem (most often \fBlp\fR(1))
++on the same machine running the X Print Service.
++.TP 0.4i
++3.
++Configure the X Print Server. See ``X Print Server
++Configuration''.
++.TP 0.4i
++4.
++Depending on #1, start the X Print Server process "Xprt", and
++then the toolkit-specific Print Dialog Manager Daemon process
++(such as CDEnext's "dtpdmd") at the appropriate times.
++Note that libXprintUtils-based applications/toolkits do not need
++a Print Dialog Manager Daemon process to use Xprint.
++.PP
++The details are described below.
++.PP
++Because the X Print Service is based on X, it can be easily distributed.
++The most significant factors in which execution model to choose will be
++driven by:
++.TP 0.2i
++\(bu
++how many printers will be accessable through the printer
++subsystem on any given machine. A system administrator may
++choose to cluster printers on a few given machines, or
++scatter them across an organization and possibly make
++extensive use of remote spoolers to make them globally
++available.
++.TP 0.2i
++\(bu
++how many machines will need a copy of the X Print Server
++configuration files. The files have been architected so
++that one super-set version of them can be maintained and
++distributed (e.g. via NFS), and a per-machine or per-user
++version of the `Xprinters' is all that is needed to have the
++appropriate information in them utilized or ignored.
++.TP 0.2i
++\(bu
++how many users can demand services from a given X Print
++Service.
++.PP
++With the above in mind, some obvious execution models include:
++.TP 0.2i
++\(bu
++Global - in this model, the system administrator is choosing
++to run the X Print Service on a *few* select machines with
++appropriate printers configured, and allow clients access to
++the global resource. This can centralize the administration
++of printers and configuration files, but may have to be
++monitored for performance loading.
++
++Startup would likely be done by boot-up scripts (such as \fB/etc/init.d/xprint\fR).
++.TP 0.2i
++\(bu
++Per-machine - every machine with potential X Print Service
++users would run the service. Printer and configuration file
++administration is decentralized, and usage would be limited
++to the users on the machine.
++
++Startup would likely be done by boot-up scripts (such as \fB/etc/init.d/xprint\fR).
++.TP 0.2i
++\(bu
++Per-user session - every user would run an entire X Print
++Service for themselves. In the future, the Video X Server
++normally started may contain Print X Server capability, so
++this model becomes very natural.
++
++Startup would likely be done at session login or by
++launching actions or processes manually once the user
++logs in. Note: Deamons like "dtpdmd" must be started after Xprt.
++.PP
++.PP
++Starting of the processes is straight forward. In strict order (example is for manually starting the X print server for CDEnext usage):
++.TP 0.4i
++1.
++
++.nf
++[machineA] % Xprt [\-XpFile <Xprinters file>] [:dispNum] &
++.fi
++
++
++Note that Xprt will look for configuration files in either
++a default location or where \fBXPCONFIGDIR\fR points.
++
++\fB\-XpFile\fR specifies an alternate `Xprinters' file, rather
++than the default one or `\fB${XPCONFIGDIR}/C/print/Xprinters\fR'.
++.TP 0.4i
++2.
++
++.nf
++[machineA] % dtpdmd \-d machineA[:dispNum] [\-l /tmp/dtpdmd.log] &
++.fi
++
++
++The dtpdmd will maintain an X-Selection on the X-Server,
++and will start dtpdm's as required to service requests.
++.PP
++.PP
++In all but the per-user session model, the machine running the dtpdmd
++(thus dtpdm's) will need display authorization to the users video
++display.
++.SH "CLIENT CONFIGURATION"
++Once a X Print Server and dtpdmd have been started -- many of them
++in some cases -- clients will need to find and use them. There are
++two mechanisms that allow clients to discover X Print Servers and
++printers.
++.TP 0.2i
++\(bu
++"X Print Specifier" - assuming usage of the DtPrint/XprintUtils-based print
++applications, the following notation is understood:
++
++
++.nf
++printer_name@machine[:dispNum]
++.fi
++
++
++For example:
++
++
++.nf
++colorlj7@printhub:2
++.fi
++
++
++In the above example, the X Print Server running at `printhub:2'
++is assumed to support the printer named `colorlj7'.
++.TP 0.2i
++\(bu
++\fB${XPSERVERLIST}\fR - assuming usage of the DtPrint print dialogs,
++the environment variable \fB${XPSERVERLIST}\fR can contain a list
++of X Print Servers. For example:
++
++
++.nf
++XPSERVERLIST="printhub:2 printhub:3 otherdept:0"
++.fi
++
++
++Then in the dialogs, only a printer name needs to be entered.
++The dialog will then search the X Print Servers in \fB${XPSERVERLIST}\fR
++for a server than supports the printer, and then establish
++contact.
++.PP
++.SH "END-USER SEQUENCE"
++From most CDEnext applications, printing is accomplished by bringing
++down the <File> menu and selecting <Print...>. This will result in
++the DtPrintSetupBox dialog, which will request the name of a printer,
++and offer limited capability to configure print options (e.g. number
++of copies). If the user wishes, they can select <Setup...>, which
++will start a dtpdm capable of modifying additional print options.
++Finally, the user should select <Print>.
++.SH ENVIRONMENT
++.TP
++\fB${XPCONFIGDIR}\fR
++This environment variable points to the root
++of the Xprint server configuration directory hierarchy.
++If the variable is not defined, the default
++path is be assumed. The default path may be
++\fB/usr/X11R6/lib/X11/xserver/\fR,
++\fB/usr/lib/X11/xserver/\fR,
++\fB/usr/share/Xprint/xserver/\fR or
++\fB/usr/openwin/server/etc/XpConfig\fR, depending on the
++system, and may be configured in \fB/etc/init.d/xprint\fR.
++.TP
++\fB${LANG}\fR
++This environment variable selects the locale settings used by the Xprint server.
++Xprt allows language-specific settings (stored in \fB${XPCONFIGDIR}/${LANG}/print/\fR)
++which will override the default settings (stored in \fB${XPCONFIGDIR}/C/print/\fR).
++If \fB${LANG}\fR is not set "C" is assumed.
++.TP
++\fB${XPSERVERLIST}\fR
++The environment variable \fB${XPSERVERLIST}\fR contains a list
++of display identifiers (separated by whitespace) which tell an
++application where it can find the Xprint servers. Usually
++\fB${XPSERVERLIST}\fR is set by the profile startup scripts (e.g.
++\fB/etc/profile\fR or \fB/etc/profile.d/xprint.sh\fR) using the output of
++\fB/etc/init.d/xprint get_xpserverlist\fR.
++
++Example:
++
++.nf
++
++ export XPSERVERLIST="`/etc/init.d/xprint get_xpserverlist`"
++.fi
++
++
++Alternatively \fB${XPSERVERLIST}\fR can be set
++manually. Example:
++
++.nf
++
++ export XPSERVERLIST="littlecat:80 bitdog:72"
++.fi
++
++instructs an application to find an Xprint server at display
++80 on the machine "littlecat" and at display 72 on the
++machine bigdog.
++.TP
++\fB${XPRINTER}\fR
++The environment variable \fB${XPRINTER}\fR
++defines the default printer used by print
++applications. The syntax is either
++\fIprintername\fR or
++\fIprintername\fR@\fIdisplay\fR.
++
++Examples:
++.RS
++.TP
++\fBXPRINTER=ps003\fR
++tells an application to look for the
++first printer named "ps003" on all Xprint
++servers.
++.TP
++\fBXPRINTER=hplaser19@littlecat:80\fR
++tells an application to use the printer "hplaser19"
++on the Xprint server at display
++"littlecat:80".
++.RE
++
++
++If \fB${XPRINTER}\fR is not set the applications
++will examine the values of the \fB${PDPRINTER}\fR,
++\fB${LPDEST}\fR, and
++\fB${PRINTER}\fR environment variables (in that order).
++.SH "SEE ALSO"
++\fBX11\fR(__miscmansuffix__), \fBxplsprinters\fR(__appmansuffix__), \fBxprehashprinterlist\fR(__appmansuffix__), \fBxphelloworld\fR(__appmansuffix__), \fBxpxmhelloworld\fR(__appmansuffix__), \fBxpawhelloworld\fR(__appmansuffix__), \fBxpxthelloworld\fR(__appmansuffix__), \fBxpsimplehelloworld\fR(__appmansuffix__), \fBXserver\fR(__appmansuffix__), \fBXprt\fR(__appmansuffix__), \fBlibXp\fR(__libmansuffix__), \fBlibXprintUtils\fR(__libmansuffix__), \fBlibXprintAppUtils\fR(__libmansuffix__), \fBXmPrintShell\fR(__libmansuffix__), \fBXawPrintShell\fR(__libmansuffix__), Xprint FAQ (http://xprint.mozdev.org/docs/Xprint_FAQ.html), Xprint main site (http://xprint.mozdev.org/)
++.SH AUTHORS
++This manual page was written by
++Roland Mainz <roland.mainz@nrubsig.org> based on the original X11R6.6
++\fBxc/programs/Xserver/XpConfig/README\fR.
+Index: xc/doc/man/general/Xprint.sgml
+diff -u /dev/null xc/doc/man/general/Xprint.sgml:1.1.4.1
+--- /dev/null Fri Feb 11 21:35:29 2005
++++ xc/doc/man/general/Xprint.sgml Wed Dec 15 07:38:28 2004
+@@ -0,0 +1,627 @@
++<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.2//EN" 'http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd'>
++
++<!-- Process this file with docbook-to-man to generate an nroff manual
++ page: 'docbook-to-man manpage.sgml > manpage.1'. You may view
++ the manual page with: 'docbook-to-man manpage.sgml | nroff -man | less'.
++ A typical entry in a Makefile or Makefile.am is:
++
++manpage.1: manpage.sgml
++ docbook-to-man $< > $@
++
++HTML generation can be done like this:
++% xsltproc ==docbook /usr/share/sgml/docbook/docbook-xsl-stylesheets-1.60.1/html/docbook.xsl Xprint.sgml >Xprint.html
++ -->
++
++<refentry id="Xprint">
++ <refmeta>
++ <refentrytitle>Xprint</refentrytitle>
++ <manvolnum>__miscmansuffix__</manvolnum>
++ </refmeta>
++ <refnamediv>
++ <refname>Xprint</refname>
++
++ <refpurpose>The "X print service" - a portable, network-transparent printing system based on the X11 protocol</refpurpose>
++ </refnamediv>
++ <refsynopsisdiv>
++ <para>Xprint is a very flexible, extensible, scaleable, client/server
++ print system based on ISO 10175 (and some other specs) and the X11
++ rendering protocol.
++ Using Xprint an application can search, query and use devices like
++ printers, FAX machines or create documents in formats like PDF.
++ In particular, an application can seek a printer, query supported
++ attributes (like paper size, trays, fonts etc.), configure the printer
++ device to match it’s needs and print on it like on any other X device
++ reusing parts of the code which is used for the video card Xserver.
++ </para>
++ </refsynopsisdiv>
++
++ <refsect1>
++ <title>OVERVIEW</title>
++ <para>
++ The "X Print Service" technology allows X rendering to devices such as
++ printers and fax. Most of the service is available in the X11
++ technology stack as Xp, with the remainder in single toolkit stacks (e.g. DtPrint for CDE).
++ Modifications have also been made to the LessTif/Motif/Qt technology
++ stacks to support Xprint.
++ </para>
++ <para>
++ The Xp portion consists of:
++ <itemizedlist>
++ <listitem><para>Xp Extension for the X-Server (included in the X-Server Xprt)</para></listitem>
++ <listitem><para>Xp Extension API for the client side (libXp/libXprintUtils)</para></listitem>
++ <listitem><para>PCL ddx driver that converts core X to native PCL</para></listitem>
++ <listitem><para>PDF ddx driver that converts core X to native PDF</para></listitem>
++ <listitem><para>PostScript ddx driver that converts core X to native PostScript</para></listitem>
++ <listitem><para>Raster ddx driver that generates xwd rasters which can be converted to PCL, PDF or PostScript rasters</para></listitem>
++ </itemizedlist>
++ </para>
++ <para>
++ From an X clients perspective, it can attach to one of two nearly
++ identical X-Servers, a "Video" X-Server, and a "Print" X-Server
++ which has the additional Xp capability but otherwise looks and
++ behaves the same.
++ </para>
++ </refsect1>
++
++ <refsect1>
++ <title>HOW THE X PRINT SERVICE WORKS</title>
++ <para>
++ The X Print Service expands on the traditional X-Server and Xlib world
++ in four ways.
++
++ <orderedlist>
++ <listitem>
++ <para>
++ Most obvious is the use of "print ddx drivers" instead of
++ "video ddx drivers". While a video ddx driver modifies pixels
++ in a video frame buffer, a print ddx driver generates "page
++ description language (PDL)" output (such as PCL, PDF or PostScript)
++ or sends the print rendering instructions to a platform-specific
++ print API (like Win32/GDI).
++ </para>
++ <para>
++ Once a print ddx driver generates PDL output, it can be sent to
++ a spooler such as <citerefentry><refentrytitle>lp</refentrytitle><manvolnum>1</manvolnum></citerefentry>
++ or retrieved by the client (to implement functionality like "print-to-file").
++ </para>
++ <para>
++ Though not currently done, a single X-Server can support both
++ print and video ddx drivers.
++ <!-- FIXME: IBM/AIX people have integrated Xprt into their main Xserver (currently experimental) ... -->
++ </para>
++ </listitem>
++ <listitem>
++ <para>
++ Since printers support "paged" output, unlike video, a portion
++ of the Xp Extension supports APIs to delineate printed output.
++ For example, <function>XpStartPage</function> and <function>XpEndPage</function> tell the X-Server where
++ a physical page starts and ends in an otherwise continuous
++ stream of X rendering primitives. Likewise, <function>XpStartJob</function> and
++ <function>XpEndJob</function> determine when a collection of pages starts and ends.
++ <function>XpEndJob</function> typically causes the generated PDL to be submitted to
++ a spooler, such as <citerefentry><refentrytitle>lp</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
++ </para>
++ </listitem>
++ <listitem>
++ <para>
++ Since printers have extensive capabilities, another portion of
++ the Xp Extension supports APIs to manipulate "print contexts".
++ </para>
++ <para>
++ Once a printer is selected using the Xp Extension API, a print
++ context to represent it can be created. A print context
++ embodies the printer selected - it contains the printer's
++ default capabilities, selectable range of capabilities,
++ printer state, and generated output. Some "attributes" within
++ the print context can be modified by the user, and the
++ X-Server and print ddx driver will react accordingly. For
++ example, the attribute "content-orientation" can be set to
++ "landscape" or "portrait" (if the printer supports these
++ values - which can be queried using the Xprint API as well).
++ </para>
++ </listitem>
++ <listitem>
++ <para>
++ Since printers can have "built in" fonts, the Xp Extension in
++ the X-Server works with the print ddx drivers to make
++ available (for printing only) additional fonts on a per print
++ context basis.
++ </para>
++ <para>
++ When a print context is created and set for a given printer,
++ the X font calls may be able to access additional printer
++ fonts. To do this (typically), the X-Server must have access
++ to "printer metric files" (.pmf) that describe at minimum the
++ metrics of the built in fonts.
++ </para>
++ </listitem>
++ </orderedlist>
++ </para>
++ </refsect1>
++
++ <refsect1>
++ <title>USAGE</title>
++ <para>
++ There are three tasks to start the X Print Service:
++ <orderedlist>
++ <listitem><para>configuring the X Print Server,</para></listitem>
++ <listitem><para>starting the X Print Service</para></listitem>
++ <listitem><para>configuring the user session so that clients can find the running X Print Service</para></listitem>
++ </orderedlist>
++ </para>
++ <para>
++ The tasks are described in detail below.
++ </para>
++ </refsect1>
++
++ <refsect1>
++ <title>SERVER CONFIGURATION</title>
++ <para>
++ The X Print Server (Xprt) can read a number of configuration files which
++ control its behavior and support for printers. Each vendor platform has
++ a default location for this information. Xprt can also read the
++ environment variable <envar>XPCONFIGDIR</envar> to locate alternate configuration
++ directories. Common settings include:
++
++ <simplelist type="vert">
++ <member>export XPCONFIGDIR=/X11/lib/X11/XpConfig/</member>
++ <member>export XPCONFIGDIR=/proj/x11/xc/programs/Xserver/XpConfig/</member>
++ </simplelist>
++ </para>
++ <para>
++ Xprt has many built-in defaults, and lacking any configuration files,
++ will immediately try to support all printers visible via <citerefentry><refentrytitle>lpstat</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
++ </para>
++ <para>
++ In order of importance for configuration by a system administrator, the
++ configuration files for a "C" locale are as follows (see <citerefentry><refentrytitle>Xprt</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry> for more
++ details (including support for non-"C" locales)):
++ <variablelist>
++ <varlistentry>
++ <term><filename>${XPCONFIGDIR}/C/print/Xprinters</filename></term>
++ <listitem>
++ <para>
++ 'Xprinters' is the top most configuration file. It tells
++ Xprt which specific printer names (e.g. mylaser) should
++ be supported, and whether <citerefentry><refentrytitle>lpstat</refentrytitle><manvolnum>1</manvolnum></citerefentry> or other commands
++ should be used to automatically supplement the list of
++ printers.
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><filename>${XPCONFIGDIR}/C/print/attributes/printer</filename></term>
++ <listitem>
++ <para>
++ The 'printer' file maps printer names to model
++ configurations (see 'model-config' below). For example,
++ "mylaser" could be mapped to a "HPDJ1600C", and all other
++ arbitrary printers could be mapped to a default, such as
++ "HPLJ4SI". When depending on <citerefentry><refentrytitle>lpstat</refentrytitle><manvolnum>1</manvolnum></citerefentry> in the Xprinters
++ file, setting up defaults in 'printer' becomes all the
++ more important.
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><filename>${XPCONFIGDIR}/C/print/attributes/document</filename></term>
++ <listitem>
++ <para>
++ The 'document' file specifies the initial document values
++ for any print jobs. For example, which paper tray to
++ use, what default resolution, etc.
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><filename>${XPCONFIGDIR}/C/print/attributes/job</filename></term>
++ <listitem>
++ <para>
++ The 'job' file specifies the initial job values for any
++ print jobs. For example, "notification-profile" can be
++ set so that when a print job is successfully sent to a
++ printer, e-mail is sent to the user.
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><filename>${XPCONFIGDIR}/C/print/models/PSdefault/model-config</filename></term>
++ <term><filename>${XPCONFIGDIR}/C/print/models/PSdefault/fonts/fonts.dir</filename></term>
++ <term><filename>${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00051.pmf</filename></term>
++ <term><filename>${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00093.pmf</filename></term>
++
++ <listitem>
++ <para>
++ The 'model-config' file has attributes that describe the
++ printer model’s capabilities and default settings.
++ Printer model fonts may also be present. The model-config
++ file also identifies the print ddx driver to be used.
++
++ For each printer model supported, a complete hierarchy of
++ files should exist. In most cases, these files do not
++ need to be modified.
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><filename>${XPCONFIGDIR}/C/print/ddx-config/raster/pcl</filename></term>
++ <term><filename>${XPCONFIGDIR}/C/print/ddx-config/raster/pdf</filename></term>
++ <term><filename>${XPCONFIGDIR}/C/print/ddx-config/raster/postscript</filename></term>
++
++ <listitem>
++ <para>
++ The print ddx drivers can have highly specific
++ configuration files to control their behavior. In most
++ cases, these files do not need to be modified.
++ </para>
++ </listitem>
++ </varlistentry>
++ </variablelist>
++
++ More information in how to configure and customize the X print server can be found in the
++ <citerefentry><refentrytitle>Xprt</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry>
++ manual page.
++ </para>
++ </refsect1>
++
++ <refsect1>
++ <title>STARTING UP</title>
++ <para>
++ The summary checklist for starting the X Print Service is as follows:
++
++ <orderedlist>
++ <listitem>
++ <para>
++ Choose an execution model for the X Print Service. The X
++ Print Service can be run on a per-user session basis, per
++ machine basis, or can be run on a few machines globally
++ available to a number of users.
++ </para>
++ </listitem>
++ <listitem>
++ <para>
++ If print jobs are to be submitted to a spooler (almost always
++ the case), make sure all needed printers are available to the
++ spooler subsystem (most often <citerefentry><refentrytitle>lp</refentrytitle><manvolnum>1</manvolnum></citerefentry>)
++ on the same machine running the X Print Service.
++ </para>
++ </listitem>
++ <listitem>
++ <para>
++ Configure the X Print Server. See ``X Print Server
++ Configuration''.
++ </para>
++ </listitem>
++ <listitem>
++ <para>
++ Depending on #1, start the X Print Server process "Xprt", and
++ then the toolkit-specific Print Dialog Manager Daemon process
++ (such as CDEnext's "dtpdmd") at the appropriate times.
++ Note that libXprintUtils-based applications/toolkits do not need
++ a Print Dialog Manager Daemon process to use Xprint.
++ </para>
++ </listitem>
++ </orderedlist>
++ The details are described below.
++ </para>
++ <para>
++ Because the X Print Service is based on X, it can be easily distributed.
++ The most significant factors in which execution model to choose will be
++ driven by:
++ <itemizedlist>
++ <listitem>
++ <para>
++ how many printers will be accessable through the printer
++ subsystem on any given machine. A system administrator may
++ choose to cluster printers on a few given machines, or
++ scatter them across an organization and possibly make
++ extensive use of remote spoolers to make them globally
++ available.
++ </para>
++ </listitem>
++ <listitem>
++ <para>
++ how many machines will need a copy of the X Print Server
++ configuration files. The files have been architected so
++ that one super-set version of them can be maintained and
++ distributed (e.g. via NFS), and a per-machine or per-user
++ version of the `Xprinters' is all that is needed to have the
++ appropriate information in them utilized or ignored.
++ </para>
++ </listitem>
++ <listitem>
++ <para>
++ how many users can demand services from a given X Print
++ Service.
++ </para>
++ </listitem>
++ </itemizedlist>
++
++ With the above in mind, some obvious execution models include:
++ <itemizedlist>
++ <listitem>
++ <para>
++ Global - in this model, the system administrator is choosing
++ to run the X Print Service on a *few* select machines with
++ appropriate printers configured, and allow clients access to
++ the global resource. This can centralize the administration
++ of printers and configuration files, but may have to be
++ monitored for performance loading.
++ </para>
++ <para>
++ Startup would likely be done by boot-up scripts (such as <filename>/etc/init.d/xprint</filename>).
++ </para>
++ </listitem>
++
++ <listitem>
++ <para>
++ Per-machine - every machine with potential X Print Service
++ users would run the service. Printer and configuration file
++ administration is decentralized, and usage would be limited
++ to the users on the machine.
++ </para>
++ <para>
++ Startup would likely be done by boot-up scripts (such as <filename>/etc/init.d/xprint</filename>).
++ </para>
++ </listitem>
++
++ <listitem>
++ <para>
++ Per-user session - every user would run an entire X Print
++ Service for themselves. In the future, the Video X Server
++ normally started may contain Print X Server capability, so
++ this model becomes very natural.
++ </para>
++ <para>
++ Startup would likely be done at session login or by
++ launching actions or processes manually once the user
++ logs in. Note: Deamons like "dtpdmd" must be started after Xprt.
++ </para>
++ </listitem>
++ </itemizedlist>
++ </para>
++ <para>
++ Starting of the processes is straight forward. In strict order (example is for manually starting the X print server for CDEnext usage):
++ <orderedlist>
++ <listitem>
++ <para>
++ <programlisting>[machineA] % Xprt [-XpFile <Xprinters file>] [:dispNum] &</programlisting>
++ </para>
++ <para>
++ Note that Xprt will look for configuration files in either
++ a default location or where <envar>XPCONFIGDIR</envar> points.
++ </para>
++ <para>
++ <option>-XpFile</option> specifies an alternate `Xprinters' file, rather
++ than the default one or `<filename>${XPCONFIGDIR}/C/print/Xprinters</filename>'.
++ </para>
++ </listitem>
++ <listitem>
++ <para>
++ <programlisting>[machineA] % dtpdmd -d machineA[:dispNum] [-l /tmp/dtpdmd.log] &</programlisting>
++ </para>
++ <para>
++ The dtpdmd will maintain an X-Selection on the X-Server,
++ and will start dtpdm's as required to service requests.
++ </para>
++ </listitem>
++ </orderedlist>
++ </para>
++ <para>
++ In all but the per-user session model, the machine running the dtpdmd
++ (thus dtpdm's) will need display authorization to the users video
++ display.
++ </para>
++ </refsect1>
++
++ <refsect1>
++ <title>CLIENT CONFIGURATION</title>
++ <para>
++ Once a X Print Server and dtpdmd have been started -- many of them
++ in some cases -- clients will need to find and use them. There are
++ two mechanisms that allow clients to discover X Print Servers and
++ printers.
++
++ <itemizedlist>
++ <listitem>
++ <para>
++ "X Print Specifier" - assuming usage of the DtPrint/XprintUtils-based print
++ applications, the following notation is understood:
++ </para>
++ <para>
++ <programlisting>printer_name@machine[:dispNum]</programlisting>
++ </para>
++ <para>
++ For example:
++ </para>
++ <para>
++ <programlisting>colorlj7@printhub:2</programlisting>
++ </para>
++ <para>
++ In the above example, the X Print Server running at `printhub:2'
++ is assumed to support the printer named `colorlj7'.
++ </para>
++ </listitem>
++ <listitem>
++ <para>
++ <envar>${XPSERVERLIST}</envar> - assuming usage of the DtPrint print dialogs,
++ the environment variable <envar>${XPSERVERLIST}</envar> can contain a list
++ of X Print Servers. For example:
++ </para>
++ <para>
++ <programlisting>XPSERVERLIST="printhub:2 printhub:3 otherdept:0"</programlisting>
++ </para>
++ <para>
++ Then in the dialogs, only a printer name needs to be entered.
++ The dialog will then search the X Print Servers in <envar>${XPSERVERLIST}</envar>
++ for a server than supports the printer, and then establish
++ contact.
++ </para>
++ </listitem>
++ </itemizedlist>
++ </para>
++ </refsect1>
++
++ <refsect1>
++ <title>END-USER SEQUENCE</title>
++ <para>
++ From most CDEnext applications, printing is accomplished by bringing
++ down the <File> menu and selecting <Print...>. This will result in
++ the DtPrintSetupBox dialog, which will request the name of a printer,
++ and offer limited capability to configure print options (e.g. number
++ of copies). If the user wishes, they can select <Setup...>, which
++ will start a dtpdm capable of modifying additional print options.
++ Finally, the user should select <Print>.
++ </para>
++ </refsect1>
++
++ <refsect1>
++ <title>ENVIRONMENT</title>
++ <variablelist>
++ <varlistentry>
++ <term><envar>${XPCONFIGDIR}</envar></term>
++ <listitem>
++ <para> This environment variable points to the root
++ of the Xprint server configuration directory hierarchy.
++ If the variable is not defined, the default
++ path is be assumed. The default path may be
++ <filename>/usr/X11R6/lib/X11/xserver/</filename>,
++ <filename>/usr/lib/X11/xserver/</filename>,
++ <filename>/usr/share/Xprint/xserver/</filename> or
++ <filename>/usr/openwin/server/etc/XpConfig</filename>, depending on the
++ system, and may be configured in <filename>/etc/init.d/xprint</filename>.</para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><envar>${LANG}</envar></term>
++ <listitem>
++ <para>
++ This environment variable selects the locale settings used by the Xprint server.
++ Xprt allows language-specific settings (stored in <filename>${XPCONFIGDIR}/${LANG}/print/</filename>)
++ which will override the default settings (stored in <filename>${XPCONFIGDIR}/C/print/</filename>).
++ If <envar>${LANG}</envar> is not set "C" is assumed.
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><envar>${XPSERVERLIST}</envar></term>
++ <listitem>
++ <para>The environment variable <envar>${XPSERVERLIST}</envar> contains a list
++ of display identifiers (separated by whitespace) which tell an
++ application where it can find the Xprint servers. Usually
++ <envar>${XPSERVERLIST}</envar> is set by the profile startup scripts (e.g.
++ <filename>/etc/profile</filename> or <filename>/etc/profile.d/xprint.sh</filename>) using the output of
++ <userinput>/etc/init.d/xprint get_xpserverlist</userinput>.</para>
++ <para>Example:
++ <informalexample>
++ <programlisting>
++ export XPSERVERLIST="`/etc/init.d/xprint get_xpserverlist`"</programlisting>
++ </informalexample>
++ </para>
++ <para>Alternatively <envar>${XPSERVERLIST}</envar> can be set
++ manually. Example:</para>
++ <informalexample>
++ <programlisting>
++ export XPSERVERLIST="littlecat:80 bitdog:72"</programlisting>
++ </informalexample>
++ <para>
++ instructs an application to find an Xprint server at display
++ 80 on the machine "littlecat" and at display 72 on the
++ machine bigdog.
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><envar>${XPRINTER}</envar>
++ </term>
++ <listitem>
++ <para>The environment variable <envar>${XPRINTER}</envar>
++ defines the default printer used by print
++ applications. The syntax is either
++ <replaceable>printername</replaceable> or
++ <replaceable>printername</replaceable>@<replaceable>display</replaceable>.</para>
++ <para>Examples:
++ <variablelist>
++ <varlistentry>
++ <term><userinput>XPRINTER=ps003</userinput></term>
++ <listitem><para>
++ tells an application to look for the
++ first printer named "ps003" on all Xprint
++ servers.</para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <!-- brain dead <term> does not permit quote marks
++ (in XPRINTER="hplaser19@littlecat:80"), so omit them -->
++ <term><userinput>XPRINTER=hplaser19@littlecat:80</userinput></term>
++ <listitem><para>
++ tells an application to use the printer "hplaser19"
++ on the Xprint server at display
++ "littlecat:80".</para>
++ </listitem>
++ </varlistentry>
++
++ </variablelist>
++ </para>
++ <para>If <envar>${XPRINTER}</envar> is not set the applications
++ will examine the values of the <envar>${PDPRINTER}</envar>,
++ <envar>${LPDEST}</envar>, and
++ <envar>${PRINTER}</envar> environment variables (in that order).
++ </para>
++ </listitem>
++ </varlistentry>
++ </variablelist>
++ </refsect1>
++
++ <refsect1>
++ <title>SEE ALSO</title>
++ <para>
++ <simplelist type="inline">
++ <!-- specific references -->
++ <!-- none -->
++
++ <!-- Xprint general references -->
++<!--
++ <member><citerefentry><refentrytitle>Xprint</refentrytitle><manvolnum>__miscmansuffix__</manvolnum></citerefentry></member>
++-->
++ <member><citerefentry><refentrytitle>X11</refentrytitle><manvolnum>__miscmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xplsprinters</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xprehashprinterlist</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xphelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpxmhelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpawhelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpxthelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpsimplehelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>Xserver</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>Xprt</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <!-- ToDO: Add manual pages for the single Xprint DDX implementations (PostScript/PDF/PCL/PCL-MONO/Raster/etc.) -->
++ <member><citerefentry><refentrytitle>libXp</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>libXprintUtils</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>libXprintAppUtils</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>XmPrintShell</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>XawPrintShell</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
++ <member>Xprint FAQ (<ulink url="http://xprint.mozdev.org/docs/Xprint_FAQ.html">http://xprint.mozdev.org/docs/Xprint_FAQ.html</ulink>)</member>
++ <member>Xprint main site (<ulink url="http://xprint.mozdev.org/">http://xprint.mozdev.org/</ulink>)</member>
++ </simplelist>
++ </para>
++ </refsect1>
++
++ <refsect1>
++ <title>AUTHORS</title>
++ <para>
++ This manual page was written by
++ Roland Mainz <email>roland.mainz@nrubsig.org</email> based on the original X11R6.6
++ <filename>xc/programs/Xserver/XpConfig/README</filename>.
++ </para>
++ </refsect1>
++</refentry>
++
+Index: xc/extras/Mesa/Makefile
+diff -u xc/extras/Mesa/Makefile:1.1.1.3 xc/extras/Mesa/Makefile:1.1.1.3.2.1
+--- xc/extras/Mesa/Makefile:1.1.1.3 Sat Aug 28 04:26:58 2004
++++ xc/extras/Mesa/Makefile Wed Dec 15 01:50:55 2004
+@@ -45,17 +45,22 @@
+
+ # Rules to set/install a specific build configuration
+ aix \
++aix-64 \
+ aix-gcc \
+ aix-static \
+ beos \
+ darwin \
+ darwin-static \
+ freebsd \
++freebsd-dri \
++freebsd-dri-x86 \
+ hpux10 \
+ hpux10-gcc \
+ hpux10-static \
++hpux11-32 \
+ hpux11-32-static \
+ hpux11-32-static-nothreads \
++hpux11-64 \
+ hpux11-64-static \
+ hpux9 \
+ hpux9-gcc \
+@@ -81,6 +86,7 @@
+ linux-ppc \
+ linux-ppc-static \
+ linux-solo \
++linux-solo-x86 \
+ linux-solo-ia64 \
+ linux-sparc \
+ linux-sparc5 \
+@@ -111,9 +117,9 @@
+
+ # Rules for making release tarballs
+
+-DIRECTORY = Mesa-6.1
+-LIB_NAME = MesaLib-6.1
+-DEMO_NAME = MesaDemos-6.1
++DIRECTORY = Mesa-6.2.1
++LIB_NAME = MesaLib-6.2.1
++DEMO_NAME = MesaDemos-6.2.1
+
+ LIB_FILES = \
+ $(DIRECTORY)/Makefile* \
+@@ -121,6 +127,7 @@
+ $(DIRECTORY)/mms-config. \
+ $(DIRECTORY)/Mesa.dsw \
+ $(DIRECTORY)/bin/mklib \
++ $(DIRECTORY)/bin/installmesa \
+ $(DIRECTORY)/configs/[a-z]* \
+ $(DIRECTORY)/docs/*.html \
+ $(DIRECTORY)/docs/COPYING \
+@@ -186,7 +193,6 @@
+ $(DIRECTORY)/src/mesa/tnl_dd/imm/*.[ch] \
+ $(DIRECTORY)/src/mesa/tnl_dd/imm/NOTES.imm \
+ $(DIRECTORY)/src/mesa/drivers/beos/*.cpp \
+- $(DIRECTORY)/src/mesa/drivers/beos/*.h \
+ $(DIRECTORY)/src/mesa/drivers/beos/Makefile \
+ $(DIRECTORY)/src/mesa/drivers/common/*.[ch] \
+ $(DIRECTORY)/src/mesa/drivers/common/descrip.mms \
+@@ -249,6 +255,7 @@
+ $(DIRECTORY)/src/glw/*.[ch] \
+ $(DIRECTORY)/src/glw/Makefile* \
+ $(DIRECTORY)/src/glw/README \
++ $(DIRECTORY)/src/glw/depend \
+ $(DIRECTORY)/progs/Makefile \
+ $(DIRECTORY)/progs/util/README \
+ $(DIRECTORY)/progs/util/*.[ch] \
+@@ -274,6 +281,8 @@
+ $(DIRECTORY)/src/glut/dos/*.[ch] \
+ $(DIRECTORY)/src/glut/dos/Makefile.DJ \
+ $(DIRECTORY)/src/glut/dos/PC_HW/*.[chS] \
++ $(DIRECTORY)/src/glut/ggi/*.[ch] \
++ $(DIRECTORY)/src/glut/ggi/Makefile \
+ $(DIRECTORY)/progs/beos/*.cpp \
+ $(DIRECTORY)/progs/beos/Makefile \
+ $(DIRECTORY)/progs/images/*.rgb \
+@@ -301,6 +310,26 @@
+ $(DIRECTORY)/progs/ggi/*.c
+
+
++DRI_FILES = \
++ $(DIRECTORY)/src/glx/Makefile \
++ $(DIRECTORY)/src/glx/mini/*.[ch] \
++ $(DIRECTORY)/src/glx/mini/example.miniglx.conf \
++ $(DIRECTORY)/src/glx/mini/NOTES \
++ $(DIRECTORY)/src/mesa/drivers/dri/Makefile \
++ $(DIRECTORY)/src/mesa/drivers/dri/Makefile.template \
++ $(DIRECTORY)/src/mesa/drivers/dri/common/*.[ch] \
++ $(DIRECTORY)/src/mesa/drivers/dri/dri_client/imports/*.h \
++ $(DIRECTORY)/src/mesa/drivers/dri/*/*.[ch] \
++ $(DIRECTORY)/src/mesa/drivers/dri/*/depend \
++ $(DIRECTORY)/src/mesa/drivers/dri/*/Makefile \
++ $(DIRECTORY)/src/mesa/drivers/dri/*/Doxyfile \
++ $(DIRECTORY)/src/mesa/drivers/dri/*/server/*.[ch]
++
++
++# Everything for new a Mesa release:
++tarballs: lib_gz demo_gz lib_bz2 demo_bz2 lib_zip demo_zip md5
++
++
+ lib_gz:
+ rm -f configs/current ; \
+ cd .. ; \
+@@ -347,6 +376,3 @@
+ @-md5sum $(DEMO_NAME).tar.gz
+ @-md5sum $(DEMO_NAME).tar.bz2
+ @-md5sum $(DEMO_NAME).zip
+-
+-# Everything for new a Mesa release:
+-tarballs: lib_gz demo_gz lib_bz2 demo_bz2 lib_zip demo_zip md5
+Index: xc/extras/Mesa/Makefile.mgw
+diff -u xc/extras/Mesa/Makefile.mgw:1.1.1.1 xc/extras/Mesa/Makefile.mgw:1.1.1.1.4.1
+--- xc/extras/Mesa/Makefile.mgw:1.1.1.1 Wed Jun 16 09:16:21 2004
++++ xc/extras/Mesa/Makefile.mgw Wed Dec 15 01:50:55 2004
+@@ -40,6 +40,9 @@
+ # As a consequence, you'll need the Win32 Glide3
+ # library to build any application.
+ # default = no
++# ICD=1 build the installable client driver interface
++# (windows opengl driver interface)
++# default = no
+ # X86=1 optimize for x86 (if possible, use MMX, SSE, 3DNow).
+ # default = no
+ #
+@@ -56,7 +59,13 @@
+
+ CPU ?= pentium
+
+-CFLAGS = -Wall -W -pedantic
++ifeq ($(ICD),1)
++ # when -std=c99 mingw will not define WIN32
++ CFLAGS = -Wall -W -Werror
++else
++ # I love c89
++ CFLAGS = -Wall -W -pedantic
++endif
+ CFLAGS += -O2 -ffast-math -mcpu=$(CPU)
+
+ export CFLAGS
+Index: xc/extras/Mesa/Mesa.dsw
+diff -u xc/extras/Mesa/Mesa.dsw:1.1.1.2 xc/extras/Mesa/Mesa.dsw:1.1.1.2.2.1
+--- xc/extras/Mesa/Mesa.dsw:1.1.1.2 Sat Aug 28 04:26:58 2004
++++ xc/extras/Mesa/Mesa.dsw Wed Dec 15 01:50:55 2004
+@@ -3,7 +3,7 @@
+ \r
+ ###############################################################################\r
+ \r
+-Project: "array_cache"=.\SRC\MESA\array_cache\array_cache.dsp - Package Owner=<4>\r
++Project: "array_cache"=".\SRC\MESA\array_cache\array_cache.dsp" - Package Owner=<4>\r
+ \r
+ Package=<5>\r
+ {{{\r
+@@ -15,7 +15,7 @@
+ \r
+ ###############################################################################\r
+ \r
+-Project: "gdi"=.\src\mesa\drivers\windows\gdi\gdi.dsp - Package Owner=<4>\r
++Project: "gdi"=".\src\mesa\drivers\windows\gdi\gdi.dsp" - Package Owner=<4>\r
+ \r
+ Package=<5>\r
+ {{{\r
+@@ -51,7 +51,7 @@
+ \r
+ ###############################################################################\r
+ \r
+-Project: "glapi"=.\SRC\MESA\glapi\glapi.dsp - Package Owner=<4>\r
++Project: "glapi"=".\SRC\MESA\glapi\glapi.dsp" - Package Owner=<4>\r
+ \r
+ Package=<5>\r
+ {{{\r
+@@ -63,7 +63,7 @@
+ \r
+ ###############################################################################\r
+ \r
+-Project: "glu"=.\src\glu\sgi\glu.dsp - Package Owner=<4>\r
++Project: "glu"=".\src\glu\sgi\glu.dsp" - Package Owner=<4>\r
+ \r
+ Package=<5>\r
+ {{{\r
+@@ -78,22 +78,7 @@
+ \r
+ ###############################################################################\r
+ \r
+-Project: "glut"=.\src\glut\glx\glut.dsp - Package Owner=<4>\r
+-\r
+-Package=<5>\r
+-{{{\r
+-}}}\r
+-\r
+-Package=<4>\r
+-{{{\r
+- Begin Project Dependency\r
+- Project_Dep_Name glu\r
+- End Project Dependency\r
+-}}}\r
+-\r
+-###############################################################################\r
+-\r
+-Project: "main"=.\SRC\MESA\main\main.dsp - Package Owner=<4>\r
++Project: "main"=".\SRC\MESA\main\main.dsp" - Package Owner=<4>\r
+ \r
+ Package=<5>\r
+ {{{\r
+@@ -105,7 +90,7 @@
+ \r
+ ###############################################################################\r
+ \r
+-Project: "math"=.\SRC\MESA\math\math.dsp - Package Owner=<4>\r
++Project: "math"=".\SRC\MESA\math\math.dsp" - Package Owner=<4>\r
+ \r
+ Package=<5>\r
+ {{{\r
+@@ -117,7 +102,7 @@
+ \r
+ ###############################################################################\r
+ \r
+-Project: "osmesa"=.\SRC\MESA\DRIVERS\osmesa\osmesa.dsp - Package Owner=<4>\r
++Project: "osmesa"=".\SRC\MESA\DRIVERS\osmesa\osmesa.dsp" - Package Owner=<4>\r
+ \r
+ Package=<5>\r
+ {{{\r
+@@ -132,7 +117,7 @@
+ \r
+ ###############################################################################\r
+ \r
+-Project: "shader"=.\SRC\MESA\shader\shader.dsp - Package Owner=<4>\r
++Project: "shader"=".\SRC\MESA\shader\shader.dsp" - Package Owner=<4>\r
+ \r
+ Package=<5>\r
+ {{{\r
+@@ -144,7 +129,7 @@
+ \r
+ ###############################################################################\r
+ \r
+-Project: "swrast"=.\SRC\MESA\swrast\swrast.dsp - Package Owner=<4>\r
++Project: "swrast"=".\SRC\MESA\swrast\swrast.dsp" - Package Owner=<4>\r
+ \r
+ Package=<5>\r
+ {{{\r
+@@ -156,7 +141,7 @@
+ \r
+ ###############################################################################\r
+ \r
+-Project: "swrast_setup"=.\SRC\MESA\swrast_setup\swrast_setup.dsp - Package Owner=<4>\r
++Project: "swrast_setup"=".\SRC\MESA\swrast_setup\swrast_setup.dsp" - Package Owner=<4>\r
+ \r
+ Package=<5>\r
+ {{{\r
+@@ -168,7 +153,7 @@
+ \r
+ ###############################################################################\r
+ \r
+-Project: "tnl"=.\SRC\MESA\tnl\tnl.dsp - Package Owner=<4>\r
++Project: "tnl"=".\SRC\MESA\tnl\tnl.dsp" - Package Owner=<4>\r
+ \r
+ Package=<5>\r
+ {{{\r
+Index: xc/extras/Mesa/bin/mklib
+diff -u xc/extras/Mesa/bin/mklib:1.1.1.3 xc/extras/Mesa/bin/mklib:1.1.1.3.2.1
+--- xc/extras/Mesa/bin/mklib:1.1.1.3 Sat Aug 28 04:26:58 2004
++++ xc/extras/Mesa/bin/mklib Wed Dec 15 01:50:55 2004
+@@ -116,6 +116,14 @@
+ 'Linux' | 'OpenBSD')
+ # GCC-based environment
+
++ # Set default compilers if env vars not set
++ if [ "x$CXX" = "x" ] ; then
++ CXX=g++
++ fi
++ if [ "x$CC" = "x" ] ; then
++ CC=gcc
++ fi
++
+ if [ $NOPREFIX = 1 ] ; then
+ # No "lib" or ".so" part
+ echo "mklib: Making" $ARCH "shared library: " ${LIBNAME}
+@@ -372,7 +380,30 @@
+ ar -X64 -ruv ${LIBNAME} ${OBJECTS}
+ FINAL_LIBS=${LIBNAME}
+ else
+- echo "mklib: PROBLEM: AIX64 shared libs not supported!!!"
++ EXPFILE="lib${LIBNAME}.exp"
++ OFILE=shr.o #Want to be consistent with the IBM libGL.a
++ LIBNAME="lib${LIBNAME}.a" # shared objects are still stored in the .a libraries
++ OPTS="-bE:${EXPFILE} -bM:SRE -bnoentry -q64"
++ rm -f ${EXPFILE} ${OFILE}
++ NM="/bin/nm -eC -X64"
++ echo "#! /usr/lib/${LIBNAME}" > ${EXPFILE}
++ ${NM} ${OBJECTS} | awk '{
++ if ((($2 == "T") || ($2 == "D") || ($2 == "B")) \
++ && ( substr($1,1,1) != ".")) {
++ if (substr ($1, 1, 7) != "__sinit" &&
++ substr ($1, 1, 7) != "__sterm") {
++ if (substr ($1, 1, 5) == "__tf1")
++ print (substr ($1, 7))
++ else if (substr ($1, 1, 5) == "__tf9")
++ print (substr ($1, 15))
++ else
++ print $1
++ }
++ }
++ }' | sort -u >> ${EXPFILE}
++ cc ${OPTS} -o ${OFILE} ${OBJECTS} ${DEPS}
++ ar -X64 -r ${LIBNAME} ${OFILE}
++ FINAL_LIBS="${LIBNAME}"
+ fi
+ ;;
+
+Index: xc/extras/Mesa/configs/aix
+diff -u xc/extras/Mesa/configs/aix:1.1.1.2 xc/extras/Mesa/configs/aix:1.1.1.2.4.1
+--- xc/extras/Mesa/configs/aix:1.1.1.2 Thu Jul 22 06:49:32 2004
++++ xc/extras/Mesa/configs/aix Wed Dec 15 01:50:55 2004
+@@ -20,9 +20,9 @@
+ OSMESA_LIB_NAME = libOSMesa.a
+
+ GL_LIB_DEPS = -lX11 -lXext -lm
+-GLU_LIB_DEPS = -L$(TOP)/lib -lGL -lm -lC
+-GLUT_LIB_DEPS = -L$(TOP)/lib -lGLU -lGL -lXi -lXmu -lX11 -lm
+-GLW_LIB_DEPS = -L$(TOP)/lib -lGL -lXt -lX11
+-OSMESA_LIB_DEPS = -L$(TOP)/lib -lGL
+-APP_LIB_DEPS = -lglut -lGLU -lGL -lX11 -lXext -lXmu -lXi -lm -lC
++GLU_LIB_DEPS = -L$(TOP)/lib -l$(GL_LIB) -lm -lC
++GLUT_LIB_DEPS = -L$(TOP)/lib -l$(GLU_LIB) -l$(GL_LIB) -lXi -lXmu -lX11 -lm
++GLW_LIB_DEPS = -L$(TOP)/lib -l$(GL_LIB) -lXt -lX11
++OSMESA_LIB_DEPS = -L$(TOP)/lib -l$(GL_LIB)
++APP_LIB_DEPS = -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lX11 -lXext -lXmu -lXi -lm -lC
+
+Index: xc/extras/Mesa/configs/aix-64
+diff -u /dev/null xc/extras/Mesa/configs/aix-64:1.1.1.1.2.1
+--- /dev/null Fri Feb 11 21:35:29 2005
++++ xc/extras/Mesa/configs/aix-64 Wed Dec 15 01:50:55 2004
+@@ -0,0 +1,28 @@
++# Configuration for AIX 64-bit, dynamic libs
++
++include $(TOP)/configs/default
++
++CONFIG_NAME = aix-64
++
++# Compiler and flags
++CC = xlc
++CXX = xlC
++
++CFLAGS = -q64 -qmaxmem=16384 -O -DAIXV3
++CXXFLAGS = -q64 -qmaxmem=16384 -O -DAIXV3
++MKLIB_OPTIONS = -arch AIX64
++
++# Library names (actual file names)
++GL_LIB_NAME = libGL.a
++GLU_LIB_NAME = libGLU.a
++GLUT_LIB_NAME = libglut.a
++GLW_LIB_NAME = libGLw.a
++OSMESA_LIB_NAME = libOSMesa.a
++
++GL_LIB_DEPS = -lX11 -lXext -lm
++GLU_LIB_DEPS = -L$(TOP)/lib -l$(GL_LIB) -lm -lC
++GLUT_LIB_DEPS = -L$(TOP)/lib -l$(GLU_LIB) -l$(GL_LIB) -lXi -lXmu -lX11 -lm
++GLW_LIB_DEPS = -L$(TOP)/lib -l$(GL_LIB) -lXt -lX11
++OSMESA_LIB_DEPS = -L$(TOP)/lib -l$(GL_LIB)
++APP_LIB_DEPS = -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lX11 -lXext -lXmu -lXi -lm -lC
++
+Index: xc/extras/Mesa/configs/aix-gcc
+diff -u xc/extras/Mesa/configs/aix-gcc:1.1.1.1 xc/extras/Mesa/configs/aix-gcc:1.1.1.1.4.1
+--- xc/extras/Mesa/configs/aix-gcc:1.1.1.1 Wed Jun 16 09:16:21 2004
++++ xc/extras/Mesa/configs/aix-gcc Wed Dec 15 01:50:55 2004
+@@ -13,7 +13,7 @@
+
+ MKLIB_OPTIONS = -arch aix-gcc
+ GL_LIB_DEPS = -lX11 -lXext -lm
+-GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm
+-GLUT_LIB_DEPS = -L$(LIB_DIR -lGLU -lGL -lXi -lXmu
+-APP_LIB_DEPS = -L$(LIB_DIR) -Wl,-brtl -lglut -lGLU -lGL -lm -lX11 -lXext -lXmu -lXi
++GLU_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -lm
++GLUT_LIB_DEPS = -L$(LIB_DIR -l$(GLU_LIB) -l$(GL_LIB) -lXi -lXmu
++APP_LIB_DEPS = -L$(LIB_DIR) -Wl,-brtl -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm -lX11 -lXext -lXmu -lXi
+
+Index: xc/extras/Mesa/configs/beos
+diff -u xc/extras/Mesa/configs/beos:1.1.1.1 xc/extras/Mesa/configs/beos:1.1.1.1.2.1
+--- xc/extras/Mesa/configs/beos:1.1.1.1 Sat Aug 28 04:27:03 2004
++++ xc/extras/Mesa/configs/beos Wed Dec 15 01:50:55 2004
+@@ -42,11 +42,10 @@
+
+ ifdef DEBUG
+ CFLAGS += -g -O0
+- CXXFLAGS += -g -O0
+ LDFLAGS += -g
++ DEFINES += -DDEBUG
+ else
+ CFLAGS += -O3
+- CXXFLAGS += -O3
+ endif
+
+ GLUT_CFLAGS = -fexceptions
+@@ -93,8 +92,8 @@
+
+ # Library/program dependencies
+ GL_LIB_DEPS =
+-OSMESA_LIB_DEPS = -L$(LIB_DIR) -lGL
++OSMESA_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB)
+ GLU_LIB_DEPS =
+-GLUT_LIB_DEPS = -lgame -L$(LIB_DIR) -lGL
+-APP_LIB_DEPS = -lbe -L$(LIB_DIR) -lGL -lglut
++GLUT_LIB_DEPS = -lgame -L$(LIB_DIR) -l$(GL_LIB)
++APP_LIB_DEPS = -lbe -L$(LIB_DIR) -l$(GL_LIB) -l$(GLUT_LIB)
+
+Index: xc/extras/Mesa/configs/darwin
+diff -u xc/extras/Mesa/configs/darwin:1.1.1.1 xc/extras/Mesa/configs/darwin:1.1.1.1.4.1
+--- xc/extras/Mesa/configs/darwin:1.1.1.1 Wed Jun 16 09:16:21 2004
++++ xc/extras/Mesa/configs/darwin Wed Dec 15 01:50:55 2004
+@@ -22,4 +22,4 @@
+ GLU_LIB_DEPS = $(TOP)/lib/GL.dylib
+ GLUT_LIB_DEPS =
+ GLW_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXt $(TOP)/lib/GL.dylib
+-APP_LIB_DEPS = -L$(TOP)/lib -lglut -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
++APP_LIB_DEPS = -L$(TOP)/lib -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
+Index: xc/extras/Mesa/configs/darwin-static
+diff -u xc/extras/Mesa/configs/darwin-static:1.1.1.1 xc/extras/Mesa/configs/darwin-static:1.1.1.1.4.1
+--- xc/extras/Mesa/configs/darwin-static:1.1.1.1 Wed Jun 16 09:16:21 2004
++++ xc/extras/Mesa/configs/darwin-static Wed Dec 15 01:50:55 2004
+@@ -21,4 +21,4 @@
+ GLU_LIB_DEPS =
+ GLUT_LIB_DEPS =
+ GLW_LIB_DEPS =
+-APP_LIB_DEPS = -L$(TOP)/lib -lglut -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
++APP_LIB_DEPS = -L$(TOP)/lib -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
+Index: xc/extras/Mesa/configs/default
+diff -u xc/extras/Mesa/configs/default:1.1.1.2 xc/extras/Mesa/configs/default:1.1.1.2.4.1
+--- xc/extras/Mesa/configs/default:1.1.1.2 Thu Jul 22 06:49:32 2004
++++ xc/extras/Mesa/configs/default Wed Dec 15 01:50:55 2004
+@@ -7,8 +7,8 @@
+
+ # Version info
+ MESA_MAJOR=6
+-MESA_MINOR=1
+-MESA_TINY=0
++MESA_MINOR=2
++MESA_TINY=1
+
+ # external projects
+ DRM_SOURCE_PATH=$(TOP)/../drm
+@@ -61,8 +61,8 @@
+
+ # Library/program dependencies
+ GL_LIB_DEPS = -lX11 -lXext -lm -lpthread
+-OSMESA_LIB_DEPS = -L$(LIB_DIR) -lGL
+-GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm
+-GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -lX11 -lXmu -lXt -lXi -lm
+-GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -lXt -lX11
+-APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lm
++OSMESA_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB)
++GLU_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -lm
++GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -lX11 -lXmu -lXt -lXi -lm
++GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -lXt -lX11
++APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm
+Index: xc/extras/Mesa/configs/freebsd-dri
+diff -u /dev/null xc/extras/Mesa/configs/freebsd-dri:1.1.1.1.2.1
+--- /dev/null Fri Feb 11 21:35:29 2005
++++ xc/extras/Mesa/configs/freebsd-dri Wed Dec 15 01:50:55 2004
+@@ -0,0 +1,39 @@
++# -*-makefile-*-
++# Configuration for freebsd-dri: FreeBSD DRI hardware drivers
++
++include $(TOP)/configs/freebsd
++
++CONFIG_NAME = freebsd-dri
++
++# Compiler and flags
++CC = gcc
++CXX = g++
++WARN_FLAGS = -Wall
++OPT_FLAGS = -O
++
++CFLAGS = -DDRI_NEW_INTERFACE_ONLY -Wmissing-prototypes -g -std=c99 -Wundef -fPIC -ffast-math -I/usr/local/include -I/usr/X11R6/include -I/usr/X11R6/include/X11/extensions
++CXXFLAGS = -DDRI_NEW_INTERFACE_ONLY -Wall -g -ansi -pedantic -fPIC
++
++ASM_SOURCES =
++
++# Library/program dependencies
++DRI_LIB_DEPS = -lm -lpthread -lexpat
++GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -pthread
++
++GLUT_LIB_DEPS = -L$(LIB_DIR) -L/usr/X11R6/lib -lGLU -lGL -lX11 -lXmu -lXt -lXi -lm
++GLW_LIB_DEPS = -L$(LIB_DIR) -L/usr/X11R6/lib -lGL -lXt -lXm -lX11
++
++
++# Directories
++SRC_DIRS = mesa glu glut/glx glw glx/x11
++DRIVER_DIRS = dri
++PROGRAM_DIRS =
++WINDOW_SYSTEM=dri
++
++DRM_SOURCE_PATH=$(TOP)/../drm
++
++# ffb and gamma are missing because they have not been converted to use the new
++# interface.
++DRI_DIRS = dri_client i810 i830 i915 mach64 mga r128 r200 radeon tdfx \
++ unichrome savage sis
++
+Index: xc/extras/Mesa/configs/freebsd-dri-x86
+diff -u /dev/null xc/extras/Mesa/configs/freebsd-dri-x86:1.1.1.1.2.1
+--- /dev/null Fri Feb 11 21:35:29 2005
++++ xc/extras/Mesa/configs/freebsd-dri-x86 Wed Dec 15 01:50:55 2004
+@@ -0,0 +1,12 @@
++# -*-makefile-*-
++# Configuration for freebsd-dri: FreeBSD DRI hardware drivers
++
++include $(TOP)/configs/freebsd-dri
++
++CONFIG_NAME = freebsd-dri-x86
++
++# Unnecessary on x86, generally.
++PIC_FLAGS =
++
++ASM_FLAGS = -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM
++ASM_SOURCES = $(X86_SOURCES)
+Index: xc/extras/Mesa/configs/hpux10-static
+diff -u xc/extras/Mesa/configs/hpux10-static:1.1.1.1 xc/extras/Mesa/configs/hpux10-static:1.1.1.1.4.1
+--- xc/extras/Mesa/configs/hpux10-static:1.1.1.1 Wed Jun 16 09:16:21 2004
++++ xc/extras/Mesa/configs/hpux10-static Wed Dec 15 01:50:55 2004
+@@ -26,5 +26,5 @@
+ GLU_LIB_DEPS =
+ GLUT_LIB_DEPS =
+ GLW_LIB_DEPS =
+-APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lpthread -lm -lstdc++
+-APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -L/usr/lib/X11R6 -L/usr/contrib/X11R6/lib -lXext -lXmu -lXi -lX11 -lm -lstdc++
++APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lpthread -lm -lstdc++
++APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/lib/X11R6 -L/usr/contrib/X11R6/lib -lXext -lXmu -lXi -lX11 -lm -lstdc++
+Index: xc/extras/Mesa/configs/hpux11-32
+diff -u /dev/null xc/extras/Mesa/configs/hpux11-32:1.1.1.1.2.1
+--- /dev/null Fri Feb 11 21:35:29 2005
++++ xc/extras/Mesa/configs/hpux11-32 Wed Dec 15 01:50:55 2004
+@@ -0,0 +1,26 @@
++# Configuration for HPUX v11
++
++include $(TOP)/configs/default
++
++CONFIG_NAME = hpux11-32
++
++# Compiler and flags
++CC = cc
++CXX = aCC
++
++CFLAGS = +z -Ae +O2 +Onolimit +Oaggressive -D_HPUX_SOURCE -I/usr/include/X11R6 -I/usr/contrib/X11R6/include -DUSE_XSHM -DPTHREADS
++
++CXXFLAGS = +z -Aa +O2 +Onolimit +Oaggressive -D_HPUX_SOURCE -I/usr/include/X11R6 -I/usr/contrib/X11R6/include
++
++MKLIB_OPTIONS =
++
++
++# Library names (actual file names)
++GL_LIB_NAME = libGL.a
++GLU_LIB_NAME = libGLU.a
++GLUT_LIB_NAME = libglut.a
++GLW_LIB_NAME = libGLw.a
++OSMESA_LIB_NAME = libOSMesa.a
++
++# Library/program dependencies
++APP_LIB_DEPS = -L/usr/lib/X11R6 -L/usr/contrib/X11R6/lib -lXext -lXmu -lXi -lX11 -lm
+Index: xc/extras/Mesa/configs/hpux11-64
+diff -u /dev/null xc/extras/Mesa/configs/hpux11-64:1.1.1.1.2.1
+--- /dev/null Fri Feb 11 21:35:29 2005
++++ xc/extras/Mesa/configs/hpux11-64 Wed Dec 15 01:50:55 2004
+@@ -0,0 +1,27 @@
++# Configuration for HPUX v11, 64-bit
++
++include $(TOP)/configs/default
++
++CONFIG_NAME = hpux11-64
++
++# Compiler and flags
++CC = cc
++CXX = aCC
++
++CFLAGS = +z -Ae +DD64 +O2 +Onolimit +Oaggressive -D_HPUX_SOURCE -I/usr/include/X11R6 -I/usr/contrib/X11R6/include -DUSE_XSHM -DPTHREADS
++
++CXXFLAGS = +z -Aa +DD64 +O2 +Onolimit +Oaggressive -D_HPUX_SOURCE -I/usr/include/X11R6 -I/usr/contrib/X11R6/include
++
++MKLIB_OPTIONS =
++
++LIBDIR = $(TOP)/lib64
++
++# Library names (actual file names)
++GL_LIB_NAME = libGL.a
++GLU_LIB_NAME = libGLU.a
++GLUT_LIB_NAME = libglut.a
++GLW_LIB_NAME = libGLw.a
++OSMESA_LIB_NAME = libOSMesa.a
++
++# Library/program dependencies
++APP_LIB_DEPS = -L/usr/lib/X11R6 -L/usr/contrib/X11R6/lib -lXext -lXmu -lXi -lX11 -lm
+Index: xc/extras/Mesa/configs/irix6-64
+diff -u xc/extras/Mesa/configs/irix6-64:1.1.1.1 xc/extras/Mesa/configs/irix6-64:1.1.1.1.4.1
+--- xc/extras/Mesa/configs/irix6-64:1.1.1.1 Wed Jun 16 09:16:21 2004
++++ xc/extras/Mesa/configs/irix6-64 Wed Dec 15 01:50:55 2004
+@@ -15,4 +15,4 @@
+
+ LIB_DIR = $(TOP)/lib64
+
+-APP_LIB_DEPS = -L$(LIB_DIR) -64 -rpath $(LIB_DIR) -lglut -lGLU -lGL -lX11 -lXmu -lXi -lm
++APP_LIB_DEPS = -L$(LIB_DIR) -64 -rpath $(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lX11 -lXmu -lXi -lm
+Index: xc/extras/Mesa/configs/irix6-64-static
+diff -u xc/extras/Mesa/configs/irix6-64-static:1.1.1.1 xc/extras/Mesa/configs/irix6-64-static:1.1.1.1.4.1
+--- xc/extras/Mesa/configs/irix6-64-static:1.1.1.1 Wed Jun 16 09:16:21 2004
++++ xc/extras/Mesa/configs/irix6-64-static Wed Dec 15 01:50:55 2004
+@@ -15,7 +15,7 @@
+
+ LIB_DIR = $(TOP)/lib64
+
+-APP_LIB_DEPS = -L$(LIB_DIR) -64 -lglut -lGLU -lGL -lX11 -lXext -lXmu -lXi -lm
++APP_LIB_DEPS = -L$(LIB_DIR) -64 -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lX11 -lXext -lXmu -lXi -lm
+
+ GL_LIB_NAME = libGL.a
+ GLU_LIB_NAME = libGLU.a
+Index: xc/extras/Mesa/configs/irix6-n32
+diff -u xc/extras/Mesa/configs/irix6-n32:1.1.1.1 xc/extras/Mesa/configs/irix6-n32:1.1.1.1.4.1
+--- xc/extras/Mesa/configs/irix6-n32:1.1.1.1 Wed Jun 16 09:16:21 2004
++++ xc/extras/Mesa/configs/irix6-n32 Wed Dec 15 01:50:55 2004
+@@ -15,4 +15,4 @@
+
+ LIB_DIR = $(TOP)/lib32
+
+-APP_LIB_DEPS = -L$(LIB_DIR) -n32 -rpath $(LIB_DIR) -lglut -lGLU -lGL -lX11 -lXmu -lXi -lfpe -lm
++APP_LIB_DEPS = -L$(LIB_DIR) -n32 -rpath $(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lX11 -lXmu -lXi -lfpe -lm
+Index: xc/extras/Mesa/configs/irix6-n32-static
+diff -u xc/extras/Mesa/configs/irix6-n32-static:1.1.1.1 xc/extras/Mesa/configs/irix6-n32-static:1.1.1.1.4.1
+--- xc/extras/Mesa/configs/irix6-n32-static:1.1.1.1 Wed Jun 16 09:16:21 2004
++++ xc/extras/Mesa/configs/irix6-n32-static Wed Dec 15 01:50:55 2004
+@@ -15,7 +15,7 @@
+
+ LIB_DIR = $(TOP)/lib32
+
+-APP_LIB_DEPS = -L$(LIB_DIR) -n32 -glut -lGLU -lGL -lX11 -lXext -lXmu -lXi -lm
++APP_LIB_DEPS = -L$(LIB_DIR) -n32 -glut -l$(GLU_LIB) -l$(GL_LIB) -lX11 -lXext -lXmu -lXi -lm
+
+ GL_LIB_NAME = libGL.a
+ GLU_LIB_NAME = libGLU.a
+Index: xc/extras/Mesa/configs/irix6-o32
+diff -u xc/extras/Mesa/configs/irix6-o32:1.1.1.1 xc/extras/Mesa/configs/irix6-o32:1.1.1.1.4.1
+--- xc/extras/Mesa/configs/irix6-o32:1.1.1.1 Wed Jun 16 09:16:21 2004
++++ xc/extras/Mesa/configs/irix6-o32 Wed Dec 15 01:50:55 2004
+@@ -15,5 +15,5 @@
+
+ LIB_DIR = $(TOP)/lib32
+
+-APP_LIB_DEPS = -L$(LIB_DIR) -32 -rpath $(LIB_DIR) -lglut -lGLU -lGL -lX11 -lXext -lXmu -lXi -lm
++APP_LIB_DEPS = -L$(LIB_DIR) -32 -rpath $(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lX11 -lXext -lXmu -lXi -lm
+
+Index: xc/extras/Mesa/configs/irix6-o32-static
+diff -u xc/extras/Mesa/configs/irix6-o32-static:1.1.1.1 xc/extras/Mesa/configs/irix6-o32-static:1.1.1.1.4.1
+--- xc/extras/Mesa/configs/irix6-o32-static:1.1.1.1 Wed Jun 16 09:16:21 2004
++++ xc/extras/Mesa/configs/irix6-o32-static Wed Dec 15 01:50:55 2004
+@@ -15,7 +15,7 @@
+
+ LIB_DIR = $(TOP)/lib32
+
+-APP_LIB_DEPS = -L$(LIB_DIR) -32 -glut -lGLU -lGL -lX11 -lXext -lXmu -lXi -lm
++APP_LIB_DEPS = -L$(LIB_DIR) -32 -glut -l$(GLU_LIB) -l$(GL_LIB) -lX11 -lXext -lXmu -lXi -lm
+
+ GL_LIB_NAME = libGL.a
+ GLU_LIB_NAME = libGLU.a
+Index: xc/extras/Mesa/configs/linux
+diff -u xc/extras/Mesa/configs/linux:1.1.1.2 xc/extras/Mesa/configs/linux:1.1.1.2.4.1
+--- xc/extras/Mesa/configs/linux:1.1.1.2 Thu Jul 22 06:49:32 2004
++++ xc/extras/Mesa/configs/linux Wed Dec 15 01:50:55 2004
+@@ -14,9 +14,7 @@
+
+
+ # Library/program dependencies
++# Need to have -L/usr/X11R6/lib in these:
+ GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
+-OSMESA_LIB_DEPS = -L$(LIB_DIR) -lGL
+-GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm
+-GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
+-GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib -lXt -lX11
+-APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lm
++GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
++GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11
+Index: xc/extras/Mesa/configs/linux-alpha
+diff -u xc/extras/Mesa/configs/linux-alpha:1.1.1.1 xc/extras/Mesa/configs/linux-alpha:1.1.1.1.4.1
+--- xc/extras/Mesa/configs/linux-alpha:1.1.1.1 Wed Jun 16 09:16:21 2004
++++ xc/extras/Mesa/configs/linux-alpha Wed Dec 15 01:50:55 2004
+@@ -12,8 +12,7 @@
+ GLUT_CFLAGS = -fexceptions
+
+ GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
+-GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm
+-GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
+-GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib -lXt -lX11
+-APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lm
++GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
++GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11
++APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm
+
+Index: xc/extras/Mesa/configs/linux-alpha-static
+diff -u xc/extras/Mesa/configs/linux-alpha-static:1.1.1.1 xc/extras/Mesa/configs/linux-alpha-static:1.1.1.1.4.1
+--- xc/extras/Mesa/configs/linux-alpha-static:1.1.1.1 Wed Jun 16 09:16:21 2004
++++ xc/extras/Mesa/configs/linux-alpha-static Wed Dec 15 01:50:55 2004
+@@ -22,7 +22,6 @@
+
+
+ GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
+-GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm
+-GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
+-GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib -lXt -lX11
+-APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lm -L/usr/X11R6/lib -lX11 -lm
++GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
++GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11
++APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm -L/usr/X11R6/lib -lX11 -lm
+Index: xc/extras/Mesa/configs/linux-debug
+diff -u xc/extras/Mesa/configs/linux-debug:1.1.1.2 xc/extras/Mesa/configs/linux-debug:1.1.1.2.4.1
+--- xc/extras/Mesa/configs/linux-debug:1.1.1.2 Thu Jul 22 06:49:32 2004
++++ xc/extras/Mesa/configs/linux-debug Wed Dec 15 01:50:55 2004
+@@ -14,9 +14,7 @@
+
+ GLUT_CFLAGS = -fexceptions
+
++# Need to have -L/usr/X11R6/lib in these:
+ GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
+-OSMESA_LIB_DEPS = -L$(LIB_DIR) -lGL
+-GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm
+-GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
+-GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -lXt -L/usr/X11R6/lib -lX11
+-APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lm
++GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
++GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -lXt -L/usr/X11R6/lib -lX11
+Index: xc/extras/Mesa/configs/linux-dri
+diff -u xc/extras/Mesa/configs/linux-dri:1.1.1.2 xc/extras/Mesa/configs/linux-dri:1.1.1.2.4.1
+--- xc/extras/Mesa/configs/linux-dri:1.1.1.2 Thu Jul 22 06:49:32 2004
++++ xc/extras/Mesa/configs/linux-dri Wed Dec 15 01:50:55 2004
+@@ -9,19 +9,26 @@
+ CC = gcc
+ CXX = g++
+
+-CFLAGS = -DDRI_NEW_INTERFACE_ONLY -Wmissing-prototypes -g -std=c99 -Wundef -fPIC -ffast-math -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE -DPTHREADS -D_GNU_SOURCE -I/usr/X11R6/include -I/usr/X11R6/include/X11/extensions
+-
+-CXXFLAGS = -DDRI_NEW_INTERFACE_ONLY -Wall -g -ansi -pedantic -fPIC -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE
+-
++WARN_FLAGS = -Wall
++OPT_FLAGS = -O
++SOURCE_FLAGS = -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE \
++ -D_BSD_SOURCE -D_GNU_SOURCE
++PIC_FLAGS = -fPIC
++
++CFLAGS = -DDRI_NEW_INTERFACE_ONLY $(WARN_FLAGS) -g $(OPT_FLAGS) $(ASM_FLAGS) \
++ -std=c99 $(PIC_FLAGS) -ffast-math $(SOURCE_FLAGS) -DPTHREADS \
++ -I/usr/X11R6/include -I/usr/X11R6/include/X11/extensions
+
++CXXFLAGS = -DDRI_NEW_INTERFACE_ONLY $(WARN_FLAGS) -g $(OPT_FLAGS) -fPIC \
++ $(SOURCE_FLAGS)
+
+ ASM_SOURCES =
+
+ # Library/program dependencies
+ GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread -lexpat -ldl
+
+-GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
+-GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib -lXt -lX11
++GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
++GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11
+
+
+ # Directories
+@@ -30,8 +37,8 @@
+ PROGRAM_DIRS =
+ WINDOW_SYSTEM=dri
+
+-# Savage is missing. ffb, gamma, and sis are also missing because they have
+-# not be converted to use the new interface.
+-#
+-DRI_DIRS = dri_client i810 i830 i915 mach64 mga r128 r200 radeon tdfx unichrome
++# ffb and gamma are missing because they have not been converted to use the new
++# interface.
++DRI_DIRS = dri_client i810 i830 i915 mach64 mga r128 r200 radeon tdfx \
++ unichrome savage sis
+
+Index: xc/extras/Mesa/configs/linux-dri-x86
+diff -u xc/extras/Mesa/configs/linux-dri-x86:1.1.1.2 xc/extras/Mesa/configs/linux-dri-x86:1.1.1.2.4.1
+--- xc/extras/Mesa/configs/linux-dri-x86:1.1.1.2 Thu Jul 22 06:49:32 2004
++++ xc/extras/Mesa/configs/linux-dri-x86 Wed Dec 15 01:50:55 2004
+@@ -1,35 +1,12 @@
+ # -*-makefile-*-
+ # Configuration for linux-dri: Linux DRI hardware drivers for XFree86 & others
+
+-include $(TOP)/configs/default
++include $(TOP)/configs/linux-dri
+
+ CONFIG_NAME = linux-dri-x86
+
+-# Compiler and flags
+-CC = gcc
+-CXX = g++
+-
+-CFLAGS = -DDRI_NEW_INTERFACE_ONLY -Wmissing-prototypes -g -std=c99 -Wundef -fPIC -ffast-math -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM -DPTHREADS -D_GNU_SOURCE -I/usr/X11R6/include -I/usr/X11R6/include/X11/extensions
+-
+-CXXFLAGS = -DDRI_NEW_INTERFACE_ONLY -Wall -g -ansi -pedantic -fPIC -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE
++# Unnecessary on x86, generally.
++PIC_FLAGS =
+
++ASM_FLAGS = -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM
+ ASM_SOURCES = $(X86_SOURCES)
+-
+-# Library/program dependencies
+-GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread -lexpat -ldl
+-
+-GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
+-GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib -lXt -lX11
+-
+-
+-# Directories
+-SRC_DIRS = mesa glu glut/glx glw
+-DRIVER_DIRS = dri
+-PROGRAM_DIRS =
+-WINDOW_SYSTEM=dri
+-
+-# Savage is missing. ffb, gamma, and sis are also missing because they have
+-# not be converted to use the new interface.
+-#
+-DRI_DIRS = dri_client i810 i830 i915 mach64 mga r128 r200 radeon tdfx unichrome
+-
+Index: xc/extras/Mesa/configs/linux-dri-x86-64
+diff -u xc/extras/Mesa/configs/linux-dri-x86-64:1.1.1.2 xc/extras/Mesa/configs/linux-dri-x86-64:1.1.1.2.4.1
+--- xc/extras/Mesa/configs/linux-dri-x86-64:1.1.1.2 Thu Jul 22 06:49:32 2004
++++ xc/extras/Mesa/configs/linux-dri-x86-64 Wed Dec 15 01:50:55 2004
+@@ -19,8 +19,8 @@
+
+ # Library/program dependencies
+ GL_LIB_DEPS = -L/usr/X11R6/lib64 -lX11 -lXext -lm -lpthread -lexpat -ldl
+-GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib64 -lX11 -lXmu -lXt -lXi -lm
+-GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib64 -lXt -lX11
++GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib64 -lX11 -lXmu -lXt -lXi -lm
++GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib64 -lXt -lX11
+
+ # Directories
+ SRC_DIRS = mesa glu glut/glx glw
+@@ -28,9 +28,9 @@
+ PROGRAM_DIRS =
+ WINDOW_SYSTEM=dri
+
+-# Savage is missing. ffb, gamma, and sis are also missing because they have
++# ffb, gamma, and sis are missing because they have
+ # not be converted to use the new interface. Do i810 & i830 really
+ # need to be included here?
+ #
+-DRI_DIRS = dri_client i810 i830 i915 mach64 mga r128 r200 radeon tdfx unichrome
++DRI_DIRS = dri_client i810 i830 i915 mach64 mga r128 r200 radeon tdfx unichrome savage
+
+Index: xc/extras/Mesa/configs/linux-glide
+diff -u xc/extras/Mesa/configs/linux-glide:1.1.1.2 xc/extras/Mesa/configs/linux-glide:1.1.1.2.4.1
+--- xc/extras/Mesa/configs/linux-glide:1.1.1.2 Thu Jul 22 06:49:32 2004
++++ xc/extras/Mesa/configs/linux-glide Wed Dec 15 01:50:55 2004
+@@ -15,8 +15,6 @@
+
+ # Library/program dependencies
+ GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -L/usr/local/glide/lib -lglide3x -lm -lpthread
+-OSMESA_LIB_DEPS = -L$(LIB_DIR) -lGL
+-GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm
+-GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
+-GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib -lXt -lX11
+-APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -L/usr/local/glide/lib -lglide3x -lm
++GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
++GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11
++APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/local/glide/lib -lglide3x -lm
+Index: xc/extras/Mesa/configs/linux-icc
+diff -u xc/extras/Mesa/configs/linux-icc:1.1.1.2 xc/extras/Mesa/configs/linux-icc:1.1.1.2.4.1
+--- xc/extras/Mesa/configs/linux-icc:1.1.1.2 Thu Jul 22 06:49:32 2004
++++ xc/extras/Mesa/configs/linux-icc Wed Dec 15 01:50:55 2004
+@@ -13,9 +13,8 @@
+ MKLIB_OPTIONS = -arch icc
+
+ GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
+-GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm
+-GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
+-APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lm
++GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
++APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm
+
+ ASM_SOURCES = $(X86_SOURCES) $(X86_API)
+
+Index: xc/extras/Mesa/configs/linux-icc-static
+diff -u xc/extras/Mesa/configs/linux-icc-static:1.1.1.2 xc/extras/Mesa/configs/linux-icc-static:1.1.1.2.4.1
+--- xc/extras/Mesa/configs/linux-icc-static:1.1.1.2 Thu Jul 22 06:49:32 2004
++++ xc/extras/Mesa/configs/linux-icc-static Wed Dec 15 01:50:55 2004
+@@ -20,9 +20,8 @@
+ OSMESA_LIB_NAME = libOSMesa.a
+
+ GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
+-GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm
+-GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
+-APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
++GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
++APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
+ MKLIB_OPTIONS = -arch icc
+
+ ASM_SOURCES = $(X86_SOURCES) $(X86_API)
+Index: xc/extras/Mesa/configs/linux-ppc
+diff -u xc/extras/Mesa/configs/linux-ppc:1.1.1.1 xc/extras/Mesa/configs/linux-ppc:1.1.1.1.4.1
+--- xc/extras/Mesa/configs/linux-ppc:1.1.1.1 Wed Jun 16 09:16:22 2004
++++ xc/extras/Mesa/configs/linux-ppc Wed Dec 15 01:50:55 2004
+@@ -12,8 +12,7 @@
+ GLUT_CFLAGS = -fexceptions
+
+ GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
+-GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm
+-GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
+-GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib -lXt -lX11
+-APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lm
++GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
++GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11
++APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm
+
+Index: xc/extras/Mesa/configs/linux-ppc-static
+diff -u xc/extras/Mesa/configs/linux-ppc-static:1.1.1.1 xc/extras/Mesa/configs/linux-ppc-static:1.1.1.1.4.1
+--- xc/extras/Mesa/configs/linux-ppc-static:1.1.1.1 Wed Jun 16 09:16:22 2004
++++ xc/extras/Mesa/configs/linux-ppc-static Wed Dec 15 01:50:55 2004
+@@ -21,7 +21,6 @@
+
+
+ GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
+-GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm
+-GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
+-GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib -lXt -lX11
+-APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lm
++GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
++GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11
++APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lm
+Index: xc/extras/Mesa/configs/linux-solo
+diff -u xc/extras/Mesa/configs/linux-solo:1.1.1.2 xc/extras/Mesa/configs/linux-solo:1.1.1.2.4.1
+--- xc/extras/Mesa/configs/linux-solo:1.1.1.2 Thu Jul 22 06:49:32 2004
++++ xc/extras/Mesa/configs/linux-solo Wed Dec 15 01:50:55 2004
+@@ -19,9 +19,9 @@
+
+ # Library/program dependencies
+ GL_LIB_DEPS = -lm -lpthread -lexpat -ldl
+-GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm
+-GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -lm
+-APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lm -lpthread
++GLU_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -lm
++GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -lm
++APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm -lpthread
+
+ # Directories
+ SRC_DIRS = mesa glx glu glut/mini
+Index: xc/extras/Mesa/configs/linux-solo-ia64
+diff -u xc/extras/Mesa/configs/linux-solo-ia64:1.1.1.2 xc/extras/Mesa/configs/linux-solo-ia64:1.1.1.2.2.1
+--- xc/extras/Mesa/configs/linux-solo-ia64:1.1.1.2 Thu Aug 12 23:04:47 2004
++++ xc/extras/Mesa/configs/linux-solo-ia64 Wed Dec 15 01:50:55 2004
+@@ -17,9 +17,8 @@
+
+ # Library/program dependencies
+ GL_LIB_DEPS = -lm -lpthread -lexpat -ldl
+-GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm
+-GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -lm
+-APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lm -lpthread
++GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -lm
++APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm -lpthread
+
+ # Directories
+ SRC_DIRS = mesa glx glu glut/mini
+Index: xc/extras/Mesa/configs/linux-solo-x86
+diff -u /dev/null xc/extras/Mesa/configs/linux-solo-x86:1.1.1.1.2.1
+--- /dev/null Fri Feb 11 21:35:29 2005
++++ xc/extras/Mesa/configs/linux-solo-x86 Wed Dec 15 01:50:55 2004
+@@ -0,0 +1,31 @@
++# Configuration for linux-solo: Linux DRI hardware drivers for fbdev
++
++include $(TOP)/configs/default
++
++CONFIG_NAME = linux-solo-x86
++
++# Compiler and flags
++CC = gcc
++CXX = g++
++
++CCOMMON = -DDRI_NEW_INTERFACE_ONLY -D_POSIX_SOURCE -D_SVID_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=199309L -D_GNU_SOURCE -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM -DPTHREADS
++
++CFLAGS = $(CCOMMON) -Wmissing-prototypes -O3 -g -std=c99 -Wundef -fPIC -ffast-math
++
++CXXFLAGS = $(CCOMMON) -Wall -O3 -ansi -pedantic -fPIC
++
++
++ASM_SOURCES = $(X86_SOURCES)
++
++# Library/program dependencies
++GL_LIB_DEPS = -lm -lpthread -lexpat -ldl
++GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -lm
++APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm -lpthread
++
++# Directories
++SRC_DIRS = mesa glx glu glut/mini
++DRIVER_DIRS = dri
++PROGRAM_DIRS = miniglx
++
++#DRI_DIRS = fb ffb gamma sis savage
++DRI_DIRS = i810 i830 i915 mach64 mga r128 r200 radeon tdfx unichrome
+Index: xc/extras/Mesa/configs/linux-sparc
+diff -u xc/extras/Mesa/configs/linux-sparc:1.1.1.1 xc/extras/Mesa/configs/linux-sparc:1.1.1.1.4.1
+--- xc/extras/Mesa/configs/linux-sparc:1.1.1.1 Wed Jun 16 09:16:22 2004
++++ xc/extras/Mesa/configs/linux-sparc Wed Dec 15 01:50:55 2004
+@@ -12,7 +12,5 @@
+ GLUT_CFLAGS = -fexceptions
+
+ GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
+-GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm
+-GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
+-GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib -lXt -lX11
+-APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lm
++GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
++GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11
+Index: xc/extras/Mesa/configs/linux-sparc5
+diff -u xc/extras/Mesa/configs/linux-sparc5:1.1.1.1 xc/extras/Mesa/configs/linux-sparc5:1.1.1.1.4.1
+--- xc/extras/Mesa/configs/linux-sparc5:1.1.1.1 Wed Jun 16 09:16:22 2004
++++ xc/extras/Mesa/configs/linux-sparc5 Wed Dec 15 01:50:55 2004
+@@ -12,8 +12,6 @@
+ GLUT_CFLAGS = -fexceptions
+
+ GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
+-GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm
+-GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
+-GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib -lXt -lX11
+-APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lm
++GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
++GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11
+
+Index: xc/extras/Mesa/configs/linux-static
+diff -u xc/extras/Mesa/configs/linux-static:1.1.1.1 xc/extras/Mesa/configs/linux-static:1.1.1.1.4.1
+--- xc/extras/Mesa/configs/linux-static:1.1.1.1 Wed Jun 16 09:16:22 2004
++++ xc/extras/Mesa/configs/linux-static Wed Dec 15 01:50:55 2004
+@@ -27,4 +27,4 @@
+ GLU_LIB_DEPS =
+ GLUT_LIB_DEPS =
+ GLW_LIB_DEPS =
+-APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lpthread -lm -lstdc++
++APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lpthread -lm -lstdc++
+Index: xc/extras/Mesa/configs/linux-tcc
+diff -u xc/extras/Mesa/configs/linux-tcc:1.1.1.2 xc/extras/Mesa/configs/linux-tcc:1.1.1.2.4.1
+--- xc/extras/Mesa/configs/linux-tcc:1.1.1.2 Thu Jul 22 06:49:32 2004
++++ xc/extras/Mesa/configs/linux-tcc Wed Dec 15 01:50:55 2004
+@@ -17,9 +17,6 @@
+ GLUT_CFLAGS = -fexceptions
+
+ GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread -L$(TCC_DIR) -ltcc -ldl
+-
+-OSMESA_LIB_DEPS = -L$(LIB_DIR) -lGL
+-GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm
+-GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
+-GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -lXt -L/usr/X11R6/lib -lX11
+-APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lm
++GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
++GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -lXt -L/usr/X11R6/lib -lX11
++APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm
+Index: xc/extras/Mesa/configs/linux-ultrasparc
+diff -u xc/extras/Mesa/configs/linux-ultrasparc:1.1.1.1 xc/extras/Mesa/configs/linux-ultrasparc:1.1.1.1.4.1
+--- xc/extras/Mesa/configs/linux-ultrasparc:1.1.1.1 Wed Jun 16 09:16:22 2004
++++ xc/extras/Mesa/configs/linux-ultrasparc Wed Dec 15 01:50:55 2004
+@@ -12,7 +12,6 @@
+ GLUT_CFLAGS = -fexceptions
+
+ GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
+-GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm
+-GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
+-GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib -lXt -lX11
+-APP_LIB_DEPS = -L$(LIB_DIR)-lglut -lGLU -lGL -lm
++GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
++GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11
++APP_LIB_DEPS = -L$(LIB_DIR)-l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm
+Index: xc/extras/Mesa/configs/linux-x86
+diff -u xc/extras/Mesa/configs/linux-x86:1.1.1.2 xc/extras/Mesa/configs/linux-x86:1.1.1.2.4.1
+--- xc/extras/Mesa/configs/linux-x86:1.1.1.2 Thu Jul 22 06:49:32 2004
++++ xc/extras/Mesa/configs/linux-x86 Wed Dec 15 01:50:55 2004
+@@ -19,8 +19,6 @@
+
+ # Library/program dependencies
+ GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
+-OSMESA_LIB_DEPS = -L$(LIB_DIR) -lGL
+-GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm
+-GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
+-GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib -lXt -lX11
+-APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lm
++GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
++GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11
++APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm
+Index: xc/extras/Mesa/configs/linux-x86-64
+diff -u xc/extras/Mesa/configs/linux-x86-64:1.1.1.2 xc/extras/Mesa/configs/linux-x86-64:1.1.1.2.4.1
+--- xc/extras/Mesa/configs/linux-x86-64:1.1.1.2 Thu Jul 22 06:49:32 2004
++++ xc/extras/Mesa/configs/linux-x86-64 Wed Dec 15 01:50:55 2004
+@@ -23,8 +23,6 @@
+
+ # Library/program dependencies
+ GL_LIB_DEPS = -L/usr/X11R6/lib64 -lX11 -lXext -lm -lpthread
+-OSMESA_LIB_DEPS = -L$(LIB_DIR) -lGL
+-GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm
+-GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib64 -lX11 -lXmu -lXt -lXi -lm
+-GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib64 -lXt -lX11
+-APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lm
++GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib64 -lX11 -lXmu -lXt -lXi -lm
++GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib64 -lXt -lX11
++APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm
+Index: xc/extras/Mesa/configs/linux-x86-64-static
+diff -u xc/extras/Mesa/configs/linux-x86-64-static:1.1.1.1 xc/extras/Mesa/configs/linux-x86-64-static:1.1.1.1.4.1
+--- xc/extras/Mesa/configs/linux-x86-64-static:1.1.1.1 Wed Jun 16 09:16:22 2004
++++ xc/extras/Mesa/configs/linux-x86-64-static Wed Dec 15 01:50:55 2004
+@@ -37,4 +37,4 @@
+ GLU_LIB_DEPS =
+ GLUT_LIB_DEPS =
+ GLW_LIB_DEPS =
+-APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -L/usr/X11R6/lib64 -lX11 -lXext -lXmu -lXt -lXi -lpthread -lm -lstdc++
++APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib64 -lX11 -lXext -lXmu -lXt -lXi -lpthread -lm -lstdc++
+Index: xc/extras/Mesa/configs/linux-x86-glide
+diff -u xc/extras/Mesa/configs/linux-x86-glide:1.1.1.2 xc/extras/Mesa/configs/linux-x86-glide:1.1.1.2.4.1
+--- xc/extras/Mesa/configs/linux-x86-glide:1.1.1.2 Thu Jul 22 06:49:32 2004
++++ xc/extras/Mesa/configs/linux-x86-glide Wed Dec 15 01:50:55 2004
+@@ -19,8 +19,6 @@
+
+ # Library/program dependencies
+ GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -L/usr/local/glide/lib -lglide3x -lm -lpthread
+-OSMESA_LIB_DEPS = -L$(LIB_DIR) -lGL
+-GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm
+-GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
+-GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib -lXt -lX11
+-APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -L/usr/local/glide/lib -lglide3x -lm
++GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm
++GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11
++APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/local/glide/lib -lglide3x -lm
+Index: xc/extras/Mesa/configs/linux-x86-static
+diff -u xc/extras/Mesa/configs/linux-x86-static:1.1.1.2 xc/extras/Mesa/configs/linux-x86-static:1.1.1.2.4.1
+--- xc/extras/Mesa/configs/linux-x86-static:1.1.1.2 Thu Jul 22 06:49:32 2004
++++ xc/extras/Mesa/configs/linux-x86-static Wed Dec 15 01:50:55 2004
+@@ -34,4 +34,4 @@
+ GLU_LIB_DEPS =
+ GLUT_LIB_DEPS =
+ GLW_LIB_DEPS =
+-APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lpthread -lm -lstdc++
++APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lpthread -lm -lstdc++
+Index: xc/extras/Mesa/configs/openbsd
+diff -u xc/extras/Mesa/configs/openbsd:1.1.1.1 xc/extras/Mesa/configs/openbsd:1.1.1.1.4.1
+--- xc/extras/Mesa/configs/openbsd:1.1.1.1 Wed Jun 16 09:16:22 2004
++++ xc/extras/Mesa/configs/openbsd Wed Dec 15 01:50:56 2004
+@@ -12,7 +12,7 @@
+
+ GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm
+ OSMESA_LIB_DEPS = -lm
+-GLU_LIB_DEPS = -L$(LIB_DIR) -lGL
+-GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lm
+-APP_LIB_DEPS = -L$(LIB_DIR) -L/usr/X11R6/lib -lglut -lGLU -lGL -lm
++GLU_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB)
++GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lm
++APP_LIB_DEPS = -L$(LIB_DIR) -L/usr/X11R6/lib -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm
+
+Index: xc/extras/Mesa/configs/osf1
+diff -u xc/extras/Mesa/configs/osf1:1.1.1.1 xc/extras/Mesa/configs/osf1:1.1.1.1.4.1
+--- xc/extras/Mesa/configs/osf1:1.1.1.1 Wed Jun 16 09:16:22 2004
++++ xc/extras/Mesa/configs/osf1 Wed Dec 15 01:50:56 2004
+@@ -11,8 +11,6 @@
+ CXXFLAGS = -O2 -std ansi -ieee
+
+ GL_LIB_DEPS = -lX11 -lXext -lm -lpthread
+-GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm
+-GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -lX11 -lXmu -lXt -lXi -lm
+-APP_LIB_DEPS = -L$(LIB_DIR) -lX11 -lXext -lXmu -lXi -lm
+-
+-
++GLU_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -lm
++GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -lX11 -lXmu -lXt -lXi -lm
++APP_LIB_DEPS = -L$(LIB_DIR) -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lX11 -lXext -lXmu -lXi -lm
+Index: xc/extras/Mesa/configs/solaris-x86-gcc
+diff -u xc/extras/Mesa/configs/solaris-x86-gcc:1.1.1.1 xc/extras/Mesa/configs/solaris-x86-gcc:1.1.1.1.4.1
+--- xc/extras/Mesa/configs/solaris-x86-gcc:1.1.1.1 Wed Jun 16 09:16:22 2004
++++ xc/extras/Mesa/configs/solaris-x86-gcc Wed Dec 15 01:50:56 2004
+@@ -13,9 +13,9 @@
+ MKLIB_OPTIONS = -static
+
+ GL_LIB_DEPS = -L/usr/openwin/lib -lX11 -lXext -lm -lpthread
+-GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm
+-GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/openwin/lib -lX11 -lXmu -lXt -lXi -lm
+-APP_LIB_DEPS = -L$(LIB_DIR) -L/usr/openwin/lib -R/usr/openwin/lib -lglut -lGLU -lGL -lm
++GLU_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -lm
++GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/openwin/lib -lX11 -lXmu -lXt -lXi -lm
++APP_LIB_DEPS = -L$(LIB_DIR) -L/usr/openwin/lib -R/usr/openwin/lib -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm
+
+ GL_LIB_NAME = libGL.a
+ GLU_LIB_NAME = libGLU.a
+Index: xc/extras/Mesa/configs/sunos4-static
+diff -u xc/extras/Mesa/configs/sunos4-static:1.1.1.1 xc/extras/Mesa/configs/sunos4-static:1.1.1.1.4.1
+--- xc/extras/Mesa/configs/sunos4-static:1.1.1.1 Wed Jun 16 09:16:22 2004
++++ xc/extras/Mesa/configs/sunos4-static Wed Dec 15 01:50:56 2004
+@@ -22,4 +22,4 @@
+ GLU_LIB_DEPS =
+ GLUT_LIB_DEPS =
+ GLW_LIB_DEPS =
+-APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lpthread -lm
++APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lpthread -lm
+Index: xc/extras/Mesa/configs/sunos5
+diff -u xc/extras/Mesa/configs/sunos5:1.1.1.1 xc/extras/Mesa/configs/sunos5:1.1.1.1.4.1
+--- xc/extras/Mesa/configs/sunos5:1.1.1.1 Wed Jun 16 09:16:22 2004
++++ xc/extras/Mesa/configs/sunos5 Wed Dec 15 01:50:56 2004
+@@ -12,7 +12,7 @@
+ GLUT_CFLAGS = -DSOLARIS_2_4_BUG
+
+ GL_LIB_DEPS = -L/usr/openwin/lib -L/usr/dt/lib -lX11 -lXext -lXmu -lXi -lm
+-GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm
+-GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -lm
+-GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/openwin/lib -lXt -lX11
+-APP_LIB_DEPS = -L$(LIB_DIR) -lCrun -lX11 -lglut -lGLU -lGL -lm
++GLU_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -lm
++GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -lm
++GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/openwin/lib -lXt -lX11
++APP_LIB_DEPS = -L$(LIB_DIR) -lCrun -lX11 -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm
+Index: xc/extras/Mesa/configs/sunos5-gcc
+diff -u xc/extras/Mesa/configs/sunos5-gcc:1.1.1.2 xc/extras/Mesa/configs/sunos5-gcc:1.1.1.2.4.1
+--- xc/extras/Mesa/configs/sunos5-gcc:1.1.1.2 Thu Jul 22 06:49:32 2004
++++ xc/extras/Mesa/configs/sunos5-gcc Wed Dec 15 01:50:56 2004
+@@ -14,8 +14,8 @@
+ GLUT_CFLAGS = -fexceptions -DSOLARIS_2_4_BUG
+
+ GL_LIB_DEPS = -L/usr/openwin/lib -lX11 -lXext -lXmu -lXi -lm
+-GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm
+-GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -lm
+-GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/openwin/lib -lXt -lX11
+-APP_LIB_DEPS = -L$(LIB_DIR) -lX11 -lglut -lGLU -lGL -lm
++GLU_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -lm
++GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -lm
++GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/openwin/lib -lXt -lX11
++APP_LIB_DEPS = -L$(LIB_DIR) -lX11 -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm
+
+Index: xc/extras/Mesa/configs/sunos5-smp
+diff -u xc/extras/Mesa/configs/sunos5-smp:1.1.1.1 xc/extras/Mesa/configs/sunos5-smp:1.1.1.1.4.1
+--- xc/extras/Mesa/configs/sunos5-smp:1.1.1.1 Wed Jun 16 09:16:22 2004
++++ xc/extras/Mesa/configs/sunos5-smp Wed Dec 15 01:50:56 2004
+@@ -12,8 +12,8 @@
+ GLUT_CFLAGS = -DSOLARIS_2_4_BUG
+
+ GL_LIB_DEPS = -L/usr/openwin/lib -lX11 -lXext -lXmu -lXi -lm
+-GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm
+-GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -lm
+-GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/openwin/lib -lXt -lX11
+-APP_LIB_DEPS = -L$(LIB_DIR) -lX11 -lglut -lGLU -lGL -lm -lCrun
++GLU_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -lm
++GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -lm
++GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/openwin/lib -lXt -lX11
++APP_LIB_DEPS = -L$(LIB_DIR) -lX11 -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm -lCrun
+
+Index: xc/extras/Mesa/configs/ultrix-gcc
+diff -u xc/extras/Mesa/configs/ultrix-gcc:1.1.1.1 xc/extras/Mesa/configs/ultrix-gcc:1.1.1.1.4.1
+--- xc/extras/Mesa/configs/ultrix-gcc:1.1.1.1 Wed Jun 16 09:16:22 2004
++++ xc/extras/Mesa/configs/ultrix-gcc Wed Dec 15 01:50:56 2004
+@@ -18,4 +18,4 @@
+ GLW_LIB_NAME = libGLw.a
+ OSMESA_LIB_NAME = libOSMesa.a
+
+-APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lXmu -lX11 -lXi -lm
++APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lXmu -lX11 -lXi -lm
+Index: xc/extras/Mesa/docs/README.3DFX
+diff -u xc/extras/Mesa/docs/README.3DFX:1.1.1.4 xc/extras/Mesa/docs/README.3DFX:1.1.1.4.2.1
+--- xc/extras/Mesa/docs/README.3DFX:1.1.1.4 Thu Aug 12 23:43:26 2004
++++ xc/extras/Mesa/docs/README.3DFX Wed Dec 15 01:50:56 2004
+@@ -3,13 +3,13 @@
+
+
+
+-Mesa-6.1 release notes:
++Mesa-6.2 release notes:
+ -----------------------
+
+ 1) Glide2 support has been ceased; please visit the Glide SourceForge and
+ help us improve Glide3.
+ 2) The current release is a WIP; among other things, the Linux build works
+- only to some extent. Voodoo Rush not fully supported. Any help will be
++ only to some extent. Voodoo Rush not fully tested. Any help will be
+ appreciated.
+ 3) Although Mesa is designed to work with any Glide3, it would benefit from
+ interacting with newer Glide libraries, which can export functions like:
+@@ -60,10 +60,13 @@
+ enable driver debug code
+ FX_TRAP_GLIDE
+ enable Glide trace code
++FX_PACKEDCOLOR
++ use packed color in vertex structure
+ FX_TC_NAPALM
+ map GL_COMPRESSED_RGB[A] to FXT1. This will have effect on Napalm
+ only (can coexist with FX_TC_NCC, but has higher priority)
+ FX_TC_NCC
++ experimental
+ map GL_COMPRESSED_RGB[A] to NCC. This will have effect on any 3dfx
+ HW (can coexist with FX_TC_NAPALM, but has lesser priority)
+ FX_COMPRESS_S3TC_AS_FXT1_HACK
+@@ -93,7 +96,7 @@
+
+ FX_GLIDE_NUM_TMU
+ OS: all
+- HW: dual-TMU cards (some Voodoo1, Voodoo2, Avenger, Napalm)
++ HW: dual-TMU cards (Voodoo2, Avenger, Napalm)
+ Desc: force single-TMU
+ Note: (*)
+ Value: "1"
+@@ -141,6 +144,11 @@
+ HW: all
+ Desc: verbose to stderr
+ Value: any; special value "r" to redirect stderr to MESA.LOG
++MESA_FX_NOSNAP
++ OS: all
++ HW: Voodoo1, Rush, Banshee
++ Desc: do not snap vertices inside Mesa
++ Note: to be used with Glide3x that snaps vertices itself
+ MESA_FX_POINTCAST
+ OS: all
+ HW: dual-TMU cards (some Voodoo1, Voodoo2, Avenger, Napalm)
+Index: xc/extras/Mesa/docs/README.BEOS
+diff -u xc/extras/Mesa/docs/README.BEOS:1.1.1.4 xc/extras/Mesa/docs/README.BEOS:1.1.1.4.2.1
+--- xc/extras/Mesa/docs/README.BEOS:1.1.1.4 Sat Aug 28 04:26:59 2004
++++ xc/extras/Mesa/docs/README.BEOS Wed Dec 15 01:50:56 2004
+@@ -32,12 +32,22 @@
+ - gcc version 2.95.3 for BeOS
+ You can find it here: http://www.bebits.com/app/2157
+
+-To build Mesa-powered BeOS libGL.so version, type this at root folder:
++To build Mesa-powered BeOS libGL.so version, open an Terminal window,
++move to Mesa root folder and type this command:
+
+ $ make beos
+
++Note that the "beos" argument is only needed the first time to setup build config.
++Next times, typing "make" will be enough.
++
+ When it finishes the Mesa based libGL.so library for
+-BeOS will be in the lib/ directory.
++BeOS will be in the lib/ directory, along libglut.so library.
++Several demo/test programs should have been build too under progs/* folders.
++If it stop when building one of the progs/* programs, you may want to ignore it
++and force make to move on next target by adding the -k make option:
++
++$ cd progs
++$ make -k
+
+ To install it as Be's default libGL.so replacement, put it in your
+ /boot/home/config/lib/ directory. All your GL/GLUT apps will use
+@@ -50,26 +60,27 @@
+
+ To build a DEBUG version, type instead this :
+
+-$ DEBUG=1 make beos
++$ DEBUG=1 make
+
+
+ * Example Programs
+
+-Look in the progs/beos/ directory for one or two BGLView demo
+-programs. They should have been compiled along with the Mesa
+-library.
++Look under progs/beos/ for some BGLView-based programs.
++You should find under progs/samples and progs/redbook directories GLUT-based programs too.
++They all should have been compiled along with the Mesa library.
+
+
+ * GLUT
+
+-A beta version of GLUT 3.7 port for BeOS can be found at
++A beta version of GLUT 3.7 port for BeOS, made by Jake Hamby, can be found at
+ http://anobject.com/jehamby/Code/Glut-3.7-x86.zip.
++This is the version currently included in Mesa source code, and
++build in lib/libglut.so.
+
+-There's is a 3.5 version in src/glut/beos/, too.
+-The original distribution can be obtained from
+-http://home.beoscentral.com/jehamby/Glut-3.5-x86.zip
++A previous 3.5 version of this GLUT BeOS port used to be available at
++http://home.beoscentral.com/jehamby/Glut-3.5-x86.zip.
+
+-They are special version of GLUT adapted for the BeOS. I don't
++They're special versions of GLUT for the BeOS platform. I don't
+ believe Mark Kilgard's normal GLUT distribution includes BeOS
+ support.
+
+@@ -87,8 +98,6 @@
+
+ * Work Left To Do
+
+-- Switch to SGI GLU implementation..
+-- Add to build the BeOS GLUT port. Update it to latest known (3.7 ?)
+ - BDirectWindow single buffering support is not implemented yet.
+ - Color index mode is not implemented yet.
+ - Reading pixels from the front buffer not implemented yet.
+@@ -99,7 +108,8 @@
+
+ * Other contributors to this BeOS port
+
+-Marcin Konicki ahwayakchih <at> neoni <dot> net
++Jake Hamby jhamby <at> anobject <dot> com
++Marcin Konicki ahwayakchih <at> neoni <dot> net
+ Francois Revol revol <at> free <dot> fr
+
+
+@@ -121,4 +131,4 @@
+
+
+ ----------------------------------------------------------------------
+-$Id$
++$Id$
+Index: xc/extras/Mesa/docs/README.WIN32
+diff -u xc/extras/Mesa/docs/README.WIN32:1.1.1.3 xc/extras/Mesa/docs/README.WIN32:1.1.1.3.2.1
+--- xc/extras/Mesa/docs/README.WIN32:1.1.1.3 Thu Aug 12 23:43:27 2004
++++ xc/extras/Mesa/docs/README.WIN32 Wed Dec 15 01:50:56 2004
+@@ -1,6 +1,6 @@
+ File: docs/README.WIN32
+
+-Last updated: Sep 18, 2003 - Karl Schultz - kschultz@users.sourceforge.net
++Last updated: Oct 01, 2004 - Karl Schultz - kschultz@users.sourceforge.net
+
+ Quick Start
+
+@@ -14,16 +14,36 @@
+ workspaces and projects. Makefiles are no longer shipped or supported, but
+ can be generated from the projects using Visual Studio.
+
++The workspace and project files were created with Visual Studio 6, so that
++they can be used with VS6 and so that they can also be imported into VS 7.
++
+ Details and Notes
+
+ - To build the Mesa libraries, open the Mesa.dsw workspace file
+- in the top directory. You can build each project one-by-one,
+- or build the glut project to build everything except osmesa,
+- which needs to be built separately. The build process will
+- create a lib directory in the top directory and will put the
+- following files there:
+- OPENGL32.LIB, GLU32.LIB, GLUT32.LIB, OSMESA32.LIB
+- OPENGL32.DLL, GLU32.DLL, GLUT32.DLL, OSMESA32.DLL
++ in the top directory. You will need to build at least one
++ driver. Currently, only the gdi and osmesa drivers are available.
++ Select one or the other as the active project and build it.
++ If you want glu, select the glu project as active and build that as well.
++
++- Glut is no longer in the Mesa.dsw workspace. It is now built in
++ the demo workspace (see below).
++
++- The build process will create a lib directory in the top directory
++ and will put the following files there as you build them:
++ OPENGL32.LIB, GLU32.LIB, OSMESA32.LIB
++ OPENGL32.DLL, GLU32.DLL, OSMESA32.DLL
++
++- Some users have reported problems building glu with VS7 after importing
++ and converting the VS6 project files. The problem is caused by a custom
++ build step that was put in place to work around a problem with VS6 not
++ recognizing .cc files as C++ source files. It appears that VS7 can be
++ configured to recognize .cc files as C++ files and so it compiles these
++ glu files with the default settings, and does not use settings that are
++ required to compile the files correctly. The easiest way to solve the
++ problem is to remove the .cc files from the glu project. This does not
++ delete the files, but removes them from the project so that VS does not
++ try to compile them at all. This allows the custom build step to compile
++ the files with the proper settings.
+
+ - After building, you can copy the above DLL files to a place in your PATH
+ such as $SystemRoot/SYSTEM32. If you don't like putting things in a
+@@ -51,9 +71,6 @@
+ - The si-glu sources are used to build the GLU libs. This was done
+ mainly to get the better tessellator code.
+
+-- The osmesa driver builds and should work on Windows as well as
+- any other platform.
+-
+ - The Windows driver (in src/Windows) builds and runs at least at
+ a minimal level. I modified this driver to work with the new
+ Mesa 4.0 code and driver architecture, but I did not do a great
+Index: xc/extras/Mesa/docs/RELNOTES-6.2
+diff -u /dev/null xc/extras/Mesa/docs/RELNOTES-6.2:1.1.1.1.2.1
+--- /dev/null Fri Feb 11 21:35:29 2005
++++ xc/extras/Mesa/docs/RELNOTES-6.2 Wed Dec 15 01:50:56 2004
+@@ -0,0 +1,49 @@
++
++ Mesa 6.2 release notes
++
++ October 2, 2004
++
++ PLEASE READ!!!!
++
++
++
++Introduction
++------------
++
++Mesa uses an even/odd version number scheme like the Linux kernel.
++Odd numbered versions (such as 6.1) designate new developmental releases.
++Even numbered versions (such as 6.2) designate stable releases.
++
++
++This release primarily just fixes bugs found in the Mesa 6.1 release.
++See the VERSIONS file for details.
++
++
++
++Known Issues
++------------
++
++The GL_EXT_pixel_buffer_object extension isn't fully implemented for
++functions like glPolygonStipple, glConvolutionFilter, glColorTable,
++etc. The important functions like glRead/DrawPixels, glTex[Sub]Image,
++and glBitmap work with PBOs.
++
++
++
++Driver Status
++---------------------- ---------------------
++XMesa (Xlib) implements OpenGL 1.5
++OSMesa (off-screen) implements OpenGL 1.5
++Glide (3dfx Voodoo1/2) implements OpenGL 1.3
++SVGA implements OpenGL 1.3
++Wind River UGL implements OpenGL 1.3
++Windows/Win32 implements OpenGL 1.5
++DJGPP implements OpenGL 1.5
++GGI implements OpenGL 1.3
++BeOS implements OpenGL 1.5
++Allegro needs updating
++D3D needs updating
++
++
++----------------------------------------------------------------------
++$Id$
+Index: xc/extras/Mesa/docs/RELNOTES-6.2.1
+diff -u /dev/null xc/extras/Mesa/docs/RELNOTES-6.2.1:1.1.1.1.2.1
+--- /dev/null Fri Feb 11 21:35:29 2005
++++ xc/extras/Mesa/docs/RELNOTES-6.2.1 Wed Dec 15 01:50:56 2004
+@@ -0,0 +1,50 @@
++
++ Mesa 6.2.1 release notes
++
++ December 9, 2004
++
++ PLEASE READ!!!!
++
++
++
++Introduction
++------------
++
++Mesa uses an even/odd version number scheme like the Linux kernel.
++Odd numbered versions (such as 6.1) designate new developmental releases.
++Even numbered versions (such as 6.2.x) designate stable releases.
++
++
++This release primarily just fixes bugs found in the Mesa 6.2 release.
++See the VERSIONS file for details.
++
++
++
++Known Issues
++------------
++
++The GL_EXT_pixel_buffer_object extension isn't fully implemented for
++functions like glPolygonStipple, glConvolutionFilter, glColorTable,
++etc. The important functions like glRead/DrawPixels, glTex[Sub]Image,
++and glBitmap work with PBOs. This has been fixed for Mesa 6.3.
++
++
++
++
++Driver Status
++---------------------- ---------------------
++XMesa (Xlib) implements OpenGL 1.5
++OSMesa (off-screen) implements OpenGL 1.5
++Glide (3dfx Voodoo1/2) implements OpenGL 1.3
++SVGA implements OpenGL 1.3
++Wind River UGL implements OpenGL 1.3
++Windows/Win32 implements OpenGL 1.5
++DJGPP implements OpenGL 1.5
++GGI implements OpenGL 1.3
++BeOS implements OpenGL 1.5
++Allegro needs updating
++D3D needs updating
++
++
++----------------------------------------------------------------------
++$Id$
+Index: xc/extras/Mesa/docs/VERSIONS
+diff -u xc/extras/Mesa/docs/VERSIONS:1.1.1.7 xc/extras/Mesa/docs/VERSIONS:1.1.1.7.2.1
+--- xc/extras/Mesa/docs/VERSIONS:1.1.1.7 Sat Aug 28 04:27:00 2004
++++ xc/extras/Mesa/docs/VERSIONS Wed Dec 15 01:50:56 2004
+@@ -1274,3 +1274,41 @@
+ - vertex program state references were broken
+ - fixed triangle color interpolation bug on AIX (Shane Blackett)
+ - fixed a number of minor memory leaks (bug #1002030)
++
++
++6.2 October 2, 2004
++ New:
++ - enabled GL_ARB_texture_rectangle (same as GL_NV_texture_rectangle)
++ - updated Doxygen support (Jose Fonseca)
++ Changes:
++ - some GGI driver updates (Christoph Egger, bug 1025977)
++ Bug fixes:
++ - Omit GL_ARB_texture_non_power_of_two from list of OpenGL 1.5 features
++ - fixed a few compilation issues on IRIX
++ - fixed a matrix classification bug (reported by Wes Bethel)
++ - we weren't reseting the vertex/fragment program error state
++ before parsing (Dave Reveman)
++ - adjust texcoords for sampling texture rectangles (Dave Reveman)
++ - glGet*(GL_MAX_VERTEX_ATTRIBS_ARB) wasn't implemented
++ - repeated calls to glDeleteTexture(t) could lead to a crash
++ - fixed potential ref count bugs in VBOs and vertex/fragment programs
++ - spriteblast demo didn't handle window size changes correctly
++ - glTexSubImage didn't handle pixels=NULL correctly for PBOs
++ - fixed color index mode glDrawPixels bug (Karl Schultz)
++
++
++6.2.1 December 9, 2004
++ Bug fixes:
++ - don't apply regular fog or color sum when using a fragment program
++ - glProgramEnvParameter4fARB always generated an error on
++ GL_FRAGMENT_PROGRAM_ARB (fdo bug 1645)
++ - glVertexAttrib3svNV and glVertexAttrib3svARB were broken
++ - fixed width/height mix-up in glSeparableFilter2D()
++ - fixed regression in glCopyPixels + convolution
++ - glReadPixels from a clipped front color buffer didn't always work
++ - glTexImage didn't accept GL_RED/GREEN/BLUE as the format
++ - Attempting queries/accesses of VBO 0 weren't detected as errors
++ - paletted textures failed if the palette had fewer that 256 entries
++ Changes:
++ - fixed a bunch of compiler warnings found with gcc 3.4
++ - bug reports should to go bugzilla.freedesktop.org
+Index: xc/extras/Mesa/docs/bugs.html
+diff -u xc/extras/Mesa/docs/bugs.html:1.1.1.3 xc/extras/Mesa/docs/bugs.html:1.1.1.3.2.1
+--- xc/extras/Mesa/docs/bugs.html:1.1.1.3 Thu Aug 12 23:43:28 2004
++++ xc/extras/Mesa/docs/bugs.html Wed Dec 15 01:50:56 2004
+@@ -7,9 +7,20 @@
+ <H1>Bug Database</H1>
+
+ <p>
+-Bug reports can be filed in the <a
+-href="http://sourceforge.net/bugs/?group_id=3" target="_parent">Bug
+-Database</a> on sourceforge.net. Please follow these guidelines:
++The Mesa bug database is now hosted on
++<a href="http://freedesktop.org" target="_parent">freedesktop.org</a>
++instead of SourceForge.
++</p>
++
++<p>
++To file a Mesa bug, go to
++<a href="https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa"
++target="_parent">
++Bugzilla on freedesktop.org</a>
++</p>
++
++<p>
++Please follow these bug reporting guidelines:
+ </p>
+
+ <ul>
+@@ -21,7 +32,8 @@
+ </ul>
+
+ <p>
+-Bug reports will automatically be forwarded to the Mesa developer's list.
++Bug reports will automatically be forwarded to the Mesa developer's mailing
++list.
+ </p>
+
+ <p>
+Index: xc/extras/Mesa/docs/contents.html
+diff -u xc/extras/Mesa/docs/contents.html:1.1.1.3 xc/extras/Mesa/docs/contents.html:1.1.1.3.2.1
+--- xc/extras/Mesa/docs/contents.html:1.1.1.3 Thu Aug 12 23:43:28 2004
++++ xc/extras/Mesa/docs/contents.html Wed Dec 15 01:50:56 2004
+@@ -20,7 +20,7 @@
+
+ <b>Download / Install</b>
+ <ul>
+-<li><a href="http://www.sourceforge.net/projects/mesa3d" target="_parent">Stable Release (6.0.1)</a>
++<li><a href="http://www.sourceforge.net/projects/mesa3d" target="_parent">Stable Release (6.2)</a>
+ <li><a href="download.html" target="MainFrame">Downloading/Unpacking</a>
+ <li><a href="install.html" target="MainFrame">Compilation/Installation</a>
+ <li><a href="glu.html" target="MainFrame">SGI's GLU</a>
+Index: xc/extras/Mesa/docs/cvs_branches.html
+diff -u xc/extras/Mesa/docs/cvs_branches.html:1.1.1.3 xc/extras/Mesa/docs/cvs_branches.html:1.1.1.3.2.1
+--- xc/extras/Mesa/docs/cvs_branches.html:1.1.1.3 Thu Aug 12 23:43:28 2004
++++ xc/extras/Mesa/docs/cvs_branches.html Wed Dec 15 01:50:56 2004
+@@ -15,25 +15,25 @@
+ </p>
+
+ <p>
+-Currently (Nov 2003), the trunk is the Mesa 5.1 development code
+-while the mesa_5_0_branch branch has the stable Mesa 5.0.x code.
++Currently (Oct 2004), the trunk is the Mesa 6.3 development code
++while the mesa_6_2_branch branch has the stable Mesa 6.2.x code.
+ </p>
+
+ <p>
+ Mesa releases use an even/odd numbering scheme to represent stable/development
+ releases.
+
+-For example, Mesa 5.0.x (0 is considered even) is a stable release while
+-Mesa 5.1.x is a development release.
++For example, Mesa 6.2 (0 is considered even) is a stable release while
++Mesa 6.3 is a development release.
+ </p>
+
+ <p>
+ To checkout a specific CVS branch pass <code>-r</code> and
+ the branch tag after your CVS command.
+
+-For example <code>cvs checkout -r mesa_5_0_branch Mesa</code> will
+-checkout the 5.0.x branch and <code>cvs update -r
+-mesa_5_0_branch</code> will convert your current CVS tree to the 5.0.x
++For example <code>cvs checkout -r mesa_6_2_branch Mesa</code> will
++checkout the 6.2 branch and <code>cvs update -r
++mesa_6_2_branch</code> will convert your current CVS tree to the 6.2
+ branch.
+
+ Consult <a href="http://www.durak.org/cvswebsites/doc/cvs_5.php3#SEC54"
+Index: xc/extras/Mesa/docs/intro.html
+diff -u xc/extras/Mesa/docs/intro.html:1.1.1.3 xc/extras/Mesa/docs/intro.html:1.1.1.3.2.1
+--- xc/extras/Mesa/docs/intro.html:1.1.1.3 Thu Aug 12 23:43:29 2004
++++ xc/extras/Mesa/docs/intro.html Wed Dec 15 01:50:56 2004
+@@ -156,7 +156,6 @@
+ <ul>
+ <li>GL_ARB_occlusion_query
+ <li>GL_ARB_vertex_buffer_object
+-<li>GL_ARB_texture_non_power_of_two
+ <li>GL_EXT_shadow_funcs
+ </ul>
+ <p>
+Index: xc/extras/Mesa/docs/libraries.html
+diff -u xc/extras/Mesa/docs/libraries.html:1.1.1.3 xc/extras/Mesa/docs/libraries.html:1.1.1.3.2.1
+--- xc/extras/Mesa/docs/libraries.html:1.1.1.3 Thu Aug 12 23:43:29 2004
++++ xc/extras/Mesa/docs/libraries.html Wed Dec 15 01:50:56 2004
+@@ -36,7 +36,7 @@
+ </a> - a scene-graph library
+ <li><a href="http://www.openvrml.org/" target="_parent">OpenVRML</a>
+ - a VRML parsing/display library with "lookat" - an example VRML browser
+-<li><a href="http://www.woodsoup.org/projs/plib" target="_parent">PLIB</a> - A collection of portable games libraries, including an OpenGL GUI and a simple Scene Graph API
++<li><a href="http://plib.sourceforge.net/" target="_parent">PLIB</a> - A collection of portable games libraries, including an OpenGL GUI and a simple Scene Graph API
+ <li><a href="ftp://ftp.troll.no/contest/Pryan-1.2.tar.gz" target="_parent">Pryan</a> - an OpenInventor-like toolkit
+ <li><a href="http://starship.python.net:9673/crew/da/Code/PyOpenGL" target="_parent">PyOpenGL</a> - OpenGL interface for Python
+ <li><a href="http://www.quesa.org/" target="_parent">Quesa</a> - QuickDraw3D-compatible library based on OpenGL, Mesa or Direct3D
+Index: xc/extras/Mesa/docs/news.html
+diff -u xc/extras/Mesa/docs/news.html:1.1.1.3 xc/extras/Mesa/docs/news.html:1.1.1.3.2.1
+--- xc/extras/Mesa/docs/news.html:1.1.1.3 Thu Aug 12 23:43:30 2004
++++ xc/extras/Mesa/docs/news.html Wed Dec 15 01:50:56 2004
+@@ -7,6 +7,128 @@
+ <H1>News</H1>
+
+
++<h2>December 9, 2004</h2>
++<p>
++Mesa 6.2.1 has been released.
++This is a stable release which just fixes bugs since the 6.2 release.
++</p>
++<pre>
++ Bug fixes:
++ - don't apply regular fog or color sum when using a fragment program
++ - glProgramEnvParameter4fARB always generated an error on
++ GL_FRAGMENT_PROGRAM_ARB (fdo bug 1645)
++ - glVertexAttrib3svNV and glVertexAttrib3svARB were broken
++ - fixed width/height mix-up in glSeparableFilter2D()
++ - fixed regression in glCopyPixels + convolution
++ - glReadPixels from a clipped front color buffer didn't always work
++ - glTexImage didn't accept GL_RED/GREEN/BLUE as the format
++ - Attempting queries/accesses of VBO 0 weren't detected as errors
++ - paletted textures failed if the palette had fewer that 256 entries
++ Changes:
++ - fixed a bunch of compiler warnings found with gcc 3.4
++ - bug reports should to go bugzilla.freedesktop.org
++</pre>
++<p>
++The MD5 checksums are:
++</p>
++<pre>
++tbd
++</pre>
++
++
++<h2>October 2, 2004</h2>
++<p>
++Mesa 6.2 has been released.
++This is a stable release which just fixes bugs since the 6.1 release.
++</p>
++<pre>
++ New:
++ - enabled GL_ARB_texture_rectangle (same as GL_NV_texture_rectangle)
++ - updated Doxygen support (Jose Fonseca)
++ Changes:
++ - some GGI driver updates (Christoph Egger, bug 1025977)
++ Bug fixes:
++ - Omit GL_ARB_texture_non_power_of_two from list of OpenGL 1.5 features
++ - fixed a few compilation issues on IRIX
++ - fixed a matrix classification bug (reported by Wes Bethel)
++ - we weren't reseting the vertex/fragment program error state
++ before parsing (Dave Reveman)
++ - adjust texcoords for sampling texture rectangles (Dave Reveman)
++ - glGet*(GL_MAX_VERTEX_ATTRIBS_ARB) wasn't implemented
++ - repeated calls to glDeleteTexture(t) could lead to a crash
++ - fixed potential ref count bugs in VBOs and vertex/fragment programs
++ - spriteblast demo didn't handle window size changes correctly
++ - glTexSubImage didn't handle pixels=NULL correctly for PBOs
++ - fixed color index mode glDrawPixels bug (Karl Schultz)
++</pre>
++<p>
++The MD5 checksums are:
++</p>
++<pre>
++9e8f34b059272dbb8e1f2c968b33bbf0 MesaLib-6.2.tar.gz
++3d6a6362390b6a37d3cb2e615f3ac7db MesaLib-6.2.tar.bz2
++6cfd7895d28e695c0dbbed9469564091 MesaLib-6.2.zip
++3e06e33b0809f09855cb60883b8bdfef MesaDemos-6.2.tar.gz
++9d160009c3dfdb35fe7e4088c9ba8f85 MesaDemos-6.2.tar.bz2
++856f7ec947122eb3c8985ebc2f654dcd MesaDemos-6.2.zip
++</pre>
++
++
++<h2>August 18, 2004</h2>
++<p>
++Mesa 6.1 has been released.
++This is a new development release (version 6.2 will be a stabilization
++release).
++</p>
++<pre>
++ New:
++ - Revamped Makefile system
++ - glXUseRotatedXFont() utility (see xdemos/xuserotfont.c)
++ - internal driver interface changes related to texture object
++ allocation, vertex/fragment programs, BlendEquationSeparate, etc.
++ - option to walk triangle edges with double-precision floats
++ (Justin Novosad of Discreet) (see config.h file)
++ - support for AUX buffers in software GLX driver
++ - updated glext.h to version 24 and glxext.h to version 6
++ - new MESA_GLX_FORCE_ALPHA and MESA_GLX_DEPTH_BITS env vars
++ - updated BeOS support (Philippe Houdoin)
++ Changes:
++ - fragment fog interpolation is perspective corrected now
++ - new glTexImage code, much cleaner, may be a bit faster
++ Bug fixes:
++ - glArrayElement in display lists didn't handle generic vertex attribs
++ - glFogCoord didn't always work properly
++ - ARB_fragment_program fog options didn't work
++ - frag prog TEX instruction no longer incorrectly divides s,t,r by q
++ - ARB frag prog TEX and TEXP instructions now use LOD=0
++ - glTexEnviv in display lists didn't work
++ - glRasterPos didn't do texgen or apply texture matrix
++ - GL_DOUBLE-valued vertex arrays were broken in some cases
++ - fixed texture rectangle edge/border sampling bugs
++ - sampling an incomplete texture in a fragment program would segfault
++ - glTexImage was missing a few error checks
++ - fixed some minor glGetTexParameter glitches
++ - GL_INTENSITY was mistakenly accepted as a <format> to glTexImage
++ - fragment program writes to RC/HC register were broken
++ - fixed a few glitches in GL_HP_occlusion_test extension
++ - glBeginQueryARB and glEndQueryARB didn't work inside display lists
++ - vertex program state references were broken
++ - fixed triangle color interpolation bug on AIX (Shane Blackett)
++ - fixed a number of minor memory leaks (bug #1002030)
++</pre>
++The MD5 checksums are:
++</p>
++<pre>
++c9284d295ebcd2e0486cc3cd54e5863c MesaLib-6.1.tar.gz
++5de1f53ec0709f60fc68fdfed57351f3 MesaLib-6.1.tar.bz2
++483e77cac4789a5d36c42f3c0136d6d8 MesaLib-6.1.zip
++8c46cfa6f9732acc6f6c25724aad0246 MesaDemos-6.1.tar.gz
++89bfe0f6c69b39fd0ebd9fff481a4e9b MesaDemos-6.1.tar.bz2
++161268531fcc6f0c5a056430ee97e0c1 MesaDemos-6.1.zip
++</pre>
++
++
++
+ <h2>April 2, 2004</h2>
+
+ <p>
+@@ -831,6 +953,6 @@
+
+
+ <hr>
+-$Id$
++$Id$
+ </body>
+ </html>
+\ No newline at end of file
+Index: xc/extras/Mesa/docs/osmesa.html
+diff -u xc/extras/Mesa/docs/osmesa.html:1.1.1.3 xc/extras/Mesa/docs/osmesa.html:1.1.1.3.2.1
+--- xc/extras/Mesa/docs/osmesa.html:1.1.1.3 Thu Aug 12 23:43:30 2004
++++ xc/extras/Mesa/docs/osmesa.html Wed Dec 15 01:50:56 2004
+@@ -43,16 +43,14 @@
+ <p>
+ To build Mesa/OSMesa with 16-bit color channels:
+ <pre>
+- cd Mesa-5.x/src
+- make -f Makefile.X11 clean
+- make -f Makefile.OSMesa16 linux-osmesa16
++ make realclean
++ make linux-osmesa16
+ </pre>
+
+ For 32-bit channels:
+ <pre>
+- cd Mesa-5.x/src
+- make -f Makefile.X11 clean
+- make -f Makefile.OSMesa16 linux-osmesa32
++ make realclean
++ make linux-osmesa32
+ </pre>
+
+ <p>
+@@ -60,13 +58,12 @@
+ </p>
+
+ <p>
+-If you're not using Linux, you can easily edit Make-config and add
+-an appropriate configuration.
+-</p>
+-<p>
+-The Mesa/tests/osdemo16.c file (available via CVS) demonstrates how
+-to use this feature.
++If you need to compile on a non-Linux platform, copy Mesa/configs/linux-osmesa16
++to a new config file and edit it as needed. Then, add the new config name to
++the top-level Makefile. Send a patch to the Mesa developers too, if you're
++inclined.
+ </p>
++
+ <p>
+ BE WARNED: 16 and 32-bit channel support has not been exhaustively
+ tested and there may be some bugs. However, a number of people have
+Index: xc/extras/Mesa/docs/relnotes.html
+diff -u xc/extras/Mesa/docs/relnotes.html:1.1.1.3 xc/extras/Mesa/docs/relnotes.html:1.1.1.3.2.1
+--- xc/extras/Mesa/docs/relnotes.html:1.1.1.3 Thu Aug 12 23:43:30 2004
++++ xc/extras/Mesa/docs/relnotes.html Wed Dec 15 01:50:56 2004
+@@ -11,6 +11,8 @@
+ </p>
+
+ <UL>
++<LI><A HREF="RELNOTES-6.2.1">RELNOTES-6.2.1</A>
++<LI><A HREF="RELNOTES-6.2">RELNOTES-6.2</A>
+ <LI><A HREF="RELNOTES-6.1">RELNOTES-6.1</A>
+ <LI><A HREF="RELNOTES-6.0">RELNOTES-6.0</A>
+ <LI><A HREF="RELNOTES-5.1">RELNOTES-5.1</A>
+Index: xc/extras/Mesa/include/GL/gl.h
+diff -u xc/extras/Mesa/include/GL/gl.h:1.2 xc/extras/Mesa/include/GL/gl.h:1.2.4.1
+--- xc/extras/Mesa/include/GL/gl.h:1.2 Mon Jun 21 13:35:05 2004
++++ xc/extras/Mesa/include/GL/gl.h Wed Dec 15 01:50:56 2004
+@@ -1,6 +1,6 @@
+ /*
+ * Mesa 3-D graphics library
+- * Version: 6.1
++ * Version: 6.2
+ *
+ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+Index: xc/extras/Mesa/include/GL/gl_mangle.h
+diff -u xc/extras/Mesa/include/GL/gl_mangle.h:1.1.1.1 xc/extras/Mesa/include/GL/gl_mangle.h:1.1.1.1.4.1
+--- xc/extras/Mesa/include/GL/gl_mangle.h:1.1.1.1 Wed Jun 16 09:16:30 2004
++++ xc/extras/Mesa/include/GL/gl_mangle.h Wed Dec 15 01:50:56 2004
+@@ -30,6 +30,7 @@
+ /* Internal symbols which may collide with other OpenGL implementations. */
+ #define __glCoreCreateContext __mglCoreCreateContext
+ #define __glCoreNopDispatch __mglCoreNopDispatch
++#define gl__unused413 MANGLE(__unused413)
+
+ /*REGENERATE_TO_END-----------ALL LINES BELOW HERE GET REPLACED ON REGENERATION */
+
+Index: xc/extras/Mesa/include/GL/glut.h
+diff -u xc/extras/Mesa/include/GL/glut.h:1.1.1.1 xc/extras/Mesa/include/GL/glut.h:1.1.1.1.4.1
+--- xc/extras/Mesa/include/GL/glut.h:1.1.1.1 Wed Jun 16 09:16:32 2004
++++ xc/extras/Mesa/include/GL/glut.h Wed Dec 15 01:50:56 2004
+@@ -75,7 +75,7 @@
+ To avoid the atexit workaround, #define GLUT_DISABLE_ATEXIT_HACK. */
+
+ /* XXX This is from Win32's <process.h> */
+-# if !defined(_MSC_VER) && !defined(__cdecl)
++# if !defined(_MSC_VER) && !defined(__MINGW32__) && !defined(__cdecl)
+ /* Define __cdecl for non-Microsoft compilers. */
+ # define __cdecl
+ # define GLUT_DEFINED___CDECL
+@@ -108,7 +108,7 @@
+ and redifinition of Windows system defs, also removes requirement of
+ pretty much any standard windows header from this file */
+
+-#if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) || defined(__CYGWIN32__)
++#if (_MSC_VER >= 800) || defined(__MINGW32__) || defined(_STDCALL_SUPPORTED) || defined(__CYGWIN32__)
+ # define GLUTAPIENTRY __stdcall
+ #else
+ # define GLUTAPIENTRY
+@@ -664,7 +664,8 @@
+ GLUTAPI int GLUTAPIENTRY glutLayerGet(GLenum type);
+ #endif
+ #if (GLUT_API_VERSION >= 5)
+-GLUTAPI void * GLUTAPIENTRY glutGetProcAddress(const char *procName);
++typedef void (*GLUTproc)();
++GLUTAPI GLUTproc GLUTAPIENTRY glutGetProcAddress(const char *procName);
+ #endif
+
+ /* GLUT font sub-API */
+Index: xc/extras/Mesa/include/GL/glx.h
+diff -u xc/extras/Mesa/include/GL/glx.h:1.1.1.1 xc/extras/Mesa/include/GL/glx.h:1.1.1.1.4.1
+--- xc/extras/Mesa/include/GL/glx.h:1.1.1.1 Wed Jun 16 09:16:33 2004
++++ xc/extras/Mesa/include/GL/glx.h Wed Dec 15 01:50:56 2004
+@@ -1,8 +1,8 @@
+ /*
+ * Mesa 3-D graphics library
+- * Version: 6.1
++ * Version: 6.2
+ *
+- * Copyright (C) 1999-2003 Brian Paul All Rights Reserved.
++ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+@@ -46,7 +46,7 @@
+
+
+ #if defined(USE_MGL_NAMESPACE)
+-#include <GL/glx_mangle.h>
++#include "glx_mangle.h"
+ #endif
+
+
+Index: xc/extras/Mesa/include/GL/wmesa.h
+diff -u xc/extras/Mesa/include/GL/wmesa.h:1.1.1.1 xc/extras/Mesa/include/GL/wmesa.h:1.1.1.1.4.1
+--- xc/extras/Mesa/include/GL/wmesa.h:1.1.1.1 Wed Jun 16 09:16:34 2004
++++ xc/extras/Mesa/include/GL/wmesa.h Wed Dec 15 01:50:56 2004
+@@ -52,15 +52,17 @@
+
+ #include "gl\gl.h"
+
+-#pragma warning (disable:4273)
+-#pragma warning( disable : 4244 ) /* '=' : conversion from 'const double ' to 'float ', possible loss of data */
+-#pragma warning( disable : 4018 ) /* '<' : signed/unsigned mismatch */
+-#pragma warning( disable : 4305 ) /* '=' : truncation from 'const double ' to 'float ' */
+-#pragma warning( disable : 4013 ) /* 'function' undefined; assuming extern returning int */
+-#pragma warning( disable : 4761 ) /* integral size mismatch in argument; conversion supplied */
+-#pragma warning( disable : 4273 ) /* 'identifier' : inconsistent DLL linkage. dllexport assumed */
+-#if (MESA_WARNQUIET>1)
+-# pragma warning( disable : 4146 ) /* unary minus operator applied to unsigned type, result still unsigned */
++#if defined(_MSV_VER) && !defined(__GNUC__)
++# pragma warning (disable:4273)
++# pragma warning( disable : 4244 ) /* '=' : conversion from 'const double ' to 'float ', possible loss of data */
++# pragma warning( disable : 4018 ) /* '<' : signed/unsigned mismatch */
++# pragma warning( disable : 4305 ) /* '=' : truncation from 'const double ' to 'float ' */
++# pragma warning( disable : 4013 ) /* 'function' undefined; assuming extern returning int */
++# pragma warning( disable : 4761 ) /* integral size mismatch in argument; conversion supplied */
++# pragma warning( disable : 4273 ) /* 'identifier' : inconsistent DLL linkage. dllexport assumed */
++# if (MESA_WARNQUIET>1)
++# pragma warning( disable : 4146 ) /* unary minus operator applied to unsigned type, result still unsigned */
++# endif
+ #endif
+
+ /*
+Index: xc/extras/Mesa/include/GL/internal/dri_interface.h
+diff -u xc/extras/Mesa/include/GL/internal/dri_interface.h:1.1.1.2 xc/extras/Mesa/include/GL/internal/dri_interface.h:1.1.1.2.4.1
+--- xc/extras/Mesa/include/GL/internal/dri_interface.h:1.1.1.2 Thu Jul 22 06:49:46 2004
++++ xc/extras/Mesa/include/GL/internal/dri_interface.h Wed Dec 15 01:50:57 2004
+@@ -149,6 +149,8 @@
+ int * backX, int * backY,
+ int * numBackClipRects, drm_clip_rect_t ** pBackClipRects );
+
++/* Test for the xf86dri.h header file */
++#ifndef _XF86DRI_H_
+ extern GLboolean XF86DRIDestroyContext( __DRInativeDisplay *dpy, int screen,
+ __DRIid context_id );
+
+@@ -157,6 +159,7 @@
+
+ extern GLboolean XF86DRIDestroyDrawable( __DRInativeDisplay *dpy, int screen,
+ __DRIid drawable);
++#endif
+ /*@}*/
+
+
+Index: xc/extras/Mesa/src/Makefile
+diff -u xc/extras/Mesa/src/Makefile:1.1.1.1 xc/extras/Mesa/src/Makefile:1.1.1.1.4.1
+--- xc/extras/Mesa/src/Makefile:1.1.1.1 Wed Jun 16 09:17:09 2004
++++ xc/extras/Mesa/src/Makefile Wed Dec 15 01:50:57 2004
+@@ -7,7 +7,11 @@
+ SUBDIRS = $(SRC_DIRS)
+
+
+-default: $(LIB_DIR) subdirs
++default: message $(LIB_DIR) subdirs
++
++
++message:
++ @echo "Making sources for" $(CONFIG_NAME)
+
+
+ subdirs:
+Index: xc/extras/Mesa/src/glx/mini/Makefile
+diff -u xc/extras/Mesa/src/glx/mini/Makefile:1.1.1.2 xc/extras/Mesa/src/glx/mini/Makefile:1.1.1.2.4.1
+--- xc/extras/Mesa/src/glx/mini/Makefile:1.1.1.2 Thu Jul 22 06:51:13 2004
++++ xc/extras/Mesa/src/glx/mini/Makefile Wed Dec 15 01:50:57 2004
+@@ -18,7 +18,10 @@
+ miniglx.c \
+ miniglx_events.c
+
+-OBJECTS = $(C_SOURCES:.c=.o)
++X86_SOURCES = $(TOP)/src/mesa/x86/glapi_x86.S
++
++OBJECTS = $(C_SOURCES:.c=.o) \
++ $(ASM_SOURCES:.S=.o)
+
+ INCLUDES = -I. $(INCLUDE_DIRS)
+
+Index: xc/extras/Mesa/src/glx/mini/miniglx.c
+diff -u xc/extras/Mesa/src/glx/mini/miniglx.c:1.1.1.3 xc/extras/Mesa/src/glx/mini/miniglx.c:1.1.1.3.2.1
+--- xc/extras/Mesa/src/glx/mini/miniglx.c:1.1.1.3 Thu Aug 12 23:04:47 2004
++++ xc/extras/Mesa/src/glx/mini/miniglx.c Wed Dec 15 01:50:57 2004
+@@ -1711,7 +1711,7 @@
+ GLint redBits = 0, greenBits = 0, blueBits = 0, alphaBits = 0;
+ GLint indexBits = 0, depthBits = 0, stencilBits = 0;
+ GLint numSamples = 0;
+- int i;
++ int i=0;
+
+ /*
+ * XXX in the future, <screen> might be interpreted as a VT
+@@ -1805,6 +1805,7 @@
+ (void) alphaBits;
+ (void) stereoFlag;
+ for ( mode = dpy->driver_modes ; mode != NULL ; mode = mode->next ) {
++ i++;
+ if (mode->rgbMode == rgbFlag &&
+ mode->doubleBufferMode == dbFlag &&
+ mode->redBits >= redBits &&
+@@ -2149,7 +2150,8 @@
+ {
+ GLXDrawable drawable = (GLXDrawable) draw;
+ drm_clip_rect_t * cliprect;
+-
++ Display* display = (Display*)dpy;
++ __DRIcontextPrivate *pcp = (__DRIcontextPrivate *)CurrentContext->driContext.private;
+ if (drawable == 0) {
+ return GL_FALSE;
+ }
+@@ -2159,15 +2161,20 @@
+ cliprect->y1 = drawable->y;
+ cliprect->x2 = drawable->x + drawable->w;
+ cliprect->y2 = drawable->y + drawable->h;
++
++ /* the drawable index is by client id */
++ *index = display->clientID;
+
++ *stamp = pcp->driScreenPriv->pSAREA->drawableTable[display->clientID].stamp;
+ *x = drawable->x;
+ *y = drawable->y;
+ *width = drawable->w;
+ *height = drawable->h;
+ *numClipRects = 1;
+ *pClipRects = cliprect;
+- *backX = 0;
+- *backY = 0;
++
++ *backX = drawable->x;
++ *backY = drawable->y;
+ *numBackClipRects = 0;
+ *pBackClipRects = 0;
+
+Index: xc/extras/Mesa/src/mesa/Makefile
+diff -u xc/extras/Mesa/src/mesa/Makefile:1.1.1.3 xc/extras/Mesa/src/mesa/Makefile:1.1.1.3.2.1
+--- xc/extras/Mesa/src/mesa/Makefile:1.1.1.3 Sat Aug 28 04:27:07 2004
++++ xc/extras/Mesa/src/mesa/Makefile Wed Dec 15 01:50:57 2004
+@@ -176,7 +176,7 @@
+
+ clean:
+ -rm -f */*.o
+- -rm -f depend mesa.a
++ -rm -f depend depend.bak mesa.a
+ -rm -f drivers/*/*.o
+ (cd drivers/dri ; $(MAKE) clean)
+
+Index: xc/extras/Mesa/src/mesa/Makefile.BeOS
+diff -u /dev/null xc/extras/Mesa/src/mesa/Makefile.BeOS:1.2.2.1
+--- /dev/null Fri Feb 11 21:35:29 2005
++++ xc/extras/Mesa/src/mesa/Makefile.BeOS Wed Dec 15 01:50:57 2004
+@@ -0,0 +1,303 @@
++# Mesa 3-D graphics library
++# Version: 5.1
++#
++# Copyright (C) 1995-2003 Brian Paul All Rights Reserved.
++#
++# 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
++# BRIAN PAUL 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.
++#
++# BeOS driver makefile v1.0 for Mesa 5.1.x
++#
++# Copyright (C) 2002-2003 - Philippe Houdoin
++# Email : philippe.houdoin@free.fr
++# Web : http://philippe.houdoin.free.fr/phil/beos/index-en.html
++#
++# -------------------------------------------------------------------
++
++## BeOS Generic Makefile v2.0 ##
++
++## Fill in this file to specify the project being created, and the referenced
++## makefile-engine will do all of the hard work for you. This handles both
++## Intel and PowerPC builds of the BeOS.
++
++## Application Specific Settings ---------------------------------------------
++
++# specify the name of the binary
++NAME= libGL.so
++
++# specify the type of binary
++# APP: Application
++# SHARED: Shared library or add-on
++# STATIC: Static library archive
++# DRIVER: Kernel Driver
++TYPE= SHARED
++
++# specify the source files to use
++# full paths or paths relative to the makefile can be included
++# all files, regardless of directory, will have their object
++# files created in the common object directory.
++# Note that this means this makefile will not work correctly
++# if two source files with the same name (source.c or source.cpp)
++# are included from different directories. Also note that spaces
++# in folder names do not work well with this makefile.
++
++
++include sources
++
++
++BEOS_DRIVER_SOURCES = \
++ drivers/beos/GLView.cpp
++
++MESA_DEFINES =
++ASM_SOURCES =
++
++# To use GAS assembler, uncomment this line instead:
++MESA_DEFINES += GNU_ASSEMBLER
++# To use NASM assembler, uncomment this line instead:
++# MESA_DEFINES += NASM_ASSEMBLER
++# To build a DEBUG version of Mesa, uncomment this line instead:
++# MESA_DEFINES += DEBUG
++
++# x86-optimized code
++MACHINE=$(shell uname -m)
++ifeq ($(MACHINE), BePC)
++ MESA_DEFINES += USE_X86_ASM USE_SSE_ASM USE_MMX_ASM
++ MESA_DEFINES += USE_3DNOW_ASM
++ ASM_SOURCES = $(X86_SOURCES)
++else
++ # No assembly optimization for PowerPC...
++ # HAVE_ALTIVEC=1
++endif
++
++# FIXME: SI-GLU version support currently broken
++# USE_SI_GLU=1
++ifdef USE_SI_GLU
++ GLU_SOURCES = \
++ ../si-glu/libutil/error.c \
++ ../si-glu/libutil/glue.c \
++ ../si-glu/libutil/mipmap.c \
++ ../si-glu/libutil/project.c \
++ ../si-glu/libutil/quad.c \
++ ../si-glu/libutil/registry.c \
++ ../si-glu/libtess/dict.c \
++ ../si-glu/libtess/geom.c \
++ ../si-glu/libtess/memalloc.c \
++ ../si-glu/libtess/mesh.c \
++ ../si-glu/libtess/normal.c \
++ ../si-glu/libtess/priorityq.c \
++ ../si-glu/libtess/render.c \
++ ../si-glu/libtess/sweep.c \
++ ../si-glu/libtess/tess.c \
++ ../si-glu/libtess/tessmono.c \
++ ../si-glu/libnurbs/interface/bezierEval.cc \
++ ../si-glu/libnurbs/interface/bezierPatch.cc \
++ ../si-glu/libnurbs/interface/bezierPatchMesh.cc \
++ ../si-glu/libnurbs/interface/glcurveval.cc \
++ ../si-glu/libnurbs/interface/glinterface.cc \
++ ../si-glu/libnurbs/interface/glrenderer.cc \
++ ../si-glu/libnurbs/interface/glsurfeval.cc \
++ ../si-glu/libnurbs/interface/incurveeval.cc \
++ ../si-glu/libnurbs/interface/insurfeval.cc \
++ ../si-glu/libnurbs/internals/arc.cc \
++ ../si-glu/libnurbs/internals/arcsorter.cc \
++ ../si-glu/libnurbs/internals/arctess.cc \
++ ../si-glu/libnurbs/internals/backend.cc \
++ ../si-glu/libnurbs/internals/basiccrveval.cc \
++ ../si-glu/libnurbs/internals/basicsurfeval.cc \
++ ../si-glu/libnurbs/internals/bin.cc \
++ ../si-glu/libnurbs/internals/bufpool.cc \
++ ../si-glu/libnurbs/internals/cachingeval.cc \
++ ../si-glu/libnurbs/internals/ccw.cc \
++ ../si-glu/libnurbs/internals/coveandtiler.cc \
++ ../si-glu/libnurbs/internals/curve.cc \
++ ../si-glu/libnurbs/internals/curvelist.cc \
++ ../si-glu/libnurbs/internals/curvesub.cc \
++ ../si-glu/libnurbs/internals/dataTransform.cc \
++ ../si-glu/libnurbs/internals/displaylist.cc \
++ ../si-glu/libnurbs/internals/flist.cc \
++ ../si-glu/libnurbs/internals/flistsorter.cc \
++ ../si-glu/libnurbs/internals/hull.cc \
++ ../si-glu/libnurbs/internals/intersect.cc \
++ ../si-glu/libnurbs/internals/knotvector.cc \
++ ../si-glu/libnurbs/internals/mapdesc.cc \
++ ../si-glu/libnurbs/internals/mapdescv.cc \
++ ../si-glu/libnurbs/internals/maplist.cc \
++ ../si-glu/libnurbs/internals/mesher.cc \
++ ../si-glu/libnurbs/internals/monoTriangulationBackend.cc \
++ ../si-glu/libnurbs/internals/monotonizer.cc \
++ ../si-glu/libnurbs/internals/mycode.cc \
++ ../si-glu/libnurbs/internals/nurbsinterfac.cc \
++ ../si-glu/libnurbs/internals/nurbstess.cc \
++ ../si-glu/libnurbs/internals/patch.cc \
++ ../si-glu/libnurbs/internals/patchlist.cc \
++ ../si-glu/libnurbs/internals/quilt.cc \
++ ../si-glu/libnurbs/internals/reader.cc \
++ ../si-glu/libnurbs/internals/renderhints.cc \
++ ../si-glu/libnurbs/internals/slicer.cc \
++ ../si-glu/libnurbs/internals/sorter.cc \
++ ../si-glu/libnurbs/internals/splitarcs.cc \
++ ../si-glu/libnurbs/internals/subdivider.cc \
++ ../si-glu/libnurbs/internals/tobezier.cc \
++ ../si-glu/libnurbs/internals/trimline.cc \
++ ../si-glu/libnurbs/internals/trimregion.cc \
++ ../si-glu/libnurbs/internals/trimvertpool.cc \
++ ../si-glu/libnurbs/internals/uarray.cc \
++ ../si-glu/libnurbs/internals/varray.cc \
++ ../si-glu/libnurbs/nurbtess/directedLine.cc \
++ ../si-glu/libnurbs/nurbtess/gridWrap.cc \
++ ../si-glu/libnurbs/nurbtess/monoChain.cc \
++ ../si-glu/libnurbs/nurbtess/monoPolyPart.cc \
++ ../si-glu/libnurbs/nurbtess/monoTriangulation.cc \
++ ../si-glu/libnurbs/nurbtess/partitionX.cc \
++ ../si-glu/libnurbs/nurbtess/partitionY.cc \
++ ../si-glu/libnurbs/nurbtess/polyDBG.cc \
++ ../si-glu/libnurbs/nurbtess/polyUtil.cc \
++ ../si-glu/libnurbs/nurbtess/primitiveStream.cc \
++ ../si-glu/libnurbs/nurbtess/quicksort.cc \
++ ../si-glu/libnurbs/nurbtess/rectBlock.cc \
++ ../si-glu/libnurbs/nurbtess/sampleComp.cc \
++ ../si-glu/libnurbs/nurbtess/sampleCompBot.cc \
++ ../si-glu/libnurbs/nurbtess/sampleCompRight.cc \
++ ../si-glu/libnurbs/nurbtess/sampleCompTop.cc \
++ ../si-glu/libnurbs/nurbtess/sampleMonoPoly.cc \
++ ../si-glu/libnurbs/nurbtess/sampledLine.cc \
++ ../si-glu/libnurbs/nurbtess/searchTree.cc
++else
++ GLU_SOURCES = \
++ ../glu/mesa/glu.c \
++ ../glu/mesa/mipmap.c \
++ ../glu/mesa/project.c \
++ ../glu/mesa/quadric.c \
++ ../glu/mesa/tess.c \
++ ../glu/mesa/tesselat.c \
++ ../glu/mesa/polytest.c \
++ ../glu/mesa/nurbs.c \
++ ../glu/mesa/nurbscrv.c \
++ ../glu/mesa/nurbssrf.c \
++ ../glu/mesa/nurbsutl.c
++endif
++
++MESA_SOURCES = $(CORE_SOURCES) $(ASM_SOURCES)
++
++SRCS = $(MESA_SOURCES) $(GLU_SOURCES) $(BEOS_DRIVER_SOURCES)
++
++# specify the resource files to use
++# full path or a relative path to the resource file can be used.
++RSRCS =
++
++# specify additional libraries to link against
++# there are two acceptable forms of library specifications
++# - if your library follows the naming pattern of:
++# libXXX.so or libXXX.a you can simply specify XXX
++# library: libbe.so entry: be
++#
++# - if your library does not follow the standard library
++# naming scheme you need to specify the path to the library
++# and it's name
++# library: my_lib.a entry: my_lib.a or path/my_lib.a
++LIBS = be
++
++# specify additional paths to directories following the standard
++# libXXX.so or libXXX.a naming scheme. You can specify full paths
++# or paths relative to the makefile. The paths included may not
++# be recursive, so include all of the paths where libraries can
++# be found. Directories where source files are found are
++# automatically included.
++LIBPATHS =
++
++# additional paths to look for system headers
++# thes use the form: #include <header>
++# source file directories are NOT auto-included here
++SYSTEM_INCLUDE_PATHS = ../../include
++
++ifdef USE_SI_GLU
++ SYSTEM_INCLUDE_PATHS += ../glu/sgi/include
++endif
++
++# additional paths to look for local headers
++# thes use the form: #include "header"
++# source file directories are automatically included
++LOCAL_INCLUDE_PATHS = \
++ . \
++ ./main \
++ ./glapi \
++ ./math \
++ ./transform \
++ ./swrast \
++ ./swrast_setup \
++ ./tnl \
++ ./tnl_dd
++
++# specify the level of optimization that you desire
++# NONE, SOME, FULL
++OPTIMIZE = FULL
++
++# specify any preprocessor symbols to be defined. The symbols
++# will be set to a value of 1. For example specify DEBUG if you want
++# DEBUG=1 to be set when compiling.
++DEFINES = $(MESA_DEFINES)
++
++# specify special warning levels
++# if unspecified default warnings will be used
++# NONE = suppress all warnings
++# ALL = enable all warnings
++WARNINGS = ALL
++
++# specify whether image symbols will be created
++# so that stack crawls in the debugger are meaningful
++# if TRUE symbols will be created
++SYMBOLS = TRUE
++
++# specify debug settings
++# if TRUE will allow application to be run from
++# a source-level debugger
++# DEBUGGER = TRUE
++DEBUGGER = FALSE
++
++# specify additional compiler flags for all files
++COMPILER_FLAGS =
++
++# specify additional linker flags
++LINKER_FLAGS =
++
++
++
++## include the makefile-engine
++include /boot/develop/etc/makefile-engine
++
++
++
++# x86/matypes.h include file is *generated*!
++# Rules to (re)generate it as needed:
++
++x86/common_x86_asm.S : x86/matypes.h
++
++x86/matypes.h : x86/gen_matypes.c
++ @echo "(Re-)Generating $@ ..."
++ $(CC) $< $(INCLUDES) $(CFLAGS) -o x86/gen_matypes
++ x86/gen_matypes > $@
++ rm -f x86/gen_matypes
++
++## Add NASM support for assembly code compilation...
++# $(OBJ_DIR)/%.o : %.nasm
++# nasm -f elf $(MESA_DEFINES) -o $@ $<
++
++$(OBJ_DIR)/%.o : %.S
++ gcc -c $< $(INCLUDES) $(CFLAGS) -o $@
++# gcc $(INCLUDES) $(CFLAGS) -E $< | grep -v '^$$' > $(addsuffix .nasm, $(basename $<))
++# nasm -f elf $(MESA_DEFINES) -o $@ $(addsuffix .nasm, $(basename $<))
++
+Index: xc/extras/Mesa/src/mesa/Makefile.mgw
+diff -u xc/extras/Mesa/src/mesa/Makefile.mgw:1.1.1.2 xc/extras/Mesa/src/mesa/Makefile.mgw:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/Makefile.mgw:1.1.1.2 Thu Jul 22 06:51:14 2004
++++ xc/extras/Mesa/src/mesa/Makefile.mgw Wed Dec 15 01:50:57 2004
+@@ -40,6 +40,9 @@
+ # As a consequence, you'll need the Win32 Glide3
+ # library to build any application.
+ # default = no
++# ICD=1 build the installable client driver interface
++# (windows opengl driver interface)
++# default = no
+ # X86=1 optimize for x86 (if possible, use MMX, SSE, 3DNow).
+ # default = no
+ #
+@@ -57,8 +60,13 @@
+ TOP = ../..
+ GLIDE ?= $(TOP)/glide3
+ LIBDIR = $(TOP)/lib
+-GL_DLL = opengl32.dll
+-GL_IMP = libopengl32.a
++ifeq ($(ICD),1)
++ GL_DLL = mesa32.dll
++ GL_IMP = libmesa32.a
++else
++ GL_DLL = opengl32.dll
++ GL_IMP = libopengl32.a
++endif
+
+ LDLIBS = -lgdi32
+
+@@ -66,12 +74,17 @@
+ CFLAGS += -DBUILD_GL32 -D_OPENGL32_ -D_MSC_VER
+ CFLAGS += $(INCLUDE_DIRS)
+ ifeq ($(FX),1)
+-CFLAGS += -I$(GLIDE)/include -DFX
+-LDLIBS += -L$(GLIDE)/lib -lglide3x
+-GL_DEF = drivers/glide/fxopengl.def
+-GL_RES = drivers/glide/fx.rc
++ CFLAGS += -I$(GLIDE)/include -DFX
++ LDLIBS += -L$(GLIDE)/lib -lglide3x
++ GL_DEF = drivers/glide/fxopengl.def
++ GL_RES = drivers/glide/fx.rc
+ else
+-GL_DEF = drivers/windows/gdi/mesa.def
++ ifeq ($(ICD),1)
++ CFLAGS += -DUSE_MGL_NAMESPACE
++ GL_DEF = drivers/windows/icd/mesa.def
++ else
++ GL_DEF = drivers/windows/gdi/mesa.def
++ endif
+ endif
+
+ AR = ar
+@@ -100,10 +113,16 @@
+ $(GLIDE_DRIVER_SOURCES) \
+ drivers/glide/fxwgl.c
+ else
++ifeq ($(ICD),1)
++DRIVER_SOURCES = \
++ drivers/windows/gdi/wmesa.c \
++ drivers/windows/icd/icd.c
++else
+ DRIVER_SOURCES = \
+ drivers/windows/gdi/wmesa.c \
+ drivers/windows/gdi/wgl.c
+ endif
++endif
+
+ SOURCES = $(CORE_SOURCES) $(X86_SOURCES) $(COMMON_DRIVER_SOURCES) $(DRIVER_SOURCES)
+
+@@ -138,10 +157,18 @@
+ # [dBorca]
+ # glapi_x86.S needs some adjustments
+ # in order to generate correct entrypoints
++# Trick: change the following condition to
++# be always false if you need C entrypoints
++# with USE_X86_ASM (useful for trace/debug)
++ifeq (1,1)
+ x86/glapi_x86.o: x86/glapi_x86.S
+ $(CC) -o $@ $(CFLAGS) -U__WIN32__ -DSTDCALL_API -c $<
+-#main/dispatch.o: main/dispatch.c
+-# $(CC) -o $@ $(CFLAGS) -UUSE_X86_ASM -c $<
++else
++main/dispatch.o: main/dispatch.c
++ $(CC) -o $@ $(CFLAGS) -UUSE_X86_ASM -c $<
++glapi/glapi.o: glapi/glapi.c
++ $(CC) -o $@ $(CFLAGS) -UUSE_X86_ASM -c $<
++endif
+
+ # [dBorca]
+ # if we want codegen, we have to stdcall
+@@ -161,5 +188,6 @@
+ -$(call UNLINK,x86/*.o)
+ -$(call UNLINK,drivers/common/*.o)
+ -$(call UNLINK,drivers/windows/gdi/*.o)
++ -$(call UNLINK,drivers/windows/icd/*.o)
+ -$(call UNLINK,drivers/glide/*.o)
+ -$(call UNLINK,drivers/glide/*.res)
+Index: xc/extras/Mesa/src/mesa/array_cache/ac_import.c
+diff -u xc/extras/Mesa/src/mesa/array_cache/ac_import.c:1.1.1.2 xc/extras/Mesa/src/mesa/array_cache/ac_import.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/array_cache/ac_import.c:1.1.1.2 Thu Jul 22 06:51:21 2004
++++ xc/extras/Mesa/src/mesa/array_cache/ac_import.c Wed Dec 15 01:50:57 2004
+@@ -276,6 +276,7 @@
+ ACcontext *ac = AC_CONTEXT(ctx);
+ const struct gl_client_array *from = &ac->Raw.TexCoord[unit];
+ struct gl_client_array *to = &ac->Cache.TexCoord[unit];
++ (void) type; (void) stride;
+
+ ASSERT(unit < ctx->Const.MaxTextureCoordUnits);
+
+@@ -305,6 +306,7 @@
+ ACcontext *ac = AC_CONTEXT(ctx);
+ const struct gl_client_array *from = &ac->Raw.Vertex;
+ struct gl_client_array *to = &ac->Cache.Vertex;
++ (void) type; (void) stride;
+
+ /* Limited choices at this stage:
+ */
+@@ -331,6 +333,7 @@
+ ACcontext *ac = AC_CONTEXT(ctx);
+ const struct gl_client_array *from = &ac->Raw.Normal;
+ struct gl_client_array *to = &ac->Cache.Normal;
++ (void) type; (void) stride;
+
+ /* Limited choices at this stage:
+ */
+@@ -355,6 +358,7 @@
+ ACcontext *ac = AC_CONTEXT(ctx);
+ const struct gl_client_array *from = &ac->Raw.Color;
+ struct gl_client_array *to = &ac->Cache.Color;
++ (void) stride;
+
+ import( ctx, type, to, from );
+
+@@ -367,6 +371,7 @@
+ ACcontext *ac = AC_CONTEXT(ctx);
+ const struct gl_client_array *from = &ac->Raw.Index;
+ struct gl_client_array *to = &ac->Cache.Index;
++ (void) type; (void) stride;
+
+ /* Limited choices at this stage:
+ */
+@@ -391,6 +396,7 @@
+ ACcontext *ac = AC_CONTEXT(ctx);
+ const struct gl_client_array *from = &ac->Raw.SecondaryColor;
+ struct gl_client_array *to = &ac->Cache.SecondaryColor;
++ (void) stride;
+
+ import( ctx, type, to, from );
+
+@@ -403,6 +409,7 @@
+ ACcontext *ac = AC_CONTEXT(ctx);
+ const struct gl_client_array *from = &ac->Raw.FogCoord;
+ struct gl_client_array *to = &ac->Cache.FogCoord;
++ (void) type; (void) stride;
+
+ /* Limited choices at this stage:
+ */
+@@ -427,6 +434,7 @@
+ ACcontext *ac = AC_CONTEXT(ctx);
+ const struct gl_client_array *from = &ac->Raw.EdgeFlag;
+ struct gl_client_array *to = &ac->Cache.EdgeFlag;
++ (void) type; (void) stride;
+
+ /* Limited choices at this stage:
+ */
+@@ -451,6 +459,7 @@
+ ACcontext *ac = AC_CONTEXT(ctx);
+ const struct gl_client_array *from = &ac->Raw.Attrib[index];
+ struct gl_client_array *to = &ac->Cache.Attrib[index];
++ (void) type; (void) stride;
+
+ ASSERT(index < VERT_ATTRIB_MAX);
+
+Index: xc/extras/Mesa/src/mesa/drivers/beos/GLView.h
+diff -u /dev/null xc/extras/Mesa/src/mesa/drivers/beos/GLView.h:1.2.2.1
+--- /dev/null Fri Feb 11 21:35:29 2005
++++ xc/extras/Mesa/src/mesa/drivers/beos/GLView.h Wed Dec 15 01:50:57 2004
+@@ -0,0 +1,196 @@
++/*******************************************************************************
++/
++/ File: GLView.h
++/
++/ Copyright 1993-98, Be Incorporated, All Rights Reserved.
++/
++*******************************************************************************/
++
++#ifndef BGLVIEW_H
++#define BGLVIEW_H
++
++// added by Brian Paul:
++#ifndef BGL_RGB
++#define BGL_RGB 0
++#define BGL_INDEX 1
++#define BGL_SINGLE 0
++#define BGL_DOUBLE 2
++#define BGL_DIRECT 0
++#define BGL_INDIRECT 4
++#define BGL_ACCUM 8
++#define BGL_ALPHA 16
++#define BGL_DEPTH 32
++#define BGL_OVERLAY 64
++#define BGL_UNDERLAY 128
++#define BGL_STENCIL 512
++#endif
++
++
++#include <GL/gl.h>
++#include <AppKit.h>
++#include <interface/Window.h>
++#include <interface/View.h>
++#include <interface/Bitmap.h>
++#include <game/WindowScreen.h>
++#include <game/DirectWindow.h>
++
++class BGLView : public BView {
++public:
++
++ BGLView(BRect rect, char *name,
++ ulong resizingMode, ulong mode,
++ ulong options);
++ virtual ~BGLView();
++
++ void LockGL();
++ void UnlockGL();
++ void SwapBuffers();
++
++ // Added for Mesa (can't be virtual!)
++ void CopySubBufferMESA(GLint x, GLint y, GLuint width, GLuint height);
++
++ BView * EmbeddedView();
++ status_t CopyPixelsOut(BPoint source, BBitmap *dest);
++ status_t CopyPixelsIn(BBitmap *source, BPoint dest);
++
++ virtual void ErrorCallback(unsigned long errorCode); // GLenum errorCode);
++
++ virtual void Draw(BRect updateRect);
++
++ virtual void AttachedToWindow();
++ virtual void AllAttached();
++ virtual void DetachedFromWindow();
++ virtual void AllDetached();
++
++ virtual void FrameResized(float width, float height);
++ virtual status_t Perform(perform_code d, void *arg);
++
++ /* The public methods below, for the moment,
++ are just pass-throughs to BView */
++
++ virtual status_t Archive(BMessage *data, bool deep = true) const;
++
++ virtual void MessageReceived(BMessage *msg);
++ virtual void SetResizingMode(uint32 mode);
++
++ virtual void Show();
++ virtual void Hide();
++
++ virtual BHandler *ResolveSpecifier(BMessage *msg, int32 index,
++ BMessage *specifier, int32 form,
++ const char *property);
++ virtual status_t GetSupportedSuites(BMessage *data);
++
++ /* New public functions */
++ void DirectConnected( direct_buffer_info *info );
++ void EnableDirectMode( bool enabled );
++
++private:
++
++ virtual void _ReservedGLView1();
++ virtual void _ReservedGLView2();
++ virtual void _ReservedGLView3();
++ virtual void _ReservedGLView4();
++ virtual void _ReservedGLView5();
++ virtual void _ReservedGLView6();
++ virtual void _ReservedGLView7();
++ virtual void _ReservedGLView8();
++
++ BGLView(const BGLView &);
++ BGLView &operator=(const BGLView &);
++
++ void dither_front();
++ bool confirm_dither();
++ void draw(BRect r);
++
++ void * m_gc;
++ uint32 m_options;
++ uint32 m_ditherCount;
++ BLocker m_drawLock;
++ BLocker m_displayLock;
++#if OLD_GLVIEW
++ BView * m_embeddedFront;
++ BView * m_embeddedBack;
++#else
++ void * m_clip_info;
++ void * _reserved1;
++#endif
++ BBitmap * m_ditherMap;
++ BRect m_bounds;
++ int16 * m_errorBuffer[2];
++ uint64 _reserved[8];
++
++ /* Direct Window stuff */
++private:
++ void drawScanline( int x1, int x2, int y, void *data );
++ static void scanlineHandler(struct rasStateRec *state, GLint x1, GLint x2);
++ void lock_draw();
++ void unlock_draw();
++ bool validateView();
++};
++
++
++
++class BGLScreen : public BWindowScreen {
++public:
++ BGLScreen(char *name,
++ ulong screenMode, ulong options,
++ status_t *error, bool debug=false);
++ ~BGLScreen();
++
++ void LockGL();
++ void UnlockGL();
++ void SwapBuffers();
++ virtual void ErrorCallback(GLenum errorCode);
++
++ virtual void ScreenConnected(bool connected);
++ virtual void FrameResized(float width, float height);
++ virtual status_t Perform(perform_code d, void *arg);
++
++ /* The public methods below, for the moment,
++ are just pass-throughs to BWindowScreen */
++
++ virtual status_t Archive(BMessage *data, bool deep = true) const;
++ virtual void MessageReceived(BMessage *msg);
++
++ virtual void Show();
++ virtual void Hide();
++
++ virtual BHandler *ResolveSpecifier(BMessage *msg,
++ int32 index,
++ BMessage *specifier,
++ int32 form,
++ const char *property);
++ virtual status_t GetSupportedSuites(BMessage *data);
++
++private:
++
++ virtual void _ReservedGLScreen1();
++ virtual void _ReservedGLScreen2();
++ virtual void _ReservedGLScreen3();
++ virtual void _ReservedGLScreen4();
++ virtual void _ReservedGLScreen5();
++ virtual void _ReservedGLScreen6();
++ virtual void _ReservedGLScreen7();
++ virtual void _ReservedGLScreen8();
++
++ BGLScreen(const BGLScreen &);
++ BGLScreen &operator=(const BGLScreen &);
++
++ void * m_gc;
++ long m_options;
++ BLocker m_drawLock;
++
++ int32 m_colorSpace;
++ uint32 m_screen_mode;
++
++ uint64 _reserved[7];
++};
++
++
++#endif
++
++
++
++
++
+Index: xc/extras/Mesa/src/mesa/drivers/dri/Makefile.template
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/Makefile.template:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/Makefile.template:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/Makefile.template:1.1.1.2 Thu Jul 22 06:51:24 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/Makefile.template Wed Dec 15 01:50:57 2004
+@@ -37,6 +37,7 @@
+ -I$(TOP)/src/mesa/drivers/dri/common \
+ -Iserver \
+ -I$(DRM_SOURCE_PATH)/shared \
++ -I$(DRM_SOURCE_PATH)/linux \
+ -I$(TOP)/include \
+ -I$(TOP)/include/GL/internal \
+ -I$(TOP)/src/mesa \
+@@ -94,6 +95,7 @@
+
+ # Remove .o and backup files
+ clean:
+- -rm -f *.o */*.o *~ *.o *~ *.so server/*.o $(SYMLINKS) depend
++ -rm -f *.o */*.o *~ *.o *~ *.so server/*.o $(SYMLINKS)
++ -rm -f depend depend.bak
+
+ include depend
+Index: xc/extras/Mesa/src/mesa/drivers/dri/common/depthtmp.h
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/common/depthtmp.h:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/common/depthtmp.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/common/depthtmp.h:1.1.1.1 Wed Jun 16 09:17:56 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/common/depthtmp.h Wed Dec 15 01:50:57 2004
+@@ -64,6 +64,42 @@
+ HW_WRITE_UNLOCK();
+ }
+
++static void TAG(WriteMonoDepthSpan)( GLcontext *ctx,
++ GLuint n, GLint x, GLint y,
++ const GLdepth depth,
++ const GLubyte mask[] )
++{
++ HW_WRITE_LOCK()
++ {
++ GLint x1;
++ GLint n1;
++ LOCAL_DEPTH_VARS;
++
++ y = Y_FLIP( y );
++
++ HW_CLIPLOOP()
++ {
++ GLint i = 0;
++ CLIPSPAN( x, y, n, x1, n1, i );
++
++ if ( DBG ) fprintf( stderr, "%s %d..%d (x1 %d) = %u\n",
++ __FUNCTION__, (int)i, (int)n1, (int)x1, (GLuint)depth );
++
++ if ( mask ) {
++ for ( ; i < n1 ; i++, x1++ ) {
++ if ( mask[i] ) WRITE_DEPTH( x1, y, depth );
++ }
++ } else {
++ for ( ; i < n1 ; i++, x1++ ) {
++ WRITE_DEPTH( x1, y, depth );
++ }
++ }
++ }
++ HW_ENDCLIPLOOP();
++ }
++ HW_WRITE_UNLOCK();
++}
++
+ static void TAG(WriteDepthPixels)( GLcontext *ctx,
+ GLuint n,
+ const GLint x[],
+Index: xc/extras/Mesa/src/mesa/drivers/dri/common/dri_util.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/common/dri_util.c:1.1.1.3 xc/extras/Mesa/src/mesa/drivers/dri/common/dri_util.c:1.1.1.3.2.2
+--- xc/extras/Mesa/src/mesa/drivers/dri/common/dri_util.c:1.1.1.3 Thu Aug 12 23:05:42 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/common/dri_util.c Wed Dec 15 01:50:57 2004
+@@ -141,6 +141,26 @@
+ }
+ }
+
++/*
++ * fd.o bug #1713: Some rare libGL's have __glXFindDRIScreen defined but do not
++ * export it via glXGetProcAddress. These are not supported anymore, so print
++ * an error message to that effect. - ajax 2004-10-26
++ */
++typedef __DRIscreen *(*PFNGLXFINDDRISCREEN)(__DRInativeDisplay *, int);
++
++static __DRIscreen *glx_find_dri_screen(__DRInativeDisplay *d, int i)
++{
++ PFNGLXFINDDRISCREEN findscreen =
++ (PFNGLXFINDDRISCREEN)glXGetProcAddress("__glXFindDRIScreen");
++
++ if (!findscreen)
++ {
++ __driUtilMessage("glXGetProcAddress(\"__glXFindDRIScreen\") failed!");
++ __driUtilMessage("Your libGL is too old, please upgrade.");
++ return NULL;
++ }
++ else return findscreen(d, i);
++}
+
+ /*****************************************************************/
+ /** \name Visual utility functions */
+@@ -212,23 +232,33 @@
+ static __DRIdrawable *__driFindDrawable(void *drawHash, __DRIid draw)
+ {
+ int retcode;
+- __DRIdrawable *pdraw;
++ union
++ {
++ __DRIdrawable *pdraw;
++ void *ptr;
++ } p;
+
+- retcode = drmHashLookup(drawHash, draw, (void **)&pdraw);
++ retcode = drmHashLookup(drawHash, draw, &p.ptr);
+ if (retcode)
+ return NULL;
+
+- return pdraw;
++ return p.pdraw;
+ }
+
+ static void __driRemoveDrawable(void *drawHash, __DRIdrawable *pdraw)
+ {
+ int retcode;
+- __DRIdrawablePrivate *pdp = (__DRIdrawablePrivate *)pdraw->private;
++ union
++ {
++ __DRIdrawablePrivate *pdp;
++ void *ptr;
++ } p;
+
+- retcode = drmHashLookup(drawHash, pdp->draw, (void **)&pdraw);
++ p.pdp = (__DRIdrawablePrivate *)pdraw->private;
++
++ retcode = drmHashLookup(drawHash, p.pdp->draw, &p.ptr);
+ if (!retcode) { /* Found */
+- drmHashDelete(drawHash, pdp->draw);
++ drmHashDelete(drawHash, p.pdp->draw);
+ }
+ }
+
+@@ -286,21 +316,25 @@
+ static void __driGarbageCollectDrawables(void *drawHash)
+ {
+ __DRIid draw;
+- __DRIdrawable *pdraw;
+ __DRInativeDisplay *dpy;
++ union
++ {
++ __DRIdrawable *pdraw;
++ void *ptr;
++ } p;
+
+- if (drmHashFirst(drawHash, &draw, (void **)&pdraw)) {
++ if (drmHashFirst(drawHash, &draw, &p.ptr)) {
+ do {
+- __DRIdrawablePrivate *pdp = (__DRIdrawablePrivate *)pdraw->private;
++ __DRIdrawablePrivate *pdp = (__DRIdrawablePrivate *)p.pdraw->private;
+ dpy = pdp->driScreenPriv->display;
+ if (! (*window_exists)(dpy, draw)) {
+ /* Destroy the local drawable data in the hash table, if the
+ drawable no longer exists in the Xserver */
+- __driRemoveDrawable(drawHash, pdraw);
+- (*pdraw->destroyDrawable)(dpy, pdraw->private);
+- _mesa_free(pdraw);
++ __driRemoveDrawable(drawHash, p.pdraw);
++ (*p.pdraw->destroyDrawable)(dpy, p.pdraw->private);
++ _mesa_free(p.pdraw);
+ }
+- } while (drmHashNext(drawHash, &draw, (void **)&pdraw));
++ } while (drmHashNext(drawHash, &draw, &p.ptr));
+ }
+ }
+
+@@ -353,7 +387,7 @@
+ return GL_FALSE;
+ }
+
+- pDRIScreen = __glXFindDRIScreen(dpy, scrn);
++ pDRIScreen = glx_find_dri_screen(dpy, scrn);
+ if ( (pDRIScreen == NULL) || (pDRIScreen->private == NULL) ) {
+ /* ERROR!!! */
+ return GL_FALSE;
+@@ -529,7 +563,7 @@
+ return GL_FALSE;
+ }
+
+- pDRIScreen = __glXFindDRIScreen(dpy, scrn);
++ pDRIScreen = glx_find_dri_screen(dpy, scrn);
+ if ( (pDRIScreen == NULL) || (pDRIScreen->private == NULL) ) {
+ /* ERROR!!! */
+ return GL_FALSE;
+@@ -563,7 +597,7 @@
+ return GL_FALSE;
+ }
+
+- pDRIScreen = __glXFindDRIScreen(dpy, scrn);
++ pDRIScreen = glx_find_dri_screen(dpy, scrn);
+ modes = (driCompareGLXAPIVersion( 20040317 ) >= 0)
+ ? gc->driContext.mode
+ : findConfigMode( dpy, scrn, gc->vid, pDRIScreen );
+@@ -793,7 +827,7 @@
+ int renderType,
+ const int *attrs)
+ {
+- __DRIscreen * const pDRIScreen = __glXFindDRIScreen(dpy, modes->screen);
++ __DRIscreen * const pDRIScreen = glx_find_dri_screen(dpy, modes->screen);
+ __DRIscreenPrivate *psp;
+ __DRIdrawablePrivate *pdp;
+
+@@ -848,7 +882,7 @@
+ _mesa_free(pdp);
+ return NULL;
+ #else
+- pdp->getInfo = XF86DRIGetDrawableInfo;
++ pdp->getInfo = (PFNGLXGETDRAWABLEINFOPROC) XF86DRIGetDrawableInfo;
+ #endif /* DRI_NEW_INTERFACE_ONLY */
+ }
+
+@@ -988,7 +1022,7 @@
+ __DRIscreenPrivate *psp;
+ void * const shareCtx = (pshare != NULL) ? pshare->driverPrivate : NULL;
+
+- pDRIScreen = __glXFindDRIScreen(dpy, modes->screen);
++ pDRIScreen = glx_find_dri_screen(dpy, modes->screen);
+ if ( (pDRIScreen == NULL) || (pDRIScreen->private == NULL) ) {
+ /* ERROR!!! */
+ return NULL;
+@@ -1033,16 +1067,16 @@
+ pctx->bindContext3 = driBindContext3;
+ pctx->unbindContext3 = driUnbindContext3;
+ #else
+- pctx->bindContext = driBindContext;
+- pctx->unbindContext = driUnbindContext;
++ pctx->bindContext = (void *)driBindContext;
++ pctx->unbindContext = (void *)driUnbindContext;
+ if ( driCompareGLXAPIVersion( 20030606 ) >= 0 ) {
+- pctx->bindContext2 = driBindContext2;
+- pctx->unbindContext2 = driUnbindContext2;
++ pctx->bindContext2 = (void *)driBindContext2;
++ pctx->unbindContext2 = (void *)driUnbindContext2;
+ }
+
+ if ( driCompareGLXAPIVersion( 20040415 ) >= 0 ) {
+- pctx->bindContext3 = driBindContext3;
+- pctx->unbindContext3 = driUnbindContext3;
++ pctx->bindContext3 = (void *)driBindContext3;
++ pctx->unbindContext3 = (void *)driUnbindContext3;
+ }
+ #endif
+
+@@ -1088,7 +1122,7 @@
+ __DRIscreen *pDRIScreen;
+ const __GLcontextModes *modes;
+
+- pDRIScreen = __glXFindDRIScreen(dpy, vis->screen);
++ pDRIScreen = glx_find_dri_screen(dpy, vis->screen);
+ if ( (pDRIScreen == NULL) || (pDRIScreen->private == NULL) ) {
+ /* ERROR!!! */
+ return NULL;
+@@ -1347,7 +1381,7 @@
+ int directCapable;
+ __DRIscreenPrivate *psp = NULL;
+ drm_handle_t hSAREA;
+- drmAddress pSAREA;
++ drmAddress pSAREA = MAP_FAILED;
+ char *BusID;
+ __GLcontextModes *modes;
+ __GLcontextModes *temp;
+@@ -1360,8 +1394,9 @@
+ int status;
+ const char * err_msg;
+ const char * err_extra;
+-
+-
++ memset (&framebuffer, 0, sizeof (framebuffer));
++ framebuffer.base = MAP_FAILED;
++
+ if (!XF86DRIQueryDirectRenderingCapable(dpy, scrn, &directCapable)
+ || !directCapable) {
+ return NULL;
+Index: xc/extras/Mesa/src/mesa/drivers/dri/common/dri_util.h
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/common/dri_util.h:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/common/dri_util.h:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/common/dri_util.h:1.1.1.2 Thu Jul 22 06:51:27 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/common/dri_util.h Wed Dec 15 01:50:57 2004
+@@ -558,8 +558,11 @@
+ driCalculateSwapUsage( __DRIdrawablePrivate *dPriv,
+ int64_t last_swap_ust, int64_t current_ust );
+
++/* Test for the GLX header glx.h */
++#ifndef GLX
+ extern void
+ (*glXGetProcAddress(const GLubyte *procname))( void );
++#endif
+
+ #endif /* GLX_DIRECT_RENDERING */
+
+Index: xc/extras/Mesa/src/mesa/drivers/dri/common/mmio.h
+diff -u /dev/null xc/extras/Mesa/src/mesa/drivers/dri/common/mmio.h:1.1.1.1.2.1
+--- /dev/null Fri Feb 11 21:35:29 2005
++++ xc/extras/Mesa/src/mesa/drivers/dri/common/mmio.h Wed Dec 15 01:50:57 2004
+@@ -0,0 +1,63 @@
++/*
++ * (C) Copyright IBM Corporation 2004
++ * All Rights Reserved.
++ *
++ * 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
++ * on the rights to use, copy, modify, merge, publish, distribute, sub
++ * license, 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 (including the next
++ * paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL
++ * IBM AND/OR THEIR SUPPLIERS 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.
++ */
++
++/**
++ * \file mmio.h
++ * Functions for properly handling memory mapped IO on various platforms.
++ *
++ * \author Ian Romanick <idr@us.ibm.com>
++ */
++
++
++#ifndef MMIO_H
++#define MMIO_H
++
++#include <inttypes.h>
++
++#if defined( __powerpc__ )
++
++static __inline__ uint32_t
++read_MMIO_LE32( volatile void * base, unsigned long offset )
++{
++ volatile void * p = ((volatile char *) base) + offset;
++ uint32_t val;
++
++ __asm__ __volatile__( "lwbrx %0, %1, %2 ; eieio"
++ : "=r" (val)
++ : "b" (base), "r" (offset), "m" (p) );
++ return val;
++}
++
++#else
++
++static __inline__ uint32_t
++read_MMIO_LE32( volatile void * base, unsigned long offset )
++{
++ volatile uint32_t * p = (volatile uint32_t *) (((volatile char *) base) + offset);
++ return LE32_TO_CPU( p[0] );
++}
++
++#endif
++
++#endif /* MMIO_H */
+Index: xc/extras/Mesa/src/mesa/drivers/dri/common/spantmp.h
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/common/spantmp.h:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/common/spantmp.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/common/spantmp.h:1.1.1.1 Wed Jun 16 09:17:56 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/common/spantmp.h Wed Dec 15 01:50:57 2004
+@@ -123,15 +123,29 @@
+
+ HW_WRITE_CLIPLOOP()
+ {
+- for (i=0;i<n;i++)
++ if (mask)
+ {
+- if (mask[i]) {
++ for (i=0;i<n;i++)
++ {
++ if (mask[i]) {
++ const int fy = Y_FLIP(y[i]);
++ if (CLIPPIXEL(x[i],fy))
++ WRITE_RGBA( x[i], fy,
++ rgba[i][0], rgba[i][1],
++ rgba[i][2], rgba[i][3] );
++ }
++ }
++ }
++ else
++ {
++ for (i=0;i<n;i++)
++ {
+ const int fy = Y_FLIP(y[i]);
+ if (CLIPPIXEL(x[i],fy))
+ WRITE_RGBA( x[i], fy,
+ rgba[i][0], rgba[i][1],
+ rgba[i][2], rgba[i][3] );
+- }
++ }
+ }
+ }
+ HW_ENDCLIPLOOP();
+@@ -160,9 +174,17 @@
+ {
+ GLint i = 0;
+ CLIPSPAN(x,y,n,x1,n1,i);
+- for (;n1>0;i++,x1++,n1--)
+- if (mask[i])
++ if (mask)
++ {
++ for (;n1>0;i++,x1++,n1--)
++ if (mask[i])
++ WRITE_PIXEL( x1, y, p );
++ }
++ else
++ {
++ for (;n1>0;i++,x1++,n1--)
+ WRITE_PIXEL( x1, y, p );
++ }
+ }
+ HW_ENDCLIPLOOP();
+ }
+@@ -186,12 +208,23 @@
+
+ HW_WRITE_CLIPLOOP()
+ {
+- for (i=0;i<n;i++)
+- if (mask[i]) {
++ if (mask)
++ {
++ for (i=0;i<n;i++)
++ if (mask[i]) {
++ int fy = Y_FLIP(y[i]);
++ if (CLIPPIXEL( x[i], fy ))
++ WRITE_PIXEL( x[i], fy, p );
++ }
++ }
++ else
++ {
++ for (i=0;i<n;i++) {
+ int fy = Y_FLIP(y[i]);
+ if (CLIPPIXEL( x[i], fy ))
+ WRITE_PIXEL( x[i], fy, p );
+ }
++ }
+ }
+ HW_ENDCLIPLOOP();
+ }
+@@ -238,12 +271,23 @@
+
+ HW_READ_CLIPLOOP()
+ {
+- for (i=0;i<n;i++)
+- if (mask[i]) {
++ if (mask)
++ {
++ for (i=0;i<n;i++)
++ if (mask[i]) {
++ int fy = Y_FLIP( y[i] );
++ if (CLIPPIXEL( x[i], fy ))
++ READ_RGBA( rgba[i], x[i], fy );
++ }
++ }
++ else
++ {
++ for (i=0;i<n;i++) {
+ int fy = Y_FLIP( y[i] );
+ if (CLIPPIXEL( x[i], fy ))
+ READ_RGBA( rgba[i], x[i], fy );
+ }
++ }
+ }
+ HW_ENDCLIPLOOP();
+ }
+Index: xc/extras/Mesa/src/mesa/drivers/dri/common/xmlconfig.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/common/xmlconfig.c:1.1.1.3 xc/extras/Mesa/src/mesa/drivers/dri/common/xmlconfig.c:1.1.1.3.2.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/common/xmlconfig.c:1.1.1.3 Thu Aug 12 23:05:42 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/common/xmlconfig.c Wed Dec 15 01:50:57 2004
+@@ -49,6 +49,10 @@
+ #undef GET_PROGRAM_NAME
+
+ #if (defined(__GNU_LIBRARY__) || defined(__GLIBC__)) && !defined(__UCLIBC__)
++# if !defined(__GLIBC__) || (__GLIBC__ < 2)
++/* These aren't declared in any libc5 header */
++extern char *program_invocation_name, *program_invocation_short_name;
++# endif
+ # define GET_PROGRAM_NAME() program_invocation_short_name
+ #elif defined(__FreeBSD__) && (__FreeBSD__ >= 2)
+ # include <osreldate.h>
+@@ -256,7 +260,7 @@
+ string = numStart;
+
+ /* scale of the first digit */
+- scale = sign * powf (10.0f, (GLfloat)(pointPos-1 + exponent));
++ scale = sign * (GLfloat)pow (10.0, (GLdouble)(pointPos-1 + exponent));
+
+ /* second pass: parse digits */
+ do {
+Index: xc/extras/Mesa/src/mesa/drivers/dri/common/xmlpool.h
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/common/xmlpool.h:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/common/xmlpool.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/common/xmlpool.h:1.1.1.1 Wed Jun 16 09:17:57 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/common/xmlpool.h Wed Dec 15 01:50:57 2004
+@@ -273,4 +273,25 @@
+ DRI_CONF_DESC(de,"Anzahl der Textureinheiten") \
+ DRI_CONF_OPT_END
+
++/* Options for features that are not done in hardware by the driver (like GL_ARB_vertex_program
++ On cards where there is no documentation (r200) or on rasterization-only hardware). */
++#define DRI_CONF_SECTION_SOFTWARE \
++DRI_CONF_SECTION_BEGIN \
++ DRI_CONF_DESC(de,"Funktionalität, die nicht durch die Hardware beschleunigt wird") \
++ DRI_CONF_DESC(en,"Features that are not hardware-accelerated")
++
++#define DRI_CONF_ARB_VERTEX_PROGRAM(def) \
++DRI_CONF_OPT_BEGIN(arb_vertex_program,bool,def) \
++ DRI_CONF_DESC(de,"GL_ARB_vertex_program aktivieren") \
++ DRI_CONF_DESC(en,"Enable GL_ARB_vertex_program") \
++ DRI_CONF_DESC(fr,"Activer GL_ARB_vertex_program") \
++DRI_CONF_OPT_END
++
++#define DRI_CONF_NV_VERTEX_PROGRAM(def) \
++DRI_CONF_OPT_BEGIN(nv_vertex_program,bool,def) \
++ DRI_CONF_DESC(de,"GL_NV_vertex_program aktivieren") \
++ DRI_CONF_DESC(en,"Enable GL_NV_vertex_program") \
++ DRI_CONF_DESC(fr,"Activer GL_NV_vertex_program") \
++DRI_CONF_OPT_END
++
+ #endif
+Index: xc/extras/Mesa/src/mesa/drivers/dri/dri_client/Makefile
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/dri_client/Makefile:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/dri_client/Makefile:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/dri_client/Makefile:1.1.1.1 Wed Jun 16 09:18:31 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/dri_client/Makefile Wed Dec 15 01:50:57 2004
+@@ -53,6 +53,6 @@
+
+ # Remove .o and backup files
+ clean:
+- -rm -f *.o */*.o *~ *.so *.a
++ -rm -f *.o */*.o *~ *.so *.a depend depend.bak
+
+ include depend
+Index: xc/extras/Mesa/src/mesa/drivers/dri/ffb/ffb_vtxfmt.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/ffb/ffb_vtxfmt.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/ffb/ffb_vtxfmt.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/ffb/ffb_vtxfmt.c:1.1.1.1 Wed Jun 16 09:18:00 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/ffb/ffb_vtxfmt.c Wed Dec 15 01:50:57 2004
+@@ -161,13 +161,13 @@
+ static void ffb_choose_Normal3f(GLfloat x, GLfloat y, GLfloat z)
+ {
+ choose_normals();
+- glNormal3f(x, y, z);
++ GL_CALL(Normal3f)(x, y, z);
+ }
+
+ static void ffb_choose_Normal3fv(const GLfloat *v)
+ {
+ choose_normals();
+- glNormal3fv(v);
++ GL_CALL(Normal3fv)(v);
+ }
+
+ /* Vertex functions: */
+@@ -267,13 +267,13 @@
+ * correctly:
+ */
+ if (fmesa->imm.prim != PRIM_OUTSIDE_BEGIN_END )
+- glBegin(fmesa->imm.prim);
++ GL_CALL(Begin)(fmesa->imm.prim);
+
+ if (ctx->Light.Enabled) {
+- glColor4fv(ctx->Current.Color); /* Catch ColorMaterial */
+- glNormal3fv(current->normal);
++ GL_CALL(Color4fv)(ctx->Current.Color); /* Catch ColorMaterial */
++ GL_CALL(Normal3fv)(current->normal);
+ } else {
+- glColor4fv(current->color);
++ GL_CALL(Color4fv)(current->color);
+ }
+ }
+
+Index: xc/extras/Mesa/src/mesa/drivers/dri/i810/Makefile
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/i810/Makefile:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/i810/Makefile:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/i810/Makefile:1.1.1.1 Wed Jun 16 09:18:05 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/i810/Makefile Wed Dec 15 01:50:57 2004
+@@ -15,7 +15,8 @@
+ ../common/texmem.c \
+ ../common/vblank.c \
+ ../common/dri_util.c \
+- ../common/glcontextmodes.c
++ ../common/glcontextmodes.c \
++ ../common/xmlconfig.c
+
+ DRIVER_SOURCES = \
+ i810context.c \
+Index: xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_context.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_context.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_context.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_context.c:1.1.1.2 Thu Jul 22 06:52:15 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_context.c Wed Dec 15 01:50:58 2004
+@@ -38,54 +38,12 @@
+ * Mesa's Driver Functions
+ ***************************************/
+
+-/* This is the extension list explicitly enabled by the client and
+- * excludes functionality available in Mesa and also excludes legacy
+- * extensions. It is recognized that in an open source driver, those
+- * extensions will probably be re-enabled.
+- */
+-static const GLubyte *i830GetString( GLcontext *ctx, GLenum name )
++static const char * const card_extensions[] =
+ {
+-#if 0
+- if (name == GL_EXTENSIONS)
+- return
+- "GL_ARB_multitexture "
+- "GL_ARB_texture_border_clamp "
+- "GL_ARB_texture_compression "
+- "GL_ARB_texture_env_add "
+- "GL_ARB_texture_env_combine "
+- "GL_ARB_texture_env_dot3 "
+- "GL_ARB_texture_mirrored_repeat "
+- "GL_ARB_transpose_matrix "
+- "GL_ARB_vertex_buffer_object "
+- "GL_ARB_vertex_program "
+- "GL_ARB_window_pos "
+- "GL_EXT_abgr "
+- "GL_EXT_bgra "
+- "GL_EXT_blend_color "
+- "GL_EXT_blend_func_separate "
+- "GL_EXT_blend_minmax "
+- "GL_EXT_blend_subtract "
+- "GL_EXT_clip_volume_hint "
+- "GL_EXT_compiled_vertex_array "
+- "GL_EXT_draw_range_elements "
+- "GL_EXT_fog_coord "
+- "GL_EXT_multi_draw_arrays "
+- "GL_EXT_packed_pixels "
+- "GL_EXT_rescale_normal "
+- "GL_EXT_secondary_color "
+- "GL_EXT_separate_specular_color "
+- "GL_EXT_stencil_wrap "
+- "GL_EXT_texture_env_add "
+- "GL_EXT_texture_env_combine "
+- "GL_EXT_texture_filter_anisotropic "
+- "GL_IBM_texture_mirrored_repeat "
+- "GL_MESA_ycbcr_texture "
+- "GL_MESA_window_pos "
+- "GL_NV_texgen_reflection "
+- "GL_SGIS_generate_mipmap ";
+-#endif
+- return intelGetString( ctx, name );
+-}
++ "GL_ARB_texture_env_crossbar",
++ "GL_NV_blend_square",
++ NULL
++};
+
+
+ static void i830InitDriverFunctions( struct dd_function_table *functions )
+@@ -93,7 +51,6 @@
+ intelInitDriverFunctions( functions );
+ i830InitStateFuncs( functions );
+ i830InitTextureFuncs( functions );
+- functions->GetString = i830GetString;
+ }
+
+
+@@ -142,7 +99,7 @@
+ 4,
+ 11, /* max 2D texture size is 2048x2048 */
+ 8, /* max 3D texture size is 256^3 */
+- 0, /* max CUBE. not supported */
++ 10, /* max CUBE texture size is 1024x1024 */
+ 11, /* max RECT. supported */
+ 12,
+ GL_FALSE );
+@@ -153,6 +110,8 @@
+
+ intel->verts = TNL_CONTEXT(ctx)->clipspace.vertex_buf;
+
++ driInitExtensions( ctx, card_extensions, GL_FALSE );
++
+ i830InitState( i830 );
+
+
+Index: xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_context.h
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_context.h:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_context.h:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_context.h:1.1.1.2 Thu Jul 22 06:52:15 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_context.h Wed Dec 15 01:50:58 2004
+@@ -89,8 +89,9 @@
+ #define I830_TEXREG_TM0S2 3
+ #define I830_TEXREG_TM0S3 4
+ #define I830_TEXREG_TM0S4 5
+-#define I830_TEXREG_MCS 6 /* _3DSTATE_MAP_COORD_SETS */
+-#define I830_TEX_SETUP_SIZE 7
++#define I830_TEXREG_MCS 6 /* _3DSTATE_MAP_COORD_SETS */
++#define I830_TEXREG_CUBE 7 /* _3DSTATE_MAP_SUBE */
++#define I830_TEX_SETUP_SIZE 8
+
+ #define I830_TEXBLEND_SIZE 12 /* (4 args + op) * 2 + COLOR_FACTOR */
+
+@@ -169,12 +170,9 @@
+
+ /* i830_texblend.c
+ */
+-extern GLuint
+-i830SetBlend_GL1_2(i830ContextPtr i830, int unit,
+- GLenum envMode, GLenum format,
+- GLuint texel_op,
+- GLuint *state,
+- const GLfloat *envcolor );
++extern GLuint i830SetTexEnvCombine(i830ContextPtr i830,
++ const struct gl_tex_env_combine_state * combine, GLint blendUnit,
++ GLuint texel_op, GLuint *state, const GLfloat *factor );
+
+ extern void
+ i830EmitTextureBlend( i830ContextPtr i830 );
+Index: xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_metaops.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_metaops.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_metaops.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_metaops.c:1.1.1.2 Thu Jul 22 06:52:15 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_metaops.c Wed Dec 15 01:50:58 2004
+@@ -163,10 +163,17 @@
+ */
+ static void set_no_texture( i830ContextPtr i830 )
+ {
+- i830->meta.TexBlendWordsUsed[0] =
+- i830SetBlend_GL1_2( i830, 0, GL_NONE, 0,
+- TEXBLENDARG_TEXEL0,
+- i830->meta.TexBlend[0], 0 );
++ static const struct gl_tex_env_combine_state comb = {
++ GL_NONE, GL_NONE,
++ { GL_TEXTURE, 0, 0, }, { GL_TEXTURE, 0, 0, },
++ { GL_SRC_COLOR, 0, 0 }, { GL_SRC_ALPHA, 0, 0 },
++ 0, 0, 0, 0
++ };
++
++ i830->meta.TexBlendWordsUsed[0] =
++ i830SetTexEnvCombine( i830, & comb, 0, TEXBLENDARG_TEXEL0,
++ i830->meta.TexBlend[0], NULL);
++
+ i830->meta.TexBlend[0][0] |= TEXOP_LAST_STAGE;
+ i830->meta.emitted &= ~I830_UPLOAD_TEXBLEND(0);
+ }
+@@ -177,10 +184,17 @@
+ static void enable_texture_blend_replace( i830ContextPtr i830,
+ GLenum format )
+ {
+- i830->meta.TexBlendWordsUsed[0] =
+- i830SetBlend_GL1_2( i830, 0, GL_REPLACE, format,
+- TEXBLENDARG_TEXEL0,
+- i830->meta.TexBlend[0], 0 );
++ static const struct gl_tex_env_combine_state comb = {
++ GL_REPLACE, GL_REPLACE,
++ { GL_TEXTURE, 0, 0, }, { GL_TEXTURE, 0, 0, },
++ { GL_SRC_COLOR, 0, 0 }, { GL_SRC_ALPHA, 0, 0 },
++ 0, 0, 1, 1
++ };
++
++ i830->meta.TexBlendWordsUsed[0] =
++ i830SetTexEnvCombine( i830, & comb, 0, TEXBLENDARG_TEXEL0,
++ i830->meta.TexBlend[0], NULL);
++
+ i830->meta.TexBlend[0][0] |= TEXOP_LAST_STAGE;
+ i830->meta.emitted &= ~I830_UPLOAD_TEXBLEND(0);
+
+Index: xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_reg.h
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_reg.h:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_reg.h:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_reg.h:1.1.1.2 Thu Jul 22 06:52:15 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_reg.h Wed Dec 15 01:50:58 2004
+@@ -637,6 +637,7 @@
+
+ #define TM0S2_PITCH_SHIFT 21
+ #define TM0S2_CUBE_FACE_ENA_SHIFT 15
++#define TM0S2_CUBE_FACE_ENA_MASK (1<<15)
+ #define TM0S2_MAP_FORMAT (1<<14)
+ #define TM0S2_VERTICAL_LINE_STRIDE (1<<13)
+ #define TM0S2_VERITCAL_LINE_STRIDE_OFF (1<<12)
+Index: xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_state.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_state.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_state.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_state.c:1.1.1.2 Thu Jul 22 06:52:15 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_state.c Wed Dec 15 01:50:58 2004
+@@ -263,11 +263,15 @@
+ ALPHA_REF_VALUE(refInt));
+ }
+
+-/* This function makes sure that the proper enables are
+- * set for LogicOp, Independant Alpha Blend, and Blending.
+- * It needs to be called from numerous places where we
++/**
++ * Makes sure that the proper enables are set for LogicOp, Independant Alpha
++ * Blend, and Blending. It needs to be called from numerous places where we
+ * could change the LogicOp or Independant Alpha Blend without subsequent
+ * calls to glEnable.
++ *
++ * \todo
++ * This function is substantially different from the old i830-specific driver.
++ * I'm not sure which is correct.
+ */
+ static void i830EvalLogicOpBlendState(GLcontext *ctx)
+ {
+@@ -310,48 +314,16 @@
+ i830->state.Ctx[I830_CTXREG_BLENDCOLOR1] = (a<<24) | (r<<16) | (g<<8) | b;
+ }
+
+-static void i830BlendEquationSeparate(GLcontext *ctx, GLenum modeRGB,
+- GLenum modeA)
+-{
+- i830ContextPtr i830 = I830_CONTEXT(ctx);
+- int func = ENABLE_ALPHA_BLENDFUNC;
+-
+- assert( modeRGB == modeA );
+-
+- if (INTEL_DEBUG&DEBUG_DRI)
+- fprintf(stderr, "%s %s\n", __FUNCTION__,
+- _mesa_lookup_enum_by_nr(modeRGB));
+-
+- /* This will catch a logicop blend equation */
+- i830EvalLogicOpBlendState(ctx);
+-
+- switch(modeRGB) {
+- case GL_FUNC_ADD:
+- func |= BLENDFUNC_ADD;
+- break;
+- case GL_MIN:
+- func |= BLENDFUNC_MIN;
+- break;
+- case GL_MAX:
+- func |= BLENDFUNC_MAX;
+- break;
+- case GL_FUNC_SUBTRACT:
+- func |= BLENDFUNC_SUB;
+- break;
+- case GL_FUNC_REVERSE_SUBTRACT:
+- func |= BLENDFUNC_RVRSE_SUB;
+- break;
+- case GL_LOGIC_OP:
+- default: return;
+- }
+-
+- I830_STATECHANGE(i830, I830_UPLOAD_CTX);
+- i830->state.Ctx[I830_CTXREG_STATE1] &= ~BLENDFUNC_MASK;
+- i830->state.Ctx[I830_CTXREG_STATE1] |= func;
+-}
+-
+-
+
++/**
++ * Calculate the hardware blend factor setting. This same function is used
++ * for source and destination of both alpha and RGB.
++ *
++ * \returns
++ * The hardware register value for the specified blend factor. This value
++ * will need to be shifted into the correct position for either source or
++ * destination factor.
++ */
+ static int translate_blend_factor( GLenum factor )
+ {
+ switch(factor) {
+@@ -390,35 +362,89 @@
+ }
+ }
+
+-static void i830BlendFuncSeparate(GLcontext *ctx, GLenum sfactorRGB,
+- GLenum dfactorRGB, GLenum sfactorA,
+- GLenum dfactorA )
++
++/**
++ * Sets both the blend equation (called "function" in i830 docs) and the
++ * blend function (called "factor" in i830 docs). This is done in a single
++ * function because some blend equations (i.e., \c GL_MIN and \c GL_MAX)
++ * change the interpretation of the blend function.
++ */
++static void i830_set_blend_state( GLcontext * ctx )
+ {
+ i830ContextPtr i830 = I830_CONTEXT(ctx);
+- int iab = i830->state.Ctx[I830_CTXREG_IALPHAB];
+- int s1 = i830->state.Ctx[I830_CTXREG_STATE1];
++ int funcA;
++ int funcRGB;
++ int eqnA;
++ int eqnRGB;
++ int iab;
++ int s1;
+
+- if (INTEL_DEBUG&DEBUG_DRI)
+- fprintf(stderr, "%s\n", __FUNCTION__);
+
++ funcRGB = SRC_BLND_FACT( translate_blend_factor( ctx->Color.BlendSrcRGB ) )
++ | DST_BLND_FACT( translate_blend_factor( ctx->Color.BlendDstRGB ) );
+
+- iab &= ~(SRC_DST_ABLEND_MASK|ENABLE_INDPT_ALPHA_BLEND);
+- s1 &= ~SRC_DST_BLND_MASK;
+-
+- iab |= (ENABLE_SRC_ABLEND_FACTOR|ENABLE_DST_ABLEND_FACTOR);
+- s1 |= (ENABLE_SRC_BLND_FACTOR|ENABLE_DST_BLND_FACTOR);
++ switch(ctx->Color.BlendEquationRGB) {
++ case GL_FUNC_ADD:
++ eqnRGB = BLENDFUNC_ADD;
++ break;
++ case GL_MIN:
++ eqnRGB = BLENDFUNC_MIN;
++ funcRGB = SRC_BLND_FACT(BLENDFACT_ONE) | DST_BLND_FACT(BLENDFACT_ONE);
++ break;
++ case GL_MAX:
++ eqnRGB = BLENDFUNC_MAX;
++ funcRGB = SRC_BLND_FACT(BLENDFACT_ONE) | DST_BLND_FACT(BLENDFACT_ONE);
++ break;
++ case GL_FUNC_SUBTRACT:
++ eqnRGB = BLENDFUNC_SUB;
++ break;
++ case GL_FUNC_REVERSE_SUBTRACT:
++ eqnRGB = BLENDFUNC_RVRSE_SUB;
++ break;
++ default:
++ fprintf( stderr, "[%s:%u] Invalid RGB blend equation (0x%04x).\n",
++ __func__, __LINE__, ctx->Color.BlendEquationRGB );
++ return;
++ }
++
++
++ funcA = SRC_ABLEND_FACT( translate_blend_factor( ctx->Color.BlendSrcA ) )
++ | DST_ABLEND_FACT( translate_blend_factor( ctx->Color.BlendDstA ) );
+
+- if (ctx->Color.BlendEquationRGB == GL_MIN ||
+- ctx->Color.BlendEquationRGB == GL_MAX) {
+- sfactorA = sfactorRGB = dfactorA = dfactorRGB = GL_ONE;
++ switch(ctx->Color.BlendEquationA) {
++ case GL_FUNC_ADD:
++ eqnA = BLENDFUNC_ADD;
++ break;
++ case GL_MIN:
++ eqnA = BLENDFUNC_MIN;
++ funcA = SRC_BLND_FACT(BLENDFACT_ONE) | DST_BLND_FACT(BLENDFACT_ONE);
++ break;
++ case GL_MAX:
++ eqnA = BLENDFUNC_MAX;
++ funcA = SRC_BLND_FACT(BLENDFACT_ONE) | DST_BLND_FACT(BLENDFACT_ONE);
++ break;
++ case GL_FUNC_SUBTRACT:
++ eqnA = BLENDFUNC_SUB;
++ break;
++ case GL_FUNC_REVERSE_SUBTRACT:
++ eqnA = BLENDFUNC_RVRSE_SUB;
++ break;
++ default:
++ fprintf( stderr, "[%s:%u] Invalid alpha blend equation (0x%04x).\n",
++ __func__, __LINE__, ctx->Color.BlendEquationA );
++ return;
+ }
+
+- iab |= SRC_ABLEND_FACT(translate_blend_factor(sfactorA));
+- iab |= DST_ABLEND_FACT(translate_blend_factor(dfactorA));
+- s1 |= SRC_BLND_FACT(translate_blend_factor(sfactorRGB));
+- s1 |= DST_BLND_FACT(translate_blend_factor(dfactorRGB));
++ iab = eqnA | funcA
++ | _3DSTATE_INDPT_ALPHA_BLEND_CMD
++ | ENABLE_SRC_ABLEND_FACTOR | ENABLE_DST_ABLEND_FACTOR
++ | ENABLE_ALPHA_BLENDFUNC;
++ s1 = eqnRGB | funcRGB
++ | _3DSTATE_MODES_1_CMD
++ | ENABLE_SRC_BLND_FACTOR | ENABLE_DST_BLND_FACTOR
++ | ENABLE_COLR_BLND_FUNC;
+
+- if (sfactorA != sfactorRGB || dfactorA != dfactorRGB)
++ if ( (eqnA | funcA) != (eqnRGB | funcRGB) )
+ iab |= ENABLE_INDPT_ALPHA_BLEND;
+ else
+ iab |= DISABLE_INDPT_ALPHA_BLEND;
+@@ -429,6 +455,54 @@
+ i830->state.Ctx[I830_CTXREG_IALPHAB] = iab;
+ i830->state.Ctx[I830_CTXREG_STATE1] = s1;
+ }
++
++ /* This will catch a logicop blend equation. It will also ensure
++ * independant alpha blend is really in the correct state (either enabled
++ * or disabled) if blending is already enabled.
++ */
++
++ i830EvalLogicOpBlendState(ctx);
++
++ if (0) {
++ fprintf(stderr, "[%s:%u] STATE1: 0x%08x IALPHAB: 0x%08x blend is %sabled\n",
++ __func__, __LINE__,
++ i830->state.Ctx[I830_CTXREG_STATE1],
++ i830->state.Ctx[I830_CTXREG_IALPHAB],
++ (ctx->Color.BlendEnabled) ? "en" : "dis");
++ }
++}
++
++
++static void i830BlendEquationSeparate(GLcontext *ctx, GLenum modeRGB,
++ GLenum modeA)
++{
++ if (INTEL_DEBUG&DEBUG_DRI)
++ fprintf(stderr, "%s -> %s, %s\n", __FUNCTION__,
++ _mesa_lookup_enum_by_nr(modeRGB),
++ _mesa_lookup_enum_by_nr(modeA));
++
++ (void) modeRGB;
++ (void) modeA;
++ i830_set_blend_state( ctx );
++}
++
++
++static void i830BlendFuncSeparate(GLcontext *ctx, GLenum sfactorRGB,
++ GLenum dfactorRGB, GLenum sfactorA,
++ GLenum dfactorA )
++{
++ if (INTEL_DEBUG&DEBUG_DRI)
++ fprintf(stderr, "%s -> RGB(%s, %s) A(%s, %s)\n", __FUNCTION__,
++ _mesa_lookup_enum_by_nr(sfactorRGB),
++ _mesa_lookup_enum_by_nr(dfactorRGB),
++ _mesa_lookup_enum_by_nr(sfactorA),
++ _mesa_lookup_enum_by_nr(dfactorA));
++
++ (void) sfactorRGB;
++ (void) dfactorRGB;
++ (void) sfactorA;
++ (void) dfactorA;
++ i830_set_blend_state( ctx );
+ }
+
+
+Index: xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_texblend.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_texblend.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_texblend.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_texblend.c:1.1.1.2 Thu Jul 22 06:52:15 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_texblend.c Wed Dec 15 01:50:58 2004
+@@ -113,640 +113,35 @@
+ }
+
+
+-GLuint i830SetBlend_GL1_2(i830ContextPtr i830, int blendUnit,
+- GLenum envMode, GLenum format, GLuint texel_op,
+- GLuint *state, const GLfloat *factor)
++/**
++ * Calculate the hardware instuctions to setup the current texture enviromnemt
++ * settings. Since \c gl_texture_unit::_CurrentCombine is used, both
++ * "classic" texture enviroments and GL_ARB_texture_env_combine type texture
++ * environments are treated identically.
++ *
++ * \todo
++ * This function should return \c GLboolean. When \c GL_FALSE is returned,
++ * it means that an environment is selected that the hardware cannot do. This
++ * is the way the Radeon and R200 drivers work.
++ *
++ * \todo
++ * Looking at i830_3d_regs.h, it seems the i830 can do part of
++ * GL_ATI_texture_env_combine3. It can handle using \c GL_ONE and
++ * \c GL_ZERO as combine inputs (which the code already supports). It can
++ * also handle the \c GL_MODULATE_ADD_ATI mode. Is it worth investigating
++ * partial support for the extension?
++ */
++GLuint
++i830SetTexEnvCombine(i830ContextPtr i830,
++ const struct gl_tex_env_combine_state * combine,
++ GLint blendUnit,
++ GLuint texel_op,
++ GLuint *state,
++ const GLfloat *factor )
+ {
+- if(INTEL_DEBUG&DEBUG_TEXTURE)
+- fprintf(stderr, "%s %s %s texel_op(0x%x)\n",
+- __FUNCTION__,
+- _mesa_lookup_enum_by_nr(format),
+- _mesa_lookup_enum_by_nr(envMode),
+- texel_op);
+-
+- switch(envMode) {
+- case GL_REPLACE:
+- switch(format) {
+- case GL_ALPHA:
+- state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- DISABLE_TEX_CNTRL_STAGE |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_ARG1);
+- state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_ARG1);
+- state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_CURRENT);
+- state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- texel_op);
+- return 4;
+-
+- case GL_LUMINANCE:
+- case GL_RGB:
+- case GL_YCBCR_MESA:
+- state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- DISABLE_TEX_CNTRL_STAGE |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_ARG1);
+- state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_ARG1);
+- state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- texel_op);
+- state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_CURRENT);
+- return 4;
+-
+- case GL_INTENSITY:
+- case GL_LUMINANCE_ALPHA:
+- case GL_RGBA:
+- state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- DISABLE_TEX_CNTRL_STAGE |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_ARG1);
+- state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_ARG1);
+- state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- texel_op);
+- state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- texel_op);
+- return 4;
+-
+- default:
+- /* Always set to passthru if something is funny */
+- return pass_through( state, blendUnit );
+- }
+-
+- case GL_MODULATE:
+- switch(format) {
+- case GL_ALPHA:
+- state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- DISABLE_TEX_CNTRL_STAGE |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_ARG1);
+- state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_MODULATE);
+- state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_CURRENT);
+- state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- texel_op);
+- state[4] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- TEXBLEND_ARG2 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_CURRENT);
+- return 5;
+-
+- case GL_LUMINANCE:
+- case GL_RGB:
+- case GL_YCBCR_MESA:
+- state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- DISABLE_TEX_CNTRL_STAGE |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_MODULATE);
+- state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_ARG1);
+- state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- texel_op);
+- state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG2 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_CURRENT);
+- state[4] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_CURRENT);
+- return 5;
+-
+- case GL_INTENSITY:
+- case GL_LUMINANCE_ALPHA:
+- case GL_RGBA:
+- state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- DISABLE_TEX_CNTRL_STAGE |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_MODULATE);
+- state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_MODULATE);
+- state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- texel_op);
+- state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG2 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_CURRENT);
+- state[4] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- texel_op);
+- state[5] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- TEXBLEND_ARG2 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_CURRENT);
+- return 6;
+-
+- default:
+- /* Always set to passthru if something is funny */
+- return pass_through( state, blendUnit );
+- }
+-
+- case GL_DECAL:
+- switch(format) {
+- case GL_RGB:
+- case GL_YCBCR_MESA:
+- state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- DISABLE_TEX_CNTRL_STAGE |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_ARG1);
+- state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_ARG1);
+- state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- texel_op);
+- state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_CURRENT);
+- return 4;
+-
+- case GL_RGBA:
+- state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- DISABLE_TEX_CNTRL_STAGE |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_BLEND);
+- state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_ARG1);
+- state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG0 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_REPLICATE_ALPHA |
+- texel_op);
+- state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- texel_op);
+- state[4] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG2 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_CURRENT);
+- state[5] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_CURRENT);
+- return 6;
+- default:
+- /* Always set to passthru if something is funny */
+- return pass_through( state, blendUnit );
+- }
++ const GLuint numColorArgs = combine->_NumArgsRGB;
++ const GLuint numAlphaArgs = combine->_NumArgsA;
+
+- case GL_BLEND:
+- switch(format) {
+- case GL_ALPHA:
+- state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- DISABLE_TEX_CNTRL_STAGE |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_ARG1);
+- state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_MODULATE);
+- state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_CURRENT);
+- state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- texel_op);
+- state[4] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- TEXBLEND_ARG2 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_CURRENT);
+- return 5;
+-
+- case GL_LUMINANCE:
+- case GL_RGB:
+- case GL_YCBCR_MESA:
+- state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- DISABLE_TEX_CNTRL_STAGE |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_BLEND);
+- state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_ARG1);
+- state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG0 |
+- TEXBLENDARG_MODIFY_PARMS |
+- texel_op);
+- state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_FACTOR_N);
+- state[4] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG2 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_CURRENT);
+- state[5] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_CURRENT);
+- return emit_factor( blendUnit, state, 6, factor );
+-
+- case GL_INTENSITY:
+- state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- DISABLE_TEX_CNTRL_STAGE |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_BLEND);
+- state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_BLEND);
+- state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG0 |
+- TEXBLENDARG_MODIFY_PARMS |
+- texel_op);
+- state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_FACTOR_N);
+- state[4] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG2 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_CURRENT);
+- state[5] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- TEXBLEND_ARG0 |
+- TEXBLENDARG_MODIFY_PARMS |
+- texel_op);
+- state[6] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_FACTOR_N);
+- state[7] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- TEXBLEND_ARG2 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_CURRENT);
+- return emit_factor( blendUnit, state, 8, factor );
+-
+-
+- case GL_LUMINANCE_ALPHA:
+- case GL_RGBA:
+- state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- DISABLE_TEX_CNTRL_STAGE |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_BLEND);
+- state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_MODULATE);
+- state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG0 |
+- TEXBLENDARG_MODIFY_PARMS |
+- texel_op);
+- state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_FACTOR_N);
+- state[4] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG2 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_CURRENT);
+- state[5] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- texel_op);
+- state[6] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- TEXBLEND_ARG2 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_CURRENT);
+- return emit_factor( blendUnit, state, 7, factor );
+-
+- default:
+- /* Always set to passthru if something is funny */
+- return pass_through( state, blendUnit );
+- }
+-
+- case GL_ADD:
+- switch(format) {
+- case GL_ALPHA:
+- state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- DISABLE_TEX_CNTRL_STAGE |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_ARG1);
+- state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_MODULATE);
+- state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_CURRENT);
+- state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- texel_op);
+- state[4] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- TEXBLEND_ARG2 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_CURRENT);
+- return 5;
+-
+- case GL_LUMINANCE:
+- case GL_RGB:
+- case GL_YCBCR_MESA:
+- state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- DISABLE_TEX_CNTRL_STAGE |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_ADD);
+- state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_ARG1);
+- state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- texel_op);
+- state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG2 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_CURRENT);
+- state[4] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_CURRENT);
+- return 5;
+-
+- case GL_INTENSITY:
+- state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- DISABLE_TEX_CNTRL_STAGE |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_ADD);
+- state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_ADD);
+- state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- texel_op);
+- state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG2 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_CURRENT);
+- state[4] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- texel_op);
+- state[5] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- TEXBLEND_ARG2 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_CURRENT);
+- return 6;
+-
+- case GL_LUMINANCE_ALPHA:
+- case GL_RGBA:
+- state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- DISABLE_TEX_CNTRL_STAGE |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_ADD);
+- state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- TEXOP_SCALE_1X |
+- TEXOP_MODIFY_PARMS |
+- TEXBLENDOP_MODULATE);
+- state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- texel_op);
+- state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG2 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_CURRENT);
+- state[4] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- texel_op);
+- state[5] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- TEXBLEND_ARG2 |
+- TEXBLENDARG_MODIFY_PARMS |
+- TEXBLENDARG_CURRENT);
+- return 6;
+-
+- default:
+- /* Always set to passthru if something is funny */
+- return pass_through( state, blendUnit );
+- }
+-
+- default:
+- /* Always set to passthru if something is funny */
+- return pass_through( state, blendUnit );
+- }
+-}
+-
+-static GLuint i830SetTexEnvCombine(i830ContextPtr i830,
+- const struct gl_texture_unit *texUnit,
+- GLint blendUnit,
+- GLuint texel_op,
+- GLuint *state,
+- const GLfloat *factor )
+-{
+ GLuint blendop;
+ GLuint ablendop;
+ GLuint args_RGB[3];
+@@ -755,6 +150,23 @@
+ GLuint alpha_shift;
+ GLboolean need_factor = 0;
+ int i;
++ unsigned used;
++ static const GLuint tex_blend_rgb[3] = {
++ TEXPIPE_COLOR | TEXBLEND_ARG1 | TEXBLENDARG_MODIFY_PARMS,
++ TEXPIPE_COLOR | TEXBLEND_ARG2 | TEXBLENDARG_MODIFY_PARMS,
++ TEXPIPE_COLOR | TEXBLEND_ARG0 | TEXBLENDARG_MODIFY_PARMS,
++ };
++ static const GLuint tex_blend_a[3] = {
++ TEXPIPE_ALPHA | TEXBLEND_ARG1 | TEXBLENDARG_MODIFY_PARMS,
++ TEXPIPE_ALPHA | TEXBLEND_ARG2 | TEXBLENDARG_MODIFY_PARMS,
++ TEXPIPE_ALPHA | TEXBLEND_ARG0 | TEXBLENDARG_MODIFY_PARMS,
++ };
++ static const GLuint op_rgb[4] = {
++ 0,
++ TEXBLENDARG_INV_ARG,
++ TEXBLENDARG_REPLICATE_ALPHA,
++ TEXBLENDARG_REPLICATE_ALPHA | TEXBLENDARG_INV_ARG,
++ };
+
+ if(INTEL_DEBUG&DEBUG_TEXTURE)
+ fprintf(stderr, "%s\n", __FUNCTION__);
+@@ -764,9 +176,9 @@
+ * scale factor, but the ARB version (and the version in OpenGL
+ * 1.3) does.
+ */
+- switch (texUnit->Combine.ModeRGB) {
++ switch (combine->ModeRGB) {
+ case GL_DOT3_RGB_EXT:
+- alpha_shift = texUnit->Combine.ScaleShiftA;
++ alpha_shift = combine->ScaleShiftA;
+ rgb_shift = 0;
+ break;
+
+@@ -776,13 +188,13 @@
+ break;
+
+ default:
+- rgb_shift = texUnit->Combine.ScaleShiftRGB;
+- alpha_shift = texUnit->Combine.ScaleShiftA;
++ rgb_shift = combine->ScaleShiftRGB;
++ alpha_shift = combine->ScaleShiftA;
+ break;
+ }
+
+
+- switch(texUnit->Combine.ModeRGB) {
++ switch(combine->ModeRGB) {
+ case GL_REPLACE:
+ blendop = TEXBLENDOP_ARG1;
+ break;
+@@ -818,10 +230,16 @@
+
+ /* Handle RGB args */
+ for(i = 0; i < 3; i++) {
+- switch(texUnit->Combine.SourceRGB[i]) {
++ switch(combine->SourceRGB[i]) {
+ case GL_TEXTURE:
+ args_RGB[i] = texel_op;
+ break;
++ case GL_TEXTURE0:
++ case GL_TEXTURE1:
++ case GL_TEXTURE2:
++ case GL_TEXTURE3:
++ args_RGB[i] = GetTexelOp( combine->SourceRGB[i] - GL_TEXTURE0 );
++ break;
+ case GL_CONSTANT:
+ args_RGB[i] = TEXBLENDARG_FACTOR_N;
+ need_factor = 1;
+@@ -836,7 +254,7 @@
+ return pass_through( state, blendUnit );
+ }
+
+- switch(texUnit->Combine.OperandRGB[i]) {
++ switch(combine->OperandRGB[i]) {
+ case GL_SRC_COLOR:
+ args_RGB[i] |= 0;
+ break;
+@@ -863,15 +281,15 @@
+ * Note - the global factor is set up with alpha == .5, so
+ * the alpha part of the DOT4 calculation should be zero.
+ */
+- if ( texUnit->Combine.ModeRGB == GL_DOT3_RGBA_EXT ||
+- texUnit->Combine.ModeRGB == GL_DOT3_RGBA ) {
++ if ( combine->ModeRGB == GL_DOT3_RGBA_EXT ||
++ combine->ModeRGB == GL_DOT3_RGBA ) {
+ ablendop = TEXBLENDOP_DOT4;
+ args_A[0] = TEXBLENDARG_FACTOR; /* the global factor */
+ args_A[1] = TEXBLENDARG_FACTOR;
+ args_A[2] = TEXBLENDARG_FACTOR;
+ }
+ else {
+- switch(texUnit->Combine.ModeA) {
++ switch(combine->ModeA) {
+ case GL_REPLACE:
+ ablendop = TEXBLENDOP_ARG1;
+ break;
+@@ -899,10 +317,16 @@
+
+ /* Handle A args */
+ for(i = 0; i < 3; i++) {
+- switch(texUnit->Combine.SourceA[i]) {
++ switch(combine->SourceA[i]) {
+ case GL_TEXTURE:
+ args_A[i] = texel_op;
+ break;
++ case GL_TEXTURE0:
++ case GL_TEXTURE1:
++ case GL_TEXTURE2:
++ case GL_TEXTURE3:
++ args_A[i] = GetTexelOp( combine->SourceA[i] - GL_TEXTURE0 );
++ break;
+ case GL_CONSTANT:
+ args_A[i] = TEXBLENDARG_FACTOR_N;
+ need_factor = 1;
+@@ -917,7 +341,7 @@
+ return pass_through( state, blendUnit );
+ }
+
+- switch(texUnit->Combine.OperandA[i]) {
++ switch(combine->OperandA[i]) {
+ case GL_SRC_ALPHA:
+ args_A[i] |= 0;
+ break;
+@@ -941,59 +365,38 @@
+ */
+
+
+- /* Build color pipeline */
++ /* Build color & alpha pipelines */
+
+- state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- DISABLE_TEX_CNTRL_STAGE |
+- TEXOP_MODIFY_PARMS |
+- blendop);
+- state[1] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- args_RGB[0]);
+- state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG2 |
+- TEXBLENDARG_MODIFY_PARMS |
+- args_RGB[1]);
+- state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_COLOR |
+- TEXBLEND_ARG0 |
+- TEXBLENDARG_MODIFY_PARMS |
+- args_RGB[2]);
+-
+- /* Build Alpha pipeline */
+- state[4] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- ENABLE_TEXOUTPUT_WRT_SEL |
+- TEXOP_OUTPUT_CURRENT |
+- TEXOP_MODIFY_PARMS |
+- ablendop);
+- state[5] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- TEXBLEND_ARG1 |
+- TEXBLENDARG_MODIFY_PARMS |
+- args_A[0]);
+- state[6] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- TEXBLEND_ARG2 |
+- TEXBLENDARG_MODIFY_PARMS |
+- args_A[1]);
+- state[7] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
+- TEXPIPE_ALPHA |
+- TEXBLEND_ARG0 |
+- TEXBLENDARG_MODIFY_PARMS |
+- args_A[2]);
++ used = 0;
++ state[used++] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
++ TEXPIPE_COLOR |
++ ENABLE_TEXOUTPUT_WRT_SEL |
++ TEXOP_OUTPUT_CURRENT |
++ DISABLE_TEX_CNTRL_STAGE |
++ TEXOP_MODIFY_PARMS |
++ blendop);
++ state[used++] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) |
++ TEXPIPE_ALPHA |
++ ENABLE_TEXOUTPUT_WRT_SEL |
++ TEXOP_OUTPUT_CURRENT |
++ TEXOP_MODIFY_PARMS |
++ ablendop);
++
++ for ( i = 0 ; i < numColorArgs ; i++ ) {
++ state[used++] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
++ tex_blend_rgb[i] | args_RGB[i]);
++ }
++
++ for ( i = 0 ; i < numAlphaArgs ; i++ ) {
++ state[used++] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) |
++ tex_blend_a[i] | args_A[i]);
++ }
+
+
+ if (need_factor)
+- return emit_factor( blendUnit, state, 8, factor );
++ return emit_factor( blendUnit, state, used, factor );
+ else
+- return 8;
++ return used;
+ }
+
+
+@@ -1010,17 +413,9 @@
+
+ /* Update i830->state.TexBlend
+ */
+- if (texUnit->EnvMode == GL_COMBINE) {
+- tmp_sz = i830SetTexEnvCombine(i830, texUnit, blendUnit,
+- GetTexelOp(unit), tmp,
+- texUnit->EnvColor );
+- }
+- else {
+- tmp_sz = i830SetBlend_GL1_2(i830, blendUnit, texUnit->EnvMode,
+- t->intel.image[0][0].internalFormat,
+- GetTexelOp(unit), tmp,
+- texUnit->EnvColor );
+- }
++ tmp_sz = i830SetTexEnvCombine(i830, texUnit->_CurrentCombine, blendUnit,
++ GetTexelOp(unit), tmp,
++ texUnit->EnvColor );
+
+ if (last_stage)
+ tmp[0] |= TEXOP_LAST_STAGE;
+Index: xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_texstate.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_texstate.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_texstate.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_texstate.c:1.1.1.2 Thu Jul 22 06:52:15 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_texstate.c Wed Dec 15 01:50:58 2004
+@@ -42,6 +42,19 @@
+ #include "i830_context.h"
+ #include "i830_reg.h"
+
++static const GLint initial_offsets[6][2] = { {0,0},
++ {0,2},
++ {1,0},
++ {1,2},
++ {1,1},
++ {1,3} };
++
++static const GLint step_offsets[6][2] = { {0,2},
++ {0,2},
++ {-1,2},
++ {-1,2},
++ {-1,1},
++ {-1,1} };
+
+ #define I830_TEX_UNIT_ENABLED(unit) (1<<unit)
+
+@@ -133,39 +146,72 @@
+ lastLevel = t->intel.base.lastLevel;
+ numLevels = lastLevel - firstLevel + 1;
+
+- /* Pitch would be subject to additional rules if texture memory were
+- * tiled. Currently it isn't.
+- */
+- if (0) {
+- pitch = 128;
+- while (pitch < tObj->Image[0][firstLevel]->Width * t->intel.texelBytes)
+- pitch *= 2;
+- }
+- else {
+- pitch = tObj->Image[0][firstLevel]->Width * t->intel.texelBytes;
+- pitch = (pitch + 3) & ~3;
+- }
+-
+
+ /* All images must be loaded at this pitch. Count the number of
+ * lines required:
+ */
+- for ( total_height = i = 0 ; i < numLevels ; i++ ) {
+- t->intel.image[0][i].image = tObj->Image[0][firstLevel + i];
+- if (!t->intel.image[0][i].image)
+- break;
++ switch (tObj->Target) {
++ case GL_TEXTURE_CUBE_MAP: {
++ const GLuint dim = tObj->Image[0][firstLevel]->Width;
++ GLuint face;
++
++ pitch = dim * t->intel.texelBytes;
++ pitch *= 2; /* double pitch for cube layouts */
++ pitch = (pitch + 3) & ~3;
+
+- t->intel.image[0][i].offset = total_height * pitch;
+- t->intel.image[0][i].internalFormat = baseImage->Format;
+- if (t->intel.image[0][i].image->IsCompressed)
+- {
+- if (t->intel.image[0][i].image->Height > 4)
+- total_height += t->intel.image[0][i].image->Height/4;
+- else
+- total_height += 1;
+- }
+- else
+- total_height += MAX2(2, t->intel.image[0][i].image->Height);
++ total_height = dim * 4;
++
++ for ( face = 0 ; face < 6 ; face++) {
++ GLuint x = initial_offsets[face][0] * dim;
++ GLuint y = initial_offsets[face][1] * dim;
++ GLuint d = dim;
++
++ t->intel.base.dirty_images[face] = ~0;
++
++ assert(tObj->Image[face][firstLevel]->Width == dim);
++ assert(tObj->Image[face][firstLevel]->Height == dim);
++
++ for (i = 0; i < numLevels; i++) {
++ t->intel.image[face][i].image = tObj->Image[face][firstLevel + i];
++ if (!t->intel.image[face][i].image) {
++ fprintf(stderr, "no image %d %d\n", face, i);
++ break; /* can't happen */
++ }
++
++ t->intel.image[face][i].offset =
++ y * pitch + x * t->intel.texelBytes;
++ t->intel.image[face][i].internalFormat = baseImage->Format;
++
++ d >>= 1;
++ x += step_offsets[face][0] * d;
++ y += step_offsets[face][1] * d;
++ }
++ }
++ break;
++ }
++ default:
++ pitch = tObj->Image[0][firstLevel]->Width * t->intel.texelBytes;
++ pitch = (pitch + 3) & ~3;
++ t->intel.base.dirty_images[0] = ~0;
++
++ for ( total_height = i = 0 ; i < numLevels ; i++ ) {
++ t->intel.image[0][i].image = tObj->Image[0][firstLevel + i];
++ if (!t->intel.image[0][i].image)
++ break;
++
++ t->intel.image[0][i].offset = total_height * pitch;
++ t->intel.image[0][i].internalFormat = baseImage->Format;
++ if (t->intel.image[0][i].image->IsCompressed)
++ {
++ if (t->intel.image[0][i].image->Height > 4)
++ total_height += t->intel.image[0][i].image->Height/4;
++ else
++ total_height += 1;
++ }
++ else
++ total_height += MAX2(2, t->intel.image[0][i].image->Height);
++ }
++ break;
+ }
+
+ t->intel.Pitch = pitch;
+@@ -176,7 +222,8 @@
+ ((tObj->Image[0][firstLevel]->Width - 1) << TM0S1_WIDTH_SHIFT) |
+ textureFormat);
+ t->Setup[I830_TEXREG_TM0S2] =
+- (((pitch / 4) - 1) << TM0S2_PITCH_SHIFT);
++ (((pitch / 4) - 1) << TM0S2_PITCH_SHIFT) |
++ TM0S2_CUBE_FACE_ENA_MASK;
+ t->Setup[I830_TEXREG_TM0S3] &= ~TM0S3_MAX_MIP_MASK;
+ t->Setup[I830_TEXREG_TM0S3] &= ~TM0S3_MIN_MIP_MASK;
+ t->Setup[I830_TEXREG_TM0S3] |= ((numLevels - 1)*4) << TM0S3_MIN_MIP_SHIFT;
+@@ -216,6 +263,7 @@
+ i830->state.Tex[unit][I830_TEXREG_TM0S4] = t->Setup[I830_TEXREG_TM0S4];
+ i830->state.Tex[unit][I830_TEXREG_MCS] = (t->Setup[I830_TEXREG_MCS] &
+ ~MAP_UNIT_MASK);
++ i830->state.Tex[unit][I830_TEXREG_CUBE] = t->Setup[I830_TEXREG_CUBE];
+ i830->state.Tex[unit][I830_TEXREG_MCS] |= MAP_UNIT(unit);
+
+ t->intel.dirty &= ~I830_UPLOAD_TEX(unit);
+@@ -267,9 +315,11 @@
+ mcs &= ~TEXCOORDS_ARE_NORMAL;
+ mcs |= TEXCOORDS_ARE_IN_TEXELUNITS;
+
+- if (mcs != i830->state.Tex[unit][I830_TEXREG_MCS]) {
++ if ((mcs != i830->state.Tex[unit][I830_TEXREG_MCS])
++ || (0 != i830->state.Tex[unit][I830_TEXREG_CUBE])) {
+ I830_STATECHANGE(i830, I830_UPLOAD_TEX(unit));
+ i830->state.Tex[unit][I830_TEXREG_MCS] = mcs;
++ i830->state.Tex[unit][I830_TEXREG_CUBE] = 0;
+ }
+
+ return GL_TRUE;
+@@ -284,15 +334,61 @@
+ mcs &= ~TEXCOORDS_ARE_IN_TEXELUNITS;
+ mcs |= TEXCOORDS_ARE_NORMAL;
+
+- if (mcs != i830->state.Tex[unit][I830_TEXREG_MCS]) {
++ if ((mcs != i830->state.Tex[unit][I830_TEXREG_MCS])
++ || (0 != i830->state.Tex[unit][I830_TEXREG_CUBE])) {
+ I830_STATECHANGE(i830, I830_UPLOAD_TEX(unit));
+ i830->state.Tex[unit][I830_TEXREG_MCS] = mcs;
++ i830->state.Tex[unit][I830_TEXREG_CUBE] = 0;
+ }
+
+ return GL_TRUE;
+ }
+
+
++static GLboolean enable_tex_cube( GLcontext *ctx, GLuint unit )
++{
++ i830ContextPtr i830 = I830_CONTEXT(ctx);
++ struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
++ struct gl_texture_object *tObj = texUnit->_Current;
++ i830TextureObjectPtr t = (i830TextureObjectPtr)tObj->DriverData;
++ GLuint mcs = i830->state.Tex[unit][I830_TEXREG_MCS];
++ const GLuint cube = CUBE_NEGX_ENABLE | CUBE_POSX_ENABLE
++ | CUBE_NEGY_ENABLE | CUBE_POSY_ENABLE
++ | CUBE_NEGZ_ENABLE | CUBE_POSZ_ENABLE;
++ GLuint face;
++
++ mcs &= ~TEXCOORDS_ARE_IN_TEXELUNITS;
++ mcs |= TEXCOORDS_ARE_NORMAL;
++
++ if ((mcs != i830->state.Tex[unit][I830_TEXREG_MCS])
++ || (cube != i830->state.Tex[unit][I830_TEXREG_CUBE])) {
++ I830_STATECHANGE(i830, I830_UPLOAD_TEX(unit));
++ i830->state.Tex[unit][I830_TEXREG_MCS] = mcs;
++ i830->state.Tex[unit][I830_TEXREG_CUBE] = cube;
++ }
++
++ /* Upload teximages (not pipelined)
++ */
++ if ( t->intel.base.dirty_images[0] || t->intel.base.dirty_images[1] ||
++ t->intel.base.dirty_images[2] || t->intel.base.dirty_images[3] ||
++ t->intel.base.dirty_images[4] || t->intel.base.dirty_images[5] ) {
++ i830SetTexImages( i830, tObj );
++ }
++
++ /* upload (per face) */
++ for (face = 0; face < 6; face++) {
++ if (t->intel.base.dirty_images[face]) {
++ if (!intelUploadTexImages( &i830->intel, &t->intel, face )) {
++ return GL_FALSE;
++ }
++ }
++ }
++
++
++ return GL_TRUE;
++}
++
++
+ static GLboolean disable_tex( GLcontext *ctx, GLuint unit )
+ {
+ i830ContextPtr i830 = I830_CONTEXT(ctx);
+@@ -324,20 +420,21 @@
+ INTEL_CONTEXT(ctx)->intelScreen->textureSize < 2048 * 1024)
+ return GL_FALSE;
+
+- if (texUnit->_ReallyEnabled == TEXTURE_1D_BIT ||
+- texUnit->_ReallyEnabled == TEXTURE_2D_BIT) {
++ switch(texUnit->_ReallyEnabled) {
++ case TEXTURE_1D_BIT:
++ case TEXTURE_2D_BIT:
+ return (enable_tex_common( ctx, unit ) &&
+ enable_tex_2d( ctx, unit ));
+- }
+- else if (texUnit->_ReallyEnabled == TEXTURE_RECT_BIT) {
++ case TEXTURE_RECT_BIT:
+ return (enable_tex_common( ctx, unit ) &&
+ enable_tex_rect( ctx, unit ));
+- }
+- else if (texUnit->_ReallyEnabled) {
+- return GL_FALSE;
+- }
+- else {
++ case TEXTURE_CUBE_BIT:
++ return (enable_tex_common( ctx, unit ) &&
++ enable_tex_cube( ctx, unit ));
++ case 0:
+ return disable_tex( ctx, unit );
++ default:
++ return GL_FALSE;
+ }
+ }
+
+Index: xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_vtbl.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_vtbl.c:1.4 xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_vtbl.c:1.4.2.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_vtbl.c:1.4 Thu Sep 2 02:06:03 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_vtbl.c Wed Dec 15 01:50:58 2004
+@@ -87,6 +87,10 @@
+ intel->coloroffset = 3;
+ }
+
++ if (index & _TNL_BIT_POINTSIZE) {
++ EMIT_ATTR( _TNL_ATTRIB_POINTSIZE, EMIT_1F, VFT0_POINT_WIDTH );
++ }
++
+ EMIT_ATTR( _TNL_ATTRIB_COLOR0, EMIT_4UB_4F_BGRA, VFT0_DIFFUSE );
+
+ intel->specoffset = 0;
+@@ -117,11 +121,15 @@
+ switch (sz) {
+ case 1:
+ case 2:
+- case 3: /* XXX: fix for CUBE/VOLUME textures */
+ emit = EMIT_2F;
+ sz = 2;
+ mcs |= TEXCOORDTYPE_CARTESIAN;
+ break;
++ case 3:
++ emit = EMIT_3F;
++ sz = 3;
++ mcs |= TEXCOORDTYPE_VECTOR;
++ break;
+ case 4:
+ emit = EMIT_3F_XYW;
+ sz = 3;
+Index: xc/extras/Mesa/src/mesa/drivers/dri/i915/i915_context.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/i915/i915_context.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/i915/i915_context.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/i915/i915_context.c:1.1.1.2 Thu Jul 22 06:52:16 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/i915/i915_context.c Wed Dec 15 01:50:58 2004
+@@ -45,14 +45,9 @@
+ * Mesa's Driver Functions
+ ***************************************/
+
+-
+ static const char * const card_extensions[] =
+ {
+ "GL_ARB_fragment_program",
+- "GL_ARB_texture_cube_map",
+- "GL_EXT_blend_equation_separate",
+- "GL_ATI_blend_equation_separate",
+- "GL_ARB_point_parameters",
+ NULL
+ };
+
+Index: xc/extras/Mesa/src/mesa/drivers/dri/i915/intel_context.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/i915/intel_context.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/i915/intel_context.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/i915/intel_context.c:1.1.1.2 Thu Jul 22 06:52:17 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/i915/intel_context.c Wed Dec 15 01:50:58 2004
+@@ -72,7 +72,7 @@
+ * Mesa's Driver Functions
+ ***************************************/
+
+-#define DRIVER_DATE "20040528"
++#define DRIVER_DATE "20040919"
+
+ const GLubyte *intelGetString( GLcontext *ctx, GLenum name )
+ {
+@@ -125,58 +125,60 @@
+
+
+
+-/* Extension strings exported by the intel driver.
++/**
++ * Extension strings exported by the intel driver.
+ *
+- * NOTE: See implementation of glGetString in each hw_context.c file:
++ * \note
++ * It appears that ARB_texture_env_crossbar and NV_blend_square have
++ * "disappeared" compared to the old i830-specific driver.
++ *
++ * \note
++ * See implementation of \c glGetString in each hw_context.c file:
+ * This set of extensions is overridden and many are not actually
+ * exported to the driver. They are however enabled internally as
+ * Mesa requires this when calculating things like GL version number.
+ */
+ static const char * const card_extensions[] =
+ {
+- "GL_APPLE_client_storage",
+ "GL_ARB_multisample",
+ "GL_ARB_multitexture",
++ "GL_ARB_point_parameters",
+ "GL_ARB_texture_border_clamp",
++ "GL_ARB_texture_cube_map",
+ "GL_ARB_texture_compression",
+ "GL_ARB_texture_env_add",
+ "GL_ARB_texture_env_combine",
+ "GL_ARB_texture_env_dot3",
+ "GL_ARB_texture_mirrored_repeat",
++ "GL_ARB_texture_rectangle",
++ "GL_ARB_vertex_buffer_object",
+ "GL_ARB_vertex_program",
++ "GL_ARB_window_pos",
++
++ "GL_EXT_abgr",
++ "GL_EXT_bgra",
+ "GL_EXT_blend_color",
++ "GL_EXT_blend_equation_separate",
+ "GL_EXT_blend_func_separate",
+ "GL_EXT_blend_minmax",
+ "GL_EXT_blend_subtract",
+ "GL_EXT_fog_coord",
++ "GL_EXT_multi_draw_arrays",
+ "GL_EXT_secondary_color",
+ "GL_EXT_stencil_wrap",
+ "GL_EXT_texture_edge_clamp",
+- "GL_EXT_texture_env_add",
+ "GL_EXT_texture_env_combine",
+ "GL_EXT_texture_env_dot3",
+ "GL_EXT_texture_filter_anisotropic",
+ "GL_EXT_texture_lod_bias",
+- "GL_IBM_texture_mirrored_repeat",
+- "GL_INGR_blend_func_separate",
++
++ "GL_3DFX_texture_compression_FXT1",
++ "GL_APPLE_client_storage",
+ "GL_MESA_pack_invert",
+ "GL_MESA_ycbcr_texture",
+- "GL_NV_texture_rectangle",
+ "GL_NV_vertex_program",
+-
+-/* New in final:
+- */
+- "GL_ARB_vertex_buffer_object",
+- "GL_ARB_window_pos",
+- "GL_EXT_multi_draw_arrays",
+- "GL_EXT_abgr",
+- "GL_EXT_bgra",
+-
+-
++ "GL_NV_vertex_program1_1",
+ "GL_SGIS_generate_mipmap",
+- "GL_SGIS_texture_border_clamp",
+- "GL_SGIS_texture_edge_clamp",
+- "GL_3DFX_texture_compression_FXT1",
+
+ NULL
+ };
+Index: xc/extras/Mesa/src/mesa/drivers/dri/mga/mga_xmesa.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/mga/mga_xmesa.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/mga/mga_xmesa.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/mga/mga_xmesa.c:1.1.1.2 Thu Jul 22 06:51:39 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/mga/mga_xmesa.c Wed Dec 15 01:50:58 2004
+@@ -59,6 +59,8 @@
+ #include "utils.h"
+ #include "vblank.h"
+
++#include "extensions.h"
++
+ #include "GL/internal/dri_interface.h"
+
+ /* MGA configuration
+@@ -74,8 +76,12 @@
+ DRI_CONF_TEXTURE_DEPTH(DRI_CONF_TEXTURE_DEPTH_FB)
+ DRI_CONF_COLOR_REDUCTION(DRI_CONF_COLOR_REDUCTION_DITHER)
+ DRI_CONF_SECTION_END
++ DRI_CONF_SECTION_SOFTWARE
++ DRI_CONF_ARB_VERTEX_PROGRAM(true)
++ DRI_CONF_NV_VERTEX_PROGRAM(true)
++ DRI_CONF_SECTION_END
+ DRI_CONF_END;
+-static const GLuint __driNConfigOptions = 3;
++static const GLuint __driNConfigOptions = 5;
+
+ #ifdef USE_NEW_INTERFACE
+ static PFNGLXCREATECONTEXTMODES create_context_modes = NULL;
+@@ -420,6 +426,8 @@
+ &_tnl_fog_coordinate_stage,
+ &_tnl_texgen_stage,
+ &_tnl_texture_transform_stage,
++ &_tnl_vertex_program_stage,
++
+ /* REMOVE: point attenuation stage */
+ #if 0
+ &_mga_render_stage, /* ADD: unclipped rastersetup-to-dma */
+@@ -449,8 +457,10 @@
+ {
+ "GL_ARB_multisample",
+ "GL_ARB_texture_compression",
++ "GL_ARB_texture_rectangle",
+ "GL_EXT_blend_logic_op",
+ "GL_EXT_fog_coord",
++ "GL_EXT_multi_draw_arrays",
+ /* paletted_textures currently doesn't work, but we could fix them later */
+ #if 0
+ "GL_EXT_shared_texture_palette",
+@@ -458,10 +468,8 @@
+ #endif
+ "GL_EXT_secondary_color",
+ "GL_EXT_stencil_wrap",
+- "GL_EXT_texture_rectangle",
+ "GL_MESA_ycbcr_texture",
+ "GL_SGIS_generate_mipmap",
+- "GL_SGIS_texture_lod",
+ NULL
+ };
+
+@@ -666,6 +674,16 @@
+ driInitExtensions( ctx, g400_extensions, GL_FALSE );
+ }
+
++ if ( driQueryOptionb( &mmesa->optionCache, "arb_vertex_program" ) ) {
++ _mesa_enable_extension( ctx, "GL_ARB_vertex_program" );
++ }
++
++ if ( driQueryOptionb( &mmesa->optionCache, "nv_vertex_program" ) ) {
++ _mesa_enable_extension( ctx, "GL_NV_vertex_program" );
++ _mesa_enable_extension( ctx, "GL_NV_vertex_program1_1" );
++ }
++
++
+ /* XXX these should really go right after _mesa_init_driver_functions() */
+ mgaDDInitStateFuncs( ctx );
+ mgaDDInitSpanFuncs( ctx );
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r128/Makefile
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r128/Makefile:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/r128/Makefile:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r128/Makefile:1.1.1.1 Wed Jun 16 09:18:13 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r128/Makefile Wed Dec 15 01:50:58 2004
+@@ -28,8 +28,7 @@
+ r128_tris.c \
+ r128_ioctl.c \
+ r128_span.c \
+- r128_texmem.c \
+- r128_vb.c
++ r128_texmem.c
+
+ C_SOURCES = \
+ $(COMMON_SOURCES) \
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_context.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_context.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_context.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_context.c:1.1.1.1 Wed Jun 16 09:18:11 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_context.c Wed Dec 15 01:50:58 2004
+@@ -56,7 +56,6 @@
+ #include "r128_span.h"
+ #include "r128_tex.h"
+ #include "r128_tris.h"
+-#include "r128_vb.h"
+
+ #include "vblank.h"
+ #include "utils.h"
+@@ -180,6 +179,7 @@
+ rmesa->RenderIndex = -1; /* Impossible value */
+ rmesa->vert_buf = NULL;
+ rmesa->num_verts = 0;
++ rmesa->tnl_state = ~0;
+
+ /* Set the maximum texture size small enough that we can guarentee that
+ * all texture units can bind a maximal texture and have them both in
+@@ -243,7 +243,6 @@
+ if (sPriv->drmMinor >= 4)
+ _mesa_enable_extension( ctx, "GL_MESA_ycbcr_texture" );
+
+- r128InitVB( ctx );
+ r128InitTriFuncs( ctx );
+ r128DDInitStateFuncs( ctx );
+ r128DDInitSpanFuncs( ctx );
+@@ -280,8 +279,6 @@
+ _ac_DestroyContext( rmesa->glCtx );
+ _swrast_DestroyContext( rmesa->glCtx );
+
+- r128FreeVB( rmesa->glCtx );
+-
+ /* free the Mesa context */
+ rmesa->glCtx->DriverCtx = NULL;
+ _mesa_destroy_context(rmesa->glCtx);
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_context.h
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_context.h:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_context.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_context.h:1.1.1.1 Wed Jun 16 09:18:11 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_context.h Wed Dec 15 01:50:58 2004
+@@ -43,6 +43,7 @@
+ #include "r128_drm.h"
+
+ #include "mtypes.h"
++#include "tnl/t_vertex.h"
+
+ #include "r128_reg.h"
+
+@@ -81,6 +82,7 @@
+ #define R128_FALLBACK_SEP_SPECULAR 0x0080
+ #define R128_FALLBACK_BLEND_EQ 0x0100
+ #define R128_FALLBACK_BLEND_FUNC 0x0200
++#define R128_FALLBACK_PROJTEX 0x0400
+
+
+ /* Use the templated vertex format:
+@@ -122,18 +124,21 @@
+ GLuint dirty; /* Hardware state to be updated */
+ drm_r128_context_regs_t setup;
+
++ /* Vertex state */
++ GLuint vertex_size;
++ GLuint vertex_format;
++ struct tnl_attr_map vertex_attrs[VERT_ATTRIB_MAX];
++ GLuint vertex_attr_count;
++ char *verts; /* points to tnl->clipspace.vertex_buf */
++ GLuint num_verts;
++ int coloroffset, specoffset;
++ int tnl_state; /* tnl->render_inputs for this _tnl_install_attrs */
++
+ GLuint NewGLState;
+ GLuint Fallback;
+- GLuint SetupIndex;
+- GLuint SetupNewInputs;
+ GLuint RenderIndex;
+ GLfloat hw_viewport[16];
+ GLfloat depth_scale;
+- GLuint vertex_size;
+- GLuint vertex_stride_shift;
+- GLuint vertex_format;
+- GLuint num_verts;
+- GLubyte *verts;
+
+ uint32_t ClearColor; /* Color used to clear color buffer */
+ uint32_t ClearDepth; /* Value used to clear depth buffer */
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_dd.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_dd.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_dd.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_dd.c:1.1.1.1 Wed Jun 16 09:18:11 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_dd.c Wed Dec 15 01:50:58 2004
+@@ -36,14 +36,14 @@
+ #include "r128_context.h"
+ #include "r128_ioctl.h"
+ #include "r128_state.h"
+-#include "r128_vb.h"
+ #include "r128_dd.h"
++#include "swrast/swrast.h"
+
+ #include "context.h"
+
+ #include "utils.h"
+
+-#define DRIVER_DATE "20030328"
++#define DRIVER_DATE "20041001"
+
+
+ /* Return the width and height of the current color buffer.
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_ioctl.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_ioctl.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_ioctl.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_ioctl.c:1.1.1.1 Wed Jun 16 09:18:12 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_ioctl.c Wed Dec 15 01:50:58 2004
+@@ -43,6 +43,7 @@
+ #include "swrast/swrast.h"
+
+ #include "vblank.h"
++#include "mmio.h"
+
+ #define R128_TIMEOUT 2048
+ #define R128_IDLE_RETRY 32
+@@ -225,12 +226,11 @@
+ static int r128WaitForFrameCompletion( r128ContextPtr rmesa )
+ {
+ unsigned char *R128MMIO = rmesa->r128Screen->mmio.map;
+- uint32_t frame;
+ int i;
+ int wait = 0;
+
+ while ( 1 ) {
+- frame = *(volatile unsigned int *)(R128MMIO + R128_LAST_FRAME_REG);
++ uint32_t frame = read_MMIO_LE32( R128MMIO, R128_LAST_FRAME_REG );
+
+ if ( rmesa->sarea->last_frame - frame <= R128_MAX_OUTSTANDING ) {
+ break;
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_ioctl.h
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_ioctl.h:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_ioctl.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_ioctl.h:1.1.1.1 Wed Jun 16 09:18:12 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_ioctl.h Wed Dec 15 01:50:58 2004
+@@ -47,9 +47,11 @@
+ extern drmBufPtr r128GetBufferLocked( r128ContextPtr rmesa );
+ extern void r128FlushVerticesLocked( r128ContextPtr rmesa );
+
+-static __inline void *r128AllocDmaLow( r128ContextPtr rmesa, int bytes )
++static __inline void *r128AllocDmaLow( r128ContextPtr rmesa, int count,
++ int vert_size )
+ {
+ uint32_t *head;
++ int bytes = count * vert_size;
+
+ if ( !rmesa->vert_buf ) {
+ LOCK_HARDWARE( rmesa );
+@@ -64,6 +66,8 @@
+
+ head = (uint32_t *)((char *)rmesa->vert_buf->address + rmesa->vert_buf->used);
+ rmesa->vert_buf->used += bytes;
++ rmesa->num_verts += count;
++
+ return head;
+ }
+
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_lock.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_lock.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_lock.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_lock.c:1.1.1.1 Wed Jun 16 09:18:12 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_lock.c Wed Dec 15 01:50:58 2004
+@@ -104,7 +104,7 @@
+ r128UpdatePageFlipping( rmesa );
+ rmesa->lastStamp = dPriv->lastStamp;
+ rmesa->new_state |= R128_NEW_CLIP;
+- rmesa->SetupNewInputs = ~0;
++ rmesa->tnl_state = ~0;
+ }
+
+ rmesa->dirty |= R128_UPLOAD_CONTEXT | R128_UPLOAD_CLIPRECTS;
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_screen.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_screen.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_screen.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_screen.c:1.1.1.2 Thu Jul 22 06:51:42 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_screen.c Wed Dec 15 01:50:58 2004
+@@ -38,7 +38,6 @@
+ #include "r128_context.h"
+ #include "r128_ioctl.h"
+ #include "r128_tris.h"
+-#include "r128_vb.h"
+
+ #include "context.h"
+ #include "imports.h"
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_state.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_state.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_state.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_state.c:1.1.1.1 Wed Jun 16 09:18:12 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_state.c Wed Dec 15 01:50:58 2004
+@@ -38,7 +38,6 @@
+ #include "r128_state.h"
+ #include "r128_ioctl.h"
+ #include "r128_tris.h"
+-#include "r128_vb.h"
+ #include "r128_tex.h"
+
+ #include "context.h"
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_tex.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_tex.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_tex.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_tex.c:1.1.1.2 Thu Jul 22 06:51:43 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_tex.c Wed Dec 15 01:50:58 2004
+@@ -36,7 +36,6 @@
+ #include "r128_context.h"
+ #include "r128_state.h"
+ #include "r128_ioctl.h"
+-#include "r128_vb.h"
+ #include "r128_tris.h"
+ #include "r128_tex.h"
+ #include "r128_texobj.h"
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_texmem.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_texmem.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_texmem.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_texmem.c:1.1.1.1 Wed Jun 16 09:18:12 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_texmem.c Wed Dec 15 01:50:58 2004
+@@ -36,7 +36,6 @@
+ #include "r128_context.h"
+ #include "r128_state.h"
+ #include "r128_ioctl.h"
+-#include "r128_vb.h"
+ #include "r128_tris.h"
+ #include "r128_tex.h"
+
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_texstate.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_texstate.c:1.1.1.3 xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_texstate.c:1.1.1.3.2.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_texstate.c:1.1.1.3 Sat Aug 28 04:27:25 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_texstate.c Wed Dec 15 01:50:58 2004
+@@ -42,7 +42,6 @@
+ #include "r128_context.h"
+ #include "r128_state.h"
+ #include "r128_ioctl.h"
+-#include "r128_vb.h"
+ #include "r128_tris.h"
+ #include "r128_tex.h"
+
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_tris.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_tris.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_tris.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_tris.c:1.1.1.2 Thu Jul 22 06:51:43 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_tris.c Wed Dec 15 01:50:58 2004
+@@ -47,7 +47,6 @@
+ #include "r128_tris.h"
+ #include "r128_state.h"
+ #include "r128_tex.h"
+-#include "r128_vb.h"
+ #include "r128_ioctl.h"
+
+ static const GLuint hw_prim[GL_POLYGON+1] = {
+@@ -70,84 +69,27 @@
+ /***********************************************************************
+ * Emit primitives as inline vertices *
+ ***********************************************************************/
++
++#define HAVE_QUADS 0
++#define HAVE_LINES 1
++#define HAVE_POINTS 1
++#define HAVE_LE32_VERTS 1
++#define CTX_ARG r128ContextPtr rmesa
++#define CTX_ARG2 rmesa
++#define GET_VERTEX_DWORDS() rmesa->vertex_size
++#define ALLOC_VERTS( n, size ) r128AllocDmaLow( rmesa, (n), (size) * 4 )
++#undef LOCAL_VARS
++#define LOCAL_VARS \
++ r128ContextPtr rmesa = R128_CONTEXT(ctx); \
++ const char *vertptr = rmesa->verts;
++#define VERT(x) (r128Vertex *)(vertptr + ((x) * vertsize * 4))
++#define VERTEX r128Vertex
++#undef TAG
++#define TAG(x) r128_##x
++#include "tnl_dd/t_dd_triemit.h"
++#undef TAG
++#undef LOCAL_VARS
+
+-#if defined(USE_X86_ASM)
+-#define COPY_DWORDS( j, vb, vertsize, v ) \
+-do { \
+- int __tmp; \
+- __asm__ __volatile__( "rep ; movsl" \
+- : "=%c" (j), "=D" (vb), "=S" (__tmp) \
+- : "0" (vertsize), \
+- "D" ((long)vb), \
+- "S" ((long)v) ); \
+-} while (0)
+-#else
+-#define COPY_DWORDS( j, vb, vertsize, v ) \
+-do { \
+- for ( j = 0 ; j < vertsize ; j++ ) \
+- vb[j] = CPU_TO_LE32(((GLuint *)v)[j]); \
+- vb += vertsize; \
+-} while (0)
+-#endif
+-
+-static __inline void r128_draw_quad( r128ContextPtr rmesa,
+- r128VertexPtr v0,
+- r128VertexPtr v1,
+- r128VertexPtr v2,
+- r128VertexPtr v3 )
+-{
+- GLuint vertsize = rmesa->vertex_size;
+- GLuint *vb = (GLuint *)r128AllocDmaLow( rmesa, 6 * vertsize * 4 );
+- GLuint j;
+-
+- rmesa->num_verts += 6;
+- COPY_DWORDS( j, vb, vertsize, v0 );
+- COPY_DWORDS( j, vb, vertsize, v1 );
+- COPY_DWORDS( j, vb, vertsize, v3 );
+- COPY_DWORDS( j, vb, vertsize, v1 );
+- COPY_DWORDS( j, vb, vertsize, v2 );
+- COPY_DWORDS( j, vb, vertsize, v3 );
+-}
+-
+-
+-static __inline void r128_draw_triangle( r128ContextPtr rmesa,
+- r128VertexPtr v0,
+- r128VertexPtr v1,
+- r128VertexPtr v2 )
+-{
+- GLuint vertsize = rmesa->vertex_size;
+- GLuint *vb = (GLuint *)r128AllocDmaLow( rmesa, 3 * vertsize * 4 );
+- GLuint j;
+-
+- rmesa->num_verts += 3;
+- COPY_DWORDS( j, vb, vertsize, v0 );
+- COPY_DWORDS( j, vb, vertsize, v1 );
+- COPY_DWORDS( j, vb, vertsize, v2 );
+-}
+-
+-static __inline void r128_draw_line( r128ContextPtr rmesa,
+- r128VertexPtr v0,
+- r128VertexPtr v1 )
+-{
+- GLuint vertsize = rmesa->vertex_size;
+- GLuint *vb = (GLuint *)r128AllocDmaLow( rmesa, 2 * vertsize * 4 );
+- GLuint j;
+-
+- rmesa->num_verts += 2;
+- COPY_DWORDS( j, vb, vertsize, v0 );
+- COPY_DWORDS( j, vb, vertsize, v1 );
+-}
+-
+-static __inline void r128_draw_point( r128ContextPtr rmesa,
+- r128VertexPtr v0 )
+-{
+- int vertsize = rmesa->vertex_size;
+- GLuint *vb = (GLuint *)r128AllocDmaLow( rmesa, vertsize * 4 );
+- int j;
+-
+- rmesa->num_verts += 1;
+- COPY_DWORDS( j, vb, vertsize, v0 );
+-}
+
+ /***********************************************************************
+ * Macros for t_dd_tritmp.h to draw basic primitives *
+@@ -158,7 +100,7 @@
+ if (DO_FALLBACK) \
+ rmesa->draw_tri( rmesa, a, b, c ); \
+ else \
+- r128_draw_triangle( rmesa, a, b, c ); \
++ r128_triangle( rmesa, a, b, c ); \
+ } while (0)
+
+ #define QUAD( a, b, c, d ) \
+@@ -167,7 +109,7 @@
+ rmesa->draw_tri( rmesa, a, b, d ); \
+ rmesa->draw_tri( rmesa, b, c, d ); \
+ } else \
+- r128_draw_quad( rmesa, a, b, c, d ); \
++ r128_quad( rmesa, a, b, c, d ); \
+ } while (0)
+
+ #define LINE( v0, v1 ) \
+@@ -175,7 +117,7 @@
+ if (DO_FALLBACK) \
+ rmesa->draw_line( rmesa, v0, v1 ); \
+ else \
+- r128_draw_line( rmesa, v0, v1 ); \
++ r128_line( rmesa, v0, v1 ); \
+ } while (0)
+
+ #define POINT( v0 ) \
+@@ -183,7 +125,7 @@
+ if (DO_FALLBACK) \
+ rmesa->draw_point( rmesa, v0 ); \
+ else \
+- r128_draw_point( rmesa, v0 ); \
++ r128_point( rmesa, v0 ); \
+ } while (0)
+
+
+@@ -247,35 +189,40 @@
+ #define VERT_SET_SPEC( v0, c ) \
+ do { \
+ if (havespec) { \
+- UNCLAMPED_FLOAT_TO_UBYTE(v0->v.specular.red, (c)[0]); \
+- UNCLAMPED_FLOAT_TO_UBYTE(v0->v.specular.green, (c)[1]); \
+- UNCLAMPED_FLOAT_TO_UBYTE(v0->v.specular.blue, (c)[2]); \
++ r128_color_t *spec = (r128_color_t *)&((v0)->ui[specoffset]); \
++ UNCLAMPED_FLOAT_TO_UBYTE(spec->red, (c)[0]); \
++ UNCLAMPED_FLOAT_TO_UBYTE(spec->green, (c)[1]); \
++ UNCLAMPED_FLOAT_TO_UBYTE(spec->blue, (c)[2]); \
+ } \
+ } while (0)
+ #define VERT_COPY_SPEC( v0, v1 ) \
+ do { \
+ if (havespec) { \
+- v0->v.specular.red = v1->v.specular.red; \
+- v0->v.specular.green = v1->v.specular.green; \
+- v0->v.specular.blue = v1->v.specular.blue; \
++ r128_color_t *spec0 = (r128_color_t *)&((v0)->ui[specoffset]); \
++ r128_color_t *spec1 = (r128_color_t *)&((v1)->ui[specoffset]); \
++ spec0->red = spec1->red; \
++ spec0->green = spec1->green; \
++ spec0->blue = spec1->blue; \
+ } \
+ } while (0)
+
+-/* These don't need LE32_TO_CPU() as they used to save and restore
++/* These don't need LE32_TO_CPU() as they are used to save and restore
+ * colors which are already in the correct format.
+ */
+ #define VERT_SAVE_RGBA( idx ) color[idx] = v[idx]->ui[coloroffset]
+ #define VERT_RESTORE_RGBA( idx ) v[idx]->ui[coloroffset] = color[idx]
+-#define VERT_SAVE_SPEC( idx ) if (havespec) spec[idx] = v[idx]->ui[5]
+-#define VERT_RESTORE_SPEC( idx ) if (havespec) v[idx]->ui[5] = spec[idx]
++#define VERT_SAVE_SPEC( idx ) if (havespec) spec[idx] = v[idx]->ui[specoffset]
++#define VERT_RESTORE_SPEC( idx ) if (havespec) v[idx]->ui[specoffset] = spec[idx]
+
+
+ #define LOCAL_VARS(n) \
+ r128ContextPtr rmesa = R128_CONTEXT(ctx); \
+ GLuint color[n], spec[n]; \
+- GLuint coloroffset = (rmesa->vertex_size == 4 ? 3 : 4); \
+- GLboolean havespec = (rmesa->vertex_size == 4 ? 0 : 1); \
+- (void) color; (void) spec; (void) coloroffset; (void) havespec;
++ GLuint coloroffset = rmesa->coloroffset; \
++ GLuint specoffset = rmesa->specoffset; \
++ GLboolean havespec = (rmesa->specoffset != 0); \
++ (void) color; (void) spec; (void) specoffset; \
++ (void) coloroffset; (void) havespec;
+
+ /***********************************************************************
+ * Helpers for rendering unfilled primitives *
+@@ -400,9 +347,10 @@
+ {
+ GLcontext *ctx = rmesa->glCtx;
+ SWvertex v[3];
+- r128_translate_vertex( ctx, v0, &v[0] );
+- r128_translate_vertex( ctx, v1, &v[1] );
+- r128_translate_vertex( ctx, v2, &v[2] );
++ _swsetup_Translate( ctx, v0, &v[0] );
++ _swsetup_Translate( ctx, v1, &v[1] );
++ _swsetup_Translate( ctx, v2, &v[2] );
++ /* XXX: SpanRenderStart */
+ _swrast_Triangle( ctx, &v[0], &v[1], &v[2] );
+ }
+
+@@ -414,8 +362,8 @@
+ {
+ GLcontext *ctx = rmesa->glCtx;
+ SWvertex v[2];
+- r128_translate_vertex( ctx, v0, &v[0] );
+- r128_translate_vertex( ctx, v1, &v[1] );
++ _swsetup_Translate( ctx, v0, &v[0] );
++ _swsetup_Translate( ctx, v1, &v[1] );
+ _swrast_Line( ctx, &v[0], &v[1] );
+ }
+
+@@ -426,7 +374,7 @@
+ {
+ GLcontext *ctx = rmesa->glCtx;
+ SWvertex v[1];
+- r128_translate_vertex( ctx, v0, &v[0] );
++ _swsetup_Translate( ctx, v0, &v[0] );
+ _swrast_Point( ctx, &v[0] );
+ }
+
+@@ -436,16 +384,15 @@
+ /* Render unclipped begin/end objects */
+ /**********************************************************************/
+
+-#define VERT(x) (r128Vertex *)(r128verts + (x * vertsize * sizeof(int)))
+ #define RENDER_POINTS( start, count ) \
+ for ( ; start < count ; start++) \
+- r128_draw_point( rmesa, VERT(start) )
++ r128_point( rmesa, VERT(start) )
+ #define RENDER_LINE( v0, v1 ) \
+- r128_draw_line( rmesa, VERT(v0), VERT(v1) )
++ r128_line( rmesa, VERT(v0), VERT(v1) )
+ #define RENDER_TRI( v0, v1, v2 ) \
+- r128_draw_triangle( rmesa, VERT(v0), VERT(v1), VERT(v2) )
++ r128_triangle( rmesa, VERT(v0), VERT(v1), VERT(v2) )
+ #define RENDER_QUAD( v0, v1, v2, v3 ) \
+- r128_draw_quad( rmesa, VERT(v0), VERT(v1), VERT(v2), VERT(v3) )
++ r128_quad( rmesa, VERT(v0), VERT(v1), VERT(v2), VERT(v3) )
+ #define INIT(x) do { \
+ if (0) fprintf(stderr, "%s\n", __FUNCTION__); \
+ r128RenderPrimitive( ctx, x ); \
+@@ -454,7 +401,7 @@
+ #define LOCAL_VARS \
+ r128ContextPtr rmesa = R128_CONTEXT(ctx); \
+ const GLuint vertsize = rmesa->vertex_size; \
+- const char *r128verts = (char *)rmesa->verts; \
++ const char *vertptr = (char *)rmesa->verts; \
+ const GLuint * const elt = TNL_CONTEXT(ctx)->vb.Elts; \
+ (void) elt;
+ #define RESET_STIPPLE
+@@ -471,72 +418,15 @@
+
+
+ /**********************************************************************/
+-/* Render clipped primitives */
+-/**********************************************************************/
+-
+-static void r128RenderClippedPoly( GLcontext *ctx, const GLuint *elts,
+- GLuint n )
+-{
+- TNLcontext *tnl = TNL_CONTEXT(ctx);
+- struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
+-
+- /* Render the new vertices as an unclipped polygon.
+- */
+- {
+- GLuint *tmp = VB->Elts;
+- VB->Elts = (GLuint *)elts;
+- tnl->Driver.Render.PrimTabElts[GL_POLYGON]( ctx, 0, n, PRIM_BEGIN|PRIM_END );
+- VB->Elts = tmp;
+- }
+-}
+-
+-static void r128RenderClippedLine( GLcontext *ctx, GLuint ii, GLuint jj )
+-{
+- TNLcontext *tnl = TNL_CONTEXT(ctx);
+- tnl->Driver.Render.Line( ctx, ii, jj );
+-}
+-
+-static void r128FastRenderClippedPoly( GLcontext *ctx, const GLuint *elts,
+- GLuint n )
+-{
+- r128ContextPtr rmesa = R128_CONTEXT( ctx );
+- GLuint vertsize = rmesa->vertex_size;
+- GLuint *vb = r128AllocDmaLow( rmesa, (n-2) * 3 * 4 * vertsize );
+- GLubyte *r128verts = (GLubyte *)rmesa->verts;
+- const GLuint *start = (const GLuint *)VERT(elts[0]);
+- int i,j;
+-
+- rmesa->num_verts += (n-2) * 3;
+-
+- for (i = 2 ; i < n ; i++) {
+- COPY_DWORDS( j, vb, vertsize, (r128VertexPtr) VERT(elts[i-1]) );
+- COPY_DWORDS( j, vb, vertsize, (r128VertexPtr) VERT(elts[i]) );
+- COPY_DWORDS( j, vb, vertsize, (r128VertexPtr) start );
+- }
+-}
+-
+-
+-
+-
+-/**********************************************************************/
+ /* Choose render functions */
+ /**********************************************************************/
+
+-#define _R128_NEW_RENDER_STATE (_DD_NEW_LINE_STIPPLE | \
+- _DD_NEW_LINE_SMOOTH | \
+- _DD_NEW_POINT_SMOOTH | \
+- _DD_NEW_TRI_SMOOTH | \
+- _DD_NEW_TRI_UNFILLED | \
+- _DD_NEW_TRI_LIGHT_TWOSIDE | \
+- _DD_NEW_TRI_OFFSET) \
+-
+-
+ #define POINT_FALLBACK (DD_POINT_SMOOTH)
+ #define LINE_FALLBACK (DD_LINE_STIPPLE|DD_LINE_SMOOTH)
+ #define TRI_FALLBACK (DD_TRI_SMOOTH)
+ #define ANY_FALLBACK_FLAGS (POINT_FALLBACK|LINE_FALLBACK|TRI_FALLBACK)
+ #define ANY_RASTER_FLAGS (DD_TRI_LIGHT_TWOSIDE|DD_TRI_OFFSET|DD_TRI_UNFILLED)
+-
++#define _R128_NEW_RENDER_STATE (ANY_FALLBACK_FLAGS | ANY_RASTER_FLAGS)
+
+ static void r128ChooseRenderState(GLcontext *ctx)
+ {
+@@ -545,9 +435,9 @@
+ GLuint index = 0;
+
+ if (flags & (ANY_RASTER_FLAGS|ANY_FALLBACK_FLAGS)) {
+- rmesa->draw_point = r128_draw_point;
+- rmesa->draw_line = r128_draw_line;
+- rmesa->draw_tri = r128_draw_triangle;
++ rmesa->draw_point = r128_point;
++ rmesa->draw_line = r128_line;
++ rmesa->draw_tri = r128_triangle;
+
+ if (flags & ANY_RASTER_FLAGS) {
+ if (flags & DD_TRI_LIGHT_TWOSIDE) index |= R128_TWOSIDE_BIT;
+@@ -569,19 +459,18 @@
+ TNLcontext *tnl = TNL_CONTEXT(ctx);
+ tnl->Driver.Render.Points = rast_tab[index].points;
+ tnl->Driver.Render.Line = rast_tab[index].line;
++ tnl->Driver.Render.ClippedLine = rast_tab[index].line;
+ tnl->Driver.Render.Triangle = rast_tab[index].triangle;
+ tnl->Driver.Render.Quad = rast_tab[index].quad;
+
+ if (index == 0) {
+ tnl->Driver.Render.PrimTabVerts = r128_render_tab_verts;
+ tnl->Driver.Render.PrimTabElts = r128_render_tab_elts;
+- tnl->Driver.Render.ClippedLine = rast_tab[index].line;
+- tnl->Driver.Render.ClippedPolygon = r128FastRenderClippedPoly;
++ tnl->Driver.Render.ClippedPolygon = r128_fast_clipped_poly;
+ } else {
+ tnl->Driver.Render.PrimTabVerts = _tnl_render_tab_verts;
+ tnl->Driver.Render.PrimTabElts = _tnl_render_tab_elts;
+- tnl->Driver.Render.ClippedLine = r128RenderClippedLine;
+- tnl->Driver.Render.ClippedPolygon = r128RenderClippedPoly;
++ tnl->Driver.Render.ClippedPolygon = _tnl_RenderClippedPolygon;
+ }
+
+ rmesa->RenderIndex = index;
+@@ -600,9 +489,6 @@
+ r128DDUpdateHWState( ctx );
+
+ if (!rmesa->Fallback && rmesa->NewGLState) {
+- if (rmesa->NewGLState & _R128_NEW_VERTEX_STATE)
+- r128ChooseVertexState( ctx );
+-
+ if (rmesa->NewGLState & _R128_NEW_RENDER_STATE)
+ r128ChooseRenderState( ctx );
+
+@@ -657,13 +543,120 @@
+ r128RasterPrimitive( ctx, hw );
+ }
+
++#define EMIT_ATTR( ATTR, STYLE, VF, SIZE ) \
++do { \
++ rmesa->vertex_attrs[rmesa->vertex_attr_count].attrib = (ATTR); \
++ rmesa->vertex_attrs[rmesa->vertex_attr_count].format = (STYLE); \
++ rmesa->vertex_attr_count++; \
++ vc_frmt |= (VF); \
++ offset += (SIZE); \
++} while (0)
++
++#define EMIT_PAD( SIZE ) \
++do { \
++ rmesa->vertex_attrs[rmesa->vertex_attr_count].attrib = 0; \
++ rmesa->vertex_attrs[rmesa->vertex_attr_count].format = EMIT_PAD; \
++ rmesa->vertex_attrs[rmesa->vertex_attr_count].offset = (SIZE); \
++ rmesa->vertex_attr_count++; \
++ offset += (SIZE); \
++} while (0)
+
+ static void r128RenderStart( GLcontext *ctx )
+ {
+- /* Check for projective texturing. Make sure all texcoord
+- * pointers point to something. (fix in mesa?)
++ r128ContextPtr rmesa = R128_CONTEXT(ctx);
++ TNLcontext *tnl = TNL_CONTEXT(ctx);
++ struct vertex_buffer *VB = &tnl->vb;
++ GLuint index = tnl->render_inputs;
++ GLuint vc_frmt = 0;
++ GLboolean fallback_projtex = GL_FALSE;
++ GLuint offset = 0;
++
++ /* Important: */
++ VB->AttribPtr[VERT_ATTRIB_POS] = VB->NdcPtr;
++ rmesa->vertex_attr_count = 0;
++ rmesa->specoffset = 0;
++
++ /* EMIT_ATTR's must be in order as they tell t_vertex.c how to
++ * build up a hardware vertex.
+ */
+- r128CheckTexSizes( ctx );
++ if ( index & _TNL_BITS_TEX_ANY )
++ EMIT_ATTR( _TNL_ATTRIB_POS, EMIT_4F_VIEWPORT, R128_CCE_VC_FRMT_RHW, 16 );
++ else
++ EMIT_ATTR( _TNL_ATTRIB_POS, EMIT_3F_VIEWPORT, 0, 12 );
++
++ rmesa->coloroffset = offset;
++#if MESA_LITTLE_ENDIAN
++ EMIT_ATTR( _TNL_ATTRIB_COLOR0, EMIT_4UB_4F_BGRA,
++ R128_CCE_VC_FRMT_DIFFUSE_ARGB, 4 );
++#else
++ EMIT_ATTR( _TNL_ATTRIB_COLOR0, EMIT_4UB_4F_ARGB,
++ R128_CCE_VC_FRMT_DIFFUSE_ARGB, 4 );
++#endif
++
++ if ( index & (_TNL_BIT_COLOR1|_TNL_BIT_FOG) ) {
++#if MESA_LITTLE_ENDIAN
++ if ( index & _TNL_BIT_COLOR1) {
++ rmesa->specoffset = offset;
++ EMIT_ATTR( _TNL_ATTRIB_COLOR1, EMIT_3UB_3F_RGB,
++ R128_CCE_VC_FRMT_SPEC_FRGB, 3 );
++ } else
++ EMIT_PAD( 3 );
++
++ if (index & _TNL_BIT_FOG)
++ EMIT_ATTR( _TNL_ATTRIB_FOG, EMIT_1UB_1F, R128_CCE_VC_FRMT_SPEC_FRGB,
++ 1 );
++ else
++ EMIT_PAD( 1 );
++#else
++ if (index & _TNL_BIT_FOG)
++ EMIT_ATTR( _TNL_ATTRIB_FOG, EMIT_1UB_1F, R128_CCE_VC_FRMT_SPEC_FRGB,
++ 1 );
++ else
++ EMIT_PAD( 1 );
++
++ if ( index & _TNL_BIT_COLOR1) {
++ rmesa->specoffset = offset;
++ EMIT_ATTR( _TNL_ATTRIB_COLOR1, EMIT_3UB_3F_RGB,
++ R128_CCE_VC_FRMT_SPEC_FRGB, 3 );
++ } else
++ EMIT_PAD( 3 );
++#endif
++ }
++
++ if ( index & _TNL_BIT_TEX(0) ) {
++ if ( VB->TexCoordPtr[0]->size > 2 )
++ fallback_projtex = GL_TRUE;
++ EMIT_ATTR( _TNL_ATTRIB_TEX0, EMIT_2F, R128_CCE_VC_FRMT_S_T, 8 );
++ if ( index & _TNL_BIT_TEX(1) ) {
++ if ( VB->TexCoordPtr[1]->size > 2 )
++ fallback_projtex = GL_TRUE;
++ EMIT_ATTR( _TNL_ATTRIB_TEX1, EMIT_2F, R128_CCE_VC_FRMT_S2_T2, 8 );
++ }
++ } else if ( index & _TNL_BIT_TEX(1) ) {
++ if ( VB->TexCoordPtr[1]->size > 2 )
++ fallback_projtex = GL_TRUE;
++ EMIT_ATTR( _TNL_ATTRIB_TEX1, EMIT_2F, R128_CCE_VC_FRMT_S_T, 8 );
++ }
++
++ /* projective textures are not supported by the hardware */
++ FALLBACK( rmesa, R128_FALLBACK_TEXTURE, fallback_projtex );
++
++ /* Only need to change the vertex emit code if there has been a
++ * statechange to a TNL index.
++ */
++ if ( index != rmesa->tnl_state ) {
++ FLUSH_BATCH( rmesa );
++ rmesa->dirty |= R128_UPLOAD_CONTEXT;
++
++ rmesa->vertex_size =
++ _tnl_install_attrs( ctx,
++ rmesa->vertex_attrs,
++ rmesa->vertex_attr_count,
++ rmesa->hw_viewport, 0 );
++ rmesa->vertex_size >>= 2;
++
++ rmesa->vertex_format = vc_frmt;
++ }
+ }
+
+ static void r128RenderFinish( GLcontext *ctx )
+@@ -698,9 +691,19 @@
+ tnl->Driver.Render.Start = r128RenderStart;
+ tnl->Driver.Render.PrimitiveNotify = r128RenderPrimitive;
+ tnl->Driver.Render.Finish = r128RenderFinish;
+- tnl->Driver.Render.BuildVertices = r128BuildVertices;
+- rmesa->NewGLState |= (_R128_NEW_RENDER_STATE|
+- _R128_NEW_VERTEX_STATE);
++
++ tnl->Driver.Render.BuildVertices = _tnl_build_vertices;
++ tnl->Driver.Render.CopyPV = _tnl_copy_pv;
++ tnl->Driver.Render.Interp = _tnl_interp;
++
++ _tnl_invalidate_vertex_state( ctx, ~0 );
++ _tnl_invalidate_vertices( ctx, ~0 );
++ _tnl_install_attrs( ctx,
++ rmesa->vertex_attrs,
++ rmesa->vertex_attr_count,
++ rmesa->hw_viewport, 0 );
++
++ rmesa->NewGLState |= _R128_NEW_RENDER_STATE;
+ }
+ }
+ }
+@@ -726,9 +729,16 @@
+ tnl->Driver.Render.Finish = r128RenderFinish;
+ tnl->Driver.Render.PrimitiveNotify = r128RenderPrimitive;
+ tnl->Driver.Render.ResetLineStipple = _swrast_ResetLineStipple;
+- tnl->Driver.Render.BuildVertices = r128BuildVertices;
+- rmesa->NewGLState |= (_R128_NEW_RENDER_STATE|
+- _R128_NEW_VERTEX_STATE);
++ tnl->Driver.Render.BuildVertices = _tnl_build_vertices;
++ tnl->Driver.Render.CopyPV = _tnl_copy_pv;
++ tnl->Driver.Render.Interp = _tnl_interp;
++
++ _tnl_init_vertices( ctx, ctx->Const.MaxArrayLockSize + 12,
++ (6 + 2 * ctx->Const.MaxTextureUnits) * sizeof(GLfloat) );
++ rmesa->verts = (char *)tnl->clipspace.vertex_buf;
++ rmesa->tnl_state = -1;
++
++ rmesa->NewGLState |= _R128_NEW_RENDER_STATE;
+
+ /* r128Fallback( ctx, 0x100000, 1 ); */
+ }
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_vb.h
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_vb.h:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_vb.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_vb.h:1.1.1.1 Wed Jun 16 09:18:13 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_vb.h Wed Dec 15 01:50:58 2004
+@@ -1,74 +0,0 @@
+-/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_vb.h,v 1.8 2002/10/30 12:51:46 alanh Exp $ */
+-/**************************************************************************
+-
+-Copyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and
+- VA Linux Systems Inc., Fremont, California.
+-
+-All Rights Reserved.
+-
+-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
+-on the rights to use, copy, modify, merge, publish, distribute, sub
+-license, 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 (including the next
+-paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL
+-ATI, VA LINUX SYSTEMS AND/OR THEIR SUPPLIERS 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.
+-
+-**************************************************************************/
+-
+-/*
+- * Authors:
+- * Keith Whitwell <keith@tungstengraphics.com>
+- *
+- */
+-
+-#ifndef R128VB_INC
+-#define R128VB_INC
+-
+-#include "mtypes.h"
+-#include "swrast/swrast.h"
+-#include "r128_context.h"
+-
+-#define _R128_NEW_VERTEX_STATE (_DD_NEW_SEPARATE_SPECULAR | \
+- _DD_NEW_TRI_LIGHT_TWOSIDE | \
+- _DD_NEW_TRI_UNFILLED | \
+- _NEW_TEXTURE | \
+- _NEW_FOG)
+-
+-extern void r128CheckTexSizes( GLcontext *ctx );
+-extern void r128ChooseVertexState( GLcontext *ctx );
+-
+-extern void r128BuildVertices( GLcontext *ctx, GLuint start, GLuint count,
+- GLuint newinputs );
+-
+-extern void r128PrintSetupFlags(char *msg, GLuint flags );
+-
+-extern void r128InitVB( GLcontext *ctx );
+-extern void r128FreeVB( GLcontext *ctx );
+-
+-extern void r128_emit_contiguous_verts( GLcontext *ctx,
+- GLuint start,
+- GLuint count );
+-
+-extern void r128_emit_indexed_verts( GLcontext *ctx,
+- GLuint start,
+- GLuint count );
+-
+-extern void r128_translate_vertex( GLcontext *ctx,
+- const r128Vertex *src,
+- SWvertex *dst );
+-
+-extern void r128_print_vertex( GLcontext *ctx, const r128Vertex *v );
+-
+-#endif
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_cmdbuf.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_cmdbuf.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_cmdbuf.c:1.1.1.2.2.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_cmdbuf.c:1.1.1.2 Tue Aug 17 20:17:58 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_cmdbuf.c Wed Dec 15 01:50:58 2004
+@@ -58,113 +58,139 @@
+
+ }
+
+-static void r200_emit_state_list( r200ContextPtr rmesa,
+- struct r200_state_atom *list )
++/* The state atoms will be emitted in the order they appear in the atom list,
++ * so this step is important.
++ */
++void r200SetUpAtomList( r200ContextPtr rmesa )
+ {
+- struct r200_state_atom *state, *tmp;
+- char *dest;
+- int i, size, mtu;
++ int i, mtu;
+
+- size = 0;
+- foreach_s( state, tmp, list ) {
+- if (state->check( rmesa->glCtx, state->idx )) {
+-/* dest = r200AllocCmdBuf( rmesa, state->cmd_size * 4, __FUNCTION__);
+- memcpy( dest, state->cmd, state->cmd_size * 4);*/
+- size += state->cmd_size;
+- state->dirty = GL_TRUE;
+- move_to_head( &(rmesa->hw.clean), state );
+- if (R200_DEBUG & DEBUG_STATE)
+- print_state_atom( state );
+- }
+- else if (R200_DEBUG & DEBUG_STATE)
+- fprintf(stderr, "skip state %s\n", state->name);
+- }
++ mtu = rmesa->glCtx->Const.MaxTextureUnits;
+
+- if (!size)
+- return;
++ make_empty_list(&rmesa->hw.atomlist);
++ rmesa->hw.atomlist.name = "atom-list";
+
+- dest = r200AllocCmdBuf( rmesa, size * 4, __FUNCTION__);
+- mtu = rmesa->glCtx->Const.MaxTextureUnits;
++ insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.ctx );
++ insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.set );
++ insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.lin );
++ insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.msk );
++ insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.vpt );
++ insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.vtx );
++ insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.vap );
++ insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.vte );
++ insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.msc );
++ insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.cst );
++ insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.zbs );
++ insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.tcl );
++ insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.msl );
++ insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.tcg );
++ insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.grd );
++ insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.fog );
++ insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.tam );
++ insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.tf );
++ for (i = 0; i < mtu; ++i)
++ insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.tex[i] );
++ for (i = 0; i < mtu; ++i)
++ insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.cube[i] );
++ for (i = 0; i < 6; ++i)
++ insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.pix[i] );
+
+-#define EMIT_ATOM(ATOM) \
+-do { \
+- if (rmesa->hw.ATOM.dirty) { \
+- rmesa->hw.ATOM.dirty = GL_FALSE; \
+- memcpy( dest, rmesa->hw.ATOM.cmd, rmesa->hw.ATOM.cmd_size * 4); \
+- dest += rmesa->hw.ATOM.cmd_size * 4; \
+- } \
+-} while (0)
+-
+- EMIT_ATOM (ctx);
+- EMIT_ATOM (set);
+- EMIT_ATOM (lin);
+- EMIT_ATOM (msk);
+- EMIT_ATOM (vpt);
+- EMIT_ATOM (vtx);
+- EMIT_ATOM (vap);
+- EMIT_ATOM (vte);
+- EMIT_ATOM (msc);
+- EMIT_ATOM (cst);
+- EMIT_ATOM (zbs);
+- EMIT_ATOM (tcl);
+- EMIT_ATOM (msl);
+- EMIT_ATOM (tcg);
+- EMIT_ATOM (grd);
+- EMIT_ATOM (fog);
+- EMIT_ATOM (tam);
+- EMIT_ATOM (tf);
+- for (i = 0; i < mtu; ++i) {
+- EMIT_ATOM (tex[i]);
+- }
+- for (i = 0; i < mtu; ++i) {
+- EMIT_ATOM (cube[i]);
+- }
+- for (i = 0; i < 3 + mtu; ++i)
+- EMIT_ATOM (mat[i]);
+- EMIT_ATOM (eye);
+- EMIT_ATOM (glt);
+- for (i = 0; i < 2; ++i) {
+- EMIT_ATOM (mtl[i]);
+- }
+ for (i = 0; i < 8; ++i)
+- EMIT_ATOM (lit[i]);
+- for (i = 0; i < 6; ++i)
+- EMIT_ATOM (ucp[i]);
++ insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.lit[i] );
++ for (i = 0; i < 3 + mtu; ++i)
++ insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.mat[i] );
++ insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.eye );
++ insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.glt );
++ for (i = 0; i < 2; ++i)
++ insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.mtl[i] );
+ for (i = 0; i < 6; ++i)
+- EMIT_ATOM (pix[i]);
++ insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.ucp[i] );
++}
+
+-#undef EMIT_ATOM
++static void r200SaveHwState( r200ContextPtr rmesa )
++{
++ struct r200_state_atom *atom;
++ char * dest = rmesa->backup_store.cmd_buf;
+
+-}
++ if (R200_DEBUG & DEBUG_STATE)
++ fprintf(stderr, "%s\n", __FUNCTION__);
+
++ rmesa->backup_store.cmd_used = 0;
++
++ foreach( atom, &rmesa->hw.atomlist ) {
++ if ( atom->check( rmesa->glCtx, atom->idx ) ) {
++ int size = atom->cmd_size * 4;
++ memcpy( dest, atom->cmd, size);
++ dest += size;
++ rmesa->backup_store.cmd_used += size;
++ if (R200_DEBUG & DEBUG_STATE)
++ print_state_atom( atom );
++ }
++ }
++
++ assert( rmesa->backup_store.cmd_used <= R200_CMD_BUF_SZ );
++ if (R200_DEBUG & DEBUG_STATE)
++ fprintf(stderr, "Returning to r200EmitState\n");
++}
+
+ void r200EmitState( r200ContextPtr rmesa )
+ {
+- struct r200_state_atom *state, *tmp;
++ char *dest;
++ int mtu;
++ struct r200_state_atom *atom;
+
+ if (R200_DEBUG & (DEBUG_STATE|DEBUG_PRIMS))
+ fprintf(stderr, "%s\n", __FUNCTION__);
+
+- /* Somewhat overkill:
+- */
+- if ( rmesa->lost_context) {
+- if (R200_DEBUG & (DEBUG_STATE|DEBUG_PRIMS|DEBUG_IOCTL))
+- fprintf(stderr, "%s - lost context\n", __FUNCTION__);
++ if (rmesa->save_on_next_emit) {
++ r200SaveHwState(rmesa);
++ rmesa->save_on_next_emit = GL_FALSE;
++ }
++
++ if (!rmesa->hw.is_dirty && !rmesa->hw.all_dirty)
++ return;
+
+- foreach_s( state, tmp, &(rmesa->hw.clean) )
+- move_to_tail(&(rmesa->hw.dirty), state );
++ mtu = rmesa->glCtx->Const.MaxTextureUnits;
+
+- rmesa->lost_context = 0;
++ /* To avoid going across the entire set of states multiple times, just check
++ * for enough space for the case of emitting all state, and inline the
++ * r200AllocCmdBuf code here without all the checks.
++ */
++ r200EnsureCmdBufSpace( rmesa, rmesa->hw.max_state_size );
++
++ /* we need to calculate dest after EnsureCmdBufSpace
++ as we may flush the buffer - airlied */
++ dest = rmesa->store.cmd_buf + rmesa->store.cmd_used;
++ if (R200_DEBUG & DEBUG_STATE) {
++ foreach( atom, &rmesa->hw.atomlist ) {
++ if ( atom->dirty || rmesa->hw.all_dirty ) {
++ if ( atom->check( rmesa->glCtx, atom->idx ) )
++ print_state_atom( atom );
++ else
++ fprintf(stderr, "skip state %s\n", atom->name);
++ }
++ }
+ }
+-/* else {
+- move_to_tail( &rmesa->hw.dirty, &rmesa->hw.mtl[0] );*/
+- /* odd bug? -- isosurf, cycle between reflect & lit */
+-/* }*/
+
+- r200_emit_state_list( rmesa, &rmesa->hw.dirty );
+-}
++ foreach( atom, &rmesa->hw.atomlist ) {
++ if ( rmesa->hw.all_dirty )
++ atom->dirty = GL_TRUE;
++ if ( atom->dirty ) {
++ if ( atom->check( rmesa->glCtx, atom->idx ) ) {
++ int size = atom->cmd_size * 4;
++ memcpy( dest, atom->cmd, size);
++ dest += size;
++ rmesa->store.cmd_used += size;
++ atom->dirty = GL_FALSE;
++ }
++ }
++ }
+
++ assert( rmesa->store.cmd_used <= R200_CMD_BUF_SZ );
+
++ rmesa->hw.is_dirty = GL_FALSE;
++ rmesa->hw.all_dirty = GL_FALSE;
++}
+
+ /* Fire a section of the retained (indexed_verts) buffer as a regular
+ * primtive.
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_context.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_context.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_context.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_context.c:1.1.1.2 Thu Jul 22 06:51:45 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_context.c Wed Dec 15 01:50:58 2004
+@@ -62,7 +62,7 @@
+ #include "r200_vtxfmt.h"
+ #include "r200_maos.h"
+
+-#define DRIVER_DATE "20030328"
++#define DRIVER_DATE "20040929"
+
+ #include "vblank.h"
+ #include "utils.h"
+@@ -143,7 +143,6 @@
+ "GL_ATI_texture_env_combine3",
+ "GL_ATI_texture_mirror_once",
+ "GL_MESA_pack_invert",
+- "GL_MESA_ycbcr_texture",
+ "GL_NV_blend_square",
+ "GL_SGIS_generate_mipmap",
+ NULL
+@@ -166,6 +165,7 @@
+ &_tnl_fog_coordinate_stage,
+ &_tnl_texgen_stage,
+ &_tnl_texture_transform_stage,
++ &_tnl_vertex_program_stage,
+
+ /* Try again to go to tcl?
+ * - no good for asymmetric-twoside (do with multipass)
+@@ -322,7 +322,7 @@
+ DRI_CONF_TEXTURE_DEPTH_32 : DRI_CONF_TEXTURE_DEPTH_16;
+
+ rmesa->swtcl.RenderIndex = ~0;
+- rmesa->lost_context = 1;
++ rmesa->hw.all_dirty = 1;
+
+ /* Set the maximum texture size small enough that we can guarentee that
+ * all texture units can bind a maximal texture and have them both in
+@@ -400,12 +400,21 @@
+ _math_matrix_set_identity( &rmesa->tmpmat );
+
+ driInitExtensions( ctx, card_extensions, GL_TRUE );
++ if (rmesa->r200Screen->chipset & R200_CHIPSET_REAL_R200) {
++ /* yuv textures only work with r200 chips for unknown reasons, the
++ others get the bit ordering right but don't actually do YUV-RGB conversion */
++ _mesa_enable_extension( ctx, "GL_MESA_ycbcr_texture" );
++ }
+ if (rmesa->r200Screen->drmSupportsCubeMaps)
+ _mesa_enable_extension( ctx, "GL_ARB_texture_cube_map" );
+ if (rmesa->r200Screen->drmSupportsBlendColor) {
+ _mesa_enable_extension( ctx, "GL_EXT_blend_equation_separate" );
+ _mesa_enable_extension( ctx, "GL_EXT_blend_func_separate" );
+ }
++ if(driQueryOptionb(&rmesa->optionCache, "arb_vertex_program"))
++ _mesa_enable_extension( ctx, "GL_ARB_vertex_program");
++ if(driQueryOptionb(&rmesa->optionCache, "nv_vertex_program"))
++ _mesa_enable_extension( ctx, "GL_NV_vertex_program");
+
+ #if 0
+ r200InitDriverFuncs( ctx );
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_context.h
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_context.h:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_context.h:1.1.1.2.2.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_context.h:1.1.1.2 Tue Aug 17 20:17:58 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_context.h Wed Dec 15 01:50:58 2004
+@@ -491,10 +491,8 @@
+
+
+ struct r200_hw_state {
+- /* All state should be on one of these lists:
+- */
+- struct r200_state_atom dirty; /* dirty list head placeholder */
+- struct r200_state_atom clean; /* clean list head placeholder */
++ /* Head of the linked list of state atoms. */
++ struct r200_state_atom atomlist;
+
+ /* Hardware state, stored as cmdbuf commands:
+ * -- Need to doublebuffer for
+@@ -530,6 +528,7 @@
+ struct r200_state_atom glt;
+
+ int max_state_size; /* Number of bytes necessary for a full state emit. */
++ GLboolean is_dirty, all_dirty;
+ };
+
+ struct r200_state {
+@@ -825,8 +824,6 @@
+ };
+
+
+-
+-
+ struct r200_context {
+ GLcontext *glCtx; /* Mesa context */
+
+@@ -854,6 +851,10 @@
+ struct r200_ioctl ioctl;
+ struct r200_dma dma;
+ struct r200_store store;
++ /* A full state emit as of the first state emit in the main store, in case
++ * the context is lost.
++ */
++ struct r200_store backup_store;
+
+ /* Page flipping
+ */
+@@ -876,6 +877,7 @@
+ drm_clip_rect_t *pClipRects;
+ unsigned int lastStamp;
+ GLboolean lost_context;
++ GLboolean save_on_next_emit;
+ r200ScreenPtr r200Screen; /* Screen private DRI data */
+ drm_radeon_sarea_t *sarea; /* Private SAREA data */
+
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_ioctl.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_ioctl.c:1.1.1.3 xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_ioctl.c:1.1.1.3.2.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_ioctl.c:1.1.1.3 Tue Aug 17 20:17:58 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_ioctl.c Wed Dec 15 01:50:58 2004
+@@ -59,11 +59,41 @@
+ static void r200WaitForIdle( r200ContextPtr rmesa );
+
+
++/* At this point we were in FlushCmdBufLocked but we had lost our context, so
++ * we need to unwire our current cmdbuf, hook the one with the saved state in
++ * it, flush it, and then put the current one back. This is so commands at the
++ * start of a cmdbuf can rely on the state being kept from the previous one.
++ */
++static void r200BackUpAndEmitLostStateLocked( r200ContextPtr rmesa )
++{
++ GLuint nr_released_bufs;
++ struct r200_store saved_store;
++
++ if (rmesa->backup_store.cmd_used == 0)
++ return;
++
++ if (R200_DEBUG & DEBUG_STATE)
++ fprintf(stderr, "Emitting backup state on lost context\n");
++
++ rmesa->lost_context = GL_FALSE;
++
++ nr_released_bufs = rmesa->dma.nr_released_bufs;
++ saved_store = rmesa->store;
++ rmesa->dma.nr_released_bufs = 0;
++ rmesa->store = rmesa->backup_store;
++ r200FlushCmdBufLocked( rmesa, __FUNCTION__ );
++ rmesa->dma.nr_released_bufs = nr_released_bufs;
++ rmesa->store = saved_store;
++}
++
+ int r200FlushCmdBufLocked( r200ContextPtr rmesa, const char * caller )
+ {
+ int ret, i;
+ drm_radeon_cmd_buffer_t cmd;
+
++ if (rmesa->lost_context)
++ r200BackUpAndEmitLostStateLocked( rmesa );
++
+ if (R200_DEBUG & DEBUG_IOCTL) {
+ fprintf(stderr, "%s from %s\n", __FUNCTION__, caller);
+
+@@ -132,18 +162,7 @@
+ rmesa->store.statenr = 0;
+ rmesa->store.cmd_used = 0;
+ rmesa->dma.nr_released_bufs = 0;
+- /* Set lost_context so that the first state emit on the new buffer is a full
+- * one. This is because the context might get lost while preparing the next
+- * buffer, and when we lock and find out, we don't have the information to
+- * recreate the state. This function should always be called before the new
+- * buffer is begun, so it's sufficient to just set lost_context here.
+- *
+- * The alternative to this would be to copy out the state on unlock
+- * (approximately) and if we did lose the context, dispatch a cmdbuf to reset
+- * the state to that old copy before continuing with the accumulated command
+- * buffer.
+- */
+- rmesa->lost_context = 1;
++ rmesa->save_on_next_emit = 1;
+
+ return ret;
+ }
+@@ -464,7 +483,7 @@
+ }
+
+ UNLOCK_HARDWARE( rmesa );
+- rmesa->lost_context = 1;
++ rmesa->hw.all_dirty = GL_TRUE;
+
+ rmesa->swap_count++;
+ (*rmesa->get_ust)( & ust );
+@@ -576,7 +595,7 @@
+ return;
+ }
+
+- R200_FIREVERTICES( rmesa );
++ r200Flush( ctx );
+
+ if ( mask & DD_FRONT_LEFT_BIT ) {
+ flags |= RADEON_FRONT;
+@@ -613,13 +632,6 @@
+ cx += dPriv->x;
+ cy = dPriv->y + dPriv->h - cy - ch;
+
+- /* We have to emit state along with the clear, since the kernel relies on
+- * some of it. The EmitState that was above R200_FIREVERTICES was an
+- * attempt to do that, except that another context may come in and cause us
+- * to lose our context while we're unlocked.
+- */
+- r200EmitState( rmesa );
+-
+ LOCK_HARDWARE( rmesa );
+
+ /* Throttle the number of clear ioctls we do.
+@@ -722,7 +734,7 @@
+ }
+
+ UNLOCK_HARDWARE( rmesa );
+- rmesa->lost_context = 1;
++ rmesa->hw.all_dirty = GL_TRUE;
+ }
+
+
+@@ -763,8 +775,7 @@
+ if (rmesa->dma.flush)
+ rmesa->dma.flush( rmesa );
+
+- if (!is_empty_list(&rmesa->hw.dirty))
+- r200EmitState( rmesa );
++ r200EmitState( rmesa );
+
+ if (rmesa->store.cmd_used)
+ r200FlushCmdBuf( rmesa, __FUNCTION__ );
+@@ -847,7 +858,7 @@
+ {
+ GET_CURRENT_CONTEXT(ctx);
+ r200ContextPtr rmesa;
+- int region_offset;
++ ptrdiff_t region_offset;
+ drm_radeon_mem_free_t memfree;
+ int ret;
+
+@@ -908,7 +919,7 @@
+ GLboolean r200IsGartMemory( r200ContextPtr rmesa, const GLvoid *pointer,
+ GLint size )
+ {
+- int offset = (char *)pointer - (char *)rmesa->r200Screen->gartTextures.map;
++ ptrdiff_t offset = (char *)pointer - (char *)rmesa->r200Screen->gartTextures.map;
+ int valid = (size >= 0 &&
+ offset >= 0 &&
+ offset + size < rmesa->r200Screen->gartTextures.size);
+@@ -922,7 +933,7 @@
+
+ GLuint r200GartOffsetFromVirtual( r200ContextPtr rmesa, const GLvoid *pointer )
+ {
+- int offset = (char *)pointer - (char *)rmesa->r200Screen->gartTextures.map;
++ ptrdiff_t offset = (char *)pointer - (char *)rmesa->r200Screen->gartTextures.map;
+
+ if (offset < 0 || offset > rmesa->r200Screen->gartTextures.size)
+ return ~0;
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_ioctl.h
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_ioctl.h:1.1.1.3 xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_ioctl.h:1.1.1.3.2.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_ioctl.h:1.1.1.3 Tue Aug 17 20:17:58 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_ioctl.h Wed Dec 15 01:50:58 2004
+@@ -117,6 +117,8 @@
+ extern GLuint r200GartOffsetFromVirtual( r200ContextPtr rmesa,
+ const GLvoid *pointer );
+
++void r200SetUpAtomList( r200ContextPtr rmesa );
++
+ /* ================================================================
+ * Helper macros:
+ */
+@@ -135,7 +137,8 @@
+ #define R200_STATECHANGE( rmesa, ATOM ) \
+ do { \
+ R200_NEWPRIM( rmesa ); \
+- move_to_head( &(rmesa->hw.dirty), &(rmesa->hw.ATOM)); \
++ rmesa->hw.ATOM.dirty = GL_TRUE; \
++ rmesa->hw.is_dirty = GL_TRUE; \
+ } while (0)
+
+ #define R200_DB_STATE( ATOM ) \
+@@ -149,7 +152,8 @@
+ if (memcmp(atom->cmd, atom->lastcmd, atom->cmd_size*4)) {
+ int *tmp;
+ R200_NEWPRIM( rmesa );
+- move_to_head( &(rmesa->hw.dirty), atom );
++ atom->dirty = GL_TRUE;
++ rmesa->hw.is_dirty = GL_TRUE;
+ tmp = atom->cmd;
+ atom->cmd = atom->lastcmd;
+ atom->lastcmd = tmp;
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_lock.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_lock.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_lock.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_lock.c:1.1.1.1 Wed Jun 16 09:18:15 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_lock.c Wed Dec 15 01:50:58 2004
+@@ -116,4 +116,6 @@
+ for ( i = 0 ; i < rmesa->nr_heaps ; i++ ) {
+ DRI_AGE_TEXTURES( rmesa->texture_heaps[ i ] );
+ }
++
++ rmesa->lost_context = GL_TRUE;
+ }
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_screen.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_screen.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_screen.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_screen.c:1.1.1.2 Thu Jul 22 06:51:46 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_screen.c Wed Dec 15 01:50:58 2004
+@@ -75,8 +75,12 @@
+ DRI_CONF_SECTION_DEBUG
+ DRI_CONF_NO_RAST(false)
+ DRI_CONF_SECTION_END
++ DRI_CONF_SECTION_SOFTWARE
++ DRI_CONF_ARB_VERTEX_PROGRAM(true)
++ DRI_CONF_NV_VERTEX_PROGRAM(false)
++ DRI_CONF_SECTION_END
+ DRI_CONF_END;
+-static const GLuint __driNConfigOptions = 11;
++static const GLuint __driNConfigOptions = 13;
+
+ #if 1
+ /* Including xf86PciInfo.h introduces a bunch of errors...
+@@ -87,7 +91,8 @@
+ #define PCI_CHIP_R200_QG 0x5147
+ #define PCI_CHIP_R200_QY 0x5159
+ #define PCI_CHIP_R200_QZ 0x515A
+-#define PCI_CHIP_R200_LW 0x4C57
++#define PCI_CHIP_R200_LW 0x4C57
++#define PCI_CHIP_R200_LX 0x4C58
+ #define PCI_CHIP_R200_LY 0x4C59
+ #define PCI_CHIP_R200_LZ 0x4C5A
+ #define PCI_CHIP_RV200_QW 0x5157 /* Radeon 7500 - not an R200 at all */
+@@ -112,8 +117,14 @@
+ #define PCI_CHIP_R200_QM 0x514D
+ #define PCI_CHIP_R200_QN 0x514E
+ #define PCI_CHIP_R200_QO 0x514F /* r200 (non-derived) end */
+-/* are the R200 Qh (0x5168) and following needed too? They are not in xf86PciInfo.h
+- but in the pci database. Maybe just secondary ports or something ? */
++/* are the R200 Qh (0x5168) and following needed too? They are not in
++ xf86PciInfo.h but in the pci database. Maybe just secondary ports or
++ something ? Ah well, better be safe than sorry */
++#define PCI_CHIP_R200_Qh 0x5168
++#define PCI_CHIP_R200_Qi 0x5169
++#define PCI_CHIP_R200_Qj 0x516A
++#define PCI_CHIP_R200_Qk 0x516B
++#define PCI_CHIP_R200_Ql 0x516C
+
+ #endif
+
+@@ -237,6 +248,7 @@
+ case PCI_CHIP_RV200_QW:
+ case PCI_CHIP_RV200_QX:
+ case PCI_CHIP_R200_LW:
++ case PCI_CHIP_R200_LX:
+ case PCI_CHIP_R200_LY:
+ case PCI_CHIP_R200_LZ:
+ case PCI_CHIP_RS100_4136:
+@@ -265,6 +277,11 @@
+ case PCI_CHIP_R200_QM:
+ case PCI_CHIP_R200_QN:
+ case PCI_CHIP_R200_QO:
++ case PCI_CHIP_R200_Qh:
++ case PCI_CHIP_R200_Qi:
++ case PCI_CHIP_R200_Qj:
++ case PCI_CHIP_R200_Qk:
++ case PCI_CHIP_R200_Ql:
+ screen->chipset |= R200_CHIPSET_REAL_R200;
+ /* fallthrough */
+ default:
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_span.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_span.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_span.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_span.c:1.1.1.1 Wed Jun 16 09:18:17 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_span.c Wed Dec 15 01:50:58 2004
+@@ -195,7 +195,7 @@
+ GLint x, GLint y )
+ {
+ GLuint pitch = rmesa->r200Screen->frontPitch;
+- GLuint b = ((y & 0x3FF) >> 4) * ((pitch & 0xFFF) >> 5) + ((x & 0x3FF) >> 5);
++ GLuint b = ((y & 0x7FF) >> 4) * ((pitch & 0xFFF) >> 5) + ((x & 0x7FF) >> 5);
+ GLuint a =
+ (BIT(x,0) << 2) |
+ (BIT(y,0) << 3) |
+@@ -214,7 +214,7 @@
+ static GLuint r200_mba_z16( r200ContextPtr rmesa, GLint x, GLint y )
+ {
+ GLuint pitch = rmesa->r200Screen->frontPitch;
+- GLuint b = ((y & 0x3FF) >> 4) * ((pitch & 0xFFF) >> 6) + ((x & 0x3FF) >> 6);
++ GLuint b = ((y & 0x7FF) >> 4) * ((pitch & 0xFFF) >> 6) + ((x & 0x7FF) >> 6);
+ GLuint a =
+ (BIT(x,0) << 1) |
+ (BIT(y,0) << 2) |
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_state.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_state.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_state.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_state.c:1.1.1.1 Wed Jun 16 09:18:17 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_state.c Wed Dec 15 01:50:58 2004
+@@ -2043,6 +2043,10 @@
+ r200UpdateSpecular ( ctx );
+ break;
+
++ case GL_VERTEX_PROGRAM_ARB:
++ TCL_FALLBACK(rmesa->glCtx, R200_TCL_FALLBACK_TCL_DISABLE, state);
++ break;
++
+ default:
+ return;
+ }
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_state_init.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_state_init.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_state_init.c:1.1.1.2.2.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_state_init.c:1.1.1.2 Tue Aug 17 20:17:58 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_state_init.c Wed Dec 15 01:50:58 2004
+@@ -65,8 +65,9 @@
+ fprintf(stderr, msg);
+ fprintf(stderr, ": ");
+
+- foreach(l, &(rmesa->hw.dirty)) {
+- fprintf(stderr, "%s, ", l->name);
++ foreach(l, &rmesa->hw.atomlist) {
++ if (l->dirty || rmesa->hw.all_dirty)
++ fprintf(stderr, "%s, ", l->name);
+ }
+
+ fprintf(stderr, "\n");
+@@ -200,11 +201,6 @@
+ rmesa->state.pixel.readOffset = rmesa->state.color.drawOffset;
+ rmesa->state.pixel.readPitch = rmesa->state.color.drawPitch;
+
+- /* Initialize lists:
+- */
+- make_empty_list(&(rmesa->hw.dirty)); rmesa->hw.dirty.name = "DIRTY";
+- make_empty_list(&(rmesa->hw.clean)); rmesa->hw.clean.name = "CLEAN";
+-
+ rmesa->hw.max_state_size = 0;
+
+ #define ALLOC_STATE( ATOM, CHK, SZ, NM, IDX ) \
+@@ -214,8 +210,8 @@
+ rmesa->hw.ATOM.lastcmd = (int *)CALLOC(SZ * sizeof(int)); \
+ rmesa->hw.ATOM.name = NM; \
+ rmesa->hw.ATOM.idx = IDX; \
+- rmesa->hw.ATOM.check = check_##CHK; \
+- insert_at_head(&(rmesa->hw.dirty), &(rmesa->hw.ATOM)); \
++ rmesa->hw.ATOM.check = check_##CHK; \
++ rmesa->hw.ATOM.dirty = GL_FALSE; \
+ rmesa->hw.max_state_size += SZ * sizeof(int); \
+ } while (0)
+
+@@ -308,6 +304,7 @@
+ ALLOC_STATE( pix[4], tex, PIX_STATE_SIZE, "PIX/pixstage-4", 4 );
+ ALLOC_STATE( pix[5], tex, PIX_STATE_SIZE, "PIX/pixstage-5", 5 );
+
++ r200SetUpAtomList( rmesa );
+
+ /* Fill in the packet headers:
+ */
+@@ -772,5 +769,5 @@
+
+ r200LightingSpaceChange( ctx );
+
+- rmesa->lost_context = 1;
++ rmesa->hw.all_dirty = GL_TRUE;
+ }
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_swtcl.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_swtcl.c:1.1.1.3 xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_swtcl.c:1.1.1.3.2.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_swtcl.c:1.1.1.3 Tue Aug 17 20:17:58 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_swtcl.c Wed Dec 15 01:50:58 2004
+@@ -117,12 +117,17 @@
+ }
+
+ rmesa->swtcl.coloroffset = offset;
++#if MESA_LITTLE_ENDIAN
+ EMIT_ATTR( _TNL_ATTRIB_COLOR0, EMIT_4UB_4F_RGBA, (R200_VTX_PK_RGBA << R200_VTX_COLOR_0_SHIFT) );
++#else
++ EMIT_ATTR( _TNL_ATTRIB_COLOR0, EMIT_4UB_4F_ABGR, (R200_VTX_PK_RGBA << R200_VTX_COLOR_0_SHIFT) );
++#endif
+ offset += 1;
+
+ rmesa->swtcl.specoffset = 0;
+ if (index & (_TNL_BIT_COLOR1|_TNL_BIT_FOG)) {
+
++#if MESA_LITTLE_ENDIAN
+ if (index & _TNL_BIT_COLOR1) {
+ rmesa->swtcl.specoffset = offset;
+ EMIT_ATTR( _TNL_ATTRIB_COLOR1, EMIT_3UB_3F_RGB, (R200_VTX_PK_RGBA << R200_VTX_COLOR_1_SHIFT) );
+@@ -137,6 +142,22 @@
+ else {
+ EMIT_PAD( 1 );
+ }
++#else
++ if (index & _TNL_BIT_FOG) {
++ EMIT_ATTR( _TNL_ATTRIB_FOG, EMIT_1UB_1F, (R200_VTX_PK_RGBA << R200_VTX_COLOR_1_SHIFT) );
++ }
++ else {
++ EMIT_PAD( 1 );
++ }
++
++ if (index & _TNL_BIT_COLOR1) {
++ rmesa->swtcl.specoffset = offset;
++ EMIT_ATTR( _TNL_ATTRIB_COLOR1, EMIT_3UB_3F_BGR, (R200_VTX_PK_RGBA << R200_VTX_COLOR_1_SHIFT) );
++ }
++ else {
++ EMIT_PAD( 3 );
++ }
++#endif
+ }
+
+ if (index & _TNL_BITS_TEX_ANY) {
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_tcl.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_tcl.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_tcl.c:1.1.1.2.2.2
+--- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_tcl.c:1.1.1.2 Tue Aug 17 20:17:58 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_tcl.c Thu Jan 13 01:10:28 2005
+@@ -140,32 +140,48 @@
+
+ static GLushort *r200AllocElts( r200ContextPtr rmesa, GLuint nr )
+ {
+- if (rmesa->dma.flush)
+- rmesa->dma.flush( rmesa );
++ if (rmesa->dma.flush == r200FlushElts &&
++ rmesa->store.cmd_used + nr*2 < R200_CMD_BUF_SZ) {
+
+- r200EnsureCmdBufSpace( rmesa, AOS_BUFSZ(rmesa->tcl.nr_aos_components) +
+- rmesa->hw.max_state_size + ELTS_BUFSZ(nr) );
+-
+- r200EmitAOS( rmesa,
+- rmesa->tcl.aos_components,
+- rmesa->tcl.nr_aos_components, 0 );
++ GLushort *dest = (GLushort *)(rmesa->store.cmd_buf +
++ rmesa->store.cmd_used);
+
+- return r200AllocEltsOpenEnded( rmesa, rmesa->tcl.hw_primitive, nr );
++ rmesa->store.cmd_used += nr*2;
++
++ return dest;
++ }
++ else {
++ if (rmesa->dma.flush)
++ rmesa->dma.flush( rmesa );
++
++ r200EnsureCmdBufSpace( rmesa, AOS_BUFSZ(rmesa->tcl.nr_aos_components) +
++ rmesa->hw.max_state_size + ELTS_BUFSZ(nr) );
++
++ r200EmitAOS( rmesa,
++ rmesa->tcl.aos_components,
++ rmesa->tcl.nr_aos_components, 0 );
++
++ return r200AllocEltsOpenEnded( rmesa, rmesa->tcl.hw_primitive, nr );
++ }
+ }
+
+
+-#define CLOSE_ELTS() R200_NEWPRIM( rmesa )
++#define CLOSE_ELTS() \
++do { \
++ if (0) R200_NEWPRIM( rmesa ); \
++} \
++while (0)
+
+
+ /* TODO: Try to extend existing primitive if both are identical,
+ * discrete and there are no intervening state changes. (Somewhat
+ * duplicates changes to DrawArrays code)
+ */
+-static void EMIT_PRIM( GLcontext *ctx,
+- GLenum prim,
+- GLuint hwprim,
+- GLuint start,
+- GLuint count)
++static void r200EmitPrim( GLcontext *ctx,
++ GLenum prim,
++ GLuint hwprim,
++ GLuint start,
++ GLuint count)
+ {
+ r200ContextPtr rmesa = R200_CONTEXT( ctx );
+ r200TclPrimitive( ctx, prim, hwprim );
+@@ -185,7 +201,9 @@
+ count - start );
+ }
+
+-
++#define EMIT_PRIM(ctx, prim, hwprim, start, count) do { \
++ r200EmitPrim( ctx, prim, hwprim, start, count ); \
++ (void) rmesa; } while (0)
+
+ /* Try & join small primitives
+ */
+@@ -205,9 +223,12 @@
+ #define EMIT_ELT(dest, offset, x) do { \
+ int off = offset + ( ( (GLuint)dest & 0x2 ) >> 1 ); \
+ GLushort *des = (GLushort *)( (GLuint)dest & ~0x2 ); \
+- (des)[ off + 1 - 2 * ( off & 1 ) ] = (GLushort)(x); } while (0)
++ (des)[ off + 1 - 2 * ( off & 1 ) ] = (GLushort)(x); \
++ (void)rmesa; } while (0)
+ #else
+-#define EMIT_ELT(dest, offset, x) (dest)[offset] = (GLushort) (x)
++#define EMIT_ELT(dest, offset, x) do { \
++ (dest)[offset] = (GLushort) (x); \
++ (void)rmesa; } while (0)
+ #endif
+
+ #define EMIT_TWO_ELTS(dest, offset, x, y) *(GLuint *)((dest)+offset) = ((y)<<16)|(x);
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_tcl.h
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_tcl.h:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_tcl.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_tcl.h:1.1.1.1 Wed Jun 16 09:18:18 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_tcl.h Wed Dec 15 01:50:58 2004
+@@ -60,6 +60,7 @@
+ #define R200_TCL_FALLBACK_TEXGEN_5 0x200 /* texgen, unit 5 */
+ #define R200_TCL_FALLBACK_TCL_DISABLE 0x400 /* user disable */
+ #define R200_TCL_FALLBACK_BITMAP 0x800 /* draw bitmap with points */
++#define R200_TCL_FALLBACK_VERTEX_PROGRAM 0x1000/* vertex program active */
+
+ #define TCL_FALLBACK( ctx, bit, mode ) r200TclFallback( ctx, bit, mode )
+
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_tex.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_tex.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_tex.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_tex.c:1.1.1.2 Thu Jul 22 06:51:49 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_tex.c Wed Dec 15 01:50:58 2004
+@@ -421,7 +421,9 @@
+ return &_mesa_texformat_ycbcr_rev;
+
+ default:
+- _mesa_problem(ctx, "unexpected texture format in %s", __FUNCTION__);
++ _mesa_problem(ctx,
++ "unexpected internalFormat 0x%x in r200ChooseTextureFormat",
++ (int) internalFormat);
+ return NULL;
+ }
+
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_texmem.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_texmem.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_texmem.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_texmem.c:1.1.1.1 Wed Jun 16 09:18:19 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_texmem.c Wed Dec 15 01:50:58 2004
+@@ -43,7 +43,6 @@
+ #include "context.h"
+ #include "colormac.h"
+ #include "macros.h"
+-#include "simple_list.h"
+ #include "radeon_reg.h" /* gets definition for usleep */
+ #include "r200_context.h"
+ #include "r200_state.h"
+@@ -73,10 +72,8 @@
+ for ( i = 0 ; i < rmesa->glCtx->Const.MaxTextureUnits ; i++ ) {
+ if ( t == rmesa->state.texture.unit[i].texobj ) {
+ rmesa->state.texture.unit[i].texobj = NULL;
+- remove_from_list( &rmesa->hw.tex[i] );
+- make_empty_list( &rmesa->hw.tex[i] );
+- remove_from_list( &rmesa->hw.cube[i] );
+- make_empty_list( &rmesa->hw.cube[i] );
++ rmesa->hw.tex[i].dirty = GL_FALSE;
++ rmesa->hw.cube[i].dirty = GL_FALSE;
+ }
+ }
+ }
+@@ -385,6 +382,14 @@
+ /* copy (x,y,width,height,data) */
+ memcpy( &tmp, &t->image[face][hwlevel], sizeof(tmp) );
+
++ /* Adjust the base offset to account for the Y-offset. This is done,
++ * instead of just letting the Y-offset automatically take care of it,
++ * because it is possible, for very large textures, for the Y-offset
++ * to exceede the [-8192,+8191] range.
++ */
++ tex.offset += tmp.y * 1024;
++ tmp.y = 0;
++
+ LOCK_HARDWARE( rmesa );
+ do {
+ ret = drmCommandWriteRead( rmesa->dri.fd, DRM_RADEON_TEXTURE,
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_texstate.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_texstate.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_texstate.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_texstate.c:1.1.1.2 Thu Jul 22 06:51:49 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_texstate.c Wed Dec 15 01:50:58 2004
+@@ -999,7 +999,7 @@
+ R200_TEX_BLEND_0_ENABLE) << unit);
+ rmesa->hw.ctx.cmd[CTX_PP_CNTL] |= R200_TEX_BLEND_0_ENABLE;
+
+- R200_STATECHANGE( rmesa, tcl );
++ R200_STATECHANGE( rmesa, vtx );
+ rmesa->hw.vtx.cmd[VTX_TCL_OUTPUT_VTXFMT_1] &= ~(7 << (unit * 3));
+
+ if (rmesa->TclFallback & (R200_TCL_FALLBACK_TEXGEN_0<<unit)) {
+@@ -1272,7 +1272,6 @@
+ r200ContextPtr rmesa = R200_CONTEXT(ctx);
+ GLboolean ok;
+ GLuint dbg;
+- int i;
+
+ ok = (r200UpdateTextureUnit( ctx, 0 ) &&
+ r200UpdateTextureUnit( ctx, 1 ) &&
+@@ -1336,8 +1335,14 @@
+ * Texture cache LRU hang workaround -------------
+ * not needed for r200 derivatives?
+ */
+- dbg = 0x0;
+
++ /* While the cases below attempt to only enable the workaround in the
++ * specific cases necessary, they were insufficient. See bugzilla #1519,
++ * #729, #814. Tests with quake3 showed no impact on performance.
++ */
++ dbg = 0x6;
++
++ /*
+ if (((rmesa->hw.ctx.cmd[CTX_PP_CNTL] & (R200_TEX_0_ENABLE )) &&
+ ((((rmesa->hw.tex[0].cmd[TEX_PP_TXFILTER] & R200_MIN_FILTER_MASK)) &
+ 0x04) == 0)) ||
+@@ -1362,7 +1367,7 @@
+ 0x04) == 0)))
+ {
+ dbg |= 0x04;
+- }
++ }*/
+
+ if (dbg != rmesa->hw.tam.cmd[TAM_DEBUG3]) {
+ R200_STATECHANGE( rmesa, tam );
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_vtxfmt_c.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_vtxfmt_c.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_vtxfmt_c.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_vtxfmt_c.c:1.1.1.1 Wed Jun 16 09:18:19 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_vtxfmt_c.c Wed Dec 15 01:50:58 2004
+@@ -122,6 +122,7 @@
+
+ /* Color for ubyte (packed) color formats:
+ */
++#if 0
+ static void r200_Color3ub_ub( GLubyte r, GLubyte g, GLubyte b )
+ {
+ GET_CURRENT_CONTEXT(ctx);
+@@ -161,7 +162,7 @@
+ r200ContextPtr rmesa = R200_CONTEXT(ctx);
+ *(GLuint *)rmesa->vb.colorptr = LE32_TO_CPU(*(GLuint *)v);
+ }
+-
++#endif /* 0 */
+
+ static void r200_Color3f_ub( GLfloat r, GLfloat g, GLfloat b )
+ {
+@@ -210,6 +211,7 @@
+
+ /* Color for float color+alpha formats:
+ */
++#if 0
+ static void r200_Color3ub_4f( GLubyte r, GLubyte g, GLubyte b )
+ {
+ GET_CURRENT_CONTEXT(ctx);
+@@ -253,6 +255,7 @@
+ dest[2] = UBYTE_TO_FLOAT(v[2]);
+ dest[3] = UBYTE_TO_FLOAT(v[3]);
+ }
++#endif /* 0 */
+
+
+ static void r200_Color3f_4f( GLfloat r, GLfloat g, GLfloat b )
+@@ -302,6 +305,7 @@
+
+ /* Color for float color formats:
+ */
++#if 0
+ static void r200_Color3ub_3f( GLubyte r, GLubyte g, GLubyte b )
+ {
+ GET_CURRENT_CONTEXT(ctx);
+@@ -343,6 +347,7 @@
+ dest[2] = UBYTE_TO_FLOAT(v[2]);
+ ctx->Current.Attrib[VERT_ATTRIB_COLOR0][3] = UBYTE_TO_FLOAT(v[3]);
+ }
++#endif /* 0 */
+
+
+ static void r200_Color3f_3f( GLfloat r, GLfloat g, GLfloat b )
+@@ -390,6 +395,7 @@
+
+ /* Secondary Color:
+ */
++#if 0
+ static void r200_SecondaryColor3ubEXT_ub( GLubyte r, GLubyte g, GLubyte b )
+ {
+ GET_CURRENT_CONTEXT(ctx);
+@@ -411,6 +417,7 @@
+ dest->blue = v[2];
+ dest->alpha = 0xff;
+ }
++#endif /* 0 */
+
+ static void r200_SecondaryColor3fEXT_ub( GLfloat r, GLfloat g, GLfloat b )
+ {
+@@ -434,6 +441,7 @@
+ dest->alpha = 255;
+ }
+
++#if 0
+ static void r200_SecondaryColor3ubEXT_3f( GLubyte r, GLubyte g, GLubyte b )
+ {
+ GET_CURRENT_CONTEXT(ctx);
+@@ -455,6 +463,7 @@
+ dest[2] = UBYTE_TO_FLOAT(v[2]);
+ dest[3] = 1.0;
+ }
++#endif /* 0 */
+
+ static void r200_SecondaryColor3fEXT_3f( GLfloat r, GLfloat g, GLfloat b )
+ {
+Index: xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_compat.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_compat.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_compat.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_compat.c:1.1.1.1 Wed Jun 16 09:18:19 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_compat.c Wed Dec 15 01:50:58 2004
+@@ -202,30 +202,28 @@
+
+ static void radeonCompatEmitStateLocked( radeonContextPtr rmesa )
+ {
+- struct radeon_state_atom *state, *tmp;
++ struct radeon_state_atom *atom;
+
+ if (RADEON_DEBUG & (DEBUG_STATE|DEBUG_PRIMS))
+ fprintf(stderr, "%s\n", __FUNCTION__);
+
+- if (rmesa->lost_context) {
+- if (RADEON_DEBUG & (DEBUG_STATE|DEBUG_PRIMS|DEBUG_IOCTL))
+- fprintf(stderr, "%s - lost context\n", __FUNCTION__);
++ if (!rmesa->hw.is_dirty && !rmesa->hw.all_dirty)
++ return;
+
+- foreach_s( state, tmp, &(rmesa->hw.clean) )
+- move_to_tail(&(rmesa->hw.dirty), state );
+-
+- rmesa->lost_context = 0;
+- }
+-
+- foreach_s( state, tmp, &(rmesa->hw.dirty) ) {
+- if (!state->is_tcl)
+- radeonCompatEmitPacket( rmesa, state );
+- move_to_head( &(rmesa->hw.clean), state );
++ foreach(atom, &rmesa->hw.atomlist) {
++ if (rmesa->hw.all_dirty)
++ atom->dirty = GL_TRUE;
++ if (atom->is_tcl)
++ atom->dirty = GL_FALSE;
++ if (atom->dirty)
++ radeonCompatEmitPacket(rmesa, atom);
+ }
++
++ rmesa->hw.is_dirty = GL_FALSE;
++ rmesa->hw.all_dirty = GL_FALSE;
+ }
+
+
+-
+ static void radeonCompatEmitPrimitiveLocked( radeonContextPtr rmesa,
+ GLuint hw_primitive,
+ GLuint nverts,
+Index: xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_context.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_context.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_context.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_context.c:1.1.1.2 Thu Jul 22 06:51:51 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_context.c Wed Dec 15 01:50:58 2004
+@@ -62,7 +62,7 @@
+ #include "radeon_vtxfmt.h"
+ #include "radeon_maos.h"
+
+-#define DRIVER_DATE "20030328"
++#define DRIVER_DATE "20040929"
+
+ #include "vblank.h"
+ #include "utils.h"
+@@ -306,7 +306,7 @@
+ DRI_CONF_TEXTURE_DEPTH_32 : DRI_CONF_TEXTURE_DEPTH_16;
+
+ rmesa->swtcl.RenderIndex = ~0;
+- rmesa->lost_context = 1;
++ rmesa->hw.all_dirty = GL_TRUE;
+
+ /* Set the maximum texture size small enough that we can guarentee that
+ * all texture units can bind a maximal texture and have them both in
+Index: xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_context.h
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_context.h:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_context.h:1.1.1.2.2.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_context.h:1.1.1.2 Tue Aug 17 20:17:59 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_context.h Wed Dec 15 01:50:58 2004
+@@ -398,14 +398,11 @@
+
+
+ struct radeon_hw_state {
+- /* All state should be on one of these lists:
+- */
+- struct radeon_state_atom dirty; /* dirty list head placeholder */
+- struct radeon_state_atom clean; /* clean list head placeholder */
++ /* Head of the linked list of state atoms. */
++ struct radeon_state_atom atomlist;
+
+ /* Hardware state, stored as cmdbuf commands:
+ * -- Need to doublebuffer for
+- * - reviving state after loss of context
+ * - eliding noop statechange loops? (except line stipple count)
+ */
+ struct radeon_state_atom ctx;
+@@ -428,6 +425,7 @@
+ struct radeon_state_atom txr[2]; /* for NPOT */
+
+ int max_state_size; /* Number of bytes necessary for a full state emit. */
++ GLboolean is_dirty, all_dirty;
+ };
+
+ struct radeon_state {
+@@ -715,6 +713,10 @@
+ struct radeon_ioctl ioctl;
+ struct radeon_dma dma;
+ struct radeon_store store;
++ /* A full state emit as of the first state emit in the main store, in case
++ * the context is lost.
++ */
++ struct radeon_store backup_store;
+
+ /* Page flipping
+ */
+@@ -733,6 +735,7 @@
+ drm_clip_rect_t *pClipRects;
+ unsigned int lastStamp;
+ GLboolean lost_context;
++ GLboolean save_on_next_emit;
+ radeonScreenPtr radeonScreen; /* Screen private DRI data */
+ drm_radeon_sarea_t *sarea; /* Private SAREA data */
+
+Index: xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_ioctl.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_ioctl.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_ioctl.c:1.1.1.2.2.2
+--- xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_ioctl.c:1.1.1.2 Tue Aug 17 20:17:59 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_ioctl.c Tue Jan 25 00:43:29 2005
+@@ -59,10 +59,8 @@
+
+
+ static void radeonWaitForIdle( radeonContextPtr rmesa );
+-
+-/* =============================================================
+- * Kernel command buffer handling
+- */
++static int radeonFlushCmdBufLocked( radeonContextPtr rmesa,
++ const char * caller );
+
+ static void print_state_atom( struct radeon_state_atom *state )
+ {
+@@ -76,115 +74,160 @@
+
+ }
+
+-static void radeon_emit_state_list( radeonContextPtr rmesa,
+- struct radeon_state_atom *list )
++static void radeonSaveHwState( radeonContextPtr rmesa )
+ {
+- struct radeon_state_atom *state, *tmp;
+- char *dest;
+- int i, size, texunits;
++ struct radeon_state_atom *atom;
++ char * dest = rmesa->backup_store.cmd_buf;
+
+- /* It appears that some permutations of state atoms lock up the
+- * chip. Therefore we make sure that state atoms are emitted in a
+- * fixed order. First mark all dirty state atoms and then go
+- * through all state atoms in a well defined order and emit only
+- * the marked ones.
+- * FIXME: This requires knowledge of which state atoms exist.
+- * FIXME: Is the zbs hack below still needed?
+- */
+- size = 0;
+- foreach_s( state, tmp, list ) {
+- if (state->check( rmesa->glCtx )) {
+- size += state->cmd_size;
+- state->dirty = GL_TRUE;
+- move_to_head( &(rmesa->hw.clean), state );
+- if (RADEON_DEBUG & DEBUG_STATE)
+- print_state_atom( state );
+- }
+- else if (RADEON_DEBUG & DEBUG_STATE)
+- fprintf(stderr, "skip state %s\n", state->name);
+- }
+- /* short cut */
+- if (!size)
+- return;
+-
+- dest = radeonAllocCmdBuf( rmesa, size * 4, __FUNCTION__);
+- texunits = rmesa->glCtx->Const.MaxTextureUnits;
+-
+-#define EMIT_ATOM(ATOM) \
+-do { \
+- if (rmesa->hw.ATOM.dirty) { \
+- rmesa->hw.ATOM.dirty = GL_FALSE; \
+- memcpy( dest, rmesa->hw.ATOM.cmd, rmesa->hw.ATOM.cmd_size * 4); \
+- dest += rmesa->hw.ATOM.cmd_size * 4; \
+- } \
+-} while (0)
+-
+- EMIT_ATOM (ctx);
+- EMIT_ATOM (set);
+- EMIT_ATOM (lin);
+- EMIT_ATOM (msk);
+- EMIT_ATOM (vpt);
+- EMIT_ATOM (tcl);
+- EMIT_ATOM (msc);
+- for (i = 0; i < texunits; ++i) {
+- EMIT_ATOM (tex[i]);
+- EMIT_ATOM (txr[i]);
+- }
+- EMIT_ATOM (zbs);
+- EMIT_ATOM (mtl);
+- for (i = 0; i < 3 + texunits; ++i)
+- EMIT_ATOM (mat[i]);
+- for (i = 0; i < 8; ++i)
+- EMIT_ATOM (lit[i]);
+- for (i = 0; i < 6; ++i)
+- EMIT_ATOM (ucp[i]);
+- EMIT_ATOM (eye);
+- EMIT_ATOM (grd);
+- EMIT_ATOM (fog);
+- EMIT_ATOM (glt);
++ if (RADEON_DEBUG & DEBUG_STATE)
++ fprintf(stderr, "%s\n", __FUNCTION__);
++
++ rmesa->backup_store.cmd_used = 0;
++
++ foreach( atom, &rmesa->hw.atomlist ) {
++ if ( atom->check( rmesa->glCtx ) ) {
++ int size = atom->cmd_size * 4;
++ memcpy( dest, atom->cmd, size);
++ dest += size;
++ rmesa->backup_store.cmd_used += size;
++ if (RADEON_DEBUG & DEBUG_STATE)
++ print_state_atom( atom );
++ }
++ }
++
++ assert( rmesa->backup_store.cmd_used <= RADEON_CMD_BUF_SZ );
++ if (RADEON_DEBUG & DEBUG_STATE)
++ fprintf(stderr, "Returning to radeonEmitState\n");
++}
++
++/* At this point we were in FlushCmdBufLocked but we had lost our context, so
++ * we need to unwire our current cmdbuf, hook the one with the saved state in
++ * it, flush it, and then put the current one back. This is so commands at the
++ * start of a cmdbuf can rely on the state being kept from the previous one.
++ */
++static void radeonBackUpAndEmitLostStateLocked( radeonContextPtr rmesa )
++{
++ GLuint nr_released_bufs;
++ struct radeon_store saved_store;
++
++ if (rmesa->backup_store.cmd_used == 0)
++ return;
++
++ if (RADEON_DEBUG & DEBUG_STATE)
++ fprintf(stderr, "Emitting backup state on lost context\n");
++
++ rmesa->lost_context = GL_FALSE;
+
+-#undef EMIT_ATOM
++ nr_released_bufs = rmesa->dma.nr_released_bufs;
++ saved_store = rmesa->store;
++ rmesa->dma.nr_released_bufs = 0;
++ rmesa->store = rmesa->backup_store;
++ radeonFlushCmdBufLocked( rmesa, __FUNCTION__ );
++ rmesa->dma.nr_released_bufs = nr_released_bufs;
++ rmesa->store = saved_store;
+ }
+
++/* =============================================================
++ * Kernel command buffer handling
++ */
++
++/* The state atoms will be emitted in the order they appear in the atom list,
++ * so this step is important.
++ */
++void radeonSetUpAtomList( radeonContextPtr rmesa )
++{
++ int i, mtu = rmesa->glCtx->Const.MaxTextureUnits;
++
++ make_empty_list(&rmesa->hw.atomlist);
++ rmesa->hw.atomlist.name = "atom-list";
++
++ insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.ctx);
++ insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.set);
++ insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.lin);
++ insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.msk);
++ insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.vpt);
++ insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.tcl);
++ insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.msc);
++ for (i = 0; i < mtu; ++i) {
++ insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.tex[i]);
++ insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.txr[i]);
++ }
++ insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.zbs);
++ insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.mtl);
++ for (i = 0; i < 3 + mtu; ++i)
++ insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.mat[i]);
++ for (i = 0; i < 8; ++i)
++ insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.lit[i]);
++ for (i = 0; i < 6; ++i)
++ insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.ucp[i]);
++ insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.eye);
++ insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.grd);
++ insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.fog);
++ insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.glt);
++}
+
+ void radeonEmitState( radeonContextPtr rmesa )
+ {
+- struct radeon_state_atom *state, *tmp;
++ struct radeon_state_atom *atom;
++ char *dest;
+
+ if (RADEON_DEBUG & (DEBUG_STATE|DEBUG_PRIMS))
+ fprintf(stderr, "%s\n", __FUNCTION__);
+
+- /* Somewhat overkill:
++ if (rmesa->save_on_next_emit) {
++ radeonSaveHwState(rmesa);
++ rmesa->save_on_next_emit = GL_FALSE;
++ }
++
++ /* this code used to return here but now it emits zbs */
++
++ /* To avoid going across the entire set of states multiple times, just check
++ * for enough space for the case of emitting all state, and inline the
++ * radeonAllocCmdBuf code here without all the checks.
+ */
+- if (rmesa->lost_context) {
+- if (RADEON_DEBUG & (DEBUG_STATE|DEBUG_PRIMS|DEBUG_IOCTL))
+- fprintf(stderr, "%s - lost context\n", __FUNCTION__);
+-
+- foreach_s( state, tmp, &(rmesa->hw.clean) )
+- move_to_tail(&(rmesa->hw.dirty), state );
+-
+- rmesa->lost_context = 0;
+- }
+- else if (1) {
+- /* This is a darstardly kludge to work around a lockup that I
+- * haven't otherwise figured out.
+- */
+- move_to_tail(&(rmesa->hw.dirty), &(rmesa->hw.zbs) );
++ radeonEnsureCmdBufSpace(rmesa, rmesa->hw.max_state_size);
++ dest = rmesa->store.cmd_buf + rmesa->store.cmd_used;
++
++ /* We always always emit zbs, this is due to a bug found by keithw in
++ * the hardware and rediscovered after Erics changes by me.
++ * if you ever touch this code make sure you emit zbs otherwise
++ * you get tcl lockups on at least M7/7500 class of chips - airlied */
++ rmesa->hw.zbs.dirty=1;
++
++ if (RADEON_DEBUG & DEBUG_STATE) {
++ foreach(atom, &rmesa->hw.atomlist) {
++ if (atom->dirty || rmesa->hw.all_dirty) {
++ if (atom->check(rmesa->glCtx))
++ print_state_atom(atom);
++ else
++ fprintf(stderr, "skip state %s\n", atom->name);
++ }
++ }
+ }
+
+- if (!(rmesa->radeonScreen->chipset & RADEON_CHIPSET_TCL)) {
+- foreach_s( state, tmp, &(rmesa->hw.dirty) ) {
+- if (state->is_tcl) {
+- move_to_head( &(rmesa->hw.clean), state );
+- }
+- }
++ foreach(atom, &rmesa->hw.atomlist) {
++ if (rmesa->hw.all_dirty)
++ atom->dirty = GL_TRUE;
++ if (!(rmesa->radeonScreen->chipset & RADEON_CHIPSET_TCL) &&
++ atom->is_tcl)
++ atom->dirty = GL_FALSE;
++ if (atom->dirty) {
++ if (atom->check(rmesa->glCtx)) {
++ int size = atom->cmd_size * 4;
++ memcpy(dest, atom->cmd, size);
++ dest += size;
++ rmesa->store.cmd_used += size;
++ atom->dirty = GL_FALSE;
++ }
++ }
+ }
+
+- radeon_emit_state_list( rmesa, &rmesa->hw.dirty );
++ assert(rmesa->store.cmd_used <= RADEON_CMD_BUF_SZ);
++
++ rmesa->hw.is_dirty = GL_FALSE;
++ rmesa->hw.all_dirty = GL_FALSE;
+ }
+
+-
+-
+ /* Fire a section of the retained (indexed_verts) buffer as a regular
+ * primtive.
+ */
+@@ -376,7 +419,7 @@
+ (component[0]->aos_start + offset * component[0]->aos_stride * 4);
+ #else
+ drm_radeon_cmd_header_t *cmd;
+- int sz = AOS_BUFSZ;
++ int sz = AOS_BUFSZ(nr);
+ int i;
+ int *tmp;
+
+@@ -491,6 +534,9 @@
+ int ret, i;
+ drm_radeon_cmd_buffer_t cmd;
+
++ if (rmesa->lost_context)
++ radeonBackUpAndEmitLostStateLocked(rmesa);
++
+ if (RADEON_DEBUG & DEBUG_IOCTL) {
+ fprintf(stderr, "%s from %s\n", __FUNCTION__, caller);
+
+@@ -544,18 +590,7 @@
+ rmesa->store.statenr = 0;
+ rmesa->store.cmd_used = 0;
+ rmesa->dma.nr_released_bufs = 0;
+- /* Set lost_context so that the first state emit on the new buffer is a full
+- * one. This is because the context might get lost while preparing the next
+- * buffer, and when we lock and find out, we don't have the information to
+- * recreate the state. This function should always be called before the new
+- * buffer is begun, so it's sufficient to just set lost_context here.
+- *
+- * The alternative to this would be to copy out the state on unlock
+- * (approximately) and if we did lose the context, dispatch a cmdbuf to reset
+- * the state to that old copy before continuing with the accumulated command
+- * buffer.
+- */
+- rmesa->lost_context = 1;
++ rmesa->save_on_next_emit = 1;
+
+ return ret;
+ }
+@@ -897,6 +932,7 @@
+ }
+
+ rmesa->swap_ust = ust;
++ rmesa->hw.all_dirty = GL_TRUE;
+ }
+
+ void radeonPageFlip( const __DRIdrawablePrivate *dPriv )
+@@ -990,7 +1026,14 @@
+ __FUNCTION__, all, cx, cy, cw, ch );
+ }
+
+- RADEON_FIREVERTICES( rmesa );
++ {
++ LOCK_HARDWARE( rmesa );
++ UNLOCK_HARDWARE( rmesa );
++ if ( dPriv->numClipRects == 0 )
++ return;
++ }
++
++ radeonFlush( ctx );
+
+ if ( mask & DD_FRONT_LEFT_BIT ) {
+ flags |= RADEON_FRONT;
+@@ -1028,13 +1071,6 @@
+ cx += dPriv->x;
+ cy = dPriv->y + dPriv->h - cy - ch;
+
+- /* We have to emit state along with the clear, since the kernel relies on
+- * some of it. The EmitState that was above RADEON_FIREVERTICES was an
+- * attempt to do that, except that another context may come in and cause us
+- * to lose our context while we're unlocked.
+- */
+- radeonEmitState( rmesa );
+-
+ LOCK_HARDWARE( rmesa );
+
+ /* Throttle the number of clear ioctls we do.
+@@ -1146,6 +1182,7 @@
+ }
+
+ UNLOCK_HARDWARE( rmesa );
++ rmesa->hw.all_dirty = GL_TRUE;
+ }
+
+
+@@ -1189,8 +1226,7 @@
+ if (rmesa->dma.flush)
+ rmesa->dma.flush( rmesa );
+
+- if (!is_empty_list(&rmesa->hw.dirty))
+- radeonEmitState( rmesa );
++ radeonEmitState( rmesa );
+
+ if (rmesa->store.cmd_used)
+ radeonFlushCmdBuf( rmesa, __FUNCTION__ );
+Index: xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_ioctl.h
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_ioctl.h:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_ioctl.h:1.1.1.2.2.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_ioctl.h:1.1.1.2 Tue Aug 17 20:17:59 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_ioctl.h Wed Dec 15 01:50:58 2004
+@@ -103,6 +103,7 @@
+ extern void radeonWaitForVBlank( radeonContextPtr rmesa );
+ extern void radeonInitIoctlFuncs( GLcontext *ctx );
+ extern void radeonGetAllParams( radeonContextPtr rmesa );
++extern void radeonSetUpAtomList( radeonContextPtr rmesa );
+
+ /* radeon_compat.c:
+ */
+@@ -111,7 +112,6 @@
+ GLuint hw_primitive,
+ GLuint nrverts );
+
+-
+ /* ================================================================
+ * Helper macros:
+ */
+@@ -130,7 +130,8 @@
+ #define RADEON_STATECHANGE( rmesa, ATOM ) \
+ do { \
+ RADEON_NEWPRIM( rmesa ); \
+- move_to_head( &(rmesa->hw.dirty), &(rmesa->hw.ATOM)); \
++ rmesa->hw.ATOM.dirty = GL_TRUE; \
++ rmesa->hw.is_dirty = GL_TRUE; \
+ } while (0)
+
+ #define RADEON_DB_STATE( ATOM ) \
+@@ -144,7 +145,8 @@
+ if (memcmp(atom->cmd, atom->lastcmd, atom->cmd_size*4)) {
+ int *tmp;
+ RADEON_NEWPRIM( rmesa );
+- move_to_head( &(rmesa->hw.dirty), atom );
++ atom->dirty = GL_TRUE;
++ rmesa->hw.is_dirty = GL_TRUE;
+ tmp = atom->cmd;
+ atom->cmd = atom->lastcmd;
+ atom->lastcmd = tmp;
+Index: xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_lock.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_lock.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_lock.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_lock.c:1.1.1.1 Wed Jun 16 09:18:20 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_lock.c Wed Dec 15 01:50:58 2004
+@@ -124,4 +124,6 @@
+ DRI_AGE_TEXTURES( rmesa->texture_heaps[ i ] );
+ }
+ }
++
++ rmesa->lost_context = GL_TRUE;
+ }
+Index: xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_screen.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_screen.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_screen.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_screen.c:1.1.1.2 Thu Jul 22 06:51:52 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_screen.c Wed Dec 15 01:50:58 2004
+@@ -87,11 +87,14 @@
+ #define PCI_CHIP_RADEON_QZ 0x515A
+
+ #define PCI_CHIP_RADEON_LW 0x4C57 /* mobility 7 - has tcl */
++#define PCI_CHIP_RADEON_LX 0x4C58 /* mobility FireGL 7800 m7 */
+
+ #define PCI_CHIP_RADEON_LY 0x4C59
+ #define PCI_CHIP_RADEON_LZ 0x4C5A
+
+ #define PCI_CHIP_RV200_QW 0x5157 /* Radeon 7500 - not an R200 at all */
++#define PCI_CHIP_RV200_QX 0x5158
++
+ /* IGP Chipsets */
+ #define PCI_CHIP_RS100_4136 0x4136
+ #define PCI_CHIP_RS200_4137 0x4137
+@@ -309,7 +312,9 @@
+ case PCI_CHIP_RADEON_QF:
+ case PCI_CHIP_RADEON_QG:
+ case PCI_CHIP_RV200_QW:
++ case PCI_CHIP_RV200_QX:
+ case PCI_CHIP_RADEON_LW:
++ case PCI_CHIP_RADEON_LX:
+ screen->chipset |= RADEON_CHIPSET_TCL;
+ case PCI_CHIP_RADEON_QY:
+ case PCI_CHIP_RADEON_QZ:
+Index: xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_state_init.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_state_init.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_state_init.c:1.1.1.2.2.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_state_init.c:1.1.1.2 Tue Aug 17 20:17:59 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_state_init.c Wed Dec 15 01:50:58 2004
+@@ -59,8 +59,9 @@
+ fprintf(stderr, msg);
+ fprintf(stderr, ": ");
+
+- foreach(l, &(rmesa->hw.dirty)) {
+- fprintf(stderr, "%s, ", l->name);
++ foreach(l, &rmesa->hw.atomlist) {
++ if (l->dirty || rmesa->hw.all_dirty)
++ fprintf(stderr, "%s, ", l->name);
+ }
+
+ fprintf(stderr, "\n");
+@@ -197,11 +198,6 @@
+ rmesa->state.pixel.readOffset = rmesa->state.color.drawOffset;
+ rmesa->state.pixel.readPitch = rmesa->state.color.drawPitch;
+
+- /* Initialize lists:
+- */
+- make_empty_list(&(rmesa->hw.dirty));
+- make_empty_list(&(rmesa->hw.clean));
+-
+ rmesa->hw.max_state_size = 0;
+
+ #define ALLOC_STATE( ATOM, CHK, SZ, NM, FLAG ) \
+@@ -212,7 +208,7 @@
+ rmesa->hw.ATOM.name = NM; \
+ rmesa->hw.ATOM.is_tcl = FLAG; \
+ rmesa->hw.ATOM.check = check_##CHK; \
+- insert_at_head(&(rmesa->hw.dirty), &(rmesa->hw.ATOM)); \
++ rmesa->hw.ATOM.dirty = GL_TRUE; \
+ rmesa->hw.max_state_size += SZ * sizeof(int); \
+ } while (0)
+
+@@ -256,6 +252,7 @@
+ ALLOC_STATE( txr[0], txr0, TXR_STATE_SIZE, "TXR/txr-0", 0 );
+ ALLOC_STATE( txr[1], txr1, TXR_STATE_SIZE, "TXR/txr-1", 0 );
+
++ radeonSetUpAtomList( rmesa );
+
+ /* Fill in the packet headers:
+ */
+@@ -552,4 +549,6 @@
+ rmesa->hw.eye.cmd[EYE_Y] = 0;
+ rmesa->hw.eye.cmd[EYE_Z] = IEEE_ONE;
+ rmesa->hw.eye.cmd[EYE_RESCALE_FACTOR] = IEEE_ONE;
++
++ rmesa->hw.all_dirty = GL_TRUE;
+ }
+Index: xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_subset_tex.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_subset_tex.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_subset_tex.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_subset_tex.c:1.1.1.1 Wed Jun 16 09:18:22 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_subset_tex.c Wed Dec 15 01:50:58 2004
+@@ -75,8 +75,7 @@
+ if ( rmesa ) {
+ if ( t == rmesa->state.texture.unit[0].texobj ) {
+ rmesa->state.texture.unit[0].texobj = NULL;
+- remove_from_list( &rmesa->hw.tex[0] );
+- make_empty_list( &rmesa->hw.tex[0] );
++ rmesa->hw.tex[0].dirty = GL_FALSE;
+ }
+ }
+
+Index: xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_swtcl.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_swtcl.c:1.1.1.3 xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_swtcl.c:1.1.1.3.2.2
+--- xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_swtcl.c:1.1.1.3 Tue Aug 17 20:17:59 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_swtcl.c Thu Jan 13 01:10:28 2005
+@@ -564,9 +564,12 @@
+ #define EMIT_ELT(offset, x) do { \
+ int off = offset + ( ( (GLuint)dest & 0x2 ) >> 1 ); \
+ GLushort *des = (GLushort *)( (GLuint)dest & ~0x2 ); \
+- (des)[ off + 1 - 2 * ( off & 1 ) ] = (GLushort)(x); } while (0)
++ (des)[ off + 1 - 2 * ( off & 1 ) ] = (GLushort)(x); \
++ (void)rmesa; } while (0)
+ #else
+-#define EMIT_ELT(offset, x) (dest)[offset] = (GLushort) (x)
++#define EMIT_ELT(offset, x) do { \
++ (dest)[offset] = (GLushort) (x); \
++ (void)rmesa; } while (0)
+ #endif
+ #define EMIT_TWO_ELTS(offset, x, y) *(GLuint *)(dest+offset) = ((y)<<16)|(x);
+ #define INCR_ELTS( nr ) dest += nr
+Index: xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_tcl.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_tcl.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_tcl.c:1.1.1.2.2.2
+--- xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_tcl.c:1.1.1.2 Tue Aug 17 20:17:59 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_tcl.c Thu Jan 13 01:10:28 2005
+@@ -169,7 +169,7 @@
+ * discrete and there are no intervening state changes. (Somewhat
+ * duplicates changes to DrawArrays code)
+ */
+-static void EMIT_PRIM( GLcontext *ctx,
++static void radeonEmitPrim( GLcontext *ctx,
+ GLenum prim,
+ GLuint hwprim,
+ GLuint start,
+@@ -194,7 +194,9 @@
+ count - start );
+ }
+
+-
++#define EMIT_PRIM( ctx, prim, hwprim, start, count ) do { \
++ radeonEmitPrim( ctx, prim, hwprim, start, count ); \
++ (void) rmesa; } while (0)
+
+ /* Try & join small primitives
+ */
+@@ -214,9 +216,12 @@
+ #define EMIT_ELT(dest, offset, x) do { \
+ int off = offset + ( ( (GLuint)dest & 0x2 ) >> 1 ); \
+ GLushort *des = (GLushort *)( (GLuint)dest & ~0x2 ); \
+- (des)[ off + 1 - 2 * ( off & 1 ) ] = (GLushort)(x); } while (0)
++ (des)[ off + 1 - 2 * ( off & 1 ) ] = (GLushort)(x); \
++ (void)rmesa; } while (0)
+ #else
+-#define EMIT_ELT(dest, offset, x) (dest)[offset] = (GLushort) (x)
++#define EMIT_ELT(dest, offset, x) do { \
++ (dest)[offset] = (GLushort) (x); \
++ (void)rmesa; } while (0)
+ #endif
+
+ #define EMIT_TWO_ELTS(dest, offset, x, y) *(GLuint *)(dest+offset) = ((y)<<16)|(x);
+Index: xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_texmem.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_texmem.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_texmem.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_texmem.c:1.1.1.1 Wed Jun 16 09:18:23 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_texmem.c Wed Dec 15 01:50:58 2004
+@@ -41,7 +41,6 @@
+ #include "imports.h"
+ #include "context.h"
+ #include "macros.h"
+-#include "simple_list.h"
+
+ #include "radeon_context.h"
+ #include "radeon_ioctl.h"
+@@ -66,8 +65,7 @@
+ for ( i = 0 ; i < rmesa->glCtx->Const.MaxTextureUnits ; i++ ) {
+ if ( t == rmesa->state.texture.unit[i].texobj ) {
+ rmesa->state.texture.unit[i].texobj = NULL;
+- remove_from_list( &rmesa->hw.tex[i] );
+- make_empty_list( &rmesa->hw.tex[i] );
++ rmesa->hw.tex[i].dirty = GL_FALSE;
+ }
+ }
+ }
+Index: xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_vtxfmt_c.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_vtxfmt_c.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_vtxfmt_c.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_vtxfmt_c.c:1.1.1.1 Wed Jun 16 09:18:24 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_vtxfmt_c.c Wed Dec 15 01:50:58 2004
+@@ -117,7 +117,7 @@
+ }
+
+
+-
++#if 0
+ /* Color for ubyte (packed) color formats:
+ */
+ static void radeon_Color3ub_ub( GLubyte r, GLubyte g, GLubyte b )
+@@ -159,7 +159,7 @@
+ radeonContextPtr rmesa = RADEON_CONTEXT(ctx);
+ *(GLuint *)rmesa->vb.colorptr = LE32_TO_CPU(*(GLuint *)v);
+ }
+-
++#endif /* 0 */
+
+ static void radeon_Color3f_ub( GLfloat r, GLfloat g, GLfloat b )
+ {
+@@ -208,6 +208,7 @@
+
+ /* Color for float color+alpha formats:
+ */
++#if 0
+ static void radeon_Color3ub_4f( GLubyte r, GLubyte g, GLubyte b )
+ {
+ GET_CURRENT_CONTEXT(ctx);
+@@ -251,6 +252,7 @@
+ dest[2] = UBYTE_TO_FLOAT(v[2]);
+ dest[3] = UBYTE_TO_FLOAT(v[3]);
+ }
++#endif /* 0 */
+
+
+ static void radeon_Color3f_4f( GLfloat r, GLfloat g, GLfloat b )
+@@ -300,6 +302,7 @@
+
+ /* Color for float color formats:
+ */
++#if 0
+ static void radeon_Color3ub_3f( GLubyte r, GLubyte g, GLubyte b )
+ {
+ GET_CURRENT_CONTEXT(ctx);
+@@ -341,6 +344,7 @@
+ dest[2] = UBYTE_TO_FLOAT(v[2]);
+ ctx->Current.Attrib[VERT_ATTRIB_COLOR0][3] = UBYTE_TO_FLOAT(v[3]);
+ }
++#endif /* 0 */
+
+
+ static void radeon_Color3f_3f( GLfloat r, GLfloat g, GLfloat b )
+@@ -388,6 +392,7 @@
+
+ /* Secondary Color:
+ */
++#if 0
+ static void radeon_SecondaryColor3ubEXT_ub( GLubyte r, GLubyte g, GLubyte b )
+ {
+ GET_CURRENT_CONTEXT(ctx);
+@@ -409,6 +414,7 @@
+ dest->blue = v[2];
+ dest->alpha = 0xff;
+ }
++#endif /* 0 */
+
+ static void radeon_SecondaryColor3fEXT_ub( GLfloat r, GLfloat g, GLfloat b )
+ {
+@@ -432,6 +438,7 @@
+ dest->alpha = 255;
+ }
+
++#if 0
+ static void radeon_SecondaryColor3ubEXT_3f( GLubyte r, GLubyte g, GLubyte b )
+ {
+ GET_CURRENT_CONTEXT(ctx);
+@@ -453,6 +460,7 @@
+ dest[2] = UBYTE_TO_FLOAT(v[2]);
+ dest[3] = 1.0;
+ }
++#endif /* 0 */
+
+ static void radeon_SecondaryColor3fEXT_3f( GLfloat r, GLfloat g, GLfloat b )
+ {
+@@ -768,6 +776,7 @@
+ CHOOSE(Normal3fv, pfv, MASK_NORM, ACTIVE_NORM,
+ (const GLfloat *v), (v))
+
++#if 0
+ CHOOSE_COLOR(Color4ub, p4ub, 4, MASK_COLOR, ACTIVE_COLOR,
+ (GLubyte a,GLubyte b, GLubyte c, GLubyte d), (a,b,c,d))
+ CHOOSE_COLOR(Color4ubv, pubv, 4, MASK_COLOR, ACTIVE_COLOR,
+@@ -776,6 +785,7 @@
+ (GLubyte a,GLubyte b, GLubyte c), (a,b,c))
+ CHOOSE_COLOR(Color3ubv, pubv, 3, MASK_COLOR, ACTIVE_COLOR,
+ (const GLubyte *v), (v))
++#endif
+
+ CHOOSE_COLOR(Color4f, p4f, 4, MASK_COLOR, ACTIVE_COLOR,
+ (GLfloat a,GLfloat b, GLfloat c, GLfloat d), (a,b,c,d))
+@@ -787,10 +797,12 @@
+ (const GLfloat *v), (v))
+
+
++#if 0
+ CHOOSE_SECONDARY_COLOR(SecondaryColor3ubEXT, p3ub, MASK_SPEC, ACTIVE_SPEC,
+ (GLubyte a,GLubyte b, GLubyte c), (a,b,c))
+ CHOOSE_SECONDARY_COLOR(SecondaryColor3ubvEXT, pubv, MASK_SPEC, ACTIVE_SPEC,
+ (const GLubyte *v), (v))
++#endif
+ CHOOSE_SECONDARY_COLOR(SecondaryColor3fEXT, p3f, MASK_SPEC, ACTIVE_SPEC,
+ (GLfloat a,GLfloat b, GLfloat c), (a,b,c))
+ CHOOSE_SECONDARY_COLOR(SecondaryColor3fvEXT, pfv, MASK_SPEC, ACTIVE_SPEC,
+Index: xc/extras/Mesa/src/mesa/drivers/dri/savage/Makefile
+diff -u /dev/null xc/extras/Mesa/src/mesa/drivers/dri/savage/Makefile:1.1.1.1.2.1
+--- /dev/null Fri Feb 11 21:35:30 2005
++++ xc/extras/Mesa/src/mesa/drivers/dri/savage/Makefile Wed Dec 15 01:50:59 2004
+@@ -0,0 +1,40 @@
++# src/mesa/drivers/dri/r128/Makefile
++
++TOP = ../../../../..
++include $(TOP)/configs/current
++
++LIBNAME = savage_dri.so
++
++# Doesn't exist yet.
++#MINIGLX_SOURCES = server/savage_dri.c
++
++COMMON_SOURCES = \
++ ../../common/driverfuncs.c \
++ ../common/mm.c \
++ ../common/utils.c \
++ ../common/texmem.c \
++ ../common/vblank.c \
++ ../common/xmlconfig.c \
++ ../common/dri_util.c \
++ ../common/glcontextmodes.c
++
++DRIVER_SOURCES = \
++ savage_xmesa.c \
++ savagedd.c \
++ savagestate.c \
++ savagetex.c \
++ savagetris.c \
++ savageioctl.c \
++ savagespan.c \
++ savagedma.c
++
++C_SOURCES = \
++ $(COMMON_SOURCES) \
++ $(DRIVER_SOURCES)
++
++ASM_SOURCES =
++
++
++include ../Makefile.template
++
++symlinks:
+Index: xc/extras/Mesa/src/mesa/drivers/dri/savage/savage_xmesa.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/savage/savage_xmesa.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/savage/savage_xmesa.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/savage/savage_xmesa.c:1.1.1.1 Wed Jun 16 09:18:35 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/savage/savage_xmesa.c Wed Dec 15 01:50:59 2004
+@@ -34,6 +34,8 @@
+
+ #include "simple_list.h"
+
++#include "utils.h"
++
+ #include "swrast/swrast.h"
+ #include "swrast_setup/swrast_setup.h"
+ #include "tnl/tnl.h"
+@@ -55,6 +57,10 @@
+
+ #include "savagedma.h"
+
++#ifdef USE_NEW_INTERFACE
++static PFNGLXCREATECONTEXTMODES create_context_modes = NULL;
++#endif /* USE_NEW_INTERFACE */
++
+ #ifndef SAVAGE_DEBUG
+ int SAVAGE_DEBUG = (0
+ /* | DEBUG_ALWAYS_SYNC */
+@@ -88,31 +94,6 @@
+ SAVAGEDRIPtr gDRIPriv = (SAVAGEDRIPtr)sPriv->pDevPriv;
+
+
+- /* Check the DRI version */
+- {
+- int major, minor, patch;
+- if (XF86DRIQueryVersion(sPriv->display, &major, &minor, &patch)) {
+- if (major != 4 || minor < 0) {
+- __driUtilMessage("savage DRI driver expected DRI version 4.0.x but got version %d.%d.%d", major, minor, patch);
+- return GL_FALSE;
+- }
+- }
+- }
+-
+- /* Check that the DDX driver version is compatible */
+- if (sPriv->ddxMajor != 1 ||
+- sPriv->ddxMinor < 0) {
+- __driUtilMessage("savage DRI driver expected DDX driver version 1.0.x but got version %d.%d.%d", sPriv->ddxMajor, sPriv->ddxMinor, sPriv->ddxPatch);
+- return GL_FALSE;
+- }
+-
+- /* Check that the DRM driver version is compatible */
+- if (sPriv->drmMajor != 1 ||
+- sPriv->drmMinor < 0) {
+- __driUtilMessage("savage DRI driver expected DRM driver version 1.1.x but got version %d.%d.%d", sPriv->drmMajor, sPriv->drmMinor, sPriv->drmPatch);
+- return GL_FALSE;
+- }
+-
+ /* Allocate the private area */
+ savageScreen = (savageScreenPrivate *)Xmalloc(sizeof(savageScreenPrivate));
+ if (!savageScreen)
+@@ -813,8 +794,9 @@
+
+
+
++#ifndef DRI_NEW_INTERFACE_ONLY
+ /*
+- * This is the bootstrap function for the driver.
++ * This is the (old) bootstrap function for the driver.
+ * The __driCreateScreen name is the symbol that libGL.so fetches.
+ * Return: pointer to a __DRIscreenPrivate.
+ */
+@@ -825,6 +807,147 @@
+ psp = __driUtilCreateScreen(dpy, scrn, psc, numConfigs, config, &savageAPI);
+ return (void *) psp;
+ }
++#endif /* DRI_NEW_INTERFACE_ONLY */
++
++
++
++#ifdef USE_NEW_INTERFACE
++static __GLcontextModes *
++savageFillInModes( unsigned pixel_bits, unsigned depth_bits,
++ unsigned stencil_bits, GLboolean have_back_buffer )
++{
++ __GLcontextModes * modes;
++ __GLcontextModes * m;
++ unsigned num_modes;
++ unsigned depth_buffer_factor;
++ unsigned back_buffer_factor;
++ GLenum fb_format;
++ GLenum fb_type;
++
++ /* Right now GLX_SWAP_COPY_OML isn't supported, but it would be easy
++ * enough to add support. Basically, if a context is created with an
++ * fbconfig where the swap method is GLX_SWAP_COPY_OML, pageflipping
++ * will never be used.
++ *
++ * FK: What about drivers that don't use page flipping? Could they
++ * just expose GLX_SWAP_COPY_OML?
++ */
++ static const GLenum back_buffer_modes[] = {
++ GLX_NONE, GLX_SWAP_UNDEFINED_OML /*, GLX_SWAP_COPY_OML */
++ };
++
++ uint8_t depth_bits_array[2];
++ uint8_t stencil_bits_array[2];
++
++
++ depth_bits_array[0] = depth_bits;
++ depth_bits_array[1] = depth_bits;
++
++ /* Just like with the accumulation buffer, always provide some modes
++ * with a stencil buffer. It will be a sw fallback, but some apps won't
++ * care about that.
++ */
++ stencil_bits_array[0] = 0;
++ stencil_bits_array[1] = (stencil_bits == 0) ? 8 : stencil_bits;
++
++ depth_buffer_factor = ((depth_bits != 0) || (stencil_bits != 0)) ? 2 : 1;
++ back_buffer_factor = (have_back_buffer) ? 2 : 1;
++
++ num_modes = depth_buffer_factor * back_buffer_factor * 4;
++
++ if ( pixel_bits == 16 ) {
++ fb_format = GL_RGB;
++ fb_type = GL_UNSIGNED_SHORT_5_6_5;
++ }
++ else {
++ fb_format = GL_BGR;
++ fb_type = GL_UNSIGNED_INT_8_8_8_8_REV;
++ }
++
++ modes = (*create_context_modes)( num_modes, sizeof( __GLcontextModes ) );
++ m = modes;
++ if ( ! driFillInModes( & m, fb_format, fb_type,
++ depth_bits_array, stencil_bits_array, depth_buffer_factor,
++ back_buffer_modes, back_buffer_factor,
++ GLX_TRUE_COLOR ) ) {
++ fprintf( stderr, "[%s:%u] Error creating FBConfig!\n",
++ __func__, __LINE__ );
++ return NULL;
++ }
++
++ if ( ! driFillInModes( & m, fb_format, fb_type,
++ depth_bits_array, stencil_bits_array, depth_buffer_factor,
++ back_buffer_modes, back_buffer_factor,
++ GLX_DIRECT_COLOR ) ) {
++ fprintf( stderr, "[%s:%u] Error creating FBConfig!\n",
++ __func__, __LINE__ );
++ return NULL;
++ }
++
++ /* Mark the visual as slow if there are "fake" stencil bits.
++ */
++ for ( m = modes ; m != NULL ; m = m->next ) {
++ if ( (m->stencilBits != 0) && (m->stencilBits != stencil_bits) ) {
++ m->visualRating = GLX_SLOW_CONFIG;
++ }
++ }
++
++ return modes;
++}
++
++
++/**
++ * This is the bootstrap function for the driver. libGL supplies all of the
++ * requisite information about the system, and the driver initializes itself.
++ * This routine also fills in the linked list pointed to by \c driver_modes
++ * with the \c __GLcontextModes that the driver can support for windows or
++ * pbuffers.
++ *
++ * \return A pointer to a \c __DRIscreenPrivate on success, or \c NULL on
++ * failure.
++ */
++void * __driCreateNewScreen( __DRInativeDisplay *dpy, int scrn, __DRIscreen *psc,
++ const __GLcontextModes * modes,
++ const __DRIversion * ddx_version,
++ const __DRIversion * dri_version,
++ const __DRIversion * drm_version,
++ const __DRIframebuffer * frame_buffer,
++ drmAddress pSAREA, int fd,
++ int internal_api_version,
++ __GLcontextModes ** driver_modes )
++
++{
++ __DRIscreenPrivate *psp;
++ static const __DRIversion ddx_expected = { 1, 0, 0 };
++ static const __DRIversion dri_expected = { 4, 0, 0 };
++ static const __DRIversion drm_expected = { 1, 0, 0 };
+
+
++ if ( ! driCheckDriDdxDrmVersions2( "Savage",
++ dri_version, & dri_expected,
++ ddx_version, & ddx_expected,
++ drm_version, & drm_expected ) ) {
++ return NULL;
++ }
++
++ psp = __driUtilCreateNewScreen(dpy, scrn, psc, NULL,
++ ddx_version, dri_version, drm_version,
++ frame_buffer, pSAREA, fd,
++ internal_api_version, &savageAPI);
++ if ( psp != NULL ) {
++ create_context_modes = (PFNGLXCREATECONTEXTMODES)
++ glXGetProcAddress( (const GLubyte *) "__glXCreateContextModes" );
++ if ( create_context_modes != NULL ) {
++ SAVAGEDRIPtr dri_priv = (SAVAGEDRIPtr)psp->pDevPriv;
++ *driver_modes = savageFillInModes( dri_priv->cpp*8,
++ (dri_priv->cpp == 2) ? 16 : 24,
++ (dri_priv->cpp == 2) ? 0 : 8,
++ (dri_priv->backOffset != dri_priv->depthOffset) );
++ }
++ }
++
++ return (void *) psp;
++}
++#endif /* USE_NEW_INTERFACE */
++
+ #endif
+Index: xc/extras/Mesa/src/mesa/drivers/dri/savage/savagecontext.h
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/savage/savagecontext.h:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/savage/savagecontext.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/savage/savagecontext.h:1.1.1.1 Wed Jun 16 09:18:35 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/savage/savagecontext.h Wed Dec 15 01:50:59 2004
+@@ -37,7 +37,6 @@
+ #include "xf86drm.h"
+ #include "drm.h"
+ #include "savage_drm.h"
+-#include "savage_sarea.h"
+ #include "savage_init.h"
+ #include "mm.h"
+ #include "tnl/t_vertex.h"
+@@ -237,7 +236,7 @@
+ unsigned int texAge[SAVAGE_NR_TEX_HEAPS];
+
+ drm_context_t hHWContext;
+- drmLock *driHwLock;
++ drm_hw_lock_t *driHwLock;
+ GLuint driFd;
+
+ __DRIdrawablePrivate *driDrawable;
+Index: xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_dd.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_dd.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_dd.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_dd.c:1.1.1.1 Wed Jun 16 09:18:25 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_dd.c Wed Dec 15 01:50:59 2004
+@@ -44,7 +44,7 @@
+
+ #include "utils.h"
+
+-#define DRIVER_DATE "20040608"
++#define DRIVER_DATE "20040925"
+
+ /* Return the width and height of the given buffer.
+ */
+Index: xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_reg.h
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_reg.h:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_reg.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_reg.h:1.1.1.1 Wed Jun 16 09:18:26 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_reg.h Wed Dec 15 01:50:59 2004
+@@ -640,13 +640,13 @@
+ #define SiS_S_BOTH_ONE_MINUS_SRC_ALPHA 0x0000000c
+
+ /*
+- * REG_3D_DstBlendMode (0x8A54 - 0x8A57)
++ * REG_3D_ClipTopBottom (0x8A54 - 0x8A57)
+ */
+ #define MASK_BottomClip 0x00001FFF
+ #define MASK_TopClip 0x03FFE000
+
+ /*
+- * REG_3D_DstBlendMode (0x8A58 - 0x8A5B)
++ * REG_3D_ClipLeftRight (0x8A58 - 0x8A5B)
+ */
+ #define MASK_RightClip 0x00001FFF
+ #define MASK_LeftClip 0x03FFE000
+Index: xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_screen.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_screen.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_screen.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_screen.c:1.1.1.2 Thu Jul 22 06:51:58 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_screen.c Wed Dec 15 01:50:59 2004
+@@ -46,7 +46,7 @@
+ const char __driConfigOptions[] =
+ DRI_CONF_BEGIN
+ DRI_CONF_SECTION_DEBUG
+- DRI_CONF_OPT_BEGIN(agp_disable,bool,true)
++ DRI_CONF_OPT_BEGIN(agp_disable,bool,false)
+ DRI_CONF_DESC(en,"Disable AGP vertex dispatch")
+ DRI_CONF_OPT_END
+ DRI_CONF_OPT_BEGIN(fallback_force,bool,false)
+Index: xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_state.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_state.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_state.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_state.c:1.1.1.1 Wed Jun 16 09:18:26 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_state.c Wed Dec 15 01:50:59 2004
+@@ -441,9 +441,6 @@
+ __GLSiSHardware *prev = &smesa->prev;
+ __GLSiSHardware *current = &smesa->current;
+
+- if (!ctx->Color.ColorLogicOpEnabled)
+- return;
+-
+ current->hwDstSet &= ~MASK_ROP2;
+ switch (opcode)
+ {
+Index: xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_tris.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_tris.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_tris.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_tris.c:1.1.1.2 Thu Jul 22 06:51:59 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_tris.c Wed Dec 15 01:50:59 2004
+@@ -611,7 +611,7 @@
+
+ #define POINT_FALLBACK (DD_POINT_SMOOTH)
+ #define LINE_FALLBACK (DD_LINE_STIPPLE|DD_LINE_SMOOTH)
+-#define TRI_FALLBACK (DD_TRI_SMOOTH)
++#define TRI_FALLBACK (DD_TRI_STIPPLE|DD_TRI_SMOOTH)
+ #define ANY_FALLBACK_FLAGS (POINT_FALLBACK|LINE_FALLBACK|TRI_FALLBACK)
+ #define ANY_RASTER_FLAGS (DD_TRI_LIGHT_TWOSIDE|DD_TRI_OFFSET|DD_TRI_UNFILLED)
+ #define _SIS_NEW_RENDER_STATE (ANY_RASTER_FLAGS | ANY_FALLBACK_FLAGS)
+@@ -889,7 +889,8 @@
+ void
+ sisFlushPrimsLocked(sisContextPtr smesa)
+ {
+- GLuint *start;
++ if (smesa->vb_cur == smesa->vb_last)
++ return;
+
+ sisUpdateHWState(smesa->glCtx);
+
+@@ -898,7 +899,7 @@
+ mEndPrimitive();
+ MMIO(REG_3D_AGPCmBase, (smesa->vb_last - smesa->vb) +
+ smesa->vb_agp_offset);
+- MMIO(REG_3D_AGPTtDwNum, (smesa->vb_cur - smesa->vb_last) / 4 |
++ MMIO(REG_3D_AGPTtDwNum, ((smesa->vb_cur - smesa->vb_last) / 4) |
+ 0x50000000);
+ MMIO(REG_3D_ParsingSet, smesa->AGPParseSet);
+ MMIO(REG_3D_AGPCmFire, (GLint)(-1));
+Index: xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_tris.h
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_tris.h:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_tris.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_tris.h:1.1.1.1 Wed Jun 16 09:18:27 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_tris.h Wed Dec 15 01:50:59 2004
+@@ -51,6 +51,7 @@
+ static __inline GLuint *sisAllocDmaLow(sisContextPtr smesa, int bytes)
+ {
+ GLuint *start;
++
+ if (smesa->vb_cur + bytes >= smesa->vb_end) {
+ LOCK_HARDWARE();
+ sisFlushPrimsLocked(smesa);
+Index: xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_context.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_context.c:1.1.1.3 xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_context.c:1.1.1.3.2.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_context.c:1.1.1.3 Thu Aug 12 23:06:08 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_context.c Wed Dec 15 01:50:59 2004
+@@ -75,6 +75,7 @@
+ _mesa_enable_extension( ctx, "GL_EXT_texture_lod_bias" );
+ _mesa_enable_extension( ctx, "GL_EXT_blend_func_separate" );
+ _mesa_enable_extension( ctx, "GL_EXT_fog_coord" );
++ _mesa_enable_extension( ctx, "GL_EXT_texture_env_add" );
+
+ #if 0
+ _mesa_enable_extension(ctx, "GL_EXT_secondary_color");
+@@ -83,7 +84,6 @@
+ #endif
+
+ if ( fxMesa->haveTwoTMUs ) {
+- _mesa_enable_extension( ctx, "GL_EXT_texture_env_add" );
+ _mesa_enable_extension( ctx, "GL_ARB_multitexture" );
+ }
+
+@@ -97,9 +97,7 @@
+ _mesa_enable_extension( ctx, "GL_EXT_blend_subtract" );
+ _mesa_enable_extension( ctx, "GL_EXT_blend_equation_separate" );
+ } else {
+-#if 0 /*[dBorca] cannot handle 565. badbad! revise*/
+ _mesa_enable_extension( ctx, "GL_SGIS_generate_mipmap" );
+-#endif
+ }
+
+ if (fxMesa->haveHwStencil) {
+@@ -112,6 +110,7 @@
+
+ if (TDFX_IS_NAPALM(fxMesa)/*fxMesa->Glide.HaveCombineExt - JJJ*/) {
+ _mesa_enable_extension( ctx, "GL_EXT_texture_env_combine" );
++ _mesa_enable_extension( ctx, "GL_ARB_texture_env_combine" );
+ }
+
+ /* core-level extensions */
+Index: xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_render.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_render.c:1.1.1.3 xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_render.c:1.1.1.3.2.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_render.c:1.1.1.3 Thu Aug 12 23:06:10 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_render.c Wed Dec 15 01:50:59 2004
+@@ -501,7 +501,7 @@
+ fxMesa->Glide.grTexClampMode(GR_TMU0 + unit, p->sClamp, p->tClamp);
+ fxMesa->Glide.grTexFilterMode(GR_TMU0 + unit, p->minFilt, p->magFilt);
+ fxMesa->Glide.grTexMipMapMode(GR_TMU0 + unit, p->mmMode, p->LODblend);
+- fxMesa->Glide.grTexLodBiasValue(GR_TMU0 + unit, p->LodBias);
++ fxMesa->Glide.grTexLodBiasValue(GR_TMU0 + unit, CLAMP(p->LodBias, -8, 7.75));
+ }
+ }
+
+Index: xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_tex.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_tex.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_tex.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_tex.c:1.1.1.2 Thu Jul 22 06:52:01 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_tex.c Wed Dec 15 01:50:59 2004
+@@ -49,19 +49,56 @@
+ #include "tdfx_texman.h"
+
+
++/* no borders! can't halve 1x1! (stride > width * comp) not allowed */
+ void
+-_mesa_halve2x2_teximage2d ( GLuint bytesPerPixel,
++_mesa_halve2x2_teximage2d ( GLcontext *ctx,
++ struct gl_texture_image *texImage,
++ GLuint bytesPerPixel,
+ GLint srcWidth, GLint srcHeight,
+ const GLvoid *srcImage, GLvoid *dstImage )
+ {
+ GLint i, j, k;
+- const GLint dstWidth = srcWidth / 2;
+- const GLint dstHeight = srcHeight / 2;
+- const GLint srcRowStride = srcWidth * bytesPerPixel;
+- const GLubyte *src = srcImage;
++ GLint dstWidth = srcWidth / 2;
++ GLint dstHeight = srcHeight / 2;
++ GLint srcRowStride = srcWidth * bytesPerPixel;
++ GLubyte *src = (GLubyte *)srcImage;
+ GLubyte *dst = dstImage;
+
+- /* no borders! can't halve 1x1! (stride > width * comp) not allowed */
++ GLuint bpt = 0;
++ GLubyte *_s = NULL;
++ GLubyte *_d = NULL;
++ GLenum _t;
++
++ if (texImage->TexFormat->MesaFormat == MESA_FORMAT_RGB565) {
++ _t = GL_UNSIGNED_SHORT_5_6_5_REV;
++ bpt = bytesPerPixel;
++ } else if (texImage->TexFormat->MesaFormat == MESA_FORMAT_ARGB4444) {
++ _t = GL_UNSIGNED_SHORT_4_4_4_4_REV;
++ bpt = bytesPerPixel;
++ } else if (texImage->TexFormat->MesaFormat == MESA_FORMAT_ARGB1555) {
++ _t = GL_UNSIGNED_SHORT_1_5_5_5_REV;
++ bpt = bytesPerPixel;
++ }
++ if (bpt) {
++ bytesPerPixel = 4;
++ srcRowStride = srcWidth * bytesPerPixel;
++ if (dstWidth == 0) {
++ dstWidth = 1;
++ }
++ if (dstHeight == 0) {
++ dstHeight = 1;
++ }
++ _s = src = MALLOC(srcRowStride * srcHeight);
++ _d = dst = MALLOC(dstWidth * bytesPerPixel * dstHeight);
++ _mesa_texstore_rgba8888(ctx, 2, GL_RGBA,
++ &_mesa_texformat_rgba8888_rev, src,
++ 0, 0, 0, /* dstX/Y/Zoffset */
++ srcRowStride, /* dstRowStride */
++ 0, /* dstImageStride */
++ srcWidth, srcHeight, 1,
++ texImage->Format, _t, srcImage, &ctx->DefaultPacking);
++ }
++
+ if (srcHeight == 1) {
+ for (i = 0; i < dstWidth; i++) {
+ for (k = 0; k < bytesPerPixel; k++) {
+@@ -96,6 +133,20 @@
+ src += srcRowStride;
+ }
+ }
++
++ if (bpt) {
++ src = _s;
++ dst = _d;
++ texImage->TexFormat->StoreImage(ctx, 2, texImage->Format,
++ texImage->TexFormat, dstImage,
++ 0, 0, 0, /* dstX/Y/Zoffset */
++ dstWidth * bpt,
++ 0, /* dstImageStride */
++ dstWidth, dstHeight, 1,
++ GL_BGRA, CHAN_TYPE, dst, &ctx->DefaultPacking);
++ FREE(dst);
++ FREE(src);
++ }
+ }
+
+
+@@ -1363,7 +1414,9 @@
+ NULL);
+ mipImage = _mesa_select_tex_image(ctx, texUnit, target, level);
+ mip = TDFX_TEXIMAGE_DATA(mipImage);
+- _mesa_halve2x2_teximage2d(texelBytes,
++ _mesa_halve2x2_teximage2d(ctx,
++ texImage,
++ texelBytes,
+ mml->width, mml->height,
+ texImage->Data, mipImage->Data);
+ texImage = mipImage;
+@@ -1470,7 +1523,9 @@
+ ++level;
+ mipImage = _mesa_select_tex_image(ctx, texUnit, target, level);
+ mip = TDFX_TEXIMAGE_DATA(mipImage);
+- _mesa_halve2x2_teximage2d(texelBytes,
++ _mesa_halve2x2_teximage2d(ctx,
++ texImage,
++ texelBytes,
+ mml->width, mml->height,
+ texImage->Data, mipImage->Data);
+ texImage = mipImage;
+Index: xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_vb.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_vb.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_vb.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_vb.c:1.1.1.2 Thu Jul 22 06:52:03 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_vb.c Wed Dec 15 01:50:59 2004
+@@ -300,6 +300,8 @@
+ } else if (ctx->Texture._EnabledUnits & 0x1) {
+ /* unit 0 enabled */
+ ind |= TDFX_W_BIT|TDFX_TEX0_BIT;
++ } else if (fxMesa->Fog.Mode != GR_FOG_DISABLE) {
++ ind |= TDFX_W_BIT;
+ }
+
+ if (fxMesa->Fog.Mode == GR_FOG_WITH_TABLE_ON_FOGCOORD_EXT) {
+Index: xc/extras/Mesa/src/mesa/drivers/dri/unichrome/Makefile
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/unichrome/Makefile:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/unichrome/Makefile:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/unichrome/Makefile:1.1.1.1 Wed Jun 16 09:18:36 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/unichrome/Makefile Wed Dec 15 01:50:59 2004
+@@ -30,6 +30,7 @@
+ via_texstate.c \
+ via_tris.c \
+ via_vb.c \
++ via_texcombine.c \
+ xf86drmVIA.c
+
+ C_SOURCES = \
+Index: xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_context.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_context.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_context.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_context.c:1.1.1.2 Thu Jul 22 06:52:10 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_context.c Wed Dec 15 01:50:59 2004
+@@ -59,7 +59,7 @@
+ #include <stdio.h>
+ #include "macros.h"
+
+-#define DRIVER_DATE "20020221"
++#define DRIVER_DATE "20040923"
+
+ #include "utils.h"
+
+@@ -136,6 +136,110 @@
+ }
+ }
+
++
++/**
++ * Calculate a width that satisfies the hardware's alignment requirements.
++ * On the Unichrome hardware, each scanline must be aligned to a multiple of
++ * 16 pixels.
++ *
++ * \param width Minimum buffer width, in pixels.
++ *
++ * \returns A pixel width that meets the alignment requirements.
++ */
++static __inline__ unsigned
++buffer_align( unsigned width )
++{
++ return (width + 0x0f) & ~0x0f;
++}
++
++
++/**
++ * Calculate the framebuffer parameters for all buffers (front, back, depth,
++ * and stencil) associated with the specified context.
++ *
++ * \warning
++ * This function also calls \c AllocateBuffer to actually allocate the
++ * buffers.
++ *
++ * \sa AllocateBuffer
++ */
++static GLboolean
++calculate_buffer_parameters( viaContextPtr vmesa )
++{
++ const unsigned shift = vmesa->viaScreen->bitsPerPixel / 16;
++ const unsigned extra = (vmesa->drawType == GLX_PBUFFER_BIT) ? 0 : 32;
++ unsigned w;
++ unsigned h;
++
++ if (vmesa->drawType == GLX_PBUFFER_BIT) {
++ w = vmesa->driDrawable->w;
++ h = vmesa->driDrawable->h;
++ }
++ else {
++ w = vmesa->viaScreen->width;
++ h = vmesa->viaScreen->height;
++
++ vmesa->front.offset = 0;
++ vmesa->front.map = (char *) vmesa->driScreen->pFB;
++ }
++
++ vmesa->front.pitch = buffer_align( w ) << shift;
++ vmesa->front.size = vmesa->front.pitch * h;
++
++
++ /* Allocate back-buffer */
++
++ vmesa->back.pitch = (buffer_align( vmesa->driDrawable->w ) << shift)
++ + extra;
++ vmesa->back.size = vmesa->back.pitch * vmesa->driDrawable->h;
++
++#ifdef DEBUG
++ if (VIA_DEBUG) fprintf(stderr, "viaMakeCurrent backbuffer: w = %d h = %d bpp = %d sizs = %d\n",
++ vmesa->back.pitch,
++ vmesa->driDrawable->h,
++ 8 << shift,
++ vmesa->back.size);
++#endif
++
++ /* Allocate depth-buffer */
++ if ( vmesa->hasStencil || vmesa->hasDepth ) {
++ const unsigned dShift = (vmesa->hasStencil)
++ ? 2 : (vmesa->depthBits / 16);
++
++ vmesa->depth.pitch = (buffer_align( vmesa->driDrawable->w ) << dShift)
++ + extra;
++ vmesa->depth.bpp = 8 << dShift;
++ vmesa->depth.size = vmesa->depth.pitch * vmesa->driDrawable->h;
++ }
++ else {
++ (void) memset( & vmesa->depth, 0, sizeof( vmesa->depth ) );
++ }
++
++#ifdef DEBUG
++ if (VIA_DEBUG) fprintf(stderr, "viaMakeCurrent depthbuffer: w = %d h = %d bpp = %d sizs = %d\n",
++ vmesa->depth.pitch,
++ vmesa->driDrawable->h,
++ vmesa->depth.bpp,
++ vmesa->depth.size);
++#endif
++
++ /*=* John Sheng [2003.5.31] flip *=*/
++ if( (vmesa->viaScreen->width == vmesa->driDrawable->w)
++ && (vmesa->viaScreen->height == vmesa->driDrawable->h) ) {
++ vmesa->doPageFlip = GL_FALSE;
++ vmesa->currentPage = 0;
++ vmesa->back.pitch = vmesa->front.pitch;
++ }
++
++ if (!AllocateBuffer(vmesa)) {
++ FREE(vmesa);
++ return GL_FALSE;
++ }
++
++ return GL_TRUE;
++}
++
++
+ void viaReAllocateBuffers(GLframebuffer *drawbuffer)
+ {
+ GLcontext *ctx;
+@@ -152,95 +256,11 @@
+
+ vmesa->driDrawable->w = ctx->DrawBuffer->Width;
+ vmesa->driDrawable->h = ctx->DrawBuffer->Height;
++
+ LOCK_HARDWARE(vmesa);
+-
+- /* Allocate back & depth buffer */
+- {
+- int w, h, bpp;
+- w = vmesa->driDrawable->w;
+- h = vmesa->driDrawable->h;
+- /* back buffer */
+- bpp = vmesa->viaScreen->bitsPerPixel;
+-#ifdef DEBUG
+- if (VIA_DEBUG) fprintf(stderr, "driScreen->fbBPP = %d\n", bpp);
+-#endif
+- if (bpp == 32) {
+- w = BUFFER_ALIGN_WIDTH(w * 4, BUFFER_ALIGNMENT) / 4 + 8;
+- vmesa->back.size = w * h * bpp / 8;
+- vmesa->back.pitch = w << 2;
+- }
+- else {
+- w = BUFFER_ALIGN_WIDTH(w * 2, BUFFER_ALIGNMENT) / 2 + 16;
+- vmesa->back.size = w * h * bpp / 8;
+- vmesa->back.pitch = w << 1;
+- }
+-#ifdef DEBUG
+- if (VIA_DEBUG) fprintf(stderr, "resizebuffer backbuffer: w = %d h = %d bpp = %d sizs = %d\n",
+- w, h, bpp, vmesa->back.size);
+-#endif
+- /* depth buffer */
+- w = vmesa->driDrawable->w;
+- if (vmesa->hasDepth && vmesa->hasStencil) {
+- w = BUFFER_ALIGN_WIDTH(w * 4, BUFFER_ALIGNMENT) / 4 + 8;
+- vmesa->depth.size = w * h * 4;
+- vmesa->depth.pitch = w << 2;
+- vmesa->depth.bpp = 32;
+-#ifdef DEBUG
+- if (VIA_DEBUG) fprintf(stderr, "depthBits = 24\n");
+- if (VIA_DEBUG) fprintf(stderr, "StencilBits = 8\n");
+-#endif
+- }
+- else if (vmesa->hasDepth) {
+- /*=* John Sheng [2003.6.16] patch viewperf drv-08 draw nothing */
+- /*if(vmesa->viaScreen->bitsPerPixel == 32)*/
+- /*vmesa->depthBits = 16;*/
+-
+- if (vmesa->depthBits == 16) {
+- w = BUFFER_ALIGN_WIDTH(w * 2, BUFFER_ALIGNMENT) / 2 + 16;
+- vmesa->depth.size = w * h * 2;
+- vmesa->depth.pitch = w << 1;
+- vmesa->depth.bpp = 16;
+-#ifdef DEBUG
+- if (VIA_DEBUG) fprintf(stderr, "depthBits = 16\n");
+-#endif
+- }
+- else {
+- w = BUFFER_ALIGN_WIDTH(w * 4, BUFFER_ALIGNMENT) / 4 + 8;
+- vmesa->depth.size = w * h * 4;
+- vmesa->depth.pitch = w << 2;
+- vmesa->depth.bpp = 32;
+-#ifdef DEBUG
+- if (VIA_DEBUG) fprintf(stderr, "depthBits = 32\n");
+-#endif
+- }
+- }
+- else if (vmesa->hasStencil) {
+- w = BUFFER_ALIGN_WIDTH(w * 4, BUFFER_ALIGNMENT) / 4 + 8;
+- vmesa->depth.size = w * h * 4;
+- vmesa->depth.pitch = w << 2;
+- vmesa->depth.bpp = 32;
+-#ifdef DEBUG
+- if (VIA_DEBUG) fprintf(stderr, "StencilBits = 8\n");
+-#endif
+- }
+-#ifdef DEBUG
+- if (VIA_DEBUG) fprintf(stderr, "resizebuffer depthbuffer: w = %d h = %d bpp = %d sizs = %d\n",
+- w, h, vmesa->depth.bpp, vmesa->depth.size);
+-#endif
+- /*=* John Sheng [2003.5.31] flip *=*/
+- {
+- if(vmesa->viaScreen->width == vmesa->driDrawable->w &&
+- vmesa->viaScreen->height == vmesa->driDrawable->h) {
+- vmesa->back.pitch = vmesa->front.pitch;
+- vmesa->back.size = vmesa->front.size;
+- }
+- }
+-
+- if (!AllocateBuffer(vmesa)) {
+- FREE(vmesa);
+- }
+- }
++ calculate_buffer_parameters( vmesa );
+ UNLOCK_HARDWARE(vmesa);
++
+ #ifdef DEBUG
+ if (VIA_DEBUG) fprintf(stderr, "%s - out\n", __FUNCTION__);
+ #endif
+@@ -263,12 +283,12 @@
+ "GL_ARB_texture_env_add",
+ "GL_ARB_texture_env_combine", /* John Sheng [2003.7.18] tex combine */
+ "GL_ARB_texture_env_dot3", /* John Sheng [2003.7.18] tex dot3 */
+- "GL_EXT_point_parameters", /* John Sheng [2003.7.18] point param. */
++ "GL_ARB_texture_mirrored_repeat",
+ "GL_EXT_stencil_wrap",
+- "GL_EXT_texture_env_add",
+ "GL_EXT_texture_env_combine", /* John Sheng [2003.7.18] tex combine */
+ "GL_EXT_texture_env_dot3", /* John Sheng [2003.7.18] tex dot3 */
+ "GL_EXT_texture_lod_bias",
++ "GL_NV_blend_square",
+ NULL
+ };
+
+@@ -440,6 +460,8 @@
+ ctx->Const.MaxTextureLevels = 11;
+
+ ctx->Const.MaxTextureUnits = 2;
++ ctx->Const.MaxTextureImageUnits = ctx->Const.MaxTextureUnits;
++ ctx->Const.MaxTextureCoordUnits = ctx->Const.MaxTextureUnits;
+
+ ctx->Const.MinLineWidth = 1.0;
+ ctx->Const.MinLineWidthAA = 1.0;
+@@ -567,12 +589,12 @@
+ if (VIA_DEBUG) fprintf(stderr, "%s - out\n", __FUNCTION__);
+ #endif
+ {
+- GLboolean saam;
+- int count = 0, fbSize;
+ #ifndef USE_XINERAMA
+ vmesa->saam = 0;
+ #else
+- saam = XineramaIsActive(vmesa->display);
++ GLboolean saam = XineramaIsActive(vmesa->display);
++ int count = 0, fbSize;
++
+ if (saam && vmesa->viaScreen->drixinerama) {
+ vmesa->xsi = XineramaQueryScreens(vmesa->display, &count);
+ /* Test RightOf or Down */
+@@ -716,8 +738,10 @@
+ void viaXMesaWindowMoved(viaContextPtr vmesa)
+ {
+ GLuint bytePerPixel = vmesa->viaScreen->bitsPerPixel >> 3;
++#ifdef USE_XINERAMA
+ GLuint side = 0;
+ __DRIdrawablePrivate *dPriv = vmesa->driDrawable;
++#endif
+
+ switch (vmesa->glCtx->Color._DrawDestMask) {
+ case __GL_FRONT_BUFFER_MASK:
+@@ -904,178 +928,22 @@
+ fprintf(stderr, "driContextPriv = %08x\n", (GLuint)driReadPriv);
+ }
+ #endif
+-
++
+ if (driContextPriv) {
+ viaContextPtr vmesa = (viaContextPtr)driContextPriv->driverPrivate;
+- current_mesa = vmesa;
+-
+- vmesa->driDrawable = driDrawPriv;
+- if (vmesa->drawType == GLX_PBUFFER_BIT) {
+- int w, h, bpp;
+-
+- w = vmesa->driDrawable->w;
+- h = vmesa->driDrawable->h;
+- bpp = vmesa->viaScreen->bitsPerPixel;
+- if (bpp == 32) {
+- w = BUFFER_ALIGN_WIDTH(w * 4, BUFFER_ALIGNMENT) / 4;
+- vmesa->front.size = w * h * bpp / 8;
+- vmesa->front.pitch = w << 2;
+- }
+- else {
+- w = BUFFER_ALIGN_WIDTH(w * 2, BUFFER_ALIGNMENT) / 2;
+- vmesa->front.size = w * h * bpp / 8;
+- vmesa->front.pitch = w << 1;
+- }
+- }
+- /*=* John Sheng [2003.6.20] fix resolution 720x480/720x576 front pitch error *=*/
+- else {
+- GLuint w;
+- GLuint h;
+- GLuint bpp;
+- bpp = vmesa->viaScreen->bitsPerPixel;
+- h = vmesa->viaScreen->height;
+- w = vmesa->viaScreen->width;
+- if (bpp == 0x20) {
+- w = BUFFER_ALIGN_WIDTH(w * 4, BUFFER_ALIGNMENT) / 4;
+- vmesa->front.size = w * h * bpp / 8;
+- vmesa->front.pitch = w << 2;
+-#ifdef DEBUG
+- if (VIA_DEBUG) fprintf(stderr, "viaScreen->bitsPerPixel = %d\n", 32);
+-#endif
+- }
+- else if (bpp == 0x10) {
+- w = BUFFER_ALIGN_WIDTH(w * 2, BUFFER_ALIGNMENT) / 2;
+- vmesa->front.size = w * h * bpp / 8;
+- vmesa->front.pitch = w << 1;
+-#ifdef DEBUG
+- if (VIA_DEBUG) fprintf(stderr, "viaScreen->bitsPerPixel = %d\n", 16);
+-#endif
+- }
+- vmesa->front.offset = 0;
+- vmesa->front.map = (char *) vmesa->driScreen->pFB;
+- vmesa->front.size = w * h * vmesa->viaScreen->bitsPerPixel /8;
+- }
+-
+- /* Allocate back & depth buffer */
+- {
+- int w, h, bpp;
+-
+- w = vmesa->driDrawable->w;
+-#ifdef DEBUG
+- if (VIA_DEBUG) fprintf(stderr, "viaMakeCurrent: w = %d\n", w);
+-#endif
+- h = vmesa->driDrawable->h;
+-
+- /* back buffer */
+- bpp = vmesa->viaScreen->bitsPerPixel;
+-#ifdef DEBUG
+- if (VIA_DEBUG) fprintf(stderr, "driScreen->fbBPP = %d\n", bpp);
+-#endif
+- if (bpp == 32) {
+- if (vmesa->drawType == GLX_PBUFFER_BIT)
+- w = BUFFER_ALIGN_WIDTH(w * 4, BUFFER_ALIGNMENT) / 4;
+- else
+- w = BUFFER_ALIGN_WIDTH(w * 4, BUFFER_ALIGNMENT) / 4 + 8;
+-
+- vmesa->back.size = w * h * bpp / 8;
+- vmesa->back.pitch = w << 2;
+- }
+- else {
+- if (vmesa->drawType == GLX_PBUFFER_BIT)
+- w = BUFFER_ALIGN_WIDTH(w * 2, BUFFER_ALIGNMENT) / 2;
+- else
+- w = BUFFER_ALIGN_WIDTH(w * 2, BUFFER_ALIGNMENT) / 2 + 16;
+-
+- vmesa->back.size = w * h * bpp / 8;
+- vmesa->back.pitch = w << 1;
+- }
+-#ifdef DEBUG
+- if (VIA_DEBUG) fprintf(stderr, "viaMakeCurrent backbuffer: w = %d h = %d bpp = %d sizs = %d\n",
+- w, h, bpp, vmesa->back.size);
+-#endif
+- /* depth buffer */
+- w = vmesa->driDrawable->w;
+
+- if (vmesa->hasDepth && vmesa->hasStencil) {
+- if (vmesa->drawType == GLX_PBUFFER_BIT)
+- w = BUFFER_ALIGN_WIDTH(w * 4, BUFFER_ALIGNMENT) / 4;
+- else
+- w = BUFFER_ALIGN_WIDTH(w * 4, BUFFER_ALIGNMENT) / 4 + 8;
+-
+- vmesa->depth.size = w * h * 4;
+- vmesa->depth.pitch = w << 2;
+- vmesa->depth.bpp = 32;
+-#ifdef DEBUG
+- if (VIA_DEBUG) fprintf(stderr, "depthBits = 24\n");
+- if (VIA_DEBUG) fprintf(stderr, "StencilBits = 8\n");
+-#endif
+- }
+- else if (vmesa->hasDepth) {
++ current_mesa = vmesa;
+
+- /*=* John Sheng [2003.6.16] patch viewperf drv-08 draw nothing */
+- /*if(vmesa->viaScreen->bitsPerPixel == 32)*/
+- /*vmesa->depthBits = 16;*/
+-
+- if (vmesa->depthBits == 16) {
+- if (vmesa->drawType == GLX_PBUFFER_BIT)
+- w = BUFFER_ALIGN_WIDTH(w * 2, BUFFER_ALIGNMENT) / 2;
+- else
+- w = BUFFER_ALIGN_WIDTH(w * 2, BUFFER_ALIGNMENT) / 2 + 16;
+-
+- vmesa->depth.size = w * h * 2;
+- vmesa->depth.pitch = w << 1;
+- vmesa->depth.bpp = 16;
+-#ifdef DEBUG
+- if (VIA_DEBUG) fprintf(stderr, "depthBits = 16\n");
+-#endif
+- }
+- else {
+- if (vmesa->drawType == GLX_PBUFFER_BIT)
+- w = BUFFER_ALIGN_WIDTH(w * 4, BUFFER_ALIGNMENT) / 4;
+- else
+- w = BUFFER_ALIGN_WIDTH(w * 4, BUFFER_ALIGNMENT) / 4 + 8;
+-
+- vmesa->depth.size = w * h * 4;
+- vmesa->depth.pitch = w << 2;
+- vmesa->depth.bpp = 32;
+ #ifdef DEBUG
+- if (VIA_DEBUG) fprintf(stderr, "depthBits = 32\n");
+-#endif
+- }
+- }
+- else if (vmesa->hasStencil) {
+- if (vmesa->drawType == GLX_PBUFFER_BIT)
+- w = BUFFER_ALIGN_WIDTH(w * 4, BUFFER_ALIGNMENT) / 4;
+- else
+- w = BUFFER_ALIGN_WIDTH(w * 4, BUFFER_ALIGNMENT) / 4 + 8;
+-
+- vmesa->depth.size = w * h * 4;
+- vmesa->depth.pitch = w << 2;
+- vmesa->depth.bpp = 32;
+-#ifdef DEBUG
+- if (VIA_DEBUG) fprintf(stderr, "StencilBits = 8\n");
++ if (VIA_DEBUG) fprintf(stderr, "viaScreen->bitsPerPixel = %d\n", viaScreen->bitsPerPixel);
++ if (VIA_DEBUG) fprintf(stderr, "viaMakeCurrent: w = %d\n", vmesa->driDrawable->w);
+ #endif
+- }
+-#ifdef DEBUG
+- if (VIA_DEBUG) fprintf(stderr, "viaMakeCurrent depthbuffer: w = %d h = %d bpp = %d sizs = %d\n",
+- w, h, vmesa->depth.bpp, vmesa->depth.size);
+-#endif
+- /*=* John Sheng [2003.5.31] flip *=*/
+- {
+- viaContextPtr vmesa = (viaContextPtr)driContextPriv->driverPrivate;
+- if(vmesa->viaScreen->width == vmesa->driDrawable->w &&
+- vmesa->viaScreen->height == vmesa->driDrawable->h) {
+- vmesa->doPageFlip = GL_FALSE;
+- vmesa->currentPage = 0;
+- vmesa->back.pitch = vmesa->front.pitch;
+- }
+- }
+
+- if (!AllocateBuffer(vmesa)) {
+- FREE(vmesa);
+- return GL_FALSE;
+- }
++ vmesa->driDrawable = driDrawPriv;
++ if ( ! calculate_buffer_parameters( vmesa ) ) {
++ return GL_FALSE;
+ }
++
+ _mesa_make_current2(vmesa->glCtx,
+ (GLframebuffer *)driDrawPriv->driverPrivate,
+ (GLframebuffer *)driReadPriv->driverPrivate);
+Index: xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_context.h
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_context.h:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_context.h:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_context.h:1.1.1.2 Thu Jul 22 06:52:11 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_context.h Wed Dec 15 01:50:59 2004
+@@ -75,10 +75,7 @@
+ #define TAG(x) via##x
+ #include "tnl_dd/t_dd_vertex.h"
+ #undef TAG
+-#define BUFFER_ALIGNMENT 32
+-#define BUFFER_ALIGN_WIDTH1(w, a) (((w) + ((a) - 1)) & ~((a) - 1))
+-#define BUFFER_ALIGN_WIDTH(w, a) (((w) & ((a) - 1)) ? BUFFER_ALIGN_WIDTH1(w, a) : (w))
+-#define BUFFER_ALIGN_ADDRESS(p, a) ((GLvoid *)(((GLint)(p)) + ((a)-1) & ~((a)-1)))
++
+ #define RightOf 1
+ #define LeftOf 2
+ #define Down 4
+@@ -451,6 +448,9 @@
+ extern void viaReAllocateBuffers(GLframebuffer *drawbuffer);
+ extern void viaXMesaWindowMoved(viaContextPtr vmesa);
+
++extern void viaTexCombineState(viaContextPtr vmesa,
++ const struct gl_tex_env_combine_state * combine, unsigned unit );
++
+ #define SUBPIXEL_X -.5
+ #define SUBPIXEL_Y -.5
+
+Index: xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_ioctl.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_ioctl.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_ioctl.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_ioctl.c:1.1.1.1 Wed Jun 16 09:18:37 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_ioctl.c Wed Dec 15 01:50:59 2004
+@@ -313,7 +313,6 @@
+ #ifdef DEBUG
+ if (VIA_DEBUG) fprintf(stderr, "%s SwapPBuffers\n", __FUNCTION__);
+ #endif /*=* [DBG] for pbuffer *=*/
+- /*viaDoSwapBufferSoftFront(vmesa);*/
+ }
+ else {
+ GLuint scrn = 0;
+@@ -1436,83 +1435,7 @@
+ #endif
+ }
+
+-void viaDoSwapBufferSoft(viaContextPtr vmesa)
+-{
+- GLuint nFrontPitch;
+- GLuint nBackPitch;
+- GLuint nFrontBase, nBackBase;
+- GLuint i, j;
+- GLubyte *by, *fy;
+- GLuint w;
+-
+- w = vmesa->viaScreen->width;
+- w = BUFFER_ALIGN_WIDTH(w, BUFFER_ALIGNMENT);
+-
+- if (vmesa->viaScreen->bitsPerPixel == 0x20)
+- nFrontPitch = w << 2;
+- else
+- nFrontPitch = w << 1;
+-
+- nBackPitch = vmesa->back.pitch;
+-
+- /* Caculate Base */
+- nFrontBase = (GLuint) vmesa->driScreen->pFB;
+- nBackBase = ((GLuint) vmesa->back.offset) + ((GLuint) vmesa->driScreen->pFB);
+- by = (GLubyte *) nBackBase;
+- fy = (GLubyte *) nFrontBase;
+-
+- viaFlushPrimsLocked(vmesa);
+-
+- for (i = 0; i < vmesa->driDrawable->h; i++) {
+- fy = (GLubyte *)(nFrontBase + i * nFrontPitch);
+- for (j = 0; j < nBackPitch; j++) {
+- *((GLubyte*)fy) = *((GLubyte*)by);
+- fy = fy + 1;
+- by = by + 1;
+- }
+-
+- }
+-
+-}
+
+-void viaDoSwapBufferSoftFront(viaContextPtr vmesa)
+-{
+- GLuint nFrontPitch;
+- GLuint nBackPitch;
+- GLuint nFrontBase, nBackBase;
+- GLuint i, j;
+- GLubyte *by, *fy;
+- GLuint w;
+-
+- w = vmesa->viaScreen->width;
+- w = BUFFER_ALIGN_WIDTH(w, BUFFER_ALIGNMENT);
+-
+- if (vmesa->viaScreen->bitsPerPixel == 0x20)
+- nFrontPitch = w << 2;
+- else
+- nFrontPitch = w << 1;
+-
+- nBackPitch = vmesa->front.pitch;
+-
+- /* Caculate Base */
+- nFrontBase = (GLuint) vmesa->driScreen->pFB;
+- nBackBase = ((GLuint) vmesa->front.offset) + ((GLuint) vmesa->driScreen->pFB);
+- by = (GLubyte *) nBackBase;
+- fy = (GLubyte *) nFrontBase;
+-
+- viaFlushPrimsLocked(vmesa);
+-
+- for (i = 0; i < vmesa->driDrawable->h; i++) {
+- fy = (GLubyte *)(nFrontBase + i * nFrontPitch);
+- for (j = 0; j < nBackPitch; j++) {
+- *((GLubyte*)fy) = *((GLubyte*)by);
+- fy = fy + 1;
+- by = by + 1;
+- }
+-
+- }
+-
+-}
+ int flush_agp(viaContextPtr vmesa, drm_via_flush_agp_t* agpCmd)
+ {
+ GLuint *pnAGPCurrentPhysStart;
+Index: xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_ioctl.h
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_ioctl.h:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_ioctl.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_ioctl.h:1.1.1.1 Wed Jun 16 09:18:38 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_ioctl.h Wed Dec 15 01:50:59 2004
+@@ -47,8 +47,6 @@
+ void viaFillStencilDepthBuffer(viaContextPtr vmesa, GLuint pixel);
+ void viaDoSwapBuffers(viaContextPtr vmesa);
+ void viaDoSwapBuffersSaam(viaContextPtr vmesa);
+-void viaDoSwapBufferSoft(viaContextPtr vmesa);
+-void viaDoSwapBufferSoftFront(viaContextPtr vmesa);
+ void viaDoSwapPBuffers(viaContextPtr vmesa);
+
+ int flush_agp(viaContextPtr vmesa, drm_via_flush_agp_t* agpCmd);
+Index: xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_state.c
+diff -u xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_state.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_state.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_state.c:1.1.1.1 Wed Jun 16 09:18:39 2004
++++ xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_state.c Wed Dec 15 01:50:59 2004
+@@ -46,6 +46,7 @@
+
+ #include "tnl/t_pipeline.h"
+
++
+ static GLuint ROP[16] = {
+ HC_HROP_BLACK, /* GL_CLEAR 0 */
+ HC_HROP_DPa, /* GL_AND s & d */
+@@ -506,13 +507,52 @@
+ }
+ }
+
++/**
++ * Convert S and T texture coordinate wrap modes to hardware bits.
++ */
++static uint32_t
++get_wrap_mode( GLenum sWrap, GLenum tWrap )
++{
++ uint32_t v = 0;
++
++
++ switch( sWrap ) {
++ case GL_REPEAT:
++ v |= HC_HTXnMPMD_Srepeat;
++ break;
++ case GL_CLAMP:
++ case GL_CLAMP_TO_EDGE:
++ v |= HC_HTXnMPMD_Sclamp;
++ break;
++ case GL_MIRRORED_REPEAT:
++ v |= HC_HTXnMPMD_Smirror;
++ break;
++ }
++
++ switch( tWrap ) {
++ case GL_REPEAT:
++ v |= HC_HTXnMPMD_Trepeat;
++ break;
++ case GL_CLAMP:
++ case GL_CLAMP_TO_EDGE:
++ v |= HC_HTXnMPMD_Tclamp;
++ break;
++ case GL_MIRRORED_REPEAT:
++ v |= HC_HTXnMPMD_Tmirror;
++ break;
++ }
++
++ return v;
++}
++
++
+ void viaChooseTextureState(GLcontext *ctx)
+ {
+ viaContextPtr vmesa = VIA_CONTEXT(ctx);
+ struct gl_texture_unit *texUnit0 = &ctx->Texture.Unit[0];
+ struct gl_texture_unit *texUnit1 = &ctx->Texture.Unit[1];
+ /*=* John Sheng [2003.7.18] texture combine *=*/
+- GLboolean AlphaCombine[3];
++
+ #ifdef DEBUG
+ if (VIA_DEBUG) fprintf(stderr, "%s - in\n", __FUNCTION__);
+ #endif
+@@ -524,10 +564,26 @@
+ }
+ #endif
+
++#ifdef DEBUG
++ if (VIA_DEBUG) {
++ struct gl_texture_object *texObj0 = texUnit0->_Current;
++ struct gl_texture_object *texObj1 = texUnit1->_Current;
++
++ fprintf(stderr, "env mode: 0x%04x / 0x%04x\n", texUnit0->EnvMode, texUnit1->EnvMode);
++
++ if ( (texObj0 != NULL) && (texObj0->Image[0][0] != NULL) )
++ fprintf(stderr, "format 0: 0x%04x\n", texObj0->Image[0][0]->Format);
++
++ if ( (texObj1 != NULL) && (texObj1->Image[0][0] != NULL) )
++ fprintf(stderr, "format 1: 0x%04x\n", texObj1->Image[0][0]->Format);
++ }
++#endif
++
++
+ if (texUnit0->_ReallyEnabled) {
+ struct gl_texture_object *texObj = texUnit0->_Current;
+ struct gl_texture_image *texImage = texObj->Image[0][0];
+- GLint r, g, b, a;
++
+ #ifdef DEBUG
+ if (VIA_DEBUG) fprintf(stderr, "texUnit0->_ReallyEnabled\n");
+ #endif
+@@ -580,2502 +636,15 @@
+ HC_HTXnFLTe_Nearest;
+ }
+
+- if (texObj->WrapS == GL_REPEAT)
+- vmesa->regHTXnMPMD_0 = HC_HTXnMPMD_Srepeat;
+- else
+- vmesa->regHTXnMPMD_0 = HC_HTXnMPMD_Sclamp;
++ vmesa->regHTXnMPMD_0 &= ~(HC_HTXnMPMD_SMASK | HC_HTXnMPMD_TMASK);
++ vmesa->regHTXnMPMD_0 |= get_wrap_mode( texObj->WrapS,
++ texObj->WrapT );
+
+- if (GL_TRUE) {
+- if (texObj->WrapT == GL_REPEAT)
+- vmesa->regHTXnMPMD_0 |= HC_HTXnMPMD_Trepeat;
+- else
+- vmesa->regHTXnMPMD_0 |= HC_HTXnMPMD_Tclamp;
+- }
+ #ifdef DEBUG
+ if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode %x\n",texUnit0->EnvMode);
+ #endif
+- switch (texUnit0->EnvMode) {
+- case GL_MODULATE:
+- switch (texImage->Format) {
+- case GL_ALPHA:
+- /* C = Cf, A = At*Af
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_0 | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Adif | HC_HTXnTBLAb_TOPA |
+- HC_HTXnTBLAb_Atex | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- break;
+- case GL_LUMINANCE:
+- /* C = Lt*Cf, A = Af
+- * RGB part.
+- * Ca = Lt, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- case GL_LUMINANCE_ALPHA:
+- /* C = Lt*Cf, A = At*Af
+- * RGB part.
+- * Ca = Lt, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- break;
+- case GL_INTENSITY:
+- /* C = It*Cf, A = It*Af
+- * RGB part.
+- * Ca = It, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = It, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- break;
+- case GL_RGB:
+- /* C = Ct*Cf, A = Af
+- * RGB part.
+- * Ca = Ct, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+-#ifdef DEBUG
+- if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_MODULATE: GL_RGB\n");
+-#endif
+- break;
+- case GL_RGBA:
+- /* C = Ct*Cf, A = At*Af
+- * RGB part.
+- * Ca = Ct, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias
+- | HC_HTXnTBLAshift_No;
+-
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+-#ifdef DEBUG
+- if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_MODULATE: GL_RGBA\n");
+-#endif
+- break;
+- case GL_COLOR_INDEX:
+- switch (texObj->Palette.Format) {
+- case GL_ALPHA:
+- /* C = Cf, A = At*Af
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_0 | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | HC_HTXnTBLAb_TOPA |
+- HC_HTXnTBLAb_Adif | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- break;
+- case GL_LUMINANCE:
+- /* C = Lt*Cf, A = Af
+- * RGB part.
+- * Ca = Lt, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- case GL_LUMINANCE_ALPHA:
+- /* C = Lt*Cf, A = At*Af
+- * RGB part.
+- * Ca = Lt, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- break;
+- case GL_INTENSITY:
+- /* C = It*Cf, A = It*Af
+- * RGB part.
+- * Ca = It, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = It, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- break;
+- case GL_RGB:
+- /* C = Ct*Cf, A = Af
+- * RGB part.
+- * Ca = Ct, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- case GL_RGBA:
+- /* C = Ct*Cf, A = At*Af
+- * RGB part.
+- * Ca = Ct, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- break;
+- }
+- break;
+- }
+- break;
+- case GL_DECAL:
+- switch (texImage->Format) {
+- case GL_ALPHA:
+- case GL_LUMINANCE:
+- case GL_LUMINANCE_ALPHA:
+- case GL_INTENSITY:
+- /* Undefined.
+- */
+- break;
+- case GL_RGB:
+- /* C = Ct, A = Af
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+-#ifdef DEBUG
+- if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_DECAL: GL_RGB\n");
+-#endif
+- break;
+- case GL_RGBA:
+- /* C = (1-At)*Cf+At*Ct, A = Af --> At*(Ct-Cf)+Cf
+- * RGB part.
+- * Ca = At, Cb = Ct, Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Atex |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_Tex |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+-#ifdef DEBUG
+- if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_DECAL: GL_RGBA\n");
+-#endif
+- break;
+- case GL_COLOR_INDEX:
+- switch (texObj->Palette.Format) {
+- case GL_ALPHA:
+- case GL_LUMINANCE:
+- case GL_LUMINANCE_ALPHA:
+- case GL_INTENSITY:
+- /* Undefined.
+- */
+- break;
+- case GL_RGB:
+- /* C = Ct, A = Af
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+-#ifdef DEBUG
+- if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_COLOR_INDEX: GL_RGB\n");
+-#endif
+- break;
+- case GL_RGBA:
+- /* C = (1-At)*Cf+At*Ct, A = Af --> At*(Ct-Cf)+Cf
+- * RGB part.
+- * Ca = At, Cb = Ct, Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Atex |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_Tex |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+-#ifdef DEBUG
+- if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_COLOR_INDEX: GL_RGBA\n");
+-#endif
+- break;
+- }
+- break;
+- }
+- break;
+- case GL_BLEND:
+- switch (texImage->Format) {
+- case GL_ALPHA:
+- /* C = Cf, A = Af
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- case GL_LUMINANCE:
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
+- /* C = (1-Lt)*Cf+Lt*Cc, A = Af --> Lt*(Cc-Cf)+Cf
+- * RGB part.
+- * Ca = Lt, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- case GL_LUMINANCE_ALPHA:
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
+- /* C = (1-Lt)*Cf+Lt*Cc, A = At*Af --> Lt*(Cc-Cf)+Cf
+- * RGB part.
+- * Ca = Lt, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
+- /* Alpha part.
+- * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- break;
+- case GL_INTENSITY:
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
+- /* C = (1-It)*Cf+It*Cc, A = (1-It)*Af+It*Ac
+- * --> It*(Cc-Cf)+Cf, It*(Ac-Af)+Af
+- * RGB part.
+- * Ca = It, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
+- /* Alpha part.
+- * Aa = It, Ab = Ac(Reg), Cop = -, Ac = Af, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_Adif;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Sub |
+- HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = (a << 8);
+- break;
+- case GL_RGB:
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
+- /* C = (1-Ct)*Cf+Ct*Cc, A = Af --> Ct*(Cc-Cf)+Cf
+- * RGB part.
+- * Ca = Ct, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+-#ifdef DEBUG
+- if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_BLEND: GL_RGB\n");
+-#endif
+- break;
+- case GL_RGBA:
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
+- /* C = (1-Ct)*Cf+Ct*Cc, A = At*Af --> Ct*(Cc-Cf)+Cf
+- * RGB part.
+- * Ca = Ct, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
+- /* Alpha part.
+- * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+-#ifdef DEBUG
+- if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_BLEND: GL_RGBA\n");
+-#endif
+- break;
+- case GL_COLOR_INDEX:
+- switch (texObj->Palette.Format) {
+- case GL_ALPHA:
+- /* C = Cf, A = Af
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- case GL_LUMINANCE:
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
+- /* C = (1-Lt)*Cf+Lt*Cc, A = Af --> Lt*(Cc-Cf)+Cf
+- * RGB part.
+- * Ca = Lt, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- case GL_LUMINANCE_ALPHA:
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
+- /* C = (1-Lt)*Cf+Lt*Cc, A = At*Af --> Lt*(Cc-Cf)+Cf
+- * RGB part.
+- * Ca = Lt, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
+- /* Alpha part.
+- * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- break;
+- case GL_INTENSITY:
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
+- /* C = (1-It)*Cf+It*Cc, A = (1-It)*Af+It*Ac
+- * --> It*(Cc-Cf)+Cf, It*(Ac-Af)+Af
+- * RGB part.
+- * Ca = It, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
+- /* Alpha part.
+- * Aa = It, Ab = Ac(Reg), Cop = -, Ac = Af, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_Adif;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Sub |
+- HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = (a << 8);
+- break;
+- case GL_RGB:
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
+- /* C = (1-Ct)*Cf+Ct*Cc, A = Af --> Ct*(Cc-Cf)+Cf
+- * RGB part.
+- * Ca = Ct, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- case GL_RGBA:
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
+- /* C = (1-Ct)*Cf+Ct*Cc, A = At*Af --> Ct*(Cc-Cf)+Cf
+- * RGB part.
+- * Ca = Ct, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
+- /* Alpha part.
+- * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- break;
+- }
+- break;
+- }
+- break;
+- case GL_REPLACE:
+- switch (texImage->Format) {
+- case GL_ALPHA:
+- /* C = Cf, A = At
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- case GL_LUMINANCE:
+- /* C = Lt, A = Af
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Lt, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- case GL_LUMINANCE_ALPHA:
+- /* C = Lt, A = At
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Lt, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- case GL_INTENSITY:
+- /* C = It, A = It
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = It, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = It, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- case GL_RGB:
+- /* C = Ct, A = Af
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+-#ifdef DEBUG
+- if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_REPLACE: GL_RGB\n");
+-#endif
+- break;
+- case GL_RGBA:
+- /* C = Ct, A = At
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+-#ifdef DEBUG
+- if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_REPLACE: GL_RGBA\n");
+-#endif
+- break;
+- case GL_COLOR_INDEX:
+- switch (texObj->Palette.Format) {
+- case GL_ALPHA:
+- /* C = Cf, A = At
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- case GL_LUMINANCE:
+- /* C = Lt, A = Af
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Lt, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- case GL_LUMINANCE_ALPHA:
+- /* C = Lt, A = At
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Lt, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- case GL_INTENSITY:
+- /* C = It, A = It
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = It, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = It, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- case GL_RGB:
+- /* C = Ct, A = Af
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- case GL_RGBA:
+- /* C = Ct, A = At
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- }
+- break;
+- }
+- break;
+- /*=* John Sheng [2003.7.18] texture combine *=*/
+- case GL_COMBINE:
+- switch (texUnit0->Combine.ModeRGB) {
+- case GL_REPLACE:
+- switch (texUnit0->Combine.SourceRGB[0]) {
+- case GL_TEXTURE:
+- switch (texUnit0->Combine.OperandRGB[0]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Tex;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- break;
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Atex;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Atex;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- break;
+- }
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
+- switch (texUnit0->Combine.OperandRGB[0]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_HTXnTBLRC;
+-
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_HTXnTBLRC;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
+- break;
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_HTXnTBLRC;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_HTXnTBLRC;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a;
+- break;
+- }
+- break;
+- case GL_PRIMARY_COLOR :
+- switch (texUnit0->Combine.OperandRGB[0]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Dif;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- break;
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Adif;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Adif;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- break;
+- }
+- break;
+- case GL_PREVIOUS :
+- switch (texUnit0->Combine.OperandRGB[0]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Dif;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- break;
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Adif;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Adif;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- break;
+- }
+- break;
+- }
+- switch ((GLint)(texUnit0->Combine.ScaleShiftRGB)) {
+- case 1:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No;
+- break;
+- case 2:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1;
+- break;
+- case 4:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2;
+- break;
+- }
+- break;
+-
+- case GL_MODULATE:
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- switch (texUnit0->Combine.OperandRGB[0]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_TOPC;
+- AlphaCombine[0]=0;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_InvTOPC;
+- AlphaCombine[0]=0;
+- break;
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_TOPC;
+- AlphaCombine[0]=1;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_InvTOPC;
+- AlphaCombine[0]=1;
+- break;
+- }
+- switch (texUnit0->Combine.OperandRGB[1]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
+- AlphaCombine[1]=0;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
+- AlphaCombine[1]=0;
+- break;
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
+- AlphaCombine[1]=1;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
+- AlphaCombine[1]=1;
+- break;
+- }
+- switch (texUnit0->Combine.SourceRGB[0]) {
+- case GL_TEXTURE:
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Tex;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Atex;
+- }
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_HTXnTBLRC;
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLRCa_0 = (r << 16) | (g << 8) | b;
+- }
+- else {
+- vmesa->regHTXnTBLRCa_0 = (a << 16) | (a << 8) | a;
+- }
+- break;
+- case GL_PRIMARY_COLOR :
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Dif;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Adif;
+- }
+- break;
+- case GL_PREVIOUS :
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Dif;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Adif;
+- }
+- break;
+- }
+- switch (texUnit0->Combine.SourceRGB[1]) {
+- case GL_TEXTURE:
+- if (AlphaCombine[1]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Atex;
+- }
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC;
+- if (AlphaCombine[1]==0) {
+- vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
+- }
+- else {
+- vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a;
+- }
+- break;
+- case GL_PRIMARY_COLOR :
+- if (AlphaCombine[1]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif;
+- }
+- break;
+- case GL_PREVIOUS :
+- if (AlphaCombine[1]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif;
+- }
+- break;
+- }
+- switch ((GLint)(texUnit0->Combine.ScaleShiftRGB)) {
+- case 1:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No;
+- break;
+- case 2:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1;
+- break;
+- case 4:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2;
+- break;
+- }
+- break;
+- case GL_ADD:
+- case GL_SUBTRACT :
+- if (texUnit0->Combine.ModeRGB==GL_ADD) {
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0;
+- }
+- else {
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0;
+- }
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC;
+- vmesa->regHTXnTBLRCa_0 = ( 255<<16 | 255<<8 |255 );
+- switch (texUnit0->Combine.OperandRGB[0]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
+- AlphaCombine[0]=0;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
+- AlphaCombine[0]=0;
+- break;
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
+- AlphaCombine[0]=1;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
+- AlphaCombine[0]=1;
+- break;
+- }
+- switch (texUnit0->Combine.OperandRGB[1]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_TOPC;
+- AlphaCombine[1]=0;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_InvTOPC;
+- AlphaCombine[1]=0;
+- break;
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_TOPC;
+- AlphaCombine[1]=1;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_InvTOPC;
+- AlphaCombine[1]=1;
+- break;
+- }
+- switch (texUnit0->Combine.SourceRGB[0]) {
+- case GL_TEXTURE:
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Atex;
+- }
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC;
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
+- }
+- else {
+- vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a;
+- }
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif;
+- }
+- break;
+- }
+- switch (texUnit0->Combine.SourceRGB[1]) {
+- case GL_TEXTURE:
+- if (AlphaCombine[1]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Tex;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Atex;
+- }
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_HTXnTBLRC;
+- if (AlphaCombine[1]==0) {
+- vmesa->regHTXnTBLRCc_0 = (r << 16) | (g << 8) | b;
+- }
+- else {
+- vmesa->regHTXnTBLRCc_0 = (a << 16) | (a << 8) | a;
+- }
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- if (AlphaCombine[1]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Dif;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Adif;
+- }
+- break;
+- }
+- switch ((GLint)(texUnit0->Combine.ScaleShiftRGB)) {
+- case 1:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No;
+- break;
+- case 2:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1;
+- break;
+- case 4:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2;
+- break;
+- }
+- break;
+- case GL_ADD_SIGNED :
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC|
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_HTXnTBLRC;
+- vmesa->regHTXnTBLRCa_0 = ( 255<<16 | 255<<8 |255 );
+- vmesa->regHTXnTBLRCc_0 = ( 128<<16 | 128<<8 |128 );
+- switch (texUnit0->Combine.OperandRGB[0]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
+- AlphaCombine[0]=0;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
+- AlphaCombine[0]=0;
+- break;
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
+- AlphaCombine[0]=1;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
+- AlphaCombine[0]=1;
+- break;
+- }
+- switch (texUnit0->Combine.OperandRGB[1]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Cbias;
+- AlphaCombine[1]=0;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_InvCbias;
+- AlphaCombine[1]=0;
+- break;
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Cbias;
+- AlphaCombine[1]=1;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_InvCbias;
+- AlphaCombine[1]=1;
+- break;
+- }
+- switch (texUnit0->Combine.SourceRGB[0]) {
+- case GL_TEXTURE:
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Atex;
+- }
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC;
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
+- }
+- else {
+- vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a;
+- }
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif;
+- }
+- break;
+- }
+- switch (texUnit0->Combine.SourceRGB[1]) {
+- case GL_TEXTURE:
+- if (AlphaCombine[1]==0) {
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Tex;
+- }
+- else {
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Atex;
+- }
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_HTXnTBLRC;
+- if (AlphaCombine[1]==0) {
+- vmesa->regHTXnTBLRCbias_0 = (r << 16) | (g << 8) | b;
+- }
+- else {
+- vmesa->regHTXnTBLRCbias_0 = (a << 16) | (a << 8) | a;
+- }
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- if (AlphaCombine[1]==0) {
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Dif;
+- }
+- else {
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Adif;
+- }
+- break;
+- }
+- switch ((GLint)(texUnit0->Combine.ScaleShiftRGB)) {
+- case 1:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No;
+- break;
+- case 2:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1;
+- break;
+- case 4:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2;
+- break;
+- }
+- break;
+- case GL_INTERPOLATE :
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- switch (texUnit0->Combine.OperandRGB[0]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCb_TOPC;
+- AlphaCombine[0]=0;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCb_InvTOPC;
+- AlphaCombine[0]=0;
+- break;
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCb_TOPC;
+- AlphaCombine[0]=1;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCb_InvTOPC;
+- AlphaCombine[0]=1;
+- break;
+- }
+- switch (texUnit0->Combine.OperandRGB[1]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCc_TOPC;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Cbias;
+- AlphaCombine[1]=0;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCc_InvTOPC;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_InvCbias;
+- AlphaCombine[1]=0;
+- break;
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCc_TOPC;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Cbias;
+- AlphaCombine[1]=1;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCc_InvTOPC;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_InvCbias;
+- AlphaCombine[1]=1;
+- break;
+- }
+- switch (texUnit0->Combine.OperandRGB[2]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCa_TOPC;
+- AlphaCombine[2]=0;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCa_InvTOPC;
+- AlphaCombine[2]=0;
+- break;
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCa_TOPC;
+- AlphaCombine[2]=1;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCa_InvTOPC;
+- AlphaCombine[2]=1;
+- break;
+- }
+- switch (texUnit0->Combine.SourceRGB[0]) {
+- case GL_TEXTURE:
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Atex;
+- }
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC;
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
+- }
+- else {
+- vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a;
+- }
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif;
+- }
+- break;
+- }
+- switch (texUnit0->Combine.SourceRGB[1]) {
+- case GL_TEXTURE:
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Tex;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Tex;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Atex;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Atex;
+- }
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_HTXnTBLRC;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_HTXnTBLRC;
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLRCc_0 = (r << 16) | (g << 8) | b;
+- vmesa->regHTXnTBLRCbias_0 = (r << 16) | (g << 8) | b;
+- }
+- else {
+- vmesa->regHTXnTBLRCc_0 = (a << 16) | (a << 8) | a;
+- vmesa->regHTXnTBLRCbias_0 = (a << 16) | (a << 8) | a;
+- }
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Dif;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Adif;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Adif;
+- }
+- break;
+- }
+- switch (texUnit0->Combine.SourceRGB[2]) {
+- case GL_TEXTURE:
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Tex;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Atex;
+- }
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_HTXnTBLRC;
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLRCa_0 = (r << 16) | (g << 8) | b;
+- }
+- else {
+- vmesa->regHTXnTBLRCa_0 = (a << 16) | (a << 8) | a;
+- }
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Dif;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Adif;
+- }
+- break;
+- }
+- switch ((GLint)(texUnit0->Combine.ScaleShiftRGB)) {
+- case 1:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No;
+- break;
+- case 2:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1;
+- break;
+- case 4:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2;
+- break;
+- }
+- break;
+- }
+- switch (texUnit0->Combine.ModeA) {
+- case GL_REPLACE:
+- switch (texUnit0->Combine.SourceA[0]) {
+- case GL_TEXTURE:
+- switch (texUnit0->Combine.OperandA[0]) {
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Atex;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Inv | HC_HTXnTBLAbias_Atex;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- }
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
+- switch (texUnit0->Combine.OperandA[0]) {
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = a;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Inv | HC_HTXnTBLAbias_HTXnTBLRAbias;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = a;
+- break;
+- }
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- switch (texUnit0->Combine.OperandA[0]) {
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Adif;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Inv | HC_HTXnTBLAbias_Adif;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- }
+- break;
+- }
+- switch ((GLint)(texUnit0->Combine.ScaleShiftA)) {
+- case 1:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No;
+- break;
+- case 2:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1;
+- break;
+- case 4:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2;
+- break;
+- }
+- break;
+- case GL_MODULATE:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLRAa_0= 0x0;
+- switch (texUnit0->Combine.OperandA[0]) {
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_TOPA;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_InvTOPA;
+- break;
+- }
+- switch (texUnit0->Combine.OperandA[1]) {
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_TOPA;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_InvTOPA;
+- break;
+- }
+- switch (texUnit0->Combine.SourceA[0]) {
+- case GL_TEXTURE:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_Atex;
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_HTXnTBLRA;
+- vmesa->regHTXnTBLRAa_0 |= a<<16;
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_Adif;
+- break;
+- }
+- switch (texUnit0->Combine.SourceA[1]) {
+- case GL_TEXTURE:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Atex;
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_HTXnTBLRA;
+- vmesa->regHTXnTBLRAa_0 |= a<<8;
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Adif;
+- break;
+- }
+- switch ((GLint)(texUnit0->Combine.ScaleShiftA)) {
+- case 1:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No;
+- break;
+- case 2:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1;
+- break;
+- case 4:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2;
+- break;
+- }
+- break;
+- case GL_ADD:
+- case GL_SUBTRACT :
+- if(texUnit0->Combine.ModeA==GL_ADD) {
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | HC_HTXnTBLAbias_HTXnTBLRAbias;
+- }
+- else {
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Sub | HC_HTXnTBLAbias_HTXnTBLRAbias;
+- }
+- vmesa->regHTXnTBLRFog_0 = 0;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA;
+- vmesa->regHTXnTBLRAa_0 = 0x0 | ( 255<<16 );
+- switch (texUnit0->Combine.OperandA[0]) {
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_TOPA;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_InvTOPA;
+- break;
+- }
+- switch (texUnit0->Combine.OperandA[1]) {
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_TOPA;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_InvTOPA;
+- break;
+- }
+- switch (texUnit0->Combine.SourceA[0]) {
+- case GL_TEXTURE:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Atex;
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_HTXnTBLRA;
+- vmesa->regHTXnTBLRAa_0 |= (a << 8);
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Adif;
+- break;
+- }
+- switch (texUnit0->Combine.SourceA[1]) {
+- case GL_TEXTURE:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_Atex;
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLRAa_0 |= a;
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_Adif;
+- break;
+- }
+- switch ((GLint)(texUnit0->Combine.ScaleShiftA)) {
+- case 1:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No;
+- break;
+- case 2:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1;
+- break;
+- case 4:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2;
+- break;
+- }
+- break;
+- case GL_ADD_SIGNED :
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Sub;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA|
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLRAa_0 = ( 255<<16 | 0<<8 |128 );
+- switch (texUnit0->Combine.OperandA[0]) {
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_TOPA;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_InvTOPA;
+- break;
+- }
+- switch (texUnit0->Combine.OperandA[1]) {
+- case GL_SRC_ALPHA:
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Inv;
+- break;
+- }
+- switch (texUnit0->Combine.SourceA[0]) {
+- case GL_TEXTURE:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Atex;
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_HTXnTBLRA;
+- vmesa->regHTXnTBLRAa_0 |= (a << 8);
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Adif;
+- break;
+- }
+- switch (texUnit0->Combine.SourceA[1]) {
+- case GL_TEXTURE:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Atex;
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_HTXnTBLRAbias;
+- vmesa->regHTXnTBLRFog_0 |= a;
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Adif;
+- break;
+- }
+- switch ((GLint)(texUnit0->Combine.ScaleShiftA)) {
+- case 1:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No;
+- break;
+- case 2:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1;
+- break;
+- case 4:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2;
+- break;
+- }
+- break;
+- case GL_INTERPOLATE :
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Sub;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- switch (texUnit0->Combine.OperandA[0]) {
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAb_TOPA;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAb_InvTOPA;
+- break;
+- }
+- switch (texUnit0->Combine.OperandA[1]) {
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAc_TOPA;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAc_InvTOPA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Inv;
+- break;
+- }
+- switch (texUnit0->Combine.OperandA[2]) {
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAa_TOPA;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAa_InvTOPA;
+- break;
+- }
+- switch (texUnit0->Combine.SourceA[0]) {
+- case GL_TEXTURE:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Atex;
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_HTXnTBLRA;
+- vmesa->regHTXnTBLRAa_0 |= (a << 8);
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Adif;
+- break;
+- }
+- switch (texUnit0->Combine.SourceA[1]) {
+- case GL_TEXTURE:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_Atex;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Atex;
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLRAa_0 |= a;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_HTXnTBLRAbias;
+- vmesa->regHTXnTBLRFog_0 |= a;
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_Adif;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Adif;
+- break;
+- }
+- switch (texUnit0->Combine.SourceA[2]) {
+- case GL_TEXTURE:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_Atex;
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_HTXnTBLRA;
+- vmesa->regHTXnTBLRAa_0 |= (a << 16);
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_Adif;
+- break;
+- }
+- switch (texUnit0->Combine.ScaleShiftA) {
+- case 1:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No;
+- break;
+- case 2:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1;
+- break;
+- case 4:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2;
+- break;
+- }
+- break;
+- case GL_DOT3_RGB :
+- case GL_DOT3_RGBA :
+- break;
+- }
+- break;
+- /*=* John Sheng [2003.7.18] texture add *=*/
+- case GL_ADD:
+- switch(texImage->Format) {
+- case GL_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_0 | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Adif | HC_HTXnTBLAb_TOPA |
+- HC_HTXnTBLAb_Atex | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- break;
+- case GL_LUMINANCE:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- case GL_LUMINANCE_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- break;
+- case GL_INTENSITY:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Atex |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_Adif;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- /*=* John Sheng [2003.7.18] texenv *=*/
+- /*vmesa->regHTXnTBLRAa_0 = 0x0;*/
+- vmesa->regHTXnTBLRAa_0 = (255<<16) | (255<<8) | 255;;
+- vmesa->regHTXnTBLRFog_0 = 0x0 | 255<<16;
+- break;
+- case GL_RGB:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- case GL_RGBA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- break;
+- case GL_COLOR_INDEX:
+- switch(texObj->Palette.Format) {
+- case GL_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_0 | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Adif | HC_HTXnTBLAb_TOPA |
+- HC_HTXnTBLAb_Atex | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- break;
+- case GL_LUMINANCE:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- case GL_LUMINANCE_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- break;
+- case GL_INTENSITY:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Atex |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_Adif;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = 0x0 | 255<<16;
+- break;
+- case GL_RGB:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- case GL_RGBA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- break;
+- }
+- break;
+- }
+- break;
+- /*=* John Sheng [2003.7.18] texture dot3 *=*/
+- case GL_DOT3_RGB :
+- case GL_DOT3_RGBA :
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLDOT4 | HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_2 | HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- switch (texUnit0->Combine.OperandRGB[0]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_TOPC;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_InvTOPC;
+- break;
+- }
+- switch (texUnit0->Combine.OperandRGB[1]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
+- break;
+- }
+- switch (texUnit0->Combine.SourceRGB[0]) {
+- case GL_TEXTURE:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Tex;
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_HTXnTBLRC;
+- vmesa->regHTXnTBLRCa_0 = (r << 16) | (g << 8) | b;
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Dif;
+- break;
+- }
+- switch (texUnit0->Combine.SourceRGB[1]) {
+- case GL_TEXTURE:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex;
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC;
+- vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif;
+- break;
+- }
+- break;
+- default:
+- break;
+- }
++
++ viaTexCombineState( vmesa, texUnit0->_CurrentCombine, 0 );
+ }
+ else {
+ /* Should turn Cs off if actually no Cs */
+@@ -3084,7 +653,6 @@
+ if (texUnit1->_ReallyEnabled) {
+ struct gl_texture_object *texObj = texUnit1->_Current;
+ struct gl_texture_image *texImage = texObj->Image[0][0];
+- GLint r, g, b, a;
+
+ if (texImage->Border) {
+ FALLBACK(vmesa, VIA_FALLBACK_TEXTURE, GL_TRUE);
+@@ -3135,2539 +703,28 @@
+ break;
+ }
+
+- if (texObj->WrapS == GL_REPEAT)
+- vmesa->regHTXnMPMD_1 = HC_HTXnMPMD_Srepeat;
+- else
+- vmesa->regHTXnMPMD_1 = HC_HTXnMPMD_Sclamp;
+-
+- if (GL_TRUE) {
+- if (texObj->WrapT == GL_REPEAT)
+- vmesa->regHTXnMPMD_1 |= HC_HTXnMPMD_Trepeat;
+- else
+- vmesa->regHTXnMPMD_1 |= HC_HTXnMPMD_Tclamp;
+- }
+-
+- switch (texUnit1->EnvMode) {
+- case GL_MODULATE:
+- switch (texImage->Format) {
+- case GL_ALPHA:
+- /* C = Cf, A = At*Af
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_0 | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | HC_HTXnTBLAb_TOPA |
+- HC_HTXnTBLAb_Acur | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- vmesa->regHTXnTBLRFog_1 = 0x0;
+- break;
+- case GL_LUMINANCE:
+- /* C = Lt*Cf, A = Af
+- * RGB part.
+- * Ca = Lt, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- break;
+- case GL_LUMINANCE_ALPHA:
+- /* C = Lt*Cf, A = At*Af
+- * RGB part.
+- * Ca = Lt, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- vmesa->regHTXnTBLRFog_1 = 0x0;
+- break;
+- case GL_INTENSITY:
+- /* C = It*Cf, A = It*Af
+- * RGB part.
+- * Ca = It, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = It, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- vmesa->regHTXnTBLRFog_1 = 0x0;
+- break;
+- case GL_RGB:
+- /* C = Ct*Cf, A = Af
+- * RGB part.
+- * Ca = Ct, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- break;
+- case GL_RGBA:
+- /* C = Ct*Cf, A = At*Af
+- * RGB part.
+- * Ca = Ct, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias
+- | HC_HTXnTBLAshift_No;
+-
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- vmesa->regHTXnTBLRFog_1 = 0x0;
+- break;
+- case GL_COLOR_INDEX:
+- switch (texObj->Palette.Format) {
+- case GL_ALPHA:
+- /* C = Cf, A = At*Af
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_0 | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | HC_HTXnTBLAb_TOPA |
+- HC_HTXnTBLAb_Acur | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- vmesa->regHTXnTBLRFog_1 = 0x0;
+- break;
+- case GL_LUMINANCE:
+- /* C = Lt*Cf, A = Af
+- * RGB part.
+- * Ca = Lt, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- break;
+- case GL_LUMINANCE_ALPHA:
+- /* C = Lt*Cf, A = At*Af
+- * RGB part.
+- * Ca = Lt, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- vmesa->regHTXnTBLRFog_1 = 0x0;
+- break;
+- case GL_INTENSITY:
+- /* C = It*Cf, A = It*Af
+- * RGB part.
+- * Ca = It, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = It, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- vmesa->regHTXnTBLRFog_1 = 0x0;
+- break;
+- case GL_RGB:
+- /* C = Ct*Cf, A = Af
+- * RGB part.
+- * Ca = Ct, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- break;
+- case GL_RGBA:
+- /* C = Ct*Cf, A = At*Af
+- * RGB part.
+- * Ca = Ct, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- vmesa->regHTXnTBLRFog_1 = 0x0;
+- break;
+- }
+- break;
+- }
+- break;
+- case GL_DECAL:
+- switch (texImage->Format) {
+- case GL_ALPHA:
+- case GL_LUMINANCE:
+- case GL_LUMINANCE_ALPHA:
+- case GL_INTENSITY:
+- /* Undefined.
+- */
+- break;
+- case GL_RGB:
+- /* C = Ct, A = Af
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- break;
+- case GL_RGBA:
+- /* C = (1-At)*Cf+At*Ct, A = Af --> At*(Ct-Cf)+Cf
+- * RGB part.
+- * Ca = At, Cb = Ct, Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Atex |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_Tex |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- break;
+- case GL_COLOR_INDEX:
+- switch (texObj->Palette.Format) {
+- case GL_ALPHA:
+- case GL_LUMINANCE:
+- case GL_LUMINANCE_ALPHA:
+- case GL_INTENSITY:
+- /* Undefined.
+- */
+- break;
+- case GL_RGB:
+- /* C = Ct, A = Af
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- break;
+- case GL_RGBA:
+- /* C = (1-At)*Cf+At*Ct, A = Af --> At*(Ct-Cf)+Cf
+- * RGB part.
+- * Ca = At, Cb = Ct, Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Atex |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_Tex |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- break;
+- }
+- break;
+- }
+- break;
+- case GL_BLEND:
+- switch (texImage->Format) {
+- case GL_ALPHA:
+- /* C = Cf, A = Af
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- break;
+- case GL_LUMINANCE:
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
+- /* C = (1-Lt)*Cf+Lt*Cc, A = Af --> Lt*(Cc-Cf)+Cf
+- * RGB part.
+- * Ca = Lt, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- break;
+- case GL_LUMINANCE_ALPHA:
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
+- /* C = (1-Lt)*Cf+Lt*Cc, A = At*Af --> Lt*(Cc-Cf)+Cf
+- * RGB part.
+- * Ca = Lt, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b;
+- /* Alpha part.
+- * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- vmesa->regHTXnTBLRFog_1 = 0x0;
+- break;
+- case GL_INTENSITY:
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
+- /* C = (1-It)*Cf+It*Cc, A = (1-It)*Af+It*Ac
+- * --> It*(Cc-Cf)+Cf, It*(Ac-Af)+Af
+- * RGB part.
+- * Ca = It, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b;
+- /* Alpha part.
+- * Aa = It, Ab = Ac(Reg), Cop = -, Ac = Af, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_Acur;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Sub |
+- HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = (a << 8);
+- break;
+- case GL_RGB:
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
+- /* C = (1-Ct)*Cf+Ct*Cc, A = Af --> Ct*(Cc-Cf)+Cf
+- * RGB part.
+- * Ca = Ct, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- break;
+- case GL_RGBA:
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
+- /* C = (1-Ct)*Cf+Ct*Cc, A = At*Af --> Ct*(Cc-Cf)+Cf
+- * RGB part.
+- * Ca = Ct, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b;
+- /* Alpha part.
+- * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- vmesa->regHTXnTBLRFog_1 = 0x0;
+- break;
+- case GL_COLOR_INDEX:
+- switch (texObj->Palette.Format) {
+- case GL_ALPHA:
+- /* C = Cf, A = Af
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- break;
+- case GL_LUMINANCE:
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
+- /* C = (1-Lt)*Cf+Lt*Cc, A = Af --> Lt*(Cc-Cf)+Cf
+- * RGB part.
+- * Ca = Lt, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- break;
+- case GL_LUMINANCE_ALPHA:
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
+- /* C = (1-Lt)*Cf+Lt*Cc, A = At*Af --> Lt*(Cc-Cf)+Cf
+- * RGB part.
+- * Ca = Lt, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b;
+- /* Alpha part.
+- * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- vmesa->regHTXnTBLRFog_1 = 0x0;
+- break;
+- case GL_INTENSITY:
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
+- /* C = (1-It)*Cf+It*Cc, A = (1-It)*Af+It*Ac
+- * --> It*(Cc-Cf)+Cf, It*(Ac-Af)+Af
+- * RGB part.
+- * Ca = It, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b;
+- /* Alpha part.
+- * Aa = It, Ab = Ac(Reg), Cop = -, Ac = Af, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_Acur;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Sub |
+- HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = (a << 8);
+- break;
+- case GL_RGB:
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
+- /* C = (1-Ct)*Cf+Ct*Cc, A = Af --> Ct*(Cc-Cf)+Cf
+- * RGB part.
+- * Ca = Ct, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- break;
+- case GL_RGBA:
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
+- /* C = (1-Ct)*Cf+Ct*Cc, A = At*Af --> Ct*(Cc-Cf)+Cf
+- * RGB part.
+- * Ca = Ct, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b;
+- /* Alpha part.
+- * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- vmesa->regHTXnTBLRFog_1 = 0x0;
+- break;
+- }
+- break;
+- }
+- break;
+- case GL_REPLACE:
+- switch (texImage->Format) {
+- case GL_ALPHA:
+- /* C = Cf, A = At
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- break;
+- case GL_LUMINANCE:
+- /* C = Lt, A = Af
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Lt, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- break;
+- case GL_LUMINANCE_ALPHA:
+- /* C = Lt, A = At
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Lt, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- break;
+- case GL_INTENSITY:
+- /* C = It, A = It
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = It, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = It, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- break;
+- case GL_RGB:
+- /* C = Ct, A = Af
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- break;
+- case GL_RGBA:
+- /* C = Ct, A = At
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- break;
+- case GL_COLOR_INDEX:
+- switch (texObj->Palette.Format) {
+- case GL_ALPHA:
+- /* C = Cf, A = At
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- break;
+- case GL_LUMINANCE:
+- /* C = Lt, A = Af
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Lt, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- break;
+- case GL_LUMINANCE_ALPHA:
+- /* C = Lt, A = At
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Lt, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- break;
+- case GL_INTENSITY:
+- /* C = It, A = It
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = It, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = It, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- break;
+- case GL_RGB:
+- /* C = Ct, A = Af
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- break;
+- case GL_RGBA:
+- /* C = Ct, A = At
+- * RGB part.
+- * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No.
+- */
+- vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
+- /* Alpha part.
+- * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No.
+- */
+- vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_1 = 0x0;
+- break;
+- }
+- break;
+- }
+- break;
+- /*=* John Sheng [2003.7.18] texture combine *=*/
+- case GL_COMBINE:
+- switch (texUnit1->Combine.ModeRGB) {
+- case GL_REPLACE:
+- switch (texUnit1->Combine.SourceRGB[0]) {
+- case GL_TEXTURE:
+- switch (texUnit1->Combine.OperandRGB[0]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Tex;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- break;
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Atex;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Atex;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- break;
+- }
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
+- switch (texUnit1->Combine.OperandRGB[0]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_HTXnTBLRC;
+-
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_HTXnTBLRC;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
+- break;
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_HTXnTBLRC;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_HTXnTBLRC;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a;
+- break;
+- }
+- break;
+- case GL_PRIMARY_COLOR :
+- switch (texUnit1->Combine.OperandRGB[0]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Dif;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- break;
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Adif;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Adif;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- break;
+- }
+- break;
+- case GL_PREVIOUS :
+- switch (texUnit1->Combine.OperandRGB[0]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Dif;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- break;
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Adif;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
+- HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Adif;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- break;
+- }
+- break;
+- }
+- switch ((GLint)(texUnit1->Combine.ScaleShiftRGB)) {
+- case 1:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No;
+- break;
+- case 2:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1;
+- break;
+- case 4:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2;
+- break;
+- }
+- break;
+-
+- case GL_MODULATE:
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- switch (texUnit1->Combine.OperandRGB[0]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_TOPC;
+- AlphaCombine[0]=0;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_InvTOPC;
+- AlphaCombine[0]=0;
+- break;
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_TOPC;
+- AlphaCombine[0]=1;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_InvTOPC;
+- AlphaCombine[0]=1;
+- break;
+- }
+- switch (texUnit1->Combine.OperandRGB[1]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
+- AlphaCombine[1]=0;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
+- AlphaCombine[1]=0;
+- break;
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
+- AlphaCombine[1]=1;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
+- AlphaCombine[1]=1;
+- break;
+- }
+- switch (texUnit1->Combine.SourceRGB[0]) {
+- case GL_TEXTURE:
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Tex;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Atex;
+- }
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_HTXnTBLRC;
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLRCa_0 = (r << 16) | (g << 8) | b;
+- }
+- else {
+- vmesa->regHTXnTBLRCa_0 = (a << 16) | (a << 8) | a;
+- }
+- break;
+- case GL_PRIMARY_COLOR :
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Dif;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Adif;
+- }
+- break;
+- case GL_PREVIOUS :
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Dif;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Adif;
+- }
+- break;
+- }
+- switch (texUnit1->Combine.SourceRGB[1]) {
+- case GL_TEXTURE:
+- if (AlphaCombine[1]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Atex;
+- }
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC;
+- if (AlphaCombine[1]==0) {
+- vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
+- }
+- else {
+- vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a;
+- }
+- break;
+- case GL_PRIMARY_COLOR :
+- if (AlphaCombine[1]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif;
+- }
+- break;
+- case GL_PREVIOUS :
+- if (AlphaCombine[1]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif;
+- }
+- break;
+- }
+- switch ((GLint)(texUnit1->Combine.ScaleShiftRGB)) {
+- case 1:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No;
+- break;
+- case 2:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1;
+- break;
+- case 4:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2;
+- break;
+- }
+- break;
+- case GL_ADD:
+- case GL_SUBTRACT :
+- if (texUnit1->Combine.ModeRGB==GL_ADD) {
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0;
+- }
+- else {
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0;
+- }
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC;
+- vmesa->regHTXnTBLRCa_0 = ( 255<<16 | 255<<8 |255 );
+- switch (texUnit1->Combine.OperandRGB[0]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
+- AlphaCombine[0]=0;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
+- AlphaCombine[0]=0;
+- break;
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
+- AlphaCombine[0]=1;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
+- AlphaCombine[0]=1;
+- break;
+- }
+- switch (texUnit1->Combine.OperandRGB[1]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_TOPC;
+- AlphaCombine[1]=0;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_InvTOPC;
+- AlphaCombine[1]=0;
+- break;
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_TOPC;
+- AlphaCombine[1]=1;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_InvTOPC;
+- AlphaCombine[1]=1;
+- break;
+- }
+- switch (texUnit1->Combine.SourceRGB[0]) {
+- case GL_TEXTURE:
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Atex;
+- }
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC;
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
+- }
+- else {
+- vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a;
+- }
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif;
+- }
+- break;
+- }
+- switch (texUnit1->Combine.SourceRGB[1]) {
+- case GL_TEXTURE:
+- if (AlphaCombine[1]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Tex;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Atex;
+- }
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_HTXnTBLRC;
+- if (AlphaCombine[1]==0) {
+- vmesa->regHTXnTBLRCc_0 = (r << 16) | (g << 8) | b;
+- }
+- else {
+- vmesa->regHTXnTBLRCc_0 = (a << 16) | (a << 8) | a;
+- }
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- if (AlphaCombine[1]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Dif;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Adif;
+- }
+- break;
+- }
+- switch ((GLint)(texUnit1->Combine.ScaleShiftRGB)) {
+- case 1:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No;
+- break;
+- case 2:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1;
+- break;
+- case 4:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2;
+- break;
+- }
+- break;
+- case GL_ADD_SIGNED :
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC|
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_HTXnTBLRC;
+- vmesa->regHTXnTBLRCa_0 = ( 255<<16 | 255<<8 |255 );
+- vmesa->regHTXnTBLRCc_0 = ( 128<<16 | 128<<8 |128 );
+- switch (texUnit1->Combine.OperandRGB[0]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
+- AlphaCombine[0]=0;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
+- AlphaCombine[0]=0;
+- break;
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
+- AlphaCombine[0]=1;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
+- AlphaCombine[0]=1;
+- break;
+- }
+- switch (texUnit1->Combine.OperandRGB[1]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Cbias;
+- AlphaCombine[1]=0;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_InvCbias;
+- AlphaCombine[1]=0;
+- break;
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Cbias;
+- AlphaCombine[1]=1;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_InvCbias;
+- AlphaCombine[1]=1;
+- break;
+- }
+- switch (texUnit1->Combine.SourceRGB[0]) {
+- case GL_TEXTURE:
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Atex;
+- }
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC;
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
+- }
+- else {
+- vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a;
+- }
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif;
+- }
+- break;
+- }
+- switch (texUnit1->Combine.SourceRGB[1]) {
+- case GL_TEXTURE:
+- if (AlphaCombine[1]==0) {
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Tex;
+- }
+- else {
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Atex;
+- }
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_HTXnTBLRC;
+- if (AlphaCombine[1]==0) {
+- vmesa->regHTXnTBLRCbias_0 = (r << 16) | (g << 8) | b;
+- }
+- else {
+- vmesa->regHTXnTBLRCbias_0 = (a << 16) | (a << 8) | a;
+- }
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- if (AlphaCombine[1]==0) {
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Dif;
+- }
+- else {
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Adif;
+- }
+- break;
+- }
+- switch ((GLint)(texUnit1->Combine.ScaleShiftRGB)) {
+- case 1:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No;
+- break;
+- case 2:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1;
+- break;
+- case 4:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2;
+- break;
+- }
+- break;
+- case GL_INTERPOLATE :
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- switch (texUnit1->Combine.OperandRGB[0]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCb_TOPC;
+- AlphaCombine[0]=0;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCb_InvTOPC;
+- AlphaCombine[0]=0;
+- break;
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCb_TOPC;
+- AlphaCombine[0]=1;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCb_InvTOPC;
+- AlphaCombine[0]=1;
+- break;
+- }
+- switch (texUnit1->Combine.OperandRGB[1]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCc_TOPC;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Cbias;
+- AlphaCombine[1]=0;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCc_InvTOPC;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_InvCbias;
+- AlphaCombine[1]=0;
+- break;
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCc_TOPC;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Cbias;
+- AlphaCombine[1]=1;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCc_InvTOPC;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_InvCbias;
+- AlphaCombine[1]=1;
+- break;
+- }
+- switch (texUnit1->Combine.OperandRGB[2]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCa_TOPC;
+- AlphaCombine[2]=0;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCa_InvTOPC;
+- AlphaCombine[2]=0;
+- break;
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCa_TOPC;
+- AlphaCombine[2]=1;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCa_InvTOPC;
+- AlphaCombine[2]=1;
+- break;
+- }
+- switch (texUnit1->Combine.SourceRGB[0]) {
+- case GL_TEXTURE:
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Atex;
+- }
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC;
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
+- }
+- else {
+- vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a;
+- }
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif;
+- }
+- break;
+- }
+- switch (texUnit1->Combine.SourceRGB[1]) {
+- case GL_TEXTURE:
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Tex;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Tex;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Atex;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Atex;
+- }
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_HTXnTBLRC;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_HTXnTBLRC;
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLRCc_0 = (r << 16) | (g << 8) | b;
+- vmesa->regHTXnTBLRCbias_0 = (r << 16) | (g << 8) | b;
+- }
+- else {
+- vmesa->regHTXnTBLRCc_0 = (a << 16) | (a << 8) | a;
+- vmesa->regHTXnTBLRCbias_0 = (a << 16) | (a << 8) | a;
+- }
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Dif;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Adif;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Adif;
+- }
+- break;
+- }
+- switch (texUnit1->Combine.SourceRGB[2]) {
+- case GL_TEXTURE:
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Tex;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Atex;
+- }
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_HTXnTBLRC;
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLRCa_0 = (r << 16) | (g << 8) | b;
+- }
+- else {
+- vmesa->regHTXnTBLRCa_0 = (a << 16) | (a << 8) | a;
+- }
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- if (AlphaCombine[0]==0) {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Dif;
+- }
+- else {
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Adif;
+- }
+- break;
+- }
+- switch ((GLint)(texUnit1->Combine.ScaleShiftRGB)) {
+- case 1:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No;
+- break;
+- case 2:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1;
+- break;
+- case 4:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2;
+- break;
+- }
+- break;
+-
+- case GL_DOT3_RGB :
+- case GL_DOT3_RGBA :
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLDOT4 | HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_2 | HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- switch (texUnit1->Combine.OperandRGB[0]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_TOPC;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_InvTOPC;
+- break;
+- }
+- switch (texUnit1->Combine.OperandRGB[1]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
+- break;
+- }
+- switch (texUnit1->Combine.SourceRGB[0]) {
+- case GL_TEXTURE:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Tex;
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_HTXnTBLRC;
+- vmesa->regHTXnTBLRCa_0 = (r << 16) | (g << 8) | b;
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Dif;
+- break;
+- }
+- switch (texUnit1->Combine.SourceRGB[1]) {
+- case GL_TEXTURE:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex;
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC;
+- vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif;
+- break;
+- }
+- break;
+-
+- }
+- switch (texUnit1->Combine.ModeA) {
+- case GL_REPLACE:
+- switch (texUnit1->Combine.SourceA[0]) {
+- case GL_TEXTURE:
+- switch (texUnit1->Combine.OperandA[0]) {
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Atex;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Inv | HC_HTXnTBLAbias_Atex;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- }
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
+- switch (texUnit1->Combine.OperandA[0]) {
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = a;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Inv | HC_HTXnTBLAbias_HTXnTBLRAbias;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = a;
+- break;
+- }
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- switch (texUnit1->Combine.OperandA[0]) {
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Adif;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Inv | HC_HTXnTBLAbias_Adif;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- }
+- break;
+- }
+- switch ((GLint)(texUnit1->Combine.ScaleShiftA)) {
+- case 1:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No;
+- break;
+- case 2:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1;
+- break;
+- case 4:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2;
+- break;
+- }
+- break;
+- case GL_MODULATE:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLRAa_0= 0x0;
+- switch (texUnit1->Combine.OperandA[0]) {
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_TOPA;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_InvTOPA;
+- break;
+- }
+- switch (texUnit1->Combine.OperandA[1]) {
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_TOPA;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_InvTOPA;
+- break;
+- }
+- switch (texUnit1->Combine.SourceA[0]) {
+- case GL_TEXTURE:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_Atex;
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_HTXnTBLRA;
+- vmesa->regHTXnTBLRAa_0 |= a<<16;
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_Adif;
+- break;
+- }
+- switch (texUnit1->Combine.SourceA[1]) {
+- case GL_TEXTURE:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Atex;
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_HTXnTBLRA;
+- vmesa->regHTXnTBLRAa_0 |= a<<8;
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Adif;
+- break;
+- }
+- switch ((GLint)(texUnit1->Combine.ScaleShiftA)) {
+- case 1:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No;
+- break;
+- case 2:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1;
+- break;
+- case 4:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2;
+- break;
+- }
+- break;
+- case GL_ADD:
+- case GL_SUBTRACT :
+- if(texUnit1->Combine.ModeA==GL_ADD) {
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | HC_HTXnTBLAbias_HTXnTBLRAbias;
+- }
+- else {
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Sub | HC_HTXnTBLAbias_HTXnTBLRAbias;
+- }
+- vmesa->regHTXnTBLRFog_0 = 0;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA;
+- vmesa->regHTXnTBLRAa_0 = 0x0 | ( 255<<16 );
+- switch (texUnit1->Combine.OperandA[0]) {
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_TOPA;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_InvTOPA;
+- break;
+- }
+- switch (texUnit1->Combine.OperandA[1]) {
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_TOPA;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_InvTOPA;
+- break;
+- }
+- switch (texUnit1->Combine.SourceA[0]) {
+- case GL_TEXTURE:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Atex;
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_HTXnTBLRA;
+- vmesa->regHTXnTBLRAa_0 |= (a << 8);
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Adif;
+- break;
+- }
+- switch (texUnit1->Combine.SourceA[1]) {
+- case GL_TEXTURE:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_Atex;
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLRAa_0 |= a;
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_Adif;
+- break;
+- }
+- switch ((GLint)(texUnit1->Combine.ScaleShiftA)) {
+- case 1:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No;
+- break;
+- case 2:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1;
+- break;
+- case 4:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2;
+- break;
+- }
+- break;
+- case GL_ADD_SIGNED :
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Sub;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA|
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLRAa_0 = ( 255<<16 | 0<<8 |128 );
+- switch (texUnit1->Combine.OperandA[0]) {
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_TOPA;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_InvTOPA;
+- break;
+- }
+- switch (texUnit1->Combine.OperandA[1]) {
+- case GL_SRC_ALPHA:
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Inv;
+- break;
+- }
+- switch (texUnit1->Combine.SourceA[0]) {
+- case GL_TEXTURE:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Atex;
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_HTXnTBLRA;
+- vmesa->regHTXnTBLRAa_0 |= (a << 8);
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Adif;
+- break;
+- }
+- switch (texUnit1->Combine.SourceA[1]) {
+- case GL_TEXTURE:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Atex;
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_HTXnTBLRAbias;
+- vmesa->regHTXnTBLRFog_0 |= a;
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Adif;
+- break;
+- }
+- switch ((GLint)(texUnit1->Combine.ScaleShiftA)) {
+- case 1:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No;
+- break;
+- case 2:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1;
+- break;
+- case 4:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2;
+- break;
+- }
+- break;
+- case GL_INTERPOLATE :
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Sub;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- switch (texUnit1->Combine.OperandA[0]) {
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAb_TOPA;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAb_InvTOPA;
+- break;
+- }
+- switch (texUnit1->Combine.OperandA[1]) {
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAc_TOPA;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAc_InvTOPA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Inv;
+- break;
+- }
+- switch (texUnit1->Combine.OperandA[2]) {
+- case GL_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAa_TOPA;
+- break;
+- case GL_ONE_MINUS_SRC_ALPHA:
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAa_InvTOPA;
+- break;
+- }
+- switch (texUnit1->Combine.SourceA[0]) {
+- case GL_TEXTURE:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Atex;
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_HTXnTBLRA;
+- vmesa->regHTXnTBLRAa_0 |= (a << 8);
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Adif;
+- break;
+- }
+- switch (texUnit1->Combine.SourceA[1]) {
+- case GL_TEXTURE:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_Atex;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Atex;
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLRAa_0 |= a;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_HTXnTBLRAbias;
+- vmesa->regHTXnTBLRFog_0 |= a;
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_Adif;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Adif;
+- break;
+- }
+- switch (texUnit1->Combine.SourceA[2]) {
+- case GL_TEXTURE:
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_Atex;
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_HTXnTBLRA;
+- vmesa->regHTXnTBLRAa_0 |= (a << 16);
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_Adif;
+- break;
+- }
+- switch (texUnit1->Combine.ScaleShiftA) {
+- case 1:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No;
+- break;
+- case 2:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1;
+- break;
+- case 4:
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2;
+- break;
+- }
+- break;
+- case GL_DOT3_RGB :
+- case GL_DOT3_RGBA :
+- break;
+- }
+- break;
++ vmesa->regHTXnMPMD_1 &= ~(HC_HTXnMPMD_SMASK | HC_HTXnMPMD_TMASK);
++ vmesa->regHTXnMPMD_1 |= get_wrap_mode( texObj->WrapS,
++ texObj->WrapT );
+
+- /*=* John Sheng [2003.7.18] texture add *=*/
+- case GL_ADD:
+- switch(texImage->Format) {
+- case GL_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_0 | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Adif | HC_HTXnTBLAb_TOPA |
+- HC_HTXnTBLAb_Atex | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- break;
+- case GL_LUMINANCE:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- case GL_LUMINANCE_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- break;
+- case GL_INTENSITY:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Atex |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_Adif;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- /*=* John Sheng [2003.7.18] texenv *=*/
+- /*vmesa->regHTXnTBLRAa_0 = 0x0;*/
+- vmesa->regHTXnTBLRAa_0 = (255<<16) | (255<<8) | 255;;
+- vmesa->regHTXnTBLRFog_0 = 0x0 | 255<<16;
+- break;
+- case GL_RGB:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- case GL_RGBA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- break;
+- case GL_COLOR_INDEX:
+- switch(texObj->Palette.Format) {
+- case GL_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_0 | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Adif | HC_HTXnTBLAb_TOPA |
+- HC_HTXnTBLAb_Atex | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- break;
+- case GL_LUMINANCE:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- case GL_LUMINANCE_ALPHA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- break;
+- case GL_INTENSITY:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Atex |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_Adif;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = 0x0 | 255<<16;
+- break;
+- case GL_RGB:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- break;
+- case GL_RGBA:
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
+- HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- break;
+- }
+- break;
+- }
+- break;
+- /*=* John Sheng [2003.7.18] texture dot3 *=*/
+- case GL_DOT3_RGB :
+- case GL_DOT3_RGBA :
+- vmesa->regHTXnTBLCop_0 = HC_HTXnTBLDOT4 | HC_HTXnTBLCop_Add |
+- HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
+- HC_HTXnTBLCshift_2 | HC_HTXnTBLAop_Add |
+- HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
+- vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
+- vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
+- HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
+- vmesa->regHTXnTBLRFog_0 = 0x0;
+- vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
+- HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
+- HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
+- HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
+- vmesa->regHTXnTBLRAa_0 = 0x0;
+- switch (texUnit1->Combine.OperandRGB[0]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_TOPC;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_InvTOPC;
+- break;
+- }
+- switch (texUnit1->Combine.OperandRGB[1]) {
+- case GL_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
+- break;
+- case GL_ONE_MINUS_SRC_COLOR:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
+- break;
+- }
+- switch (texUnit1->Combine.SourceRGB[0]) {
+- case GL_TEXTURE:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Tex;
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_HTXnTBLRC;
+- vmesa->regHTXnTBLRCa_0 = (r << 16) | (g << 8) | b;
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Dif;
+- break;
+- }
+- switch (texUnit1->Combine.SourceRGB[1]) {
+- case GL_TEXTURE:
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex;
+- break;
+- case GL_CONSTANT :
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
+- CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC;
+- vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
+- break;
+- case GL_PRIMARY_COLOR :
+- case GL_PREVIOUS :
+- vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif;
+- break;
+- }
+- break;
+- default:
+- break;
+- }
++ viaTexCombineState( vmesa, texUnit1->_CurrentCombine, 1 );
+ }
+ vmesa->dirty |= VIA_UPLOAD_TEXTURE;
++
++#ifdef DEBUG
++ if (VIA_DEBUG) {
++ fprintf( stderr, "Csat_0 / Cop_0 = 0x%08x / 0x%08x\n",
++ vmesa->regHTXnTBLCsat_0, vmesa->regHTXnTBLCop_0 );
++ fprintf( stderr, "Asat_0 = 0x%08x\n",
++ vmesa->regHTXnTBLAsat_0 );
++ fprintf( stderr, "RCb_0 / RAa_0 = 0x%08x / 0x%08x\n",
++ vmesa->regHTXnTBLRCb_0, vmesa->regHTXnTBLRAa_0 );
++ fprintf( stderr, "RCa_0 / RCc_0 = 0x%08x / 0x%08x\n",
++ vmesa->regHTXnTBLRCa_0, vmesa->regHTXnTBLRCc_0 );
++ fprintf( stderr, "RCbias_0 = 0x%08x\n",
++ vmesa->regHTXnTBLRCbias_0 );
++ }
++#endif
+ }
+ else {
+ if (ctx->Fog.Enabled)
+Index: xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_texcombine.c
+diff -u /dev/null xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_texcombine.c:1.1.1.1.2.1
+--- /dev/null Fri Feb 11 21:35:30 2005
++++ xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_texcombine.c Wed Dec 15 01:51:00 2004
+@@ -0,0 +1,386 @@
++/*
++ * (C) Copyright IBM Corporation 2004
++ * All Rights Reserved.
++ *
++ * 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
++ * on the rights to use, copy, modify, merge, publish, distribute, sub
++ * license, 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 (including the next
++ * paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL
++ * IBM AND/OR THEIR SUPPLIERS 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.
++ */
++
++/**
++ * \file via_texcombine.c
++ * Calculate texture combine hardware state.
++ *
++ * \author Ian Romanick <idr@us.ibm.com>
++ */
++
++#include <stdio.h>
++
++#include "glheader.h"
++#include "context.h"
++#include "macros.h"
++#include "colormac.h"
++#include "enums.h"
++#include "dd.h"
++
++#include "mm.h"
++#include "via_context.h"
++#include "via_state.h"
++#include "via_tex.h"
++#include "via_vb.h"
++#include "via_tris.h"
++#include "via_ioctl.h"
++
++#include "swrast/swrast.h"
++#include "array_cache/acache.h"
++#include "tnl/tnl.h"
++#include "swrast_setup/swrast_setup.h"
++
++#include "tnl/t_pipeline.h"
++
++#define VIA_USE_ALPHA (HC_XTC_Adif - HC_XTC_Dif)
++
++#define INPUT_A_SHIFT 14
++#define INPUT_B_SHIFT 7
++#define INPUT_C_SHIFT 0
++#define INPUT_BiasC_SHIFT 14
++#define INPUT_BiasA_SHIFT 3
++
++#define CONST_ONE (HC_XTC_0 | HC_XTC_InvTOPC)
++
++static const unsigned color_operand_modifier[4] = {
++ 0,
++ HC_XTC_InvTOPC,
++ VIA_USE_ALPHA,
++ VIA_USE_ALPHA | HC_XTC_InvTOPC,
++};
++
++static const unsigned alpha_operand_modifier[2] = {
++ 0, HC_XTA_InvTOPA
++};
++
++static const unsigned c_shift_table[3] = {
++ HC_HTXnTBLCshift_No, HC_HTXnTBLCshift_1, HC_HTXnTBLCshift_2
++};
++
++static const unsigned a_shift_table[3] = {
++ HC_HTXnTBLAshift_No, HC_HTXnTBLAshift_1, HC_HTXnTBLAshift_2
++};
++
++
++/**
++ * Calculate the hardware state for the specified texture combine mode
++ *
++ * \bug
++ * For the alpha combine, \c GL_CONSTANT is still probably wrong.
++ *
++ * \bug
++ * All forms of DOT3 bumpmapping are completely untested, and are most
++ * likely wrong.
++ *
++ * \bug
++ * This code still fails progs/demos/texenv for all modes with \c GL_ALPHA
++ * textures. This was also the case with the code that Via supplied. It
++ * also fails for \c GL_REPLACE with \c GL_RGBA textures. Everything else
++ * that texenv tests looks good.
++ */
++void
++viaTexCombineState( viaContextPtr vmesa,
++ const struct gl_tex_env_combine_state * combine,
++ unsigned unit )
++{
++ unsigned color_arg[3];
++ unsigned alpha_arg[3];
++ unsigned color = 0;
++ unsigned alpha = 0;
++ unsigned bias = 0;
++ unsigned op = 0;
++ unsigned a_shift = combine->ScaleShiftA;
++ unsigned c_shift = combine->ScaleShiftRGB;
++ unsigned i;
++ unsigned constant_color[3];
++ unsigned ordered_constant_color[4];
++ unsigned constant_alpha = 0;
++ unsigned bias_alpha = 0;
++ const struct gl_texture_unit const * texUnit = & vmesa->glCtx->Texture.Unit[unit];
++ unsigned env_color[4];
++
++
++ CLAMPED_FLOAT_TO_UBYTE(env_color[0], texUnit->EnvColor[0]);
++ CLAMPED_FLOAT_TO_UBYTE(env_color[1], texUnit->EnvColor[1]);
++ CLAMPED_FLOAT_TO_UBYTE(env_color[2], texUnit->EnvColor[2]);
++ CLAMPED_FLOAT_TO_UBYTE(env_color[3], texUnit->EnvColor[3]);
++
++ (void) memset( constant_color, 0, sizeof( constant_color ) );
++ (void) memset( ordered_constant_color, 0, sizeof( ordered_constant_color ) );
++
++ for ( i = 0 ; i < combine->_NumArgsRGB ; i++ ) {
++ const GLint op = combine->OperandRGB[i] - GL_SRC_COLOR;
++
++ switch ( combine->SourceRGB[i] ) {
++ case GL_TEXTURE:
++ color_arg[i] = HC_XTC_Tex;
++ color_arg[i] += color_operand_modifier[op];
++ break;
++ case GL_CONSTANT:
++ color_arg[i] = HC_XTC_HTXnTBLRC;
++
++ switch( op ) {
++ case 0:
++ constant_color[i] = ((env_color[0] << 16)
++ | (env_color[1] << 8)
++ | env_color[2]);
++ break;
++ case 1:
++ constant_color[i] = ~((env_color[0] << 16)
++ | (env_color[1] << 8)
++ | env_color[2]) & 0x00ffffff;
++ break;
++ case 2:
++ constant_color[i] = ((env_color[3] << 16)
++ | (env_color[3] << 8)
++ | env_color[3]);
++ break;
++ case 3:
++ constant_color[i] = ~((env_color[3] << 16)
++ | (env_color[3] << 8)
++ | env_color[3]) & 0x00ffffff;
++ break;
++ }
++ break;
++ case GL_PRIMARY_COLOR:
++ color_arg[i] = HC_XTC_Dif;
++ color_arg[i] += color_operand_modifier[op];
++ break;
++ case GL_PREVIOUS:
++ color_arg[i] = (unit == 0) ? HC_XTC_Dif : HC_XTC_Cur;
++ color_arg[i] += color_operand_modifier[op];
++ break;
++ }
++ }
++
++ for ( i = 0 ; i < combine->_NumArgsA ; i++ ) {
++ const GLint op = combine->OperandA[i] - GL_SRC_ALPHA;
++
++ switch ( combine->SourceA[i] ) {
++ case GL_TEXTURE:
++ alpha_arg[i] = HC_XTA_Atex;
++ alpha_arg[i] += alpha_operand_modifier[op];
++ break;
++ case GL_CONSTANT:
++ alpha_arg[i] = HC_XTA_HTXnTBLRA;
++ constant_alpha = (op == 0)
++ ? env_color[3] : ~(env_color[3]) & 0x000000ff;
++ break;
++ case GL_PRIMARY_COLOR:
++ alpha_arg[i] = HC_XTA_Adif;
++ alpha_arg[i] += alpha_operand_modifier[op];
++ break;
++ case GL_PREVIOUS:
++ alpha_arg[i] = (unit == 0) ? HC_XTA_Adif : HC_XTA_Acur;
++ alpha_arg[i] += alpha_operand_modifier[op];
++ break;
++ }
++ }
++
++
++ /* On the Unichrome, all combine operations take on some form of:
++ *
++ * A * (B op Bias) + C
++ *
++ * 'op' can be selected as add, subtract, min, max, or mask. The min, max
++ * and mask modes are currently unused. With the exception of DOT3, all
++ * standard GL_COMBINE modes can be implemented simply by selecting the
++ * correct inputs for A, B, C, and Bias and the correct operation for op.
++ */
++
++ color = HC_HTXnTBLCsat_MASK;
++ alpha = HC_HTXnTBLAsat_MASK;
++
++ switch( combine->ModeRGB ) {
++ /* A = 0, B = 0, C = arg0, Bias = 0
++ */
++ case GL_REPLACE:
++ bias |= (color_arg[0] << INPUT_BiasC_SHIFT);
++ ordered_constant_color[3] = constant_color[0];
++ break;
++
++ /* A = arg[0], B = arg[1], C = 0, Bias = 0
++ */
++ case GL_MODULATE:
++ color |= (color_arg[0] << INPUT_A_SHIFT)
++ | (color_arg[1] << INPUT_B_SHIFT);
++
++ ordered_constant_color[0] = constant_color[0];
++ ordered_constant_color[1] = constant_color[1];
++ break;
++
++ /* A = 1.0, B = arg[0], C = 0, Bias = arg[1]
++ */
++ case GL_ADD:
++ case GL_SUBTRACT:
++ if ( combine->ModeRGB == GL_SUBTRACT ) {
++ op |= HC_HTXnTBLCop_Sub;
++ }
++
++ color |= (color_arg[0] << INPUT_B_SHIFT)
++ | (CONST_ONE << INPUT_A_SHIFT);
++
++ bias |= (color_arg[1] << INPUT_BiasC_SHIFT);
++ ordered_constant_color[1] = constant_color[0];
++ ordered_constant_color[3] = constant_color[1];
++ break;
++
++ /* A = 0, B = arg[0], C = arg[1], Bias = 0.5
++ */
++ case GL_ADD_SIGNED:
++ color |= (color_arg[0] << INPUT_B_SHIFT)
++ | (color_arg[1] << INPUT_C_SHIFT);
++ bias |= HC_HTXnTBLCbias_HTXnTBLRC;
++ op |= HC_HTXnTBLCop_Sub;
++
++ ordered_constant_color[1] = constant_color[0];
++ ordered_constant_color[2] = constant_color[1];
++ ordered_constant_color[3] = 0x00808080;
++ break;
++
++ /* A = arg[2], B = arg[0], C = arg[1], Bias = arg[1]
++ */
++ case GL_INTERPOLATE:
++ op |= HC_HTXnTBLCop_Sub;
++
++ color |= (color_arg[2] << INPUT_A_SHIFT) |
++ (color_arg[0] << INPUT_B_SHIFT) |
++ (color_arg[1] << INPUT_C_SHIFT);
++ bias |= (color_arg[1] << INPUT_BiasC_SHIFT);
++
++ ordered_constant_color[0] = constant_color[2];
++ ordered_constant_color[1] = constant_color[0];
++ ordered_constant_color[2] = constant_color[1];
++ ordered_constant_color[3] = constant_color[1];
++ break;
++
++ /* At this point this code is completely untested. It appears that the
++ * Unichrome has the same limitation as the Radeon R100. The only
++ * supported post-scale when doing DOT3 bumpmapping is 1x.
++ */
++ case GL_DOT3_RGB_EXT:
++ case GL_DOT3_RGBA_EXT:
++ case GL_DOT3_RGB:
++ case GL_DOT3_RGBA:
++ c_shift = 2;
++ a_shift = 2;
++ color |= (color_arg[0] << INPUT_A_SHIFT) |
++ (color_arg[1] << INPUT_B_SHIFT);
++ op |= HC_HTXnTBLDOT4;
++ break;
++ }
++
++
++ /* The alpha blend stage has the annoying quirk of not having a
++ * hard-wired 0 input, like the color stage. As a result, we have
++ * to program the constant register with 0 and use that as our
++ * 0 input.
++ */
++
++ switch( combine->ModeA ) {
++ /* A = 0, B = 0, C = 0, Bias = arg0
++ */
++ case GL_REPLACE:
++ bias |= (alpha_arg[0] << INPUT_BiasA_SHIFT);
++
++ alpha |= (HC_XTA_HTXnTBLRA << INPUT_A_SHIFT) |
++ (HC_XTA_HTXnTBLRA << INPUT_B_SHIFT) |
++ (HC_XTA_HTXnTBLRA << INPUT_C_SHIFT);
++ break;
++
++ /* A = arg[0], B = arg[1], C = 0, Bias = 0
++ */
++ case GL_MODULATE:
++ alpha |= (alpha_arg[1] << INPUT_A_SHIFT)
++ | (alpha_arg[0] << INPUT_B_SHIFT)
++ | (HC_XTA_HTXnTBLRA << INPUT_C_SHIFT);
++
++ bias |= (HC_XTA_HTXnTBLRA << INPUT_BiasA_SHIFT);
++ break;
++
++ /* A = 0, B = arg[0], C = 0, Bias = arg[1]
++ */
++ case GL_ADD:
++ case GL_SUBTRACT:
++ if ( combine->ModeA == GL_SUBTRACT ) {
++ op |= HC_HTXnTBLAop_Sub;
++ }
++
++ alpha |= (HC_XTA_HTXnTBLRA << INPUT_A_SHIFT) |
++ (alpha_arg[0] << INPUT_B_SHIFT) |
++ (HC_XTA_HTXnTBLRA << INPUT_C_SHIFT);
++ bias |= (alpha_arg[1] << INPUT_BiasA_SHIFT);
++ break;
++
++ /* A = 0, B = arg[0], C = arg[1], Bias = 0.5
++ */
++ case GL_ADD_SIGNED:
++ op |= HC_HTXnTBLAop_Sub;
++
++ alpha |= (alpha_arg[0] << INPUT_B_SHIFT)
++ | (alpha_arg[1] << INPUT_C_SHIFT);
++ bias |= (HC_XTA_HTXnTBLRA << INPUT_BiasA_SHIFT);
++
++ bias_alpha = 0x00000080;
++ break;
++
++ /* A = arg[2], B = arg[0], C = arg[1], Bias = arg[1]
++ */
++ case GL_INTERPOLATE:
++ op |= HC_HTXnTBLAop_Sub;
++
++ alpha |= (alpha_arg[2] << INPUT_A_SHIFT) |
++ (alpha_arg[0] << INPUT_B_SHIFT) |
++ (alpha_arg[1] << INPUT_C_SHIFT);
++ bias |= (alpha_arg[1] << INPUT_BiasA_SHIFT);
++ break;
++ }
++
++
++ op |= c_shift_table[ c_shift ] | a_shift_table[ a_shift ];
++
++
++ if ( unit == 0 ) {
++ vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
++
++ vmesa->regHTXnTBLCsat_0 = color;
++ vmesa->regHTXnTBLAsat_0 = alpha;
++ vmesa->regHTXnTBLCop_0 = op | bias;
++ vmesa->regHTXnTBLRAa_0 = bias_alpha | (constant_alpha << 16);
++
++ vmesa->regHTXnTBLRCa_0 = ordered_constant_color[0];
++ vmesa->regHTXnTBLRCb_0 = ordered_constant_color[1];
++ vmesa->regHTXnTBLRCc_0 = ordered_constant_color[2];
++ vmesa->regHTXnTBLRCbias_0 = ordered_constant_color[3];
++ }
++ else {
++ vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
++
++ vmesa->regHTXnTBLCsat_1 = color;
++ vmesa->regHTXnTBLAsat_1 = alpha;
++ vmesa->regHTXnTBLCop_1 = op | bias;
++ vmesa->regHTXnTBLRAa_1 = bias_alpha | (constant_alpha << 16);
++ }
++}
++
+Index: xc/extras/Mesa/src/mesa/drivers/ggi/ggimesa.c
+diff -u xc/extras/Mesa/src/mesa/drivers/ggi/ggimesa.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/ggi/ggimesa.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/ggi/ggimesa.c:1.1.1.1 Wed Jun 16 09:18:45 2004
++++ xc/extras/Mesa/src/mesa/drivers/ggi/ggimesa.c Wed Dec 15 01:51:00 2004
+@@ -43,19 +43,56 @@
+ #include "texformat.h"
+ #include "texstore.h"
+
+-ggi_extid ggiMesaID = -1;
++/* We use LibGG to manage config files */
++#include <ggi/gg.h>
++
++
++/* XXX: Those #defines should be provided via
++ * config.h
++ */
++#define GGIMESAPATHTAG "pAtHTAg"
++#define GGIMESACONFDIR "pAtHTAg/usr/local/etc/ggi"
++#define GGIMESATAGLEN 7
++#define GGIMESACONFFILE "ggimesa.conf"
++
++
++/* Static variables
++ */
+ static int _ggimesaLibIsUp = 0;
+ static void *_ggimesaConfigHandle;
+-
+-static char ggimesaconffile[] = GGIMESACONFFILE;
++static char _ggimesaconfstub[512] = GGIMESACONFDIR;
++static char *_ggimesaconfdir = _ggimesaconfstub+GGIMESATAGLEN;
+
+ int _ggimesaDebugSync = 0;
+ uint32 _ggimesaDebugState = 0;
+
+-static void gl_ggiUpdateState(GLcontext *ctx, GLuint new_state);
+-static int changed(ggi_visual_t vis, int whatchanged);
+
+
++/* Extension ID. Defaulting to -1 should make segfault on abuse more likely...
++ */
++ggi_extid _ggiMesaID = -1;
++
++
++#define SUBLIB_PREFIX "MesaGGIdl_"
++
++
++/*
++ * Returns the directory where global config files are kept
++ */
++
++const char *ggiMesaGetConfDir(void)
++{
++#ifdef __WIN32__
++ /* On Win32 we allow overriding of the compiled in path. */
++ const char *envdir = getenv("GGI_CONFDIR");
++ if (envdir) return envdir;
++#endif
++ return _ggimesaconfdir;
++}
++
++
++/* Dummy function which returns -1
++ We use this to reset the function pointers */
+ static int _ggi_error(void)
+ {
+ GGIMESADPRINT_CORE("_ggi_error() called\n");
+@@ -63,6 +100,147 @@
+ return -1;
+ }
+
++
++static int changed(ggi_visual_t vis, int whatchanged)
++{
++ GLcontext *ctx;
++ ctx = _mesa_get_current_context();
++
++ GGIMESADPRINT_CORE("changed() called\n");
++
++ switch (whatchanged) {
++ case GGI_CHG_APILIST:
++ {
++ char api[GGI_MAX_APILEN];
++ char args[GGI_MAX_APILEN];
++ int i;
++ const char *fname;
++ ggi_dlhandle *lib;
++
++ GLvisual *gl_vis = &(LIBGGI_MESAEXT(vis)->mesa_visual.gl_visual);
++ GLframebuffer *gl_fb = &(LIBGGI_MESAEXT(vis)->mesa_buffer);
++
++ /* Initialize the framebuffer to provide all necessary
++ buffers in software. The target libraries that are loaded
++ next are free to modify this according to their
++ capabilities.
++ */
++ /* FIXME: if the target changes capabilities we'll leak
++ swrast's memory !!! Need to deallocate first */
++ _mesa_initialize_framebuffer(gl_fb, gl_vis,
++ gl_vis->depthBits > 0,
++ gl_vis->stencilBits > 0,
++ gl_vis->accumRedBits > 0,
++ gl_vis->alphaBits > 0);
++
++ for (i = 0; ggiGetAPI(vis, i, api, args) == 0; i++) {
++ strcat(api, "-mesa");
++ GGIMESADPRINT_CORE("GGIMesa: looking for"
++ "a sublib named %s\n", api);
++ fname = ggMatchConfig(_ggimesaConfigHandle, api, NULL);
++ if (fname == NULL) {
++ /* No special implementation for this sublib */
++ continue;
++ }
++ lib = ggiExtensionLoadDL(vis, fname, args, NULL,
++ SUBLIB_PREFIX);
++ }
++
++ /* The targets have cleared everything they can do from
++ the framebuffer structure so we provide the rest in sw
++ */
++ _swrast_alloc_buffers(gl_fb);
++
++ break;
++ }
++ }
++ return 0;
++}
++
++
++int ggiMesaInit()
++{
++ int err;
++ char *str;
++ char *conffile;
++
++ GGIMESADPRINT_CORE("ggiMesaInit() called\n");
++
++ _ggimesaLibIsUp++;
++ if (_ggimesaLibIsUp > 1) return 0; /* Initialize only at first call */
++
++ str = getenv("GGIMESA_DEBUGSYNC");
++ if (str != NULL) {
++ _ggimesaDebugSync = 1;
++ }
++
++ str = getenv("GGIMESA_DEBUG");
++ if (str != NULL) {
++ _ggimesaDebugState = atoi(str);
++ GGIMESADPRINT_CORE("%s Debugging=%d\n",
++ _ggimesaDebugSync ? "sync" : "async",
++ _ggimesaDebugState);
++ }
++
++
++ conffile = malloc(strlen(ggiMesaGetConfDir()) + 1
++ + strlen(GGIMESACONFFILE) +1);
++ if (conffile == NULL) {
++ fprintf(stderr, "GGIMesa: unable to allocate memory for config filename.\n");
++ return GGI_ENOMEM;
++ }
++ sprintf(conffile, "%s%c%s",
++ ggiMesaGetConfDir(), '/', GGIMESACONFFILE);
++ err = ggLoadConfig(conffile, &_ggimesaConfigHandle);
++ if (err != GGI_OK) {
++ fprintf(stderr, "GGIMesa: Couldn't open %s\n",
++ conffile);
++ free(conffile);
++ _ggimesaLibIsUp--;
++ return err;
++ }
++ free(conffile);
++
++ _ggiMesaID = ggiExtensionRegister("GGIMesa",
++ sizeof(struct ggi_mesa_ext), changed);
++ if (_ggiMesaID < 0) {
++ fprintf(stderr, "GGIMesa: failed to register as extension\n");
++ _ggimesaLibIsUp--;
++ ggFreeConfig(_ggimesaConfigHandle);
++ return _ggiMesaID;
++ }
++
++ return 0;
++}
++
++int ggiMesaExit(void)
++{
++ int rc;
++
++ GGIMESADPRINT_CORE("ggiMesaExit() called\n");
++
++ if (!_ggimesaLibIsUp) return -1;
++
++ if (_ggimesaLibIsUp > 1) {
++ /* Exit only at last call */
++ _ggimesaLibIsUp--;
++ return 0;
++ }
++
++ rc = ggiExtensionUnregister(_ggiMesaID);
++ ggFreeConfig(_ggimesaConfigHandle);
++
++ _ggimesaLibIsUp = 0;
++
++ return rc;
++}
++
++
++
++
++static void gl_ggiUpdateState(GLcontext *ctx, GLuint new_state);
++
++
+ static void gl_ggiGetSize(GLframebuffer *fb, GLuint *width, GLuint *height)
+ {
+ /* FIXME: this is a hack to work around the new interface */
+@@ -73,8 +251,8 @@
+
+ GGIMESADPRINT_CORE("gl_ggiGetSize() called\n");
+
+- *width = LIBGGI_MODE(ggi_ctx->ggi_visual)->visible.x;
+- *height = LIBGGI_MODE(ggi_ctx->ggi_visual)->visible.y;
++ *width = LIBGGI_VIRTX(ggi_ctx->ggi_visual);
++ *height = LIBGGI_VIRTY(ggi_ctx->ggi_visual);
+ printf("returning %d, %d\n", *width, *height);
+ }
+
+@@ -91,9 +269,9 @@
+ static void gl_ggiSetClearIndex(GLcontext *ctx, GLuint ci)
+ {
+ ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
+-
++
+ GGIMESADPRINT_CORE("gl_ggiSetClearIndex() called\n");
+-
++
+ ggiSetGCForeground(ggi_ctx->ggi_visual, ci);
+ ggi_ctx->clearcolor = (ggi_pixel)ci;
+ }
+@@ -126,19 +304,15 @@
+
+ GGIMESADPRINT_CORE("gl_ggiClear() called\n");
+
+- if (mask & (DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT))
+- {
++ if (mask & (DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT)) {
+ ggiSetGCForeground(ggi_ctx->ggi_visual, ggi_ctx->clearcolor);
+
+- if (all)
+- {
++ if (all) {
+ int w, h;
+- w = LIBGGI_MODE(ggi_ctx->ggi_visual)->visible.x;
+- h = LIBGGI_MODE(ggi_ctx->ggi_visual)->visible.y;
++ w = LIBGGI_VIRTX(ggi_ctx->ggi_visual);
++ h = LIBGGI_VIRTX(ggi_ctx->ggi_visual);
+ ggiDrawBox(ggi_ctx->ggi_visual, 0, 0, w, h);
+- }
+- else
+- {
++ } else {
+ ggiDrawBox(ggi_ctx->ggi_visual, x, y, //FLIP(y),
+ width, height);
+ }
+@@ -156,7 +330,7 @@
+ static GLboolean gl_ggiSetBuffer(GLcontext *ctx, GLframebuffer *buffer, GLuint bufferBit)
+ {
+ ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx;
+-
++
+ printf("set read %d\n", bufferBit);
+ GGIMESADPRINT_CORE("gl_ggiSetBuffer() called\n");
+
+@@ -184,11 +358,12 @@
+ static const GLubyte * gl_ggiGetString(GLcontext *ctx, GLenum name)
+ {
+ GGIMESADPRINT_CORE("gl_ggiGetString() called\n");
+-
+- if (name == GL_RENDERER)
+- return (GLubyte *) "Mesa GGI";
+- else
++
++ if (name == GL_RENDERER) {
++ return (GLubyte *) "Mesa GGI";
++ } else {
+ return NULL;
++ }
+ }
+
+ static void gl_ggiFlush(GLcontext *ctx)
+@@ -219,7 +394,7 @@
+ static void gl_ggiSetupPointers(GLcontext *ctx)
+ {
+ TNLcontext *tnl;
+-
++
+ GGIMESADPRINT_CORE("gl_ggiSetupPointers() called\n");
+
+ /* General information */
+@@ -293,13 +468,13 @@
+ *g = 0;
+ *b = 0;
+
+- for(i = 0; i < sizeof(ggi_pixel)*8; ++i){
++ for(i = 0; i < sizeof(ggi_pixel)*8; ++i) {
+ int mask = 1 << i;
+- if(LIBGGI_PIXFMT(vis)->red_mask & mask)
++ if (LIBGGI_PIXFMT(vis)->red_mask & mask)
+ ++(*r);
+- if(LIBGGI_PIXFMT(vis)->green_mask & mask)
++ if (LIBGGI_PIXFMT(vis)->green_mask & mask)
+ ++(*g);
+- if(LIBGGI_PIXFMT(vis)->blue_mask & mask)
++ if (LIBGGI_PIXFMT(vis)->blue_mask & mask)
+ ++(*b);
+ }
+
+@@ -310,84 +485,14 @@
+ printf("rgb (%d, %d, %d) db %d, rgb %d ci %d\n",*r,*g,*b,*db,*rgb,*ci);
+ }
+
+-int ggiMesaInit()
+-{
+- int err;
+- char *str;
+-
+- GGIMESADPRINT_CORE("ggiMesaInit() called\n");
+-
+- str = getenv("GGIMESA_DEBUG");
+- if (str != NULL) {
+- _ggimesaDebugState = atoi(str);
+- GGIMESADPRINT_CORE("Debugging=%d\n", _ggimesaDebugState);
+- }
+-
+- str = getenv("GGIMESA_DEBUGSYNC");
+- if (str != NULL) {
+- _ggimesaDebugSync = 1;
+- }
+-
+- GGIMESADPRINT_CORE("ggiMesaInit()\n");
+-
+- _ggimesaLibIsUp++;
+- if (_ggimesaLibIsUp > 1)
+- return 0; /* Initialize only at first call */
+-
+- err = ggLoadConfig(ggimesaconffile, &_ggimesaConfigHandle);
+- if (err != GGI_OK)
+- {
+- GGIMESADPRINT_CORE("GGIMesa: Couldn't open %s\n",
+- ggimesaconffile);
+- _ggimesaLibIsUp--;
+- return err;
+- }
+-
+- ggiMesaID = ggiExtensionRegister("GGIMesa",
+- sizeof(struct ggi_mesa_ext), changed);
+-
+- if (ggiMesaID < 0)
+- {
+- GGIMESADPRINT_CORE("GGIMesa: failed to register as extension\n");
+- _ggimesaLibIsUp--;
+- ggFreeConfig(_ggimesaConfigHandle);
+- return ggiMesaID;
+- }
+-
+- return 0;
+-}
+-
+-int ggiMesaExit(void)
+-{
+- int rc;
+-
+- GGIMESADPRINT_CORE("ggiMesaExit() called\n");
+-
+- if (!_ggimesaLibIsUp)
+- return -1;
+-
+- if (_ggimesaLibIsUp > 1)
+- {
+- /* Exit only at last call */
+- _ggimesaLibIsUp--;
+- return 0;
+- }
+-
+- rc = ggiExtensionUnregister(ggiMesaID);
+- ggFreeConfig(_ggimesaConfigHandle);
+-
+- _ggimesaLibIsUp = 0;
+-
+- return rc;
+-}
+
+ int ggiMesaAttach(ggi_visual_t vis)
+ {
+ int rc;
+-
++
+ GGIMESADPRINT_CORE("ggiMesaAttach() called\n");
+-
+- rc = ggiExtensionAttach(vis, ggiMesaID);
++
++ rc = ggiExtensionAttach(vis, _ggiMesaID);
+ if (rc == 0)
+ {
+ int r, g, b, ci;
+@@ -419,7 +524,7 @@
+ {
+ GGIMESADPRINT_CORE("ggiMesaDetach() called\n");
+
+- return ggiExtensionDetach(vis, ggiMesaID);
++ return ggiExtensionDetach(vis, _ggiMesaID);
+ }
+
+ int ggiMesaExtendVisual(ggi_visual_t vis, GLboolean alpha_flag,
+@@ -531,10 +636,10 @@
+ if (ctx->gl_ctx->Viewport.Width == 0)
+ {
+ _mesa_Viewport(0, 0,
+- LIBGGI_MODE(vis)->visible.x,
+- LIBGGI_MODE(vis)->visible.y);
+- ctx->gl_ctx->Scissor.Width = LIBGGI_MODE(vis)->visible.x;
+- ctx->gl_ctx->Scissor.Height = LIBGGI_MODE(vis)->visible.y;
++ LIBGGI_VIRTX(vis),
++ LIBGGI_VIRTY(vis));
++ ctx->gl_ctx->Scissor.Width = LIBGGI_VIRTX(vis);
++ ctx->gl_ctx->Scissor.Height = LIBGGI_VIRTY(vis);
+ }
+ }
+
+@@ -579,6 +684,7 @@
+ _swsetup_InvalidateState(ctx, new_state);
+ _tnl_InvalidateState(ctx, new_state);
+
++ /* XXX: Better use an assertion that bails out here on failure */
+ if (!LIBGGI_MESAEXT(ggi_ctx->ggi_visual)->update_state) {
+ GGIMESADPRINT_CORE("update_state == NULL!\n");
+ GGIMESADPRINT_CORE("Please check your config files!\n");
+@@ -588,59 +694,3 @@
+ LIBGGI_MESAEXT(ggi_ctx->ggi_visual)->update_state(ggi_ctx);
+ }
+
+-static int changed(ggi_visual_t vis, int whatchanged)
+-{
+- GLcontext *ctx;
+- ctx = _mesa_get_current_context();
+-
+- GGIMESADPRINT_CORE("changed() called\n");
+-
+- switch (whatchanged)
+- {
+- case GGI_CHG_APILIST:
+- {
+- char api[256];
+- char args[256];
+- int i;
+- const char *fname;
+- ggi_dlhandle *lib;
+- GLvisual *gl_vis=&(LIBGGI_MESAEXT(vis)->mesa_visual.gl_visual);
+- GLframebuffer *gl_fb = &(LIBGGI_MESAEXT(vis)->mesa_buffer);
+-
+- /* Initialize the framebuffer to provide all necessary
+- buffers in software. The target libraries that are loaded
+- next are free to modify this according to their
+- capabilities.
+- */
+- /* FIXME: if the target changes capabilities we'll leak
+- swrast's memory !!! Need to deallocate first */
+- _mesa_initialize_framebuffer(gl_fb, gl_vis,
+- gl_vis->depthBits > 0,
+- gl_vis->stencilBits > 0,
+- gl_vis->accumRedBits > 0,
+- gl_vis->alphaBits > 0);
+-
+- for (i = 0; ggiGetAPI(vis, i, api, args) == 0; i++)
+- {
+- strcat(api, "-mesa");
+- fname = ggMatchConfig(_ggimesaConfigHandle, api, NULL);
+- if (fname == NULL)
+- {
+- /* No special implementation for this sublib */
+- continue;
+- }
+- lib = ggiExtensionLoadDL(vis, fname, args, NULL,
+- GGI_SYMNAME_PREFIX);
+- }
+-
+- /* The targets have cleared everything they can do from
+- the framebuffer structure so we provide the rest in sw
+- */
+- _swrast_alloc_buffers(gl_fb);
+-
+- break;
+- }
+- }
+- return 0;
+-}
+-
+Index: xc/extras/Mesa/src/mesa/drivers/ggi/default/linear.c
+diff -u xc/extras/Mesa/src/mesa/drivers/ggi/default/linear.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/ggi/default/linear.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/ggi/default/linear.c:1.1.1.1 Wed Jun 16 09:18:45 2004
++++ xc/extras/Mesa/src/mesa/drivers/ggi/default/linear.c Wed Dec 15 01:51:00 2004
+@@ -39,7 +39,7 @@
+ ((color[GCOMP]>>GS) << B) | \
+ ((color[BCOMP]>>BS)))
+
+-#define FLIP(coord) (LIBGGI_MODE(ggi_ctx->ggi_visual)->visible.y-(coord) - 1)
++#define FLIP(coord) (LIBGGI_VIRTY(ggi_ctx->ggi_visual) - (coord) - 1)
+
+
+ /**********************************************************************/
+Index: xc/extras/Mesa/src/mesa/drivers/ggi/display/fbdev_mode.c
+diff -u xc/extras/Mesa/src/mesa/drivers/ggi/display/fbdev_mode.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/ggi/display/fbdev_mode.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/ggi/display/fbdev_mode.c:1.1.1.1 Wed Jun 16 09:18:46 2004
++++ xc/extras/Mesa/src/mesa/drivers/ggi/display/fbdev_mode.c Wed Dec 15 01:51:01 2004
+@@ -50,15 +50,13 @@
+
+ int GGIMesa_fbdev_getapi(ggi_visual *vis, int num, char *apiname, char *arguments)
+ {
+- struct fbdev_priv_mesa *priv = GGIMESA_PRIVATE(vis);
++ struct fbdev_priv_mesa *priv = GGIMESA_PRIV(vis);
+
+- strcpy(arguments, "");
++ arguments = '\0';
+
+- switch(num)
+- {
+- case 0:
+- if (priv->oldpriv->have_accel)
+- {
++ switch(num) {
++ case 0:
++ if (priv->oldpriv->have_accel) {
+ strcpy(apiname, priv->oldpriv->accel);
+ return 0;
+ }
+@@ -70,35 +68,33 @@
+
+ static int do_setmode(ggi_visual *vis)
+ {
+- struct fbdev_priv_mesa *priv = GGIMESA_PRIVATE(vis);
++ struct fbdev_priv_mesa *priv = GGIMESA_PRIV(vis);
+ int err, id;
+- char libname[256], libargs[256];
++ char libname[GGI_API_MAXLEN], libargs[GGI_API_MAXLEN];
+ ggi_graphtype gt;
+
+ _ggiZapMode(vis, ~GGI_DL_OPDISPLAY);
+ priv->have_accel = 0;
+- for (id = 1; GGIMesa_fbdev_getapi(vis, id, libname, libargs) == 0; id++)
+- {
+- if (_ggiOpenDL(vis, libname, libargs, NULL) == 0)
+- {
+- fprintf(stderr, "display-fbdev-mesa: Error opening the "
++
++ for (id = 1; GGIMesa_fbdev_getapi(vis, id, libname, libargs) == 0; id++) {
++ if (_ggiOpenDL(vis, libname, libargs, NULL) == 0) {
++ GGIMESADPRINT_LIBS(stderr, "display-fbdev-mesa: Error opening the "
+ "%s (%s) library.\n", libname, libargs);
+ return GGI_EFATAL;
+ }
+
+- GGIMESADPRINT_CORE("Success in loading %s (%s)\n", libname, libargs);
++ GGIMESADPRINT_CORE("Success in loading %s (%s)\n",
++ libname, libargs);
+ }
+
+ if (priv->oldpriv->accel &&
+ _ggiOpenDL(vis, priv->accel, NULL, NULL) != 0) {
+ priv->have_accel = 1;
+- }
+- else
+- {
++ } else {
+ priv->have_accel = 0;
+ }
+ vis->accelactive = 0;
+-
++
+ ggiIndicateChange(vis, GGI_CHG_APILIST);
+
+ GGIMESADPRINT_CORE("display-fbdev-mesa: do_setmode SUCCESS\n");
+Index: xc/extras/Mesa/src/mesa/drivers/ggi/display/fbdev_visual.c
+diff -u xc/extras/Mesa/src/mesa/drivers/ggi/display/fbdev_visual.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/ggi/display/fbdev_visual.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/ggi/display/fbdev_visual.c:1.1.1.1 Wed Jun 16 09:18:46 2004
++++ xc/extras/Mesa/src/mesa/drivers/ggi/display/fbdev_visual.c Wed Dec 15 01:51:01 2004
+@@ -38,7 +38,6 @@
+ #include <fcntl.h>
+ #include <sys/stat.h>
+
+-#define GGI_SYMNAME_PREFIX "MesaGGIdl_"
+
+ #ifdef HAVE_SYS_VT_H
+ #include <sys/vt.h>
+@@ -68,69 +67,28 @@
+
+ #define NUM_ACCELS (sizeof(accel_strings)/sizeof(accel_info))
+
+-/* FIXME: These should really be defined in the make system */
+-#define CONF_FILE "/usr/local/etc/ggi/mesa/targets/fbdev.conf"
+-void *_configHandle;
+-char confstub[512] = CONF_FILE;
+-char *conffile = confstub;
+
+-static int changed(ggi_visual_t vis, int whatchanged)
+-{
+- switch (whatchanged)
+- {
+- case GGI_CHG_APILIST:
+- {
+- char api[256];
+- char args[256];
+- int i;
+- const char *fname;
+- ggi_dlhandle *lib;
+-
+- for (i = 0; ggiGetAPI(vis, i, api, args) == 0; i++)
+- {
+- strcat(api, "-mesa");
+- fname = ggMatchConfig(_configHandle, api, NULL);
+- if (fname == NULL)
+- {
+- /* No special implementation for this sublib */
+- continue;
+- }
+-
+- lib = ggiExtensionLoadDL(vis, fname, args, NULL, GGI_SYMNAME_PREFIX);
+- }
+- }
+- break;
+- }
+- return 0;
+-}
+
+-int GGIdlinit(ggi_visual *vis, const char *args, void *argptr)
++static int GGIopen(ggi_visual *vis, struct ggi_dlhandle *dlh,
++ const char *args, void *argptr, uint32 *dlret)
+ {
+- struct fbdev_priv_mesa *priv;
+ int err;
++ struct fbdev_priv_mesa *priv;
+ ggifunc_getapi *oldgetapi;
+
+- GGIMESA_PRIVATE(vis) = priv = malloc(sizeof(struct fbdev_priv_mesa));
+- if (priv == NULL) {
+- fprintf(stderr, "Failed to allocate fbdev private data\n");
+- return GGI_DL_ERROR;
+- }
+-
++
+ priv->oldpriv = LIBGGI_PRIVATE(vis); /* Hook back */
+-
+- err = ggLoadConfig(conffile, &_configHandle);
+- if (err != GGI_OK)
+- {
+- GGIMESADPRINT_CORE("display-fbdev: Couldn't open %s\n", conffile);
+- return err;
++
++ GGIMESA_PRIV(vis) = priv = malloc(sizeof(struct fbdev_priv_mesa));
++ if (priv == NULL) {
++ fprintf(stderr, "GGIMesa: Failed to allocate fbdev private data\n");
++ return GGI_ENOMEM;
+ }
+
+- LIBGGI_MESAEXT(vis)->update_state = NULL;
+- LIBGGI_MESAEXT(vis)->setup_driver = NULL;
+-
+ oldgetapi = vis->opdisplay->getapi;
+ vis->opdisplay->getapi = GGIMesa_fbdev_getapi;
+ changed(vis, GGI_CHG_APILIST);
++
+ /* If the accel sublibs didn't sucessfuly hook a driver,
+ * back up and keep looking */
+ if ((LIBGGI_MESAEXT(vis)->update_state == NULL) ||
+@@ -139,12 +97,42 @@
+ vis->opdisplay->getapi = oldgetapi;
+ }
+
++ *dlret = GGI_DL_EXTENSION;
+ return 0;
+ }
+
+-int GGIdlcleanup(ggi_visual *vis)
++
++static int GGIclose(ggi_visual *vis, struct ggi_dlhandle *dlh)
+ {
++ struct fbdev_priv_mesa *priv = GGIMESA_PRIV(vis);
++
++ if (priv) {
++ LIBGGI_PRIVATE(vis) = priv->oldpriv;
++ free(priv);
++ }
++
+ return 0;
+ }
+
++
++int MesaGGIdl_fbdev_mesa(int func, void **funcptr)
++{
++ switch (func) {
++ case GGIFUNC_open:
++ *funcptr = GGIopen;
++ return 0;
++ case GGIFUNC_exit:
++ *funcptr = NULL;
++ return 0;
++ case GGIFUNC_close:
++ *funcptr = GGIclose;
++ return 0;
++ default:
++ *funcptr = NULL;
++ }
++
++ return GGI_ENOTFOUND;
++}
++
++
+ #include <ggi/internal/ggidlinit.h>
+Index: xc/extras/Mesa/src/mesa/drivers/ggi/include/ggi/mesa/ggimesa.h
+diff -u xc/extras/Mesa/src/mesa/drivers/ggi/include/ggi/mesa/ggimesa.h:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/ggi/include/ggi/mesa/ggimesa.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/ggi/include/ggi/mesa/ggimesa.h:1.1.1.1 Wed Jun 16 09:18:46 2004
++++ xc/extras/Mesa/src/mesa/drivers/ggi/include/ggi/mesa/ggimesa.h Wed Dec 15 01:51:01 2004
+@@ -75,7 +75,7 @@
+ ggi_pixel color; /* Current color or index*/
+ ggi_pixel clearcolor;
+
+- void *private;
++ void *priv;
+ };
+
+ #define SHIFT (GGI_COLOR_PRECISION - 8)
+Index: xc/extras/Mesa/src/mesa/drivers/ggi/include/ggi/mesa/ggimesa_int.h
+diff -u xc/extras/Mesa/src/mesa/drivers/ggi/include/ggi/mesa/ggimesa_int.h:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/ggi/include/ggi/mesa/ggimesa_int.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/ggi/include/ggi/mesa/ggimesa_int.h:1.1.1.1 Wed Jun 16 09:18:46 2004
++++ xc/extras/Mesa/src/mesa/drivers/ggi/include/ggi/mesa/ggimesa_int.h Wed Dec 15 01:51:01 2004
+@@ -4,9 +4,8 @@
+ #include <ggi/internal/internal.h>
+ #include "ggimesa.h"
+
+-#define GGI_SYMNAME_PREFIX "MesaGGIdl_"
+
+-extern ggi_extid ggiMesaID;
++extern ggi_extid _ggiMesaID;
+
+ ggifunc_setmode GGIMesa_setmode;
+ ggifunc_getapi GGIMesa_getapi;
+@@ -39,7 +38,7 @@
+ void *private;
+ } ggi_mesa_ext_t;
+
+-#define LIBGGI_MESAEXT(vis) ((ggi_mesa_ext_t *)LIBGGI_EXT(vis,ggiMesaID))
+-#define GGIMESA_PRIVATE(vis) ((LIBGGI_MESAEXT(vis)->private))
++#define LIBGGI_MESAEXT(vis) ((ggi_mesa_ext_t *)LIBGGI_EXT(vis,_ggiMesaID))
++#define GGIMESA_PRIV(vis) ((LIBGGI_MESAEXT(vis)->priv))
+
+ #endif /* _GGI_MISC_INT_H */
+Index: xc/extras/Mesa/src/mesa/drivers/glide/fx.rc
+diff -u xc/extras/Mesa/src/mesa/drivers/glide/fx.rc:1.1.1.3 xc/extras/Mesa/src/mesa/drivers/glide/fx.rc:1.1.1.3.2.1
+--- xc/extras/Mesa/src/mesa/drivers/glide/fx.rc:1.1.1.3 Sat Aug 28 04:27:42 2004
++++ xc/extras/Mesa/src/mesa/drivers/glide/fx.rc Wed Dec 15 01:51:01 2004
+@@ -5,10 +5,10 @@
+ #define HWSTR "3dfx Voodoo Graphics, Voodoo^2, Voodoo Banshee, Velocity 100/200, Voodoo3, Voodoo4, Voodoo5"
+ #define COPYRIGHTSTR "Copyright \251 Brian E. Paul"
+
+-#define VERSIONSTR "6.1.0.9"
++#define VERSIONSTR "6.2.0.1"
+ #define MANVERSION 6
+-#define MANREVISION 1
+-#define BUILD_NUMBER 9
++#define MANREVISION 2
++#define BUILD_NUMBER 1
+
+ VS_VERSION_INFO VERSIONINFO
+ FILEVERSION MANVERSION, MANREVISION, 0, BUILD_NUMBER
+Index: xc/extras/Mesa/src/mesa/drivers/glide/fxapi.c
+diff -u xc/extras/Mesa/src/mesa/drivers/glide/fxapi.c:1.1.1.3 xc/extras/Mesa/src/mesa/drivers/glide/fxapi.c:1.1.1.3.2.1
+--- xc/extras/Mesa/src/mesa/drivers/glide/fxapi.c:1.1.1.3 Sat Aug 28 04:27:42 2004
++++ xc/extras/Mesa/src/mesa/drivers/glide/fxapi.c Wed Dec 15 01:51:01 2004
+@@ -356,11 +356,7 @@
+ }
+
+ grSstSelect(glbCurrentBoard);
+- /*grEnable(GR_OPENGL_MODE_EXT);*/ /* ZZZ: trick to make GL happy.
+- Glide3 will unmap memory for card when grSstWinClose is called.
+- This also forces the SLI band height to be 32 (above 1024x768) or 16
+- and disables the splash screen due to y-origin swapping.
+- Note: We only want the former. */
++ /*grEnable(GR_OPENGL_MODE_EXT);*/ /* [koolsmoky] */
+ voodoo = &glbHWConfig.SSTs[glbCurrentBoard];
+
+ fxMesa = (fxMesaContext)CALLOC_STRUCT(tfxMesaContext);
+@@ -393,7 +389,7 @@
+ case GR_SSTTYPE_SST96:
+ case GR_SSTTYPE_Banshee:
+ fxMesa->bgrOrder = GL_TRUE;
+- fxMesa->snapVertices = GL_TRUE;
++ fxMesa->snapVertices = (getenv("MESA_FX_NOSNAP") == NULL);
+ break;
+ case GR_SSTTYPE_Voodoo2:
+ fxMesa->bgrOrder = GL_TRUE;
+@@ -411,7 +407,7 @@
+ fxMesa->snapVertices = GL_FALSE;
+ break;
+ }
+- /* ZZZ TO DO: Add the old SLI/AA settings for Napalm. */
++ /* XXX todo - Add the old SLI/AA settings for Napalm. */
+ switch(voodoo->numChips) {
+ case 4: /* 4 chips */
+ switch(sliaa) {
+@@ -526,8 +522,6 @@
+ goto errorhandler;
+ }
+
+- /* ZZZ TODO: check if there is enough fbRam */
+-
+ /* Tips:
+ * 1. we don't bother setting/checking AUX for stencil, because we'll decide
+ * later whether we have HW stencil, based on depth buffer (thus AUX is
+@@ -644,7 +638,7 @@
+ fxMesa->snapVertices ? "" : "no ");
+ }
+
+- sprintf(fxMesa->rendererString, "Mesa %s v0.61 %s%s",
++ sprintf(fxMesa->rendererString, "Mesa %s v0.62 %s%s",
+ grGetString(GR_RENDERER),
+ grGetString(GR_HARDWARE),
+ ((fxMesa->type < GR_SSTTYPE_Voodoo4) && (voodoo->numChips > 1)) ? " SLI" : "");
+Index: xc/extras/Mesa/src/mesa/drivers/glide/fxdd.c
+diff -u xc/extras/Mesa/src/mesa/drivers/glide/fxdd.c:1.1.1.4 xc/extras/Mesa/src/mesa/drivers/glide/fxdd.c:1.1.1.4.2.1
+--- xc/extras/Mesa/src/mesa/drivers/glide/fxdd.c:1.1.1.4 Sat Aug 28 04:27:42 2004
++++ xc/extras/Mesa/src/mesa/drivers/glide/fxdd.c Wed Dec 15 01:51:01 2004
+@@ -160,26 +160,14 @@
+ (int) x, (int) y, (int) width, (int) height );
+ }
+
+- /* Need this check to respond to glScissor and clipping updates */
+- /* should also take care of FX_NEW_COLOR_MASK, FX_NEW_STENCIL, depth? */
+- if (fxMesa->new_state & FX_NEW_SCISSOR) {
+- fxSetupScissor(ctx);
+- fxMesa->new_state &= ~FX_NEW_SCISSOR;
+- }
++ /* we can't clear accum buffers nor stereo */
++ mask &= ~(DD_ACCUM_BIT | DD_FRONT_RIGHT_BIT | DD_BACK_RIGHT_BIT);
+
+- /* we can't clear accum buffers */
+- mask &= ~(DD_ACCUM_BIT);
+-
+- /*
+- * As per GL spec, stencil masking should be obeyed when clearing
+- */
+- if (mask & DD_STENCIL_BIT) {
+- if (!fxMesa->haveHwStencil || fxMesa->unitsState.stencilWriteMask != 0xff) {
+- /* Napalm seems to have trouble with stencil write masks != 0xff */
+- /* do stencil clear in software */
+- softwareMask |= DD_STENCIL_BIT;
+- mask &= ~(DD_STENCIL_BIT);
+- }
++ /* Need this check to respond to certain HW updates */
++ if (fxMesa->new_state & (FX_NEW_SCISSOR | FX_NEW_COLOR_MASK)) {
++ fxSetupScissor(ctx);
++ fxSetupColorMask(ctx);
++ fxMesa->new_state &= ~(FX_NEW_SCISSOR | FX_NEW_COLOR_MASK);
+ }
+
+ /*
+@@ -202,7 +190,7 @@
+ */
+ BEGIN_BOARD_LOCK();
+ if (mask & DD_STENCIL_BIT) {
+- fxMesa->Glide.grStencilMaskExt(0xff /*fxMesa->unitsState.stencilWriteMask*/);
++ fxMesa->Glide.grStencilMaskExt(fxMesa->unitsState.stencilWriteMask);
+ /* set stencil ref value = desired clear value */
+ fxMesa->Glide.grStencilFuncExt(GR_CMP_ALWAYS, clearS, 0xff);
+ fxMesa->Glide.grStencilOpExt(GR_STENCILOP_REPLACE,
+@@ -213,6 +201,9 @@
+ grDisable(GR_STENCIL_MODE_EXT);
+ }
+ END_BOARD_LOCK();
++ } else if (mask & DD_STENCIL_BIT) {
++ softwareMask |= (mask & (DD_STENCIL_BIT));
++ mask &= ~(DD_STENCIL_BIT);
+ }
+
+ /*
+@@ -228,8 +219,7 @@
+ switch (mask & ~DD_STENCIL_BIT) {
+ case DD_BACK_LEFT_BIT | DD_DEPTH_BIT:
+ /* back buffer & depth */
+- /* FX_grColorMaskv_NoLock(ctx, true4); */ /* work around Voodoo3 bug */
+- grDepthMask(FXTRUE);
++ grDepthMask(FXTRUE);
+ grRenderBuffer(GR_BUFFER_BACKBUFFER);
+ if (stencil_size > 0) {
+ fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
+@@ -240,9 +230,6 @@
+ grBufferClear(fxMesa->clearC,
+ fxMesa->clearA,
+ clearD);
+- if (!fxMesa->unitsState.depthTestEnabled) {
+- grDepthMask(FXFALSE);
+- }
+ break;
+ case DD_FRONT_LEFT_BIT | DD_DEPTH_BIT:
+ /* XXX it appears that the depth buffer isn't cleared when
+@@ -250,9 +237,9 @@
+ * This is a work-around/
+ */
+ /* clear depth */
+- grDepthMask(FXTRUE);
+- grRenderBuffer(GR_BUFFER_BACKBUFFER);
++ grDepthMask(FXTRUE);
+ fxDisableColor(fxMesa);
++ grRenderBuffer(GR_BUFFER_BACKBUFFER);
+ if (stencil_size > 0)
+ fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
+ fxMesa->clearA,
+@@ -261,8 +248,9 @@
+ grBufferClear(fxMesa->clearC,
+ fxMesa->clearA,
+ clearD);
+- /* clear front */
+ fxSetupColorMask(ctx);
++ grDepthMask(FXFALSE);
++ /* clear front */
+ grRenderBuffer(GR_BUFFER_FRONTBUFFER);
+ if (stencil_size > 0)
+ fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
+@@ -272,9 +260,6 @@
+ grBufferClear(fxMesa->clearC,
+ fxMesa->clearA,
+ clearD);
+- if (!fxMesa->unitsState.depthTestEnabled) {
+- grDepthMask(FXFALSE);
+- }
+ break;
+ case DD_BACK_LEFT_BIT:
+ /* back buffer only */
+@@ -288,9 +273,6 @@
+ grBufferClear(fxMesa->clearC,
+ fxMesa->clearA,
+ clearD);
+- if (fxMesa->unitsState.depthTestEnabled) {
+- grDepthMask(FXTRUE);
+- }
+ break;
+ case DD_FRONT_LEFT_BIT:
+ /* front buffer only */
+@@ -304,9 +286,6 @@
+ grBufferClear(fxMesa->clearC,
+ fxMesa->clearA,
+ clearD);
+- if (fxMesa->unitsState.depthTestEnabled) {
+- grDepthMask(FXTRUE);
+- }
+ break;
+ case DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT:
+ /* front and back */
+@@ -329,15 +308,12 @@
+ grBufferClear(fxMesa->clearC,
+ fxMesa->clearA,
+ clearD);
+- if (fxMesa->unitsState.depthTestEnabled) {
+- grDepthMask(FXTRUE);
+- }
+ break;
+ case DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT | DD_DEPTH_BIT:
+- /* clear front */
+- grDepthMask(FXFALSE);
+- grRenderBuffer(GR_BUFFER_FRONTBUFFER);
+- if (stencil_size > 0)
++ /* clear back and depth */
++ grDepthMask(FXTRUE);
++ grRenderBuffer(GR_BUFFER_BACKBUFFER);
++ if (stencil_size > 0)
+ fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
+ fxMesa->clearA,
+ clearD, clearS);
+@@ -345,10 +321,10 @@
+ grBufferClear(fxMesa->clearC,
+ fxMesa->clearA,
+ clearD);
+- /* clear back and depth */
+- grDepthMask(FXTRUE);
+- grRenderBuffer(GR_BUFFER_BACKBUFFER);
+- if (stencil_size > 0)
++ /* clear front */
++ grDepthMask(FXFALSE);
++ grRenderBuffer(GR_BUFFER_FRONTBUFFER);
++ if (stencil_size > 0)
+ fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
+ fxMesa->clearA,
+ clearD, clearS);
+@@ -356,15 +332,12 @@
+ grBufferClear(fxMesa->clearC,
+ fxMesa->clearA,
+ clearD);
+- if (!fxMesa->unitsState.depthTestEnabled) {
+- grDepthMask(FXFALSE);
+- }
+ break;
+ case DD_DEPTH_BIT:
+ /* just the depth buffer */
+- grRenderBuffer(GR_BUFFER_BACKBUFFER);
++ grDepthMask(FXTRUE);
+ fxDisableColor(fxMesa);
+- grDepthMask(FXTRUE);
++ grRenderBuffer(GR_BUFFER_BACKBUFFER);
+ if (stencil_size > 0)
+ fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
+ fxMesa->clearA,
+@@ -374,41 +347,29 @@
+ fxMesa->clearA,
+ clearD);
+ fxSetupColorMask(ctx);
+- if (ctx->Color._DrawDestMask & DD_FRONT_LEFT_BIT) {
+- grRenderBuffer(GR_BUFFER_FRONTBUFFER);
+- }
+- if (!fxMesa->unitsState.depthTestEnabled) {
+- grDepthMask(FXFALSE);
+- }
+ break;
+ default:
+ /* clear no color buffers or depth buffer but might clear stencil */
+- if (stencil_size > 0 && (mask & DD_STENCIL_BIT)) {
++ if ((stencil_size > 0) && (mask & DD_STENCIL_BIT)) {
+ /* XXX need this RenderBuffer call to work around Glide bug */
+- grRenderBuffer(GR_BUFFER_BACKBUFFER);
+ grDepthMask(FXFALSE);
++ grRenderBuffer(GR_BUFFER_BACKBUFFER);
+ fxDisableColor(fxMesa);
+ fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
+ fxMesa->clearA,
+ clearD, clearS);
+- if (fxMesa->unitsState.depthTestEnabled) {
+- grDepthMask(FXTRUE);
+- }
+ fxSetupColorMask(ctx);
+- if (ctx->Color._DrawDestMask & DD_FRONT_LEFT_BIT) {
+- grRenderBuffer(GR_BUFFER_FRONTBUFFER);
+- }
+ }
+ }
+ }
+ END_CLIP_LOOP();
+
+- if (fxMesa->haveHwStencil && (mask & DD_STENCIL_BIT)) {
+- /* We changed the stencil state above. Signal that we need to
+- * upload it again.
+- */
+- fxMesa->new_state |= FX_NEW_STENCIL;
++ if (fxMesa->haveHwStencil) {
++ /* We changed the stencil state above. Restore it! */
++ fxSetupStencil(ctx);
+ }
++ fxSetupDepthTest(ctx);
++ grRenderBuffer(fxMesa->currentFB);
+
+ if (softwareMask)
+ _swrast_Clear( ctx, softwareMask, all, x, y, width, height );
+@@ -417,6 +378,7 @@
+
+ /* Set the buffer used for drawing */
+ /* XXX support for separate read/draw buffers hasn't been tested */
++/* XXX GL_NONE disables color, but fails to correctly maintain state */
+ static void
+ fxDDSetDrawBuffer(GLcontext * ctx, GLenum mode)
+ {
+@@ -1693,7 +1655,7 @@
+ }
+
+ static const struct tnl_pipeline_stage *fx_pipeline[] = {
+- &_tnl_vertex_transform_stage, /* TODO: Add the fastpath here */
++ &_tnl_vertex_transform_stage, /* XXX todo - Add the fastpath here */
+ &_tnl_normal_transform_stage,
+ &_tnl_lighting_stage,
+ &_tnl_fog_coordinate_stage,
+@@ -1893,35 +1855,12 @@
+ _mesa_enable_extension(ctx, "GL_EXT_shared_texture_palette");
+ _mesa_enable_extension(ctx, "GL_EXT_blend_func_separate");
+ _mesa_enable_extension(ctx, "GL_EXT_texture_env_add");
++ _mesa_enable_extension(ctx, "GL_EXT_stencil_wrap");
+
+ if (fxMesa->haveTwoTMUs) {
+ _mesa_enable_extension(ctx, "GL_ARB_multitexture");
+ }
+
+- if (fxMesa->haveHwStencil) {
+- _mesa_enable_extension( ctx, "GL_EXT_stencil_wrap" );
+- }
+-
+- /* [dBorca] Hack alert:
+- * True texture compression can be done only on Napalm.
+- * We will advertise, however, generic texture compression
+- * on all Voodoo cards; the Mesa logic allows us to eventually
+- * fallback to uncompressed. This will fix those dumb applications
+- * which refuse to run w/o texture compression! We actually _can_
+- * do texture compression for pre-Napalm cores, through NCC. But
+- * NCC poses many issues:
+- * 1) NCC w/o DITHER_ERR has poor quality and NCC w/ DITHER_ERR is
+- * damn slow!
+- * 2) NCC compression cannot be used with multitexturing, because
+- * the decompression tables are not per TMU anymore (bear in mind
+- * that earlier Voodoos could handle 2 NCC tables for each TMU --
+- * just look for POINTCAST_PALETTE). As a last resort, we could
+- * fake NCC multitexturing through multipass rendering, but...
+- * ohwell, it's not worth the effort...
+- * This stand true for multitexturing palletized textures.
+- * 3) since NCC is not an OpenGL standard (as opposed to FXT1/DXTC), we
+- * can't use precompressed textures!
+- */
+ if (fxMesa->type >= GR_SSTTYPE_Voodoo4) {
+ _mesa_enable_extension(ctx, "GL_ARB_texture_compression");
+ _mesa_enable_extension(ctx, "GL_3DFX_texture_compression_FXT1");
+@@ -1929,17 +1868,31 @@
+ _mesa_enable_extension(ctx, "GL_S3_s3tc");
+ _mesa_enable_extension(ctx, "GL_NV_blend_square");
+ } else {
++#if FX_TC_NCC
++ /* [dBorca] Hack alert:
++ * 1) NCC w/o DITHER_ERR has poor quality and NCC w/ DITHER_ERR is
++ * damn slow!
++ * 2) NCC compression cannot be used with multitexturing, because
++ * the decompression tables are not per TMU anymore (bear in mind
++ * that earlier Voodoos could handle 2 NCC tables for each TMU --
++ * just look for POINTCAST_PALETTE). As a last resort, we could
++ * fake NCC multitexturing through multipass rendering, but...
++ * ohwell, it's not worth the effort...
++ * This stand true for multitexturing palletized textures.
++ * 3) since NCC is not an OpenGL standard (as opposed to FXT1/DXTC), we
++ * can't use precompressed textures!
++ */
+ if (fxMesa->HaveTexus2) {
+ _mesa_enable_extension(ctx, "GL_ARB_texture_compression");
+ }
+-#if FX_TC_NCC
+- else
+-#endif
++#else
+ /* doesn't like texture compression */
+ _mesa_enable_extension(ctx, "GL_SGIS_generate_mipmap");
++#endif
+ }
+
+ if (fxMesa->HaveCmbExt) {
++ _mesa_enable_extension(ctx, "GL_ARB_texture_env_combine");
+ _mesa_enable_extension(ctx, "GL_EXT_texture_env_combine");
+ }
+
+@@ -2016,8 +1969,7 @@
+ #if 0
+ /* [dBorca]
+ * We fail the spec here, unless certain blending modes:
+- * (c1 + c2) * 1 + d * 1 = c1 * 1 + d * 1 + c2 * 1
+- * (c1 + c2) * 1 + d * 0 = c1 * 1 + d * 0 + c2 * 1
++ * RGB: (GL_ONE + GL_*) or (GL_ZERO + GL_*) or ...
+ */
+ if (NEED_SECONDARY_COLOR(ctx)) {
+ if ((ctx->Color.BlendEquationRGB != GL_FUNC_ADD) &&
+Index: xc/extras/Mesa/src/mesa/drivers/glide/fxddspan.c
+diff -u xc/extras/Mesa/src/mesa/drivers/glide/fxddspan.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/glide/fxddspan.c:1.1.1.2.2.1
+--- xc/extras/Mesa/src/mesa/drivers/glide/fxddspan.c:1.1.1.2 Sat Aug 28 04:27:42 2004
++++ xc/extras/Mesa/src/mesa/drivers/glide/fxddspan.c Wed Dec 15 01:51:01 2004
+@@ -100,30 +100,23 @@
+
+ #define HW_WRITE_CLIPLOOP() \
+ do { \
+- const int _nc = 1; /* numcliprects */ \
+- /* [dBorca] Hack alert: */ \
+ /* remember, we need to flip the scissor, too */ \
+ /* is it better to do it inside fxDDScissor? */ \
+- while (_nc--) { \
+- const int minx = fxMesa->clipMinX; \
+- const int maxy = Y_FLIP(fxMesa->clipMinY); \
+- const int maxx = fxMesa->clipMaxX; \
+- const int miny = Y_FLIP(fxMesa->clipMaxY);
++ const int minx = fxMesa->clipMinX; \
++ const int maxy = Y_FLIP(fxMesa->clipMinY); \
++ const int maxx = fxMesa->clipMaxX; \
++ const int miny = Y_FLIP(fxMesa->clipMaxY);
+
+ #define HW_READ_CLIPLOOP() \
+ do { \
+- const int _nc = 1; /* numcliprects */ \
+- /* [dBorca] Hack alert: */ \
+ /* remember, we need to flip the scissor, too */ \
+ /* is it better to do it inside fxDDScissor? */ \
+- while (_nc--) { \
+- const int minx = fxMesa->clipMinX; \
+- const int maxy = Y_FLIP(fxMesa->clipMinY); \
+- const int maxx = fxMesa->clipMaxX; \
+- const int miny = Y_FLIP(fxMesa->clipMaxY);
++ const int minx = fxMesa->clipMinX; \
++ const int maxy = Y_FLIP(fxMesa->clipMinY); \
++ const int maxx = fxMesa->clipMaxX; \
++ const int miny = Y_FLIP(fxMesa->clipMaxY);
+
+ #define HW_ENDCLIPLOOP() \
+- } \
+ } while (0)
+
+
+Index: xc/extras/Mesa/src/mesa/drivers/glide/fxddtex.c
+diff -u xc/extras/Mesa/src/mesa/drivers/glide/fxddtex.c:1.1.1.3 xc/extras/Mesa/src/mesa/drivers/glide/fxddtex.c:1.1.1.3.2.1
+--- xc/extras/Mesa/src/mesa/drivers/glide/fxddtex.c:1.1.1.3 Sat Aug 28 04:27:43 2004
++++ xc/extras/Mesa/src/mesa/drivers/glide/fxddtex.c Wed Dec 15 01:51:01 2004
+@@ -60,12 +60,12 @@
+ GLint dstWidth = srcWidth / 2;
+ GLint dstHeight = srcHeight / 2;
+ GLint srcRowStride = srcWidth * bytesPerPixel;
+- GLubyte *src = srcImage;
++ GLubyte *src = (GLubyte *)srcImage;
+ GLubyte *dst = dstImage;
+
+ GLuint bpt = 0;
+- GLubyte *_s;
+- GLubyte *_d;
++ GLubyte *_s = NULL;
++ GLubyte *_d = NULL;
+ GLenum _t;
+
+ if (texImage->TexFormat->MesaFormat == MESA_FORMAT_RGB565) {
+@@ -615,21 +615,8 @@
+ fprintf(stderr, "fxDDTexUseGlbPalette(%d)\n", state);
+ }
+
+- if (state) {
+- fxMesa->haveGlobalPaletteTexture = 1;
+- }
+- else {
+- fxMesa->haveGlobalPaletteTexture = 0;
+-
+- /* [dBorca] tis beyond my comprehension */
+- if ((ctx->Texture.Unit[0]._Current == ctx->Texture.Unit[0].Current2D) &&
+- (ctx->Texture.Unit[0]._Current != NULL)) {
+- struct gl_texture_object *tObj = ctx->Texture.Unit[0]._Current;
+- if (!tObj->DriverData)
+- tObj->DriverData = fxAllocTexObjData(fxMesa);
+- fxTexInvalidate(ctx, tObj);
+- }
+- }
++ fxMesa->haveGlobalPaletteTexture = state;
++ fxMesa->new_state |= FX_NEW_TEXTURING;
+ }
+
+
+@@ -1539,17 +1526,7 @@
+ ti->info.format = mml->glideFormat;
+ texImage->FetchTexelc = fxFetchFunction(texImage->TexFormat->MesaFormat);
+
+- /* [dBorca]
+- * Hack alert: unsure...
+- */
+- if (0 && ti->validated && ti->isInTM) {
+- /*fprintf(stderr, "reloadmipmaplevels\n"); */
+- fxTMReloadMipMapLevel(fxMesa, texObj, level);
+- }
+- else {
+- /*fprintf(stderr, "invalidate2\n"); */
+- fxTexInvalidate(ctx, texObj);
+- }
++ fxTexInvalidate(ctx, texObj);
+ }
+
+
+@@ -1781,17 +1758,7 @@
+ assert(!texImage->IsCompressed);
+ }
+
+- /* [dBorca]
+- * Hack alert: unsure...
+- */
+- if (0 && ti->validated && ti->isInTM) {
+- /*fprintf(stderr, "reloadmipmaplevels\n"); */
+- fxTMReloadMipMapLevel(fxMesa, texObj, level);
+- }
+- else {
+- /*fprintf(stderr, "invalidate2\n"); */
+- fxTexInvalidate(ctx, texObj);
+- }
++ fxTexInvalidate(ctx, texObj);
+ }
+
+
+@@ -1829,7 +1796,7 @@
+ mml->width,
+ (GLubyte*) texImage->Data);
+
+- rows = height / 4; /* [dBorca] hardcoded 4, but works for FXT1/DXTC */
++ rows = height / 4; /* hardcoded 4, but works for FXT1/DXTC */
+
+ for (i = 0; i < rows; i++) {
+ MEMCPY(dest, data, srcRowStride);
+@@ -1905,9 +1872,7 @@
+ GLint width, GLint height,
+ GLint depth, GLint border)
+ {
+- /* [dBorca]
+- * TODO - maybe through fxTexValidate()
+- */
++ /* XXX todo - maybe through fxTexValidate() */
+ return _mesa_test_proxy_teximage(ctx, target,
+ level, internalFormat,
+ format, type,
+Index: xc/extras/Mesa/src/mesa/drivers/glide/fxdrv.h
+diff -u xc/extras/Mesa/src/mesa/drivers/glide/fxdrv.h:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/glide/fxdrv.h:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/glide/fxdrv.h:1.1.1.2 Thu Jul 22 06:52:21 2004
++++ xc/extras/Mesa/src/mesa/drivers/glide/fxdrv.h Wed Dec 15 01:51:01 2004
+@@ -714,6 +714,7 @@
+ void fxSetupBlend (GLcontext *ctx);
+ void fxSetupDepthTest (GLcontext *ctx);
+ void fxSetupTexture (GLcontext *ctx);
++void fxSetupStencil (GLcontext *ctx);
+
+ /* Flags for software fallback cases */
+ #define FX_FALLBACK_TEXTURE_MAP 0x0001
+@@ -730,6 +731,28 @@
+
+ extern GLuint fx_check_IsInHardware(GLcontext *ctx);
+
++/***
++ *** CNORM: clamp float to [0,1] and map to float in [0,255]
++ ***/
++#if defined(USE_IEEE) && !defined(DEBUG)
++#define IEEE_0996 0x3f7f0000 /* 0.996 or so */
++#define CNORM(N, F) \
++ do { \
++ fi_type __tmp; \
++ __tmp.f = (F); \
++ if (__tmp.i < 0) \
++ N = 0; \
++ else if (__tmp.i >= IEEE_0996) \
++ N = 255.0f; \
++ else { \
++ N = (F) * 255.0f; \
++ } \
++ } while (0)
++#else
++#define CNORM(n, f) \
++ n = (CLAMP((f), 0.0F, 1.0F) * 255.0F)
++#endif
++
+ /* run-time debugging */
+ #ifndef FX_DEBUG
+ #define FX_DEBUG 0
+Index: xc/extras/Mesa/src/mesa/drivers/glide/fxglidew.c
+diff -u xc/extras/Mesa/src/mesa/drivers/glide/fxglidew.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/glide/fxglidew.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/glide/fxglidew.c:1.1.1.1 Wed Jun 16 09:18:48 2004
++++ xc/extras/Mesa/src/mesa/drivers/glide/fxglidew.c Wed Dec 15 01:51:01 2004
+@@ -126,7 +126,12 @@
+
+ grCoordinateSpace(GR_WINDOW_COORDS);
+ grVertexLayout(GR_PARAM_XY, GR_VERTEX_X_OFFSET << 2, GR_PARAM_ENABLE);
++#if FX_PACKEDCOLOR
+ grVertexLayout(GR_PARAM_PARGB, GR_VERTEX_PARGB_OFFSET << 2, GR_PARAM_ENABLE);
++#else /* !FX_PACKEDCOLOR */
++ grVertexLayout(GR_PARAM_RGB, GR_VERTEX_RGB_OFFSET << 2, GR_PARAM_ENABLE);
++ grVertexLayout(GR_PARAM_A, GR_VERTEX_A_OFFSET << 2, GR_PARAM_ENABLE);
++#endif /* !FX_PACKEDCOLOR */
+ grVertexLayout(GR_PARAM_Q, GR_VERTEX_OOW_OFFSET << 2, GR_PARAM_ENABLE);
+ grVertexLayout(GR_PARAM_Z, GR_VERTEX_OOZ_OFFSET << 2, GR_PARAM_ENABLE);
+ grVertexLayout(GR_PARAM_ST0, GR_VERTEX_SOW_TMU0_OFFSET << 2,
+@@ -210,7 +215,7 @@
+ config->SSTs[i].type = GR_SSTTYPE_VOODOO;
+ }
+
+- grGet(GR_MEMORY_FB, 4, &result); /* ZZZ: differs after grSstWinOpen */
++ grGet(GR_MEMORY_FB, 4, &result);
+ config->SSTs[i].fbRam = result / (1024 * 1024);
+
+ grGet(GR_NUM_TMU, 4, &result);
+@@ -220,7 +225,7 @@
+ config->SSTs[i].fbiRev = result;
+
+ for (j = 0; j < config->SSTs[i].nTexelfx; j++) {
+- grGet(GR_MEMORY_TMU, 4, &result); /* ZZZ: differs after grSstWinOpen */
++ grGet(GR_MEMORY_TMU, 4, &result);
+ config->SSTs[i].tmuConfig[j].tmuRam = result / (1024 * 1024);
+ grGet(GR_REVISION_TMU, 4, &result);
+ config->SSTs[i].tmuConfig[j].tmuRev = result;
+Index: xc/extras/Mesa/src/mesa/drivers/glide/fxglidew.h
+diff -u xc/extras/Mesa/src/mesa/drivers/glide/fxglidew.h:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/glide/fxglidew.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/glide/fxglidew.h:1.1.1.1 Wed Jun 16 09:18:48 2004
++++ xc/extras/Mesa/src/mesa/drivers/glide/fxglidew.h Wed Dec 15 01:51:01 2004
+@@ -38,7 +38,9 @@
+
+ #include "fxg.h"
+
+-
++#ifndef FX_PACKEDCOLOR
++#define FX_PACKEDCOLOR 1
++#endif
+
+ #define MAX_NUM_SST 4
+
+@@ -112,6 +114,7 @@
+ float oow; /* 1/w (used mipmapping - really 0xfff/w) */
+ } GrTmuVertex;
+
++#if FX_PACKEDCOLOR
+ typedef struct {
+ float x, y; /* X and Y in screen space */
+ float ooz; /* 65535/Z (used for Z-buffering) */
+@@ -137,6 +140,34 @@
+ #define GR_VERTEX_OOW_TMU1_OFFSET 10
+ #define GR_VERTEX_FOG_OFFSET 11
+ #define GR_VERTEX_PSPEC_OFFSET 12
++#else /* !FX_PACKEDCOLOR */
++typedef struct {
++ float x, y; /* X and Y in screen space */
++ float ooz; /* 65535/Z (used for Z-buffering) */
++ float oow; /* 1/W (used for W-buffering, texturing) */
++ float r, g, b, a; /* R, G, B, A [0..255] */
++ GrTmuVertex tmuvtx[GLIDE_NUM_TMU];
++ float fog; /* fog coordinate */
++ float r1, g1, b1; /* R, G, B [0..255] */
++ float psize; /* point size */
++ long pad[20 - 19]; /* ensure multiple of 16 */
++} GrVertex;
++
++#define GR_VERTEX_X_OFFSET 0
++#define GR_VERTEX_Y_OFFSET 1
++#define GR_VERTEX_OOZ_OFFSET 2
++#define GR_VERTEX_OOW_OFFSET 3
++#define GR_VERTEX_RGB_OFFSET 4
++#define GR_VERTEX_A_OFFSET 7
++#define GR_VERTEX_SOW_TMU0_OFFSET 8
++#define GR_VERTEX_TOW_TMU0_OFFSET 9
++#define GR_VERTEX_OOW_TMU0_OFFSET 10
++#define GR_VERTEX_SOW_TMU1_OFFSET 11
++#define GR_VERTEX_TOW_TMU1_OFFSET 12
++#define GR_VERTEX_OOW_TMU1_OFFSET 13
++#define GR_VERTEX_FOG_OFFSET 14
++#define GR_VERTEX_SPEC_OFFSET 15
++#endif /* !FX_PACKEDCOLOR */
+
+
+
+Index: xc/extras/Mesa/src/mesa/drivers/glide/fxsetup.c
+diff -u xc/extras/Mesa/src/mesa/drivers/glide/fxsetup.c:1.1.1.3 xc/extras/Mesa/src/mesa/drivers/glide/fxsetup.c:1.1.1.3.2.1
+--- xc/extras/Mesa/src/mesa/drivers/glide/fxsetup.c:1.1.1.3 Sat Aug 28 04:27:44 2004
++++ xc/extras/Mesa/src/mesa/drivers/glide/fxsetup.c Wed Dec 15 01:51:01 2004
+@@ -76,9 +76,7 @@
+ const GLvoid *srcImage, GLvoid *dstImage );
+ fxMesaContext fxMesa = FX_CONTEXT(ctx);
+ /* [dBorca]
+- * Ooooooook! Here's a(nother) long story.
+- * We get here because we need to handle a texture larger
+- * than hardware can support. Two cases:
++ * Fake textures larger than HW supports:
+ * 1) we have mipmaps. Then we just push up to the first supported
+ * LOD. A possible drawback is that Mesa will ignore the skipped
+ * LODs on further texture handling.
+@@ -88,13 +86,6 @@
+ * once in TexImage2D to accomodate aspect ratio, and now we
+ * are rescaling again. The thing is, in TexImage2D we don't
+ * know whether we'll hit 1) or 2) by the time of validation.
+- * NB: we could handle mml->[wh]Scale nicely, using (biased) shifts.
+- *
+- * Which brings me to another issue. How can we handle NPOT textures?
+- * - rescaling NPOT to the next bigger POT (mml->[wh]Scale can't shift)
+- * - upping the max LOD to the next power-of-two, in fxTexGetInfo; then
+- * choosing non-power-of-two values for ti->[st]Scale... Anyhow, we
+- * still need to align mipmaps correctly in texture memory!
+ */
+ if ((tObj->MinFilter == GL_NEAREST) || (tObj->MinFilter == GL_LINEAR)) {
+ /* no mipmaps! */
+@@ -155,7 +146,7 @@
+ else
+ FX_smallLodLog2(ti->info) = FX_largeLodLog2(ti->info);
+
+- /* this is necessary because of fxDDCompressedTexImage2D */
++ /* [dBorca] this is necessary because of fxDDCompressedTexImage2D */
+ if (ti->padded) {
+ struct gl_texture_image *texImage = tObj->Image[0][minl];
+ tfxMipMapLevel *mml = FX_MIPMAP_DATA(texImage);
+@@ -351,9 +342,7 @@
+ fprintf(stderr, "fxSetupSingleTMU_NoLock(%p (%d))\n", (void *)tObj, tObj->Name);
+ }
+
+-#if 1 /* [dBorca] Good... bad... I'm the guy with the gun! */
+ ti->lastTimeUsed = fxMesa->texBindNumber;
+-#endif
+
+ /* Make sure we're not loaded incorrectly */
+ if (ti->isInTM) {
+@@ -654,10 +643,9 @@
+ colorComb.Factor = GR_COMBINE_FACTOR_TEXTURE_ALPHA;
+ colorComb.Other = GR_COMBINE_OTHER_CONSTANT;
+ } else {
+- /* [dBorca] Hack alert:
+- * only Voodoo^2 can GL_BLEND (GR_COMBINE_FACTOR_TEXTURE_RGB)
+- * These settings assume that the TexEnv color is black
+- * and incoming fragment color is white.
++ /* Only Voodoo^2 can GL_BLEND (GR_COMBINE_FACTOR_TEXTURE_RGB)
++ * These settings assume that the TexEnv color is black and
++ * incoming fragment color is white.
+ */
+ colorComb.Function = GR_COMBINE_FUNCTION_SCALE_OTHER;
+ colorComb.Factor = GR_COMBINE_FACTOR_ONE;
+@@ -1781,7 +1769,7 @@
+ }
+ }
+
+-static void
++void
+ fxSetupStencil (GLcontext * ctx)
+ {
+ fxMesaContext fxMesa = FX_CONTEXT(ctx);
+Index: xc/extras/Mesa/src/mesa/drivers/glide/fxsetup.h
+diff -u xc/extras/Mesa/src/mesa/drivers/glide/fxsetup.h:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/glide/fxsetup.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/glide/fxsetup.h:1.1.1.1 Wed Jun 16 09:18:49 2004
++++ xc/extras/Mesa/src/mesa/drivers/glide/fxsetup.h Wed Dec 15 01:51:01 2004
+@@ -32,8 +32,7 @@
+ */
+
+ /* fxsetup.c - 3Dfx VooDoo rendering mode setup functions */
+-/* [dBorca] Hack alert:
+- * this code belongs to fxsetup.c, but I didn't want to clutter
++/* This code belongs to fxsetup.c, but I didn't want to clutter
+ * the original code with Napalm specifics, in order to keep things
+ * clear -- especially for backward compatibility. I should have
+ * put it into another .c file, but I didn't want to export so many
+@@ -379,9 +378,7 @@
+ break;
+ /* COMBINE_EXT */
+ case GL_COMBINE_EXT:
+- /* [dBorca] Hack alert:
+- * INCOMPLETE!!!
+- */
++ /* XXX todo - INCOMPLETE!!! */
+ if (TDFX_DEBUG & (VERBOSE_DRIVER | VERBOSE_TEXTURE)) {
+ #if 1
+ fprintf(stderr, "COMBINE_EXT: %s + %s\n",
+@@ -1024,10 +1021,7 @@
+ }
+
+ if (LODblend) {
+- /* [dBorca] Hack alert:
+- * TODO: GR_CMBX_LOD_FRAC
+- */
+-
++ /* XXX todo - GR_CMBX_LOD_FRAC? */
+ fxMesa->tmuSrc = FX_TMU_SPLIT;
+ }
+ else {
+Index: xc/extras/Mesa/src/mesa/drivers/glide/fxtexman.c
+diff -u xc/extras/Mesa/src/mesa/drivers/glide/fxtexman.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/glide/fxtexman.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/glide/fxtexman.c:1.1.1.1 Wed Jun 16 09:18:49 2004
++++ xc/extras/Mesa/src/mesa/drivers/glide/fxtexman.c Wed Dec 15 01:51:01 2004
+@@ -486,7 +486,7 @@
+
+ /*texmemsize = (int)grTexTextureMemRequired(GR_MIPMAPLEVELMASK_BOTH, &(ti->info));*/
+ ti->tm[FX_TMU1] = fxTMAddObj(fxMesa, tObj, FX_TMU1, texmemsize);
+- fxMesa->stats.memTexUpload += texmemsize; /* ZZZ: required? */
++ fxMesa->stats.memTexUpload += texmemsize;
+
+ for (i = FX_largeLodValue(ti->info), l = ti->minLevel;
+ i <= FX_smallLodValue(ti->info); i++, l++) {
+@@ -550,6 +550,7 @@
+ assert(mml->width > 0);
+ assert(mml->height > 0);
+ assert(mml->glideFormat > 0);
++ assert(ti->isInTM);
+
+ if (!ti->validated) {
+ fprintf(stderr, "fxTMReloadMipMapLevel: INTERNAL ERROR: not validated\n");
+@@ -558,17 +559,8 @@
+ }
+
+ tmu = (int) ti->whichTMU;
+-#if 0
+- /* [dBorca]
+- * We get here by (see Tex[Sub]Image2D), thus we are in TMU.
+- * Also, we just set the correct TMU above. fxTMMoveInTM will
+- * bail early, so don't bother...
+- */
+- fxTMMoveInTM(fxMesa, tObj, tmu);
+-#else
+ fxMesa->stats.reqTexUpload++;
+ fxMesa->stats.texUpload++;
+-#endif
+
+ lodlevel = ti->info.largeLodLog2 - (level - ti->minLevel);
+
+Index: xc/extras/Mesa/src/mesa/drivers/glide/fxtris.c
+diff -u xc/extras/Mesa/src/mesa/drivers/glide/fxtris.c:1.1.1.3 xc/extras/Mesa/src/mesa/drivers/glide/fxtris.c:1.1.1.3.2.1
+--- xc/extras/Mesa/src/mesa/drivers/glide/fxtris.c:1.1.1.3 Sat Aug 28 04:27:44 2004
++++ xc/extras/Mesa/src/mesa/drivers/glide/fxtris.c Wed Dec 15 01:51:01 2004
+@@ -146,6 +146,7 @@
+ dst->win[2] = src->ooz;
+ dst->win[3] = src->oow;
+
++#if FX_PACKEDCOLOR
+ dst->color[0] = src->pargb[2];
+ dst->color[1] = src->pargb[1];
+ dst->color[2] = src->pargb[0];
+@@ -154,6 +155,16 @@
+ dst->specular[0] = src->pspec[2];
+ dst->specular[1] = src->pspec[1];
+ dst->specular[2] = src->pspec[0];
++#else /* !FX_PACKEDCOLOR */
++ dst->color[0] = src->r;
++ dst->color[1] = src->g;
++ dst->color[2] = src->b;
++ dst->color[3] = src->a;
++
++ dst->specular[0] = src->r1;
++ dst->specular[1] = src->g1;
++ dst->specular[2] = src->g1;
++#endif /* !FX_PACKEDCOLOR */
+
+ dst->texcoord[ts0][0] = fxMesa->inv_s0scale * src->tmuvtx[0].sow * w;
+ dst->texcoord[ts0][1] = fxMesa->inv_t0scale * src->tmuvtx[0].tow * w;
+@@ -227,7 +238,11 @@
+ fprintf(stderr, "\tvertex at %p\n", (void *) v);
+
+ fprintf(stderr, "\tx %f y %f z %f oow %f\n", v->x, v->y, v->ooz, v->oow);
++#if FX_PACKEDCOLOR
+ fprintf(stderr, "\tr %d g %d b %d a %d\n", v->pargb[2], v->pargb[1], v->pargb[0], v->pargb[3]);
++#else /* !FX_PACKEDCOLOR */
++ fprintf(stderr, "\tr %f g %f b %f a %f\n", v->r, v->g, v->b, v->a);
++#endif /* !FX_PACKEDCOLOR */
+
+ fprintf(stderr, "\n");
+ }
+@@ -298,14 +313,25 @@
+ /* point coverage? */
+ /* we don't care about culling here (see fxSetupCull) */
+
+- _v_[0].x -= radius;
+- _v_[0].y += radius;
+- _v_[1].x += radius;
+- _v_[1].y += radius;
+- _v_[2].x += radius;
+- _v_[2].y -= radius;
+- _v_[3].x -= radius;
+- _v_[3].y -= radius;
++ if (ctx->Point.SpriteOrigin == GL_UPPER_LEFT) {
++ _v_[0].x -= radius;
++ _v_[0].y += radius;
++ _v_[1].x += radius;
++ _v_[1].y += radius;
++ _v_[2].x += radius;
++ _v_[2].y -= radius;
++ _v_[3].x -= radius;
++ _v_[3].y -= radius;
++ } else {
++ _v_[0].x -= radius;
++ _v_[0].y -= radius;
++ _v_[1].x += radius;
++ _v_[1].y -= radius;
++ _v_[2].x += radius;
++ _v_[2].y += radius;
++ _v_[3].x -= radius;
++ _v_[3].y += radius;
++ }
+
+ if (ctx->Point.CoordReplace[ts0]) {
+ _v_[0].tmuvtx[0].sow = 0;
+@@ -340,7 +366,9 @@
+ GrVertex *_v_[3];
+
+ const GLcontext *ctx = fxMesa->glCtx;
+- const GLfloat psize = (ctx->_TriangleCaps & DD_POINT_ATTEN) ? v0->psize : ctx->Point.Size;
++ const GLfloat psize = (ctx->_TriangleCaps & DD_POINT_ATTEN)
++ ? CLAMP(v0->psize, ctx->Point.MinSize, ctx->Point.MaxSize)
++ : ctx->Point._Size; /* clamped */
+
+ if (ctx->Point.PointSprite) {
+ fx_draw_point_sprite(fxMesa, v0, psize);
+@@ -415,7 +443,9 @@
+ GrVertex vtxB, vtxC;
+
+ const GLcontext *ctx = fxMesa->glCtx;
+- const GLfloat psize = (ctx->_TriangleCaps & DD_POINT_ATTEN) ? v0->psize : ctx->Point.Size;
++ const GLfloat psize = (ctx->_TriangleCaps & DD_POINT_ATTEN)
++ ? CLAMP(v0->psize, ctx->Point.MinSize, ctx->Point.MaxSize)
++ : ctx->Point._Size; /* clamped */
+
+ if (ctx->Point.PointSprite) {
+ fx_draw_point_sprite(fxMesa, v0, psize);
+@@ -499,6 +529,7 @@
+ #endif
+
+
++#if FX_PACKEDCOLOR
+ #define VERT_SET_RGBA( dst, f ) \
+ do { \
+ UNCLAMPED_FLOAT_TO_UBYTE(dst->pargb[2], f[0]);\
+@@ -538,6 +569,74 @@
+ fxMesaContext fxMesa = FX_CONTEXT(ctx); \
+ GLubyte color[n][4], spec[n][4]; \
+ (void) color; (void) spec;
++#else /* !FX_PACKEDCOLOR */
++#define VERT_SET_RGBA( dst, f ) \
++do { \
++ CNORM(dst->r, f[0]); \
++ CNORM(dst->g, f[1]); \
++ CNORM(dst->b, f[2]); \
++ CNORM(dst->a, f[3]); \
++} while (0)
++
++#define VERT_COPY_RGBA( v0, v1 ) \
++do { \
++ *(GLuint *)&v0->r = *(GLuint *)&v1->r; \
++ *(GLuint *)&v0->g = *(GLuint *)&v1->g; \
++ *(GLuint *)&v0->b = *(GLuint *)&v1->b; \
++ *(GLuint *)&v0->a = *(GLuint *)&v1->a; \
++} while (0)
++
++#define VERT_SAVE_RGBA( idx ) \
++do { \
++ *(GLuint *)&color[idx][0] = *(GLuint *)&v[idx]->r;\
++ *(GLuint *)&color[idx][1] = *(GLuint *)&v[idx]->g;\
++ *(GLuint *)&color[idx][2] = *(GLuint *)&v[idx]->b;\
++ *(GLuint *)&color[idx][3] = *(GLuint *)&v[idx]->a;\
++} while (0)
++
++#define VERT_RESTORE_RGBA( idx ) \
++do { \
++ *(GLuint *)&v[idx]->r = *(GLuint *)&color[idx][0];\
++ *(GLuint *)&v[idx]->g = *(GLuint *)&color[idx][1];\
++ *(GLuint *)&v[idx]->b = *(GLuint *)&color[idx][2];\
++ *(GLuint *)&v[idx]->a = *(GLuint *)&color[idx][3];\
++} while (0)
++
++
++#define VERT_SET_SPEC( dst, f ) \
++do { \
++ CNORM(dst->r1, f[0]); \
++ CNORM(dst->g1, f[1]); \
++ CNORM(dst->b1, f[2]); \
++} while (0)
++
++#define VERT_COPY_SPEC( v0, v1 ) \
++do { \
++ *(GLuint *)&v0->r1 = *(GLuint *)&v1->r1; \
++ *(GLuint *)&v0->g1 = *(GLuint *)&v1->g1; \
++ *(GLuint *)&v0->b1 = *(GLuint *)&v1->b1; \
++} while (0)
++
++#define VERT_SAVE_SPEC( idx ) \
++do { \
++ *(GLuint *)&spec[idx][0] = *(GLuint *)&v[idx]->r1;\
++ *(GLuint *)&spec[idx][1] = *(GLuint *)&v[idx]->g1;\
++ *(GLuint *)&spec[idx][2] = *(GLuint *)&v[idx]->b1;\
++} while (0)
++
++#define VERT_RESTORE_SPEC( idx ) \
++do { \
++ *(GLuint *)&v[idx]->r1 = *(GLuint *)&spec[idx][0];\
++ *(GLuint *)&v[idx]->g1 = *(GLuint *)&spec[idx][1];\
++ *(GLuint *)&v[idx]->b1 = *(GLuint *)&spec[idx][2];\
++} while (0)
++
++
++#define LOCAL_VARS(n) \
++ fxMesaContext fxMesa = FX_CONTEXT(ctx); \
++ GLuint color[n][4], spec[n][4]; \
++ (void) color; (void) spec;
++#endif /* !FX_PACKEDCOLOR */
+
+
+
+@@ -904,7 +1003,6 @@
+ {
+ fxMesaContext fxMesa = FX_CONTEXT(ctx);
+ GrVertex *fxVB = fxMesa->verts;
+- int mode;
+ (void) flags;
+
+ if (TDFX_DEBUG & VERBOSE_VARRAY) {
+@@ -913,13 +1011,9 @@
+
+ INIT(GL_TRIANGLE_STRIP);
+
+- /* [dBorca] WTF?!?
+- if (flags & PRIM_PARITY)
+- mode = GR_TRIANGLE_STRIP_CONTINUE;
+- else*/
+- mode = GR_TRIANGLE_STRIP;
++ /* no GR_TRIANGLE_STRIP_CONTINUE?!? */
+
+- grDrawVertexArrayContiguous( mode, count-start,
++ grDrawVertexArrayContiguous( GR_TRIANGLE_STRIP, count-start,
+ fxVB + start, sizeof(GrVertex));
+ }
+
+@@ -1273,58 +1367,41 @@
+ */
+ if (new_gl_state & _NEW_PROJECTION)
+ fxMesa->new_state |= FX_NEW_FOG;
+- /* [dBorca] Hack alert:
+- * the above _NEW_PROJECTION is not included in the test below,
+- * so we may end up with fxMesa->new_state still dirty by the end
+- * of the routine. The fact is, we don't have NearFar callback
+- * anymore. We could use fxDDDepthRange instead, but it seems
+- * fog needs to be updated only by a fog-basis.
+- * Implementing fxDDDepthRange correctly is another story:
+- * that, together with a presumable fxDDViewport function would set
+- * fxMesa->SetupNewInputs |= VERT_BIT_CLIP;
+- * which might be useful in fxBuildVertices...
+- */
+ #endif
+
+- if (new_gl_state & (_FX_NEW_IS_IN_HARDWARE |
+- _FX_NEW_RENDERSTATE |
+- _FX_NEW_SETUP_FUNCTION |
+- _NEW_TEXTURE)) {
+-
+- if (new_gl_state & _FX_NEW_IS_IN_HARDWARE)
+- fxCheckIsInHardware(ctx);
+-
+- if (fxMesa->new_state)
+- fxSetupFXUnits(ctx);
+-
+- if (!fxMesa->fallback) {
+- if (new_gl_state & _FX_NEW_RENDERSTATE)
+- fxDDChooseRenderState(ctx);
++ if (new_gl_state & _FX_NEW_IS_IN_HARDWARE)
++ fxCheckIsInHardware(ctx);
++
++ if (fxMesa->new_state)
++ fxSetupFXUnits(ctx);
++
++ if (!fxMesa->fallback) {
++ if (new_gl_state & _FX_NEW_RENDERSTATE)
++ fxDDChooseRenderState(ctx);
++
++ if (new_gl_state & _FX_NEW_SETUP_FUNCTION)
++ fxChooseVertexState(ctx);
++ }
++
++ if (new_gl_state & _NEW_TEXTURE) {
++ struct gl_texture_unit *t0 = &ctx->Texture.Unit[fxMesa->tmu_source[0]];
++ struct gl_texture_unit *t1 = &ctx->Texture.Unit[fxMesa->tmu_source[1]];
+
+- if (new_gl_state & _FX_NEW_SETUP_FUNCTION)
+- fxChooseVertexState(ctx);
++ if (t0->_Current && FX_TEXTURE_DATA(t0)) {
++ fxMesa->s0scale = FX_TEXTURE_DATA(t0)->sScale;
++ fxMesa->t0scale = FX_TEXTURE_DATA(t0)->tScale;
++ fxMesa->inv_s0scale = 1.0 / fxMesa->s0scale;
++ fxMesa->inv_t0scale = 1.0 / fxMesa->t0scale;
+ }
+
+- if (new_gl_state & _NEW_TEXTURE) {
+- struct gl_texture_unit *t0 = &ctx->Texture.Unit[fxMesa->tmu_source[0]];
+- struct gl_texture_unit *t1 = &ctx->Texture.Unit[fxMesa->tmu_source[1]];
+-
+- if (t0->_Current && FX_TEXTURE_DATA(t0)) {
+- fxMesa->s0scale = FX_TEXTURE_DATA(t0)->sScale;
+- fxMesa->t0scale = FX_TEXTURE_DATA(t0)->tScale;
+- fxMesa->inv_s0scale = 1.0 / fxMesa->s0scale;
+- fxMesa->inv_t0scale = 1.0 / fxMesa->t0scale;
+- }
+-
+- if (t1->_Current && FX_TEXTURE_DATA(t1)) {
+- fxMesa->s1scale = FX_TEXTURE_DATA(t1)->sScale;
+- fxMesa->t1scale = FX_TEXTURE_DATA(t1)->tScale;
+- fxMesa->inv_s1scale = 1.0 / fxMesa->s1scale;
+- fxMesa->inv_t1scale = 1.0 / fxMesa->t1scale;
+- }
++ if (t1->_Current && FX_TEXTURE_DATA(t1)) {
++ fxMesa->s1scale = FX_TEXTURE_DATA(t1)->sScale;
++ fxMesa->t1scale = FX_TEXTURE_DATA(t1)->tScale;
++ fxMesa->inv_s1scale = 1.0 / fxMesa->s1scale;
++ fxMesa->inv_t1scale = 1.0 / fxMesa->t1scale;
+ }
+ }
+-
++
+ fxMesa->new_gl_state = 0;
+
+ _tnl_run_pipeline( ctx );
+@@ -1483,7 +1560,7 @@
+
+ /* [dBorca] Hack alert:
+ * doesn't work with blending.
+- * need to take care of stencil.
++ * XXX todo - need to take care of stencil.
+ */
+ GLboolean fxMultipass_ColorSum (GLcontext *ctx, GLuint pass)
+ {
+@@ -1518,7 +1595,11 @@
+ fxDDDepthMask( ctx, GL_FALSE );
+ }
+ /* switch to secondary colors */
++#if FX_PACKEDCOLOR
+ grVertexLayout(GR_PARAM_PARGB, GR_VERTEX_PSPEC_OFFSET << 2, GR_PARAM_ENABLE);
++#else /* !FX_PACKEDCOLOR */
++ grVertexLayout(GR_PARAM_RGB, GR_VERTEX_SPEC_OFFSET << 2, GR_PARAM_ENABLE);
++#endif /* !FX_PACKEDCOLOR */
+ /* don't advertise new state */
+ fxMesa->new_state = 0;
+ break;
+@@ -1529,7 +1610,11 @@
+ ctx->Texture.Unit[0]._ReallyEnabled = t0;
+ ctx->Texture.Unit[1]._ReallyEnabled = t1;
+ /* revert to primary colors */
++#if FX_PACKEDCOLOR
+ grVertexLayout(GR_PARAM_PARGB, GR_VERTEX_PARGB_OFFSET << 2, GR_PARAM_ENABLE);
++#else /* !FX_PACKEDCOLOR */
++ grVertexLayout(GR_PARAM_RGB, GR_VERTEX_RGB_OFFSET << 2, GR_PARAM_ENABLE);
++#endif /* !FX_PACKEDCOLOR */
+ break;
+ default:
+ assert(0); /* NOTREACHED */
+Index: xc/extras/Mesa/src/mesa/drivers/glide/fxvb.c
+diff -u xc/extras/Mesa/src/mesa/drivers/glide/fxvb.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/glide/fxvb.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/glide/fxvb.c:1.1.1.2 Thu Jul 22 06:52:24 2004
++++ xc/extras/Mesa/src/mesa/drivers/glide/fxvb.c Wed Dec 15 01:51:01 2004
+@@ -55,7 +55,14 @@
+ GrVertex *dst = fxMesa->verts + edst;
+ GrVertex *src = fxMesa->verts + esrc;
+
++#if FX_PACKEDCOLOR
+ *(GLuint *)&dst->pargb = *(GLuint *)&src->pargb;
++#else /* !FX_PACKEDCOLOR */
++ *(GLuint *)&dst->r = *(GLuint *)&src->r;
++ *(GLuint *)&dst->g = *(GLuint *)&src->g;
++ *(GLuint *)&dst->b = *(GLuint *)&src->b;
++ *(GLuint *)&dst->a = *(GLuint *)&src->a;
++#endif /* !FX_PACKEDCOLOR */
+ }
+
+ static void copy_pv2( GLcontext *ctx, GLuint edst, GLuint esrc )
+@@ -64,8 +71,18 @@
+ GrVertex *dst = fxMesa->verts + edst;
+ GrVertex *src = fxMesa->verts + esrc;
+
++#if FX_PACKEDCOLOR
+ *(GLuint *)&dst->pargb = *(GLuint *)&src->pargb;
+ *(GLuint *)&dst->pspec = *(GLuint *)&src->pspec;
++#else /* !FX_PACKEDCOLOR */
++ *(GLuint *)&dst->r = *(GLuint *)&src->r;
++ *(GLuint *)&dst->g = *(GLuint *)&src->g;
++ *(GLuint *)&dst->b = *(GLuint *)&src->b;
++ *(GLuint *)&dst->a = *(GLuint *)&src->a;
++ *(GLuint *)&dst->r1 = *(GLuint *)&src->r1;
++ *(GLuint *)&dst->g1 = *(GLuint *)&src->g1;
++ *(GLuint *)&dst->b1 = *(GLuint *)&src->b1;
++#endif /* !FX_PACKEDCOLOR */
+ }
+
+ static struct {
+@@ -695,10 +712,6 @@
+ } else {
+ GLuint ind = 0;
+
+- /* [dBorca] masked by VERT_BIT_POS ?!?
+- if (newinputs & VERT_BIT_POINT_SIZE)
+- ind |= SETUP_PSIZ;*/
+-
+ if (newinputs & VERT_BIT_COLOR0)
+ ind |= SETUP_RGBA;
+
+Index: xc/extras/Mesa/src/mesa/drivers/glide/fxvbtmp.h
+diff -u xc/extras/Mesa/src/mesa/drivers/glide/fxvbtmp.h:1.1.1.3 xc/extras/Mesa/src/mesa/drivers/glide/fxvbtmp.h:1.1.1.3.2.1
+--- xc/extras/Mesa/src/mesa/drivers/glide/fxvbtmp.h:1.1.1.3 Thu Aug 12 23:06:37 2004
++++ xc/extras/Mesa/src/mesa/drivers/glide/fxvbtmp.h Wed Dec 15 01:51:01 2004
+@@ -145,6 +145,7 @@
+ proj = (GLfloat (*)[4])((GLubyte *)proj + proj_stride);
+ }
+ if (IND & SETUP_RGBA) {
++#if FX_PACKEDCOLOR
+ UNCLAMPED_FLOAT_TO_UBYTE(v->pargb[2], col[0][0]);
+ UNCLAMPED_FLOAT_TO_UBYTE(v->pargb[1], col[0][1]);
+ UNCLAMPED_FLOAT_TO_UBYTE(v->pargb[0], col[0][2]);
+@@ -153,12 +154,28 @@
+ } else {
+ v->pargb[3] = 255;
+ }
++#else /* !FX_PACKEDCOLOR */
++ CNORM(v->r, col[0][0]);
++ CNORM(v->g, col[0][1]);
++ CNORM(v->b, col[0][2]);
++ if (col_size == 4) {
++ CNORM(v->a, col[0][3]);
++ } else {
++ v->a = 255.0f;
++ }
++#endif /* !FX_PACKEDCOLOR */
+ STRIDE_4F(col, col_stride);
+ }
+ if (IND & SETUP_SPEC) {
++#if FX_PACKEDCOLOR
+ UNCLAMPED_FLOAT_TO_UBYTE(v->pspec[2], spec[0][0]);
+ UNCLAMPED_FLOAT_TO_UBYTE(v->pspec[1], spec[0][1]);
+ UNCLAMPED_FLOAT_TO_UBYTE(v->pspec[0], spec[0][2]);
++#else /* !FX_PACKEDCOLOR */
++ CNORM(v->r1, spec[0][0]);
++ CNORM(v->g1, spec[0][1]);
++ CNORM(v->b1, spec[0][2]);
++#endif /* !FX_PACKEDCOLOR */
+ STRIDE_4F(spec, spec_stride);
+ }
+ if (IND & SETUP_FOGC) {
+@@ -253,15 +270,28 @@
+ }
+
+
++#if FX_PACKEDCOLOR
+ INTERP_UB( t, dst->pargb[0], out->pargb[0], in->pargb[0] );
+ INTERP_UB( t, dst->pargb[1], out->pargb[1], in->pargb[1] );
+ INTERP_UB( t, dst->pargb[2], out->pargb[2], in->pargb[2] );
+ INTERP_UB( t, dst->pargb[3], out->pargb[3], in->pargb[3] );
++#else /* !FX_PACKEDCOLOR */
++ INTERP_F( t, dst->r, out->r, in->r );
++ INTERP_F( t, dst->g, out->g, in->g );
++ INTERP_F( t, dst->b, out->b, in->b );
++ INTERP_F( t, dst->a, out->a, in->a );
++#endif /* !FX_PACKEDCOLOR */
+
+ if (IND & SETUP_SPEC) {
++#if FX_PACKEDCOLOR
+ INTERP_UB( t, dst->pspec[0], out->pspec[0], in->pspec[0] );
+ INTERP_UB( t, dst->pspec[1], out->pspec[1], in->pspec[1] );
+ INTERP_UB( t, dst->pspec[2], out->pspec[2], in->pspec[2] );
++#else /* !FX_PACKEDCOLOR */
++ INTERP_F( t, dst->r1, out->r1, in->r1 );
++ INTERP_F( t, dst->g1, out->g1, in->g1 );
++ INTERP_F( t, dst->b1, out->b1, in->b1 );
++#endif /* !FX_PACKEDCOLOR */
+ }
+
+ if (IND & SETUP_FOGC) {
+Index: xc/extras/Mesa/src/mesa/drivers/glide/fxwgl.c
+diff -u xc/extras/Mesa/src/mesa/drivers/glide/fxwgl.c:1.1.1.3 xc/extras/Mesa/src/mesa/drivers/glide/fxwgl.c:1.1.1.3.2.1
+--- xc/extras/Mesa/src/mesa/drivers/glide/fxwgl.c:1.1.1.3 Sat Aug 28 04:27:44 2004
++++ xc/extras/Mesa/src/mesa/drivers/glide/fxwgl.c Wed Dec 15 01:51:01 2004
+@@ -348,7 +348,7 @@
+ SetForegroundWindow(hWnd);
+ Sleep(100); /* a hack for win95 */
+ if (env_check("MESA_GLX_FX", 'w') && !(GetWindowLong (hWnd, GWL_STYLE) & WS_POPUP)) {
+- /* [dBorca] Hack alert: unfinished business! */
++ /* XXX todo - windowed modes */
+ error = !(ctx = fxMesaCreateContext((GLuint) hWnd, GR_RESOLUTION_NONE, GR_REFRESH_NONE, pix[curPFD - 1].mesaAttr));
+ } else {
+ GetClientRect(hWnd, &cliRect);
+@@ -629,7 +629,7 @@
+ int i;
+ PROC p = (PROC) _glapi_get_proc_address((const char *) lpszProc);
+
+- /* [dBorca] we can't do BlendColor */
++ /* we can't BlendColor. work around buggy applications */
+ if (p && strcmp(lpszProc, "glBlendColor") && strcmp(lpszProc, "glBlendColorEXT"))
+ return p;
+
+@@ -860,10 +860,7 @@
+ if (!(pfd.dwFlags & PFD_DOUBLEBUFFER_DONTCARE)
+ && ((pfd.dwFlags & PFD_DOUBLEBUFFER) !=
+ (pix[i].pfd.dwFlags & PFD_DOUBLEBUFFER))) continue;
+-#if 0 /* [dBorca] Hack alert:\r
+- * Doom3 fails here!\r
+- * Can we get away by implementing WGL_ARB_pixel_format?\r
+- */\r
++#if 1 /* Doom3 fails here! */
+ if (!(pfd.dwFlags & PFD_STEREO_DONTCARE)
+ && ((pfd.dwFlags & PFD_STEREO) !=
+ (pix[i].pfd.dwFlags & PFD_STEREO))) continue;
+@@ -875,7 +872,7 @@
+ if (pfd.cAlphaBits > 0 && pix[i].pfd.cAlphaBits == 0)
+ continue; /* need alpha buffer */
+
+-#if 0 /* [dBorca] regression bug? */
++#if 0 /* regression bug? */
+ if (pfd.cStencilBits > 0 && pix[i].pfd.cStencilBits == 0)
+ continue; /* need stencil buffer */
+ #endif
+Index: xc/extras/Mesa/src/mesa/drivers/osmesa/osmesa.c
+diff -u xc/extras/Mesa/src/mesa/drivers/osmesa/osmesa.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/osmesa/osmesa.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/osmesa/osmesa.c:1.1.1.1 Wed Jun 16 09:18:50 2004
++++ xc/extras/Mesa/src/mesa/drivers/osmesa/osmesa.c Wed Dec 15 01:51:01 2004
+@@ -1273,23 +1273,25 @@
+ }
+
+
++typedef void (*OSMESAproc)(void);
+
+-struct name_address {
++struct name_function
++{
+ const char *Name;
+- GLvoid *Address;
++ OSMESAproc Function;
+ };
+
+-static struct name_address functions[] = {
+- { "OSMesaCreateContext", (void *) OSMesaCreateContext },
+- { "OSMesaCreateContextExt", (void *) OSMesaCreateContextExt },
+- { "OSMesaDestroyContext", (void *) OSMesaDestroyContext },
+- { "OSMesaMakeCurrent", (void *) OSMesaMakeCurrent },
+- { "OSMesaGetCurrentContext", (void *) OSMesaGetCurrentContext },
+- { "OSMesaPixelsStore", (void *) OSMesaPixelStore },
+- { "OSMesaGetIntegerv", (void *) OSMesaGetIntegerv },
+- { "OSMesaGetDepthBuffer", (void *) OSMesaGetDepthBuffer },
+- { "OSMesaGetColorBuffer", (void *) OSMesaGetColorBuffer },
+- { "OSMesaGetProcAddress", (void *) OSMesaGetProcAddress },
++static struct name_function functions[] = {
++ { "OSMesaCreateContext", (OSMESAproc) OSMesaCreateContext },
++ { "OSMesaCreateContextExt", (OSMESAproc) OSMesaCreateContextExt },
++ { "OSMesaDestroyContext", (OSMESAproc) OSMesaDestroyContext },
++ { "OSMesaMakeCurrent", (OSMESAproc) OSMesaMakeCurrent },
++ { "OSMesaGetCurrentContext", (OSMESAproc) OSMesaGetCurrentContext },
++ { "OSMesaPixelsStore", (OSMESAproc) OSMesaPixelStore },
++ { "OSMesaGetIntegerv", (OSMESAproc) OSMesaGetIntegerv },
++ { "OSMesaGetDepthBuffer", (OSMESAproc) OSMesaGetDepthBuffer },
++ { "OSMesaGetColorBuffer", (OSMESAproc) OSMesaGetColorBuffer },
++ { "OSMesaGetProcAddress", (OSMESAproc) OSMesaGetProcAddress },
+ { NULL, NULL }
+ };
+
+@@ -1299,7 +1301,7 @@
+ int i;
+ for (i = 0; functions[i].Name; i++) {
+ if (_mesa_strcmp(functions[i].Name, funcName) == 0)
+- return (void *) functions[i].Address;
++ return (void *) functions[i].Function;
+ }
+ return (void *) _glapi_get_proc_address(funcName);
+ }
+Index: xc/extras/Mesa/src/mesa/drivers/windows/gdi/colors.h
+diff -u xc/extras/Mesa/src/mesa/drivers/windows/gdi/colors.h:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/windows/gdi/colors.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/windows/gdi/colors.h:1.1.1.1 Wed Jun 16 09:18:50 2004
++++ xc/extras/Mesa/src/mesa/drivers/windows/gdi/colors.h Wed Dec 15 01:51:01 2004
+@@ -24,6 +24,9 @@
+
+ /*
+ * $Log$
++ * Revision 1.2 2004/08/25 15:59:48 brianp
++ * Silence gcc 3.4 warnings on ReactOS. Mostly unused var warnings. (patch 1015696)
++ *
+ * Revision 1.1 2003/07/24 03:47:46 kschultz
+ * Source code for GDI driver.
+ *
+@@ -49,6 +52,9 @@
+
+ /*
+ * $Log$
++ * Revision 1.2 2004/08/25 15:59:48 brianp
++ * Silence gcc 3.4 warnings on ReactOS. Mostly unused var warnings. (patch 1015696)
++ *
+ * Revision 1.1 2003/07/24 03:47:46 kschultz
+ * Source code for GDI driver.
+ *
+@@ -74,6 +80,9 @@
+
+ /*
+ * $Log$
++ * Revision 1.2 2004/08/25 15:59:48 brianp
++ * Silence gcc 3.4 warnings on ReactOS. Mostly unused var warnings. (patch 1015696)
++ *
+ * Revision 1.1 2003/07/24 03:47:46 kschultz
+ * Source code for GDI driver.
+ *
+@@ -141,7 +150,7 @@
+ 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,
+ 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F};
+
+-#define BGR8(r,g,b) (unsigned)(((BYTE)(b & 0xc0 | (g & 0xe0)>>2 | (r & 0xe0)>>5)))
++#define BGR8(r,g,b) (unsigned)(((BYTE)((b & 0xc0) | ((g & 0xe0)>>2) | ((r & 0xe0)>>5))))
+ #ifdef DDRAW
+ #define BGR16(r,g,b) ((WORD)(((BYTE)(ColorMap16[b]) | ((BYTE)(g&0xfc) << 3)) | (((WORD)(BYTE)(ColorMap16[r])) << 11)))
+ #else
+Index: xc/extras/Mesa/src/mesa/drivers/windows/gdi/wgl.c
+diff -u xc/extras/Mesa/src/mesa/drivers/windows/gdi/wgl.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/windows/gdi/wgl.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/windows/gdi/wgl.c:1.1.1.1 Wed Jun 16 09:18:51 2004
++++ xc/extras/Mesa/src/mesa/drivers/windows/gdi/wgl.c Wed Dec 15 01:51:01 2004
+@@ -1,4 +1,4 @@
+-/* $Id$ */
++/* $Id$ */
+
+ /*
+ * This library is free software; you can redistribute it and/or
+@@ -102,11 +102,12 @@
+ static MesaWglCtx wgl_ctx[MESAWGL_CTX_MAX_COUNT];
+
+ static unsigned ctx_count = 0;
+-static unsigned ctx_current = -1;
++static int ctx_current = -1;
+ static unsigned curPFD = 0;
+
+ WGLAPI BOOL GLAPIENTRY wglCopyContext(HGLRC hglrcSrc,HGLRC hglrcDst,UINT mask)
+ {
++ (void) hglrcSrc; (void) hglrcDst; (void) mask;
+ return(FALSE);
+ }
+
+@@ -166,6 +167,7 @@
+
+ WGLAPI HGLRC GLAPIENTRY wglCreateLayerContext(HDC hdc,int iLayerPlane)
+ {
++ (void) hdc; (void) iLayerPlane;
+ SetLastError(0);
+ return(NULL);
+ }
+@@ -212,6 +214,7 @@
+
+ WGLAPI BOOL GLAPIENTRY wglShareLists(HGLRC hglrc1,HGLRC hglrc2)
+ {
++ (void) hglrc1; (void) hglrc2;
+ return(TRUE);
+ }
+
+@@ -219,7 +222,7 @@
+ static FIXED FixedFromDouble(double d)
+ {
+ long l = (long) (d * 65536L);
+- return *(FIXED *)&l;
++ return *(FIXED *) (void *) &l;
+ }
+
+
+@@ -258,9 +261,9 @@
+ SetTextColor(bitDevice, tempColor);
+
+ // Place chars based on base line
+- VERIFY(SetTextAlign(bitDevice, TA_BASELINE) >= 0 ? 1 : 0);
++ VERIFY(SetTextAlign(bitDevice, TA_BASELINE) != GDI_ERROR ? 1 : 0);
+
+- for(i = 0; i < numChars; i++) {
++ for(i = 0; i < (int)numChars; i++) {
+ SIZE size;
+ char curChar;
+ int charWidth,charHeight,bmapWidth,bmapHeight,numBytes,res;
+@@ -285,7 +288,7 @@
+
+ // Assign the output bitmap to the device
+ origBmap = SelectObject(bitDevice, bitObject);
+- VERIFY(origBmap);
++ (void) VERIFY(origBmap);
+
+ VERIFY( PatBlt( bitDevice, 0, 0, bmapWidth, bmapHeight,BLACKNESS ) );
+
+@@ -344,11 +347,7 @@
+ MAT2 mat;
+ int success = TRUE;
+
+- if (first<0)
+- return FALSE;
+- if (count<0)
+- return FALSE;
+- if (listBase<0)
++ if (count == 0)
+ return FALSE;
+
+ font_list = listBase;
+@@ -373,7 +372,7 @@
+ /*
+ ** Otherwise process all desired characters.
+ */
+- for (i = 0; i < count; i++)
++ for (i = 0; i < (int)count; i++)
+ {
+ DWORD err;
+
+@@ -432,6 +431,7 @@
+
+ WGLAPI BOOL GLAPIENTRY wglUseFontBitmapsW(HDC hdc,DWORD first,DWORD count,DWORD listBase)
+ {
++ (void) hdc; (void) first; (void) count; (void) listBase;
+ return FALSE;
+ }
+
+@@ -440,6 +440,9 @@
+ FLOAT extrusion,int format,
+ LPGLYPHMETRICSFLOAT lpgmf)
+ {
++ (void) hdc; (void) first; (void) count;
++ (void) listBase; (void) deviation; (void) extrusion; (void) format;
++ (void) lpgmf;
+ SetLastError(0);
+ return(FALSE);
+ }
+@@ -449,6 +452,9 @@
+ FLOAT extrusion,int format,
+ LPGLYPHMETRICSFLOAT lpgmf)
+ {
++ (void) hdc; (void) first; (void) count;
++ (void) listBase; (void) deviation; (void) extrusion; (void) format;
++ (void) lpgmf;
+ SetLastError(0);
+ return(FALSE);
+ }
+@@ -457,6 +463,7 @@
+ int iLayerPlane,UINT nBytes,
+ LPLAYERPLANEDESCRIPTOR plpd)
+ {
++ (void) hdc; (void) iPixelFormat; (void) iLayerPlane; (void) nBytes; (void) plpd;
+ SetLastError(0);
+ return(FALSE);
+ }
+@@ -465,6 +472,7 @@
+ int iStart,int cEntries,
+ CONST COLORREF *pcr)
+ {
++ (void) hdc; (void) iLayerPlane; (void) iStart; (void) cEntries; (void) pcr;
+ SetLastError(0);
+ return(0);
+ }
+@@ -473,18 +481,21 @@
+ int iStart,int cEntries,
+ COLORREF *pcr)
+ {
++ (void) hdc; (void) iLayerPlane; (void) iStart; (void) cEntries; (void) pcr;
+ SetLastError(0);
+ return(0);
+ }
+
+ WGLAPI BOOL GLAPIENTRY wglRealizeLayerPalette(HDC hdc,int iLayerPlane,BOOL bRealize)
+ {
++ (void) hdc; (void) iLayerPlane; (void) bRealize;
+ SetLastError(0);
+ return(FALSE);
+ }
+
+ WGLAPI BOOL GLAPIENTRY wglSwapLayerBuffers(HDC hdc,UINT fuPlanes)
+ {
++ (void) fuPlanes;
+ if( !hdc )
+ {
+ WMesaSwapBuffers();
+@@ -498,6 +509,7 @@
+ CONST PIXELFORMATDESCRIPTOR *ppfd)
+ {
+ int i,best = -1,bestdelta = 0x7FFFFFFF,delta,qt_valid_pix;
++ (void) hdc;
+
+ qt_valid_pix = qt_pix;
+ if(ppfd->nSize != sizeof(PIXELFORMATDESCRIPTOR) || ppfd->nVersion != 1)
+@@ -556,6 +568,7 @@
+ LPPIXELFORMATDESCRIPTOR ppfd)
+ {
+ int qt_valid_pix;
++ (void) hdc;
+
+ qt_valid_pix = qt_pix;
+ if(ppfd == NULL)
+@@ -584,6 +597,7 @@
+
+ WGLAPI int GLAPIENTRY wglGetPixelFormat(HDC hdc)
+ {
++ (void) hdc;
+ if(curPFD == 0)
+ {
+ SetLastError(0);
+@@ -596,6 +610,7 @@
+ PIXELFORMATDESCRIPTOR *ppfd)
+ {
+ int qt_valid_pix;
++ (void) hdc;
+
+ qt_valid_pix = qt_pix;
+ if(iPixelFormat < 1 || iPixelFormat > qt_valid_pix || ppfd->nSize != sizeof(PIXELFORMATDESCRIPTOR))
+@@ -609,6 +624,7 @@
+
+ WGLAPI BOOL GLAPIENTRY wglSwapBuffers(HDC hdc)
+ {
++ (void) hdc;
+ if (ctx_current < 0)
+ return FALSE;
+
+Index: xc/extras/Mesa/src/mesa/drivers/windows/gdi/wmesa.c
+diff -u xc/extras/Mesa/src/mesa/drivers/windows/gdi/wmesa.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/windows/gdi/wmesa.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/drivers/windows/gdi/wmesa.c:1.1.1.2 Thu Jul 22 06:52:26 2004
++++ xc/extras/Mesa/src/mesa/drivers/windows/gdi/wmesa.c Wed Dec 15 01:51:01 2004
+@@ -45,6 +45,7 @@
+ #include "array_cache/acache.h"
+ #include "swrast/swrast.h"
+ #include "swrast_setup/swrast_setup.h"
++#include "swrast/s_alphabuf.h"
+ #include "swrast/s_context.h"
+ #include "swrast/s_depth.h"
+ #include "swrast/s_lines.h"
+@@ -165,7 +166,6 @@
+ #define USE_GDI_TO_CLEAR 1
+ #endif
+
+-static void FlushToFile(PWMC pwc, PSTR szFile);
+ BOOL wmCreateBackingStore(PWMC pwc, long lxSize, long lySize);
+ BOOL wmDeleteBackingStore(PWMC pwc);
+ void wmCreatePalette( PWMC pwdc );
+@@ -347,15 +347,20 @@
+
+ BYTE DITHER_RGB_2_8BIT( int r, int g, int b, int x, int y);
+
++#if 0 /* unused */
++
+ /* Finish all pending operations and synchronize. */
+ static void finish(GLcontext* ctx)
+ {
+ /* No op */
++ (void) ctx;
+ }
+
++#endif /* unused */
+
+ static void flush(GLcontext* ctx)
+ {
++ (void) ctx;
+ if((Current->rgb_flag &&!(Current->db_flag))
+ ||(!Current->rgb_flag))
+ {
+@@ -371,6 +376,7 @@
+ */
+ static void clear_index(GLcontext* ctx, GLuint index)
+ {
++ (void) ctx;
+ Current->clearpixel = index;
+ }
+
+@@ -382,6 +388,7 @@
+ static void clear_color( GLcontext* ctx, const GLfloat color[4] )
+ {
+ GLubyte col[4];
++ (void) ctx;
+ CLAMPED_FLOAT_TO_UBYTE(col[0], color[0]);
+ CLAMPED_FLOAT_TO_UBYTE(col[1], color[1]);
+ CLAMPED_FLOAT_TO_UBYTE(col[2], color[2]);
+@@ -400,7 +407,7 @@
+ * Otherwise, we let swrast do it.
+ */
+
+-static clear(GLcontext* ctx, GLbitfield mask,
++static void clear(GLcontext* ctx, GLbitfield mask,
+ GLboolean all, GLint x, GLint y, GLint width, GLint height)
+ {
+ const GLuint *colorMask = (GLuint *) &ctx->Color.ColorMask;
+@@ -467,7 +474,7 @@
+ WORD wColor;
+ BYTE bColor;
+ LPDWORD lpdw = (LPDWORD)Current->pbPixels;
+- LPWORD lpw = (LPWORD)Current->pbPixels;
++ /*LPWORD lpw = (LPWORD)Current->pbPixels; */
+ LPBYTE lpb = Current->pbPixels;
+ int lines;
+ /* Double-buffering - clear back buffer */
+@@ -513,7 +520,9 @@
+ dwColor = BGR32(GetRValue(Current->clearpixel),
+ GetGValue(Current->clearpixel),
+ GetBValue(Current->clearpixel));
+- }
++ }
++ else
++ dwColor = 0;
+
+ if (nBypp != 3)
+ {
+@@ -567,6 +576,7 @@
+
+ static void enable( GLcontext* ctx, GLenum pname, GLboolean enable )
+ {
++ (void) ctx;
+ if (!Current)
+ return;
+
+@@ -592,6 +602,7 @@
+ static void set_buffer(GLcontext *ctx, GLframebuffer *colorBuffer,
+ GLuint bufferBit )
+ {
++ (void) ctx; (void) colorBuffer; (void) bufferBit;
+ /* XXX todo - examine bufferBit and set read/write pointers */
+ return;
+ }
+@@ -601,9 +612,10 @@
+ /* Return characteristics of the output buffer. */
+ static void buffer_size( GLframebuffer *buffer, GLuint *width, GLuint *height )
+ {
+- GET_CURRENT_CONTEXT(ctx);
++ /*GET_CURRENT_CONTEXT(ctx);*/
+ int New_Size;
+ RECT CR;
++ (void) buffer;
+
+ GetClientRect(Current->Window,&CR);
+
+@@ -649,25 +661,36 @@
+
+ /* Accelerated routines are not implemented in 4.0. See OSMesa for ideas. */
+
++#if 0 /* unused */
++
+ static void fast_rgb_points( GLcontext* ctx, GLuint first, GLuint last )
+ {
++ (void) ctx; (void) first; (void) last;
+ }
+
++#endif /* unused */
++
+ /* Return pointer to accelerated points function */
+ extern tnl_points_func choose_points_function( GLcontext* ctx )
+ {
++ (void) ctx;
+ return NULL;
+ }
+
++#if 0 /* unused */
++
+ static void fast_flat_rgb_line( GLcontext* ctx, GLuint v0,
+ GLuint v1, GLuint pv )
+ {
++ (void) ctx; (void) v0; (void) v1; (void) pv;
+ }
+
+ static tnl_line_func choose_line_function( GLcontext* ctx )
+ {
++ (void) ctx;
+ }
+
++#endif /* unused */
+
+ /**********************************************************************/
+ /***** Span-based pixel drawing *****/
+@@ -682,6 +705,7 @@
+ {
+ GLuint i;
+ PBYTE Mem=Current->ScreenMem+FLIP(y)*Current->ScanWidth+x;
++ (void) ctx;
+ assert(Current->rgb_flag==GL_FALSE);
+ for (i=0; i<n; i++)
+ if (mask[i])
+@@ -697,6 +721,7 @@
+ {
+ GLuint i;
+ PBYTE Mem=Current->ScreenMem+FLIP(y)*Current->ScanWidth+x;
++ (void) ctx;
+ assert(Current->rgb_flag==GL_FALSE);
+ for (i=0; i<n; i++)
+ if (mask[i])
+@@ -715,6 +740,7 @@
+ {
+ GLuint i;
+ BYTE *Mem=Current->ScreenMem+FLIP(y)*Current->ScanWidth+x;
++ (void) ctx;
+ assert(Current->rgb_flag==GL_FALSE);
+ for (i=0; i<n; i++)
+ if (mask[i])
+@@ -731,11 +757,12 @@
+ const GLubyte rgba[][4], const GLubyte mask[] )
+ {
+ PWMC pwc = Current;
++ (void) ctx;
+
+ if (pwc->rgb_flag==GL_TRUE)
+ {
+ GLuint i;
+- HDC DC=DD_GETDC;
++ /*HDC DC=DD_GETDC;*/
+ y=FLIP(y);
+ if (mask) {
+ for (i=0; i<n; i++)
+@@ -779,11 +806,12 @@
+ const GLubyte rgb[][3], const GLubyte mask[] )
+ {
+ PWMC pwc = Current;
+-
++ (void) ctx;
++
+ if (pwc->rgb_flag==GL_TRUE)
+ {
+ GLuint i;
+- HDC DC=DD_GETDC;
++ /*HDC DC=DD_GETDC;*/
+ y=FLIP(y);
+ if (mask) {
+ for (i=0; i<n; i++)
+@@ -831,6 +859,7 @@
+ {
+ GLuint i;
+ PWMC pwc = Current;
++ (void) ctx;
+ assert(Current->rgb_flag==GL_TRUE);
+ y=FLIP(y);
+ if(Current->rgb_flag==GL_TRUE)
+@@ -863,6 +892,7 @@
+ const GLuint index[], const GLubyte mask[] )
+ {
+ GLuint i;
++ (void) ctx;
+ assert(Current->rgb_flag==GL_FALSE);
+ for (i=0; i<n; i++) {
+ if (mask[i]) {
+@@ -884,6 +914,7 @@
+ GLuint colorIndex, const GLubyte mask[] )
+ {
+ GLuint i;
++ (void) ctx;
+ assert(Current->rgb_flag==GL_FALSE);
+ for (i=0; i<n; i++) {
+ if (mask[i]) {
+@@ -902,7 +933,8 @@
+ {
+ GLuint i;
+ PWMC pwc = Current;
+- HDC DC=DD_GETDC;
++ /*HDC DC=DD_GETDC;*/
++ (void) ctx;
+ assert(Current->rgb_flag==GL_TRUE);
+ for (i=0; i<n; i++)
+ if (mask[i])
+@@ -925,7 +957,8 @@
+ {
+ GLuint i;
+ PWMC pwc = Current;
+- HDC DC=DD_GETDC;
++ /*HDC DC=DD_GETDC;*/
++ (void) ctx;
+ assert(Current->rgb_flag==GL_TRUE);
+ for (i=0; i<n; i++)
+ if (mask[i])
+@@ -947,6 +980,7 @@
+ {
+ GLuint i;
+ BYTE *Mem=Current->ScreenMem+FLIP(y)*Current->ScanWidth+x;
++ (void) ctx;
+ assert(Current->rgb_flag==GL_FALSE);
+ for (i=0; i<n; i++)
+ index[i]=Mem[i];
+@@ -961,6 +995,7 @@
+ GLuint indx[], const GLubyte mask[] )
+ {
+ GLuint i;
++ (void) ctx;
+ assert(Current->rgb_flag==GL_FALSE);
+ for (i=0; i<n; i++) {
+ if (mask[i]) {
+@@ -979,6 +1014,7 @@
+ UINT i;
+ COLORREF Color;
+ HDC DC=DD_GETDC;
++ (void) ctx;
+ assert(Current->rgb_flag==GL_TRUE);
+ y = Current->height - y - 1;
+ for (i=0; i<n; i++) {
+@@ -1000,6 +1036,7 @@
+ GLuint i;
+ COLORREF Color;
+ HDC DC=DD_GETDC;
++ (void) ctx;
+ assert(Current->rgb_flag==GL_TRUE);
+ for (i=0; i<n; i++) {
+ if (mask[i]) {
+@@ -1022,6 +1059,7 @@
+
+ static const GLubyte *get_string(GLcontext *ctx, GLenum name)
+ {
++ (void) ctx;
+ if (name == GL_RENDERER) {
+ return (GLubyte *) "Mesa Windows";
+ }
+@@ -1074,7 +1112,7 @@
+
+ static void wmesa_update_state( GLcontext *ctx, GLuint new_state )
+ {
+- struct swrast_device_driver *swdd = _swrast_GetDeviceDriverReference( ctx );
++ /*struct swrast_device_driver *swdd = _swrast_GetDeviceDriverReference( ctx );*/
+ TNLcontext *tnl = TNL_CONTEXT(ctx);
+
+ /*
+@@ -1166,7 +1204,7 @@
+ /***** WMesa API Functions *****/
+ /**********************************************************************/
+
+-
++#if 0 /* unused */
+
+ #define PAL_SIZE 256
+ static void GetPalette(HPALETTE Pal,RGBQUAD *aRGB)
+@@ -1178,11 +1216,9 @@
+ WORD Version;
+ WORD NumberOfEntries;
+ PALETTEENTRY aEntries[PAL_SIZE];
+- } Palette =
+- {
+- 0x300,
+- PAL_SIZE
+- };
++ } Palette;
++ Palette.Version = 0x300;
++ Palette.NumberOfEntries = PAL_SIZE;
+ hdc=GetDC(NULL);
+ if (Pal!=NULL)
+ GetPaletteEntries(Pal,0,PAL_SIZE,Palette.aEntries);
+@@ -1226,6 +1262,7 @@
+ }
+ }
+
++#endif /* unused */
+
+ WMesaContext WMesaCreateContext( HWND hWnd, HPALETTE* Pal,
+ GLboolean rgb_flag,
+@@ -1236,6 +1273,7 @@
+ WMesaContext c;
+ GLboolean true_color_flag;
+ struct dd_function_table functions;
++ (void) Pal;
+
+ c = (struct wmesa_context * ) calloc(1,sizeof(struct wmesa_context));
+ if (!c)
+@@ -1436,7 +1474,7 @@
+
+ void WMesaSwapBuffers( void )
+ {
+- HDC DC = Current->hDC;
++/* HDC DC = Current->hDC;*/
+ GET_CURRENT_CONTEXT(ctx);
+
+ /* If we're swapping the buffer associated with the current context
+@@ -1699,6 +1737,8 @@
+ DWORD dwScanWidth;
+ UINT nBypp = pwc->cColorBits / 8;
+ HDC hic;
++ (void) hDC;
++ (void) pbmi;
+
+ dwScanWidth = (((pwc->ScanWidth * nBypp)+ 3) & ~3);
+
+@@ -1742,14 +1782,14 @@
+ pwc->hbmDIB = CreateDIBSection(hic,
+ &(pwc->bmi),
+ (iUsage ? DIB_PAL_COLORS : DIB_RGB_COLORS),
+- &(pwc->pbPixels),
++ (void **)&(pwc->pbPixels),
+ pwc->dib.hFileMap,
+ 0);
+ #else
+ pwc->hbmDIB = CreateDIBSection(hic,
+ &(pwc->bmi),
+ (iUsage ? DIB_PAL_COLORS : DIB_RGB_COLORS),
+- &(pwc->pbPixels),
++ (void **)&(pwc->pbPixels),
+ 0,
+ 0);
+ #endif // USE_MAPPED_FILE
+@@ -1768,7 +1808,7 @@
+ BOOL wmFlush(PWMC pwc)
+ {
+ BOOL bRet = 0;
+- DWORD dwErr = 0;
++/* DWORD dwErr = 0;*/
+ #ifdef DDRAW
+ HRESULT ddrval;
+ #endif
+@@ -3182,8 +3222,11 @@
+ #endif
+ /************** END DEAD TRIANGLE CODE ***********************/
+
++#if 0 /* unused */
++
+ static tnl_triangle_func choose_triangle_function( GLcontext *ctx )
+ {
++ (void) ctx;
+ #if 0
+ WMesaContext wmesa = (WMesaContext) ctx->DriverCtx;
+ int depth = wmesa->cColorBits;
+@@ -3277,6 +3320,8 @@
+ #endif
+ }
+
++#endif /* unused */
++
+ /*
+ * Define a new viewport and reallocate auxillary buffers if the size of
+ * the window (color buffer) has changed.
+@@ -3284,6 +3329,7 @@
+ void WMesaViewport( GLcontext *ctx,
+ GLint x, GLint y, GLsizei width, GLsizei height )
+ {
++ (void) ctx; (void) x; (void) y; (void) width; (void) height;
+ assert(0); /* I don't think that this is being used. */
+ #if 0
+ /* Save viewport */
+Index: xc/extras/Mesa/src/mesa/drivers/windows/gdi/wmesadef.h
+diff -u xc/extras/Mesa/src/mesa/drivers/windows/gdi/wmesadef.h:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/windows/gdi/wmesadef.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/windows/gdi/wmesadef.h:1.1.1.1 Wed Jun 16 09:18:51 2004
++++ xc/extras/Mesa/src/mesa/drivers/windows/gdi/wmesadef.h Wed Dec 15 01:51:01 2004
+@@ -93,6 +93,7 @@
+ }WMDIBSECTION, *PWMDIBSECTION;
+
+ #ifdef COMPILE_SETPIXEL
++struct wmesa_context;
+ typedef void (*SETPIXELTYPE)(struct wmesa_context *pwc, int iScanLine, int iPixel, BYTE r, BYTE g, BYTE b);
+ #endif
+
+Index: xc/extras/Mesa/src/mesa/drivers/x11/fakeglx.c
+diff -u xc/extras/Mesa/src/mesa/drivers/x11/fakeglx.c:1.1.1.2 xc/extras/Mesa/src/mesa/drivers/x11/fakeglx.c:1.1.1.2.2.1
+--- xc/extras/Mesa/src/mesa/drivers/x11/fakeglx.c:1.1.1.2 Thu Aug 12 23:06:51 2004
++++ xc/extras/Mesa/src/mesa/drivers/x11/fakeglx.c Wed Dec 15 01:51:02 2004
+@@ -1,6 +1,6 @@
+ /*
+ * Mesa 3-D graphics library
+- * Version: 6.1
++ * Version: 6.2
+ *
+ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+@@ -80,10 +80,6 @@
+ "GLX_SGI_video_sync " \
+ "GLX_SGIX_fbconfig " \
+ "GLX_SGIX_pbuffer "
+-/*
+- "GLX_ARB_render_texture"
+-*/
+-
+
+ /*
+ * Our fake GLX context will contain a "real" GLX context and an XMesa context.
+@@ -144,7 +140,8 @@
+ /*
+ * Test if the given XVisualInfo is usable for Mesa rendering.
+ */
+-static GLboolean is_usable_visual( XVisualInfo *vinfo )
++static GLboolean
++is_usable_visual( XVisualInfo *vinfo )
+ {
+ switch (vinfo->CLASS) {
+ case StaticGray:
+@@ -181,7 +178,8 @@
+ * >0 = overlay planes
+ * <0 = underlay planes
+ */
+-static int level_of_visual( Display *dpy, XVisualInfo *vinfo )
++static int
++level_of_visual( Display *dpy, XVisualInfo *vinfo )
+ {
+ Atom overlayVisualsAtom;
+ OverlayInfo *overlay_info = NULL;
+@@ -332,7 +330,9 @@
+ /* add xmvis to the list */
+ VisualTable[NumVisuals] = xmvis;
+ NumVisuals++;
+- /* XXX minor hack */
++ /* XXX minor hack, because XMesaCreateVisual doesn't support an
++ * aux buffers parameter.
++ */
+ xmvis->mesa_visual.numAuxBuffers = numAuxBuffers;
+ }
+ return xmvis;
+@@ -467,7 +467,8 @@
+ * Input: glxvis - the glx_visual
+ * Return: a pixel value or -1 if no transparent pixel
+ */
+-static int transparent_pixel( XMesaVisual glxvis )
++static int
++transparent_pixel( XMesaVisual glxvis )
+ {
+ Display *dpy = glxvis->display;
+ XVisualInfo *vinfo = glxvis->visinfo;
+@@ -532,8 +533,8 @@
+ /*
+ * Try to get an X visual which matches the given arguments.
+ */
+-static XVisualInfo *get_visual( Display *dpy, int scr,
+- unsigned int depth, int xclass )
++static XVisualInfo *
++get_visual( Display *dpy, int scr, unsigned int depth, int xclass )
+ {
+ XVisualInfo temp, *vis;
+ long mask;
+@@ -586,7 +587,8 @@
+ * varname - the name of the environment variable
+ * Return: an XVisualInfo pointer to NULL if error.
+ */
+-static XVisualInfo *get_env_visual(Display *dpy, int scr, const char *varname)
++static XVisualInfo *
++get_env_visual(Display *dpy, int scr, const char *varname)
+ {
+ char value[100], type[100];
+ int depth, xclass = -1;
+@@ -631,9 +633,9 @@
+ * preferred_class - preferred GLX visual class or DONT_CARE
+ * Return: pointer to an XVisualInfo or NULL.
+ */
+-static XVisualInfo *choose_x_visual( Display *dpy, int screen,
+- GLboolean rgba, int min_depth,
+- int preferred_class )
++static XVisualInfo *
++choose_x_visual( Display *dpy, int screen, GLboolean rgba, int min_depth,
++ int preferred_class )
+ {
+ XVisualInfo *vis;
+ int xclass, visclass = 0;
+@@ -801,12 +803,10 @@
+ * preferred_class - preferred GLX visual class or DONT_CARE
+ * Return: pointer to an XVisualInfo or NULL.
+ */
+-static XVisualInfo *choose_x_overlay_visual( Display *dpy, int scr,
+- GLboolean rgbFlag,
+- int level, int trans_type,
+- int trans_value,
+- int min_depth,
+- int preferred_class )
++static XVisualInfo *
++choose_x_overlay_visual( Display *dpy, int scr, GLboolean rgbFlag,
++ int level, int trans_type, int trans_value,
++ int min_depth, int preferred_class )
+ {
+ Atom overlayVisualsAtom;
+ OverlayInfo *overlay_info;
+@@ -931,8 +931,9 @@
+ /**********************************************************************/
+
+
+-static XMesaVisual choose_visual( Display *dpy, int screen, const int *list,
+- GLboolean rgbModeDefault )
++static XMesaVisual
++choose_visual( Display *dpy, int screen, const int *list,
++ GLboolean rgbModeDefault )
+ {
+ const int *parselist;
+ XVisualInfo *vis;
+@@ -1392,7 +1393,6 @@
+ }
+
+
+-
+ static Bool
+ Fake_glXMakeCurrent( Display *dpy, GLXDrawable drawable, GLXContext ctx )
+ {
+@@ -1400,7 +1400,6 @@
+ }
+
+
+-
+ static GLXPixmap
+ Fake_glXCreateGLXPixmap( Display *dpy, XVisualInfo *visinfo, Pixmap pixmap )
+ {
+@@ -1463,7 +1462,6 @@
+ }
+
+
+-
+ static void
+ Fake_glXCopyContext( Display *dpy, GLXContext src, GLXContext dst,
+ unsigned long mask )
+@@ -1477,7 +1475,6 @@
+ }
+
+
+-
+ static Bool
+ Fake_glXQueryExtension( Display *dpy, int *errorb, int *event )
+ {
+@@ -1512,7 +1509,6 @@
+ }
+
+
+-
+ static Bool
+ Fake_glXIsDirect( Display *dpy, GLXContext ctx )
+ {
+@@ -1554,7 +1550,6 @@
+ }
+
+
+-
+ static Bool
+ Fake_glXQueryVersion( Display *dpy, int *maj, int *min )
+ {
+@@ -1567,7 +1562,6 @@
+ }
+
+
+-
+ /*
+ * Query the GLX attributes of the given XVisualInfo.
+ */
+@@ -2738,9 +2732,19 @@
+ }
+
+
+-
++/* silence warning */
+ extern struct _glxapi_table *_mesa_GetGLXDispatchTable(void);
+-struct _glxapi_table *_mesa_GetGLXDispatchTable(void)
++
++
++/**
++ * Create a new GLX API dispatch table with its function pointers
++ * initialized to point to Mesa's "fake" GLX API functions.
++ * Note: there's a similar function (_real_GetGLXDispatchTable) that
++ * returns a new dispatch table with all pointers initalized to point
++ * to "real" GLX functions (which understand GLX wire protocol, etc).
++ */
++struct _glxapi_table *
++_mesa_GetGLXDispatchTable(void)
+ {
+ static struct _glxapi_table glx;
+
+Index: xc/extras/Mesa/src/mesa/drivers/x11/glxapi.c
+diff -u xc/extras/Mesa/src/mesa/drivers/x11/glxapi.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/x11/glxapi.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/x11/glxapi.c:1.1.1.1 Wed Jun 16 09:19:00 2004
++++ xc/extras/Mesa/src/mesa/drivers/x11/glxapi.c Wed Dec 15 01:51:02 2004
+@@ -1,9 +1,8 @@
+-
+ /*
+ * Mesa 3-D graphics library
+- * Version: 5.1
++ * Version: 6.2.1
+ *
+- * Copyright (C) 1999-2002 Brian Paul All Rights Reserved.
++ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+@@ -1141,160 +1140,161 @@
+ void
+ _glxapi_set_no_op_table(struct _glxapi_table *t)
+ {
++ typedef int (*nop_func)(void);
++ nop_func *dispatch = (nop_func *) t;
+ GLuint n = _glxapi_get_dispatch_table_size();
+ GLuint i;
+- void **dispatch = (void **) t;
+ for (i = 0; i < n; i++) {
+- dispatch[i] = (void *) generic_no_op_func;
++ dispatch[i] = generic_no_op_func;
+ }
+ }
+
+
+ struct name_address_pair {
+ const char *Name;
+- GLvoid *Address;
++ __GLXextFuncPtr Address;
+ };
+
+ static struct name_address_pair GLX_functions[] = {
+ /*** GLX_VERSION_1_0 ***/
+- { "glXChooseVisual", (GLvoid *) glXChooseVisual },
+- { "glXCopyContext", (GLvoid *) glXCopyContext },
+- { "glXCreateContext", (GLvoid *) glXCreateContext },
+- { "glXCreateGLXPixmap", (GLvoid *) glXCreateGLXPixmap },
+- { "glXDestroyContext", (GLvoid *) glXDestroyContext },
+- { "glXDestroyGLXPixmap", (GLvoid *) glXDestroyGLXPixmap },
+- { "glXGetConfig", (GLvoid *) glXGetConfig },
+- { "glXGetCurrentContext", (GLvoid *) glXGetCurrentContext },
+- { "glXGetCurrentDrawable", (GLvoid *) glXGetCurrentDrawable },
+- { "glXIsDirect", (GLvoid *) glXIsDirect },
+- { "glXMakeCurrent", (GLvoid *) glXMakeCurrent },
+- { "glXQueryExtension", (GLvoid *) glXQueryExtension },
+- { "glXQueryVersion", (GLvoid *) glXQueryVersion },
+- { "glXSwapBuffers", (GLvoid *) glXSwapBuffers },
+- { "glXUseXFont", (GLvoid *) glXUseXFont },
+- { "glXWaitGL", (GLvoid *) glXWaitGL },
+- { "glXWaitX", (GLvoid *) glXWaitX },
++ { "glXChooseVisual", (__GLXextFuncPtr) glXChooseVisual },
++ { "glXCopyContext", (__GLXextFuncPtr) glXCopyContext },
++ { "glXCreateContext", (__GLXextFuncPtr) glXCreateContext },
++ { "glXCreateGLXPixmap", (__GLXextFuncPtr) glXCreateGLXPixmap },
++ { "glXDestroyContext", (__GLXextFuncPtr) glXDestroyContext },
++ { "glXDestroyGLXPixmap", (__GLXextFuncPtr) glXDestroyGLXPixmap },
++ { "glXGetConfig", (__GLXextFuncPtr) glXGetConfig },
++ { "glXGetCurrentContext", (__GLXextFuncPtr) glXGetCurrentContext },
++ { "glXGetCurrentDrawable", (__GLXextFuncPtr) glXGetCurrentDrawable },
++ { "glXIsDirect", (__GLXextFuncPtr) glXIsDirect },
++ { "glXMakeCurrent", (__GLXextFuncPtr) glXMakeCurrent },
++ { "glXQueryExtension", (__GLXextFuncPtr) glXQueryExtension },
++ { "glXQueryVersion", (__GLXextFuncPtr) glXQueryVersion },
++ { "glXSwapBuffers", (__GLXextFuncPtr) glXSwapBuffers },
++ { "glXUseXFont", (__GLXextFuncPtr) glXUseXFont },
++ { "glXWaitGL", (__GLXextFuncPtr) glXWaitGL },
++ { "glXWaitX", (__GLXextFuncPtr) glXWaitX },
+
+ /*** GLX_VERSION_1_1 ***/
+- { "glXGetClientString", (GLvoid *) glXGetClientString },
+- { "glXQueryExtensionsString", (GLvoid *) glXQueryExtensionsString },
+- { "glXQueryServerString", (GLvoid *) glXQueryServerString },
++ { "glXGetClientString", (__GLXextFuncPtr) glXGetClientString },
++ { "glXQueryExtensionsString", (__GLXextFuncPtr) glXQueryExtensionsString },
++ { "glXQueryServerString", (__GLXextFuncPtr) glXQueryServerString },
+
+ /*** GLX_VERSION_1_2 ***/
+- { "glXGetCurrentDisplay", (GLvoid *) glXGetCurrentDisplay },
++ { "glXGetCurrentDisplay", (__GLXextFuncPtr) glXGetCurrentDisplay },
+
+ /*** GLX_VERSION_1_3 ***/
+- { "glXChooseFBConfig", (GLvoid *) glXChooseFBConfig },
+- { "glXCreateNewContext", (GLvoid *) glXCreateNewContext },
+- { "glXCreatePbuffer", (GLvoid *) glXCreatePbuffer },
+- { "glXCreatePixmap", (GLvoid *) glXCreatePixmap },
+- { "glXCreateWindow", (GLvoid *) glXCreateWindow },
+- { "glXDestroyPbuffer", (GLvoid *) glXDestroyPbuffer },
+- { "glXDestroyPixmap", (GLvoid *) glXDestroyPixmap },
+- { "glXDestroyWindow", (GLvoid *) glXDestroyWindow },
+- { "glXGetCurrentReadDrawable", (GLvoid *) glXGetCurrentReadDrawable },
+- { "glXGetFBConfigAttrib", (GLvoid *) glXGetFBConfigAttrib },
+- { "glXGetFBConfigs", (GLvoid *) glXGetFBConfigs },
+- { "glXGetSelectedEvent", (GLvoid *) glXGetSelectedEvent },
+- { "glXGetVisualFromFBConfig", (GLvoid *) glXGetVisualFromFBConfig },
+- { "glXMakeContextCurrent", (GLvoid *) glXMakeContextCurrent },
+- { "glXQueryContext", (GLvoid *) glXQueryContext },
+- { "glXQueryDrawable", (GLvoid *) glXQueryDrawable },
+- { "glXSelectEvent", (GLvoid *) glXSelectEvent },
++ { "glXChooseFBConfig", (__GLXextFuncPtr) glXChooseFBConfig },
++ { "glXCreateNewContext", (__GLXextFuncPtr) glXCreateNewContext },
++ { "glXCreatePbuffer", (__GLXextFuncPtr) glXCreatePbuffer },
++ { "glXCreatePixmap", (__GLXextFuncPtr) glXCreatePixmap },
++ { "glXCreateWindow", (__GLXextFuncPtr) glXCreateWindow },
++ { "glXDestroyPbuffer", (__GLXextFuncPtr) glXDestroyPbuffer },
++ { "glXDestroyPixmap", (__GLXextFuncPtr) glXDestroyPixmap },
++ { "glXDestroyWindow", (__GLXextFuncPtr) glXDestroyWindow },
++ { "glXGetCurrentReadDrawable", (__GLXextFuncPtr) glXGetCurrentReadDrawable },
++ { "glXGetFBConfigAttrib", (__GLXextFuncPtr) glXGetFBConfigAttrib },
++ { "glXGetFBConfigs", (__GLXextFuncPtr) glXGetFBConfigs },
++ { "glXGetSelectedEvent", (__GLXextFuncPtr) glXGetSelectedEvent },
++ { "glXGetVisualFromFBConfig", (__GLXextFuncPtr) glXGetVisualFromFBConfig },
++ { "glXMakeContextCurrent", (__GLXextFuncPtr) glXMakeContextCurrent },
++ { "glXQueryContext", (__GLXextFuncPtr) glXQueryContext },
++ { "glXQueryDrawable", (__GLXextFuncPtr) glXQueryDrawable },
++ { "glXSelectEvent", (__GLXextFuncPtr) glXSelectEvent },
+
+ /*** GLX_VERSION_1_4 ***/
+- { "glXGetProcAddress", (GLvoid *) glXGetProcAddress },
++ { "glXGetProcAddress", (__GLXextFuncPtr) glXGetProcAddress },
+
+ /*** GLX_SGI_swap_control ***/
+- { "glXSwapIntervalSGI", (GLvoid *) glXSwapIntervalSGI },
++ { "glXSwapIntervalSGI", (__GLXextFuncPtr) glXSwapIntervalSGI },
+
+ /*** GLX_SGI_video_sync ***/
+- { "glXGetVideoSyncSGI", (GLvoid *) glXGetVideoSyncSGI },
+- { "glXWaitVideoSyncSGI", (GLvoid *) glXWaitVideoSyncSGI },
++ { "glXGetVideoSyncSGI", (__GLXextFuncPtr) glXGetVideoSyncSGI },
++ { "glXWaitVideoSyncSGI", (__GLXextFuncPtr) glXWaitVideoSyncSGI },
+
+ /*** GLX_SGI_make_current_read ***/
+- { "glXMakeCurrentReadSGI", (GLvoid *) glXMakeCurrentReadSGI },
+- { "glXGetCurrentReadDrawableSGI", (GLvoid *) glXGetCurrentReadDrawableSGI },
++ { "glXMakeCurrentReadSGI", (__GLXextFuncPtr) glXMakeCurrentReadSGI },
++ { "glXGetCurrentReadDrawableSGI", (__GLXextFuncPtr) glXGetCurrentReadDrawableSGI },
+
+ /*** GLX_SGIX_video_source ***/
+ #if defined(_VL_H)
+- { "glXCreateGLXVideoSourceSGIX", (GLvoid *) glXCreateGLXVideoSourceSGIX },
+- { "glXDestroyGLXVideoSourceSGIX", (GLvoid *) glXDestroyGLXVideoSourceSGIX },
++ { "glXCreateGLXVideoSourceSGIX", (__GLXextFuncPtr) glXCreateGLXVideoSourceSGIX },
++ { "glXDestroyGLXVideoSourceSGIX", (__GLXextFuncPtr) glXDestroyGLXVideoSourceSGIX },
+ #endif
+
+ /*** GLX_EXT_import_context ***/
+- { "glXFreeContextEXT", (GLvoid *) glXFreeContextEXT },
+- { "glXGetContextIDEXT", (GLvoid *) glXGetContextIDEXT },
+- { "glXGetCurrentDisplayEXT", (GLvoid *) glXGetCurrentDisplayEXT },
+- { "glXImportContextEXT", (GLvoid *) glXImportContextEXT },
+- { "glXQueryContextInfoEXT", (GLvoid *) glXQueryContextInfoEXT },
++ { "glXFreeContextEXT", (__GLXextFuncPtr) glXFreeContextEXT },
++ { "glXGetContextIDEXT", (__GLXextFuncPtr) glXGetContextIDEXT },
++ { "glXGetCurrentDisplayEXT", (__GLXextFuncPtr) glXGetCurrentDisplayEXT },
++ { "glXImportContextEXT", (__GLXextFuncPtr) glXImportContextEXT },
++ { "glXQueryContextInfoEXT", (__GLXextFuncPtr) glXQueryContextInfoEXT },
+
+ /*** GLX_SGIX_fbconfig ***/
+- { "glXGetFBConfigAttribSGIX", (GLvoid *) glXGetFBConfigAttribSGIX },
+- { "glXChooseFBConfigSGIX", (GLvoid *) glXChooseFBConfigSGIX },
+- { "glXCreateGLXPixmapWithConfigSGIX", (GLvoid *) glXCreateGLXPixmapWithConfigSGIX },
+- { "glXCreateContextWithConfigSGIX", (GLvoid *) glXCreateContextWithConfigSGIX },
+- { "glXGetVisualFromFBConfigSGIX", (GLvoid *) glXGetVisualFromFBConfigSGIX },
+- { "glXGetFBConfigFromVisualSGIX", (GLvoid *) glXGetFBConfigFromVisualSGIX },
++ { "glXGetFBConfigAttribSGIX", (__GLXextFuncPtr) glXGetFBConfigAttribSGIX },
++ { "glXChooseFBConfigSGIX", (__GLXextFuncPtr) glXChooseFBConfigSGIX },
++ { "glXCreateGLXPixmapWithConfigSGIX", (__GLXextFuncPtr) glXCreateGLXPixmapWithConfigSGIX },
++ { "glXCreateContextWithConfigSGIX", (__GLXextFuncPtr) glXCreateContextWithConfigSGIX },
++ { "glXGetVisualFromFBConfigSGIX", (__GLXextFuncPtr) glXGetVisualFromFBConfigSGIX },
++ { "glXGetFBConfigFromVisualSGIX", (__GLXextFuncPtr) glXGetFBConfigFromVisualSGIX },
+
+ /*** GLX_SGIX_pbuffer ***/
+- { "glXCreateGLXPbufferSGIX", (GLvoid *) glXCreateGLXPbufferSGIX },
+- { "glXDestroyGLXPbufferSGIX", (GLvoid *) glXDestroyGLXPbufferSGIX },
+- { "glXQueryGLXPbufferSGIX", (GLvoid *) glXQueryGLXPbufferSGIX },
+- { "glXSelectEventSGIX", (GLvoid *) glXSelectEventSGIX },
+- { "glXGetSelectedEventSGIX", (GLvoid *) glXGetSelectedEventSGIX },
++ { "glXCreateGLXPbufferSGIX", (__GLXextFuncPtr) glXCreateGLXPbufferSGIX },
++ { "glXDestroyGLXPbufferSGIX", (__GLXextFuncPtr) glXDestroyGLXPbufferSGIX },
++ { "glXQueryGLXPbufferSGIX", (__GLXextFuncPtr) glXQueryGLXPbufferSGIX },
++ { "glXSelectEventSGIX", (__GLXextFuncPtr) glXSelectEventSGIX },
++ { "glXGetSelectedEventSGIX", (__GLXextFuncPtr) glXGetSelectedEventSGIX },
+
+ /*** GLX_SGI_cushion ***/
+- { "glXCushionSGI", (GLvoid *) glXCushionSGI },
++ { "glXCushionSGI", (__GLXextFuncPtr) glXCushionSGI },
+
+ /*** GLX_SGIX_video_resize ***/
+- { "glXBindChannelToWindowSGIX", (GLvoid *) glXBindChannelToWindowSGIX },
+- { "glXChannelRectSGIX", (GLvoid *) glXChannelRectSGIX },
+- { "glXQueryChannelRectSGIX", (GLvoid *) glXQueryChannelRectSGIX },
+- { "glXQueryChannelDeltasSGIX", (GLvoid *) glXQueryChannelDeltasSGIX },
+- { "glXChannelRectSyncSGIX", (GLvoid *) glXChannelRectSyncSGIX },
++ { "glXBindChannelToWindowSGIX", (__GLXextFuncPtr) glXBindChannelToWindowSGIX },
++ { "glXChannelRectSGIX", (__GLXextFuncPtr) glXChannelRectSGIX },
++ { "glXQueryChannelRectSGIX", (__GLXextFuncPtr) glXQueryChannelRectSGIX },
++ { "glXQueryChannelDeltasSGIX", (__GLXextFuncPtr) glXQueryChannelDeltasSGIX },
++ { "glXChannelRectSyncSGIX", (__GLXextFuncPtr) glXChannelRectSyncSGIX },
+
+ /*** GLX_SGIX_dmbuffer **/
+ #if defined(_DM_BUFFER_H_)
+- { "glXAssociateDMPbufferSGIX", (GLvoid *) glXAssociateDMPbufferSGIX },
++ { "glXAssociateDMPbufferSGIX", (__GLXextFuncPtr) glXAssociateDMPbufferSGIX },
+ #endif
+
+ /*** GLX_SGIX_swap_group ***/
+- { "glXJoinSwapGroupSGIX", (GLvoid *) glXJoinSwapGroupSGIX },
++ { "glXJoinSwapGroupSGIX", (__GLXextFuncPtr) glXJoinSwapGroupSGIX },
+
+ /*** GLX_SGIX_swap_barrier ***/
+- { "glXBindSwapBarrierSGIX", (GLvoid *) glXBindSwapBarrierSGIX },
+- { "glXQueryMaxSwapBarriersSGIX", (GLvoid *) glXQueryMaxSwapBarriersSGIX },
++ { "glXBindSwapBarrierSGIX", (__GLXextFuncPtr) glXBindSwapBarrierSGIX },
++ { "glXQueryMaxSwapBarriersSGIX", (__GLXextFuncPtr) glXQueryMaxSwapBarriersSGIX },
+
+ /*** GLX_SUN_get_transparent_index ***/
+- { "glXGetTransparentIndexSUN", (GLvoid *) glXGetTransparentIndexSUN },
++ { "glXGetTransparentIndexSUN", (__GLXextFuncPtr) glXGetTransparentIndexSUN },
+
+ /*** GLX_MESA_copy_sub_buffer ***/
+- { "glXCopySubBufferMESA", (GLvoid *) glXCopySubBufferMESA },
++ { "glXCopySubBufferMESA", (__GLXextFuncPtr) glXCopySubBufferMESA },
+
+ /*** GLX_MESA_pixmap_colormap ***/
+- { "glXCreateGLXPixmapMESA", (GLvoid *) glXCreateGLXPixmapMESA },
++ { "glXCreateGLXPixmapMESA", (__GLXextFuncPtr) glXCreateGLXPixmapMESA },
+
+ /*** GLX_MESA_release_buffers ***/
+- { "glXReleaseBuffersMESA", (GLvoid *) glXReleaseBuffersMESA },
++ { "glXReleaseBuffersMESA", (__GLXextFuncPtr) glXReleaseBuffersMESA },
+
+ /*** GLX_MESA_set_3dfx_mode ***/
+- { "glXSet3DfxModeMESA", (GLvoid *) glXSet3DfxModeMESA },
++ { "glXSet3DfxModeMESA", (__GLXextFuncPtr) glXSet3DfxModeMESA },
+
+ /*** GLX_ARB_get_proc_address ***/
+- { "glXGetProcAddressARB", (GLvoid *) glXGetProcAddressARB },
++ { "glXGetProcAddressARB", (__GLXextFuncPtr) glXGetProcAddressARB },
+
+ /*** GLX_NV_vertex_array_range ***/
+- { "glXAllocateMemoryNV", (GLvoid *) glXAllocateMemoryNV },
+- { "glXFreeMemoryNV", (GLvoid *) glXFreeMemoryNV },
++ { "glXAllocateMemoryNV", (__GLXextFuncPtr) glXAllocateMemoryNV },
++ { "glXFreeMemoryNV", (__GLXextFuncPtr) glXFreeMemoryNV },
+
+ /*** GLX_MESA_agp_offset ***/
+- { "glXGetAGPOffsetMESA", (GLvoid *) glXGetAGPOffsetMESA },
++ { "glXGetAGPOffsetMESA", (__GLXextFuncPtr) glXGetAGPOffsetMESA },
+
+ /*** GLX_ARB_render_texture ***/
+- { "glXBindTexImageARB", (GLvoid *) glXBindTexImageARB },
+- { "glXReleaseTexImageARB", (GLvoid *) glXReleaseTexImageARB },
+- { "glXDrawableAttribARB", (GLvoid *) glXDrawableAttribARB },
++ { "glXBindTexImageARB", (__GLXextFuncPtr) glXBindTexImageARB },
++ { "glXReleaseTexImageARB", (__GLXextFuncPtr) glXReleaseTexImageARB },
++ { "glXDrawableAttribARB", (__GLXextFuncPtr) glXDrawableAttribARB },
+
+ { NULL, NULL } /* end of list */
+ };
+@@ -1304,7 +1304,7 @@
+ /*
+ * Return address of named glX function, or NULL if not found.
+ */
+-const GLvoid *
++__GLXextFuncPtr
+ _glxapi_get_proc_address(const char *funcName)
+ {
+ GLuint i;
+@@ -1321,17 +1321,17 @@
+ * This function does not get dispatched through the dispatch table
+ * since it's really a "meta" function.
+ */
+-void (*glXGetProcAddressARB(const GLubyte *procName))()
++__GLXextFuncPtr
++glXGetProcAddressARB(const GLubyte *procName)
+ {
+- typedef void (*gl_function)();
+- gl_function f;
++ __GLXextFuncPtr f;
+
+- f = (gl_function) _glxapi_get_proc_address((const char *) procName);
++ f = _glxapi_get_proc_address((const char *) procName);
+ if (f) {
+ return f;
+ }
+
+- f = (gl_function) _glapi_get_proc_address((const char *) procName);
++ f = (__GLXextFuncPtr) _glapi_get_proc_address((const char *) procName);
+ return f;
+ }
+
+Index: xc/extras/Mesa/src/mesa/drivers/x11/glxapi.h
+diff -u xc/extras/Mesa/src/mesa/drivers/x11/glxapi.h:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/x11/glxapi.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/x11/glxapi.h:1.1.1.1 Wed Jun 16 09:19:00 2004
++++ xc/extras/Mesa/src/mesa/drivers/x11/glxapi.h Wed Dec 15 01:51:02 2004
+@@ -229,7 +229,7 @@
+ _glxapi_set_no_op_table(struct _glxapi_table *t);
+
+
+-extern const GLvoid *
++extern __GLXextFuncPtr
+ _glxapi_get_proc_address(const char *funcName);
+
+
+Index: xc/extras/Mesa/src/mesa/drivers/x11/xm_span.c
+diff -u xc/extras/Mesa/src/mesa/drivers/x11/xm_span.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/x11/xm_span.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/x11/xm_span.c:1.1.1.1 Wed Jun 16 09:19:02 2004
++++ xc/extras/Mesa/src/mesa/drivers/x11/xm_span.c Wed Dec 15 01:51:02 2004
+@@ -1,8 +1,8 @@
+ /*
+ * Mesa 3-D graphics library
+- * Version: 5.1
++ * Version: 6.2.1
+ *
+- * Copyright (C) 1999-2003 Brian Paul All Rights Reserved.
++ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+@@ -3456,6 +3456,49 @@
+ /***** Pixel reading *****/
+ /**********************************************************************/
+
++#ifndef XFree86Server
++/**
++ * Do clip testing prior to calling XGetImage. If any of the region lies
++ * outside the screen's bounds, XGetImage will return NULL.
++ * We use XTranslateCoordinates() to check if that's the case and
++ * adjust the x, y and length parameters accordingly.
++ * \return -1 if span is totally clipped away,
++ * else return number of pixels to skip in the destination array.
++ */
++static int
++clip_for_xgetimage(XMesaContext xmesa, GLuint *n, GLint *x, GLint *y)
++{
++ XMesaBuffer source = xmesa->xm_buffer;
++ Window rootWin = RootWindow(xmesa->display, 0);
++ Window child;
++ int screenWidth = WidthOfScreen(DefaultScreenOfDisplay(xmesa->display));
++ int dx, dy;
++ if (source->type == PBUFFER)
++ return 0;
++ XTranslateCoordinates(xmesa->display, source->buffer, rootWin,
++ *x, *y, &dx, &dy, &child);
++ if (dx >= screenWidth) {
++ /* totally clipped on right */
++ return -1;
++ }
++ if (dx < 0) {
++ /* clipped on left */
++ int clip = -dx;
++ if (clip >= *n)
++ return -1; /* totally clipped on left */
++ *x += clip;
++ *n -= clip;
++ dx = 0;
++ return clip;
++ }
++ if (dx + *n > screenWidth) {
++ /* clipped on right */
++ int clip = dx + *n - screenWidth;
++ *n -= clip;
++ }
++ return 0;
++}
++#endif
+
+
+ /*
+@@ -3474,6 +3517,11 @@
+ #ifndef XFree86Server
+ XMesaImage *span = NULL;
+ int error;
++ int k = clip_for_xgetimage(xmesa, &n, &x, &y);
++ if (k < 0)
++ return;
++ index += k;
++
+ catch_xgetimage_errors( xmesa->display );
+ span = XGetImage( xmesa->display, source->buffer,
+ x, y, n, 1, AllPlanes, ZPixmap );
+@@ -3530,9 +3578,15 @@
+ x, FLIP(source, y), n, 1, ZPixmap,
+ ~0L, (pointer)span->data);
+ #else
++ int k;
++ y = FLIP(source, y);
++ k = clip_for_xgetimage(xmesa, &n, &x, &y);
++ if (k < 0)
++ return;
++ rgba += k;
+ catch_xgetimage_errors( xmesa->display );
+ span = XGetImage( xmesa->display, source->buffer,
+- x, FLIP(source, y), n, 1, AllPlanes, ZPixmap );
++ x, y, n, 1, AllPlanes, ZPixmap );
+ error = check_xgetimage_errors();
+ #endif
+ if (span && !error) {
+Index: xc/extras/Mesa/src/mesa/drivers/x11/xm_tri.c
+diff -u xc/extras/Mesa/src/mesa/drivers/x11/xm_tri.c:1.1.1.1 xc/extras/Mesa/src/mesa/drivers/x11/xm_tri.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/drivers/x11/xm_tri.c:1.1.1.1 Wed Jun 16 09:19:02 2004
++++ xc/extras/Mesa/src/mesa/drivers/x11/xm_tri.c Wed Dec 15 01:51:02 2004
+@@ -1352,7 +1352,6 @@
+ USE(smooth_DITHER8_z_triangle);
+ else
+ USE(smooth_DITHER_z_triangle);
+- break;
+ case PF_Lookup:
+ if (depth == 8)
+ USE(smooth_LOOKUP8_z_triangle);
+@@ -1390,7 +1389,6 @@
+ USE(flat_DITHER8_z_triangle);
+ else
+ USE(flat_DITHER_z_triangle);
+- break;
+ case PF_Lookup:
+ if (depth == 8)
+ USE(flat_LOOKUP8_z_triangle);
+@@ -1425,7 +1423,6 @@
+ USE(smooth_DITHER8_triangle);
+ else
+ USE(smooth_DITHER_triangle);
+- break;
+ case PF_Lookup:
+ if (depth == 8)
+ USE(smooth_LOOKUP8_triangle);
+@@ -1461,7 +1458,6 @@
+ USE(flat_DITHER8_triangle);
+ else
+ USE(flat_DITHER_triangle);
+- break;
+ case PF_Lookup:
+ if (depth == 8)
+ USE(flat_LOOKUP8_triangle);
+Index: xc/extras/Mesa/src/mesa/glapi/Makefile
+diff -u /dev/null xc/extras/Mesa/src/mesa/glapi/Makefile:1.1.1.1.2.1
+--- /dev/null Fri Feb 11 21:35:30 2005
++++ xc/extras/Mesa/src/mesa/glapi/Makefile Wed Dec 15 01:51:02 2004
+@@ -0,0 +1,38 @@
++# This file isn't used during a normal compilation since we don't want to
++# require Python in order to compile Mesa.
++# Instead, when the Mesa developers update/change the API interface it's
++# up to him/her to re-run this makefile and check in the newly generated files.
++
++
++OUTPUTS = glprocs.h glapitemp.h glapioffsets.h glapitable.h glapi_x86.S
++
++COMMON = gl_XML.pyc license.pyc gl_API.xml
++
++all: $(OUTPUTS)
++
++gl_XML.pyc: gl_XML.py
++ rm -f gl_XML.pyc > /dev/null
++ python2 -t -O gl_XML.py
++
++license.pyc: license.py
++ rm -f license.pyc > /dev/null
++ python2 -t -O license.py
++
++glprocs.h: $(COMMON) gl_procs.py
++ python2 -t gl_procs.py > glprocs.h
++
++glapitemp.h: $(COMMON) gl_apitemp.py
++ python2 -t gl_apitemp.py > glapitemp.h
++
++glapioffsets.h: $(COMMON) gl_offsets.py
++ python2 -t gl_offsets.py > glapioffsets.h
++
++glapitable.h: $(COMMON) gl_table.py
++ python2 -t gl_table.py > glapitable.h
++
++glapi_x86.S: $(COMMON) gl_x86_asm.py
++ python2 -t gl_x86_asm.py > glapi_x86.S
++
++clean:
++ rm -f *~ *.pyc
++ rm -f $(OUTPUTS)
+Index: xc/extras/Mesa/src/mesa/glapi/gl_API.xml
+diff -u xc/extras/Mesa/src/mesa/glapi/gl_API.xml:1.1.1.1 xc/extras/Mesa/src/mesa/glapi/gl_API.xml:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/glapi/gl_API.xml:1.1.1.1 Wed Jun 16 09:19:07 2004
++++ xc/extras/Mesa/src/mesa/glapi/gl_API.xml Wed Dec 15 01:51:02 2004
+@@ -3806,6 +3806,7 @@
+ <function name="MapBuffer" alias="MapBufferARB">
+ <param name="target" type="GLenum"/>
+ <param name="access" type="GLenum"/>
++ <return type="GLvoid *"/>
+ </function>
+
+ <function name="UnmapBuffer" alias="UnmapBufferARB">
+Index: xc/extras/Mesa/src/mesa/glapi/gl_SPARC_asm.py
+diff -u xc/extras/Mesa/src/mesa/glapi/gl_SPARC_asm.py:1.1.1.1 xc/extras/Mesa/src/mesa/glapi/gl_SPARC_asm.py:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/glapi/gl_SPARC_asm.py:1.1.1.1 Wed Jun 16 09:19:07 2004
++++ xc/extras/Mesa/src/mesa/glapi/gl_SPARC_asm.py Wed Dec 15 01:51:02 2004
+@@ -48,7 +48,7 @@
+ print ''
+ print '#define GLOBL_FN(x) .globl x ; .type x,#function'
+ print ''
+- print '#if defined(__sparc_v9__) && !defined(__linux__)'
++ print '#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))'
+ print '# define GL_STUB(fn,off)\t\t\t\t\\'
+ print 'GLOBL_FN(fn) ; fn:\t\t\t\t\t\\'
+ print '\tsethi\t%hi(0x00000000), %g4 ;\t\t\t\\'
+Index: xc/extras/Mesa/src/mesa/glapi/gl_apitemp.py
+diff -u xc/extras/Mesa/src/mesa/glapi/gl_apitemp.py:1.1.1.2 xc/extras/Mesa/src/mesa/glapi/gl_apitemp.py:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/glapi/gl_apitemp.py:1.1.1.2 Thu Jul 22 06:52:47 2004
++++ xc/extras/Mesa/src/mesa/glapi/gl_apitemp.py Wed Dec 15 01:51:02 2004
+@@ -149,7 +149,7 @@
+ #error TABLE_ENTRY must be defined
+ #endif
+
+-static void * DISPATCH_TABLE_NAME[] = {"""
++static _glapi_proc DISPATCH_TABLE_NAME[] = {"""
+ keys = self.functions.keys()
+ keys.sort()
+ for k in keys:
+@@ -176,7 +176,7 @@
+ * We list the functions which are not otherwise used.
+ */
+ #ifdef UNUSED_TABLE_NAME
+-static const void * const UNUSED_TABLE_NAME[] = {"""
++static _glapi_proc UNUSED_TABLE_NAME[] = {"""
+
+ keys = self.functions.keys()
+ keys.sort()
+Index: xc/extras/Mesa/src/mesa/glapi/gl_procs.py
+diff -u xc/extras/Mesa/src/mesa/glapi/gl_procs.py:1.1.1.1 xc/extras/Mesa/src/mesa/glapi/gl_procs.py:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/glapi/gl_procs.py:1.1.1.1 Wed Jun 16 09:19:07 2004
++++ xc/extras/Mesa/src/mesa/glapi/gl_procs.py Wed Dec 15 01:51:02 2004
+@@ -50,15 +50,15 @@
+ print ' */'
+ print ''
+ print 'typedef struct {'
+- print ' int Name_offset;'
++ print ' GLint Name_offset;'
+ print '#ifdef NEED_FUNCTION_POINTER'
+- print ' void * Address;'
++ print ' _glapi_proc Address;'
+ print '#endif'
+- print ' unsigned int Offset;'
++ print ' GLuint Offset;'
+ print '} glprocs_table_t;'
+ print ''
+ print '#ifdef NEED_FUNCTION_POINTER'
+- print '# define NAME_FUNC_OFFSET(n,f,o) { n , (void *) f , o }'
++ print '# define NAME_FUNC_OFFSET(n,f,o) { n , (_glapi_proc) f , o }'
+ print '#else'
+ print '# define NAME_FUNC_OFFSET(n,f,o) { n , o }'
+ print '#endif'
+@@ -132,7 +132,7 @@
+
+ base_offset += len(self.functions[k].name) + 3
+
+- print ' NAME_FUNC_OFFSET( -1, NULL, -1 )'
++ print ' NAME_FUNC_OFFSET( -1, NULL, 0 )'
+ print '};'
+ return
+
+Index: xc/extras/Mesa/src/mesa/glapi/gl_x86_asm.py
+diff -u xc/extras/Mesa/src/mesa/glapi/gl_x86_asm.py:1.1.1.3 xc/extras/Mesa/src/mesa/glapi/gl_x86_asm.py:1.1.1.3.2.1
+--- xc/extras/Mesa/src/mesa/glapi/gl_x86_asm.py:1.1.1.3 Sat Aug 28 04:27:54 2004
++++ xc/extras/Mesa/src/mesa/glapi/gl_x86_asm.py Wed Dec 15 01:51:02 2004
+@@ -62,11 +62,17 @@
+ print '#ifndef __WIN32__'
+ print ''
+ print '#if defined(STDCALL_API)'
+- print '#define GL_PREFIX(n,n2) GLNAME(CONCAT(gl,n2))'
+- print '#elif defined(USE_MGL_NAMESPACE)'
+- print '#define GL_PREFIX(n,n2) GLNAME(CONCAT(mgl,n))'
++ print '# if defined(USE_MGL_NAMESPACE)'
++ print '# define GL_PREFIX(n,n2) GLNAME(CONCAT(mgl,n2))'
++ print '# else'
++ print '# define GL_PREFIX(n,n2) GLNAME(CONCAT(gl,n2))'
++ print '# endif'
+ print '#else'
+- print '#define GL_PREFIX(n,n2) GLNAME(CONCAT(gl,n))'
++ print '# if defined(USE_MGL_NAMESPACE)'
++ print '# define GL_PREFIX(n,n2) GLNAME(CONCAT(mgl,n))'
++ print '# else'
++ print '# define GL_PREFIX(n,n2) GLNAME(CONCAT(gl,n))'
++ print '# endif'
+ print '#endif'
+ print ''
+ print '#define GL_OFFSET(x) CODEPTR(REGOFF(4 * x, EAX))'
+Index: xc/extras/Mesa/src/mesa/glapi/glapi.c
+diff -u xc/extras/Mesa/src/mesa/glapi/glapi.c:1.1.1.2 xc/extras/Mesa/src/mesa/glapi/glapi.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/glapi/glapi.c:1.1.1.2 Thu Jul 22 06:52:42 2004
++++ xc/extras/Mesa/src/mesa/glapi/glapi.c Wed Dec 15 01:51:02 2004
+@@ -1,9 +1,8 @@
+-
+ /*
+ * Mesa 3-D graphics library
+- * Version: 4.1
++ * Version: 6.3
+ *
+- * Copyright (C) 1999-2002 Brian Paul All Rights Reserved.
++ * Copyright (C) 1999-2003 Brian Paul All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+@@ -100,25 +99,23 @@
+
+ #define F NULL
+
+-#define DISPATCH(func, args, msg) \
+- if (warn()) { \
+- warning_func(NULL, "GL User Error: called without context:"); \
+- warning_func msg; \
++#define DISPATCH(func, args, msg) \
++ if (warn()) { \
++ warning_func(NULL, "GL User Error: called without context: %s", #func); \
+ }
+
+-#define RETURN_DISPATCH(func, args, msg) \
+- if (warn()) { \
+- warning_func(NULL, "GL User Error: called without context:"); \
+- warning_func msg; \
+- } \
++#define RETURN_DISPATCH(func, args, msg) \
++ if (warn()) { \
++ warning_func(NULL, "GL User Error: called without context: %s", #func); \
++ } \
+ return 0
+
+ #define DISPATCH_TABLE_NAME __glapi_noop_table
+-#define UNUSED_TABLE_NAME __usused_noop_functions
++#define UNUSED_TABLE_NAME __unused_noop_functions
+
+-#define TABLE_ENTRY(name) (void *) NoOp##name
++#define TABLE_ENTRY(name) (_glapi_proc) NoOp##name
+
+-static int NoOpUnused(void)
++static GLint NoOpUnused(void)
+ {
+ if (warn()) {
+ warning_func(NULL, "GL User Error: calling extension function without a current context\n");
+@@ -171,11 +168,11 @@
+
+
+ #define DISPATCH_TABLE_NAME __glapi_threadsafe_table
+-#define UNUSED_TABLE_NAME __usused_threadsafe_functions
++#define UNUSED_TABLE_NAME __unused_threadsafe_functions
+
+-#define TABLE_ENTRY(name) (void *) gl##name
++#define TABLE_ENTRY(name) (_glapi_proc) gl##name
+
+-static int glUnused(void)
++static GLint glUnused(void)
+ {
+ return 0;
+ }
+@@ -203,7 +200,8 @@
+
+
+
+-/* strdup() is actually not a standard ANSI C or POSIX routine.
++/**
++ * strdup() is actually not a standard ANSI C or POSIX routine.
+ * Irix will not define it if ANSI mode is in effect.
+ */
+ static char *
+@@ -219,7 +217,7 @@
+
+
+
+-/*
++/**
+ * We should call this periodically from a function such as glXMakeCurrent
+ * in order to test if multiple threads are being used.
+ */
+@@ -248,7 +246,7 @@
+
+
+
+-/*
++/**
+ * Set the current context pointer for this thread.
+ * The context pointer is an opaque type which should be cast to
+ * void from the real context pointer type.
+@@ -256,7 +254,9 @@
+ void
+ _glapi_set_context(void *context)
+ {
++ (void) __unused_noop_functions; /* silence a warning */
+ #if defined(THREADS)
++ (void) __unused_threadsafe_functions; /* silence a warning */
+ _glthread_SetTSD(&ContextTSD, context);
+ _glapi_Context = (ThreadSafe) ? NULL : context;
+ #else
+@@ -266,7 +266,7 @@
+
+
+
+-/*
++/**
+ * Get the current context pointer for this thread.
+ * The context pointer is an opaque type which should be cast from
+ * void to the real context pointer type.
+@@ -288,7 +288,7 @@
+
+
+
+-/*
++/**
+ * Set the global or per-thread dispatch table pointer.
+ */
+ void
+@@ -336,7 +336,7 @@
+
+
+
+-/*
++/**
+ * Return pointer to current dispatch table for calling thread.
+ */
+ struct _glapi_table *
+@@ -452,13 +452,6 @@
+ }
+
+
+-struct name_address_offset {
+- const char *Name;
+- GLvoid *Address;
+- GLuint Offset;
+-};
+-
+-
+ #if !defined( USE_X86_ASM )
+ #define NEED_FUNCTION_POINTER
+ #endif
+@@ -467,12 +460,16 @@
+ #include "glprocs.h"
+
+
++/**
++ * Search the table of static entrypoint functions for the named function
++ * and return the corresponding glprocs_table_t entry.
++ */
+ static const glprocs_table_t *
+ find_entry( const char * n )
+ {
+- unsigned i;
++ GLuint i;
+
+- for ( i = 0 ; static_functions[i].Name_offset >= 0 ; i++ ) {
++ for (i = 0; static_functions[i].Name_offset >= 0; i++) {
+ const char * test_name;
+
+ test_name = gl_string_table + static_functions[i].Name_offset;
+@@ -483,7 +480,8 @@
+ return NULL;
+ }
+
+-/*
++
++/**
+ * Return dispatch table offset of the named static (built-in) function.
+ * Return -1 if function not found.
+ */
+@@ -509,18 +507,18 @@
+ # endif
+
+
+-/*
++/**
+ * Return dispatch function address the named static (built-in) function.
+ * Return NULL if function not found.
+ */
+-static const GLvoid *
++static const _glapi_proc
+ get_static_proc_address(const char *funcName)
+ {
+ const glprocs_table_t * const f = find_entry( funcName );
+
+ if ( f != NULL ) {
+- return gl_dispatch_functions_start
+- + (X86_DISPATCH_FUNCTION_SIZE * f->Offset);
++ return (_glapi_proc) (gl_dispatch_functions_start
++ + (X86_DISPATCH_FUNCTION_SIZE * f->Offset));
+ }
+ else {
+ return NULL;
+@@ -530,11 +528,11 @@
+ #else
+
+
+-/*
+- * Return dispatch function address the named static (built-in) function.
+- * Return NULL if function not found.
++/**
++ * Return pointer to the named static (built-in) function.
++ * \return NULL if function not found.
+ */
+-static const GLvoid *
++static const _glapi_proc
+ get_static_proc_address(const char *funcName)
+ {
+ const glprocs_table_t * const f = find_entry( funcName );
+@@ -544,12 +542,16 @@
+ #endif /* USE_X86_ASM */
+
+
++/**
++ * Return the name of the function at the given offset in the dispatch
++ * table. For debugging only.
++ */
+ static const char *
+ get_static_proc_name( GLuint offset )
+ {
+- unsigned i;
++ GLuint i;
+
+- for ( i = 0 ; static_functions[i].Name_offset >= 0 ; i++ ) {
++ for (i = 0; static_functions[i].Name_offset >= 0; i++) {
+ if (static_functions[i].Offset == offset) {
+ return gl_string_table + static_functions[i].Name_offset;
+ }
+@@ -570,7 +572,7 @@
+
+
+ /*
+- * The disptach table size (number of entries) is the sizeof the
++ * The dispatch table size (number of entries) is the size of the
+ * _glapi_table struct plus the number of dynamic entries we can add.
+ * The extra slots can be filled in by DRI drivers that register new extension
+ * functions.
+@@ -578,6 +580,13 @@
+ #define DISPATCH_TABLE_SIZE (sizeof(struct _glapi_table) / sizeof(void *) + MAX_EXTENSION_FUNCS)
+
+
++struct name_address_offset {
++ const char *Name;
++ _glapi_proc Address;
++ GLuint Offset;
++};
++
++
+ static struct name_address_offset ExtEntryTable[MAX_EXTENSION_FUNCS];
+ static GLuint NumExtEntryPoints = 0;
+
+@@ -585,12 +594,12 @@
+ extern void __glapi_sparc_icache_flush(unsigned int *);
+ #endif
+
+-/*
++/**
+ * Generate a dispatch function (entrypoint) which jumps through
+ * the given slot number (offset) in the current dispatch table.
+ * We need assembly language in order to accomplish this.
+ */
+-static void *
++static _glapi_proc
+ generate_entrypoint(GLuint functionOffset)
+ {
+ #if defined(USE_X86_ASM)
+@@ -633,10 +642,10 @@
+ *(unsigned int *)(code + 0x10) = (unsigned int)_glapi_get_dispatch - next_insn;
+ *(unsigned int *)(code + 0x16) = (unsigned int)functionOffset * 4;
+ }
+- return code;
++ return (_glapi_proc) code;
+ #elif defined(USE_SPARC_ASM)
+
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ static const unsigned int insn_template[] = {
+ 0x05000000, /* sethi %uhi(_glapi_Dispatch), %g2 */
+ 0x03000000, /* sethi %hi(_glapi_Dispatch), %g1 */
+@@ -664,7 +673,7 @@
+ if (code) {
+ memcpy(code, insn_template, sizeof(insn_template));
+
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ code[0] |= (glapi_addr >> (32 + 10));
+ code[1] |= ((glapi_addr & 0xffffffff) >> 10);
+ __glapi_sparc_icache_flush(&code[0]);
+@@ -682,19 +691,20 @@
+ __glapi_sparc_icache_flush(&code[2]);
+ #endif
+ }
+- return code;
++ return (_glapi_proc) code;
+ #else
++ (void) functionOffset;
+ return NULL;
+ #endif /* USE_*_ASM */
+ }
+
+
+-/*
++/**
+ * This function inserts a new dispatch offset into the assembly language
+ * stub that was generated with the preceeding function.
+ */
+ static void
+-fill_in_entrypoint_offset(void *entrypoint, GLuint offset)
++fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset)
+ {
+ #if defined(USE_X86_ASM)
+
+@@ -706,7 +716,7 @@
+
+ /* XXX this hasn't been tested! */
+ unsigned int *code = (unsigned int *) entrypoint;
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ code[6] = 0x05000000; /* sethi %hi(8 * glapioffset), %g2 */
+ code[7] = 0x8410a000; /* or %g2, %lo(8 * glapioffset), %g2 */
+ code[6] |= ((offset * 8) >> 10);
+@@ -718,11 +728,17 @@
+ __glapi_sparc_icache_flush(&code[2]);
+ #endif /* __sparc_v9__ && !linux */
+
++#else
++
++ /* an unimplemented architecture */
++ (void) entrypoint;
++ (void) offset;
++
+ #endif /* USE_*_ASM */
+ }
+
+
+-/*
++/**
+ * Add a new extension function entrypoint.
+ * Return: GL_TRUE = success or GL_FALSE = failure
+ */
+@@ -732,7 +748,7 @@
+ /* trivial rejection test */
+ #ifdef MANGLE
+ if (!funcName || funcName[0] != 'm' || funcName[1] != 'g' || funcName[2] != 'l')
+- return NULL;
++ return GL_FALSE;
+ #else
+ if (!funcName || funcName[0] != 'g' || funcName[1] != 'l')
+ return GL_FALSE;
+@@ -778,7 +794,7 @@
+ return GL_FALSE;
+ }
+ else {
+- void *entrypoint = generate_entrypoint(offset);
++ _glapi_proc entrypoint = generate_entrypoint(offset);
+ if (!entrypoint)
+ return GL_FALSE; /* couldn't generate assembly */
+
+@@ -796,7 +812,7 @@
+ }
+
+
+-/*
++/**
+ * Return offset of entrypoint for named function within dispatch table.
+ */
+ GLint
+@@ -816,10 +832,12 @@
+
+
+
+-/*
+- * Return entrypoint for named function.
++/**
++ * Return pointer to the named function. If the function name isn't found
++ * in the name of static functions, try generating a new API entrypoint on
++ * the fly with assembly language.
+ */
+-const GLvoid *
++const _glapi_proc
+ _glapi_get_proc_address(const char *funcName)
+ {
+ GLuint i;
+@@ -841,7 +859,7 @@
+
+ /* search static functions */
+ {
+- const GLvoid *func = get_static_proc_address(funcName);
++ const _glapi_proc func = get_static_proc_address(funcName);
+ if (func)
+ return func;
+ }
+@@ -853,7 +871,7 @@
+ * when you try calling a GL function that doesn't really exist.
+ */
+ if (NumExtEntryPoints < MAX_EXTENSION_FUNCS) {
+- GLvoid *entrypoint = generate_entrypoint(~0);
++ _glapi_proc entrypoint = generate_entrypoint(~0);
+ if (!entrypoint)
+ return GL_FALSE;
+
+@@ -872,7 +890,7 @@
+
+
+
+-/*
++/**
+ * Return the name of the function at the given dispatch offset.
+ * This is only intended for debugging.
+ */
+@@ -899,7 +917,7 @@
+
+
+
+-/*
++/**
+ * Return size of dispatch table struct as number of functions (or
+ * slots).
+ */
+@@ -911,7 +929,7 @@
+
+
+
+-/*
++/**
+ * Get API dispatcher version string.
+ */
+ const char *
+@@ -922,7 +940,7 @@
+
+
+
+-/*
++/**
+ * Make sure there are no NULL pointers in the given dispatch table.
+ * Intended for debugging purposes.
+ */
+@@ -988,7 +1006,7 @@
+ GLuint offset = (secondaryColor3fFunc - (char *) table) / sizeof(void *);
+ assert(secondaryColor3fOffset == _gloffset_SecondaryColor3fEXT);
+ assert(secondaryColor3fOffset == offset);
+- assert(_glapi_get_proc_address("glSecondaryColor3fEXT") == (void *) &glSecondaryColor3fEXT);
++ assert(_glapi_get_proc_address("glSecondaryColor3fEXT") == (_glapi_proc) &glSecondaryColor3fEXT);
+ }
+ {
+ GLuint pointParameterivOffset = _glapi_get_proc_offset("glPointParameterivNV");
+@@ -996,7 +1014,7 @@
+ GLuint offset = (pointParameterivFunc - (char *) table) / sizeof(void *);
+ assert(pointParameterivOffset == _gloffset_PointParameterivNV);
+ assert(pointParameterivOffset == offset);
+- assert(_glapi_get_proc_address("glPointParameterivNV") == (void *) &glPointParameterivNV);
++ assert(_glapi_get_proc_address("glPointParameterivNV") == (_glapi_proc) &glPointParameterivNV);
+ }
+ {
+ GLuint setFenceOffset = _glapi_get_proc_offset("glSetFenceNV");
+@@ -1004,7 +1022,9 @@
+ GLuint offset = (setFenceFunc - (char *) table) / sizeof(void *);
+ assert(setFenceOffset == _gloffset_SetFenceNV);
+ assert(setFenceOffset == offset);
+- assert(_glapi_get_proc_address("glSetFenceNV") == (void *) &glSetFenceNV);
++ assert(_glapi_get_proc_address("glSetFenceNV") == (_glapi_proc) &glSetFenceNV);
+ }
++#else
++ (void) table;
+ #endif
+ }
+Index: xc/extras/Mesa/src/mesa/glapi/glapi.h
+diff -u xc/extras/Mesa/src/mesa/glapi/glapi.h:1.1.1.1 xc/extras/Mesa/src/mesa/glapi/glapi.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/glapi/glapi.h:1.1.1.1 Wed Jun 16 09:19:03 2004
++++ xc/extras/Mesa/src/mesa/glapi/glapi.h Wed Dec 15 01:51:02 2004
+@@ -1,9 +1,8 @@
+-
+ /*
+ * Mesa 3-D graphics library
+- * Version: 3.5
++ * Version: 6.3
+ *
+- * Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
++ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+@@ -24,6 +23,24 @@
+ */
+
+
++/**
++ * \mainpage Mesa GL API Module
++ *
++ * \section GLAPIIntroduction Introduction
++ *
++ * The Mesa GL API module is responsible for dispatching all the
++ * gl*() functions. All GL functions are dispatched by jumping through
++ * the current dispatch table (basically a struct full of function
++ * pointers.)
++ *
++ * A per-thread current dispatch table and per-thread current context
++ * pointer are managed by this module too.
++ *
++ * This module is intended to be non-Mesa-specific so it can be used
++ * with the X/DRI libGL also.
++ */
++
++
+ #ifndef _GLAPI_H
+ #define _GLAPI_H
+
+@@ -34,6 +51,8 @@
+
+ typedef void (*_glapi_warning_func)(void *ctx, const char *str, ...);
+
++typedef void (*_glapi_proc)(void); /* generic function pointer */
++
+
+ extern void *_glapi_Context;
+
+@@ -98,7 +117,7 @@
+ _glapi_get_proc_offset(const char *funcName);
+
+
+-extern const GLvoid *
++extern const _glapi_proc
+ _glapi_get_proc_address(const char *funcName);
+
+
+Index: xc/extras/Mesa/src/mesa/glapi/glapioffsets.h
+diff -u xc/extras/Mesa/src/mesa/glapi/glapioffsets.h:1.1.1.1 xc/extras/Mesa/src/mesa/glapi/glapioffsets.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/glapi/glapioffsets.h:1.1.1.1 Wed Jun 16 09:19:04 2004
++++ xc/extras/Mesa/src/mesa/glapi/glapioffsets.h Wed Dec 15 01:51:02 2004
+@@ -1,4 +1,31 @@
+-/* DO NOT EDIT - This file generated automatically by gloffsets.py script */
++/* DO NOT EDIT - This file generated automatically by gl_offsets.py (from Mesa) script */
++
++/*
++ * Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
++ * (C) Copyright IBM Corporation 2004
++ * All Rights Reserved.
++ *
++ * 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, sub license,
++ * 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 (including the next
++ * paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL
++ * BRIAN PAUL, IBM,
++ * AND/OR THEIR SUPPLIERS 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.
++ */
++
+ #ifndef _GLAPI_OFFSETS_H_
+ #define _GLAPI_OFFSETS_H_
+
+Index: xc/extras/Mesa/src/mesa/glapi/glapitable.h
+diff -u xc/extras/Mesa/src/mesa/glapi/glapitable.h:1.1.1.1 xc/extras/Mesa/src/mesa/glapi/glapitable.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/glapi/glapitable.h:1.1.1.1 Wed Jun 16 09:19:04 2004
++++ xc/extras/Mesa/src/mesa/glapi/glapitable.h Wed Dec 15 01:51:02 2004
+@@ -1,4 +1,31 @@
+-/* DO NOT EDIT - This file generated automatically with gltable.py script */
++/* DO NOT EDIT - This file generated automatically by a script */
++
++/*
++ * Copyright (C) 1999-2003 Brian Paul All Rights Reserved.
++ * (C) Copyright IBM Corporation 2004
++ * All Rights Reserved.
++ *
++ * 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, sub license,
++ * 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 (including the next
++ * paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL
++ * BRIAN PAUL, IBM,
++ * AND/OR THEIR SUPPLIERS 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.
++ */
++
+ #ifndef _GLAPI_TABLE_H_
+ #define _GLAPI_TABLE_H_
+
+@@ -703,9 +730,9 @@
+ void (GLAPIENTRYP GenBuffersARB)(GLsizei n, GLuint * buffer); /* 692 */
+ void (GLAPIENTRYP GetBufferParameterivARB)(GLenum target, GLenum pname, GLint * params); /* 693 */
+ void (GLAPIENTRYP GetBufferPointervARB)(GLenum target, GLenum pname, GLvoid ** params); /* 694 */
+- void (GLAPIENTRYP GetBufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, void * data); /* 695 */
++ void (GLAPIENTRYP GetBufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid * data); /* 695 */
+ GLboolean (GLAPIENTRYP IsBufferARB)(GLuint buffer); /* 696 */
+- void * (GLAPIENTRYP MapBufferARB)(GLenum target, GLenum access); /* 697 */
++ GLvoid * (GLAPIENTRYP MapBufferARB)(GLenum target, GLenum access); /* 697 */
+ GLboolean (GLAPIENTRYP UnmapBufferARB)(GLenum target); /* 698 */
+ void (GLAPIENTRYP DepthBoundsEXT)(GLclampd zmin, GLclampd zmax); /* 699 */
+ void (GLAPIENTRYP GenQueriesARB)(GLsizei n, GLuint * ids); /* 700 */
+Index: xc/extras/Mesa/src/mesa/glapi/glapitemp.h
+diff -u xc/extras/Mesa/src/mesa/glapi/glapitemp.h:1.1.1.2 xc/extras/Mesa/src/mesa/glapi/glapitemp.h:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/glapi/glapitemp.h:1.1.1.2 Thu Jul 22 06:52:43 2004
++++ xc/extras/Mesa/src/mesa/glapi/glapitemp.h Wed Dec 15 01:51:02 2004
+@@ -1,5 +1,31 @@
++/* DO NOT EDIT - This file generated automatically by gl_apitemp.py (from Mesa) script */
++
++/*
++ * Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
++ * (C) Copyright IBM Corporation 2004
++ * All Rights Reserved.
++ *
++ * 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, sub license,
++ * 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 (including the next
++ * paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL
++ * BRIAN PAUL, IBM,
++ * AND/OR THEIR SUPPLIERS 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.
++ */
+
+-/* DO NOT EDIT! This file is generated by the glapitemp.py script. */
+
+ /*
+ * This file is a template which generates the OpenGL API entry point
+@@ -12,7 +38,7 @@
+ * msg is a printf-style debug message.
+ * RETURN_DISPATCH(func, args, msg) - code to do dispatch with a return value
+ *
+- * Here's an example which generates the usual OpenGL functions:
++ * Here is an example which generates the usual OpenGL functions:
+ * #define KEYWORD1
+ * #define KEYWORD2
+ * #define NAME(func) gl##func
+@@ -107,7 +133,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(Color3dv)(const GLdouble * v)
+ {
+- DISPATCH(Color3dv, (v), (F, "glColor3dv(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2]));
++ DISPATCH(Color3dv, (v), (F, "glColor3dv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(Color3f)(GLfloat red, GLfloat green, GLfloat blue)
+@@ -117,7 +143,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(Color3fv)(const GLfloat * v)
+ {
+- DISPATCH(Color3fv, (v), (F, "glColor3fv(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2]));
++ DISPATCH(Color3fv, (v), (F, "glColor3fv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(Color3i)(GLint red, GLint green, GLint blue)
+@@ -187,7 +213,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(Color4dv)(const GLdouble * v)
+ {
+- DISPATCH(Color4dv, (v), (F, "glColor4dv(%p /* %g, %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2], v[3]));
++ DISPATCH(Color4dv, (v), (F, "glColor4dv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(Color4f)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+@@ -197,7 +223,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(Color4fv)(const GLfloat * v)
+ {
+- DISPATCH(Color4fv, (v), (F, "glColor4fv(%p /* %g, %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2], v[3]));
++ DISPATCH(Color4fv, (v), (F, "glColor4fv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(Color4i)(GLint red, GLint green, GLint blue, GLint alpha)
+@@ -322,7 +348,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(Normal3dv)(const GLdouble * v)
+ {
+- DISPATCH(Normal3dv, (v), (F, "glNormal3dv(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2]));
++ DISPATCH(Normal3dv, (v), (F, "glNormal3dv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(Normal3f)(GLfloat nx, GLfloat ny, GLfloat nz)
+@@ -332,7 +358,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(Normal3fv)(const GLfloat * v)
+ {
+- DISPATCH(Normal3fv, (v), (F, "glNormal3fv(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2]));
++ DISPATCH(Normal3fv, (v), (F, "glNormal3fv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(Normal3i)(GLint nx, GLint ny, GLint nz)
+@@ -362,7 +388,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(RasterPos2dv)(const GLdouble * v)
+ {
+- DISPATCH(RasterPos2dv, (v), (F, "glRasterPos2dv(%p /* %g, %g */);\n", (const void *) v, v[0], v[1]));
++ DISPATCH(RasterPos2dv, (v), (F, "glRasterPos2dv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(RasterPos2f)(GLfloat x, GLfloat y)
+@@ -372,7 +398,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(RasterPos2fv)(const GLfloat * v)
+ {
+- DISPATCH(RasterPos2fv, (v), (F, "glRasterPos2fv(%p /* %g, %g */);\n", (const void *) v, v[0], v[1]));
++ DISPATCH(RasterPos2fv, (v), (F, "glRasterPos2fv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(RasterPos2i)(GLint x, GLint y)
+@@ -402,7 +428,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(RasterPos3dv)(const GLdouble * v)
+ {
+- DISPATCH(RasterPos3dv, (v), (F, "glRasterPos3dv(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2]));
++ DISPATCH(RasterPos3dv, (v), (F, "glRasterPos3dv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(RasterPos3f)(GLfloat x, GLfloat y, GLfloat z)
+@@ -412,7 +438,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(RasterPos3fv)(const GLfloat * v)
+ {
+- DISPATCH(RasterPos3fv, (v), (F, "glRasterPos3fv(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2]));
++ DISPATCH(RasterPos3fv, (v), (F, "glRasterPos3fv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(RasterPos3i)(GLint x, GLint y, GLint z)
+@@ -442,7 +468,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(RasterPos4dv)(const GLdouble * v)
+ {
+- DISPATCH(RasterPos4dv, (v), (F, "glRasterPos4dv(%p /* %g, %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2], v[3]));
++ DISPATCH(RasterPos4dv, (v), (F, "glRasterPos4dv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(RasterPos4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+@@ -452,7 +478,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(RasterPos4fv)(const GLfloat * v)
+ {
+- DISPATCH(RasterPos4fv, (v), (F, "glRasterPos4fv(%p /* %g, %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2], v[3]));
++ DISPATCH(RasterPos4fv, (v), (F, "glRasterPos4fv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(RasterPos4i)(GLint x, GLint y, GLint z, GLint w)
+@@ -562,7 +588,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(TexCoord2dv)(const GLdouble * v)
+ {
+- DISPATCH(TexCoord2dv, (v), (F, "glTexCoord2dv(%p /* %g, %g */);\n", (const void *) v, v[0], v[1]));
++ DISPATCH(TexCoord2dv, (v), (F, "glTexCoord2dv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(TexCoord2f)(GLfloat s, GLfloat t)
+@@ -572,7 +598,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(TexCoord2fv)(const GLfloat * v)
+ {
+- DISPATCH(TexCoord2fv, (v), (F, "glTexCoord2fv(%p /* %g, %g */);\n", (const void *) v, v[0], v[1]));
++ DISPATCH(TexCoord2fv, (v), (F, "glTexCoord2fv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(TexCoord2i)(GLint s, GLint t)
+@@ -602,7 +628,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(TexCoord3dv)(const GLdouble * v)
+ {
+- DISPATCH(TexCoord3dv, (v), (F, "glTexCoord3dv(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2]));
++ DISPATCH(TexCoord3dv, (v), (F, "glTexCoord3dv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(TexCoord3f)(GLfloat s, GLfloat t, GLfloat r)
+@@ -612,7 +638,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(TexCoord3fv)(const GLfloat * v)
+ {
+- DISPATCH(TexCoord3fv, (v), (F, "glTexCoord3fv(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2]));
++ DISPATCH(TexCoord3fv, (v), (F, "glTexCoord3fv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(TexCoord3i)(GLint s, GLint t, GLint r)
+@@ -642,7 +668,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(TexCoord4dv)(const GLdouble * v)
+ {
+- DISPATCH(TexCoord4dv, (v), (F, "glTexCoord4dv(%p /* %g, %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2], v[3]));
++ DISPATCH(TexCoord4dv, (v), (F, "glTexCoord4dv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(TexCoord4f)(GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+@@ -652,7 +678,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(TexCoord4fv)(const GLfloat * v)
+ {
+- DISPATCH(TexCoord4fv, (v), (F, "glTexCoord4fv(%p /* %g, %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2], v[3]));
++ DISPATCH(TexCoord4fv, (v), (F, "glTexCoord4fv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(TexCoord4i)(GLint s, GLint t, GLint r, GLint q)
+@@ -682,7 +708,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(Vertex2dv)(const GLdouble * v)
+ {
+- DISPATCH(Vertex2dv, (v), (F, "glVertex2dv(%p /* %g, %g */);\n", (const void *) v, v[0], v[1]));
++ DISPATCH(Vertex2dv, (v), (F, "glVertex2dv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(Vertex2f)(GLfloat x, GLfloat y)
+@@ -692,7 +718,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(Vertex2fv)(const GLfloat * v)
+ {
+- DISPATCH(Vertex2fv, (v), (F, "glVertex2fv(%p /* %g, %g */);\n", (const void *) v, v[0], v[1]));
++ DISPATCH(Vertex2fv, (v), (F, "glVertex2fv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(Vertex2i)(GLint x, GLint y)
+@@ -722,7 +748,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(Vertex3dv)(const GLdouble * v)
+ {
+- DISPATCH(Vertex3dv, (v), (F, "glVertex3dv(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2]));
++ DISPATCH(Vertex3dv, (v), (F, "glVertex3dv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(Vertex3f)(GLfloat x, GLfloat y, GLfloat z)
+@@ -732,7 +758,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(Vertex3fv)(const GLfloat * v)
+ {
+- DISPATCH(Vertex3fv, (v), (F, "glVertex3fv(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2]));
++ DISPATCH(Vertex3fv, (v), (F, "glVertex3fv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(Vertex3i)(GLint x, GLint y, GLint z)
+@@ -762,7 +788,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(Vertex4dv)(const GLdouble * v)
+ {
+- DISPATCH(Vertex4dv, (v), (F, "glVertex4dv(%p /* %g, %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2], v[3]));
++ DISPATCH(Vertex4dv, (v), (F, "glVertex4dv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(Vertex4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+@@ -772,7 +798,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(Vertex4fv)(const GLfloat * v)
+ {
+- DISPATCH(Vertex4fv, (v), (F, "glVertex4fv(%p /* %g, %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2], v[3]));
++ DISPATCH(Vertex4fv, (v), (F, "glVertex4fv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(Vertex4i)(GLint x, GLint y, GLint z, GLint w)
+@@ -1062,7 +1088,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(Clear)(GLbitfield mask)
+ {
+- DISPATCH(Clear, (mask), (F, "glClear(%p);\n", (const void *) mask));
++ DISPATCH(Clear, (mask), (F, "glClear(%d);\n", mask));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(ClearAccum)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+@@ -1142,7 +1168,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(PushAttrib)(GLbitfield mask)
+ {
+- DISPATCH(PushAttrib, (mask), (F, "glPushAttrib(%p);\n", (const void *) mask));
++ DISPATCH(PushAttrib, (mask), (F, "glPushAttrib(%d);\n", mask));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(Map1d)(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble * points)
+@@ -1212,7 +1238,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(EvalCoord2dv)(const GLdouble * u)
+ {
+- DISPATCH(EvalCoord2dv, (u), (F, "glEvalCoord2dv(%p /* %g, %g */);\n", (const void *) u, u[0], u[1]));
++ DISPATCH(EvalCoord2dv, (u), (F, "glEvalCoord2dv(%p);\n", (const void *) u));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(EvalCoord2f)(GLfloat u, GLfloat v)
+@@ -1222,7 +1248,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(EvalCoord2fv)(const GLfloat * u)
+ {
+- DISPATCH(EvalCoord2fv, (u), (F, "glEvalCoord2fv(%p /* %g, %g */);\n", (const void *) u, u[0], u[1]));
++ DISPATCH(EvalCoord2fv, (u), (F, "glEvalCoord2fv(%p);\n", (const void *) u));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(EvalMesh1)(GLenum mode, GLint i1, GLint i2)
+@@ -1580,6 +1606,11 @@
+ DISPATCH(ArrayElement, (i), (F, "glArrayElement(%d);\n", i));
+ }
+
++KEYWORD1 void KEYWORD2 NAME(BindTexture)(GLenum target, GLuint texture)
++{
++ DISPATCH(BindTexture, (target, texture), (F, "glBindTexture(0x%x, %d);\n", target, texture));
++}
++
+ KEYWORD1 void KEYWORD2 NAME(ColorPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer)
+ {
+ DISPATCH(ColorPointer, (size, type, stride, pointer), (F, "glColorPointer(%d, 0x%x, %d, %p);\n", size, type, stride, (const void *) pointer));
+@@ -1610,14 +1641,19 @@
+ DISPATCH(EnableClientState, (array), (F, "glEnableClientState(0x%x);\n", array));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetPointerv)(GLenum pname, GLvoid ** params)
++KEYWORD1 void KEYWORD2 NAME(IndexPointer)(GLenum type, GLsizei stride, const GLvoid * pointer)
+ {
+- DISPATCH(GetPointerv, (pname, params), (F, "glGetPointerv(0x%x, %p);\n", pname, (const void *) params));
++ DISPATCH(IndexPointer, (type, stride, pointer), (F, "glIndexPointer(0x%x, %d, %p);\n", type, stride, (const void *) pointer));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(IndexPointer)(GLenum type, GLsizei stride, const GLvoid * pointer)
++KEYWORD1 void KEYWORD2 NAME(Indexub)(GLubyte c)
+ {
+- DISPATCH(IndexPointer, (type, stride, pointer), (F, "glIndexPointer(0x%x, %d, %p);\n", type, stride, (const void *) pointer));
++ DISPATCH(Indexub, (c), (F, "glIndexub(%d);\n", c));
++}
++
++KEYWORD1 void KEYWORD2 NAME(Indexubv)(const GLubyte * c)
++{
++ DISPATCH(Indexubv, (c), (F, "glIndexubv(%p);\n", (const void *) c));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(InterleavedArrays)(GLenum format, GLsizei stride, const GLvoid * pointer)
+@@ -1630,6 +1666,11 @@
+ DISPATCH(NormalPointer, (type, stride, pointer), (F, "glNormalPointer(0x%x, %d, %p);\n", type, stride, (const void *) pointer));
+ }
+
++KEYWORD1 void KEYWORD2 NAME(PolygonOffset)(GLfloat factor, GLfloat units)
++{
++ DISPATCH(PolygonOffset, (factor, units), (F, "glPolygonOffset(%f, %f);\n", factor, units));
++}
++
+ KEYWORD1 void KEYWORD2 NAME(TexCoordPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer)
+ {
+ DISPATCH(TexCoordPointer, (size, type, stride, pointer), (F, "glTexCoordPointer(%d, 0x%x, %d, %p);\n", size, type, stride, (const void *) pointer));
+@@ -1640,9 +1681,9 @@
+ DISPATCH(VertexPointer, (size, type, stride, pointer), (F, "glVertexPointer(%d, 0x%x, %d, %p);\n", size, type, stride, (const void *) pointer));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(PolygonOffset)(GLfloat factor, GLfloat units)
++KEYWORD1 GLboolean KEYWORD2 NAME(AreTexturesResident)(GLsizei n, const GLuint * textures, GLboolean * residences)
+ {
+- DISPATCH(PolygonOffset, (factor, units), (F, "glPolygonOffset(%f, %f);\n", factor, units));
++ RETURN_DISPATCH(AreTexturesResident, (n, textures, residences), (F, "glAreTexturesResident(%d, %p, %p);\n", n, (const void *) textures, (const void *) residences));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(CopyTexImage1D)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border)
+@@ -1665,26 +1706,6 @@
+ DISPATCH(CopyTexSubImage2D, (target, level, xoffset, yoffset, x, y, width, height), (F, "glCopyTexSubImage2D(0x%x, %d, %d, %d, %d, %d, %d, %d);\n", target, level, xoffset, yoffset, x, y, width, height));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(TexSubImage1D)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid * pixels)
+-{
+- DISPATCH(TexSubImage1D, (target, level, xoffset, width, format, type, pixels), (F, "glTexSubImage1D(0x%x, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, xoffset, width, format, type, (const void *) pixels));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(TexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels)
+-{
+- DISPATCH(TexSubImage2D, (target, level, xoffset, yoffset, width, height, format, type, pixels), (F, "glTexSubImage2D(0x%x, %d, %d, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, xoffset, yoffset, width, height, format, type, (const void *) pixels));
+-}
+-
+-KEYWORD1 GLboolean KEYWORD2 NAME(AreTexturesResident)(GLsizei n, const GLuint * textures, GLboolean * residences)
+-{
+- RETURN_DISPATCH(AreTexturesResident, (n, textures, residences), (F, "glAreTexturesResident(%d, %p, %p);\n", n, (const void *) textures, (const void *) residences));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(BindTexture)(GLenum target, GLuint texture)
+-{
+- DISPATCH(BindTexture, (target, texture), (F, "glBindTexture(0x%x, %d);\n", target, texture));
+-}
+-
+ KEYWORD1 void KEYWORD2 NAME(DeleteTextures)(GLsizei n, const GLuint * textures)
+ {
+ DISPATCH(DeleteTextures, (n, textures), (F, "glDeleteTextures(%d, %p);\n", n, (const void *) textures));
+@@ -1695,6 +1716,11 @@
+ DISPATCH(GenTextures, (n, textures), (F, "glGenTextures(%d, %p);\n", n, (const void *) textures));
+ }
+
++KEYWORD1 void KEYWORD2 NAME(GetPointerv)(GLenum pname, GLvoid ** params)
++{
++ DISPATCH(GetPointerv, (pname, params), (F, "glGetPointerv(0x%x, %p);\n", pname, (const void *) params));
++}
++
+ KEYWORD1 GLboolean KEYWORD2 NAME(IsTexture)(GLuint texture)
+ {
+ RETURN_DISPATCH(IsTexture, (texture), (F, "glIsTexture(%d);\n", texture));
+@@ -1705,14 +1731,14 @@
+ DISPATCH(PrioritizeTextures, (n, textures, priorities), (F, "glPrioritizeTextures(%d, %p, %p);\n", n, (const void *) textures, (const void *) priorities));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(Indexub)(GLubyte c)
++KEYWORD1 void KEYWORD2 NAME(TexSubImage1D)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid * pixels)
+ {
+- DISPATCH(Indexub, (c), (F, "glIndexub(%d);\n", c));
++ DISPATCH(TexSubImage1D, (target, level, xoffset, width, format, type, pixels), (F, "glTexSubImage1D(0x%x, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, xoffset, width, format, type, (const void *) pixels));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(Indexubv)(const GLubyte * c)
++KEYWORD1 void KEYWORD2 NAME(TexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels)
+ {
+- DISPATCH(Indexubv, (c), (F, "glIndexubv(%p);\n", (const void *) c));
++ DISPATCH(TexSubImage2D, (target, level, xoffset, yoffset, width, height, format, type, pixels), (F, "glTexSubImage2D(0x%x, %d, %d, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, xoffset, yoffset, width, height, format, type, (const void *) pixels));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(PopClientAttrib)(void)
+@@ -1722,7 +1748,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(PushClientAttrib)(GLbitfield mask)
+ {
+- DISPATCH(PushClientAttrib, (mask), (F, "glPushClientAttrib(%p);\n", (const void *) mask));
++ DISPATCH(PushClientAttrib, (mask), (F, "glPushClientAttrib(%d);\n", mask));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(BlendColor)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+@@ -1972,7 +1998,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2dvARB)(GLenum target, const GLdouble * v)
+ {
+- DISPATCH(MultiTexCoord2dvARB, (target, v), (F, "glMultiTexCoord2dvARB(0x%x, %p /* %g, %g */);\n", target, (const void *) v, v[0], v[1]));
++ DISPATCH(MultiTexCoord2dvARB, (target, v), (F, "glMultiTexCoord2dvARB(0x%x, %p);\n", target, (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2fARB)(GLenum target, GLfloat s, GLfloat t)
+@@ -1982,7 +2008,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2fvARB)(GLenum target, const GLfloat * v)
+ {
+- DISPATCH(MultiTexCoord2fvARB, (target, v), (F, "glMultiTexCoord2fvARB(0x%x, %p /* %g, %g */);\n", target, (const void *) v, v[0], v[1]));
++ DISPATCH(MultiTexCoord2fvARB, (target, v), (F, "glMultiTexCoord2fvARB(0x%x, %p);\n", target, (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2iARB)(GLenum target, GLint s, GLint t)
+@@ -2012,7 +2038,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3dvARB)(GLenum target, const GLdouble * v)
+ {
+- DISPATCH(MultiTexCoord3dvARB, (target, v), (F, "glMultiTexCoord3dvARB(0x%x, %p /* %g, %g, %g */);\n", target, (const void *) v, v[0], v[1], v[2]));
++ DISPATCH(MultiTexCoord3dvARB, (target, v), (F, "glMultiTexCoord3dvARB(0x%x, %p);\n", target, (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3fARB)(GLenum target, GLfloat s, GLfloat t, GLfloat r)
+@@ -2022,7 +2048,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3fvARB)(GLenum target, const GLfloat * v)
+ {
+- DISPATCH(MultiTexCoord3fvARB, (target, v), (F, "glMultiTexCoord3fvARB(0x%x, %p /* %g, %g, %g */);\n", target, (const void *) v, v[0], v[1], v[2]));
++ DISPATCH(MultiTexCoord3fvARB, (target, v), (F, "glMultiTexCoord3fvARB(0x%x, %p);\n", target, (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3iARB)(GLenum target, GLint s, GLint t, GLint r)
+@@ -2052,7 +2078,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4dvARB)(GLenum target, const GLdouble * v)
+ {
+- DISPATCH(MultiTexCoord4dvARB, (target, v), (F, "glMultiTexCoord4dvARB(0x%x, %p /* %g, %g, %g, %g */);\n", target, (const void *) v, v[0], v[1], v[2], v[3]));
++ DISPATCH(MultiTexCoord4dvARB, (target, v), (F, "glMultiTexCoord4dvARB(0x%x, %p);\n", target, (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4fARB)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+@@ -2062,7 +2088,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4fvARB)(GLenum target, const GLfloat * v)
+ {
+- DISPATCH(MultiTexCoord4fvARB, (target, v), (F, "glMultiTexCoord4fvARB(0x%x, %p /* %g, %g, %g, %g */);\n", target, (const void *) v, v[0], v[1], v[2], v[3]));
++ DISPATCH(MultiTexCoord4fvARB, (target, v), (F, "glMultiTexCoord4fvARB(0x%x, %p);\n", target, (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4iARB)(GLenum target, GLint s, GLint t, GLint r, GLint q)
+@@ -2115,1853 +2141,1719 @@
+ DISPATCH(__unused413, (), (F, "gl__unused413();\n"));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(CompressedTexImage3DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * data)
++KEYWORD1 void KEYWORD2 NAME(PolygonOffsetEXT)(GLfloat factor, GLfloat bias)
+ {
+- DISPATCH(CompressedTexImage3DARB, (target, level, internalformat, width, height, depth, border, imageSize, data), (F, "glCompressedTexImage3DARB(0x%x, %d, 0x%x, %d, %d, %d, %d, %d, %p);\n", target, level, internalformat, width, height, depth, border, imageSize, (const void *) data));
++ DISPATCH(PolygonOffsetEXT, (factor, bias), (F, "glPolygonOffsetEXT(%f, %f);\n", factor, bias));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(CompressedTexImage2DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data)
++KEYWORD1 void KEYWORD2 NAME(GetTexFilterFuncSGIS)(GLenum target, GLenum filter, GLfloat * weights)
+ {
+- DISPATCH(CompressedTexImage2DARB, (target, level, internalformat, width, height, border, imageSize, data), (F, "glCompressedTexImage2DARB(0x%x, %d, 0x%x, %d, %d, %d, %d, %p);\n", target, level, internalformat, width, height, border, imageSize, (const void *) data));
++ DISPATCH(GetTexFilterFuncSGIS, (target, filter, weights), (F, "glGetTexFilterFuncSGIS(0x%x, 0x%x, %p);\n", target, filter, (const void *) weights));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(CompressedTexImage1DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * data)
++KEYWORD1 void KEYWORD2 NAME(TexFilterFuncSGIS)(GLenum target, GLenum filter, GLsizei n, const GLfloat * weights)
+ {
+- DISPATCH(CompressedTexImage1DARB, (target, level, internalformat, width, border, imageSize, data), (F, "glCompressedTexImage1DARB(0x%x, %d, 0x%x, %d, %d, %d, %p);\n", target, level, internalformat, width, border, imageSize, (const void *) data));
++ DISPATCH(TexFilterFuncSGIS, (target, filter, n, weights), (F, "glTexFilterFuncSGIS(0x%x, 0x%x, %d, %p);\n", target, filter, n, (const void *) weights));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(CompressedTexSubImage3DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data)
++KEYWORD1 void KEYWORD2 NAME(GetHistogramEXT)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values)
+ {
+- DISPATCH(CompressedTexSubImage3DARB, (target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data), (F, "glCompressedTexSubImage3DARB(0x%x, %d, %d, %d, %d, %d, %d, %d, 0x%x, %d, %p);\n", target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, (const void *) data));
++ DISPATCH(GetHistogramEXT, (target, reset, format, type, values), (F, "glGetHistogramEXT(0x%x, %d, 0x%x, 0x%x, %p);\n", target, reset, format, type, (const void *) values));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(CompressedTexSubImage2DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data)
++KEYWORD1 void KEYWORD2 NAME(GetHistogramParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params)
+ {
+- DISPATCH(CompressedTexSubImage2DARB, (target, level, xoffset, yoffset, width, height, format, imageSize, data), (F, "glCompressedTexSubImage2DARB(0x%x, %d, %d, %d, %d, %d, 0x%x, %d, %p);\n", target, level, xoffset, yoffset, width, height, format, imageSize, (const void *) data));
++ DISPATCH(GetHistogramParameterfvEXT, (target, pname, params), (F, "glGetHistogramParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(CompressedTexSubImage1DARB)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data)
++KEYWORD1 void KEYWORD2 NAME(GetHistogramParameterivEXT)(GLenum target, GLenum pname, GLint * params)
+ {
+- DISPATCH(CompressedTexSubImage1DARB, (target, level, xoffset, width, format, imageSize, data), (F, "glCompressedTexSubImage1DARB(0x%x, %d, %d, %d, 0x%x, %d, %p);\n", target, level, xoffset, width, format, imageSize, (const void *) data));
++ DISPATCH(GetHistogramParameterivEXT, (target, pname, params), (F, "glGetHistogramParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetCompressedTexImageARB)(GLenum target, GLint level, GLvoid * img)
++KEYWORD1 void KEYWORD2 NAME(GetMinmaxEXT)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values)
+ {
+- DISPATCH(GetCompressedTexImageARB, (target, level, img), (F, "glGetCompressedTexImageARB(0x%x, %d, %p);\n", target, level, (const void *) img));
++ DISPATCH(GetMinmaxEXT, (target, reset, format, type, values), (F, "glGetMinmaxEXT(0x%x, %d, 0x%x, 0x%x, %p);\n", target, reset, format, type, (const void *) values));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ActiveTexture)(GLenum texture)
++KEYWORD1 void KEYWORD2 NAME(GetMinmaxParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params)
+ {
+- DISPATCH(ActiveTextureARB, (texture), (F, "glActiveTexture(0x%x);\n", texture));
++ DISPATCH(GetMinmaxParameterfvEXT, (target, pname, params), (F, "glGetMinmaxParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ClientActiveTexture)(GLenum texture)
++KEYWORD1 void KEYWORD2 NAME(GetMinmaxParameterivEXT)(GLenum target, GLenum pname, GLint * params)
+ {
+- DISPATCH(ClientActiveTextureARB, (texture), (F, "glClientActiveTexture(0x%x);\n", texture));
++ DISPATCH(GetMinmaxParameterivEXT, (target, pname, params), (F, "glGetMinmaxParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1d)(GLenum target, GLdouble s)
++KEYWORD1 void KEYWORD2 NAME(GetConvolutionFilterEXT)(GLenum target, GLenum format, GLenum type, GLvoid * image)
+ {
+- DISPATCH(MultiTexCoord1dARB, (target, s), (F, "glMultiTexCoord1d(0x%x, %f);\n", target, s));
++ DISPATCH(GetConvolutionFilterEXT, (target, format, type, image), (F, "glGetConvolutionFilterEXT(0x%x, 0x%x, 0x%x, %p);\n", target, format, type, (const void *) image));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1dv)(GLenum target, const GLdouble * v)
++KEYWORD1 void KEYWORD2 NAME(GetConvolutionParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params)
+ {
+- DISPATCH(MultiTexCoord1dvARB, (target, v), (F, "glMultiTexCoord1dv(0x%x, %p);\n", target, (const void *) v));
++ DISPATCH(GetConvolutionParameterfvEXT, (target, pname, params), (F, "glGetConvolutionParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1f)(GLenum target, GLfloat s)
++KEYWORD1 void KEYWORD2 NAME(GetConvolutionParameterivEXT)(GLenum target, GLenum pname, GLint * params)
+ {
+- DISPATCH(MultiTexCoord1fARB, (target, s), (F, "glMultiTexCoord1f(0x%x, %f);\n", target, s));
++ DISPATCH(GetConvolutionParameterivEXT, (target, pname, params), (F, "glGetConvolutionParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1fv)(GLenum target, const GLfloat * v)
++KEYWORD1 void KEYWORD2 NAME(GetSeparableFilterEXT)(GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span)
+ {
+- DISPATCH(MultiTexCoord1fvARB, (target, v), (F, "glMultiTexCoord1fv(0x%x, %p);\n", target, (const void *) v));
++ DISPATCH(GetSeparableFilterEXT, (target, format, type, row, column, span), (F, "glGetSeparableFilterEXT(0x%x, 0x%x, 0x%x, %p, %p, %p);\n", target, format, type, (const void *) row, (const void *) column, (const void *) span));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1i)(GLenum target, GLint s)
++KEYWORD1 void KEYWORD2 NAME(GetColorTableSGI)(GLenum target, GLenum format, GLenum type, GLvoid * table)
+ {
+- DISPATCH(MultiTexCoord1iARB, (target, s), (F, "glMultiTexCoord1i(0x%x, %d);\n", target, s));
++ DISPATCH(GetColorTableSGI, (target, format, type, table), (F, "glGetColorTableSGI(0x%x, 0x%x, 0x%x, %p);\n", target, format, type, (const void *) table));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1iv)(GLenum target, const GLint * v)
++KEYWORD1 void KEYWORD2 NAME(GetColorTableParameterfvSGI)(GLenum target, GLenum pname, GLfloat * params)
+ {
+- DISPATCH(MultiTexCoord1ivARB, (target, v), (F, "glMultiTexCoord1iv(0x%x, %p);\n", target, (const void *) v));
++ DISPATCH(GetColorTableParameterfvSGI, (target, pname, params), (F, "glGetColorTableParameterfvSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1s)(GLenum target, GLshort s)
++KEYWORD1 void KEYWORD2 NAME(GetColorTableParameterivSGI)(GLenum target, GLenum pname, GLint * params)
+ {
+- DISPATCH(MultiTexCoord1sARB, (target, s), (F, "glMultiTexCoord1s(0x%x, %d);\n", target, s));
++ DISPATCH(GetColorTableParameterivSGI, (target, pname, params), (F, "glGetColorTableParameterivSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1sv)(GLenum target, const GLshort * v)
++KEYWORD1 void KEYWORD2 NAME(PixelTexGenSGIX)(GLenum mode)
+ {
+- DISPATCH(MultiTexCoord1svARB, (target, v), (F, "glMultiTexCoord1sv(0x%x, %p);\n", target, (const void *) v));
++ DISPATCH(PixelTexGenSGIX, (mode), (F, "glPixelTexGenSGIX(0x%x);\n", mode));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2d)(GLenum target, GLdouble s, GLdouble t)
++KEYWORD1 void KEYWORD2 NAME(PixelTexGenParameteriSGIS)(GLenum pname, GLint param)
+ {
+- DISPATCH(MultiTexCoord2dARB, (target, s, t), (F, "glMultiTexCoord2d(0x%x, %f, %f);\n", target, s, t));
++ DISPATCH(PixelTexGenParameteriSGIS, (pname, param), (F, "glPixelTexGenParameteriSGIS(0x%x, %d);\n", pname, param));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2dv)(GLenum target, const GLdouble * v)
++KEYWORD1 void KEYWORD2 NAME(PixelTexGenParameterivSGIS)(GLenum pname, const GLint * params)
+ {
+- DISPATCH(MultiTexCoord2dvARB, (target, v), (F, "glMultiTexCoord2dv(0x%x, %p /* %g, %g */);\n", target, (const void *) v, v[0], v[1]));
++ DISPATCH(PixelTexGenParameterivSGIS, (pname, params), (F, "glPixelTexGenParameterivSGIS(0x%x, %p);\n", pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2f)(GLenum target, GLfloat s, GLfloat t)
++KEYWORD1 void KEYWORD2 NAME(PixelTexGenParameterfSGIS)(GLenum pname, GLfloat param)
+ {
+- DISPATCH(MultiTexCoord2fARB, (target, s, t), (F, "glMultiTexCoord2f(0x%x, %f, %f);\n", target, s, t));
++ DISPATCH(PixelTexGenParameterfSGIS, (pname, param), (F, "glPixelTexGenParameterfSGIS(0x%x, %f);\n", pname, param));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2fv)(GLenum target, const GLfloat * v)
++KEYWORD1 void KEYWORD2 NAME(PixelTexGenParameterfvSGIS)(GLenum pname, const GLfloat * params)
+ {
+- DISPATCH(MultiTexCoord2fvARB, (target, v), (F, "glMultiTexCoord2fv(0x%x, %p /* %g, %g */);\n", target, (const void *) v, v[0], v[1]));
++ DISPATCH(PixelTexGenParameterfvSGIS, (pname, params), (F, "glPixelTexGenParameterfvSGIS(0x%x, %p);\n", pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2i)(GLenum target, GLint s, GLint t)
++KEYWORD1 void KEYWORD2 NAME(GetPixelTexGenParameterivSGIS)(GLenum pname, GLint * params)
+ {
+- DISPATCH(MultiTexCoord2iARB, (target, s, t), (F, "glMultiTexCoord2i(0x%x, %d, %d);\n", target, s, t));
++ DISPATCH(GetPixelTexGenParameterivSGIS, (pname, params), (F, "glGetPixelTexGenParameterivSGIS(0x%x, %p);\n", pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2iv)(GLenum target, const GLint * v)
++KEYWORD1 void KEYWORD2 NAME(GetPixelTexGenParameterfvSGIS)(GLenum pname, GLfloat * params)
+ {
+- DISPATCH(MultiTexCoord2ivARB, (target, v), (F, "glMultiTexCoord2iv(0x%x, %p);\n", target, (const void *) v));
++ DISPATCH(GetPixelTexGenParameterfvSGIS, (pname, params), (F, "glGetPixelTexGenParameterfvSGIS(0x%x, %p);\n", pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2s)(GLenum target, GLshort s, GLshort t)
++KEYWORD1 void KEYWORD2 NAME(TexImage4DSGIS)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid * pixels)
+ {
+- DISPATCH(MultiTexCoord2sARB, (target, s, t), (F, "glMultiTexCoord2s(0x%x, %d, %d);\n", target, s, t));
++ DISPATCH(TexImage4DSGIS, (target, level, internalformat, width, height, depth, size4d, border, format, type, pixels), (F, "glTexImage4DSGIS(0x%x, %d, 0x%x, %d, %d, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, internalformat, width, height, depth, size4d, border, format, type, (const void *) pixels));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2sv)(GLenum target, const GLshort * v)
++KEYWORD1 void KEYWORD2 NAME(TexSubImage4DSGIS)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid * pixels)
+ {
+- DISPATCH(MultiTexCoord2svARB, (target, v), (F, "glMultiTexCoord2sv(0x%x, %p);\n", target, (const void *) v));
++ DISPATCH(TexSubImage4DSGIS, (target, level, xoffset, yoffset, zoffset, woffset, width, height, depth, size4d, format, type, pixels), (F, "glTexSubImage4DSGIS(0x%x, %d, %d, %d, %d, %d, %d, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, xoffset, yoffset, zoffset, woffset, width, height, depth, size4d, format, type, (const void *) pixels));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3d)(GLenum target, GLdouble s, GLdouble t, GLdouble r)
++KEYWORD1 GLboolean KEYWORD2 NAME(AreTexturesResidentEXT)(GLsizei n, const GLuint * textures, GLboolean * residences)
+ {
+- DISPATCH(MultiTexCoord3dARB, (target, s, t, r), (F, "glMultiTexCoord3d(0x%x, %f, %f, %f);\n", target, s, t, r));
++ RETURN_DISPATCH(AreTexturesResidentEXT, (n, textures, residences), (F, "glAreTexturesResidentEXT(%d, %p, %p);\n", n, (const void *) textures, (const void *) residences));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3dv)(GLenum target, const GLdouble * v)
++KEYWORD1 void KEYWORD2 NAME(GenTexturesEXT)(GLsizei n, GLuint * textures)
+ {
+- DISPATCH(MultiTexCoord3dvARB, (target, v), (F, "glMultiTexCoord3dv(0x%x, %p /* %g, %g, %g */);\n", target, (const void *) v, v[0], v[1], v[2]));
++ DISPATCH(GenTexturesEXT, (n, textures), (F, "glGenTexturesEXT(%d, %p);\n", n, (const void *) textures));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3f)(GLenum target, GLfloat s, GLfloat t, GLfloat r)
++KEYWORD1 GLboolean KEYWORD2 NAME(IsTextureEXT)(GLuint texture)
+ {
+- DISPATCH(MultiTexCoord3fARB, (target, s, t, r), (F, "glMultiTexCoord3f(0x%x, %f, %f, %f);\n", target, s, t, r));
++ RETURN_DISPATCH(IsTextureEXT, (texture), (F, "glIsTextureEXT(%d);\n", texture));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3fv)(GLenum target, const GLfloat * v)
++KEYWORD1 void KEYWORD2 NAME(DetailTexFuncSGIS)(GLenum target, GLsizei n, const GLfloat * points)
+ {
+- DISPATCH(MultiTexCoord3fvARB, (target, v), (F, "glMultiTexCoord3fv(0x%x, %p /* %g, %g, %g */);\n", target, (const void *) v, v[0], v[1], v[2]));
++ DISPATCH(DetailTexFuncSGIS, (target, n, points), (F, "glDetailTexFuncSGIS(0x%x, %d, %p);\n", target, n, (const void *) points));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3i)(GLenum target, GLint s, GLint t, GLint r)
++KEYWORD1 void KEYWORD2 NAME(GetDetailTexFuncSGIS)(GLenum target, GLfloat * points)
+ {
+- DISPATCH(MultiTexCoord3iARB, (target, s, t, r), (F, "glMultiTexCoord3i(0x%x, %d, %d, %d);\n", target, s, t, r));
++ DISPATCH(GetDetailTexFuncSGIS, (target, points), (F, "glGetDetailTexFuncSGIS(0x%x, %p);\n", target, (const void *) points));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3iv)(GLenum target, const GLint * v)
++KEYWORD1 void KEYWORD2 NAME(SharpenTexFuncSGIS)(GLenum target, GLsizei n, const GLfloat * points)
+ {
+- DISPATCH(MultiTexCoord3ivARB, (target, v), (F, "glMultiTexCoord3iv(0x%x, %p);\n", target, (const void *) v));
++ DISPATCH(SharpenTexFuncSGIS, (target, n, points), (F, "glSharpenTexFuncSGIS(0x%x, %d, %p);\n", target, n, (const void *) points));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3s)(GLenum target, GLshort s, GLshort t, GLshort r)
++KEYWORD1 void KEYWORD2 NAME(GetSharpenTexFuncSGIS)(GLenum target, GLfloat * points)
+ {
+- DISPATCH(MultiTexCoord3sARB, (target, s, t, r), (F, "glMultiTexCoord3s(0x%x, %d, %d, %d);\n", target, s, t, r));
++ DISPATCH(GetSharpenTexFuncSGIS, (target, points), (F, "glGetSharpenTexFuncSGIS(0x%x, %p);\n", target, (const void *) points));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3sv)(GLenum target, const GLshort * v)
++KEYWORD1 void KEYWORD2 NAME(SampleMaskSGIS)(GLclampf value, GLboolean invert)
+ {
+- DISPATCH(MultiTexCoord3svARB, (target, v), (F, "glMultiTexCoord3sv(0x%x, %p);\n", target, (const void *) v));
++ DISPATCH(SampleMaskSGIS, (value, invert), (F, "glSampleMaskSGIS(%f, %d);\n", value, invert));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4d)(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q)
++KEYWORD1 void KEYWORD2 NAME(SamplePatternSGIS)(GLenum pattern)
+ {
+- DISPATCH(MultiTexCoord4dARB, (target, s, t, r, q), (F, "glMultiTexCoord4d(0x%x, %f, %f, %f, %f);\n", target, s, t, r, q));
++ DISPATCH(SamplePatternSGIS, (pattern), (F, "glSamplePatternSGIS(0x%x);\n", pattern));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4dv)(GLenum target, const GLdouble * v)
++KEYWORD1 void KEYWORD2 NAME(ColorPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer)
+ {
+- DISPATCH(MultiTexCoord4dvARB, (target, v), (F, "glMultiTexCoord4dv(0x%x, %p /* %g, %g, %g, %g */);\n", target, (const void *) v, v[0], v[1], v[2], v[3]));
++ DISPATCH(ColorPointerEXT, (size, type, stride, count, pointer), (F, "glColorPointerEXT(%d, 0x%x, %d, %d, %p);\n", size, type, stride, count, (const void *) pointer));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4f)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q)
++KEYWORD1 void KEYWORD2 NAME(EdgeFlagPointerEXT)(GLsizei stride, GLsizei count, const GLboolean * pointer)
+ {
+- DISPATCH(MultiTexCoord4fARB, (target, s, t, r, q), (F, "glMultiTexCoord4f(0x%x, %f, %f, %f, %f);\n", target, s, t, r, q));
++ DISPATCH(EdgeFlagPointerEXT, (stride, count, pointer), (F, "glEdgeFlagPointerEXT(%d, %d, %p);\n", stride, count, (const void *) pointer));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4fv)(GLenum target, const GLfloat * v)
++KEYWORD1 void KEYWORD2 NAME(IndexPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer)
+ {
+- DISPATCH(MultiTexCoord4fvARB, (target, v), (F, "glMultiTexCoord4fv(0x%x, %p /* %g, %g, %g, %g */);\n", target, (const void *) v, v[0], v[1], v[2], v[3]));
++ DISPATCH(IndexPointerEXT, (type, stride, count, pointer), (F, "glIndexPointerEXT(0x%x, %d, %d, %p);\n", type, stride, count, (const void *) pointer));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4i)(GLenum target, GLint s, GLint t, GLint r, GLint q)
++KEYWORD1 void KEYWORD2 NAME(NormalPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer)
+ {
+- DISPATCH(MultiTexCoord4iARB, (target, s, t, r, q), (F, "glMultiTexCoord4i(0x%x, %d, %d, %d, %d);\n", target, s, t, r, q));
++ DISPATCH(NormalPointerEXT, (type, stride, count, pointer), (F, "glNormalPointerEXT(0x%x, %d, %d, %p);\n", type, stride, count, (const void *) pointer));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4iv)(GLenum target, const GLint * v)
++KEYWORD1 void KEYWORD2 NAME(TexCoordPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer)
+ {
+- DISPATCH(MultiTexCoord4ivARB, (target, v), (F, "glMultiTexCoord4iv(0x%x, %p);\n", target, (const void *) v));
++ DISPATCH(TexCoordPointerEXT, (size, type, stride, count, pointer), (F, "glTexCoordPointerEXT(%d, 0x%x, %d, %d, %p);\n", size, type, stride, count, (const void *) pointer));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4s)(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q)
++KEYWORD1 void KEYWORD2 NAME(VertexPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer)
+ {
+- DISPATCH(MultiTexCoord4sARB, (target, s, t, r, q), (F, "glMultiTexCoord4s(0x%x, %d, %d, %d, %d);\n", target, s, t, r, q));
++ DISPATCH(VertexPointerEXT, (size, type, stride, count, pointer), (F, "glVertexPointerEXT(%d, 0x%x, %d, %d, %p);\n", size, type, stride, count, (const void *) pointer));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4sv)(GLenum target, const GLshort * v)
++KEYWORD1 void KEYWORD2 NAME(SpriteParameterfSGIX)(GLenum pname, GLfloat param)
+ {
+- DISPATCH(MultiTexCoord4svARB, (target, v), (F, "glMultiTexCoord4sv(0x%x, %p);\n", target, (const void *) v));
++ DISPATCH(SpriteParameterfSGIX, (pname, param), (F, "glSpriteParameterfSGIX(0x%x, %f);\n", pname, param));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(LoadTransposeMatrixf)(const GLfloat * m)
++KEYWORD1 void KEYWORD2 NAME(SpriteParameterfvSGIX)(GLenum pname, const GLfloat * params)
+ {
+- DISPATCH(LoadTransposeMatrixfARB, (m), (F, "glLoadTransposeMatrixf(%p);\n", (const void *) m));
++ DISPATCH(SpriteParameterfvSGIX, (pname, params), (F, "glSpriteParameterfvSGIX(0x%x, %p);\n", pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(LoadTransposeMatrixd)(const GLdouble * m)
++KEYWORD1 void KEYWORD2 NAME(SpriteParameteriSGIX)(GLenum pname, GLint param)
+ {
+- DISPATCH(LoadTransposeMatrixdARB, (m), (F, "glLoadTransposeMatrixd(%p);\n", (const void *) m));
++ DISPATCH(SpriteParameteriSGIX, (pname, param), (F, "glSpriteParameteriSGIX(0x%x, %d);\n", pname, param));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultTransposeMatrixf)(const GLfloat * m)
++KEYWORD1 void KEYWORD2 NAME(SpriteParameterivSGIX)(GLenum pname, const GLint * params)
+ {
+- DISPATCH(MultTransposeMatrixfARB, (m), (F, "glMultTransposeMatrixf(%p);\n", (const void *) m));
++ DISPATCH(SpriteParameterivSGIX, (pname, params), (F, "glSpriteParameterivSGIX(0x%x, %p);\n", pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultTransposeMatrixd)(const GLdouble * m)
++KEYWORD1 void KEYWORD2 NAME(PointParameterfEXT)(GLenum pname, GLfloat param)
+ {
+- DISPATCH(MultTransposeMatrixdARB, (m), (F, "glMultTransposeMatrixd(%p);\n", (const void *) m));
++ DISPATCH(PointParameterfEXT, (pname, param), (F, "glPointParameterfEXT(0x%x, %f);\n", pname, param));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(SampleCoverage)(GLclampf value, GLboolean invert)
++KEYWORD1 void KEYWORD2 NAME(PointParameterfvEXT)(GLenum pname, const GLfloat * params)
+ {
+- DISPATCH(SampleCoverageARB, (value, invert), (F, "glSampleCoverage(%f, %d);\n", value, invert));
++ DISPATCH(PointParameterfvEXT, (pname, params), (F, "glPointParameterfvEXT(0x%x, %p);\n", pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(CompressedTexImage3D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * data)
++KEYWORD1 GLint KEYWORD2 NAME(GetInstrumentsSGIX)(void)
+ {
+- DISPATCH(CompressedTexImage3DARB, (target, level, internalformat, width, height, depth, border, imageSize, data), (F, "glCompressedTexImage3D(0x%x, %d, 0x%x, %d, %d, %d, %d, %d, %p);\n", target, level, internalformat, width, height, depth, border, imageSize, (const void *) data));
++ RETURN_DISPATCH(GetInstrumentsSGIX, (), (F, "glGetInstrumentsSGIX();\n"));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(CompressedTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data)
++KEYWORD1 void KEYWORD2 NAME(InstrumentsBufferSGIX)(GLsizei size, GLint * buffer)
+ {
+- DISPATCH(CompressedTexImage2DARB, (target, level, internalformat, width, height, border, imageSize, data), (F, "glCompressedTexImage2D(0x%x, %d, 0x%x, %d, %d, %d, %d, %p);\n", target, level, internalformat, width, height, border, imageSize, (const void *) data));
++ DISPATCH(InstrumentsBufferSGIX, (size, buffer), (F, "glInstrumentsBufferSGIX(%d, %p);\n", size, (const void *) buffer));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(CompressedTexImage1D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * data)
++KEYWORD1 GLint KEYWORD2 NAME(PollInstrumentsSGIX)(GLint * marker_p)
+ {
+- DISPATCH(CompressedTexImage1DARB, (target, level, internalformat, width, border, imageSize, data), (F, "glCompressedTexImage1D(0x%x, %d, 0x%x, %d, %d, %d, %p);\n", target, level, internalformat, width, border, imageSize, (const void *) data));
++ RETURN_DISPATCH(PollInstrumentsSGIX, (marker_p), (F, "glPollInstrumentsSGIX(%p);\n", (const void *) marker_p));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(CompressedTexSubImage3D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data)
++KEYWORD1 void KEYWORD2 NAME(ReadInstrumentsSGIX)(GLint marker)
+ {
+- DISPATCH(CompressedTexSubImage3DARB, (target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data), (F, "glCompressedTexSubImage3D(0x%x, %d, %d, %d, %d, %d, %d, %d, 0x%x, %d, %p);\n", target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, (const void *) data));
++ DISPATCH(ReadInstrumentsSGIX, (marker), (F, "glReadInstrumentsSGIX(%d);\n", marker));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(CompressedTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data)
++KEYWORD1 void KEYWORD2 NAME(StartInstrumentsSGIX)(void)
+ {
+- DISPATCH(CompressedTexSubImage2DARB, (target, level, xoffset, yoffset, width, height, format, imageSize, data), (F, "glCompressedTexSubImage2D(0x%x, %d, %d, %d, %d, %d, 0x%x, %d, %p);\n", target, level, xoffset, yoffset, width, height, format, imageSize, (const void *) data));
++ DISPATCH(StartInstrumentsSGIX, (), (F, "glStartInstrumentsSGIX();\n"));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(CompressedTexSubImage1D)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data)
++KEYWORD1 void KEYWORD2 NAME(StopInstrumentsSGIX)(GLint marker)
+ {
+- DISPATCH(CompressedTexSubImage1DARB, (target, level, xoffset, width, format, imageSize, data), (F, "glCompressedTexSubImage1D(0x%x, %d, %d, %d, 0x%x, %d, %p);\n", target, level, xoffset, width, format, imageSize, (const void *) data));
++ DISPATCH(StopInstrumentsSGIX, (marker), (F, "glStopInstrumentsSGIX(%d);\n", marker));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetCompressedTexImage)(GLenum target, GLint level, GLvoid * img)
++KEYWORD1 void KEYWORD2 NAME(FrameZoomSGIX)(GLint factor)
+ {
+- DISPATCH(GetCompressedTexImageARB, (target, level, img), (F, "glGetCompressedTexImage(0x%x, %d, %p);\n", target, level, (const void *) img));
++ DISPATCH(FrameZoomSGIX, (factor), (F, "glFrameZoomSGIX(%d);\n", factor));
+ }
+
+-/* No dispatch for WeightbvARB() */
+-/* No dispatch for WeightsvARB() */
+-/* No dispatch for WeightivARB() */
+-/* No dispatch for WeightfvARB() */
+-/* No dispatch for WeightdvARB() */
+-/* No dispatch for WeightubvARB() */
+-/* No dispatch for WeightusvARB() */
+-/* No dispatch for WeightuivARB() */
+-/* No dispatch for WeightPointerARB() */
+-/* No dispatch for VertexBlendARB() */
+-/* No dispatch for CurrentPaletteMatrixARB() */
+-/* No dispatch for MatrixIndexubvARB() */
+-/* No dispatch for MatrixIndexusvARB() */
+-/* No dispatch for MatrixIndexuivARB() */
+-/* No dispatch for MatrixIndexPointerARB() */
+-KEYWORD1 void KEYWORD2 NAME(BlendColorEXT)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
++KEYWORD1 void KEYWORD2 NAME(TagSampleBufferSGIX)(void)
+ {
+- DISPATCH(BlendColor, (red, green, blue, alpha), (F, "glBlendColorEXT(%f, %f, %f, %f);\n", red, green, blue, alpha));
++ DISPATCH(TagSampleBufferSGIX, (), (F, "glTagSampleBufferSGIX();\n"));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(PolygonOffsetEXT)(GLfloat factor, GLfloat bias)
++KEYWORD1 void KEYWORD2 NAME(ReferencePlaneSGIX)(const GLdouble * equation)
+ {
+- DISPATCH(PolygonOffsetEXT, (factor, bias), (F, "glPolygonOffsetEXT(%f, %f);\n", factor, bias));
++ DISPATCH(ReferencePlaneSGIX, (equation), (F, "glReferencePlaneSGIX(%p);\n", (const void *) equation));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(TexImage3DEXT)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels)
++KEYWORD1 void KEYWORD2 NAME(FlushRasterSGIX)(void)
+ {
+- DISPATCH(TexImage3D, (target, level, internalformat, width, height, depth, border, format, type, pixels), (F, "glTexImage3DEXT(0x%x, %d, 0x%x, %d, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, internalformat, width, height, depth, border, format, type, (const void *) pixels));
++ DISPATCH(FlushRasterSGIX, (), (F, "glFlushRasterSGIX();\n"));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(TexSubImage3DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels)
++KEYWORD1 void KEYWORD2 NAME(GetListParameterfvSGIX)(GLuint list, GLenum pname, GLfloat * params)
+ {
+- DISPATCH(TexSubImage3D, (target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels), (F, "glTexSubImage3DEXT(0x%x, %d, %d, %d, %d, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, (const void *) pixels));
++ DISPATCH(GetListParameterfvSGIX, (list, pname, params), (F, "glGetListParameterfvSGIX(%d, 0x%x, %p);\n", list, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetTexFilterFuncSGIS)(GLenum target, GLenum filter, GLfloat * weights)
++KEYWORD1 void KEYWORD2 NAME(GetListParameterivSGIX)(GLuint list, GLenum pname, GLint * params)
+ {
+- DISPATCH(GetTexFilterFuncSGIS, (target, filter, weights), (F, "glGetTexFilterFuncSGIS(0x%x, 0x%x, %p);\n", target, filter, (const void *) weights));
++ DISPATCH(GetListParameterivSGIX, (list, pname, params), (F, "glGetListParameterivSGIX(%d, 0x%x, %p);\n", list, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(TexFilterFuncSGIS)(GLenum target, GLenum filter, GLsizei n, const GLfloat * weights)
++KEYWORD1 void KEYWORD2 NAME(ListParameterfSGIX)(GLuint list, GLenum pname, GLfloat param)
+ {
+- DISPATCH(TexFilterFuncSGIS, (target, filter, n, weights), (F, "glTexFilterFuncSGIS(0x%x, 0x%x, %d, %p);\n", target, filter, n, (const void *) weights));
++ DISPATCH(ListParameterfSGIX, (list, pname, param), (F, "glListParameterfSGIX(%d, 0x%x, %f);\n", list, pname, param));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(TexSubImage1DEXT)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid * pixels)
++KEYWORD1 void KEYWORD2 NAME(ListParameterfvSGIX)(GLuint list, GLenum pname, const GLfloat * params)
+ {
+- DISPATCH(TexSubImage1D, (target, level, xoffset, width, format, type, pixels), (F, "glTexSubImage1DEXT(0x%x, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, xoffset, width, format, type, (const void *) pixels));
++ DISPATCH(ListParameterfvSGIX, (list, pname, params), (F, "glListParameterfvSGIX(%d, 0x%x, %p);\n", list, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(TexSubImage2DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels)
++KEYWORD1 void KEYWORD2 NAME(ListParameteriSGIX)(GLuint list, GLenum pname, GLint param)
+ {
+- DISPATCH(TexSubImage2D, (target, level, xoffset, yoffset, width, height, format, type, pixels), (F, "glTexSubImage2DEXT(0x%x, %d, %d, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, xoffset, yoffset, width, height, format, type, (const void *) pixels));
++ DISPATCH(ListParameteriSGIX, (list, pname, param), (F, "glListParameteriSGIX(%d, 0x%x, %d);\n", list, pname, param));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(CopyTexImage1DEXT)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border)
++KEYWORD1 void KEYWORD2 NAME(ListParameterivSGIX)(GLuint list, GLenum pname, const GLint * params)
+ {
+- DISPATCH(CopyTexImage1D, (target, level, internalformat, x, y, width, border), (F, "glCopyTexImage1DEXT(0x%x, %d, 0x%x, %d, %d, %d, %d);\n", target, level, internalformat, x, y, width, border));
++ DISPATCH(ListParameterivSGIX, (list, pname, params), (F, "glListParameterivSGIX(%d, 0x%x, %p);\n", list, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(CopyTexImage2DEXT)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
++KEYWORD1 void KEYWORD2 NAME(FragmentColorMaterialSGIX)(GLenum face, GLenum mode)
+ {
+- DISPATCH(CopyTexImage2D, (target, level, internalformat, x, y, width, height, border), (F, "glCopyTexImage2DEXT(0x%x, %d, 0x%x, %d, %d, %d, %d, %d);\n", target, level, internalformat, x, y, width, height, border));
++ DISPATCH(FragmentColorMaterialSGIX, (face, mode), (F, "glFragmentColorMaterialSGIX(0x%x, 0x%x);\n", face, mode));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(CopyTexSubImage1DEXT)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
++KEYWORD1 void KEYWORD2 NAME(FragmentLightfSGIX)(GLenum light, GLenum pname, GLfloat param)
+ {
+- DISPATCH(CopyTexSubImage1D, (target, level, xoffset, x, y, width), (F, "glCopyTexSubImage1DEXT(0x%x, %d, %d, %d, %d, %d);\n", target, level, xoffset, x, y, width));
++ DISPATCH(FragmentLightfSGIX, (light, pname, param), (F, "glFragmentLightfSGIX(0x%x, 0x%x, %f);\n", light, pname, param));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(CopyTexSubImage2DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
++KEYWORD1 void KEYWORD2 NAME(FragmentLightfvSGIX)(GLenum light, GLenum pname, const GLfloat * params)
+ {
+- DISPATCH(CopyTexSubImage2D, (target, level, xoffset, yoffset, x, y, width, height), (F, "glCopyTexSubImage2DEXT(0x%x, %d, %d, %d, %d, %d, %d, %d);\n", target, level, xoffset, yoffset, x, y, width, height));
++ DISPATCH(FragmentLightfvSGIX, (light, pname, params), (F, "glFragmentLightfvSGIX(0x%x, 0x%x, %p);\n", light, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(CopyTexSubImage3DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
++KEYWORD1 void KEYWORD2 NAME(FragmentLightiSGIX)(GLenum light, GLenum pname, GLint param)
+ {
+- DISPATCH(CopyTexSubImage3D, (target, level, xoffset, yoffset, zoffset, x, y, width, height), (F, "glCopyTexSubImage3DEXT(0x%x, %d, %d, %d, %d, %d, %d, %d, %d);\n", target, level, xoffset, yoffset, zoffset, x, y, width, height));
++ DISPATCH(FragmentLightiSGIX, (light, pname, param), (F, "glFragmentLightiSGIX(0x%x, 0x%x, %d);\n", light, pname, param));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetHistogramEXT)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values)
++KEYWORD1 void KEYWORD2 NAME(FragmentLightivSGIX)(GLenum light, GLenum pname, const GLint * params)
+ {
+- DISPATCH(GetHistogramEXT, (target, reset, format, type, values), (F, "glGetHistogramEXT(0x%x, %d, 0x%x, 0x%x, %p);\n", target, reset, format, type, (const void *) values));
++ DISPATCH(FragmentLightivSGIX, (light, pname, params), (F, "glFragmentLightivSGIX(0x%x, 0x%x, %p);\n", light, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetHistogramParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params)
++KEYWORD1 void KEYWORD2 NAME(FragmentLightModelfSGIX)(GLenum pname, GLfloat param)
+ {
+- DISPATCH(GetHistogramParameterfvEXT, (target, pname, params), (F, "glGetHistogramParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
++ DISPATCH(FragmentLightModelfSGIX, (pname, param), (F, "glFragmentLightModelfSGIX(0x%x, %f);\n", pname, param));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetHistogramParameterivEXT)(GLenum target, GLenum pname, GLint * params)
++KEYWORD1 void KEYWORD2 NAME(FragmentLightModelfvSGIX)(GLenum pname, const GLfloat * params)
+ {
+- DISPATCH(GetHistogramParameterivEXT, (target, pname, params), (F, "glGetHistogramParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
++ DISPATCH(FragmentLightModelfvSGIX, (pname, params), (F, "glFragmentLightModelfvSGIX(0x%x, %p);\n", pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetMinmaxEXT)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values)
++KEYWORD1 void KEYWORD2 NAME(FragmentLightModeliSGIX)(GLenum pname, GLint param)
+ {
+- DISPATCH(GetMinmaxEXT, (target, reset, format, type, values), (F, "glGetMinmaxEXT(0x%x, %d, 0x%x, 0x%x, %p);\n", target, reset, format, type, (const void *) values));
++ DISPATCH(FragmentLightModeliSGIX, (pname, param), (F, "glFragmentLightModeliSGIX(0x%x, %d);\n", pname, param));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetMinmaxParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params)
++KEYWORD1 void KEYWORD2 NAME(FragmentLightModelivSGIX)(GLenum pname, const GLint * params)
+ {
+- DISPATCH(GetMinmaxParameterfvEXT, (target, pname, params), (F, "glGetMinmaxParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
++ DISPATCH(FragmentLightModelivSGIX, (pname, params), (F, "glFragmentLightModelivSGIX(0x%x, %p);\n", pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetMinmaxParameterivEXT)(GLenum target, GLenum pname, GLint * params)
++KEYWORD1 void KEYWORD2 NAME(FragmentMaterialfSGIX)(GLenum face, GLenum pname, GLfloat param)
+ {
+- DISPATCH(GetMinmaxParameterivEXT, (target, pname, params), (F, "glGetMinmaxParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
++ DISPATCH(FragmentMaterialfSGIX, (face, pname, param), (F, "glFragmentMaterialfSGIX(0x%x, 0x%x, %f);\n", face, pname, param));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(HistogramEXT)(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink)
++KEYWORD1 void KEYWORD2 NAME(FragmentMaterialfvSGIX)(GLenum face, GLenum pname, const GLfloat * params)
+ {
+- DISPATCH(Histogram, (target, width, internalformat, sink), (F, "glHistogramEXT(0x%x, %d, 0x%x, %d);\n", target, width, internalformat, sink));
++ DISPATCH(FragmentMaterialfvSGIX, (face, pname, params), (F, "glFragmentMaterialfvSGIX(0x%x, 0x%x, %p);\n", face, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MinmaxEXT)(GLenum target, GLenum internalformat, GLboolean sink)
++KEYWORD1 void KEYWORD2 NAME(FragmentMaterialiSGIX)(GLenum face, GLenum pname, GLint param)
+ {
+- DISPATCH(Minmax, (target, internalformat, sink), (F, "glMinmaxEXT(0x%x, 0x%x, %d);\n", target, internalformat, sink));
++ DISPATCH(FragmentMaterialiSGIX, (face, pname, param), (F, "glFragmentMaterialiSGIX(0x%x, 0x%x, %d);\n", face, pname, param));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ResetHistogramEXT)(GLenum target)
++KEYWORD1 void KEYWORD2 NAME(FragmentMaterialivSGIX)(GLenum face, GLenum pname, const GLint * params)
+ {
+- DISPATCH(ResetHistogram, (target), (F, "glResetHistogramEXT(0x%x);\n", target));
++ DISPATCH(FragmentMaterialivSGIX, (face, pname, params), (F, "glFragmentMaterialivSGIX(0x%x, 0x%x, %p);\n", face, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ResetMinmaxEXT)(GLenum target)
++KEYWORD1 void KEYWORD2 NAME(GetFragmentLightfvSGIX)(GLenum light, GLenum pname, GLfloat * params)
+ {
+- DISPATCH(ResetMinmax, (target), (F, "glResetMinmaxEXT(0x%x);\n", target));
++ DISPATCH(GetFragmentLightfvSGIX, (light, pname, params), (F, "glGetFragmentLightfvSGIX(0x%x, 0x%x, %p);\n", light, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ConvolutionFilter1DEXT)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * image)
++KEYWORD1 void KEYWORD2 NAME(GetFragmentLightivSGIX)(GLenum light, GLenum pname, GLint * params)
+ {
+- DISPATCH(ConvolutionFilter1D, (target, internalformat, width, format, type, image), (F, "glConvolutionFilter1DEXT(0x%x, 0x%x, %d, 0x%x, 0x%x, %p);\n", target, internalformat, width, format, type, (const void *) image));
++ DISPATCH(GetFragmentLightivSGIX, (light, pname, params), (F, "glGetFragmentLightivSGIX(0x%x, 0x%x, %p);\n", light, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ConvolutionFilter2DEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * image)
++KEYWORD1 void KEYWORD2 NAME(GetFragmentMaterialfvSGIX)(GLenum face, GLenum pname, GLfloat * params)
+ {
+- DISPATCH(ConvolutionFilter2D, (target, internalformat, width, height, format, type, image), (F, "glConvolutionFilter2DEXT(0x%x, 0x%x, %d, %d, 0x%x, 0x%x, %p);\n", target, internalformat, width, height, format, type, (const void *) image));
++ DISPATCH(GetFragmentMaterialfvSGIX, (face, pname, params), (F, "glGetFragmentMaterialfvSGIX(0x%x, 0x%x, %p);\n", face, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ConvolutionParameterfEXT)(GLenum target, GLenum pname, GLfloat params)
++KEYWORD1 void KEYWORD2 NAME(GetFragmentMaterialivSGIX)(GLenum face, GLenum pname, GLint * params)
+ {
+- DISPATCH(ConvolutionParameterf, (target, pname, params), (F, "glConvolutionParameterfEXT(0x%x, 0x%x, %f);\n", target, pname, params));
++ DISPATCH(GetFragmentMaterialivSGIX, (face, pname, params), (F, "glGetFragmentMaterialivSGIX(0x%x, 0x%x, %p);\n", face, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ConvolutionParameterfvEXT)(GLenum target, GLenum pname, const GLfloat * params)
++KEYWORD1 void KEYWORD2 NAME(LightEnviSGIX)(GLenum pname, GLint param)
+ {
+- DISPATCH(ConvolutionParameterfv, (target, pname, params), (F, "glConvolutionParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
++ DISPATCH(LightEnviSGIX, (pname, param), (F, "glLightEnviSGIX(0x%x, %d);\n", pname, param));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ConvolutionParameteriEXT)(GLenum target, GLenum pname, GLint params)
++KEYWORD1 void KEYWORD2 NAME(VertexWeightfEXT)(GLfloat weight)
+ {
+- DISPATCH(ConvolutionParameteri, (target, pname, params), (F, "glConvolutionParameteriEXT(0x%x, 0x%x, %d);\n", target, pname, params));
++ DISPATCH(VertexWeightfEXT, (weight), (F, "glVertexWeightfEXT(%f);\n", weight));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ConvolutionParameterivEXT)(GLenum target, GLenum pname, const GLint * params)
++KEYWORD1 void KEYWORD2 NAME(VertexWeightfvEXT)(const GLfloat * weight)
+ {
+- DISPATCH(ConvolutionParameteriv, (target, pname, params), (F, "glConvolutionParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
++ DISPATCH(VertexWeightfvEXT, (weight), (F, "glVertexWeightfvEXT(%p);\n", (const void *) weight));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(CopyConvolutionFilter1DEXT)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width)
++KEYWORD1 void KEYWORD2 NAME(VertexWeightPointerEXT)(GLsizei size, GLenum type, GLsizei stride, const GLvoid * pointer)
+ {
+- DISPATCH(CopyConvolutionFilter1D, (target, internalformat, x, y, width), (F, "glCopyConvolutionFilter1DEXT(0x%x, 0x%x, %d, %d, %d);\n", target, internalformat, x, y, width));
++ DISPATCH(VertexWeightPointerEXT, (size, type, stride, pointer), (F, "glVertexWeightPointerEXT(%d, 0x%x, %d, %p);\n", size, type, stride, (const void *) pointer));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(CopyConvolutionFilter2DEXT)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height)
++KEYWORD1 void KEYWORD2 NAME(FlushVertexArrayRangeNV)(void)
+ {
+- DISPATCH(CopyConvolutionFilter2D, (target, internalformat, x, y, width, height), (F, "glCopyConvolutionFilter2DEXT(0x%x, 0x%x, %d, %d, %d, %d);\n", target, internalformat, x, y, width, height));
++ DISPATCH(FlushVertexArrayRangeNV, (), (F, "glFlushVertexArrayRangeNV();\n"));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetConvolutionFilterEXT)(GLenum target, GLenum format, GLenum type, GLvoid * image)
++KEYWORD1 void KEYWORD2 NAME(VertexArrayRangeNV)(GLsizei length, const GLvoid * pointer)
+ {
+- DISPATCH(GetConvolutionFilterEXT, (target, format, type, image), (F, "glGetConvolutionFilterEXT(0x%x, 0x%x, 0x%x, %p);\n", target, format, type, (const void *) image));
++ DISPATCH(VertexArrayRangeNV, (length, pointer), (F, "glVertexArrayRangeNV(%d, %p);\n", length, (const void *) pointer));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetConvolutionParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params)
++KEYWORD1 void KEYWORD2 NAME(CombinerParameterfvNV)(GLenum pname, const GLfloat * params)
+ {
+- DISPATCH(GetConvolutionParameterfvEXT, (target, pname, params), (F, "glGetConvolutionParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
++ DISPATCH(CombinerParameterfvNV, (pname, params), (F, "glCombinerParameterfvNV(0x%x, %p);\n", pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetConvolutionParameterivEXT)(GLenum target, GLenum pname, GLint * params)
++KEYWORD1 void KEYWORD2 NAME(CombinerParameterfNV)(GLenum pname, GLfloat param)
+ {
+- DISPATCH(GetConvolutionParameterivEXT, (target, pname, params), (F, "glGetConvolutionParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
++ DISPATCH(CombinerParameterfNV, (pname, param), (F, "glCombinerParameterfNV(0x%x, %f);\n", pname, param));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetSeparableFilterEXT)(GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span)
++KEYWORD1 void KEYWORD2 NAME(CombinerParameterivNV)(GLenum pname, const GLint * params)
+ {
+- DISPATCH(GetSeparableFilterEXT, (target, format, type, row, column, span), (F, "glGetSeparableFilterEXT(0x%x, 0x%x, 0x%x, %p, %p, %p);\n", target, format, type, (const void *) row, (const void *) column, (const void *) span));
++ DISPATCH(CombinerParameterivNV, (pname, params), (F, "glCombinerParameterivNV(0x%x, %p);\n", pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(SeparableFilter2DEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * row, const GLvoid * column)
++KEYWORD1 void KEYWORD2 NAME(CombinerParameteriNV)(GLenum pname, GLint param)
+ {
+- DISPATCH(SeparableFilter2D, (target, internalformat, width, height, format, type, row, column), (F, "glSeparableFilter2DEXT(0x%x, 0x%x, %d, %d, 0x%x, 0x%x, %p, %p);\n", target, internalformat, width, height, format, type, (const void *) row, (const void *) column));
++ DISPATCH(CombinerParameteriNV, (pname, param), (F, "glCombinerParameteriNV(0x%x, %d);\n", pname, param));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ColorTableSGI)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * table)
++KEYWORD1 void KEYWORD2 NAME(CombinerInputNV)(GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage)
+ {
+- DISPATCH(ColorTable, (target, internalformat, width, format, type, table), (F, "glColorTableSGI(0x%x, 0x%x, %d, 0x%x, 0x%x, %p);\n", target, internalformat, width, format, type, (const void *) table));
++ DISPATCH(CombinerInputNV, (stage, portion, variable, input, mapping, componentUsage), (F, "glCombinerInputNV(0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x);\n", stage, portion, variable, input, mapping, componentUsage));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ColorTableParameterfvSGI)(GLenum target, GLenum pname, const GLfloat * params)
++KEYWORD1 void KEYWORD2 NAME(CombinerOutputNV)(GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum)
+ {
+- DISPATCH(ColorTableParameterfv, (target, pname, params), (F, "glColorTableParameterfvSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
++ DISPATCH(CombinerOutputNV, (stage, portion, abOutput, cdOutput, sumOutput, scale, bias, abDotProduct, cdDotProduct, muxSum), (F, "glCombinerOutputNV(0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, %d, %d, %d);\n", stage, portion, abOutput, cdOutput, sumOutput, scale, bias, abDotProduct, cdDotProduct, muxSum));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ColorTableParameterivSGI)(GLenum target, GLenum pname, const GLint * params)
++KEYWORD1 void KEYWORD2 NAME(FinalCombinerInputNV)(GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage)
+ {
+- DISPATCH(ColorTableParameteriv, (target, pname, params), (F, "glColorTableParameterivSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
++ DISPATCH(FinalCombinerInputNV, (variable, input, mapping, componentUsage), (F, "glFinalCombinerInputNV(0x%x, 0x%x, 0x%x, 0x%x);\n", variable, input, mapping, componentUsage));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(CopyColorTableSGI)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width)
++KEYWORD1 void KEYWORD2 NAME(GetCombinerInputParameterfvNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat * params)
+ {
+- DISPATCH(CopyColorTable, (target, internalformat, x, y, width), (F, "glCopyColorTableSGI(0x%x, 0x%x, %d, %d, %d);\n", target, internalformat, x, y, width));
++ DISPATCH(GetCombinerInputParameterfvNV, (stage, portion, variable, pname, params), (F, "glGetCombinerInputParameterfvNV(0x%x, 0x%x, 0x%x, 0x%x, %p);\n", stage, portion, variable, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetColorTableSGI)(GLenum target, GLenum format, GLenum type, GLvoid * table)
++KEYWORD1 void KEYWORD2 NAME(GetCombinerInputParameterivNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint * params)
+ {
+- DISPATCH(GetColorTableSGI, (target, format, type, table), (F, "glGetColorTableSGI(0x%x, 0x%x, 0x%x, %p);\n", target, format, type, (const void *) table));
++ DISPATCH(GetCombinerInputParameterivNV, (stage, portion, variable, pname, params), (F, "glGetCombinerInputParameterivNV(0x%x, 0x%x, 0x%x, 0x%x, %p);\n", stage, portion, variable, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetColorTableParameterfvSGI)(GLenum target, GLenum pname, GLfloat * params)
++KEYWORD1 void KEYWORD2 NAME(GetCombinerOutputParameterfvNV)(GLenum stage, GLenum portion, GLenum pname, GLfloat * params)
+ {
+- DISPATCH(GetColorTableParameterfvSGI, (target, pname, params), (F, "glGetColorTableParameterfvSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
++ DISPATCH(GetCombinerOutputParameterfvNV, (stage, portion, pname, params), (F, "glGetCombinerOutputParameterfvNV(0x%x, 0x%x, 0x%x, %p);\n", stage, portion, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetColorTableParameterivSGI)(GLenum target, GLenum pname, GLint * params)
++KEYWORD1 void KEYWORD2 NAME(GetCombinerOutputParameterivNV)(GLenum stage, GLenum portion, GLenum pname, GLint * params)
+ {
+- DISPATCH(GetColorTableParameterivSGI, (target, pname, params), (F, "glGetColorTableParameterivSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
++ DISPATCH(GetCombinerOutputParameterivNV, (stage, portion, pname, params), (F, "glGetCombinerOutputParameterivNV(0x%x, 0x%x, 0x%x, %p);\n", stage, portion, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(PixelTexGenSGIX)(GLenum mode)
++KEYWORD1 void KEYWORD2 NAME(GetFinalCombinerInputParameterfvNV)(GLenum variable, GLenum pname, GLfloat * params)
+ {
+- DISPATCH(PixelTexGenSGIX, (mode), (F, "glPixelTexGenSGIX(0x%x);\n", mode));
++ DISPATCH(GetFinalCombinerInputParameterfvNV, (variable, pname, params), (F, "glGetFinalCombinerInputParameterfvNV(0x%x, 0x%x, %p);\n", variable, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(PixelTexGenParameteriSGIS)(GLenum pname, GLint param)
++KEYWORD1 void KEYWORD2 NAME(GetFinalCombinerInputParameterivNV)(GLenum variable, GLenum pname, GLint * params)
+ {
+- DISPATCH(PixelTexGenParameteriSGIS, (pname, param), (F, "glPixelTexGenParameteriSGIS(0x%x, %d);\n", pname, param));
++ DISPATCH(GetFinalCombinerInputParameterivNV, (variable, pname, params), (F, "glGetFinalCombinerInputParameterivNV(0x%x, 0x%x, %p);\n", variable, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(PixelTexGenParameterivSGIS)(GLenum pname, const GLint * params)
++KEYWORD1 void KEYWORD2 NAME(ResizeBuffersMESA)(void)
+ {
+- DISPATCH(PixelTexGenParameterivSGIS, (pname, params), (F, "glPixelTexGenParameterivSGIS(0x%x, %p);\n", pname, (const void *) params));
++ DISPATCH(ResizeBuffersMESA, (), (F, "glResizeBuffersMESA();\n"));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(PixelTexGenParameterfSGIS)(GLenum pname, GLfloat param)
++KEYWORD1 void KEYWORD2 NAME(WindowPos2dMESA)(GLdouble x, GLdouble y)
+ {
+- DISPATCH(PixelTexGenParameterfSGIS, (pname, param), (F, "glPixelTexGenParameterfSGIS(0x%x, %f);\n", pname, param));
++ DISPATCH(WindowPos2dMESA, (x, y), (F, "glWindowPos2dMESA(%f, %f);\n", x, y));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(PixelTexGenParameterfvSGIS)(GLenum pname, const GLfloat * params)
++KEYWORD1 void KEYWORD2 NAME(WindowPos2dvMESA)(const GLdouble * v)
+ {
+- DISPATCH(PixelTexGenParameterfvSGIS, (pname, params), (F, "glPixelTexGenParameterfvSGIS(0x%x, %p);\n", pname, (const void *) params));
++ DISPATCH(WindowPos2dvMESA, (v), (F, "glWindowPos2dvMESA(%p);\n", (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetPixelTexGenParameterivSGIS)(GLenum pname, GLint * params)
++KEYWORD1 void KEYWORD2 NAME(WindowPos2fMESA)(GLfloat x, GLfloat y)
+ {
+- DISPATCH(GetPixelTexGenParameterivSGIS, (pname, params), (F, "glGetPixelTexGenParameterivSGIS(0x%x, %p);\n", pname, (const void *) params));
++ DISPATCH(WindowPos2fMESA, (x, y), (F, "glWindowPos2fMESA(%f, %f);\n", x, y));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetPixelTexGenParameterfvSGIS)(GLenum pname, GLfloat * params)
++KEYWORD1 void KEYWORD2 NAME(WindowPos2fvMESA)(const GLfloat * v)
+ {
+- DISPATCH(GetPixelTexGenParameterfvSGIS, (pname, params), (F, "glGetPixelTexGenParameterfvSGIS(0x%x, %p);\n", pname, (const void *) params));
++ DISPATCH(WindowPos2fvMESA, (v), (F, "glWindowPos2fvMESA(%p);\n", (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(TexImage4DSGIS)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid * pixels)
++KEYWORD1 void KEYWORD2 NAME(WindowPos2iMESA)(GLint x, GLint y)
+ {
+- DISPATCH(TexImage4DSGIS, (target, level, internalformat, width, height, depth, size4d, border, format, type, pixels), (F, "glTexImage4DSGIS(0x%x, %d, 0x%x, %d, %d, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, internalformat, width, height, depth, size4d, border, format, type, (const void *) pixels));
++ DISPATCH(WindowPos2iMESA, (x, y), (F, "glWindowPos2iMESA(%d, %d);\n", x, y));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(TexSubImage4DSGIS)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid * pixels)
++KEYWORD1 void KEYWORD2 NAME(WindowPos2ivMESA)(const GLint * v)
+ {
+- DISPATCH(TexSubImage4DSGIS, (target, level, xoffset, yoffset, zoffset, woffset, width, height, depth, size4d, format, type, pixels), (F, "glTexSubImage4DSGIS(0x%x, %d, %d, %d, %d, %d, %d, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, xoffset, yoffset, zoffset, woffset, width, height, depth, size4d, format, type, (const void *) pixels));
++ DISPATCH(WindowPos2ivMESA, (v), (F, "glWindowPos2ivMESA(%p);\n", (const void *) v));
+ }
+
+-KEYWORD1 GLboolean KEYWORD2 NAME(AreTexturesResidentEXT)(GLsizei n, const GLuint * textures, GLboolean * residences)
++KEYWORD1 void KEYWORD2 NAME(WindowPos2sMESA)(GLshort x, GLshort y)
+ {
+- RETURN_DISPATCH(AreTexturesResidentEXT, (n, textures, residences), (F, "glAreTexturesResidentEXT(%d, %p, %p);\n", n, (const void *) textures, (const void *) residences));
++ DISPATCH(WindowPos2sMESA, (x, y), (F, "glWindowPos2sMESA(%d, %d);\n", x, y));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(BindTextureEXT)(GLenum target, GLuint texture)
++KEYWORD1 void KEYWORD2 NAME(WindowPos2svMESA)(const GLshort * v)
+ {
+- DISPATCH(BindTexture, (target, texture), (F, "glBindTextureEXT(0x%x, %d);\n", target, texture));
++ DISPATCH(WindowPos2svMESA, (v), (F, "glWindowPos2svMESA(%p);\n", (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(DeleteTexturesEXT)(GLsizei n, const GLuint * textures)
++KEYWORD1 void KEYWORD2 NAME(WindowPos3dMESA)(GLdouble x, GLdouble y, GLdouble z)
+ {
+- DISPATCH(DeleteTextures, (n, textures), (F, "glDeleteTexturesEXT(%d, %p);\n", n, (const void *) textures));
++ DISPATCH(WindowPos3dMESA, (x, y, z), (F, "glWindowPos3dMESA(%f, %f, %f);\n", x, y, z));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GenTexturesEXT)(GLsizei n, GLuint * textures)
++KEYWORD1 void KEYWORD2 NAME(WindowPos3dvMESA)(const GLdouble * v)
+ {
+- DISPATCH(GenTexturesEXT, (n, textures), (F, "glGenTexturesEXT(%d, %p);\n", n, (const void *) textures));
++ DISPATCH(WindowPos3dvMESA, (v), (F, "glWindowPos3dvMESA(%p);\n", (const void *) v));
+ }
+
+-KEYWORD1 GLboolean KEYWORD2 NAME(IsTextureEXT)(GLuint texture)
++KEYWORD1 void KEYWORD2 NAME(WindowPos3fMESA)(GLfloat x, GLfloat y, GLfloat z)
+ {
+- RETURN_DISPATCH(IsTextureEXT, (texture), (F, "glIsTextureEXT(%d);\n", texture));
++ DISPATCH(WindowPos3fMESA, (x, y, z), (F, "glWindowPos3fMESA(%f, %f, %f);\n", x, y, z));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(PrioritizeTexturesEXT)(GLsizei n, const GLuint * textures, const GLclampf * priorities)
++KEYWORD1 void KEYWORD2 NAME(WindowPos3fvMESA)(const GLfloat * v)
+ {
+- DISPATCH(PrioritizeTextures, (n, textures, priorities), (F, "glPrioritizeTexturesEXT(%d, %p, %p);\n", n, (const void *) textures, (const void *) priorities));
++ DISPATCH(WindowPos3fvMESA, (v), (F, "glWindowPos3fvMESA(%p);\n", (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(DetailTexFuncSGIS)(GLenum target, GLsizei n, const GLfloat * points)
++KEYWORD1 void KEYWORD2 NAME(WindowPos3iMESA)(GLint x, GLint y, GLint z)
+ {
+- DISPATCH(DetailTexFuncSGIS, (target, n, points), (F, "glDetailTexFuncSGIS(0x%x, %d, %p);\n", target, n, (const void *) points));
++ DISPATCH(WindowPos3iMESA, (x, y, z), (F, "glWindowPos3iMESA(%d, %d, %d);\n", x, y, z));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetDetailTexFuncSGIS)(GLenum target, GLfloat * points)
++KEYWORD1 void KEYWORD2 NAME(WindowPos3ivMESA)(const GLint * v)
+ {
+- DISPATCH(GetDetailTexFuncSGIS, (target, points), (F, "glGetDetailTexFuncSGIS(0x%x, %p);\n", target, (const void *) points));
++ DISPATCH(WindowPos3ivMESA, (v), (F, "glWindowPos3ivMESA(%p);\n", (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(SharpenTexFuncSGIS)(GLenum target, GLsizei n, const GLfloat * points)
++KEYWORD1 void KEYWORD2 NAME(WindowPos3sMESA)(GLshort x, GLshort y, GLshort z)
+ {
+- DISPATCH(SharpenTexFuncSGIS, (target, n, points), (F, "glSharpenTexFuncSGIS(0x%x, %d, %p);\n", target, n, (const void *) points));
++ DISPATCH(WindowPos3sMESA, (x, y, z), (F, "glWindowPos3sMESA(%d, %d, %d);\n", x, y, z));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetSharpenTexFuncSGIS)(GLenum target, GLfloat * points)
++KEYWORD1 void KEYWORD2 NAME(WindowPos3svMESA)(const GLshort * v)
+ {
+- DISPATCH(GetSharpenTexFuncSGIS, (target, points), (F, "glGetSharpenTexFuncSGIS(0x%x, %p);\n", target, (const void *) points));
++ DISPATCH(WindowPos3svMESA, (v), (F, "glWindowPos3svMESA(%p);\n", (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(SampleMaskSGIS)(GLclampf value, GLboolean invert)
++KEYWORD1 void KEYWORD2 NAME(WindowPos4dMESA)(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+ {
+- DISPATCH(SampleMaskSGIS, (value, invert), (F, "glSampleMaskSGIS(%f, %d);\n", value, invert));
++ DISPATCH(WindowPos4dMESA, (x, y, z, w), (F, "glWindowPos4dMESA(%f, %f, %f, %f);\n", x, y, z, w));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(SamplePatternSGIS)(GLenum pattern)
++KEYWORD1 void KEYWORD2 NAME(WindowPos4dvMESA)(const GLdouble * v)
+ {
+- DISPATCH(SamplePatternSGIS, (pattern), (F, "glSamplePatternSGIS(0x%x);\n", pattern));
++ DISPATCH(WindowPos4dvMESA, (v), (F, "glWindowPos4dvMESA(%p);\n", (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ArrayElementEXT)(GLint i)
++KEYWORD1 void KEYWORD2 NAME(WindowPos4fMESA)(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+ {
+- DISPATCH(ArrayElement, (i), (F, "glArrayElementEXT(%d);\n", i));
++ DISPATCH(WindowPos4fMESA, (x, y, z, w), (F, "glWindowPos4fMESA(%f, %f, %f, %f);\n", x, y, z, w));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ColorPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer)
++KEYWORD1 void KEYWORD2 NAME(WindowPos4fvMESA)(const GLfloat * v)
+ {
+- DISPATCH(ColorPointerEXT, (size, type, stride, count, pointer), (F, "glColorPointerEXT(%d, 0x%x, %d, %d, %p);\n", size, type, stride, count, (const void *) pointer));
++ DISPATCH(WindowPos4fvMESA, (v), (F, "glWindowPos4fvMESA(%p);\n", (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(DrawArraysEXT)(GLenum mode, GLint first, GLsizei count)
++KEYWORD1 void KEYWORD2 NAME(WindowPos4iMESA)(GLint x, GLint y, GLint z, GLint w)
+ {
+- DISPATCH(DrawArrays, (mode, first, count), (F, "glDrawArraysEXT(0x%x, %d, %d);\n", mode, first, count));
++ DISPATCH(WindowPos4iMESA, (x, y, z, w), (F, "glWindowPos4iMESA(%d, %d, %d, %d);\n", x, y, z, w));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(EdgeFlagPointerEXT)(GLsizei stride, GLsizei count, const GLboolean * pointer)
++KEYWORD1 void KEYWORD2 NAME(WindowPos4ivMESA)(const GLint * v)
+ {
+- DISPATCH(EdgeFlagPointerEXT, (stride, count, pointer), (F, "glEdgeFlagPointerEXT(%d, %d, %p);\n", stride, count, (const void *) pointer));
++ DISPATCH(WindowPos4ivMESA, (v), (F, "glWindowPos4ivMESA(%p);\n", (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetPointervEXT)(GLenum pname, GLvoid ** params)
++KEYWORD1 void KEYWORD2 NAME(WindowPos4sMESA)(GLshort x, GLshort y, GLshort z, GLshort w)
+ {
+- DISPATCH(GetPointerv, (pname, params), (F, "glGetPointervEXT(0x%x, %p);\n", pname, (const void *) params));
++ DISPATCH(WindowPos4sMESA, (x, y, z, w), (F, "glWindowPos4sMESA(%d, %d, %d, %d);\n", x, y, z, w));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(IndexPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer)
++KEYWORD1 void KEYWORD2 NAME(WindowPos4svMESA)(const GLshort * v)
+ {
+- DISPATCH(IndexPointerEXT, (type, stride, count, pointer), (F, "glIndexPointerEXT(0x%x, %d, %d, %p);\n", type, stride, count, (const void *) pointer));
++ DISPATCH(WindowPos4svMESA, (v), (F, "glWindowPos4svMESA(%p);\n", (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(NormalPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer)
++KEYWORD1 void KEYWORD2 NAME(BlendFuncSeparateEXT)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
+ {
+- DISPATCH(NormalPointerEXT, (type, stride, count, pointer), (F, "glNormalPointerEXT(0x%x, %d, %d, %p);\n", type, stride, count, (const void *) pointer));
++ DISPATCH(BlendFuncSeparateEXT, (sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha), (F, "glBlendFuncSeparateEXT(0x%x, 0x%x, 0x%x, 0x%x);\n", sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(TexCoordPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer)
++KEYWORD1 void KEYWORD2 NAME(IndexMaterialEXT)(GLenum face, GLenum mode)
+ {
+- DISPATCH(TexCoordPointerEXT, (size, type, stride, count, pointer), (F, "glTexCoordPointerEXT(%d, 0x%x, %d, %d, %p);\n", size, type, stride, count, (const void *) pointer));
++ DISPATCH(IndexMaterialEXT, (face, mode), (F, "glIndexMaterialEXT(0x%x, 0x%x);\n", face, mode));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer)
++KEYWORD1 void KEYWORD2 NAME(IndexFuncEXT)(GLenum func, GLclampf ref)
+ {
+- DISPATCH(VertexPointerEXT, (size, type, stride, count, pointer), (F, "glVertexPointerEXT(%d, 0x%x, %d, %d, %p);\n", size, type, stride, count, (const void *) pointer));
++ DISPATCH(IndexFuncEXT, (func, ref), (F, "glIndexFuncEXT(0x%x, %f);\n", func, ref));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(BlendEquationEXT)(GLenum mode)
++KEYWORD1 void KEYWORD2 NAME(LockArraysEXT)(GLint first, GLsizei count)
+ {
+- DISPATCH(BlendEquation, (mode), (F, "glBlendEquationEXT(0x%x);\n", mode));
++ DISPATCH(LockArraysEXT, (first, count), (F, "glLockArraysEXT(%d, %d);\n", first, count));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(SpriteParameterfSGIX)(GLenum pname, GLfloat param)
++KEYWORD1 void KEYWORD2 NAME(UnlockArraysEXT)(void)
+ {
+- DISPATCH(SpriteParameterfSGIX, (pname, param), (F, "glSpriteParameterfSGIX(0x%x, %f);\n", pname, param));
++ DISPATCH(UnlockArraysEXT, (), (F, "glUnlockArraysEXT();\n"));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(SpriteParameterfvSGIX)(GLenum pname, const GLfloat * params)
++KEYWORD1 void KEYWORD2 NAME(CullParameterdvEXT)(GLenum pname, GLdouble * params)
+ {
+- DISPATCH(SpriteParameterfvSGIX, (pname, params), (F, "glSpriteParameterfvSGIX(0x%x, %p);\n", pname, (const void *) params));
++ DISPATCH(CullParameterdvEXT, (pname, params), (F, "glCullParameterdvEXT(0x%x, %p);\n", pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(SpriteParameteriSGIX)(GLenum pname, GLint param)
++KEYWORD1 void KEYWORD2 NAME(CullParameterfvEXT)(GLenum pname, GLfloat * params)
+ {
+- DISPATCH(SpriteParameteriSGIX, (pname, param), (F, "glSpriteParameteriSGIX(0x%x, %d);\n", pname, param));
++ DISPATCH(CullParameterfvEXT, (pname, params), (F, "glCullParameterfvEXT(0x%x, %p);\n", pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(SpriteParameterivSGIX)(GLenum pname, const GLint * params)
++KEYWORD1 void KEYWORD2 NAME(HintPGI)(GLenum target, GLint mode)
+ {
+- DISPATCH(SpriteParameterivSGIX, (pname, params), (F, "glSpriteParameterivSGIX(0x%x, %p);\n", pname, (const void *) params));
++ DISPATCH(HintPGI, (target, mode), (F, "glHintPGI(0x%x, %d);\n", target, mode));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(PointParameterfEXT)(GLenum pname, GLfloat param)
++KEYWORD1 void KEYWORD2 NAME(FogCoordfEXT)(GLfloat coord)
+ {
+- DISPATCH(PointParameterfEXT, (pname, param), (F, "glPointParameterfEXT(0x%x, %f);\n", pname, param));
++ DISPATCH(FogCoordfEXT, (coord), (F, "glFogCoordfEXT(%f);\n", coord));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(PointParameterfvEXT)(GLenum pname, const GLfloat * params)
++KEYWORD1 void KEYWORD2 NAME(FogCoordfvEXT)(const GLfloat * coord)
+ {
+- DISPATCH(PointParameterfvEXT, (pname, params), (F, "glPointParameterfvEXT(0x%x, %p);\n", pname, (const void *) params));
++ DISPATCH(FogCoordfvEXT, (coord), (F, "glFogCoordfvEXT(%p);\n", (const void *) coord));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(PointParameterfARB)(GLenum pname, GLfloat param)
++KEYWORD1 void KEYWORD2 NAME(FogCoorddEXT)(GLdouble coord)
+ {
+- DISPATCH(PointParameterfEXT, (pname, param), (F, "glPointParameterfARB(0x%x, %f);\n", pname, param));
++ DISPATCH(FogCoorddEXT, (coord), (F, "glFogCoorddEXT(%f);\n", coord));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(PointParameterfvARB)(GLenum pname, const GLfloat * params)
++KEYWORD1 void KEYWORD2 NAME(FogCoorddvEXT)(const GLdouble * coord)
+ {
+- DISPATCH(PointParameterfvEXT, (pname, params), (F, "glPointParameterfvARB(0x%x, %p);\n", pname, (const void *) params));
++ DISPATCH(FogCoorddvEXT, (coord), (F, "glFogCoorddvEXT(%p);\n", (const void *) coord));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(PointParameterfSGIS)(GLenum pname, GLfloat param)
++KEYWORD1 void KEYWORD2 NAME(FogCoordPointerEXT)(GLenum type, GLsizei stride, const GLvoid * pointer)
+ {
+- DISPATCH(PointParameterfEXT, (pname, param), (F, "glPointParameterfSGIS(0x%x, %f);\n", pname, param));
++ DISPATCH(FogCoordPointerEXT, (type, stride, pointer), (F, "glFogCoordPointerEXT(0x%x, %d, %p);\n", type, stride, (const void *) pointer));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(PointParameterfvSGIS)(GLenum pname, const GLfloat * params)
++KEYWORD1 void KEYWORD2 NAME(GetColorTableEXT)(GLenum target, GLenum format, GLenum type, GLvoid * data)
+ {
+- DISPATCH(PointParameterfvEXT, (pname, params), (F, "glPointParameterfvSGIS(0x%x, %p);\n", pname, (const void *) params));
++ DISPATCH(GetColorTableEXT, (target, format, type, data), (F, "glGetColorTableEXT(0x%x, 0x%x, 0x%x, %p);\n", target, format, type, (const void *) data));
+ }
+
+-KEYWORD1 GLint KEYWORD2 NAME(GetInstrumentsSGIX)(void)
++KEYWORD1 void KEYWORD2 NAME(GetColorTableParameterivEXT)(GLenum target, GLenum pname, GLint * params)
+ {
+- RETURN_DISPATCH(GetInstrumentsSGIX, (), (F, "glGetInstrumentsSGIX();\n"));
++ DISPATCH(GetColorTableParameterivEXT, (target, pname, params), (F, "glGetColorTableParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(InstrumentsBufferSGIX)(GLsizei size, GLint * buffer)
++KEYWORD1 void KEYWORD2 NAME(GetColorTableParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params)
+ {
+- DISPATCH(InstrumentsBufferSGIX, (size, buffer), (F, "glInstrumentsBufferSGIX(%d, %p);\n", size, (const void *) buffer));
++ DISPATCH(GetColorTableParameterfvEXT, (target, pname, params), (F, "glGetColorTableParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+ }
+
+-KEYWORD1 GLint KEYWORD2 NAME(PollInstrumentsSGIX)(GLint * marker_p)
++KEYWORD1 void KEYWORD2 NAME(TbufferMask3DFX)(GLuint mask)
+ {
+- RETURN_DISPATCH(PollInstrumentsSGIX, (marker_p), (F, "glPollInstrumentsSGIX(%p);\n", (const void *) marker_p));
++ DISPATCH(TbufferMask3DFX, (mask), (F, "glTbufferMask3DFX(%d);\n", mask));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ReadInstrumentsSGIX)(GLint marker)
++KEYWORD1 void KEYWORD2 NAME(CompressedTexImage3DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * data)
+ {
+- DISPATCH(ReadInstrumentsSGIX, (marker), (F, "glReadInstrumentsSGIX(%d);\n", marker));
++ DISPATCH(CompressedTexImage3DARB, (target, level, internalformat, width, height, depth, border, imageSize, data), (F, "glCompressedTexImage3DARB(0x%x, %d, 0x%x, %d, %d, %d, %d, %d, %p);\n", target, level, internalformat, width, height, depth, border, imageSize, (const void *) data));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(StartInstrumentsSGIX)(void)
++KEYWORD1 void KEYWORD2 NAME(CompressedTexImage2DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data)
+ {
+- DISPATCH(StartInstrumentsSGIX, (), (F, "glStartInstrumentsSGIX();\n"));
++ DISPATCH(CompressedTexImage2DARB, (target, level, internalformat, width, height, border, imageSize, data), (F, "glCompressedTexImage2DARB(0x%x, %d, 0x%x, %d, %d, %d, %d, %p);\n", target, level, internalformat, width, height, border, imageSize, (const void *) data));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(StopInstrumentsSGIX)(GLint marker)
++KEYWORD1 void KEYWORD2 NAME(CompressedTexImage1DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * data)
+ {
+- DISPATCH(StopInstrumentsSGIX, (marker), (F, "glStopInstrumentsSGIX(%d);\n", marker));
++ DISPATCH(CompressedTexImage1DARB, (target, level, internalformat, width, border, imageSize, data), (F, "glCompressedTexImage1DARB(0x%x, %d, 0x%x, %d, %d, %d, %p);\n", target, level, internalformat, width, border, imageSize, (const void *) data));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(FrameZoomSGIX)(GLint factor)
++KEYWORD1 void KEYWORD2 NAME(CompressedTexSubImage3DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data)
+ {
+- DISPATCH(FrameZoomSGIX, (factor), (F, "glFrameZoomSGIX(%d);\n", factor));
++ DISPATCH(CompressedTexSubImage3DARB, (target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data), (F, "glCompressedTexSubImage3DARB(0x%x, %d, %d, %d, %d, %d, %d, %d, 0x%x, %d, %p);\n", target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, (const void *) data));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(TagSampleBufferSGIX)(void)
++KEYWORD1 void KEYWORD2 NAME(CompressedTexSubImage2DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data)
+ {
+- DISPATCH(TagSampleBufferSGIX, (), (F, "glTagSampleBufferSGIX();\n"));
++ DISPATCH(CompressedTexSubImage2DARB, (target, level, xoffset, yoffset, width, height, format, imageSize, data), (F, "glCompressedTexSubImage2DARB(0x%x, %d, %d, %d, %d, %d, 0x%x, %d, %p);\n", target, level, xoffset, yoffset, width, height, format, imageSize, (const void *) data));
+ }
+
+-/* No dispatch for DeformationMap3dSGIX() */
+-/* No dispatch for DeformationMap3fSGIX() */
+-/* No dispatch for DeformSGIX() */
+-/* No dispatch for LoadIdentityDeformationMapSGIX() */
+-KEYWORD1 void KEYWORD2 NAME(ReferencePlaneSGIX)(const GLdouble * equation)
++KEYWORD1 void KEYWORD2 NAME(CompressedTexSubImage1DARB)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data)
+ {
+- DISPATCH(ReferencePlaneSGIX, (equation), (F, "glReferencePlaneSGIX(%p);\n", (const void *) equation));
++ DISPATCH(CompressedTexSubImage1DARB, (target, level, xoffset, width, format, imageSize, data), (F, "glCompressedTexSubImage1DARB(0x%x, %d, %d, %d, 0x%x, %d, %p);\n", target, level, xoffset, width, format, imageSize, (const void *) data));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(FlushRasterSGIX)(void)
++KEYWORD1 void KEYWORD2 NAME(GetCompressedTexImageARB)(GLenum target, GLint level, GLvoid * img)
+ {
+- DISPATCH(FlushRasterSGIX, (), (F, "glFlushRasterSGIX();\n"));
++ DISPATCH(GetCompressedTexImageARB, (target, level, img), (F, "glGetCompressedTexImageARB(0x%x, %d, %p);\n", target, level, (const void *) img));
+ }
+
+-/* No dispatch for FogFuncSGIS() */
+-/* No dispatch for GetFogFuncSGIS() */
+-/* No dispatch for ImageTransformParameteriHP() */
+-/* No dispatch for ImageTransformParameterfHP() */
+-/* No dispatch for ImageTransformParameterivHP() */
+-/* No dispatch for ImageTransformParameterfvHP() */
+-/* No dispatch for GetImageTransformParameterivHP() */
+-/* No dispatch for GetImageTransformParameterfvHP() */
+-KEYWORD1 void KEYWORD2 NAME(ColorSubTableEXT)(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid * data)
++KEYWORD1 void KEYWORD2 NAME(SecondaryColor3bEXT)(GLbyte red, GLbyte green, GLbyte blue)
+ {
+- DISPATCH(ColorSubTable, (target, start, count, format, type, data), (F, "glColorSubTableEXT(0x%x, %d, %d, 0x%x, 0x%x, %p);\n", target, start, count, format, type, (const void *) data));
++ DISPATCH(SecondaryColor3bEXT, (red, green, blue), (F, "glSecondaryColor3bEXT(%d, %d, %d);\n", red, green, blue));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(CopyColorSubTableEXT)(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width)
++KEYWORD1 void KEYWORD2 NAME(SecondaryColor3bvEXT)(const GLbyte * v)
+ {
+- DISPATCH(CopyColorSubTable, (target, start, x, y, width), (F, "glCopyColorSubTableEXT(0x%x, %d, %d, %d, %d);\n", target, start, x, y, width));
++ DISPATCH(SecondaryColor3bvEXT, (v), (F, "glSecondaryColor3bvEXT(%p);\n", (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(HintPGI)(GLenum target, GLint mode)
++KEYWORD1 void KEYWORD2 NAME(SecondaryColor3dEXT)(GLdouble red, GLdouble green, GLdouble blue)
+ {
+- DISPATCH(HintPGI, (target, mode), (F, "glHintPGI(0x%x, %d);\n", target, mode));
++ DISPATCH(SecondaryColor3dEXT, (red, green, blue), (F, "glSecondaryColor3dEXT(%f, %f, %f);\n", red, green, blue));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ColorTableEXT)(GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid * table)
++KEYWORD1 void KEYWORD2 NAME(SecondaryColor3dvEXT)(const GLdouble * v)
+ {
+- DISPATCH(ColorTable, (target, internalFormat, width, format, type, table), (F, "glColorTableEXT(0x%x, 0x%x, %d, 0x%x, 0x%x, %p);\n", target, internalFormat, width, format, type, (const void *) table));
++ DISPATCH(SecondaryColor3dvEXT, (v), (F, "glSecondaryColor3dvEXT(%p);\n", (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetColorTableEXT)(GLenum target, GLenum format, GLenum type, GLvoid * data)
++KEYWORD1 void KEYWORD2 NAME(SecondaryColor3fEXT)(GLfloat red, GLfloat green, GLfloat blue)
+ {
+- DISPATCH(GetColorTableEXT, (target, format, type, data), (F, "glGetColorTableEXT(0x%x, 0x%x, 0x%x, %p);\n", target, format, type, (const void *) data));
++ DISPATCH(SecondaryColor3fEXT, (red, green, blue), (F, "glSecondaryColor3fEXT(%f, %f, %f);\n", red, green, blue));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetColorTableParameterivEXT)(GLenum target, GLenum pname, GLint * params)
++KEYWORD1 void KEYWORD2 NAME(SecondaryColor3fvEXT)(const GLfloat * v)
+ {
+- DISPATCH(GetColorTableParameterivEXT, (target, pname, params), (F, "glGetColorTableParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
++ DISPATCH(SecondaryColor3fvEXT, (v), (F, "glSecondaryColor3fvEXT(%p);\n", (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetColorTableParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params)
++KEYWORD1 void KEYWORD2 NAME(SecondaryColor3iEXT)(GLint red, GLint green, GLint blue)
+ {
+- DISPATCH(GetColorTableParameterfvEXT, (target, pname, params), (F, "glGetColorTableParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
++ DISPATCH(SecondaryColor3iEXT, (red, green, blue), (F, "glSecondaryColor3iEXT(%d, %d, %d);\n", red, green, blue));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetListParameterfvSGIX)(GLuint list, GLenum pname, GLfloat * params)
++KEYWORD1 void KEYWORD2 NAME(SecondaryColor3ivEXT)(const GLint * v)
+ {
+- DISPATCH(GetListParameterfvSGIX, (list, pname, params), (F, "glGetListParameterfvSGIX(%d, 0x%x, %p);\n", list, pname, (const void *) params));
++ DISPATCH(SecondaryColor3ivEXT, (v), (F, "glSecondaryColor3ivEXT(%p);\n", (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetListParameterivSGIX)(GLuint list, GLenum pname, GLint * params)
++KEYWORD1 void KEYWORD2 NAME(SecondaryColor3sEXT)(GLshort red, GLshort green, GLshort blue)
+ {
+- DISPATCH(GetListParameterivSGIX, (list, pname, params), (F, "glGetListParameterivSGIX(%d, 0x%x, %p);\n", list, pname, (const void *) params));
++ DISPATCH(SecondaryColor3sEXT, (red, green, blue), (F, "glSecondaryColor3sEXT(%d, %d, %d);\n", red, green, blue));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ListParameterfSGIX)(GLuint list, GLenum pname, GLfloat param)
++KEYWORD1 void KEYWORD2 NAME(SecondaryColor3svEXT)(const GLshort * v)
+ {
+- DISPATCH(ListParameterfSGIX, (list, pname, param), (F, "glListParameterfSGIX(%d, 0x%x, %f);\n", list, pname, param));
++ DISPATCH(SecondaryColor3svEXT, (v), (F, "glSecondaryColor3svEXT(%p);\n", (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ListParameterfvSGIX)(GLuint list, GLenum pname, const GLfloat * params)
++KEYWORD1 void KEYWORD2 NAME(SecondaryColor3ubEXT)(GLubyte red, GLubyte green, GLubyte blue)
+ {
+- DISPATCH(ListParameterfvSGIX, (list, pname, params), (F, "glListParameterfvSGIX(%d, 0x%x, %p);\n", list, pname, (const void *) params));
++ DISPATCH(SecondaryColor3ubEXT, (red, green, blue), (F, "glSecondaryColor3ubEXT(%d, %d, %d);\n", red, green, blue));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ListParameteriSGIX)(GLuint list, GLenum pname, GLint param)
++KEYWORD1 void KEYWORD2 NAME(SecondaryColor3ubvEXT)(const GLubyte * v)
+ {
+- DISPATCH(ListParameteriSGIX, (list, pname, param), (F, "glListParameteriSGIX(%d, 0x%x, %d);\n", list, pname, param));
++ DISPATCH(SecondaryColor3ubvEXT, (v), (F, "glSecondaryColor3ubvEXT(%p);\n", (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ListParameterivSGIX)(GLuint list, GLenum pname, const GLint * params)
++KEYWORD1 void KEYWORD2 NAME(SecondaryColor3uiEXT)(GLuint red, GLuint green, GLuint blue)
+ {
+- DISPATCH(ListParameterivSGIX, (list, pname, params), (F, "glListParameterivSGIX(%d, 0x%x, %p);\n", list, pname, (const void *) params));
++ DISPATCH(SecondaryColor3uiEXT, (red, green, blue), (F, "glSecondaryColor3uiEXT(%d, %d, %d);\n", red, green, blue));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(IndexMaterialEXT)(GLenum face, GLenum mode)
++KEYWORD1 void KEYWORD2 NAME(SecondaryColor3uivEXT)(const GLuint * v)
+ {
+- DISPATCH(IndexMaterialEXT, (face, mode), (F, "glIndexMaterialEXT(0x%x, 0x%x);\n", face, mode));
++ DISPATCH(SecondaryColor3uivEXT, (v), (F, "glSecondaryColor3uivEXT(%p);\n", (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(IndexFuncEXT)(GLenum func, GLclampf ref)
++KEYWORD1 void KEYWORD2 NAME(SecondaryColor3usEXT)(GLushort red, GLushort green, GLushort blue)
+ {
+- DISPATCH(IndexFuncEXT, (func, ref), (F, "glIndexFuncEXT(0x%x, %f);\n", func, ref));
++ DISPATCH(SecondaryColor3usEXT, (red, green, blue), (F, "glSecondaryColor3usEXT(%d, %d, %d);\n", red, green, blue));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(LockArraysEXT)(GLint first, GLsizei count)
++KEYWORD1 void KEYWORD2 NAME(SecondaryColor3usvEXT)(const GLushort * v)
+ {
+- DISPATCH(LockArraysEXT, (first, count), (F, "glLockArraysEXT(%d, %d);\n", first, count));
++ DISPATCH(SecondaryColor3usvEXT, (v), (F, "glSecondaryColor3usvEXT(%p);\n", (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(UnlockArraysEXT)(void)
++KEYWORD1 void KEYWORD2 NAME(SecondaryColorPointerEXT)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer)
+ {
+- DISPATCH(UnlockArraysEXT, (), (F, "glUnlockArraysEXT();\n"));
++ DISPATCH(SecondaryColorPointerEXT, (size, type, stride, pointer), (F, "glSecondaryColorPointerEXT(%d, 0x%x, %d, %p);\n", size, type, stride, (const void *) pointer));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(CullParameterdvEXT)(GLenum pname, GLdouble * params)
++KEYWORD1 GLboolean KEYWORD2 NAME(AreProgramsResidentNV)(GLsizei n, const GLuint * ids, GLboolean * residences)
+ {
+- DISPATCH(CullParameterdvEXT, (pname, params), (F, "glCullParameterdvEXT(0x%x, %p);\n", pname, (const void *) params));
++ RETURN_DISPATCH(AreProgramsResidentNV, (n, ids, residences), (F, "glAreProgramsResidentNV(%d, %p, %p);\n", n, (const void *) ids, (const void *) residences));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(CullParameterfvEXT)(GLenum pname, GLfloat * params)
++KEYWORD1 void KEYWORD2 NAME(BindProgramNV)(GLenum target, GLuint id)
+ {
+- DISPATCH(CullParameterfvEXT, (pname, params), (F, "glCullParameterfvEXT(0x%x, %p);\n", pname, (const void *) params));
++ DISPATCH(BindProgramNV, (target, id), (F, "glBindProgramNV(0x%x, %d);\n", target, id));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(FragmentColorMaterialSGIX)(GLenum face, GLenum mode)
++KEYWORD1 void KEYWORD2 NAME(DeleteProgramsNV)(GLsizei n, const GLuint * ids)
+ {
+- DISPATCH(FragmentColorMaterialSGIX, (face, mode), (F, "glFragmentColorMaterialSGIX(0x%x, 0x%x);\n", face, mode));
++ DISPATCH(DeleteProgramsNV, (n, ids), (F, "glDeleteProgramsNV(%d, %p);\n", n, (const void *) ids));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(FragmentLightfSGIX)(GLenum light, GLenum pname, GLfloat param)
++KEYWORD1 void KEYWORD2 NAME(ExecuteProgramNV)(GLenum target, GLuint id, const GLfloat * params)
+ {
+- DISPATCH(FragmentLightfSGIX, (light, pname, param), (F, "glFragmentLightfSGIX(0x%x, 0x%x, %f);\n", light, pname, param));
++ DISPATCH(ExecuteProgramNV, (target, id, params), (F, "glExecuteProgramNV(0x%x, %d, %p);\n", target, id, (const void *) params));
++}
++
++KEYWORD1 void KEYWORD2 NAME(GenProgramsNV)(GLsizei n, GLuint * ids)
++{
++ DISPATCH(GenProgramsNV, (n, ids), (F, "glGenProgramsNV(%d, %p);\n", n, (const void *) ids));
++}
++
++KEYWORD1 void KEYWORD2 NAME(GetProgramParameterdvNV)(GLenum target, GLuint index, GLenum pname, GLdouble * params)
++{
++ DISPATCH(GetProgramParameterdvNV, (target, index, pname, params), (F, "glGetProgramParameterdvNV(0x%x, %d, 0x%x, %p);\n", target, index, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(FragmentLightfvSGIX)(GLenum light, GLenum pname, const GLfloat * params)
++KEYWORD1 void KEYWORD2 NAME(GetProgramParameterfvNV)(GLenum target, GLuint index, GLenum pname, GLfloat * params)
+ {
+- DISPATCH(FragmentLightfvSGIX, (light, pname, params), (F, "glFragmentLightfvSGIX(0x%x, 0x%x, %p);\n", light, pname, (const void *) params));
++ DISPATCH(GetProgramParameterfvNV, (target, index, pname, params), (F, "glGetProgramParameterfvNV(0x%x, %d, 0x%x, %p);\n", target, index, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(FragmentLightiSGIX)(GLenum light, GLenum pname, GLint param)
++KEYWORD1 void KEYWORD2 NAME(GetProgramivNV)(GLuint id, GLenum pname, GLint * params)
+ {
+- DISPATCH(FragmentLightiSGIX, (light, pname, param), (F, "glFragmentLightiSGIX(0x%x, 0x%x, %d);\n", light, pname, param));
++ DISPATCH(GetProgramivNV, (id, pname, params), (F, "glGetProgramivNV(%d, 0x%x, %p);\n", id, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(FragmentLightivSGIX)(GLenum light, GLenum pname, const GLint * params)
++KEYWORD1 void KEYWORD2 NAME(GetProgramStringNV)(GLuint id, GLenum pname, GLubyte * program)
+ {
+- DISPATCH(FragmentLightivSGIX, (light, pname, params), (F, "glFragmentLightivSGIX(0x%x, 0x%x, %p);\n", light, pname, (const void *) params));
++ DISPATCH(GetProgramStringNV, (id, pname, program), (F, "glGetProgramStringNV(%d, 0x%x, %p);\n", id, pname, (const void *) program));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(FragmentLightModelfSGIX)(GLenum pname, GLfloat param)
++KEYWORD1 void KEYWORD2 NAME(GetTrackMatrixivNV)(GLenum target, GLuint address, GLenum pname, GLint * params)
+ {
+- DISPATCH(FragmentLightModelfSGIX, (pname, param), (F, "glFragmentLightModelfSGIX(0x%x, %f);\n", pname, param));
++ DISPATCH(GetTrackMatrixivNV, (target, address, pname, params), (F, "glGetTrackMatrixivNV(0x%x, %d, 0x%x, %p);\n", target, address, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(FragmentLightModelfvSGIX)(GLenum pname, const GLfloat * params)
++KEYWORD1 void KEYWORD2 NAME(GetVertexAttribdvNV)(GLuint index, GLenum pname, GLdouble * params)
+ {
+- DISPATCH(FragmentLightModelfvSGIX, (pname, params), (F, "glFragmentLightModelfvSGIX(0x%x, %p);\n", pname, (const void *) params));
++ DISPATCH(GetVertexAttribdvNV, (index, pname, params), (F, "glGetVertexAttribdvNV(%d, 0x%x, %p);\n", index, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(FragmentLightModeliSGIX)(GLenum pname, GLint param)
++KEYWORD1 void KEYWORD2 NAME(GetVertexAttribfvNV)(GLuint index, GLenum pname, GLfloat * params)
+ {
+- DISPATCH(FragmentLightModeliSGIX, (pname, param), (F, "glFragmentLightModeliSGIX(0x%x, %d);\n", pname, param));
++ DISPATCH(GetVertexAttribfvNV, (index, pname, params), (F, "glGetVertexAttribfvNV(%d, 0x%x, %p);\n", index, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(FragmentLightModelivSGIX)(GLenum pname, const GLint * params)
++KEYWORD1 void KEYWORD2 NAME(GetVertexAttribivNV)(GLuint index, GLenum pname, GLint * params)
+ {
+- DISPATCH(FragmentLightModelivSGIX, (pname, params), (F, "glFragmentLightModelivSGIX(0x%x, %p);\n", pname, (const void *) params));
++ DISPATCH(GetVertexAttribivNV, (index, pname, params), (F, "glGetVertexAttribivNV(%d, 0x%x, %p);\n", index, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(FragmentMaterialfSGIX)(GLenum face, GLenum pname, GLfloat param)
++KEYWORD1 void KEYWORD2 NAME(GetVertexAttribPointervNV)(GLuint index, GLenum pname, GLvoid ** pointer)
+ {
+- DISPATCH(FragmentMaterialfSGIX, (face, pname, param), (F, "glFragmentMaterialfSGIX(0x%x, 0x%x, %f);\n", face, pname, param));
++ DISPATCH(GetVertexAttribPointervNV, (index, pname, pointer), (F, "glGetVertexAttribPointervNV(%d, 0x%x, %p);\n", index, pname, (const void *) pointer));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(FragmentMaterialfvSGIX)(GLenum face, GLenum pname, const GLfloat * params)
++KEYWORD1 GLboolean KEYWORD2 NAME(IsProgramNV)(GLuint id)
+ {
+- DISPATCH(FragmentMaterialfvSGIX, (face, pname, params), (F, "glFragmentMaterialfvSGIX(0x%x, 0x%x, %p);\n", face, pname, (const void *) params));
++ RETURN_DISPATCH(IsProgramNV, (id), (F, "glIsProgramNV(%d);\n", id));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(FragmentMaterialiSGIX)(GLenum face, GLenum pname, GLint param)
++KEYWORD1 void KEYWORD2 NAME(LoadProgramNV)(GLenum target, GLuint id, GLsizei len, const GLubyte * program)
+ {
+- DISPATCH(FragmentMaterialiSGIX, (face, pname, param), (F, "glFragmentMaterialiSGIX(0x%x, 0x%x, %d);\n", face, pname, param));
++ DISPATCH(LoadProgramNV, (target, id, len, program), (F, "glLoadProgramNV(0x%x, %d, %d, %p);\n", target, id, len, (const void *) program));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(FragmentMaterialivSGIX)(GLenum face, GLenum pname, const GLint * params)
++KEYWORD1 void KEYWORD2 NAME(ProgramParameter4dNV)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+ {
+- DISPATCH(FragmentMaterialivSGIX, (face, pname, params), (F, "glFragmentMaterialivSGIX(0x%x, 0x%x, %p);\n", face, pname, (const void *) params));
++ DISPATCH(ProgramParameter4dNV, (target, index, x, y, z, w), (F, "glProgramParameter4dNV(0x%x, %d, %f, %f, %f, %f);\n", target, index, x, y, z, w));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetFragmentLightfvSGIX)(GLenum light, GLenum pname, GLfloat * params)
++KEYWORD1 void KEYWORD2 NAME(ProgramParameter4dvNV)(GLenum target, GLuint index, const GLdouble * params)
+ {
+- DISPATCH(GetFragmentLightfvSGIX, (light, pname, params), (F, "glGetFragmentLightfvSGIX(0x%x, 0x%x, %p);\n", light, pname, (const void *) params));
++ DISPATCH(ProgramParameter4dvNV, (target, index, params), (F, "glProgramParameter4dvNV(0x%x, %d, %p);\n", target, index, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetFragmentLightivSGIX)(GLenum light, GLenum pname, GLint * params)
++KEYWORD1 void KEYWORD2 NAME(ProgramParameter4fNV)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+ {
+- DISPATCH(GetFragmentLightivSGIX, (light, pname, params), (F, "glGetFragmentLightivSGIX(0x%x, 0x%x, %p);\n", light, pname, (const void *) params));
++ DISPATCH(ProgramParameter4fNV, (target, index, x, y, z, w), (F, "glProgramParameter4fNV(0x%x, %d, %f, %f, %f, %f);\n", target, index, x, y, z, w));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetFragmentMaterialfvSGIX)(GLenum face, GLenum pname, GLfloat * params)
++KEYWORD1 void KEYWORD2 NAME(ProgramParameter4fvNV)(GLenum target, GLuint index, const GLfloat * params)
+ {
+- DISPATCH(GetFragmentMaterialfvSGIX, (face, pname, params), (F, "glGetFragmentMaterialfvSGIX(0x%x, 0x%x, %p);\n", face, pname, (const void *) params));
++ DISPATCH(ProgramParameter4fvNV, (target, index, params), (F, "glProgramParameter4fvNV(0x%x, %d, %p);\n", target, index, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetFragmentMaterialivSGIX)(GLenum face, GLenum pname, GLint * params)
++KEYWORD1 void KEYWORD2 NAME(ProgramParameters4dvNV)(GLenum target, GLuint index, GLuint num, const GLdouble * params)
+ {
+- DISPATCH(GetFragmentMaterialivSGIX, (face, pname, params), (F, "glGetFragmentMaterialivSGIX(0x%x, 0x%x, %p);\n", face, pname, (const void *) params));
++ DISPATCH(ProgramParameters4dvNV, (target, index, num, params), (F, "glProgramParameters4dvNV(0x%x, %d, %d, %p);\n", target, index, num, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(LightEnviSGIX)(GLenum pname, GLint param)
++KEYWORD1 void KEYWORD2 NAME(ProgramParameters4fvNV)(GLenum target, GLuint index, GLuint num, const GLfloat * params)
+ {
+- DISPATCH(LightEnviSGIX, (pname, param), (F, "glLightEnviSGIX(0x%x, %d);\n", pname, param));
++ DISPATCH(ProgramParameters4fvNV, (target, index, num, params), (F, "glProgramParameters4fvNV(0x%x, %d, %d, %p);\n", target, index, num, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(DrawRangeElementsEXT)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices)
++KEYWORD1 void KEYWORD2 NAME(RequestResidentProgramsNV)(GLsizei n, const GLuint * ids)
+ {
+- DISPATCH(DrawRangeElements, (mode, start, end, count, type, indices), (F, "glDrawRangeElementsEXT(0x%x, %d, %d, %d, 0x%x, %p);\n", mode, start, end, count, type, (const void *) indices));
++ DISPATCH(RequestResidentProgramsNV, (n, ids), (F, "glRequestResidentProgramsNV(%d, %p);\n", n, (const void *) ids));
+ }
+
+-/* No dispatch for ApplyTextureEXT() */
+-/* No dispatch for TextureLightEXT() */
+-/* No dispatch for TextureMaterialEXT() */
+-/* No dispatch for AsyncMarkerSGIX() */
+-/* No dispatch for FinishAsyncSGIX() */
+-/* No dispatch for PollAsyncSGIX() */
+-/* No dispatch for GenAsyncMarkersSGIX() */
+-/* No dispatch for DeleteAsyncMarkersSGIX() */
+-/* No dispatch for IsAsyncMarkerSGIX() */
+-/* No dispatch for VertexPointervINTEL() */
+-/* No dispatch for NormalPointervINTEL() */
+-/* No dispatch for ColorPointervINTEL() */
+-/* No dispatch for TexCoordPointervINTEL() */
+-/* No dispatch for PixelTransformParameteriEXT() */
+-/* No dispatch for PixelTransformParameterfEXT() */
+-/* No dispatch for PixelTransformParameterivEXT() */
+-/* No dispatch for PixelTransformParameterfvEXT() */
+-KEYWORD1 void KEYWORD2 NAME(SecondaryColor3bEXT)(GLbyte red, GLbyte green, GLbyte blue)
++KEYWORD1 void KEYWORD2 NAME(TrackMatrixNV)(GLenum target, GLuint address, GLenum matrix, GLenum transform)
+ {
+- DISPATCH(SecondaryColor3bEXT, (red, green, blue), (F, "glSecondaryColor3bEXT(%d, %d, %d);\n", red, green, blue));
++ DISPATCH(TrackMatrixNV, (target, address, matrix, transform), (F, "glTrackMatrixNV(0x%x, %d, 0x%x, 0x%x);\n", target, address, matrix, transform));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(SecondaryColor3bvEXT)(const GLbyte * v)
++KEYWORD1 void KEYWORD2 NAME(VertexAttribPointerNV)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer)
+ {
+- DISPATCH(SecondaryColor3bvEXT, (v), (F, "glSecondaryColor3bvEXT(%p);\n", (const void *) v));
++ DISPATCH(VertexAttribPointerNV, (index, size, type, stride, pointer), (F, "glVertexAttribPointerNV(%d, %d, 0x%x, %d, %p);\n", index, size, type, stride, (const void *) pointer));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(SecondaryColor3dEXT)(GLdouble red, GLdouble green, GLdouble blue)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib1dNV)(GLuint index, GLdouble x)
+ {
+- DISPATCH(SecondaryColor3dEXT, (red, green, blue), (F, "glSecondaryColor3dEXT(%f, %f, %f);\n", red, green, blue));
++ DISPATCH(VertexAttrib1dNV, (index, x), (F, "glVertexAttrib1dNV(%d, %f);\n", index, x));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(SecondaryColor3dvEXT)(const GLdouble * v)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib1dvNV)(GLuint index, const GLdouble * v)
+ {
+- DISPATCH(SecondaryColor3dvEXT, (v), (F, "glSecondaryColor3dvEXT(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2]));
++ DISPATCH(VertexAttrib1dvNV, (index, v), (F, "glVertexAttrib1dvNV(%d, %p);\n", index, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(SecondaryColor3fEXT)(GLfloat red, GLfloat green, GLfloat blue)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib1fNV)(GLuint index, GLfloat x)
+ {
+- DISPATCH(SecondaryColor3fEXT, (red, green, blue), (F, "glSecondaryColor3fEXT(%f, %f, %f);\n", red, green, blue));
++ DISPATCH(VertexAttrib1fNV, (index, x), (F, "glVertexAttrib1fNV(%d, %f);\n", index, x));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(SecondaryColor3fvEXT)(const GLfloat * v)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib1fvNV)(GLuint index, const GLfloat * v)
+ {
+- DISPATCH(SecondaryColor3fvEXT, (v), (F, "glSecondaryColor3fvEXT(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2]));
++ DISPATCH(VertexAttrib1fvNV, (index, v), (F, "glVertexAttrib1fvNV(%d, %p);\n", index, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(SecondaryColor3iEXT)(GLint red, GLint green, GLint blue)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib1sNV)(GLuint index, GLshort x)
+ {
+- DISPATCH(SecondaryColor3iEXT, (red, green, blue), (F, "glSecondaryColor3iEXT(%d, %d, %d);\n", red, green, blue));
++ DISPATCH(VertexAttrib1sNV, (index, x), (F, "glVertexAttrib1sNV(%d, %d);\n", index, x));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(SecondaryColor3ivEXT)(const GLint * v)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib1svNV)(GLuint index, const GLshort * v)
+ {
+- DISPATCH(SecondaryColor3ivEXT, (v), (F, "glSecondaryColor3ivEXT(%p);\n", (const void *) v));
++ DISPATCH(VertexAttrib1svNV, (index, v), (F, "glVertexAttrib1svNV(%d, %p);\n", index, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(SecondaryColor3sEXT)(GLshort red, GLshort green, GLshort blue)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib2dNV)(GLuint index, GLdouble x, GLdouble y)
+ {
+- DISPATCH(SecondaryColor3sEXT, (red, green, blue), (F, "glSecondaryColor3sEXT(%d, %d, %d);\n", red, green, blue));
++ DISPATCH(VertexAttrib2dNV, (index, x, y), (F, "glVertexAttrib2dNV(%d, %f, %f);\n", index, x, y));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(SecondaryColor3svEXT)(const GLshort * v)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib2dvNV)(GLuint index, const GLdouble * v)
+ {
+- DISPATCH(SecondaryColor3svEXT, (v), (F, "glSecondaryColor3svEXT(%p);\n", (const void *) v));
++ DISPATCH(VertexAttrib2dvNV, (index, v), (F, "glVertexAttrib2dvNV(%d, %p);\n", index, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(SecondaryColor3ubEXT)(GLubyte red, GLubyte green, GLubyte blue)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib2fNV)(GLuint index, GLfloat x, GLfloat y)
+ {
+- DISPATCH(SecondaryColor3ubEXT, (red, green, blue), (F, "glSecondaryColor3ubEXT(%d, %d, %d);\n", red, green, blue));
++ DISPATCH(VertexAttrib2fNV, (index, x, y), (F, "glVertexAttrib2fNV(%d, %f, %f);\n", index, x, y));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(SecondaryColor3ubvEXT)(const GLubyte * v)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib2fvNV)(GLuint index, const GLfloat * v)
+ {
+- DISPATCH(SecondaryColor3ubvEXT, (v), (F, "glSecondaryColor3ubvEXT(%p);\n", (const void *) v));
++ DISPATCH(VertexAttrib2fvNV, (index, v), (F, "glVertexAttrib2fvNV(%d, %p);\n", index, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(SecondaryColor3uiEXT)(GLuint red, GLuint green, GLuint blue)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib2sNV)(GLuint index, GLshort x, GLshort y)
+ {
+- DISPATCH(SecondaryColor3uiEXT, (red, green, blue), (F, "glSecondaryColor3uiEXT(%d, %d, %d);\n", red, green, blue));
++ DISPATCH(VertexAttrib2sNV, (index, x, y), (F, "glVertexAttrib2sNV(%d, %d, %d);\n", index, x, y));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(SecondaryColor3uivEXT)(const GLuint * v)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib2svNV)(GLuint index, const GLshort * v)
+ {
+- DISPATCH(SecondaryColor3uivEXT, (v), (F, "glSecondaryColor3uivEXT(%p);\n", (const void *) v));
++ DISPATCH(VertexAttrib2svNV, (index, v), (F, "glVertexAttrib2svNV(%d, %p);\n", index, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(SecondaryColor3usEXT)(GLushort red, GLushort green, GLushort blue)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib3dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z)
+ {
+- DISPATCH(SecondaryColor3usEXT, (red, green, blue), (F, "glSecondaryColor3usEXT(%d, %d, %d);\n", red, green, blue));
++ DISPATCH(VertexAttrib3dNV, (index, x, y, z), (F, "glVertexAttrib3dNV(%d, %f, %f, %f);\n", index, x, y, z));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(SecondaryColor3usvEXT)(const GLushort * v)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib3dvNV)(GLuint index, const GLdouble * v)
+ {
+- DISPATCH(SecondaryColor3usvEXT, (v), (F, "glSecondaryColor3usvEXT(%p);\n", (const void *) v));
++ DISPATCH(VertexAttrib3dvNV, (index, v), (F, "glVertexAttrib3dvNV(%d, %p);\n", index, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(SecondaryColorPointerEXT)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib3fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z)
+ {
+- DISPATCH(SecondaryColorPointerEXT, (size, type, stride, pointer), (F, "glSecondaryColorPointerEXT(%d, 0x%x, %d, %p);\n", size, type, stride, (const void *) pointer));
++ DISPATCH(VertexAttrib3fNV, (index, x, y, z), (F, "glVertexAttrib3fNV(%d, %f, %f, %f);\n", index, x, y, z));
+ }
+
+-/* No dispatch for TextureNormalEXT() */
+-KEYWORD1 void KEYWORD2 NAME(MultiDrawArraysEXT)(GLenum mode, GLint * first, GLsizei * count, GLsizei primcount)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib3fvNV)(GLuint index, const GLfloat * v)
+ {
+- DISPATCH(MultiDrawArraysEXT, (mode, first, count, primcount), (F, "glMultiDrawArraysEXT(0x%x, %p, %p, %d);\n", mode, (const void *) first, (const void *) count, primcount));
++ DISPATCH(VertexAttrib3fvNV, (index, v), (F, "glVertexAttrib3fvNV(%d, %p);\n", index, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiDrawElementsEXT)(GLenum mode, const GLsizei * count, GLenum type, const GLvoid ** indices, GLsizei primcount)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib3sNV)(GLuint index, GLshort x, GLshort y, GLshort z)
+ {
+- DISPATCH(MultiDrawElementsEXT, (mode, count, type, indices, primcount), (F, "glMultiDrawElementsEXT(0x%x, %p, 0x%x, %p, %d);\n", mode, (const void *) count, type, (const void *) indices, primcount));
++ DISPATCH(VertexAttrib3sNV, (index, x, y, z), (F, "glVertexAttrib3sNV(%d, %d, %d, %d);\n", index, x, y, z));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(FogCoordfEXT)(GLfloat coord)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib3svNV)(GLuint index, const GLshort * v)
+ {
+- DISPATCH(FogCoordfEXT, (coord), (F, "glFogCoordfEXT(%f);\n", coord));
++ DISPATCH(VertexAttrib3svNV, (index, v), (F, "glVertexAttrib3svNV(%d, %p);\n", index, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(FogCoordfvEXT)(const GLfloat * coord)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib4dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+ {
+- DISPATCH(FogCoordfvEXT, (coord), (F, "glFogCoordfvEXT(%p);\n", (const void *) coord));
++ DISPATCH(VertexAttrib4dNV, (index, x, y, z, w), (F, "glVertexAttrib4dNV(%d, %f, %f, %f, %f);\n", index, x, y, z, w));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(FogCoorddEXT)(GLdouble coord)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib4dvNV)(GLuint index, const GLdouble * v)
+ {
+- DISPATCH(FogCoorddEXT, (coord), (F, "glFogCoorddEXT(%f);\n", coord));
++ DISPATCH(VertexAttrib4dvNV, (index, v), (F, "glVertexAttrib4dvNV(%d, %p);\n", index, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(FogCoorddvEXT)(const GLdouble * coord)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib4fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+ {
+- DISPATCH(FogCoorddvEXT, (coord), (F, "glFogCoorddvEXT(%p);\n", (const void *) coord));
++ DISPATCH(VertexAttrib4fNV, (index, x, y, z, w), (F, "glVertexAttrib4fNV(%d, %f, %f, %f, %f);\n", index, x, y, z, w));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(FogCoordPointerEXT)(GLenum type, GLsizei stride, const GLvoid * pointer)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib4fvNV)(GLuint index, const GLfloat * v)
+ {
+- DISPATCH(FogCoordPointerEXT, (type, stride, pointer), (F, "glFogCoordPointerEXT(0x%x, %d, %p);\n", type, stride, (const void *) pointer));
++ DISPATCH(VertexAttrib4fvNV, (index, v), (F, "glVertexAttrib4fvNV(%d, %p);\n", index, (const void *) v));
+ }
+
+-/* No dispatch for Tangent3bEXT() */
+-/* No dispatch for Tangent3bvEXT() */
+-/* No dispatch for Tangent3dEXT() */
+-/* No dispatch for Tangent3dvEXT() */
+-/* No dispatch for Tangent3fEXT() */
+-/* No dispatch for Tangent3fvEXT() */
+-/* No dispatch for Tangent3iEXT() */
+-/* No dispatch for Tangent3ivEXT() */
+-/* No dispatch for Tangent3sEXT() */
+-/* No dispatch for Tangent3svEXT() */
+-/* No dispatch for Binormal3bEXT() */
+-/* No dispatch for Binormal3bvEXT() */
+-/* No dispatch for Binormal3dEXT() */
+-/* No dispatch for Binormal3dvEXT() */
+-/* No dispatch for Binormal3fEXT() */
+-/* No dispatch for Binormal3fvEXT() */
+-/* No dispatch for Binormal3iEXT() */
+-/* No dispatch for Binormal3ivEXT() */
+-/* No dispatch for Binormal3sEXT() */
+-/* No dispatch for Binormal3svEXT() */
+-/* No dispatch for TangentPointerEXT() */
+-/* No dispatch for BinormalPointerEXT() */
+-/* No dispatch for FinishTextureSUNX() */
+-/* No dispatch for GlobalAlphaFactorbSUN() */
+-/* No dispatch for GlobalAlphaFactorsSUN() */
+-/* No dispatch for GlobalAlphaFactoriSUN() */
+-/* No dispatch for GlobalAlphaFactorfSUN() */
+-/* No dispatch for GlobalAlphaFactordSUN() */
+-/* No dispatch for GlobalAlphaFactorubSUN() */
+-/* No dispatch for GlobalAlphaFactorusSUN() */
+-/* No dispatch for GlobalAlphaFactoruiSUN() */
+-/* No dispatch for ReplacementCodeuiSUN() */
+-/* No dispatch for ReplacementCodeusSUN() */
+-/* No dispatch for ReplacementCodeubSUN() */
+-/* No dispatch for ReplacementCodeuivSUN() */
+-/* No dispatch for ReplacementCodeusvSUN() */
+-/* No dispatch for ReplacementCodeubvSUN() */
+-/* No dispatch for ReplacementCodePointerSUN() */
+-/* No dispatch for Color4ubVertex2fSUN() */
+-/* No dispatch for Color4ubVertex2fvSUN() */
+-/* No dispatch for Color4ubVertex3fSUN() */
+-/* No dispatch for Color4ubVertex3fvSUN() */
+-/* No dispatch for Color3fVertex3fSUN() */
+-/* No dispatch for Color3fVertex3fvSUN() */
+-/* No dispatch for Normal3fVertex3fSUN() */
+-/* No dispatch for Normal3fVertex3fvSUN() */
+-/* No dispatch for Color4fNormal3fVertex3fSUN() */
+-/* No dispatch for Color4fNormal3fVertex3fvSUN() */
+-/* No dispatch for TexCoord2fVertex3fSUN() */
+-/* No dispatch for TexCoord2fVertex3fvSUN() */
+-/* No dispatch for TexCoord4fVertex4fSUN() */
+-/* No dispatch for TexCoord4fVertex4fvSUN() */
+-/* No dispatch for TexCoord2fColor4ubVertex3fSUN() */
+-/* No dispatch for TexCoord2fColor4ubVertex3fvSUN() */
+-/* No dispatch for TexCoord2fColor3fVertex3fSUN() */
+-/* No dispatch for TexCoord2fColor3fVertex3fvSUN() */
+-/* No dispatch for TexCoord2fNormal3fVertex3fSUN() */
+-/* No dispatch for TexCoord2fNormal3fVertex3fvSUN() */
+-/* No dispatch for TexCoord2fColor4fNormal3fVertex3fSUN() */
+-/* No dispatch for TexCoord2fColor4fNormal3fVertex3fvSUN() */
+-/* No dispatch for TexCoord4fColor4fNormal3fVertex4fSUN() */
+-/* No dispatch for TexCoord4fColor4fNormal3fVertex4fvSUN() */
+-/* No dispatch for ReplacementCodeuiVertex3fSUN() */
+-/* No dispatch for ReplacementCodeuiVertex3fvSUN() */
+-/* No dispatch for ReplacementCodeuiColor4ubVertex3fSUN() */
+-/* No dispatch for ReplacementCodeuiColor4ubVertex3fvSUN() */
+-/* No dispatch for ReplacementCodeuiColor3fVertex3fSUN() */
+-/* No dispatch for ReplacementCodeuiColor3fVertex3fvSUN() */
+-/* No dispatch for ReplacementCodeuiNormal3fVertex3fSUN() */
+-/* No dispatch for ReplacementCodeuiNormal3fVertex3fvSUN() */
+-/* No dispatch for ReplacementCodeuiColor4fNormal3fVertex3fSUN() */
+-/* No dispatch for ReplacementCodeuiColor4fNormal3fVertex3fvSUN() */
+-/* No dispatch for ReplacementCodeuiTexCoord2fVertex3fSUN() */
+-/* No dispatch for ReplacementCodeuiTexCoord2fVertex3fvSUN() */
+-/* No dispatch for ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN() */
+-/* No dispatch for ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN() */
+-/* No dispatch for ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN() */
+-/* No dispatch for ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN() */
+-KEYWORD1 void KEYWORD2 NAME(BlendFuncSeparateEXT)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib4sNV)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w)
+ {
+- DISPATCH(BlendFuncSeparateEXT, (sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha), (F, "glBlendFuncSeparateEXT(0x%x, 0x%x, 0x%x, 0x%x);\n", sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha));
++ DISPATCH(VertexAttrib4sNV, (index, x, y, z, w), (F, "glVertexAttrib4sNV(%d, %d, %d, %d, %d);\n", index, x, y, z, w));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(BlendFuncSeparateINGR)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib4svNV)(GLuint index, const GLshort * v)
+ {
+- DISPATCH(BlendFuncSeparateEXT, (sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha), (F, "glBlendFuncSeparateINGR(0x%x, 0x%x, 0x%x, 0x%x);\n", sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha));
++ DISPATCH(VertexAttrib4svNV, (index, v), (F, "glVertexAttrib4svNV(%d, %p);\n", index, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexWeightfEXT)(GLfloat weight)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib4ubNV)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w)
+ {
+- DISPATCH(VertexWeightfEXT, (weight), (F, "glVertexWeightfEXT(%f);\n", weight));
++ DISPATCH(VertexAttrib4ubNV, (index, x, y, z, w), (F, "glVertexAttrib4ubNV(%d, %d, %d, %d, %d);\n", index, x, y, z, w));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexWeightfvEXT)(const GLfloat * weight)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib4ubvNV)(GLuint index, const GLubyte * v)
+ {
+- DISPATCH(VertexWeightfvEXT, (weight), (F, "glVertexWeightfvEXT(%p);\n", (const void *) weight));
++ DISPATCH(VertexAttrib4ubvNV, (index, v), (F, "glVertexAttrib4ubvNV(%d, %p);\n", index, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexWeightPointerEXT)(GLsizei size, GLenum type, GLsizei stride, const GLvoid * pointer)
++KEYWORD1 void KEYWORD2 NAME(VertexAttribs1dvNV)(GLuint index, GLsizei n, const GLdouble * v)
+ {
+- DISPATCH(VertexWeightPointerEXT, (size, type, stride, pointer), (F, "glVertexWeightPointerEXT(%d, 0x%x, %d, %p);\n", size, type, stride, (const void *) pointer));
++ DISPATCH(VertexAttribs1dvNV, (index, n, v), (F, "glVertexAttribs1dvNV(%d, %d, %p);\n", index, n, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(FlushVertexArrayRangeNV)(void)
++KEYWORD1 void KEYWORD2 NAME(VertexAttribs1fvNV)(GLuint index, GLsizei n, const GLfloat * v)
+ {
+- DISPATCH(FlushVertexArrayRangeNV, (), (F, "glFlushVertexArrayRangeNV();\n"));
++ DISPATCH(VertexAttribs1fvNV, (index, n, v), (F, "glVertexAttribs1fvNV(%d, %d, %p);\n", index, n, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexArrayRangeNV)(GLsizei length, const GLvoid * pointer)
++KEYWORD1 void KEYWORD2 NAME(VertexAttribs1svNV)(GLuint index, GLsizei n, const GLshort * v)
+ {
+- DISPATCH(VertexArrayRangeNV, (length, pointer), (F, "glVertexArrayRangeNV(%d, %p);\n", length, (const void *) pointer));
++ DISPATCH(VertexAttribs1svNV, (index, n, v), (F, "glVertexAttribs1svNV(%d, %d, %p);\n", index, n, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(CombinerParameterfvNV)(GLenum pname, const GLfloat * params)
++KEYWORD1 void KEYWORD2 NAME(VertexAttribs2dvNV)(GLuint index, GLsizei n, const GLdouble * v)
+ {
+- DISPATCH(CombinerParameterfvNV, (pname, params), (F, "glCombinerParameterfvNV(0x%x, %p);\n", pname, (const void *) params));
++ DISPATCH(VertexAttribs2dvNV, (index, n, v), (F, "glVertexAttribs2dvNV(%d, %d, %p);\n", index, n, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(CombinerParameterfNV)(GLenum pname, GLfloat param)
++KEYWORD1 void KEYWORD2 NAME(VertexAttribs2fvNV)(GLuint index, GLsizei n, const GLfloat * v)
+ {
+- DISPATCH(CombinerParameterfNV, (pname, param), (F, "glCombinerParameterfNV(0x%x, %f);\n", pname, param));
++ DISPATCH(VertexAttribs2fvNV, (index, n, v), (F, "glVertexAttribs2fvNV(%d, %d, %p);\n", index, n, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(CombinerParameterivNV)(GLenum pname, const GLint * params)
++KEYWORD1 void KEYWORD2 NAME(VertexAttribs2svNV)(GLuint index, GLsizei n, const GLshort * v)
+ {
+- DISPATCH(CombinerParameterivNV, (pname, params), (F, "glCombinerParameterivNV(0x%x, %p);\n", pname, (const void *) params));
++ DISPATCH(VertexAttribs2svNV, (index, n, v), (F, "glVertexAttribs2svNV(%d, %d, %p);\n", index, n, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(CombinerParameteriNV)(GLenum pname, GLint param)
++KEYWORD1 void KEYWORD2 NAME(VertexAttribs3dvNV)(GLuint index, GLsizei n, const GLdouble * v)
+ {
+- DISPATCH(CombinerParameteriNV, (pname, param), (F, "glCombinerParameteriNV(0x%x, %d);\n", pname, param));
++ DISPATCH(VertexAttribs3dvNV, (index, n, v), (F, "glVertexAttribs3dvNV(%d, %d, %p);\n", index, n, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(CombinerInputNV)(GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage)
++KEYWORD1 void KEYWORD2 NAME(VertexAttribs3fvNV)(GLuint index, GLsizei n, const GLfloat * v)
+ {
+- DISPATCH(CombinerInputNV, (stage, portion, variable, input, mapping, componentUsage), (F, "glCombinerInputNV(0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x);\n", stage, portion, variable, input, mapping, componentUsage));
++ DISPATCH(VertexAttribs3fvNV, (index, n, v), (F, "glVertexAttribs3fvNV(%d, %d, %p);\n", index, n, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(CombinerOutputNV)(GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum)
++KEYWORD1 void KEYWORD2 NAME(VertexAttribs3svNV)(GLuint index, GLsizei n, const GLshort * v)
+ {
+- DISPATCH(CombinerOutputNV, (stage, portion, abOutput, cdOutput, sumOutput, scale, bias, abDotProduct, cdDotProduct, muxSum), (F, "glCombinerOutputNV(0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, %d, %d, %d);\n", stage, portion, abOutput, cdOutput, sumOutput, scale, bias, abDotProduct, cdDotProduct, muxSum));
++ DISPATCH(VertexAttribs3svNV, (index, n, v), (F, "glVertexAttribs3svNV(%d, %d, %p);\n", index, n, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(FinalCombinerInputNV)(GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage)
++KEYWORD1 void KEYWORD2 NAME(VertexAttribs4dvNV)(GLuint index, GLsizei n, const GLdouble * v)
+ {
+- DISPATCH(FinalCombinerInputNV, (variable, input, mapping, componentUsage), (F, "glFinalCombinerInputNV(0x%x, 0x%x, 0x%x, 0x%x);\n", variable, input, mapping, componentUsage));
++ DISPATCH(VertexAttribs4dvNV, (index, n, v), (F, "glVertexAttribs4dvNV(%d, %d, %p);\n", index, n, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetCombinerInputParameterfvNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat * params)
++KEYWORD1 void KEYWORD2 NAME(VertexAttribs4fvNV)(GLuint index, GLsizei n, const GLfloat * v)
+ {
+- DISPATCH(GetCombinerInputParameterfvNV, (stage, portion, variable, pname, params), (F, "glGetCombinerInputParameterfvNV(0x%x, 0x%x, 0x%x, 0x%x, %p);\n", stage, portion, variable, pname, (const void *) params));
++ DISPATCH(VertexAttribs4fvNV, (index, n, v), (F, "glVertexAttribs4fvNV(%d, %d, %p);\n", index, n, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetCombinerInputParameterivNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint * params)
++KEYWORD1 void KEYWORD2 NAME(VertexAttribs4svNV)(GLuint index, GLsizei n, const GLshort * v)
+ {
+- DISPATCH(GetCombinerInputParameterivNV, (stage, portion, variable, pname, params), (F, "glGetCombinerInputParameterivNV(0x%x, 0x%x, 0x%x, 0x%x, %p);\n", stage, portion, variable, pname, (const void *) params));
++ DISPATCH(VertexAttribs4svNV, (index, n, v), (F, "glVertexAttribs4svNV(%d, %d, %p);\n", index, n, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetCombinerOutputParameterfvNV)(GLenum stage, GLenum portion, GLenum pname, GLfloat * params)
++KEYWORD1 void KEYWORD2 NAME(VertexAttribs4ubvNV)(GLuint index, GLsizei n, const GLubyte * v)
+ {
+- DISPATCH(GetCombinerOutputParameterfvNV, (stage, portion, pname, params), (F, "glGetCombinerOutputParameterfvNV(0x%x, 0x%x, 0x%x, %p);\n", stage, portion, pname, (const void *) params));
++ DISPATCH(VertexAttribs4ubvNV, (index, n, v), (F, "glVertexAttribs4ubvNV(%d, %d, %p);\n", index, n, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetCombinerOutputParameterivNV)(GLenum stage, GLenum portion, GLenum pname, GLint * params)
++KEYWORD1 void KEYWORD2 NAME(PointParameteriNV)(GLenum pname, GLint params)
+ {
+- DISPATCH(GetCombinerOutputParameterivNV, (stage, portion, pname, params), (F, "glGetCombinerOutputParameterivNV(0x%x, 0x%x, 0x%x, %p);\n", stage, portion, pname, (const void *) params));
++ DISPATCH(PointParameteriNV, (pname, params), (F, "glPointParameteriNV(0x%x, %d);\n", pname, params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetFinalCombinerInputParameterfvNV)(GLenum variable, GLenum pname, GLfloat * params)
++KEYWORD1 void KEYWORD2 NAME(PointParameterivNV)(GLenum pname, const GLint * params)
+ {
+- DISPATCH(GetFinalCombinerInputParameterfvNV, (variable, pname, params), (F, "glGetFinalCombinerInputParameterfvNV(0x%x, 0x%x, %p);\n", variable, pname, (const void *) params));
++ DISPATCH(PointParameterivNV, (pname, params), (F, "glPointParameterivNV(0x%x, %p);\n", pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetFinalCombinerInputParameterivNV)(GLenum variable, GLenum pname, GLint * params)
++KEYWORD1 void KEYWORD2 NAME(MultiDrawArraysEXT)(GLenum mode, GLint * first, GLsizei * count, GLsizei primcount)
+ {
+- DISPATCH(GetFinalCombinerInputParameterivNV, (variable, pname, params), (F, "glGetFinalCombinerInputParameterivNV(0x%x, 0x%x, %p);\n", variable, pname, (const void *) params));
++ DISPATCH(MultiDrawArraysEXT, (mode, first, count, primcount), (F, "glMultiDrawArraysEXT(0x%x, %p, %p, %d);\n", mode, (const void *) first, (const void *) count, primcount));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ResizeBuffersMESA)(void)
++KEYWORD1 void KEYWORD2 NAME(MultiDrawElementsEXT)(GLenum mode, const GLsizei * count, GLenum type, const GLvoid ** indices, GLsizei primcount)
+ {
+- DISPATCH(ResizeBuffersMESA, (), (F, "glResizeBuffersMESA();\n"));
++ DISPATCH(MultiDrawElementsEXT, (mode, count, type, indices, primcount), (F, "glMultiDrawElementsEXT(0x%x, %p, 0x%x, %p, %d);\n", mode, (const void *) count, type, (const void *) indices, primcount));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos2dMESA)(GLdouble x, GLdouble y)
++KEYWORD1 void KEYWORD2 NAME(ActiveStencilFaceEXT)(GLenum face)
+ {
+- DISPATCH(WindowPos2dMESA, (x, y), (F, "glWindowPos2dMESA(%f, %f);\n", x, y));
++ DISPATCH(ActiveStencilFaceEXT, (face), (F, "glActiveStencilFaceEXT(0x%x);\n", face));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos2dvMESA)(const GLdouble * v)
++KEYWORD1 void KEYWORD2 NAME(DeleteFencesNV)(GLsizei n, const GLuint * fences)
+ {
+- DISPATCH(WindowPos2dvMESA, (v), (F, "glWindowPos2dvMESA(%p /* %g, %g */);\n", (const void *) v, v[0], v[1]));
++ DISPATCH(DeleteFencesNV, (n, fences), (F, "glDeleteFencesNV(%d, %p);\n", n, (const void *) fences));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos2fMESA)(GLfloat x, GLfloat y)
++KEYWORD1 void KEYWORD2 NAME(GenFencesNV)(GLsizei n, GLuint * fences)
+ {
+- DISPATCH(WindowPos2fMESA, (x, y), (F, "glWindowPos2fMESA(%f, %f);\n", x, y));
++ DISPATCH(GenFencesNV, (n, fences), (F, "glGenFencesNV(%d, %p);\n", n, (const void *) fences));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos2fvMESA)(const GLfloat * v)
++KEYWORD1 GLboolean KEYWORD2 NAME(IsFenceNV)(GLuint fence)
+ {
+- DISPATCH(WindowPos2fvMESA, (v), (F, "glWindowPos2fvMESA(%p /* %g, %g */);\n", (const void *) v, v[0], v[1]));
++ RETURN_DISPATCH(IsFenceNV, (fence), (F, "glIsFenceNV(%d);\n", fence));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos2iMESA)(GLint x, GLint y)
++KEYWORD1 GLboolean KEYWORD2 NAME(TestFenceNV)(GLuint fence)
+ {
+- DISPATCH(WindowPos2iMESA, (x, y), (F, "glWindowPos2iMESA(%d, %d);\n", x, y));
++ RETURN_DISPATCH(TestFenceNV, (fence), (F, "glTestFenceNV(%d);\n", fence));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos2ivMESA)(const GLint * v)
++KEYWORD1 void KEYWORD2 NAME(GetFenceivNV)(GLuint fence, GLenum pname, GLint * params)
+ {
+- DISPATCH(WindowPos2ivMESA, (v), (F, "glWindowPos2ivMESA(%p);\n", (const void *) v));
++ DISPATCH(GetFenceivNV, (fence, pname, params), (F, "glGetFenceivNV(%d, 0x%x, %p);\n", fence, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos2sMESA)(GLshort x, GLshort y)
++KEYWORD1 void KEYWORD2 NAME(FinishFenceNV)(GLuint fence)
+ {
+- DISPATCH(WindowPos2sMESA, (x, y), (F, "glWindowPos2sMESA(%d, %d);\n", x, y));
++ DISPATCH(FinishFenceNV, (fence), (F, "glFinishFenceNV(%d);\n", fence));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos2svMESA)(const GLshort * v)
++KEYWORD1 void KEYWORD2 NAME(SetFenceNV)(GLuint fence, GLenum condition)
+ {
+- DISPATCH(WindowPos2svMESA, (v), (F, "glWindowPos2svMESA(%p);\n", (const void *) v));
++ DISPATCH(SetFenceNV, (fence, condition), (F, "glSetFenceNV(%d, 0x%x);\n", fence, condition));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos3dMESA)(GLdouble x, GLdouble y, GLdouble z)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib4bvARB)(GLuint index, const GLbyte * v)
+ {
+- DISPATCH(WindowPos3dMESA, (x, y, z), (F, "glWindowPos3dMESA(%f, %f, %f);\n", x, y, z));
++ DISPATCH(VertexAttrib4bvARB, (index, v), (F, "glVertexAttrib4bvARB(%d, %p);\n", index, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos3dvMESA)(const GLdouble * v)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib4ivARB)(GLuint index, const GLint * v)
+ {
+- DISPATCH(WindowPos3dvMESA, (v), (F, "glWindowPos3dvMESA(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2]));
++ DISPATCH(VertexAttrib4ivARB, (index, v), (F, "glVertexAttrib4ivARB(%d, %p);\n", index, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos3fMESA)(GLfloat x, GLfloat y, GLfloat z)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib4ubvARB)(GLuint index, const GLubyte * v)
+ {
+- DISPATCH(WindowPos3fMESA, (x, y, z), (F, "glWindowPos3fMESA(%f, %f, %f);\n", x, y, z));
++ DISPATCH(VertexAttrib4ubvARB, (index, v), (F, "glVertexAttrib4ubvARB(%d, %p);\n", index, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos3fvMESA)(const GLfloat * v)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib4usvARB)(GLuint index, const GLushort * v)
+ {
+- DISPATCH(WindowPos3fvMESA, (v), (F, "glWindowPos3fvMESA(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2]));
++ DISPATCH(VertexAttrib4usvARB, (index, v), (F, "glVertexAttrib4usvARB(%d, %p);\n", index, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos3iMESA)(GLint x, GLint y, GLint z)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib4uivARB)(GLuint index, const GLuint * v)
+ {
+- DISPATCH(WindowPos3iMESA, (x, y, z), (F, "glWindowPos3iMESA(%d, %d, %d);\n", x, y, z));
++ DISPATCH(VertexAttrib4uivARB, (index, v), (F, "glVertexAttrib4uivARB(%d, %p);\n", index, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos3ivMESA)(const GLint * v)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib4NbvARB)(GLuint index, const GLbyte * v)
+ {
+- DISPATCH(WindowPos3ivMESA, (v), (F, "glWindowPos3ivMESA(%p);\n", (const void *) v));
++ DISPATCH(VertexAttrib4NbvARB, (index, v), (F, "glVertexAttrib4NbvARB(%d, %p);\n", index, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos3sMESA)(GLshort x, GLshort y, GLshort z)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib4NsvARB)(GLuint index, const GLshort * v)
+ {
+- DISPATCH(WindowPos3sMESA, (x, y, z), (F, "glWindowPos3sMESA(%d, %d, %d);\n", x, y, z));
++ DISPATCH(VertexAttrib4NsvARB, (index, v), (F, "glVertexAttrib4NsvARB(%d, %p);\n", index, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos3svMESA)(const GLshort * v)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib4NivARB)(GLuint index, const GLint * v)
+ {
+- DISPATCH(WindowPos3svMESA, (v), (F, "glWindowPos3svMESA(%p);\n", (const void *) v));
++ DISPATCH(VertexAttrib4NivARB, (index, v), (F, "glVertexAttrib4NivARB(%d, %p);\n", index, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos4dMESA)(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib4NusvARB)(GLuint index, const GLushort * v)
+ {
+- DISPATCH(WindowPos4dMESA, (x, y, z, w), (F, "glWindowPos4dMESA(%f, %f, %f, %f);\n", x, y, z, w));
++ DISPATCH(VertexAttrib4NusvARB, (index, v), (F, "glVertexAttrib4NusvARB(%d, %p);\n", index, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos4dvMESA)(const GLdouble * v)
++KEYWORD1 void KEYWORD2 NAME(VertexAttrib4NuivARB)(GLuint index, const GLuint * v)
+ {
+- DISPATCH(WindowPos4dvMESA, (v), (F, "glWindowPos4dvMESA(%p /* %g, %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2], v[3]));
++ DISPATCH(VertexAttrib4NuivARB, (index, v), (F, "glVertexAttrib4NuivARB(%d, %p);\n", index, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos4fMESA)(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
++KEYWORD1 void KEYWORD2 NAME(VertexAttribPointerARB)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * pointer)
+ {
+- DISPATCH(WindowPos4fMESA, (x, y, z, w), (F, "glWindowPos4fMESA(%f, %f, %f, %f);\n", x, y, z, w));
++ DISPATCH(VertexAttribPointerARB, (index, size, type, normalized, stride, pointer), (F, "glVertexAttribPointerARB(%d, %d, 0x%x, %d, %d, %p);\n", index, size, type, normalized, stride, (const void *) pointer));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos4fvMESA)(const GLfloat * v)
++KEYWORD1 void KEYWORD2 NAME(EnableVertexAttribArrayARB)(GLuint index)
+ {
+- DISPATCH(WindowPos4fvMESA, (v), (F, "glWindowPos4fvMESA(%p /* %g, %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2], v[3]));
++ DISPATCH(EnableVertexAttribArrayARB, (index), (F, "glEnableVertexAttribArrayARB(%d);\n", index));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos4iMESA)(GLint x, GLint y, GLint z, GLint w)
++KEYWORD1 void KEYWORD2 NAME(DisableVertexAttribArrayARB)(GLuint index)
+ {
+- DISPATCH(WindowPos4iMESA, (x, y, z, w), (F, "glWindowPos4iMESA(%d, %d, %d, %d);\n", x, y, z, w));
++ DISPATCH(DisableVertexAttribArrayARB, (index), (F, "glDisableVertexAttribArrayARB(%d);\n", index));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos4ivMESA)(const GLint * v)
++KEYWORD1 void KEYWORD2 NAME(ProgramStringARB)(GLenum target, GLenum format, GLsizei len, const GLvoid * string)
+ {
+- DISPATCH(WindowPos4ivMESA, (v), (F, "glWindowPos4ivMESA(%p);\n", (const void *) v));
++ DISPATCH(ProgramStringARB, (target, format, len, string), (F, "glProgramStringARB(0x%x, 0x%x, %d, %p);\n", target, format, len, (const void *) string));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos4sMESA)(GLshort x, GLshort y, GLshort z, GLshort w)
++KEYWORD1 void KEYWORD2 NAME(ProgramEnvParameter4dARB)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+ {
+- DISPATCH(WindowPos4sMESA, (x, y, z, w), (F, "glWindowPos4sMESA(%d, %d, %d, %d);\n", x, y, z, w));
++ DISPATCH(ProgramEnvParameter4dARB, (target, index, x, y, z, w), (F, "glProgramEnvParameter4dARB(0x%x, %d, %f, %f, %f, %f);\n", target, index, x, y, z, w));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos4svMESA)(const GLshort * v)
++KEYWORD1 void KEYWORD2 NAME(ProgramEnvParameter4dvARB)(GLenum target, GLuint index, const GLdouble * params)
+ {
+- DISPATCH(WindowPos4svMESA, (v), (F, "glWindowPos4svMESA(%p);\n", (const void *) v));
++ DISPATCH(ProgramEnvParameter4dvARB, (target, index, params), (F, "glProgramEnvParameter4dvARB(0x%x, %d, %p);\n", target, index, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiModeDrawArraysIBM)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride)
++KEYWORD1 void KEYWORD2 NAME(ProgramEnvParameter4fARB)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+ {
+- DISPATCH(MultiModeDrawArraysIBM, (mode, first, count, primcount, modestride), (F, "glMultiModeDrawArraysIBM(%p, %p, %p, %d, %d);\n", (const void *) mode, (const void *) first, (const void *) count, primcount, modestride));
++ DISPATCH(ProgramEnvParameter4fARB, (target, index, x, y, z, w), (F, "glProgramEnvParameter4fARB(0x%x, %d, %f, %f, %f, %f);\n", target, index, x, y, z, w));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(MultiModeDrawElementsIBM)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride)
++KEYWORD1 void KEYWORD2 NAME(ProgramEnvParameter4fvARB)(GLenum target, GLuint index, const GLfloat * params)
+ {
+- DISPATCH(MultiModeDrawElementsIBM, (mode, count, type, indices, primcount, modestride), (F, "glMultiModeDrawElementsIBM(%p, %p, 0x%x, %p, %d, %d);\n", (const void *) mode, (const void *) count, type, (const void *) indices, primcount, modestride));
++ DISPATCH(ProgramEnvParameter4fvARB, (target, index, params), (F, "glProgramEnvParameter4fvARB(0x%x, %d, %p);\n", target, index, (const void *) params));
+ }
+
+-/* No dispatch for ColorPointerListIBM() */
+-/* No dispatch for SecondaryColorPointerListIBM() */
+-/* No dispatch for EdgeFlagPointerListIBM() */
+-/* No dispatch for FogCoordPointerListIBM() */
+-/* No dispatch for IndexPointerListIBM() */
+-/* No dispatch for NormalPointerListIBM() */
+-/* No dispatch for TexCoordPointerListIBM() */
+-/* No dispatch for VertexPointerListIBM() */
+-KEYWORD1 void KEYWORD2 NAME(TbufferMask3DFX)(GLuint mask)
++KEYWORD1 void KEYWORD2 NAME(ProgramLocalParameter4dARB)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+ {
+- DISPATCH(TbufferMask3DFX, (mask), (F, "glTbufferMask3DFX(%d);\n", mask));
++ DISPATCH(ProgramLocalParameter4dARB, (target, index, x, y, z, w), (F, "glProgramLocalParameter4dARB(0x%x, %d, %f, %f, %f, %f);\n", target, index, x, y, z, w));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(SampleMaskEXT)(GLclampf value, GLboolean invert)
++KEYWORD1 void KEYWORD2 NAME(ProgramLocalParameter4dvARB)(GLenum target, GLuint index, const GLdouble * params)
+ {
+- DISPATCH(SampleMaskSGIS, (value, invert), (F, "glSampleMaskEXT(%f, %d);\n", value, invert));
++ DISPATCH(ProgramLocalParameter4dvARB, (target, index, params), (F, "glProgramLocalParameter4dvARB(0x%x, %d, %p);\n", target, index, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(SamplePatternEXT)(GLenum pattern)
++KEYWORD1 void KEYWORD2 NAME(ProgramLocalParameter4fARB)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+ {
+- DISPATCH(SamplePatternSGIS, (pattern), (F, "glSamplePatternEXT(0x%x);\n", pattern));
++ DISPATCH(ProgramLocalParameter4fARB, (target, index, x, y, z, w), (F, "glProgramLocalParameter4fARB(0x%x, %d, %f, %f, %f, %f);\n", target, index, x, y, z, w));
+ }
+
+-/* No dispatch for TextureColorMaskSGIS() */
+-/* No dispatch for IglooInterfaceSGIX() */
+-/* No dispatch for MapControlPointsNV() */
+-/* No dispatch for MapParameterivNV() */
+-/* No dispatch for MapParameterfvNV() */
+-/* No dispatch for GetMapControlPointsNV() */
+-/* No dispatch for GetMapParameterivNV() */
+-/* No dispatch for GetMapParameterfvNV() */
+-/* No dispatch for GetMapAttribParameterivNV() */
+-/* No dispatch for GetMapAttribParameterfvNV() */
+-/* No dispatch for EvalMapsNV() */
+-/* No dispatch for CombinerStageParameterfvNV() */
+-/* No dispatch for GetCombinerStageParameterfvNV() */
+-KEYWORD1 void KEYWORD2 NAME(WindowPos2dARB)(GLdouble x, GLdouble y)
++KEYWORD1 void KEYWORD2 NAME(ProgramLocalParameter4fvARB)(GLenum target, GLuint index, const GLfloat * params)
+ {
+- DISPATCH(WindowPos2dMESA, (x, y), (F, "glWindowPos2dARB(%f, %f);\n", x, y));
++ DISPATCH(ProgramLocalParameter4fvARB, (target, index, params), (F, "glProgramLocalParameter4fvARB(0x%x, %d, %p);\n", target, index, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos2fARB)(GLfloat x, GLfloat y)
++KEYWORD1 void KEYWORD2 NAME(GetProgramEnvParameterdvARB)(GLenum target, GLuint index, GLdouble * params)
+ {
+- DISPATCH(WindowPos2fMESA, (x, y), (F, "glWindowPos2fARB(%f, %f);\n", x, y));
++ DISPATCH(GetProgramEnvParameterdvARB, (target, index, params), (F, "glGetProgramEnvParameterdvARB(0x%x, %d, %p);\n", target, index, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos2iARB)(GLint x, GLint y)
++KEYWORD1 void KEYWORD2 NAME(GetProgramEnvParameterfvARB)(GLenum target, GLuint index, GLfloat * params)
+ {
+- DISPATCH(WindowPos2iMESA, (x, y), (F, "glWindowPos2iARB(%d, %d);\n", x, y));
++ DISPATCH(GetProgramEnvParameterfvARB, (target, index, params), (F, "glGetProgramEnvParameterfvARB(0x%x, %d, %p);\n", target, index, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos2sARB)(GLshort x, GLshort y)
++KEYWORD1 void KEYWORD2 NAME(GetProgramLocalParameterdvARB)(GLenum target, GLuint index, GLdouble * params)
+ {
+- DISPATCH(WindowPos2sMESA, (x, y), (F, "glWindowPos2sARB(%d, %d);\n", x, y));
++ DISPATCH(GetProgramLocalParameterdvARB, (target, index, params), (F, "glGetProgramLocalParameterdvARB(0x%x, %d, %p);\n", target, index, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos2dvARB)(const GLdouble * p)
++KEYWORD1 void KEYWORD2 NAME(GetProgramLocalParameterfvARB)(GLenum target, GLuint index, GLfloat * params)
+ {
+- DISPATCH(WindowPos2dvMESA, (p), (F, "glWindowPos2dvARB(%p /* %g, %g */);\n", (const void *) p, p[0], p[1]));
++ DISPATCH(GetProgramLocalParameterfvARB, (target, index, params), (F, "glGetProgramLocalParameterfvARB(0x%x, %d, %p);\n", target, index, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos2fvARB)(const GLfloat * p)
++KEYWORD1 void KEYWORD2 NAME(GetProgramivARB)(GLenum target, GLenum pname, GLint * params)
+ {
+- DISPATCH(WindowPos2fvMESA, (p), (F, "glWindowPos2fvARB(%p /* %g, %g */);\n", (const void *) p, p[0], p[1]));
++ DISPATCH(GetProgramivARB, (target, pname, params), (F, "glGetProgramivARB(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos2ivARB)(const GLint * p)
++KEYWORD1 void KEYWORD2 NAME(GetProgramStringARB)(GLenum target, GLenum pname, GLvoid * string)
+ {
+- DISPATCH(WindowPos2ivMESA, (p), (F, "glWindowPos2ivARB(%p);\n", (const void *) p));
++ DISPATCH(GetProgramStringARB, (target, pname, string), (F, "glGetProgramStringARB(0x%x, 0x%x, %p);\n", target, pname, (const void *) string));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos2svARB)(const GLshort * p)
++KEYWORD1 void KEYWORD2 NAME(ProgramNamedParameter4fNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+ {
+- DISPATCH(WindowPos2svMESA, (p), (F, "glWindowPos2svARB(%p);\n", (const void *) p));
++ DISPATCH(ProgramNamedParameter4fNV, (id, len, name, x, y, z, w), (F, "glProgramNamedParameter4fNV(%d, %d, %p, %f, %f, %f, %f);\n", id, len, (const void *) name, x, y, z, w));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos3dARB)(GLdouble x, GLdouble y, GLdouble z)
++KEYWORD1 void KEYWORD2 NAME(ProgramNamedParameter4dNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+ {
+- DISPATCH(WindowPos3dMESA, (x, y, z), (F, "glWindowPos3dARB(%f, %f, %f);\n", x, y, z));
++ DISPATCH(ProgramNamedParameter4dNV, (id, len, name, x, y, z, w), (F, "glProgramNamedParameter4dNV(%d, %d, %p, %f, %f, %f, %f);\n", id, len, (const void *) name, x, y, z, w));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos3fARB)(GLfloat x, GLfloat y, GLfloat z)
++KEYWORD1 void KEYWORD2 NAME(ProgramNamedParameter4fvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v)
+ {
+- DISPATCH(WindowPos3fMESA, (x, y, z), (F, "glWindowPos3fARB(%f, %f, %f);\n", x, y, z));
++ DISPATCH(ProgramNamedParameter4fvNV, (id, len, name, v), (F, "glProgramNamedParameter4fvNV(%d, %d, %p, %p);\n", id, len, (const void *) name, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos3iARB)(GLint x, GLint y, GLint z)
++KEYWORD1 void KEYWORD2 NAME(ProgramNamedParameter4dvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v)
+ {
+- DISPATCH(WindowPos3iMESA, (x, y, z), (F, "glWindowPos3iARB(%d, %d, %d);\n", x, y, z));
++ DISPATCH(ProgramNamedParameter4dvNV, (id, len, name, v), (F, "glProgramNamedParameter4dvNV(%d, %d, %p, %p);\n", id, len, (const void *) name, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos3sARB)(GLshort x, GLshort y, GLshort z)
++KEYWORD1 void KEYWORD2 NAME(GetProgramNamedParameterfvNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params)
+ {
+- DISPATCH(WindowPos3sMESA, (x, y, z), (F, "glWindowPos3sARB(%d, %d, %d);\n", x, y, z));
++ DISPATCH(GetProgramNamedParameterfvNV, (id, len, name, params), (F, "glGetProgramNamedParameterfvNV(%d, %d, %p, %p);\n", id, len, (const void *) name, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos3dvARB)(const GLdouble * p)
++KEYWORD1 void KEYWORD2 NAME(GetProgramNamedParameterdvNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params)
+ {
+- DISPATCH(WindowPos3dvMESA, (p), (F, "glWindowPos3dvARB(%p /* %g, %g, %g */);\n", (const void *) p, p[0], p[1], p[2]));
++ DISPATCH(GetProgramNamedParameterdvNV, (id, len, name, params), (F, "glGetProgramNamedParameterdvNV(%d, %d, %p, %p);\n", id, len, (const void *) name, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos3fvARB)(const GLfloat * p)
++KEYWORD1 void KEYWORD2 NAME(BindBufferARB)(GLenum target, GLuint buffer)
+ {
+- DISPATCH(WindowPos3fvMESA, (p), (F, "glWindowPos3fvARB(%p /* %g, %g, %g */);\n", (const void *) p, p[0], p[1], p[2]));
++ DISPATCH(BindBufferARB, (target, buffer), (F, "glBindBufferARB(0x%x, %d);\n", target, buffer));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos3ivARB)(const GLint * p)
++KEYWORD1 void KEYWORD2 NAME(BufferDataARB)(GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage)
+ {
+- DISPATCH(WindowPos3ivMESA, (p), (F, "glWindowPos3ivARB(%p);\n", (const void *) p));
++ DISPATCH(BufferDataARB, (target, size, data, usage), (F, "glBufferDataARB(0x%x, %d, %p, 0x%x);\n", target, size, (const void *) data, usage));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos3svARB)(const GLshort * p)
++KEYWORD1 void KEYWORD2 NAME(BufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data)
+ {
+- DISPATCH(WindowPos3svMESA, (p), (F, "glWindowPos3svARB(%p);\n", (const void *) p));
++ DISPATCH(BufferSubDataARB, (target, offset, size, data), (F, "glBufferSubDataARB(0x%x, %d, %d, %p);\n", target, offset, size, (const void *) data));
+ }
+
+-KEYWORD1 GLboolean KEYWORD2 NAME(AreProgramsResidentNV)(GLsizei n, const GLuint * ids, GLboolean * residences)
++KEYWORD1 void KEYWORD2 NAME(DeleteBuffersARB)(GLsizei n, const GLuint * buffer)
+ {
+- RETURN_DISPATCH(AreProgramsResidentNV, (n, ids, residences), (F, "glAreProgramsResidentNV(%d, %p, %p);\n", n, (const void *) ids, (const void *) residences));
++ DISPATCH(DeleteBuffersARB, (n, buffer), (F, "glDeleteBuffersARB(%d, %p);\n", n, (const void *) buffer));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(BindProgramNV)(GLenum target, GLuint id)
++KEYWORD1 void KEYWORD2 NAME(GenBuffersARB)(GLsizei n, GLuint * buffer)
+ {
+- DISPATCH(BindProgramNV, (target, id), (F, "glBindProgramNV(0x%x, %d);\n", target, id));
++ DISPATCH(GenBuffersARB, (n, buffer), (F, "glGenBuffersARB(%d, %p);\n", n, (const void *) buffer));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(DeleteProgramsNV)(GLsizei n, const GLuint * ids)
++KEYWORD1 void KEYWORD2 NAME(GetBufferParameterivARB)(GLenum target, GLenum pname, GLint * params)
+ {
+- DISPATCH(DeleteProgramsNV, (n, ids), (F, "glDeleteProgramsNV(%d, %p);\n", n, (const void *) ids));
++ DISPATCH(GetBufferParameterivARB, (target, pname, params), (F, "glGetBufferParameterivARB(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ExecuteProgramNV)(GLenum target, GLuint id, const GLfloat * params)
++KEYWORD1 void KEYWORD2 NAME(GetBufferPointervARB)(GLenum target, GLenum pname, GLvoid ** params)
+ {
+- DISPATCH(ExecuteProgramNV, (target, id, params), (F, "glExecuteProgramNV(0x%x, %d, %p);\n", target, id, (const void *) params));
++ DISPATCH(GetBufferPointervARB, (target, pname, params), (F, "glGetBufferPointervARB(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GenProgramsNV)(GLsizei n, GLuint * ids)
++KEYWORD1 void KEYWORD2 NAME(GetBufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid * data)
+ {
+- DISPATCH(GenProgramsNV, (n, ids), (F, "glGenProgramsNV(%d, %p);\n", n, (const void *) ids));
++ DISPATCH(GetBufferSubDataARB, (target, offset, size, data), (F, "glGetBufferSubDataARB(0x%x, %d, %d, %p);\n", target, offset, size, (const void *) data));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetProgramParameterdvNV)(GLenum target, GLuint index, GLenum pname, GLdouble * params)
++KEYWORD1 GLboolean KEYWORD2 NAME(IsBufferARB)(GLuint buffer)
+ {
+- DISPATCH(GetProgramParameterdvNV, (target, index, pname, params), (F, "glGetProgramParameterdvNV(0x%x, %d, 0x%x, %p);\n", target, index, pname, (const void *) params));
++ RETURN_DISPATCH(IsBufferARB, (buffer), (F, "glIsBufferARB(%d);\n", buffer));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetProgramParameterfvNV)(GLenum target, GLuint index, GLenum pname, GLfloat * params)
++KEYWORD1 GLvoid * KEYWORD2 NAME(MapBufferARB)(GLenum target, GLenum access)
+ {
+- DISPATCH(GetProgramParameterfvNV, (target, index, pname, params), (F, "glGetProgramParameterfvNV(0x%x, %d, 0x%x, %p);\n", target, index, pname, (const void *) params));
++ RETURN_DISPATCH(MapBufferARB, (target, access), (F, "glMapBufferARB(0x%x, 0x%x);\n", target, access));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetProgramivNV)(GLuint id, GLenum pname, GLint * params)
++KEYWORD1 GLboolean KEYWORD2 NAME(UnmapBufferARB)(GLenum target)
+ {
+- DISPATCH(GetProgramivNV, (id, pname, params), (F, "glGetProgramivNV(%d, 0x%x, %p);\n", id, pname, (const void *) params));
++ RETURN_DISPATCH(UnmapBufferARB, (target), (F, "glUnmapBufferARB(0x%x);\n", target));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetProgramStringNV)(GLuint id, GLenum pname, GLubyte * program)
++KEYWORD1 void KEYWORD2 NAME(DepthBoundsEXT)(GLclampd zmin, GLclampd zmax)
+ {
+- DISPATCH(GetProgramStringNV, (id, pname, program), (F, "glGetProgramStringNV(%d, 0x%x, %p);\n", id, pname, (const void *) program));
++ DISPATCH(DepthBoundsEXT, (zmin, zmax), (F, "glDepthBoundsEXT(%f, %f);\n", zmin, zmax));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetTrackMatrixivNV)(GLenum target, GLuint address, GLenum pname, GLint * params)
++KEYWORD1 void KEYWORD2 NAME(GenQueriesARB)(GLsizei n, GLuint * ids)
+ {
+- DISPATCH(GetTrackMatrixivNV, (target, address, pname, params), (F, "glGetTrackMatrixivNV(0x%x, %d, 0x%x, %p);\n", target, address, pname, (const void *) params));
++ DISPATCH(GenQueriesARB, (n, ids), (F, "glGenQueriesARB(%d, %p);\n", n, (const void *) ids));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetVertexAttribdvNV)(GLuint index, GLenum pname, GLdouble * params)
++KEYWORD1 void KEYWORD2 NAME(DeleteQueriesARB)(GLsizei n, const GLuint * ids)
+ {
+- DISPATCH(GetVertexAttribdvNV, (index, pname, params), (F, "glGetVertexAttribdvNV(%d, 0x%x, %p);\n", index, pname, (const void *) params));
++ DISPATCH(DeleteQueriesARB, (n, ids), (F, "glDeleteQueriesARB(%d, %p);\n", n, (const void *) ids));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetVertexAttribfvNV)(GLuint index, GLenum pname, GLfloat * params)
++KEYWORD1 GLboolean KEYWORD2 NAME(IsQueryARB)(GLuint id)
+ {
+- DISPATCH(GetVertexAttribfvNV, (index, pname, params), (F, "glGetVertexAttribfvNV(%d, 0x%x, %p);\n", index, pname, (const void *) params));
++ RETURN_DISPATCH(IsQueryARB, (id), (F, "glIsQueryARB(%d);\n", id));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetVertexAttribivNV)(GLuint index, GLenum pname, GLint * params)
++KEYWORD1 void KEYWORD2 NAME(BeginQueryARB)(GLenum target, GLuint id)
+ {
+- DISPATCH(GetVertexAttribivNV, (index, pname, params), (F, "glGetVertexAttribivNV(%d, 0x%x, %p);\n", index, pname, (const void *) params));
++ DISPATCH(BeginQueryARB, (target, id), (F, "glBeginQueryARB(0x%x, %d);\n", target, id));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetVertexAttribPointervNV)(GLuint index, GLenum pname, GLvoid ** pointer)
++KEYWORD1 void KEYWORD2 NAME(EndQueryARB)(GLenum target)
+ {
+- DISPATCH(GetVertexAttribPointervNV, (index, pname, pointer), (F, "glGetVertexAttribPointervNV(%d, 0x%x, %p);\n", index, pname, (const void *) pointer));
++ DISPATCH(EndQueryARB, (target), (F, "glEndQueryARB(0x%x);\n", target));
+ }
+
+-KEYWORD1 GLboolean KEYWORD2 NAME(IsProgramNV)(GLuint id)
++KEYWORD1 void KEYWORD2 NAME(GetQueryivARB)(GLenum target, GLenum pname, GLint * params)
+ {
+- RETURN_DISPATCH(IsProgramNV, (id), (F, "glIsProgramNV(%d);\n", id));
++ DISPATCH(GetQueryivARB, (target, pname, params), (F, "glGetQueryivARB(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(LoadProgramNV)(GLenum target, GLuint id, GLsizei len, const GLubyte * program)
++KEYWORD1 void KEYWORD2 NAME(GetQueryObjectivARB)(GLuint id, GLenum pname, GLint * params)
+ {
+- DISPATCH(LoadProgramNV, (target, id, len, program), (F, "glLoadProgramNV(0x%x, %d, %d, %p);\n", target, id, len, (const void *) program));
++ DISPATCH(GetQueryObjectivARB, (id, pname, params), (F, "glGetQueryObjectivARB(%d, 0x%x, %p);\n", id, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ProgramParameter4dNV)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
++KEYWORD1 void KEYWORD2 NAME(GetQueryObjectuivARB)(GLuint id, GLenum pname, GLuint * params)
+ {
+- DISPATCH(ProgramParameter4dNV, (target, index, x, y, z, w), (F, "glProgramParameter4dNV(0x%x, %d, %f, %f, %f, %f);\n", target, index, x, y, z, w));
++ DISPATCH(GetQueryObjectuivARB, (id, pname, params), (F, "glGetQueryObjectuivARB(%d, 0x%x, %p);\n", id, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ProgramParameter4dvNV)(GLenum target, GLuint index, const GLdouble * params)
++KEYWORD1 void KEYWORD2 NAME(MultiModeDrawArraysIBM)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride)
+ {
+- DISPATCH(ProgramParameter4dvNV, (target, index, params), (F, "glProgramParameter4dvNV(0x%x, %d, %p /* %g, %g, %g, %g */);\n", target, index, (const void *) params, params[0], params[1], params[2], params[3]));
++ DISPATCH(MultiModeDrawArraysIBM, (mode, first, count, primcount, modestride), (F, "glMultiModeDrawArraysIBM(%p, %p, %p, %d, %d);\n", (const void *) mode, (const void *) first, (const void *) count, primcount, modestride));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ProgramParameter4fNV)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
++KEYWORD1 void KEYWORD2 NAME(MultiModeDrawElementsIBM)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride)
+ {
+- DISPATCH(ProgramParameter4fNV, (target, index, x, y, z, w), (F, "glProgramParameter4fNV(0x%x, %d, %f, %f, %f, %f);\n", target, index, x, y, z, w));
++ DISPATCH(MultiModeDrawElementsIBM, (mode, count, type, indices, primcount, modestride), (F, "glMultiModeDrawElementsIBM(%p, %p, 0x%x, %p, %d, %d);\n", (const void *) mode, (const void *) count, type, (const void *) indices, primcount, modestride));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ProgramParameter4fvNV)(GLenum target, GLuint index, const GLfloat * params)
++KEYWORD1 void KEYWORD2 NAME(BlendEquationSeparateEXT)(GLenum modeRGB, GLenum modeA)
+ {
+- DISPATCH(ProgramParameter4fvNV, (target, index, params), (F, "glProgramParameter4fvNV(0x%x, %d, %p /* %g, %g, %g, %g */);\n", target, index, (const void *) params, params[0], params[1], params[2], params[3]));
++ DISPATCH(BlendEquationSeparateEXT, (modeRGB, modeA), (F, "glBlendEquationSeparateEXT(0x%x, 0x%x);\n", modeRGB, modeA));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ProgramParameters4dvNV)(GLenum target, GLuint index, GLuint num, const GLdouble * params)
++KEYWORD1 void KEYWORD2 NAME(ActiveTexture)(GLenum texture)
+ {
+- DISPATCH(ProgramParameters4dvNV, (target, index, num, params), (F, "glProgramParameters4dvNV(0x%x, %d, %d, %p /* %g, %g, %g, %g */);\n", target, index, num, (const void *) params, params[0], params[1], params[2], params[3]));
++ DISPATCH(ActiveTextureARB, (texture), (F, "glActiveTexture(0x%x);\n", texture));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ProgramParameters4fvNV)(GLenum target, GLuint index, GLuint num, const GLfloat * params)
++KEYWORD1 void KEYWORD2 NAME(ClientActiveTexture)(GLenum texture)
+ {
+- DISPATCH(ProgramParameters4fvNV, (target, index, num, params), (F, "glProgramParameters4fvNV(0x%x, %d, %d, %p /* %g, %g, %g, %g */);\n", target, index, num, (const void *) params, params[0], params[1], params[2], params[3]));
++ DISPATCH(ClientActiveTextureARB, (texture), (F, "glClientActiveTexture(0x%x);\n", texture));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(RequestResidentProgramsNV)(GLsizei n, const GLuint * ids)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1d)(GLenum target, GLdouble s)
+ {
+- DISPATCH(RequestResidentProgramsNV, (n, ids), (F, "glRequestResidentProgramsNV(%d, %p);\n", n, (const void *) ids));
++ DISPATCH(MultiTexCoord1dARB, (target, s), (F, "glMultiTexCoord1d(0x%x, %f);\n", target, s));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(TrackMatrixNV)(GLenum target, GLuint address, GLenum matrix, GLenum transform)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1dv)(GLenum target, const GLdouble * v)
+ {
+- DISPATCH(TrackMatrixNV, (target, address, matrix, transform), (F, "glTrackMatrixNV(0x%x, %d, 0x%x, 0x%x);\n", target, address, matrix, transform));
++ DISPATCH(MultiTexCoord1dvARB, (target, v), (F, "glMultiTexCoord1dv(0x%x, %p);\n", target, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttribPointerNV)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1f)(GLenum target, GLfloat s)
+ {
+- DISPATCH(VertexAttribPointerNV, (index, size, type, stride, pointer), (F, "glVertexAttribPointerNV(%d, %d, 0x%x, %d, %p);\n", index, size, type, stride, (const void *) pointer));
++ DISPATCH(MultiTexCoord1fARB, (target, s), (F, "glMultiTexCoord1f(0x%x, %f);\n", target, s));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib1dNV)(GLuint index, GLdouble x)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1fv)(GLenum target, const GLfloat * v)
+ {
+- DISPATCH(VertexAttrib1dNV, (index, x), (F, "glVertexAttrib1dNV(%d, %f);\n", index, x));
++ DISPATCH(MultiTexCoord1fvARB, (target, v), (F, "glMultiTexCoord1fv(0x%x, %p);\n", target, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib1dvNV)(GLuint index, const GLdouble * v)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1i)(GLenum target, GLint s)
+ {
+- DISPATCH(VertexAttrib1dvNV, (index, v), (F, "glVertexAttrib1dvNV(%d, %p);\n", index, (const void *) v));
++ DISPATCH(MultiTexCoord1iARB, (target, s), (F, "glMultiTexCoord1i(0x%x, %d);\n", target, s));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib1fNV)(GLuint index, GLfloat x)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1iv)(GLenum target, const GLint * v)
+ {
+- DISPATCH(VertexAttrib1fNV, (index, x), (F, "glVertexAttrib1fNV(%d, %f);\n", index, x));
++ DISPATCH(MultiTexCoord1ivARB, (target, v), (F, "glMultiTexCoord1iv(0x%x, %p);\n", target, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib1fvNV)(GLuint index, const GLfloat * v)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1s)(GLenum target, GLshort s)
+ {
+- DISPATCH(VertexAttrib1fvNV, (index, v), (F, "glVertexAttrib1fvNV(%d, %p);\n", index, (const void *) v));
++ DISPATCH(MultiTexCoord1sARB, (target, s), (F, "glMultiTexCoord1s(0x%x, %d);\n", target, s));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib1sNV)(GLuint index, GLshort x)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1sv)(GLenum target, const GLshort * v)
+ {
+- DISPATCH(VertexAttrib1sNV, (index, x), (F, "glVertexAttrib1sNV(%d, %d);\n", index, x));
++ DISPATCH(MultiTexCoord1svARB, (target, v), (F, "glMultiTexCoord1sv(0x%x, %p);\n", target, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib1svNV)(GLuint index, const GLshort * v)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2d)(GLenum target, GLdouble s, GLdouble t)
+ {
+- DISPATCH(VertexAttrib1svNV, (index, v), (F, "glVertexAttrib1svNV(%d, %p);\n", index, (const void *) v));
++ DISPATCH(MultiTexCoord2dARB, (target, s, t), (F, "glMultiTexCoord2d(0x%x, %f, %f);\n", target, s, t));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib2dNV)(GLuint index, GLdouble x, GLdouble y)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2dv)(GLenum target, const GLdouble * v)
+ {
+- DISPATCH(VertexAttrib2dNV, (index, x, y), (F, "glVertexAttrib2dNV(%d, %f, %f);\n", index, x, y));
++ DISPATCH(MultiTexCoord2dvARB, (target, v), (F, "glMultiTexCoord2dv(0x%x, %p);\n", target, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib2dvNV)(GLuint index, const GLdouble * v)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2f)(GLenum target, GLfloat s, GLfloat t)
+ {
+- DISPATCH(VertexAttrib2dvNV, (index, v), (F, "glVertexAttrib2dvNV(%d, %p /* %g, %g */);\n", index, (const void *) v, v[0], v[1]));
++ DISPATCH(MultiTexCoord2fARB, (target, s, t), (F, "glMultiTexCoord2f(0x%x, %f, %f);\n", target, s, t));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib2fNV)(GLuint index, GLfloat x, GLfloat y)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2fv)(GLenum target, const GLfloat * v)
+ {
+- DISPATCH(VertexAttrib2fNV, (index, x, y), (F, "glVertexAttrib2fNV(%d, %f, %f);\n", index, x, y));
++ DISPATCH(MultiTexCoord2fvARB, (target, v), (F, "glMultiTexCoord2fv(0x%x, %p);\n", target, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib2fvNV)(GLuint index, const GLfloat * v)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2i)(GLenum target, GLint s, GLint t)
+ {
+- DISPATCH(VertexAttrib2fvNV, (index, v), (F, "glVertexAttrib2fvNV(%d, %p /* %g, %g */);\n", index, (const void *) v, v[0], v[1]));
++ DISPATCH(MultiTexCoord2iARB, (target, s, t), (F, "glMultiTexCoord2i(0x%x, %d, %d);\n", target, s, t));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib2sNV)(GLuint index, GLshort x, GLshort y)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2iv)(GLenum target, const GLint * v)
+ {
+- DISPATCH(VertexAttrib2sNV, (index, x, y), (F, "glVertexAttrib2sNV(%d, %d, %d);\n", index, x, y));
++ DISPATCH(MultiTexCoord2ivARB, (target, v), (F, "glMultiTexCoord2iv(0x%x, %p);\n", target, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib2svNV)(GLuint index, const GLshort * v)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2s)(GLenum target, GLshort s, GLshort t)
+ {
+- DISPATCH(VertexAttrib2svNV, (index, v), (F, "glVertexAttrib2svNV(%d, %p);\n", index, (const void *) v));
++ DISPATCH(MultiTexCoord2sARB, (target, s, t), (F, "glMultiTexCoord2s(0x%x, %d, %d);\n", target, s, t));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib3dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2sv)(GLenum target, const GLshort * v)
+ {
+- DISPATCH(VertexAttrib3dNV, (index, x, y, z), (F, "glVertexAttrib3dNV(%d, %f, %f, %f);\n", index, x, y, z));
++ DISPATCH(MultiTexCoord2svARB, (target, v), (F, "glMultiTexCoord2sv(0x%x, %p);\n", target, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib3dvNV)(GLuint index, const GLdouble * v)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3d)(GLenum target, GLdouble s, GLdouble t, GLdouble r)
+ {
+- DISPATCH(VertexAttrib3dvNV, (index, v), (F, "glVertexAttrib3dvNV(%d, %p /* %g, %g, %g */);\n", index, (const void *) v, v[0], v[1], v[2]));
++ DISPATCH(MultiTexCoord3dARB, (target, s, t, r), (F, "glMultiTexCoord3d(0x%x, %f, %f, %f);\n", target, s, t, r));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib3fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3dv)(GLenum target, const GLdouble * v)
+ {
+- DISPATCH(VertexAttrib3fNV, (index, x, y, z), (F, "glVertexAttrib3fNV(%d, %f, %f, %f);\n", index, x, y, z));
++ DISPATCH(MultiTexCoord3dvARB, (target, v), (F, "glMultiTexCoord3dv(0x%x, %p);\n", target, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib3fvNV)(GLuint index, const GLfloat * v)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3f)(GLenum target, GLfloat s, GLfloat t, GLfloat r)
+ {
+- DISPATCH(VertexAttrib3fvNV, (index, v), (F, "glVertexAttrib3fvNV(%d, %p /* %g, %g, %g */);\n", index, (const void *) v, v[0], v[1], v[2]));
++ DISPATCH(MultiTexCoord3fARB, (target, s, t, r), (F, "glMultiTexCoord3f(0x%x, %f, %f, %f);\n", target, s, t, r));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib3sNV)(GLuint index, GLshort x, GLshort y, GLshort z)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3fv)(GLenum target, const GLfloat * v)
+ {
+- DISPATCH(VertexAttrib3sNV, (index, x, y, z), (F, "glVertexAttrib3sNV(%d, %d, %d, %d);\n", index, x, y, z));
++ DISPATCH(MultiTexCoord3fvARB, (target, v), (F, "glMultiTexCoord3fv(0x%x, %p);\n", target, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib3svNV)(GLuint index, const GLshort * v)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3i)(GLenum target, GLint s, GLint t, GLint r)
+ {
+- DISPATCH(VertexAttrib3svNV, (index, v), (F, "glVertexAttrib3svNV(%d, %p);\n", index, (const void *) v));
++ DISPATCH(MultiTexCoord3iARB, (target, s, t, r), (F, "glMultiTexCoord3i(0x%x, %d, %d, %d);\n", target, s, t, r));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib4dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3iv)(GLenum target, const GLint * v)
+ {
+- DISPATCH(VertexAttrib4dNV, (index, x, y, z, w), (F, "glVertexAttrib4dNV(%d, %f, %f, %f, %f);\n", index, x, y, z, w));
++ DISPATCH(MultiTexCoord3ivARB, (target, v), (F, "glMultiTexCoord3iv(0x%x, %p);\n", target, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib4dvNV)(GLuint index, const GLdouble * v)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3s)(GLenum target, GLshort s, GLshort t, GLshort r)
+ {
+- DISPATCH(VertexAttrib4dvNV, (index, v), (F, "glVertexAttrib4dvNV(%d, %p /* %g, %g, %g, %g */);\n", index, (const void *) v, v[0], v[1], v[2], v[3]));
++ DISPATCH(MultiTexCoord3sARB, (target, s, t, r), (F, "glMultiTexCoord3s(0x%x, %d, %d, %d);\n", target, s, t, r));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib4fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3sv)(GLenum target, const GLshort * v)
+ {
+- DISPATCH(VertexAttrib4fNV, (index, x, y, z, w), (F, "glVertexAttrib4fNV(%d, %f, %f, %f, %f);\n", index, x, y, z, w));
++ DISPATCH(MultiTexCoord3svARB, (target, v), (F, "glMultiTexCoord3sv(0x%x, %p);\n", target, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib4fvNV)(GLuint index, const GLfloat * v)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4d)(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q)
+ {
+- DISPATCH(VertexAttrib4fvNV, (index, v), (F, "glVertexAttrib4fvNV(%d, %p /* %g, %g, %g, %g */);\n", index, (const void *) v, v[0], v[1], v[2], v[3]));
++ DISPATCH(MultiTexCoord4dARB, (target, s, t, r, q), (F, "glMultiTexCoord4d(0x%x, %f, %f, %f, %f);\n", target, s, t, r, q));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib4sNV)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4dv)(GLenum target, const GLdouble * v)
+ {
+- DISPATCH(VertexAttrib4sNV, (index, x, y, z, w), (F, "glVertexAttrib4sNV(%d, %d, %d, %d, %d);\n", index, x, y, z, w));
++ DISPATCH(MultiTexCoord4dvARB, (target, v), (F, "glMultiTexCoord4dv(0x%x, %p);\n", target, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib4svNV)(GLuint index, const GLshort * v)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4f)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+ {
+- DISPATCH(VertexAttrib4svNV, (index, v), (F, "glVertexAttrib4svNV(%d, %p);\n", index, (const void *) v));
++ DISPATCH(MultiTexCoord4fARB, (target, s, t, r, q), (F, "glMultiTexCoord4f(0x%x, %f, %f, %f, %f);\n", target, s, t, r, q));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib4ubNV)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4fv)(GLenum target, const GLfloat * v)
+ {
+- DISPATCH(VertexAttrib4ubNV, (index, x, y, z, w), (F, "glVertexAttrib4ubNV(%d, %d, %d, %d, %d);\n", index, x, y, z, w));
++ DISPATCH(MultiTexCoord4fvARB, (target, v), (F, "glMultiTexCoord4fv(0x%x, %p);\n", target, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib4ubvNV)(GLuint index, const GLubyte * v)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4i)(GLenum target, GLint s, GLint t, GLint r, GLint q)
+ {
+- DISPATCH(VertexAttrib4ubvNV, (index, v), (F, "glVertexAttrib4ubvNV(%d, %p);\n", index, (const void *) v));
++ DISPATCH(MultiTexCoord4iARB, (target, s, t, r, q), (F, "glMultiTexCoord4i(0x%x, %d, %d, %d, %d);\n", target, s, t, r, q));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttribs1dvNV)(GLuint index, GLsizei n, const GLdouble * v)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4iv)(GLenum target, const GLint * v)
+ {
+- DISPATCH(VertexAttribs1dvNV, (index, n, v), (F, "glVertexAttribs1dvNV(%d, %d, %p);\n", index, n, (const void *) v));
++ DISPATCH(MultiTexCoord4ivARB, (target, v), (F, "glMultiTexCoord4iv(0x%x, %p);\n", target, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttribs1fvNV)(GLuint index, GLsizei n, const GLfloat * v)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4s)(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q)
+ {
+- DISPATCH(VertexAttribs1fvNV, (index, n, v), (F, "glVertexAttribs1fvNV(%d, %d, %p);\n", index, n, (const void *) v));
++ DISPATCH(MultiTexCoord4sARB, (target, s, t, r, q), (F, "glMultiTexCoord4s(0x%x, %d, %d, %d, %d);\n", target, s, t, r, q));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttribs1svNV)(GLuint index, GLsizei n, const GLshort * v)
++KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4sv)(GLenum target, const GLshort * v)
+ {
+- DISPATCH(VertexAttribs1svNV, (index, n, v), (F, "glVertexAttribs1svNV(%d, %d, %p);\n", index, n, (const void *) v));
++ DISPATCH(MultiTexCoord4svARB, (target, v), (F, "glMultiTexCoord4sv(0x%x, %p);\n", target, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttribs2dvNV)(GLuint index, GLsizei n, const GLdouble * v)
++KEYWORD1 void KEYWORD2 NAME(LoadTransposeMatrixf)(const GLfloat * m)
+ {
+- DISPATCH(VertexAttribs2dvNV, (index, n, v), (F, "glVertexAttribs2dvNV(%d, %d, %p /* %g, %g */);\n", index, n, (const void *) v, v[0], v[1]));
++ DISPATCH(LoadTransposeMatrixfARB, (m), (F, "glLoadTransposeMatrixf(%p);\n", (const void *) m));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttribs2fvNV)(GLuint index, GLsizei n, const GLfloat * v)
++KEYWORD1 void KEYWORD2 NAME(LoadTransposeMatrixd)(const GLdouble * m)
+ {
+- DISPATCH(VertexAttribs2fvNV, (index, n, v), (F, "glVertexAttribs2fvNV(%d, %d, %p /* %g, %g */);\n", index, n, (const void *) v, v[0], v[1]));
++ DISPATCH(LoadTransposeMatrixdARB, (m), (F, "glLoadTransposeMatrixd(%p);\n", (const void *) m));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttribs2svNV)(GLuint index, GLsizei n, const GLshort * v)
++KEYWORD1 void KEYWORD2 NAME(MultTransposeMatrixf)(const GLfloat * m)
+ {
+- DISPATCH(VertexAttribs2svNV, (index, n, v), (F, "glVertexAttribs2svNV(%d, %d, %p);\n", index, n, (const void *) v));
++ DISPATCH(MultTransposeMatrixfARB, (m), (F, "glMultTransposeMatrixf(%p);\n", (const void *) m));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttribs3dvNV)(GLuint index, GLsizei n, const GLdouble * v)
++KEYWORD1 void KEYWORD2 NAME(MultTransposeMatrixd)(const GLdouble * m)
+ {
+- DISPATCH(VertexAttribs3dvNV, (index, n, v), (F, "glVertexAttribs3dvNV(%d, %d, %p /* %g, %g, %g */);\n", index, n, (const void *) v, v[0], v[1], v[2]));
++ DISPATCH(MultTransposeMatrixdARB, (m), (F, "glMultTransposeMatrixd(%p);\n", (const void *) m));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttribs3fvNV)(GLuint index, GLsizei n, const GLfloat * v)
++KEYWORD1 void KEYWORD2 NAME(SampleCoverage)(GLclampf value, GLboolean invert)
+ {
+- DISPATCH(VertexAttribs3fvNV, (index, n, v), (F, "glVertexAttribs3fvNV(%d, %d, %p /* %g, %g, %g */);\n", index, n, (const void *) v, v[0], v[1], v[2]));
++ DISPATCH(SampleCoverageARB, (value, invert), (F, "glSampleCoverage(%f, %d);\n", value, invert));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttribs3svNV)(GLuint index, GLsizei n, const GLshort * v)
++KEYWORD1 void KEYWORD2 NAME(CompressedTexImage3D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * data)
+ {
+- DISPATCH(VertexAttribs3svNV, (index, n, v), (F, "glVertexAttribs3svNV(%d, %d, %p);\n", index, n, (const void *) v));
++ DISPATCH(CompressedTexImage3DARB, (target, level, internalformat, width, height, depth, border, imageSize, data), (F, "glCompressedTexImage3D(0x%x, %d, 0x%x, %d, %d, %d, %d, %d, %p);\n", target, level, internalformat, width, height, depth, border, imageSize, (const void *) data));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttribs4dvNV)(GLuint index, GLsizei n, const GLdouble * v)
++KEYWORD1 void KEYWORD2 NAME(CompressedTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data)
+ {
+- DISPATCH(VertexAttribs4dvNV, (index, n, v), (F, "glVertexAttribs4dvNV(%d, %d, %p /* %g, %g, %g, %g */);\n", index, n, (const void *) v, v[0], v[1], v[2], v[3]));
++ DISPATCH(CompressedTexImage2DARB, (target, level, internalformat, width, height, border, imageSize, data), (F, "glCompressedTexImage2D(0x%x, %d, 0x%x, %d, %d, %d, %d, %p);\n", target, level, internalformat, width, height, border, imageSize, (const void *) data));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttribs4fvNV)(GLuint index, GLsizei n, const GLfloat * v)
++KEYWORD1 void KEYWORD2 NAME(CompressedTexImage1D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * data)
+ {
+- DISPATCH(VertexAttribs4fvNV, (index, n, v), (F, "glVertexAttribs4fvNV(%d, %d, %p /* %g, %g, %g, %g */);\n", index, n, (const void *) v, v[0], v[1], v[2], v[3]));
++ DISPATCH(CompressedTexImage1DARB, (target, level, internalformat, width, border, imageSize, data), (F, "glCompressedTexImage1D(0x%x, %d, 0x%x, %d, %d, %d, %p);\n", target, level, internalformat, width, border, imageSize, (const void *) data));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttribs4svNV)(GLuint index, GLsizei n, const GLshort * v)
++KEYWORD1 void KEYWORD2 NAME(CompressedTexSubImage3D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data)
+ {
+- DISPATCH(VertexAttribs4svNV, (index, n, v), (F, "glVertexAttribs4svNV(%d, %d, %p);\n", index, n, (const void *) v));
++ DISPATCH(CompressedTexSubImage3DARB, (target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data), (F, "glCompressedTexSubImage3D(0x%x, %d, %d, %d, %d, %d, %d, %d, 0x%x, %d, %p);\n", target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, (const void *) data));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttribs4ubvNV)(GLuint index, GLsizei n, const GLubyte * v)
++KEYWORD1 void KEYWORD2 NAME(CompressedTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data)
+ {
+- DISPATCH(VertexAttribs4ubvNV, (index, n, v), (F, "glVertexAttribs4ubvNV(%d, %d, %p);\n", index, n, (const void *) v));
++ DISPATCH(CompressedTexSubImage2DARB, (target, level, xoffset, yoffset, width, height, format, imageSize, data), (F, "glCompressedTexSubImage2D(0x%x, %d, %d, %d, %d, %d, 0x%x, %d, %p);\n", target, level, xoffset, yoffset, width, height, format, imageSize, (const void *) data));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(PointParameteriNV)(GLenum pname, GLint params)
++KEYWORD1 void KEYWORD2 NAME(CompressedTexSubImage1D)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data)
+ {
+- DISPATCH(PointParameteriNV, (pname, params), (F, "glPointParameteriNV(0x%x, %d);\n", pname, params));
++ DISPATCH(CompressedTexSubImage1DARB, (target, level, xoffset, width, format, imageSize, data), (F, "glCompressedTexSubImage1D(0x%x, %d, %d, %d, 0x%x, %d, %p);\n", target, level, xoffset, width, format, imageSize, (const void *) data));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(PointParameterivNV)(GLenum pname, const GLint * params)
++KEYWORD1 void KEYWORD2 NAME(GetCompressedTexImage)(GLenum target, GLint level, GLvoid * img)
+ {
+- DISPATCH(PointParameterivNV, (pname, params), (F, "glPointParameterivNV(0x%x, %p);\n", pname, (const void *) params));
++ DISPATCH(GetCompressedTexImageARB, (target, level, img), (F, "glGetCompressedTexImage(0x%x, %d, %p);\n", target, level, (const void *) img));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(BlendFuncSeparate)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
+@@ -4041,7 +3933,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(SecondaryColor3dv)(const GLdouble * v)
+ {
+- DISPATCH(SecondaryColor3dvEXT, (v), (F, "glSecondaryColor3dv(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2]));
++ DISPATCH(SecondaryColor3dvEXT, (v), (F, "glSecondaryColor3dv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(SecondaryColor3f)(GLfloat red, GLfloat green, GLfloat blue)
+@@ -4051,7 +3943,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(SecondaryColor3fv)(const GLfloat * v)
+ {
+- DISPATCH(SecondaryColor3fvEXT, (v), (F, "glSecondaryColor3fv(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2]));
++ DISPATCH(SecondaryColor3fvEXT, (v), (F, "glSecondaryColor3fv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(SecondaryColor3i)(GLint red, GLint green, GLint blue)
+@@ -4104,7 +3996,7 @@
+ DISPATCH(SecondaryColor3usvEXT, (v), (F, "glSecondaryColor3usv(%p);\n", (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(SecondaryColorPointer)(GLint size, GLenum type, GLsizei stride, const void * pointer)
++KEYWORD1 void KEYWORD2 NAME(SecondaryColorPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer)
+ {
+ DISPATCH(SecondaryColorPointerEXT, (size, type, stride, pointer), (F, "glSecondaryColorPointer(%d, 0x%x, %d, %p);\n", size, type, stride, (const void *) pointer));
+ }
+@@ -4116,7 +4008,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(WindowPos2dv)(const GLdouble * v)
+ {
+- DISPATCH(WindowPos2dvMESA, (v), (F, "glWindowPos2dv(%p /* %g, %g */);\n", (const void *) v, v[0], v[1]));
++ DISPATCH(WindowPos2dvMESA, (v), (F, "glWindowPos2dv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(WindowPos2f)(GLfloat x, GLfloat y)
+@@ -4126,7 +4018,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(WindowPos2fv)(const GLfloat * v)
+ {
+- DISPATCH(WindowPos2fvMESA, (v), (F, "glWindowPos2fv(%p /* %g, %g */);\n", (const void *) v, v[0], v[1]));
++ DISPATCH(WindowPos2fvMESA, (v), (F, "glWindowPos2fv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(WindowPos2i)(GLint x, GLint y)
+@@ -4156,7 +4048,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(WindowPos3dv)(const GLdouble * v)
+ {
+- DISPATCH(WindowPos3dvMESA, (v), (F, "glWindowPos3dv(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2]));
++ DISPATCH(WindowPos3dvMESA, (v), (F, "glWindowPos3dv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(WindowPos3f)(GLfloat x, GLfloat y, GLfloat z)
+@@ -4166,7 +4058,7 @@
+
+ KEYWORD1 void KEYWORD2 NAME(WindowPos3fv)(const GLfloat * v)
+ {
+- DISPATCH(WindowPos3fvMESA, (v), (F, "glWindowPos3fv(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2]));
++ DISPATCH(WindowPos3fvMESA, (v), (F, "glWindowPos3fv(%p);\n", (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(WindowPos3i)(GLint x, GLint y, GLint z)
+@@ -4181,52 +4073,197 @@
+
+ KEYWORD1 void KEYWORD2 NAME(WindowPos3s)(GLshort x, GLshort y, GLshort z)
+ {
+- DISPATCH(WindowPos3sMESA, (x, y, z), (F, "glWindowPos3s(%d, %d, %d);\n", x, y, z));
++ DISPATCH(WindowPos3sMESA, (x, y, z), (F, "glWindowPos3s(%d, %d, %d);\n", x, y, z));
++}
++
++KEYWORD1 void KEYWORD2 NAME(WindowPos3sv)(const GLshort * v)
++{
++ DISPATCH(WindowPos3svMESA, (v), (F, "glWindowPos3sv(%p);\n", (const void *) v));
++}
++
++KEYWORD1 void KEYWORD2 NAME(BindBuffer)(GLenum target, GLuint buffer)
++{
++ DISPATCH(BindBufferARB, (target, buffer), (F, "glBindBuffer(0x%x, %d);\n", target, buffer));
++}
++
++KEYWORD1 void KEYWORD2 NAME(BufferData)(GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage)
++{
++ DISPATCH(BufferDataARB, (target, size, data, usage), (F, "glBufferData(0x%x, %d, %p, 0x%x);\n", target, size, (const void *) data, usage));
++}
++
++KEYWORD1 void KEYWORD2 NAME(BufferSubData)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data)
++{
++ DISPATCH(BufferSubDataARB, (target, offset, size, data), (F, "glBufferSubData(0x%x, %d, %d, %p);\n", target, offset, size, (const void *) data));
++}
++
++KEYWORD1 void KEYWORD2 NAME(DeleteBuffers)(GLsizei n, const GLuint * buffer)
++{
++ DISPATCH(DeleteBuffersARB, (n, buffer), (F, "glDeleteBuffers(%d, %p);\n", n, (const void *) buffer));
++}
++
++KEYWORD1 void KEYWORD2 NAME(GenBuffers)(GLsizei n, GLuint * buffer)
++{
++ DISPATCH(GenBuffersARB, (n, buffer), (F, "glGenBuffers(%d, %p);\n", n, (const void *) buffer));
++}
++
++KEYWORD1 void KEYWORD2 NAME(GetBufferParameteriv)(GLenum target, GLenum pname, GLint * params)
++{
++ DISPATCH(GetBufferParameterivARB, (target, pname, params), (F, "glGetBufferParameteriv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
++}
++
++KEYWORD1 void KEYWORD2 NAME(GetBufferPointerv)(GLenum target, GLenum pname, GLvoid ** params)
++{
++ DISPATCH(GetBufferPointervARB, (target, pname, params), (F, "glGetBufferPointerv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
++}
++
++KEYWORD1 void KEYWORD2 NAME(GetBufferSubData)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid * data)
++{
++ DISPATCH(GetBufferSubDataARB, (target, offset, size, data), (F, "glGetBufferSubData(0x%x, %d, %d, %p);\n", target, offset, size, (const void *) data));
++}
++
++KEYWORD1 GLboolean KEYWORD2 NAME(IsBuffer)(GLuint buffer)
++{
++ RETURN_DISPATCH(IsBufferARB, (buffer), (F, "glIsBuffer(%d);\n", buffer));
++}
++
++KEYWORD1 GLvoid * KEYWORD2 NAME(MapBuffer)(GLenum target, GLenum access)
++{
++ RETURN_DISPATCH(MapBufferARB, (target, access), (F, "glMapBuffer(0x%x, 0x%x);\n", target, access));
++}
++
++KEYWORD1 GLboolean KEYWORD2 NAME(UnmapBuffer)(GLenum target)
++{
++ RETURN_DISPATCH(UnmapBufferARB, (target), (F, "glUnmapBuffer(0x%x);\n", target));
++}
++
++KEYWORD1 void KEYWORD2 NAME(GenQueries)(GLsizei n, GLuint * ids)
++{
++ DISPATCH(GenQueriesARB, (n, ids), (F, "glGenQueries(%d, %p);\n", n, (const void *) ids));
++}
++
++KEYWORD1 void KEYWORD2 NAME(DeleteQueries)(GLsizei n, const GLuint * ids)
++{
++ DISPATCH(DeleteQueriesARB, (n, ids), (F, "glDeleteQueries(%d, %p);\n", n, (const void *) ids));
++}
++
++KEYWORD1 GLboolean KEYWORD2 NAME(IsQuery)(GLuint id)
++{
++ RETURN_DISPATCH(IsQueryARB, (id), (F, "glIsQuery(%d);\n", id));
++}
++
++KEYWORD1 void KEYWORD2 NAME(BeginQuery)(GLenum target, GLuint id)
++{
++ DISPATCH(BeginQueryARB, (target, id), (F, "glBeginQuery(0x%x, %d);\n", target, id));
++}
++
++KEYWORD1 void KEYWORD2 NAME(EndQuery)(GLenum target)
++{
++ DISPATCH(EndQueryARB, (target), (F, "glEndQuery(0x%x);\n", target));
++}
++
++KEYWORD1 void KEYWORD2 NAME(GetQueryiv)(GLenum target, GLenum pname, GLint * params)
++{
++ DISPATCH(GetQueryivARB, (target, pname, params), (F, "glGetQueryiv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
++}
++
++KEYWORD1 void KEYWORD2 NAME(GetQueryObjectiv)(GLuint id, GLenum pname, GLint * params)
++{
++ DISPATCH(GetQueryObjectivARB, (id, pname, params), (F, "glGetQueryObjectiv(%d, 0x%x, %p);\n", id, pname, (const void *) params));
++}
++
++KEYWORD1 void KEYWORD2 NAME(GetQueryObjectuiv)(GLuint id, GLenum pname, GLuint * params)
++{
++ DISPATCH(GetQueryObjectuivARB, (id, pname, params), (F, "glGetQueryObjectuiv(%d, 0x%x, %p);\n", id, pname, (const void *) params));
++}
++
++KEYWORD1 void KEYWORD2 NAME(PointParameterfARB)(GLenum pname, GLfloat param)
++{
++ DISPATCH(PointParameterfEXT, (pname, param), (F, "glPointParameterfARB(0x%x, %f);\n", pname, param));
++}
++
++KEYWORD1 void KEYWORD2 NAME(PointParameterfvARB)(GLenum pname, const GLfloat * params)
++{
++ DISPATCH(PointParameterfvEXT, (pname, params), (F, "glPointParameterfvARB(0x%x, %p);\n", pname, (const void *) params));
++}
++
++KEYWORD1 void KEYWORD2 NAME(WindowPos2dARB)(GLdouble x, GLdouble y)
++{
++ DISPATCH(WindowPos2dMESA, (x, y), (F, "glWindowPos2dARB(%f, %f);\n", x, y));
++}
++
++KEYWORD1 void KEYWORD2 NAME(WindowPos2fARB)(GLfloat x, GLfloat y)
++{
++ DISPATCH(WindowPos2fMESA, (x, y), (F, "glWindowPos2fARB(%f, %f);\n", x, y));
++}
++
++KEYWORD1 void KEYWORD2 NAME(WindowPos2iARB)(GLint x, GLint y)
++{
++ DISPATCH(WindowPos2iMESA, (x, y), (F, "glWindowPos2iARB(%d, %d);\n", x, y));
++}
++
++KEYWORD1 void KEYWORD2 NAME(WindowPos2sARB)(GLshort x, GLshort y)
++{
++ DISPATCH(WindowPos2sMESA, (x, y), (F, "glWindowPos2sARB(%d, %d);\n", x, y));
++}
++
++KEYWORD1 void KEYWORD2 NAME(WindowPos2dvARB)(const GLdouble * p)
++{
++ DISPATCH(WindowPos2dvMESA, (p), (F, "glWindowPos2dvARB(%p);\n", (const void *) p));
++}
++
++KEYWORD1 void KEYWORD2 NAME(WindowPos2fvARB)(const GLfloat * p)
++{
++ DISPATCH(WindowPos2fvMESA, (p), (F, "glWindowPos2fvARB(%p);\n", (const void *) p));
++}
++
++KEYWORD1 void KEYWORD2 NAME(WindowPos2ivARB)(const GLint * p)
++{
++ DISPATCH(WindowPos2ivMESA, (p), (F, "glWindowPos2ivARB(%p);\n", (const void *) p));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(WindowPos3sv)(const GLshort * v)
++KEYWORD1 void KEYWORD2 NAME(WindowPos2svARB)(const GLshort * p)
+ {
+- DISPATCH(WindowPos3svMESA, (v), (F, "glWindowPos3sv(%p);\n", (const void *) v));
++ DISPATCH(WindowPos2svMESA, (p), (F, "glWindowPos2svARB(%p);\n", (const void *) p));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ActiveStencilFaceEXT)(GLenum face)
++KEYWORD1 void KEYWORD2 NAME(WindowPos3dARB)(GLdouble x, GLdouble y, GLdouble z)
+ {
+- DISPATCH(ActiveStencilFaceEXT, (face), (F, "glActiveStencilFaceEXT(0x%x);\n", face));
++ DISPATCH(WindowPos3dMESA, (x, y, z), (F, "glWindowPos3dARB(%f, %f, %f);\n", x, y, z));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(DeleteFencesNV)(GLsizei n, const GLuint * fences)
++KEYWORD1 void KEYWORD2 NAME(WindowPos3fARB)(GLfloat x, GLfloat y, GLfloat z)
+ {
+- DISPATCH(DeleteFencesNV, (n, fences), (F, "glDeleteFencesNV(%d, %p);\n", n, (const void *) fences));
++ DISPATCH(WindowPos3fMESA, (x, y, z), (F, "glWindowPos3fARB(%f, %f, %f);\n", x, y, z));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GenFencesNV)(GLsizei n, GLuint * fences)
++KEYWORD1 void KEYWORD2 NAME(WindowPos3iARB)(GLint x, GLint y, GLint z)
+ {
+- DISPATCH(GenFencesNV, (n, fences), (F, "glGenFencesNV(%d, %p);\n", n, (const void *) fences));
++ DISPATCH(WindowPos3iMESA, (x, y, z), (F, "glWindowPos3iARB(%d, %d, %d);\n", x, y, z));
+ }
+
+-KEYWORD1 GLboolean KEYWORD2 NAME(IsFenceNV)(GLuint fence)
++KEYWORD1 void KEYWORD2 NAME(WindowPos3sARB)(GLshort x, GLshort y, GLshort z)
+ {
+- RETURN_DISPATCH(IsFenceNV, (fence), (F, "glIsFenceNV(%d);\n", fence));
++ DISPATCH(WindowPos3sMESA, (x, y, z), (F, "glWindowPos3sARB(%d, %d, %d);\n", x, y, z));
+ }
+
+-KEYWORD1 GLboolean KEYWORD2 NAME(TestFenceNV)(GLuint fence)
++KEYWORD1 void KEYWORD2 NAME(WindowPos3dvARB)(const GLdouble * p)
+ {
+- RETURN_DISPATCH(TestFenceNV, (fence), (F, "glTestFenceNV(%d);\n", fence));
++ DISPATCH(WindowPos3dvMESA, (p), (F, "glWindowPos3dvARB(%p);\n", (const void *) p));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetFenceivNV)(GLuint fence, GLenum pname, GLint * params)
++KEYWORD1 void KEYWORD2 NAME(WindowPos3fvARB)(const GLfloat * p)
+ {
+- DISPATCH(GetFenceivNV, (fence, pname, params), (F, "glGetFenceivNV(%d, 0x%x, %p);\n", fence, pname, (const void *) params));
++ DISPATCH(WindowPos3fvMESA, (p), (F, "glWindowPos3fvARB(%p);\n", (const void *) p));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(FinishFenceNV)(GLuint fence)
++KEYWORD1 void KEYWORD2 NAME(WindowPos3ivARB)(const GLint * p)
+ {
+- DISPATCH(FinishFenceNV, (fence), (F, "glFinishFenceNV(%d);\n", fence));
++ DISPATCH(WindowPos3ivMESA, (p), (F, "glWindowPos3ivARB(%p);\n", (const void *) p));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(SetFenceNV)(GLuint fence, GLenum condition)
++KEYWORD1 void KEYWORD2 NAME(WindowPos3svARB)(const GLshort * p)
+ {
+- DISPATCH(SetFenceNV, (fence, condition), (F, "glSetFenceNV(%d, 0x%x);\n", fence, condition));
++ DISPATCH(WindowPos3svMESA, (p), (F, "glWindowPos3svARB(%p);\n", (const void *) p));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(VertexAttrib1sARB)(GLuint index, GLshort x)
+@@ -4316,12 +4353,12 @@
+
+ KEYWORD1 void KEYWORD2 NAME(VertexAttrib2fvARB)(GLuint index, const GLfloat * v)
+ {
+- DISPATCH(VertexAttrib2fvNV, (index, v), (F, "glVertexAttrib2fvARB(%d, %p /* %g, %g */);\n", index, (const void *) v, v[0], v[1]));
++ DISPATCH(VertexAttrib2fvNV, (index, v), (F, "glVertexAttrib2fvARB(%d, %p);\n", index, (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(VertexAttrib2dvARB)(GLuint index, const GLdouble * v)
+ {
+- DISPATCH(VertexAttrib2dvNV, (index, v), (F, "glVertexAttrib2dvARB(%d, %p /* %g, %g */);\n", index, (const void *) v, v[0], v[1]));
++ DISPATCH(VertexAttrib2dvNV, (index, v), (F, "glVertexAttrib2dvARB(%d, %p);\n", index, (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(VertexAttrib3svARB)(GLuint index, const GLshort * v)
+@@ -4331,17 +4368,12 @@
+
+ KEYWORD1 void KEYWORD2 NAME(VertexAttrib3fvARB)(GLuint index, const GLfloat * v)
+ {
+- DISPATCH(VertexAttrib3fvNV, (index, v), (F, "glVertexAttrib3fvARB(%d, %p /* %g, %g, %g */);\n", index, (const void *) v, v[0], v[1], v[2]));
++ DISPATCH(VertexAttrib3fvNV, (index, v), (F, "glVertexAttrib3fvARB(%d, %p);\n", index, (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(VertexAttrib3dvARB)(GLuint index, const GLdouble * v)
+ {
+- DISPATCH(VertexAttrib3dvNV, (index, v), (F, "glVertexAttrib3dvARB(%d, %p /* %g, %g, %g */);\n", index, (const void *) v, v[0], v[1], v[2]));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib4bvARB)(GLuint index, const GLbyte * v)
+-{
+- DISPATCH(VertexAttrib4bvARB, (index, v), (F, "glVertexAttrib4bvARB(%d, %p);\n", index, (const void *) v));
++ DISPATCH(VertexAttrib3dvNV, (index, v), (F, "glVertexAttrib3dvARB(%d, %p);\n", index, (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(VertexAttrib4svARB)(GLuint index, const GLshort * v)
+@@ -4349,49 +4381,14 @@
+ DISPATCH(VertexAttrib4svNV, (index, v), (F, "glVertexAttrib4svARB(%d, %p);\n", index, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib4ivARB)(GLuint index, const GLint * v)
+-{
+- DISPATCH(VertexAttrib4ivARB, (index, v), (F, "glVertexAttrib4ivARB(%d, %p);\n", index, (const void *) v));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib4ubvARB)(GLuint index, const GLubyte * v)
+-{
+- DISPATCH(VertexAttrib4ubvARB, (index, v), (F, "glVertexAttrib4ubvARB(%d, %p);\n", index, (const void *) v));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib4usvARB)(GLuint index, const GLushort * v)
+-{
+- DISPATCH(VertexAttrib4usvARB, (index, v), (F, "glVertexAttrib4usvARB(%d, %p);\n", index, (const void *) v));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib4uivARB)(GLuint index, const GLuint * v)
+-{
+- DISPATCH(VertexAttrib4uivARB, (index, v), (F, "glVertexAttrib4uivARB(%d, %p);\n", index, (const void *) v));
+-}
+-
+ KEYWORD1 void KEYWORD2 NAME(VertexAttrib4fvARB)(GLuint index, const GLfloat * v)
+ {
+- DISPATCH(VertexAttrib4fvNV, (index, v), (F, "glVertexAttrib4fvARB(%d, %p /* %g, %g, %g, %g */);\n", index, (const void *) v, v[0], v[1], v[2], v[3]));
++ DISPATCH(VertexAttrib4fvNV, (index, v), (F, "glVertexAttrib4fvARB(%d, %p);\n", index, (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(VertexAttrib4dvARB)(GLuint index, const GLdouble * v)
+ {
+- DISPATCH(VertexAttrib4dvNV, (index, v), (F, "glVertexAttrib4dvARB(%d, %p /* %g, %g, %g, %g */);\n", index, (const void *) v, v[0], v[1], v[2], v[3]));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib4NbvARB)(GLuint index, const GLbyte * v)
+-{
+- DISPATCH(VertexAttrib4NbvARB, (index, v), (F, "glVertexAttrib4NbvARB(%d, %p);\n", index, (const void *) v));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib4NsvARB)(GLuint index, const GLshort * v)
+-{
+- DISPATCH(VertexAttrib4NsvARB, (index, v), (F, "glVertexAttrib4NsvARB(%d, %p);\n", index, (const void *) v));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib4NivARB)(GLuint index, const GLint * v)
+-{
+- DISPATCH(VertexAttrib4NivARB, (index, v), (F, "glVertexAttrib4NivARB(%d, %p);\n", index, (const void *) v));
++ DISPATCH(VertexAttrib4dvNV, (index, v), (F, "glVertexAttrib4dvARB(%d, %p);\n", index, (const void *) v));
+ }
+
+ KEYWORD1 void KEYWORD2 NAME(VertexAttrib4NubvARB)(GLuint index, const GLubyte * v)
+@@ -4399,36 +4396,6 @@
+ DISPATCH(VertexAttrib4ubvNV, (index, v), (F, "glVertexAttrib4NubvARB(%d, %p);\n", index, (const void *) v));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib4NusvARB)(GLuint index, const GLushort * v)
+-{
+- DISPATCH(VertexAttrib4NusvARB, (index, v), (F, "glVertexAttrib4NusvARB(%d, %p);\n", index, (const void *) v));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(VertexAttrib4NuivARB)(GLuint index, const GLuint * v)
+-{
+- DISPATCH(VertexAttrib4NuivARB, (index, v), (F, "glVertexAttrib4NuivARB(%d, %p);\n", index, (const void *) v));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(VertexAttribPointerARB)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * pointer)
+-{
+- DISPATCH(VertexAttribPointerARB, (index, size, type, normalized, stride, pointer), (F, "glVertexAttribPointerARB(%d, %d, 0x%x, %d, %d, %p);\n", index, size, type, normalized, stride, (const void *) pointer));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(EnableVertexAttribArrayARB)(GLuint index)
+-{
+- DISPATCH(EnableVertexAttribArrayARB, (index), (F, "glEnableVertexAttribArrayARB(%d);\n", index));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(DisableVertexAttribArrayARB)(GLuint index)
+-{
+- DISPATCH(DisableVertexAttribArrayARB, (index), (F, "glDisableVertexAttribArrayARB(%d);\n", index));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(ProgramStringARB)(GLenum target, GLenum format, GLsizei len, const GLvoid * string)
+-{
+- DISPATCH(ProgramStringARB, (target, format, len, string), (F, "glProgramStringARB(0x%x, 0x%x, %d, %p);\n", target, format, len, (const void *) string));
+-}
+-
+ KEYWORD1 void KEYWORD2 NAME(BindProgramARB)(GLenum target, GLuint program)
+ {
+ DISPATCH(BindProgramNV, (target, program), (F, "glBindProgramARB(0x%x, %d);\n", target, program));
+@@ -4449,76 +4416,6 @@
+ RETURN_DISPATCH(IsProgramNV, (program), (F, "glIsProgramARB(%d);\n", program));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ProgramEnvParameter4dARB)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+-{
+- DISPATCH(ProgramEnvParameter4dARB, (target, index, x, y, z, w), (F, "glProgramEnvParameter4dARB(0x%x, %d, %f, %f, %f, %f);\n", target, index, x, y, z, w));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(ProgramEnvParameter4dvARB)(GLenum target, GLuint index, const GLdouble * params)
+-{
+- DISPATCH(ProgramEnvParameter4dvARB, (target, index, params), (F, "glProgramEnvParameter4dvARB(0x%x, %d, %p /* %g, %g, %g, %g */);\n", target, index, (const void *) params, params[0], params[1], params[2], params[3]));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(ProgramEnvParameter4fARB)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+-{
+- DISPATCH(ProgramEnvParameter4fARB, (target, index, x, y, z, w), (F, "glProgramEnvParameter4fARB(0x%x, %d, %f, %f, %f, %f);\n", target, index, x, y, z, w));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(ProgramEnvParameter4fvARB)(GLenum target, GLuint index, const GLfloat * params)
+-{
+- DISPATCH(ProgramEnvParameter4fvARB, (target, index, params), (F, "glProgramEnvParameter4fvARB(0x%x, %d, %p /* %g, %g, %g, %g */);\n", target, index, (const void *) params, params[0], params[1], params[2], params[3]));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(ProgramLocalParameter4dARB)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+-{
+- DISPATCH(ProgramLocalParameter4dARB, (target, index, x, y, z, w), (F, "glProgramLocalParameter4dARB(0x%x, %d, %f, %f, %f, %f);\n", target, index, x, y, z, w));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(ProgramLocalParameter4dvARB)(GLenum target, GLuint index, const GLdouble * params)
+-{
+- DISPATCH(ProgramLocalParameter4dvARB, (target, index, params), (F, "glProgramLocalParameter4dvARB(0x%x, %d, %p /* %g, %g, %g, %g */);\n", target, index, (const void *) params, params[0], params[1], params[2], params[3]));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(ProgramLocalParameter4fARB)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+-{
+- DISPATCH(ProgramLocalParameter4fARB, (target, index, x, y, z, w), (F, "glProgramLocalParameter4fARB(0x%x, %d, %f, %f, %f, %f);\n", target, index, x, y, z, w));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(ProgramLocalParameter4fvARB)(GLenum target, GLuint index, const GLfloat * params)
+-{
+- DISPATCH(ProgramLocalParameter4fvARB, (target, index, params), (F, "glProgramLocalParameter4fvARB(0x%x, %d, %p /* %g, %g, %g, %g */);\n", target, index, (const void *) params, params[0], params[1], params[2], params[3]));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(GetProgramEnvParameterdvARB)(GLenum target, GLuint index, GLdouble * params)
+-{
+- DISPATCH(GetProgramEnvParameterdvARB, (target, index, params), (F, "glGetProgramEnvParameterdvARB(0x%x, %d, %p);\n", target, index, (const void *) params));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(GetProgramEnvParameterfvARB)(GLenum target, GLuint index, GLfloat * params)
+-{
+- DISPATCH(GetProgramEnvParameterfvARB, (target, index, params), (F, "glGetProgramEnvParameterfvARB(0x%x, %d, %p);\n", target, index, (const void *) params));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(GetProgramLocalParameterdvARB)(GLenum target, GLuint index, GLdouble * params)
+-{
+- DISPATCH(GetProgramLocalParameterdvARB, (target, index, params), (F, "glGetProgramLocalParameterdvARB(0x%x, %d, %p);\n", target, index, (const void *) params));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(GetProgramLocalParameterfvARB)(GLenum target, GLuint index, GLfloat * params)
+-{
+- DISPATCH(GetProgramLocalParameterfvARB, (target, index, params), (F, "glGetProgramLocalParameterfvARB(0x%x, %d, %p);\n", target, index, (const void *) params));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(GetProgramivARB)(GLenum target, GLenum pname, GLint * params)
+-{
+- DISPATCH(GetProgramivARB, (target, pname, params), (F, "glGetProgramivARB(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(GetProgramStringARB)(GLenum target, GLenum pname, GLvoid * string)
+-{
+- DISPATCH(GetProgramStringARB, (target, pname, string), (F, "glGetProgramStringARB(0x%x, 0x%x, %p);\n", target, pname, (const void *) string));
+-}
+-
+ KEYWORD1 void KEYWORD2 NAME(GetVertexAttribdvARB)(GLuint index, GLenum pname, GLdouble * params)
+ {
+ DISPATCH(GetVertexAttribdvNV, (index, pname, params), (F, "glGetVertexAttribdvARB(%d, 0x%x, %p);\n", index, pname, (const void *) params));
+@@ -4539,239 +4436,224 @@
+ DISPATCH(GetVertexAttribPointervNV, (index, pname, params), (F, "glGetVertexAttribPointervARB(%d, 0x%x, %p);\n", index, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(ProgramNamedParameter4fNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+-{
+- DISPATCH(ProgramNamedParameter4fNV, (id, len, name, x, y, z, w), (F, "glProgramNamedParameter4fNV(%d, %d, %p, %f, %f, %f, %f);\n", id, len, (const void *) name, x, y, z, w));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(ProgramNamedParameter4dNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+-{
+- DISPATCH(ProgramNamedParameter4dNV, (id, len, name, x, y, z, w), (F, "glProgramNamedParameter4dNV(%d, %d, %p, %f, %f, %f, %f);\n", id, len, (const void *) name, x, y, z, w));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(ProgramNamedParameter4fvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v)
+-{
+- DISPATCH(ProgramNamedParameter4fvNV, (id, len, name, v), (F, "glProgramNamedParameter4fvNV(%d, %d, %p, %p /* %g, %g, %g, %g */);\n", id, len, (const void *) name, (const void *) v, v[0], v[1], v[2], v[3]));
+-}
+-
+-KEYWORD1 void KEYWORD2 NAME(ProgramNamedParameter4dvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v)
++KEYWORD1 void KEYWORD2 NAME(BlendColorEXT)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+ {
+- DISPATCH(ProgramNamedParameter4dvNV, (id, len, name, v), (F, "glProgramNamedParameter4dvNV(%d, %d, %p, %p /* %g, %g, %g, %g */);\n", id, len, (const void *) name, (const void *) v, v[0], v[1], v[2], v[3]));
++ DISPATCH(BlendColor, (red, green, blue, alpha), (F, "glBlendColorEXT(%f, %f, %f, %f);\n", red, green, blue, alpha));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetProgramNamedParameterfvNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params)
++KEYWORD1 void KEYWORD2 NAME(TexImage3DEXT)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels)
+ {
+- DISPATCH(GetProgramNamedParameterfvNV, (id, len, name, params), (F, "glGetProgramNamedParameterfvNV(%d, %d, %p, %p);\n", id, len, (const void *) name, (const void *) params));
++ DISPATCH(TexImage3D, (target, level, internalformat, width, height, depth, border, format, type, pixels), (F, "glTexImage3DEXT(0x%x, %d, 0x%x, %d, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, internalformat, width, height, depth, border, format, type, (const void *) pixels));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetProgramNamedParameterdvNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params)
++KEYWORD1 void KEYWORD2 NAME(TexSubImage3DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels)
+ {
+- DISPATCH(GetProgramNamedParameterdvNV, (id, len, name, params), (F, "glGetProgramNamedParameterdvNV(%d, %d, %p, %p);\n", id, len, (const void *) name, (const void *) params));
++ DISPATCH(TexSubImage3D, (target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels), (F, "glTexSubImage3DEXT(0x%x, %d, %d, %d, %d, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, (const void *) pixels));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(BindBufferARB)(GLenum target, GLuint buffer)
++KEYWORD1 void KEYWORD2 NAME(TexSubImage1DEXT)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid * pixels)
+ {
+- DISPATCH(BindBufferARB, (target, buffer), (F, "glBindBufferARB(0x%x, %d);\n", target, buffer));
++ DISPATCH(TexSubImage1D, (target, level, xoffset, width, format, type, pixels), (F, "glTexSubImage1DEXT(0x%x, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, xoffset, width, format, type, (const void *) pixels));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(BufferDataARB)(GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage)
++KEYWORD1 void KEYWORD2 NAME(TexSubImage2DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels)
+ {
+- DISPATCH(BufferDataARB, (target, size, data, usage), (F, "glBufferDataARB(0x%x, %p, %p, 0x%x);\n", target, (const void *) size, (const void *) data, usage));
++ DISPATCH(TexSubImage2D, (target, level, xoffset, yoffset, width, height, format, type, pixels), (F, "glTexSubImage2DEXT(0x%x, %d, %d, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, xoffset, yoffset, width, height, format, type, (const void *) pixels));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(BufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data)
++KEYWORD1 void KEYWORD2 NAME(CopyTexImage1DEXT)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border)
+ {
+- DISPATCH(BufferSubDataARB, (target, offset, size, data), (F, "glBufferSubDataARB(0x%x, %p, %p, %p);\n", target, (const void *) offset, (const void *) size, (const void *) data));
++ DISPATCH(CopyTexImage1D, (target, level, internalformat, x, y, width, border), (F, "glCopyTexImage1DEXT(0x%x, %d, 0x%x, %d, %d, %d, %d);\n", target, level, internalformat, x, y, width, border));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(DeleteBuffersARB)(GLsizei n, const GLuint * buffer)
++KEYWORD1 void KEYWORD2 NAME(CopyTexImage2DEXT)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+ {
+- DISPATCH(DeleteBuffersARB, (n, buffer), (F, "glDeleteBuffersARB(%d, %p);\n", n, (const void *) buffer));
++ DISPATCH(CopyTexImage2D, (target, level, internalformat, x, y, width, height, border), (F, "glCopyTexImage2DEXT(0x%x, %d, 0x%x, %d, %d, %d, %d, %d);\n", target, level, internalformat, x, y, width, height, border));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GenBuffersARB)(GLsizei n, GLuint * buffer)
++KEYWORD1 void KEYWORD2 NAME(CopyTexSubImage1DEXT)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
+ {
+- DISPATCH(GenBuffersARB, (n, buffer), (F, "glGenBuffersARB(%d, %p);\n", n, (const void *) buffer));
++ DISPATCH(CopyTexSubImage1D, (target, level, xoffset, x, y, width), (F, "glCopyTexSubImage1DEXT(0x%x, %d, %d, %d, %d, %d);\n", target, level, xoffset, x, y, width));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetBufferParameterivARB)(GLenum target, GLenum pname, GLint * params)
++KEYWORD1 void KEYWORD2 NAME(CopyTexSubImage2DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+ {
+- DISPATCH(GetBufferParameterivARB, (target, pname, params), (F, "glGetBufferParameterivARB(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
++ DISPATCH(CopyTexSubImage2D, (target, level, xoffset, yoffset, x, y, width, height), (F, "glCopyTexSubImage2DEXT(0x%x, %d, %d, %d, %d, %d, %d, %d);\n", target, level, xoffset, yoffset, x, y, width, height));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetBufferPointervARB)(GLenum target, GLenum pname, GLvoid ** params)
++KEYWORD1 void KEYWORD2 NAME(CopyTexSubImage3DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+ {
+- DISPATCH(GetBufferPointervARB, (target, pname, params), (F, "glGetBufferPointervARB(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
++ DISPATCH(CopyTexSubImage3D, (target, level, xoffset, yoffset, zoffset, x, y, width, height), (F, "glCopyTexSubImage3DEXT(0x%x, %d, %d, %d, %d, %d, %d, %d, %d);\n", target, level, xoffset, yoffset, zoffset, x, y, width, height));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetBufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, void * data)
++KEYWORD1 void KEYWORD2 NAME(HistogramEXT)(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink)
+ {
+- DISPATCH(GetBufferSubDataARB, (target, offset, size, data), (F, "glGetBufferSubDataARB(0x%x, %p, %p, %p);\n", target, (const void *) offset, (const void *) size, (const void *) data));
++ DISPATCH(Histogram, (target, width, internalformat, sink), (F, "glHistogramEXT(0x%x, %d, 0x%x, %d);\n", target, width, internalformat, sink));
+ }
+
+-KEYWORD1 GLboolean KEYWORD2 NAME(IsBufferARB)(GLuint buffer)
++KEYWORD1 void KEYWORD2 NAME(MinmaxEXT)(GLenum target, GLenum internalformat, GLboolean sink)
+ {
+- RETURN_DISPATCH(IsBufferARB, (buffer), (F, "glIsBufferARB(%d);\n", buffer));
++ DISPATCH(Minmax, (target, internalformat, sink), (F, "glMinmaxEXT(0x%x, 0x%x, %d);\n", target, internalformat, sink));
+ }
+
+-KEYWORD1 void * KEYWORD2 NAME(MapBufferARB)(GLenum target, GLenum access)
++KEYWORD1 void KEYWORD2 NAME(ResetHistogramEXT)(GLenum target)
+ {
+- RETURN_DISPATCH(MapBufferARB, (target, access), (F, "glMapBufferARB(0x%x, 0x%x);\n", target, access));
++ DISPATCH(ResetHistogram, (target), (F, "glResetHistogramEXT(0x%x);\n", target));
+ }
+
+-KEYWORD1 GLboolean KEYWORD2 NAME(UnmapBufferARB)(GLenum target)
++KEYWORD1 void KEYWORD2 NAME(ResetMinmaxEXT)(GLenum target)
+ {
+- RETURN_DISPATCH(UnmapBufferARB, (target), (F, "glUnmapBufferARB(0x%x);\n", target));
++ DISPATCH(ResetMinmax, (target), (F, "glResetMinmaxEXT(0x%x);\n", target));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(DepthBoundsEXT)(GLclampd zmin, GLclampd zmax)
++KEYWORD1 void KEYWORD2 NAME(ConvolutionFilter1DEXT)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * image)
+ {
+- DISPATCH(DepthBoundsEXT, (zmin, zmax), (F, "glDepthBoundsEXT(%f, %f);\n", zmin, zmax));
++ DISPATCH(ConvolutionFilter1D, (target, internalformat, width, format, type, image), (F, "glConvolutionFilter1DEXT(0x%x, 0x%x, %d, 0x%x, 0x%x, %p);\n", target, internalformat, width, format, type, (const void *) image));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GenQueriesARB)(GLsizei n, GLuint * ids)
++KEYWORD1 void KEYWORD2 NAME(ConvolutionFilter2DEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * image)
+ {
+- DISPATCH(GenQueriesARB, (n, ids), (F, "glGenQueriesARB(%d, %p);\n", n, (const void *) ids));
++ DISPATCH(ConvolutionFilter2D, (target, internalformat, width, height, format, type, image), (F, "glConvolutionFilter2DEXT(0x%x, 0x%x, %d, %d, 0x%x, 0x%x, %p);\n", target, internalformat, width, height, format, type, (const void *) image));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(DeleteQueriesARB)(GLsizei n, const GLuint * ids)
++KEYWORD1 void KEYWORD2 NAME(ConvolutionParameterfEXT)(GLenum target, GLenum pname, GLfloat params)
+ {
+- DISPATCH(DeleteQueriesARB, (n, ids), (F, "glDeleteQueriesARB(%d, %p);\n", n, (const void *) ids));
++ DISPATCH(ConvolutionParameterf, (target, pname, params), (F, "glConvolutionParameterfEXT(0x%x, 0x%x, %f);\n", target, pname, params));
+ }
+
+-KEYWORD1 GLboolean KEYWORD2 NAME(IsQueryARB)(GLuint id)
++KEYWORD1 void KEYWORD2 NAME(ConvolutionParameterfvEXT)(GLenum target, GLenum pname, const GLfloat * params)
+ {
+- RETURN_DISPATCH(IsQueryARB, (id), (F, "glIsQueryARB(%d);\n", id));
++ DISPATCH(ConvolutionParameterfv, (target, pname, params), (F, "glConvolutionParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(BeginQueryARB)(GLenum target, GLuint id)
++KEYWORD1 void KEYWORD2 NAME(ConvolutionParameteriEXT)(GLenum target, GLenum pname, GLint params)
+ {
+- DISPATCH(BeginQueryARB, (target, id), (F, "glBeginQueryARB(0x%x, %d);\n", target, id));
++ DISPATCH(ConvolutionParameteri, (target, pname, params), (F, "glConvolutionParameteriEXT(0x%x, 0x%x, %d);\n", target, pname, params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(EndQueryARB)(GLenum target)
++KEYWORD1 void KEYWORD2 NAME(ConvolutionParameterivEXT)(GLenum target, GLenum pname, const GLint * params)
+ {
+- DISPATCH(EndQueryARB, (target), (F, "glEndQueryARB(0x%x);\n", target));
++ DISPATCH(ConvolutionParameteriv, (target, pname, params), (F, "glConvolutionParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetQueryivARB)(GLenum target, GLenum pname, GLint * params)
++KEYWORD1 void KEYWORD2 NAME(CopyConvolutionFilter1DEXT)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width)
+ {
+- DISPATCH(GetQueryivARB, (target, pname, params), (F, "glGetQueryivARB(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
++ DISPATCH(CopyConvolutionFilter1D, (target, internalformat, x, y, width), (F, "glCopyConvolutionFilter1DEXT(0x%x, 0x%x, %d, %d, %d);\n", target, internalformat, x, y, width));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetQueryObjectivARB)(GLuint id, GLenum pname, GLint * params)
++KEYWORD1 void KEYWORD2 NAME(CopyConvolutionFilter2DEXT)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height)
+ {
+- DISPATCH(GetQueryObjectivARB, (id, pname, params), (F, "glGetQueryObjectivARB(%d, 0x%x, %p);\n", id, pname, (const void *) params));
++ DISPATCH(CopyConvolutionFilter2D, (target, internalformat, x, y, width, height), (F, "glCopyConvolutionFilter2DEXT(0x%x, 0x%x, %d, %d, %d, %d);\n", target, internalformat, x, y, width, height));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetQueryObjectuivARB)(GLuint id, GLenum pname, GLuint * params)
++KEYWORD1 void KEYWORD2 NAME(SeparableFilter2DEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * row, const GLvoid * column)
+ {
+- DISPATCH(GetQueryObjectuivARB, (id, pname, params), (F, "glGetQueryObjectuivARB(%d, 0x%x, %p);\n", id, pname, (const void *) params));
++ DISPATCH(SeparableFilter2D, (target, internalformat, width, height, format, type, row, column), (F, "glSeparableFilter2DEXT(0x%x, 0x%x, %d, %d, 0x%x, 0x%x, %p, %p);\n", target, internalformat, width, height, format, type, (const void *) row, (const void *) column));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(BindBuffer)(GLenum target, GLuint buffer)
++KEYWORD1 void KEYWORD2 NAME(ColorTableSGI)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * table)
+ {
+- DISPATCH(BindBufferARB, (target, buffer), (F, "glBindBuffer(0x%x, %d);\n", target, buffer));
++ DISPATCH(ColorTable, (target, internalformat, width, format, type, table), (F, "glColorTableSGI(0x%x, 0x%x, %d, 0x%x, 0x%x, %p);\n", target, internalformat, width, format, type, (const void *) table));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(BufferData)(GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage)
++KEYWORD1 void KEYWORD2 NAME(ColorTableParameterfvSGI)(GLenum target, GLenum pname, const GLfloat * params)
+ {
+- DISPATCH(BufferDataARB, (target, size, data, usage), (F, "glBufferData(0x%x, %p, %p, 0x%x);\n", target, (const void *) size, (const void *) data, usage));
++ DISPATCH(ColorTableParameterfv, (target, pname, params), (F, "glColorTableParameterfvSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(BufferSubData)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data)
++KEYWORD1 void KEYWORD2 NAME(ColorTableParameterivSGI)(GLenum target, GLenum pname, const GLint * params)
+ {
+- DISPATCH(BufferSubDataARB, (target, offset, size, data), (F, "glBufferSubData(0x%x, %p, %p, %p);\n", target, (const void *) offset, (const void *) size, (const void *) data));
++ DISPATCH(ColorTableParameteriv, (target, pname, params), (F, "glColorTableParameterivSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(DeleteBuffers)(GLsizei n, const GLuint * buffer)
++KEYWORD1 void KEYWORD2 NAME(CopyColorTableSGI)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width)
+ {
+- DISPATCH(DeleteBuffersARB, (n, buffer), (F, "glDeleteBuffers(%d, %p);\n", n, (const void *) buffer));
++ DISPATCH(CopyColorTable, (target, internalformat, x, y, width), (F, "glCopyColorTableSGI(0x%x, 0x%x, %d, %d, %d);\n", target, internalformat, x, y, width));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GenBuffers)(GLsizei n, GLuint * buffer)
++KEYWORD1 void KEYWORD2 NAME(BindTextureEXT)(GLenum target, GLuint texture)
+ {
+- DISPATCH(GenBuffersARB, (n, buffer), (F, "glGenBuffers(%d, %p);\n", n, (const void *) buffer));
++ DISPATCH(BindTexture, (target, texture), (F, "glBindTextureEXT(0x%x, %d);\n", target, texture));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetBufferParameteriv)(GLenum target, GLenum pname, GLint * params)
++KEYWORD1 void KEYWORD2 NAME(DeleteTexturesEXT)(GLsizei n, const GLuint * textures)
+ {
+- DISPATCH(GetBufferParameterivARB, (target, pname, params), (F, "glGetBufferParameteriv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
++ DISPATCH(DeleteTextures, (n, textures), (F, "glDeleteTexturesEXT(%d, %p);\n", n, (const void *) textures));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetBufferPointerv)(GLenum target, GLenum pname, GLvoid ** params)
++KEYWORD1 void KEYWORD2 NAME(PrioritizeTexturesEXT)(GLsizei n, const GLuint * textures, const GLclampf * priorities)
+ {
+- DISPATCH(GetBufferPointervARB, (target, pname, params), (F, "glGetBufferPointerv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
++ DISPATCH(PrioritizeTextures, (n, textures, priorities), (F, "glPrioritizeTexturesEXT(%d, %p, %p);\n", n, (const void *) textures, (const void *) priorities));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetBufferSubData)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, void * data)
++KEYWORD1 void KEYWORD2 NAME(ArrayElementEXT)(GLint i)
+ {
+- DISPATCH(GetBufferSubDataARB, (target, offset, size, data), (F, "glGetBufferSubData(0x%x, %p, %p, %p);\n", target, (const void *) offset, (const void *) size, (const void *) data));
++ DISPATCH(ArrayElement, (i), (F, "glArrayElementEXT(%d);\n", i));
+ }
+
+-KEYWORD1 GLboolean KEYWORD2 NAME(IsBuffer)(GLuint buffer)
++KEYWORD1 void KEYWORD2 NAME(DrawArraysEXT)(GLenum mode, GLint first, GLsizei count)
+ {
+- RETURN_DISPATCH(IsBufferARB, (buffer), (F, "glIsBuffer(%d);\n", buffer));
++ DISPATCH(DrawArrays, (mode, first, count), (F, "glDrawArraysEXT(0x%x, %d, %d);\n", mode, first, count));
+ }
+
+-KEYWORD1 void * KEYWORD2 NAME(MapBuffer)(GLenum target, GLenum access)
++KEYWORD1 void KEYWORD2 NAME(GetPointervEXT)(GLenum pname, GLvoid ** params)
+ {
+- RETURN_DISPATCH(MapBufferARB, (target, access), (F, "glMapBuffer(0x%x, 0x%x);\n", target, access));
++ DISPATCH(GetPointerv, (pname, params), (F, "glGetPointervEXT(0x%x, %p);\n", pname, (const void *) params));
+ }
+
+-KEYWORD1 GLboolean KEYWORD2 NAME(UnmapBuffer)(GLenum target)
++KEYWORD1 void KEYWORD2 NAME(BlendEquationEXT)(GLenum mode)
+ {
+- RETURN_DISPATCH(UnmapBufferARB, (target), (F, "glUnmapBuffer(0x%x);\n", target));
++ DISPATCH(BlendEquation, (mode), (F, "glBlendEquationEXT(0x%x);\n", mode));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GenQueries)(GLsizei n, GLuint * ids)
++KEYWORD1 void KEYWORD2 NAME(ColorSubTableEXT)(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid * data)
+ {
+- DISPATCH(GenQueriesARB, (n, ids), (F, "glGenQueries(%d, %p);\n", n, (const void *) ids));
++ DISPATCH(ColorSubTable, (target, start, count, format, type, data), (F, "glColorSubTableEXT(0x%x, %d, %d, 0x%x, 0x%x, %p);\n", target, start, count, format, type, (const void *) data));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(DeleteQueries)(GLsizei n, const GLuint * ids)
++KEYWORD1 void KEYWORD2 NAME(CopyColorSubTableEXT)(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width)
+ {
+- DISPATCH(DeleteQueriesARB, (n, ids), (F, "glDeleteQueries(%d, %p);\n", n, (const void *) ids));
++ DISPATCH(CopyColorSubTable, (target, start, x, y, width), (F, "glCopyColorSubTableEXT(0x%x, %d, %d, %d, %d);\n", target, start, x, y, width));
+ }
+
+-KEYWORD1 GLboolean KEYWORD2 NAME(IsQuery)(GLuint id)
++KEYWORD1 void KEYWORD2 NAME(ColorTableEXT)(GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid * table)
+ {
+- RETURN_DISPATCH(IsQueryARB, (id), (F, "glIsQuery(%d);\n", id));
++ DISPATCH(ColorTable, (target, internalFormat, width, format, type, table), (F, "glColorTableEXT(0x%x, 0x%x, %d, 0x%x, 0x%x, %p);\n", target, internalFormat, width, format, type, (const void *) table));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(BeginQuery)(GLenum target, GLuint id)
++KEYWORD1 void KEYWORD2 NAME(DrawRangeElementsEXT)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices)
+ {
+- DISPATCH(BeginQueryARB, (target, id), (F, "glBeginQuery(0x%x, %d);\n", target, id));
++ DISPATCH(DrawRangeElements, (mode, start, end, count, type, indices), (F, "glDrawRangeElementsEXT(0x%x, %d, %d, %d, 0x%x, %p);\n", mode, start, end, count, type, (const void *) indices));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(EndQuery)(GLenum target)
++KEYWORD1 void KEYWORD2 NAME(SampleMaskEXT)(GLclampf value, GLboolean invert)
+ {
+- DISPATCH(EndQueryARB, (target), (F, "glEndQuery(0x%x);\n", target));
++ DISPATCH(SampleMaskSGIS, (value, invert), (F, "glSampleMaskEXT(%f, %d);\n", value, invert));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetQueryiv)(GLenum target, GLenum pname, GLint * params)
++KEYWORD1 void KEYWORD2 NAME(SamplePatternEXT)(GLenum pattern)
+ {
+- DISPATCH(GetQueryivARB, (target, pname, params), (F, "glGetQueryiv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
++ DISPATCH(SamplePatternSGIS, (pattern), (F, "glSamplePatternEXT(0x%x);\n", pattern));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetQueryObjectiv)(GLuint id, GLenum pname, GLint * params)
++KEYWORD1 void KEYWORD2 NAME(BlendEquationSeparateATI)(GLenum modeRGB, GLenum modeA)
+ {
+- DISPATCH(GetQueryObjectivARB, (id, pname, params), (F, "glGetQueryObjectiv(%d, 0x%x, %p);\n", id, pname, (const void *) params));
++ DISPATCH(BlendEquationSeparateEXT, (modeRGB, modeA), (F, "glBlendEquationSeparateATI(0x%x, 0x%x);\n", modeRGB, modeA));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(GetQueryObjectuiv)(GLuint id, GLenum pname, GLuint * params)
++KEYWORD1 void KEYWORD2 NAME(BlendFuncSeparateINGR)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
+ {
+- DISPATCH(GetQueryObjectuivARB, (id, pname, params), (F, "glGetQueryObjectuiv(%d, 0x%x, %p);\n", id, pname, (const void *) params));
++ DISPATCH(BlendFuncSeparateEXT, (sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha), (F, "glBlendFuncSeparateINGR(0x%x, 0x%x, 0x%x, 0x%x);\n", sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(BlendEquationSeparateEXT)(GLenum modeRGB, GLenum modeA)
++KEYWORD1 void KEYWORD2 NAME(PointParameterfSGIS)(GLenum pname, GLfloat param)
+ {
+- DISPATCH(BlendEquationSeparateEXT, (modeRGB, modeA), (F, "glBlendEquationSeparateEXT(0x%x, 0x%x);\n", modeRGB, modeA));
++ DISPATCH(PointParameterfEXT, (pname, param), (F, "glPointParameterfSGIS(0x%x, %f);\n", pname, param));
+ }
+
+-KEYWORD1 void KEYWORD2 NAME(BlendEquationSeparateATI)(GLenum modeRGB, GLenum modeA)
++KEYWORD1 void KEYWORD2 NAME(PointParameterfvSGIS)(GLenum pname, const GLfloat * params)
+ {
+- DISPATCH(BlendEquationSeparateEXT, (modeRGB, modeA), (F, "glBlendEquationSeparateATI(0x%x, 0x%x);\n", modeRGB, modeA));
++ DISPATCH(PointParameterfvEXT, (pname, params), (F, "glPointParameterfvSGIS(0x%x, %p);\n", pname, (const void *) params));
+ }
+
+
+@@ -4787,7 +4669,7 @@
+ #error TABLE_ENTRY must be defined
+ #endif
+
+-void *DISPATCH_TABLE_NAME[] = {
++static _glapi_proc DISPATCH_TABLE_NAME[] = {
+ TABLE_ENTRY(NewList),
+ TABLE_ENTRY(EndList),
+ TABLE_ENTRY(CallList),
+@@ -5608,10 +5490,10 @@
+
+ /*
+ * This is just used to silence compiler warnings.
+- * We list the functions which aren't otherwise used.
++ * We list the functions which are not otherwise used.
+ */
+ #ifdef UNUSED_TABLE_NAME
+-void *UNUSED_TABLE_NAME[] = {
++static _glapi_proc UNUSED_TABLE_NAME[] = {
+ TABLE_ENTRY(ActiveTexture),
+ TABLE_ENTRY(ClientActiveTexture),
+ TABLE_ENTRY(MultiTexCoord1d),
+@@ -5658,67 +5540,6 @@
+ TABLE_ENTRY(CompressedTexSubImage2D),
+ TABLE_ENTRY(CompressedTexSubImage1D),
+ TABLE_ENTRY(GetCompressedTexImage),
+- TABLE_ENTRY(BlendColorEXT),
+- TABLE_ENTRY(TexImage3DEXT),
+- TABLE_ENTRY(TexSubImage3DEXT),
+- TABLE_ENTRY(TexSubImage1DEXT),
+- TABLE_ENTRY(TexSubImage2DEXT),
+- TABLE_ENTRY(CopyTexImage1DEXT),
+- TABLE_ENTRY(CopyTexImage2DEXT),
+- TABLE_ENTRY(CopyTexSubImage1DEXT),
+- TABLE_ENTRY(CopyTexSubImage2DEXT),
+- TABLE_ENTRY(CopyTexSubImage3DEXT),
+- TABLE_ENTRY(HistogramEXT),
+- TABLE_ENTRY(MinmaxEXT),
+- TABLE_ENTRY(ResetHistogramEXT),
+- TABLE_ENTRY(ResetMinmaxEXT),
+- TABLE_ENTRY(ConvolutionFilter1DEXT),
+- TABLE_ENTRY(ConvolutionFilter2DEXT),
+- TABLE_ENTRY(ConvolutionParameterfEXT),
+- TABLE_ENTRY(ConvolutionParameterfvEXT),
+- TABLE_ENTRY(ConvolutionParameteriEXT),
+- TABLE_ENTRY(ConvolutionParameterivEXT),
+- TABLE_ENTRY(CopyConvolutionFilter1DEXT),
+- TABLE_ENTRY(CopyConvolutionFilter2DEXT),
+- TABLE_ENTRY(SeparableFilter2DEXT),
+- TABLE_ENTRY(ColorTableSGI),
+- TABLE_ENTRY(ColorTableParameterfvSGI),
+- TABLE_ENTRY(ColorTableParameterivSGI),
+- TABLE_ENTRY(CopyColorTableSGI),
+- TABLE_ENTRY(BindTextureEXT),
+- TABLE_ENTRY(DeleteTexturesEXT),
+- TABLE_ENTRY(PrioritizeTexturesEXT),
+- TABLE_ENTRY(ArrayElementEXT),
+- TABLE_ENTRY(DrawArraysEXT),
+- TABLE_ENTRY(GetPointervEXT),
+- TABLE_ENTRY(BlendEquationEXT),
+- TABLE_ENTRY(PointParameterfARB),
+- TABLE_ENTRY(PointParameterfvARB),
+- TABLE_ENTRY(PointParameterfSGIS),
+- TABLE_ENTRY(PointParameterfvSGIS),
+- TABLE_ENTRY(ColorSubTableEXT),
+- TABLE_ENTRY(CopyColorSubTableEXT),
+- TABLE_ENTRY(ColorTableEXT),
+- TABLE_ENTRY(DrawRangeElementsEXT),
+- TABLE_ENTRY(BlendFuncSeparateINGR),
+- TABLE_ENTRY(SampleMaskEXT),
+- TABLE_ENTRY(SamplePatternEXT),
+- TABLE_ENTRY(WindowPos2dARB),
+- TABLE_ENTRY(WindowPos2fARB),
+- TABLE_ENTRY(WindowPos2iARB),
+- TABLE_ENTRY(WindowPos2sARB),
+- TABLE_ENTRY(WindowPos2dvARB),
+- TABLE_ENTRY(WindowPos2fvARB),
+- TABLE_ENTRY(WindowPos2ivARB),
+- TABLE_ENTRY(WindowPos2svARB),
+- TABLE_ENTRY(WindowPos3dARB),
+- TABLE_ENTRY(WindowPos3fARB),
+- TABLE_ENTRY(WindowPos3iARB),
+- TABLE_ENTRY(WindowPos3sARB),
+- TABLE_ENTRY(WindowPos3dvARB),
+- TABLE_ENTRY(WindowPos3fvARB),
+- TABLE_ENTRY(WindowPos3ivARB),
+- TABLE_ENTRY(WindowPos3svARB),
+ TABLE_ENTRY(BlendFuncSeparate),
+ TABLE_ENTRY(FogCoordf),
+ TABLE_ENTRY(FogCoordfv),
+@@ -5764,6 +5585,43 @@
+ TABLE_ENTRY(WindowPos3iv),
+ TABLE_ENTRY(WindowPos3s),
+ TABLE_ENTRY(WindowPos3sv),
++ TABLE_ENTRY(BindBuffer),
++ TABLE_ENTRY(BufferData),
++ TABLE_ENTRY(BufferSubData),
++ TABLE_ENTRY(DeleteBuffers),
++ TABLE_ENTRY(GenBuffers),
++ TABLE_ENTRY(GetBufferParameteriv),
++ TABLE_ENTRY(GetBufferPointerv),
++ TABLE_ENTRY(GetBufferSubData),
++ TABLE_ENTRY(IsBuffer),
++ TABLE_ENTRY(MapBuffer),
++ TABLE_ENTRY(UnmapBuffer),
++ TABLE_ENTRY(GenQueries),
++ TABLE_ENTRY(DeleteQueries),
++ TABLE_ENTRY(IsQuery),
++ TABLE_ENTRY(BeginQuery),
++ TABLE_ENTRY(EndQuery),
++ TABLE_ENTRY(GetQueryiv),
++ TABLE_ENTRY(GetQueryObjectiv),
++ TABLE_ENTRY(GetQueryObjectuiv),
++ TABLE_ENTRY(PointParameterfARB),
++ TABLE_ENTRY(PointParameterfvARB),
++ TABLE_ENTRY(WindowPos2dARB),
++ TABLE_ENTRY(WindowPos2fARB),
++ TABLE_ENTRY(WindowPos2iARB),
++ TABLE_ENTRY(WindowPos2sARB),
++ TABLE_ENTRY(WindowPos2dvARB),
++ TABLE_ENTRY(WindowPos2fvARB),
++ TABLE_ENTRY(WindowPos2ivARB),
++ TABLE_ENTRY(WindowPos2svARB),
++ TABLE_ENTRY(WindowPos3dARB),
++ TABLE_ENTRY(WindowPos3fARB),
++ TABLE_ENTRY(WindowPos3iARB),
++ TABLE_ENTRY(WindowPos3sARB),
++ TABLE_ENTRY(WindowPos3dvARB),
++ TABLE_ENTRY(WindowPos3fvARB),
++ TABLE_ENTRY(WindowPos3ivARB),
++ TABLE_ENTRY(WindowPos3svARB),
+ TABLE_ENTRY(VertexAttrib1sARB),
+ TABLE_ENTRY(VertexAttrib1fARB),
+ TABLE_ENTRY(VertexAttrib1dARB),
+@@ -5798,26 +5656,50 @@
+ TABLE_ENTRY(GetVertexAttribfvARB),
+ TABLE_ENTRY(GetVertexAttribivARB),
+ TABLE_ENTRY(GetVertexAttribPointervARB),
+- TABLE_ENTRY(BindBuffer),
+- TABLE_ENTRY(BufferData),
+- TABLE_ENTRY(BufferSubData),
+- TABLE_ENTRY(DeleteBuffers),
+- TABLE_ENTRY(GenBuffers),
+- TABLE_ENTRY(GetBufferParameteriv),
+- TABLE_ENTRY(GetBufferPointerv),
+- TABLE_ENTRY(GetBufferSubData),
+- TABLE_ENTRY(IsBuffer),
+- TABLE_ENTRY(MapBuffer),
+- TABLE_ENTRY(UnmapBuffer),
+- TABLE_ENTRY(GenQueries),
+- TABLE_ENTRY(DeleteQueries),
+- TABLE_ENTRY(IsQuery),
+- TABLE_ENTRY(BeginQuery),
+- TABLE_ENTRY(EndQuery),
+- TABLE_ENTRY(GetQueryiv),
+- TABLE_ENTRY(GetQueryObjectiv),
+- TABLE_ENTRY(GetQueryObjectuiv),
++ TABLE_ENTRY(BlendColorEXT),
++ TABLE_ENTRY(TexImage3DEXT),
++ TABLE_ENTRY(TexSubImage3DEXT),
++ TABLE_ENTRY(TexSubImage1DEXT),
++ TABLE_ENTRY(TexSubImage2DEXT),
++ TABLE_ENTRY(CopyTexImage1DEXT),
++ TABLE_ENTRY(CopyTexImage2DEXT),
++ TABLE_ENTRY(CopyTexSubImage1DEXT),
++ TABLE_ENTRY(CopyTexSubImage2DEXT),
++ TABLE_ENTRY(CopyTexSubImage3DEXT),
++ TABLE_ENTRY(HistogramEXT),
++ TABLE_ENTRY(MinmaxEXT),
++ TABLE_ENTRY(ResetHistogramEXT),
++ TABLE_ENTRY(ResetMinmaxEXT),
++ TABLE_ENTRY(ConvolutionFilter1DEXT),
++ TABLE_ENTRY(ConvolutionFilter2DEXT),
++ TABLE_ENTRY(ConvolutionParameterfEXT),
++ TABLE_ENTRY(ConvolutionParameterfvEXT),
++ TABLE_ENTRY(ConvolutionParameteriEXT),
++ TABLE_ENTRY(ConvolutionParameterivEXT),
++ TABLE_ENTRY(CopyConvolutionFilter1DEXT),
++ TABLE_ENTRY(CopyConvolutionFilter2DEXT),
++ TABLE_ENTRY(SeparableFilter2DEXT),
++ TABLE_ENTRY(ColorTableSGI),
++ TABLE_ENTRY(ColorTableParameterfvSGI),
++ TABLE_ENTRY(ColorTableParameterivSGI),
++ TABLE_ENTRY(CopyColorTableSGI),
++ TABLE_ENTRY(BindTextureEXT),
++ TABLE_ENTRY(DeleteTexturesEXT),
++ TABLE_ENTRY(PrioritizeTexturesEXT),
++ TABLE_ENTRY(ArrayElementEXT),
++ TABLE_ENTRY(DrawArraysEXT),
++ TABLE_ENTRY(GetPointervEXT),
++ TABLE_ENTRY(BlendEquationEXT),
++ TABLE_ENTRY(ColorSubTableEXT),
++ TABLE_ENTRY(CopyColorSubTableEXT),
++ TABLE_ENTRY(ColorTableEXT),
++ TABLE_ENTRY(DrawRangeElementsEXT),
++ TABLE_ENTRY(SampleMaskEXT),
++ TABLE_ENTRY(SamplePatternEXT),
+ TABLE_ENTRY(BlendEquationSeparateATI),
++ TABLE_ENTRY(BlendFuncSeparateINGR),
++ TABLE_ENTRY(PointParameterfSGIS),
++ TABLE_ENTRY(PointParameterfvSGIS),
+ };
+ #endif /*UNUSED_TABLE_NAME*/
+
+Index: xc/extras/Mesa/src/mesa/glapi/glprocs.h
+diff -u xc/extras/Mesa/src/mesa/glapi/glprocs.h:1.1.1.1 xc/extras/Mesa/src/mesa/glapi/glprocs.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/glapi/glprocs.h:1.1.1.1 Wed Jun 16 09:19:06 2004
++++ xc/extras/Mesa/src/mesa/glapi/glprocs.h Wed Dec 15 01:51:02 2004
+@@ -31,939 +31,939 @@
+ */
+
+ typedef struct {
+- int Name_offset;
++ GLint Name_offset;
+ #ifdef NEED_FUNCTION_POINTER
+- void * Address;
++ _glapi_proc Address;
+ #endif
+- unsigned int Offset;
++ GLuint Offset;
+ } glprocs_table_t;
+
+ #ifdef NEED_FUNCTION_POINTER
+-# define NAME_FUNC_OFFSET(n,f,o) { n , (void *) f , o }
++# define NAME_FUNC_OFFSET(n,f,o) { n , (_glapi_proc) f , o }
+ #else
+ # define NAME_FUNC_OFFSET(n,f,o) { n , o }
+ #endif
+
+
+-static const char gl_string_table[] = {
+- 'g','l', 'N', 'e', 'w', 'L', 'i', 's', 't', '\0',
+- 'g','l', 'E', 'n', 'd', 'L', 'i', 's', 't', '\0',
+- 'g','l', 'C', 'a', 'l', 'l', 'L', 'i', 's', 't', '\0',
+- 'g','l', 'C', 'a', 'l', 'l', 'L', 'i', 's', 't', 's', '\0',
+- 'g','l', 'D', 'e', 'l', 'e', 't', 'e', 'L', 'i', 's', 't', 's', '\0',
+- 'g','l', 'G', 'e', 'n', 'L', 'i', 's', 't', 's', '\0',
+- 'g','l', 'L', 'i', 's', 't', 'B', 'a', 's', 'e', '\0',
+- 'g','l', 'B', 'e', 'g', 'i', 'n', '\0',
+- 'g','l', 'B', 'i', 't', 'm', 'a', 'p', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '3', 'b', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '3', 'b', 'v', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '3', 'd', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '3', 'd', 'v', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '3', 'f', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '3', 'f', 'v', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '3', 'i', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '3', 'i', 'v', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '3', 's', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '3', 's', 'v', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '3', 'u', 'b', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '3', 'u', 'b', 'v', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '3', 'u', 'i', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '3', 'u', 'i', 'v', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '3', 'u', 's', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '3', 'u', 's', 'v', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '4', 'b', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '4', 'b', 'v', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '4', 'd', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '4', 'd', 'v', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '4', 'f', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '4', 'f', 'v', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '4', 'i', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '4', 'i', 'v', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '4', 's', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '4', 's', 'v', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '4', 'u', 'b', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '4', 'u', 'b', 'v', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '4', 'u', 'i', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '4', 'u', 'i', 'v', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '4', 'u', 's', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', '4', 'u', 's', 'v', '\0',
+- 'g','l', 'E', 'd', 'g', 'e', 'F', 'l', 'a', 'g', '\0',
+- 'g','l', 'E', 'd', 'g', 'e', 'F', 'l', 'a', 'g', 'v', '\0',
+- 'g','l', 'E', 'n', 'd', '\0',
+- 'g','l', 'I', 'n', 'd', 'e', 'x', 'd', '\0',
+- 'g','l', 'I', 'n', 'd', 'e', 'x', 'd', 'v', '\0',
+- 'g','l', 'I', 'n', 'd', 'e', 'x', 'f', '\0',
+- 'g','l', 'I', 'n', 'd', 'e', 'x', 'f', 'v', '\0',
+- 'g','l', 'I', 'n', 'd', 'e', 'x', 'i', '\0',
+- 'g','l', 'I', 'n', 'd', 'e', 'x', 'i', 'v', '\0',
+- 'g','l', 'I', 'n', 'd', 'e', 'x', 's', '\0',
+- 'g','l', 'I', 'n', 'd', 'e', 'x', 's', 'v', '\0',
+- 'g','l', 'N', 'o', 'r', 'm', 'a', 'l', '3', 'b', '\0',
+- 'g','l', 'N', 'o', 'r', 'm', 'a', 'l', '3', 'b', 'v', '\0',
+- 'g','l', 'N', 'o', 'r', 'm', 'a', 'l', '3', 'd', '\0',
+- 'g','l', 'N', 'o', 'r', 'm', 'a', 'l', '3', 'd', 'v', '\0',
+- 'g','l', 'N', 'o', 'r', 'm', 'a', 'l', '3', 'f', '\0',
+- 'g','l', 'N', 'o', 'r', 'm', 'a', 'l', '3', 'f', 'v', '\0',
+- 'g','l', 'N', 'o', 'r', 'm', 'a', 'l', '3', 'i', '\0',
+- 'g','l', 'N', 'o', 'r', 'm', 'a', 'l', '3', 'i', 'v', '\0',
+- 'g','l', 'N', 'o', 'r', 'm', 'a', 'l', '3', 's', '\0',
+- 'g','l', 'N', 'o', 'r', 'm', 'a', 'l', '3', 's', 'v', '\0',
+- 'g','l', 'R', 'a', 's', 't', 'e', 'r', 'P', 'o', 's', '2', 'd', '\0',
+- 'g','l', 'R', 'a', 's', 't', 'e', 'r', 'P', 'o', 's', '2', 'd', 'v', '\0',
+- 'g','l', 'R', 'a', 's', 't', 'e', 'r', 'P', 'o', 's', '2', 'f', '\0',
+- 'g','l', 'R', 'a', 's', 't', 'e', 'r', 'P', 'o', 's', '2', 'f', 'v', '\0',
+- 'g','l', 'R', 'a', 's', 't', 'e', 'r', 'P', 'o', 's', '2', 'i', '\0',
+- 'g','l', 'R', 'a', 's', 't', 'e', 'r', 'P', 'o', 's', '2', 'i', 'v', '\0',
+- 'g','l', 'R', 'a', 's', 't', 'e', 'r', 'P', 'o', 's', '2', 's', '\0',
+- 'g','l', 'R', 'a', 's', 't', 'e', 'r', 'P', 'o', 's', '2', 's', 'v', '\0',
+- 'g','l', 'R', 'a', 's', 't', 'e', 'r', 'P', 'o', 's', '3', 'd', '\0',
+- 'g','l', 'R', 'a', 's', 't', 'e', 'r', 'P', 'o', 's', '3', 'd', 'v', '\0',
+- 'g','l', 'R', 'a', 's', 't', 'e', 'r', 'P', 'o', 's', '3', 'f', '\0',
+- 'g','l', 'R', 'a', 's', 't', 'e', 'r', 'P', 'o', 's', '3', 'f', 'v', '\0',
+- 'g','l', 'R', 'a', 's', 't', 'e', 'r', 'P', 'o', 's', '3', 'i', '\0',
+- 'g','l', 'R', 'a', 's', 't', 'e', 'r', 'P', 'o', 's', '3', 'i', 'v', '\0',
+- 'g','l', 'R', 'a', 's', 't', 'e', 'r', 'P', 'o', 's', '3', 's', '\0',
+- 'g','l', 'R', 'a', 's', 't', 'e', 'r', 'P', 'o', 's', '3', 's', 'v', '\0',
+- 'g','l', 'R', 'a', 's', 't', 'e', 'r', 'P', 'o', 's', '4', 'd', '\0',
+- 'g','l', 'R', 'a', 's', 't', 'e', 'r', 'P', 'o', 's', '4', 'd', 'v', '\0',
+- 'g','l', 'R', 'a', 's', 't', 'e', 'r', 'P', 'o', 's', '4', 'f', '\0',
+- 'g','l', 'R', 'a', 's', 't', 'e', 'r', 'P', 'o', 's', '4', 'f', 'v', '\0',
+- 'g','l', 'R', 'a', 's', 't', 'e', 'r', 'P', 'o', 's', '4', 'i', '\0',
+- 'g','l', 'R', 'a', 's', 't', 'e', 'r', 'P', 'o', 's', '4', 'i', 'v', '\0',
+- 'g','l', 'R', 'a', 's', 't', 'e', 'r', 'P', 'o', 's', '4', 's', '\0',
+- 'g','l', 'R', 'a', 's', 't', 'e', 'r', 'P', 'o', 's', '4', 's', 'v', '\0',
+- 'g','l', 'R', 'e', 'c', 't', 'd', '\0',
+- 'g','l', 'R', 'e', 'c', 't', 'd', 'v', '\0',
+- 'g','l', 'R', 'e', 'c', 't', 'f', '\0',
+- 'g','l', 'R', 'e', 'c', 't', 'f', 'v', '\0',
+- 'g','l', 'R', 'e', 'c', 't', 'i', '\0',
+- 'g','l', 'R', 'e', 'c', 't', 'i', 'v', '\0',
+- 'g','l', 'R', 'e', 'c', 't', 's', '\0',
+- 'g','l', 'R', 'e', 'c', 't', 's', 'v', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '1', 'd', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '1', 'd', 'v', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '1', 'f', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '1', 'f', 'v', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '1', 'i', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '1', 'i', 'v', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '1', 's', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '1', 's', 'v', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '2', 'd', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '2', 'd', 'v', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '2', 'f', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '2', 'f', 'v', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '2', 'i', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '2', 'i', 'v', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '2', 's', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '2', 's', 'v', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '3', 'd', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '3', 'd', 'v', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '3', 'f', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '3', 'f', 'v', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '3', 'i', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '3', 'i', 'v', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '3', 's', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '3', 's', 'v', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '4', 'd', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '4', 'd', 'v', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '4', 'f', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '4', 'f', 'v', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '4', 'i', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '4', 'i', 'v', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '4', 's', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '4', 's', 'v', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', '2', 'd', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', '2', 'd', 'v', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', '2', 'f', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', '2', 'f', 'v', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', '2', 'i', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', '2', 'i', 'v', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', '2', 's', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', '2', 's', 'v', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', '3', 'd', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', '3', 'd', 'v', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', '3', 'f', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', '3', 'f', 'v', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', '3', 'i', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', '3', 'i', 'v', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', '3', 's', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', '3', 's', 'v', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', '4', 'd', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', '4', 'd', 'v', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', '4', 'f', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', '4', 'f', 'v', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', '4', 'i', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', '4', 'i', 'v', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', '4', 's', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', '4', 's', 'v', '\0',
+- 'g','l', 'C', 'l', 'i', 'p', 'P', 'l', 'a', 'n', 'e', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', 'M', 'a', 't', 'e', 'r', 'i', 'a', 'l', '\0',
+- 'g','l', 'C', 'u', 'l', 'l', 'F', 'a', 'c', 'e', '\0',
+- 'g','l', 'F', 'o', 'g', 'f', '\0',
+- 'g','l', 'F', 'o', 'g', 'f', 'v', '\0',
+- 'g','l', 'F', 'o', 'g', 'i', '\0',
+- 'g','l', 'F', 'o', 'g', 'i', 'v', '\0',
+- 'g','l', 'F', 'r', 'o', 'n', 't', 'F', 'a', 'c', 'e', '\0',
+- 'g','l', 'H', 'i', 'n', 't', '\0',
+- 'g','l', 'L', 'i', 'g', 'h', 't', 'f', '\0',
+- 'g','l', 'L', 'i', 'g', 'h', 't', 'f', 'v', '\0',
+- 'g','l', 'L', 'i', 'g', 'h', 't', 'i', '\0',
+- 'g','l', 'L', 'i', 'g', 'h', 't', 'i', 'v', '\0',
+- 'g','l', 'L', 'i', 'g', 'h', 't', 'M', 'o', 'd', 'e', 'l', 'f', '\0',
+- 'g','l', 'L', 'i', 'g', 'h', 't', 'M', 'o', 'd', 'e', 'l', 'f', 'v', '\0',
+- 'g','l', 'L', 'i', 'g', 'h', 't', 'M', 'o', 'd', 'e', 'l', 'i', '\0',
+- 'g','l', 'L', 'i', 'g', 'h', 't', 'M', 'o', 'd', 'e', 'l', 'i', 'v', '\0',
+- 'g','l', 'L', 'i', 'n', 'e', 'S', 't', 'i', 'p', 'p', 'l', 'e', '\0',
+- 'g','l', 'L', 'i', 'n', 'e', 'W', 'i', 'd', 't', 'h', '\0',
+- 'g','l', 'M', 'a', 't', 'e', 'r', 'i', 'a', 'l', 'f', '\0',
+- 'g','l', 'M', 'a', 't', 'e', 'r', 'i', 'a', 'l', 'f', 'v', '\0',
+- 'g','l', 'M', 'a', 't', 'e', 'r', 'i', 'a', 'l', 'i', '\0',
+- 'g','l', 'M', 'a', 't', 'e', 'r', 'i', 'a', 'l', 'i', 'v', '\0',
+- 'g','l', 'P', 'o', 'i', 'n', 't', 'S', 'i', 'z', 'e', '\0',
+- 'g','l', 'P', 'o', 'l', 'y', 'g', 'o', 'n', 'M', 'o', 'd', 'e', '\0',
+- 'g','l', 'P', 'o', 'l', 'y', 'g', 'o', 'n', 'S', 't', 'i', 'p', 'p', 'l', 'e', '\0',
+- 'g','l', 'S', 'c', 'i', 's', 's', 'o', 'r', '\0',
+- 'g','l', 'S', 'h', 'a', 'd', 'e', 'M', 'o', 'd', 'e', 'l', '\0',
+- 'g','l', 'T', 'e', 'x', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', '\0',
+- 'g','l', 'T', 'e', 'x', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', '\0',
+- 'g','l', 'T', 'e', 'x', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', '\0',
+- 'g','l', 'T', 'e', 'x', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'v', '\0',
+- 'g','l', 'T', 'e', 'x', 'I', 'm', 'a', 'g', 'e', '1', 'D', '\0',
+- 'g','l', 'T', 'e', 'x', 'I', 'm', 'a', 'g', 'e', '2', 'D', '\0',
+- 'g','l', 'T', 'e', 'x', 'E', 'n', 'v', 'f', '\0',
+- 'g','l', 'T', 'e', 'x', 'E', 'n', 'v', 'f', 'v', '\0',
+- 'g','l', 'T', 'e', 'x', 'E', 'n', 'v', 'i', '\0',
+- 'g','l', 'T', 'e', 'x', 'E', 'n', 'v', 'i', 'v', '\0',
+- 'g','l', 'T', 'e', 'x', 'G', 'e', 'n', 'd', '\0',
+- 'g','l', 'T', 'e', 'x', 'G', 'e', 'n', 'd', 'v', '\0',
+- 'g','l', 'T', 'e', 'x', 'G', 'e', 'n', 'f', '\0',
+- 'g','l', 'T', 'e', 'x', 'G', 'e', 'n', 'f', 'v', '\0',
+- 'g','l', 'T', 'e', 'x', 'G', 'e', 'n', 'i', '\0',
+- 'g','l', 'T', 'e', 'x', 'G', 'e', 'n', 'i', 'v', '\0',
+- 'g','l', 'F', 'e', 'e', 'd', 'b', 'a', 'c', 'k', 'B', 'u', 'f', 'f', 'e', 'r', '\0',
+- 'g','l', 'S', 'e', 'l', 'e', 'c', 't', 'B', 'u', 'f', 'f', 'e', 'r', '\0',
+- 'g','l', 'R', 'e', 'n', 'd', 'e', 'r', 'M', 'o', 'd', 'e', '\0',
+- 'g','l', 'I', 'n', 'i', 't', 'N', 'a', 'm', 'e', 's', '\0',
+- 'g','l', 'L', 'o', 'a', 'd', 'N', 'a', 'm', 'e', '\0',
+- 'g','l', 'P', 'a', 's', 's', 'T', 'h', 'r', 'o', 'u', 'g', 'h', '\0',
+- 'g','l', 'P', 'o', 'p', 'N', 'a', 'm', 'e', '\0',
+- 'g','l', 'P', 'u', 's', 'h', 'N', 'a', 'm', 'e', '\0',
+- 'g','l', 'D', 'r', 'a', 'w', 'B', 'u', 'f', 'f', 'e', 'r', '\0',
+- 'g','l', 'C', 'l', 'e', 'a', 'r', '\0',
+- 'g','l', 'C', 'l', 'e', 'a', 'r', 'A', 'c', 'c', 'u', 'm', '\0',
+- 'g','l', 'C', 'l', 'e', 'a', 'r', 'I', 'n', 'd', 'e', 'x', '\0',
+- 'g','l', 'C', 'l', 'e', 'a', 'r', 'C', 'o', 'l', 'o', 'r', '\0',
+- 'g','l', 'C', 'l', 'e', 'a', 'r', 'S', 't', 'e', 'n', 'c', 'i', 'l', '\0',
+- 'g','l', 'C', 'l', 'e', 'a', 'r', 'D', 'e', 'p', 't', 'h', '\0',
+- 'g','l', 'S', 't', 'e', 'n', 'c', 'i', 'l', 'M', 'a', 's', 'k', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', 'M', 'a', 's', 'k', '\0',
+- 'g','l', 'D', 'e', 'p', 't', 'h', 'M', 'a', 's', 'k', '\0',
+- 'g','l', 'I', 'n', 'd', 'e', 'x', 'M', 'a', 's', 'k', '\0',
+- 'g','l', 'A', 'c', 'c', 'u', 'm', '\0',
+- 'g','l', 'D', 'i', 's', 'a', 'b', 'l', 'e', '\0',
+- 'g','l', 'E', 'n', 'a', 'b', 'l', 'e', '\0',
+- 'g','l', 'F', 'i', 'n', 'i', 's', 'h', '\0',
+- 'g','l', 'F', 'l', 'u', 's', 'h', '\0',
+- 'g','l', 'P', 'o', 'p', 'A', 't', 't', 'r', 'i', 'b', '\0',
+- 'g','l', 'P', 'u', 's', 'h', 'A', 't', 't', 'r', 'i', 'b', '\0',
+- 'g','l', 'M', 'a', 'p', '1', 'd', '\0',
+- 'g','l', 'M', 'a', 'p', '1', 'f', '\0',
+- 'g','l', 'M', 'a', 'p', '2', 'd', '\0',
+- 'g','l', 'M', 'a', 'p', '2', 'f', '\0',
+- 'g','l', 'M', 'a', 'p', 'G', 'r', 'i', 'd', '1', 'd', '\0',
+- 'g','l', 'M', 'a', 'p', 'G', 'r', 'i', 'd', '1', 'f', '\0',
+- 'g','l', 'M', 'a', 'p', 'G', 'r', 'i', 'd', '2', 'd', '\0',
+- 'g','l', 'M', 'a', 'p', 'G', 'r', 'i', 'd', '2', 'f', '\0',
+- 'g','l', 'E', 'v', 'a', 'l', 'C', 'o', 'o', 'r', 'd', '1', 'd', '\0',
+- 'g','l', 'E', 'v', 'a', 'l', 'C', 'o', 'o', 'r', 'd', '1', 'd', 'v', '\0',
+- 'g','l', 'E', 'v', 'a', 'l', 'C', 'o', 'o', 'r', 'd', '1', 'f', '\0',
+- 'g','l', 'E', 'v', 'a', 'l', 'C', 'o', 'o', 'r', 'd', '1', 'f', 'v', '\0',
+- 'g','l', 'E', 'v', 'a', 'l', 'C', 'o', 'o', 'r', 'd', '2', 'd', '\0',
+- 'g','l', 'E', 'v', 'a', 'l', 'C', 'o', 'o', 'r', 'd', '2', 'd', 'v', '\0',
+- 'g','l', 'E', 'v', 'a', 'l', 'C', 'o', 'o', 'r', 'd', '2', 'f', '\0',
+- 'g','l', 'E', 'v', 'a', 'l', 'C', 'o', 'o', 'r', 'd', '2', 'f', 'v', '\0',
+- 'g','l', 'E', 'v', 'a', 'l', 'M', 'e', 's', 'h', '1', '\0',
+- 'g','l', 'E', 'v', 'a', 'l', 'P', 'o', 'i', 'n', 't', '1', '\0',
+- 'g','l', 'E', 'v', 'a', 'l', 'M', 'e', 's', 'h', '2', '\0',
+- 'g','l', 'E', 'v', 'a', 'l', 'P', 'o', 'i', 'n', 't', '2', '\0',
+- 'g','l', 'A', 'l', 'p', 'h', 'a', 'F', 'u', 'n', 'c', '\0',
+- 'g','l', 'B', 'l', 'e', 'n', 'd', 'F', 'u', 'n', 'c', '\0',
+- 'g','l', 'L', 'o', 'g', 'i', 'c', 'O', 'p', '\0',
+- 'g','l', 'S', 't', 'e', 'n', 'c', 'i', 'l', 'F', 'u', 'n', 'c', '\0',
+- 'g','l', 'S', 't', 'e', 'n', 'c', 'i', 'l', 'O', 'p', '\0',
+- 'g','l', 'D', 'e', 'p', 't', 'h', 'F', 'u', 'n', 'c', '\0',
+- 'g','l', 'P', 'i', 'x', 'e', 'l', 'Z', 'o', 'o', 'm', '\0',
+- 'g','l', 'P', 'i', 'x', 'e', 'l', 'T', 'r', 'a', 'n', 's', 'f', 'e', 'r', 'f', '\0',
+- 'g','l', 'P', 'i', 'x', 'e', 'l', 'T', 'r', 'a', 'n', 's', 'f', 'e', 'r', 'i', '\0',
+- 'g','l', 'P', 'i', 'x', 'e', 'l', 'S', 't', 'o', 'r', 'e', 'f', '\0',
+- 'g','l', 'P', 'i', 'x', 'e', 'l', 'S', 't', 'o', 'r', 'e', 'i', '\0',
+- 'g','l', 'P', 'i', 'x', 'e', 'l', 'M', 'a', 'p', 'f', 'v', '\0',
+- 'g','l', 'P', 'i', 'x', 'e', 'l', 'M', 'a', 'p', 'u', 'i', 'v', '\0',
+- 'g','l', 'P', 'i', 'x', 'e', 'l', 'M', 'a', 'p', 'u', 's', 'v', '\0',
+- 'g','l', 'R', 'e', 'a', 'd', 'B', 'u', 'f', 'f', 'e', 'r', '\0',
+- 'g','l', 'C', 'o', 'p', 'y', 'P', 'i', 'x', 'e', 'l', 's', '\0',
+- 'g','l', 'R', 'e', 'a', 'd', 'P', 'i', 'x', 'e', 'l', 's', '\0',
+- 'g','l', 'D', 'r', 'a', 'w', 'P', 'i', 'x', 'e', 'l', 's', '\0',
+- 'g','l', 'G', 'e', 't', 'B', 'o', 'o', 'l', 'e', 'a', 'n', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'C', 'l', 'i', 'p', 'P', 'l', 'a', 'n', 'e', '\0',
+- 'g','l', 'G', 'e', 't', 'D', 'o', 'u', 'b', 'l', 'e', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'E', 'r', 'r', 'o', 'r', '\0',
+- 'g','l', 'G', 'e', 't', 'F', 'l', 'o', 'a', 't', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'I', 'n', 't', 'e', 'g', 'e', 'r', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'L', 'i', 'g', 'h', 't', 'f', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'L', 'i', 'g', 'h', 't', 'i', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'M', 'a', 'p', 'd', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'M', 'a', 'p', 'f', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'M', 'a', 'p', 'i', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'M', 'a', 't', 'e', 'r', 'i', 'a', 'l', 'f', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'M', 'a', 't', 'e', 'r', 'i', 'a', 'l', 'i', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'P', 'i', 'x', 'e', 'l', 'M', 'a', 'p', 'f', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'P', 'i', 'x', 'e', 'l', 'M', 'a', 'p', 'u', 'i', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'P', 'i', 'x', 'e', 'l', 'M', 'a', 'p', 'u', 's', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'P', 'o', 'l', 'y', 'g', 'o', 'n', 'S', 't', 'i', 'p', 'p', 'l', 'e', '\0',
+- 'g','l', 'G', 'e', 't', 'S', 't', 'r', 'i', 'n', 'g', '\0',
+- 'g','l', 'G', 'e', 't', 'T', 'e', 'x', 'E', 'n', 'v', 'f', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'T', 'e', 'x', 'E', 'n', 'v', 'i', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'T', 'e', 'x', 'G', 'e', 'n', 'd', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'T', 'e', 'x', 'G', 'e', 'n', 'f', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'T', 'e', 'x', 'G', 'e', 'n', 'i', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'T', 'e', 'x', 'I', 'm', 'a', 'g', 'e', '\0',
+- 'g','l', 'G', 'e', 't', 'T', 'e', 'x', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'T', 'e', 'x', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'T', 'e', 'x', 'L', 'e', 'v', 'e', 'l', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'T', 'e', 'x', 'L', 'e', 'v', 'e', 'l', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'v', '\0',
+- 'g','l', 'I', 's', 'E', 'n', 'a', 'b', 'l', 'e', 'd', '\0',
+- 'g','l', 'I', 's', 'L', 'i', 's', 't', '\0',
+- 'g','l', 'D', 'e', 'p', 't', 'h', 'R', 'a', 'n', 'g', 'e', '\0',
+- 'g','l', 'F', 'r', 'u', 's', 't', 'u', 'm', '\0',
+- 'g','l', 'L', 'o', 'a', 'd', 'I', 'd', 'e', 'n', 't', 'i', 't', 'y', '\0',
+- 'g','l', 'L', 'o', 'a', 'd', 'M', 'a', 't', 'r', 'i', 'x', 'f', '\0',
+- 'g','l', 'L', 'o', 'a', 'd', 'M', 'a', 't', 'r', 'i', 'x', 'd', '\0',
+- 'g','l', 'M', 'a', 't', 'r', 'i', 'x', 'M', 'o', 'd', 'e', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'M', 'a', 't', 'r', 'i', 'x', 'f', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'M', 'a', 't', 'r', 'i', 'x', 'd', '\0',
+- 'g','l', 'O', 'r', 't', 'h', 'o', '\0',
+- 'g','l', 'P', 'o', 'p', 'M', 'a', 't', 'r', 'i', 'x', '\0',
+- 'g','l', 'P', 'u', 's', 'h', 'M', 'a', 't', 'r', 'i', 'x', '\0',
+- 'g','l', 'R', 'o', 't', 'a', 't', 'e', 'd', '\0',
+- 'g','l', 'R', 'o', 't', 'a', 't', 'e', 'f', '\0',
+- 'g','l', 'S', 'c', 'a', 'l', 'e', 'd', '\0',
+- 'g','l', 'S', 'c', 'a', 'l', 'e', 'f', '\0',
+- 'g','l', 'T', 'r', 'a', 'n', 's', 'l', 'a', 't', 'e', 'd', '\0',
+- 'g','l', 'T', 'r', 'a', 'n', 's', 'l', 'a', 't', 'e', 'f', '\0',
+- 'g','l', 'V', 'i', 'e', 'w', 'p', 'o', 'r', 't', '\0',
+- 'g','l', 'A', 'r', 'r', 'a', 'y', 'E', 'l', 'e', 'm', 'e', 'n', 't', '\0',
+- 'g','l', 'B', 'i', 'n', 'd', 'T', 'e', 'x', 't', 'u', 'r', 'e', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', 'P', 'o', 'i', 'n', 't', 'e', 'r', '\0',
+- 'g','l', 'D', 'i', 's', 'a', 'b', 'l', 'e', 'C', 'l', 'i', 'e', 'n', 't', 'S', 't', 'a', 't', 'e', '\0',
+- 'g','l', 'D', 'r', 'a', 'w', 'A', 'r', 'r', 'a', 'y', 's', '\0',
+- 'g','l', 'D', 'r', 'a', 'w', 'E', 'l', 'e', 'm', 'e', 'n', 't', 's', '\0',
+- 'g','l', 'E', 'd', 'g', 'e', 'F', 'l', 'a', 'g', 'P', 'o', 'i', 'n', 't', 'e', 'r', '\0',
+- 'g','l', 'E', 'n', 'a', 'b', 'l', 'e', 'C', 'l', 'i', 'e', 'n', 't', 'S', 't', 'a', 't', 'e', '\0',
+- 'g','l', 'I', 'n', 'd', 'e', 'x', 'P', 'o', 'i', 'n', 't', 'e', 'r', '\0',
+- 'g','l', 'I', 'n', 'd', 'e', 'x', 'u', 'b', '\0',
+- 'g','l', 'I', 'n', 'd', 'e', 'x', 'u', 'b', 'v', '\0',
+- 'g','l', 'I', 'n', 't', 'e', 'r', 'l', 'e', 'a', 'v', 'e', 'd', 'A', 'r', 'r', 'a', 'y', 's', '\0',
+- 'g','l', 'N', 'o', 'r', 'm', 'a', 'l', 'P', 'o', 'i', 'n', 't', 'e', 'r', '\0',
+- 'g','l', 'P', 'o', 'l', 'y', 'g', 'o', 'n', 'O', 'f', 'f', 's', 'e', 't', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', 'P', 'o', 'i', 'n', 't', 'e', 'r', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'P', 'o', 'i', 'n', 't', 'e', 'r', '\0',
+- 'g','l', 'A', 'r', 'e', 'T', 'e', 'x', 't', 'u', 'r', 'e', 's', 'R', 'e', 's', 'i', 'd', 'e', 'n', 't', '\0',
+- 'g','l', 'C', 'o', 'p', 'y', 'T', 'e', 'x', 'I', 'm', 'a', 'g', 'e', '1', 'D', '\0',
+- 'g','l', 'C', 'o', 'p', 'y', 'T', 'e', 'x', 'I', 'm', 'a', 'g', 'e', '2', 'D', '\0',
+- 'g','l', 'C', 'o', 'p', 'y', 'T', 'e', 'x', 'S', 'u', 'b', 'I', 'm', 'a', 'g', 'e', '1', 'D', '\0',
+- 'g','l', 'C', 'o', 'p', 'y', 'T', 'e', 'x', 'S', 'u', 'b', 'I', 'm', 'a', 'g', 'e', '2', 'D', '\0',
+- 'g','l', 'D', 'e', 'l', 'e', 't', 'e', 'T', 'e', 'x', 't', 'u', 'r', 'e', 's', '\0',
+- 'g','l', 'G', 'e', 'n', 'T', 'e', 'x', 't', 'u', 'r', 'e', 's', '\0',
+- 'g','l', 'G', 'e', 't', 'P', 'o', 'i', 'n', 't', 'e', 'r', 'v', '\0',
+- 'g','l', 'I', 's', 'T', 'e', 'x', 't', 'u', 'r', 'e', '\0',
+- 'g','l', 'P', 'r', 'i', 'o', 'r', 'i', 't', 'i', 'z', 'e', 'T', 'e', 'x', 't', 'u', 'r', 'e', 's', '\0',
+- 'g','l', 'T', 'e', 'x', 'S', 'u', 'b', 'I', 'm', 'a', 'g', 'e', '1', 'D', '\0',
+- 'g','l', 'T', 'e', 'x', 'S', 'u', 'b', 'I', 'm', 'a', 'g', 'e', '2', 'D', '\0',
+- 'g','l', 'P', 'o', 'p', 'C', 'l', 'i', 'e', 'n', 't', 'A', 't', 't', 'r', 'i', 'b', '\0',
+- 'g','l', 'P', 'u', 's', 'h', 'C', 'l', 'i', 'e', 'n', 't', 'A', 't', 't', 'r', 'i', 'b', '\0',
+- 'g','l', 'B', 'l', 'e', 'n', 'd', 'C', 'o', 'l', 'o', 'r', '\0',
+- 'g','l', 'B', 'l', 'e', 'n', 'd', 'E', 'q', 'u', 'a', 't', 'i', 'o', 'n', '\0',
+- 'g','l', 'D', 'r', 'a', 'w', 'R', 'a', 'n', 'g', 'e', 'E', 'l', 'e', 'm', 'e', 'n', 't', 's', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', 'T', 'a', 'b', 'l', 'e', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', 'T', 'a', 'b', 'l', 'e', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', 'T', 'a', 'b', 'l', 'e', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'v', '\0',
+- 'g','l', 'C', 'o', 'p', 'y', 'C', 'o', 'l', 'o', 'r', 'T', 'a', 'b', 'l', 'e', '\0',
+- 'g','l', 'G', 'e', 't', 'C', 'o', 'l', 'o', 'r', 'T', 'a', 'b', 'l', 'e', '\0',
+- 'g','l', 'G', 'e', 't', 'C', 'o', 'l', 'o', 'r', 'T', 'a', 'b', 'l', 'e', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'C', 'o', 'l', 'o', 'r', 'T', 'a', 'b', 'l', 'e', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'v', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', 'S', 'u', 'b', 'T', 'a', 'b', 'l', 'e', '\0',
+- 'g','l', 'C', 'o', 'p', 'y', 'C', 'o', 'l', 'o', 'r', 'S', 'u', 'b', 'T', 'a', 'b', 'l', 'e', '\0',
+- 'g','l', 'C', 'o', 'n', 'v', 'o', 'l', 'u', 't', 'i', 'o', 'n', 'F', 'i', 'l', 't', 'e', 'r', '1', 'D', '\0',
+- 'g','l', 'C', 'o', 'n', 'v', 'o', 'l', 'u', 't', 'i', 'o', 'n', 'F', 'i', 'l', 't', 'e', 'r', '2', 'D', '\0',
+- 'g','l', 'C', 'o', 'n', 'v', 'o', 'l', 'u', 't', 'i', 'o', 'n', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', '\0',
+- 'g','l', 'C', 'o', 'n', 'v', 'o', 'l', 'u', 't', 'i', 'o', 'n', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', '\0',
+- 'g','l', 'C', 'o', 'n', 'v', 'o', 'l', 'u', 't', 'i', 'o', 'n', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', '\0',
+- 'g','l', 'C', 'o', 'n', 'v', 'o', 'l', 'u', 't', 'i', 'o', 'n', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'v', '\0',
+- 'g','l', 'C', 'o', 'p', 'y', 'C', 'o', 'n', 'v', 'o', 'l', 'u', 't', 'i', 'o', 'n', 'F', 'i', 'l', 't', 'e', 'r', '1', 'D', '\0',
+- 'g','l', 'C', 'o', 'p', 'y', 'C', 'o', 'n', 'v', 'o', 'l', 'u', 't', 'i', 'o', 'n', 'F', 'i', 'l', 't', 'e', 'r', '2', 'D', '\0',
+- 'g','l', 'G', 'e', 't', 'C', 'o', 'n', 'v', 'o', 'l', 'u', 't', 'i', 'o', 'n', 'F', 'i', 'l', 't', 'e', 'r', '\0',
+- 'g','l', 'G', 'e', 't', 'C', 'o', 'n', 'v', 'o', 'l', 'u', 't', 'i', 'o', 'n', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'C', 'o', 'n', 'v', 'o', 'l', 'u', 't', 'i', 'o', 'n', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'S', 'e', 'p', 'a', 'r', 'a', 'b', 'l', 'e', 'F', 'i', 'l', 't', 'e', 'r', '\0',
+- 'g','l', 'S', 'e', 'p', 'a', 'r', 'a', 'b', 'l', 'e', 'F', 'i', 'l', 't', 'e', 'r', '2', 'D', '\0',
+- 'g','l', 'G', 'e', 't', 'H', 'i', 's', 't', 'o', 'g', 'r', 'a', 'm', '\0',
+- 'g','l', 'G', 'e', 't', 'H', 'i', 's', 't', 'o', 'g', 'r', 'a', 'm', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'H', 'i', 's', 't', 'o', 'g', 'r', 'a', 'm', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'M', 'i', 'n', 'm', 'a', 'x', '\0',
+- 'g','l', 'G', 'e', 't', 'M', 'i', 'n', 'm', 'a', 'x', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'M', 'i', 'n', 'm', 'a', 'x', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'v', '\0',
+- 'g','l', 'H', 'i', 's', 't', 'o', 'g', 'r', 'a', 'm', '\0',
+- 'g','l', 'M', 'i', 'n', 'm', 'a', 'x', '\0',
+- 'g','l', 'R', 'e', 's', 'e', 't', 'H', 'i', 's', 't', 'o', 'g', 'r', 'a', 'm', '\0',
+- 'g','l', 'R', 'e', 's', 'e', 't', 'M', 'i', 'n', 'm', 'a', 'x', '\0',
+- 'g','l', 'T', 'e', 'x', 'I', 'm', 'a', 'g', 'e', '3', 'D', '\0',
+- 'g','l', 'T', 'e', 'x', 'S', 'u', 'b', 'I', 'm', 'a', 'g', 'e', '3', 'D', '\0',
+- 'g','l', 'C', 'o', 'p', 'y', 'T', 'e', 'x', 'S', 'u', 'b', 'I', 'm', 'a', 'g', 'e', '3', 'D', '\0',
+- 'g','l', 'A', 'c', 't', 'i', 'v', 'e', 'T', 'e', 'x', 't', 'u', 'r', 'e', 'A', 'R', 'B', '\0',
+- 'g','l', 'C', 'l', 'i', 'e', 'n', 't', 'A', 'c', 't', 'i', 'v', 'e', 'T', 'e', 'x', 't', 'u', 'r', 'e', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '1', 'd', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '1', 'd', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '1', 'f', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '1', 'f', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '1', 'i', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '1', 'i', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '1', 's', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '1', 's', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '2', 'd', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '2', 'd', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '2', 'f', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '2', 'f', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '2', 'i', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '2', 'i', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '2', 's', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '2', 's', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '3', 'd', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '3', 'd', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '3', 'f', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '3', 'f', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '3', 'i', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '3', 'i', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '3', 's', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '3', 's', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '4', 'd', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '4', 'd', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '4', 'f', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '4', 'f', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '4', 'i', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '4', 'i', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '4', 's', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '4', 's', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'L', 'o', 'a', 'd', 'T', 'r', 'a', 'n', 's', 'p', 'o', 's', 'e', 'M', 'a', 't', 'r', 'i', 'x', 'f', 'A', 'R', 'B', '\0',
+- 'g','l', 'L', 'o', 'a', 'd', 'T', 'r', 'a', 'n', 's', 'p', 'o', 's', 'e', 'M', 'a', 't', 'r', 'i', 'x', 'd', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'T', 'r', 'a', 'n', 's', 'p', 'o', 's', 'e', 'M', 'a', 't', 'r', 'i', 'x', 'f', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'T', 'r', 'a', 'n', 's', 'p', 'o', 's', 'e', 'M', 'a', 't', 'r', 'i', 'x', 'd', 'A', 'R', 'B', '\0',
+- 'g','l', 'S', 'a', 'm', 'p', 'l', 'e', 'C', 'o', 'v', 'e', 'r', 'a', 'g', 'e', 'A', 'R', 'B', '\0',
+- 'g','l', '_', '_', 'u', 'n', 'u', 's', 'e', 'd', '4', '1', '3', '\0',
+- 'g','l', 'P', 'o', 'l', 'y', 'g', 'o', 'n', 'O', 'f', 'f', 's', 'e', 't', 'E', 'X', 'T', '\0',
+- 'g','l', 'G', 'e', 't', 'T', 'e', 'x', 'F', 'i', 'l', 't', 'e', 'r', 'F', 'u', 'n', 'c', 'S', 'G', 'I', 'S', '\0',
+- 'g','l', 'T', 'e', 'x', 'F', 'i', 'l', 't', 'e', 'r', 'F', 'u', 'n', 'c', 'S', 'G', 'I', 'S', '\0',
+- 'g','l', 'G', 'e', 't', 'H', 'i', 's', 't', 'o', 'g', 'r', 'a', 'm', 'E', 'X', 'T', '\0',
+- 'g','l', 'G', 'e', 't', 'H', 'i', 's', 't', 'o', 'g', 'r', 'a', 'm', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', 'E', 'X', 'T', '\0',
+- 'g','l', 'G', 'e', 't', 'H', 'i', 's', 't', 'o', 'g', 'r', 'a', 'm', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'v', 'E', 'X', 'T', '\0',
+- 'g','l', 'G', 'e', 't', 'M', 'i', 'n', 'm', 'a', 'x', 'E', 'X', 'T', '\0',
+- 'g','l', 'G', 'e', 't', 'M', 'i', 'n', 'm', 'a', 'x', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', 'E', 'X', 'T', '\0',
+- 'g','l', 'G', 'e', 't', 'M', 'i', 'n', 'm', 'a', 'x', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'v', 'E', 'X', 'T', '\0',
+- 'g','l', 'G', 'e', 't', 'C', 'o', 'n', 'v', 'o', 'l', 'u', 't', 'i', 'o', 'n', 'F', 'i', 'l', 't', 'e', 'r', 'E', 'X', 'T', '\0',
+- 'g','l', 'G', 'e', 't', 'C', 'o', 'n', 'v', 'o', 'l', 'u', 't', 'i', 'o', 'n', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', 'E', 'X', 'T', '\0',
+- 'g','l', 'G', 'e', 't', 'C', 'o', 'n', 'v', 'o', 'l', 'u', 't', 'i', 'o', 'n', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'v', 'E', 'X', 'T', '\0',
+- 'g','l', 'G', 'e', 't', 'S', 'e', 'p', 'a', 'r', 'a', 'b', 'l', 'e', 'F', 'i', 'l', 't', 'e', 'r', 'E', 'X', 'T', '\0',
+- 'g','l', 'G', 'e', 't', 'C', 'o', 'l', 'o', 'r', 'T', 'a', 'b', 'l', 'e', 'S', 'G', 'I', '\0',
+- 'g','l', 'G', 'e', 't', 'C', 'o', 'l', 'o', 'r', 'T', 'a', 'b', 'l', 'e', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', 'S', 'G', 'I', '\0',
+- 'g','l', 'G', 'e', 't', 'C', 'o', 'l', 'o', 'r', 'T', 'a', 'b', 'l', 'e', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'v', 'S', 'G', 'I', '\0',
+- 'g','l', 'P', 'i', 'x', 'e', 'l', 'T', 'e', 'x', 'G', 'e', 'n', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'P', 'i', 'x', 'e', 'l', 'T', 'e', 'x', 'G', 'e', 'n', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'S', 'G', 'I', 'S', '\0',
+- 'g','l', 'P', 'i', 'x', 'e', 'l', 'T', 'e', 'x', 'G', 'e', 'n', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'v', 'S', 'G', 'I', 'S', '\0',
+- 'g','l', 'P', 'i', 'x', 'e', 'l', 'T', 'e', 'x', 'G', 'e', 'n', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'S', 'G', 'I', 'S', '\0',
+- 'g','l', 'P', 'i', 'x', 'e', 'l', 'T', 'e', 'x', 'G', 'e', 'n', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', 'S', 'G', 'I', 'S', '\0',
+- 'g','l', 'G', 'e', 't', 'P', 'i', 'x', 'e', 'l', 'T', 'e', 'x', 'G', 'e', 'n', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'v', 'S', 'G', 'I', 'S', '\0',
+- 'g','l', 'G', 'e', 't', 'P', 'i', 'x', 'e', 'l', 'T', 'e', 'x', 'G', 'e', 'n', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', 'S', 'G', 'I', 'S', '\0',
+- 'g','l', 'T', 'e', 'x', 'I', 'm', 'a', 'g', 'e', '4', 'D', 'S', 'G', 'I', 'S', '\0',
+- 'g','l', 'T', 'e', 'x', 'S', 'u', 'b', 'I', 'm', 'a', 'g', 'e', '4', 'D', 'S', 'G', 'I', 'S', '\0',
+- 'g','l', 'A', 'r', 'e', 'T', 'e', 'x', 't', 'u', 'r', 'e', 's', 'R', 'e', 's', 'i', 'd', 'e', 'n', 't', 'E', 'X', 'T', '\0',
+- 'g','l', 'G', 'e', 'n', 'T', 'e', 'x', 't', 'u', 'r', 'e', 's', 'E', 'X', 'T', '\0',
+- 'g','l', 'I', 's', 'T', 'e', 'x', 't', 'u', 'r', 'e', 'E', 'X', 'T', '\0',
+- 'g','l', 'D', 'e', 't', 'a', 'i', 'l', 'T', 'e', 'x', 'F', 'u', 'n', 'c', 'S', 'G', 'I', 'S', '\0',
+- 'g','l', 'G', 'e', 't', 'D', 'e', 't', 'a', 'i', 'l', 'T', 'e', 'x', 'F', 'u', 'n', 'c', 'S', 'G', 'I', 'S', '\0',
+- 'g','l', 'S', 'h', 'a', 'r', 'p', 'e', 'n', 'T', 'e', 'x', 'F', 'u', 'n', 'c', 'S', 'G', 'I', 'S', '\0',
+- 'g','l', 'G', 'e', 't', 'S', 'h', 'a', 'r', 'p', 'e', 'n', 'T', 'e', 'x', 'F', 'u', 'n', 'c', 'S', 'G', 'I', 'S', '\0',
+- 'g','l', 'S', 'a', 'm', 'p', 'l', 'e', 'M', 'a', 's', 'k', 'S', 'G', 'I', 'S', '\0',
+- 'g','l', 'S', 'a', 'm', 'p', 'l', 'e', 'P', 'a', 't', 't', 'e', 'r', 'n', 'S', 'G', 'I', 'S', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', 'P', 'o', 'i', 'n', 't', 'e', 'r', 'E', 'X', 'T', '\0',
+- 'g','l', 'E', 'd', 'g', 'e', 'F', 'l', 'a', 'g', 'P', 'o', 'i', 'n', 't', 'e', 'r', 'E', 'X', 'T', '\0',
+- 'g','l', 'I', 'n', 'd', 'e', 'x', 'P', 'o', 'i', 'n', 't', 'e', 'r', 'E', 'X', 'T', '\0',
+- 'g','l', 'N', 'o', 'r', 'm', 'a', 'l', 'P', 'o', 'i', 'n', 't', 'e', 'r', 'E', 'X', 'T', '\0',
+- 'g','l', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', 'P', 'o', 'i', 'n', 't', 'e', 'r', 'E', 'X', 'T', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'P', 'o', 'i', 'n', 't', 'e', 'r', 'E', 'X', 'T', '\0',
+- 'g','l', 'S', 'p', 'r', 'i', 't', 'e', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'S', 'p', 'r', 'i', 't', 'e', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'S', 'p', 'r', 'i', 't', 'e', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'S', 'p', 'r', 'i', 't', 'e', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'v', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'P', 'o', 'i', 'n', 't', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'E', 'X', 'T', '\0',
+- 'g','l', 'P', 'o', 'i', 'n', 't', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', 'E', 'X', 'T', '\0',
+- 'g','l', 'G', 'e', 't', 'I', 'n', 's', 't', 'r', 'u', 'm', 'e', 'n', 't', 's', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'I', 'n', 's', 't', 'r', 'u', 'm', 'e', 'n', 't', 's', 'B', 'u', 'f', 'f', 'e', 'r', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'P', 'o', 'l', 'l', 'I', 'n', 's', 't', 'r', 'u', 'm', 'e', 'n', 't', 's', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'R', 'e', 'a', 'd', 'I', 'n', 's', 't', 'r', 'u', 'm', 'e', 'n', 't', 's', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'S', 't', 'a', 'r', 't', 'I', 'n', 's', 't', 'r', 'u', 'm', 'e', 'n', 't', 's', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'S', 't', 'o', 'p', 'I', 'n', 's', 't', 'r', 'u', 'm', 'e', 'n', 't', 's', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'F', 'r', 'a', 'm', 'e', 'Z', 'o', 'o', 'm', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'T', 'a', 'g', 'S', 'a', 'm', 'p', 'l', 'e', 'B', 'u', 'f', 'f', 'e', 'r', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'R', 'e', 'f', 'e', 'r', 'e', 'n', 'c', 'e', 'P', 'l', 'a', 'n', 'e', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'F', 'l', 'u', 's', 'h', 'R', 'a', 's', 't', 'e', 'r', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'G', 'e', 't', 'L', 'i', 's', 't', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'G', 'e', 't', 'L', 'i', 's', 't', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'v', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'L', 'i', 's', 't', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'L', 'i', 's', 't', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'L', 'i', 's', 't', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'L', 'i', 's', 't', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'v', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'F', 'r', 'a', 'g', 'm', 'e', 'n', 't', 'C', 'o', 'l', 'o', 'r', 'M', 'a', 't', 'e', 'r', 'i', 'a', 'l', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'F', 'r', 'a', 'g', 'm', 'e', 'n', 't', 'L', 'i', 'g', 'h', 't', 'f', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'F', 'r', 'a', 'g', 'm', 'e', 'n', 't', 'L', 'i', 'g', 'h', 't', 'f', 'v', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'F', 'r', 'a', 'g', 'm', 'e', 'n', 't', 'L', 'i', 'g', 'h', 't', 'i', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'F', 'r', 'a', 'g', 'm', 'e', 'n', 't', 'L', 'i', 'g', 'h', 't', 'i', 'v', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'F', 'r', 'a', 'g', 'm', 'e', 'n', 't', 'L', 'i', 'g', 'h', 't', 'M', 'o', 'd', 'e', 'l', 'f', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'F', 'r', 'a', 'g', 'm', 'e', 'n', 't', 'L', 'i', 'g', 'h', 't', 'M', 'o', 'd', 'e', 'l', 'f', 'v', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'F', 'r', 'a', 'g', 'm', 'e', 'n', 't', 'L', 'i', 'g', 'h', 't', 'M', 'o', 'd', 'e', 'l', 'i', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'F', 'r', 'a', 'g', 'm', 'e', 'n', 't', 'L', 'i', 'g', 'h', 't', 'M', 'o', 'd', 'e', 'l', 'i', 'v', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'F', 'r', 'a', 'g', 'm', 'e', 'n', 't', 'M', 'a', 't', 'e', 'r', 'i', 'a', 'l', 'f', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'F', 'r', 'a', 'g', 'm', 'e', 'n', 't', 'M', 'a', 't', 'e', 'r', 'i', 'a', 'l', 'f', 'v', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'F', 'r', 'a', 'g', 'm', 'e', 'n', 't', 'M', 'a', 't', 'e', 'r', 'i', 'a', 'l', 'i', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'F', 'r', 'a', 'g', 'm', 'e', 'n', 't', 'M', 'a', 't', 'e', 'r', 'i', 'a', 'l', 'i', 'v', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'G', 'e', 't', 'F', 'r', 'a', 'g', 'm', 'e', 'n', 't', 'L', 'i', 'g', 'h', 't', 'f', 'v', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'G', 'e', 't', 'F', 'r', 'a', 'g', 'm', 'e', 'n', 't', 'L', 'i', 'g', 'h', 't', 'i', 'v', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'G', 'e', 't', 'F', 'r', 'a', 'g', 'm', 'e', 'n', 't', 'M', 'a', 't', 'e', 'r', 'i', 'a', 'l', 'f', 'v', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'G', 'e', 't', 'F', 'r', 'a', 'g', 'm', 'e', 'n', 't', 'M', 'a', 't', 'e', 'r', 'i', 'a', 'l', 'i', 'v', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'L', 'i', 'g', 'h', 't', 'E', 'n', 'v', 'i', 'S', 'G', 'I', 'X', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'W', 'e', 'i', 'g', 'h', 't', 'f', 'E', 'X', 'T', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'W', 'e', 'i', 'g', 'h', 't', 'f', 'v', 'E', 'X', 'T', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'W', 'e', 'i', 'g', 'h', 't', 'P', 'o', 'i', 'n', 't', 'e', 'r', 'E', 'X', 'T', '\0',
+- 'g','l', 'F', 'l', 'u', 's', 'h', 'V', 'e', 'r', 't', 'e', 'x', 'A', 'r', 'r', 'a', 'y', 'R', 'a', 'n', 'g', 'e', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 'r', 'r', 'a', 'y', 'R', 'a', 'n', 'g', 'e', 'N', 'V', '\0',
+- 'g','l', 'C', 'o', 'm', 'b', 'i', 'n', 'e', 'r', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', 'N', 'V', '\0',
+- 'g','l', 'C', 'o', 'm', 'b', 'i', 'n', 'e', 'r', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'N', 'V', '\0',
+- 'g','l', 'C', 'o', 'm', 'b', 'i', 'n', 'e', 'r', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'v', 'N', 'V', '\0',
+- 'g','l', 'C', 'o', 'm', 'b', 'i', 'n', 'e', 'r', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'N', 'V', '\0',
+- 'g','l', 'C', 'o', 'm', 'b', 'i', 'n', 'e', 'r', 'I', 'n', 'p', 'u', 't', 'N', 'V', '\0',
+- 'g','l', 'C', 'o', 'm', 'b', 'i', 'n', 'e', 'r', 'O', 'u', 't', 'p', 'u', 't', 'N', 'V', '\0',
+- 'g','l', 'F', 'i', 'n', 'a', 'l', 'C', 'o', 'm', 'b', 'i', 'n', 'e', 'r', 'I', 'n', 'p', 'u', 't', 'N', 'V', '\0',
+- 'g','l', 'G', 'e', 't', 'C', 'o', 'm', 'b', 'i', 'n', 'e', 'r', 'I', 'n', 'p', 'u', 't', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', 'N', 'V', '\0',
+- 'g','l', 'G', 'e', 't', 'C', 'o', 'm', 'b', 'i', 'n', 'e', 'r', 'I', 'n', 'p', 'u', 't', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'v', 'N', 'V', '\0',
+- 'g','l', 'G', 'e', 't', 'C', 'o', 'm', 'b', 'i', 'n', 'e', 'r', 'O', 'u', 't', 'p', 'u', 't', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', 'N', 'V', '\0',
+- 'g','l', 'G', 'e', 't', 'C', 'o', 'm', 'b', 'i', 'n', 'e', 'r', 'O', 'u', 't', 'p', 'u', 't', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'v', 'N', 'V', '\0',
+- 'g','l', 'G', 'e', 't', 'F', 'i', 'n', 'a', 'l', 'C', 'o', 'm', 'b', 'i', 'n', 'e', 'r', 'I', 'n', 'p', 'u', 't', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', 'N', 'V', '\0',
+- 'g','l', 'G', 'e', 't', 'F', 'i', 'n', 'a', 'l', 'C', 'o', 'm', 'b', 'i', 'n', 'e', 'r', 'I', 'n', 'p', 'u', 't', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'v', 'N', 'V', '\0',
+- 'g','l', 'R', 'e', 's', 'i', 'z', 'e', 'B', 'u', 'f', 'f', 'e', 'r', 's', 'M', 'E', 'S', 'A', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '2', 'd', 'M', 'E', 'S', 'A', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '2', 'd', 'v', 'M', 'E', 'S', 'A', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '2', 'f', 'M', 'E', 'S', 'A', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '2', 'f', 'v', 'M', 'E', 'S', 'A', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '2', 'i', 'M', 'E', 'S', 'A', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '2', 'i', 'v', 'M', 'E', 'S', 'A', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '2', 's', 'M', 'E', 'S', 'A', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '2', 's', 'v', 'M', 'E', 'S', 'A', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '3', 'd', 'M', 'E', 'S', 'A', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '3', 'd', 'v', 'M', 'E', 'S', 'A', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '3', 'f', 'M', 'E', 'S', 'A', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '3', 'f', 'v', 'M', 'E', 'S', 'A', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '3', 'i', 'M', 'E', 'S', 'A', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '3', 'i', 'v', 'M', 'E', 'S', 'A', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '3', 's', 'M', 'E', 'S', 'A', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '3', 's', 'v', 'M', 'E', 'S', 'A', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '4', 'd', 'M', 'E', 'S', 'A', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '4', 'd', 'v', 'M', 'E', 'S', 'A', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '4', 'f', 'M', 'E', 'S', 'A', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '4', 'f', 'v', 'M', 'E', 'S', 'A', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '4', 'i', 'M', 'E', 'S', 'A', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '4', 'i', 'v', 'M', 'E', 'S', 'A', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '4', 's', 'M', 'E', 'S', 'A', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '4', 's', 'v', 'M', 'E', 'S', 'A', '\0',
+- 'g','l', 'B', 'l', 'e', 'n', 'd', 'F', 'u', 'n', 'c', 'S', 'e', 'p', 'a', 'r', 'a', 't', 'e', 'E', 'X', 'T', '\0',
+- 'g','l', 'I', 'n', 'd', 'e', 'x', 'M', 'a', 't', 'e', 'r', 'i', 'a', 'l', 'E', 'X', 'T', '\0',
+- 'g','l', 'I', 'n', 'd', 'e', 'x', 'F', 'u', 'n', 'c', 'E', 'X', 'T', '\0',
+- 'g','l', 'L', 'o', 'c', 'k', 'A', 'r', 'r', 'a', 'y', 's', 'E', 'X', 'T', '\0',
+- 'g','l', 'U', 'n', 'l', 'o', 'c', 'k', 'A', 'r', 'r', 'a', 'y', 's', 'E', 'X', 'T', '\0',
+- 'g','l', 'C', 'u', 'l', 'l', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'd', 'v', 'E', 'X', 'T', '\0',
+- 'g','l', 'C', 'u', 'l', 'l', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', 'E', 'X', 'T', '\0',
+- 'g','l', 'H', 'i', 'n', 't', 'P', 'G', 'I', '\0',
+- 'g','l', 'F', 'o', 'g', 'C', 'o', 'o', 'r', 'd', 'f', 'E', 'X', 'T', '\0',
+- 'g','l', 'F', 'o', 'g', 'C', 'o', 'o', 'r', 'd', 'f', 'v', 'E', 'X', 'T', '\0',
+- 'g','l', 'F', 'o', 'g', 'C', 'o', 'o', 'r', 'd', 'd', 'E', 'X', 'T', '\0',
+- 'g','l', 'F', 'o', 'g', 'C', 'o', 'o', 'r', 'd', 'd', 'v', 'E', 'X', 'T', '\0',
+- 'g','l', 'F', 'o', 'g', 'C', 'o', 'o', 'r', 'd', 'P', 'o', 'i', 'n', 't', 'e', 'r', 'E', 'X', 'T', '\0',
+- 'g','l', 'G', 'e', 't', 'C', 'o', 'l', 'o', 'r', 'T', 'a', 'b', 'l', 'e', 'E', 'X', 'T', '\0',
+- 'g','l', 'G', 'e', 't', 'C', 'o', 'l', 'o', 'r', 'T', 'a', 'b', 'l', 'e', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'v', 'E', 'X', 'T', '\0',
+- 'g','l', 'G', 'e', 't', 'C', 'o', 'l', 'o', 'r', 'T', 'a', 'b', 'l', 'e', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', 'E', 'X', 'T', '\0',
+- 'g','l', 'T', 'b', 'u', 'f', 'f', 'e', 'r', 'M', 'a', 's', 'k', '3', 'D', 'F', 'X', '\0',
+- 'g','l', 'C', 'o', 'm', 'p', 'r', 'e', 's', 's', 'e', 'd', 'T', 'e', 'x', 'I', 'm', 'a', 'g', 'e', '3', 'D', 'A', 'R', 'B', '\0',
+- 'g','l', 'C', 'o', 'm', 'p', 'r', 'e', 's', 's', 'e', 'd', 'T', 'e', 'x', 'I', 'm', 'a', 'g', 'e', '2', 'D', 'A', 'R', 'B', '\0',
+- 'g','l', 'C', 'o', 'm', 'p', 'r', 'e', 's', 's', 'e', 'd', 'T', 'e', 'x', 'I', 'm', 'a', 'g', 'e', '1', 'D', 'A', 'R', 'B', '\0',
+- 'g','l', 'C', 'o', 'm', 'p', 'r', 'e', 's', 's', 'e', 'd', 'T', 'e', 'x', 'S', 'u', 'b', 'I', 'm', 'a', 'g', 'e', '3', 'D', 'A', 'R', 'B', '\0',
+- 'g','l', 'C', 'o', 'm', 'p', 'r', 'e', 's', 's', 'e', 'd', 'T', 'e', 'x', 'S', 'u', 'b', 'I', 'm', 'a', 'g', 'e', '2', 'D', 'A', 'R', 'B', '\0',
+- 'g','l', 'C', 'o', 'm', 'p', 'r', 'e', 's', 's', 'e', 'd', 'T', 'e', 'x', 'S', 'u', 'b', 'I', 'm', 'a', 'g', 'e', '1', 'D', 'A', 'R', 'B', '\0',
+- 'g','l', 'G', 'e', 't', 'C', 'o', 'm', 'p', 'r', 'e', 's', 's', 'e', 'd', 'T', 'e', 'x', 'I', 'm', 'a', 'g', 'e', 'A', 'R', 'B', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 'b', 'E', 'X', 'T', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 'b', 'v', 'E', 'X', 'T', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 'd', 'E', 'X', 'T', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 'd', 'v', 'E', 'X', 'T', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 'f', 'E', 'X', 'T', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 'f', 'v', 'E', 'X', 'T', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 'i', 'E', 'X', 'T', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 'i', 'v', 'E', 'X', 'T', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 's', 'E', 'X', 'T', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 's', 'v', 'E', 'X', 'T', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 'u', 'b', 'E', 'X', 'T', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 'u', 'b', 'v', 'E', 'X', 'T', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 'u', 'i', 'E', 'X', 'T', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 'u', 'i', 'v', 'E', 'X', 'T', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 'u', 's', 'E', 'X', 'T', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 'u', 's', 'v', 'E', 'X', 'T', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', 'P', 'o', 'i', 'n', 't', 'e', 'r', 'E', 'X', 'T', '\0',
+- 'g','l', 'A', 'r', 'e', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 's', 'R', 'e', 's', 'i', 'd', 'e', 'n', 't', 'N', 'V', '\0',
+- 'g','l', 'B', 'i', 'n', 'd', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'N', 'V', '\0',
+- 'g','l', 'D', 'e', 'l', 'e', 't', 'e', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 's', 'N', 'V', '\0',
+- 'g','l', 'E', 'x', 'e', 'c', 'u', 't', 'e', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'N', 'V', '\0',
+- 'g','l', 'G', 'e', 'n', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 's', 'N', 'V', '\0',
+- 'g','l', 'G', 'e', 't', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'd', 'v', 'N', 'V', '\0',
+- 'g','l', 'G', 'e', 't', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', 'N', 'V', '\0',
+- 'g','l', 'G', 'e', 't', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'v', 'N', 'V', '\0',
+- 'g','l', 'G', 'e', 't', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'S', 't', 'r', 'i', 'n', 'g', 'N', 'V', '\0',
+- 'g','l', 'G', 'e', 't', 'T', 'r', 'a', 'c', 'k', 'M', 'a', 't', 'r', 'i', 'x', 'i', 'v', 'N', 'V', '\0',
+- 'g','l', 'G', 'e', 't', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', 'd', 'v', 'N', 'V', '\0',
+- 'g','l', 'G', 'e', 't', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', 'f', 'v', 'N', 'V', '\0',
+- 'g','l', 'G', 'e', 't', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', 'i', 'v', 'N', 'V', '\0',
+- 'g','l', 'G', 'e', 't', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', 'P', 'o', 'i', 'n', 't', 'e', 'r', 'v', 'N', 'V', '\0',
+- 'g','l', 'I', 's', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'N', 'V', '\0',
+- 'g','l', 'L', 'o', 'a', 'd', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'N', 'V', '\0',
+- 'g','l', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', '4', 'd', 'N', 'V', '\0',
+- 'g','l', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', '4', 'd', 'v', 'N', 'V', '\0',
+- 'g','l', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', '4', 'f', 'N', 'V', '\0',
+- 'g','l', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', '4', 'f', 'v', 'N', 'V', '\0',
+- 'g','l', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 's', '4', 'd', 'v', 'N', 'V', '\0',
+- 'g','l', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 's', '4', 'f', 'v', 'N', 'V', '\0',
+- 'g','l', 'R', 'e', 'q', 'u', 'e', 's', 't', 'R', 'e', 's', 'i', 'd', 'e', 'n', 't', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 's', 'N', 'V', '\0',
+- 'g','l', 'T', 'r', 'a', 'c', 'k', 'M', 'a', 't', 'r', 'i', 'x', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', 'P', 'o', 'i', 'n', 't', 'e', 'r', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '1', 'd', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '1', 'd', 'v', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '1', 'f', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '1', 'f', 'v', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '1', 's', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '1', 's', 'v', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '2', 'd', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '2', 'd', 'v', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '2', 'f', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '2', 'f', 'v', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '2', 's', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '2', 's', 'v', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '3', 'd', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '3', 'd', 'v', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '3', 'f', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '3', 'f', 'v', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '3', 's', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '3', 's', 'v', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '4', 'd', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '4', 'd', 'v', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '4', 'f', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '4', 'f', 'v', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '4', 's', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '4', 's', 'v', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '4', 'u', 'b', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '4', 'u', 'b', 'v', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', 's', '1', 'd', 'v', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', 's', '1', 'f', 'v', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', 's', '1', 's', 'v', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', 's', '2', 'd', 'v', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', 's', '2', 'f', 'v', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', 's', '2', 's', 'v', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', 's', '3', 'd', 'v', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', 's', '3', 'f', 'v', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', 's', '3', 's', 'v', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', 's', '4', 'd', 'v', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', 's', '4', 'f', 'v', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', 's', '4', 's', 'v', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', 's', '4', 'u', 'b', 'v', 'N', 'V', '\0',
+- 'g','l', 'P', 'o', 'i', 'n', 't', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'N', 'V', '\0',
+- 'g','l', 'P', 'o', 'i', 'n', 't', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'v', 'N', 'V', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'D', 'r', 'a', 'w', 'A', 'r', 'r', 'a', 'y', 's', 'E', 'X', 'T', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'D', 'r', 'a', 'w', 'E', 'l', 'e', 'm', 'e', 'n', 't', 's', 'E', 'X', 'T', '\0',
+- 'g','l', 'A', 'c', 't', 'i', 'v', 'e', 'S', 't', 'e', 'n', 'c', 'i', 'l', 'F', 'a', 'c', 'e', 'E', 'X', 'T', '\0',
+- 'g','l', 'D', 'e', 'l', 'e', 't', 'e', 'F', 'e', 'n', 'c', 'e', 's', 'N', 'V', '\0',
+- 'g','l', 'G', 'e', 'n', 'F', 'e', 'n', 'c', 'e', 's', 'N', 'V', '\0',
+- 'g','l', 'I', 's', 'F', 'e', 'n', 'c', 'e', 'N', 'V', '\0',
+- 'g','l', 'T', 'e', 's', 't', 'F', 'e', 'n', 'c', 'e', 'N', 'V', '\0',
+- 'g','l', 'G', 'e', 't', 'F', 'e', 'n', 'c', 'e', 'i', 'v', 'N', 'V', '\0',
+- 'g','l', 'F', 'i', 'n', 'i', 's', 'h', 'F', 'e', 'n', 'c', 'e', 'N', 'V', '\0',
+- 'g','l', 'S', 'e', 't', 'F', 'e', 'n', 'c', 'e', 'N', 'V', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '4', 'b', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '4', 'i', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '4', 'u', 'b', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '4', 'u', 's', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '4', 'u', 'i', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '4', 'N', 'b', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '4', 'N', 's', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '4', 'N', 'i', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '4', 'N', 'u', 's', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '4', 'N', 'u', 'i', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', 'P', 'o', 'i', 'n', 't', 'e', 'r', 'A', 'R', 'B', '\0',
+- 'g','l', 'E', 'n', 'a', 'b', 'l', 'e', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', 'A', 'r', 'r', 'a', 'y', 'A', 'R', 'B', '\0',
+- 'g','l', 'D', 'i', 's', 'a', 'b', 'l', 'e', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', 'A', 'r', 'r', 'a', 'y', 'A', 'R', 'B', '\0',
+- 'g','l', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'S', 't', 'r', 'i', 'n', 'g', 'A', 'R', 'B', '\0',
+- 'g','l', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'E', 'n', 'v', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', '4', 'd', 'A', 'R', 'B', '\0',
+- 'g','l', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'E', 'n', 'v', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', '4', 'd', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'E', 'n', 'v', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', '4', 'f', 'A', 'R', 'B', '\0',
+- 'g','l', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'E', 'n', 'v', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', '4', 'f', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'L', 'o', 'c', 'a', 'l', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', '4', 'd', 'A', 'R', 'B', '\0',
+- 'g','l', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'L', 'o', 'c', 'a', 'l', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', '4', 'd', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'L', 'o', 'c', 'a', 'l', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', '4', 'f', 'A', 'R', 'B', '\0',
+- 'g','l', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'L', 'o', 'c', 'a', 'l', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', '4', 'f', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'G', 'e', 't', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'E', 'n', 'v', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'd', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'G', 'e', 't', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'E', 'n', 'v', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'G', 'e', 't', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'L', 'o', 'c', 'a', 'l', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'd', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'G', 'e', 't', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'L', 'o', 'c', 'a', 'l', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'G', 'e', 't', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'G', 'e', 't', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'S', 't', 'r', 'i', 'n', 'g', 'A', 'R', 'B', '\0',
+- 'g','l', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'N', 'a', 'm', 'e', 'd', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', '4', 'f', 'N', 'V', '\0',
+- 'g','l', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'N', 'a', 'm', 'e', 'd', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', '4', 'd', 'N', 'V', '\0',
+- 'g','l', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'N', 'a', 'm', 'e', 'd', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', '4', 'f', 'v', 'N', 'V', '\0',
+- 'g','l', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'N', 'a', 'm', 'e', 'd', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', '4', 'd', 'v', 'N', 'V', '\0',
+- 'g','l', 'G', 'e', 't', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'N', 'a', 'm', 'e', 'd', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', 'N', 'V', '\0',
+- 'g','l', 'G', 'e', 't', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'N', 'a', 'm', 'e', 'd', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'd', 'v', 'N', 'V', '\0',
+- 'g','l', 'B', 'i', 'n', 'd', 'B', 'u', 'f', 'f', 'e', 'r', 'A', 'R', 'B', '\0',
+- 'g','l', 'B', 'u', 'f', 'f', 'e', 'r', 'D', 'a', 't', 'a', 'A', 'R', 'B', '\0',
+- 'g','l', 'B', 'u', 'f', 'f', 'e', 'r', 'S', 'u', 'b', 'D', 'a', 't', 'a', 'A', 'R', 'B', '\0',
+- 'g','l', 'D', 'e', 'l', 'e', 't', 'e', 'B', 'u', 'f', 'f', 'e', 'r', 's', 'A', 'R', 'B', '\0',
+- 'g','l', 'G', 'e', 'n', 'B', 'u', 'f', 'f', 'e', 'r', 's', 'A', 'R', 'B', '\0',
+- 'g','l', 'G', 'e', 't', 'B', 'u', 'f', 'f', 'e', 'r', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'G', 'e', 't', 'B', 'u', 'f', 'f', 'e', 'r', 'P', 'o', 'i', 'n', 't', 'e', 'r', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'G', 'e', 't', 'B', 'u', 'f', 'f', 'e', 'r', 'S', 'u', 'b', 'D', 'a', 't', 'a', 'A', 'R', 'B', '\0',
+- 'g','l', 'I', 's', 'B', 'u', 'f', 'f', 'e', 'r', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'a', 'p', 'B', 'u', 'f', 'f', 'e', 'r', 'A', 'R', 'B', '\0',
+- 'g','l', 'U', 'n', 'm', 'a', 'p', 'B', 'u', 'f', 'f', 'e', 'r', 'A', 'R', 'B', '\0',
+- 'g','l', 'D', 'e', 'p', 't', 'h', 'B', 'o', 'u', 'n', 'd', 's', 'E', 'X', 'T', '\0',
+- 'g','l', 'G', 'e', 'n', 'Q', 'u', 'e', 'r', 'i', 'e', 's', 'A', 'R', 'B', '\0',
+- 'g','l', 'D', 'e', 'l', 'e', 't', 'e', 'Q', 'u', 'e', 'r', 'i', 'e', 's', 'A', 'R', 'B', '\0',
+- 'g','l', 'I', 's', 'Q', 'u', 'e', 'r', 'y', 'A', 'R', 'B', '\0',
+- 'g','l', 'B', 'e', 'g', 'i', 'n', 'Q', 'u', 'e', 'r', 'y', 'A', 'R', 'B', '\0',
+- 'g','l', 'E', 'n', 'd', 'Q', 'u', 'e', 'r', 'y', 'A', 'R', 'B', '\0',
+- 'g','l', 'G', 'e', 't', 'Q', 'u', 'e', 'r', 'y', 'i', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'G', 'e', 't', 'Q', 'u', 'e', 'r', 'y', 'O', 'b', 'j', 'e', 'c', 't', 'i', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'G', 'e', 't', 'Q', 'u', 'e', 'r', 'y', 'O', 'b', 'j', 'e', 'c', 't', 'u', 'i', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'M', 'o', 'd', 'e', 'D', 'r', 'a', 'w', 'A', 'r', 'r', 'a', 'y', 's', 'I', 'B', 'M', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'M', 'o', 'd', 'e', 'D', 'r', 'a', 'w', 'E', 'l', 'e', 'm', 'e', 'n', 't', 's', 'I', 'B', 'M', '\0',
+- 'g','l', 'B', 'l', 'e', 'n', 'd', 'E', 'q', 'u', 'a', 't', 'i', 'o', 'n', 'S', 'e', 'p', 'a', 'r', 'a', 't', 'e', 'E', 'X', 'T', '\0',
+- 'g','l', 'A', 'c', 't', 'i', 'v', 'e', 'T', 'e', 'x', 't', 'u', 'r', 'e', '\0',
+- 'g','l', 'C', 'l', 'i', 'e', 'n', 't', 'A', 'c', 't', 'i', 'v', 'e', 'T', 'e', 'x', 't', 'u', 'r', 'e', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '1', 'd', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '1', 'd', 'v', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '1', 'f', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '1', 'f', 'v', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '1', 'i', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '1', 'i', 'v', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '1', 's', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '1', 's', 'v', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '2', 'd', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '2', 'd', 'v', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '2', 'f', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '2', 'f', 'v', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '2', 'i', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '2', 'i', 'v', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '2', 's', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '2', 's', 'v', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '3', 'd', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '3', 'd', 'v', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '3', 'f', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '3', 'f', 'v', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '3', 'i', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '3', 'i', 'v', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '3', 's', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '3', 's', 'v', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '4', 'd', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '4', 'd', 'v', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '4', 'f', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '4', 'f', 'v', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '4', 'i', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '4', 'i', 'v', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '4', 's', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'T', 'e', 'x', 'C', 'o', 'o', 'r', 'd', '4', 's', 'v', '\0',
+- 'g','l', 'L', 'o', 'a', 'd', 'T', 'r', 'a', 'n', 's', 'p', 'o', 's', 'e', 'M', 'a', 't', 'r', 'i', 'x', 'f', '\0',
+- 'g','l', 'L', 'o', 'a', 'd', 'T', 'r', 'a', 'n', 's', 'p', 'o', 's', 'e', 'M', 'a', 't', 'r', 'i', 'x', 'd', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'T', 'r', 'a', 'n', 's', 'p', 'o', 's', 'e', 'M', 'a', 't', 'r', 'i', 'x', 'f', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'T', 'r', 'a', 'n', 's', 'p', 'o', 's', 'e', 'M', 'a', 't', 'r', 'i', 'x', 'd', '\0',
+- 'g','l', 'S', 'a', 'm', 'p', 'l', 'e', 'C', 'o', 'v', 'e', 'r', 'a', 'g', 'e', '\0',
+- 'g','l', 'C', 'o', 'm', 'p', 'r', 'e', 's', 's', 'e', 'd', 'T', 'e', 'x', 'I', 'm', 'a', 'g', 'e', '3', 'D', '\0',
+- 'g','l', 'C', 'o', 'm', 'p', 'r', 'e', 's', 's', 'e', 'd', 'T', 'e', 'x', 'I', 'm', 'a', 'g', 'e', '2', 'D', '\0',
+- 'g','l', 'C', 'o', 'm', 'p', 'r', 'e', 's', 's', 'e', 'd', 'T', 'e', 'x', 'I', 'm', 'a', 'g', 'e', '1', 'D', '\0',
+- 'g','l', 'C', 'o', 'm', 'p', 'r', 'e', 's', 's', 'e', 'd', 'T', 'e', 'x', 'S', 'u', 'b', 'I', 'm', 'a', 'g', 'e', '3', 'D', '\0',
+- 'g','l', 'C', 'o', 'm', 'p', 'r', 'e', 's', 's', 'e', 'd', 'T', 'e', 'x', 'S', 'u', 'b', 'I', 'm', 'a', 'g', 'e', '2', 'D', '\0',
+- 'g','l', 'C', 'o', 'm', 'p', 'r', 'e', 's', 's', 'e', 'd', 'T', 'e', 'x', 'S', 'u', 'b', 'I', 'm', 'a', 'g', 'e', '1', 'D', '\0',
+- 'g','l', 'G', 'e', 't', 'C', 'o', 'm', 'p', 'r', 'e', 's', 's', 'e', 'd', 'T', 'e', 'x', 'I', 'm', 'a', 'g', 'e', '\0',
+- 'g','l', 'B', 'l', 'e', 'n', 'd', 'F', 'u', 'n', 'c', 'S', 'e', 'p', 'a', 'r', 'a', 't', 'e', '\0',
+- 'g','l', 'F', 'o', 'g', 'C', 'o', 'o', 'r', 'd', 'f', '\0',
+- 'g','l', 'F', 'o', 'g', 'C', 'o', 'o', 'r', 'd', 'f', 'v', '\0',
+- 'g','l', 'F', 'o', 'g', 'C', 'o', 'o', 'r', 'd', 'd', '\0',
+- 'g','l', 'F', 'o', 'g', 'C', 'o', 'o', 'r', 'd', 'd', 'v', '\0',
+- 'g','l', 'F', 'o', 'g', 'C', 'o', 'o', 'r', 'd', 'P', 'o', 'i', 'n', 't', 'e', 'r', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'D', 'r', 'a', 'w', 'A', 'r', 'r', 'a', 'y', 's', '\0',
+- 'g','l', 'M', 'u', 'l', 't', 'i', 'D', 'r', 'a', 'w', 'E', 'l', 'e', 'm', 'e', 'n', 't', 's', '\0',
+- 'g','l', 'P', 'o', 'i', 'n', 't', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', '\0',
+- 'g','l', 'P', 'o', 'i', 'n', 't', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', '\0',
+- 'g','l', 'P', 'o', 'i', 'n', 't', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', '\0',
+- 'g','l', 'P', 'o', 'i', 'n', 't', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'v', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 'b', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 'b', 'v', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 'd', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 'd', 'v', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 'f', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 'f', 'v', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 'i', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 'i', 'v', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 's', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 's', 'v', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 'u', 'b', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 'u', 'b', 'v', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 'u', 'i', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 'u', 'i', 'v', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 'u', 's', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', '3', 'u', 's', 'v', '\0',
+- 'g','l', 'S', 'e', 'c', 'o', 'n', 'd', 'a', 'r', 'y', 'C', 'o', 'l', 'o', 'r', 'P', 'o', 'i', 'n', 't', 'e', 'r', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '2', 'd', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '2', 'd', 'v', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '2', 'f', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '2', 'f', 'v', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '2', 'i', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '2', 'i', 'v', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '2', 's', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '2', 's', 'v', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '3', 'd', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '3', 'd', 'v', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '3', 'f', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '3', 'f', 'v', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '3', 'i', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '3', 'i', 'v', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '3', 's', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '3', 's', 'v', '\0',
+- 'g','l', 'B', 'i', 'n', 'd', 'B', 'u', 'f', 'f', 'e', 'r', '\0',
+- 'g','l', 'B', 'u', 'f', 'f', 'e', 'r', 'D', 'a', 't', 'a', '\0',
+- 'g','l', 'B', 'u', 'f', 'f', 'e', 'r', 'S', 'u', 'b', 'D', 'a', 't', 'a', '\0',
+- 'g','l', 'D', 'e', 'l', 'e', 't', 'e', 'B', 'u', 'f', 'f', 'e', 'r', 's', '\0',
+- 'g','l', 'G', 'e', 'n', 'B', 'u', 'f', 'f', 'e', 'r', 's', '\0',
+- 'g','l', 'G', 'e', 't', 'B', 'u', 'f', 'f', 'e', 'r', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'B', 'u', 'f', 'f', 'e', 'r', 'P', 'o', 'i', 'n', 't', 'e', 'r', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'B', 'u', 'f', 'f', 'e', 'r', 'S', 'u', 'b', 'D', 'a', 't', 'a', '\0',
+- 'g','l', 'I', 's', 'B', 'u', 'f', 'f', 'e', 'r', '\0',
+- 'g','l', 'M', 'a', 'p', 'B', 'u', 'f', 'f', 'e', 'r', '\0',
+- 'g','l', 'U', 'n', 'm', 'a', 'p', 'B', 'u', 'f', 'f', 'e', 'r', '\0',
+- 'g','l', 'G', 'e', 'n', 'Q', 'u', 'e', 'r', 'i', 'e', 's', '\0',
+- 'g','l', 'D', 'e', 'l', 'e', 't', 'e', 'Q', 'u', 'e', 'r', 'i', 'e', 's', '\0',
+- 'g','l', 'I', 's', 'Q', 'u', 'e', 'r', 'y', '\0',
+- 'g','l', 'B', 'e', 'g', 'i', 'n', 'Q', 'u', 'e', 'r', 'y', '\0',
+- 'g','l', 'E', 'n', 'd', 'Q', 'u', 'e', 'r', 'y', '\0',
+- 'g','l', 'G', 'e', 't', 'Q', 'u', 'e', 'r', 'y', 'i', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'Q', 'u', 'e', 'r', 'y', 'O', 'b', 'j', 'e', 'c', 't', 'i', 'v', '\0',
+- 'g','l', 'G', 'e', 't', 'Q', 'u', 'e', 'r', 'y', 'O', 'b', 'j', 'e', 'c', 't', 'u', 'i', 'v', '\0',
+- 'g','l', 'P', 'o', 'i', 'n', 't', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'A', 'R', 'B', '\0',
+- 'g','l', 'P', 'o', 'i', 'n', 't', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '2', 'd', 'A', 'R', 'B', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '2', 'f', 'A', 'R', 'B', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '2', 'i', 'A', 'R', 'B', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '2', 's', 'A', 'R', 'B', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '2', 'd', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '2', 'f', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '2', 'i', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '2', 's', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '3', 'd', 'A', 'R', 'B', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '3', 'f', 'A', 'R', 'B', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '3', 'i', 'A', 'R', 'B', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '3', 's', 'A', 'R', 'B', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '3', 'd', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '3', 'f', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '3', 'i', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'W', 'i', 'n', 'd', 'o', 'w', 'P', 'o', 's', '3', 's', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '1', 's', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '1', 'f', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '1', 'd', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '2', 's', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '2', 'f', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '2', 'd', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '3', 's', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '3', 'f', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '3', 'd', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '4', 's', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '4', 'f', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '4', 'd', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '4', 'N', 'u', 'b', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '1', 's', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '1', 'f', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '1', 'd', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '2', 's', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '2', 'f', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '2', 'd', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '3', 's', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '3', 'f', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '3', 'd', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '4', 's', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '4', 'f', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '4', 'd', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', '4', 'N', 'u', 'b', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'B', 'i', 'n', 'd', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'A', 'R', 'B', '\0',
+- 'g','l', 'D', 'e', 'l', 'e', 't', 'e', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 's', 'A', 'R', 'B', '\0',
+- 'g','l', 'G', 'e', 'n', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 's', 'A', 'R', 'B', '\0',
+- 'g','l', 'I', 's', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'A', 'R', 'B', '\0',
+- 'g','l', 'G', 'e', 't', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', 'd', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'G', 'e', 't', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', 'f', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'G', 'e', 't', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', 'i', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'G', 'e', 't', 'V', 'e', 'r', 't', 'e', 'x', 'A', 't', 't', 'r', 'i', 'b', 'P', 'o', 'i', 'n', 't', 'e', 'r', 'v', 'A', 'R', 'B', '\0',
+- 'g','l', 'B', 'l', 'e', 'n', 'd', 'C', 'o', 'l', 'o', 'r', 'E', 'X', 'T', '\0',
+- 'g','l', 'T', 'e', 'x', 'I', 'm', 'a', 'g', 'e', '3', 'D', 'E', 'X', 'T', '\0',
+- 'g','l', 'T', 'e', 'x', 'S', 'u', 'b', 'I', 'm', 'a', 'g', 'e', '3', 'D', 'E', 'X', 'T', '\0',
+- 'g','l', 'T', 'e', 'x', 'S', 'u', 'b', 'I', 'm', 'a', 'g', 'e', '1', 'D', 'E', 'X', 'T', '\0',
+- 'g','l', 'T', 'e', 'x', 'S', 'u', 'b', 'I', 'm', 'a', 'g', 'e', '2', 'D', 'E', 'X', 'T', '\0',
+- 'g','l', 'C', 'o', 'p', 'y', 'T', 'e', 'x', 'I', 'm', 'a', 'g', 'e', '1', 'D', 'E', 'X', 'T', '\0',
+- 'g','l', 'C', 'o', 'p', 'y', 'T', 'e', 'x', 'I', 'm', 'a', 'g', 'e', '2', 'D', 'E', 'X', 'T', '\0',
+- 'g','l', 'C', 'o', 'p', 'y', 'T', 'e', 'x', 'S', 'u', 'b', 'I', 'm', 'a', 'g', 'e', '1', 'D', 'E', 'X', 'T', '\0',
+- 'g','l', 'C', 'o', 'p', 'y', 'T', 'e', 'x', 'S', 'u', 'b', 'I', 'm', 'a', 'g', 'e', '2', 'D', 'E', 'X', 'T', '\0',
+- 'g','l', 'C', 'o', 'p', 'y', 'T', 'e', 'x', 'S', 'u', 'b', 'I', 'm', 'a', 'g', 'e', '3', 'D', 'E', 'X', 'T', '\0',
+- 'g','l', 'H', 'i', 's', 't', 'o', 'g', 'r', 'a', 'm', 'E', 'X', 'T', '\0',
+- 'g','l', 'M', 'i', 'n', 'm', 'a', 'x', 'E', 'X', 'T', '\0',
+- 'g','l', 'R', 'e', 's', 'e', 't', 'H', 'i', 's', 't', 'o', 'g', 'r', 'a', 'm', 'E', 'X', 'T', '\0',
+- 'g','l', 'R', 'e', 's', 'e', 't', 'M', 'i', 'n', 'm', 'a', 'x', 'E', 'X', 'T', '\0',
+- 'g','l', 'C', 'o', 'n', 'v', 'o', 'l', 'u', 't', 'i', 'o', 'n', 'F', 'i', 'l', 't', 'e', 'r', '1', 'D', 'E', 'X', 'T', '\0',
+- 'g','l', 'C', 'o', 'n', 'v', 'o', 'l', 'u', 't', 'i', 'o', 'n', 'F', 'i', 'l', 't', 'e', 'r', '2', 'D', 'E', 'X', 'T', '\0',
+- 'g','l', 'C', 'o', 'n', 'v', 'o', 'l', 'u', 't', 'i', 'o', 'n', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'E', 'X', 'T', '\0',
+- 'g','l', 'C', 'o', 'n', 'v', 'o', 'l', 'u', 't', 'i', 'o', 'n', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', 'E', 'X', 'T', '\0',
+- 'g','l', 'C', 'o', 'n', 'v', 'o', 'l', 'u', 't', 'i', 'o', 'n', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'E', 'X', 'T', '\0',
+- 'g','l', 'C', 'o', 'n', 'v', 'o', 'l', 'u', 't', 'i', 'o', 'n', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'v', 'E', 'X', 'T', '\0',
+- 'g','l', 'C', 'o', 'p', 'y', 'C', 'o', 'n', 'v', 'o', 'l', 'u', 't', 'i', 'o', 'n', 'F', 'i', 'l', 't', 'e', 'r', '1', 'D', 'E', 'X', 'T', '\0',
+- 'g','l', 'C', 'o', 'p', 'y', 'C', 'o', 'n', 'v', 'o', 'l', 'u', 't', 'i', 'o', 'n', 'F', 'i', 'l', 't', 'e', 'r', '2', 'D', 'E', 'X', 'T', '\0',
+- 'g','l', 'S', 'e', 'p', 'a', 'r', 'a', 'b', 'l', 'e', 'F', 'i', 'l', 't', 'e', 'r', '2', 'D', 'E', 'X', 'T', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', 'T', 'a', 'b', 'l', 'e', 'S', 'G', 'I', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', 'T', 'a', 'b', 'l', 'e', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', 'S', 'G', 'I', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', 'T', 'a', 'b', 'l', 'e', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'i', 'v', 'S', 'G', 'I', '\0',
+- 'g','l', 'C', 'o', 'p', 'y', 'C', 'o', 'l', 'o', 'r', 'T', 'a', 'b', 'l', 'e', 'S', 'G', 'I', '\0',
+- 'g','l', 'B', 'i', 'n', 'd', 'T', 'e', 'x', 't', 'u', 'r', 'e', 'E', 'X', 'T', '\0',
+- 'g','l', 'D', 'e', 'l', 'e', 't', 'e', 'T', 'e', 'x', 't', 'u', 'r', 'e', 's', 'E', 'X', 'T', '\0',
+- 'g','l', 'P', 'r', 'i', 'o', 'r', 'i', 't', 'i', 'z', 'e', 'T', 'e', 'x', 't', 'u', 'r', 'e', 's', 'E', 'X', 'T', '\0',
+- 'g','l', 'A', 'r', 'r', 'a', 'y', 'E', 'l', 'e', 'm', 'e', 'n', 't', 'E', 'X', 'T', '\0',
+- 'g','l', 'D', 'r', 'a', 'w', 'A', 'r', 'r', 'a', 'y', 's', 'E', 'X', 'T', '\0',
+- 'g','l', 'G', 'e', 't', 'P', 'o', 'i', 'n', 't', 'e', 'r', 'v', 'E', 'X', 'T', '\0',
+- 'g','l', 'B', 'l', 'e', 'n', 'd', 'E', 'q', 'u', 'a', 't', 'i', 'o', 'n', 'E', 'X', 'T', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', 'S', 'u', 'b', 'T', 'a', 'b', 'l', 'e', 'E', 'X', 'T', '\0',
+- 'g','l', 'C', 'o', 'p', 'y', 'C', 'o', 'l', 'o', 'r', 'S', 'u', 'b', 'T', 'a', 'b', 'l', 'e', 'E', 'X', 'T', '\0',
+- 'g','l', 'C', 'o', 'l', 'o', 'r', 'T', 'a', 'b', 'l', 'e', 'E', 'X', 'T', '\0',
+- 'g','l', 'D', 'r', 'a', 'w', 'R', 'a', 'n', 'g', 'e', 'E', 'l', 'e', 'm', 'e', 'n', 't', 's', 'E', 'X', 'T', '\0',
+- 'g','l', 'S', 'a', 'm', 'p', 'l', 'e', 'M', 'a', 's', 'k', 'E', 'X', 'T', '\0',
+- 'g','l', 'S', 'a', 'm', 'p', 'l', 'e', 'P', 'a', 't', 't', 'e', 'r', 'n', 'E', 'X', 'T', '\0',
+- 'g','l', 'B', 'l', 'e', 'n', 'd', 'E', 'q', 'u', 'a', 't', 'i', 'o', 'n', 'S', 'e', 'p', 'a', 'r', 'a', 't', 'e', 'A', 'T', 'I', '\0',
+- 'g','l', 'B', 'l', 'e', 'n', 'd', 'F', 'u', 'n', 'c', 'S', 'e', 'p', 'a', 'r', 'a', 't', 'e', 'I', 'N', 'G', 'R', '\0',
+- 'g','l', 'P', 'o', 'i', 'n', 't', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'S', 'G', 'I', 'S', '\0',
+- 'g','l', 'P', 'o', 'i', 'n', 't', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'f', 'v', 'S', 'G', 'I', 'S', '\0',
+-};
++static const char gl_string_table[] =
++ "glNewList\0"
++ "glEndList\0"
++ "glCallList\0"
++ "glCallLists\0"
++ "glDeleteLists\0"
++ "glGenLists\0"
++ "glListBase\0"
++ "glBegin\0"
++ "glBitmap\0"
++ "glColor3b\0"
++ "glColor3bv\0"
++ "glColor3d\0"
++ "glColor3dv\0"
++ "glColor3f\0"
++ "glColor3fv\0"
++ "glColor3i\0"
++ "glColor3iv\0"
++ "glColor3s\0"
++ "glColor3sv\0"
++ "glColor3ub\0"
++ "glColor3ubv\0"
++ "glColor3ui\0"
++ "glColor3uiv\0"
++ "glColor3us\0"
++ "glColor3usv\0"
++ "glColor4b\0"
++ "glColor4bv\0"
++ "glColor4d\0"
++ "glColor4dv\0"
++ "glColor4f\0"
++ "glColor4fv\0"
++ "glColor4i\0"
++ "glColor4iv\0"
++ "glColor4s\0"
++ "glColor4sv\0"
++ "glColor4ub\0"
++ "glColor4ubv\0"
++ "glColor4ui\0"
++ "glColor4uiv\0"
++ "glColor4us\0"
++ "glColor4usv\0"
++ "glEdgeFlag\0"
++ "glEdgeFlagv\0"
++ "glEnd\0"
++ "glIndexd\0"
++ "glIndexdv\0"
++ "glIndexf\0"
++ "glIndexfv\0"
++ "glIndexi\0"
++ "glIndexiv\0"
++ "glIndexs\0"
++ "glIndexsv\0"
++ "glNormal3b\0"
++ "glNormal3bv\0"
++ "glNormal3d\0"
++ "glNormal3dv\0"
++ "glNormal3f\0"
++ "glNormal3fv\0"
++ "glNormal3i\0"
++ "glNormal3iv\0"
++ "glNormal3s\0"
++ "glNormal3sv\0"
++ "glRasterPos2d\0"
++ "glRasterPos2dv\0"
++ "glRasterPos2f\0"
++ "glRasterPos2fv\0"
++ "glRasterPos2i\0"
++ "glRasterPos2iv\0"
++ "glRasterPos2s\0"
++ "glRasterPos2sv\0"
++ "glRasterPos3d\0"
++ "glRasterPos3dv\0"
++ "glRasterPos3f\0"
++ "glRasterPos3fv\0"
++ "glRasterPos3i\0"
++ "glRasterPos3iv\0"
++ "glRasterPos3s\0"
++ "glRasterPos3sv\0"
++ "glRasterPos4d\0"
++ "glRasterPos4dv\0"
++ "glRasterPos4f\0"
++ "glRasterPos4fv\0"
++ "glRasterPos4i\0"
++ "glRasterPos4iv\0"
++ "glRasterPos4s\0"
++ "glRasterPos4sv\0"
++ "glRectd\0"
++ "glRectdv\0"
++ "glRectf\0"
++ "glRectfv\0"
++ "glRecti\0"
++ "glRectiv\0"
++ "glRects\0"
++ "glRectsv\0"
++ "glTexCoord1d\0"
++ "glTexCoord1dv\0"
++ "glTexCoord1f\0"
++ "glTexCoord1fv\0"
++ "glTexCoord1i\0"
++ "glTexCoord1iv\0"
++ "glTexCoord1s\0"
++ "glTexCoord1sv\0"
++ "glTexCoord2d\0"
++ "glTexCoord2dv\0"
++ "glTexCoord2f\0"
++ "glTexCoord2fv\0"
++ "glTexCoord2i\0"
++ "glTexCoord2iv\0"
++ "glTexCoord2s\0"
++ "glTexCoord2sv\0"
++ "glTexCoord3d\0"
++ "glTexCoord3dv\0"
++ "glTexCoord3f\0"
++ "glTexCoord3fv\0"
++ "glTexCoord3i\0"
++ "glTexCoord3iv\0"
++ "glTexCoord3s\0"
++ "glTexCoord3sv\0"
++ "glTexCoord4d\0"
++ "glTexCoord4dv\0"
++ "glTexCoord4f\0"
++ "glTexCoord4fv\0"
++ "glTexCoord4i\0"
++ "glTexCoord4iv\0"
++ "glTexCoord4s\0"
++ "glTexCoord4sv\0"
++ "glVertex2d\0"
++ "glVertex2dv\0"
++ "glVertex2f\0"
++ "glVertex2fv\0"
++ "glVertex2i\0"
++ "glVertex2iv\0"
++ "glVertex2s\0"
++ "glVertex2sv\0"
++ "glVertex3d\0"
++ "glVertex3dv\0"
++ "glVertex3f\0"
++ "glVertex3fv\0"
++ "glVertex3i\0"
++ "glVertex3iv\0"
++ "glVertex3s\0"
++ "glVertex3sv\0"
++ "glVertex4d\0"
++ "glVertex4dv\0"
++ "glVertex4f\0"
++ "glVertex4fv\0"
++ "glVertex4i\0"
++ "glVertex4iv\0"
++ "glVertex4s\0"
++ "glVertex4sv\0"
++ "glClipPlane\0"
++ "glColorMaterial\0"
++ "glCullFace\0"
++ "glFogf\0"
++ "glFogfv\0"
++ "glFogi\0"
++ "glFogiv\0"
++ "glFrontFace\0"
++ "glHint\0"
++ "glLightf\0"
++ "glLightfv\0"
++ "glLighti\0"
++ "glLightiv\0"
++ "glLightModelf\0"
++ "glLightModelfv\0"
++ "glLightModeli\0"
++ "glLightModeliv\0"
++ "glLineStipple\0"
++ "glLineWidth\0"
++ "glMaterialf\0"
++ "glMaterialfv\0"
++ "glMateriali\0"
++ "glMaterialiv\0"
++ "glPointSize\0"
++ "glPolygonMode\0"
++ "glPolygonStipple\0"
++ "glScissor\0"
++ "glShadeModel\0"
++ "glTexParameterf\0"
++ "glTexParameterfv\0"
++ "glTexParameteri\0"
++ "glTexParameteriv\0"
++ "glTexImage1D\0"
++ "glTexImage2D\0"
++ "glTexEnvf\0"
++ "glTexEnvfv\0"
++ "glTexEnvi\0"
++ "glTexEnviv\0"
++ "glTexGend\0"
++ "glTexGendv\0"
++ "glTexGenf\0"
++ "glTexGenfv\0"
++ "glTexGeni\0"
++ "glTexGeniv\0"
++ "glFeedbackBuffer\0"
++ "glSelectBuffer\0"
++ "glRenderMode\0"
++ "glInitNames\0"
++ "glLoadName\0"
++ "glPassThrough\0"
++ "glPopName\0"
++ "glPushName\0"
++ "glDrawBuffer\0"
++ "glClear\0"
++ "glClearAccum\0"
++ "glClearIndex\0"
++ "glClearColor\0"
++ "glClearStencil\0"
++ "glClearDepth\0"
++ "glStencilMask\0"
++ "glColorMask\0"
++ "glDepthMask\0"
++ "glIndexMask\0"
++ "glAccum\0"
++ "glDisable\0"
++ "glEnable\0"
++ "glFinish\0"
++ "glFlush\0"
++ "glPopAttrib\0"
++ "glPushAttrib\0"
++ "glMap1d\0"
++ "glMap1f\0"
++ "glMap2d\0"
++ "glMap2f\0"
++ "glMapGrid1d\0"
++ "glMapGrid1f\0"
++ "glMapGrid2d\0"
++ "glMapGrid2f\0"
++ "glEvalCoord1d\0"
++ "glEvalCoord1dv\0"
++ "glEvalCoord1f\0"
++ "glEvalCoord1fv\0"
++ "glEvalCoord2d\0"
++ "glEvalCoord2dv\0"
++ "glEvalCoord2f\0"
++ "glEvalCoord2fv\0"
++ "glEvalMesh1\0"
++ "glEvalPoint1\0"
++ "glEvalMesh2\0"
++ "glEvalPoint2\0"
++ "glAlphaFunc\0"
++ "glBlendFunc\0"
++ "glLogicOp\0"
++ "glStencilFunc\0"
++ "glStencilOp\0"
++ "glDepthFunc\0"
++ "glPixelZoom\0"
++ "glPixelTransferf\0"
++ "glPixelTransferi\0"
++ "glPixelStoref\0"
++ "glPixelStorei\0"
++ "glPixelMapfv\0"
++ "glPixelMapuiv\0"
++ "glPixelMapusv\0"
++ "glReadBuffer\0"
++ "glCopyPixels\0"
++ "glReadPixels\0"
++ "glDrawPixels\0"
++ "glGetBooleanv\0"
++ "glGetClipPlane\0"
++ "glGetDoublev\0"
++ "glGetError\0"
++ "glGetFloatv\0"
++ "glGetIntegerv\0"
++ "glGetLightfv\0"
++ "glGetLightiv\0"
++ "glGetMapdv\0"
++ "glGetMapfv\0"
++ "glGetMapiv\0"
++ "glGetMaterialfv\0"
++ "glGetMaterialiv\0"
++ "glGetPixelMapfv\0"
++ "glGetPixelMapuiv\0"
++ "glGetPixelMapusv\0"
++ "glGetPolygonStipple\0"
++ "glGetString\0"
++ "glGetTexEnvfv\0"
++ "glGetTexEnviv\0"
++ "glGetTexGendv\0"
++ "glGetTexGenfv\0"
++ "glGetTexGeniv\0"
++ "glGetTexImage\0"
++ "glGetTexParameterfv\0"
++ "glGetTexParameteriv\0"
++ "glGetTexLevelParameterfv\0"
++ "glGetTexLevelParameteriv\0"
++ "glIsEnabled\0"
++ "glIsList\0"
++ "glDepthRange\0"
++ "glFrustum\0"
++ "glLoadIdentity\0"
++ "glLoadMatrixf\0"
++ "glLoadMatrixd\0"
++ "glMatrixMode\0"
++ "glMultMatrixf\0"
++ "glMultMatrixd\0"
++ "glOrtho\0"
++ "glPopMatrix\0"
++ "glPushMatrix\0"
++ "glRotated\0"
++ "glRotatef\0"
++ "glScaled\0"
++ "glScalef\0"
++ "glTranslated\0"
++ "glTranslatef\0"
++ "glViewport\0"
++ "glArrayElement\0"
++ "glBindTexture\0"
++ "glColorPointer\0"
++ "glDisableClientState\0"
++ "glDrawArrays\0"
++ "glDrawElements\0"
++ "glEdgeFlagPointer\0"
++ "glEnableClientState\0"
++ "glIndexPointer\0"
++ "glIndexub\0"
++ "glIndexubv\0"
++ "glInterleavedArrays\0"
++ "glNormalPointer\0"
++ "glPolygonOffset\0"
++ "glTexCoordPointer\0"
++ "glVertexPointer\0"
++ "glAreTexturesResident\0"
++ "glCopyTexImage1D\0"
++ "glCopyTexImage2D\0"
++ "glCopyTexSubImage1D\0"
++ "glCopyTexSubImage2D\0"
++ "glDeleteTextures\0"
++ "glGenTextures\0"
++ "glGetPointerv\0"
++ "glIsTexture\0"
++ "glPrioritizeTextures\0"
++ "glTexSubImage1D\0"
++ "glTexSubImage2D\0"
++ "glPopClientAttrib\0"
++ "glPushClientAttrib\0"
++ "glBlendColor\0"
++ "glBlendEquation\0"
++ "glDrawRangeElements\0"
++ "glColorTable\0"
++ "glColorTableParameterfv\0"
++ "glColorTableParameteriv\0"
++ "glCopyColorTable\0"
++ "glGetColorTable\0"
++ "glGetColorTableParameterfv\0"
++ "glGetColorTableParameteriv\0"
++ "glColorSubTable\0"
++ "glCopyColorSubTable\0"
++ "glConvolutionFilter1D\0"
++ "glConvolutionFilter2D\0"
++ "glConvolutionParameterf\0"
++ "glConvolutionParameterfv\0"
++ "glConvolutionParameteri\0"
++ "glConvolutionParameteriv\0"
++ "glCopyConvolutionFilter1D\0"
++ "glCopyConvolutionFilter2D\0"
++ "glGetConvolutionFilter\0"
++ "glGetConvolutionParameterfv\0"
++ "glGetConvolutionParameteriv\0"
++ "glGetSeparableFilter\0"
++ "glSeparableFilter2D\0"
++ "glGetHistogram\0"
++ "glGetHistogramParameterfv\0"
++ "glGetHistogramParameteriv\0"
++ "glGetMinmax\0"
++ "glGetMinmaxParameterfv\0"
++ "glGetMinmaxParameteriv\0"
++ "glHistogram\0"
++ "glMinmax\0"
++ "glResetHistogram\0"
++ "glResetMinmax\0"
++ "glTexImage3D\0"
++ "glTexSubImage3D\0"
++ "glCopyTexSubImage3D\0"
++ "glActiveTextureARB\0"
++ "glClientActiveTextureARB\0"
++ "glMultiTexCoord1dARB\0"
++ "glMultiTexCoord1dvARB\0"
++ "glMultiTexCoord1fARB\0"
++ "glMultiTexCoord1fvARB\0"
++ "glMultiTexCoord1iARB\0"
++ "glMultiTexCoord1ivARB\0"
++ "glMultiTexCoord1sARB\0"
++ "glMultiTexCoord1svARB\0"
++ "glMultiTexCoord2dARB\0"
++ "glMultiTexCoord2dvARB\0"
++ "glMultiTexCoord2fARB\0"
++ "glMultiTexCoord2fvARB\0"
++ "glMultiTexCoord2iARB\0"
++ "glMultiTexCoord2ivARB\0"
++ "glMultiTexCoord2sARB\0"
++ "glMultiTexCoord2svARB\0"
++ "glMultiTexCoord3dARB\0"
++ "glMultiTexCoord3dvARB\0"
++ "glMultiTexCoord3fARB\0"
++ "glMultiTexCoord3fvARB\0"
++ "glMultiTexCoord3iARB\0"
++ "glMultiTexCoord3ivARB\0"
++ "glMultiTexCoord3sARB\0"
++ "glMultiTexCoord3svARB\0"
++ "glMultiTexCoord4dARB\0"
++ "glMultiTexCoord4dvARB\0"
++ "glMultiTexCoord4fARB\0"
++ "glMultiTexCoord4fvARB\0"
++ "glMultiTexCoord4iARB\0"
++ "glMultiTexCoord4ivARB\0"
++ "glMultiTexCoord4sARB\0"
++ "glMultiTexCoord4svARB\0"
++ "glLoadTransposeMatrixfARB\0"
++ "glLoadTransposeMatrixdARB\0"
++ "glMultTransposeMatrixfARB\0"
++ "glMultTransposeMatrixdARB\0"
++ "glSampleCoverageARB\0"
++ "gl__unused413\0"
++ "glPolygonOffsetEXT\0"
++ "glGetTexFilterFuncSGIS\0"
++ "glTexFilterFuncSGIS\0"
++ "glGetHistogramEXT\0"
++ "glGetHistogramParameterfvEXT\0"
++ "glGetHistogramParameterivEXT\0"
++ "glGetMinmaxEXT\0"
++ "glGetMinmaxParameterfvEXT\0"
++ "glGetMinmaxParameterivEXT\0"
++ "glGetConvolutionFilterEXT\0"
++ "glGetConvolutionParameterfvEXT\0"
++ "glGetConvolutionParameterivEXT\0"
++ "glGetSeparableFilterEXT\0"
++ "glGetColorTableSGI\0"
++ "glGetColorTableParameterfvSGI\0"
++ "glGetColorTableParameterivSGI\0"
++ "glPixelTexGenSGIX\0"
++ "glPixelTexGenParameteriSGIS\0"
++ "glPixelTexGenParameterivSGIS\0"
++ "glPixelTexGenParameterfSGIS\0"
++ "glPixelTexGenParameterfvSGIS\0"
++ "glGetPixelTexGenParameterivSGIS\0"
++ "glGetPixelTexGenParameterfvSGIS\0"
++ "glTexImage4DSGIS\0"
++ "glTexSubImage4DSGIS\0"
++ "glAreTexturesResidentEXT\0"
++ "glGenTexturesEXT\0"
++ "glIsTextureEXT\0"
++ "glDetailTexFuncSGIS\0"
++ "glGetDetailTexFuncSGIS\0"
++ "glSharpenTexFuncSGIS\0"
++ "glGetSharpenTexFuncSGIS\0"
++ "glSampleMaskSGIS\0"
++ "glSamplePatternSGIS\0"
++ "glColorPointerEXT\0"
++ "glEdgeFlagPointerEXT\0"
++ "glIndexPointerEXT\0"
++ "glNormalPointerEXT\0"
++ "glTexCoordPointerEXT\0"
++ "glVertexPointerEXT\0"
++ "glSpriteParameterfSGIX\0"
++ "glSpriteParameterfvSGIX\0"
++ "glSpriteParameteriSGIX\0"
++ "glSpriteParameterivSGIX\0"
++ "glPointParameterfEXT\0"
++ "glPointParameterfvEXT\0"
++ "glGetInstrumentsSGIX\0"
++ "glInstrumentsBufferSGIX\0"
++ "glPollInstrumentsSGIX\0"
++ "glReadInstrumentsSGIX\0"
++ "glStartInstrumentsSGIX\0"
++ "glStopInstrumentsSGIX\0"
++ "glFrameZoomSGIX\0"
++ "glTagSampleBufferSGIX\0"
++ "glReferencePlaneSGIX\0"
++ "glFlushRasterSGIX\0"
++ "glGetListParameterfvSGIX\0"
++ "glGetListParameterivSGIX\0"
++ "glListParameterfSGIX\0"
++ "glListParameterfvSGIX\0"
++ "glListParameteriSGIX\0"
++ "glListParameterivSGIX\0"
++ "glFragmentColorMaterialSGIX\0"
++ "glFragmentLightfSGIX\0"
++ "glFragmentLightfvSGIX\0"
++ "glFragmentLightiSGIX\0"
++ "glFragmentLightivSGIX\0"
++ "glFragmentLightModelfSGIX\0"
++ "glFragmentLightModelfvSGIX\0"
++ "glFragmentLightModeliSGIX\0"
++ "glFragmentLightModelivSGIX\0"
++ "glFragmentMaterialfSGIX\0"
++ "glFragmentMaterialfvSGIX\0"
++ "glFragmentMaterialiSGIX\0"
++ "glFragmentMaterialivSGIX\0"
++ "glGetFragmentLightfvSGIX\0"
++ "glGetFragmentLightivSGIX\0"
++ "glGetFragmentMaterialfvSGIX\0"
++ "glGetFragmentMaterialivSGIX\0"
++ "glLightEnviSGIX\0"
++ "glVertexWeightfEXT\0"
++ "glVertexWeightfvEXT\0"
++ "glVertexWeightPointerEXT\0"
++ "glFlushVertexArrayRangeNV\0"
++ "glVertexArrayRangeNV\0"
++ "glCombinerParameterfvNV\0"
++ "glCombinerParameterfNV\0"
++ "glCombinerParameterivNV\0"
++ "glCombinerParameteriNV\0"
++ "glCombinerInputNV\0"
++ "glCombinerOutputNV\0"
++ "glFinalCombinerInputNV\0"
++ "glGetCombinerInputParameterfvNV\0"
++ "glGetCombinerInputParameterivNV\0"
++ "glGetCombinerOutputParameterfvNV\0"
++ "glGetCombinerOutputParameterivNV\0"
++ "glGetFinalCombinerInputParameterfvNV\0"
++ "glGetFinalCombinerInputParameterivNV\0"
++ "glResizeBuffersMESA\0"
++ "glWindowPos2dMESA\0"
++ "glWindowPos2dvMESA\0"
++ "glWindowPos2fMESA\0"
++ "glWindowPos2fvMESA\0"
++ "glWindowPos2iMESA\0"
++ "glWindowPos2ivMESA\0"
++ "glWindowPos2sMESA\0"
++ "glWindowPos2svMESA\0"
++ "glWindowPos3dMESA\0"
++ "glWindowPos3dvMESA\0"
++ "glWindowPos3fMESA\0"
++ "glWindowPos3fvMESA\0"
++ "glWindowPos3iMESA\0"
++ "glWindowPos3ivMESA\0"
++ "glWindowPos3sMESA\0"
++ "glWindowPos3svMESA\0"
++ "glWindowPos4dMESA\0"
++ "glWindowPos4dvMESA\0"
++ "glWindowPos4fMESA\0"
++ "glWindowPos4fvMESA\0"
++ "glWindowPos4iMESA\0"
++ "glWindowPos4ivMESA\0"
++ "glWindowPos4sMESA\0"
++ "glWindowPos4svMESA\0"
++ "glBlendFuncSeparateEXT\0"
++ "glIndexMaterialEXT\0"
++ "glIndexFuncEXT\0"
++ "glLockArraysEXT\0"
++ "glUnlockArraysEXT\0"
++ "glCullParameterdvEXT\0"
++ "glCullParameterfvEXT\0"
++ "glHintPGI\0"
++ "glFogCoordfEXT\0"
++ "glFogCoordfvEXT\0"
++ "glFogCoorddEXT\0"
++ "glFogCoorddvEXT\0"
++ "glFogCoordPointerEXT\0"
++ "glGetColorTableEXT\0"
++ "glGetColorTableParameterivEXT\0"
++ "glGetColorTableParameterfvEXT\0"
++ "glTbufferMask3DFX\0"
++ "glCompressedTexImage3DARB\0"
++ "glCompressedTexImage2DARB\0"
++ "glCompressedTexImage1DARB\0"
++ "glCompressedTexSubImage3DARB\0"
++ "glCompressedTexSubImage2DARB\0"
++ "glCompressedTexSubImage1DARB\0"
++ "glGetCompressedTexImageARB\0"
++ "glSecondaryColor3bEXT\0"
++ "glSecondaryColor3bvEXT\0"
++ "glSecondaryColor3dEXT\0"
++ "glSecondaryColor3dvEXT\0"
++ "glSecondaryColor3fEXT\0"
++ "glSecondaryColor3fvEXT\0"
++ "glSecondaryColor3iEXT\0"
++ "glSecondaryColor3ivEXT\0"
++ "glSecondaryColor3sEXT\0"
++ "glSecondaryColor3svEXT\0"
++ "glSecondaryColor3ubEXT\0"
++ "glSecondaryColor3ubvEXT\0"
++ "glSecondaryColor3uiEXT\0"
++ "glSecondaryColor3uivEXT\0"
++ "glSecondaryColor3usEXT\0"
++ "glSecondaryColor3usvEXT\0"
++ "glSecondaryColorPointerEXT\0"
++ "glAreProgramsResidentNV\0"
++ "glBindProgramNV\0"
++ "glDeleteProgramsNV\0"
++ "glExecuteProgramNV\0"
++ "glGenProgramsNV\0"
++ "glGetProgramParameterdvNV\0"
++ "glGetProgramParameterfvNV\0"
++ "glGetProgramivNV\0"
++ "glGetProgramStringNV\0"
++ "glGetTrackMatrixivNV\0"
++ "glGetVertexAttribdvNV\0"
++ "glGetVertexAttribfvNV\0"
++ "glGetVertexAttribivNV\0"
++ "glGetVertexAttribPointervNV\0"
++ "glIsProgramNV\0"
++ "glLoadProgramNV\0"
++ "glProgramParameter4dNV\0"
++ "glProgramParameter4dvNV\0"
++ "glProgramParameter4fNV\0"
++ "glProgramParameter4fvNV\0"
++ "glProgramParameters4dvNV\0"
++ "glProgramParameters4fvNV\0"
++ "glRequestResidentProgramsNV\0"
++ "glTrackMatrixNV\0"
++ "glVertexAttribPointerNV\0"
++ "glVertexAttrib1dNV\0"
++ "glVertexAttrib1dvNV\0"
++ "glVertexAttrib1fNV\0"
++ "glVertexAttrib1fvNV\0"
++ "glVertexAttrib1sNV\0"
++ "glVertexAttrib1svNV\0"
++ "glVertexAttrib2dNV\0"
++ "glVertexAttrib2dvNV\0"
++ "glVertexAttrib2fNV\0"
++ "glVertexAttrib2fvNV\0"
++ "glVertexAttrib2sNV\0"
++ "glVertexAttrib2svNV\0"
++ "glVertexAttrib3dNV\0"
++ "glVertexAttrib3dvNV\0"
++ "glVertexAttrib3fNV\0"
++ "glVertexAttrib3fvNV\0"
++ "glVertexAttrib3sNV\0"
++ "glVertexAttrib3svNV\0"
++ "glVertexAttrib4dNV\0"
++ "glVertexAttrib4dvNV\0"
++ "glVertexAttrib4fNV\0"
++ "glVertexAttrib4fvNV\0"
++ "glVertexAttrib4sNV\0"
++ "glVertexAttrib4svNV\0"
++ "glVertexAttrib4ubNV\0"
++ "glVertexAttrib4ubvNV\0"
++ "glVertexAttribs1dvNV\0"
++ "glVertexAttribs1fvNV\0"
++ "glVertexAttribs1svNV\0"
++ "glVertexAttribs2dvNV\0"
++ "glVertexAttribs2fvNV\0"
++ "glVertexAttribs2svNV\0"
++ "glVertexAttribs3dvNV\0"
++ "glVertexAttribs3fvNV\0"
++ "glVertexAttribs3svNV\0"
++ "glVertexAttribs4dvNV\0"
++ "glVertexAttribs4fvNV\0"
++ "glVertexAttribs4svNV\0"
++ "glVertexAttribs4ubvNV\0"
++ "glPointParameteriNV\0"
++ "glPointParameterivNV\0"
++ "glMultiDrawArraysEXT\0"
++ "glMultiDrawElementsEXT\0"
++ "glActiveStencilFaceEXT\0"
++ "glDeleteFencesNV\0"
++ "glGenFencesNV\0"
++ "glIsFenceNV\0"
++ "glTestFenceNV\0"
++ "glGetFenceivNV\0"
++ "glFinishFenceNV\0"
++ "glSetFenceNV\0"
++ "glVertexAttrib4bvARB\0"
++ "glVertexAttrib4ivARB\0"
++ "glVertexAttrib4ubvARB\0"
++ "glVertexAttrib4usvARB\0"
++ "glVertexAttrib4uivARB\0"
++ "glVertexAttrib4NbvARB\0"
++ "glVertexAttrib4NsvARB\0"
++ "glVertexAttrib4NivARB\0"
++ "glVertexAttrib4NusvARB\0"
++ "glVertexAttrib4NuivARB\0"
++ "glVertexAttribPointerARB\0"
++ "glEnableVertexAttribArrayARB\0"
++ "glDisableVertexAttribArrayARB\0"
++ "glProgramStringARB\0"
++ "glProgramEnvParameter4dARB\0"
++ "glProgramEnvParameter4dvARB\0"
++ "glProgramEnvParameter4fARB\0"
++ "glProgramEnvParameter4fvARB\0"
++ "glProgramLocalParameter4dARB\0"
++ "glProgramLocalParameter4dvARB\0"
++ "glProgramLocalParameter4fARB\0"
++ "glProgramLocalParameter4fvARB\0"
++ "glGetProgramEnvParameterdvARB\0"
++ "glGetProgramEnvParameterfvARB\0"
++ "glGetProgramLocalParameterdvARB\0"
++ "glGetProgramLocalParameterfvARB\0"
++ "glGetProgramivARB\0"
++ "glGetProgramStringARB\0"
++ "glProgramNamedParameter4fNV\0"
++ "glProgramNamedParameter4dNV\0"
++ "glProgramNamedParameter4fvNV\0"
++ "glProgramNamedParameter4dvNV\0"
++ "glGetProgramNamedParameterfvNV\0"
++ "glGetProgramNamedParameterdvNV\0"
++ "glBindBufferARB\0"
++ "glBufferDataARB\0"
++ "glBufferSubDataARB\0"
++ "glDeleteBuffersARB\0"
++ "glGenBuffersARB\0"
++ "glGetBufferParameterivARB\0"
++ "glGetBufferPointervARB\0"
++ "glGetBufferSubDataARB\0"
++ "glIsBufferARB\0"
++ "glMapBufferARB\0"
++ "glUnmapBufferARB\0"
++ "glDepthBoundsEXT\0"
++ "glGenQueriesARB\0"
++ "glDeleteQueriesARB\0"
++ "glIsQueryARB\0"
++ "glBeginQueryARB\0"
++ "glEndQueryARB\0"
++ "glGetQueryivARB\0"
++ "glGetQueryObjectivARB\0"
++ "glGetQueryObjectuivARB\0"
++ "glMultiModeDrawArraysIBM\0"
++ "glMultiModeDrawElementsIBM\0"
++ "glBlendEquationSeparateEXT\0"
++ "glActiveTexture\0"
++ "glClientActiveTexture\0"
++ "glMultiTexCoord1d\0"
++ "glMultiTexCoord1dv\0"
++ "glMultiTexCoord1f\0"
++ "glMultiTexCoord1fv\0"
++ "glMultiTexCoord1i\0"
++ "glMultiTexCoord1iv\0"
++ "glMultiTexCoord1s\0"
++ "glMultiTexCoord1sv\0"
++ "glMultiTexCoord2d\0"
++ "glMultiTexCoord2dv\0"
++ "glMultiTexCoord2f\0"
++ "glMultiTexCoord2fv\0"
++ "glMultiTexCoord2i\0"
++ "glMultiTexCoord2iv\0"
++ "glMultiTexCoord2s\0"
++ "glMultiTexCoord2sv\0"
++ "glMultiTexCoord3d\0"
++ "glMultiTexCoord3dv\0"
++ "glMultiTexCoord3f\0"
++ "glMultiTexCoord3fv\0"
++ "glMultiTexCoord3i\0"
++ "glMultiTexCoord3iv\0"
++ "glMultiTexCoord3s\0"
++ "glMultiTexCoord3sv\0"
++ "glMultiTexCoord4d\0"
++ "glMultiTexCoord4dv\0"
++ "glMultiTexCoord4f\0"
++ "glMultiTexCoord4fv\0"
++ "glMultiTexCoord4i\0"
++ "glMultiTexCoord4iv\0"
++ "glMultiTexCoord4s\0"
++ "glMultiTexCoord4sv\0"
++ "glLoadTransposeMatrixf\0"
++ "glLoadTransposeMatrixd\0"
++ "glMultTransposeMatrixf\0"
++ "glMultTransposeMatrixd\0"
++ "glSampleCoverage\0"
++ "glCompressedTexImage3D\0"
++ "glCompressedTexImage2D\0"
++ "glCompressedTexImage1D\0"
++ "glCompressedTexSubImage3D\0"
++ "glCompressedTexSubImage2D\0"
++ "glCompressedTexSubImage1D\0"
++ "glGetCompressedTexImage\0"
++ "glBlendFuncSeparate\0"
++ "glFogCoordf\0"
++ "glFogCoordfv\0"
++ "glFogCoordd\0"
++ "glFogCoorddv\0"
++ "glFogCoordPointer\0"
++ "glMultiDrawArrays\0"
++ "glMultiDrawElements\0"
++ "glPointParameterf\0"
++ "glPointParameterfv\0"
++ "glPointParameteri\0"
++ "glPointParameteriv\0"
++ "glSecondaryColor3b\0"
++ "glSecondaryColor3bv\0"
++ "glSecondaryColor3d\0"
++ "glSecondaryColor3dv\0"
++ "glSecondaryColor3f\0"
++ "glSecondaryColor3fv\0"
++ "glSecondaryColor3i\0"
++ "glSecondaryColor3iv\0"
++ "glSecondaryColor3s\0"
++ "glSecondaryColor3sv\0"
++ "glSecondaryColor3ub\0"
++ "glSecondaryColor3ubv\0"
++ "glSecondaryColor3ui\0"
++ "glSecondaryColor3uiv\0"
++ "glSecondaryColor3us\0"
++ "glSecondaryColor3usv\0"
++ "glSecondaryColorPointer\0"
++ "glWindowPos2d\0"
++ "glWindowPos2dv\0"
++ "glWindowPos2f\0"
++ "glWindowPos2fv\0"
++ "glWindowPos2i\0"
++ "glWindowPos2iv\0"
++ "glWindowPos2s\0"
++ "glWindowPos2sv\0"
++ "glWindowPos3d\0"
++ "glWindowPos3dv\0"
++ "glWindowPos3f\0"
++ "glWindowPos3fv\0"
++ "glWindowPos3i\0"
++ "glWindowPos3iv\0"
++ "glWindowPos3s\0"
++ "glWindowPos3sv\0"
++ "glBindBuffer\0"
++ "glBufferData\0"
++ "glBufferSubData\0"
++ "glDeleteBuffers\0"
++ "glGenBuffers\0"
++ "glGetBufferParameteriv\0"
++ "glGetBufferPointerv\0"
++ "glGetBufferSubData\0"
++ "glIsBuffer\0"
++ "glMapBuffer\0"
++ "glUnmapBuffer\0"
++ "glGenQueries\0"
++ "glDeleteQueries\0"
++ "glIsQuery\0"
++ "glBeginQuery\0"
++ "glEndQuery\0"
++ "glGetQueryiv\0"
++ "glGetQueryObjectiv\0"
++ "glGetQueryObjectuiv\0"
++ "glPointParameterfARB\0"
++ "glPointParameterfvARB\0"
++ "glWindowPos2dARB\0"
++ "glWindowPos2fARB\0"
++ "glWindowPos2iARB\0"
++ "glWindowPos2sARB\0"
++ "glWindowPos2dvARB\0"
++ "glWindowPos2fvARB\0"
++ "glWindowPos2ivARB\0"
++ "glWindowPos2svARB\0"
++ "glWindowPos3dARB\0"
++ "glWindowPos3fARB\0"
++ "glWindowPos3iARB\0"
++ "glWindowPos3sARB\0"
++ "glWindowPos3dvARB\0"
++ "glWindowPos3fvARB\0"
++ "glWindowPos3ivARB\0"
++ "glWindowPos3svARB\0"
++ "glVertexAttrib1sARB\0"
++ "glVertexAttrib1fARB\0"
++ "glVertexAttrib1dARB\0"
++ "glVertexAttrib2sARB\0"
++ "glVertexAttrib2fARB\0"
++ "glVertexAttrib2dARB\0"
++ "glVertexAttrib3sARB\0"
++ "glVertexAttrib3fARB\0"
++ "glVertexAttrib3dARB\0"
++ "glVertexAttrib4sARB\0"
++ "glVertexAttrib4fARB\0"
++ "glVertexAttrib4dARB\0"
++ "glVertexAttrib4NubARB\0"
++ "glVertexAttrib1svARB\0"
++ "glVertexAttrib1fvARB\0"
++ "glVertexAttrib1dvARB\0"
++ "glVertexAttrib2svARB\0"
++ "glVertexAttrib2fvARB\0"
++ "glVertexAttrib2dvARB\0"
++ "glVertexAttrib3svARB\0"
++ "glVertexAttrib3fvARB\0"
++ "glVertexAttrib3dvARB\0"
++ "glVertexAttrib4svARB\0"
++ "glVertexAttrib4fvARB\0"
++ "glVertexAttrib4dvARB\0"
++ "glVertexAttrib4NubvARB\0"
++ "glBindProgramARB\0"
++ "glDeleteProgramsARB\0"
++ "glGenProgramsARB\0"
++ "glIsProgramARB\0"
++ "glGetVertexAttribdvARB\0"
++ "glGetVertexAttribfvARB\0"
++ "glGetVertexAttribivARB\0"
++ "glGetVertexAttribPointervARB\0"
++ "glBlendColorEXT\0"
++ "glTexImage3DEXT\0"
++ "glTexSubImage3DEXT\0"
++ "glTexSubImage1DEXT\0"
++ "glTexSubImage2DEXT\0"
++ "glCopyTexImage1DEXT\0"
++ "glCopyTexImage2DEXT\0"
++ "glCopyTexSubImage1DEXT\0"
++ "glCopyTexSubImage2DEXT\0"
++ "glCopyTexSubImage3DEXT\0"
++ "glHistogramEXT\0"
++ "glMinmaxEXT\0"
++ "glResetHistogramEXT\0"
++ "glResetMinmaxEXT\0"
++ "glConvolutionFilter1DEXT\0"
++ "glConvolutionFilter2DEXT\0"
++ "glConvolutionParameterfEXT\0"
++ "glConvolutionParameterfvEXT\0"
++ "glConvolutionParameteriEXT\0"
++ "glConvolutionParameterivEXT\0"
++ "glCopyConvolutionFilter1DEXT\0"
++ "glCopyConvolutionFilter2DEXT\0"
++ "glSeparableFilter2DEXT\0"
++ "glColorTableSGI\0"
++ "glColorTableParameterfvSGI\0"
++ "glColorTableParameterivSGI\0"
++ "glCopyColorTableSGI\0"
++ "glBindTextureEXT\0"
++ "glDeleteTexturesEXT\0"
++ "glPrioritizeTexturesEXT\0"
++ "glArrayElementEXT\0"
++ "glDrawArraysEXT\0"
++ "glGetPointervEXT\0"
++ "glBlendEquationEXT\0"
++ "glColorSubTableEXT\0"
++ "glCopyColorSubTableEXT\0"
++ "glColorTableEXT\0"
++ "glDrawRangeElementsEXT\0"
++ "glSampleMaskEXT\0"
++ "glSamplePatternEXT\0"
++ "glBlendEquationSeparateATI\0"
++ "glBlendFuncSeparateINGR\0"
++ "glPointParameterfSGIS\0"
++ "glPointParameterfvSGIS\0"
++ ;
+
+ static const glprocs_table_t static_functions[] = {
+ NAME_FUNC_OFFSET( 0, glNewList, _gloffset_NewList ),
+@@ -1883,7 +1883,7 @@
+ NAME_FUNC_OFFSET( 16324, glBlendFuncSeparateINGR, _gloffset_BlendFuncSeparateEXT ),
+ NAME_FUNC_OFFSET( 16348, glPointParameterfSGIS, _gloffset_PointParameterfEXT ),
+ NAME_FUNC_OFFSET( 16370, glPointParameterfvSGIS, _gloffset_PointParameterfvEXT ),
+- NAME_FUNC_OFFSET( -1, NULL, -1 )
++ NAME_FUNC_OFFSET( -1, NULL, 0 )
+ };
+
+ #undef NAME_FUNC_OFFSET
+Index: xc/extras/Mesa/src/mesa/glapi/glsparcasm.py
+diff -u xc/extras/Mesa/src/mesa/glapi/glsparcasm.py:1.1.1.1 xc/extras/Mesa/src/mesa/glapi/glsparcasm.py:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/glapi/glsparcasm.py:1.1.1.1 Wed Jun 16 09:19:06 2004
++++ xc/extras/Mesa/src/mesa/glapi/glsparcasm.py Wed Dec 15 01:51:02 2004
+@@ -109,7 +109,7 @@
+ print '.globl gl%s' % (name)
+ print '.type gl%s,#function' % (name)
+ print 'gl%s:' % (name)
+- print '#if defined(__sparc_v9__) && !defined(__linux__)'
++ print '#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))'
+ print '\tsethi\t%hi(0x00000000), %g2'
+ print '\tsethi\t%hi(0x00000000), %g1'
+ print '\tor\t%g2, %lo(0x00000000), %g2'
+Index: xc/extras/Mesa/src/mesa/glapi/glthread.h
+diff -u xc/extras/Mesa/src/mesa/glapi/glthread.h:1.1.1.3 xc/extras/Mesa/src/mesa/glapi/glthread.h:1.1.1.3.2.1
+--- xc/extras/Mesa/src/mesa/glapi/glthread.h:1.1.1.3 Sat Aug 28 04:27:56 2004
++++ xc/extras/Mesa/src/mesa/glapi/glthread.h Wed Dec 15 01:51:02 2004
+@@ -1,9 +1,8 @@
+-
+ /*
+ * Mesa 3-D graphics library
+- * Version: 3.5
++ * Version: 6.2.1
+ *
+- * Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
++ * Copyright (C) 1999-2003 Brian Paul All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+@@ -194,7 +193,7 @@
+ * We wrap it again for GL.
+ */
+ #ifdef XTHREADS
+-#include "Xthreads.h"
++#include <X11/Xthreads.h>
+
+ typedef struct {
+ xthread_key_t key;
+Index: xc/extras/Mesa/src/mesa/main/Makefile.BeOS-R5
+diff -u /dev/null xc/extras/Mesa/src/mesa/main/Makefile.BeOS-R5:1.2.2.1
+--- /dev/null Fri Feb 11 21:35:30 2005
++++ xc/extras/Mesa/src/mesa/main/Makefile.BeOS-R5 Wed Dec 15 01:51:02 2004
+@@ -0,0 +1,453 @@
++# Mesa 3-D graphics library
++# Version: 5.1
++#
++# Copyright (C) 1995-2003 Brian Paul All Rights Reserved.
++#
++# 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
++# BRIAN PAUL 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.
++#
++# BeOS driver makefile v1.0 for Mesa 4.1
++#
++# Copyright (C) 2002 - Philippe Houdoin
++# Email : philippe.houdoin@free.fr
++# Web : http://philippe.houdoin.free.fr/phil/beos/index-en.html
++#
++# -------------------------------------------------------------------
++
++## BeOS Generic Makefile v2.0 ##
++
++## Fill in this file to specify the project being created, and the referenced
++## makefile-engine will do all of the hard work for you. This handles both
++## Intel and PowerPC builds of the BeOS.
++
++## Application Specific Settings ---------------------------------------------
++
++# specify the name of the binary
++NAME= libGL.so
++
++# specify the type of binary
++# APP: Application
++# SHARED: Shared library or add-on
++# STATIC: Static library archive
++# DRIVER: Kernel Driver
++TYPE= SHARED
++
++# specify the source files to use
++# full paths or paths relative to the makefile can be included
++# all files, regardless of directory, will have their object
++# files created in the common object directory.
++# Note that this means this makefile will not work correctly
++# if two source files with the same name (source.c or source.cpp)
++# are included from different directories. Also note that spaces
++# in folder names do not work well with this makefile.
++
++MESA_CORE_SRCS = \
++ api_arrayelt.c \
++ api_loopback.c \
++ api_noop.c \
++ api_validate.c \
++ accum.c \
++ arbprogram.c \
++ attrib.c \
++ blend.c \
++ bufferobj.c \
++ buffers.c \
++ clip.c \
++ colortab.c \
++ context.c \
++ convolve.c \
++ debug.c \
++ depth.c \
++ dispatch.c \
++ dlist.c \
++ drawpix.c \
++ enable.c \
++ enums.c \
++ eval.c \
++ extensions.c \
++ feedback.c \
++ fog.c \
++ get.c \
++ glapi.c \
++ glthread.c \
++ hash.c \
++ hint.c \
++ histogram.c \
++ image.c \
++ imports.c \
++ light.c \
++ lines.c \
++ matrix.c \
++ pixel.c \
++ points.c \
++ polygon.c \
++ rastpos.c \
++ state.c \
++ stencil.c \
++ texcompress.c \
++ texcompress_fxt1.c \
++ texcompress_s3tc.c \
++ texformat.c \
++ teximage.c \
++ texobj.c \
++ texstate.c \
++ texstore.c \
++ varray.c \
++ vpexec.c \
++ vpparse.c \
++ vpstate.c \
++ vtxfmt.c \
++ math/m_debug_clip.c \
++ math/m_debug_norm.c \
++ math/m_debug_xform.c \
++ math/m_eval.c \
++ math/m_matrix.c \
++ math/m_translate.c \
++ math/m_vector.c \
++ math/m_xform.c \
++ array_cache/ac_context.c \
++ array_cache/ac_import.c \
++ swrast/s_aaline.c \
++ swrast/s_aatriangle.c \
++ swrast/s_accum.c \
++ swrast/s_alpha.c \
++ swrast/s_alphabuf.c \
++ swrast/s_bitmap.c \
++ swrast/s_blend.c \
++ swrast/s_buffers.c \
++ swrast/s_copypix.c \
++ swrast/s_context.c \
++ swrast/s_depth.c \
++ swrast/s_drawpix.c \
++ swrast/s_feedback.c \
++ swrast/s_fog.c \
++ swrast/s_imaging.c \
++ swrast/s_lines.c \
++ swrast/s_logic.c \
++ swrast/s_masking.c \
++ swrast/s_pixeltex.c \
++ swrast/s_points.c \
++ swrast/s_readpix.c \
++ swrast/s_span.c \
++ swrast/s_stencil.c \
++ swrast/s_texture.c \
++ swrast/s_texstore.c \
++ swrast/s_triangle.c \
++ swrast/s_zoom.c \
++ swrast_setup/ss_context.c \
++ swrast_setup/ss_triangle.c \
++ swrast_setup/ss_vb.c \
++ tnl/t_array_api.c \
++ tnl/t_array_import.c \
++ tnl/t_context.c \
++ tnl/t_eval_api.c \
++ tnl/t_imm_alloc.c \
++ tnl/t_imm_api.c \
++ tnl/t_imm_debug.c \
++ tnl/t_imm_dlist.c \
++ tnl/t_imm_elt.c \
++ tnl/t_imm_eval.c \
++ tnl/t_imm_exec.c \
++ tnl/t_imm_fixup.c \
++ tnl/t_pipeline.c \
++ tnl/t_vb_fog.c \
++ tnl/t_vb_light.c \
++ tnl/t_vb_normals.c \
++ tnl/t_vb_points.c \
++ tnl/t_vb_program.c \
++ tnl/t_vb_render.c \
++ tnl/t_vb_texgen.c \
++ tnl/t_vb_texmat.c \
++ tnl/t_vb_vertex.c
++
++MESA_BEOS_DRIVER_SRCS = \
++ BeOS/GLView.cpp
++
++MESA_X86_SRCS = \
++ X86/x86.c \
++ X86/glapi_x86.S \
++ X86/common_x86.c \
++ X86/common_x86_asm.S \
++ X86/x86_xform2.S \
++ X86/x86_xform3.S \
++ X86/x86_xform4.S \
++ X86/x86_cliptest.S
++
++MESA_MMX_SRCS = \
++ X86/mmx_blend.S
++
++MESA_SSE_SRCS = \
++ X86/sse.c \
++ X86/sse_xform2.S \
++ X86/sse_xform3.S \
++ X86/sse_xform4.S \
++ X86/sse_normal.S
++
++MESA_3DNOW_SRCS = \
++ X86/3dnow.c \
++ X86/3dnow_normal.S \
++ X86/3dnow_xform1.S \
++ X86/3dnow_xform2.S \
++ X86/3dnow_xform3.S \
++ X86/3dnow_xform4.S
++
++MESA_DEFINES =
++# To use GAS assembler, uncomment this line instead:
++MESA_DEFINES += GNU_ASSEMBLER
++# To use NASM assembler, uncomment this line instead:
++# MESA_DEFINES += NASM_ASSEMBLER
++# To build a DEBUG version of Mesa, uncomment this line instead:
++# MESA_DEFINES += DEBUG
++
++# x86-optimized code
++MACHINE=$(shell uname -m)
++ifeq ($(MACHINE), BePC)
++ HAVE_MMX = 1
++ HAVE_SSE = 1
++ HAVE_3DNOW = 1
++else
++ # No assembly optimization for PowerPC...
++ # HAVE_ALTIVEC=1
++endif
++
++ifdef HAVE_MMX
++ MESA_X86_SRCS += $(MESA_MMX_SRCS)
++ MESA_DEFINES += USE_MMX_ASM
++ HAVE_X86 = 1
++endif
++ifdef HAVE_SSE
++ MESA_X86_SRCS += $(MESA_SSE_SRCS)
++ MESA_DEFINES += USE_SSE_ASM
++ HAVE_X86 = 1
++endif
++ifdef HAVE_3DNOW
++ MESA_X86_SRCS += $(MESA_3DNOW_SRCS)
++ MESA_DEFINES += USE_3DNOW_ASM
++ HAVE_X86 = 1
++endif
++ifdef HAVE_X86
++ MESA_DEFINES += USE_X86_ASM
++else
++ MESA_X86_SRCS =
++endif
++
++# FIXME: SI-GLU version support currently broken
++# USE_SI_GLU=1
++ifdef USE_SI_GLU
++ GLU_SRCS = \
++ ../si-glu/libutil/error.c \
++ ../si-glu/libutil/glue.c \
++ ../si-glu/libutil/mipmap.c \
++ ../si-glu/libutil/project.c \
++ ../si-glu/libutil/quad.c \
++ ../si-glu/libutil/registry.c \
++ ../si-glu/libtess/dict.c \
++ ../si-glu/libtess/geom.c \
++ ../si-glu/libtess/memalloc.c \
++ ../si-glu/libtess/mesh.c \
++ ../si-glu/libtess/normal.c \
++ ../si-glu/libtess/priorityq.c \
++ ../si-glu/libtess/render.c \
++ ../si-glu/libtess/sweep.c \
++ ../si-glu/libtess/tess.c \
++ ../si-glu/libtess/tessmono.c \
++ ../si-glu/libnurbs/interface/bezierEval.cc \
++ ../si-glu/libnurbs/interface/bezierPatch.cc \
++ ../si-glu/libnurbs/interface/bezierPatchMesh.cc \
++ ../si-glu/libnurbs/interface/glcurveval.cc \
++ ../si-glu/libnurbs/interface/glinterface.cc \
++ ../si-glu/libnurbs/interface/glrenderer.cc \
++ ../si-glu/libnurbs/interface/glsurfeval.cc \
++ ../si-glu/libnurbs/interface/incurveeval.cc \
++ ../si-glu/libnurbs/interface/insurfeval.cc \
++ ../si-glu/libnurbs/internals/arc.cc \
++ ../si-glu/libnurbs/internals/arcsorter.cc \
++ ../si-glu/libnurbs/internals/arctess.cc \
++ ../si-glu/libnurbs/internals/backend.cc \
++ ../si-glu/libnurbs/internals/basiccrveval.cc \
++ ../si-glu/libnurbs/internals/basicsurfeval.cc \
++ ../si-glu/libnurbs/internals/bin.cc \
++ ../si-glu/libnurbs/internals/bufpool.cc \
++ ../si-glu/libnurbs/internals/cachingeval.cc \
++ ../si-glu/libnurbs/internals/ccw.cc \
++ ../si-glu/libnurbs/internals/coveandtiler.cc \
++ ../si-glu/libnurbs/internals/curve.cc \
++ ../si-glu/libnurbs/internals/curvelist.cc \
++ ../si-glu/libnurbs/internals/curvesub.cc \
++ ../si-glu/libnurbs/internals/dataTransform.cc \
++ ../si-glu/libnurbs/internals/displaylist.cc \
++ ../si-glu/libnurbs/internals/flist.cc \
++ ../si-glu/libnurbs/internals/flistsorter.cc \
++ ../si-glu/libnurbs/internals/hull.cc \
++ ../si-glu/libnurbs/internals/intersect.cc \
++ ../si-glu/libnurbs/internals/knotvector.cc \
++ ../si-glu/libnurbs/internals/mapdesc.cc \
++ ../si-glu/libnurbs/internals/mapdescv.cc \
++ ../si-glu/libnurbs/internals/maplist.cc \
++ ../si-glu/libnurbs/internals/mesher.cc \
++ ../si-glu/libnurbs/internals/monoTriangulationBackend.cc \
++ ../si-glu/libnurbs/internals/monotonizer.cc \
++ ../si-glu/libnurbs/internals/mycode.cc \
++ ../si-glu/libnurbs/internals/nurbsinterfac.cc \
++ ../si-glu/libnurbs/internals/nurbstess.cc \
++ ../si-glu/libnurbs/internals/patch.cc \
++ ../si-glu/libnurbs/internals/patchlist.cc \
++ ../si-glu/libnurbs/internals/quilt.cc \
++ ../si-glu/libnurbs/internals/reader.cc \
++ ../si-glu/libnurbs/internals/renderhints.cc \
++ ../si-glu/libnurbs/internals/slicer.cc \
++ ../si-glu/libnurbs/internals/sorter.cc \
++ ../si-glu/libnurbs/internals/splitarcs.cc \
++ ../si-glu/libnurbs/internals/subdivider.cc \
++ ../si-glu/libnurbs/internals/tobezier.cc \
++ ../si-glu/libnurbs/internals/trimline.cc \
++ ../si-glu/libnurbs/internals/trimregion.cc \
++ ../si-glu/libnurbs/internals/trimvertpool.cc \
++ ../si-glu/libnurbs/internals/uarray.cc \
++ ../si-glu/libnurbs/internals/varray.cc \
++ ../si-glu/libnurbs/nurbtess/directedLine.cc \
++ ../si-glu/libnurbs/nurbtess/gridWrap.cc \
++ ../si-glu/libnurbs/nurbtess/monoChain.cc \
++ ../si-glu/libnurbs/nurbtess/monoPolyPart.cc \
++ ../si-glu/libnurbs/nurbtess/monoTriangulation.cc \
++ ../si-glu/libnurbs/nurbtess/partitionX.cc \
++ ../si-glu/libnurbs/nurbtess/partitionY.cc \
++ ../si-glu/libnurbs/nurbtess/polyDBG.cc \
++ ../si-glu/libnurbs/nurbtess/polyUtil.cc \
++ ../si-glu/libnurbs/nurbtess/primitiveStream.cc \
++ ../si-glu/libnurbs/nurbtess/quicksort.cc \
++ ../si-glu/libnurbs/nurbtess/rectBlock.cc \
++ ../si-glu/libnurbs/nurbtess/sampleComp.cc \
++ ../si-glu/libnurbs/nurbtess/sampleCompBot.cc \
++ ../si-glu/libnurbs/nurbtess/sampleCompRight.cc \
++ ../si-glu/libnurbs/nurbtess/sampleCompTop.cc \
++ ../si-glu/libnurbs/nurbtess/sampleMonoPoly.cc \
++ ../si-glu/libnurbs/nurbtess/sampledLine.cc \
++ ../si-glu/libnurbs/nurbtess/searchTree.cc
++else
++ GLU_SRCS = \
++ ../src-glu/glu.c \
++ ../src-glu/mipmap.c \
++ ../src-glu/project.c \
++ ../src-glu/quadric.c \
++ ../src-glu/tess.c \
++ ../src-glu/tesselat.c \
++ ../src-glu/polytest.c \
++ ../src-glu/nurbs.c \
++ ../src-glu/nurbscrv.c \
++ ../src-glu/nurbssrf.c \
++ ../src-glu/nurbsutl.c
++endif
++
++SRCS = $(MESA_CORE_SRCS) $(MESA_X86_SRCS) $(GLU_SRCS) $(MESA_BEOS_DRIVER_SRCS)
++
++# specify the resource files to use
++# full path or a relative path to the resource file can be used.
++RSRCS =
++
++# specify additional libraries to link against
++# there are two acceptable forms of library specifications
++# - if your library follows the naming pattern of:
++# libXXX.so or libXXX.a you can simply specify XXX
++# library: libbe.so entry: be
++#
++# - if your library does not follow the standard library
++# naming scheme you need to specify the path to the library
++# and it's name
++# library: my_lib.a entry: my_lib.a or path/my_lib.a
++LIBS = be
++
++# specify additional paths to directories following the standard
++# libXXX.so or libXXX.a naming scheme. You can specify full paths
++# or paths relative to the makefile. The paths included may not
++# be recursive, so include all of the paths where libraries can
++# be found. Directories where source files are found are
++# automatically included.
++LIBPATHS =
++
++# additional paths to look for system headers
++# thes use the form: #include <header>
++# source file directories are NOT auto-included here
++SYSTEM_INCLUDE_PATHS = ../include
++ifdef USE_SI_GLU
++ SYSTEM_INCLUDE_PATHS += ../si-glu/include
++endif
++
++# additional paths to look for local headers
++# thes use the form: #include "header"
++# source file directories are automatically included
++LOCAL_INCLUDE_PATHS =
++
++# specify the level of optimization that you desire
++# NONE, SOME, FULL
++OPTIMIZE = FULL
++
++# specify any preprocessor symbols to be defined. The symbols
++# will be set to a value of 1. For example specify DEBUG if you want
++# DEBUG=1 to be set when compiling.
++DEFINES = $(MESA_DEFINES)
++
++# specify special warning levels
++# if unspecified default warnings will be used
++# NONE = suppress all warnings
++# ALL = enable all warnings
++WARNINGS = ALL
++
++# specify whether image symbols will be created
++# so that stack crawls in the debugger are meaningful
++# if TRUE symbols will be created
++SYMBOLS = TRUE
++
++# specify debug settings
++# if TRUE will allow application to be run from
++# a source-level debugger
++# DEBUGGER = TRUE
++DEBUGGER = FALSE
++
++# specify additional compiler flags for all files
++COMPILER_FLAGS =
++
++# specify additional linker flags
++LINKER_FLAGS =
++
++
++
++## include the makefile-engine
++include /boot/develop/etc/makefile-engine
++
++
++
++# X86/matypes.h include file is *generated*!
++# Rules to (re)generate it as needed:
++
++X86/common_x86_asm.S : X86/matypes.h
++
++X86/matypes.h : X86/gen_matypes.c
++ @echo "(Re-)Generating $@ ..."
++ $(CC) $< $(INCLUDES) $(CFLAGS) -o X86/gen_matypes
++ X86/gen_matypes > $@
++ rm -f X86/gen_matypes
++
++## Add NASM support for assembly code compilation...
++# $(OBJ_DIR)/%.o : %.nasm
++# nasm -f elf $(MESA_DEFINES) -o $@ $<
++
++$(OBJ_DIR)/%.o : %.S
++ gcc -c $< $(INCLUDES) $(CFLAGS) -o $@
++# gcc $(INCLUDES) $(CFLAGS) -E $< | grep -v '^$$' > $(addsuffix .nasm, $(basename $<))
++# nasm -f elf $(MESA_DEFINES) -o $@ $(addsuffix .nasm, $(basename $<))
++
+Index: xc/extras/Mesa/src/mesa/main/api_arrayelt.c
+diff -u xc/extras/Mesa/src/mesa/main/api_arrayelt.c:1.1.1.1 xc/extras/Mesa/src/mesa/main/api_arrayelt.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/main/api_arrayelt.c:1.1.1.1 Wed Jun 16 09:19:08 2004
++++ xc/extras/Mesa/src/mesa/main/api_arrayelt.c Wed Dec 15 01:51:02 2004
+@@ -64,79 +64,274 @@
+ */
+ #define TYPE_IDX(t) ( (t) == GL_DOUBLE ? 7 : (t) & 7 )
+
++static void GLAPIENTRY Color3bv(const GLbyte *v)
++{
++ GL_CALL(Color3bv)(v);
++}
++
++static void GLAPIENTRY Color3ubv(const GLubyte *v)
++{
++ GL_CALL(Color3ubv)(v);
++}
++
++static void GLAPIENTRY Color3sv(const GLshort *v)
++{
++ GL_CALL(Color3sv)(v);
++}
++
++static void GLAPIENTRY Color3usv(const GLushort *v)
++{
++ GL_CALL(Color3usv)(v);
++}
++
++static void GLAPIENTRY Color3iv(const GLint *v)
++{
++ GL_CALL(Color3iv)(v);
++}
++
++static void GLAPIENTRY Color3uiv(const GLuint *v)
++{
++ GL_CALL(Color3uiv)(v);
++}
++
++static void GLAPIENTRY Color3fv(const GLfloat *v)
++{
++ GL_CALL(Color3fv)(v);
++}
++
++static void GLAPIENTRY Color3dv(const GLdouble *v)
++{
++ GL_CALL(Color3dv)(v);
++}
++
++static void GLAPIENTRY Color4bv(const GLbyte *v)
++{
++ GL_CALL(Color4bv)(v);
++}
++
++static void GLAPIENTRY Color4ubv(const GLubyte *v)
++{
++ GL_CALL(Color4ubv)(v);
++}
++
++static void GLAPIENTRY Color4sv(const GLshort *v)
++{
++ GL_CALL(Color4sv)(v);
++}
+
+-static array_func ColorFuncs[2][8] = {
+- { (array_func)glColor3bv,
+- (array_func)glColor3ubv,
+- (array_func)glColor3sv,
+- (array_func)glColor3usv,
+- (array_func)glColor3iv,
+- (array_func)glColor3uiv,
+- (array_func)glColor3fv,
+- (array_func)glColor3dv },
+-
+- { (array_func)glColor4bv,
+- (array_func)glColor4ubv,
+- (array_func)glColor4sv,
+- (array_func)glColor4usv,
+- (array_func)glColor4iv,
+- (array_func)glColor4uiv,
+- (array_func)glColor4fv,
+- (array_func)glColor4dv }
++static void GLAPIENTRY Color4usv(const GLushort *v)
++{
++ GL_CALL(Color4usv)(v);
++}
++
++static void GLAPIENTRY Color4iv(const GLint *v)
++{
++ GL_CALL(Color4iv)(v);
++}
++
++static void GLAPIENTRY Color4uiv(const GLuint *v)
++{
++ GL_CALL(Color4uiv)(v);
++}
++
++static void GLAPIENTRY Color4fv(const GLfloat *v)
++{
++ GL_CALL(Color4fv)(v);
++}
++
++static void GLAPIENTRY Color4dv(const GLdouble *v)
++{
++ GL_CALL(Color4dv)(v);
++}
++
++static const array_func ColorFuncs[2][8] = {
++ {
++ (array_func) Color3bv,
++ (array_func) Color3ubv,
++ (array_func) Color3sv,
++ (array_func) Color3usv,
++ (array_func) Color3iv,
++ (array_func) Color3uiv,
++ (array_func) Color3fv,
++ (array_func) Color3dv,
++ },
++ {
++ (array_func) Color4bv,
++ (array_func) Color4ubv,
++ (array_func) Color4sv,
++ (array_func) Color4usv,
++ (array_func) Color4iv,
++ (array_func) Color4uiv,
++ (array_func) Color4fv,
++ (array_func) Color4dv,
++ },
+ };
+
+-static array_func VertexFuncs[3][8] = {
+- { 0,
+- 0,
+- (array_func)glVertex2sv,
+- 0,
+- (array_func)glVertex2iv,
+- 0,
+- (array_func)glVertex2fv,
+- (array_func)glVertex2dv },
+-
+- { 0,
+- 0,
+- (array_func)glVertex3sv,
+- 0,
+- (array_func)glVertex3iv,
+- 0,
+- (array_func)glVertex3fv,
+- (array_func)glVertex3dv },
+-
+- { 0,
+- 0,
+- (array_func)glVertex4sv,
+- 0,
+- (array_func)glVertex4iv,
+- 0,
+- (array_func)glVertex4fv,
+- (array_func)glVertex4dv }
++static void GLAPIENTRY Vertex2sv(const GLshort *v)
++{
++ GL_CALL(Vertex2sv)(v);
++}
++
++static void GLAPIENTRY Vertex2iv(const GLint *v)
++{
++ GL_CALL(Vertex2iv)(v);
++}
++
++static void GLAPIENTRY Vertex2fv(const GLfloat *v)
++{
++ GL_CALL(Vertex2fv)(v);
++}
++
++static void GLAPIENTRY Vertex2dv(const GLdouble *v)
++{
++ GL_CALL(Vertex2dv)(v);
++}
++
++static void GLAPIENTRY Vertex3sv(const GLshort *v)
++{
++ GL_CALL(Vertex3sv)(v);
++}
++
++static void GLAPIENTRY Vertex3iv(const GLint *v)
++{
++ GL_CALL(Vertex3iv)(v);
++}
++
++static void GLAPIENTRY Vertex3fv(const GLfloat *v)
++{
++ GL_CALL(Vertex3fv)(v);
++}
++
++static void GLAPIENTRY Vertex3dv(const GLdouble *v)
++{
++ GL_CALL(Vertex3dv)(v);
++}
++
++static void GLAPIENTRY Vertex4sv(const GLshort *v)
++{
++ GL_CALL(Vertex4sv)(v);
++}
++
++static void GLAPIENTRY Vertex4iv(const GLint *v)
++{
++ GL_CALL(Vertex4iv)(v);
++}
++
++static void GLAPIENTRY Vertex4fv(const GLfloat *v)
++{
++ GL_CALL(Vertex4fv)(v);
++}
++
++static void GLAPIENTRY Vertex4dv(const GLdouble *v)
++{
++ GL_CALL(Vertex4dv)(v);
++}
++
++static const array_func VertexFuncs[3][8] = {
++ {
++ 0,
++ 0,
++ (array_func) Vertex2sv,
++ 0,
++ (array_func) Vertex2iv,
++ 0,
++ (array_func) Vertex2fv,
++ (array_func) Vertex2dv,
++ },
++ {
++ 0,
++ 0,
++ (array_func) Vertex3sv,
++ 0,
++ (array_func) Vertex3iv,
++ 0,
++ (array_func) Vertex3fv,
++ (array_func) Vertex3dv,
++ },
++ {
++ 0,
++ 0,
++ (array_func) Vertex4sv,
++ 0,
++ (array_func) Vertex4iv,
++ 0,
++ (array_func) Vertex4fv,
++ (array_func) Vertex4dv,
++ },
+ };
+
+-static array_func IndexFuncs[8] = {
++static void GLAPIENTRY Indexubv(const GLubyte *c)
++{
++ GL_CALL(Indexubv)(c);
++}
++
++static void GLAPIENTRY Indexsv(const GLshort *c)
++{
++ GL_CALL(Indexsv)(c);
++}
++
++static void GLAPIENTRY Indexiv(const GLint *c)
++{
++ GL_CALL(Indexiv)(c);
++}
++
++static void GLAPIENTRY Indexfv(const GLfloat *c)
++{
++ GL_CALL(Indexfv)(c);
++}
++
++static void GLAPIENTRY Indexdv(const GLdouble *c)
++{
++ GL_CALL(Indexdv)(c);
++}
++
++static const array_func IndexFuncs[8] = {
+ 0,
+- (array_func)glIndexubv,
+- (array_func)glIndexsv,
++ (array_func) Indexubv,
++ (array_func) Indexsv,
+ 0,
+- (array_func)glIndexiv,
++ (array_func) Indexiv,
+ 0,
+- (array_func)glIndexfv,
+- (array_func)glIndexdv
++ (array_func) Indexfv,
++ (array_func) Indexdv,
+ };
+
+-static array_func NormalFuncs[8] = {
+- (array_func)glNormal3bv,
++static void GLAPIENTRY Normal3bv(const GLbyte *v)
++{
++ GL_CALL(Normal3bv)(v);
++}
++
++static void GLAPIENTRY Normal3sv(const GLshort *v)
++{
++ GL_CALL(Normal3sv)(v);
++}
++
++static void GLAPIENTRY Normal3iv(const GLint *v)
++{
++ GL_CALL(Normal3iv)(v);
++}
++
++static void GLAPIENTRY Normal3fv(const GLfloat *v)
++{
++ GL_CALL(Normal3fv)(v);
++}
++
++static void GLAPIENTRY Normal3dv(const GLdouble *v)
++{
++ GL_CALL(Normal3dv)(v);
++}
++
++static const array_func NormalFuncs[8] = {
++ (array_func) Normal3bv,
+ 0,
+- (array_func)glNormal3sv,
++ (array_func) Normal3sv,
+ 0,
+- (array_func)glNormal3iv,
++ (array_func) Normal3iv,
+ 0,
+- (array_func)glNormal3fv,
+- (array_func)glNormal3dv,
++ (array_func) Normal3fv,
++ (array_func) Normal3dv,
+ };
+
+-
+ /* Wrapper functions in case glSecondaryColor*EXT doesn't exist */
+ static void GLAPIENTRY SecondaryColor3bvEXT(const GLbyte *c)
+ {
+@@ -178,7 +373,7 @@
+ GL_CALL(SecondaryColor3dvEXT)(c);
+ }
+
+-static array_func SecondaryColorFuncs[8] = {
++static const array_func SecondaryColorFuncs[8] = {
+ (array_func) SecondaryColor3bvEXT,
+ (array_func) SecondaryColor3ubvEXT,
+ (array_func) SecondaryColor3svEXT,
+@@ -201,7 +396,7 @@
+ GL_CALL(FogCoorddvEXT)(f);
+ }
+
+-static array_func FogCoordFuncs[8] = {
++static const array_func FogCoordFuncs[8] = {
+ 0,
+ 0,
+ 0,
+@@ -212,7 +407,6 @@
+ (array_func) FogCoorddvEXT
+ };
+
+-
+ /**********************************************************************/
+
+ /* GL_BYTE attributes */
+@@ -549,7 +743,7 @@
+ /*
+ * Array [size][type] of VertexAttrib functions
+ */
+-static attrib_func AttribFuncs[2][4][8] = {
++static const attrib_func AttribFuncs[2][4][8] = {
+ {
+ /* non-normalized */
+ {
+@@ -646,6 +840,11 @@
+ }
+ };
+
++static void GLAPIENTRY EdgeFlagv(const GLboolean *flag)
++{
++ GL_CALL(EdgeFlagv)(flag);
++}
++
+ /**********************************************************************/
+
+
+@@ -693,7 +892,7 @@
+ }
+ if (ctx->Array.EdgeFlag.Enabled) {
+ aa->array = &ctx->Array.EdgeFlag;
+- aa->func = (array_func) glEdgeFlagv;
++ aa->func = (array_func) EdgeFlagv;
+ aa++;
+ }
+ if (ctx->Array.Normal.Enabled) {
+Index: xc/extras/Mesa/src/mesa/main/api_loopback.c
+diff -u xc/extras/Mesa/src/mesa/main/api_loopback.c:1.1.1.1 xc/extras/Mesa/src/mesa/main/api_loopback.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/main/api_loopback.c:1.1.1.1 Wed Jun 16 09:19:08 2004
++++ xc/extras/Mesa/src/mesa/main/api_loopback.c Wed Dec 15 01:51:02 2004
+@@ -6,7 +6,7 @@
+
+ /*
+ * Mesa 3-D graphics library
+- * Version: 6.1
++ * Version: 6.3
+ *
+ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+@@ -1066,7 +1066,7 @@
+ static void GLAPIENTRY
+ loopback_VertexAttrib3sNV(GLuint index, GLshort x, GLshort y, GLshort z)
+ {
+- ATTRIB3(index, (GLfloat) x, y, z);
++ ATTRIB3(index, (GLfloat) x, (GLfloat) y, (GLfloat) z);
+ }
+
+ static void GLAPIENTRY
+@@ -1139,7 +1139,7 @@
+ static void GLAPIENTRY
+ loopback_VertexAttrib3svNV(GLuint index, const GLshort *v)
+ {
+- ATTRIB2(index, (GLfloat) v[0], (GLfloat) v[1]);
++ ATTRIB3(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]);
+ }
+
+ static void GLAPIENTRY
+Index: xc/extras/Mesa/src/mesa/main/api_noop.c
+diff -u xc/extras/Mesa/src/mesa/main/api_noop.c:1.1.1.1 xc/extras/Mesa/src/mesa/main/api_noop.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/main/api_noop.c:1.1.1.1 Wed Jun 16 09:19:08 2004
++++ xc/extras/Mesa/src/mesa/main/api_noop.c Wed Dec 15 01:51:02 2004
+@@ -568,6 +568,7 @@
+ */
+ void GLAPIENTRY _mesa_noop_Begin( GLenum mode )
+ {
++ (void) mode;
+ }
+
+
+Index: xc/extras/Mesa/src/mesa/main/attrib.c
+diff -u xc/extras/Mesa/src/mesa/main/attrib.c:1.1.1.1 xc/extras/Mesa/src/mesa/main/attrib.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/main/attrib.c:1.1.1.1 Wed Jun 16 09:19:09 2004
++++ xc/extras/Mesa/src/mesa/main/attrib.c Wed Dec 15 01:51:02 2004
+@@ -1,6 +1,6 @@
+ /*
+ * Mesa 3-D graphics library
+- * Version: 6.1
++ * Version: 6.2
+ *
+ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+@@ -1017,6 +1017,8 @@
+ _mesa_set_enable(ctx, GL_POINT_SPRITE_NV,point->PointSprite);
+ _mesa_PointParameteriNV(GL_POINT_SPRITE_R_MODE_NV,
+ ctx->Point.SpriteRMode);
++ _mesa_PointParameterfEXT(GL_POINT_SPRITE_COORD_ORIGIN,
++ (GLfloat)ctx->Point.SpriteOrigin);
+ }
+ }
+ break;
+Index: xc/extras/Mesa/src/mesa/main/bufferobj.c
+diff -u xc/extras/Mesa/src/mesa/main/bufferobj.c:1.1.1.1 xc/extras/Mesa/src/mesa/main/bufferobj.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/main/bufferobj.c:1.1.1.1 Wed Jun 16 09:19:09 2004
++++ xc/extras/Mesa/src/mesa/main/bufferobj.c Wed Dec 15 01:51:02 2004
+@@ -1,6 +1,6 @@
+ /*
+ * Mesa 3-D graphics library
+- * Version: 6.1
++ * Version: 6.2
+ *
+ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+@@ -113,17 +113,17 @@
+ }
+
+ bufObj = buffer_object_get_target( ctx, target, str );
+- if ( bufObj == NULL ) {
++ if (!bufObj || bufObj->Name == 0) {
+ return NULL;
+ }
+
+- if ( (GLuint)(offset + size) > bufObj->Size ) {
++ if ((GLuint) (offset + size) > bufObj->Size) {
+ _mesa_error(ctx, GL_INVALID_VALUE,
+ "%s(size + offset > buffer size)", str);
+ return NULL;
+ }
+
+- if ( bufObj->Pointer != NULL ) {
++ if (bufObj->Pointer) {
+ _mesa_error(ctx, GL_INVALID_OPERATION, "%s", str);
+ return NULL;
+ }
+@@ -142,6 +142,9 @@
+ _mesa_new_buffer_object( GLcontext *ctx, GLuint name, GLenum target )
+ {
+ struct gl_buffer_object *obj;
++
++ (void) ctx;
++
+ obj = MALLOC_STRUCT(gl_buffer_object);
+ _mesa_initialize_buffer_object(obj, name, target);
+ return obj;
+@@ -157,6 +160,8 @@
+ void
+ _mesa_delete_buffer_object( GLcontext *ctx, struct gl_buffer_object *bufObj )
+ {
++ (void) ctx;
++
+ if (bufObj->Data)
+ _mesa_free(bufObj->Data);
+ _mesa_free(bufObj);
+@@ -170,6 +175,8 @@
+ _mesa_initialize_buffer_object( struct gl_buffer_object *obj,
+ GLuint name, GLenum target )
+ {
++ (void) target;
++
+ _mesa_bzero(obj, sizeof(struct gl_buffer_object));
+ obj->RefCount = 1;
+ obj->Name = name;
+@@ -231,15 +238,15 @@
+ {
+ void * new_data;
+
+- (void) target;
++ (void) ctx; (void) target;
+
+ new_data = _mesa_realloc( bufObj->Data, bufObj->Size, size );
+- if ( new_data != NULL ) {
++ if (new_data) {
+ bufObj->Data = (GLubyte *) new_data;
+ bufObj->Size = size;
+ bufObj->Usage = usage;
+
+- if ( data != NULL ) {
++ if (data) {
+ _mesa_memcpy( bufObj->Data, data, size );
+ }
+ }
+@@ -269,8 +276,9 @@
+ GLsizeiptrARB size, const GLvoid * data,
+ struct gl_buffer_object * bufObj )
+ {
+- if ( (bufObj->Data != NULL)
+- && ((GLuint)(size + offset) <= bufObj->Size) ) {
++ (void) ctx; (void) target;
++
++ if (bufObj->Data && ((GLuint) (size + offset) <= bufObj->Size)) {
+ _mesa_memcpy( (GLubyte *) bufObj->Data + offset, data, size );
+ }
+ }
+@@ -299,8 +307,9 @@
+ GLsizeiptrARB size, GLvoid * data,
+ struct gl_buffer_object * bufObj )
+ {
+- if ( (bufObj->Data != NULL)
+- && ((GLuint)(size + offset) <= bufObj->Size) ) {
++ (void) ctx; (void) target;
++
++ if (bufObj->Data && ((GLuint) (size + offset) <= bufObj->Size)) {
+ _mesa_memcpy( data, (GLubyte *) bufObj->Data + offset, size );
+ }
+ }
+@@ -326,6 +335,7 @@
+ _mesa_buffer_map( GLcontext *ctx, GLenum target, GLenum access,
+ struct gl_buffer_object * bufObj )
+ {
++ (void) ctx; (void) target; (void) access;
+ return bufObj->Data;
+ }
+
+@@ -371,7 +381,6 @@
+ * glGetTexImage, etc) we call this function to check that we're not
+ * going to read out of bounds.
+ *
+- * \param ctx the rendering context
+ * \param width width of image to read/write
+ * \param height height of image to read/write
+ * \param depth depth of image to read/write
+@@ -432,13 +441,13 @@
+ ASSERT_OUTSIDE_BEGIN_END(ctx);
+
+ oldBufObj = buffer_object_get_target( ctx, target, "BindBufferARB" );
+- if ( (oldBufObj != NULL) && (oldBufObj->Name == buffer) )
++ if (oldBufObj && oldBufObj->Name == buffer)
+ return; /* rebinding the same buffer object- no change */
+
+ /*
+ * Get pointer to new buffer object (newBufObj)
+ */
+- if ( buffer == 0 ) {
++ if (buffer == 0) {
+ /* The spec says there's not a buffer object named 0, but we use
+ * one internally because it simplifies things.
+ */
+@@ -479,10 +488,10 @@
+ }
+
+ /* Pass BindBuffer call to device driver */
+- if ( (ctx->Driver.BindBuffer != NULL) && (newBufObj != NULL) )
++ if (ctx->Driver.BindBuffer && newBufObj)
+ (*ctx->Driver.BindBuffer)( ctx, target, newBufObj );
+
+- if ( oldBufObj != NULL ) {
++ if (oldBufObj) {
+ oldBufObj->RefCount--;
+ assert(oldBufObj->RefCount >= 0);
+ if (oldBufObj->RefCount == 0) {
+@@ -499,7 +508,7 @@
+ * Delete a set of buffer objects.
+ *
+ * \param n Number of buffer objects to delete.
+- * \param buffer Array of \c n buffer object IDs.
++ * \param ids Array of \c n buffer object IDs.
+ */
+ void GLAPIENTRY
+ _mesa_DeleteBuffersARB(GLsizei n, const GLuint *ids)
+@@ -528,41 +537,50 @@
+ if (ctx->Array.Vertex.BufferObj == bufObj) {
+ bufObj->RefCount--;
+ ctx->Array.Vertex.BufferObj = ctx->Array.NullBufferObj;
++ ctx->Array.NullBufferObj->RefCount++;
+ }
+ if (ctx->Array.Normal.BufferObj == bufObj) {
+ bufObj->RefCount--;
+ ctx->Array.Normal.BufferObj = ctx->Array.NullBufferObj;
++ ctx->Array.NullBufferObj->RefCount++;
+ }
+ if (ctx->Array.Color.BufferObj == bufObj) {
+ bufObj->RefCount--;
+ ctx->Array.Color.BufferObj = ctx->Array.NullBufferObj;
++ ctx->Array.NullBufferObj->RefCount++;
+ }
+ if (ctx->Array.SecondaryColor.BufferObj == bufObj) {
+ bufObj->RefCount--;
+ ctx->Array.SecondaryColor.BufferObj = ctx->Array.NullBufferObj;
++ ctx->Array.NullBufferObj->RefCount++;
+ }
+ if (ctx->Array.FogCoord.BufferObj == bufObj) {
+ bufObj->RefCount--;
+ ctx->Array.FogCoord.BufferObj = ctx->Array.NullBufferObj;
++ ctx->Array.NullBufferObj->RefCount++;
+ }
+ if (ctx->Array.Index.BufferObj == bufObj) {
+ bufObj->RefCount--;
+ ctx->Array.Index.BufferObj = ctx->Array.NullBufferObj;
++ ctx->Array.NullBufferObj->RefCount++;
+ }
+ if (ctx->Array.EdgeFlag.BufferObj == bufObj) {
+ bufObj->RefCount--;
+ ctx->Array.EdgeFlag.BufferObj = ctx->Array.NullBufferObj;
++ ctx->Array.NullBufferObj->RefCount++;
+ }
+ for (j = 0; j < MAX_TEXTURE_UNITS; j++) {
+ if (ctx->Array.TexCoord[j].BufferObj == bufObj) {
+ bufObj->RefCount--;
+ ctx->Array.TexCoord[j].BufferObj = ctx->Array.NullBufferObj;
++ ctx->Array.NullBufferObj->RefCount++;
+ }
+ }
+ for (j = 0; j < VERT_ATTRIB_MAX; j++) {
+ if (ctx->Array.VertexAttrib[j].BufferObj == bufObj) {
+ bufObj->RefCount--;
+ ctx->Array.VertexAttrib[j].BufferObj = ctx->Array.NullBufferObj;
++ ctx->Array.NullBufferObj->RefCount++;
+ }
+ }
+
+@@ -581,8 +599,11 @@
+ }
+
+ /* decrement refcount and delete if <= 0 */
+- bufObj->DeletePending = GL_TRUE;
+- bufObj->RefCount--;
++ if (!bufObj->DeletePending) {
++ bufObj->DeletePending = GL_TRUE;
++ bufObj->RefCount--;
++ }
++
+ if (bufObj->RefCount <= 0) {
+ /* buffer should not be bound anymore! */
+ ASSERT(ctx->Array.ArrayBufferObj != bufObj);
+@@ -619,7 +640,7 @@
+ return;
+ }
+
+- if ( buffer == NULL ) {
++ if (!buffer) {
+ return;
+ }
+
+@@ -704,7 +725,7 @@
+ }
+
+ bufObj = buffer_object_get_target( ctx, target, "BufferDataARB" );
+- if ( bufObj == NULL ) {
++ if (!bufObj || bufObj->Name ==0) {
+ _mesa_error(ctx, GL_INVALID_OPERATION, "glBufferDataARB" );
+ return;
+ }
+@@ -790,19 +811,19 @@
+ }
+
+ bufObj = buffer_object_get_target( ctx, target, "MapBufferARB" );
+- if ( bufObj == NULL ) {
++ if (!bufObj || bufObj->Name == 0) {
+ _mesa_error(ctx, GL_INVALID_OPERATION, "glMapBufferARB" );
+ return NULL;
+ }
+
+- if ( bufObj->Pointer != NULL ) {
++ if (bufObj->Pointer) {
+ _mesa_error(ctx, GL_INVALID_OPERATION, "glMapBufferARB(already mapped)");
+ return NULL;
+ }
+
+ ASSERT(ctx->Driver.MapBuffer);
+ bufObj->Pointer = (*ctx->Driver.MapBuffer)( ctx, target, access, bufObj );
+- if ( bufObj->Pointer == NULL ) {
++ if (!bufObj->Pointer) {
+ _mesa_error(ctx, GL_OUT_OF_MEMORY, "glMapBufferARB(access)");
+ }
+
+@@ -821,17 +842,17 @@
+ ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, GL_FALSE);
+
+ bufObj = buffer_object_get_target( ctx, target, "UnmapBufferARB" );
+- if ( bufObj == NULL ) {
++ if (!bufObj || bufObj->Name == 0) {
+ _mesa_error(ctx, GL_INVALID_OPERATION, "glUnmapBufferARB" );
+ return GL_FALSE;
+ }
+
+- if ( bufObj->Pointer == NULL ) {
++ if (!bufObj->Pointer) {
+ _mesa_error(ctx, GL_INVALID_OPERATION, "glUnmapBufferARB");
+ return GL_FALSE;
+ }
+
+- if ( ctx->Driver.UnmapBuffer != NULL ) {
++ if (ctx->Driver.UnmapBuffer) {
+ status = (*ctx->Driver.UnmapBuffer)( ctx, target, bufObj );
+ }
+
+@@ -850,7 +871,7 @@
+ ASSERT_OUTSIDE_BEGIN_END(ctx);
+
+ bufObj = buffer_object_get_target( ctx, target, "GetBufferParameterivARB" );
+- if (!bufObj) {
++ if (!bufObj || bufObj->Name == 0) {
+ _mesa_error(ctx, GL_INVALID_OPERATION, "GetBufferParameterivARB" );
+ return;
+ }
+@@ -888,7 +909,7 @@
+ }
+
+ bufObj = buffer_object_get_target( ctx, target, "GetBufferPointervARB" );
+- if ( bufObj == NULL ) {
++ if (!bufObj || bufObj->Name == 0) {
+ _mesa_error(ctx, GL_INVALID_OPERATION, "glGetBufferPointervARB" );
+ return;
+ }
+Index: xc/extras/Mesa/src/mesa/main/colormac.h
+diff -u xc/extras/Mesa/src/mesa/main/colormac.h:1.1.1.2 xc/extras/Mesa/src/mesa/main/colormac.h:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/main/colormac.h:1.1.1.2 Thu Jul 22 06:53:01 2004
++++ xc/extras/Mesa/src/mesa/main/colormac.h Wed Dec 15 01:51:02 2004
+@@ -221,5 +221,7 @@
+ #define PACK_COLOR_233( B, G, R ) \
+ (((B) & 0xc0) | (((G) & 0xe0) >> 2) | (((R) & 0xe0) >> 5))
+
++/*@}*/
++
+
+ #endif /* COLORMAC_H */
+Index: xc/extras/Mesa/src/mesa/main/colortab.c
+diff -u xc/extras/Mesa/src/mesa/main/colortab.c:1.1.1.1 xc/extras/Mesa/src/mesa/main/colortab.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/main/colortab.c:1.1.1.1 Wed Jun 16 09:19:10 2004
++++ xc/extras/Mesa/src/mesa/main/colortab.c Wed Dec 15 01:51:02 2004
+@@ -175,11 +175,11 @@
+ * Update/replace all or part of a color table. Helper function
+ * used by _mesa_ColorTable() and _mesa_ColorSubTable().
+ * The table->Table buffer should already be allocated.
+- * \param start - first entry to update
+- * \param count - number of entries to update
+- * \param format - format of user-provided table data
+- * \param type - datatype of user-provided table data
+- * \param data - user-provided table data
++ * \param start first entry to update
++ * \param count number of entries to update
++ * \param format format of user-provided table data
++ * \param type datatype of user-provided table data
++ * \param data user-provided table data
+ * \param [rgba]Scale - RGBA scale factors
+ * \param [rgba]Bias - RGBA bias factors
+ */
+Index: xc/extras/Mesa/src/mesa/main/config.h
+diff -u xc/extras/Mesa/src/mesa/main/config.h:1.1.1.1 xc/extras/Mesa/src/mesa/main/config.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/main/config.h:1.1.1.1 Wed Jun 16 09:19:20 2004
++++ xc/extras/Mesa/src/mesa/main/config.h Wed Dec 15 01:51:02 2004
+@@ -201,8 +201,6 @@
+ #define MAX_PROGRAM_MATRIX_STACK_DEPTH 4
+ /*@}*/
+
+-/*@}*/
+-
+
+ /**
+ * \name Mesa-specific parameters
+Index: xc/extras/Mesa/src/mesa/main/context.c
+diff -u xc/extras/Mesa/src/mesa/main/context.c:1.1.1.3 xc/extras/Mesa/src/mesa/main/context.c:1.1.1.3.2.1
+--- xc/extras/Mesa/src/mesa/main/context.c:1.1.1.3 Sat Aug 28 04:27:58 2004
++++ xc/extras/Mesa/src/mesa/main/context.c Wed Dec 15 01:51:02 2004
+@@ -30,18 +30,23 @@
+
+
+ /**
+- * \mainpage Mesa Core Module
++ * \mainpage Mesa Main Module
+ *
+- * \section CoreIntroduction Introduction
++ * \section MainIntroduction Introduction
+ *
+- * The Mesa core module consists of all the top-level files in the src
+- * directory. The core module basically takes care of API dispatch,
+- * and OpenGL state management.
+- *
+- * For example, calls to glPolygonMode() are routed to _mesa_PolygonMode()
+- * which updates the state related to polygonmode. Furthermore, dirty
+- * state flags related to polygon mode are set and if the device driver
+- * implements a special routine for PolygonMode, it will be called.
++ * The Mesa Main module consists of all the files in the main/ directory.
++ * Among the features of this module are:
++ * <UL>
++ * <LI> Structures to represent most GL state </LI>
++ * <LI> State set/get functions </LI>
++ * <LI> Display lists </LI>
++ * <LI> Texture unit, object and image handling </LI>
++ * <LI> Matrix and attribute stacks </LI>
++ * </UL>
++ *
++ * Other modules are responsible for API dispatch, vertex transformation,
++ * point/line/triangle setup, rasterization, vertex array caching,
++ * vertex/fragment programs/shaders, etc.
+ *
+ *
+ * \section AboutDoxygen About Doxygen
+@@ -192,6 +197,7 @@
+ _mesa_loseCurrent(__GLcontext *gc)
+ {
+ /* XXX unbind context from thread */
++ (void) gc;
+ return GL_TRUE;
+ }
+
+@@ -212,6 +218,7 @@
+ _mesa_makeCurrent(__GLcontext *gc)
+ {
+ /* XXX bind context to thread */
++ (void) gc;
+ return GL_TRUE;
+ }
+
+@@ -267,6 +274,7 @@
+ GLboolean
+ _mesa_forceCurrent(__GLcontext *gc)
+ {
++ (void) gc;
+ return GL_TRUE;
+ }
+
+@@ -302,6 +310,7 @@
+ _mesa_notifyDestroy(__GLcontext *gc)
+ {
+ /* Unbind from it. */
++ (void) gc;
+ }
+
+ /**
+@@ -322,6 +331,7 @@
+ struct __GLdispatchStateRec *
+ _mesa_dispatchExec(__GLcontext *gc)
+ {
++ (void) gc;
+ return NULL;
+ }
+
+@@ -329,12 +339,14 @@
+ void
+ _mesa_beginDispatchOverride(__GLcontext *gc)
+ {
++ (void) gc;
+ }
+
+ /** No-op */
+ void
+ _mesa_endDispatchOverride(__GLcontext *gc)
+ {
++ (void) gc;
+ }
+
+ /**
+@@ -372,6 +384,8 @@
+ exports->dispatchExec = _mesa_dispatchExec;
+ exports->beginDispatchOverride = _mesa_beginDispatchOverride;
+ exports->endDispatchOverride = _mesa_endDispatchOverride;
++#else
++ (void) exports;
+ #endif
+ }
+
+@@ -759,6 +773,7 @@
+ one_time_init( GLcontext *ctx )
+ {
+ static GLboolean alreadyCalled = GL_FALSE;
++ (void) ctx;
+ _glthread_LOCK_MUTEX(OneTimeLock);
+ if (!alreadyCalled) {
+ GLuint i;
+@@ -1597,7 +1612,7 @@
+ * \param mask bitwise OR of GL_*_BIT flags
+ *
+ * According to the bits specified in \p mask, copies the corresponding
+- * attributes from \p src into \dst. For many of the attributes a simple \c
++ * attributes from \p src into \p dst. For many of the attributes a simple \c
+ * memcpy is not enough due to the existence of internal pointers in their data
+ * structures.
+ */
+Index: xc/extras/Mesa/src/mesa/main/convolve.c
+diff -u xc/extras/Mesa/src/mesa/main/convolve.c:1.1.1.1 xc/extras/Mesa/src/mesa/main/convolve.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/main/convolve.c:1.1.1.1 Wed Jun 16 09:19:20 2004
++++ xc/extras/Mesa/src/mesa/main/convolve.c Wed Dec 15 01:51:02 2004
+@@ -1,6 +1,6 @@
+ /*
+ * Mesa 3-D graphics library
+- * Version: 6.1
++ * Version: 6.2
+ *
+ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+@@ -834,7 +834,7 @@
+ }
+
+ /* unpack column filter */
+- _mesa_unpack_color_span_float(ctx, width, GL_RGBA,
++ _mesa_unpack_color_span_float(ctx, height, GL_RGBA,
+ &ctx->Separable2D.Filter[colStart],
+ format, type, column, &ctx->Unpack,
+ 0); /* transferOps */
+@@ -844,7 +844,7 @@
+ const GLfloat *scale = ctx->Pixel.ConvolutionFilterScale[2];
+ const GLfloat *bias = ctx->Pixel.ConvolutionFilterBias[2];
+ GLint i;
+- for (i = 0; i < width; i++) {
++ for (i = 0; i < height; i++) {
+ GLfloat r = ctx->Separable2D.Filter[i * 4 + 0 + colStart];
+ GLfloat g = ctx->Separable2D.Filter[i * 4 + 1 + colStart];
+ GLfloat b = ctx->Separable2D.Filter[i * 4 + 2 + colStart];
+Index: xc/extras/Mesa/src/mesa/main/debug.c
+diff -u xc/extras/Mesa/src/mesa/main/debug.c:1.1.1.1 xc/extras/Mesa/src/mesa/main/debug.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/main/debug.c:1.1.1.1 Wed Jun 16 09:19:11 2004
++++ xc/extras/Mesa/src/mesa/main/debug.c Wed Dec 15 01:51:02 2004
+@@ -180,6 +180,8 @@
+ */
+ if (_mesa_strstr(debug, "flush"))
+ MESA_DEBUG_FLAGS |= DEBUG_ALWAYS_FLUSH;
++#else
++ (void) debug;
+ #endif
+ }
+
+Index: xc/extras/Mesa/src/mesa/main/descrip.mms
+diff -u xc/extras/Mesa/src/mesa/main/descrip.mms:1.1.1.2 xc/extras/Mesa/src/mesa/main/descrip.mms:1.1.1.2.2.1
+--- xc/extras/Mesa/src/mesa/main/descrip.mms:1.1.1.2 Sat Aug 28 04:27:58 2004
++++ xc/extras/Mesa/src/mesa/main/descrip.mms Wed Dec 15 01:51:02 2004
+@@ -2,11 +2,11 @@
+ # contributed by Jouk Jansen joukj@hrem.stm.tudelft.nl
+ # Last revision : 18 August 2004
+
+-first
++.first
+ define gl [---.include.gl]
+ define math [-.math]
+
+-include [---]mms-config.
++.include [---]mms-config.
+
+ ##### MACROS #####
+
+Index: xc/extras/Mesa/src/mesa/main/dlist.c
+diff -u xc/extras/Mesa/src/mesa/main/dlist.c:1.1.1.2 xc/extras/Mesa/src/mesa/main/dlist.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/main/dlist.c:1.1.1.2 Thu Jul 22 06:52:51 2004
++++ xc/extras/Mesa/src/mesa/main/dlist.c Wed Dec 15 01:51:02 2004
+@@ -165,6 +165,7 @@
+ * integer values starting at 0 is very important, see InstSize array usage)
+ */
+ typedef enum {
++ OPCODE_INVALID = -1, /* Force signed enum */
+ OPCODE_ACCUM,
+ OPCODE_ALPHA_FUNC,
+ OPCODE_BIND_TEXTURE,
+@@ -7659,7 +7660,7 @@
+ Node *n;
+ GLboolean done;
+
+- if (!glIsList(list)) {
++ if (!GL_CALL(IsList)(list)) {
+ _mesa_printf("%u is not a display list ID\n", list);
+ return;
+ }
+Index: xc/extras/Mesa/src/mesa/main/extensions.c
+diff -u xc/extras/Mesa/src/mesa/main/extensions.c:1.1.1.2 xc/extras/Mesa/src/mesa/main/extensions.c:1.1.1.2.2.1
+--- xc/extras/Mesa/src/mesa/main/extensions.c:1.1.1.2 Sat Aug 28 04:28:00 2004
++++ xc/extras/Mesa/src/mesa/main/extensions.c Wed Dec 15 01:51:02 2004
+@@ -1,6 +1,6 @@
+ /*
+ * Mesa 3-D graphics library
+- * Version: 6.1
++ * Version: 6.2
+ *
+ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+@@ -65,6 +65,7 @@
+ { OFF, "GL_MESAX_texture_float", F(ARB_texture_float) },
+ { OFF, "GL_ARB_texture_mirrored_repeat", F(ARB_texture_mirrored_repeat)},
+ { OFF, "GL_ARB_texture_non_power_of_two", F(ARB_texture_non_power_of_two)},
++ { OFF, "GL_ARB_texture_rectangle", F(NV_texture_rectangle) },
+ { ON, "GL_ARB_transpose_matrix", F(ARB_transpose_matrix) },
+ { OFF, "GL_ARB_vertex_buffer_object", F(ARB_vertex_buffer_object) },
+ { OFF, "GL_ARB_vertex_program", F(ARB_vertex_program) },
+@@ -325,7 +326,6 @@
+ {
+ ctx->Extensions.ARB_occlusion_query = GL_TRUE;
+ ctx->Extensions.ARB_vertex_buffer_object = GL_TRUE;
+- ctx->Extensions.ARB_texture_non_power_of_two = GL_TRUE;
+ ctx->Extensions.EXT_shadow_funcs = GL_TRUE;
+ }
+
+Index: xc/extras/Mesa/src/mesa/main/get.c
+diff -u xc/extras/Mesa/src/mesa/main/get.c:1.1.1.1 xc/extras/Mesa/src/mesa/main/get.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/main/get.c:1.1.1.1 Wed Jun 16 09:19:13 2004
++++ xc/extras/Mesa/src/mesa/main/get.c Wed Dec 15 01:51:02 2004
+@@ -5,7 +5,7 @@
+
+ /*
+ * Mesa 3-D graphics library
+- * Version: 6.1
++ * Version: 6.2
+ *
+ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+@@ -1390,6 +1390,10 @@
+ CHECK_EXTENSION_B(NV_point_sprite, pname);
+ *params = ENUM_TO_BOOL(ctx->Point.SpriteRMode);
+ break;
++ case GL_POINT_SPRITE_COORD_ORIGIN:
++ CHECK_EXTENSION_B(ARB_point_sprite, pname);
++ *params = ENUM_TO_BOOL(ctx->Point.SpriteOrigin);
++ break;
+
+ /* GL_SGIS_generate_mipmap */
+ case GL_GENERATE_MIPMAP_HINT_SGIS:
+@@ -1620,6 +1624,14 @@
+ break;
+ #endif
+
++#if FEATURE_ARB_vertex_program
++ /* GL_NV_vertex_program and GL_ARB_fragment_program define others */
++ case GL_MAX_VERTEX_ATTRIBS_ARB:
++ CHECK_EXTENSION_B(ARB_vertex_program, pname);
++ *params = (ctx->Const.MaxVertexProgramAttribs > 0) ? GL_TRUE : GL_FALSE;
++ break;
++#endif
++
+ #if FEATURE_ARB_fragment_program
+ case GL_FRAGMENT_PROGRAM_ARB:
+ CHECK_EXTENSION_B(ARB_fragment_program, pname);
+@@ -2942,6 +2954,10 @@
+ CHECK_EXTENSION_D(NV_point_sprite, pname);
+ *params = (GLdouble) ctx->Point.SpriteRMode;
+ break;
++ case GL_POINT_SPRITE_COORD_ORIGIN:
++ CHECK_EXTENSION_D(ARB_point_sprite, pname);
++ *params = (GLdouble) ctx->Point.SpriteOrigin;
++ break;
+
+ /* GL_SGIS_generate_mipmap */
+ case GL_GENERATE_MIPMAP_HINT_SGIS:
+@@ -3170,6 +3186,14 @@
+ break;
+ #endif
+
++#if FEATURE_ARB_vertex_program
++ /* GL_NV_vertex_program and GL_ARB_fragment_program define others */
++ case GL_MAX_VERTEX_ATTRIBS_ARB:
++ CHECK_EXTENSION_D(ARB_vertex_program, pname);
++ *params = (GLdouble) ctx->Const.MaxVertexProgramAttribs;
++ break;
++#endif
++
+ #if FEATURE_ARB_fragment_program
+ case GL_FRAGMENT_PROGRAM_ARB:
+ CHECK_EXTENSION_D(ARB_fragment_program, pname);
+@@ -4468,6 +4492,10 @@
+ CHECK_EXTENSION_F(NV_point_sprite, pname);
+ *params = (GLfloat) ctx->Point.SpriteRMode;
+ break;
++ case GL_POINT_SPRITE_COORD_ORIGIN:
++ CHECK_EXTENSION_F(ARB_point_sprite, pname);
++ *params = (GLfloat) ctx->Point.SpriteOrigin;
++ break;
+
+ /* GL_SGIS_generate_mipmap */
+ case GL_GENERATE_MIPMAP_HINT_SGIS:
+@@ -4696,6 +4724,14 @@
+ break;
+ #endif
+
++#if FEATURE_ARB_vertex_program
++ /* GL_NV_vertex_program and GL_ARB_fragment_program define others */
++ case GL_MAX_VERTEX_ATTRIBS_ARB:
++ CHECK_EXTENSION_F(ARB_vertex_program, pname);
++ *params = (GLfloat) ctx->Const.MaxVertexProgramAttribs;
++ break;
++#endif
++
+ #if FEATURE_ARB_fragment_program
+ case GL_FRAGMENT_PROGRAM_ARB:
+ CHECK_EXTENSION_F(ARB_fragment_program, pname);
+@@ -6032,6 +6068,10 @@
+ CHECK_EXTENSION_I(NV_point_sprite, pname);
+ *params = (GLint) ctx->Point.SpriteRMode;
+ break;
++ case GL_POINT_SPRITE_COORD_ORIGIN:
++ CHECK_EXTENSION_I(ARB_point_sprite, pname);
++ *params = (GLint) ctx->Point.SpriteOrigin;
++ break;
+
+ /* GL_SGIS_generate_mipmap */
+ case GL_GENERATE_MIPMAP_HINT_SGIS:
+@@ -6260,6 +6300,14 @@
+ break;
+ #endif
+
++#if FEATURE_ARB_vertex_program
++ /* GL_NV_vertex_program and GL_ARB_fragment_program define others */
++ case GL_MAX_VERTEX_ATTRIBS_ARB:
++ CHECK_EXTENSION_I(ARB_vertex_program, pname);
++ *params = (GLint) ctx->Const.MaxVertexProgramAttribs;
++ break;
++#endif
++
+ #if FEATURE_ARB_fragment_program
+ case GL_FRAGMENT_PROGRAM_ARB:
+ CHECK_EXTENSION_I(ARB_fragment_program, pname);
+@@ -6390,7 +6438,7 @@
+ _mesa_error(ctx, GL_INVALID_ENUM, "glGetPointerv");
+ return;
+ }
+- *params = (GLvoid *) ctx->FragmentProgram.Callback;
++ *params = *(GLvoid **) &ctx->FragmentProgram.Callback;
+ break;
+ case GL_FRAGMENT_PROGRAM_CALLBACK_DATA_MESA:
+ if (!ctx->Extensions.MESA_program_debug) {
+@@ -6404,7 +6452,7 @@
+ _mesa_error(ctx, GL_INVALID_ENUM, "glGetPointerv");
+ return;
+ }
+- *params = (GLvoid *) ctx->VertexProgram.Callback;
++ *params = *(GLvoid **) &ctx->VertexProgram.Callback;
+ break;
+ case GL_VERTEX_PROGRAM_CALLBACK_DATA_MESA:
+ if (!ctx->Extensions.MESA_program_debug) {
+@@ -6484,7 +6532,6 @@
+ ctx->Extensions.SGIS_generate_mipmap) {
+ if (ctx->Extensions.ARB_occlusion_query &&
+ ctx->Extensions.ARB_vertex_buffer_object &&
+- ctx->Extensions.ARB_texture_non_power_of_two &&
+ ctx->Extensions.EXT_shadow_funcs) {
+ return (const GLubyte *) version_1_5;
+ }
+Index: xc/extras/Mesa/src/mesa/main/glheader.h
+diff -u xc/extras/Mesa/src/mesa/main/glheader.h:1.1.1.2 xc/extras/Mesa/src/mesa/main/glheader.h:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/main/glheader.h:1.1.1.2 Thu Jul 22 06:52:55 2004
++++ xc/extras/Mesa/src/mesa/main/glheader.h Wed Dec 15 01:51:02 2004
+@@ -20,7 +20,7 @@
+
+ /*
+ * Mesa 3-D graphics library
+- * Version: 6.1
++ * Version: 6.2
+ *
+ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+@@ -85,16 +85,18 @@
+ #endif
+
+ #if !defined(OPENSTEP) && (defined(__WIN32__) && !defined(__CYGWIN__)) && !defined(BUILD_FOR_SNAP)
+-# pragma warning( disable : 4068 ) /* unknown pragma */
+-# pragma warning( disable : 4710 ) /* function 'foo' not inlined */
+-# pragma warning( disable : 4711 ) /* function 'foo' selected for automatic inline expansion */
+-# pragma warning( disable : 4127 ) /* conditional expression is constant */
+-# if defined(MESA_MINWARN)
+-# pragma warning( disable : 4244 ) /* '=' : conversion from 'const double ' to 'float ', possible loss of data */
+-# pragma warning( disable : 4018 ) /* '<' : signed/unsigned mismatch */
+-# pragma warning( disable : 4305 ) /* '=' : truncation from 'const double ' to 'float ' */
+-# pragma warning( disable : 4550 ) /* 'function' undefined; assuming extern returning int */
+-# pragma warning( disable : 4761 ) /* integral size mismatch in argument; conversion supplied */
++# if !defined(__GNUC__) /* mingw environment */
++# pragma warning( disable : 4068 ) /* unknown pragma */
++# pragma warning( disable : 4710 ) /* function 'foo' not inlined */
++# pragma warning( disable : 4711 ) /* function 'foo' selected for automatic inline expansion */
++# pragma warning( disable : 4127 ) /* conditional expression is constant */
++# if defined(MESA_MINWARN)
++# pragma warning( disable : 4244 ) /* '=' : conversion from 'const double ' to 'float ', possible loss of data */
++# pragma warning( disable : 4018 ) /* '<' : signed/unsigned mismatch */
++# pragma warning( disable : 4305 ) /* '=' : truncation from 'const double ' to 'float ' */
++# pragma warning( disable : 4550 ) /* 'function' undefined; assuming extern returning int */
++# pragma warning( disable : 4761 ) /* integral size mismatch in argument; conversion supplied */
++# endif
+ # endif
+ # if defined(_MSC_VER) && defined(BUILD_GL32) /* tag specify we're building mesa as a DLL */
+ # define GLAPI __declspec(dllexport)
+@@ -211,24 +213,14 @@
+ #include <GL/internal/glcore.h>
+
+
+-/* XXX temporary hack */
+-#ifndef GL_PIXEL_PACK_BUFFER_EXT
+-#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB
+-#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC
+-#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED
+-#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF
+-#endif
+-
+-
+-/* XXX temporary hack */
++/* XXX temporary hack - remove when glext.h is updated */
+ #ifndef GL_ARB_half_float_pixel
+ #define GL_ARB_half_float_pixel 1
+ #define GL_HALF_FLOAT_ARB 0x140B
+ typedef GLushort GLhalfARB;
+ #endif
+
+-
+-/* XXX temporary hack */
++/* XXX temporary hack - remove when glext.h is updated */
+ #ifndef GL_ARB_texture_float
+ #define GL_ARB_texture_float 1
+ #define GL_TEXTURE_RED_TYPE_ARB 0x9000
+@@ -253,6 +245,12 @@
+ #define GL_LUMINANCE_ALPHA16F_ARB 0x881F
+ #endif
+
++/* XXX temporary hack - remove when glext.h is updated */
++#ifndef GL_POINT_SPRITE_COORD_ORIGIN
++#define GL_POINT_SPRITE_COORD_ORIGIN 0x10000
++#define GL_LOWER_LEFT 0x10001
++#define GL_UPPER_LEFT 0x10002
++#endif
+
+
+
+Index: xc/extras/Mesa/src/mesa/main/image.c
+diff -u xc/extras/Mesa/src/mesa/main/image.c:1.1.1.1 xc/extras/Mesa/src/mesa/main/image.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/main/image.c:1.1.1.1 Wed Jun 16 09:19:22 2004
++++ xc/extras/Mesa/src/mesa/main/image.c Wed Dec 15 01:51:02 2004
+@@ -3778,6 +3778,8 @@
+ GLenum srcType, const GLvoid *source,
+ const struct gl_pixelstore_attrib *srcPacking )
+ {
++ (void) srcPacking;
++
+ switch (srcType) {
+ case GL_BYTE:
+ {
+Index: xc/extras/Mesa/src/mesa/main/imports.c
+diff -u xc/extras/Mesa/src/mesa/main/imports.c:1.1.1.1 xc/extras/Mesa/src/mesa/main/imports.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/main/imports.c:1.1.1.1 Wed Jun 16 09:19:14 2004
++++ xc/extras/Mesa/src/mesa/main/imports.c Wed Dec 15 01:51:02 2004
+@@ -32,7 +32,7 @@
+
+ /*
+ * Mesa 3-D graphics library
+- * Version: 6.1
++ * Version: 6.2.1
+ *
+ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+@@ -58,6 +58,7 @@
+
+ #include "imports.h"
+ #include "context.h"
++#include "version.h"
+
+
+ #define MAXSTRING 4000 /* for vsnprintf() */
+@@ -536,7 +537,7 @@
+ GLhalfARB
+ _mesa_float_to_half(float val)
+ {
+- const int flt = *((int *) &val);
++ const int flt = *((int *) (void *) &val);
+ const int flt_m = flt & 0x7fffff;
+ const int flt_e = (flt >> 23) & 0xff;
+ const int flt_s = (flt >> 31) & 0x1;
+@@ -662,7 +663,7 @@
+ }
+
+ flt = (flt_s << 31) | (flt_e << 23) | flt_m;
+- result = *((float *) &flt);
++ result = *((float *) (void *) &flt);
+ return result;
+ }
+
+@@ -905,11 +906,11 @@
+ va_end( args );
+
+ #if defined(XFree86LOADER) && defined(IN_MODULE)
+- xf86fprintf(stderr, "Mesa implementation error: %s\n", str);
+- xf86fprintf(stderr, "Please report to the DRI project at dri.sourceforge.net\n");
++ xf86fprintf(stderr, "Mesa %s implementation error: %s\n", MESA_VERSION_STRING, str);
++ xf86fprintf(stderr, "Please report at bugzilla.freedesktop.org\n");
+ #else
+- fprintf(stderr, "Mesa implementation error: %s\n", str);
+- fprintf(stderr, "Please report to the Mesa bug database at www.mesa3d.org\n" );
++ fprintf(stderr, "Mesa %s implementation error: %s\n", MESA_VERSION_STRING, str);
++ fprintf(stderr, "Please report at bugzilla.freedesktop.org\n");
+ #endif
+ }
+
+@@ -1004,6 +1005,7 @@
+ {
+ char s[MAXSTRING];
+ va_list args;
++ (void) ctx;
+ va_start(args, fmtString);
+ vsnprintf(s, MAXSTRING, fmtString, args);
+ va_end(args);
+@@ -1094,6 +1096,7 @@
+ {
+ int r;
+ va_list args;
++ (void) gc;
+ va_start( args, fmt );
+ r = vsprintf( str, fmt, args );
+ va_end( args );
+@@ -1104,6 +1107,7 @@
+ static void * CAPI
+ default_fopen(__GLcontext *gc, const char *path, const char *mode)
+ {
++ (void) gc;
+ return fopen(path, mode);
+ }
+
+@@ -1111,6 +1115,7 @@
+ static int CAPI
+ default_fclose(__GLcontext *gc, void *stream)
+ {
++ (void) gc;
+ return fclose((FILE *) stream);
+ }
+
+@@ -1120,6 +1125,7 @@
+ {
+ int r;
+ va_list args;
++ (void) gc;
+ va_start( args, fmt );
+ r = vfprintf( (FILE *) stream, fmt, args );
+ va_end( args );
+@@ -1132,6 +1138,7 @@
+ static __GLdrawablePrivate *
+ default_GetDrawablePrivate(__GLcontext *gc)
+ {
++ (void) gc;
+ return NULL;
+ }
+
+Index: xc/extras/Mesa/src/mesa/main/imports.h
+diff -u xc/extras/Mesa/src/mesa/main/imports.h:1.4 xc/extras/Mesa/src/mesa/main/imports.h:1.4.2.1
+--- xc/extras/Mesa/src/mesa/main/imports.h:1.4 Wed Sep 1 19:29:50 2004
++++ xc/extras/Mesa/src/mesa/main/imports.h Wed Dec 15 01:51:02 2004
+@@ -1,6 +1,6 @@
+ /*
+ * Mesa 3-D graphics library
+- * Version: 6.1
++ * Version: 6.2
+ *
+ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+@@ -224,7 +224,7 @@
+ ***/
+ #if defined(__i386__) || defined(__386__) || defined(__sparc__) || \
+ defined(__s390x__) || defined(__powerpc__) || \
+- defined(__AMD64__) || defined(__amd64__) || \
++ defined(__amd64__) || \
+ defined(ia64) || defined(__ia64__) || \
+ defined(__hppa__) || defined(hpux) || \
+ defined(__mips) || defined(_MIPS_ARCH) || \
+@@ -378,7 +378,8 @@
+ return r;
+ }
+ #define IROUND(x) iround(x)
+-#elif defined(USE_X86_ASM) && defined(__GNUC__) && defined(__i386__)
++#elif defined(USE_X86_ASM) && defined(__GNUC__) && defined(__i386__) && \
++ (!defined(__BEOS__) || (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)))
+ static INLINE int iround(float f)
+ {
+ int r;
+@@ -556,7 +557,7 @@
+ ***/
+ #if defined(USE_IEEE) && !defined(DEBUG)
+ #define COPY_FLOAT( dst, src ) \
+- ((fi_type *) &(dst))->i = ((fi_type *) &(src))->i
++ ((fi_type *) &(dst))->i = ((fi_type *) (void *) &(src))->i
+ #else
+ #define COPY_FLOAT( dst, src ) (dst) = (src)
+ #endif
+Index: xc/extras/Mesa/src/mesa/main/light.c
+diff -u xc/extras/Mesa/src/mesa/main/light.c:1.1.1.1 xc/extras/Mesa/src/mesa/main/light.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/main/light.c:1.1.1.1 Wed Jun 16 09:19:14 2004
++++ xc/extras/Mesa/src/mesa/main/light.c Wed Dec 15 01:51:02 2004
+@@ -1129,6 +1129,7 @@
+ {
+ const GLuint oldneedeyecoords = ctx->_NeedEyeCoords;
+
++ (void) new_state;
+ ctx->_NeedEyeCoords = 0;
+
+ if (ctx->_ForceEyeCoords ||
+Index: xc/extras/Mesa/src/mesa/main/macros.h
+diff -u xc/extras/Mesa/src/mesa/main/macros.h:1.1.1.1 xc/extras/Mesa/src/mesa/main/macros.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/main/macros.h:1.1.1.1 Wed Jun 16 09:19:16 2004
++++ xc/extras/Mesa/src/mesa/main/macros.h Wed Dec 15 01:51:02 2004
+@@ -654,7 +654,4 @@
+ #define LEN_SQUARED_2FV( V ) ((V)[0]*(V)[0]+(V)[1]*(V)[1])
+
+
+-/*@}*/
+-
+-
+ #endif
+Index: xc/extras/Mesa/src/mesa/main/mtypes.h
+diff -u xc/extras/Mesa/src/mesa/main/mtypes.h:1.1.1.2 xc/extras/Mesa/src/mesa/main/mtypes.h:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/main/mtypes.h:1.1.1.2 Thu Jul 22 06:53:00 2004
++++ xc/extras/Mesa/src/mesa/main/mtypes.h Wed Dec 15 01:51:02 2004
+@@ -890,6 +890,7 @@
+ GLboolean PointSprite; /**< GL_NV_point_sprite / GL_NV_point_sprite */
+ GLboolean CoordReplace[MAX_TEXTURE_UNITS]; /**< GL_NV_point_sprite / GL_NV_point_sprite */
+ GLenum SpriteRMode; /**< GL_NV_point_sprite (only!) */
++ GLenum SpriteOrigin; /**< GL_ARB_point_sprite */
+ };
+
+
+@@ -1146,6 +1147,7 @@
+ struct gl_texture_object {
+ _glthread_Mutex Mutex; /**< for thread safety */
+ GLint RefCount; /**< reference count */
++ GLboolean DeletePending; /**< Has glDeleteTexture been called? */
+ GLuint Name; /**< an unsigned integer */
+ GLenum Target; /**< GL_TEXTURE_1D, GL_TEXTURE_2D, etc. */
+ GLfloat Priority; /**< in [0,1] */
+@@ -1572,10 +1574,11 @@
+ struct program
+ {
+ GLuint Id;
+- GLubyte *String; /* Null-terminated program text */
+- GLenum Target;
+- GLenum Format; /* String encoding format */
++ GLubyte *String; /**< Null-terminated program text */
++ GLboolean DeletePending; /**< User called glDeletePrograms? */
+ GLint RefCount;
++ GLenum Target;
++ GLenum Format; /**< String encoding format */
+ GLboolean Resident;
+ GLfloat LocalParams[MAX_PROGRAM_LOCAL_PARAMS][4];
+ GLuint NumInstructions; /* GL_ARB_vertex/fragment_program */
+Index: xc/extras/Mesa/src/mesa/main/pixel.c
+diff -u xc/extras/Mesa/src/mesa/main/pixel.c:1.1.1.1 xc/extras/Mesa/src/mesa/main/pixel.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/main/pixel.c:1.1.1.1 Wed Jun 16 09:19:15 2004
++++ xc/extras/Mesa/src/mesa/main/pixel.c Wed Dec 15 01:51:02 2004
+@@ -791,6 +791,8 @@
+ GLfloat rBias, GLfloat gBias,
+ GLfloat bBias, GLfloat aBias)
+ {
++ (void) ctx;
++
+ if (rScale != 1.0 || rBias != 0.0) {
+ GLuint i;
+ for (i = 0; i < n; i++) {
+Index: xc/extras/Mesa/src/mesa/main/points.c
+diff -u xc/extras/Mesa/src/mesa/main/points.c:1.1.1.1 xc/extras/Mesa/src/mesa/main/points.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/main/points.c:1.1.1.1 Wed Jun 16 09:19:15 2004
++++ xc/extras/Mesa/src/mesa/main/points.c Wed Dec 15 01:51:02 2004
+@@ -5,9 +5,9 @@
+
+ /*
+ * Mesa 3-D graphics library
+- * Version: 5.1
++ * Version: 6.2
+ *
+- * Copyright (C) 1999-2003 Brian Paul All Rights Reserved.
++ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+@@ -229,6 +229,25 @@
+ return;
+ }
+ break;
++ case GL_POINT_SPRITE_COORD_ORIGIN:
++ if (ctx->Extensions.ARB_point_sprite) {
++ GLenum value = (GLenum) params[0];
++ if (value != GL_LOWER_LEFT && value != GL_UPPER_LEFT) {
++ _mesa_error(ctx, GL_INVALID_VALUE,
++ "glPointParameterf[v]{EXT,ARB}(param)");
++ return;
++ }
++ if (ctx->Point.SpriteOrigin == value)
++ return;
++ FLUSH_VERTICES(ctx, _NEW_POINT);
++ ctx->Point.SpriteOrigin = value;
++ }
++ else {
++ _mesa_error(ctx, GL_INVALID_ENUM,
++ "glPointParameterf[v]{EXT,ARB}(pname)");
++ return;
++ }
++ break;
+ default:
+ _mesa_error( ctx, GL_INVALID_ENUM,
+ "glPointParameterf[v]{EXT,ARB}(pname)" );
+@@ -266,6 +285,7 @@
+ ctx->Point.Threshold = 1.0;
+ ctx->Point.PointSprite = GL_FALSE; /* GL_ARB_point_sprite / GL_NV_point_sprite */
+ ctx->Point.SpriteRMode = GL_ZERO; /* GL_NV_point_sprite (only!) */
++ ctx->Point.SpriteOrigin = GL_UPPER_LEFT; /* GL_ARB_point_sprite */
+ for (i = 0; i < MAX_TEXTURE_UNITS; i++) {
+ ctx->Point.CoordReplace[i] = GL_FALSE; /* GL_ARB_point_sprite / GL_NV_point_sprite */
+ }
+Index: xc/extras/Mesa/src/mesa/main/state.c
+diff -u xc/extras/Mesa/src/mesa/main/state.c:1.1.1.1 xc/extras/Mesa/src/mesa/main/state.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/main/state.c:1.1.1.1 Wed Jun 16 09:19:21 2004
++++ xc/extras/Mesa/src/mesa/main/state.c Wed Dec 15 01:51:02 2004
+@@ -1,6 +1,6 @@
+ /*
+ * Mesa 3-D graphics library
+- * Version: 6.1
++ * Version: 6.2
+ *
+ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+@@ -104,7 +104,7 @@
+ static int
+ generic_noop(void)
+ {
+- _mesa_problem(NULL, "User called no-op dispatch function (not part of Mesa subset?)");
++ _mesa_problem(NULL, "User called no-op dispatch function (an unsupported extension function?)");
+ return 0;
+ }
+
+@@ -119,10 +119,11 @@
+ void
+ _mesa_init_no_op_table(struct _glapi_table *table, GLuint tableSize)
+ {
++ typedef void (*func_ptr_t)(void);
+ GLuint i;
+- void **dispatch = (void **) table;
++ func_ptr_t *dispatch = (func_ptr_t *) table;
+ for (i = 0; i < tableSize; i++) {
+- dispatch[i] = (void *) generic_noop;
++ dispatch[i] = (func_ptr_t)generic_noop;
+ }
+ }
+
+Index: xc/extras/Mesa/src/mesa/main/texcompress.c
+diff -u xc/extras/Mesa/src/mesa/main/texcompress.c:1.1.1.1 xc/extras/Mesa/src/mesa/main/texcompress.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/main/texcompress.c:1.1.1.1 Wed Jun 16 09:19:21 2004
++++ xc/extras/Mesa/src/mesa/main/texcompress.c Wed Dec 15 01:51:02 2004
+@@ -113,6 +113,7 @@
+ GLuint size;
+
+ ASSERT(depth == 1);
++ (void) depth;
+
+ switch (format) {
+ case GL_COMPRESSED_RGB_FXT1_3DFX:
+Index: xc/extras/Mesa/src/mesa/main/texcompress_fxt1.c
+diff -u xc/extras/Mesa/src/mesa/main/texcompress_fxt1.c:1.1.1.3 xc/extras/Mesa/src/mesa/main/texcompress_fxt1.c:1.1.1.3.2.1
+--- xc/extras/Mesa/src/mesa/main/texcompress_fxt1.c:1.1.1.3 Sat Aug 28 04:28:04 2004
++++ xc/extras/Mesa/src/mesa/main/texcompress_fxt1.c Wed Dec 15 01:51:02 2004
+@@ -57,6 +57,7 @@
+ void
+ _mesa_init_texture_fxt1( GLcontext *ctx )
+ {
++ (void) ctx;
+ }
+
+
+@@ -76,6 +77,7 @@
+ ASSERT(dstXoffset % 8 == 0);
+ ASSERT(dstYoffset % 4 == 0);
+ ASSERT(dstZoffset == 0);
++ (void) dstZoffset; (void) dstImageStride;
+
+ if (srcFormat != GL_RGB ||
+ srcType != CHAN_TYPE ||
+@@ -131,6 +133,7 @@
+ ASSERT(dstXoffset % 8 == 0);
+ ASSERT(dstYoffset % 4 == 0);
+ ASSERT(dstZoffset == 0);
++ (void) dstZoffset; (void) dstImageStride;
+
+ if (srcFormat != GL_RGBA ||
+ srcType != CHAN_TYPE ||
+@@ -174,6 +177,7 @@
+ fetch_texel_2d_rgba_fxt1( const struct gl_texture_image *texImage,
+ GLint i, GLint j, GLint k, GLchan *texel )
+ {
++ (void) k;
+ fxt1_decode_1(texImage->Data, texImage->Width, i, j, texel);
+ }
+
+@@ -184,6 +188,7 @@
+ {
+ /* just sample as GLchan and convert to float here */
+ GLchan rgba[4];
++ (void) k;
+ fxt1_decode_1(texImage->Data, texImage->Width, i, j, rgba);
+ texel[RCOMP] = CHAN_TO_FLOAT(rgba[RCOMP]);
+ texel[GCOMP] = CHAN_TO_FLOAT(rgba[GCOMP]);
+@@ -196,6 +201,7 @@
+ fetch_texel_2d_rgb_fxt1( const struct gl_texture_image *texImage,
+ GLint i, GLint j, GLint k, GLchan *texel )
+ {
++ (void) k;
+ fxt1_decode_1(texImage->Data, texImage->Width, i, j, texel);
+ texel[ACOMP] = 255;
+ }
+@@ -207,6 +213,7 @@
+ {
+ /* just sample as GLchan and convert to float here */
+ GLchan rgba[4];
++ (void) k;
+ fxt1_decode_1(texImage->Data, texImage->Width, i, j, rgba);
+ texel[RCOMP] = CHAN_TO_FLOAT(rgba[RCOMP]);
+ texel[GCOMP] = CHAN_TO_FLOAT(rgba[GCOMP]);
+@@ -288,9 +295,9 @@
+
+ typedef unsigned long long Fx64;
+
+-#define FX64_MOV32(a, b) a = b;
+-#define FX64_OR32(a, b) a |= b;
+-#define FX64_SHL(a, c) a <<= c;
++#define FX64_MOV32(a, b) a = b
++#define FX64_OR32(a, b) a |= b
++#define FX64_SHL(a, c) a <<= c
+
+ #else /* !__GNUC__ */
+
+@@ -1284,7 +1291,7 @@
+ }
+
+ /* funky encoding for LSB of green */
+- if (((lolo >> 1) & 1) != (((vec[1][GCOMP] ^ vec[0][GCOMP]) >> 2) & 1)) {
++ if ((int)((lolo >> 1) & 1) != (((vec[1][GCOMP] ^ vec[0][GCOMP]) >> 2) & 1)) {
+ for (i = 0; i < n_comp; i++) {
+ vec[1][i] = input[minColL][i];
+ vec[0][i] = input[maxColL][i];
+@@ -1339,7 +1346,7 @@
+ }
+
+ /* funky encoding for LSB of green */
+- if (((lohi >> 1) & 1) != (((vec[3][GCOMP] ^ vec[2][GCOMP]) >> 2) & 1)) {
++ if ((int)((lohi >> 1) & 1) != (((vec[3][GCOMP] ^ vec[2][GCOMP]) >> 2) & 1)) {
+ for (i = 0; i < n_comp; i++) {
+ vec[3][i] = input[minColR][i];
+ vec[2][i] = input[maxColR][i];
+@@ -1387,7 +1394,7 @@
+ }
+ }
+
+- /* block looks like this:
++ /* block layout:
+ * 00, 01, 02, 03, 08, 09, 0a, 0b
+ * 10, 11, 12, 13, 18, 19, 1a, 1b
+ * 04, 05, 06, 07, 0c, 0d, 0e, 0f
+@@ -1427,6 +1434,9 @@
+ } else {
+ fxt1_quantize_CHROMA(cc, input);
+ }
++ (void)fxt1_quantize_ALPHA1;
++ (void)fxt1_quantize_MIXED1;
++ (void)fxt1_quantize_MIXED0;
+ #else
+ if (trualpha) {
+ fxt1_quantize_ALPHA1(cc, input);
+@@ -1438,6 +1448,9 @@
+ } else {
+ fxt1_quantize_MIXED0(cc, input);
+ }
++ (void)fxt1_quantize_ALPHA0;
++ (void)fxt1_quantize_HI;
++ (void)fxt1_quantize_CHROMA;
+ #endif
+ }
+
+@@ -1455,6 +1468,8 @@
+ unsigned long *encoded = dest;
+ GLubyte *newSource = NULL;
+
++ (void) ctx;
++
+ /*
+ * Rescale image if width is less than 8 or height is less than 4.
+ */
+Index: xc/extras/Mesa/src/mesa/main/texcompress_s3tc.c
+diff -u xc/extras/Mesa/src/mesa/main/texcompress_s3tc.c:1.1.1.1 xc/extras/Mesa/src/mesa/main/texcompress_s3tc.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/main/texcompress_s3tc.c:1.1.1.1 Wed Jun 16 09:19:15 2004
++++ xc/extras/Mesa/src/mesa/main/texcompress_s3tc.c Wed Dec 15 01:51:02 2004
+@@ -45,6 +45,7 @@
+ _mesa_init_texture_s3tc( GLcontext *ctx )
+ {
+ /* called during context initialization */
++ (void) ctx;
+ }
+
+
+@@ -64,6 +65,7 @@
+ ASSERT(dstXoffset % 4 == 0);
+ ASSERT(dstYoffset % 4 == 0);
+ ASSERT(dstZoffset % 4 == 0);
++ (void) dstZoffset; (void) dstImageStride;
+
+ if (srcFormat != GL_RGB ||
+ srcType != CHAN_TYPE ||
+@@ -121,6 +123,7 @@
+ ASSERT(dstXoffset % 4 == 0);
+ ASSERT(dstYoffset % 4 == 0);
+ ASSERT(dstZoffset % 4 == 0);
++ (void) dstZoffset; (void) dstImageStride;
+
+ if (srcFormat != GL_RGBA ||
+ srcType != CHAN_TYPE ||
+@@ -176,6 +179,7 @@
+ ASSERT(dstXoffset % 4 == 0);
+ ASSERT(dstYoffset % 4 == 0);
+ ASSERT(dstZoffset % 4 == 0);
++ (void) dstZoffset; (void) dstImageStride;
+
+ if (srcFormat != GL_RGBA ||
+ srcType != CHAN_TYPE ||
+@@ -230,6 +234,7 @@
+ ASSERT(dstXoffset % 4 == 0);
+ ASSERT(dstYoffset % 4 == 0);
+ ASSERT(dstZoffset % 4 == 0);
++ (void) dstZoffset; (void) dstImageStride;
+
+ if (srcFormat != GL_RGBA ||
+ srcType != CHAN_TYPE ||
+@@ -272,6 +277,7 @@
+ fetch_texel_2d_rgb_dxt1( const struct gl_texture_image *texImage,
+ GLint i, GLint j, GLint k, GLchan *texel )
+ {
++ (void) texImage; (void) i; (void) j; (void) k; (void) texel;
+ }
+
+
+@@ -293,6 +299,7 @@
+ fetch_texel_2d_rgba_dxt1( const struct gl_texture_image *texImage,
+ GLint i, GLint j, GLint k, GLchan *texel )
+ {
++ (void) texImage; (void) i; (void) j; (void) k; (void) texel;
+ }
+
+
+@@ -314,6 +321,7 @@
+ fetch_texel_2d_rgba_dxt3( const struct gl_texture_image *texImage,
+ GLint i, GLint j, GLint k, GLchan *texel )
+ {
++ (void) texImage; (void) i; (void) j; (void) k; (void) texel;
+ }
+
+
+@@ -335,6 +343,7 @@
+ fetch_texel_2d_rgba_dxt5( const struct gl_texture_image *texImage,
+ GLint i, GLint j, GLint k, GLchan *texel )
+ {
++ (void) texImage; (void) i; (void) j; (void) k; (void) texel;
+ }
+
+
+Index: xc/extras/Mesa/src/mesa/main/texformat.c
+diff -u xc/extras/Mesa/src/mesa/main/texformat.c:1.1.1.1 xc/extras/Mesa/src/mesa/main/texformat.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/main/texformat.c:1.1.1.1 Wed Jun 16 09:19:15 2004
++++ xc/extras/Mesa/src/mesa/main/texformat.c Wed Dec 15 01:51:02 2004
+@@ -63,6 +63,7 @@
+ static void fetch_null_texel( const struct gl_texture_image *texImage,
+ GLint i, GLint j, GLint k, GLchan *texel )
+ {
++ (void) texImage; (void) i; (void) j; (void) k;
+ texel[RCOMP] = 0;
+ texel[GCOMP] = 0;
+ texel[BCOMP] = 0;
+@@ -73,6 +74,7 @@
+ static void fetch_null_texelf( const struct gl_texture_image *texImage,
+ GLint i, GLint j, GLint k, GLfloat *texel )
+ {
++ (void) texImage; (void) i; (void) j; (void) k;
+ texel[RCOMP] = 0.0;
+ texel[GCOMP] = 0.0;
+ texel[BCOMP] = 0.0;
+Index: xc/extras/Mesa/src/mesa/main/texformat_tmp.h
+diff -u xc/extras/Mesa/src/mesa/main/texformat_tmp.h:1.1.1.1 xc/extras/Mesa/src/mesa/main/texformat_tmp.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/main/texformat_tmp.h:1.1.1.1 Wed Jun 16 09:19:16 2004
++++ xc/extras/Mesa/src/mesa/main/texformat_tmp.h Wed Dec 15 01:51:02 2004
+@@ -1,6 +1,6 @@
+ /*
+ * Mesa 3-D graphics library
+- * Version: 6.1
++ * Version: 6.2
+ *
+ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+@@ -44,34 +44,46 @@
+ #if DIM == 1
+
+ #define CHAN_SRC( t, i, j, k, sz ) \
+- ((GLchan *)(t)->Data + (i) * (sz))
++ ((void) (j), (void) (k), \
++ ((GLchan *)(t)->Data + (i) * (sz)))
+ #define UBYTE_SRC( t, i, j, k, sz ) \
+- ((GLubyte *)(t)->Data + (i) * (sz))
++ ((void) (j), (void) (k), \
++ ((GLubyte *)(t)->Data + (i) * (sz)))
+ #define USHORT_SRC( t, i, j, k ) \
+- ((GLushort *)(t)->Data + (i))
++ ((void) (j), (void) (k), \
++ ((GLushort *)(t)->Data + (i)))
+ #define UINT_SRC( t, i, j, k ) \
+- ((GLuint *)(t)->Data + (i))
++ ((void) (j), (void) (k), \
++ ((GLuint *)(t)->Data + (i)))
+ #define FLOAT_SRC( t, i, j, k, sz ) \
+- ((GLfloat *)(t)->Data + (i) * (sz))
++ ((void) (j), (void) (k), \
++ ((GLfloat *)(t)->Data + (i) * (sz)))
+ #define HALF_SRC( t, i, j, k, sz ) \
+- ((GLhalfARB *)(t)->Data + (i) * (sz))
++ ((void) (j), (void) (k), \
++ ((GLhalfARB *)(t)->Data + (i) * (sz)))
+
+ #define FETCH(x) fetch_texel_1d_##x
+
+ #elif DIM == 2
+
+ #define CHAN_SRC( t, i, j, k, sz ) \
+- ((GLchan *)(t)->Data + ((t)->RowStride * (j) + (i)) * (sz))
++ ((void) (k), \
++ ((GLchan *)(t)->Data + ((t)->RowStride * (j) + (i)) * (sz)))
+ #define UBYTE_SRC( t, i, j, k, sz ) \
+- ((GLubyte *)(t)->Data + ((t)->RowStride * (j) + (i)) * (sz))
++ ((void) (k), \
++ ((GLubyte *)(t)->Data + ((t)->RowStride * (j) + (i)) * (sz)))
+ #define USHORT_SRC( t, i, j, k ) \
+- ((GLushort *)(t)->Data + ((t)->RowStride * (j) + (i)))
++ ((void) (k), \
++ ((GLushort *)(t)->Data + ((t)->RowStride * (j) + (i))))
+ #define UINT_SRC( t, i, j, k ) \
+- ((GLuint *)(t)->Data + ((t)->RowStride * (j) + (i)))
++ ((void) (k), \
++ ((GLuint *)(t)->Data + ((t)->RowStride * (j) + (i))))
+ #define FLOAT_SRC( t, i, j, k, sz ) \
+- ((GLfloat *)(t)->Data + ((t)->RowStride * (j) + (i)) * (sz))
++ ((void) (k), \
++ ((GLfloat *)(t)->Data + ((t)->RowStride * (j) + (i)) * (sz)))
+ #define HALF_SRC( t, i, j, k, sz ) \
+- ((GLhalfARB *)(t)->Data + ((t)->RowStride * (j) + (i)) * (sz))
++ ((void) (k), \
++ ((GLhalfARB *)(t)->Data + ((t)->RowStride * (j) + (i)) * (sz)))
+
+ #define FETCH(x) fetch_texel_2d_##x
+
+@@ -1011,9 +1023,9 @@
+ GLint i, GLint j, GLint k, GLchan *texel )
+ {
+ const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 );
+- const GLuint index = *src;
+ const struct gl_color_table *palette;
+ const GLchan *table;
++ GLuint index;
+ GET_CURRENT_CONTEXT(ctx);
+
+ if (ctx->Texture.SharedPalette) {
+@@ -1027,6 +1039,9 @@
+ ASSERT(palette->Type != GL_FLOAT);
+ table = (const GLchan *) palette->Table;
+
++ /* Mask the index against size of palette to avoid going out of bounds */
++ index = (*src) & (palette->Size - 1);
++
+ switch (palette->Format) {
+ case GL_ALPHA:
+ texel[RCOMP] =
+Index: xc/extras/Mesa/src/mesa/main/teximage.c
+diff -u xc/extras/Mesa/src/mesa/main/teximage.c:1.1.1.2 xc/extras/Mesa/src/mesa/main/teximage.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/main/teximage.c:1.1.1.2 Thu Jul 22 06:52:58 2004
++++ xc/extras/Mesa/src/mesa/main/teximage.c Wed Dec 15 01:51:02 2004
+@@ -330,6 +330,9 @@
+ is_color_format(GLenum format)
+ {
+ switch (format) {
++ case GL_RED:
++ case GL_GREEN:
++ case GL_BLUE:
+ case GL_ALPHA:
+ case GL_ALPHA4:
+ case GL_ALPHA8:
+@@ -481,6 +484,7 @@
+ static GLboolean
+ is_compressed_format(GLcontext *ctx, GLenum internalFormat)
+ {
++ (void) ctx;
+ switch (internalFormat) {
+ case GL_COMPRESSED_RGB_FXT1_3DFX:
+ case GL_COMPRESSED_RGBA_FXT1_3DFX:
+@@ -881,11 +885,9 @@
+ case GL_TEXTURE_CUBE_MAP_ARB:
+ case GL_PROXY_TEXTURE_CUBE_MAP_ARB:
+ return ctx->Const.MaxCubeTextureLevels;
+- break;
+ case GL_TEXTURE_RECTANGLE_NV:
+ case GL_PROXY_TEXTURE_RECTANGLE_NV:
+ return 1;
+- break;
+ default:
+ return 0; /* bad target */
+ }
+@@ -1978,6 +1980,9 @@
+ return;
+ }
+
++ /*
++ * XXX Move this code into a new driver fall-back function
++ */
+ {
+ const GLint width = texImage->Width;
+ const GLint height = texImage->Height;
+@@ -2395,7 +2400,7 @@
+ texImage = _mesa_select_tex_image(ctx, texUnit, target, level);
+ assert(texImage);
+
+- if (width == 0 || !pixels)
++ if (width == 0)
+ return; /* no-op, not an error */
+
+ /* If we have a border, xoffset=-1 is legal. Bias by border width */
+@@ -2442,7 +2447,7 @@
+ texImage = _mesa_select_tex_image(ctx, texUnit, target, level);
+ assert(texImage);
+
+- if (width == 0 || height == 0 || !pixels)
++ if (width == 0 || height == 0)
+ return; /* no-op, not an error */
+
+ /* If we have a border, xoffset=-1 is legal. Bias by border width */
+@@ -2484,7 +2489,7 @@
+ texImage = _mesa_select_tex_image(ctx, texUnit, target, level);
+ assert(texImage);
+
+- if (width == 0 || height == 0 || height == 0 || !pixels)
++ if (width == 0 || height == 0 || height == 0)
+ return; /* no-op, not an error */
+
+ /* If we have a border, xoffset=-1 is legal. Bias by border width */
+@@ -2794,6 +2799,9 @@
+ if (!is_compressed_format(ctx, internalFormat))
+ return GL_INVALID_ENUM;
+
++ if (_mesa_base_tex_format(ctx, internalFormat) < 0)
++ return GL_INVALID_ENUM;
++
+ if (border != 0)
+ return GL_INVALID_VALUE;
+
+@@ -2846,6 +2854,7 @@
+ GLenum format, GLsizei imageSize)
+ {
+ GLint expectedSize, maxLevels = 0, maxTextureSize;
++ (void) zoffset;
+
+ if (dimensions == 1) {
+ /* 1D compressed textures not allowed */
+@@ -3193,7 +3202,7 @@
+ return;
+ }
+
+- if (width == 0 || !data)
++ if (width == 0)
+ return; /* no-op, not an error */
+
+ if (ctx->Driver.CompressedTexSubImage1D) {
+@@ -3244,7 +3253,7 @@
+ return;
+ }
+
+- if (width == 0 || height == 0 || !data)
++ if (width == 0 || height == 0)
+ return; /* no-op, not an error */
+
+ if (ctx->Driver.CompressedTexSubImage2D) {
+@@ -3295,7 +3304,7 @@
+ return;
+ }
+
+- if (width == 0 || height == 0 || depth == 0 || !data)
++ if (width == 0 || height == 0 || depth == 0)
+ return; /* no-op, not an error */
+
+ if (ctx->Driver.CompressedTexSubImage3D) {
+Index: xc/extras/Mesa/src/mesa/main/texobj.c
+diff -u xc/extras/Mesa/src/mesa/main/texobj.c:1.1.1.1 xc/extras/Mesa/src/mesa/main/texobj.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/main/texobj.c:1.1.1.1 Wed Jun 16 09:19:18 2004
++++ xc/extras/Mesa/src/mesa/main/texobj.c Wed Dec 15 01:51:02 2004
+@@ -5,7 +5,7 @@
+
+ /*
+ * Mesa 3-D graphics library
+- * Version: 6.1
++ * Version: 6.2
+ *
+ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+@@ -64,6 +64,7 @@
+ _mesa_new_texture_object( GLcontext *ctx, GLuint name, GLenum target )
+ {
+ struct gl_texture_object *obj;
++ (void) ctx;
+ obj = MALLOC_STRUCT(gl_texture_object);
+ _mesa_initialize_texture_object(obj, name, target);
+ return obj;
+@@ -71,7 +72,7 @@
+
+
+ /**
+- * Initialize a texture object to default values.
++ * Initialize a new texture object to default values.
+ * \param obj the texture object
+ * \param name the texture name
+ * \param target the texture target
+@@ -87,9 +88,9 @@
+ target == GL_TEXTURE_CUBE_MAP_ARB ||
+ target == GL_TEXTURE_RECTANGLE_NV);
+
++ _mesa_bzero(obj, sizeof(*obj));
+ /* init the non-zero fields */
+ _glthread_INIT_MUTEX(obj->Mutex);
+- _mesa_bzero(obj, sizeof(*obj));
+ obj->RefCount = 1;
+ obj->Name = name;
+ obj->Target = target;
+@@ -137,8 +138,6 @@
+
+ (void) ctx;
+
+- assert(texObj);
+-
+ _mesa_free_colortable_data(&texObj->Palette);
+
+ /* free the texture images */
+@@ -702,12 +701,16 @@
+ }
+ ctx->NewState |= _NEW_TEXTURE;
+
+- /* Decrement reference count and delete if zero */
+- delObj->RefCount--;
+- ASSERT(delObj->RefCount >= 0);
++ /* If user hasn't already tried to delete the texture... */
++ if (!delObj->DeletePending) {
++ delObj->DeletePending = GL_TRUE;
++ delObj->RefCount--;
++ ASSERT(delObj->RefCount >= 0);
++ }
+
++ /* See if we can really delete the texture now */
+ if (delObj->RefCount == 0) {
+- ASSERT(delObj->Name != 0);
++ ASSERT(delObj->Name != 0); /* Never delete default tex objects */
+ _mesa_remove_texture_object(ctx, delObj);
+ ASSERT(ctx->Driver.DeleteTexture);
+ (*ctx->Driver.DeleteTexture)(ctx, delObj);
+@@ -717,6 +720,7 @@
+ }
+ }
+
++
+ /**
+ * Bind a named texture to a texturing target.
+ *
+@@ -746,6 +750,9 @@
+ _mesa_debug(ctx, "glBindTexture %s %d\n",
+ _mesa_lookup_enum_by_nr(target), (GLint) texName);
+
++ /*
++ * Get pointer to currently bound texture object (oldTexObj)
++ */
+ switch (target) {
+ case GL_TEXTURE_1D:
+ oldTexObj = texUnit->Current1D;
+@@ -776,6 +783,10 @@
+ }
+
+ if (oldTexObj->Name == texName)
++ /* XXX this might be wrong. If the texobj is in use by another
++ * context and a texobj parameter was changed, this might be our
++ * only chance to update this context's hardware state.
++ */
+ return; /* rebinding the same texture- no change */
+
+ /*
+@@ -874,16 +885,21 @@
+ if (ctx->Driver.BindTexture)
+ (*ctx->Driver.BindTexture)( ctx, target, newTexObj );
+
++ /* Decrement the reference count on the old texture and check if it's
++ * time to delete it.
++ */
+ oldTexObj->RefCount--;
+- assert(oldTexObj->RefCount >= 0);
++ ASSERT(oldTexObj->RefCount >= 0);
+ if (oldTexObj->RefCount == 0) {
+- assert(oldTexObj->Name != 0);
++ ASSERT(oldTexObj->Name != 0);
++ ASSERT(oldTexObj->DeletePending);
+ _mesa_remove_texture_object(ctx, oldTexObj);
+ ASSERT(ctx->Driver.DeleteTexture);
+ (*ctx->Driver.DeleteTexture)( ctx, oldTexObj );
+ }
+ }
+
++
+ /**
+ * Set texture priorities.
+ *
+Index: xc/extras/Mesa/src/mesa/main/texstore.c
+diff -u xc/extras/Mesa/src/mesa/main/texstore.c:1.1.1.2 xc/extras/Mesa/src/mesa/main/texstore.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/main/texstore.c:1.1.1.2 Thu Jul 22 06:53:01 2004
++++ xc/extras/Mesa/src/mesa/main/texstore.c Wed Dec 15 01:51:02 2004
+@@ -701,6 +701,7 @@
+ GLboolean
+ _mesa_texstore_depth_component_float32(STORE_PARAMS)
+ {
++ (void) dims;
+ ASSERT(dstFormat == &_mesa_texformat_depth_component_float32);
+ ASSERT(dstFormat->TexelBytes == sizeof(GLfloat));
+
+@@ -744,6 +745,7 @@
+ GLboolean
+ _mesa_texstore_depth_component16(STORE_PARAMS)
+ {
++ (void) dims;
+ ASSERT(dstFormat == &_mesa_texformat_depth_component16);
+ ASSERT(dstFormat->TexelBytes == sizeof(GLushort));
+
+@@ -1103,7 +1105,7 @@
+ srcWidth, srcHeight, srcDepth,
+ srcFormat, srcType, srcAddr,
+ srcPacking);
+- const GLchan *src = (const GLubyte *) tempImage;
++ const GLchan *src = (const GLchan *) tempImage;
+ GLubyte *dstImage = (GLubyte *) dstAddr
+ + dstZoffset * dstImageStride
+ + dstYoffset * dstRowStride
+@@ -1207,7 +1209,7 @@
+ srcWidth, srcHeight, srcDepth,
+ srcFormat, srcType, srcAddr,
+ srcPacking);
+- const GLchan *src = (const GLubyte *) tempImage;
++ const GLchan *src = (const GLchan *) tempImage;
+ GLubyte *dstImage = (GLubyte *) dstAddr
+ + dstZoffset * dstImageStride
+ + dstYoffset * dstRowStride
+@@ -1553,6 +1555,7 @@
+ GLboolean
+ _mesa_texstore_ci8(STORE_PARAMS)
+ {
++ (void) dims; (void) baseInternalFormat;
+ ASSERT(dstFormat == &_mesa_texformat_ci8);
+ ASSERT(dstFormat->TexelBytes == 1);
+ ASSERT(baseInternalFormat == GL_COLOR_INDEX);
+@@ -1599,6 +1602,7 @@
+ {
+ const GLuint ui = 1;
+ const GLubyte littleEndian = *((const GLubyte *) &ui);
++ (void) ctx; (void) dims; (void) baseInternalFormat;
+
+ ASSERT((dstFormat == &_mesa_texformat_ycbcr) ||
+ (dstFormat == &_mesa_texformat_ycbcr_rev));
+@@ -1852,6 +1856,7 @@
+ {
+ GLint postConvWidth = width;
+ GLint sizeInBytes;
++ (void) border;
+
+ if (ctx->_ImageTransferState & IMAGE_CONVOLUTION_BIT) {
+ _mesa_adjust_image_for_convolution(ctx, 1, &postConvWidth, NULL);
+@@ -1925,6 +1930,7 @@
+ {
+ GLint postConvWidth = width, postConvHeight = height;
+ GLint texelBytes, sizeInBytes;
++ (void) border;
+
+ if (ctx->_ImageTransferState & IMAGE_CONVOLUTION_BIT) {
+ _mesa_adjust_image_for_convolution(ctx, 2, &postConvWidth,
+@@ -2004,6 +2010,7 @@
+ struct gl_texture_image *texImage)
+ {
+ GLint texelBytes, sizeInBytes;
++ (void) border;
+
+ /* choose the texture format */
+ assert(ctx->Driver.ChooseTextureFormat);
+@@ -2228,6 +2235,13 @@
+ struct gl_texture_image *texImage)
+ {
+ /* this space intentionally left blank */
++ (void) ctx;
++ (void) target; (void) level;
++ (void) internalFormat;
++ (void) width; (void) border;
++ (void) imageSize; (void) data;
++ (void) texObj;
++ (void) texImage;
+ }
+
+
+@@ -2243,6 +2257,8 @@
+ struct gl_texture_object *texObj,
+ struct gl_texture_image *texImage)
+ {
++ (void) width; (void) height; (void) border;
++
+ /* This is pretty simple, basically just do a memcpy without worrying
+ * about the usual image unpacking or image transfer operations.
+ */
+@@ -2299,6 +2315,14 @@
+ struct gl_texture_image *texImage)
+ {
+ /* this space intentionally left blank */
++ (void) ctx;
++ (void) target; (void) level;
++ (void) internalFormat;
++ (void) width; (void) height; (void) depth;
++ (void) border;
++ (void) imageSize; (void) data;
++ (void) texObj;
++ (void) texImage;
+ }
+
+
+@@ -2316,6 +2340,13 @@
+ struct gl_texture_image *texImage)
+ {
+ /* this space intentionally left blank */
++ (void) ctx;
++ (void) target; (void) level;
++ (void) xoffset; (void) width;
++ (void) format;
++ (void) imageSize; (void) data;
++ (void) texObj;
++ (void) texImage;
+ }
+
+
+@@ -2336,6 +2367,7 @@
+ GLint i, rows;
+ GLubyte *dest;
+ const GLubyte *src;
++ (void) format;
+
+ /* these should have been caught sooner */
+ ASSERT((width & 3) == 0 || width == 2 || width == 1);
+@@ -2389,6 +2421,14 @@
+ struct gl_texture_image *texImage)
+ {
+ /* this space intentionally left blank */
++ (void) ctx;
++ (void) target; (void) level;
++ (void) xoffset; (void) yoffset; (void) zoffset;
++ (void) width; (void) height; (void) depth;
++ (void) format;
++ (void) imageSize; (void) data;
++ (void) texObj;
++ (void) texImage;
+ }
+
+
+Index: xc/extras/Mesa/src/mesa/main/varray.c
+diff -u xc/extras/Mesa/src/mesa/main/varray.c:1.1.1.1 xc/extras/Mesa/src/mesa/main/varray.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/main/varray.c:1.1.1.1 Wed Jun 16 09:19:19 2004
++++ xc/extras/Mesa/src/mesa/main/varray.c Wed Dec 15 01:51:02 2004
+@@ -60,6 +60,7 @@
+ #if FEATURE_ARB_vertex_buffer_object
+ array->BufferObj->RefCount--;
+ if (array->BufferObj->RefCount <= 0) {
++ ASSERT(array->BufferObj->Name);
+ _mesa_remove_buffer_object( ctx, array->BufferObj );
+ (*ctx->Driver.DeleteBuffer)( ctx, array->BufferObj );
+ }
+Index: xc/extras/Mesa/src/mesa/main/version.h
+diff -u xc/extras/Mesa/src/mesa/main/version.h:1.1.1.1 xc/extras/Mesa/src/mesa/main/version.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/main/version.h:1.1.1.1 Wed Jun 16 09:19:19 2004
++++ xc/extras/Mesa/src/mesa/main/version.h Wed Dec 15 01:51:02 2004
+@@ -1,6 +1,6 @@
+ /*
+ * Mesa 3-D graphics library
+- * Version: 6.1
++ * Version: 6.2.1
+ *
+ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+@@ -29,9 +29,9 @@
+
+ /* Mesa version */
+ #define MESA_MAJOR 6
+-#define MESA_MINOR 1
+-#define MESA_PATCH 0
+-#define MESA_VERSION_STRING "6.1"
++#define MESA_MINOR 2
++#define MESA_PATCH 1
++#define MESA_VERSION_STRING "6.2.1"
+
+ /* To make version comparison easy */
+ #define MESA_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
+Index: xc/extras/Mesa/src/mesa/main/vtxfmt.c
+diff -u xc/extras/Mesa/src/mesa/main/vtxfmt.c:1.1.1.1 xc/extras/Mesa/src/mesa/main/vtxfmt.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/main/vtxfmt.c:1.1.1.1 Wed Jun 16 09:19:19 2004
++++ xc/extras/Mesa/src/mesa/main/vtxfmt.c Wed Dec 15 01:51:02 2004
+@@ -49,6 +49,7 @@
+ { \
+ GET_CURRENT_CONTEXT(ctx); \
+ struct gl_tnl_module *tnl = &(ctx->TnlModule); \
++ typedef void (*func_ptr_t)(void); \
+ \
+ ASSERT( tnl->Current ); \
+ ASSERT( tnl->SwapCount < NUM_VERTEX_FORMAT_ENTRIES ); \
+@@ -56,7 +57,7 @@
+ /* Save the swapped function's dispatch entry so it can be */ \
+ /* restored later. */ \
+ tnl->Swapped[tnl->SwapCount][0] = (void *)&(ctx->Exec->FUNC); \
+- tnl->Swapped[tnl->SwapCount][1] = (void *)TAG(FUNC); \
++ *(func_ptr_t *)(tnl->Swapped[tnl->SwapCount]+1) = (func_ptr_t)TAG(FUNC); \
+ tnl->SwapCount++; \
+ \
+ if ( 0 ) \
+Index: xc/extras/Mesa/src/mesa/math/m_clip_tmp.h
+diff -u xc/extras/Mesa/src/mesa/math/m_clip_tmp.h:1.1.1.1 xc/extras/Mesa/src/mesa/math/m_clip_tmp.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/math/m_clip_tmp.h:1.1.1.1 Wed Jun 16 09:19:22 2004
++++ xc/extras/Mesa/src/mesa/math/m_clip_tmp.h Wed Dec 15 01:51:03 2004
+@@ -1,9 +1,8 @@
+-
+ /*
+ * Mesa 3-D graphics library
+- * Version: 5.1
++ * Version: 6.2
+ *
+- * Copyright (C) 1999-2003 Brian Paul All Rights Reserved.
++ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+@@ -129,6 +128,7 @@
+ GLubyte tmpAndMask = *andMask;
+ GLubyte tmpOrMask = *orMask;
+ GLuint i;
++ (void) proj_vec;
+ STRIDE_LOOP {
+ const GLfloat cx = from[0];
+ const GLfloat cy = from[1];
+@@ -176,10 +176,10 @@
+ const GLuint stride = clip_vec->stride;
+ const GLuint count = clip_vec->count;
+ const GLfloat *from = (GLfloat *)clip_vec->start;
+-
+ GLubyte tmpOrMask = *orMask;
+ GLubyte tmpAndMask = *andMask;
+ GLuint i;
++ (void) proj_vec;
+ STRIDE_LOOP {
+ const GLfloat cx = from[0], cy = from[1], cz = from[2];
+ GLubyte mask = 0;
+@@ -209,10 +209,10 @@
+ const GLuint stride = clip_vec->stride;
+ const GLuint count = clip_vec->count;
+ const GLfloat *from = (GLfloat *)clip_vec->start;
+-
+ GLubyte tmpOrMask = *orMask;
+ GLubyte tmpAndMask = *andMask;
+ GLuint i;
++ (void) proj_vec;
+ STRIDE_LOOP {
+ const GLfloat cx = from[0], cy = from[1];
+ GLubyte mask = 0;
+Index: xc/extras/Mesa/src/mesa/math/m_matrix.c
+diff -u xc/extras/Mesa/src/mesa/math/m_matrix.c:1.1.1.1 xc/extras/Mesa/src/mesa/math/m_matrix.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/math/m_matrix.c:1.1.1.1 Wed Jun 16 09:19:23 2004
++++ xc/extras/Mesa/src/mesa/math/m_matrix.c Wed Dec 15 01:51:03 2004
+@@ -1,16 +1,6 @@
+-/**
+- * \file m_matrix.c
+- * Matrix operations.
+- *
+- * \note
+- * -# 4x4 transformation matrices are stored in memory in column major order.
+- * -# Points/vertices are to be thought of as column vectors.
+- * -# Transformation of a point p by a matrix M is: p' = M * p
+- */
+-
+ /*
+ * Mesa 3-D graphics library
+- * Version: 6.0.1
++ * Version: 6.2
+ *
+ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+@@ -33,6 +23,17 @@
+ */
+
+
++/**
++ * \file m_matrix.c
++ * Matrix operations.
++ *
++ * \note
++ * -# 4x4 transformation matrices are stored in memory in column major order.
++ * -# Points/vertices are to be thought of as column vectors.
++ * -# Transformation of a point p by a matrix M is: p' = M * p
++ */
++
++
+ #include "glheader.h"
+ #include "imports.h"
+ #include "macros.h"
+@@ -1142,7 +1143,7 @@
+ mat->type = MATRIX_2D_NO_ROT;
+
+ if ((mask & MASK_NO_2D_SCALE) != MASK_NO_2D_SCALE)
+- mat->flags = MAT_FLAG_GENERAL_SCALE;
++ mat->flags |= MAT_FLAG_GENERAL_SCALE;
+ }
+ else if ((mask & MASK_2D) == (GLuint) MASK_2D) {
+ GLfloat mm = DOT2(m, m);
+Index: xc/extras/Mesa/src/mesa/math/m_matrix.h
+diff -u xc/extras/Mesa/src/mesa/math/m_matrix.h:1.1.1.1 xc/extras/Mesa/src/mesa/math/m_matrix.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/math/m_matrix.h:1.1.1.1 Wed Jun 16 09:19:23 2004
++++ xc/extras/Mesa/src/mesa/math/m_matrix.h Wed Dec 15 01:51:03 2004
+@@ -1,13 +1,8 @@
+-/**
+- * \file math/m_matrix.h
+- * Defines basic structures for matrix-handling.
+- */
+-
+ /*
+ * Mesa 3-D graphics library
+- * Version: 3.5
++ * Version: 6.2
+ *
+- * Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
++ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+@@ -28,6 +23,11 @@
+ */
+
+
++/**
++ * \file math/m_matrix.h
++ * Defines basic structures for matrix-handling.
++ */
++
+ #ifndef _M_MATRIX_H
+ #define _M_MATRIX_H
+
+@@ -36,7 +36,7 @@
+ /**
+ * \name Symbolic names to some of the entries in the matrix
+ *
+- * To help out with the rework of the viewport_map as a matrix transform.
++ * These are handy for the viewport mapping, which is expressed as a matrix.
+ */
+ /*@{*/
+ #define MAT_SX 0
+@@ -47,29 +47,30 @@
+ #define MAT_TZ 14
+ /*@}*/
+
++
+ /**
+ * \defgroup MatFlags MAT_FLAG_XXX-flags
+ *
+- * Bitmasks to indicate different kinds of 4x4 matrices in
+- * GLmatrix::flags
++ * Bitmasks to indicate different kinds of 4x4 matrices in GLmatrix::flags
++ * It would be nice to make all these flags private to m_matrix.c
+ */
+ /*@{*/
+-
+-#define MAT_FLAG_IDENTITY 0 /**< is an identity matrix flag.
+- * (Not actually used - the identity
+- * matrix is identified by the absense
+- / of all other flags.) */
+-#define MAT_FLAG_GENERAL 0x1 /**< is a general matrix flag */
+-#define MAT_FLAG_ROTATION 0x2 /**< is a rotation matrix flag */
+-#define MAT_FLAG_TRANSLATION 0x4 /**< is a translation matrix flag */
+-#define MAT_FLAG_UNIFORM_SCALE 0x8 /**< is an uniform scaling matrix flag */
+-#define MAT_FLAG_GENERAL_SCALE 0x10 /**< is a general scaling matrix flag */
+-#define MAT_FLAG_GENERAL_3D 0x20 /**< general 3D matrix flag */
+-#define MAT_FLAG_PERSPECTIVE 0x40 /**< is a perspective projection matrix flag */
+-#define MAT_FLAG_SINGULAR 0x80 /**< is a singular matrix flag */
+-#define MAT_DIRTY_TYPE 0x100 /**< matrix type is dirty */
+-#define MAT_DIRTY_FLAGS 0x200 /**< matrix flags are dirty */
+-#define MAT_DIRTY_INVERSE 0x400 /**< matrix inverse is dirty */
++#define MAT_FLAG_IDENTITY 0 /**< is an identity matrix flag.
++ * (Not actually used - the identity
++ * matrix is identified by the absense
++ * of all other flags.)
++ */
++#define MAT_FLAG_GENERAL 0x1 /**< is a general matrix flag */
++#define MAT_FLAG_ROTATION 0x2 /**< is a rotation matrix flag */
++#define MAT_FLAG_TRANSLATION 0x4 /**< is a translation matrix flag */
++#define MAT_FLAG_UNIFORM_SCALE 0x8 /**< is an uniform scaling matrix flag */
++#define MAT_FLAG_GENERAL_SCALE 0x10 /**< is a general scaling matrix flag */
++#define MAT_FLAG_GENERAL_3D 0x20 /**< general 3D matrix flag */
++#define MAT_FLAG_PERSPECTIVE 0x40 /**< is a perspective proj matrix flag */
++#define MAT_FLAG_SINGULAR 0x80 /**< is a singular matrix flag */
++#define MAT_DIRTY_TYPE 0x100 /**< matrix type is dirty */
++#define MAT_DIRTY_FLAGS 0x200 /**< matrix flags are dirty */
++#define MAT_DIRTY_INVERSE 0x400 /**< matrix inverse is dirty */
+
+ /** angle preserving matrix flags mask */
+ #define MAT_FLAGS_ANGLE_PRESERVING (MAT_FLAG_ROTATION | \
+@@ -120,25 +121,27 @@
+
+ /**
+ * Different kinds of 4x4 transformation matrices.
++ * We use these to select specific optimized vertex transformation routines.
+ */
+ enum GLmatrixtype {
+- MATRIX_GENERAL, /**< general 4x4 matrix */
+- MATRIX_IDENTITY, /**< identity matrix */
+- MATRIX_3D_NO_ROT, /**< orthogonal projection and others... */
+- MATRIX_PERSPECTIVE, /**< perspective projection matrix */
+- MATRIX_2D, /**< 2-D transformation */
+- MATRIX_2D_NO_ROT, /**< 2-D scale & translate only */
+- MATRIX_3D /**< 3-D transformation */
++ MATRIX_GENERAL, /**< general 4x4 matrix */
++ MATRIX_IDENTITY, /**< identity matrix */
++ MATRIX_3D_NO_ROT, /**< orthogonal projection and others... */
++ MATRIX_PERSPECTIVE, /**< perspective projection matrix */
++ MATRIX_2D, /**< 2-D transformation */
++ MATRIX_2D_NO_ROT, /**< 2-D scale & translate only */
++ MATRIX_3D /**< 3-D transformation */
+ } ;
+
+ /**
+- * Matrix.
++ * Matrix type to represent 4x4 transformation matrices.
+ */
+ typedef struct {
+- GLfloat *m; /**< matrix, 16-byte aligned */
+- GLfloat *inv; /**< optional inverse, 16-byte aligned */
++ GLfloat *m; /**< 16 matrix elements (16-byte aligned) */
++ GLfloat *inv; /**< optional 16-element inverse (16-byte aligned) */
+ GLuint flags; /**< possible values determined by (of \link
+- MatFlags MAT_FLAG_* flags\endlink) */
++ * MatFlags MAT_FLAG_* flags\endlink)
++ */
+ enum GLmatrixtype type;
+ } GLmatrix;
+
+Index: xc/extras/Mesa/src/mesa/math/m_xform_tmp.h
+diff -u xc/extras/Mesa/src/mesa/math/m_xform_tmp.h:1.1.1.1 xc/extras/Mesa/src/mesa/math/m_xform_tmp.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/math/m_xform_tmp.h:1.1.1.1 Wed Jun 16 09:19:23 2004
++++ xc/extras/Mesa/src/mesa/math/m_xform_tmp.h Wed Dec 15 01:51:03 2004
+@@ -106,6 +106,7 @@
+ GLuint count = from_vec->count;
+ GLfloat (*to)[4] = (GLfloat (*)[4])to_vec->start;
+ GLuint i;
++ (void) m;
+ if (to_vec == from_vec) return;
+ STRIDE_LOOP {
+ to[i][0] = from[0];
+@@ -271,6 +272,7 @@
+ GLfloat (*to)[4] = (GLfloat (*)[4])to_vec->start;
+ GLuint count = from_vec->count;
+ GLuint i;
++ (void) m;
+ if (to_vec == from_vec) return;
+ STRIDE_LOOP {
+ to[i][0] = from[0];
+@@ -441,6 +443,7 @@
+ GLfloat (*to)[4] = (GLfloat (*)[4])to_vec->start;
+ GLuint count = from_vec->count;
+ GLuint i;
++ (void) m;
+ if (to_vec == from_vec) return;
+ STRIDE_LOOP {
+ to[i][0] = from[0];
+@@ -608,6 +611,7 @@
+ GLfloat (*to)[4] = (GLfloat (*)[4])to_vec->start;
+ GLuint count = from_vec->count;
+ GLuint i;
++ (void) m;
+ if (to_vec == from_vec) return;
+ STRIDE_LOOP {
+ to[i][0] = from[0];
+@@ -740,10 +744,10 @@
+ to_vec->count = from_vec->count;
+ }
+
+-static transform_func _XFORMAPI TAG(transform_tab_1)[7];
+-static transform_func _XFORMAPI TAG(transform_tab_2)[7];
+-static transform_func _XFORMAPI TAG(transform_tab_3)[7];
+-static transform_func _XFORMAPI TAG(transform_tab_4)[7];
++static transform_func TAG(transform_tab_1)[7];
++static transform_func TAG(transform_tab_2)[7];
++static transform_func TAG(transform_tab_3)[7];
++static transform_func TAG(transform_tab_4)[7];
+
+ /* Similar functions could be called several times, with more highly
+ * optimized routines overwriting the arrays. This only occurs during
+Index: xc/extras/Mesa/src/mesa/shader/arbfragparse.c
+diff -u xc/extras/Mesa/src/mesa/shader/arbfragparse.c:1.1.1.1 xc/extras/Mesa/src/mesa/shader/arbfragparse.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/shader/arbfragparse.c:1.1.1.1 Wed Jun 16 09:17:47 2004
++++ xc/extras/Mesa/src/mesa/shader/arbfragparse.c Wed Dec 15 01:51:03 2004
+@@ -186,6 +186,7 @@
+ {
+ GLuint a, retval;
+ struct arb_program ap;
++ (void) target;
+
+ /* set the program target before parsing */
+ ap.Base.Target = GL_FRAGMENT_PROGRAM_ARB;
+Index: xc/extras/Mesa/src/mesa/shader/arbprogparse.c
+diff -u xc/extras/Mesa/src/mesa/shader/arbprogparse.c:1.1.1.2 xc/extras/Mesa/src/mesa/shader/arbprogparse.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/shader/arbprogparse.c:1.1.1.2 Thu Jul 22 06:51:14 2004
++++ xc/extras/Mesa/src/mesa/shader/arbprogparse.c Wed Dec 15 01:51:03 2004
+@@ -42,6 +42,10 @@
+ #include "arbprogparse.h"
+ #include "grammar_mesa.h"
+
++#if !defined(__GNUC__) && !defined(__extension__)
++# define __extension__
++#endif
++
+ /* TODO:
+ * Fragment Program Stuff:
+ * -----------------------------------------------------
+@@ -129,7 +133,7 @@
+ /**
+ * This is the text describing the rules to parse the grammar
+ */
+-static char arb_grammar_text[] =
++__extension__ static char arb_grammar_text[] =
+ #include "arbprogram_syn.h"
+ ;
+
+@@ -591,6 +595,7 @@
+ {
+ GLubyte *i = *inst;
+ struct var_cache *va = NULL;
++ (void) Program;
+
+ *inst += _mesa_strlen ((char *) i) + 1;
+
+@@ -614,7 +619,8 @@
+ parse_string_without_adding (GLubyte ** inst, struct arb_program *Program)
+ {
+ GLubyte *i = *inst;
+-
++ (void) Program;
++
+ *inst += _mesa_strlen ((char *) i) + 1;
+
+ return (char *) i;
+@@ -788,6 +794,7 @@
+ parse_color_type (GLcontext * ctx, GLubyte ** inst, struct arb_program *Program,
+ GLint * color)
+ {
++ (void) ctx; (void) Program;
+ *color = *(*inst)++ != COLOR_PRIMARY;
+ return 0;
+ }
+@@ -828,7 +835,7 @@
+ {
+ GLint i = parse_integer (inst, Program);
+
+- if ((i < 0) || (i >= ctx->Const.MaxTextureUnits)) {
++ if ((i < 0) || (i >= (int)ctx->Const.MaxTextureUnits)) {
+ _mesa_set_program_error (ctx, Program->Position,
+ "Invalid texture unit index");
+ _mesa_error (ctx, GL_INVALID_OPERATION, "Invalid texture unit index");
+@@ -1890,7 +1897,7 @@
+
+ /* Test array length here! */
+ if (specified_length) {
+- if (specified_length != param_var->param_binding_length) {
++ if (specified_length != (int)param_var->param_binding_length) {
+ _mesa_set_program_error (ctx, Program->Position,
+ "Declared parameter array lenght does not match parameter list");
+ _mesa_error (ctx, GL_INVALID_OPERATION,
+@@ -2282,6 +2289,7 @@
+ {
+ struct var_cache *dst;
+ GLuint result;
++ (void) Index;
+
+ dst = parse_string (inst, vc_head, Program, &result);
+ Program->Position = parse_position (inst);
+@@ -2492,7 +2500,7 @@
+ offset = parse_integer (inst, Program);
+
+ if ((offset < 0)
+- || (offset >= src->param_binding_length)) {
++ || (offset >= (int)src->param_binding_length)) {
+ _mesa_set_program_error (ctx, Program->Position,
+ "Index out of range");
+ _mesa_error (ctx, GL_INVALID_OPERATION,
+@@ -3686,7 +3694,7 @@
+ }
+
+ /* XXX temporary */
+-static char core_grammar_text[] =
++__extension__ static char core_grammar_text[] =
+ #include "grammar_syn.h"
+ ;
+
+@@ -3706,7 +3714,7 @@
+
+ static int extension_is_supported (const GLubyte *ext)
+ {
+- const GLubyte *extensions = glGetString (GL_EXTENSIONS);
++ const GLubyte *extensions = GL_CALL(GetString)(GL_EXTENSIONS);
+ const GLubyte *end = extensions + _mesa_strlen ((const char *) extensions);
+ const GLint ext_len = _mesa_strlen ((const char *) ext);
+
+@@ -3754,6 +3762,9 @@
+ GLubyte *strz = NULL;
+ static int arbprogram_syn_is_ok = 0; /* XXX temporary */
+
++ /* Reset error state */
++ _mesa_set_program_error(ctx, -1, NULL);
++
+ #if DEBUG_PARSING
+ fprintf (stderr, "Loading grammar text!\n");
+ #endif
+@@ -3827,6 +3838,8 @@
+ enable_ext (ctx, arbprogram_syn_id,
+ (byte *) "fog_coord", (byte *) "GL_EXT_fog_coord") ||
+ enable_ext (ctx, arbprogram_syn_id,
++ (byte *) "texture_rectangle", (byte *) "GL_ARB_texture_rectangle") ||
++ enable_ext (ctx, arbprogram_syn_id,
+ (byte *) "texture_rectangle", (byte *) "GL_EXT_texture_rectangle") ||
+ enable_ext (ctx, arbprogram_syn_id,
+ (byte *) "texture_rectangle", (byte *) "GL_NV_texture_rectangle") ||
+@@ -3871,7 +3884,7 @@
+ if (0) {
+ int line, col;
+ char *s;
+- printf("Program: %s\n", strz);
++ printf("Program: %s\n", (char *) strz);
+ printf("Error Pos: %d\n", ctx->Program.ErrorPos);
+ s = (char *) _mesa_find_line_column(strz, strz+ctx->Program.ErrorPos, &line, &col);
+ printf("line %d col %d: %s\n", line, col, s);
+Index: xc/extras/Mesa/src/mesa/shader/arbprogram.c
+diff -u xc/extras/Mesa/src/mesa/shader/arbprogram.c:1.1.1.1 xc/extras/Mesa/src/mesa/shader/arbprogram.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/shader/arbprogram.c:1.1.1.1 Wed Jun 16 09:17:48 2004
++++ xc/extras/Mesa/src/mesa/shader/arbprogram.c Wed Dec 15 01:51:03 2004
+@@ -262,7 +262,7 @@
+ }
+ ASSIGN_4V(ctx->FragmentProgram.Parameters[index], x, y, z, w);
+ }
+- if (target == GL_VERTEX_PROGRAM_ARB
++ else if (target == GL_VERTEX_PROGRAM_ARB
+ && ctx->Extensions.ARB_vertex_program) {
+ if (index >= ctx->Const.MaxVertexProgramEnvParams) {
+ _mesa_error(ctx, GL_INVALID_VALUE, "glProgramEnvParameter(index)");
+@@ -322,7 +322,7 @@
+ }
+ COPY_4V(params, ctx->FragmentProgram.Parameters[index]);
+ }
+- if (target == GL_VERTEX_PROGRAM_ARB
++ else if (target == GL_VERTEX_PROGRAM_ARB
+ && ctx->Extensions.ARB_vertex_program) {
+ if (index >= ctx->Const.MaxVertexProgramEnvParams) {
+ _mesa_error(ctx, GL_INVALID_VALUE, "glGetProgramEnvParameter(index)");
+Index: xc/extras/Mesa/src/mesa/shader/arbvertparse.c
+diff -u xc/extras/Mesa/src/mesa/shader/arbvertparse.c:1.1.1.1 xc/extras/Mesa/src/mesa/shader/arbvertparse.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/shader/arbvertparse.c:1.1.1.1 Wed Jun 16 09:17:49 2004
++++ xc/extras/Mesa/src/mesa/shader/arbvertparse.c Wed Dec 15 01:51:03 2004
+@@ -175,6 +175,7 @@
+ {
+ GLuint retval;
+ struct arb_program ap;
++ (void) target;
+
+ /* set the program target before parsing */
+ ap.Base.Target = GL_VERTEX_PROGRAM_ARB;
+Index: xc/extras/Mesa/src/mesa/shader/grammar.c
+diff -u xc/extras/Mesa/src/mesa/shader/grammar.c:1.1.1.2 xc/extras/Mesa/src/mesa/shader/grammar.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/shader/grammar.c:1.1.1.2 Thu Jul 22 06:51:17 2004
++++ xc/extras/Mesa/src/mesa/shader/grammar.c Wed Dec 15 01:51:03 2004
+@@ -277,14 +277,14 @@
+
+ static byte *unknown = (byte *) "???";
+
+-static void clear_last_error ()
++static void clear_last_error (void)
+ {
+ /* reset error message */
+ error_message = NULL;
+
+ /* free error parameter - if error_param is a "???" don't free it - it's static */
+ if (error_param != unknown)
+- mem_free ((void **) &error_param);
++ mem_free ((void **) (void *) &error_param);
+ else
+ error_param = NULL;
+
+@@ -297,7 +297,7 @@
+ /* error message can only be set only once */
+ if (error_message != NULL)
+ {
+- mem_free ((void **) ¶m);
++ mem_free ((void **) (void *) ¶m);
+ return;
+ }
+
+@@ -768,7 +768,7 @@
+ /*
+ returns unique grammar id
+ */
+-static grammar next_valid_grammar_id ()
++static grammar next_valid_grammar_id (void)
+ {
+ static grammar id = 0;
+
+@@ -1230,7 +1230,7 @@
+ {
+ if (string_grow (&p, &len, *t++))
+ {
+- mem_free ((void **) &p);
++ mem_free ((void **) (void *) &p);
+ return 1;
+ }
+ }
+@@ -1379,7 +1379,7 @@
+
+ if (string_grow (&p, &len, c))
+ {
+- mem_free ((void **) &p);
++ mem_free ((void **) (void *) &p);
+ return 1;
+ }
+ }
+@@ -1424,7 +1424,7 @@
+ }
+
+ m->data = (byte) c[0];
+- mem_free ((void **) &c);
++ mem_free ((void **) (void *) &c);
+ }
+ else
+ {
+@@ -1502,11 +1502,11 @@
+
+ if (!str_equal ((byte *) "error", temp))
+ {
+- mem_free ((void **) &temp);
++ mem_free ((void **) (void *) &temp);
+ return 0;
+ }
+
+- mem_free ((void **) &temp);
++ mem_free ((void **) (void *) &temp);
+
+ error_create (er);
+ if (*er == NULL)
+@@ -1532,12 +1532,12 @@
+
+ if (map_str_find (&maps, temp, &(**er).m_text))
+ {
+- mem_free ((void **) &temp);
++ mem_free ((void **) (void *) &temp);
+ error_destroy (er);
+ return 1;
+ }
+
+- mem_free ((void **) &temp);
++ mem_free ((void **) (void *) &temp);
+ }
+
+ /* try to extract "token" from "...$token$..." */
+@@ -1558,7 +1558,7 @@
+ {
+ if (string_grow (&processed, &len, '$'))
+ {
+- mem_free ((void **) &processed);
++ mem_free ((void **) (void *) &processed);
+ error_destroy (er);
+ return 1;
+ }
+@@ -1569,7 +1569,7 @@
+ {
+ if (string_grow (&processed, &len, (**er).m_text[i]))
+ {
+- mem_free ((void **) &processed);
++ mem_free ((void **) (void *) &processed);
+ error_destroy (er);
+ return 1;
+ }
+@@ -1580,7 +1580,7 @@
+ {
+ if (string_grow (&processed, &len, '$'))
+ {
+- mem_free ((void **) &processed);
++ mem_free ((void **) (void *) &processed);
+ error_destroy (er);
+ return 1;
+ }
+@@ -1591,7 +1591,7 @@
+
+ if (string_grow (&(**er).m_token_name, &tlen, '\0'))
+ {
+- mem_free ((void **) &processed);
++ mem_free ((void **) (void *) &processed);
+ error_destroy (er);
+ return 1;
+ }
+@@ -1603,7 +1603,7 @@
+ {
+ if (string_grow (&(**er).m_token_name, &tlen, (**er).m_text[i]))
+ {
+- mem_free ((void **) &processed);
++ mem_free ((void **) (void *) &processed);
+ error_destroy (er);
+ return 1;
+ }
+@@ -1652,11 +1652,11 @@
+ dest = ed_regbyte;
+ else
+ {
+- mem_free ((void **) &temp);
++ mem_free ((void **) (void *) &temp);
+ return 0;
+ }
+
+- mem_free ((void **) &temp);
++ mem_free ((void **) (void *) &temp);
+
+ emit_create (&e);
+ if (e == NULL)
+@@ -1706,7 +1706,7 @@
+ }
+ e->m_byte = (byte) temp[0];
+
+- mem_free ((void **) &temp);
++ mem_free ((void **) (void *) &temp);
+
+ e->m_emit_type = et_byte;
+ }
+@@ -1720,12 +1720,12 @@
+
+ if (map_byte_find (&mapb, temp, &e->m_byte))
+ {
+- mem_free ((void **) &temp);
++ mem_free ((void **) (void *) &temp);
+ emit_destroy (&e);
+ return 1;
+ }
+
+- mem_free ((void **) &temp);
++ mem_free ((void **) (void *) &temp);
+
+ e->m_emit_type = et_byte;
+ }
+@@ -1819,7 +1819,7 @@
+ t = u;
+ }
+
+- mem_free ((void **) &keyword);
++ mem_free ((void **) (void *) &keyword);
+ }
+
+ if (*t == '\'')
+@@ -1843,7 +1843,7 @@
+
+ if (get_string (&t, &temp2))
+ {
+- mem_free ((void **) &temp);
++ mem_free ((void **) (void *) &temp);
+ spec_destroy (&s);
+ return 1;
+ }
+@@ -1853,7 +1853,7 @@
+ s->m_byte[0] = *temp;
+ s->m_byte[1] = *temp2;
+
+- mem_free ((void **) &temp2);
++ mem_free ((void **) (void *) &temp2);
+ }
+ else
+ {
+@@ -1861,7 +1861,7 @@
+ *s->m_byte = *temp;
+ }
+
+- mem_free ((void **) &temp);
++ mem_free ((void **) (void *) &temp);
+ }
+ else if (*t == '"')
+ {
+@@ -1908,7 +1908,7 @@
+ {
+ if (get_identifier (&t, &s->m_string))
+ {
+- mem_free ((void **) &keyword);
++ mem_free ((void **) (void *) &keyword);
+ spec_destroy (&s);
+ return 1;
+ }
+@@ -1917,7 +1917,7 @@
+ s->m_spec_type = st_identifier_loop;
+ }
+
+- mem_free ((void **) &keyword);
++ mem_free ((void **) (void *) &keyword);
+ }
+ else
+ {
+@@ -1993,7 +1993,7 @@
+ r->m_oper = op_or;
+ }
+
+- mem_free ((void **) &op);
++ mem_free ((void **) (void *) &op);
+
+ if (get_spec (&t, &sp, maps, mapb))
+ {
+@@ -2550,7 +2550,7 @@
+ {
+ map_byte *ma = NULL;
+
+- mem_free ((void **) &symbol);
++ mem_free ((void **) (void *) &symbol);
+
+ if (get_emtcode (&text, &ma))
+ {
+@@ -2565,7 +2565,7 @@
+ {
+ map_byte *ma = NULL;
+
+- mem_free ((void **) &symbol);
++ mem_free ((void **) (void *) &symbol);
+
+ if (get_regbyte (&text, &ma))
+ {
+@@ -2580,7 +2580,7 @@
+ {
+ map_str *ma = NULL;
+
+- mem_free ((void **) &symbol);
++ mem_free ((void **) (void *) &symbol);
+
+ if (get_errtext (&text, &ma))
+ {
+@@ -2593,7 +2593,7 @@
+ /* .string */
+ else if (is_dot && str_equal (symbol, (byte *) "string"))
+ {
+- mem_free ((void **) &symbol);
++ mem_free ((void **) (void *) &symbol);
+
+ if (g->di->m_string != NULL)
+ {
+@@ -2760,7 +2760,7 @@
+ *text = '\0';
+
+ #define APPEND_CHARACTER(x) if (dots_made == 0) {\
+- if (len < size - 1) {\
++ if (len < (int)size - 1) {\
+ text[len++] = (x); text[len] = '\0';\
+ } else {\
+ int i;\
+Index: xc/extras/Mesa/src/mesa/shader/nvfragprog.h
+diff -u xc/extras/Mesa/src/mesa/shader/nvfragprog.h:1.1.1.1 xc/extras/Mesa/src/mesa/shader/nvfragprog.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/shader/nvfragprog.h:1.1.1.1 Wed Jun 16 09:17:51 2004
++++ xc/extras/Mesa/src/mesa/shader/nvfragprog.h Wed Dec 15 01:51:03 2004
+@@ -62,6 +62,7 @@
+
+ /* Fragment program instruction opcodes */
+ enum fp_opcode {
++ FP_OPCODE_INVALID = -1, /* Force signed enum */
+ FP_OPCODE_ABS = 1000, /* ARB_f_p only */
+ FP_OPCODE_ADD,
+ FP_OPCODE_CMP, /* ARB_f_p only */
+Index: xc/extras/Mesa/src/mesa/shader/nvprogram.c
+diff -u xc/extras/Mesa/src/mesa/shader/nvprogram.c:1.1.1.2 xc/extras/Mesa/src/mesa/shader/nvprogram.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/shader/nvprogram.c:1.1.1.2 Thu Jul 22 06:51:17 2004
++++ xc/extras/Mesa/src/mesa/shader/nvprogram.c Wed Dec 15 01:51:03 2004
+@@ -160,12 +160,12 @@
+ }
+
+ prog = (struct program *) _mesa_HashLookup(ctx->Shared->Programs, ids[i]);
+-
+ if (!prog) {
+ _mesa_error(ctx, GL_INVALID_VALUE, "glRequestResidentProgramsNV(id)");
+ return;
+ }
+
++ /* XXX this is really a hardware thing we should hook out */
+ prog->Resident = GL_TRUE;
+ }
+ }
+@@ -529,7 +529,7 @@
+ target == GL_VERTEX_STATE_PROGRAM_NV)
+ && ctx->Extensions.NV_vertex_program) {
+ struct vertex_program *vprog = (struct vertex_program *) prog;
+- if (!vprog) {
++ if (!vprog || prog == &_mesa_DummyProgram) {
+ vprog = (struct vertex_program *)
+ ctx->Driver.NewProgram(ctx, target, id);
+ if (!vprog) {
+@@ -543,7 +543,7 @@
+ else if (target == GL_FRAGMENT_PROGRAM_NV
+ && ctx->Extensions.NV_fragment_program) {
+ struct fragment_program *fprog = (struct fragment_program *) prog;
+- if (!fprog) {
++ if (!fprog || prog == &_mesa_DummyProgram) {
+ fprog = (struct fragment_program *)
+ ctx->Driver.NewProgram(ctx, target, id);
+ if (!fprog) {
+@@ -776,7 +776,7 @@
+ }
+
+ if (len <= 0) {
+- _mesa_error(ctx, GL_INVALID_VALUE, "glProgramNamedParameterNV");
++ _mesa_error(ctx, GL_INVALID_VALUE, "glProgramNamedParameterNV(len)");
+ return;
+ }
+
+@@ -790,7 +790,7 @@
+ return;
+ }
+
+- _mesa_error(ctx, GL_INVALID_VALUE, "glProgramNamedParameterNV");
++ _mesa_error(ctx, GL_INVALID_VALUE, "glProgramNamedParameterNV(name)");
+ }
+
+
+Index: xc/extras/Mesa/src/mesa/shader/nvvertexec.c
+diff -u xc/extras/Mesa/src/mesa/shader/nvvertexec.c:1.1.1.2 xc/extras/Mesa/src/mesa/shader/nvvertexec.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/shader/nvvertexec.c:1.1.1.2 Thu Jul 22 06:51:17 2004
++++ xc/extras/Mesa/src/mesa/shader/nvvertexec.c Wed Dec 15 01:51:03 2004
+@@ -358,8 +358,8 @@
+ * Set x to positive or negative infinity.
+ */
+ #if defined(USE_IEEE) || defined(_WIN32)
+-#define SET_POS_INFINITY(x) ( *((GLuint *) &x) = 0x7F800000 )
+-#define SET_NEG_INFINITY(x) ( *((GLuint *) &x) = 0xFF800000 )
++#define SET_POS_INFINITY(x) ( *((GLuint *) (void *)&x) = 0x7F800000 )
++#define SET_NEG_INFINITY(x) ( *((GLuint *) (void *)&x) = 0xFF800000 )
+ #elif defined(VMS)
+ #define SET_POS_INFINITY(x) x = __MAXFLOAT
+ #define SET_NEG_INFINITY(x) x = -__MAXFLOAT
+@@ -368,7 +368,7 @@
+ #define SET_NEG_INFINITY(x) x = (GLfloat) -HUGE_VAL
+ #endif
+
+-#define SET_FLOAT_BITS(x, bits) ((fi_type *) &(x))->i = bits
++#define SET_FLOAT_BITS(x, bits) ((fi_type *) (void *) &(x))->i = bits
+
+
+ /**
+@@ -467,7 +467,7 @@
+ GLint ii = (GLint) floor_t0;
+ ii = (ii < 23) + 0x3f800000;
+ SET_FLOAT_BITS(q[0], ii);
+- q[0] = *((GLfloat *) &ii);
++ q[0] = *((GLfloat *) (void *)&ii);
+ #else
+ q[0] = (GLfloat) pow(2.0, floor_t0);
+ #endif
+Index: xc/extras/Mesa/src/mesa/shader/nvvertparse.c
+diff -u xc/extras/Mesa/src/mesa/shader/nvvertparse.c:1.1.1.2 xc/extras/Mesa/src/mesa/shader/nvvertparse.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/shader/nvvertparse.c:1.1.1.2 Thu Jul 22 06:51:18 2004
++++ xc/extras/Mesa/src/mesa/shader/nvvertparse.c Wed Dec 15 01:51:03 2004
+@@ -1023,6 +1023,7 @@
+ Parse_OptionSequence(struct parse_state *parseState,
+ struct vp_instruction program[])
+ {
++ (void) program;
+ while (1) {
+ if (!Parse_String(parseState, "OPTION"))
+ return GL_TRUE; /* ok, not an OPTION statement */
+Index: xc/extras/Mesa/src/mesa/shader/program.c
+diff -u xc/extras/Mesa/src/mesa/shader/program.c:1.1.1.3 xc/extras/Mesa/src/mesa/shader/program.c:1.1.1.3.2.1
+--- xc/extras/Mesa/src/mesa/shader/program.c:1.1.1.3 Sat Aug 28 04:28:10 2004
++++ xc/extras/Mesa/src/mesa/shader/program.c Wed Dec 15 01:51:03 2004
+@@ -1,6 +1,6 @@
+ /*
+ * Mesa 3-D graphics library
+- * Version: 6.1
++ * Version: 6.2
+ *
+ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+@@ -46,6 +46,12 @@
+ /**********************************************************************/
+
+
++/* A pointer to this dummy program is put into the hash table when
++ * glGenPrograms is called.
++ */
++struct program _mesa_DummyProgram;
++
++
+ /**
+ * Init context's vertex/fragment program state
+ */
+@@ -163,10 +169,14 @@
+ }
+
+
+-static struct program * _mesa_init_program_struct( GLcontext *ctx,
+- struct program *prog,
+- GLenum target, GLuint id)
++/**
++ * Initialize a new vertex/fragment program object.
++ */
++static struct program *
++_mesa_init_program_struct( GLcontext *ctx, struct program *prog,
++ GLenum target, GLuint id)
+ {
++ (void) ctx;
+ if (prog) {
+ prog->Id = id;
+ prog->Target = target;
+@@ -177,9 +187,13 @@
+ return prog;
+ }
+
+-struct program * _mesa_init_fragment_program( GLcontext *ctx,
+- struct fragment_program *prog,
+- GLenum target, GLuint id)
++
++/**
++ * Initialize a new fragment program object.
++ */
++struct program *
++_mesa_init_fragment_program( GLcontext *ctx, struct fragment_program *prog,
++ GLenum target, GLuint id)
+ {
+ if (prog)
+ return _mesa_init_program_struct( ctx, &prog->Base, target, id );
+@@ -187,9 +201,13 @@
+ return NULL;
+ }
+
+-struct program * _mesa_init_vertex_program( GLcontext *ctx,
+- struct vertex_program *prog,
+- GLenum target, GLuint id)
++
++/**
++ * Initialize a new vertex program object.
++ */
++struct program *
++_mesa_init_vertex_program( GLcontext *ctx, struct vertex_program *prog,
++ GLenum target, GLuint id)
+ {
+ if (prog)
+ return _mesa_init_program_struct( ctx, &prog->Base, target, id );
+@@ -217,12 +235,10 @@
+ case GL_VERTEX_PROGRAM_ARB: /* == GL_VERTEX_PROGRAM_NV */
+ return _mesa_init_vertex_program( ctx, CALLOC_STRUCT(vertex_program),
+ target, id );
+-
+ case GL_FRAGMENT_PROGRAM_NV:
+ case GL_FRAGMENT_PROGRAM_ARB:
+ return _mesa_init_fragment_program( ctx, CALLOC_STRUCT(fragment_program),
+ target, id );
+-
+ default:
+ _mesa_problem(ctx, "bad target in _mesa_new_program");
+ return NULL;
+@@ -239,6 +255,7 @@
+ void
+ _mesa_delete_program(GLcontext *ctx, struct program *prog)
+ {
++ (void) ctx;
+ ASSERT(prog);
+
+ if (prog->String)
+@@ -524,8 +541,7 @@
+ _mesa_problem(ctx, "Invalid material state in fetch_state");
+ return;
+ }
+- };
+- return;
++ }
+ case STATE_LIGHT:
+ {
+ /* state[1] is the light number */
+@@ -573,7 +589,6 @@
+ return;
+ }
+ }
+- return;
+ case STATE_LIGHTMODEL_AMBIENT:
+ COPY_4V(value, ctx->Light.Model.Ambient);
+ return;
+@@ -633,7 +648,6 @@
+ return;
+ }
+ }
+- return;
+ case STATE_TEXGEN:
+ {
+ /* state[1] is the texture unit */
+@@ -669,7 +683,6 @@
+ return;
+ }
+ }
+- return;
+ case STATE_TEXENV_COLOR:
+ {
+ /* state[1] is the texture unit */
+@@ -864,15 +877,19 @@
+ && ctx->Extensions.NV_vertex_program) ||
+ (target == GL_VERTEX_PROGRAM_ARB
+ && ctx->Extensions.ARB_vertex_program)) {
+- if (ctx->VertexProgram.Current &&
+- ctx->VertexProgram.Current->Base.Id == id)
++ /*** Vertex program binding ***/
++ struct vertex_program *curProg = ctx->VertexProgram.Current;
++ if (curProg->Base.Id == id) {
++ /* binding same program - no change */
+ return;
+- /* decrement refcount on previously bound vertex program */
+- if (ctx->VertexProgram.Current) {
+- ctx->VertexProgram.Current->Base.RefCount--;
++ }
++ if (curProg->Base.Id != 0) {
++ /* decrement refcount on previously bound vertex program */
++ curProg->Base.RefCount--;
+ /* and delete if refcount goes below one */
+- if (ctx->VertexProgram.Current->Base.RefCount <= 0) {
+- ctx->Driver.DeleteProgram(ctx, &(ctx->VertexProgram.Current->Base));
++ if (curProg->Base.RefCount <= 0) {
++ ASSERT(curProg->Base.DeletePending);
++ ctx->Driver.DeleteProgram(ctx, &(curProg->Base));
+ _mesa_HashRemove(ctx->Shared->Programs, id);
+ }
+ }
+@@ -881,15 +898,19 @@
+ && ctx->Extensions.NV_fragment_program) ||
+ (target == GL_FRAGMENT_PROGRAM_ARB
+ && ctx->Extensions.ARB_fragment_program)) {
+- if (ctx->FragmentProgram.Current &&
+- ctx->FragmentProgram.Current->Base.Id == id)
++ /*** Fragment program binding ***/
++ struct fragment_program *curProg = ctx->FragmentProgram.Current;
++ if (curProg->Base.Id == id) {
++ /* binding same program - no change */
+ return;
+- /* decrement refcount on previously bound fragment program */
+- if (ctx->FragmentProgram.Current) {
+- ctx->FragmentProgram.Current->Base.RefCount--;
++ }
++ if (curProg->Base.Id != 0) {
++ /* decrement refcount on previously bound fragment program */
++ curProg->Base.RefCount--;
+ /* and delete if refcount goes below one */
+- if (ctx->FragmentProgram.Current->Base.RefCount <= 0) {
+- ctx->Driver.DeleteProgram(ctx, &(ctx->FragmentProgram.Current->Base));
++ if (curProg->Base.RefCount <= 0) {
++ ASSERT(curProg->Base.DeletePending);
++ ctx->Driver.DeleteProgram(ctx, &(curProg->Base));
+ _mesa_HashRemove(ctx->Shared->Programs, id);
+ }
+ }
+@@ -903,7 +924,7 @@
+ * That's supposed to be caught in glBegin.
+ */
+ if (id == 0) {
+- /* default program */
++ /* Bind default program */
+ prog = NULL;
+ if (target == GL_VERTEX_PROGRAM_NV || target == GL_VERTEX_PROGRAM_ARB)
+ prog = ctx->Shared->DefaultVertexProgram;
+@@ -911,19 +932,9 @@
+ prog = ctx->Shared->DefaultFragmentProgram;
+ }
+ else {
++ /* Bind user program */
+ prog = (struct program *) _mesa_HashLookup(ctx->Shared->Programs, id);
+- if (prog) {
+- if (prog->Target == 0) {
+- /* prog was allocated with glGenProgramsNV */
+- prog->Target = target;
+- }
+- else if (prog->Target != target) {
+- _mesa_error(ctx, GL_INVALID_OPERATION,
+- "glBindProgramNV/ARB(target mismatch)");
+- return;
+- }
+- }
+- else {
++ if (!prog || prog == &_mesa_DummyProgram) {
+ /* allocate a new program now */
+ prog = ctx->Driver.NewProgram(ctx, target, id);
+ if (!prog) {
+@@ -932,6 +943,11 @@
+ }
+ _mesa_HashInsert(ctx->Shared->Programs, id, prog);
+ }
++ else if (prog->Target != target) {
++ _mesa_error(ctx, GL_INVALID_OPERATION,
++ "glBindProgramNV/ARB(target mismatch)");
++ return;
++ }
+ }
+
+ /* bind now */
+@@ -942,6 +958,10 @@
+ ctx->FragmentProgram.Current = (struct fragment_program *) prog;
+ }
+
++ /* Never null pointers */
++ ASSERT(ctx->VertexProgram.Current);
++ ASSERT(ctx->FragmentProgram.Current);
++
+ if (prog)
+ prog->RefCount++;
+
+@@ -971,7 +991,11 @@
+ if (ids[i] != 0) {
+ struct program *prog = (struct program *)
+ _mesa_HashLookup(ctx->Shared->Programs, ids[i]);
+- if (prog) {
++ if (prog == &_mesa_DummyProgram) {
++ _mesa_HashRemove(ctx->Shared->Programs, ids[i]);
++ }
++ else if (prog) {
++ /* Unbind program if necessary */
+ if (prog->Target == GL_VERTEX_PROGRAM_NV ||
+ prog->Target == GL_VERTEX_STATE_PROGRAM_NV) {
+ if (ctx->VertexProgram.Current &&
+@@ -992,18 +1016,16 @@
+ _mesa_problem(ctx, "bad target in glDeleteProgramsNV");
+ return;
+ }
+- prog->RefCount--;
++ /* Decrement reference count if not already marked for delete */
++ if (!prog->DeletePending) {
++ prog->DeletePending = GL_TRUE;
++ prog->RefCount--;
++ }
+ if (prog->RefCount <= 0) {
++ _mesa_HashRemove(ctx->Shared->Programs, ids[i]);
+ ctx->Driver.DeleteProgram(ctx, prog);
+ }
+ }
+- /* Always remove entry from hash table.
+- * This is necessary as we can't tell from HashLookup
+- * whether the entry exists with data == 0, or if it
+- * doesn't exist at all. As GenPrograms creates the first
+- * case below, need to call Remove() to avoid memory leak:
+- */
+- _mesa_HashRemove(ctx->Shared->Programs, ids[i]);
+ }
+ }
+ }
+@@ -1032,8 +1054,9 @@
+
+ first = _mesa_HashFindFreeKeyBlock(ctx->Shared->Programs, n);
+
++ /* Insert pointer to dummy program as placeholder */
+ for (i = 0; i < (GLuint) n; i++) {
+- _mesa_HashInsert(ctx->Shared->Programs, first + i, 0);
++ _mesa_HashInsert(ctx->Shared->Programs, first + i, &_mesa_DummyProgram);
+ }
+
+ /* Return the program names */
+@@ -1044,7 +1067,7 @@
+
+
+ /**
+- * Determine if id names a program.
++ * Determine if id names a vertex or fragment program.
+ * \note Not compiled into display lists.
+ * \note Called from both glIsProgramNV and glIsProgramARB.
+ * \param id is the program identifier
+Index: xc/extras/Mesa/src/mesa/shader/program.h
+diff -u xc/extras/Mesa/src/mesa/shader/program.h:1.1.1.2 xc/extras/Mesa/src/mesa/shader/program.h:1.1.1.2.2.1
+--- xc/extras/Mesa/src/mesa/shader/program.h:1.1.1.2 Sat Aug 28 04:28:10 2004
++++ xc/extras/Mesa/src/mesa/shader/program.h Wed Dec 15 01:51:03 2004
+@@ -1,8 +1,8 @@
+ /*
+ * Mesa 3-D graphics library
+- * Version: 5.1
++ * Version: 6.2
+ *
+- * Copyright (C) 1999-2003 Brian Paul All Rights Reserved.
++ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+@@ -29,6 +29,14 @@
+ */
+
+
++/**
++ * \mainpage Mesa vertex and fragment program module
++ *
++ * This module or directory contains most of the code for vertex and
++ * fragment programs and shaders, including state management, parsers,
++ * and (some) software routines for executing programs
++ */
++
+ #ifndef PROGRAM_H
+ #define PROGRAM_H
+
+@@ -44,6 +52,9 @@
+ #define SWIZZLE_ONE 5 /* keep these values together: KW */
+
+
++extern struct program _mesa_DummyProgram;
++
++
+ /*
+ * Internal functions
+ */
+Index: xc/extras/Mesa/src/mesa/sparc/clip.S
+diff -u xc/extras/Mesa/src/mesa/sparc/clip.S:1.1.1.1 xc/extras/Mesa/src/mesa/sparc/clip.S:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/sparc/clip.S:1.1.1.1 Wed Jun 16 09:19:23 2004
++++ xc/extras/Mesa/src/mesa/sparc/clip.S Wed Dec 15 01:51:03 2004
+@@ -2,7 +2,7 @@
+ * Clip testing in SPARC assembly
+ */
+
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ #define LDPTR ldx
+ #define V4F_DATA 0x00
+ #define V4F_START 0x08
+Index: xc/extras/Mesa/src/mesa/sparc/glapi_sparc.S
+diff -u xc/extras/Mesa/src/mesa/sparc/glapi_sparc.S:1.1.1.1 xc/extras/Mesa/src/mesa/sparc/glapi_sparc.S:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/sparc/glapi_sparc.S:1.1.1.1 Wed Jun 16 09:19:24 2004
++++ xc/extras/Mesa/src/mesa/sparc/glapi_sparc.S Wed Dec 15 01:51:03 2004
+@@ -24,7 +24,7 @@
+ .globl glNewList
+ .type glNewList,#function
+ glNewList:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -45,7 +45,7 @@
+ .globl glEndList
+ .type glEndList,#function
+ glEndList:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -66,7 +66,7 @@
+ .globl glCallList
+ .type glCallList,#function
+ glCallList:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -87,7 +87,7 @@
+ .globl glCallLists
+ .type glCallLists,#function
+ glCallLists:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -108,7 +108,7 @@
+ .globl glDeleteLists
+ .type glDeleteLists,#function
+ glDeleteLists:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -129,7 +129,7 @@
+ .globl glGenLists
+ .type glGenLists,#function
+ glGenLists:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -150,7 +150,7 @@
+ .globl glListBase
+ .type glListBase,#function
+ glListBase:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -171,7 +171,7 @@
+ .globl glBegin
+ .type glBegin,#function
+ glBegin:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -192,7 +192,7 @@
+ .globl glBitmap
+ .type glBitmap,#function
+ glBitmap:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -213,7 +213,7 @@
+ .globl glColor3b
+ .type glColor3b,#function
+ glColor3b:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -234,7 +234,7 @@
+ .globl glColor3bv
+ .type glColor3bv,#function
+ glColor3bv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -255,7 +255,7 @@
+ .globl glColor3d
+ .type glColor3d,#function
+ glColor3d:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -276,7 +276,7 @@
+ .globl glColor3dv
+ .type glColor3dv,#function
+ glColor3dv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -297,7 +297,7 @@
+ .globl glColor3f
+ .type glColor3f,#function
+ glColor3f:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -318,7 +318,7 @@
+ .globl glColor3fv
+ .type glColor3fv,#function
+ glColor3fv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -339,7 +339,7 @@
+ .globl glColor3i
+ .type glColor3i,#function
+ glColor3i:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -360,7 +360,7 @@
+ .globl glColor3iv
+ .type glColor3iv,#function
+ glColor3iv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -381,7 +381,7 @@
+ .globl glColor3s
+ .type glColor3s,#function
+ glColor3s:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -402,7 +402,7 @@
+ .globl glColor3sv
+ .type glColor3sv,#function
+ glColor3sv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -423,7 +423,7 @@
+ .globl glColor3ub
+ .type glColor3ub,#function
+ glColor3ub:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -444,7 +444,7 @@
+ .globl glColor3ubv
+ .type glColor3ubv,#function
+ glColor3ubv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -465,7 +465,7 @@
+ .globl glColor3ui
+ .type glColor3ui,#function
+ glColor3ui:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -486,7 +486,7 @@
+ .globl glColor3uiv
+ .type glColor3uiv,#function
+ glColor3uiv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -507,7 +507,7 @@
+ .globl glColor3us
+ .type glColor3us,#function
+ glColor3us:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -528,7 +528,7 @@
+ .globl glColor3usv
+ .type glColor3usv,#function
+ glColor3usv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -549,7 +549,7 @@
+ .globl glColor4b
+ .type glColor4b,#function
+ glColor4b:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -570,7 +570,7 @@
+ .globl glColor4bv
+ .type glColor4bv,#function
+ glColor4bv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -591,7 +591,7 @@
+ .globl glColor4d
+ .type glColor4d,#function
+ glColor4d:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -612,7 +612,7 @@
+ .globl glColor4dv
+ .type glColor4dv,#function
+ glColor4dv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -633,7 +633,7 @@
+ .globl glColor4f
+ .type glColor4f,#function
+ glColor4f:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -654,7 +654,7 @@
+ .globl glColor4fv
+ .type glColor4fv,#function
+ glColor4fv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -675,7 +675,7 @@
+ .globl glColor4i
+ .type glColor4i,#function
+ glColor4i:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -696,7 +696,7 @@
+ .globl glColor4iv
+ .type glColor4iv,#function
+ glColor4iv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -717,7 +717,7 @@
+ .globl glColor4s
+ .type glColor4s,#function
+ glColor4s:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -738,7 +738,7 @@
+ .globl glColor4sv
+ .type glColor4sv,#function
+ glColor4sv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -759,7 +759,7 @@
+ .globl glColor4ub
+ .type glColor4ub,#function
+ glColor4ub:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -780,7 +780,7 @@
+ .globl glColor4ubv
+ .type glColor4ubv,#function
+ glColor4ubv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -801,7 +801,7 @@
+ .globl glColor4ui
+ .type glColor4ui,#function
+ glColor4ui:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -822,7 +822,7 @@
+ .globl glColor4uiv
+ .type glColor4uiv,#function
+ glColor4uiv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -843,7 +843,7 @@
+ .globl glColor4us
+ .type glColor4us,#function
+ glColor4us:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -864,7 +864,7 @@
+ .globl glColor4usv
+ .type glColor4usv,#function
+ glColor4usv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -885,7 +885,7 @@
+ .globl glEdgeFlag
+ .type glEdgeFlag,#function
+ glEdgeFlag:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -906,7 +906,7 @@
+ .globl glEdgeFlagv
+ .type glEdgeFlagv,#function
+ glEdgeFlagv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -927,7 +927,7 @@
+ .globl glEnd
+ .type glEnd,#function
+ glEnd:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -948,7 +948,7 @@
+ .globl glIndexd
+ .type glIndexd,#function
+ glIndexd:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -969,7 +969,7 @@
+ .globl glIndexdv
+ .type glIndexdv,#function
+ glIndexdv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -990,7 +990,7 @@
+ .globl glIndexf
+ .type glIndexf,#function
+ glIndexf:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1011,7 +1011,7 @@
+ .globl glIndexfv
+ .type glIndexfv,#function
+ glIndexfv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1032,7 +1032,7 @@
+ .globl glIndexi
+ .type glIndexi,#function
+ glIndexi:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1053,7 +1053,7 @@
+ .globl glIndexiv
+ .type glIndexiv,#function
+ glIndexiv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1074,7 +1074,7 @@
+ .globl glIndexs
+ .type glIndexs,#function
+ glIndexs:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1095,7 +1095,7 @@
+ .globl glIndexsv
+ .type glIndexsv,#function
+ glIndexsv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1116,7 +1116,7 @@
+ .globl glNormal3b
+ .type glNormal3b,#function
+ glNormal3b:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1137,7 +1137,7 @@
+ .globl glNormal3bv
+ .type glNormal3bv,#function
+ glNormal3bv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1158,7 +1158,7 @@
+ .globl glNormal3d
+ .type glNormal3d,#function
+ glNormal3d:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1179,7 +1179,7 @@
+ .globl glNormal3dv
+ .type glNormal3dv,#function
+ glNormal3dv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1200,7 +1200,7 @@
+ .globl glNormal3f
+ .type glNormal3f,#function
+ glNormal3f:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1221,7 +1221,7 @@
+ .globl glNormal3fv
+ .type glNormal3fv,#function
+ glNormal3fv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1242,7 +1242,7 @@
+ .globl glNormal3i
+ .type glNormal3i,#function
+ glNormal3i:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1263,7 +1263,7 @@
+ .globl glNormal3iv
+ .type glNormal3iv,#function
+ glNormal3iv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1284,7 +1284,7 @@
+ .globl glNormal3s
+ .type glNormal3s,#function
+ glNormal3s:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1305,7 +1305,7 @@
+ .globl glNormal3sv
+ .type glNormal3sv,#function
+ glNormal3sv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1326,7 +1326,7 @@
+ .globl glRasterPos2d
+ .type glRasterPos2d,#function
+ glRasterPos2d:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1347,7 +1347,7 @@
+ .globl glRasterPos2dv
+ .type glRasterPos2dv,#function
+ glRasterPos2dv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1368,7 +1368,7 @@
+ .globl glRasterPos2f
+ .type glRasterPos2f,#function
+ glRasterPos2f:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1389,7 +1389,7 @@
+ .globl glRasterPos2fv
+ .type glRasterPos2fv,#function
+ glRasterPos2fv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1410,7 +1410,7 @@
+ .globl glRasterPos2i
+ .type glRasterPos2i,#function
+ glRasterPos2i:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1431,7 +1431,7 @@
+ .globl glRasterPos2iv
+ .type glRasterPos2iv,#function
+ glRasterPos2iv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1452,7 +1452,7 @@
+ .globl glRasterPos2s
+ .type glRasterPos2s,#function
+ glRasterPos2s:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1473,7 +1473,7 @@
+ .globl glRasterPos2sv
+ .type glRasterPos2sv,#function
+ glRasterPos2sv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1494,7 +1494,7 @@
+ .globl glRasterPos3d
+ .type glRasterPos3d,#function
+ glRasterPos3d:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1515,7 +1515,7 @@
+ .globl glRasterPos3dv
+ .type glRasterPos3dv,#function
+ glRasterPos3dv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1536,7 +1536,7 @@
+ .globl glRasterPos3f
+ .type glRasterPos3f,#function
+ glRasterPos3f:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1557,7 +1557,7 @@
+ .globl glRasterPos3fv
+ .type glRasterPos3fv,#function
+ glRasterPos3fv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1578,7 +1578,7 @@
+ .globl glRasterPos3i
+ .type glRasterPos3i,#function
+ glRasterPos3i:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1599,7 +1599,7 @@
+ .globl glRasterPos3iv
+ .type glRasterPos3iv,#function
+ glRasterPos3iv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1620,7 +1620,7 @@
+ .globl glRasterPos3s
+ .type glRasterPos3s,#function
+ glRasterPos3s:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1641,7 +1641,7 @@
+ .globl glRasterPos3sv
+ .type glRasterPos3sv,#function
+ glRasterPos3sv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1662,7 +1662,7 @@
+ .globl glRasterPos4d
+ .type glRasterPos4d,#function
+ glRasterPos4d:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1683,7 +1683,7 @@
+ .globl glRasterPos4dv
+ .type glRasterPos4dv,#function
+ glRasterPos4dv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1704,7 +1704,7 @@
+ .globl glRasterPos4f
+ .type glRasterPos4f,#function
+ glRasterPos4f:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1725,7 +1725,7 @@
+ .globl glRasterPos4fv
+ .type glRasterPos4fv,#function
+ glRasterPos4fv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1746,7 +1746,7 @@
+ .globl glRasterPos4i
+ .type glRasterPos4i,#function
+ glRasterPos4i:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1767,7 +1767,7 @@
+ .globl glRasterPos4iv
+ .type glRasterPos4iv,#function
+ glRasterPos4iv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1788,7 +1788,7 @@
+ .globl glRasterPos4s
+ .type glRasterPos4s,#function
+ glRasterPos4s:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1809,7 +1809,7 @@
+ .globl glRasterPos4sv
+ .type glRasterPos4sv,#function
+ glRasterPos4sv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1830,7 +1830,7 @@
+ .globl glRectd
+ .type glRectd,#function
+ glRectd:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1851,7 +1851,7 @@
+ .globl glRectdv
+ .type glRectdv,#function
+ glRectdv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1872,7 +1872,7 @@
+ .globl glRectf
+ .type glRectf,#function
+ glRectf:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1893,7 +1893,7 @@
+ .globl glRectfv
+ .type glRectfv,#function
+ glRectfv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1914,7 +1914,7 @@
+ .globl glRecti
+ .type glRecti,#function
+ glRecti:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1935,7 +1935,7 @@
+ .globl glRectiv
+ .type glRectiv,#function
+ glRectiv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1956,7 +1956,7 @@
+ .globl glRects
+ .type glRects,#function
+ glRects:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1977,7 +1977,7 @@
+ .globl glRectsv
+ .type glRectsv,#function
+ glRectsv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -1998,7 +1998,7 @@
+ .globl glTexCoord1d
+ .type glTexCoord1d,#function
+ glTexCoord1d:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2019,7 +2019,7 @@
+ .globl glTexCoord1dv
+ .type glTexCoord1dv,#function
+ glTexCoord1dv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2040,7 +2040,7 @@
+ .globl glTexCoord1f
+ .type glTexCoord1f,#function
+ glTexCoord1f:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2061,7 +2061,7 @@
+ .globl glTexCoord1fv
+ .type glTexCoord1fv,#function
+ glTexCoord1fv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2082,7 +2082,7 @@
+ .globl glTexCoord1i
+ .type glTexCoord1i,#function
+ glTexCoord1i:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2103,7 +2103,7 @@
+ .globl glTexCoord1iv
+ .type glTexCoord1iv,#function
+ glTexCoord1iv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2124,7 +2124,7 @@
+ .globl glTexCoord1s
+ .type glTexCoord1s,#function
+ glTexCoord1s:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2145,7 +2145,7 @@
+ .globl glTexCoord1sv
+ .type glTexCoord1sv,#function
+ glTexCoord1sv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2166,7 +2166,7 @@
+ .globl glTexCoord2d
+ .type glTexCoord2d,#function
+ glTexCoord2d:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2187,7 +2187,7 @@
+ .globl glTexCoord2dv
+ .type glTexCoord2dv,#function
+ glTexCoord2dv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2208,7 +2208,7 @@
+ .globl glTexCoord2f
+ .type glTexCoord2f,#function
+ glTexCoord2f:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2229,7 +2229,7 @@
+ .globl glTexCoord2fv
+ .type glTexCoord2fv,#function
+ glTexCoord2fv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2250,7 +2250,7 @@
+ .globl glTexCoord2i
+ .type glTexCoord2i,#function
+ glTexCoord2i:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2271,7 +2271,7 @@
+ .globl glTexCoord2iv
+ .type glTexCoord2iv,#function
+ glTexCoord2iv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2292,7 +2292,7 @@
+ .globl glTexCoord2s
+ .type glTexCoord2s,#function
+ glTexCoord2s:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2313,7 +2313,7 @@
+ .globl glTexCoord2sv
+ .type glTexCoord2sv,#function
+ glTexCoord2sv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2334,7 +2334,7 @@
+ .globl glTexCoord3d
+ .type glTexCoord3d,#function
+ glTexCoord3d:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2355,7 +2355,7 @@
+ .globl glTexCoord3dv
+ .type glTexCoord3dv,#function
+ glTexCoord3dv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2376,7 +2376,7 @@
+ .globl glTexCoord3f
+ .type glTexCoord3f,#function
+ glTexCoord3f:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2397,7 +2397,7 @@
+ .globl glTexCoord3fv
+ .type glTexCoord3fv,#function
+ glTexCoord3fv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2418,7 +2418,7 @@
+ .globl glTexCoord3i
+ .type glTexCoord3i,#function
+ glTexCoord3i:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2439,7 +2439,7 @@
+ .globl glTexCoord3iv
+ .type glTexCoord3iv,#function
+ glTexCoord3iv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2460,7 +2460,7 @@
+ .globl glTexCoord3s
+ .type glTexCoord3s,#function
+ glTexCoord3s:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2481,7 +2481,7 @@
+ .globl glTexCoord3sv
+ .type glTexCoord3sv,#function
+ glTexCoord3sv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2502,7 +2502,7 @@
+ .globl glTexCoord4d
+ .type glTexCoord4d,#function
+ glTexCoord4d:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2523,7 +2523,7 @@
+ .globl glTexCoord4dv
+ .type glTexCoord4dv,#function
+ glTexCoord4dv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2544,7 +2544,7 @@
+ .globl glTexCoord4f
+ .type glTexCoord4f,#function
+ glTexCoord4f:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2565,7 +2565,7 @@
+ .globl glTexCoord4fv
+ .type glTexCoord4fv,#function
+ glTexCoord4fv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2586,7 +2586,7 @@
+ .globl glTexCoord4i
+ .type glTexCoord4i,#function
+ glTexCoord4i:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2607,7 +2607,7 @@
+ .globl glTexCoord4iv
+ .type glTexCoord4iv,#function
+ glTexCoord4iv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2628,7 +2628,7 @@
+ .globl glTexCoord4s
+ .type glTexCoord4s,#function
+ glTexCoord4s:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2649,7 +2649,7 @@
+ .globl glTexCoord4sv
+ .type glTexCoord4sv,#function
+ glTexCoord4sv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2670,7 +2670,7 @@
+ .globl glVertex2d
+ .type glVertex2d,#function
+ glVertex2d:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2691,7 +2691,7 @@
+ .globl glVertex2dv
+ .type glVertex2dv,#function
+ glVertex2dv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2712,7 +2712,7 @@
+ .globl glVertex2f
+ .type glVertex2f,#function
+ glVertex2f:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2733,7 +2733,7 @@
+ .globl glVertex2fv
+ .type glVertex2fv,#function
+ glVertex2fv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2754,7 +2754,7 @@
+ .globl glVertex2i
+ .type glVertex2i,#function
+ glVertex2i:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2775,7 +2775,7 @@
+ .globl glVertex2iv
+ .type glVertex2iv,#function
+ glVertex2iv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2796,7 +2796,7 @@
+ .globl glVertex2s
+ .type glVertex2s,#function
+ glVertex2s:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2817,7 +2817,7 @@
+ .globl glVertex2sv
+ .type glVertex2sv,#function
+ glVertex2sv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2838,7 +2838,7 @@
+ .globl glVertex3d
+ .type glVertex3d,#function
+ glVertex3d:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2859,7 +2859,7 @@
+ .globl glVertex3dv
+ .type glVertex3dv,#function
+ glVertex3dv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2880,7 +2880,7 @@
+ .globl glVertex3f
+ .type glVertex3f,#function
+ glVertex3f:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2901,7 +2901,7 @@
+ .globl glVertex3fv
+ .type glVertex3fv,#function
+ glVertex3fv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2922,7 +2922,7 @@
+ .globl glVertex3i
+ .type glVertex3i,#function
+ glVertex3i:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2943,7 +2943,7 @@
+ .globl glVertex3iv
+ .type glVertex3iv,#function
+ glVertex3iv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2964,7 +2964,7 @@
+ .globl glVertex3s
+ .type glVertex3s,#function
+ glVertex3s:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -2985,7 +2985,7 @@
+ .globl glVertex3sv
+ .type glVertex3sv,#function
+ glVertex3sv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3006,7 +3006,7 @@
+ .globl glVertex4d
+ .type glVertex4d,#function
+ glVertex4d:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3027,7 +3027,7 @@
+ .globl glVertex4dv
+ .type glVertex4dv,#function
+ glVertex4dv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3048,7 +3048,7 @@
+ .globl glVertex4f
+ .type glVertex4f,#function
+ glVertex4f:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3069,7 +3069,7 @@
+ .globl glVertex4fv
+ .type glVertex4fv,#function
+ glVertex4fv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3090,7 +3090,7 @@
+ .globl glVertex4i
+ .type glVertex4i,#function
+ glVertex4i:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3111,7 +3111,7 @@
+ .globl glVertex4iv
+ .type glVertex4iv,#function
+ glVertex4iv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3132,7 +3132,7 @@
+ .globl glVertex4s
+ .type glVertex4s,#function
+ glVertex4s:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3153,7 +3153,7 @@
+ .globl glVertex4sv
+ .type glVertex4sv,#function
+ glVertex4sv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3174,7 +3174,7 @@
+ .globl glClipPlane
+ .type glClipPlane,#function
+ glClipPlane:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3195,7 +3195,7 @@
+ .globl glColorMaterial
+ .type glColorMaterial,#function
+ glColorMaterial:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3216,7 +3216,7 @@
+ .globl glCullFace
+ .type glCullFace,#function
+ glCullFace:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3237,7 +3237,7 @@
+ .globl glFogf
+ .type glFogf,#function
+ glFogf:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3258,7 +3258,7 @@
+ .globl glFogfv
+ .type glFogfv,#function
+ glFogfv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3279,7 +3279,7 @@
+ .globl glFogi
+ .type glFogi,#function
+ glFogi:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3300,7 +3300,7 @@
+ .globl glFogiv
+ .type glFogiv,#function
+ glFogiv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3321,7 +3321,7 @@
+ .globl glFrontFace
+ .type glFrontFace,#function
+ glFrontFace:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3342,7 +3342,7 @@
+ .globl glHint
+ .type glHint,#function
+ glHint:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3363,7 +3363,7 @@
+ .globl glLightf
+ .type glLightf,#function
+ glLightf:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3384,7 +3384,7 @@
+ .globl glLightfv
+ .type glLightfv,#function
+ glLightfv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3405,7 +3405,7 @@
+ .globl glLighti
+ .type glLighti,#function
+ glLighti:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3426,7 +3426,7 @@
+ .globl glLightiv
+ .type glLightiv,#function
+ glLightiv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3447,7 +3447,7 @@
+ .globl glLightModelf
+ .type glLightModelf,#function
+ glLightModelf:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3468,7 +3468,7 @@
+ .globl glLightModelfv
+ .type glLightModelfv,#function
+ glLightModelfv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3489,7 +3489,7 @@
+ .globl glLightModeli
+ .type glLightModeli,#function
+ glLightModeli:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3510,7 +3510,7 @@
+ .globl glLightModeliv
+ .type glLightModeliv,#function
+ glLightModeliv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3531,7 +3531,7 @@
+ .globl glLineStipple
+ .type glLineStipple,#function
+ glLineStipple:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3552,7 +3552,7 @@
+ .globl glLineWidth
+ .type glLineWidth,#function
+ glLineWidth:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3573,7 +3573,7 @@
+ .globl glMaterialf
+ .type glMaterialf,#function
+ glMaterialf:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3594,7 +3594,7 @@
+ .globl glMaterialfv
+ .type glMaterialfv,#function
+ glMaterialfv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3615,7 +3615,7 @@
+ .globl glMateriali
+ .type glMateriali,#function
+ glMateriali:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3636,7 +3636,7 @@
+ .globl glMaterialiv
+ .type glMaterialiv,#function
+ glMaterialiv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3657,7 +3657,7 @@
+ .globl glPointSize
+ .type glPointSize,#function
+ glPointSize:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3678,7 +3678,7 @@
+ .globl glPolygonMode
+ .type glPolygonMode,#function
+ glPolygonMode:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3699,7 +3699,7 @@
+ .globl glPolygonStipple
+ .type glPolygonStipple,#function
+ glPolygonStipple:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3720,7 +3720,7 @@
+ .globl glScissor
+ .type glScissor,#function
+ glScissor:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3741,7 +3741,7 @@
+ .globl glShadeModel
+ .type glShadeModel,#function
+ glShadeModel:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3762,7 +3762,7 @@
+ .globl glTexParameterf
+ .type glTexParameterf,#function
+ glTexParameterf:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3783,7 +3783,7 @@
+ .globl glTexParameterfv
+ .type glTexParameterfv,#function
+ glTexParameterfv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3804,7 +3804,7 @@
+ .globl glTexParameteri
+ .type glTexParameteri,#function
+ glTexParameteri:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3825,7 +3825,7 @@
+ .globl glTexParameteriv
+ .type glTexParameteriv,#function
+ glTexParameteriv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3846,7 +3846,7 @@
+ .globl glTexImage1D
+ .type glTexImage1D,#function
+ glTexImage1D:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3867,7 +3867,7 @@
+ .globl glTexImage2D
+ .type glTexImage2D,#function
+ glTexImage2D:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3888,7 +3888,7 @@
+ .globl glTexEnvf
+ .type glTexEnvf,#function
+ glTexEnvf:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3909,7 +3909,7 @@
+ .globl glTexEnvfv
+ .type glTexEnvfv,#function
+ glTexEnvfv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3930,7 +3930,7 @@
+ .globl glTexEnvi
+ .type glTexEnvi,#function
+ glTexEnvi:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3951,7 +3951,7 @@
+ .globl glTexEnviv
+ .type glTexEnviv,#function
+ glTexEnviv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3972,7 +3972,7 @@
+ .globl glTexGend
+ .type glTexGend,#function
+ glTexGend:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -3993,7 +3993,7 @@
+ .globl glTexGendv
+ .type glTexGendv,#function
+ glTexGendv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4014,7 +4014,7 @@
+ .globl glTexGenf
+ .type glTexGenf,#function
+ glTexGenf:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4035,7 +4035,7 @@
+ .globl glTexGenfv
+ .type glTexGenfv,#function
+ glTexGenfv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4056,7 +4056,7 @@
+ .globl glTexGeni
+ .type glTexGeni,#function
+ glTexGeni:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4077,7 +4077,7 @@
+ .globl glTexGeniv
+ .type glTexGeniv,#function
+ glTexGeniv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4098,7 +4098,7 @@
+ .globl glFeedbackBuffer
+ .type glFeedbackBuffer,#function
+ glFeedbackBuffer:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4119,7 +4119,7 @@
+ .globl glSelectBuffer
+ .type glSelectBuffer,#function
+ glSelectBuffer:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4140,7 +4140,7 @@
+ .globl glRenderMode
+ .type glRenderMode,#function
+ glRenderMode:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4161,7 +4161,7 @@
+ .globl glInitNames
+ .type glInitNames,#function
+ glInitNames:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4182,7 +4182,7 @@
+ .globl glLoadName
+ .type glLoadName,#function
+ glLoadName:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4203,7 +4203,7 @@
+ .globl glPassThrough
+ .type glPassThrough,#function
+ glPassThrough:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4224,7 +4224,7 @@
+ .globl glPopName
+ .type glPopName,#function
+ glPopName:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4245,7 +4245,7 @@
+ .globl glPushName
+ .type glPushName,#function
+ glPushName:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4266,7 +4266,7 @@
+ .globl glDrawBuffer
+ .type glDrawBuffer,#function
+ glDrawBuffer:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4287,7 +4287,7 @@
+ .globl glClear
+ .type glClear,#function
+ glClear:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4308,7 +4308,7 @@
+ .globl glClearAccum
+ .type glClearAccum,#function
+ glClearAccum:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4329,7 +4329,7 @@
+ .globl glClearIndex
+ .type glClearIndex,#function
+ glClearIndex:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4350,7 +4350,7 @@
+ .globl glClearColor
+ .type glClearColor,#function
+ glClearColor:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4371,7 +4371,7 @@
+ .globl glClearStencil
+ .type glClearStencil,#function
+ glClearStencil:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4392,7 +4392,7 @@
+ .globl glClearDepth
+ .type glClearDepth,#function
+ glClearDepth:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4413,7 +4413,7 @@
+ .globl glStencilMask
+ .type glStencilMask,#function
+ glStencilMask:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4434,7 +4434,7 @@
+ .globl glColorMask
+ .type glColorMask,#function
+ glColorMask:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4455,7 +4455,7 @@
+ .globl glDepthMask
+ .type glDepthMask,#function
+ glDepthMask:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4476,7 +4476,7 @@
+ .globl glIndexMask
+ .type glIndexMask,#function
+ glIndexMask:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4497,7 +4497,7 @@
+ .globl glAccum
+ .type glAccum,#function
+ glAccum:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4518,7 +4518,7 @@
+ .globl glDisable
+ .type glDisable,#function
+ glDisable:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4539,7 +4539,7 @@
+ .globl glEnable
+ .type glEnable,#function
+ glEnable:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4560,7 +4560,7 @@
+ .globl glFinish
+ .type glFinish,#function
+ glFinish:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4581,7 +4581,7 @@
+ .globl glFlush
+ .type glFlush,#function
+ glFlush:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4602,7 +4602,7 @@
+ .globl glPopAttrib
+ .type glPopAttrib,#function
+ glPopAttrib:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4623,7 +4623,7 @@
+ .globl glPushAttrib
+ .type glPushAttrib,#function
+ glPushAttrib:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4644,7 +4644,7 @@
+ .globl glMap1d
+ .type glMap1d,#function
+ glMap1d:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4665,7 +4665,7 @@
+ .globl glMap1f
+ .type glMap1f,#function
+ glMap1f:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4686,7 +4686,7 @@
+ .globl glMap2d
+ .type glMap2d,#function
+ glMap2d:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4707,7 +4707,7 @@
+ .globl glMap2f
+ .type glMap2f,#function
+ glMap2f:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4728,7 +4728,7 @@
+ .globl glMapGrid1d
+ .type glMapGrid1d,#function
+ glMapGrid1d:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4749,7 +4749,7 @@
+ .globl glMapGrid1f
+ .type glMapGrid1f,#function
+ glMapGrid1f:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4770,7 +4770,7 @@
+ .globl glMapGrid2d
+ .type glMapGrid2d,#function
+ glMapGrid2d:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4791,7 +4791,7 @@
+ .globl glMapGrid2f
+ .type glMapGrid2f,#function
+ glMapGrid2f:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4812,7 +4812,7 @@
+ .globl glEvalCoord1d
+ .type glEvalCoord1d,#function
+ glEvalCoord1d:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4833,7 +4833,7 @@
+ .globl glEvalCoord1dv
+ .type glEvalCoord1dv,#function
+ glEvalCoord1dv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4854,7 +4854,7 @@
+ .globl glEvalCoord1f
+ .type glEvalCoord1f,#function
+ glEvalCoord1f:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4875,7 +4875,7 @@
+ .globl glEvalCoord1fv
+ .type glEvalCoord1fv,#function
+ glEvalCoord1fv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4896,7 +4896,7 @@
+ .globl glEvalCoord2d
+ .type glEvalCoord2d,#function
+ glEvalCoord2d:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4917,7 +4917,7 @@
+ .globl glEvalCoord2dv
+ .type glEvalCoord2dv,#function
+ glEvalCoord2dv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4938,7 +4938,7 @@
+ .globl glEvalCoord2f
+ .type glEvalCoord2f,#function
+ glEvalCoord2f:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4959,7 +4959,7 @@
+ .globl glEvalCoord2fv
+ .type glEvalCoord2fv,#function
+ glEvalCoord2fv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -4980,7 +4980,7 @@
+ .globl glEvalMesh1
+ .type glEvalMesh1,#function
+ glEvalMesh1:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5001,7 +5001,7 @@
+ .globl glEvalPoint1
+ .type glEvalPoint1,#function
+ glEvalPoint1:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5022,7 +5022,7 @@
+ .globl glEvalMesh2
+ .type glEvalMesh2,#function
+ glEvalMesh2:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5043,7 +5043,7 @@
+ .globl glEvalPoint2
+ .type glEvalPoint2,#function
+ glEvalPoint2:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5064,7 +5064,7 @@
+ .globl glAlphaFunc
+ .type glAlphaFunc,#function
+ glAlphaFunc:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5085,7 +5085,7 @@
+ .globl glBlendFunc
+ .type glBlendFunc,#function
+ glBlendFunc:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5106,7 +5106,7 @@
+ .globl glLogicOp
+ .type glLogicOp,#function
+ glLogicOp:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5127,7 +5127,7 @@
+ .globl glStencilFunc
+ .type glStencilFunc,#function
+ glStencilFunc:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5148,7 +5148,7 @@
+ .globl glStencilOp
+ .type glStencilOp,#function
+ glStencilOp:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5169,7 +5169,7 @@
+ .globl glDepthFunc
+ .type glDepthFunc,#function
+ glDepthFunc:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5190,7 +5190,7 @@
+ .globl glPixelZoom
+ .type glPixelZoom,#function
+ glPixelZoom:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5211,7 +5211,7 @@
+ .globl glPixelTransferf
+ .type glPixelTransferf,#function
+ glPixelTransferf:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5232,7 +5232,7 @@
+ .globl glPixelTransferi
+ .type glPixelTransferi,#function
+ glPixelTransferi:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5253,7 +5253,7 @@
+ .globl glPixelStoref
+ .type glPixelStoref,#function
+ glPixelStoref:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5274,7 +5274,7 @@
+ .globl glPixelStorei
+ .type glPixelStorei,#function
+ glPixelStorei:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5295,7 +5295,7 @@
+ .globl glPixelMapfv
+ .type glPixelMapfv,#function
+ glPixelMapfv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5316,7 +5316,7 @@
+ .globl glPixelMapuiv
+ .type glPixelMapuiv,#function
+ glPixelMapuiv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5337,7 +5337,7 @@
+ .globl glPixelMapusv
+ .type glPixelMapusv,#function
+ glPixelMapusv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5358,7 +5358,7 @@
+ .globl glReadBuffer
+ .type glReadBuffer,#function
+ glReadBuffer:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5379,7 +5379,7 @@
+ .globl glCopyPixels
+ .type glCopyPixels,#function
+ glCopyPixels:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5400,7 +5400,7 @@
+ .globl glReadPixels
+ .type glReadPixels,#function
+ glReadPixels:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5421,7 +5421,7 @@
+ .globl glDrawPixels
+ .type glDrawPixels,#function
+ glDrawPixels:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5442,7 +5442,7 @@
+ .globl glGetBooleanv
+ .type glGetBooleanv,#function
+ glGetBooleanv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5463,7 +5463,7 @@
+ .globl glGetClipPlane
+ .type glGetClipPlane,#function
+ glGetClipPlane:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5484,7 +5484,7 @@
+ .globl glGetDoublev
+ .type glGetDoublev,#function
+ glGetDoublev:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5505,7 +5505,7 @@
+ .globl glGetError
+ .type glGetError,#function
+ glGetError:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5526,7 +5526,7 @@
+ .globl glGetFloatv
+ .type glGetFloatv,#function
+ glGetFloatv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5547,7 +5547,7 @@
+ .globl glGetIntegerv
+ .type glGetIntegerv,#function
+ glGetIntegerv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5568,7 +5568,7 @@
+ .globl glGetLightfv
+ .type glGetLightfv,#function
+ glGetLightfv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5589,7 +5589,7 @@
+ .globl glGetLightiv
+ .type glGetLightiv,#function
+ glGetLightiv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5610,7 +5610,7 @@
+ .globl glGetMapdv
+ .type glGetMapdv,#function
+ glGetMapdv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5631,7 +5631,7 @@
+ .globl glGetMapfv
+ .type glGetMapfv,#function
+ glGetMapfv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5652,7 +5652,7 @@
+ .globl glGetMapiv
+ .type glGetMapiv,#function
+ glGetMapiv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5673,7 +5673,7 @@
+ .globl glGetMaterialfv
+ .type glGetMaterialfv,#function
+ glGetMaterialfv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5694,7 +5694,7 @@
+ .globl glGetMaterialiv
+ .type glGetMaterialiv,#function
+ glGetMaterialiv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5715,7 +5715,7 @@
+ .globl glGetPixelMapfv
+ .type glGetPixelMapfv,#function
+ glGetPixelMapfv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5736,7 +5736,7 @@
+ .globl glGetPixelMapuiv
+ .type glGetPixelMapuiv,#function
+ glGetPixelMapuiv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5757,7 +5757,7 @@
+ .globl glGetPixelMapusv
+ .type glGetPixelMapusv,#function
+ glGetPixelMapusv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5778,7 +5778,7 @@
+ .globl glGetPolygonStipple
+ .type glGetPolygonStipple,#function
+ glGetPolygonStipple:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5799,7 +5799,7 @@
+ .globl glGetString
+ .type glGetString,#function
+ glGetString:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5820,7 +5820,7 @@
+ .globl glGetTexEnvfv
+ .type glGetTexEnvfv,#function
+ glGetTexEnvfv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5841,7 +5841,7 @@
+ .globl glGetTexEnviv
+ .type glGetTexEnviv,#function
+ glGetTexEnviv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5862,7 +5862,7 @@
+ .globl glGetTexGendv
+ .type glGetTexGendv,#function
+ glGetTexGendv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5883,7 +5883,7 @@
+ .globl glGetTexGenfv
+ .type glGetTexGenfv,#function
+ glGetTexGenfv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5904,7 +5904,7 @@
+ .globl glGetTexGeniv
+ .type glGetTexGeniv,#function
+ glGetTexGeniv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5925,7 +5925,7 @@
+ .globl glGetTexImage
+ .type glGetTexImage,#function
+ glGetTexImage:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5946,7 +5946,7 @@
+ .globl glGetTexParameterfv
+ .type glGetTexParameterfv,#function
+ glGetTexParameterfv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5967,7 +5967,7 @@
+ .globl glGetTexParameteriv
+ .type glGetTexParameteriv,#function
+ glGetTexParameteriv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -5988,7 +5988,7 @@
+ .globl glGetTexLevelParameterfv
+ .type glGetTexLevelParameterfv,#function
+ glGetTexLevelParameterfv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6009,7 +6009,7 @@
+ .globl glGetTexLevelParameteriv
+ .type glGetTexLevelParameteriv,#function
+ glGetTexLevelParameteriv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6030,7 +6030,7 @@
+ .globl glIsEnabled
+ .type glIsEnabled,#function
+ glIsEnabled:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6051,7 +6051,7 @@
+ .globl glIsList
+ .type glIsList,#function
+ glIsList:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6072,7 +6072,7 @@
+ .globl glDepthRange
+ .type glDepthRange,#function
+ glDepthRange:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6093,7 +6093,7 @@
+ .globl glFrustum
+ .type glFrustum,#function
+ glFrustum:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6114,7 +6114,7 @@
+ .globl glLoadIdentity
+ .type glLoadIdentity,#function
+ glLoadIdentity:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6135,7 +6135,7 @@
+ .globl glLoadMatrixf
+ .type glLoadMatrixf,#function
+ glLoadMatrixf:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6156,7 +6156,7 @@
+ .globl glLoadMatrixd
+ .type glLoadMatrixd,#function
+ glLoadMatrixd:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6177,7 +6177,7 @@
+ .globl glMatrixMode
+ .type glMatrixMode,#function
+ glMatrixMode:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6198,7 +6198,7 @@
+ .globl glMultMatrixf
+ .type glMultMatrixf,#function
+ glMultMatrixf:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6219,7 +6219,7 @@
+ .globl glMultMatrixd
+ .type glMultMatrixd,#function
+ glMultMatrixd:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6240,7 +6240,7 @@
+ .globl glOrtho
+ .type glOrtho,#function
+ glOrtho:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6261,7 +6261,7 @@
+ .globl glPopMatrix
+ .type glPopMatrix,#function
+ glPopMatrix:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6282,7 +6282,7 @@
+ .globl glPushMatrix
+ .type glPushMatrix,#function
+ glPushMatrix:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6303,7 +6303,7 @@
+ .globl glRotated
+ .type glRotated,#function
+ glRotated:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6324,7 +6324,7 @@
+ .globl glRotatef
+ .type glRotatef,#function
+ glRotatef:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6345,7 +6345,7 @@
+ .globl glScaled
+ .type glScaled,#function
+ glScaled:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6366,7 +6366,7 @@
+ .globl glScalef
+ .type glScalef,#function
+ glScalef:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6387,7 +6387,7 @@
+ .globl glTranslated
+ .type glTranslated,#function
+ glTranslated:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6408,7 +6408,7 @@
+ .globl glTranslatef
+ .type glTranslatef,#function
+ glTranslatef:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6429,7 +6429,7 @@
+ .globl glViewport
+ .type glViewport,#function
+ glViewport:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6450,7 +6450,7 @@
+ .globl glArrayElement
+ .type glArrayElement,#function
+ glArrayElement:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6471,7 +6471,7 @@
+ .globl glColorPointer
+ .type glColorPointer,#function
+ glColorPointer:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6492,7 +6492,7 @@
+ .globl glDisableClientState
+ .type glDisableClientState,#function
+ glDisableClientState:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6513,7 +6513,7 @@
+ .globl glDrawArrays
+ .type glDrawArrays,#function
+ glDrawArrays:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6534,7 +6534,7 @@
+ .globl glDrawElements
+ .type glDrawElements,#function
+ glDrawElements:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6555,7 +6555,7 @@
+ .globl glEdgeFlagPointer
+ .type glEdgeFlagPointer,#function
+ glEdgeFlagPointer:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6576,7 +6576,7 @@
+ .globl glEnableClientState
+ .type glEnableClientState,#function
+ glEnableClientState:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6597,7 +6597,7 @@
+ .globl glGetPointerv
+ .type glGetPointerv,#function
+ glGetPointerv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6618,7 +6618,7 @@
+ .globl glIndexPointer
+ .type glIndexPointer,#function
+ glIndexPointer:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6639,7 +6639,7 @@
+ .globl glInterleavedArrays
+ .type glInterleavedArrays,#function
+ glInterleavedArrays:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6660,7 +6660,7 @@
+ .globl glNormalPointer
+ .type glNormalPointer,#function
+ glNormalPointer:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6681,7 +6681,7 @@
+ .globl glTexCoordPointer
+ .type glTexCoordPointer,#function
+ glTexCoordPointer:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6702,7 +6702,7 @@
+ .globl glVertexPointer
+ .type glVertexPointer,#function
+ glVertexPointer:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6723,7 +6723,7 @@
+ .globl glPolygonOffset
+ .type glPolygonOffset,#function
+ glPolygonOffset:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6744,7 +6744,7 @@
+ .globl glCopyTexImage1D
+ .type glCopyTexImage1D,#function
+ glCopyTexImage1D:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6765,7 +6765,7 @@
+ .globl glCopyTexImage2D
+ .type glCopyTexImage2D,#function
+ glCopyTexImage2D:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6786,7 +6786,7 @@
+ .globl glCopyTexSubImage1D
+ .type glCopyTexSubImage1D,#function
+ glCopyTexSubImage1D:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6807,7 +6807,7 @@
+ .globl glCopyTexSubImage2D
+ .type glCopyTexSubImage2D,#function
+ glCopyTexSubImage2D:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6828,7 +6828,7 @@
+ .globl glTexSubImage1D
+ .type glTexSubImage1D,#function
+ glTexSubImage1D:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6849,7 +6849,7 @@
+ .globl glTexSubImage2D
+ .type glTexSubImage2D,#function
+ glTexSubImage2D:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6870,7 +6870,7 @@
+ .globl glAreTexturesResident
+ .type glAreTexturesResident,#function
+ glAreTexturesResident:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6891,7 +6891,7 @@
+ .globl glBindTexture
+ .type glBindTexture,#function
+ glBindTexture:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6912,7 +6912,7 @@
+ .globl glDeleteTextures
+ .type glDeleteTextures,#function
+ glDeleteTextures:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6933,7 +6933,7 @@
+ .globl glGenTextures
+ .type glGenTextures,#function
+ glGenTextures:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6954,7 +6954,7 @@
+ .globl glIsTexture
+ .type glIsTexture,#function
+ glIsTexture:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6975,7 +6975,7 @@
+ .globl glPrioritizeTextures
+ .type glPrioritizeTextures,#function
+ glPrioritizeTextures:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -6996,7 +6996,7 @@
+ .globl glIndexub
+ .type glIndexub,#function
+ glIndexub:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7017,7 +7017,7 @@
+ .globl glIndexubv
+ .type glIndexubv,#function
+ glIndexubv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7038,7 +7038,7 @@
+ .globl glPopClientAttrib
+ .type glPopClientAttrib,#function
+ glPopClientAttrib:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7059,7 +7059,7 @@
+ .globl glPushClientAttrib
+ .type glPushClientAttrib,#function
+ glPushClientAttrib:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7080,7 +7080,7 @@
+ .globl glBlendColor
+ .type glBlendColor,#function
+ glBlendColor:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7101,7 +7101,7 @@
+ .globl glBlendEquation
+ .type glBlendEquation,#function
+ glBlendEquation:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7122,7 +7122,7 @@
+ .globl glDrawRangeElements
+ .type glDrawRangeElements,#function
+ glDrawRangeElements:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7143,7 +7143,7 @@
+ .globl glColorTable
+ .type glColorTable,#function
+ glColorTable:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7164,7 +7164,7 @@
+ .globl glColorTableParameterfv
+ .type glColorTableParameterfv,#function
+ glColorTableParameterfv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7185,7 +7185,7 @@
+ .globl glColorTableParameteriv
+ .type glColorTableParameteriv,#function
+ glColorTableParameteriv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7206,7 +7206,7 @@
+ .globl glCopyColorTable
+ .type glCopyColorTable,#function
+ glCopyColorTable:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7227,7 +7227,7 @@
+ .globl glGetColorTable
+ .type glGetColorTable,#function
+ glGetColorTable:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7248,7 +7248,7 @@
+ .globl glGetColorTableParameterfv
+ .type glGetColorTableParameterfv,#function
+ glGetColorTableParameterfv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7269,7 +7269,7 @@
+ .globl glGetColorTableParameteriv
+ .type glGetColorTableParameteriv,#function
+ glGetColorTableParameteriv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7290,7 +7290,7 @@
+ .globl glColorSubTable
+ .type glColorSubTable,#function
+ glColorSubTable:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7311,7 +7311,7 @@
+ .globl glCopyColorSubTable
+ .type glCopyColorSubTable,#function
+ glCopyColorSubTable:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7332,7 +7332,7 @@
+ .globl glConvolutionFilter1D
+ .type glConvolutionFilter1D,#function
+ glConvolutionFilter1D:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7353,7 +7353,7 @@
+ .globl glConvolutionFilter2D
+ .type glConvolutionFilter2D,#function
+ glConvolutionFilter2D:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7374,7 +7374,7 @@
+ .globl glConvolutionParameterf
+ .type glConvolutionParameterf,#function
+ glConvolutionParameterf:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7395,7 +7395,7 @@
+ .globl glConvolutionParameterfv
+ .type glConvolutionParameterfv,#function
+ glConvolutionParameterfv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7416,7 +7416,7 @@
+ .globl glConvolutionParameteri
+ .type glConvolutionParameteri,#function
+ glConvolutionParameteri:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7437,7 +7437,7 @@
+ .globl glConvolutionParameteriv
+ .type glConvolutionParameteriv,#function
+ glConvolutionParameteriv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7458,7 +7458,7 @@
+ .globl glCopyConvolutionFilter1D
+ .type glCopyConvolutionFilter1D,#function
+ glCopyConvolutionFilter1D:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7479,7 +7479,7 @@
+ .globl glCopyConvolutionFilter2D
+ .type glCopyConvolutionFilter2D,#function
+ glCopyConvolutionFilter2D:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7500,7 +7500,7 @@
+ .globl glGetConvolutionFilter
+ .type glGetConvolutionFilter,#function
+ glGetConvolutionFilter:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7521,7 +7521,7 @@
+ .globl glGetConvolutionParameterfv
+ .type glGetConvolutionParameterfv,#function
+ glGetConvolutionParameterfv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7542,7 +7542,7 @@
+ .globl glGetConvolutionParameteriv
+ .type glGetConvolutionParameteriv,#function
+ glGetConvolutionParameteriv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7563,7 +7563,7 @@
+ .globl glGetSeparableFilter
+ .type glGetSeparableFilter,#function
+ glGetSeparableFilter:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7584,7 +7584,7 @@
+ .globl glSeparableFilter2D
+ .type glSeparableFilter2D,#function
+ glSeparableFilter2D:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7605,7 +7605,7 @@
+ .globl glGetHistogram
+ .type glGetHistogram,#function
+ glGetHistogram:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7626,7 +7626,7 @@
+ .globl glGetHistogramParameterfv
+ .type glGetHistogramParameterfv,#function
+ glGetHistogramParameterfv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7647,7 +7647,7 @@
+ .globl glGetHistogramParameteriv
+ .type glGetHistogramParameteriv,#function
+ glGetHistogramParameteriv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7668,7 +7668,7 @@
+ .globl glGetMinmax
+ .type glGetMinmax,#function
+ glGetMinmax:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7689,7 +7689,7 @@
+ .globl glGetMinmaxParameterfv
+ .type glGetMinmaxParameterfv,#function
+ glGetMinmaxParameterfv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7710,7 +7710,7 @@
+ .globl glGetMinmaxParameteriv
+ .type glGetMinmaxParameteriv,#function
+ glGetMinmaxParameteriv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7731,7 +7731,7 @@
+ .globl glHistogram
+ .type glHistogram,#function
+ glHistogram:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7752,7 +7752,7 @@
+ .globl glMinmax
+ .type glMinmax,#function
+ glMinmax:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7773,7 +7773,7 @@
+ .globl glResetHistogram
+ .type glResetHistogram,#function
+ glResetHistogram:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7794,7 +7794,7 @@
+ .globl glResetMinmax
+ .type glResetMinmax,#function
+ glResetMinmax:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7815,7 +7815,7 @@
+ .globl glTexImage3D
+ .type glTexImage3D,#function
+ glTexImage3D:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7836,7 +7836,7 @@
+ .globl glTexSubImage3D
+ .type glTexSubImage3D,#function
+ glTexSubImage3D:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7857,7 +7857,7 @@
+ .globl glCopyTexSubImage3D
+ .type glCopyTexSubImage3D,#function
+ glCopyTexSubImage3D:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7878,7 +7878,7 @@
+ .globl glActiveTextureARB
+ .type glActiveTextureARB,#function
+ glActiveTextureARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7899,7 +7899,7 @@
+ .globl glClientActiveTextureARB
+ .type glClientActiveTextureARB,#function
+ glClientActiveTextureARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7920,7 +7920,7 @@
+ .globl glMultiTexCoord1dARB
+ .type glMultiTexCoord1dARB,#function
+ glMultiTexCoord1dARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7941,7 +7941,7 @@
+ .globl glMultiTexCoord1dvARB
+ .type glMultiTexCoord1dvARB,#function
+ glMultiTexCoord1dvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7962,7 +7962,7 @@
+ .globl glMultiTexCoord1fARB
+ .type glMultiTexCoord1fARB,#function
+ glMultiTexCoord1fARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -7983,7 +7983,7 @@
+ .globl glMultiTexCoord1fvARB
+ .type glMultiTexCoord1fvARB,#function
+ glMultiTexCoord1fvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8004,7 +8004,7 @@
+ .globl glMultiTexCoord1iARB
+ .type glMultiTexCoord1iARB,#function
+ glMultiTexCoord1iARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8025,7 +8025,7 @@
+ .globl glMultiTexCoord1ivARB
+ .type glMultiTexCoord1ivARB,#function
+ glMultiTexCoord1ivARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8046,7 +8046,7 @@
+ .globl glMultiTexCoord1sARB
+ .type glMultiTexCoord1sARB,#function
+ glMultiTexCoord1sARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8067,7 +8067,7 @@
+ .globl glMultiTexCoord1svARB
+ .type glMultiTexCoord1svARB,#function
+ glMultiTexCoord1svARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8088,7 +8088,7 @@
+ .globl glMultiTexCoord2dARB
+ .type glMultiTexCoord2dARB,#function
+ glMultiTexCoord2dARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8109,7 +8109,7 @@
+ .globl glMultiTexCoord2dvARB
+ .type glMultiTexCoord2dvARB,#function
+ glMultiTexCoord2dvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8130,7 +8130,7 @@
+ .globl glMultiTexCoord2fARB
+ .type glMultiTexCoord2fARB,#function
+ glMultiTexCoord2fARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8151,7 +8151,7 @@
+ .globl glMultiTexCoord2fvARB
+ .type glMultiTexCoord2fvARB,#function
+ glMultiTexCoord2fvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8172,7 +8172,7 @@
+ .globl glMultiTexCoord2iARB
+ .type glMultiTexCoord2iARB,#function
+ glMultiTexCoord2iARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8193,7 +8193,7 @@
+ .globl glMultiTexCoord2ivARB
+ .type glMultiTexCoord2ivARB,#function
+ glMultiTexCoord2ivARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8214,7 +8214,7 @@
+ .globl glMultiTexCoord2sARB
+ .type glMultiTexCoord2sARB,#function
+ glMultiTexCoord2sARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8235,7 +8235,7 @@
+ .globl glMultiTexCoord2svARB
+ .type glMultiTexCoord2svARB,#function
+ glMultiTexCoord2svARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8256,7 +8256,7 @@
+ .globl glMultiTexCoord3dARB
+ .type glMultiTexCoord3dARB,#function
+ glMultiTexCoord3dARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8277,7 +8277,7 @@
+ .globl glMultiTexCoord3dvARB
+ .type glMultiTexCoord3dvARB,#function
+ glMultiTexCoord3dvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8298,7 +8298,7 @@
+ .globl glMultiTexCoord3fARB
+ .type glMultiTexCoord3fARB,#function
+ glMultiTexCoord3fARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8319,7 +8319,7 @@
+ .globl glMultiTexCoord3fvARB
+ .type glMultiTexCoord3fvARB,#function
+ glMultiTexCoord3fvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8340,7 +8340,7 @@
+ .globl glMultiTexCoord3iARB
+ .type glMultiTexCoord3iARB,#function
+ glMultiTexCoord3iARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8361,7 +8361,7 @@
+ .globl glMultiTexCoord3ivARB
+ .type glMultiTexCoord3ivARB,#function
+ glMultiTexCoord3ivARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8382,7 +8382,7 @@
+ .globl glMultiTexCoord3sARB
+ .type glMultiTexCoord3sARB,#function
+ glMultiTexCoord3sARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8403,7 +8403,7 @@
+ .globl glMultiTexCoord3svARB
+ .type glMultiTexCoord3svARB,#function
+ glMultiTexCoord3svARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8424,7 +8424,7 @@
+ .globl glMultiTexCoord4dARB
+ .type glMultiTexCoord4dARB,#function
+ glMultiTexCoord4dARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8445,7 +8445,7 @@
+ .globl glMultiTexCoord4dvARB
+ .type glMultiTexCoord4dvARB,#function
+ glMultiTexCoord4dvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8466,7 +8466,7 @@
+ .globl glMultiTexCoord4fARB
+ .type glMultiTexCoord4fARB,#function
+ glMultiTexCoord4fARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8487,7 +8487,7 @@
+ .globl glMultiTexCoord4fvARB
+ .type glMultiTexCoord4fvARB,#function
+ glMultiTexCoord4fvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8508,7 +8508,7 @@
+ .globl glMultiTexCoord4iARB
+ .type glMultiTexCoord4iARB,#function
+ glMultiTexCoord4iARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8529,7 +8529,7 @@
+ .globl glMultiTexCoord4ivARB
+ .type glMultiTexCoord4ivARB,#function
+ glMultiTexCoord4ivARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8550,7 +8550,7 @@
+ .globl glMultiTexCoord4sARB
+ .type glMultiTexCoord4sARB,#function
+ glMultiTexCoord4sARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8571,7 +8571,7 @@
+ .globl glMultiTexCoord4svARB
+ .type glMultiTexCoord4svARB,#function
+ glMultiTexCoord4svARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8592,7 +8592,7 @@
+ .globl glLoadTransposeMatrixfARB
+ .type glLoadTransposeMatrixfARB,#function
+ glLoadTransposeMatrixfARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8613,7 +8613,7 @@
+ .globl glLoadTransposeMatrixdARB
+ .type glLoadTransposeMatrixdARB,#function
+ glLoadTransposeMatrixdARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8634,7 +8634,7 @@
+ .globl glMultTransposeMatrixfARB
+ .type glMultTransposeMatrixfARB,#function
+ glMultTransposeMatrixfARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8655,7 +8655,7 @@
+ .globl glMultTransposeMatrixdARB
+ .type glMultTransposeMatrixdARB,#function
+ glMultTransposeMatrixdARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8676,7 +8676,7 @@
+ .globl glSampleCoverageARB
+ .type glSampleCoverageARB,#function
+ glSampleCoverageARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8697,7 +8697,7 @@
+ .globl gl__unused413
+ .type gl__unused413,#function
+ gl__unused413:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8718,7 +8718,7 @@
+ .globl glCompressedTexImage3DARB
+ .type glCompressedTexImage3DARB,#function
+ glCompressedTexImage3DARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8739,7 +8739,7 @@
+ .globl glCompressedTexImage2DARB
+ .type glCompressedTexImage2DARB,#function
+ glCompressedTexImage2DARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8760,7 +8760,7 @@
+ .globl glCompressedTexImage1DARB
+ .type glCompressedTexImage1DARB,#function
+ glCompressedTexImage1DARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8781,7 +8781,7 @@
+ .globl glCompressedTexSubImage3DARB
+ .type glCompressedTexSubImage3DARB,#function
+ glCompressedTexSubImage3DARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8802,7 +8802,7 @@
+ .globl glCompressedTexSubImage2DARB
+ .type glCompressedTexSubImage2DARB,#function
+ glCompressedTexSubImage2DARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8823,7 +8823,7 @@
+ .globl glCompressedTexSubImage1DARB
+ .type glCompressedTexSubImage1DARB,#function
+ glCompressedTexSubImage1DARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8844,7 +8844,7 @@
+ .globl glGetCompressedTexImageARB
+ .type glGetCompressedTexImageARB,#function
+ glGetCompressedTexImageARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8865,7 +8865,7 @@
+ .globl glActiveTexture
+ .type glActiveTexture,#function
+ glActiveTexture:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8886,7 +8886,7 @@
+ .globl glClientActiveTexture
+ .type glClientActiveTexture,#function
+ glClientActiveTexture:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8907,7 +8907,7 @@
+ .globl glMultiTexCoord1d
+ .type glMultiTexCoord1d,#function
+ glMultiTexCoord1d:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8928,7 +8928,7 @@
+ .globl glMultiTexCoord1dv
+ .type glMultiTexCoord1dv,#function
+ glMultiTexCoord1dv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8949,7 +8949,7 @@
+ .globl glMultiTexCoord1f
+ .type glMultiTexCoord1f,#function
+ glMultiTexCoord1f:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8970,7 +8970,7 @@
+ .globl glMultiTexCoord1fv
+ .type glMultiTexCoord1fv,#function
+ glMultiTexCoord1fv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -8991,7 +8991,7 @@
+ .globl glMultiTexCoord1i
+ .type glMultiTexCoord1i,#function
+ glMultiTexCoord1i:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9012,7 +9012,7 @@
+ .globl glMultiTexCoord1iv
+ .type glMultiTexCoord1iv,#function
+ glMultiTexCoord1iv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9033,7 +9033,7 @@
+ .globl glMultiTexCoord1s
+ .type glMultiTexCoord1s,#function
+ glMultiTexCoord1s:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9054,7 +9054,7 @@
+ .globl glMultiTexCoord1sv
+ .type glMultiTexCoord1sv,#function
+ glMultiTexCoord1sv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9075,7 +9075,7 @@
+ .globl glMultiTexCoord2d
+ .type glMultiTexCoord2d,#function
+ glMultiTexCoord2d:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9096,7 +9096,7 @@
+ .globl glMultiTexCoord2dv
+ .type glMultiTexCoord2dv,#function
+ glMultiTexCoord2dv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9117,7 +9117,7 @@
+ .globl glMultiTexCoord2f
+ .type glMultiTexCoord2f,#function
+ glMultiTexCoord2f:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9138,7 +9138,7 @@
+ .globl glMultiTexCoord2fv
+ .type glMultiTexCoord2fv,#function
+ glMultiTexCoord2fv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9159,7 +9159,7 @@
+ .globl glMultiTexCoord2i
+ .type glMultiTexCoord2i,#function
+ glMultiTexCoord2i:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9180,7 +9180,7 @@
+ .globl glMultiTexCoord2iv
+ .type glMultiTexCoord2iv,#function
+ glMultiTexCoord2iv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9201,7 +9201,7 @@
+ .globl glMultiTexCoord2s
+ .type glMultiTexCoord2s,#function
+ glMultiTexCoord2s:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9222,7 +9222,7 @@
+ .globl glMultiTexCoord2sv
+ .type glMultiTexCoord2sv,#function
+ glMultiTexCoord2sv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9243,7 +9243,7 @@
+ .globl glMultiTexCoord3d
+ .type glMultiTexCoord3d,#function
+ glMultiTexCoord3d:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9264,7 +9264,7 @@
+ .globl glMultiTexCoord3dv
+ .type glMultiTexCoord3dv,#function
+ glMultiTexCoord3dv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9285,7 +9285,7 @@
+ .globl glMultiTexCoord3f
+ .type glMultiTexCoord3f,#function
+ glMultiTexCoord3f:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9306,7 +9306,7 @@
+ .globl glMultiTexCoord3fv
+ .type glMultiTexCoord3fv,#function
+ glMultiTexCoord3fv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9327,7 +9327,7 @@
+ .globl glMultiTexCoord3i
+ .type glMultiTexCoord3i,#function
+ glMultiTexCoord3i:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9348,7 +9348,7 @@
+ .globl glMultiTexCoord3iv
+ .type glMultiTexCoord3iv,#function
+ glMultiTexCoord3iv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9369,7 +9369,7 @@
+ .globl glMultiTexCoord3s
+ .type glMultiTexCoord3s,#function
+ glMultiTexCoord3s:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9390,7 +9390,7 @@
+ .globl glMultiTexCoord3sv
+ .type glMultiTexCoord3sv,#function
+ glMultiTexCoord3sv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9411,7 +9411,7 @@
+ .globl glMultiTexCoord4d
+ .type glMultiTexCoord4d,#function
+ glMultiTexCoord4d:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9432,7 +9432,7 @@
+ .globl glMultiTexCoord4dv
+ .type glMultiTexCoord4dv,#function
+ glMultiTexCoord4dv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9453,7 +9453,7 @@
+ .globl glMultiTexCoord4f
+ .type glMultiTexCoord4f,#function
+ glMultiTexCoord4f:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9474,7 +9474,7 @@
+ .globl glMultiTexCoord4fv
+ .type glMultiTexCoord4fv,#function
+ glMultiTexCoord4fv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9495,7 +9495,7 @@
+ .globl glMultiTexCoord4i
+ .type glMultiTexCoord4i,#function
+ glMultiTexCoord4i:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9516,7 +9516,7 @@
+ .globl glMultiTexCoord4iv
+ .type glMultiTexCoord4iv,#function
+ glMultiTexCoord4iv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9537,7 +9537,7 @@
+ .globl glMultiTexCoord4s
+ .type glMultiTexCoord4s,#function
+ glMultiTexCoord4s:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9558,7 +9558,7 @@
+ .globl glMultiTexCoord4sv
+ .type glMultiTexCoord4sv,#function
+ glMultiTexCoord4sv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9579,7 +9579,7 @@
+ .globl glLoadTransposeMatrixf
+ .type glLoadTransposeMatrixf,#function
+ glLoadTransposeMatrixf:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9600,7 +9600,7 @@
+ .globl glLoadTransposeMatrixd
+ .type glLoadTransposeMatrixd,#function
+ glLoadTransposeMatrixd:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9621,7 +9621,7 @@
+ .globl glMultTransposeMatrixf
+ .type glMultTransposeMatrixf,#function
+ glMultTransposeMatrixf:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9642,7 +9642,7 @@
+ .globl glMultTransposeMatrixd
+ .type glMultTransposeMatrixd,#function
+ glMultTransposeMatrixd:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9663,7 +9663,7 @@
+ .globl glSampleCoverage
+ .type glSampleCoverage,#function
+ glSampleCoverage:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9684,7 +9684,7 @@
+ .globl glCompressedTexImage3D
+ .type glCompressedTexImage3D,#function
+ glCompressedTexImage3D:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9705,7 +9705,7 @@
+ .globl glCompressedTexImage2D
+ .type glCompressedTexImage2D,#function
+ glCompressedTexImage2D:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9726,7 +9726,7 @@
+ .globl glCompressedTexImage1D
+ .type glCompressedTexImage1D,#function
+ glCompressedTexImage1D:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9747,7 +9747,7 @@
+ .globl glCompressedTexSubImage3D
+ .type glCompressedTexSubImage3D,#function
+ glCompressedTexSubImage3D:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9768,7 +9768,7 @@
+ .globl glCompressedTexSubImage2D
+ .type glCompressedTexSubImage2D,#function
+ glCompressedTexSubImage2D:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9789,7 +9789,7 @@
+ .globl glCompressedTexSubImage1D
+ .type glCompressedTexSubImage1D,#function
+ glCompressedTexSubImage1D:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9810,7 +9810,7 @@
+ .globl glGetCompressedTexImage
+ .type glGetCompressedTexImage,#function
+ glGetCompressedTexImage:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9831,7 +9831,7 @@
+ .globl glBlendColorEXT
+ .type glBlendColorEXT,#function
+ glBlendColorEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9852,7 +9852,7 @@
+ .globl glPolygonOffsetEXT
+ .type glPolygonOffsetEXT,#function
+ glPolygonOffsetEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9873,7 +9873,7 @@
+ .globl glTexImage3DEXT
+ .type glTexImage3DEXT,#function
+ glTexImage3DEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9894,7 +9894,7 @@
+ .globl glTexSubImage3DEXT
+ .type glTexSubImage3DEXT,#function
+ glTexSubImage3DEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9915,7 +9915,7 @@
+ .globl glGetTexFilterFuncSGIS
+ .type glGetTexFilterFuncSGIS,#function
+ glGetTexFilterFuncSGIS:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9936,7 +9936,7 @@
+ .globl glTexFilterFuncSGIS
+ .type glTexFilterFuncSGIS,#function
+ glTexFilterFuncSGIS:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9957,7 +9957,7 @@
+ .globl glTexSubImage1DEXT
+ .type glTexSubImage1DEXT,#function
+ glTexSubImage1DEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9978,7 +9978,7 @@
+ .globl glTexSubImage2DEXT
+ .type glTexSubImage2DEXT,#function
+ glTexSubImage2DEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -9999,7 +9999,7 @@
+ .globl glCopyTexImage1DEXT
+ .type glCopyTexImage1DEXT,#function
+ glCopyTexImage1DEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10020,7 +10020,7 @@
+ .globl glCopyTexImage2DEXT
+ .type glCopyTexImage2DEXT,#function
+ glCopyTexImage2DEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10041,7 +10041,7 @@
+ .globl glCopyTexSubImage1DEXT
+ .type glCopyTexSubImage1DEXT,#function
+ glCopyTexSubImage1DEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10062,7 +10062,7 @@
+ .globl glCopyTexSubImage2DEXT
+ .type glCopyTexSubImage2DEXT,#function
+ glCopyTexSubImage2DEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10083,7 +10083,7 @@
+ .globl glCopyTexSubImage3DEXT
+ .type glCopyTexSubImage3DEXT,#function
+ glCopyTexSubImage3DEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10104,7 +10104,7 @@
+ .globl glGetHistogramEXT
+ .type glGetHistogramEXT,#function
+ glGetHistogramEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10125,7 +10125,7 @@
+ .globl glGetHistogramParameterfvEXT
+ .type glGetHistogramParameterfvEXT,#function
+ glGetHistogramParameterfvEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10146,7 +10146,7 @@
+ .globl glGetHistogramParameterivEXT
+ .type glGetHistogramParameterivEXT,#function
+ glGetHistogramParameterivEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10167,7 +10167,7 @@
+ .globl glGetMinmaxEXT
+ .type glGetMinmaxEXT,#function
+ glGetMinmaxEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10188,7 +10188,7 @@
+ .globl glGetMinmaxParameterfvEXT
+ .type glGetMinmaxParameterfvEXT,#function
+ glGetMinmaxParameterfvEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10209,7 +10209,7 @@
+ .globl glGetMinmaxParameterivEXT
+ .type glGetMinmaxParameterivEXT,#function
+ glGetMinmaxParameterivEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10230,7 +10230,7 @@
+ .globl glHistogramEXT
+ .type glHistogramEXT,#function
+ glHistogramEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10251,7 +10251,7 @@
+ .globl glMinmaxEXT
+ .type glMinmaxEXT,#function
+ glMinmaxEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10272,7 +10272,7 @@
+ .globl glResetHistogramEXT
+ .type glResetHistogramEXT,#function
+ glResetHistogramEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10293,7 +10293,7 @@
+ .globl glResetMinmaxEXT
+ .type glResetMinmaxEXT,#function
+ glResetMinmaxEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10314,7 +10314,7 @@
+ .globl glConvolutionFilter1DEXT
+ .type glConvolutionFilter1DEXT,#function
+ glConvolutionFilter1DEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10335,7 +10335,7 @@
+ .globl glConvolutionFilter2DEXT
+ .type glConvolutionFilter2DEXT,#function
+ glConvolutionFilter2DEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10356,7 +10356,7 @@
+ .globl glConvolutionParameterfEXT
+ .type glConvolutionParameterfEXT,#function
+ glConvolutionParameterfEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10377,7 +10377,7 @@
+ .globl glConvolutionParameterfvEXT
+ .type glConvolutionParameterfvEXT,#function
+ glConvolutionParameterfvEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10398,7 +10398,7 @@
+ .globl glConvolutionParameteriEXT
+ .type glConvolutionParameteriEXT,#function
+ glConvolutionParameteriEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10419,7 +10419,7 @@
+ .globl glConvolutionParameterivEXT
+ .type glConvolutionParameterivEXT,#function
+ glConvolutionParameterivEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10440,7 +10440,7 @@
+ .globl glCopyConvolutionFilter1DEXT
+ .type glCopyConvolutionFilter1DEXT,#function
+ glCopyConvolutionFilter1DEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10461,7 +10461,7 @@
+ .globl glCopyConvolutionFilter2DEXT
+ .type glCopyConvolutionFilter2DEXT,#function
+ glCopyConvolutionFilter2DEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10482,7 +10482,7 @@
+ .globl glGetConvolutionFilterEXT
+ .type glGetConvolutionFilterEXT,#function
+ glGetConvolutionFilterEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10503,7 +10503,7 @@
+ .globl glGetConvolutionParameterfvEXT
+ .type glGetConvolutionParameterfvEXT,#function
+ glGetConvolutionParameterfvEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10524,7 +10524,7 @@
+ .globl glGetConvolutionParameterivEXT
+ .type glGetConvolutionParameterivEXT,#function
+ glGetConvolutionParameterivEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10545,7 +10545,7 @@
+ .globl glGetSeparableFilterEXT
+ .type glGetSeparableFilterEXT,#function
+ glGetSeparableFilterEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10566,7 +10566,7 @@
+ .globl glSeparableFilter2DEXT
+ .type glSeparableFilter2DEXT,#function
+ glSeparableFilter2DEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10587,7 +10587,7 @@
+ .globl glColorTableSGI
+ .type glColorTableSGI,#function
+ glColorTableSGI:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10608,7 +10608,7 @@
+ .globl glColorTableParameterfvSGI
+ .type glColorTableParameterfvSGI,#function
+ glColorTableParameterfvSGI:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10629,7 +10629,7 @@
+ .globl glColorTableParameterivSGI
+ .type glColorTableParameterivSGI,#function
+ glColorTableParameterivSGI:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10650,7 +10650,7 @@
+ .globl glCopyColorTableSGI
+ .type glCopyColorTableSGI,#function
+ glCopyColorTableSGI:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10671,7 +10671,7 @@
+ .globl glGetColorTableSGI
+ .type glGetColorTableSGI,#function
+ glGetColorTableSGI:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10692,7 +10692,7 @@
+ .globl glGetColorTableParameterfvSGI
+ .type glGetColorTableParameterfvSGI,#function
+ glGetColorTableParameterfvSGI:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10713,7 +10713,7 @@
+ .globl glGetColorTableParameterivSGI
+ .type glGetColorTableParameterivSGI,#function
+ glGetColorTableParameterivSGI:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10734,7 +10734,7 @@
+ .globl glPixelTexGenSGIX
+ .type glPixelTexGenSGIX,#function
+ glPixelTexGenSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10755,7 +10755,7 @@
+ .globl glPixelTexGenParameteriSGIS
+ .type glPixelTexGenParameteriSGIS,#function
+ glPixelTexGenParameteriSGIS:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10776,7 +10776,7 @@
+ .globl glPixelTexGenParameterivSGIS
+ .type glPixelTexGenParameterivSGIS,#function
+ glPixelTexGenParameterivSGIS:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10797,7 +10797,7 @@
+ .globl glPixelTexGenParameterfSGIS
+ .type glPixelTexGenParameterfSGIS,#function
+ glPixelTexGenParameterfSGIS:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10818,7 +10818,7 @@
+ .globl glPixelTexGenParameterfvSGIS
+ .type glPixelTexGenParameterfvSGIS,#function
+ glPixelTexGenParameterfvSGIS:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10839,7 +10839,7 @@
+ .globl glGetPixelTexGenParameterivSGIS
+ .type glGetPixelTexGenParameterivSGIS,#function
+ glGetPixelTexGenParameterivSGIS:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10860,7 +10860,7 @@
+ .globl glGetPixelTexGenParameterfvSGIS
+ .type glGetPixelTexGenParameterfvSGIS,#function
+ glGetPixelTexGenParameterfvSGIS:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10881,7 +10881,7 @@
+ .globl glTexImage4DSGIS
+ .type glTexImage4DSGIS,#function
+ glTexImage4DSGIS:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10902,7 +10902,7 @@
+ .globl glTexSubImage4DSGIS
+ .type glTexSubImage4DSGIS,#function
+ glTexSubImage4DSGIS:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10923,7 +10923,7 @@
+ .globl glAreTexturesResidentEXT
+ .type glAreTexturesResidentEXT,#function
+ glAreTexturesResidentEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10944,7 +10944,7 @@
+ .globl glBindTextureEXT
+ .type glBindTextureEXT,#function
+ glBindTextureEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10965,7 +10965,7 @@
+ .globl glDeleteTexturesEXT
+ .type glDeleteTexturesEXT,#function
+ glDeleteTexturesEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -10986,7 +10986,7 @@
+ .globl glGenTexturesEXT
+ .type glGenTexturesEXT,#function
+ glGenTexturesEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11007,7 +11007,7 @@
+ .globl glIsTextureEXT
+ .type glIsTextureEXT,#function
+ glIsTextureEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11028,7 +11028,7 @@
+ .globl glPrioritizeTexturesEXT
+ .type glPrioritizeTexturesEXT,#function
+ glPrioritizeTexturesEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11049,7 +11049,7 @@
+ .globl glDetailTexFuncSGIS
+ .type glDetailTexFuncSGIS,#function
+ glDetailTexFuncSGIS:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11070,7 +11070,7 @@
+ .globl glGetDetailTexFuncSGIS
+ .type glGetDetailTexFuncSGIS,#function
+ glGetDetailTexFuncSGIS:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11091,7 +11091,7 @@
+ .globl glSharpenTexFuncSGIS
+ .type glSharpenTexFuncSGIS,#function
+ glSharpenTexFuncSGIS:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11112,7 +11112,7 @@
+ .globl glGetSharpenTexFuncSGIS
+ .type glGetSharpenTexFuncSGIS,#function
+ glGetSharpenTexFuncSGIS:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11133,7 +11133,7 @@
+ .globl glSampleMaskSGIS
+ .type glSampleMaskSGIS,#function
+ glSampleMaskSGIS:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11154,7 +11154,7 @@
+ .globl glSamplePatternSGIS
+ .type glSamplePatternSGIS,#function
+ glSamplePatternSGIS:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11175,7 +11175,7 @@
+ .globl glArrayElementEXT
+ .type glArrayElementEXT,#function
+ glArrayElementEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11196,7 +11196,7 @@
+ .globl glColorPointerEXT
+ .type glColorPointerEXT,#function
+ glColorPointerEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11217,7 +11217,7 @@
+ .globl glDrawArraysEXT
+ .type glDrawArraysEXT,#function
+ glDrawArraysEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11238,7 +11238,7 @@
+ .globl glEdgeFlagPointerEXT
+ .type glEdgeFlagPointerEXT,#function
+ glEdgeFlagPointerEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11259,7 +11259,7 @@
+ .globl glGetPointervEXT
+ .type glGetPointervEXT,#function
+ glGetPointervEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11280,7 +11280,7 @@
+ .globl glIndexPointerEXT
+ .type glIndexPointerEXT,#function
+ glIndexPointerEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11301,7 +11301,7 @@
+ .globl glNormalPointerEXT
+ .type glNormalPointerEXT,#function
+ glNormalPointerEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11322,7 +11322,7 @@
+ .globl glTexCoordPointerEXT
+ .type glTexCoordPointerEXT,#function
+ glTexCoordPointerEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11343,7 +11343,7 @@
+ .globl glVertexPointerEXT
+ .type glVertexPointerEXT,#function
+ glVertexPointerEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11364,7 +11364,7 @@
+ .globl glBlendEquationEXT
+ .type glBlendEquationEXT,#function
+ glBlendEquationEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11385,7 +11385,7 @@
+ .globl glSpriteParameterfSGIX
+ .type glSpriteParameterfSGIX,#function
+ glSpriteParameterfSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11406,7 +11406,7 @@
+ .globl glSpriteParameterfvSGIX
+ .type glSpriteParameterfvSGIX,#function
+ glSpriteParameterfvSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11427,7 +11427,7 @@
+ .globl glSpriteParameteriSGIX
+ .type glSpriteParameteriSGIX,#function
+ glSpriteParameteriSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11448,7 +11448,7 @@
+ .globl glSpriteParameterivSGIX
+ .type glSpriteParameterivSGIX,#function
+ glSpriteParameterivSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11469,7 +11469,7 @@
+ .globl glPointParameterfEXT
+ .type glPointParameterfEXT,#function
+ glPointParameterfEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11490,7 +11490,7 @@
+ .globl glPointParameterfvEXT
+ .type glPointParameterfvEXT,#function
+ glPointParameterfvEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11511,7 +11511,7 @@
+ .globl glPointParameterfARB
+ .type glPointParameterfARB,#function
+ glPointParameterfARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11532,7 +11532,7 @@
+ .globl glPointParameterfvARB
+ .type glPointParameterfvARB,#function
+ glPointParameterfvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11553,7 +11553,7 @@
+ .globl glPointParameterfSGIS
+ .type glPointParameterfSGIS,#function
+ glPointParameterfSGIS:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11574,7 +11574,7 @@
+ .globl glPointParameterfvSGIS
+ .type glPointParameterfvSGIS,#function
+ glPointParameterfvSGIS:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11595,7 +11595,7 @@
+ .globl glGetInstrumentsSGIX
+ .type glGetInstrumentsSGIX,#function
+ glGetInstrumentsSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11616,7 +11616,7 @@
+ .globl glInstrumentsBufferSGIX
+ .type glInstrumentsBufferSGIX,#function
+ glInstrumentsBufferSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11637,7 +11637,7 @@
+ .globl glPollInstrumentsSGIX
+ .type glPollInstrumentsSGIX,#function
+ glPollInstrumentsSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11658,7 +11658,7 @@
+ .globl glReadInstrumentsSGIX
+ .type glReadInstrumentsSGIX,#function
+ glReadInstrumentsSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11679,7 +11679,7 @@
+ .globl glStartInstrumentsSGIX
+ .type glStartInstrumentsSGIX,#function
+ glStartInstrumentsSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11700,7 +11700,7 @@
+ .globl glStopInstrumentsSGIX
+ .type glStopInstrumentsSGIX,#function
+ glStopInstrumentsSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11721,7 +11721,7 @@
+ .globl glFrameZoomSGIX
+ .type glFrameZoomSGIX,#function
+ glFrameZoomSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11742,7 +11742,7 @@
+ .globl glTagSampleBufferSGIX
+ .type glTagSampleBufferSGIX,#function
+ glTagSampleBufferSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11763,7 +11763,7 @@
+ .globl glReferencePlaneSGIX
+ .type glReferencePlaneSGIX,#function
+ glReferencePlaneSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11784,7 +11784,7 @@
+ .globl glFlushRasterSGIX
+ .type glFlushRasterSGIX,#function
+ glFlushRasterSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11805,7 +11805,7 @@
+ .globl glColorSubTableEXT
+ .type glColorSubTableEXT,#function
+ glColorSubTableEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11826,7 +11826,7 @@
+ .globl glCopyColorSubTableEXT
+ .type glCopyColorSubTableEXT,#function
+ glCopyColorSubTableEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11847,7 +11847,7 @@
+ .globl glHintPGI
+ .type glHintPGI,#function
+ glHintPGI:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11868,7 +11868,7 @@
+ .globl glColorTableEXT
+ .type glColorTableEXT,#function
+ glColorTableEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11889,7 +11889,7 @@
+ .globl glGetColorTableEXT
+ .type glGetColorTableEXT,#function
+ glGetColorTableEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11910,7 +11910,7 @@
+ .globl glGetColorTableParameterivEXT
+ .type glGetColorTableParameterivEXT,#function
+ glGetColorTableParameterivEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11931,7 +11931,7 @@
+ .globl glGetColorTableParameterfvEXT
+ .type glGetColorTableParameterfvEXT,#function
+ glGetColorTableParameterfvEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11952,7 +11952,7 @@
+ .globl glGetListParameterfvSGIX
+ .type glGetListParameterfvSGIX,#function
+ glGetListParameterfvSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11973,7 +11973,7 @@
+ .globl glGetListParameterivSGIX
+ .type glGetListParameterivSGIX,#function
+ glGetListParameterivSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -11994,7 +11994,7 @@
+ .globl glListParameterfSGIX
+ .type glListParameterfSGIX,#function
+ glListParameterfSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12015,7 +12015,7 @@
+ .globl glListParameterfvSGIX
+ .type glListParameterfvSGIX,#function
+ glListParameterfvSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12036,7 +12036,7 @@
+ .globl glListParameteriSGIX
+ .type glListParameteriSGIX,#function
+ glListParameteriSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12057,7 +12057,7 @@
+ .globl glListParameterivSGIX
+ .type glListParameterivSGIX,#function
+ glListParameterivSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12078,7 +12078,7 @@
+ .globl glIndexMaterialEXT
+ .type glIndexMaterialEXT,#function
+ glIndexMaterialEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12099,7 +12099,7 @@
+ .globl glIndexFuncEXT
+ .type glIndexFuncEXT,#function
+ glIndexFuncEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12120,7 +12120,7 @@
+ .globl glLockArraysEXT
+ .type glLockArraysEXT,#function
+ glLockArraysEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12141,7 +12141,7 @@
+ .globl glUnlockArraysEXT
+ .type glUnlockArraysEXT,#function
+ glUnlockArraysEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12162,7 +12162,7 @@
+ .globl glCullParameterdvEXT
+ .type glCullParameterdvEXT,#function
+ glCullParameterdvEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12183,7 +12183,7 @@
+ .globl glCullParameterfvEXT
+ .type glCullParameterfvEXT,#function
+ glCullParameterfvEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12204,7 +12204,7 @@
+ .globl glFragmentColorMaterialSGIX
+ .type glFragmentColorMaterialSGIX,#function
+ glFragmentColorMaterialSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12225,7 +12225,7 @@
+ .globl glFragmentLightfSGIX
+ .type glFragmentLightfSGIX,#function
+ glFragmentLightfSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12246,7 +12246,7 @@
+ .globl glFragmentLightfvSGIX
+ .type glFragmentLightfvSGIX,#function
+ glFragmentLightfvSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12267,7 +12267,7 @@
+ .globl glFragmentLightiSGIX
+ .type glFragmentLightiSGIX,#function
+ glFragmentLightiSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12288,7 +12288,7 @@
+ .globl glFragmentLightivSGIX
+ .type glFragmentLightivSGIX,#function
+ glFragmentLightivSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12309,7 +12309,7 @@
+ .globl glFragmentLightModelfSGIX
+ .type glFragmentLightModelfSGIX,#function
+ glFragmentLightModelfSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12330,7 +12330,7 @@
+ .globl glFragmentLightModelfvSGIX
+ .type glFragmentLightModelfvSGIX,#function
+ glFragmentLightModelfvSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12351,7 +12351,7 @@
+ .globl glFragmentLightModeliSGIX
+ .type glFragmentLightModeliSGIX,#function
+ glFragmentLightModeliSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12372,7 +12372,7 @@
+ .globl glFragmentLightModelivSGIX
+ .type glFragmentLightModelivSGIX,#function
+ glFragmentLightModelivSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12393,7 +12393,7 @@
+ .globl glFragmentMaterialfSGIX
+ .type glFragmentMaterialfSGIX,#function
+ glFragmentMaterialfSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12414,7 +12414,7 @@
+ .globl glFragmentMaterialfvSGIX
+ .type glFragmentMaterialfvSGIX,#function
+ glFragmentMaterialfvSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12435,7 +12435,7 @@
+ .globl glFragmentMaterialiSGIX
+ .type glFragmentMaterialiSGIX,#function
+ glFragmentMaterialiSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12456,7 +12456,7 @@
+ .globl glFragmentMaterialivSGIX
+ .type glFragmentMaterialivSGIX,#function
+ glFragmentMaterialivSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12477,7 +12477,7 @@
+ .globl glGetFragmentLightfvSGIX
+ .type glGetFragmentLightfvSGIX,#function
+ glGetFragmentLightfvSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12498,7 +12498,7 @@
+ .globl glGetFragmentLightivSGIX
+ .type glGetFragmentLightivSGIX,#function
+ glGetFragmentLightivSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12519,7 +12519,7 @@
+ .globl glGetFragmentMaterialfvSGIX
+ .type glGetFragmentMaterialfvSGIX,#function
+ glGetFragmentMaterialfvSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12540,7 +12540,7 @@
+ .globl glGetFragmentMaterialivSGIX
+ .type glGetFragmentMaterialivSGIX,#function
+ glGetFragmentMaterialivSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12561,7 +12561,7 @@
+ .globl glLightEnviSGIX
+ .type glLightEnviSGIX,#function
+ glLightEnviSGIX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12582,7 +12582,7 @@
+ .globl glDrawRangeElementsEXT
+ .type glDrawRangeElementsEXT,#function
+ glDrawRangeElementsEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12603,7 +12603,7 @@
+ .globl glSecondaryColor3bEXT
+ .type glSecondaryColor3bEXT,#function
+ glSecondaryColor3bEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12624,7 +12624,7 @@
+ .globl glSecondaryColor3bvEXT
+ .type glSecondaryColor3bvEXT,#function
+ glSecondaryColor3bvEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12645,7 +12645,7 @@
+ .globl glSecondaryColor3dEXT
+ .type glSecondaryColor3dEXT,#function
+ glSecondaryColor3dEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12666,7 +12666,7 @@
+ .globl glSecondaryColor3dvEXT
+ .type glSecondaryColor3dvEXT,#function
+ glSecondaryColor3dvEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12687,7 +12687,7 @@
+ .globl glSecondaryColor3fEXT
+ .type glSecondaryColor3fEXT,#function
+ glSecondaryColor3fEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12708,7 +12708,7 @@
+ .globl glSecondaryColor3fvEXT
+ .type glSecondaryColor3fvEXT,#function
+ glSecondaryColor3fvEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12729,7 +12729,7 @@
+ .globl glSecondaryColor3iEXT
+ .type glSecondaryColor3iEXT,#function
+ glSecondaryColor3iEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12750,7 +12750,7 @@
+ .globl glSecondaryColor3ivEXT
+ .type glSecondaryColor3ivEXT,#function
+ glSecondaryColor3ivEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12771,7 +12771,7 @@
+ .globl glSecondaryColor3sEXT
+ .type glSecondaryColor3sEXT,#function
+ glSecondaryColor3sEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12792,7 +12792,7 @@
+ .globl glSecondaryColor3svEXT
+ .type glSecondaryColor3svEXT,#function
+ glSecondaryColor3svEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12813,7 +12813,7 @@
+ .globl glSecondaryColor3ubEXT
+ .type glSecondaryColor3ubEXT,#function
+ glSecondaryColor3ubEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12834,7 +12834,7 @@
+ .globl glSecondaryColor3ubvEXT
+ .type glSecondaryColor3ubvEXT,#function
+ glSecondaryColor3ubvEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12855,7 +12855,7 @@
+ .globl glSecondaryColor3uiEXT
+ .type glSecondaryColor3uiEXT,#function
+ glSecondaryColor3uiEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12876,7 +12876,7 @@
+ .globl glSecondaryColor3uivEXT
+ .type glSecondaryColor3uivEXT,#function
+ glSecondaryColor3uivEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12897,7 +12897,7 @@
+ .globl glSecondaryColor3usEXT
+ .type glSecondaryColor3usEXT,#function
+ glSecondaryColor3usEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12918,7 +12918,7 @@
+ .globl glSecondaryColor3usvEXT
+ .type glSecondaryColor3usvEXT,#function
+ glSecondaryColor3usvEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12939,7 +12939,7 @@
+ .globl glSecondaryColorPointerEXT
+ .type glSecondaryColorPointerEXT,#function
+ glSecondaryColorPointerEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12960,7 +12960,7 @@
+ .globl glMultiDrawArraysEXT
+ .type glMultiDrawArraysEXT,#function
+ glMultiDrawArraysEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -12981,7 +12981,7 @@
+ .globl glMultiDrawElementsEXT
+ .type glMultiDrawElementsEXT,#function
+ glMultiDrawElementsEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13002,7 +13002,7 @@
+ .globl glFogCoordfEXT
+ .type glFogCoordfEXT,#function
+ glFogCoordfEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13023,7 +13023,7 @@
+ .globl glFogCoordfvEXT
+ .type glFogCoordfvEXT,#function
+ glFogCoordfvEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13044,7 +13044,7 @@
+ .globl glFogCoorddEXT
+ .type glFogCoorddEXT,#function
+ glFogCoorddEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13065,7 +13065,7 @@
+ .globl glFogCoorddvEXT
+ .type glFogCoorddvEXT,#function
+ glFogCoorddvEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13086,7 +13086,7 @@
+ .globl glFogCoordPointerEXT
+ .type glFogCoordPointerEXT,#function
+ glFogCoordPointerEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13107,7 +13107,7 @@
+ .globl glBlendFuncSeparateEXT
+ .type glBlendFuncSeparateEXT,#function
+ glBlendFuncSeparateEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13128,7 +13128,7 @@
+ .globl glBlendFuncSeparateINGR
+ .type glBlendFuncSeparateINGR,#function
+ glBlendFuncSeparateINGR:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13149,7 +13149,7 @@
+ .globl glVertexWeightfEXT
+ .type glVertexWeightfEXT,#function
+ glVertexWeightfEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13170,7 +13170,7 @@
+ .globl glVertexWeightfvEXT
+ .type glVertexWeightfvEXT,#function
+ glVertexWeightfvEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13191,7 +13191,7 @@
+ .globl glVertexWeightPointerEXT
+ .type glVertexWeightPointerEXT,#function
+ glVertexWeightPointerEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13212,7 +13212,7 @@
+ .globl glFlushVertexArrayRangeNV
+ .type glFlushVertexArrayRangeNV,#function
+ glFlushVertexArrayRangeNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13233,7 +13233,7 @@
+ .globl glVertexArrayRangeNV
+ .type glVertexArrayRangeNV,#function
+ glVertexArrayRangeNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13254,7 +13254,7 @@
+ .globl glCombinerParameterfvNV
+ .type glCombinerParameterfvNV,#function
+ glCombinerParameterfvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13275,7 +13275,7 @@
+ .globl glCombinerParameterfNV
+ .type glCombinerParameterfNV,#function
+ glCombinerParameterfNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13296,7 +13296,7 @@
+ .globl glCombinerParameterivNV
+ .type glCombinerParameterivNV,#function
+ glCombinerParameterivNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13317,7 +13317,7 @@
+ .globl glCombinerParameteriNV
+ .type glCombinerParameteriNV,#function
+ glCombinerParameteriNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13338,7 +13338,7 @@
+ .globl glCombinerInputNV
+ .type glCombinerInputNV,#function
+ glCombinerInputNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13359,7 +13359,7 @@
+ .globl glCombinerOutputNV
+ .type glCombinerOutputNV,#function
+ glCombinerOutputNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13380,7 +13380,7 @@
+ .globl glFinalCombinerInputNV
+ .type glFinalCombinerInputNV,#function
+ glFinalCombinerInputNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13401,7 +13401,7 @@
+ .globl glGetCombinerInputParameterfvNV
+ .type glGetCombinerInputParameterfvNV,#function
+ glGetCombinerInputParameterfvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13422,7 +13422,7 @@
+ .globl glGetCombinerInputParameterivNV
+ .type glGetCombinerInputParameterivNV,#function
+ glGetCombinerInputParameterivNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13443,7 +13443,7 @@
+ .globl glGetCombinerOutputParameterfvNV
+ .type glGetCombinerOutputParameterfvNV,#function
+ glGetCombinerOutputParameterfvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13464,7 +13464,7 @@
+ .globl glGetCombinerOutputParameterivNV
+ .type glGetCombinerOutputParameterivNV,#function
+ glGetCombinerOutputParameterivNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13485,7 +13485,7 @@
+ .globl glGetFinalCombinerInputParameterfvNV
+ .type glGetFinalCombinerInputParameterfvNV,#function
+ glGetFinalCombinerInputParameterfvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13506,7 +13506,7 @@
+ .globl glGetFinalCombinerInputParameterivNV
+ .type glGetFinalCombinerInputParameterivNV,#function
+ glGetFinalCombinerInputParameterivNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13527,7 +13527,7 @@
+ .globl glResizeBuffersMESA
+ .type glResizeBuffersMESA,#function
+ glResizeBuffersMESA:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13548,7 +13548,7 @@
+ .globl glWindowPos2dMESA
+ .type glWindowPos2dMESA,#function
+ glWindowPos2dMESA:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13569,7 +13569,7 @@
+ .globl glWindowPos2dvMESA
+ .type glWindowPos2dvMESA,#function
+ glWindowPos2dvMESA:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13590,7 +13590,7 @@
+ .globl glWindowPos2fMESA
+ .type glWindowPos2fMESA,#function
+ glWindowPos2fMESA:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13611,7 +13611,7 @@
+ .globl glWindowPos2fvMESA
+ .type glWindowPos2fvMESA,#function
+ glWindowPos2fvMESA:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13632,7 +13632,7 @@
+ .globl glWindowPos2iMESA
+ .type glWindowPos2iMESA,#function
+ glWindowPos2iMESA:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13653,7 +13653,7 @@
+ .globl glWindowPos2ivMESA
+ .type glWindowPos2ivMESA,#function
+ glWindowPos2ivMESA:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13674,7 +13674,7 @@
+ .globl glWindowPos2sMESA
+ .type glWindowPos2sMESA,#function
+ glWindowPos2sMESA:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13695,7 +13695,7 @@
+ .globl glWindowPos2svMESA
+ .type glWindowPos2svMESA,#function
+ glWindowPos2svMESA:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13716,7 +13716,7 @@
+ .globl glWindowPos3dMESA
+ .type glWindowPos3dMESA,#function
+ glWindowPos3dMESA:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13737,7 +13737,7 @@
+ .globl glWindowPos3dvMESA
+ .type glWindowPos3dvMESA,#function
+ glWindowPos3dvMESA:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13758,7 +13758,7 @@
+ .globl glWindowPos3fMESA
+ .type glWindowPos3fMESA,#function
+ glWindowPos3fMESA:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13779,7 +13779,7 @@
+ .globl glWindowPos3fvMESA
+ .type glWindowPos3fvMESA,#function
+ glWindowPos3fvMESA:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13800,7 +13800,7 @@
+ .globl glWindowPos3iMESA
+ .type glWindowPos3iMESA,#function
+ glWindowPos3iMESA:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13821,7 +13821,7 @@
+ .globl glWindowPos3ivMESA
+ .type glWindowPos3ivMESA,#function
+ glWindowPos3ivMESA:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13842,7 +13842,7 @@
+ .globl glWindowPos3sMESA
+ .type glWindowPos3sMESA,#function
+ glWindowPos3sMESA:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13863,7 +13863,7 @@
+ .globl glWindowPos3svMESA
+ .type glWindowPos3svMESA,#function
+ glWindowPos3svMESA:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13884,7 +13884,7 @@
+ .globl glWindowPos4dMESA
+ .type glWindowPos4dMESA,#function
+ glWindowPos4dMESA:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13905,7 +13905,7 @@
+ .globl glWindowPos4dvMESA
+ .type glWindowPos4dvMESA,#function
+ glWindowPos4dvMESA:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13926,7 +13926,7 @@
+ .globl glWindowPos4fMESA
+ .type glWindowPos4fMESA,#function
+ glWindowPos4fMESA:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13947,7 +13947,7 @@
+ .globl glWindowPos4fvMESA
+ .type glWindowPos4fvMESA,#function
+ glWindowPos4fvMESA:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13968,7 +13968,7 @@
+ .globl glWindowPos4iMESA
+ .type glWindowPos4iMESA,#function
+ glWindowPos4iMESA:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -13989,7 +13989,7 @@
+ .globl glWindowPos4ivMESA
+ .type glWindowPos4ivMESA,#function
+ glWindowPos4ivMESA:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14010,7 +14010,7 @@
+ .globl glWindowPos4sMESA
+ .type glWindowPos4sMESA,#function
+ glWindowPos4sMESA:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14031,7 +14031,7 @@
+ .globl glWindowPos4svMESA
+ .type glWindowPos4svMESA,#function
+ glWindowPos4svMESA:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14052,7 +14052,7 @@
+ .globl glMultiModeDrawArraysIBM
+ .type glMultiModeDrawArraysIBM,#function
+ glMultiModeDrawArraysIBM:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14073,7 +14073,7 @@
+ .globl glMultiModeDrawElementsIBM
+ .type glMultiModeDrawElementsIBM,#function
+ glMultiModeDrawElementsIBM:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14094,7 +14094,7 @@
+ .globl glTbufferMask3DFX
+ .type glTbufferMask3DFX,#function
+ glTbufferMask3DFX:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14115,7 +14115,7 @@
+ .globl glSampleMaskEXT
+ .type glSampleMaskEXT,#function
+ glSampleMaskEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14136,7 +14136,7 @@
+ .globl glSamplePatternEXT
+ .type glSamplePatternEXT,#function
+ glSamplePatternEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14157,7 +14157,7 @@
+ .globl glWindowPos2dARB
+ .type glWindowPos2dARB,#function
+ glWindowPos2dARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14178,7 +14178,7 @@
+ .globl glWindowPos2fARB
+ .type glWindowPos2fARB,#function
+ glWindowPos2fARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14199,7 +14199,7 @@
+ .globl glWindowPos2iARB
+ .type glWindowPos2iARB,#function
+ glWindowPos2iARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14220,7 +14220,7 @@
+ .globl glWindowPos2sARB
+ .type glWindowPos2sARB,#function
+ glWindowPos2sARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14241,7 +14241,7 @@
+ .globl glWindowPos2dvARB
+ .type glWindowPos2dvARB,#function
+ glWindowPos2dvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14262,7 +14262,7 @@
+ .globl glWindowPos2fvARB
+ .type glWindowPos2fvARB,#function
+ glWindowPos2fvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14283,7 +14283,7 @@
+ .globl glWindowPos2ivARB
+ .type glWindowPos2ivARB,#function
+ glWindowPos2ivARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14304,7 +14304,7 @@
+ .globl glWindowPos2svARB
+ .type glWindowPos2svARB,#function
+ glWindowPos2svARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14325,7 +14325,7 @@
+ .globl glWindowPos3dARB
+ .type glWindowPos3dARB,#function
+ glWindowPos3dARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14346,7 +14346,7 @@
+ .globl glWindowPos3fARB
+ .type glWindowPos3fARB,#function
+ glWindowPos3fARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14367,7 +14367,7 @@
+ .globl glWindowPos3iARB
+ .type glWindowPos3iARB,#function
+ glWindowPos3iARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14388,7 +14388,7 @@
+ .globl glWindowPos3sARB
+ .type glWindowPos3sARB,#function
+ glWindowPos3sARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14409,7 +14409,7 @@
+ .globl glWindowPos3dvARB
+ .type glWindowPos3dvARB,#function
+ glWindowPos3dvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14430,7 +14430,7 @@
+ .globl glWindowPos3fvARB
+ .type glWindowPos3fvARB,#function
+ glWindowPos3fvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14451,7 +14451,7 @@
+ .globl glWindowPos3ivARB
+ .type glWindowPos3ivARB,#function
+ glWindowPos3ivARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14472,7 +14472,7 @@
+ .globl glWindowPos3svARB
+ .type glWindowPos3svARB,#function
+ glWindowPos3svARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14493,7 +14493,7 @@
+ .globl glAreProgramsResidentNV
+ .type glAreProgramsResidentNV,#function
+ glAreProgramsResidentNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14514,7 +14514,7 @@
+ .globl glBindProgramNV
+ .type glBindProgramNV,#function
+ glBindProgramNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14535,7 +14535,7 @@
+ .globl glDeleteProgramsNV
+ .type glDeleteProgramsNV,#function
+ glDeleteProgramsNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14556,7 +14556,7 @@
+ .globl glExecuteProgramNV
+ .type glExecuteProgramNV,#function
+ glExecuteProgramNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14577,7 +14577,7 @@
+ .globl glGenProgramsNV
+ .type glGenProgramsNV,#function
+ glGenProgramsNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14598,7 +14598,7 @@
+ .globl glGetProgramParameterdvNV
+ .type glGetProgramParameterdvNV,#function
+ glGetProgramParameterdvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14619,7 +14619,7 @@
+ .globl glGetProgramParameterfvNV
+ .type glGetProgramParameterfvNV,#function
+ glGetProgramParameterfvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14640,7 +14640,7 @@
+ .globl glGetProgramivNV
+ .type glGetProgramivNV,#function
+ glGetProgramivNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14661,7 +14661,7 @@
+ .globl glGetProgramStringNV
+ .type glGetProgramStringNV,#function
+ glGetProgramStringNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14682,7 +14682,7 @@
+ .globl glGetTrackMatrixivNV
+ .type glGetTrackMatrixivNV,#function
+ glGetTrackMatrixivNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14703,7 +14703,7 @@
+ .globl glGetVertexAttribdvNV
+ .type glGetVertexAttribdvNV,#function
+ glGetVertexAttribdvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14724,7 +14724,7 @@
+ .globl glGetVertexAttribfvNV
+ .type glGetVertexAttribfvNV,#function
+ glGetVertexAttribfvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14745,7 +14745,7 @@
+ .globl glGetVertexAttribivNV
+ .type glGetVertexAttribivNV,#function
+ glGetVertexAttribivNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14766,7 +14766,7 @@
+ .globl glGetVertexAttribPointervNV
+ .type glGetVertexAttribPointervNV,#function
+ glGetVertexAttribPointervNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14787,7 +14787,7 @@
+ .globl glIsProgramNV
+ .type glIsProgramNV,#function
+ glIsProgramNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14808,7 +14808,7 @@
+ .globl glLoadProgramNV
+ .type glLoadProgramNV,#function
+ glLoadProgramNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14829,7 +14829,7 @@
+ .globl glProgramParameter4dNV
+ .type glProgramParameter4dNV,#function
+ glProgramParameter4dNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14850,7 +14850,7 @@
+ .globl glProgramParameter4dvNV
+ .type glProgramParameter4dvNV,#function
+ glProgramParameter4dvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14871,7 +14871,7 @@
+ .globl glProgramParameter4fNV
+ .type glProgramParameter4fNV,#function
+ glProgramParameter4fNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14892,7 +14892,7 @@
+ .globl glProgramParameter4fvNV
+ .type glProgramParameter4fvNV,#function
+ glProgramParameter4fvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14913,7 +14913,7 @@
+ .globl glProgramParameters4dvNV
+ .type glProgramParameters4dvNV,#function
+ glProgramParameters4dvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14934,7 +14934,7 @@
+ .globl glProgramParameters4fvNV
+ .type glProgramParameters4fvNV,#function
+ glProgramParameters4fvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14955,7 +14955,7 @@
+ .globl glRequestResidentProgramsNV
+ .type glRequestResidentProgramsNV,#function
+ glRequestResidentProgramsNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14976,7 +14976,7 @@
+ .globl glTrackMatrixNV
+ .type glTrackMatrixNV,#function
+ glTrackMatrixNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -14997,7 +14997,7 @@
+ .globl glVertexAttribPointerNV
+ .type glVertexAttribPointerNV,#function
+ glVertexAttribPointerNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15018,7 +15018,7 @@
+ .globl glVertexAttrib1dNV
+ .type glVertexAttrib1dNV,#function
+ glVertexAttrib1dNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15039,7 +15039,7 @@
+ .globl glVertexAttrib1dvNV
+ .type glVertexAttrib1dvNV,#function
+ glVertexAttrib1dvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15060,7 +15060,7 @@
+ .globl glVertexAttrib1fNV
+ .type glVertexAttrib1fNV,#function
+ glVertexAttrib1fNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15081,7 +15081,7 @@
+ .globl glVertexAttrib1fvNV
+ .type glVertexAttrib1fvNV,#function
+ glVertexAttrib1fvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15102,7 +15102,7 @@
+ .globl glVertexAttrib1sNV
+ .type glVertexAttrib1sNV,#function
+ glVertexAttrib1sNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15123,7 +15123,7 @@
+ .globl glVertexAttrib1svNV
+ .type glVertexAttrib1svNV,#function
+ glVertexAttrib1svNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15144,7 +15144,7 @@
+ .globl glVertexAttrib2dNV
+ .type glVertexAttrib2dNV,#function
+ glVertexAttrib2dNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15165,7 +15165,7 @@
+ .globl glVertexAttrib2dvNV
+ .type glVertexAttrib2dvNV,#function
+ glVertexAttrib2dvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15186,7 +15186,7 @@
+ .globl glVertexAttrib2fNV
+ .type glVertexAttrib2fNV,#function
+ glVertexAttrib2fNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15207,7 +15207,7 @@
+ .globl glVertexAttrib2fvNV
+ .type glVertexAttrib2fvNV,#function
+ glVertexAttrib2fvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15228,7 +15228,7 @@
+ .globl glVertexAttrib2sNV
+ .type glVertexAttrib2sNV,#function
+ glVertexAttrib2sNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15249,7 +15249,7 @@
+ .globl glVertexAttrib2svNV
+ .type glVertexAttrib2svNV,#function
+ glVertexAttrib2svNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15270,7 +15270,7 @@
+ .globl glVertexAttrib3dNV
+ .type glVertexAttrib3dNV,#function
+ glVertexAttrib3dNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15291,7 +15291,7 @@
+ .globl glVertexAttrib3dvNV
+ .type glVertexAttrib3dvNV,#function
+ glVertexAttrib3dvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15312,7 +15312,7 @@
+ .globl glVertexAttrib3fNV
+ .type glVertexAttrib3fNV,#function
+ glVertexAttrib3fNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15333,7 +15333,7 @@
+ .globl glVertexAttrib3fvNV
+ .type glVertexAttrib3fvNV,#function
+ glVertexAttrib3fvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15354,7 +15354,7 @@
+ .globl glVertexAttrib3sNV
+ .type glVertexAttrib3sNV,#function
+ glVertexAttrib3sNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15375,7 +15375,7 @@
+ .globl glVertexAttrib3svNV
+ .type glVertexAttrib3svNV,#function
+ glVertexAttrib3svNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15396,7 +15396,7 @@
+ .globl glVertexAttrib4dNV
+ .type glVertexAttrib4dNV,#function
+ glVertexAttrib4dNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15417,7 +15417,7 @@
+ .globl glVertexAttrib4dvNV
+ .type glVertexAttrib4dvNV,#function
+ glVertexAttrib4dvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15438,7 +15438,7 @@
+ .globl glVertexAttrib4fNV
+ .type glVertexAttrib4fNV,#function
+ glVertexAttrib4fNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15459,7 +15459,7 @@
+ .globl glVertexAttrib4fvNV
+ .type glVertexAttrib4fvNV,#function
+ glVertexAttrib4fvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15480,7 +15480,7 @@
+ .globl glVertexAttrib4sNV
+ .type glVertexAttrib4sNV,#function
+ glVertexAttrib4sNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15501,7 +15501,7 @@
+ .globl glVertexAttrib4svNV
+ .type glVertexAttrib4svNV,#function
+ glVertexAttrib4svNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15522,7 +15522,7 @@
+ .globl glVertexAttrib4ubNV
+ .type glVertexAttrib4ubNV,#function
+ glVertexAttrib4ubNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15543,7 +15543,7 @@
+ .globl glVertexAttrib4ubvNV
+ .type glVertexAttrib4ubvNV,#function
+ glVertexAttrib4ubvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15564,7 +15564,7 @@
+ .globl glVertexAttribs1dvNV
+ .type glVertexAttribs1dvNV,#function
+ glVertexAttribs1dvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15585,7 +15585,7 @@
+ .globl glVertexAttribs1fvNV
+ .type glVertexAttribs1fvNV,#function
+ glVertexAttribs1fvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15606,7 +15606,7 @@
+ .globl glVertexAttribs1svNV
+ .type glVertexAttribs1svNV,#function
+ glVertexAttribs1svNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15627,7 +15627,7 @@
+ .globl glVertexAttribs2dvNV
+ .type glVertexAttribs2dvNV,#function
+ glVertexAttribs2dvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15648,7 +15648,7 @@
+ .globl glVertexAttribs2fvNV
+ .type glVertexAttribs2fvNV,#function
+ glVertexAttribs2fvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15669,7 +15669,7 @@
+ .globl glVertexAttribs2svNV
+ .type glVertexAttribs2svNV,#function
+ glVertexAttribs2svNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15690,7 +15690,7 @@
+ .globl glVertexAttribs3dvNV
+ .type glVertexAttribs3dvNV,#function
+ glVertexAttribs3dvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15711,7 +15711,7 @@
+ .globl glVertexAttribs3fvNV
+ .type glVertexAttribs3fvNV,#function
+ glVertexAttribs3fvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15732,7 +15732,7 @@
+ .globl glVertexAttribs3svNV
+ .type glVertexAttribs3svNV,#function
+ glVertexAttribs3svNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15753,7 +15753,7 @@
+ .globl glVertexAttribs4dvNV
+ .type glVertexAttribs4dvNV,#function
+ glVertexAttribs4dvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15774,7 +15774,7 @@
+ .globl glVertexAttribs4fvNV
+ .type glVertexAttribs4fvNV,#function
+ glVertexAttribs4fvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15795,7 +15795,7 @@
+ .globl glVertexAttribs4svNV
+ .type glVertexAttribs4svNV,#function
+ glVertexAttribs4svNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15816,7 +15816,7 @@
+ .globl glVertexAttribs4ubvNV
+ .type glVertexAttribs4ubvNV,#function
+ glVertexAttribs4ubvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15837,7 +15837,7 @@
+ .globl glPointParameteriNV
+ .type glPointParameteriNV,#function
+ glPointParameteriNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15858,7 +15858,7 @@
+ .globl glPointParameterivNV
+ .type glPointParameterivNV,#function
+ glPointParameterivNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15879,7 +15879,7 @@
+ .globl glBlendFuncSeparate
+ .type glBlendFuncSeparate,#function
+ glBlendFuncSeparate:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15900,7 +15900,7 @@
+ .globl glFogCoordf
+ .type glFogCoordf,#function
+ glFogCoordf:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15921,7 +15921,7 @@
+ .globl glFogCoordfv
+ .type glFogCoordfv,#function
+ glFogCoordfv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15942,7 +15942,7 @@
+ .globl glFogCoordd
+ .type glFogCoordd,#function
+ glFogCoordd:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15963,7 +15963,7 @@
+ .globl glFogCoorddv
+ .type glFogCoorddv,#function
+ glFogCoorddv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -15984,7 +15984,7 @@
+ .globl glFogCoordPointer
+ .type glFogCoordPointer,#function
+ glFogCoordPointer:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16005,7 +16005,7 @@
+ .globl glMultiDrawArrays
+ .type glMultiDrawArrays,#function
+ glMultiDrawArrays:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16026,7 +16026,7 @@
+ .globl glMultiDrawElements
+ .type glMultiDrawElements,#function
+ glMultiDrawElements:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16047,7 +16047,7 @@
+ .globl glPointParameterf
+ .type glPointParameterf,#function
+ glPointParameterf:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16068,7 +16068,7 @@
+ .globl glPointParameterfv
+ .type glPointParameterfv,#function
+ glPointParameterfv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16089,7 +16089,7 @@
+ .globl glPointParameteri
+ .type glPointParameteri,#function
+ glPointParameteri:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16110,7 +16110,7 @@
+ .globl glPointParameteriv
+ .type glPointParameteriv,#function
+ glPointParameteriv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16131,7 +16131,7 @@
+ .globl glSecondaryColor3b
+ .type glSecondaryColor3b,#function
+ glSecondaryColor3b:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16152,7 +16152,7 @@
+ .globl glSecondaryColor3bv
+ .type glSecondaryColor3bv,#function
+ glSecondaryColor3bv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16173,7 +16173,7 @@
+ .globl glSecondaryColor3d
+ .type glSecondaryColor3d,#function
+ glSecondaryColor3d:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16194,7 +16194,7 @@
+ .globl glSecondaryColor3dv
+ .type glSecondaryColor3dv,#function
+ glSecondaryColor3dv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16215,7 +16215,7 @@
+ .globl glSecondaryColor3f
+ .type glSecondaryColor3f,#function
+ glSecondaryColor3f:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16236,7 +16236,7 @@
+ .globl glSecondaryColor3fv
+ .type glSecondaryColor3fv,#function
+ glSecondaryColor3fv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16257,7 +16257,7 @@
+ .globl glSecondaryColor3i
+ .type glSecondaryColor3i,#function
+ glSecondaryColor3i:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16278,7 +16278,7 @@
+ .globl glSecondaryColor3iv
+ .type glSecondaryColor3iv,#function
+ glSecondaryColor3iv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16299,7 +16299,7 @@
+ .globl glSecondaryColor3s
+ .type glSecondaryColor3s,#function
+ glSecondaryColor3s:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16320,7 +16320,7 @@
+ .globl glSecondaryColor3sv
+ .type glSecondaryColor3sv,#function
+ glSecondaryColor3sv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16341,7 +16341,7 @@
+ .globl glSecondaryColor3ub
+ .type glSecondaryColor3ub,#function
+ glSecondaryColor3ub:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16362,7 +16362,7 @@
+ .globl glSecondaryColor3ubv
+ .type glSecondaryColor3ubv,#function
+ glSecondaryColor3ubv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16383,7 +16383,7 @@
+ .globl glSecondaryColor3ui
+ .type glSecondaryColor3ui,#function
+ glSecondaryColor3ui:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16404,7 +16404,7 @@
+ .globl glSecondaryColor3uiv
+ .type glSecondaryColor3uiv,#function
+ glSecondaryColor3uiv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16425,7 +16425,7 @@
+ .globl glSecondaryColor3us
+ .type glSecondaryColor3us,#function
+ glSecondaryColor3us:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16446,7 +16446,7 @@
+ .globl glSecondaryColor3usv
+ .type glSecondaryColor3usv,#function
+ glSecondaryColor3usv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16467,7 +16467,7 @@
+ .globl glSecondaryColorPointer
+ .type glSecondaryColorPointer,#function
+ glSecondaryColorPointer:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16488,7 +16488,7 @@
+ .globl glWindowPos2d
+ .type glWindowPos2d,#function
+ glWindowPos2d:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16509,7 +16509,7 @@
+ .globl glWindowPos2dv
+ .type glWindowPos2dv,#function
+ glWindowPos2dv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16530,7 +16530,7 @@
+ .globl glWindowPos2f
+ .type glWindowPos2f,#function
+ glWindowPos2f:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16551,7 +16551,7 @@
+ .globl glWindowPos2fv
+ .type glWindowPos2fv,#function
+ glWindowPos2fv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16572,7 +16572,7 @@
+ .globl glWindowPos2i
+ .type glWindowPos2i,#function
+ glWindowPos2i:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16593,7 +16593,7 @@
+ .globl glWindowPos2iv
+ .type glWindowPos2iv,#function
+ glWindowPos2iv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16614,7 +16614,7 @@
+ .globl glWindowPos2s
+ .type glWindowPos2s,#function
+ glWindowPos2s:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16635,7 +16635,7 @@
+ .globl glWindowPos2sv
+ .type glWindowPos2sv,#function
+ glWindowPos2sv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16656,7 +16656,7 @@
+ .globl glWindowPos3d
+ .type glWindowPos3d,#function
+ glWindowPos3d:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16677,7 +16677,7 @@
+ .globl glWindowPos3dv
+ .type glWindowPos3dv,#function
+ glWindowPos3dv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16698,7 +16698,7 @@
+ .globl glWindowPos3f
+ .type glWindowPos3f,#function
+ glWindowPos3f:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16719,7 +16719,7 @@
+ .globl glWindowPos3fv
+ .type glWindowPos3fv,#function
+ glWindowPos3fv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16740,7 +16740,7 @@
+ .globl glWindowPos3i
+ .type glWindowPos3i,#function
+ glWindowPos3i:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16761,7 +16761,7 @@
+ .globl glWindowPos3iv
+ .type glWindowPos3iv,#function
+ glWindowPos3iv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16782,7 +16782,7 @@
+ .globl glWindowPos3s
+ .type glWindowPos3s,#function
+ glWindowPos3s:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16803,7 +16803,7 @@
+ .globl glWindowPos3sv
+ .type glWindowPos3sv,#function
+ glWindowPos3sv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16824,7 +16824,7 @@
+ .globl glActiveStencilFaceEXT
+ .type glActiveStencilFaceEXT,#function
+ glActiveStencilFaceEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16845,7 +16845,7 @@
+ .globl glDeleteFencesNV
+ .type glDeleteFencesNV,#function
+ glDeleteFencesNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16866,7 +16866,7 @@
+ .globl glGenFencesNV
+ .type glGenFencesNV,#function
+ glGenFencesNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16887,7 +16887,7 @@
+ .globl glIsFenceNV
+ .type glIsFenceNV,#function
+ glIsFenceNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16908,7 +16908,7 @@
+ .globl glTestFenceNV
+ .type glTestFenceNV,#function
+ glTestFenceNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16929,7 +16929,7 @@
+ .globl glGetFenceivNV
+ .type glGetFenceivNV,#function
+ glGetFenceivNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16950,7 +16950,7 @@
+ .globl glFinishFenceNV
+ .type glFinishFenceNV,#function
+ glFinishFenceNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16971,7 +16971,7 @@
+ .globl glSetFenceNV
+ .type glSetFenceNV,#function
+ glSetFenceNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -16992,7 +16992,7 @@
+ .globl glVertexAttrib1sARB
+ .type glVertexAttrib1sARB,#function
+ glVertexAttrib1sARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17013,7 +17013,7 @@
+ .globl glVertexAttrib1fARB
+ .type glVertexAttrib1fARB,#function
+ glVertexAttrib1fARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17034,7 +17034,7 @@
+ .globl glVertexAttrib1dARB
+ .type glVertexAttrib1dARB,#function
+ glVertexAttrib1dARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17055,7 +17055,7 @@
+ .globl glVertexAttrib2sARB
+ .type glVertexAttrib2sARB,#function
+ glVertexAttrib2sARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17076,7 +17076,7 @@
+ .globl glVertexAttrib2fARB
+ .type glVertexAttrib2fARB,#function
+ glVertexAttrib2fARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17097,7 +17097,7 @@
+ .globl glVertexAttrib2dARB
+ .type glVertexAttrib2dARB,#function
+ glVertexAttrib2dARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17118,7 +17118,7 @@
+ .globl glVertexAttrib3sARB
+ .type glVertexAttrib3sARB,#function
+ glVertexAttrib3sARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17139,7 +17139,7 @@
+ .globl glVertexAttrib3fARB
+ .type glVertexAttrib3fARB,#function
+ glVertexAttrib3fARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17160,7 +17160,7 @@
+ .globl glVertexAttrib3dARB
+ .type glVertexAttrib3dARB,#function
+ glVertexAttrib3dARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17181,7 +17181,7 @@
+ .globl glVertexAttrib4sARB
+ .type glVertexAttrib4sARB,#function
+ glVertexAttrib4sARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17202,7 +17202,7 @@
+ .globl glVertexAttrib4fARB
+ .type glVertexAttrib4fARB,#function
+ glVertexAttrib4fARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17223,7 +17223,7 @@
+ .globl glVertexAttrib4dARB
+ .type glVertexAttrib4dARB,#function
+ glVertexAttrib4dARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17244,7 +17244,7 @@
+ .globl glVertexAttrib4NubARB
+ .type glVertexAttrib4NubARB,#function
+ glVertexAttrib4NubARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17265,7 +17265,7 @@
+ .globl glVertexAttrib1svARB
+ .type glVertexAttrib1svARB,#function
+ glVertexAttrib1svARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17286,7 +17286,7 @@
+ .globl glVertexAttrib1fvARB
+ .type glVertexAttrib1fvARB,#function
+ glVertexAttrib1fvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17307,7 +17307,7 @@
+ .globl glVertexAttrib1dvARB
+ .type glVertexAttrib1dvARB,#function
+ glVertexAttrib1dvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17328,7 +17328,7 @@
+ .globl glVertexAttrib2svARB
+ .type glVertexAttrib2svARB,#function
+ glVertexAttrib2svARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17349,7 +17349,7 @@
+ .globl glVertexAttrib2fvARB
+ .type glVertexAttrib2fvARB,#function
+ glVertexAttrib2fvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17370,7 +17370,7 @@
+ .globl glVertexAttrib2dvARB
+ .type glVertexAttrib2dvARB,#function
+ glVertexAttrib2dvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17391,7 +17391,7 @@
+ .globl glVertexAttrib3svARB
+ .type glVertexAttrib3svARB,#function
+ glVertexAttrib3svARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17412,7 +17412,7 @@
+ .globl glVertexAttrib3fvARB
+ .type glVertexAttrib3fvARB,#function
+ glVertexAttrib3fvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17433,7 +17433,7 @@
+ .globl glVertexAttrib3dvARB
+ .type glVertexAttrib3dvARB,#function
+ glVertexAttrib3dvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17454,7 +17454,7 @@
+ .globl glVertexAttrib4bvARB
+ .type glVertexAttrib4bvARB,#function
+ glVertexAttrib4bvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17475,7 +17475,7 @@
+ .globl glVertexAttrib4svARB
+ .type glVertexAttrib4svARB,#function
+ glVertexAttrib4svARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17496,7 +17496,7 @@
+ .globl glVertexAttrib4ivARB
+ .type glVertexAttrib4ivARB,#function
+ glVertexAttrib4ivARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17517,7 +17517,7 @@
+ .globl glVertexAttrib4ubvARB
+ .type glVertexAttrib4ubvARB,#function
+ glVertexAttrib4ubvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17538,7 +17538,7 @@
+ .globl glVertexAttrib4usvARB
+ .type glVertexAttrib4usvARB,#function
+ glVertexAttrib4usvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17559,7 +17559,7 @@
+ .globl glVertexAttrib4uivARB
+ .type glVertexAttrib4uivARB,#function
+ glVertexAttrib4uivARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17580,7 +17580,7 @@
+ .globl glVertexAttrib4fvARB
+ .type glVertexAttrib4fvARB,#function
+ glVertexAttrib4fvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17601,7 +17601,7 @@
+ .globl glVertexAttrib4dvARB
+ .type glVertexAttrib4dvARB,#function
+ glVertexAttrib4dvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17622,7 +17622,7 @@
+ .globl glVertexAttrib4NbvARB
+ .type glVertexAttrib4NbvARB,#function
+ glVertexAttrib4NbvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17643,7 +17643,7 @@
+ .globl glVertexAttrib4NsvARB
+ .type glVertexAttrib4NsvARB,#function
+ glVertexAttrib4NsvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17664,7 +17664,7 @@
+ .globl glVertexAttrib4NivARB
+ .type glVertexAttrib4NivARB,#function
+ glVertexAttrib4NivARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17685,7 +17685,7 @@
+ .globl glVertexAttrib4NubvARB
+ .type glVertexAttrib4NubvARB,#function
+ glVertexAttrib4NubvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17706,7 +17706,7 @@
+ .globl glVertexAttrib4NusvARB
+ .type glVertexAttrib4NusvARB,#function
+ glVertexAttrib4NusvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17727,7 +17727,7 @@
+ .globl glVertexAttrib4NuivARB
+ .type glVertexAttrib4NuivARB,#function
+ glVertexAttrib4NuivARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17748,7 +17748,7 @@
+ .globl glVertexAttribPointerARB
+ .type glVertexAttribPointerARB,#function
+ glVertexAttribPointerARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17769,7 +17769,7 @@
+ .globl glEnableVertexAttribArrayARB
+ .type glEnableVertexAttribArrayARB,#function
+ glEnableVertexAttribArrayARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17790,7 +17790,7 @@
+ .globl glDisableVertexAttribArrayARB
+ .type glDisableVertexAttribArrayARB,#function
+ glDisableVertexAttribArrayARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17811,7 +17811,7 @@
+ .globl glProgramStringARB
+ .type glProgramStringARB,#function
+ glProgramStringARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17832,7 +17832,7 @@
+ .globl glBindProgramARB
+ .type glBindProgramARB,#function
+ glBindProgramARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17853,7 +17853,7 @@
+ .globl glDeleteProgramsARB
+ .type glDeleteProgramsARB,#function
+ glDeleteProgramsARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17874,7 +17874,7 @@
+ .globl glGenProgramsARB
+ .type glGenProgramsARB,#function
+ glGenProgramsARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17895,7 +17895,7 @@
+ .globl glIsProgramARB
+ .type glIsProgramARB,#function
+ glIsProgramARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17916,7 +17916,7 @@
+ .globl glProgramEnvParameter4dARB
+ .type glProgramEnvParameter4dARB,#function
+ glProgramEnvParameter4dARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17937,7 +17937,7 @@
+ .globl glProgramEnvParameter4dvARB
+ .type glProgramEnvParameter4dvARB,#function
+ glProgramEnvParameter4dvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17958,7 +17958,7 @@
+ .globl glProgramEnvParameter4fARB
+ .type glProgramEnvParameter4fARB,#function
+ glProgramEnvParameter4fARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -17979,7 +17979,7 @@
+ .globl glProgramEnvParameter4fvARB
+ .type glProgramEnvParameter4fvARB,#function
+ glProgramEnvParameter4fvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18000,7 +18000,7 @@
+ .globl glProgramLocalParameter4dARB
+ .type glProgramLocalParameter4dARB,#function
+ glProgramLocalParameter4dARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18021,7 +18021,7 @@
+ .globl glProgramLocalParameter4dvARB
+ .type glProgramLocalParameter4dvARB,#function
+ glProgramLocalParameter4dvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18042,7 +18042,7 @@
+ .globl glProgramLocalParameter4fARB
+ .type glProgramLocalParameter4fARB,#function
+ glProgramLocalParameter4fARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18063,7 +18063,7 @@
+ .globl glProgramLocalParameter4fvARB
+ .type glProgramLocalParameter4fvARB,#function
+ glProgramLocalParameter4fvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18084,7 +18084,7 @@
+ .globl glGetProgramEnvParameterdvARB
+ .type glGetProgramEnvParameterdvARB,#function
+ glGetProgramEnvParameterdvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18105,7 +18105,7 @@
+ .globl glGetProgramEnvParameterfvARB
+ .type glGetProgramEnvParameterfvARB,#function
+ glGetProgramEnvParameterfvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18126,7 +18126,7 @@
+ .globl glGetProgramLocalParameterdvARB
+ .type glGetProgramLocalParameterdvARB,#function
+ glGetProgramLocalParameterdvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18147,7 +18147,7 @@
+ .globl glGetProgramLocalParameterfvARB
+ .type glGetProgramLocalParameterfvARB,#function
+ glGetProgramLocalParameterfvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18168,7 +18168,7 @@
+ .globl glGetProgramivARB
+ .type glGetProgramivARB,#function
+ glGetProgramivARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18189,7 +18189,7 @@
+ .globl glGetProgramStringARB
+ .type glGetProgramStringARB,#function
+ glGetProgramStringARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18210,7 +18210,7 @@
+ .globl glGetVertexAttribdvARB
+ .type glGetVertexAttribdvARB,#function
+ glGetVertexAttribdvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18231,7 +18231,7 @@
+ .globl glGetVertexAttribfvARB
+ .type glGetVertexAttribfvARB,#function
+ glGetVertexAttribfvARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18252,7 +18252,7 @@
+ .globl glGetVertexAttribivARB
+ .type glGetVertexAttribivARB,#function
+ glGetVertexAttribivARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18273,7 +18273,7 @@
+ .globl glGetVertexAttribPointervARB
+ .type glGetVertexAttribPointervARB,#function
+ glGetVertexAttribPointervARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18294,7 +18294,7 @@
+ .globl glProgramNamedParameter4fNV
+ .type glProgramNamedParameter4fNV,#function
+ glProgramNamedParameter4fNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18315,7 +18315,7 @@
+ .globl glProgramNamedParameter4dNV
+ .type glProgramNamedParameter4dNV,#function
+ glProgramNamedParameter4dNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18336,7 +18336,7 @@
+ .globl glProgramNamedParameter4fvNV
+ .type glProgramNamedParameter4fvNV,#function
+ glProgramNamedParameter4fvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18357,7 +18357,7 @@
+ .globl glProgramNamedParameter4dvNV
+ .type glProgramNamedParameter4dvNV,#function
+ glProgramNamedParameter4dvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18378,7 +18378,7 @@
+ .globl glGetProgramNamedParameterfvNV
+ .type glGetProgramNamedParameterfvNV,#function
+ glGetProgramNamedParameterfvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18399,7 +18399,7 @@
+ .globl glGetProgramNamedParameterdvNV
+ .type glGetProgramNamedParameterdvNV,#function
+ glGetProgramNamedParameterdvNV:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18420,7 +18420,7 @@
+ .globl glBindBufferARB
+ .type glBindBufferARB,#function
+ glBindBufferARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18441,7 +18441,7 @@
+ .globl glBufferDataARB
+ .type glBufferDataARB,#function
+ glBufferDataARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18462,7 +18462,7 @@
+ .globl glBufferSubDataARB
+ .type glBufferSubDataARB,#function
+ glBufferSubDataARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18483,7 +18483,7 @@
+ .globl glDeleteBuffersARB
+ .type glDeleteBuffersARB,#function
+ glDeleteBuffersARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18504,7 +18504,7 @@
+ .globl glGenBuffersARB
+ .type glGenBuffersARB,#function
+ glGenBuffersARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18525,7 +18525,7 @@
+ .globl glGetBufferParameterivARB
+ .type glGetBufferParameterivARB,#function
+ glGetBufferParameterivARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18546,7 +18546,7 @@
+ .globl glGetBufferPointervARB
+ .type glGetBufferPointervARB,#function
+ glGetBufferPointervARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18567,7 +18567,7 @@
+ .globl glGetBufferSubDataARB
+ .type glGetBufferSubDataARB,#function
+ glGetBufferSubDataARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18588,7 +18588,7 @@
+ .globl glIsBufferARB
+ .type glIsBufferARB,#function
+ glIsBufferARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18609,7 +18609,7 @@
+ .globl glMapBufferARB
+ .type glMapBufferARB,#function
+ glMapBufferARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18630,7 +18630,7 @@
+ .globl glUnmapBufferARB
+ .type glUnmapBufferARB,#function
+ glUnmapBufferARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18651,7 +18651,7 @@
+ .globl glDepthBoundsEXT
+ .type glDepthBoundsEXT,#function
+ glDepthBoundsEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18672,7 +18672,7 @@
+ .globl glGenQueriesARB
+ .type glGenQueriesARB,#function
+ glGenQueriesARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18693,7 +18693,7 @@
+ .globl glDeleteQueriesARB
+ .type glDeleteQueriesARB,#function
+ glDeleteQueriesARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18714,7 +18714,7 @@
+ .globl glIsQueryARB
+ .type glIsQueryARB,#function
+ glIsQueryARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18735,7 +18735,7 @@
+ .globl glBeginQueryARB
+ .type glBeginQueryARB,#function
+ glBeginQueryARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18756,7 +18756,7 @@
+ .globl glEndQueryARB
+ .type glEndQueryARB,#function
+ glEndQueryARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18777,7 +18777,7 @@
+ .globl glGetQueryivARB
+ .type glGetQueryivARB,#function
+ glGetQueryivARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18798,7 +18798,7 @@
+ .globl glGetQueryObjectivARB
+ .type glGetQueryObjectivARB,#function
+ glGetQueryObjectivARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18819,7 +18819,7 @@
+ .globl glGetQueryObjectuivARB
+ .type glGetQueryObjectuivARB,#function
+ glGetQueryObjectuivARB:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18840,7 +18840,7 @@
+ .globl glBindBuffer
+ .type glBindBuffer,#function
+ glBindBuffer:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18861,7 +18861,7 @@
+ .globl glBufferData
+ .type glBufferData,#function
+ glBufferData:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18882,7 +18882,7 @@
+ .globl glBufferSubData
+ .type glBufferSubData,#function
+ glBufferSubData:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18903,7 +18903,7 @@
+ .globl glDeleteBuffers
+ .type glDeleteBuffers,#function
+ glDeleteBuffers:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18924,7 +18924,7 @@
+ .globl glGenBuffers
+ .type glGenBuffers,#function
+ glGenBuffers:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18945,7 +18945,7 @@
+ .globl glGetBufferParameteriv
+ .type glGetBufferParameteriv,#function
+ glGetBufferParameteriv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18966,7 +18966,7 @@
+ .globl glGetBufferPointerv
+ .type glGetBufferPointerv,#function
+ glGetBufferPointerv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -18987,7 +18987,7 @@
+ .globl glGetBufferSubData
+ .type glGetBufferSubData,#function
+ glGetBufferSubData:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -19008,7 +19008,7 @@
+ .globl glIsBuffer
+ .type glIsBuffer,#function
+ glIsBuffer:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -19029,7 +19029,7 @@
+ .globl glMapBuffer
+ .type glMapBuffer,#function
+ glMapBuffer:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -19050,7 +19050,7 @@
+ .globl glUnmapBuffer
+ .type glUnmapBuffer,#function
+ glUnmapBuffer:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -19071,7 +19071,7 @@
+ .globl glGenQueries
+ .type glGenQueries,#function
+ glGenQueries:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -19092,7 +19092,7 @@
+ .globl glDeleteQueries
+ .type glDeleteQueries,#function
+ glDeleteQueries:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -19113,7 +19113,7 @@
+ .globl glIsQuery
+ .type glIsQuery,#function
+ glIsQuery:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -19134,7 +19134,7 @@
+ .globl glBeginQuery
+ .type glBeginQuery,#function
+ glBeginQuery:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -19155,7 +19155,7 @@
+ .globl glEndQuery
+ .type glEndQuery,#function
+ glEndQuery:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -19176,7 +19176,7 @@
+ .globl glGetQueryiv
+ .type glGetQueryiv,#function
+ glGetQueryiv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -19197,7 +19197,7 @@
+ .globl glGetQueryObjectiv
+ .type glGetQueryObjectiv,#function
+ glGetQueryObjectiv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -19218,7 +19218,7 @@
+ .globl glGetQueryObjectuiv
+ .type glGetQueryObjectuiv,#function
+ glGetQueryObjectuiv:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -19239,7 +19239,7 @@
+ .globl glBlendEquationSeparateEXT
+ .type glBlendEquationSeparateEXT,#function
+ glBlendEquationSeparateEXT:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+@@ -19260,7 +19260,7 @@
+ .globl glBlendEquationSeparateATI
+ .type glBlendEquationSeparateATI,#function
+ glBlendEquationSeparateATI:
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ sethi %hi(0x00000000), %g2
+ sethi %hi(0x00000000), %g1
+ or %g2, %lo(0x00000000), %g2
+Index: xc/extras/Mesa/src/mesa/sparc/norm.S
+diff -u xc/extras/Mesa/src/mesa/sparc/norm.S:1.1.1.1 xc/extras/Mesa/src/mesa/sparc/norm.S:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/sparc/norm.S:1.1.1.1 Wed Jun 16 09:19:24 2004
++++ xc/extras/Mesa/src/mesa/sparc/norm.S Wed Dec 15 01:51:03 2004
+@@ -1,4 +1,4 @@
+-/* $Id$ */
++/* $Id$ */
+
+ #include "sparc_matrix.h"
+
+@@ -10,7 +10,7 @@
+
+ .text
+
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ #define STACK_VAR_OFF (2047 + (8 * 16))
+ #else
+ #define STACK_VAR_OFF (4 * 16)
+Index: xc/extras/Mesa/src/mesa/sparc/sparc.c
+diff -u xc/extras/Mesa/src/mesa/sparc/sparc.c:1.1.1.2 xc/extras/Mesa/src/mesa/sparc/sparc.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/sparc/sparc.c:1.1.1.2 Thu Jul 22 06:53:06 2004
++++ xc/extras/Mesa/src/mesa/sparc/sparc.c Wed Dec 15 01:51:03 2004
+@@ -1,6 +1,6 @@
+ /*
+ * Mesa 3-D graphics library
+- * Version: 5.1
++ * Version: 6.3
+ *
+ * Copyright (C) 1999-2003 Brian Paul All Rights Reserved.
+ *
+@@ -27,12 +27,13 @@
+ */
+
+
++#include "sparc.h"
++
+ #ifdef USE_SPARC_ASM
+
+ #include "context.h"
+ #include "math/m_xform.h"
+ #include "tnl/t_context.h"
+-#include "sparc.h"
+
+ #ifdef DEBUG
+ #include "math/m_debug.h"
+@@ -68,7 +69,6 @@
+ _mesa_##pfx##_transform_points##sz##_3d;
+
+
+-#ifdef USE_SPARC_ASM
+ DECLARE_XFORM_GROUP(sparc, 1)
+ DECLARE_XFORM_GROUP(sparc, 2)
+ DECLARE_XFORM_GROUP(sparc, 3)
+@@ -101,11 +101,10 @@
+ extern void _mesa_sparc_normalize_normals(NORM_ARGS);
+ extern void _mesa_sparc_rescale_normals(NORM_ARGS);
+
+-#endif
++
+
+ void _mesa_init_all_sparc_transform_asm(void)
+ {
+-#ifdef USE_SPARC_ASM
+ ASSIGN_XFORM_GROUP(sparc, 1)
+ ASSIGN_XFORM_GROUP(sparc, 2)
+ ASSIGN_XFORM_GROUP(sparc, 3)
+@@ -143,8 +142,6 @@
+ _math_test_all_cliptest_functions("sparc");
+ _math_test_all_normal_transform_functions("sparc");
+ #endif
+-
+-#endif
+ }
+
+ extern unsigned int _mesa_sparc_glapi_begin;
+@@ -165,7 +162,7 @@
+ disp_addr = (unsigned long) &_glapi_Dispatch;
+
+ while (insn_ptr < end_ptr) {
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ insn_ptr[0] |= (disp_addr >> (32 + 10));
+ insn_ptr[1] |= ((disp_addr & 0xffffffff) >> 10);
+ __glapi_sparc_icache_flush(&insn_ptr[0]);
+Index: xc/extras/Mesa/src/mesa/sparc/sparc_matrix.h
+diff -u xc/extras/Mesa/src/mesa/sparc/sparc_matrix.h:1.1.1.1 xc/extras/Mesa/src/mesa/sparc/sparc_matrix.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/sparc/sparc_matrix.h:1.1.1.1 Wed Jun 16 09:19:24 2004
++++ xc/extras/Mesa/src/mesa/sparc/sparc_matrix.h Wed Dec 15 01:51:03 2004
+@@ -5,7 +5,7 @@
+ #ifndef _SPARC_MATRIX_H
+ #define _SPARC_MATRIX_H
+
+-#if defined(__sparc_v9__) && !defined(__linux__)
++#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+ #define LDPTR ldx
+ #define MAT_M 0x00
+ #define MAT_INV 0x08
+Index: xc/extras/Mesa/src/mesa/swrast/s_alphabuf.c
+diff -u xc/extras/Mesa/src/mesa/swrast/s_alphabuf.c:1.1.1.1 xc/extras/Mesa/src/mesa/swrast/s_alphabuf.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/swrast/s_alphabuf.c:1.1.1.1 Wed Jun 16 09:19:25 2004
++++ xc/extras/Mesa/src/mesa/swrast/s_alphabuf.c Wed Dec 15 01:51:04 2004
+@@ -178,16 +178,12 @@
+ switch (swrast->CurrentBufferBit) {
+ case DD_FRONT_LEFT_BIT:
+ return ctx->DrawBuffer->FrontLeftAlpha;
+- break;
+ case DD_BACK_LEFT_BIT:
+ return ctx->DrawBuffer->BackLeftAlpha;
+- break;
+ case DD_FRONT_RIGHT_BIT:
+ return ctx->DrawBuffer->FrontRightAlpha;
+- break;
+ case DD_BACK_RIGHT_BIT:
+ return ctx->DrawBuffer->BackRightAlpha;
+- break;
+ default:
+ _mesa_problem(ctx, "Bad CurrentBuffer in get_alpha_buffer()");
+ return (GLchan *) ctx->DrawBuffer->FrontLeftAlpha;
+Index: xc/extras/Mesa/src/mesa/swrast/s_auxbuffer.c
+diff -u xc/extras/Mesa/src/mesa/swrast/s_auxbuffer.c:1.1.1.1 xc/extras/Mesa/src/mesa/swrast/s_auxbuffer.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/swrast/s_auxbuffer.c:1.1.1.1 Wed Jun 16 09:19:30 2004
++++ xc/extras/Mesa/src/mesa/swrast/s_auxbuffer.c Wed Dec 15 01:51:04 2004
+@@ -93,6 +93,7 @@
+ _swrast_use_aux_buffer(GLcontext *ctx, GLframebuffer *buffer, GLuint bufferBit)
+ {
+ SWcontext *swrast = SWRAST_CONTEXT(ctx);
++ (void) buffer;
+
+ switch (bufferBit) {
+ case DD_AUX0_BIT:
+Index: xc/extras/Mesa/src/mesa/swrast/s_buffers.c
+diff -u xc/extras/Mesa/src/mesa/swrast/s_buffers.c:1.1.1.1 xc/extras/Mesa/src/mesa/swrast/s_buffers.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/swrast/s_buffers.c:1.1.1.1 Wed Jun 16 09:19:26 2004
++++ xc/extras/Mesa/src/mesa/swrast/s_buffers.c Wed Dec 15 01:51:04 2004
+@@ -176,6 +176,7 @@
+ GLint x, GLint y, GLint width, GLint height )
+ {
+ SWcontext *swrast = SWRAST_CONTEXT(ctx);
++ (void) all; (void) x; (void) y; (void) width; (void) height;
+ #ifdef DEBUG
+ {
+ const GLbitfield legalBits =
+@@ -254,6 +255,7 @@
+ void
+ _swrast_DrawBuffer( GLcontext *ctx, GLenum mode )
+ {
++ (void) mode;
+ _swrast_use_draw_buffer(ctx);
+ }
+
+Index: xc/extras/Mesa/src/mesa/swrast/s_context.c
+diff -u xc/extras/Mesa/src/mesa/swrast/s_context.c:1.1.1.2 xc/extras/Mesa/src/mesa/swrast/s_context.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/swrast/s_context.c:1.1.1.2 Thu Jul 22 06:53:08 2004
++++ xc/extras/Mesa/src/mesa/swrast/s_context.c Wed Dec 15 01:51:04 2004
+@@ -196,19 +196,22 @@
+ CLAMPED_FLOAT_TO_CHAN(swrast->_FogColor[GCOMP], ctx->Fog.Color[GCOMP]);
+ CLAMPED_FLOAT_TO_CHAN(swrast->_FogColor[BCOMP], ctx->Fog.Color[BCOMP]);
+
+- /* determine if fog is needed */
++ /* determine if fog is needed, and if so, which fog mode */
+ swrast->_FogEnabled = GL_FALSE;
+- if (ctx->Fog.Enabled) {
+- swrast->_FogEnabled = GL_TRUE;
+- }
+- else if (ctx->FragmentProgram._Enabled &&
+- ctx->FragmentProgram.Current->Base.Target == GL_FRAGMENT_PROGRAM_ARB) {
+- const struct fragment_program *p;
+- p = (struct fragment_program *) ctx->FragmentProgram.Current;
+- if (p->FogOption != GL_NONE) {
+- swrast->_FogEnabled = GL_TRUE;
++ if (ctx->FragmentProgram._Enabled) {
++ if (ctx->FragmentProgram.Current->Base.Target==GL_FRAGMENT_PROGRAM_ARB) {
++ const struct fragment_program *p
++ = (struct fragment_program *) ctx->FragmentProgram.Current;
++ if (p->FogOption != GL_NONE) {
++ swrast->_FogEnabled = GL_TRUE;
++ swrast->_FogMode = p->FogOption;
++ }
+ }
+ }
++ else if (ctx->Fog.Enabled) {
++ swrast->_FogEnabled = GL_TRUE;
++ swrast->_FogMode = ctx->Fog.Mode;
++ }
+ }
+
+
+@@ -403,6 +406,7 @@
+ static void
+ _swrast_sleep( GLcontext *ctx, GLuint new_state )
+ {
++ (void) ctx; (void) new_state;
+ }
+
+
+@@ -479,7 +483,7 @@
+ if (swrast->NewState & _SWRAST_NEW_TEXTURE_ENV_MODE)
+ _swrast_update_texture_env( ctx );
+
+- if (swrast->NewState & _NEW_FOG)
++ if (swrast->NewState & (_NEW_FOG | _NEW_PROGRAM))
+ _swrast_update_fog_state( ctx );
+
+ if (swrast->NewState & _NEW_PROGRAM)
+Index: xc/extras/Mesa/src/mesa/swrast/s_context.h
+diff -u xc/extras/Mesa/src/mesa/swrast/s_context.h:1.1.1.1 xc/extras/Mesa/src/mesa/swrast/s_context.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/swrast/s_context.h:1.1.1.1 Wed Jun 16 09:19:26 2004
++++ xc/extras/Mesa/src/mesa/swrast/s_context.h Wed Dec 15 01:51:04 2004
+@@ -29,6 +29,17 @@
+ * \author Keith Whitwell <keith@tungstengraphics.com>
+ */
+
++/**
++ * \mainpage swrast module
++ *
++ * This module, software rasterization, contains the software fallback
++ * routines for drawing points, lines, triangles, bitmaps and images.
++ * All rendering boils down to writing spans (arrays) of pixels with
++ * particular colors. The span-writing routines must be implemented
++ * by the device driver.
++ */
++
++
+ #ifndef S_CONTEXT_H
+ #define S_CONTEXT_H
+
+@@ -275,6 +286,7 @@
+ GLboolean _AnyTextureCombine;
+ GLchan _FogColor[3];
+ GLboolean _FogEnabled;
++ GLenum _FogMode; /* either GL_FOG_MODE or fragment program's fog mode */
+
+ /* Accum buffer temporaries.
+ */
+Index: xc/extras/Mesa/src/mesa/swrast/s_copypix.c
+diff -u xc/extras/Mesa/src/mesa/swrast/s_copypix.c:1.1.1.1 xc/extras/Mesa/src/mesa/swrast/s_copypix.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/swrast/s_copypix.c:1.1.1.1 Wed Jun 16 09:19:26 2004
++++ xc/extras/Mesa/src/mesa/swrast/s_copypix.c Wed Dec 15 01:51:04 2004
+@@ -1,6 +1,6 @@
+ /*
+ * Mesa 3-D graphics library
+- * Version: 6.1
++ * Version: 6.2
+ *
+ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+@@ -175,8 +175,6 @@
+ return;
+ }
+
+- dest = tmpImage;
+-
+ if (changeBuffer) {
+ /* choose the read buffer */
+ _swrast_use_read_buffer(ctx);
+@@ -191,6 +189,7 @@
+ srcy + row, rgba);
+ chan_span_to_float(width, (CONST GLchan (*)[4]) rgba,
+ (GLfloat (*)[4]) dest);
++ dest += 4 * width;
+ }
+
+ if (changeBuffer) {
+Index: xc/extras/Mesa/src/mesa/swrast/s_depth.c
+diff -u xc/extras/Mesa/src/mesa/swrast/s_depth.c:1.1.1.1 xc/extras/Mesa/src/mesa/swrast/s_depth.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/swrast/s_depth.c:1.1.1.1 Wed Jun 16 09:19:26 2004
++++ xc/extras/Mesa/src/mesa/swrast/s_depth.c Wed Dec 15 01:51:04 2004
+@@ -1665,13 +1665,33 @@
+ void
+ _swrast_clear_depth_buffer( GLcontext *ctx )
+ {
++ SWcontext *swrast = SWRAST_CONTEXT(ctx);
++
+ if (ctx->Visual.depthBits == 0
+- || !ctx->DrawBuffer->DepthBuffer
+ || !ctx->Depth.Mask) {
+ /* no depth buffer, or writing to it is disabled */
+ return;
+ }
+
++ if (swrast->Driver.WriteMonoDepthSpan) {
++ const GLdepth clearValue = (GLdepth)(ctx->Depth.Clear * ctx->DepthMax);
++ const GLint x = ctx->DrawBuffer->_Xmin;
++ const GLint y = ctx->DrawBuffer->_Ymin;
++ const GLint height = ctx->DrawBuffer->_Ymax - ctx->DrawBuffer->_Ymin;
++ const GLint width = ctx->DrawBuffer->_Xmax - ctx->DrawBuffer->_Xmin;
++ GLint i;
++
++ for (i = 0; i < height; i++) {
++ (*swrast->Driver.WriteMonoDepthSpan)( ctx, width, x, y + i,
++ clearValue, NULL );
++ }
++
++ return;
++ }
++
++ if (!ctx->DrawBuffer->DepthBuffer)
++ return;
++
+ /* The loops in this function have been written so the IRIX 5.3
+ * C compiler can unroll them. Hopefully other compilers can too!
+ */
+Index: xc/extras/Mesa/src/mesa/swrast/s_drawpix.c
+diff -u xc/extras/Mesa/src/mesa/swrast/s_drawpix.c:1.1.1.2 xc/extras/Mesa/src/mesa/swrast/s_drawpix.c:1.1.1.2.2.1
+--- xc/extras/Mesa/src/mesa/swrast/s_drawpix.c:1.1.1.2 Thu Aug 12 23:05:03 2004
++++ xc/extras/Mesa/src/mesa/swrast/s_drawpix.c Wed Dec 15 01:51:04 2004
+@@ -1,6 +1,6 @@
+ /*
+ * Mesa 3-D graphics library
+- * Version: 6.1
++ * Version: 6.2
+ *
+ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+@@ -521,12 +521,12 @@
+ const GLint spanEnd = (width - skipPixels > MAX_WIDTH)
+ ? MAX_WIDTH : (width - skipPixels);
+ ASSERT(spanEnd <= MAX_WIDTH);
+- for (row = 0; row < height; row++, span.y++) {
++ for (row = 0; row < height; row++, spanY++) {
+ const GLvoid *source = _mesa_image_address(unpack, pixels,
+ width, height,
+ GL_COLOR_INDEX, type,
+ 0, row, skipPixels);
+- _mesa_unpack_index_span(ctx, span.end, GL_UNSIGNED_INT,
++ _mesa_unpack_index_span(ctx, spanEnd, GL_UNSIGNED_INT,
+ span.array->index, type, source, unpack,
+ ctx->_ImageTransferState);
+
+@@ -659,17 +659,17 @@
+ && ctx->Visual.rgbMode
+ && width <= MAX_WIDTH) {
+ /* Special case: directly write 16-bit depth values */
+- GLint row;
+- span.x = x;
+- span.y = y;
+- span.end = width;
+- for (row = 0; row < height; row++, span.y++) {
++ GLint row, spanY = y;
++ for (row = 0; row < height; row++, spanY++) {
+ const GLushort *zSrc = (const GLushort *)
+ _mesa_image_address(unpack, pixels, width, height,
+ GL_DEPTH_COMPONENT, type, 0, row, 0);
+ GLint i;
+ for (i = 0; i < width; i++)
+ span.array->z[i] = zSrc[i];
++ span.x = x;
++ span.y = spanY;
++ span.end = width;
+ _swrast_write_rgba_span(ctx, &span);
+ }
+ }
+@@ -681,11 +681,8 @@
+ && width <= MAX_WIDTH) {
+ /* Special case: shift 32-bit values down to ctx->Visual.depthBits */
+ const GLint shift = 32 - ctx->Visual.depthBits;
+- GLint row;
+- span.x = x;
+- span.y = y;
+- span.end = width;
+- for (row = 0; row < height; row++, span.y++) {
++ GLint row, spanY = y;
++ for (row = 0; row < height; row++, spanY++) {
+ const GLuint *zSrc = (const GLuint *)
+ _mesa_image_address(unpack, pixels, width, height,
+ GL_DEPTH_COMPONENT, type, 0, row, 0);
+@@ -697,6 +694,9 @@
+ for (col = 0; col < width; col++)
+ span.array->z[col] = zSrc[col] >> shift;
+ }
++ span.x = x;
++ span.y = spanY;
++ span.end = width;
+ _swrast_write_rgba_span(ctx, &span);
+ }
+ }
+Index: xc/extras/Mesa/src/mesa/swrast/s_fog.c
+diff -u xc/extras/Mesa/src/mesa/swrast/s_fog.c:1.1.1.1 xc/extras/Mesa/src/mesa/swrast/s_fog.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/swrast/s_fog.c:1.1.1.1 Wed Jun 16 09:19:26 2004
++++ xc/extras/Mesa/src/mesa/swrast/s_fog.c Wed Dec 15 01:51:04 2004
+@@ -1,9 +1,8 @@
+-
+ /*
+ * Mesa 3-D graphics library
+- * Version: 4.1
++ * Version: 6.3
+ *
+- * Copyright (C) 1999-2002 Brian Paul All Rights Reserved.
++ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+@@ -34,8 +33,6 @@
+ #include "s_span.h"
+
+
+-
+-
+ /**
+ * Used to convert current raster distance to a fog factor in [0,1].
+ */
+@@ -99,7 +96,7 @@
+ /* The span's fog values are fog coordinates, now compute blend factors
+ * and blend the fragment colors with the fog color.
+ */
+- switch (ctx->Fog.Mode) {
++ switch (swrast->_FogMode) {
+ case GL_LINEAR:
+ {
+ const GLfloat fogEnd = ctx->Fog.End;
+Index: xc/extras/Mesa/src/mesa/swrast/s_fragprog_to_c.c
+diff -u xc/extras/Mesa/src/mesa/swrast/s_fragprog_to_c.c:1.1.1.1 xc/extras/Mesa/src/mesa/swrast/s_fragprog_to_c.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/swrast/s_fragprog_to_c.c:1.1.1.1 Wed Jun 16 09:19:30 2004
++++ xc/extras/Mesa/src/mesa/swrast/s_fragprog_to_c.c Wed Dec 15 01:51:04 2004
+@@ -297,7 +297,7 @@
+ case UREG_TYPE_LOCAL_CONST: emit(p, "local_const"); break;
+ case UREG_TYPE_ENV_CONST: emit(p, "env_const"); break;
+ case UREG_TYPE_STATE_CONST: emit(p, "state_param"); break;
+- case UREG_TYPE_PARAM: emit(p, "param"); break;
++ case UREG_TYPE_PARAM: emit(p, "local_param"); break;
+ };
+
+ emit(p, "[%d]", GET_UREG_NR(arg));
+Index: xc/extras/Mesa/src/mesa/swrast/s_lines.c
+diff -u xc/extras/Mesa/src/mesa/swrast/s_lines.c:1.1.1.1 xc/extras/Mesa/src/mesa/swrast/s_lines.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/swrast/s_lines.c:1.1.1.1 Wed Jun 16 09:19:27 2004
++++ xc/extras/Mesa/src/mesa/swrast/s_lines.c Wed Dec 15 01:51:04 2004
+@@ -258,7 +258,7 @@
+ else if (swrast->Line == multitextured_line)
+ _mesa_printf("multitextured_line\n");
+ else
+- _mesa_printf("Driver func %p\n", (void *) swrast->Line);
++ _mesa_printf("Driver func %p\n", (void (*)()) swrast->Line);
+ }
+ #endif
+
+Index: xc/extras/Mesa/src/mesa/swrast/s_linetemp.h
+diff -u xc/extras/Mesa/src/mesa/swrast/s_linetemp.h:1.1.1.1 xc/extras/Mesa/src/mesa/swrast/s_linetemp.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/swrast/s_linetemp.h:1.1.1.1 Wed Jun 16 09:19:27 2004
++++ xc/extras/Mesa/src/mesa/swrast/s_linetemp.h Wed Dec 15 01:51:04 2004
+@@ -425,6 +425,8 @@
+ RENDER_SPAN( span );
+ #endif
+
++ (void)span;
++
+ }
+
+
+Index: xc/extras/Mesa/src/mesa/swrast/s_pointtemp.h
+diff -u xc/extras/Mesa/src/mesa/swrast/s_pointtemp.h:1.1.1.1 xc/extras/Mesa/src/mesa/swrast/s_pointtemp.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/swrast/s_pointtemp.h:1.1.1.1 Wed Jun 16 09:19:28 2004
++++ xc/extras/Mesa/src/mesa/swrast/s_pointtemp.h Wed Dec 15 01:51:04 2004
+@@ -1,6 +1,6 @@
+ /*
+ * Mesa 3-D graphics library
+- * Version: 6.1
++ * Version: 6.2
+ *
+ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+@@ -220,6 +220,21 @@
+ count = span->end;
+ (void) radius;
+ for (y = ymin; y <= ymax; y++) {
++ /* check if we need to flush */
++ if (count + (xmax-xmin+1) >= MAX_WIDTH) {
++ span->end = count;
++#if FLAGS & (TEXTURE | SPRITE)
++ if (ctx->Texture._EnabledUnits)
++ _swrast_write_texture_span(ctx, span);
++ else
++ _swrast_write_rgba_span(ctx, span);
++#elif FLAGS & RGBA
++ _swrast_write_rgba_span(ctx, span);
++#else
++ _swrast_write_index_span(ctx, span);
++#endif
++ count = span->end = 0;
++ }
+ for (x = xmin; x <= xmax; x++) {
+ #if FLAGS & (SPRITE | TEXTURE)
+ GLuint u;
+@@ -292,7 +307,11 @@
+ if (ctx->Texture.Unit[u]._ReallyEnabled) {
+ if (ctx->Point.CoordReplace[u]) {
+ GLfloat s = 0.5F + (x + 0.5F - vert->win[0]) / size;
+- GLfloat t = 0.5F - (y + 0.5F - vert->win[1]) / size;
++ GLfloat t;
++ if (ctx->Point.SpriteOrigin == GL_LOWER_LEFT)
++ t = 0.5F + (y + 0.5F - vert->win[1]) / size;
++ else /* GL_UPPER_LEFT */
++ t = 0.5F - (y + 0.5F - vert->win[1]) / size;
+ span->array->texcoords[u][count][0] = s;
+ span->array->texcoords[u][count][1] = t;
+ span->array->texcoords[u][count][3] = 1.0F;
+Index: xc/extras/Mesa/src/mesa/swrast/s_readpix.c
+diff -u xc/extras/Mesa/src/mesa/swrast/s_readpix.c:1.1.1.1 xc/extras/Mesa/src/mesa/swrast/s_readpix.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/swrast/s_readpix.c:1.1.1.1 Wed Jun 16 09:19:28 2004
++++ xc/extras/Mesa/src/mesa/swrast/s_readpix.c Wed Dec 15 01:51:04 2004
+@@ -1,6 +1,6 @@
+ /*
+ * Mesa 3-D graphics library
+- * Version: 6.1
++ * Version: 6.2.1
+ *
+ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+@@ -86,7 +86,7 @@
+ GL_COLOR_INDEX, type, 0, i, 0);
+
+ _mesa_pack_index_span(ctx, readWidth, type, dest, index,
+- &ctx->Pack, ctx->_ImageTransferState);
++ packing, ctx->_ImageTransferState);
+ }
+
+ _swrast_use_draw_buffer(ctx);
+@@ -163,7 +163,7 @@
+ GL_DEPTH_COMPONENT, type, 0, j, 0);
+
+ _mesa_pack_depth_span(ctx, readWidth, (GLdepth *) dest, type,
+- depth, &ctx->Pack);
++ depth, packing);
+ }
+ }
+ }
+@@ -209,7 +209,7 @@
+ dest = _mesa_image_address(packing, pixels, width, height,
+ GL_STENCIL_INDEX, type, 0, j, 0);
+
+- _mesa_pack_stencil_span(ctx, readWidth, type, dest, stencil, &ctx->Pack);
++ _mesa_pack_stencil_span(ctx, readWidth, type, dest, stencil, packing);
+ }
+ }
+
+@@ -498,16 +498,15 @@
+ _swrast_ReadPixels( GLcontext *ctx,
+ GLint x, GLint y, GLsizei width, GLsizei height,
+ GLenum format, GLenum type,
+- const struct gl_pixelstore_attrib *pack,
++ const struct gl_pixelstore_attrib *packing,
+ GLvoid *pixels )
+ {
+ SWcontext *swrast = SWRAST_CONTEXT(ctx);
+- (void) pack;
+
+ if (swrast->NewState)
+ _swrast_validate_derived( ctx );
+
+- pixels = _swrast_validate_pbo_access(pack, width, height, 1,
++ pixels = _swrast_validate_pbo_access(packing, width, height, 1,
+ format, type, (GLvoid *) pixels);
+
+ if (!pixels) {
+@@ -519,13 +518,13 @@
+
+ switch (format) {
+ case GL_COLOR_INDEX:
+- read_index_pixels(ctx, x, y, width, height, type, pixels, &ctx->Pack);
++ read_index_pixels(ctx, x, y, width, height, type, pixels, packing);
+ break;
+ case GL_STENCIL_INDEX:
+- read_stencil_pixels(ctx, x,y, width,height, type, pixels, &ctx->Pack);
++ read_stencil_pixels(ctx, x,y, width,height, type, pixels, packing);
+ break;
+ case GL_DEPTH_COMPONENT:
+- read_depth_pixels(ctx, x, y, width, height, type, pixels, &ctx->Pack);
++ read_depth_pixels(ctx, x, y, width, height, type, pixels, packing);
+ break;
+ case GL_RED:
+ case GL_GREEN:
+@@ -539,7 +538,7 @@
+ case GL_BGRA:
+ case GL_ABGR_EXT:
+ read_rgba_pixels(ctx, x, y, width, height,
+- format, type, pixels, &ctx->Pack);
++ format, type, pixels, packing);
+ break;
+ default:
+ _mesa_error( ctx, GL_INVALID_ENUM, "glReadPixels(format)" );
+Index: xc/extras/Mesa/src/mesa/swrast/s_span.c
+diff -u xc/extras/Mesa/src/mesa/swrast/s_span.c:1.1.1.2 xc/extras/Mesa/src/mesa/swrast/s_span.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/swrast/s_span.c:1.1.1.2 Thu Jul 22 06:53:10 2004
++++ xc/extras/Mesa/src/mesa/swrast/s_span.c Wed Dec 15 01:51:04 2004
+@@ -1,6 +1,6 @@
+ /*
+ * Mesa 3-D graphics library
+- * Version: 6.1
++ * Version: 6.3
+ *
+ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ *
+@@ -151,6 +151,7 @@
+ const GLuint n = span->end;
+ GLchan (*rgba)[4] = span->array->rgba;
+ GLuint i;
++ (void) ctx;
+
+ ASSERT((span->interpMask & SPAN_RGBA) &&
+ !(span->arrayMask & SPAN_RGBA));
+@@ -211,6 +212,7 @@
+ const GLuint n = span->end;
+ GLuint *indexes = span->array->index;
+ GLuint i;
++ (void) ctx;
+ ASSERT((span->interpMask & SPAN_INDEX) &&
+ !(span->arrayMask & SPAN_INDEX));
+
+@@ -236,6 +238,7 @@
+ static void
+ interpolate_specular(GLcontext *ctx, struct sw_span *span)
+ {
++ (void) ctx;
+ if (span->interpMask & SPAN_FLAT) {
+ /* constant color */
+ const GLchan r = FixedToChan(span->specRed);
+@@ -1470,15 +1473,17 @@
+
+ ASSERT(span->arrayMask & SPAN_RGBA);
+
+- /* Add base and specular colors */
+- if (ctx->Fog.ColorSumEnabled ||
+- (ctx->Light.Enabled &&
+- ctx->Light.Model.ColorControl == GL_SEPARATE_SPECULAR_COLOR)) {
+- if (span->interpMask & SPAN_SPEC) {
+- interpolate_specular(ctx, span);
++ if (!ctx->FragmentProgram._Enabled) {
++ /* Add base and specular colors */
++ if (ctx->Fog.ColorSumEnabled ||
++ (ctx->Light.Enabled &&
++ ctx->Light.Model.ColorControl == GL_SEPARATE_SPECULAR_COLOR)) {
++ if (span->interpMask & SPAN_SPEC) {
++ interpolate_specular(ctx, span);
++ }
++ ASSERT(span->arrayMask & SPAN_SPEC);
++ add_colors( span->end, span->array->rgba, span->array->spec );
+ }
+- ASSERT(span->arrayMask & SPAN_SPEC);
+- add_colors( span->end, span->array->rgba, span->array->spec );
+ }
+
+ /* Fog */
+Index: xc/extras/Mesa/src/mesa/swrast/s_spantemp.h
+diff -u xc/extras/Mesa/src/mesa/swrast/s_spantemp.h:1.1.1.1 xc/extras/Mesa/src/mesa/swrast/s_spantemp.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/swrast/s_spantemp.h:1.1.1.1 Wed Jun 16 09:19:28 2004
++++ xc/extras/Mesa/src/mesa/swrast/s_spantemp.h Wed Dec 15 01:51:04 2004
+@@ -47,6 +47,7 @@
+ * FETCH_CI_PIXEL(CI, P) to fetch a pixel index from pixel P
+ */
+
++#include "macros.h"
+
+ #ifdef STORE_RGBA_PIXEL
+
+Index: xc/extras/Mesa/src/mesa/swrast/s_tcc.c
+diff -u xc/extras/Mesa/src/mesa/swrast/s_tcc.c:1.1.1.1 xc/extras/Mesa/src/mesa/swrast/s_tcc.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/swrast/s_tcc.c:1.1.1.1 Wed Jun 16 09:19:30 2004
++++ xc/extras/Mesa/src/mesa/swrast/s_tcc.c Wed Dec 15 01:51:04 2004
+@@ -179,6 +179,10 @@
+ struct fp_machine *machine, const struct sw_span *span,
+ GLuint column )
+ {
++ (void) ctx;
++ (void) program; (void) maxInst;
++ (void) machine; (void) span;
++ (void) column;
+ return 0;
+ }
+
+Index: xc/extras/Mesa/src/mesa/swrast/s_texture.c
+diff -u xc/extras/Mesa/src/mesa/swrast/s_texture.c:1.1.1.1 xc/extras/Mesa/src/mesa/swrast/s_texture.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/swrast/s_texture.c:1.1.1.1 Wed Jun 16 09:19:29 2004
++++ xc/extras/Mesa/src/mesa/swrast/s_texture.c Wed Dec 15 01:51:04 2004
+@@ -456,6 +456,7 @@
+ {
+ const GLint width = img->Width2; /* without border, power of two */
+ GLint i;
++ (void) ctx;
+
+ COMPUTE_NEAREST_TEXEL_LOCATION(tObj->WrapS, texcoord[0], width, i);
+
+@@ -486,6 +487,7 @@
+ GLint i0, i1;
+ GLfloat u;
+ GLuint useBorderColor;
++ (void) ctx;
+
+ COMPUTE_LINEAR_TEXEL_LOCATIONS(tObj->WrapS, texcoord[0], u, width, i0, i1);
+
+@@ -657,6 +659,7 @@
+ {
+ GLuint i;
+ struct gl_texture_image *image = tObj->Image[0][tObj->BaseLevel];
++ (void) texUnit;
+ (void) lambda;
+ for (i=0;i<n;i++) {
+ sample_1d_nearest(ctx, tObj, image, texcoords[i], rgba[i]);
+@@ -673,6 +676,7 @@
+ {
+ GLuint i;
+ struct gl_texture_image *image = tObj->Image[0][tObj->BaseLevel];
++ (void) texUnit;
+ (void) lambda;
+ for (i=0;i<n;i++) {
+ sample_1d_linear(ctx, tObj, image, texcoords[i], rgba[i]);
+@@ -774,6 +778,7 @@
+ const GLint width = img->Width2; /* without border, power of two */
+ const GLint height = img->Height2; /* without border, power of two */
+ GLint i, j;
++ (void) ctx;
+
+ COMPUTE_NEAREST_TEXEL_LOCATION(tObj->WrapS, texcoord[0], width, i);
+ COMPUTE_NEAREST_TEXEL_LOCATION(tObj->WrapT, texcoord[1], height, j);
+@@ -809,6 +814,7 @@
+ GLint i0, j0, i1, j1;
+ GLuint useBorderColor;
+ GLfloat u, v;
++ (void) ctx;
+
+ COMPUTE_LINEAR_TEXEL_LOCATIONS(tObj->WrapS, texcoord[0], u, width, i0, i1);
+ COMPUTE_LINEAR_TEXEL_LOCATIONS(tObj->WrapT, texcoord[1], v, height, j0, j1);
+@@ -917,7 +923,9 @@
+ const GLint height = img->Height2;
+ GLint i0, j0, i1, j1;
+ GLfloat u, v;
+-
++ (void) ctx;
++ (void) tObj;
++
+ ASSERT(tObj->WrapS == GL_REPEAT);
+ ASSERT(tObj->WrapT == GL_REPEAT);
+ ASSERT(img->Border == 0);
+@@ -1117,6 +1125,7 @@
+ {
+ GLuint i;
+ struct gl_texture_image *image = tObj->Image[0][tObj->BaseLevel];
++ (void) texUnit;
+ (void) lambda;
+ for (i=0;i<n;i++) {
+ sample_2d_nearest(ctx, tObj, image, texcoords[i], rgba[i]);
+@@ -1133,6 +1142,7 @@
+ {
+ GLuint i;
+ struct gl_texture_image *image = tObj->Image[0][tObj->BaseLevel];
++ (void) texUnit;
+ (void) lambda;
+ for (i=0;i<n;i++) {
+ sample_2d_linear(ctx, tObj, image, texcoords[i], rgba[i]);
+@@ -1161,6 +1171,8 @@
+ const GLint rowMask = img->Height - 1;
+ const GLint shift = img->WidthLog2;
+ GLuint k;
++ (void) ctx;
++ (void) texUnit;
+ (void) lambda;
+ ASSERT(tObj->WrapS==GL_REPEAT);
+ ASSERT(tObj->WrapT==GL_REPEAT);
+@@ -1201,6 +1213,8 @@
+ const GLint rowMask = img->Height - 1;
+ const GLint shift = img->WidthLog2;
+ GLuint i;
++ (void) ctx;
++ (void) texUnit;
+ (void) lambda;
+ ASSERT(tObj->WrapS==GL_REPEAT);
+ ASSERT(tObj->WrapT==GL_REPEAT);
+@@ -1366,6 +1380,7 @@
+ const GLint height = img->Height2; /* without border, power of two */
+ const GLint depth = img->Depth2; /* without border, power of two */
+ GLint i, j, k;
++ (void) ctx;
+
+ COMPUTE_NEAREST_TEXEL_LOCATION(tObj->WrapS, texcoord[0], width, i);
+ COMPUTE_NEAREST_TEXEL_LOCATION(tObj->WrapT, texcoord[1], height, j);
+@@ -1400,6 +1415,7 @@
+ GLint i0, j0, k0, i1, j1, k1;
+ GLuint useBorderColor;
+ GLfloat u, v, w;
++ (void) ctx;
+
+ COMPUTE_LINEAR_TEXEL_LOCATIONS(tObj->WrapS, texcoord[0], u, width, i0, i1);
+ COMPUTE_LINEAR_TEXEL_LOCATIONS(tObj->WrapT, texcoord[1], v, height, j0, j1);
+@@ -1651,6 +1667,7 @@
+ {
+ GLuint i;
+ struct gl_texture_image *image = tObj->Image[0][tObj->BaseLevel];
++ (void) texUnit;
+ (void) lambda;
+ for (i=0;i<n;i++) {
+ sample_3d_nearest(ctx, tObj, image, texcoords[i], rgba[i]);
+@@ -1667,6 +1684,7 @@
+ {
+ GLuint i;
+ struct gl_texture_image *image = tObj->Image[0][tObj->BaseLevel];
++ (void) texUnit;
+ (void) lambda;
+ for (i=0;i<n;i++) {
+ sample_3d_linear(ctx, tObj, image, texcoords[i], rgba[i]);
+@@ -1836,6 +1854,7 @@
+ GLchan rgba[][4])
+ {
+ GLuint i;
++ (void) texUnit;
+ (void) lambda;
+ for (i = 0; i < n; i++) {
+ const struct gl_texture_image **images;
+@@ -1854,6 +1873,7 @@
+ const GLfloat lambda[], GLchan rgba[][4])
+ {
+ GLuint i;
++ (void) texUnit;
+ (void) lambda;
+ for (i = 0; i < n; i++) {
+ const struct gl_texture_image **images;
+@@ -1872,6 +1892,7 @@
+ const GLfloat lambda[], GLchan rgba[][4])
+ {
+ GLuint i;
++ (void) texUnit;
+ ASSERT(lambda != NULL);
+ for (i = 0; i < n; i++) {
+ const struct gl_texture_image **images;
+@@ -1891,6 +1912,7 @@
+ const GLfloat lambda[], GLchan rgba[][4])
+ {
+ GLuint i;
++ (void) texUnit;
+ ASSERT(lambda != NULL);
+ for (i = 0; i < n; i++) {
+ const struct gl_texture_image **images;
+@@ -1910,6 +1932,7 @@
+ const GLfloat lambda[], GLchan rgba[][4])
+ {
+ GLuint i;
++ (void) texUnit;
+ ASSERT(lambda != NULL);
+ for (i = 0; i < n; i++) {
+ const struct gl_texture_image **images;
+@@ -1942,6 +1965,7 @@
+ const GLfloat lambda[], GLchan rgba[][4])
+ {
+ GLuint i;
++ (void) texUnit;
+ ASSERT(lambda != NULL);
+ for (i = 0; i < n; i++) {
+ const struct gl_texture_image **images;
+@@ -2053,6 +2077,7 @@
+ const GLint height_minus_1 = img->Height - 1;
+ GLuint i;
+
++ (void) ctx;
+ (void) texUnit;
+ (void) lambda;
+
+@@ -2108,6 +2133,7 @@
+ const GLint height_minus_1 = img->Height - 1;
+ GLuint i;
+
++ (void) ctx;
+ (void) texUnit;
+ (void) lambda;
+
+@@ -2129,56 +2155,47 @@
+
+ /* NOTE: we DO NOT use [0, 1] texture coordinates! */
+ if (tObj->WrapS == GL_CLAMP) {
+- /* clamping to width-1 looks wrong, but it's really correct */
+- fcol = CLAMP(texcoords[i][0], 0.0F, width_minus_1);
++ /* Not exactly what the spec says, but it matches NVIDIA output */
++ fcol = CLAMP(texcoords[i][0] - 0.5F, 0.0, width_minus_1);
+ i0 = IFLOOR(fcol);
+ i1 = i0 + 1;
+ }
+ else if (tObj->WrapS == GL_CLAMP_TO_EDGE) {
+ fcol = CLAMP(texcoords[i][0], 0.5F, width - 0.5F);
++ fcol -= 0.5F;
+ i0 = IFLOOR(fcol);
+ i1 = i0 + 1;
+ if (i1 > width_minus_1)
+ i1 = width_minus_1;
+ }
+- else { /* GL_CLAMP_TO_BORDER */
+-#if 0
+- /* literal reading of GL_NV_texture_rectangle spec */
++ else {
++ ASSERT(tObj->WrapS == GL_CLAMP_TO_BORDER);
+ fcol = CLAMP(texcoords[i][0], -0.5F, width + 0.5F);
++ fcol -= 0.5F;
+ i0 = IFLOOR(fcol);
+ i1 = i0 + 1;
+-#else
+- /* Note: this produces results that matches NVIDIA, but it's not
+- * exactly what the GL_NV_texture_rectangle specifies!
+- */
+- fcol = texcoords[i][0];
+- i0 = IFLOOR(fcol);
+- i1 = i0 + 1;
+-#endif
+-
+ }
++
+ if (tObj->WrapT == GL_CLAMP) {
+- frow = CLAMP(texcoords[i][1], 0.0F, height_minus_1);
++ /* Not exactly what the spec says, but it matches NVIDIA output */
++ frow = CLAMP(texcoords[i][1] - 0.5F, 0.0, width_minus_1);
+ j0 = IFLOOR(frow);
+ j1 = j0 + 1;
+ }
+ else if (tObj->WrapT == GL_CLAMP_TO_EDGE) {
+ frow = CLAMP(texcoords[i][1], 0.5F, height - 0.5F);
++ frow -= 0.5F;
+ j0 = IFLOOR(frow);
+ j1 = j0 + 1;
+ if (j1 > height_minus_1)
+ j1 = height_minus_1;
+ }
+- else { /* GL_CLAMP_TO_BORDER */
+-#if 0
++ else {
++ ASSERT(tObj->WrapT == GL_CLAMP_TO_BORDER);
+ frow = CLAMP(texcoords[i][1], -0.5F, height + 0.5F);
++ frow -= 0.5F;
+ j0 = IFLOOR(frow);
+ j1 = j0 + 1;
+-#else
+- frow = texcoords[i][1];
+- j0 = IFLOOR(frow);
+- j1 = j0 + 1;
+-#endif
+ }
+
+ /* compute integer rows/columns */
+@@ -2284,6 +2301,7 @@
+ GLenum function;
+ GLchan result;
+
++ (void) lambda;
+ (void) unit;
+
+ ASSERT(tObj->Image[0][tObj->BaseLevel]->Format == GL_DEPTH_COMPONENT);
+@@ -2709,7 +2727,6 @@
+ ASSERT(t->MinFilter == GL_NEAREST);
+ return &sample_nearest_1d;
+ }
+- break;
+ case GL_TEXTURE_2D:
+ if (format == GL_DEPTH_COMPONENT) {
+ return &sample_depth_texture;
+@@ -2741,7 +2758,6 @@
+ return &sample_nearest_2d;
+ }
+ }
+- break;
+ case GL_TEXTURE_3D:
+ if (needLambda) {
+ return &sample_lambda_3d;
+@@ -2753,7 +2769,6 @@
+ ASSERT(t->MinFilter == GL_NEAREST);
+ return &sample_nearest_3d;
+ }
+- break;
+ case GL_TEXTURE_CUBE_MAP:
+ if (needLambda) {
+ return &sample_lambda_cube;
+@@ -2765,7 +2780,6 @@
+ ASSERT(t->MinFilter == GL_NEAREST);
+ return &sample_nearest_cube;
+ }
+- break;
+ case GL_TEXTURE_RECTANGLE_NV:
+ if (needLambda) {
+ return &sample_lambda_rect;
+@@ -2777,7 +2791,6 @@
+ ASSERT(t->MinFilter == GL_NEAREST);
+ return &sample_nearest_rect;
+ }
+- break;
+ default:
+ _mesa_problem(ctx,
+ "invalid target in _swrast_choose_texture_sample_func");
+@@ -3494,6 +3507,7 @@
+ GLuint i;
+ GLint Rc, Gc, Bc, Ac;
+ GLenum format;
++ (void) primary_rgba;
+
+ ASSERT(texUnit);
+ ASSERT(texUnit->_Current);
+Index: xc/extras/Mesa/src/mesa/swrast/s_triangle.c
+diff -u xc/extras/Mesa/src/mesa/swrast/s_triangle.c:1.1.1.2 xc/extras/Mesa/src/mesa/swrast/s_triangle.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/swrast/s_triangle.c:1.1.1.2 Thu Jul 22 06:53:11 2004
++++ xc/extras/Mesa/src/mesa/swrast/s_triangle.c Wed Dec 15 01:51:04 2004
+@@ -927,7 +927,7 @@
+ const GLuint *zRow = (const GLuint *) \
+ _swrast_zbuffer_address(ctx, span.x, span.y); \
+ for (i = 0; i < span.end; i++) { \
+- if (span.z < zRow[i]) { \
++ if ((GLuint)span.z < zRow[i]) { \
+ ctx->OcclusionResult = GL_TRUE; \
+ ctx->Occlusion.PassedCounter++; \
+ } \
+Index: xc/extras/Mesa/src/mesa/swrast/swrast.h
+diff -u xc/extras/Mesa/src/mesa/swrast/swrast.h:1.1.1.1 xc/extras/Mesa/src/mesa/swrast/swrast.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/swrast/swrast.h:1.1.1.1 Wed Jun 16 09:19:30 2004
++++ xc/extras/Mesa/src/mesa/swrast/swrast.h Wed Dec 15 01:51:04 2004
+@@ -403,6 +403,13 @@
+ * depth[i] value if mask[i] is nonzero.
+ */
+
++ void (*WriteMonoDepthSpan)( GLcontext *ctx, GLuint n, GLint x, GLint y,
++ const GLdepth depth, const GLubyte mask[] );
++ /* Write a horizontal run of depth values.
++ * If mask is NULL, draw all pixels.
++ * If mask is not null, only draw pixel [i] when mask [i] is true.
++ */
++
+ void (*ReadDepthSpan)( GLcontext *ctx, GLuint n, GLint x, GLint y,
+ GLdepth depth[] );
+ /* Read a horizontal span of values from the depth buffer.
+Index: xc/extras/Mesa/src/mesa/tnl/descrip.mms
+diff -u xc/extras/Mesa/src/mesa/tnl/descrip.mms:1.1.1.2 xc/extras/Mesa/src/mesa/tnl/descrip.mms:1.1.1.2.2.1
+--- xc/extras/Mesa/src/mesa/tnl/descrip.mms:1.1.1.2 Sat Aug 28 04:28:15 2004
++++ xc/extras/Mesa/src/mesa/tnl/descrip.mms Wed Dec 15 01:51:04 2004
+@@ -2,12 +2,12 @@
+ # contributed by Jouk Jansen joukj@hrem.stm.tudelft.nl
+ # Last revision : 18 August 2004
+
+-first
++.first
+ define gl [---.include.gl]
+ define math [-.math]
+ define array_cache [-.array_cache]
+
+-include [---]mms-config.
++.include [---]mms-config.
+
+ ##### MACROS #####
+
+Index: xc/extras/Mesa/src/mesa/tnl/t_array_api.c
+diff -u xc/extras/Mesa/src/mesa/tnl/t_array_api.c:1.1.1.1 xc/extras/Mesa/src/mesa/tnl/t_array_api.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/tnl/t_array_api.c:1.1.1.1 Wed Jun 16 09:19:31 2004
++++ xc/extras/Mesa/src/mesa/tnl/t_array_api.c Wed Dec 15 01:51:04 2004
+@@ -438,4 +438,5 @@
+ */
+ void _tnl_array_destroy( GLcontext *ctx )
+ {
++ (void) ctx;
+ }
+Index: xc/extras/Mesa/src/mesa/tnl/t_array_import.c
+diff -u xc/extras/Mesa/src/mesa/tnl/t_array_import.c:1.1.1.1 xc/extras/Mesa/src/mesa/tnl/t_array_import.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/tnl/t_array_import.c:1.1.1.1 Wed Jun 16 09:19:31 2004
++++ xc/extras/Mesa/src/mesa/tnl/t_array_import.c Wed Dec 15 01:51:04 2004
+@@ -201,6 +201,7 @@
+ struct gl_client_array *tmp;
+ GLboolean is_writeable = 0;
+ const GLubyte *data;
++ (void) writeable; (void) stride;
+
+ tmp = _ac_import_edgeflag(ctx, GL_UNSIGNED_BYTE,
+ sizeof(GLubyte),
+Index: xc/extras/Mesa/src/mesa/tnl/t_context.c
+diff -u xc/extras/Mesa/src/mesa/tnl/t_context.c:1.1.1.1 xc/extras/Mesa/src/mesa/tnl/t_context.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/tnl/t_context.c:1.1.1.1 Wed Jun 16 09:19:31 2004
++++ xc/extras/Mesa/src/mesa/tnl/t_context.c Wed Dec 15 01:51:04 2004
+@@ -51,6 +51,7 @@
+ GLframebuffer *drawBuffer,
+ GLframebuffer *readBuffer )
+ {
++ (void) ctx; (void) drawBuffer; (void) readBuffer;
+ }
+
+
+Index: xc/extras/Mesa/src/mesa/tnl/t_save_api.c
+diff -u xc/extras/Mesa/src/mesa/tnl/t_save_api.c:1.1.1.1 xc/extras/Mesa/src/mesa/tnl/t_save_api.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/tnl/t_save_api.c:1.1.1.1 Wed Jun 16 09:19:31 2004
++++ xc/extras/Mesa/src/mesa/tnl/t_save_api.c Wed Dec 15 01:51:04 2004
+@@ -179,6 +179,7 @@
+ static struct tnl_vertex_store *alloc_vertex_store( GLcontext *ctx )
+ {
+ struct tnl_vertex_store *store = MALLOC_STRUCT(tnl_vertex_store);
++ (void) ctx;
+ store->used = 0;
+ store->refcount = 1;
+ return store;
+@@ -187,6 +188,7 @@
+ static struct tnl_primitive_store *alloc_prim_store( GLcontext *ctx )
+ {
+ struct tnl_primitive_store *store = MALLOC_STRUCT(tnl_primitive_store);
++ (void) ctx;
+ store->used = 0;
+ store->refcount = 1;
+ return store;
+@@ -1241,6 +1243,7 @@
+ const GLvoid *indices)
+ {
+ GET_CURRENT_CONTEXT(ctx);
++ (void) mode; (void) count; (void) type; (void) indices;
+ _mesa_compile_error( ctx, GL_INVALID_OPERATION, "glDrawElements" );
+ }
+
+@@ -1251,24 +1254,28 @@
+ const GLvoid *indices)
+ {
+ GET_CURRENT_CONTEXT(ctx);
++ (void) mode; (void) start; (void) end; (void) count; (void) type; (void) indices;
+ _mesa_compile_error( ctx, GL_INVALID_OPERATION, "glDrawRangeElements" );
+ }
+
+ static void GLAPIENTRY _save_DrawArrays(GLenum mode, GLint start, GLsizei count)
+ {
+ GET_CURRENT_CONTEXT(ctx);
++ (void) mode; (void) start; (void) count;
+ _mesa_compile_error( ctx, GL_INVALID_OPERATION, "glDrawArrays" );
+ }
+
+ static void GLAPIENTRY _save_Rectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 )
+ {
+ GET_CURRENT_CONTEXT(ctx);
++ (void) x1; (void) y1; (void) x2; (void) y2;
+ _mesa_compile_error( ctx, GL_INVALID_OPERATION, "glRectf" );
+ }
+
+ static void GLAPIENTRY _save_EvalMesh1( GLenum mode, GLint i1, GLint i2 )
+ {
+ GET_CURRENT_CONTEXT(ctx);
++ (void) mode; (void) i1; (void) i2;
+ _mesa_compile_error( ctx, GL_INVALID_OPERATION, "glEvalMesh1" );
+ }
+
+@@ -1276,12 +1283,14 @@
+ GLint j1, GLint j2 )
+ {
+ GET_CURRENT_CONTEXT(ctx);
++ (void) mode; (void) i1; (void) i2; (void) j1; (void) j2;
+ _mesa_compile_error( ctx, GL_INVALID_OPERATION, "glEvalMesh2" );
+ }
+
+ static void GLAPIENTRY _save_Begin( GLenum mode )
+ {
+ GET_CURRENT_CONTEXT( ctx );
++ (void) mode;
+ _mesa_compile_error( ctx, GL_INVALID_OPERATION, "Recursive glBegin" );
+ }
+
+@@ -1467,6 +1476,8 @@
+ {
+ TNLcontext *tnl = TNL_CONTEXT(ctx);
+
++ (void) list; (void) mode;
++
+ if (!tnl->save.prim_store)
+ tnl->save.prim_store = alloc_prim_store( ctx );
+
+@@ -1481,21 +1492,25 @@
+
+ void _tnl_EndList( GLcontext *ctx )
+ {
++ (void) ctx;
+ assert(TNL_CONTEXT(ctx)->save.vertex_size == 0);
+ }
+
+ void _tnl_BeginCallList( GLcontext *ctx, GLuint list )
+ {
++ (void) ctx; (void) list;
+ }
+
+ void _tnl_EndCallList( GLcontext *ctx )
+ {
++ (void) ctx;
+ }
+
+
+ static void _tnl_destroy_vertex_list( GLcontext *ctx, void *data )
+ {
+ struct tnl_vertex_list *node = (struct tnl_vertex_list *)data;
++ (void) ctx;
+
+ if ( --node->vertex_store->refcount == 0 )
+ FREE( node->vertex_store );
+@@ -1512,6 +1527,7 @@
+ {
+ struct tnl_vertex_list *node = (struct tnl_vertex_list *)data;
+ GLuint i;
++ (void) ctx;
+
+ _mesa_debug(0, "TNL-VERTEX-LIST, %u vertices %d primitives, %d vertsize\n",
+ node->count,
+@@ -1597,4 +1613,5 @@
+ */
+ void _tnl_save_destroy( GLcontext *ctx )
+ {
++ (void) ctx;
+ }
+Index: xc/extras/Mesa/src/mesa/tnl/t_save_loopback.c
+diff -u xc/extras/Mesa/src/mesa/tnl/t_save_loopback.c:1.1.1.1 xc/extras/Mesa/src/mesa/tnl/t_save_loopback.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/tnl/t_save_loopback.c:1.1.1.1 Wed Jun 16 09:19:32 2004
++++ xc/extras/Mesa/src/mesa/tnl/t_save_loopback.c Wed Dec 15 01:51:04 2004
+@@ -164,11 +164,13 @@
+
+ static void index_attr1fv(GLcontext *ctx, GLint target, const GLfloat *v)
+ {
++ (void) target;
+ ctx->Exec->Indexf(v[0]);
+ }
+
+ static void edgeflag_attr1fv(GLcontext *ctx, GLint target, const GLfloat *v)
+ {
++ (void) target;
+ ctx->Exec->EdgeFlag((GLboolean)(v[0] == 1.0));
+ }
+
+@@ -194,7 +196,7 @@
+ GLuint k;
+
+ if (prim->mode & PRIM_BEGIN) {
+- glBegin( prim->mode & PRIM_MODE_MASK );
++ GL_CALL(Begin)( prim->mode & PRIM_MODE_MASK );
+ }
+ else {
+ assert(i == 0);
+@@ -219,7 +221,7 @@
+ }
+
+ if (prim->mode & PRIM_END) {
+- glEnd();
++ GL_CALL(End)();
+ }
+ else {
+ assert (i == list->prim_count-1);
+Index: xc/extras/Mesa/src/mesa/tnl/t_vb_lighttmp.h
+diff -u xc/extras/Mesa/src/mesa/tnl/t_vb_lighttmp.h:1.1.1.1 xc/extras/Mesa/src/mesa/tnl/t_vb_lighttmp.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/tnl/t_vb_lighttmp.h:1.1.1.1 Wed Jun 16 09:19:32 2004
++++ xc/extras/Mesa/src/mesa/tnl/t_vb_lighttmp.h Wed Dec 15 01:51:04 2004
+@@ -253,8 +253,9 @@
+ const GLfloat *normal = (GLfloat *)VB->NormalPtr->data;
+
+ GLfloat (*Fcolor)[4] = (GLfloat (*)[4]) store->LitColor[0].data;
++#if IDX & LIGHT_TWOSIDE
+ GLfloat (*Bcolor)[4] = (GLfloat (*)[4]) store->LitColor[1].data;
+- GLfloat (*color[2])[4];
++#endif
+
+ const GLuint nr = VB->Count;
+
+@@ -265,9 +266,6 @@
+ (void) nstride;
+ (void) vstride;
+
+- color[0] = Fcolor;
+- color[1] = Bcolor;
+-
+ VB->ColorPtr[0] = &store->LitColor[0];
+ sumA[0] = ctx->Light.Material.Attrib[MAT_ATTRIB_FRONT_DIFFUSE][3];
+
+Index: xc/extras/Mesa/src/mesa/tnl/t_vb_render.c
+diff -u xc/extras/Mesa/src/mesa/tnl/t_vb_render.c:1.1.1.2 xc/extras/Mesa/src/mesa/tnl/t_vb_render.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/tnl/t_vb_render.c:1.1.1.2 Thu Jul 22 06:53:15 2004
++++ xc/extras/Mesa/src/mesa/tnl/t_vb_render.c Wed Dec 15 01:51:04 2004
+@@ -353,6 +353,7 @@
+
+ static void dtr( struct tnl_pipeline_stage *stage )
+ {
++ (void) stage;
+ }
+
+
+Index: xc/extras/Mesa/src/mesa/tnl/t_vertex.c
+diff -u xc/extras/Mesa/src/mesa/tnl/t_vertex.c:1.1.1.2 xc/extras/Mesa/src/mesa/tnl/t_vertex.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/tnl/t_vertex.c:1.1.1.2 Thu Jul 22 06:53:15 2004
++++ xc/extras/Mesa/src/mesa/tnl/t_vertex.c Wed Dec 15 01:51:04 2004
+@@ -160,6 +160,7 @@
+ static void insert_4f_4( const struct tnl_clipspace_attr *a, GLubyte *v, const GLfloat *in )
+ {
+ GLfloat *out = (GLfloat *)(v);
++ (void) a;
+
+ out[0] = in[0];
+ out[1] = in[1];
+@@ -170,6 +171,7 @@
+ static void insert_4f_3( const struct tnl_clipspace_attr *a, GLubyte *v, const GLfloat *in )
+ {
+ GLfloat *out = (GLfloat *)(v);
++ (void) a;
+
+ out[0] = in[0];
+ out[1] = in[1];
+@@ -180,6 +182,7 @@
+ static void insert_4f_2( const struct tnl_clipspace_attr *a, GLubyte *v, const GLfloat *in )
+ {
+ GLfloat *out = (GLfloat *)(v);
++ (void) a;
+
+ out[0] = in[0];
+ out[1] = in[1];
+@@ -190,6 +193,7 @@
+ static void insert_4f_1( const struct tnl_clipspace_attr *a, GLubyte *v, const GLfloat *in )
+ {
+ GLfloat *out = (GLfloat *)(v);
++ (void) a;
+
+ out[0] = in[0];
+ out[1] = 0;
+@@ -200,6 +204,7 @@
+ static void insert_3f_xyw_4( const struct tnl_clipspace_attr *a, GLubyte *v, const GLfloat *in )
+ {
+ GLfloat *out = (GLfloat *)(v);
++ (void) a;
+
+ out[0] = in[0];
+ out[1] = in[1];
+@@ -208,12 +213,14 @@
+
+ static void insert_3f_xyw_err( const struct tnl_clipspace_attr *a, GLubyte *v, const GLfloat *in )
+ {
++ (void) a; (void) v; (void) in;
+ abort();
+ }
+
+ static void insert_3f_3( const struct tnl_clipspace_attr *a, GLubyte *v, const GLfloat *in )
+ {
+ GLfloat *out = (GLfloat *)(v);
++ (void) a;
+
+ out[0] = in[0];
+ out[1] = in[1];
+@@ -223,6 +230,7 @@
+ static void insert_3f_2( const struct tnl_clipspace_attr *a, GLubyte *v, const GLfloat *in )
+ {
+ GLfloat *out = (GLfloat *)(v);
++ (void) a;
+
+ out[0] = in[0];
+ out[1] = in[1];
+@@ -232,6 +240,7 @@
+ static void insert_3f_1( const struct tnl_clipspace_attr *a, GLubyte *v, const GLfloat *in )
+ {
+ GLfloat *out = (GLfloat *)(v);
++ (void) a;
+
+ out[0] = in[0];
+ out[1] = 0;
+@@ -242,6 +251,7 @@
+ static void insert_2f_2( const struct tnl_clipspace_attr *a, GLubyte *v, const GLfloat *in )
+ {
+ GLfloat *out = (GLfloat *)(v);
++ (void) a;
+
+ out[0] = in[0];
+ out[1] = in[1];
+@@ -250,6 +260,7 @@
+ static void insert_2f_1( const struct tnl_clipspace_attr *a, GLubyte *v, const GLfloat *in )
+ {
+ GLfloat *out = (GLfloat *)(v);
++ (void) a;
+
+ out[0] = in[0];
+ out[1] = 0;
+@@ -258,7 +269,8 @@
+ static void insert_1f_1( const struct tnl_clipspace_attr *a, GLubyte *v, const GLfloat *in )
+ {
+ GLfloat *out = (GLfloat *)(v);
+-
++ (void) a;
++
+ out[0] = in[0];
+ }
+
+@@ -266,6 +278,7 @@
+ const GLfloat *in )
+ {
+ GLchan *c = (GLchan *)v;
++ (void) a;
+ UNCLAMPED_FLOAT_TO_CHAN(c[0], in[0]);
+ UNCLAMPED_FLOAT_TO_CHAN(c[1], in[1]);
+ UNCLAMPED_FLOAT_TO_CHAN(c[2], in[2]);
+@@ -276,6 +289,7 @@
+ const GLfloat *in )
+ {
+ GLchan *c = (GLchan *)v;
++ (void) a;
+ UNCLAMPED_FLOAT_TO_CHAN(c[0], in[0]);
+ UNCLAMPED_FLOAT_TO_CHAN(c[1], in[1]);
+ UNCLAMPED_FLOAT_TO_CHAN(c[2], in[2]);
+@@ -286,6 +300,7 @@
+ const GLfloat *in )
+ {
+ GLchan *c = (GLchan *)v;
++ (void) a;
+ UNCLAMPED_FLOAT_TO_CHAN(c[0], in[0]);
+ UNCLAMPED_FLOAT_TO_CHAN(c[1], in[1]);
+ c[2] = 0;
+@@ -296,6 +311,7 @@
+ const GLfloat *in )
+ {
+ GLchan *c = (GLchan *)v;
++ (void) a;
+ UNCLAMPED_FLOAT_TO_CHAN(c[0], in[0]);
+ c[1] = 0;
+ c[2] = 0;
+@@ -305,6 +321,7 @@
+ static void insert_4ub_4f_rgba_4( const struct tnl_clipspace_attr *a, GLubyte *v,
+ const GLfloat *in )
+ {
++ (void) a;
+ UNCLAMPED_FLOAT_TO_UBYTE(v[0], in[0]);
+ UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[1]);
+ UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[2]);
+@@ -314,6 +331,7 @@
+ static void insert_4ub_4f_rgba_3( const struct tnl_clipspace_attr *a, GLubyte *v,
+ const GLfloat *in )
+ {
++ (void) a;
+ UNCLAMPED_FLOAT_TO_UBYTE(v[0], in[0]);
+ UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[1]);
+ UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[2]);
+@@ -323,6 +341,7 @@
+ static void insert_4ub_4f_rgba_2( const struct tnl_clipspace_attr *a, GLubyte *v,
+ const GLfloat *in )
+ {
++ (void) a;
+ UNCLAMPED_FLOAT_TO_UBYTE(v[0], in[0]);
+ UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[1]);
+ v[2] = 0;
+@@ -332,6 +351,7 @@
+ static void insert_4ub_4f_rgba_1( const struct tnl_clipspace_attr *a, GLubyte *v,
+ const GLfloat *in )
+ {
++ (void) a;
+ UNCLAMPED_FLOAT_TO_UBYTE(v[0], in[0]);
+ v[1] = 0;
+ v[2] = 0;
+@@ -341,6 +361,7 @@
+ static void insert_4ub_4f_bgra_4( const struct tnl_clipspace_attr *a, GLubyte *v,
+ const GLfloat *in )
+ {
++ (void) a;
+ UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[0]);
+ UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[1]);
+ UNCLAMPED_FLOAT_TO_UBYTE(v[0], in[2]);
+@@ -350,6 +371,7 @@
+ static void insert_4ub_4f_bgra_3( const struct tnl_clipspace_attr *a, GLubyte *v,
+ const GLfloat *in )
+ {
++ (void) a;
+ UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[0]);
+ UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[1]);
+ UNCLAMPED_FLOAT_TO_UBYTE(v[0], in[2]);
+@@ -359,6 +381,7 @@
+ static void insert_4ub_4f_bgra_2( const struct tnl_clipspace_attr *a, GLubyte *v,
+ const GLfloat *in )
+ {
++ (void) a;
+ UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[0]);
+ UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[1]);
+ v[0] = 0;
+@@ -368,15 +391,97 @@
+ static void insert_4ub_4f_bgra_1( const struct tnl_clipspace_attr *a, GLubyte *v,
+ const GLfloat *in )
+ {
++ (void) a;
+ UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[0]);
+ v[1] = 0;
+ v[0] = 0;
+ v[3] = 0xff;
+ }
+
++static void insert_4ub_4f_argb_4( const struct tnl_clipspace_attr *a, GLubyte *v,
++ const GLfloat *in )
++{
++ (void) a;
++ UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[0]);
++ UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[1]);
++ UNCLAMPED_FLOAT_TO_UBYTE(v[3], in[2]);
++ UNCLAMPED_FLOAT_TO_UBYTE(v[0], in[3]);
++}
++
++static void insert_4ub_4f_argb_3( const struct tnl_clipspace_attr *a, GLubyte *v,
++ const GLfloat *in )
++{
++ (void) a;
++ UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[0]);
++ UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[1]);
++ UNCLAMPED_FLOAT_TO_UBYTE(v[3], in[2]);
++ v[0] = 0xff;
++}
++
++static void insert_4ub_4f_argb_2( const struct tnl_clipspace_attr *a, GLubyte *v,
++ const GLfloat *in )
++{
++ (void) a;
++ UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[0]);
++ UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[1]);
++ v[3] = 0x00;
++ v[0] = 0xff;
++}
++
++static void insert_4ub_4f_argb_1( const struct tnl_clipspace_attr *a, GLubyte *v,
++ const GLfloat *in )
++{
++ (void) a;
++ UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[0]);
++ v[2] = 0x00;
++ v[3] = 0x00;
++ v[0] = 0xff;
++}
++
++static void insert_4ub_4f_abgr_4( const struct tnl_clipspace_attr *a, GLubyte *v,
++ const GLfloat *in )
++{
++ (void) a;
++ UNCLAMPED_FLOAT_TO_UBYTE(v[3], in[0]);
++ UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[1]);
++ UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[2]);
++ UNCLAMPED_FLOAT_TO_UBYTE(v[0], in[3]);
++}
++
++static void insert_4ub_4f_abgr_3( const struct tnl_clipspace_attr *a, GLubyte *v,
++ const GLfloat *in )
++{
++ (void) a;
++ UNCLAMPED_FLOAT_TO_UBYTE(v[3], in[0]);
++ UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[1]);
++ UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[2]);
++ v[0] = 0xff;
++}
++
++static void insert_4ub_4f_abgr_2( const struct tnl_clipspace_attr *a, GLubyte *v,
++ const GLfloat *in )
++{
++ (void) a;
++ UNCLAMPED_FLOAT_TO_UBYTE(v[3], in[0]);
++ UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[1]);
++ v[1] = 0x00;
++ v[0] = 0xff;
++}
++
++static void insert_4ub_4f_abgr_1( const struct tnl_clipspace_attr *a, GLubyte *v,
++ const GLfloat *in )
++{
++ (void) a;
++ UNCLAMPED_FLOAT_TO_UBYTE(v[3], in[0]);
++ v[2] = 0x00;
++ v[1] = 0x00;
++ v[0] = 0xff;
++}
++
+ static void insert_3ub_3f_rgb_3( const struct tnl_clipspace_attr *a, GLubyte *v,
+ const GLfloat *in )
+ {
++ (void) a;
+ UNCLAMPED_FLOAT_TO_UBYTE(v[0], in[0]);
+ UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[1]);
+ UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[2]);
+@@ -385,6 +490,7 @@
+ static void insert_3ub_3f_rgb_2( const struct tnl_clipspace_attr *a, GLubyte *v,
+ const GLfloat *in )
+ {
++ (void) a;
+ UNCLAMPED_FLOAT_TO_UBYTE(v[0], in[0]);
+ UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[1]);
+ v[2] = 0;
+@@ -393,6 +499,7 @@
+ static void insert_3ub_3f_rgb_1( const struct tnl_clipspace_attr *a, GLubyte *v,
+ const GLfloat *in )
+ {
++ (void) a;
+ UNCLAMPED_FLOAT_TO_UBYTE(v[0], in[0]);
+ v[1] = 0;
+ v[2] = 0;
+@@ -401,6 +508,7 @@
+ static void insert_3ub_3f_bgr_3( const struct tnl_clipspace_attr *a, GLubyte *v,
+ const GLfloat *in )
+ {
++ (void) a;
+ UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[0]);
+ UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[1]);
+ UNCLAMPED_FLOAT_TO_UBYTE(v[0], in[2]);
+@@ -409,6 +517,7 @@
+ static void insert_3ub_3f_bgr_2( const struct tnl_clipspace_attr *a, GLubyte *v,
+ const GLfloat *in )
+ {
++ (void) a;
+ UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[0]);
+ UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[1]);
+ v[0] = 0;
+@@ -417,6 +526,7 @@
+ static void insert_3ub_3f_bgr_1( const struct tnl_clipspace_attr *a, GLubyte *v,
+ const GLfloat *in )
+ {
++ (void) a;
+ UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[0]);
+ v[1] = 0;
+ v[0] = 0;
+@@ -426,6 +536,7 @@
+ static void insert_1ub_1f_1( const struct tnl_clipspace_attr *a, GLubyte *v,
+ const GLfloat *in )
+ {
++ (void) a;
+ UNCLAMPED_FLOAT_TO_UBYTE(v[0], in[0]);
+ }
+
+@@ -481,6 +592,7 @@
+ static void extract_4f( const struct tnl_clipspace_attr *a, GLfloat *out, const GLubyte *v )
+ {
+ const GLfloat *in = (const GLfloat *)v;
++ (void) a;
+
+ out[0] = in[0];
+ out[1] = in[1];
+@@ -491,6 +603,7 @@
+ static void extract_3f_xyw( const struct tnl_clipspace_attr *a, GLfloat *out, const GLubyte *v )
+ {
+ const GLfloat *in = (const GLfloat *)v;
++ (void) a;
+
+ out[0] = in[0];
+ out[1] = in[1];
+@@ -502,6 +615,7 @@
+ static void extract_3f( const struct tnl_clipspace_attr *a, GLfloat *out, const GLubyte *v )
+ {
+ const GLfloat *in = (const GLfloat *)v;
++ (void) a;
+
+ out[0] = in[0];
+ out[1] = in[1];
+@@ -513,6 +627,7 @@
+ static void extract_2f( const struct tnl_clipspace_attr *a, GLfloat *out, const GLubyte *v )
+ {
+ const GLfloat *in = (const GLfloat *)v;
++ (void) a;
+
+ out[0] = in[0];
+ out[1] = in[1];
+@@ -523,6 +638,7 @@
+ static void extract_1f( const struct tnl_clipspace_attr *a, GLfloat *out, const GLubyte *v )
+ {
+ const GLfloat *in = (const GLfloat *)v;
++ (void) a;
+
+ out[0] = in[0];
+ out[1] = 0;
+@@ -534,6 +650,7 @@
+ const GLubyte *v )
+ {
+ GLchan *c = (GLchan *)v;
++ (void) a;
+
+ out[0] = CHAN_TO_FLOAT(c[0]);
+ out[1] = CHAN_TO_FLOAT(c[1]);
+@@ -544,6 +661,7 @@
+ static void extract_4ub_4f_rgba( const struct tnl_clipspace_attr *a, GLfloat *out,
+ const GLubyte *v )
+ {
++ (void) a;
+ out[0] = UBYTE_TO_FLOAT(v[0]);
+ out[1] = UBYTE_TO_FLOAT(v[1]);
+ out[2] = UBYTE_TO_FLOAT(v[2]);
+@@ -553,15 +671,37 @@
+ static void extract_4ub_4f_bgra( const struct tnl_clipspace_attr *a, GLfloat *out,
+ const GLubyte *v )
+ {
++ (void) a;
+ out[2] = UBYTE_TO_FLOAT(v[0]);
+ out[1] = UBYTE_TO_FLOAT(v[1]);
+ out[0] = UBYTE_TO_FLOAT(v[2]);
+ out[3] = UBYTE_TO_FLOAT(v[3]);
+ }
+
++static void extract_4ub_4f_argb( const struct tnl_clipspace_attr *a, GLfloat *out,
++ const GLubyte *v )
++{
++ (void) a;
++ out[3] = UBYTE_TO_FLOAT(v[0]);
++ out[0] = UBYTE_TO_FLOAT(v[1]);
++ out[1] = UBYTE_TO_FLOAT(v[2]);
++ out[2] = UBYTE_TO_FLOAT(v[3]);
++}
++
++static void extract_4ub_4f_abgr( const struct tnl_clipspace_attr *a, GLfloat *out,
++ const GLubyte *v )
++{
++ (void) a;
++ out[3] = UBYTE_TO_FLOAT(v[0]);
++ out[2] = UBYTE_TO_FLOAT(v[1]);
++ out[1] = UBYTE_TO_FLOAT(v[2]);
++ out[0] = UBYTE_TO_FLOAT(v[3]);
++}
++
+ static void extract_3ub_3f_rgb( const struct tnl_clipspace_attr *a, GLfloat *out,
+ const GLubyte *v )
+ {
++ (void) a;
+ out[0] = UBYTE_TO_FLOAT(v[0]);
+ out[1] = UBYTE_TO_FLOAT(v[1]);
+ out[2] = UBYTE_TO_FLOAT(v[2]);
+@@ -571,6 +711,7 @@
+ static void extract_3ub_3f_bgr( const struct tnl_clipspace_attr *a, GLfloat *out,
+ const GLubyte *v )
+ {
++ (void) a;
+ out[2] = UBYTE_TO_FLOAT(v[0]);
+ out[1] = UBYTE_TO_FLOAT(v[1]);
+ out[0] = UBYTE_TO_FLOAT(v[2]);
+@@ -579,6 +720,7 @@
+
+ static void extract_1ub_1f( const struct tnl_clipspace_attr *a, GLfloat *out, const GLubyte *v )
+ {
++ (void) a;
+ out[0] = UBYTE_TO_FLOAT(v[0]);
+ out[1] = 0;
+ out[2] = 0;
+@@ -666,6 +808,18 @@
+ insert_4ub_4f_bgra_4 },
+ 4 * sizeof(GLubyte) },
+
++ { "4ub_4f_argb",
++ extract_4ub_4f_argb,
++ { insert_4ub_4f_argb_1, insert_4ub_4f_argb_2, insert_4ub_4f_argb_3,
++ insert_4ub_4f_argb_4 },
++ 4 * sizeof(GLubyte) },
++
++ { "4ub_4f_abgr",
++ extract_4ub_4f_abgr,
++ { insert_4ub_4f_abgr_1, insert_4ub_4f_abgr_2, insert_4ub_4f_abgr_3,
++ insert_4ub_4f_abgr_4 },
++ 4 * sizeof(GLubyte) },
++
+ { "4chan_4f_rgba",
+ extract_4chan_4f_rgba,
+ { insert_4chan_4f_rgba_1, insert_4chan_4f_rgba_2, insert_4chan_4f_rgba_3,
+@@ -731,6 +885,7 @@
+ const struct tnl_clipspace_attr *a = vtx->attr;
+ const GLuint attr_count = vtx->attr_count;
+ GLuint j;
++ (void) force_boundary;
+
+ if (tnl->NeedNdcCoords) {
+ const GLfloat *dstclip = VB->ClipPtr->data[edst];
+Index: xc/extras/Mesa/src/mesa/tnl/t_vertex.h
+diff -u xc/extras/Mesa/src/mesa/tnl/t_vertex.h:1.1.1.2 xc/extras/Mesa/src/mesa/tnl/t_vertex.h:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/tnl/t_vertex.h:1.1.1.2 Thu Jul 22 06:53:15 2004
++++ xc/extras/Mesa/src/mesa/tnl/t_vertex.h Wed Dec 15 01:51:04 2004
+@@ -53,6 +53,8 @@
+ EMIT_3UB_3F_BGR, /* for specular color */
+ EMIT_4UB_4F_RGBA, /* for color */
+ EMIT_4UB_4F_BGRA, /* for color */
++ EMIT_4UB_4F_ARGB, /* for color */
++ EMIT_4UB_4F_ABGR, /* for color */
+ EMIT_4CHAN_4F_RGBA, /* for swrast color */
+ EMIT_PAD, /* leave a hole of 'offset' bytes */
+ EMIT_MAX
+Index: xc/extras/Mesa/src/mesa/tnl/t_vertex_c.c
+diff -u xc/extras/Mesa/src/mesa/tnl/t_vertex_c.c:1.3 xc/extras/Mesa/src/mesa/tnl/t_vertex_c.c:1.3.2.1
+--- xc/extras/Mesa/src/mesa/tnl/t_vertex_c.c:1.3 Sat Aug 28 05:35:25 2004
++++ xc/extras/Mesa/src/mesa/tnl/t_vertex_c.c Wed Dec 15 01:51:04 2004
+@@ -228,25 +228,12 @@
+
+ static GLboolean print_attr_footer( struct tnl_clipspace_codegen *p )
+ {
+- return
+- emit(p, " }\n");
++ return emit(p, " }\n");
+ }
+
+ static tnl_emit_func print_store_func( struct tnl_clipspace_codegen *p )
+ {
+-#if defined( WIN32 ) || defined( __VMS )
+- fprintf(stderr, "%s: emitted:\n%s\n", "print_store_func", p->buf);
+-#else
+-/* C99 provides __func__, older gcc versions called it __FUNCTION__ */
+-#if __STDC_VERSION__ < 199901L
+-# if __GNUC__ >= 2
+-# define __func__ __FUNCTION__
+-# else
+-# define __func__ "print_store_func"
+-# endif
+-#endif
+- fprintf(stderr, "%s: emitted:\n%s\n", __func__, p->buf);
+-#endif
++ fprintf(stderr, "print_store_func: emitted:\n%s\n", p->buf);
+ return 0;
+ }
+
+Index: xc/extras/Mesa/src/mesa/tnl/t_vertex_codegen.c
+diff -u xc/extras/Mesa/src/mesa/tnl/t_vertex_codegen.c:1.1.1.1 xc/extras/Mesa/src/mesa/tnl/t_vertex_codegen.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/tnl/t_vertex_codegen.c:1.1.1.1 Thu Jul 22 06:53:16 2004
++++ xc/extras/Mesa/src/mesa/tnl/t_vertex_codegen.c Wed Dec 15 01:51:04 2004
+@@ -161,6 +161,7 @@
+
+ static GLboolean emit_3f_xyw_err( struct tnl_clipspace_codegen *p )
+ {
++ (void) p;
+ assert(0);
+ return GL_FALSE;
+ }
+Index: xc/extras/Mesa/src/mesa/tnl/t_vtx_api.c
+diff -u xc/extras/Mesa/src/mesa/tnl/t_vtx_api.c:1.1.1.2 xc/extras/Mesa/src/mesa/tnl/t_vtx_api.c:1.1.1.2.4.1
+--- xc/extras/Mesa/src/mesa/tnl/t_vtx_api.c:1.1.1.2 Thu Jul 22 06:53:16 2004
++++ xc/extras/Mesa/src/mesa/tnl/t_vtx_api.c Wed Dec 15 01:51:04 2004
+@@ -345,6 +345,7 @@
+ ctx->Driver.NeedFlush |= FLUSH_UPDATE_CURRENT;
+ }
+
++#ifdef USE_X86_ASM
+
+ static struct _tnl_dynfn *lookup( struct _tnl_dynfn *l, GLuint key )
+ {
+@@ -382,11 +383,13 @@
+ }
+
+ if (dfn)
+- return (tnl_attrfv_func) dfn->code;
++ return *(tnl_attrfv_func *) &dfn->code;
+ else
+ return 0;
+ }
+
++#endif /* USE_X86_ASM */
++
+ /* Helper function for 'CHOOSE' macro. Do what's necessary when an
+ * entrypoint is called for the first time.
+ */
+@@ -824,6 +827,7 @@
+ void _tnl_FlushVertices( GLcontext *ctx, GLuint flags )
+ {
+ TNLcontext *tnl = TNL_CONTEXT(ctx);
++ (void) flags;
+
+ if (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END)
+ return;
+@@ -860,6 +864,7 @@
+
+ static struct _tnl_dynfn *no_codegen( GLcontext *ctx, int key )
+ {
++ (void) ctx; (void) key;
+ return 0;
+ }
+
+Index: xc/extras/Mesa/src/mesa/tnl/t_vtx_eval.c
+diff -u xc/extras/Mesa/src/mesa/tnl/t_vtx_eval.c:1.1.1.1 xc/extras/Mesa/src/mesa/tnl/t_vtx_eval.c:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/tnl/t_vtx_eval.c:1.1.1.1 Wed Jun 16 09:19:33 2004
++++ xc/extras/Mesa/src/mesa/tnl/t_vtx_eval.c Wed Dec 15 01:51:04 2004
+@@ -165,9 +165,9 @@
+ map->Order);
+
+ if (tnl->vtx.eval.map1[0].sz == 4)
+- glVertex4fv( vertex );
++ GL_CALL(Vertex4fv)( vertex );
+ else
+- glVertex3fv( vertex );
++ GL_CALL(Vertex3fv)( vertex );
+ }
+ }
+
+@@ -244,9 +244,9 @@
+ }
+
+ if (tnl->vtx.attrsz[0] == 4)
+- glVertex4fv( vertex );
++ GL_CALL(Vertex4fv)( vertex );
+ else
+- glVertex3fv( vertex );
++ GL_CALL(Vertex3fv)( vertex );
+ }
+ }
+
+Index: xc/extras/Mesa/src/mesa/tnl/t_vtx_x86_gcc.S
+diff -u xc/extras/Mesa/src/mesa/tnl/t_vtx_x86_gcc.S:1.1.1.1 xc/extras/Mesa/src/mesa/tnl/t_vtx_x86_gcc.S:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/tnl/t_vtx_x86_gcc.S:1.1.1.1 Wed Jun 16 09:19:33 2004
++++ xc/extras/Mesa/src/mesa/tnl/t_vtx_x86_gcc.S Mon Dec 13 13:43:08 2004
+@@ -31,15 +31,15 @@
+ * Daniel Borca <dborca@yahoo.com>
+ */
+
+-#if defined (__DJGPP__) || defined (__MINGW32__)
++#if defined (__DJGPP__) || defined (__MINGW32__) || defined (__CYGWIN__)
+ #define GLOBL( x ) \
+ .globl _##x; \
+ _##x:
+-#else /* !defined (__DJGPP__) && !defined (__MINGW32__) */
++#else /* !defined (__DJGPP__) && !defined (__MINGW32__) && !defined (__CYGWIN__) */
+ #define GLOBL( x ) \
+ .globl x; \
+ x:
+-#endif /* !defined (__DJGPP__) && !defined (__MINGW32__) */
++#endif /* !defined (__DJGPP__) && !defined (__MINGW32__) && !defined (__CYGWIN__) */
+
+
+ #if !defined (STDCALL_API)
+Index: xc/extras/Mesa/src/mesa/tnl_dd/t_dd_triemit.h
+diff -u xc/extras/Mesa/src/mesa/tnl_dd/t_dd_triemit.h:1.1.1.1 xc/extras/Mesa/src/mesa/tnl_dd/t_dd_triemit.h:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/tnl_dd/t_dd_triemit.h:1.1.1.1 Wed Jun 16 09:19:34 2004
++++ xc/extras/Mesa/src/mesa/tnl_dd/t_dd_triemit.h Wed Dec 15 01:51:04 2004
+@@ -16,6 +16,13 @@
+ "D" ((long)vb), \
+ "S" ((long)v) ); \
+ } while (0)
++#elif defined(HAVE_LE32_VERTS)
++#define COPY_DWORDS( j, vb, vertsize, v ) \
++do { \
++ for ( j = 0 ; j < vertsize ; j++ ) \
++ vb[j] = CPU_TO_LE32(((GLuint *)v)[j]); \
++ vb += vertsize; \
++} while (0)
+ #else
+ #define COPY_DWORDS( j, vb, vertsize, v ) \
+ do { \
+Index: xc/extras/Mesa/src/mesa/x86/Makefile
+diff -u xc/extras/Mesa/src/mesa/x86/Makefile:1.1.1.1 xc/extras/Mesa/src/mesa/x86/Makefile:1.1.1.1.4.1
+--- xc/extras/Mesa/src/mesa/x86/Makefile:1.1.1.1 Wed Jun 16 09:19:37 2004
++++ xc/extras/Mesa/src/mesa/x86/Makefile Wed Dec 15 01:51:06 2004
+@@ -11,6 +11,7 @@
+ -I$(TOP)/include \
+ -I.. \
+ -I../main \
++ -I../math \
+ -I../glapi \
+ -I../tnl
+
+Index: xc/extras/Mesa/src/mesa/x86/glapi_x86.S
+diff -u xc/extras/Mesa/src/mesa/x86/glapi_x86.S:1.1.1.3 xc/extras/Mesa/src/mesa/x86/glapi_x86.S:1.1.1.3.2.1
+--- xc/extras/Mesa/src/mesa/x86/glapi_x86.S:1.1.1.3 Sat Aug 28 04:28:19 2004
++++ xc/extras/Mesa/src/mesa/x86/glapi_x86.S Wed Dec 15 01:51:06 2004
+@@ -32,11 +32,17 @@
+ #ifndef __WIN32__
+
+ #if defined(STDCALL_API)
+-#define GL_PREFIX(n,n2) GLNAME(CONCAT(gl,n2))
+-#elif defined(USE_MGL_NAMESPACE)
+-#define GL_PREFIX(n,n2) GLNAME(CONCAT(mgl,n))
++# if defined(USE_MGL_NAMESPACE)
++# define GL_PREFIX(n,n2) GLNAME(CONCAT(mgl,n2))
++# else
++# define GL_PREFIX(n,n2) GLNAME(CONCAT(gl,n2))
++# endif
+ #else
+-#define GL_PREFIX(n,n2) GLNAME(CONCAT(gl,n))
++# if defined(USE_MGL_NAMESPACE)
++# define GL_PREFIX(n,n2) GLNAME(CONCAT(mgl,n))
++# else
++# define GL_PREFIX(n,n2) GLNAME(CONCAT(gl,n))
++# endif
+ #endif
+
+ #define GL_OFFSET(x) CODEPTR(REGOFF(4 * x, EAX))
+Index: xc/extras/Xpm/lib/Attrib.c
+diff -u xc/extras/Xpm/lib/Attrib.c:1.1.1.1.6.1 xc/extras/Xpm/lib/Attrib.c:1.1.1.1.6.2
+--- xc/extras/Xpm/lib/Attrib.c:1.1.1.1.6.1 Wed Sep 15 15:47:39 2004
++++ xc/extras/Xpm/lib/Attrib.c Fri Dec 17 01:09:36 2004
+@@ -32,13 +32,15 @@
+ * Developed by Arnaud Le Hors *
+ \*****************************************************************************/
+
++/* October 2004, source code review by Thomas Biege <thomas@suse.de> */
++
+ #include "XpmI.h"
+
+ /* 3.2 backward compatibility code */
+ LFUNC(CreateOldColorTable, int, (XpmColor *ct, unsigned int ncolors,
+ XpmColor ***oldct));
+
+-LFUNC(FreeOldColorTable, void, (XpmColor **colorTable, int ncolors));
++LFUNC(FreeOldColorTable, void, (XpmColor **colorTable, unsigned int ncolors));
+
+ /*
+ * Create a colortable compatible with the old style colortable
+@@ -50,9 +52,9 @@
+ XpmColor ***oldct;
+ {
+ XpmColor **colorTable, **color;
+- int a;
++ unsigned int a;
+
+- if (ncolors >= SIZE_MAX / sizeof(XpmColor *))
++ if (ncolors >= UINT_MAX / sizeof(XpmColor *))
+ return XpmNoMemory;
+
+ colorTable = (XpmColor **) XpmMalloc(ncolors * sizeof(XpmColor *));
+@@ -69,9 +71,9 @@
+ static void
+ FreeOldColorTable(colorTable, ncolors)
+ XpmColor **colorTable;
+- int ncolors;
++ unsigned int ncolors;
+ {
+- int a, b;
++ unsigned int a, b;
+ XpmColor **color;
+ char **sptr;
+
+@@ -122,7 +124,7 @@
+ XpmExtension *ext;
+ char **sptr;
+
+- if (extensions) {
++ if (extensions && nextensions > 0) {
+ for (i = 0, ext = extensions; i < nextensions; i++, ext++) {
+ if (ext->name)
+ XpmFree(ext->name);
+Index: xc/extras/Xpm/lib/CrBufFrI.c
+diff -u xc/extras/Xpm/lib/CrBufFrI.c:1.2 xc/extras/Xpm/lib/CrBufFrI.c:1.2.4.1
+--- xc/extras/Xpm/lib/CrBufFrI.c:1.2 Fri Apr 23 18:42:32 2004
++++ xc/extras/Xpm/lib/CrBufFrI.c Fri Dec 17 01:09:36 2004
+@@ -31,6 +31,9 @@
+ * *
+ * Developed by Arnaud Le Hors *
+ \*****************************************************************************/
++
++/* October 2004, source code review by Thomas Biege <thomas@suse.de> */
++
+ /* $XFree86$ */
+
+ #include "XpmI.h"
+@@ -39,15 +42,17 @@
+ unsigned int *used_size, XpmColor *colors,
+ unsigned int ncolors, unsigned int cpp));
+
+-LFUNC(WritePixels, void, (char *dataptr, unsigned int *used_size,
++LFUNC(WritePixels, void, (char *dataptr, unsigned int data_size,
++ unsigned int *used_size,
+ unsigned int width, unsigned int height,
+ unsigned int cpp, unsigned int *pixels,
+ XpmColor *colors));
+
+-LFUNC(WriteExtensions, void, (char *dataptr, unsigned int *used_size,
++LFUNC(WriteExtensions, void, (char *dataptr, unsigned int data_size,
++ unsigned int *used_size,
+ XpmExtension *ext, unsigned int num));
+
+-LFUNC(ExtensionsSize, int, (XpmExtension *ext, unsigned int num));
++LFUNC(ExtensionsSize, unsigned int, (XpmExtension *ext, unsigned int num));
+ LFUNC(CommentsSize, int, (XpmInfo *info));
+
+ int
+@@ -90,10 +95,11 @@
+
+ #undef RETURN
+ #define RETURN(status) \
++do \
+ { \
+ ErrorStatus = status; \
+ goto error; \
+-}
++}while(0)
+
+ int
+ XpmCreateBufferFromXpmImage(buffer_return, image, info)
+@@ -107,7 +113,7 @@
+ unsigned int cmts, extensions, ext_size = 0;
+ unsigned int l, cmt_size = 0;
+ char *ptr = NULL, *p;
+- unsigned int ptr_size, used_size;
++ unsigned int ptr_size, used_size, tmp;
+
+ *buffer_return = NULL;
+
+@@ -129,7 +135,13 @@
+ #ifdef VOID_SPRINTF
+ used_size = strlen(buf);
+ #endif
+- ptr_size = used_size + ext_size + cmt_size + 1;
++ ptr_size = used_size + ext_size + cmt_size + 1; /* ptr_size can't be 0 */
++ if(ptr_size <= used_size ||
++ ptr_size <= ext_size ||
++ ptr_size <= cmt_size)
++ {
++ return XpmNoMemory;
++ }
+ ptr = (char *) XpmMalloc(ptr_size);
+ if (!ptr)
+ return XpmNoMemory;
+@@ -140,7 +152,7 @@
+ #ifndef VOID_SPRINTF
+ used_size +=
+ #endif
+- sprintf(ptr + used_size, "/*%s*/\n", info->hints_cmt);
++ snprintf(ptr + used_size, ptr_size-used_size, "/*%s*/\n", info->hints_cmt);
+ #ifdef VOID_SPRINTF
+ used_size += strlen(info->hints_cmt) + 5;
+ #endif
+@@ -158,7 +170,7 @@
+ #ifndef VOID_SPRINTF
+ l +=
+ #endif
+- sprintf(buf + l, " %d %d", info->x_hotspot, info->y_hotspot);
++ snprintf(buf + l, sizeof(buf)-l, " %d %d", info->x_hotspot, info->y_hotspot);
+ #ifdef VOID_SPRINTF
+ l = strlen(buf);
+ #endif
+@@ -180,6 +192,8 @@
+ l = strlen(buf);
+ #endif
+ ptr_size += l;
++ if(ptr_size <= l)
++ RETURN(XpmNoMemory);
+ p = (char *) XpmRealloc(ptr, ptr_size);
+ if (!p)
+ RETURN(XpmNoMemory);
+@@ -192,7 +206,7 @@
+ #ifndef VOID_SPRINTF
+ used_size +=
+ #endif
+- sprintf(ptr + used_size, "/*%s*/\n", info->colors_cmt);
++ snprintf(ptr + used_size, ptr_size-used_size, "/*%s*/\n", info->colors_cmt);
+ #ifdef VOID_SPRINTF
+ used_size += strlen(info->colors_cmt) + 5;
+ #endif
+@@ -208,7 +222,12 @@
+ * 4 = 1 (for '"') + 3 (for '",\n')
+ * 1 = - 2 (because the last line does not end with ',\n') + 3 (for '};\n')
+ */
+- ptr_size += image->height * (image->width * image->cpp + 4) + 1;
++ if(image->width > UINT_MAX / image->cpp ||
++ (tmp = image->width * image->cpp + 4) <= 4 ||
++ image->height > UINT_MAX / tmp ||
++ (tmp = image->height * tmp + 1) <= 1 ||
++ (ptr_size += tmp) <= tmp)
++ RETURN(XpmNoMemory);
+
+ p = (char *) XpmRealloc(ptr, ptr_size);
+ if (!p)
+@@ -220,17 +239,17 @@
+ #ifndef VOID_SPRINTF
+ used_size +=
+ #endif
+- sprintf(ptr + used_size, "/*%s*/\n", info->pixels_cmt);
++ snprintf(ptr + used_size, ptr_size-used_size, "/*%s*/\n", info->pixels_cmt);
+ #ifdef VOID_SPRINTF
+ used_size += strlen(info->pixels_cmt) + 5;
+ #endif
+ }
+- WritePixels(ptr + used_size, &used_size, image->width, image->height,
++ WritePixels(ptr + used_size, ptr_size - used_size, &used_size, image->width, image->height,
+ image->cpp, image->data, image->colorTable);
+
+ /* print extensions */
+ if (extensions)
+- WriteExtensions(ptr + used_size, &used_size,
++ WriteExtensions(ptr + used_size, ptr_size-used_size, &used_size,
+ info->extensions, info->nextensions);
+
+ /* close the array */
+@@ -247,6 +266,7 @@
+ return (ErrorStatus);
+ }
+
++
+ static int
+ WriteColors(dataptr, data_size, used_size, colors, ncolors, cpp)
+ char **dataptr;
+@@ -256,7 +276,7 @@
+ unsigned int ncolors;
+ unsigned int cpp;
+ {
+- char buf[BUFSIZ];
++ char buf[BUFSIZ] = {0};
+ unsigned int a, key, l;
+ char *s, *s2;
+ char **defaults;
+@@ -266,6 +286,8 @@
+
+ defaults = (char **) colors;
+ s = buf + 1;
++ if(cpp > (sizeof(buf) - (s-buf)))
++ return(XpmNoMemory);
+ strncpy(s, *defaults++, cpp);
+ s += cpp;
+
+@@ -274,14 +296,24 @@
+ #ifndef VOID_SPRINTF
+ s +=
+ #endif
+- sprintf(s, "\t%s %s", xpmColorKeys[key - 1], s2);
++ /* assume C99 compliance */
++ snprintf(s, sizeof(buf) - (s-buf), "\t%s %s", xpmColorKeys[key - 1], s2);
+ #ifdef VOID_SPRINTF
+ s += strlen(s);
+ #endif
++ /* now let's check if s points out-of-bounds */
++ if((s-buf) > sizeof(buf))
++ return(XpmNoMemory);
+ }
+ }
++ if(sizeof(buf) - (s-buf) < 4)
++ return(XpmNoMemory);
+ strcpy(s, "\",\n");
+ l = s + 3 - buf;
++ if( *data_size >= UINT_MAX-l ||
++ *data_size + l <= *used_size ||
++ (*data_size + l - *used_size) <= sizeof(buf))
++ return(XpmNoMemory);
+ s = (char *) XpmRealloc(*dataptr, *data_size + l);
+ if (!s)
+ return (XpmNoMemory);
+@@ -294,8 +326,9 @@
+ }
+
+ static void
+-WritePixels(dataptr, used_size, width, height, cpp, pixels, colors)
++WritePixels(dataptr, data_size, used_size, width, height, cpp, pixels, colors)
+ char *dataptr;
++ unsigned int data_size;
+ unsigned int *used_size;
+ unsigned int width;
+ unsigned int height;
+@@ -306,27 +339,36 @@
+ char *s = dataptr;
+ unsigned int x, y, h;
+
++ if(height <= 1)
++ return;
++
+ h = height - 1;
+ for (y = 0; y < h; y++) {
+ *s++ = '"';
+ for (x = 0; x < width; x++, pixels++) {
+- strncpy(s, colors[*pixels].string, cpp);
++ if(cpp >= (data_size - (s-dataptr)))
++ return;
++ strncpy(s, colors[*pixels].string, cpp); /* how can we trust *pixels? :-\ */
+ s += cpp;
+ }
++ if((data_size - (s-dataptr)) < 4)
++ return;
+ strcpy(s, "\",\n");
+ s += 3;
+ }
+ /* duplicate some code to avoid a test in the loop */
+ *s++ = '"';
+ for (x = 0; x < width; x++, pixels++) {
+- strncpy(s, colors[*pixels].string, cpp);
++ if(cpp >= (data_size - (s-dataptr)))
++ return;
++ strncpy(s, colors[*pixels].string, cpp); /* how can we trust *pixels? */
+ s += cpp;
+ }
+ *s++ = '"';
+ *used_size += s - dataptr;
+ }
+
+-static int
++static unsigned int
+ ExtensionsSize(ext, num)
+ XpmExtension *ext;
+ unsigned int num;
+@@ -335,21 +377,26 @@
+ char **line;
+
+ size = 0;
++ if(num == 0)
++ return(0); /* ok? */
+ for (x = 0; x < num; x++, ext++) {
+ /* 11 = 10 (for ',\n"XPMEXT ') + 1 (for '"') */
+ size += strlen(ext->name) + 11;
+- a = ext->nlines;
++ a = ext->nlines; /* how can we trust ext->nlines to be not out-of-bounds? */
+ for (y = 0, line = ext->lines; y < a; y++, line++)
+ /* 4 = 3 (for ',\n"') + 1 (for '"') */
+ size += strlen(*line) + 4;
+ }
+ /* 13 is for ',\n"XPMENDEXT"' */
++ if(size > UINT_MAX - 13) /* unlikely */
++ return(0);
+ return size + 13;
+ }
+
+ static void
+-WriteExtensions(dataptr, used_size, ext, num)
++WriteExtensions(dataptr, data_size, used_size, ext, num)
+ char *dataptr;
++ unsigned int data_size;
+ unsigned int *used_size;
+ XpmExtension *ext;
+ unsigned int num;
+@@ -362,7 +409,7 @@
+ #ifndef VOID_SPRINTF
+ s +=
+ #endif
+- sprintf(s, ",\n\"XPMEXT %s\"", ext->name);
++ snprintf(s, data_size - (s-dataptr), ",\n\"XPMEXT %s\"", ext->name);
+ #ifdef VOID_SPRINTF
+ s += strlen(ext->name) + 11;
+ #endif
+@@ -371,13 +418,13 @@
+ #ifndef VOID_SPRINTF
+ s +=
+ #endif
+- sprintf(s, ",\n\"%s\"", *line);
++ snprintf(s, data_size - (s-dataptr), ",\n\"%s\"", *line);
+ #ifdef VOID_SPRINTF
+ s += strlen(*line) + 4;
+ #endif
+ }
+ }
+- strcpy(s, ",\n\"XPMENDEXT\"");
++ strncpy(s, ",\n\"XPMENDEXT\"", data_size - (s-dataptr)-1);
+ *used_size += s - dataptr + 13;
+ }
+
+@@ -388,6 +435,7 @@
+ int size = 0;
+
+ /* 5 = 2 (for "/_*") + 3 (for "*_/\n") */
++ /* wrap possible but *very* unlikely */
+ if (info->hints_cmt)
+ size += 5 + strlen(info->hints_cmt);
+
+Index: xc/extras/Xpm/lib/CrDatFrI.c
+diff -u xc/extras/Xpm/lib/CrDatFrI.c:1.2.4.1 xc/extras/Xpm/lib/CrDatFrI.c:1.2.4.2
+--- xc/extras/Xpm/lib/CrDatFrI.c:1.2.4.1 Wed Sep 15 15:47:39 2004
++++ xc/extras/Xpm/lib/CrDatFrI.c Fri Dec 17 01:09:36 2004
+@@ -33,13 +33,16 @@
+ \*****************************************************************************/
+ /* $XFree86$ */
+
++/* October 2004, source code review by Thomas Biege <thomas@suse.de> */
++
+ #include "XpmI.h"
+
+ LFUNC(CreateColors, int, (char **dataptr, unsigned int *data_size,
+ XpmColor *colors, unsigned int ncolors,
+ unsigned int cpp));
+
+-LFUNC(CreatePixels, void, (char **dataptr, unsigned int width,
++LFUNC(CreatePixels, void, (char **dataptr, unsigned int data_size,
++ unsigned int width,
+ unsigned int height, unsigned int cpp,
+ unsigned int *pixels, XpmColor *colors));
+
+@@ -47,7 +50,8 @@
+ unsigned int *ext_size,
+ unsigned int *ext_nlines));
+
+-LFUNC(CreateExtensions, void, (char **dataptr, unsigned int offset,
++LFUNC(CreateExtensions, void, (char **dataptr, unsigned int data_size,
++ unsigned int offset,
+ XpmExtension *ext, unsigned int num,
+ unsigned int ext_nlines));
+
+@@ -88,10 +92,11 @@
+
+ #undef RETURN
+ #define RETURN(status) \
++do \
+ { \
+ ErrorStatus = status; \
+ goto exit; \
+-}
++} while(0)
+
+ int
+ XpmCreateDataFromXpmImage(data_return, image, info)
+@@ -122,11 +127,17 @@
+ * alloc a temporary array of char pointer for the header section which
+ * is the hints line + the color table lines
+ */
+- header_nlines = 1 + image->ncolors;
++ header_nlines = 1 + image->ncolors; /* this may wrap and/or become 0 */
++
++ /* 2nd check superfluous if we do not need header_nlines any further */
++ if(header_nlines <= image->ncolors ||
++ header_nlines >= UINT_MAX / sizeof(char *))
++ return(XpmNoMemory);
++
+ header_size = sizeof(char *) * header_nlines;
+- if (header_size >= SIZE_MAX / sizeof(char *))
++ if (header_size >= UINT_MAX / sizeof(char *))
+ return (XpmNoMemory);
+- header = (char **) XpmCalloc(header_size, sizeof(char *));
++ header = (char **) XpmCalloc(header_size, sizeof(char *)); /* can we trust image->ncolors */
+ if (!header)
+ return (XpmNoMemory);
+
+@@ -170,8 +181,22 @@
+
+ /* now we know the size needed, alloc the data and copy the header lines */
+ offset = image->width * image->cpp + 1;
+- data_size = header_size + (image->height + ext_nlines) * sizeof(char *)
+- + image->height * offset + ext_size;
++
++ if(offset <= image->width || offset <= image->cpp)
++ RETURN(XpmNoMemory);
++
++ if( (image->height + ext_nlines) >= UINT_MAX / sizeof(char *))
++ RETURN(XpmNoMemory);
++ data_size = (image->height + ext_nlines) * sizeof(char *);
++
++ if (image->height > UINT_MAX / offset ||
++ image->height * offset > UINT_MAX - data_size)
++ RETURN(XpmNoMemory);
++ data_size += image->height * offset;
++
++ if( (header_size + ext_size) >= (UINT_MAX - data_size) )
++ RETURN(XpmNoMemory);
++ data_size += header_size + ext_size;
+
+ data = (char **) XpmMalloc(data_size);
+ if (!data)
+@@ -179,8 +204,10 @@
+
+ data_nlines = header_nlines + image->height + ext_nlines;
+ *data = (char *) (data + data_nlines);
++
++ /* can header have less elements then n suggests? */
+ n = image->ncolors;
+- for (l = 0, sptr = data, sptr2 = header; l <= n; l++, sptr++, sptr2++) {
++ for (l = 0, sptr = data, sptr2 = header; l <= n && sptr && sptr2; l++, sptr++, sptr2++) {
+ strcpy(*sptr, *sptr2);
+ *(sptr + 1) = *sptr + strlen(*sptr2) + 1;
+ }
+@@ -189,12 +216,13 @@
+ data[header_nlines] = (char *) data + header_size
+ + (image->height + ext_nlines) * sizeof(char *);
+
+- CreatePixels(data + header_nlines, image->width, image->height,
++ CreatePixels(data + header_nlines, data_size-header_nlines, image->width, image->height,
+ image->cpp, image->data, image->colorTable);
+
+ /* print extensions */
+ if (extensions)
+- CreateExtensions(data + header_nlines + image->height - 1, offset,
++ CreateExtensions(data + header_nlines + image->height - 1,
++ data_size - header_nlines - image->height + 1, offset,
+ info->extensions, info->nextensions,
+ ext_nlines);
+
+@@ -225,23 +253,34 @@
+ char *s, *s2;
+ char **defaults;
+
++ /* can ncolors be trusted here? */
+ for (a = 0; a < ncolors; a++, colors++, dataptr++) {
+
+ defaults = (char **) colors;
++ if(sizeof(buf) <= cpp)
++ return(XpmNoMemory);
+ strncpy(buf, *defaults++, cpp);
+ s = buf + cpp;
+
++ if(sizeof(buf) <= (s-buf))
++ return XpmNoMemory;
++
+ for (key = 1; key <= NKEYS; key++, defaults++) {
+ if ((s2 = *defaults)) {
+ #ifndef VOID_SPRINTF
+ s +=
+ #endif
+- sprintf(s, "\t%s %s", xpmColorKeys[key - 1], s2);
++ /* assume C99 compliance */
++ snprintf(s, sizeof(buf)-(s-buf), "\t%s %s", xpmColorKeys[key - 1], s2);
+ #ifdef VOID_SPRINTF
+ s += strlen(s);
+ #endif
++ /* does s point out-of-bounds? */
++ if(sizeof(buf) < (s-buf))
++ return XpmNoMemory;
+ }
+ }
++ /* what about using strdup()? */
+ l = s - buf + 1;
+ s = (char *) XpmMalloc(l);
+ if (!s)
+@@ -253,8 +292,9 @@
+ }
+
+ static void
+-CreatePixels(dataptr, width, height, cpp, pixels, colors)
++CreatePixels(dataptr, data_size, width, height, cpp, pixels, colors)
+ char **dataptr;
++ unsigned int data_size;
+ unsigned int width;
+ unsigned int height;
+ unsigned int cpp;
+@@ -264,21 +304,38 @@
+ char *s;
+ unsigned int x, y, h, offset;
+
++ if(height <= 1)
++ return;
++
+ h = height - 1;
++
+ offset = width * cpp + 1;
++
++ if(offset <= width || offset <= cpp)
++ return;
++
++ /* why trust h? */
+ for (y = 0; y < h; y++, dataptr++) {
+ s = *dataptr;
++ /* why trust width? */
+ for (x = 0; x < width; x++, pixels++) {
+- strncpy(s, colors[*pixels].string, cpp);
++ if(cpp > (data_size - (s - *dataptr)))
++ return;
++ strncpy(s, colors[*pixels].string, cpp); /* why trust pixel? */
+ s += cpp;
+ }
+ *s = '\0';
++ if(offset > data_size)
++ return;
+ *(dataptr + 1) = *dataptr + offset;
+ }
+ /* duplicate some code to avoid a test in the loop */
+ s = *dataptr;
++ /* why trust width? */
+ for (x = 0; x < width; x++, pixels++) {
+- strncpy(s, colors[*pixels].string, cpp);
++ if(cpp > data_size - (s - *dataptr))
++ return;
++ strncpy(s, colors[*pixels].string, cpp); /* why should we trust *pixel? */
+ s += cpp;
+ }
+ *s = '\0';
+@@ -311,8 +368,9 @@
+ }
+
+ static void
+-CreateExtensions(dataptr, offset, ext, num, ext_nlines)
++CreateExtensions(dataptr, data_size, offset, ext, num, ext_nlines)
+ char **dataptr;
++ unsigned int data_size;
+ unsigned int offset;
+ XpmExtension *ext;
+ unsigned int num;
+@@ -325,12 +383,12 @@
+ dataptr++;
+ a = 0;
+ for (x = 0; x < num; x++, ext++) {
+- sprintf(*dataptr, "XPMEXT %s", ext->name);
++ snprintf(*dataptr, data_size, "XPMEXT %s", ext->name);
+ a++;
+ if (a < ext_nlines)
+ *(dataptr + 1) = *dataptr + strlen(ext->name) + 8;
+ dataptr++;
+- b = ext->nlines;
++ b = ext->nlines; /* can we trust these values? */
+ for (y = 0, line = ext->lines; y < b; y++, line++) {
+ strcpy(*dataptr, *line);
+ a++;
+Index: xc/extras/Xpm/lib/RdFToBuf.c
+diff -u xc/extras/Xpm/lib/RdFToBuf.c:1.1.1.1 xc/extras/Xpm/lib/RdFToBuf.c:1.1.1.1.6.1
+--- xc/extras/Xpm/lib/RdFToBuf.c:1.1.1.1 Fri Nov 14 16:48:24 2003
++++ xc/extras/Xpm/lib/RdFToBuf.c Fri Dec 17 01:09:36 2004
+@@ -37,6 +37,8 @@
+ * HeDu (hedu@cul-ipn.uni-kiel.de) 4/94
+ */
+
++/* October 2004, source code review by Thomas Biege <thomas@suse.de> */
++
+ #include "XpmI.h"
+ #include <sys/stat.h>
+ #if !defined(FOR_MSW) && !defined(WIN32)
+@@ -58,7 +60,8 @@
+ char *filename;
+ char **buffer_return;
+ {
+- int fd, fcheck, len;
++ int fd, fcheck;
++ off_t len;
+ char *ptr;
+ struct stat stats;
+ FILE *fp;
+@@ -82,7 +85,7 @@
+ close(fd);
+ return XpmOpenFailed;
+ }
+- len = (int) stats.st_size;
++ len = stats.st_size;
+ ptr = (char *) XpmMalloc(len + 1);
+ if (!ptr) {
+ fclose(fp);
+Index: xc/extras/Xpm/lib/RdFToI.c
+diff -u xc/extras/Xpm/lib/RdFToI.c:1.2 xc/extras/Xpm/lib/RdFToI.c:1.2.4.1
+--- xc/extras/Xpm/lib/RdFToI.c:1.2 Fri Apr 23 18:42:32 2004
++++ xc/extras/Xpm/lib/RdFToI.c Fri Dec 17 01:09:36 2004
+@@ -33,16 +33,14 @@
+ \*****************************************************************************/
+ /* $XFree86$ */
+
++/* October 2004, source code review by Thomas Biege <thomas@suse.de> */
++
+ #include "XpmI.h"
+-#include <sys/stat.h>
+-#if !defined(NO_ZPIPE) && defined(WIN32)
+-# define popen _popen
+-# define pclose _pclose
+-# if defined(STAT_ZFILE)
+-# include <io.h>
+-# define stat _stat
+-# define fstat _fstat
+-# endif
++#ifndef NO_ZPIPE
++#include <fcntl.h>
++#include <errno.h>
++#include <sys/types.h>
++#include <sys/wait.h>
+ #endif
+
+ LFUNC(OpenReadFile, int, (char *filename, xpmData *mdata));
+@@ -120,6 +118,67 @@
+ }
+ #endif /* CXPMPROG */
+
++#ifndef NO_ZPIPE
++/* Do not depend on errno after read_through */
++FILE*
++xpmPipeThrough(fd, cmd, arg1, mode)
++ int fd;
++ const char* cmd;
++ const char* arg1;
++ const char* mode;
++{
++ FILE* fp;
++ int status, fds[2], in = 0, out = 1;
++ pid_t pid;
++ if ( 'w' == *mode )
++ out = 0, in = 1;
++ if ( pipe(fds) < 0 )
++ return NULL;
++ pid = fork();
++ if ( pid < 0 )
++ goto fail1;
++ if ( 0 == pid )
++ {
++ close(fds[in]);
++ if ( dup2(fds[out], out) < 0 )
++ goto err;
++ close(fds[out]);
++ if ( dup2(fd, in) < 0 )
++ goto err;
++ close(fd);
++ pid = fork();
++ if ( pid < 0 )
++ goto err;
++ if ( 0 == pid )
++ {
++ execlp(cmd, cmd, arg1, NULL);
++ perror(cmd);
++ goto err;
++ }
++ _exit(0);
++ err:
++ _exit(1);
++ }
++ close(fds[out]);
++ /* calling process: wait for first child */
++ while ( waitpid(pid, &status, 0) < 0 && EINTR == errno )
++ ;
++ if ( WIFSIGNALED(status) ||
++ (WIFEXITED(status) && WEXITSTATUS(status) != 0) )
++ goto fail2;
++ fp = fdopen(fds[in], mode);
++ if ( !fp )
++ goto fail2;
++ close(fd); /* still open in 2nd child */
++ return fp;
++fail1:
++ close(fds[out]);
++fail2:
++ close(fds[in]);
++ return NULL;
++}
++#endif
++
+ /*
+ * open the given file to be read as an xpmData which is returned.
+ */
+@@ -128,72 +187,62 @@
+ char *filename;
+ xpmData *mdata;
+ {
+-#ifndef NO_ZPIPE
+- char buf[BUFSIZ];
+-# ifdef STAT_ZFILE
+- char *compressfile;
+- struct stat status;
+-# endif
+-#endif
+-
+ if (!filename) {
+ mdata->stream.file = (stdin);
+ mdata->type = XPMFILE;
+ } else {
+-#ifndef NO_ZPIPE
+- int len = strlen(filename);
+- if ((len > 2) && !strcmp(".Z", filename + (len - 2))) {
+- mdata->type = XPMPIPE;
+- sprintf(buf, "uncompress -c \"%s\"", filename);
+- if (!(mdata->stream.file = popen(buf, "r")))
+- return (XpmOpenFailed);
+-
+- } else if ((len > 3) && !strcmp(".gz", filename + (len - 3))) {
+- mdata->type = XPMPIPE;
+- sprintf(buf, "gunzip -qc \"%s\"", filename);
+- if (!(mdata->stream.file = popen(buf, "r")))
+- return (XpmOpenFailed);
+-
+- } else {
+-# ifdef STAT_ZFILE
+- if (!(compressfile = (char *) XpmMalloc(len + 4)))
++ int fd = open(filename, O_RDONLY);
++#if defined(NO_ZPIPE)
++ if ( fd < 0 )
++ return XpmOpenFailed;
++#else
++ const char* ext = NULL;
++ if ( fd >= 0 )
++ ext = strrchr(filename, '.');
++#ifdef STAT_ZFILE /* searching for z-files if the given name not found */
++ else
++ {
++ size_t len = strlen(filename);
++ char *compressfile = (char *) XpmMalloc(len + 4);
++ if ( !compressfile )
+ return (XpmNoMemory);
+-
+- sprintf(compressfile, "%s.Z", filename);
+- if (!stat(compressfile, &status)) {
+- sprintf(buf, "uncompress -c \"%s\"", compressfile);
+- if (!(mdata->stream.file = popen(buf, "r"))) {
++ strcpy(compressfile, filename);
++ strcpy(compressfile + len, ext = ".Z");
++ fd = open(compressfile, O_RDONLY);
++ if ( fd < 0 )
++ {
++ strcpy(compressfile + len, ext = ".gz");
++ fd = open(compressfile, O_RDONLY);
++ if ( fd < 0 )
++ {
+ XpmFree(compressfile);
+- return (XpmOpenFailed);
+- }
+- mdata->type = XPMPIPE;
+- } else {
+- sprintf(compressfile, "%s.gz", filename);
+- if (!stat(compressfile, &status)) {
+- sprintf(buf, "gunzip -c \"%s\"", compressfile);
+- if (!(mdata->stream.file = popen(buf, "r"))) {
+- XpmFree(compressfile);
+- return (XpmOpenFailed);
+- }
+- mdata->type = XPMPIPE;
+- } else {
+-# endif
+-#endif
+- if (!(mdata->stream.file = fopen(filename, "r"))) {
+-#if !defined(NO_ZPIPE) && defined(STAT_ZFILE)
+- XpmFree(compressfile);
+-#endif
+- return (XpmOpenFailed);
+- }
+- mdata->type = XPMFILE;
+-#ifndef NO_ZPIPE
+-# ifdef STAT_ZFILE
++ return XpmOpenFailed;
+ }
+ }
+ XpmFree(compressfile);
+-# endif
+ }
+ #endif
++ if ( ext && !strcmp(ext, ".Z") )
++ {
++ mdata->type = XPMPIPE;
++ mdata->stream.file = xpmPipeThrough(fd, "uncompress", "-c", "r");
++ }
++ else if ( ext && !strcmp(ext, ".gz") )
++ {
++ mdata->type = XPMPIPE;
++ mdata->stream.file = xpmPipeThrough(fd, "gunzip", "-qc", "r");
++ }
++ else
++#endif /* z-files */
++ {
++ mdata->type = XPMFILE;
++ mdata->stream.file = fdopen(fd, "r");
++ }
++ if (!mdata->stream.file)
++ {
++ close(fd);
++ return (XpmOpenFailed);
++ }
+ }
+ mdata->CommentLength = 0;
+ #ifdef CXPMPROG
+@@ -210,15 +259,6 @@
+ xpmDataClose(mdata)
+ xpmData *mdata;
+ {
+- switch (mdata->type) {
+- case XPMFILE:
+- if (mdata->stream.file != (stdin))
+- fclose(mdata->stream.file);
+- break;
+-#ifndef NO_ZPIPE
+- case XPMPIPE:
+- pclose(mdata->stream.file);
+- break;
+-#endif
+- }
++ if (mdata->stream.file != (stdin))
++ fclose(mdata->stream.file);
+ }
+Index: xc/extras/Xpm/lib/WrFFrBuf.c
+diff -u xc/extras/Xpm/lib/WrFFrBuf.c:1.1.1.1 xc/extras/Xpm/lib/WrFFrBuf.c:1.1.1.1.6.1
+--- xc/extras/Xpm/lib/WrFFrBuf.c:1.1.1.1 Fri Nov 14 16:48:24 2003
++++ xc/extras/Xpm/lib/WrFFrBuf.c Fri Dec 17 01:09:36 2004
+@@ -32,6 +32,8 @@
+ * Developed by Arnaud Le Hors *
+ \*****************************************************************************/
+
++/* October 2004, source code review by Thomas Biege <thomas@suse.de> */
++
+ #include "XpmI.h"
+
+ int
+@@ -49,7 +51,7 @@
+ fcheck = fwrite(buffer, len, 1, fp);
+ fclose(fp);
+ if (fcheck != 1)
+- return XpmOpenFailed;
++ return XpmOpenFailed; /* maybe use a better return value */
+
+ return XpmSuccess;
+ }
+Index: xc/extras/Xpm/lib/WrFFrI.c
+diff -u xc/extras/Xpm/lib/WrFFrI.c:1.2.4.1 xc/extras/Xpm/lib/WrFFrI.c:1.2.4.2
+--- xc/extras/Xpm/lib/WrFFrI.c:1.2.4.1 Wed Sep 15 15:47:39 2004
++++ xc/extras/Xpm/lib/WrFFrI.c Fri Dec 17 01:09:36 2004
+@@ -39,9 +39,13 @@
+ */
+
+ #include "XpmI.h"
+-#if !defined(NO_ZPIPE) && defined(WIN32)
+-# define popen _popen
+-# define pclose _pclose
++
++#ifndef NO_ZPIPE
++#include "sys/wait.h"
++#include "sys/types.h"
++#include "fcntl.h"
++#include "unistd.h"
++#include "errno.h"
+ #endif
+
+ /* MS Windows define a function called WriteFile @#%#&!!! */
+@@ -98,7 +102,7 @@
+ XpmInfo *info;
+ {
+ xpmData mdata;
+- char *name, *dot, *s, new_name[BUFSIZ];
++ char *name, *dot, *s, new_name[BUFSIZ] = {0};
+ int ErrorStatus;
+
+ /* open file to write */
+@@ -121,7 +125,8 @@
+ #endif
+ /* let's try to make a valid C syntax name */
+ if (index(name, '.')) {
+- strcpy(new_name, name);
++ strncpy(new_name, name, sizeof(new_name));
++ new_name[sizeof(new_name)-1] = '\0';
+ /* change '.' to '_' */
+ name = s = new_name;
+ while ((dot = index(s, '.'))) {
+@@ -248,7 +253,7 @@
+ unsigned int x, y, h;
+
+ h = height - 1;
+- if (cpp != 0 && width >= (SIZE_MAX - 3)/cpp)
++ if (cpp != 0 && width >= (UINT_MAX - 3)/cpp)
+ return XpmNoMemory;
+ p = buf = (char *) XpmMalloc(width * cpp + 3);
+ if (!buf)
+@@ -297,6 +302,14 @@
+ fprintf(file, ",\n\"XPMENDEXT\"");
+ }
+
++
++#ifndef NO_ZPIPE
++FUNC(xpmPipeThrough, FILE*, (int fd,
++ const char* cmd,
++ const char* arg1,
++ const char* mode));
++#endif
++
+ /*
+ * open the given file to be written as an xpmData which is returned
+ */
+@@ -305,38 +318,32 @@
+ char *filename;
+ xpmData *mdata;
+ {
+-#ifndef NO_ZPIPE
+- char buf[BUFSIZ];
+-
+-#endif
+-
+ if (!filename) {
+ mdata->stream.file = (stdout);
+ mdata->type = XPMFILE;
+ } else {
+ #ifndef NO_ZPIPE
+- int len = strlen(filename);
++ size_t len;
++#endif
++ int fd = open(filename, O_WRONLY|O_CREAT|O_TRUNC, 0644);
++ if ( fd < 0 )
++ return(XpmOpenFailed);
++#ifndef NO_ZPIPE
++ len = strlen(filename);
+ if (len > 2 && !strcmp(".Z", filename + (len - 2))) {
+- sprintf(buf, "compress > \"%s\"", filename);
+- if (!(mdata->stream.file = popen(buf, "w")))
+- return (XpmOpenFailed);
+-
++ mdata->stream.file = xpmPipeThrough(fd, "compress", NULL, "w");
+ mdata->type = XPMPIPE;
+ } else if (len > 3 && !strcmp(".gz", filename + (len - 3))) {
+- sprintf(buf, "gzip -q > \"%s\"", filename);
+- if (!(mdata->stream.file = popen(buf, "w")))
+- return (XpmOpenFailed);
+-
++ mdata->stream.file = xpmPipeThrough(fd, "gzip", "-q", "w");
+ mdata->type = XPMPIPE;
+- } else {
++ } else
+ #endif
+- if (!(mdata->stream.file = fopen(filename, "w")))
+- return (XpmOpenFailed);
+-
++ {
++ mdata->stream.file = fdopen(fd, "w");
+ mdata->type = XPMFILE;
+-#ifndef NO_ZPIPE
+ }
+-#endif
++ if (!mdata->stream.file)
++ return (XpmOpenFailed);
+ }
+ return (XpmSuccess);
+ }
+@@ -348,15 +355,7 @@
+ xpmDataClose(mdata)
+ xpmData *mdata;
+ {
+- switch (mdata->type) {
+- case XPMFILE:
+- if (mdata->stream.file != (stdout))
+- fclose(mdata->stream.file);
+- break;
+-#ifndef NO_ZPIPE
+- case XPMPIPE:
+- pclose(mdata->stream.file);
+- break;
+-#endif
+- }
++ if (mdata->stream.file != (stdout))
++ fclose(mdata->stream.file);
+ }
++
+Index: xc/extras/Xpm/lib/XpmI.h
+diff -u xc/extras/Xpm/lib/XpmI.h:1.2.4.1 xc/extras/Xpm/lib/XpmI.h:1.2.4.2
+--- xc/extras/Xpm/lib/XpmI.h:1.2.4.1 Wed Sep 15 15:47:39 2004
++++ xc/extras/Xpm/lib/XpmI.h Fri Dec 17 01:09:36 2004
+@@ -49,8 +49,10 @@
+ * lets try to solve include files
+ */
+
++#include <sys/types.h>
+ #include <stdio.h>
+ #include <stdlib.h>
++#include <limits.h>
+ /* stdio.h doesn't declare popen on a Sequent DYNIX OS */
+ #ifdef sequent
+ extern FILE *popen();
+Index: xc/extras/Xpm/lib/create.c
+diff -u xc/extras/Xpm/lib/create.c:1.2.4.1 xc/extras/Xpm/lib/create.c:1.2.4.2
+--- xc/extras/Xpm/lib/create.c:1.2.4.1 Wed Sep 15 15:47:39 2004
++++ xc/extras/Xpm/lib/create.c Fri Dec 17 01:09:36 2004
+@@ -1,4 +1,4 @@
+-/* $XdotOrg: xc/extras/Xpm/lib/create.c,v 1.2.4.1 2004/09/15 15:47:39 daniel Exp $ */
++/* $XdotOrg: xc/extras/Xpm/lib/create.c,v 1.2.4.2 2004/12/17 01:09:36 gisburn Exp $ */
+ /*
+ * Copyright (C) 1989-95 GROUPE BULL
+ *
+@@ -45,6 +45,8 @@
+ * Lorens Younes (d93-hyo@nada.kth.se) 4/96
+ */
+
++/* October 2004, source code review by Thomas Biege <thomas@suse.de> */
++
+ #include "XpmI.h"
+ #include <ctype.h>
+
+@@ -586,7 +588,7 @@
+ */
+ } else {
+ #endif
+- int i;
++ unsigned int i;
+
+ #ifndef AMIGA
+ ncols = visual->map_entries;
+@@ -746,12 +748,14 @@
+
+
+ /* function call in case of error */
++
+ #undef RETURN
+ #define RETURN(status) \
++do \
+ { \
+ ErrorStatus = status; \
+ goto error; \
+-}
++} while(0)
+
+ int
+ XpmCreateImageFromXpmImage(display, image,
+@@ -817,7 +821,7 @@
+
+ ErrorStatus = XpmSuccess;
+
+- if (image->ncolors >= SIZE_MAX / sizeof(Pixel))
++ if (image->ncolors >= UINT_MAX / sizeof(Pixel))
+ return (XpmNoMemory);
+
+ /* malloc pixels index tables */
+@@ -992,9 +996,13 @@
+ return (XpmNoMemory);
+
+ #if !defined(FOR_MSW) && !defined(AMIGA)
+- if (height != 0 && (*image_return)->bytes_per_line >= SIZE_MAX / height)
++ if (height != 0 && (*image_return)->bytes_per_line >= INT_MAX / height) {
++ XDestroyImage(*image_return);
+ return XpmNoMemory;
++ }
+ /* now that bytes_per_line must have been set properly alloc data */
++ if((*image_return)->bytes_per_line == 0 || height == 0)
++ return XpmNoMemory;
+ (*image_return)->data =
+ (char *) XpmMalloc((*image_return)->bytes_per_line * height);
+
+@@ -1023,7 +1031,7 @@
+ LFUNC(_putbits, void, (register char *src, int dstoffset,
+ register int numbits, register char *dst));
+
+-LFUNC(_XReverse_Bytes, int, (register unsigned char *bpt, register int nb));
++LFUNC(_XReverse_Bytes, int, (register unsigned char *bpt, register unsigned int nb));
+
+ static unsigned char Const _reverse_byte[0x100] = {
+ 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
+@@ -1063,12 +1071,12 @@
+ static int
+ _XReverse_Bytes(bpt, nb)
+ register unsigned char *bpt;
+- register int nb;
++ register unsigned int nb;
+ {
+ do {
+ *bpt = _reverse_byte[*bpt];
+ bpt++;
+- } while (--nb > 0);
++ } while (--nb > 0); /* is nb user-controled? */
+ return 0;
+ }
+
+@@ -1207,7 +1215,7 @@
+ register char *src;
+ register char *dst;
+ register unsigned int *iptr;
+- register int x, y, i;
++ register unsigned int x, y, i;
+ register char *data;
+ Pixel pixel, px;
+ int nbytes, depth, ibu, ibpp;
+@@ -1217,8 +1225,8 @@
+ depth = image->depth;
+ if (depth == 1) {
+ ibu = image->bitmap_unit;
+- for (y = 0; y < height; y++)
+- for (x = 0; x < width; x++, iptr++) {
++ for (y = 0; y < height; y++) /* how can we trust height */
++ for (x = 0; x < width; x++, iptr++) { /* how can we trust width */
+ pixel = pixels[*iptr];
+ for (i = 0, px = pixel; i < sizeof(unsigned long);
+ i++, px >>= 8)
+@@ -1293,12 +1301,12 @@
+ {
+ unsigned char *data;
+ unsigned int *iptr;
+- int y;
++ unsigned int y;
+ Pixel pixel;
+
+ #ifdef WITHOUT_SPEEDUPS
+
+- int x;
++ unsigned int x;
+ unsigned char *addr;
+
+ data = (unsigned char *) image->data;
+@@ -1335,7 +1343,7 @@
+
+ #else /* WITHOUT_SPEEDUPS */
+
+- int bpl = image->bytes_per_line;
++ unsigned int bpl = image->bytes_per_line;
+ unsigned char *data_ptr, *max_data;
+
+ data = (unsigned char *) image->data;
+@@ -1403,11 +1411,11 @@
+ {
+ unsigned char *data;
+ unsigned int *iptr;
+- int y;
++ unsigned int y;
+
+ #ifdef WITHOUT_SPEEDUPS
+
+- int x;
++ unsigned int x;
+ unsigned char *addr;
+
+ data = (unsigned char *) image->data;
+@@ -1431,7 +1439,7 @@
+
+ Pixel pixel;
+
+- int bpl = image->bytes_per_line;
++ unsigned int bpl = image->bytes_per_line;
+ unsigned char *data_ptr, *max_data;
+
+ data = (unsigned char *) image->data;
+@@ -1484,11 +1492,11 @@
+ {
+ char *data;
+ unsigned int *iptr;
+- int y;
++ unsigned int y;
+
+ #ifdef WITHOUT_SPEEDUPS
+
+- int x;
++ unsigned int x;
+
+ data = image->data;
+ iptr = pixelindex;
+@@ -1498,7 +1506,7 @@
+
+ #else /* WITHOUT_SPEEDUPS */
+
+- int bpl = image->bytes_per_line;
++ unsigned int bpl = image->bytes_per_line;
+ char *data_ptr, *max_data;
+
+ data = image->data;
+@@ -1533,12 +1541,12 @@
+ PutImagePixels(image, width, height, pixelindex, pixels);
+ else {
+ unsigned int *iptr;
+- int y;
++ unsigned int y;
+ char *data;
+
+ #ifdef WITHOUT_SPEEDUPS
+
+- int x;
++ unsigned int x;
+
+ data = image->data;
+ iptr = pixelindex;
+@@ -1761,6 +1769,9 @@
+ Pixel px;
+ int nbytes;
+
++ if(x < 0 || y < 0)
++ return 0;
++
+ for (i=0, px=pixel; i<sizeof(unsigned long); i++, px>>=8)
+ ((unsigned char *)&pixel)[i] = px;
+ src = &ximage->data[XYINDEX(x, y, ximage)];
+@@ -1791,7 +1802,10 @@
+ register char *dst;
+ register int i;
+ Pixel px;
+- int nbytes, ibpp;
++ unsigned int nbytes, ibpp;
++
++ if(x < 0 || y < 0)
++ return 0;
+
+ ibpp = ximage->bits_per_pixel;
+ if (ximage->depth == 4)
+@@ -1825,6 +1839,9 @@
+ {
+ unsigned char *addr;
+
++ if(x < 0 || y < 0)
++ return 0;
++
+ addr = &((unsigned char *)ximage->data) [ZINDEX32(x, y, ximage)];
+ *((unsigned long *)addr) = pixel;
+ return 1;
+@@ -1840,6 +1857,9 @@
+ {
+ unsigned char *addr;
+
++ if(x < 0 || y < 0)
++ return 0;
++
+ addr = &((unsigned char *)ximage->data) [ZINDEX32(x, y, ximage)];
+ addr[0] = pixel >> 24;
+ addr[1] = pixel >> 16;
+@@ -1857,6 +1877,9 @@
+ {
+ unsigned char *addr;
+
++ if(x < 0 || y < 0)
++ return 0;
++
+ addr = &((unsigned char *)ximage->data) [ZINDEX32(x, y, ximage)];
+ addr[3] = pixel >> 24;
+ addr[2] = pixel >> 16;
+@@ -1874,6 +1897,9 @@
+ {
+ unsigned char *addr;
+
++ if(x < 0 || y < 0)
++ return 0;
++
+ addr = &((unsigned char *)ximage->data) [ZINDEX16(x, y, ximage)];
+ addr[0] = pixel >> 8;
+ addr[1] = pixel;
+@@ -1889,6 +1915,9 @@
+ {
+ unsigned char *addr;
+
++ if(x < 0 || y < 0)
++ return 0;
++
+ addr = &((unsigned char *)ximage->data) [ZINDEX16(x, y, ximage)];
+ addr[1] = pixel >> 8;
+ addr[0] = pixel;
+@@ -1902,6 +1931,9 @@
+ int y;
+ unsigned long pixel;
+ {
++ if(x < 0 || y < 0)
++ return 0;
++
+ ximage->data[ZINDEX8(x, y, ximage)] = pixel;
+ return 1;
+ }
+@@ -1913,6 +1945,9 @@
+ int y;
+ unsigned long pixel;
+ {
++ if(x < 0 || y < 0)
++ return 0;
++
+ if (pixel & 1)
+ ximage->data[ZINDEX1(x, y, ximage)] |= 0x80 >> (x & 7);
+ else
+@@ -1927,6 +1962,9 @@
+ int y;
+ unsigned long pixel;
+ {
++ if(x < 0 || y < 0)
++ return 0;
++
+ if (pixel & 1)
+ ximage->data[ZINDEX1(x, y, ximage)] |= 1 << (x & 7);
+ else
+@@ -2061,8 +2099,8 @@
+ xpmGetCmt(data, &colors_cmt);
+
+ /* malloc pixels index tables */
+- if (ncolors >= SIZE_MAX / sizeof(Pixel))
+- return XpmNoMemory;
++ if (ncolors >= UINT_MAX / sizeof(Pixel))
++ RETURN(XpmNoMemory);
+
+ image_pixels = (Pixel *) XpmMalloc(sizeof(Pixel) * ncolors);
+ if (!image_pixels)
+@@ -2174,7 +2212,7 @@
+ * free the hastable
+ */
+ if (ErrorStatus != XpmSuccess)
+- RETURN(ErrorStatus)
++ RETURN(ErrorStatus);
+ else if (USE_HASHTABLE)
+ xpmHashTableFree(&hashtable);
+
+@@ -2366,11 +2404,11 @@
+
+ /* array of pointers malloced by need */
+ unsigned short *cidx[256];
+- int char1;
++ unsigned int char1;
+
+ bzero((char *)cidx, 256 * sizeof(unsigned short *)); /* init */
+ for (a = 0; a < ncolors; a++) {
+- char1 = colorTable[a].string[0];
++ char1 = (unsigned char) colorTable[a].string[0];
+ if (cidx[char1] == NULL) { /* get new memory */
+ cidx[char1] = (unsigned short *)
+ XpmCalloc(256, sizeof(unsigned short));
+Index: xc/extras/Xpm/lib/data.c
+diff -u xc/extras/Xpm/lib/data.c:1.2.4.1 xc/extras/Xpm/lib/data.c:1.2.4.2
+--- xc/extras/Xpm/lib/data.c:1.2.4.1 Wed Sep 15 15:47:39 2004
++++ xc/extras/Xpm/lib/data.c Fri Dec 17 01:09:36 2004
+@@ -33,6 +33,8 @@
+ \*****************************************************************************/
+ /* $XFree86: xc/extras/Xpm/lib/data.c,v 1.3 2001/10/28 03:32:10 tsi Exp $ */
+
++/* October 2004, source code review by Thomas Biege <thomas@suse.de> */
++
+ #ifndef CXPMPROG
+ #if 0
+ /* Official version number */
+@@ -262,7 +264,7 @@
+ }
+ Ungetc(data, c, file);
+ }
+- return (n);
++ return (n); /* this returns bytes read + 1 */
+ }
+
+ /*
+@@ -375,8 +377,9 @@
+ {
+ if (!data->type)
+ *cmt = NULL;
+- else if (data->CommentLength != 0 && data->CommentLength < SIZE_MAX - 1) {
+- *cmt = (char *) XpmMalloc(data->CommentLength + 1);
++ else if (data->CommentLength != 0 && data->CommentLength < UINT_MAX - 1) {
++ if( (*cmt = (char *) XpmMalloc(data->CommentLength + 1)) == NULL)
++ return XpmNoMemory;
+ strncpy(*cmt, data->Comment, data->CommentLength);
+ (*cmt)[data->CommentLength] = '\0';
+ data->CommentLength = 0;
+@@ -400,7 +403,7 @@
+ xpmParseHeader(data)
+ xpmData *data;
+ {
+- char buf[BUFSIZ];
++ char buf[BUFSIZ+1] = {0};
+ int l, n = 0;
+
+ if (data->type) {
+Index: xc/extras/Xpm/lib/hashtab.c
+diff -u xc/extras/Xpm/lib/hashtab.c:1.1.1.1.6.1 xc/extras/Xpm/lib/hashtab.c:1.1.1.1.6.2
+--- xc/extras/Xpm/lib/hashtab.c:1.1.1.1.6.1 Wed Sep 15 15:47:39 2004
++++ xc/extras/Xpm/lib/hashtab.c Fri Dec 17 01:09:36 2004
+@@ -138,13 +138,13 @@
+ unsigned int size = table->size;
+ xpmHashAtom *t, *p;
+ int i;
+- int oldSize = size;
++ unsigned int oldSize = size;
+
+ t = atomTable;
+ HASH_TABLE_GROWS
+ table->size = size;
+ table->limit = size / 3;
+- if (size >= SIZE_MAX / sizeof(*atomTable))
++ if (size >= UINT_MAX / sizeof(*atomTable))
+ return (XpmNoMemory);
+ atomTable = (xpmHashAtom *) XpmMalloc(size * sizeof(*atomTable));
+ if (!atomTable)
+@@ -206,7 +206,7 @@
+ table->size = INITIAL_HASH_SIZE;
+ table->limit = table->size / 3;
+ table->used = 0;
+- if (table->size >= SIZE_MAX / sizeof(*atomTable))
++ if (table->size >= UINT_MAX / sizeof(*atomTable))
+ return (XpmNoMemory);
+ atomTable = (xpmHashAtom *) XpmMalloc(table->size * sizeof(*atomTable));
+ if (!atomTable)
+Index: xc/extras/Xpm/lib/misc.c
+diff -u xc/extras/Xpm/lib/misc.c:1.1.1.1 xc/extras/Xpm/lib/misc.c:1.1.1.1.6.1
+--- xc/extras/Xpm/lib/misc.c:1.1.1.1 Fri Nov 14 16:48:24 2003
++++ xc/extras/Xpm/lib/misc.c Fri Dec 17 01:09:36 2004
+@@ -44,7 +44,7 @@
+ char *s1;
+ {
+ char *s2;
+- int l = strlen(s1) + 1;
++ size_t l = strlen(s1) + 1;
+
+ if (s2 = (char *) XpmMalloc(l))
+ strcpy(s2, s1);
+Index: xc/extras/Xpm/lib/parse.c
+diff -u xc/extras/Xpm/lib/parse.c:1.2.4.1 xc/extras/Xpm/lib/parse.c:1.2.4.2
+--- xc/extras/Xpm/lib/parse.c:1.2.4.1 Wed Sep 15 15:47:39 2004
++++ xc/extras/Xpm/lib/parse.c Fri Dec 17 01:09:36 2004
+@@ -1,4 +1,4 @@
+-/* $XdotOrg: xc/extras/Xpm/lib/parse.c,v 1.2.4.1 2004/09/15 15:47:39 daniel Exp $ */
++/* $XdotOrg: xc/extras/Xpm/lib/parse.c,v 1.2.4.2 2004/12/17 01:09:36 gisburn Exp $ */
+ /*
+ * Copyright (C) 1989-95 GROUPE BULL
+ *
+@@ -41,26 +41,28 @@
+ * HeDu (hedu@cul-ipn.uni-kiel.de) 4/94
+ */
+
++/* October 2004, source code review by Thomas Biege <thomas@suse.de> */
++
+ #include "XpmI.h"
+ #include <ctype.h>
+ #include <string.h>
+
+ #ifdef HAS_STRLCAT
+-# define STRLCAT(dst, src, dstsize) { \
++# define STRLCAT(dst, src, dstsize) do { \
+ if (strlcat(dst, src, dstsize) >= (dstsize)) \
+- return (XpmFileInvalid); }
+-# define STRLCPY(dst, src, dstsize) { \
++ return (XpmFileInvalid); } while(0)
++# define STRLCPY(dst, src, dstsize) do { \
+ if (strlcpy(dst, src, dstsize) >= (dstsize)) \
+- return (XpmFileInvalid); }
++ return (XpmFileInvalid); } while(0)
+ #else
+-# define STRLCAT(dst, src, dstsize) { \
++# define STRLCAT(dst, src, dstsize) do { \
+ if ((strlen(dst) + strlen(src)) < (dstsize)) \
+ strcat(dst, src); \
+- else return (XpmFileInvalid); }
+-# define STRLCPY(dst, src, dstsize) { \
++ else return (XpmFileInvalid); } while(0)
++# define STRLCPY(dst, src, dstsize) do { \
+ if (strlen(src) < (dstsize)) \
+ strcpy(dst, src); \
+- else return (XpmFileInvalid); }
++ else return (XpmFileInvalid); } while(0)
+ #endif
+
+ LFUNC(ParsePixels, int, (xpmData *data, unsigned int width,
+@@ -205,7 +207,7 @@
+ char **defaults;
+ int ErrorStatus;
+
+- if (ncolors >= SIZE_MAX / sizeof(XpmColor))
++ if (ncolors >= UINT_MAX / sizeof(XpmColor))
+ return (XpmNoMemory);
+ colorTable = (XpmColor *) XpmCalloc(ncolors, sizeof(XpmColor));
+ if (!colorTable)
+@@ -218,7 +220,7 @@
+ /*
+ * read pixel value
+ */
+- if (cpp >= SIZE_MAX - 1) {
++ if (cpp >= UINT_MAX - 1) {
+ xpmFreeColorTable(colorTable, ncolors);
+ return (XpmNoMemory);
+ }
+@@ -277,9 +279,9 @@
+ return (XpmFileInvalid);
+ }
+ if (!lastwaskey)
+- STRLCAT(curbuf, " ", sizeof(curbuf)); /* append space */
++ STRLCAT(curbuf, " ", sizeof(curbuf));/* append space */
+ buf[l] = '\0';
+- STRLCAT(curbuf, buf, sizeof(curbuf));/* append buf */
++ STRLCAT(curbuf, buf, sizeof(curbuf)); /* append buf */
+ lastwaskey = 0;
+ }
+ }
+@@ -287,7 +289,7 @@
+ xpmFreeColorTable(colorTable, ncolors);
+ return (XpmFileInvalid);
+ }
+- len = strlen(curbuf) + 1;
++ len = strlen(curbuf) + 1; /* integer overflow just theoretically possible */
+ s = defaults[curkey] = (char *) XpmMalloc(len);
+ if (!s) {
+ xpmFreeColorTable(colorTable, ncolors);
+@@ -306,7 +308,7 @@
+ /*
+ * read pixel value
+ */
+- if (cpp >= SIZE_MAX - 1) {
++ if (cpp >= UINT_MAX - 1) {
+ xpmFreeColorTable(colorTable, ncolors);
+ return (XpmNoMemory);
+ }
+@@ -351,7 +353,7 @@
+ memcpy(s, curbuf, len);
+ color->c_color = s;
+ *curbuf = '\0'; /* reset curbuf */
+- if (a < ncolors - 1)
++ if (a < ncolors - 1) /* can we trust ncolors -> leave data's bounds */
+ xpmNextString(data); /* get to the next string */
+ }
+ }
+@@ -370,11 +372,11 @@
+ xpmHashTable *hashtable;
+ unsigned int **pixels;
+ {
+- unsigned int *iptr, *iptr2;
++ unsigned int *iptr, *iptr2 = NULL; /* found by Egbert Eich */
+ unsigned int a, x, y;
+
+- if ((height > 0 && width >= SIZE_MAX / height) ||
+- width * height >= SIZE_MAX / sizeof(unsigned int))
++ if ((height > 0 && width >= UINT_MAX / height) ||
++ width * height >= UINT_MAX / sizeof(unsigned int))
+ return XpmNoMemory;
+ #ifndef FOR_MSW
+ iptr2 = (unsigned int *) XpmMalloc(sizeof(unsigned int) * width * height);
+@@ -399,8 +401,10 @@
+ {
+ unsigned short colidx[256];
+
+- if (ncolors > 256)
++ if (ncolors > 256) {
++ XpmFree(iptr2); /* found by Egbert Eich */
+ return (XpmFileInvalid);
++ }
+
+ bzero((char *)colidx, 256 * sizeof(short));
+ for (a = 0; a < ncolors; a++)
+@@ -427,16 +431,20 @@
+ {
+
+ /* free all allocated pointers at all exits */
+-#define FREE_CIDX {int f; for (f = 0; f < 256; f++) \
+-if (cidx[f]) XpmFree(cidx[f]);}
++#define FREE_CIDX \
++do \
++{ \
++ int f; for (f = 0; f < 256; f++) \
++ if (cidx[f]) XpmFree(cidx[f]); \
++} while(0)
+
+ /* array of pointers malloced by need */
+ unsigned short *cidx[256];
+- int char1;
++ unsigned int char1;
+
+ bzero((char *)cidx, 256 * sizeof(unsigned short *)); /* init */
+ for (a = 0; a < ncolors; a++) {
+- char1 = colorTable[a].string[0];
++ char1 = (unsigned char) colorTable[a].string[0];
+ if (cidx[char1] == NULL) { /* get new memory */
+ cidx[char1] = (unsigned short *)
+ XpmCalloc(256, sizeof(unsigned short));
+@@ -480,8 +488,10 @@
+ char *s;
+ char buf[BUFSIZ];
+
+- if (cpp >= sizeof(buf))
++ if (cpp >= sizeof(buf)) {
++ XpmFree(iptr2); /* found by Egbert Eich */
+ return (XpmFileInvalid);
++ }
+
+ buf[cpp] = '\0';
+ if (USE_HASHTABLE) {
+@@ -491,7 +501,7 @@
+ xpmNextString(data);
+ for (x = 0; x < width; x++, iptr++) {
+ for (a = 0, s = buf; a < cpp; a++, s++)
+- *s = xpmGetC(data);
++ *s = xpmGetC(data); /* int assigned to char, not a problem here */
+ slot = xpmHashSlot(hashtable, buf);
+ if (!*slot) { /* no color matches */
+ XpmFree(iptr2);
+@@ -505,7 +515,7 @@
+ xpmNextString(data);
+ for (x = 0; x < width; x++, iptr++) {
+ for (a = 0, s = buf; a < cpp; a++, s++)
+- *s = xpmGetC(data);
++ *s = xpmGetC(data); /* int assigned to char, not a problem here */
+ for (a = 0; a < ncolors; a++)
+ if (!strcmp(colorTable[a].string, buf))
+ break;
+@@ -560,7 +570,7 @@
+ while (!notstart && notend) {
+ /* there starts an extension */
+ ext = (XpmExtension *)
+- XpmRealloc(exts, (num + 1) * sizeof(XpmExtension));
++ XpmRealloc(exts, (num + 1) * sizeof(XpmExtension)); /* can the loop be forced to iterate often enough to make "(num + 1) * sizeof(XpmExtension)" wrapping? */
+ if (!ext) {
+ XpmFree(string);
+ XpmFreeExtensions(exts, num);
+@@ -597,7 +607,7 @@
+ while ((notstart = strncmp("XPMEXT", string, 6))
+ && (notend = strncmp("XPMENDEXT", string, 9))) {
+ sp = (char **)
+- XpmRealloc(ext->lines, (nlines + 1) * sizeof(char *));
++ XpmRealloc(ext->lines, (nlines + 1) * sizeof(char *)); /* can we iterate enough for a wrapping? */
+ if (!sp) {
+ XpmFree(string);
+ ext->nlines = nlines;
+@@ -637,9 +647,9 @@
+ /* function call in case of error */
+ #undef RETURN
+ #define RETURN(status) \
+-{ \
++do { \
+ goto error; \
+-}
++} while(0)
+
+ /*
+ * This function parses an Xpm file or data and store the found informations
+Index: xc/extras/Xpm/lib/scan.c
+diff -u xc/extras/Xpm/lib/scan.c:1.2.4.1 xc/extras/Xpm/lib/scan.c:1.2.4.2
+--- xc/extras/Xpm/lib/scan.c:1.2.4.1 Wed Sep 15 15:47:39 2004
++++ xc/extras/Xpm/lib/scan.c Fri Dec 17 01:09:36 2004
+@@ -43,6 +43,8 @@
+ * Lorens Younes (d93-hyo@nada.kth.se) 4/96
+ */
+
++/* October 2004, source code review by Thomas Biege <thomas@suse.de> */
++
+ #include "XpmI.h"
+
+ #define MAXPRINTABLE 92 /* number of printable ascii chars
+@@ -172,10 +174,10 @@
+ /* function call in case of error */
+ #undef RETURN
+ #define RETURN(status) \
+-{ \
++do { \
+ ErrorStatus = status; \
+ goto error; \
+-}
++} while(0)
+
+ /*
+ * This function scans the given image and stores the found informations in
+@@ -233,15 +235,15 @@
+ else
+ cpp = 0;
+
+- if ((height > 0 && width >= SIZE_MAX / height) ||
+- width * height >= SIZE_MAX / sizeof(unsigned int))
++ if ((height > 0 && width >= UINT_MAX / height) ||
++ width * height >= UINT_MAX / sizeof(unsigned int))
+ RETURN(XpmNoMemory);
+ pmap.pixelindex =
+ (unsigned int *) XpmCalloc(width * height, sizeof(unsigned int));
+ if (!pmap.pixelindex)
+ RETURN(XpmNoMemory);
+
+- if (pmap.size >= SIZE_MAX / sizeof(Pixel))
++ if (pmap.size >= UINT_MAX / sizeof(Pixel))
+ RETURN(XpmNoMemory);
+
+ pmap.pixels = (Pixel *) XpmMalloc(sizeof(Pixel) * pmap.size);
+@@ -308,7 +310,7 @@
+ * get rgb values and a string of char, and possibly a name for each
+ * color
+ */
+- if (pmap.ncolors >= SIZE_MAX / sizeof(XpmColor))
++ if (pmap.ncolors >= UINT_MAX / sizeof(XpmColor))
+ RETURN(XpmNoMemory);
+ colorTable = (XpmColor *) XpmCalloc(pmap.ncolors, sizeof(XpmColor));
+ if (!colorTable)
+@@ -368,7 +370,7 @@
+
+ /* first get a character string */
+ a = 0;
+- if (cpp >= SIZE_MAX - 1)
++ if (cpp >= UINT_MAX - 1)
+ return (XpmNoMemory);
+ if (!(s = color->string = (char *) XpmMalloc(cpp + 1)))
+ return (XpmNoMemory);
+@@ -461,7 +463,7 @@
+ }
+
+ /* first get character strings and rgb values */
+- if (ncolors >= SIZE_MAX / sizeof(XColor) || cpp >= SIZE_MAX - 1)
++ if (ncolors >= UINT_MAX / sizeof(XColor) || cpp >= UINT_MAX - 1)
+ return (XpmNoMemory);
+ xcolors = (XColor *) XpmMalloc(sizeof(XColor) * ncolors);
+ if (!xcolors)
+@@ -619,7 +621,7 @@
+ char *dst;
+ unsigned int *iptr;
+ char *data;
+- int x, y, i;
++ unsigned int x, y, i;
+ int bits, depth, ibu, ibpp, offset;
+ unsigned long lbt;
+ Pixel pixel, px;
+@@ -721,7 +723,7 @@
+ unsigned char *addr;
+ unsigned char *data;
+ unsigned int *iptr;
+- int x, y;
++ unsigned int x, y;
+ unsigned long lbt;
+ Pixel pixel;
+ int depth;
+@@ -786,7 +788,7 @@
+ unsigned char *addr;
+ unsigned char *data;
+ unsigned int *iptr;
+- int x, y;
++ unsigned int x, y;
+ unsigned long lbt;
+ Pixel pixel;
+ int depth;
+@@ -831,7 +833,7 @@
+ {
+ unsigned int *iptr;
+ unsigned char *data;
+- int x, y;
++ unsigned int x, y;
+ unsigned long lbt;
+ Pixel pixel;
+ int depth;
+@@ -864,7 +866,7 @@
+ storeFuncPtr storeFunc;
+ {
+ unsigned int *iptr;
+- int x, y;
++ unsigned int x, y;
+ char *data;
+ Pixel pixel;
+ int xoff, yoff, offset, bpl;
+@@ -900,11 +902,11 @@
+ # else /* AMIGA */
+
+ #define CLEAN_UP(status) \
+-{\
++do {\
+ if (pixels) XpmFree (pixels);\
+ if (tmp_img) FreeXImage (tmp_img);\
+ return (status);\
+-}
++} while(0)
+
+ static int
+ AGetImagePixels (
+@@ -925,7 +927,7 @@
+
+ tmp_img = AllocXImage ((((width+15)>>4)<<4), 1, image->rp->BitMap->Depth);
+ if (tmp_img == NULL)
+- CLEAN_UP (XpmNoMemory)
++ CLEAN_UP (XpmNoMemory);
+
+ iptr = pmap->pixelindex;
+ for (y = 0; y < height; ++y)
+@@ -934,11 +936,11 @@
+ for (x = 0; x < width; ++x, ++iptr)
+ {
+ if ((*storeFunc) (pixels[x], pmap, iptr))
+- CLEAN_UP (XpmNoMemory)
++ CLEAN_UP (XpmNoMemory);
+ }
+ }
+
+- CLEAN_UP (XpmSuccess)
++ CLEAN_UP (XpmSuccess);
+ }
+
+ #undef CLEAN_UP
+Index: xc/extras/Xpm/lib/xpm.h
+diff -u xc/extras/Xpm/lib/xpm.h:1.2 xc/extras/Xpm/lib/xpm.h:1.2.4.1
+--- xc/extras/Xpm/lib/xpm.h:1.2 Fri Apr 23 18:42:32 2004
++++ xc/extras/Xpm/lib/xpm.h Mon Dec 13 03:51:37 2004
+@@ -284,9 +284,7 @@
+ * functions declarations
+ */
+
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
++_XFUNCPROTOBEGIN
+
+ /* FOR_MSW, all ..Pixmap.. are excluded, only the ..XImage.. are used */
+ /* Same for Amiga! */
+@@ -440,10 +438,7 @@
+
+ FUNC(XpmFree, void, (void *ptr));
+
+-#ifdef __cplusplus
+-} /* for C++ V2.0 */
+-#endif
+-
++_XFUNCPROTOEND
+
+ /* backward compatibility */
+
+Index: xc/fonts/bdf/100dpi/Imakefile
+diff -u xc/fonts/bdf/100dpi/Imakefile:1.3 xc/fonts/bdf/100dpi/Imakefile:1.3.2.1
+--- xc/fonts/bdf/100dpi/Imakefile:1.3 Thu Aug 26 11:58:05 2004
++++ xc/fonts/bdf/100dpi/Imakefile Mon Dec 13 14:19:03 2004
+@@ -11,8 +11,10 @@
+
+ OBJS1 = $(UCSOBJS1) $(DERIVEDOBJS1) $(PREDERIVEDOBJS1)
+ OBJS2 = $(UCSOBJS2) $(DERIVEDOBJS2) $(PREDERIVEDOBJS2) $(MISCOBJS)
++OBJS3 = $(DERIVEDOBJS3)
++OBJS4 = $(DERIVEDOBJS4)
+
+-OBJS = $(OBJS1) $(OBJS2)
++OBJS = $(OBJS1) $(OBJS2) $(OBJS3) $(OBJS4)
+
+ FONTINSTDIR = $(FONTDIR)/100dpi
+
+@@ -21,6 +23,8 @@
+ #ifndef LynxOSArchitecture
+ InstallFontObjs($(OBJS1),$(FONTINSTDIR))
+ InstallFontObjs($(OBJS2),$(FONTINSTDIR))
++InstallFontObjs($(OBJS3),$(FONTINSTDIR))
++InstallFontObjs($(OBJS4),$(FONTINSTDIR))
+ InstallFontAliases($(FONTINSTDIR))
+ InstallEncodingsDir($(ENCODINGSSRC),$(FONTINSTDIR))
+ #else
+Index: xc/fonts/bdf/75dpi/Imakefile
+diff -u xc/fonts/bdf/75dpi/Imakefile:1.3 xc/fonts/bdf/75dpi/Imakefile:1.3.2.1
+--- xc/fonts/bdf/75dpi/Imakefile:1.3 Thu Aug 26 11:58:05 2004
++++ xc/fonts/bdf/75dpi/Imakefile Mon Dec 13 14:19:03 2004
+@@ -11,8 +11,10 @@
+
+ OBJS1 = $(UCSOBJS1) $(DERIVEDOBJS1) $(PREDERIVEDOBJS1)
+ OBJS2 = $(UCSOBJS2) $(DERIVEDOBJS2) $(PREDERIVEDOBJS2) $(MISCOBJS)
++OBJS3 = $(DERIVEDOBJS3)
++OBJS4 = $(DERIVEDOBJS4)
+
+-OBJS = $(OBJS1) $(OBJS2)
++OBJS = $(OBJS1) $(OBJS2) $(OBJS3) $(OBJS4)
+
+ FONTINSTDIR = $(FONTDIR)/75dpi
+
+@@ -21,6 +23,8 @@
+ #ifndef LynxOSArchitecture
+ InstallFontObjs($(OBJS1),$(FONTINSTDIR))
+ InstallFontObjs($(OBJS2),$(FONTINSTDIR))
++InstallFontObjs($(OBJS3),$(FONTINSTDIR))
++InstallFontObjs($(OBJS4),$(FONTINSTDIR))
+ InstallFontAliases($(FONTINSTDIR))
+ InstallEncodingsDir($(ENCODINGSSRC),$(FONTINSTDIR))
+ #else
+Index: xc/fonts/encodings/Imakefile
+diff -u xc/fonts/encodings/Imakefile:1.2 xc/fonts/encodings/Imakefile:1.2.4.1
+--- xc/fonts/encodings/Imakefile:1.2 Fri Apr 23 18:43:02 2004
++++ xc/fonts/encodings/Imakefile Mon Dec 13 13:50:44 2004
+@@ -1,4 +1,4 @@
+-XCOMM $XdotOrg: xc/fonts/encodings/Imakefile,v 1.2 2004/04/23 18:43:02 eich Exp $
++XCOMM $XdotOrg: xc/fonts/encodings/Imakefile,v 1.2.4.1 2004/12/13 13:50:44 gisburn Exp $
+ XCOMM $XFree86: xc/fonts/encodings/Imakefile,v 1.10 2003/06/26 10:19:41 eich Exp $
+
+ #define IHaveSubdirs
+@@ -10,6 +10,7 @@
+ EncObjComp(adobe-symbol) \
+ EncObj(ansi-1251) \
+ EncObj(armscii-8) \
++ EncObj(ascii-0) \
+ EncObj(dec-special) \
+ EncObj(ibm-cp437) EncObj(ibm-cp850) \
+ EncObj(ibm-cp852) EncObj(ibm-cp866) \
+Index: xc/fonts/encodings/ascii-0.enc
+diff -u /dev/null xc/fonts/encodings/ascii-0.enc:1.1.4.1
+--- /dev/null Fri Feb 11 21:35:31 2005
++++ xc/fonts/encodings/ascii-0.enc Mon Dec 13 13:50:44 2004
+@@ -0,0 +1,101 @@
++STARTENCODING ascii-0
++SIZE 0x100
++STARTMAPPING unicode
++
++0x21 0x0021
++0x22 0x0022
++0x23 0x0023
++0x24 0x0024
++0x25 0x0025
++0x26 0x0026
++0x27 0x0027
++0x28 0x0028
++0x29 0x0029
++0x2A 0x002A
++0x2B 0x002B
++0x2C 0x002C
++0x2D 0x002D
++0x2E 0x002E
++0x2F 0x002F
++0x30 0x0030
++0x31 0x0031
++0x32 0x0032
++0x33 0x0033
++0x34 0x0034
++0x35 0x0035
++0x36 0x0036
++0x37 0x0037
++0x38 0x0038
++0x39 0x0039
++0x3A 0x003A
++0x3B 0x003B
++0x3C 0x003C
++0x3D 0x003D
++0x3E 0x003E
++0x3F 0x003F
++0x40 0x0040
++0x41 0x0041
++0x42 0x0042
++0x43 0x0043
++0x44 0x0044
++0x45 0x0045
++0x46 0x0046
++0x47 0x0047
++0x48 0x0048
++0x49 0x0049
++0x4A 0x004A
++0x4B 0x004B
++0x4C 0x004C
++0x4D 0x004D
++0x4E 0x004E
++0x4F 0x004F
++0x50 0x0050
++0x51 0x0051
++0x52 0x0052
++0x53 0x0053
++0x54 0x0054
++0x55 0x0055
++0x56 0x0056
++0x57 0x0057
++0x58 0x0058
++0x59 0x0059
++0x5A 0x005A
++0x5B 0x005B
++0x5C 0x005C
++0x5D 0x005D
++0x5E 0x005E
++0x5F 0x005F
++0x60 0x0060
++0x61 0x0061
++0x62 0x0062
++0x63 0x0063
++0x64 0x0064
++0x65 0x0065
++0x66 0x0066
++0x67 0x0067
++0x68 0x0068
++0x69 0x0069
++0x6A 0x006A
++0x6B 0x006B
++0x6C 0x006C
++0x6D 0x006D
++0x6E 0x006E
++0x6F 0x006F
++0x70 0x0070
++0x71 0x0071
++0x72 0x0072
++0x73 0x0073
++0x74 0x0074
++0x75 0x0075
++0x76 0x0076
++0x77 0x0077
++0x78 0x0078
++0x79 0x0079
++0x7A 0x007A
++0x7B 0x007B
++0x7C 0x007C
++0x7D 0x007D
++0x7E 0x007E
++0x7F 0x0020
++ENDMAPPING
++ENDENCODING
+Index: xc/include/Xos.h
+diff -u xc/include/Xos.h:1.2 xc/include/Xos.h:1.2.4.1
+--- xc/include/Xos.h:1.2 Fri Apr 23 18:43:05 2004
++++ xc/include/Xos.h Wed Jan 12 02:55:30 2005
+@@ -1,5 +1,5 @@
+ /*
+- * $XdotOrg: xc/include/Xos.h,v 1.2 2004/04/23 18:43:05 eich Exp $
++ * $XdotOrg: xc/include/Xos.h,v 1.2.4.1 2005/01/12 02:55:30 gisburn Exp $
+ * $Xorg: Xos.h,v 1.6 2001/02/09 02:03:22 xorgcvs Exp $
+ *
+ *
+@@ -276,7 +276,7 @@
+ #endif
+
+ #if defined(ISC) || defined(__UNIXOS2__) || \
+- (defined(linux) && !defined(__GLIBC__)) || \
++ (defined(__linux__) && !defined(__GLIBC__)) || \
+ (defined(__QNX__) && !defined(UNIXCONN))
+ /*
+ * Some OS's may not have this
+Index: xc/include/Xthreads.h
+diff -u xc/include/Xthreads.h:1.2 xc/include/Xthreads.h:1.2.4.1
+--- xc/include/Xthreads.h:1.2 Fri Apr 23 18:43:05 2004
++++ xc/include/Xthreads.h Wed Jan 12 02:55:30 2005
+@@ -267,7 +267,7 @@
+ #define xthread_clear_id(id) id = _X_no_thread_id
+ #define xthread_equal(id1,id2) pthread_equal(id1, id2)
+ #endif /* _DECTHREADS_ */
+-#if defined(linux)
++#if defined(__linux__)
+ #define xthread_have_id(id) !pthread_equal(id, 0)
+ #define xthread_clear_id(id) id = 0
+ #define xthread_equal(id1,id2) pthread_equal(id1, id2)
+Index: xc/include/extensions/Imakefile
+diff -u xc/include/extensions/Imakefile:1.10 xc/include/extensions/Imakefile:1.10.2.1
+--- xc/include/extensions/Imakefile:1.10 Mon Aug 9 22:37:21 2004
++++ xc/include/extensions/Imakefile Mon Dec 13 03:12:16 2004
+@@ -1,4 +1,4 @@
+-XCOMM $XdotOrg: xc/include/extensions/Imakefile,v 1.10 2004/08/09 22:37:21 kem Exp $
++XCOMM $XdotOrg: xc/include/extensions/Imakefile,v 1.10.2.1 2004/12/13 03:12:16 gisburn Exp $
+ XCOMM $Xorg: Imakefile,v 1.3 2000/08/18 04:05:44 coskrey Exp $
+
+
+@@ -46,7 +46,7 @@
+ XFIXESHEADERS = xfixeswire.h xfixesproto.h
+ #endif
+ #if BuildDamage || BuildDamageLibrary
+-DAMAGEHEADERS = damage.h damagewire.h damageproto.h
++DAMAGEHEADERS = damagewire.h damageproto.h
+ #endif
+ #if BuildComposite || BuildCompositeLibrary
+ COMPOSITEHEADERS = composite.h compositeproto.h
+Index: xc/include/extensions/Xinerama.h
+diff -u xc/include/extensions/Xinerama.h:1.2 xc/include/extensions/Xinerama.h:1.2.4.1
+--- xc/include/extensions/Xinerama.h:1.2 Fri Apr 23 18:43:06 2004
++++ xc/include/extensions/Xinerama.h Mon Dec 13 02:56:12 2004
+@@ -1,4 +1,4 @@
+-/* $XdotOrg: xc/include/extensions/Xinerama.h,v 1.2 2004/04/23 18:43:06 eich Exp $ */
++/* $XdotOrg: xc/include/extensions/Xinerama.h,v 1.2.4.1 2004/12/13 02:56:12 gisburn Exp $ */
+ /*
+
+ Copyright 2003 The Open Group
+@@ -29,6 +29,8 @@
+ #ifndef _Xinerama_h
+ #define _Xinerama_h
+
++#include <X11/Xlib.h>
++
+ typedef struct {
+ int screen_number;
+ short x_org;
+Index: xc/include/extensions/damage.h
+diff -u xc/include/extensions/damage.h:1.2 xc/include/extensions/damage.h:removed
+--- xc/include/extensions/damage.h:1.2 Thu Jul 29 19:29:55 2004
++++ xc/include/extensions/damage.h Fri Feb 11 21:35:31 2005
+@@ -1,108 +0,0 @@
+-/*
+- * $XFree86$
+- */
+-
+-/*
+- * Copyright (C) 2002 Red Hat, Inc.
+- * Developer: Havoc Pennington, Red Hat, Inc.
+- *
+- * Permission is hereby granted, free of charge, to any person
+- * obtaining a copy of this software and associated documentation
+- * files (the "Software"), to deal in the Software without
+- * restriction, including without limitation the rights to use, copy,
+- * modify, merge, publish, distribute, sublicense, and/or sell copies
+- * of the Software, and to permit persons to whom the Software is
+- * furnished to do so, subject to the following conditions:
+- *
+- * The above copyright notice and this permission notice shall be
+- * included in all copies or substantial portions of the Software.
+- *
+- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+- * NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR
+- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+- * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+- *
+- * Except as contained in this notice, the name of the X Consortium
+- * shall not be used in advertising or otherwise to promote the sale,
+- * use or other dealings in this Software without prior written
+- * authorization from the X Consortium.
+- *
+- */
+-
+-/* The DAMAGE extension lets you track modified portions of the
+- * framebuffer. i.e. anytime a pixel changes onscreen you get
+- * notification, and you can ask the server for a region describing
+- * changes since you last asked.
+- *
+- * The function prototypes etc. look like they work for any window,
+- * but right now it really only works for root windows.
+- */
+-
+-#ifndef _X_DAMAGE_H_
+-#define _X_DAMAGE_H_
+-
+-#include <X11/Xfuncproto.h>
+-#include <X11/extensions/damageshared.h>
+-
+-/* A server-side resource that tracks a damage region for a given
+- * window.
+- */
+-typedef unsigned long XDamageRecorder;
+-
+-typedef struct {
+- int type; /* of event */
+- unsigned long serial; /* # of last request processed by server */
+- Bool send_event; /* true if this came frome a SendEvent request */
+- Display *display; /* Display the event was read from */
+- Window window; /* window on which damage recorder is recording */
+- XDamageRecorder recorder; /* the damage recorder this event is for */
+-} XDamageNotifyEvent;
+-
+-_XFUNCPROTOBEGIN
+-
+-Bool XDamageQueryExtension (
+- Display *dpy,
+- int *event_base,
+- int *error_base
+-);
+-
+-Status XDamageQueryVersion (
+- Display *dpy,
+- int *major,
+- int *minor
+-);
+-
+-Bool XDamageScreenSupportsRootRecorder (
+- Display *dpy,
+- int screen_num
+-);
+-
+-XDamageRecorder XDamageCreateRecorder (
+- Display *dpy,
+- Window window
+-);
+-
+-void XDamageDestroyRecorder (
+- Display *dpy,
+- XDamageRecorder recorder
+-);
+-
+-/* Gets damage recorded for given rectangle since last time we got damage
+- * for that rectangle. i.e. returns the intersection of the current
+- * damage region and the rectangle, and subtracts the rectangle
+- * from the current damage region.
+- */
+-int XDamageGetDamage (
+- Display *dpy,
+- XDamageRecorder recorder,
+- _Xconst XRectangle *rect,
+- XRectangle **rects,
+- int *n
+-);
+-
+-_XFUNCPROTOEND
+-
+-#endif /* _X_DAMAGE_H_ */
+Index: xc/include/extensions/dpms.h
+diff -u xc/include/extensions/dpms.h:1.2 xc/include/extensions/dpms.h:1.2.4.1
+--- xc/include/extensions/dpms.h:1.2 Fri Apr 23 18:43:06 2004
++++ xc/include/extensions/dpms.h Mon Dec 13 03:48:01 2004
+@@ -28,6 +28,9 @@
+ ******************************************************************/
+ /* $XFree86: xc/include/extensions/dpms.h,v 3.4 2000/03/15 16:51:51 tsi Exp $ */
+
++#ifndef _X11_EXTENSIONS_DPMS_H
++#define _X11_EXTENSIONS_DPMS_H 1
++
+ /*
+ * HISTORY
+ */
+@@ -46,6 +49,8 @@
+ #include <X11/X.h>
+ #include <X11/Xmd.h>
+
++_XFUNCPROTOBEGIN
++
+ extern Bool DPMSQueryExtension(Display *, int *, int *);
+ extern Status DPMSGetVersion(Display *, int *, int *);
+ extern Bool DPMSCapable(Display *);
+@@ -55,6 +60,8 @@
+ extern Status DPMSDisable(Display *);
+ extern Status DPMSForceLevel(Display *, CARD16);
+ extern Status DPMSInfo(Display *, CARD16 *, BOOL *);
+-#endif
+
++_XFUNCPROTOEND
++#endif /* !DPMS_SERVER */
++#endif /* !_X11_EXTENSIONS_DPMS_H */
+
+Index: xc/lib/GL/glx/glxcmds.c
+diff -u xc/lib/GL/glx/glxcmds.c:1.3 xc/lib/GL/glx/glxcmds.c:1.3.4.1
+--- xc/lib/GL/glx/glxcmds.c:1.3 Wed Jun 16 09:35:43 2004
++++ xc/lib/GL/glx/glxcmds.c Mon Dec 13 04:18:21 2004
+@@ -1505,6 +1505,8 @@
+ if ( (priv->majorVersion > 1) || (priv->minorVersion >= 3) ) {
+ xGLXQueryContextReq * req;
+
++ GetReq(GLXQueryContext, req);
++
+ req->reqType = opcode;
+ req->glxCode = X_GLXQueryContext;
+ req->context = (unsigned int)(ctx->xid);
+Index: xc/lib/GL/glx/glxext.c
+diff -u xc/lib/GL/glx/glxext.c:1.5 xc/lib/GL/glx/glxext.c:1.5.4.1
+--- xc/lib/GL/glx/glxext.c:1.5 Tue Jul 27 20:23:58 2004
++++ xc/lib/GL/glx/glxext.c Mon Dec 13 13:55:57 2004
+@@ -730,7 +730,7 @@
+ __DRIscreenPrivate *psp = NULL;
+ #ifndef GLX_USE_APPLEGL
+ drm_handle_t hSAREA;
+- drmAddress pSAREA;
++ drmAddress pSAREA = MAP_FAILED;
+ char *BusID;
+ __DRIversion ddx_version;
+ __DRIversion dri_version;
+@@ -742,7 +742,6 @@
+ const char * err_extra;
+ int api_ver = __glXGetInternalVersion();
+
+-
+ dri_version.major = driDpy->private->driMajor;
+ dri_version.minor = driDpy->private->driMinor;
+ dri_version.patch = driDpy->private->driPatch;
+@@ -751,6 +750,9 @@
+ err_msg = "XF86DRIOpenConnection";
+ err_extra = NULL;
+
++ memset (&framebuffer, 0, sizeof (framebuffer));
++ framebuffer.base = MAP_FAILED;
++
+ if (XF86DRIOpenConnection(dpy, scrn, &hSAREA, &BusID)) {
+ fd = drmOpen(NULL,BusID);
+ Xfree(BusID); /* No longer needed */
+Index: xc/lib/GL/mesa/Imakefile
+diff -u xc/lib/GL/mesa/Imakefile:1.1.3.1 xc/lib/GL/mesa/Imakefile:1.1.3.1.4.1
+--- xc/lib/GL/mesa/Imakefile:1.1.3.1 Wed Jun 16 09:25:10 2004
++++ xc/lib/GL/mesa/Imakefile Mon Dec 13 04:12:55 2004
+@@ -26,6 +26,11 @@
+ #define DoProfileLib NO
+ #endif
+
++/* Large PIC tables needed for Solaris SPARC builds */
++#if (defined(SunArchitecture) && defined(SparcArchitecture))
++# define LargePICTable YES
++#endif
++
+ #if Malloc0ReturnsNull
+ ALLOC_DEFINES = -DMALLOC_0_RETURNS_NULL
+ #endif
+Index: xc/lib/GL/mesa/drivers/dri/r128/Imakefile.inc
+diff -u xc/lib/GL/mesa/drivers/dri/r128/Imakefile.inc:1.1.3.1 xc/lib/GL/mesa/drivers/dri/r128/Imakefile.inc:1.1.3.1.4.1
+--- xc/lib/GL/mesa/drivers/dri/r128/Imakefile.inc:1.1.3.1 Wed Jun 16 09:25:10 2004
++++ xc/lib/GL/mesa/drivers/dri/r128/Imakefile.inc Wed Dec 15 01:50:55 2004
+@@ -48,8 +48,7 @@
+ $(MESADRVR128BUILDDIR)r128_tex.c \
+ $(MESADRVR128BUILDDIR)r128_texmem.c \
+ $(MESADRVR128BUILDDIR)r128_texstate.c \
+- $(MESADRVR128BUILDDIR)r128_tris.c \
+- $(MESADRVR128BUILDDIR)r128_vb.c
++ $(MESADRVR128BUILDDIR)r128_tris.c
+
+ R128OBJS = $(MESADRVR128BUILDDIR)r128_context.o \
+ $(MESADRVR128BUILDDIR)r128_dd.o \
+@@ -61,8 +60,7 @@
+ $(MESADRVR128BUILDDIR)r128_tex.o \
+ $(MESADRVR128BUILDDIR)r128_texmem.o \
+ $(MESADRVR128BUILDDIR)r128_texstate.o \
+- $(MESADRVR128BUILDDIR)r128_tris.o \
+- $(MESADRVR128BUILDDIR)r128_vb.o
++ $(MESADRVR128BUILDDIR)r128_tris.o
+
+ R128UOBJS = $(MESADRVR128BUILDDIR)unshared/r128_context.o \
+ $(MESADRVR128BUILDDIR)unshared/r128_dd.o \
+@@ -74,8 +72,7 @@
+ $(MESADRVR128BUILDDIR)unshared/r128_tex.o \
+ $(MESADRVR128BUILDDIR)unshared/r128_texmem.o \
+ $(MESADRVR128BUILDDIR)unshared/r128_texstate.o \
+- $(MESADRVR128BUILDDIR)unshared/r128_tris.o \
+- $(MESADRVR128BUILDDIR)unshared/r128_vb.o
++ $(MESADRVR128BUILDDIR)unshared/r128_tris.o
+
+ R128DOBJS = $(MESADRVR128BUILDDIR)debugger/r128_context.o \
+ $(MESADRVR128BUILDDIR)debugger/r128_dd.o \
+@@ -87,8 +84,7 @@
+ $(MESADRVR128BUILDDIR)debugger/r128_tex.o \
+ $(MESADRVR128BUILDDIR)debugger/r128_texmem.o \
+ $(MESADRVR128BUILDDIR)debugger/r128_texstate.o \
+- $(MESADRVR128BUILDDIR)debugger/r128_tris.o \
+- $(MESADRVR128BUILDDIR)debugger/r128_vb.o
++ $(MESADRVR128BUILDDIR)debugger/r128_tris.o
+
+ R128POBJS = $(MESADRVR128BUILDDIR)profiled/r128_context.o \
+ $(MESADRVR128BUILDDIR)profiled/r128_dd.o \
+@@ -100,8 +96,7 @@
+ $(MESADRVR128BUILDDIR)profiled/r128_tex.o \
+ $(MESADRVR128BUILDDIR)profiled/r128_texmem.o \
+ $(MESADRVR128BUILDDIR)profiled/r128_texstate.o \
+- $(MESADRVR128BUILDDIR)profiled/r128_tris.o \
+- $(MESADRVR128BUILDDIR)profiled/r128_vb.o
++ $(MESADRVR128BUILDDIR)profiled/r128_tris.o
+
+ #ifdef NeedToLinkMesaSrc
+ LinkSourceFile(r128_context.c, $(MESADRVSRCDIR)/r128)
+@@ -125,6 +120,4 @@
+ LinkSourceFile(r128_texstate.c, $(MESADRVSRCDIR)/r128)
+ LinkSourceFile(r128_tris.c, $(MESADRVSRCDIR)/r128)
+ LinkSourceFile(r128_tris.h, $(MESADRVSRCDIR)/r128)
+-LinkSourceFile(r128_vb.c, $(MESADRVSRCDIR)/r128)
+-LinkSourceFile(r128_vb.h, $(MESADRVSRCDIR)/r128)
+ #endif
+Index: xc/lib/GL/mesa/drivers/osmesa/Imakefile
+diff -u xc/lib/GL/mesa/drivers/osmesa/Imakefile:1.2 xc/lib/GL/mesa/drivers/osmesa/Imakefile:1.2.2.1
+--- xc/lib/GL/mesa/drivers/osmesa/Imakefile:1.2 Wed Aug 18 23:12:49 2004
++++ xc/lib/GL/mesa/drivers/osmesa/Imakefile Wed Dec 15 03:16:24 2004
+@@ -8,6 +8,11 @@
+ #define DoDebugLib DebugLibGlx
+ #define DoProfileLib ProfileLibGlx
+
++/* Large PIC tables needed for Solaris SPARC builds */
++#if (defined(SunArchitecture) && defined(SparcArchitecture))
++# define LargePICTable YES
++#endif
++
+ #include "../../array_cache/Imakefile.inc"
+ #include "../../math/Imakefile.inc"
+ #include "../../main/Imakefile.inc"
+Index: xc/lib/GL/mesa/math/Imakefile
+diff -u xc/lib/GL/mesa/math/Imakefile:1.1.3.1 xc/lib/GL/mesa/math/Imakefile:1.1.3.1.4.1
+--- xc/lib/GL/mesa/math/Imakefile:1.1.3.1 Wed Jun 16 09:25:10 2004
++++ xc/lib/GL/mesa/math/Imakefile Mon Dec 13 04:12:55 2004
+@@ -26,6 +26,11 @@
+ #define DoProfileLib NO
+ #endif
+
++/* Large PIC tables needed for Solaris SPARC builds */
++#if (defined(SunArchitecture) && defined(SparcArchitecture))
++# define LargePICTable YES
++#endif
++
+
+ #define MesaMathBuildDir /**/
+ #define NeedToLinkMesaSrc
+Index: xc/lib/GL/mesa/shader/Imakefile
+diff -u xc/lib/GL/mesa/shader/Imakefile:1.1.3.2 xc/lib/GL/mesa/shader/Imakefile:1.1.3.2.4.1
+--- xc/lib/GL/mesa/shader/Imakefile:1.1.3.2 Wed Jun 16 09:27:56 2004
++++ xc/lib/GL/mesa/shader/Imakefile Mon Dec 13 04:12:55 2004
+@@ -26,6 +26,10 @@
+ #define DoProfileLib NO
+ #endif
+
++/* Large PIC tables needed for Solaris SPARC builds */
++#if (defined(SunArchitecture) && defined(SparcArchitecture))
++# define LargePICTable YES
++#endif
+
+ #define MesaShaderBuildDir /**/
+ #define NeedToLinkMesaSrc
+Index: xc/lib/GL/mesa/sparc/Imakefile
+diff -u xc/lib/GL/mesa/sparc/Imakefile:1.2 xc/lib/GL/mesa/sparc/Imakefile:1.2.2.1
+--- xc/lib/GL/mesa/sparc/Imakefile:1.2 Thu Aug 19 07:34:43 2004
++++ xc/lib/GL/mesa/sparc/Imakefile Mon Dec 13 04:12:55 2004
+@@ -1,5 +1,5 @@
+ XCOMM $XFree86: xc/lib/GL/mesa/src/SPARC/Imakefile,v 1.3 2002/11/22 22:55:58 tsi Exp $
+-XCOMM $XdotOrg: xc/lib/GL/mesa/sparc/Imakefile,v 1.2 2004/08/19 07:34:43 kem Exp $
++XCOMM $XdotOrg: xc/lib/GL/mesa/sparc/Imakefile,v 1.2.2.1 2004/12/13 04:12:55 gisburn Exp $
+
+ /*
+ * Need both shared and unshared Mesa objects in the following cases:
+@@ -25,6 +25,10 @@
+ #define DoProfileLib NO
+ #endif
+
++/* Large PIC tables needed for Solaris SPARC builds */
++#if (defined(SunArchitecture) && defined(SparcArchitecture))
++# define LargePICTable YES
++#endif
+
+ #if Malloc0ReturnsNull
+ ALLOC_DEFINES = -DMALLOC_0_RETURNS_NULL
+Index: xc/lib/GL/mesa/swrast/Imakefile
+diff -u xc/lib/GL/mesa/swrast/Imakefile:1.1.3.1 xc/lib/GL/mesa/swrast/Imakefile:1.1.3.1.4.1
+--- xc/lib/GL/mesa/swrast/Imakefile:1.1.3.1 Wed Jun 16 09:25:10 2004
++++ xc/lib/GL/mesa/swrast/Imakefile Mon Dec 13 04:12:55 2004
+@@ -26,6 +26,10 @@
+ #define DoProfileLib NO
+ #endif
+
++/* Large PIC tables needed for Solaris SPARC builds */
++#if (defined(SunArchitecture) && defined(SparcArchitecture))
++# define LargePICTable YES
++#endif
+
+ #define MesaSwrastBuildDir /**/
+ #define NeedToLinkMesaSrc
+Index: xc/lib/GL/mesa/swrast_setup/Imakefile
+diff -u xc/lib/GL/mesa/swrast_setup/Imakefile:1.1.3.1 xc/lib/GL/mesa/swrast_setup/Imakefile:1.1.3.1.4.1
+--- xc/lib/GL/mesa/swrast_setup/Imakefile:1.1.3.1 Wed Jun 16 09:25:10 2004
++++ xc/lib/GL/mesa/swrast_setup/Imakefile Mon Dec 13 04:12:55 2004
+@@ -26,6 +26,11 @@
+ #define DoProfileLib NO
+ #endif
+
++/* Large PIC tables needed for Solaris SPARC builds */
++#if (defined(SunArchitecture) && defined(SparcArchitecture))
++# define LargePICTable YES
++#endif
++
+
+ #define MesaSwrastSetupBuildDir /**/
+ #define NeedToLinkMesaSrc
+Index: xc/lib/GL/mesa/tnl/Imakefile
+diff -u xc/lib/GL/mesa/tnl/Imakefile:1.1.3.1 xc/lib/GL/mesa/tnl/Imakefile:1.1.3.1.4.1
+--- xc/lib/GL/mesa/tnl/Imakefile:1.1.3.1 Wed Jun 16 09:25:10 2004
++++ xc/lib/GL/mesa/tnl/Imakefile Mon Dec 13 04:12:55 2004
+@@ -26,6 +26,10 @@
+ #define DoProfileLib NO
+ #endif
+
++/* Large PIC tables needed for Solaris SPARC builds */
++#if (defined(SunArchitecture) && defined(SparcArchitecture))
++# define LargePICTable YES
++#endif
+
+ #define MesaTnlBuildDir /**/
+ #define NeedToLinkMesaSrc
+Index: xc/lib/GL/mesa/tnl_dd/Imakefile
+diff -u xc/lib/GL/mesa/tnl_dd/Imakefile:1.1.3.1 xc/lib/GL/mesa/tnl_dd/Imakefile:1.1.3.1.4.1
+--- xc/lib/GL/mesa/tnl_dd/Imakefile:1.1.3.1 Wed Jun 16 09:25:10 2004
++++ xc/lib/GL/mesa/tnl_dd/Imakefile Mon Dec 13 04:12:56 2004
+@@ -26,6 +26,10 @@
+ #define DoProfileLib NO
+ #endif
+
++/* Large PIC tables needed for Solaris SPARC builds */
++#if (defined(SunArchitecture) && defined(SparcArchitecture))
++# define LargePICTable YES
++#endif
+
+ #define MesaTnlDdBuildDir /**/
+ #define NeedToLinkMesaSrc
+Index: xc/lib/X11/XKBBind.c
+diff -u xc/lib/X11/XKBBind.c:1.2 xc/lib/X11/XKBBind.c:1.2.4.1
+--- xc/lib/X11/XKBBind.c:1.2 Fri Apr 23 18:43:24 2004
++++ xc/lib/X11/XKBBind.c Mon Dec 13 02:42:33 2004
+@@ -363,7 +363,7 @@
+
+ if (xkbi->flags&XkbMapPending)
+ changes= xkbi->changes;
+- else bzero(&changes,sizeof(XkbChangesRec));
++ else bzero(&changes,sizeof(changes));
+ XkbNoteMapChanges(&changes,event,XKB_XLIB_MAP_MASK);
+ LockDisplay(dpy);
+ if ((rtrn=XkbGetMapChanges(dpy,xkbi->desc,&changes))!=Success) {
+Index: xc/lib/X11/XlibInt.c
+diff -u xc/lib/X11/XlibInt.c:1.2 xc/lib/X11/XlibInt.c:1.2.4.2
+--- xc/lib/X11/XlibInt.c:1.2 Fri Apr 23 18:43:24 2004
++++ xc/lib/X11/XlibInt.c Mon Dec 13 02:35:26 2004
+@@ -3346,7 +3346,7 @@
+ int flags;
+ {
+ char buf[MAX_PATH];
+- char* bufp;
++ char* bufp = NULL;
+ int ret = -1;
+ UINT olderror = SetErrorMode (SEM_FAILCRITICALERRORS);
+
+@@ -3365,7 +3365,7 @@
+ _Xconst char* mode;
+ {
+ char buf[MAX_PATH];
+- char* bufp;
++ char* bufp = NULL;
+ void* ret = NULL;
+ UINT olderror = SetErrorMode (SEM_FAILCRITICALERRORS);
+
+Index: xc/lib/X11/imInsClbk.c
+diff -u xc/lib/X11/imInsClbk.c:1.2 xc/lib/X11/imInsClbk.c:1.2.4.1
+--- xc/lib/X11/imInsClbk.c:1.2 Fri Apr 23 18:43:24 2004
++++ xc/lib/X11/imInsClbk.c Mon Dec 13 02:24:22 2004
+@@ -254,8 +254,6 @@
+ _XUnregisterFilter( display, RootWindow(display, 0),
+ _XimFilterPropertyNotify,
+ (XPointer)NULL );
+- XSelectInput( display, RootWindow(display, 0),
+- NoEventMask );
+ }
+ else
+ picb->next = icb->next;
+Index: xc/lib/Xaw/AsciiSink.c
+diff -u xc/lib/Xaw/AsciiSink.c:1.2 xc/lib/Xaw/AsciiSink.c:1.2.4.1
+--- xc/lib/Xaw/AsciiSink.c:1.2 Fri Apr 23 18:43:37 2004
++++ xc/lib/Xaw/AsciiSink.c Mon Dec 13 02:49:55 2004
+@@ -1706,6 +1706,8 @@
+
+ GetGC(sink);
+
++ if (!sink->ascii_sink.font) XtError("Aborting: no font found\n");
++
+ sink->ascii_sink.cursor_position = 0;
+ sink->ascii_sink.laststate = XawisOff;
+ sink->ascii_sink.cursor_x = sink->ascii_sink.cursor_y = 0;
+Index: xc/lib/Xaw/Label.c
+diff -u xc/lib/Xaw/Label.c:1.2 xc/lib/Xaw/Label.c:1.2.4.1
+--- xc/lib/Xaw/Label.c:1.2 Fri Apr 23 18:43:37 2004
++++ xc/lib/Xaw/Label.c Mon Dec 13 02:49:55 2004
+@@ -527,6 +527,8 @@
+ LabelWidget lw = (LabelWidget)cnew;
+
+ if (!lw->label.font) XtError("Aborting: no font found\n");
++ if (lw->simple.international && !lw->label.fontset)
++ XtError("Aborting: no fontset found\n");
+
+ if (lw->label.label == NULL)
+ lw->label.label = XtNewString(lw->core.name);
+@@ -722,8 +724,8 @@
+ if (curlw->label.encoding != newlw->label.encoding)
+ was_resized = True;
+
+- if (curlw->label.fontset != newlw->label.fontset &&
+- curlw->simple.international)
++ if (curlw->simple.international
++ && curlw->label.fontset != newlw->label.fontset)
+ was_resized = True;
+
+ if (curlw->label.label != newlw->label.label) {
+Index: xc/lib/Xaw/List.c
+diff -u xc/lib/Xaw/List.c:1.2 xc/lib/Xaw/List.c:1.2.4.1
+--- xc/lib/Xaw/List.c:1.2 Fri Apr 23 18:43:37 2004
++++ xc/lib/Xaw/List.c Mon Dec 13 02:49:55 2004
+@@ -471,6 +471,10 @@
+ {
+ ListWidget lw = (ListWidget)cnew;
+
++ if (!lw->list.font) XtError("Aborting: no font found\n");
++ if (lw->simple.international && !lw->list.fontset)
++ XtError("Aborting: no fontset found\n");
++
+ /*
+ * Initialize all private resources
+ */
+Index: xc/lib/Xaw/MultiSink.c
+diff -u xc/lib/Xaw/MultiSink.c:1.2 xc/lib/Xaw/MultiSink.c:1.2.4.1
+--- xc/lib/Xaw/MultiSink.c:1.2 Fri Apr 23 18:43:37 2004
++++ xc/lib/Xaw/MultiSink.c Mon Dec 13 02:49:55 2004
+@@ -718,6 +718,8 @@
+
+ GetGC(sink);
+
++ if (!sink->multi_sink.fontset) XtError("Aborting: no fontset found\n");
++
+ sink->multi_sink.cursor_position = 0;
+ sink->multi_sink.laststate = XawisOff;
+ sink->multi_sink.cursor_x = sink->multi_sink.cursor_y = 0;
+Index: xc/lib/Xaw/SmeBSB.c
+diff -u xc/lib/Xaw/SmeBSB.c:1.2 xc/lib/Xaw/SmeBSB.c:1.2.4.1
+--- xc/lib/Xaw/SmeBSB.c:1.2 Fri Apr 23 18:43:37 2004
++++ xc/lib/Xaw/SmeBSB.c Mon Dec 13 02:49:55 2004
+@@ -266,6 +266,8 @@
+ {
+ SmeBSBObject entry = (SmeBSBObject)cnew;
+
++ if (!entry->sme_bsb.font) XtError("Aborting: no font found\n");
++
+ if (entry->sme_bsb.label == NULL)
+ entry->sme_bsb.label = XtName(cnew);
+ else
+Index: xc/lib/Xaw/Tip.c
+diff -u xc/lib/Xaw/Tip.c:1.2 xc/lib/Xaw/Tip.c:1.2.4.1
+--- xc/lib/Xaw/Tip.c:1.2 Fri Apr 23 18:43:38 2004
++++ xc/lib/Xaw/Tip.c Mon Dec 13 02:49:55 2004
+@@ -243,6 +243,10 @@
+ TipWidget tip = (TipWidget)w;
+ XGCValues values;
+
++ if (!tip->tip.font) XtError("Aborting: no font found\n");
++ if (tip->tip.international && !tip->tip.fontset)
++ XtError("Aborting: no fontset found\n");
++
+ tip->tip.timer = 0;
+
+ values.foreground = tip->tip.foreground;
+Index: xc/lib/Xaw/XawIm.c
+diff -u xc/lib/Xaw/XawIm.c:1.2 xc/lib/Xaw/XawIm.c:1.2.4.1
+--- xc/lib/Xaw/XawIm.c:1.2 Fri Apr 23 18:43:38 2004
++++ xc/lib/Xaw/XawIm.c Mon Dec 13 02:49:55 2004
+@@ -808,8 +808,10 @@
+ pe_a[pe_cnt] = (XPointer) p->font_set; pe_cnt++;
+ st_a[st_cnt] = (XPointer) XNFontSet; st_cnt++;
+ st_a[st_cnt] = (XPointer) p->font_set; st_cnt++;
+- height = maxAscentOfFontSet(p->font_set)
+- + maxDescentOfFontSet(p->font_set);
++ if (p->font_set) {
++ height = maxAscentOfFontSet(p->font_set)
++ + maxDescentOfFontSet(p->font_set);
++ }
+ height = SetVendorShellHeight(ve, height);
+ }
+ if (p->flg & CIFg) {
+@@ -938,7 +940,7 @@
+ XPointer ic_a[20], pe_a[20], st_a[20];
+ int ic_cnt = 0, pe_cnt = 0, st_cnt = 0;
+ XawTextMargin *margin;
+- int height;
++ int height = 0;
+
+ if ((ve->im.xim == NULL) || ((p = GetIcTableShared(w, ve)) == NULL) ||
+ (p->xic == NULL)) return;
+@@ -965,8 +967,10 @@
+ pe_a[pe_cnt] = (XPointer) p->font_set; pe_cnt++;
+ st_a[st_cnt] = (XPointer) XNFontSet; st_cnt++;
+ st_a[st_cnt] = (XPointer) p->font_set; st_cnt++;
+- height = maxAscentOfFontSet(p->font_set)
+- + maxDescentOfFontSet(p->font_set);
++ if (p->font_set) {
++ height = maxAscentOfFontSet(p->font_set)
++ + maxDescentOfFontSet(p->font_set);
++ }
+ height = SetVendorShellHeight(ve, height);
+ }
+ if (p->flg & CIFg) {
+Index: xc/lib/Xpm/Imakefile
+diff -u xc/lib/Xpm/Imakefile:1.2.4.1 xc/lib/Xpm/Imakefile:1.2.4.2
+--- xc/lib/Xpm/Imakefile:1.2.4.1 Wed Sep 15 15:47:41 2004
++++ xc/lib/Xpm/Imakefile Fri Dec 17 01:09:37 2004
+@@ -46,12 +46,20 @@
+ STRLCATDEF = -DHAS_STRLCAT
+ #endif
+
++#if HasSnprintf
++SNPRINTFDEF = -DHAS_SNPRINTF
++#else
++SNPRINTFDEF = -Dsnprintf=_XpmSnprintf
++SNPRINTFSRCS = snprintf.c
++SNPRINTFOBJS = snprintf.o
++#endif
++
+ #if defined(Win32Architecture)
+ ZPIPEDEF = -DNO_ZPIPE
+ #endif
+
+ DEFINES = $(STRDUPDEF) $(STRCASECMPDEF) $(SPRINTFDEF) $(STRLCATDEF) \
+- $(ZPIPEDEF) $(ZFILEDEF)
++ $(SNPRINTFDEF) $(ZPIPEDEF) $(ZFILEDEF)
+
+ HEADERS = xpm.h
+
+@@ -59,13 +67,15 @@
+ CrBufFrI.c CrDatFrP.c CrPFrBuf.c RdFToI.c WrFFrI.c \
+ CrBufFrP.c CrIFrBuf.c CrPFrDat.c RdFToP.c WrFFrP.c \
+ CrDatFrI.c CrIFrDat.c RdFToDat.c WrFFrDat.c \
+- Attrib.c CrIFrP.c CrPFrI.c Image.c Info.c RdFToBuf.c WrFFrBuf.c
++ Attrib.c CrIFrP.c CrPFrI.c Image.c Info.c RdFToBuf.c WrFFrBuf.c \
++ $(SNPRINTFSRCS)
+
+ OBJS = data.o create.o misc.o rgb.o scan.o parse.o hashtab.o \
+ CrBufFrI.o CrDatFrP.o CrPFrBuf.o RdFToI.o WrFFrI.o \
+ CrBufFrP.o CrIFrBuf.o CrPFrDat.o RdFToP.o WrFFrP.o \
+ CrDatFrI.o CrIFrDat.o RdFToDat.o WrFFrDat.o \
+- Attrib.o CrIFrP.o CrPFrI.o Image.o Info.o RdFToBuf.o WrFFrBuf.o
++ Attrib.o CrIFrP.o CrPFrI.o Image.o Info.o RdFToBuf.o WrFFrBuf.o \
++ $(SNPRINTFOBJS)
+
+ XPMDIR = $(TOP)/extras/Xpm
+ XPMLIBDIR = $(TOP)/extras/Xpm/lib
+@@ -105,4 +115,8 @@
+ LinkSourceFile(WrFFrBuf.c,$(XPMLIBDIR))
+ LinkSourceFile(xpm.h,$(XPMLIBDIR))
+
++#if !HasSnprintf
++LinkSourceFile(snprintf.c,$(LIBSRC)/misc)
++#endif
++
+ DependTarget()
+Index: xc/lib/dmx/dmx.c
+diff -u xc/lib/dmx/dmx.c:1.1 xc/lib/dmx/dmx.c:1.1.4.2
+--- xc/lib/dmx/dmx.c:1.1 Wed Jun 30 20:06:53 2004
++++ xc/lib/dmx/dmx.c Mon Dec 13 01:08:30 2004
+@@ -424,7 +424,7 @@
+ if (length) {
+ char *buffer = Xmalloc(paddedLength);
+ memset(buffer, 0, paddedLength);
+- strcpy(buffer, displayName);
++ memcpy(buffer, displayName, length);
+ Data32(dpy, buffer, paddedLength);
+ Xfree(buffer);
+ }
+@@ -730,7 +730,7 @@
+ if (length) {
+ char *buffer = Xmalloc(paddedLength);
+ memset(buffer, 0, paddedLength);
+- strcpy(buffer, attr->name);
++ memcpy(buffer, attr->name, paddedLength);
+ Data32(dpy, buffer, paddedLength);
+ Xfree(buffer);
+ }
+Index: xc/lib/font/util/Imakefile
+diff -u xc/lib/font/util/Imakefile:1.3 xc/lib/font/util/Imakefile:1.3.2.1
+--- xc/lib/font/util/Imakefile:1.3 Fri Aug 27 19:27:11 2004
++++ xc/lib/font/util/Imakefile Tue Jan 25 01:17:54 2005
+@@ -19,15 +19,6 @@
+ it doesn't break anything. */
+ SYS_DEFINES = -D__XPG4_CHAR_CLASS__
+ #endif
+-#ifndef LynxOSArchitecture
+-/* See xc/lib/font/FreeType/Imakefile - if we build the internal version of
+- * FreeType we should not implement functions already defined by it
+- * (see http://pdx.freedesktop.org/cgi-bin/bugzilla/show_bug.cgi?id=513)
+- */
+-#if !HasFreetype2 && !SharedLibFreetype2
+-INTERNALDEFINES = -DUSE_INTERNAL_FREETYPE
+-#endif
+-#endif
+
+
+ DEFINES = StrcasecmpDefines $(SYS_DEFINES) $(INTERNALDEFINES)
+Index: xc/lib/font/util/utilbitmap.c
+diff -u xc/lib/font/util/utilbitmap.c:1.2 xc/lib/font/util/utilbitmap.c:1.2.4.1
+--- xc/lib/font/util/utilbitmap.c:1.2 Fri Apr 23 18:44:23 2004
++++ xc/lib/font/util/utilbitmap.c Tue Jan 25 01:17:54 2005
+@@ -27,8 +27,6 @@
+ */
+ /* $XFree86: xc/lib/font/util/utilbitmap.c,v 1.4 2001/01/17 19:43:34 dawes Exp $ */
+
+-#ifndef USE_INTERNAL_FREETYPE
+-
+ /*
+ * Author: Keith Packard, MIT X Consortium
+ */
+@@ -184,5 +182,4 @@
+ return dstWidthBytes * height;
+ }
+
+-#endif /* !USE_INTERNAL_FREETYPE */
+
+Index: xc/nls/compose.dir
+diff -u xc/nls/compose.dir:1.2 xc/nls/compose.dir:1.2.4.1
+--- xc/nls/compose.dir:1.2 Fri Apr 23 18:44:33 2004
++++ xc/nls/compose.dir Tue Jan 25 02:03:01 2005
+@@ -326,7 +326,7 @@
+ en_US.UTF-8/Compose: ph_PH.UTF-8
+ en_US.UTF-8/Compose: pl_PL.UTF-8
+ en_US.UTF-8/Compose: pp_AN.UTF-8
+-en_US.UTF-8/Compose: pt_BR.UTF-8
++pt_BR.UTF-8/Compose: pt_BR.UTF-8
+ en_US.UTF-8/Compose: pt_PT.UTF-8
+ en_US.UTF-8/Compose: ro_RO.UTF-8
+ en_US.UTF-8/Compose: ru_RU.UTF-8
+Index: xc/nls/locale.dir
+diff -u xc/nls/locale.dir:1.2 xc/nls/locale.dir:1.2.4.1
+--- xc/nls/locale.dir:1.2 Fri Apr 23 18:44:33 2004
++++ xc/nls/locale.dir Tue Jan 25 02:03:01 2005
+@@ -1,4 +1,4 @@
+-XCOMM $XdotOrg: xc/nls/locale.dir,v 1.2 2004/04/23 18:44:33 eich Exp $
++XCOMM $XdotOrg: xc/nls/locale.dir,v 1.2.4.1 2005/01/25 02:03:01 gisburn Exp $
+ XCOMM $Xorg: locale.dir,v 1.3 2000/08/17 19:46:48 cpqbld Exp $
+ XCOMM
+ XCOMM This file contains locale database file names
+@@ -355,7 +355,7 @@
+ en_US.UTF-8/XLC_LOCALE: ph_PH.UTF-8
+ en_US.UTF-8/XLC_LOCALE: pl_PL.UTF-8
+ en_US.UTF-8/XLC_LOCALE: pp_AN.UTF-8
+-en_US.UTF-8/XLC_LOCALE: pt_BR.UTF-8
++pt_BR.UTF-8/XLC_LOCALE: pt_BR.UTF-8
+ en_US.UTF-8/XLC_LOCALE: pt_PT.UTF-8
+ en_US.UTF-8/XLC_LOCALE: ro_RO.UTF-8
+ en_US.UTF-8/XLC_LOCALE: ru_RU.UTF-8
+Index: xc/nls/Compose/Imakefile
+diff -u xc/nls/Compose/Imakefile:1.2 xc/nls/Compose/Imakefile:1.2.4.1
+--- xc/nls/Compose/Imakefile:1.2 Fri Apr 23 18:44:33 2004
++++ xc/nls/Compose/Imakefile Tue Jan 25 02:03:01 2005
+@@ -1,5 +1,5 @@
+ XCOMM $Xorg: Imakefile,v 1.3 2000/08/17 19:46:48 cpqbld Exp $
+-XCOMM $XdotOrg: xc/nls/Compose/Imakefile,v 1.2 2004/04/23 18:44:33 eich Exp $
++XCOMM $XdotOrg: xc/nls/Compose/Imakefile,v 1.2.4.1 2005/01/25 02:03:01 gisburn Exp $
+
+
+
+@@ -56,6 +56,7 @@
+ ComposeTarget(koi8-u)
+ ComposeTarget(koi8-c)
+ ComposeTarget(mulelao-1)
++ComposeTarget(pt_BR.UTF-8)
+ ComposeTarget(vi_VN.tcvn)
+ ComposeTarget(vi_VN.viscii)
+ ComposeTarget(zh_CN)
+Index: xc/nls/Compose/pt_BR.UTF-8
+diff -u /dev/null xc/nls/Compose/pt_BR.UTF-8:1.1.2.2
+--- /dev/null Fri Feb 11 21:35:32 2005
++++ xc/nls/Compose/pt_BR.UTF-8 Tue Feb 1 03:17:00 2005
+@@ -0,0 +1,5541 @@
++XCOMM UTF-8 (Unicode) compose sequence
++XCOMM David.Monniaux@ens.fr
++XCOMM
++XCOMM Modified for Brazilian Portuguese by Gustavo Noronha Silva <kov@debian.org>
++
++XCOMM Part 1 - Manual definitions
++
++XCOMM Spacing versions of dead accents
++<dead_tilde> <space> : "~" asciitilde
++<dead_tilde> <dead_tilde> : "~" asciitilde
++<dead_acute> <space> : "'" apostrophe
++<dead_acute> <dead_acute> : "´" acute
++<dead_grave> <space> : "`" grave
++<dead_grave> <dead_grave> : "`" grave
++<dead_circumflex> <space> : "^" asciicircum
++<dead_circumflex> <dead_circumflex> : "^" asciicircum
++<dead_abovering> <space> : "°" degree
++<dead_abovering> <dead_abovering> : "°" degree
++<dead_macron> <space> : "¯" macron
++<dead_macron> <dead_macron> : "¯" macron
++<dead_breve> <space> : "˘" breve
++<dead_breve> <dead_breve> : "˘" breve
++<dead_abovedot> <space> : "˙" abovedot
++<dead_abovedot> <dead_abovedot> : "˙" abovedot
++<dead_diaeresis> <dead_diaeresis> : "¨" diaeresis
++<dead_diaeresis> <space> : "\"" quotedbl
++<dead_doubleacute> <space> : "˝" U2dd
++<dead_doubleacute> <dead_doubleacute> : "˝" U2dd
++<dead_caron> <space> : "ˇ" caron
++<dead_caron> <dead_caron> : "ˇ" caron
++<dead_cedilla> <space> : "¸" cedilla
++<dead_cedilla> <dead_cedilla> : "¸" cedilla
++<dead_ogonek> <dead_space> : "˛" ogonek
++<dead_ogonek> <dead_ogonek> : "˛" ogonek
++<dead_iota> <dead_space> : "ͺ" U37a
++<dead_iota> <dead_iota> : "ͺ" U37a
++
++XCOMM ASCII characters that may be difficult to access
++XCOMM on some keyboards.
++<Multi_key> <plus> <plus> : "#" numbersign
++<Multi_key> <apostrophe> <space> : "'" apostrophe
++<Multi_key> <space> <apostrophe> : "'" apostrophe
++<Multi_key> <A> <T> : "@" at
++<Multi_key> <parenleft> <parenleft> : "[" bracketleft
++<Multi_key> <slash> <slash> : "\\" backslash
++<Multi_key> <slash> <less> : "\\" backslash
++<Multi_key> <less> <slash> : "\\" backslash
++<Multi_key> <parenright> <parenright> : "]" bracketright
++
++<Multi_key> <asciicircum> <space> : "^" asciicircum
++<Multi_key> <space> <asciicircum> : "^" asciicircum
++<Multi_key> <greater> <space> : "^" asciicircum
++<Multi_key> <space> <greater> : "^" asciicircum
++
++<Multi_key> <grave> <space> : "`" grave
++<Multi_key> <space> <grave> : "`" grave
++
++<Multi_key> <parenleft> <minus> : "{" braceleft
++<Multi_key> <minus> <parenleft> : "{" braceleft
++
++<Multi_key> <slash> <asciicircum> : "|" bar
++<Multi_key> <asciicircum> <slash> : "|" bar
++<Multi_key> <V> <L> : "|" bar
++<Multi_key> <L> <V> : "|" bar
++<Multi_key> <v> <l> : "|" bar
++<Multi_key> <l> <v> : "|" bar
++
++<Multi_key> <parenright> <minus> : "}" braceright
++<Multi_key> <minus> <parenright> : "}" braceright
++
++<Multi_key> <asciitilde> <space> : "~" asciitilde
++<Multi_key> <space> <asciitilde> : "~" asciitilde
++<Multi_key> <minus> <space> : "~" asciitilde
++<Multi_key> <space> <minus> : "~" asciitilde
++
++XCOMM Spaces
++<Multi_key> <space> <space> : " " nobreakspace # NO-BREAK SPACE
++<Multi_key> <space> <period>: " " U2008 # PUNCTUATION SPACE
++
++<Multi_key> <o> <c> : "©" copyright
++<Multi_key> <o> <C> : "©" copyright
++<Multi_key> <O> <c> : "©" copyright
++<Multi_key> <O> <C> : "©" copyright
++
++<Multi_key> <o> <r> : "®" registered
++<Multi_key> <o> <R> : "®" registered
++<Multi_key> <O> <r> : "®" registered
++<Multi_key> <O> <R> : "®" registered
++
++<Multi_key> <period> <greater> : "›" U203a
++<Multi_key> <period> <less> : "‹" U2039
++<Multi_key> <period> <period> : "·" U00B7
++<Multi_key> <exclam> <asciicircum> : "¦" brokenbar
++<Multi_key> <exclam> <exclam> : "¡" exclamdown
++<Multi_key> <p> <exclam> : "¶" paragraph
++<Multi_key> <P> <exclam> : "¶" paragraph
++<Multi_key> <plus> <minus> : "±" plusminus
++<Multi_key> <question> <question> : "¿" questiondown
++<Multi_key> <e> <e> : "Ə" U018f
++<Multi_key> <minus> <d> : "đ" dstroke
++<Multi_key> <minus> <D> : "Đ" Dstroke
++<Multi_key> <s> <s> : "ß" ssharp
++
++<Multi_key> <o> <e> : "œ" oe
++<Multi_key> <O> <E> : "Œ" OE
++<Multi_key> <a> <e> : "æ" ae
++<Multi_key> <A> <E> : "Æ" AE
++
++<Multi_key> <o> <o> : "°" degree # ^0 already taken
++
++XCOMM Quotation marks
++<Multi_key> <quotedbl> <backslash> : "〝" U301d # REVERSED DOUBLE PRIME QUOTATION MARK
++<Multi_key> <quotedbl> <slash> : "〞" U301e # DOUBLE PRIME QUOTATION MARK
++<Multi_key> <less> <less> : "«" guillemotleft # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
++<Multi_key> <greater> <greater> : "»" guillemotright # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
++<Multi_key> <less> <apostrophe> : "‘" U2018 # LEFT SINGLE QUOTATION MARK
++<Multi_key> <apostrophe> <less> : "‘" U2018 # LEFT SINGLE QUOTATION MARK
++<Multi_key> <greater> <apostrophe> : "’" U2019 # RIGHT SINGLE QUOTATION MARK
++<Multi_key> <apostrophe> <greater> : "’" U2019 # RIGHT SINGLE QUOTATION MARK
++<Multi_key> <comma> <apostrophe> : "‚" U201a # SINGLE LOW-9 QUOTATION MARK
++<Multi_key> <apostrophe> <comma> : "‚" U201a # SINGLE LOW-9 QUOTATION MARK
++<Multi_key> <less> <quotedbl> : "“" U201c # LEFT DOUBLE QUOTATION MARK
++<Multi_key> <quotedbl> <less> : "“" U201c # LEFT DOUBLE QUOTATION MARK
++<Multi_key> <greater> <quotedbl> : "”" U201d # RIGHT DOUBLE QUOTATION MARK
++<Multi_key> <quotedbl> <greater> : "”" U201d # RIGHT DOUBLE QUOTATION MARK
++<Multi_key> <comma> <quotedbl> : "„" U201e # DOUBLE LOW-9 QUOTATION MARK
++<Multi_key> <quotedbl> <comma> : "„" U201e # DOUBLE LOW-9 QUOTATION MARK
++
++XCOMM Per xxx
++<Multi_key> <percent> <o> : "‰" U2030 # PER MILLE SIGN
++
++XCOMM Currencies
++<Multi_key> <C> <E> : "₠" U20a0 # EURO-CURRENCY SIGN
++<Multi_key> <C> <slash> : "₡" U20a1 # COLON SIGN
++<Multi_key> <slash> <C> : "₡" U20a1 # COLON SIGN
++<Multi_key> <C> <r> : "₢" U20a2 # CRUZEIRO SIGN
++<Multi_key> <F> <r> : "₣" U20a3 # FRENCH FRANC SIGN
++<Multi_key> <L> <equal> : "₤" U20a4 # LIRA SIGN
++<Multi_key> <equal> <L> : "₤" U20a4 # LIRA SIGN
++<Multi_key> <m> <slash> : "₥" U20a5 # MILL SIGN
++<Multi_key> <slash> <m> : "₥" U20a5 # MILL SIGN
++<Multi_key> <N> <equal> : "₦" U20a6 # NAIRA SIGN
++<Multi_key> <equal> <N> : "₦" U20a6 # NAIRA SIGN
++<Multi_key> <P> <t> : "₧" U20a7 # PESETA SIGN
++<Multi_key> <R> <s> : "₨" U20a8 # RUPEE SIGN
++<Multi_key> <W> <equal> : "₩" U20a9 # WON SIGN
++<Multi_key> <equal> <W> : "₩" U20a9 # WON SIGN
++XCOMM "₪" U20aa NEW SHEQEL SIGN
++<Multi_key> <d> <minus> : "₫" U20ab # DONG SIGN
++<Multi_key> <C> <equal> : "€" EuroSign # EURO SIGN
++<Multi_key> <equal> <C> : "€" EuroSign # EURO SIGN
++<Multi_key> <E> <equal> : "€" EuroSign # EURO SIGN
++<Multi_key> <equal> <E> : "€" EuroSign # EURO SIGN
++
++<Multi_key> <L> <minus> : "£" U00a3 # POUND SIGN
++<Multi_key> <minus> <L> : "£" U00a3 # POUND SIGN
++<Multi_key> <Y> <equal> : "¥" yen
++<Multi_key> <equal><Y> : "¥" yen
++
++XCOMM Long S
++<Multi_key> <f> <s> : "ſ" U017f # LONG S
++<Multi_key> <f> <S> : "ſ" U017f # LONG S
++
++XCOMM Dashes
++<Multi_key> <minus> <minus> <period> : "–" U2013 # EN DASH
++<Multi_key> <minus> <minus> <minus> : "—" U2014 # EM DASH
++
++XCOMM Musical alterations
++<Multi_key> <numbersign> <b> : "♭" U266d # MUSIC FLAT SIGN
++<Multi_key> <numbersign> <f> : "♮" U266e # MUSIC NATURAL SIGN
++<Multi_key> <numbersign> <numbersign> : "♯" U266f # MUSIC SHARP SIGN
++
++XCOMM Other symbols
++<Multi_key> <s> <o> : "§" section # SECTION SIGN
++<Multi_key> <o> <s> : "§" section # SECTION SIGN
++
++<Multi_key> <o> <x> : "¤" currency
++<Multi_key> <x> <o> : "¤" currency
++
++<Multi_key> <P> <P> : "¶" paragraph # PILCROW SIGN (PARAGRAPH SIGN)
++
++XCOMM Part 2
++
++XCOMM Compose map for Korean Hangul(Choseongul) Conjoining Jamos automatically
++XCOMM generated from UnicodeData-2.0.14.txt at
++XCOMM ftp://ftp.unicode.org/Public/2.0-Update/UnicodeData-2.0.14.txt
++XCOMM by Jungshik Shin <jshin@jshin.net> 2002-10-17
++XCOMM There are some conflicts among sequences, but I left them alone.
++XCOMM
++XCOMM group 1: cluster jamos made of three basic jamos
++
++ <Multi_key> <U1107> <U1109> <U1100> : "ᄢ" U1122 : ᄇᅠ ᄉᅠ ᄀᅠ = ᄢᅠ
++ <Multi_key> <U1107> <U1109> <U1103> : "ᄣ" U1123 : ᄇᅠ ᄉᅠ ᄃᅠ = ᄣᅠ
++ <Multi_key> <U1107> <U1109> <U1107> : "ᄤ" U1124 : ᄇᅠ ᄉᅠ ᄇᅠ = ᄤᅠ
++ <Multi_key> <U1107> <U1109> <U1109> : "ᄥ" U1125 : ᄇᅠ ᄉᅠ ᄉᅠ = ᄥᅠ
++ <Multi_key> <U1107> <U1109> <U110c> : "ᄦ" U1126 : ᄇᅠ ᄉᅠ ᄌᅠ = ᄦᅠ
++ <Multi_key> <U1107> <U1107> <U110b> : "ᄬ" U112c : ᄇᅠ ᄇᅠ ᄋᅠ = ᄬᅠ
++ <Multi_key> <U1109> <U1107> <U1100> : "ᄳ" U1133 : ᄉᅠ ᄇᅠ ᄀᅠ = ᄳᅠ
++ <Multi_key> <U1109> <U1109> <U1109> : "ᄴ" U1134 : ᄉᅠ ᄉᅠ ᄉᅠ = ᄴᅠ
++ <Multi_key> <U1169> <U1161> <U1175> : "ᅫ" U116b : ᅟᅩ ᅟᅡ ᅟᅵ = ᅟᅫ
++ <Multi_key> <U116e> <U1165> <U1175> : "ᅰ" U1170 : ᅟᅮ ᅟᅥ ᅟᅵ = ᅟᅰ
++ <Multi_key> <U116e> <U1165> <U1173> : "ᆋ" U118b : ᅟᅮ ᅟᅥ ᅟᅳ = ᅟᆋ
++ <Multi_key> <U11a8> <U11ba> <U11a8> : "ᇄ" U11c4 : ᅟᅠᆨ ᅟᅠᆺ ᅟᅠᆨ = ᅟᅠᇄ
++ <Multi_key> <U11af> <U11a8> <U11ba> : "ᇌ" U11cc : ᅟᅠᆯ ᅟᅠᆨ ᅟᅠᆺ = ᅟᅠᇌ
++ <Multi_key> <U11af> <U11ae> <U11c2> : "ᇏ" U11cf : ᅟᅠᆯ ᅟᅠᆮ ᅟᅠᇂ = ᅟᅠᇏ
++ <Multi_key> <U11af> <U11b7> <U11a8> : "ᇑ" U11d1 : ᅟᅠᆯ ᅟᅠᆷ ᅟᅠᆨ = ᅟᅠᇑ
++ <Multi_key> <U11af> <U11b7> <U11ba> : "ᇒ" U11d2 : ᅟᅠᆯ ᅟᅠᆷ ᅟᅠᆺ = ᅟᅠᇒ
++ <Multi_key> <U11af> <U11b8> <U11ba> : "ᇓ" U11d3 : ᅟᅠᆯ ᅟᅠᆸ ᅟᅠᆺ = ᅟᅠᇓ
++ <Multi_key> <U11af> <U11b8> <U11c2> : "ᇔ" U11d4 : ᅟᅠᆯ ᅟᅠᆸ ᅟᅠᇂ = ᅟᅠᇔ
++ <Multi_key> <U11af> <U11b8> <U11bc> : "ᇕ" U11d5 : ᅟᅠᆯ ᅟᅠᆸ ᅟᅠᆼ = ᅟᅠᇕ
++ <Multi_key> <U11af> <U11ba> <U11ba> : "ᇖ" U11d6 : ᅟᅠᆯ ᅟᅠᆺ ᅟᅠᆺ = ᅟᅠᇖ
++ <Multi_key> <U11b7> <U11ba> <U11ba> : "ᇞ" U11de : ᅟᅠᆷ ᅟᅠᆺ ᅟᅠᆺ = ᅟᅠᇞ
++ <Multi_key> <U11bc> <U11a8> <U11a8> : "ᇭ" U11ed : ᅟᅠᆼ ᅟᅠᆨ ᅟᅠᆨ = ᅟᅠᇭ
++ <Multi_key> <U1100> <U1100> : "ᄁ" U1101 : ᄀᅠ ᄀᅠ = ᄁᅠ
++ <Multi_key> <U1103> <U1103> : "ᄄ" U1104 : ᄃᅠ ᄃᅠ = ᄄᅠ
++ <Multi_key> <U1107> <U1107> : "ᄈ" U1108 : ᄇᅠ ᄇᅠ = ᄈᅠ
++ <Multi_key> <U1109> <U1109> : "ᄊ" U110a : ᄉᅠ ᄉᅠ = ᄊᅠ
++ <Multi_key> <U110c> <U110c> : "ᄍ" U110d : ᄌᅠ ᄌᅠ = ᄍᅠ
++ <Multi_key> <U1102> <U1100> : "ᄓ" U1113 : ᄂᅠ ᄀᅠ = ᄓᅠ
++ <Multi_key> <U1102> <U1102> : "ᄔ" U1114 : ᄂᅠ ᄂᅠ = ᄔᅠ
++ <Multi_key> <U1102> <U1103> : "ᄕ" U1115 : ᄂᅠ ᄃᅠ = ᄕᅠ
++ <Multi_key> <U1102> <U1107> : "ᄖ" U1116 : ᄂᅠ ᄇᅠ = ᄖᅠ
++ <Multi_key> <U1103> <U1100> : "ᄗ" U1117 : ᄃᅠ ᄀᅠ = ᄗᅠ
++ <Multi_key> <U1105> <U1102> : "ᄘ" U1118 : ᄅᅠ ᄂᅠ = ᄘᅠ
++ <Multi_key> <U1105> <U1105> : "ᄙ" U1119 : ᄅᅠ ᄅᅠ = ᄙᅠ
++ <Multi_key> <U1105> <U1112> : "ᄚ" U111a : ᄅᅠ ᄒᅠ = ᄚᅠ
++ <Multi_key> <U1105> <U110b> : "ᄛ" U111b : ᄅᅠ ᄋᅠ = ᄛᅠ
++ <Multi_key> <U1106> <U1107> : "ᄜ" U111c : ᄆᅠ ᄇᅠ = ᄜᅠ
++ <Multi_key> <U1106> <U110b> : "ᄝ" U111d : ᄆᅠ ᄋᅠ = ᄝᅠ
++ <Multi_key> <U1107> <U1100> : "ᄞ" U111e : ᄇᅠ ᄀᅠ = ᄞᅠ
++ <Multi_key> <U1107> <U1102> : "ᄟ" U111f : ᄇᅠ ᄂᅠ = ᄟᅠ
++ <Multi_key> <U1107> <U1103> : "ᄠ" U1120 : ᄇᅠ ᄃᅠ = ᄠᅠ
++ <Multi_key> <U1107> <U1109> : "ᄡ" U1121 : ᄇᅠ ᄉᅠ = ᄡᅠ
++ <Multi_key> <U1107> <U110c> : "ᄧ" U1127 : ᄇᅠ ᄌᅠ = ᄧᅠ
++ <Multi_key> <U1107> <U110e> : "ᄨ" U1128 : ᄇᅠ ᄎᅠ = ᄨᅠ
++ <Multi_key> <U1107> <U1110> : "ᄩ" U1129 : ᄇᅠ ᄐᅠ = ᄩᅠ
++ <Multi_key> <U1107> <U1111> : "ᄪ" U112a : ᄇᅠ ᄑᅠ = ᄪᅠ
++ <Multi_key> <U1107> <U110b> : "ᄫ" U112b : ᄇᅠ ᄋᅠ = ᄫᅠ
++ <Multi_key> <U1109> <U1100> : "ᄭ" U112d : ᄉᅠ ᄀᅠ = ᄭᅠ
++ <Multi_key> <U1109> <U1102> : "ᄮ" U112e : ᄉᅠ ᄂᅠ = ᄮᅠ
++ <Multi_key> <U1109> <U1103> : "ᄯ" U112f : ᄉᅠ ᄃᅠ = ᄯᅠ
++ <Multi_key> <U1109> <U1105> : "ᄰ" U1130 : ᄉᅠ ᄅᅠ = ᄰᅠ
++ <Multi_key> <U1109> <U1106> : "ᄱ" U1131 : ᄉᅠ ᄆᅠ = ᄱᅠ
++ <Multi_key> <U1109> <U1107> : "ᄲ" U1132 : ᄉᅠ ᄇᅠ = ᄲᅠ
++ <Multi_key> <U1109> <U110b> : "ᄵ" U1135 : ᄉᅠ ᄋᅠ = ᄵᅠ
++ <Multi_key> <U1109> <U110c> : "ᄶ" U1136 : ᄉᅠ ᄌᅠ = ᄶᅠ
++ <Multi_key> <U1109> <U110e> : "ᄷ" U1137 : ᄉᅠ ᄎᅠ = ᄷᅠ
++ <Multi_key> <U1109> <U110f> : "ᄸ" U1138 : ᄉᅠ ᄏᅠ = ᄸᅠ
++ <Multi_key> <U1109> <U1110> : "ᄹ" U1139 : ᄉᅠ ᄐᅠ = ᄹᅠ
++ <Multi_key> <U1109> <U1111> : "ᄺ" U113a : ᄉᅠ ᄑᅠ = ᄺᅠ
++ <Multi_key> <U1109> <U1112> : "ᄻ" U113b : ᄉᅠ ᄒᅠ = ᄻᅠ
++ <Multi_key> <U113c> <U113c> : "ᄽ" U113d : ᄼᅠ ᄼᅠ = ᄽᅠ
++ <Multi_key> <U113e> <U113e> : "ᄿ" U113f : ᄾᅠ ᄾᅠ = ᄿᅠ
++ <Multi_key> <U110b> <U1100> : "ᅁ" U1141 : ᄋᅠ ᄀᅠ = ᅁᅠ
++ <Multi_key> <U110b> <U1103> : "ᅂ" U1142 : ᄋᅠ ᄃᅠ = ᅂᅠ
++ <Multi_key> <U110b> <U1106> : "ᅃ" U1143 : ᄋᅠ ᄆᅠ = ᅃᅠ
++ <Multi_key> <U110b> <U1107> : "ᅄ" U1144 : ᄋᅠ ᄇᅠ = ᅄᅠ
++ <Multi_key> <U110b> <U1109> : "ᅅ" U1145 : ᄋᅠ ᄉᅠ = ᅅᅠ
++ <Multi_key> <U110b> <U1140> : "ᅆ" U1146 : ᄋᅠ ᅀᅠ = ᅆᅠ
++ <Multi_key> <U110b> <U110b> : "ᅇ" U1147 : ᄋᅠ ᄋᅠ = ᅇᅠ
++ <Multi_key> <U110b> <U110c> : "ᅈ" U1148 : ᄋᅠ ᄌᅠ = ᅈᅠ
++ <Multi_key> <U110b> <U110e> : "ᅉ" U1149 : ᄋᅠ ᄎᅠ = ᅉᅠ
++ <Multi_key> <U110b> <U1110> : "ᅊ" U114a : ᄋᅠ ᄐᅠ = ᅊᅠ
++ <Multi_key> <U110b> <U1111> : "ᅋ" U114b : ᄋᅠ ᄑᅠ = ᅋᅠ
++ <Multi_key> <U110c> <U110b> : "ᅍ" U114d : ᄌᅠ ᄋᅠ = ᅍᅠ
++ <Multi_key> <U114e> <U114e> : "ᅏ" U114f : ᅎᅠ ᅎᅠ = ᅏᅠ
++ <Multi_key> <U1150> <U1150> : "ᅑ" U1151 : ᅐᅠ ᅐᅠ = ᅑᅠ
++ <Multi_key> <U110e> <U110f> : "ᅒ" U1152 : ᄎᅠ ᄏᅠ = ᅒᅠ
++ <Multi_key> <U110e> <U1112> : "ᅓ" U1153 : ᄎᅠ ᄒᅠ = ᅓᅠ
++ <Multi_key> <U1111> <U1107> : "ᅖ" U1156 : ᄑᅠ ᄇᅠ = ᅖᅠ
++ <Multi_key> <U1111> <U110b> : "ᅗ" U1157 : ᄑᅠ ᄋᅠ = ᅗᅠ
++ <Multi_key> <U1112> <U1112> : "ᅘ" U1158 : ᄒᅠ ᄒᅠ = ᅘᅠ
++ <Multi_key> <U1161> <U1175> : "ᅢ" U1162 : ᅟᅡ ᅟᅵ = ᅟᅢ
++ <Multi_key> <U1163> <U1175> : "ᅤ" U1164 : ᅟᅣ ᅟᅵ = ᅟᅤ
++ <Multi_key> <U1165> <U1175> : "ᅦ" U1166 : ᅟᅥ ᅟᅵ = ᅟᅦ
++ <Multi_key> <U1167> <U1175> : "ᅨ" U1168 : ᅟᅧ ᅟᅵ = ᅟᅨ
++ <Multi_key> <U1169> <U1161> : "ᅪ" U116a : ᅟᅩ ᅟᅡ = ᅟᅪ
++ <Multi_key> <U1169> <U1175> : "ᅬ" U116c : ᅟᅩ ᅟᅵ = ᅟᅬ
++ <Multi_key> <U116e> <U1165> : "ᅯ" U116f : ᅟᅮ ᅟᅥ = ᅟᅯ
++ <Multi_key> <U116e> <U1175> : "ᅱ" U1171 : ᅟᅮ ᅟᅵ = ᅟᅱ
++ <Multi_key> <U1173> <U1175> : "ᅴ" U1174 : ᅟᅳ ᅟᅵ = ᅟᅴ
++ <Multi_key> <U1161> <U1169> : "ᅶ" U1176 : ᅟᅡ ᅟᅩ = ᅟᅶ
++ <Multi_key> <U1161> <U116e> : "ᅷ" U1177 : ᅟᅡ ᅟᅮ = ᅟᅷ
++ <Multi_key> <U1163> <U1169> : "ᅸ" U1178 : ᅟᅣ ᅟᅩ = ᅟᅸ
++ <Multi_key> <U1163> <U116d> : "ᅹ" U1179 : ᅟᅣ ᅟᅭ = ᅟᅹ
++ <Multi_key> <U1165> <U1169> : "ᅺ" U117a : ᅟᅥ ᅟᅩ = ᅟᅺ
++ <Multi_key> <U1165> <U116e> : "ᅻ" U117b : ᅟᅥ ᅟᅮ = ᅟᅻ
++ <Multi_key> <U1165> <U1173> : "ᅼ" U117c : ᅟᅥ ᅟᅳ = ᅟᅼ
++ <Multi_key> <U1167> <U1169> : "ᅽ" U117d : ᅟᅧ ᅟᅩ = ᅟᅽ
++ <Multi_key> <U1167> <U116e> : "ᅾ" U117e : ᅟᅧ ᅟᅮ = ᅟᅾ
++ <Multi_key> <U1169> <U1165> : "ᅿ" U117f : ᅟᅩ ᅟᅥ = ᅟᅿ
++ <Multi_key> <U1169> <U1166> : "ᆀ" U1180 : ᅟᅩ ᅟᅦ = ᅟᆀ
++ <Multi_key> <U1169> <U1168> : "ᆁ" U1181 : ᅟᅩ ᅟᅨ = ᅟᆁ
++ <Multi_key> <U1169> <U1169> : "ᆂ" U1182 : ᅟᅩ ᅟᅩ = ᅟᆂ
++ <Multi_key> <U1169> <U116e> : "ᆃ" U1183 : ᅟᅩ ᅟᅮ = ᅟᆃ
++ <Multi_key> <U116d> <U1163> : "ᆄ" U1184 : ᅟᅭ ᅟᅣ = ᅟᆄ
++ <Multi_key> <U116d> <U1164> : "ᆅ" U1185 : ᅟᅭ ᅟᅤ = ᅟᆅ
++ <Multi_key> <U116d> <U1167> : "ᆆ" U1186 : ᅟᅭ ᅟᅧ = ᅟᆆ
++ <Multi_key> <U116d> <U1169> : "ᆇ" U1187 : ᅟᅭ ᅟᅩ = ᅟᆇ
++ <Multi_key> <U116d> <U1175> : "ᆈ" U1188 : ᅟᅭ ᅟᅵ = ᅟᆈ
++ <Multi_key> <U116e> <U1161> : "ᆉ" U1189 : ᅟᅮ ᅟᅡ = ᅟᆉ
++ <Multi_key> <U116e> <U1162> : "ᆊ" U118a : ᅟᅮ ᅟᅢ = ᅟᆊ
++ <Multi_key> <U116e> <U1168> : "ᆌ" U118c : ᅟᅮ ᅟᅨ = ᅟᆌ
++ <Multi_key> <U116e> <U116e> : "ᆍ" U118d : ᅟᅮ ᅟᅮ = ᅟᆍ
++ <Multi_key> <U1172> <U1161> : "ᆎ" U118e : ᅟᅲ ᅟᅡ = ᅟᆎ
++ <Multi_key> <U1172> <U1165> : "ᆏ" U118f : ᅟᅲ ᅟᅥ = ᅟᆏ
++ <Multi_key> <U1172> <U1166> : "ᆐ" U1190 : ᅟᅲ ᅟᅦ = ᅟᆐ
++ <Multi_key> <U1172> <U1167> : "ᆑ" U1191 : ᅟᅲ ᅟᅧ = ᅟᆑ
++ <Multi_key> <U1172> <U1168> : "ᆒ" U1192 : ᅟᅲ ᅟᅨ = ᅟᆒ
++ <Multi_key> <U1172> <U116e> : "ᆓ" U1193 : ᅟᅲ ᅟᅮ = ᅟᆓ
++ <Multi_key> <U1172> <U1175> : "ᆔ" U1194 : ᅟᅲ ᅟᅵ = ᅟᆔ
++ <Multi_key> <U1173> <U116e> : "ᆕ" U1195 : ᅟᅳ ᅟᅮ = ᅟᆕ
++ <Multi_key> <U1173> <U1173> : "ᆖ" U1196 : ᅟᅳ ᅟᅳ = ᅟᆖ
++ <Multi_key> <U1174> <U116e> : "ᆗ" U1197 : ᅟᅴ ᅟᅮ = ᅟᆗ
++ <Multi_key> <U1175> <U1161> : "ᆘ" U1198 : ᅟᅵ ᅟᅡ = ᅟᆘ
++ <Multi_key> <U1175> <U1163> : "ᆙ" U1199 : ᅟᅵ ᅟᅣ = ᅟᆙ
++ <Multi_key> <U1175> <U1169> : "ᆚ" U119a : ᅟᅵ ᅟᅩ = ᅟᆚ
++ <Multi_key> <U1175> <U116e> : "ᆛ" U119b : ᅟᅵ ᅟᅮ = ᅟᆛ
++ <Multi_key> <U1175> <U1173> : "ᆜ" U119c : ᅟᅵ ᅟᅳ = ᅟᆜ
++ <Multi_key> <U1175> <U119e> : "ᆝ" U119d : ᅟᅵ ᅟᆞ = ᅟᆝ
++ <Multi_key> <U119e> <U1165> : "ᆟ" U119f : ᅟᆞ ᅟᅥ = ᅟᆟ
++ <Multi_key> <U119e> <U116e> : "ᆠ" U11a0 : ᅟᆞ ᅟᅮ = ᅟᆠ
++ <Multi_key> <U119e> <U1175> : "ᆡ" U11a1 : ᅟᆞ ᅟᅵ = ᅟᆡ
++ <Multi_key> <U119e> <U119e> : "ᆢ" U11a2 : ᅟᆞ ᅟᆞ = ᅟᆢ
++ <Multi_key> <U11a8> <U11a8> : "ᆩ" U11a9 : ᅟᅠᆨ ᅟᅠᆨ = ᅟᅠᆩ
++ <Multi_key> <U11a8> <U11ba> : "ᆪ" U11aa : ᅟᅠᆨ ᅟᅠᆺ = ᅟᅠᆪ
++ <Multi_key> <U11ab> <U11bd> : "ᆬ" U11ac : ᅟᅠᆫ ᅟᅠᆽ = ᅟᅠᆬ
++ <Multi_key> <U11ab> <U11c2> : "ᆭ" U11ad : ᅟᅠᆫ ᅟᅠᇂ = ᅟᅠᆭ
++ <Multi_key> <U11af> <U11a8> : "ᆰ" U11b0 : ᅟᅠᆯ ᅟᅠᆨ = ᅟᅠᆰ
++ <Multi_key> <U11af> <U11b7> : "ᆱ" U11b1 : ᅟᅠᆯ ᅟᅠᆷ = ᅟᅠᆱ
++ <Multi_key> <U11af> <U11b8> : "ᆲ" U11b2 : ᅟᅠᆯ ᅟᅠᆸ = ᅟᅠᆲ
++ <Multi_key> <U11af> <U11ba> : "ᆳ" U11b3 : ᅟᅠᆯ ᅟᅠᆺ = ᅟᅠᆳ
++ <Multi_key> <U11af> <U11c0> : "ᆴ" U11b4 : ᅟᅠᆯ ᅟᅠᇀ = ᅟᅠᆴ
++ <Multi_key> <U11af> <U11c1> : "ᆵ" U11b5 : ᅟᅠᆯ ᅟᅠᇁ = ᅟᅠᆵ
++ <Multi_key> <U11af> <U11c2> : "ᆶ" U11b6 : ᅟᅠᆯ ᅟᅠᇂ = ᅟᅠᆶ
++ <Multi_key> <U11b8> <U11ba> : "ᆹ" U11b9 : ᅟᅠᆸ ᅟᅠᆺ = ᅟᅠᆹ
++ <Multi_key> <U11ba> <U11ba> : "ᆻ" U11bb : ᅟᅠᆺ ᅟᅠᆺ = ᅟᅠᆻ
++ <Multi_key> <U11a8> <U11af> : "ᇃ" U11c3 : ᅟᅠᆨ ᅟᅠᆯ = ᅟᅠᇃ
++ <Multi_key> <U11ab> <U11a8> : "ᇅ" U11c5 : ᅟᅠᆫ ᅟᅠᆨ = ᅟᅠᇅ
++ <Multi_key> <U11ab> <U11ae> : "ᇆ" U11c6 : ᅟᅠᆫ ᅟᅠᆮ = ᅟᅠᇆ
++ <Multi_key> <U11ab> <U11ba> : "ᇇ" U11c7 : ᅟᅠᆫ ᅟᅠᆺ = ᅟᅠᇇ
++ <Multi_key> <U11ab> <U11eb> : "ᇈ" U11c8 : ᅟᅠᆫ ᅟᅠᇫ = ᅟᅠᇈ
++ <Multi_key> <U11ab> <U11c0> : "ᇉ" U11c9 : ᅟᅠᆫ ᅟᅠᇀ = ᅟᅠᇉ
++ <Multi_key> <U11ae> <U11a8> : "ᇊ" U11ca : ᅟᅠᆮ ᅟᅠᆨ = ᅟᅠᇊ
++ <Multi_key> <U11ae> <U11af> : "ᇋ" U11cb : ᅟᅠᆮ ᅟᅠᆯ = ᅟᅠᇋ
++ <Multi_key> <U11af> <U11ab> : "ᇍ" U11cd : ᅟᅠᆯ ᅟᅠᆫ = ᅟᅠᇍ
++ <Multi_key> <U11af> <U11ae> : "ᇎ" U11ce : ᅟᅠᆯ ᅟᅠᆮ = ᅟᅠᇎ
++ <Multi_key> <U11af> <U11af> : "ᇐ" U11d0 : ᅟᅠᆯ ᅟᅠᆯ = ᅟᅠᇐ
++ <Multi_key> <U11af> <U11eb> : "ᇗ" U11d7 : ᅟᅠᆯ ᅟᅠᇫ = ᅟᅠᇗ
++ <Multi_key> <U11af> <U11bf> : "ᇘ" U11d8 : ᅟᅠᆯ ᅟᅠᆿ = ᅟᅠᇘ
++ <Multi_key> <U11af> <U11f9> : "ᇙ" U11d9 : ᅟᅠᆯ ᅟᅠᇹ = ᅟᅠᇙ
++ <Multi_key> <U11b7> <U11a8> : "ᇚ" U11da : ᅟᅠᆷ ᅟᅠᆨ = ᅟᅠᇚ
++ <Multi_key> <U11b7> <U11af> : "ᇛ" U11db : ᅟᅠᆷ ᅟᅠᆯ = ᅟᅠᇛ
++ <Multi_key> <U11b7> <U11b8> : "ᇜ" U11dc : ᅟᅠᆷ ᅟᅠᆸ = ᅟᅠᇜ
++ <Multi_key> <U11b7> <U11ba> : "ᇝ" U11dd : ᅟᅠᆷ ᅟᅠᆺ = ᅟᅠᇝ
++ <Multi_key> <U11b7> <U11eb> : "ᇟ" U11df : ᅟᅠᆷ ᅟᅠᇫ = ᅟᅠᇟ
++ <Multi_key> <U11b7> <U11be> : "ᇠ" U11e0 : ᅟᅠᆷ ᅟᅠᆾ = ᅟᅠᇠ
++ <Multi_key> <U11b7> <U11c2> : "ᇡ" U11e1 : ᅟᅠᆷ ᅟᅠᇂ = ᅟᅠᇡ
++ <Multi_key> <U11b7> <U11bc> : "ᇢ" U11e2 : ᅟᅠᆷ ᅟᅠᆼ = ᅟᅠᇢ
++ <Multi_key> <U11b8> <U11af> : "ᇣ" U11e3 : ᅟᅠᆸ ᅟᅠᆯ = ᅟᅠᇣ
++ <Multi_key> <U11b8> <U11c1> : "ᇤ" U11e4 : ᅟᅠᆸ ᅟᅠᇁ = ᅟᅠᇤ
++ <Multi_key> <U11b8> <U11c2> : "ᇥ" U11e5 : ᅟᅠᆸ ᅟᅠᇂ = ᅟᅠᇥ
++ <Multi_key> <U11b8> <U11bc> : "ᇦ" U11e6 : ᅟᅠᆸ ᅟᅠᆼ = ᅟᅠᇦ
++ <Multi_key> <U11ba> <U11a8> : "ᇧ" U11e7 : ᅟᅠᆺ ᅟᅠᆨ = ᅟᅠᇧ
++ <Multi_key> <U11ba> <U11ae> : "ᇨ" U11e8 : ᅟᅠᆺ ᅟᅠᆮ = ᅟᅠᇨ
++ <Multi_key> <U11ba> <U11af> : "ᇩ" U11e9 : ᅟᅠᆺ ᅟᅠᆯ = ᅟᅠᇩ
++ <Multi_key> <U11ba> <U11b8> : "ᇪ" U11ea : ᅟᅠᆺ ᅟᅠᆸ = ᅟᅠᇪ
++ <Multi_key> <U11bc> <U11a8> : "ᇬ" U11ec : ᅟᅠᆼ ᅟᅠᆨ = ᅟᅠᇬ
++ <Multi_key> <U11bc> <U11bc> : "ᇮ" U11ee : ᅟᅠᆼ ᅟᅠᆼ = ᅟᅠᇮ
++ <Multi_key> <U11bc> <U11bf> : "ᇯ" U11ef : ᅟᅠᆼ ᅟᅠᆿ = ᅟᅠᇯ
++ <Multi_key> <U11f0> <U11ba> : "ᇱ" U11f1 : ᅟᅠᇰ ᅟᅠᆺ = ᅟᅠᇱ
++ <Multi_key> <U11f0> <U11eb> : "ᇲ" U11f2 : ᅟᅠᇰ ᅟᅠᇫ = ᅟᅠᇲ
++ <Multi_key> <U11c1> <U11b8> : "ᇳ" U11f3 : ᅟᅠᇁ ᅟᅠᆸ = ᅟᅠᇳ
++ <Multi_key> <U11c1> <U11bc> : "ᇴ" U11f4 : ᅟᅠᇁ ᅟᅠᆼ = ᅟᅠᇴ
++ <Multi_key> <U11c2> <U11ab> : "ᇵ" U11f5 : ᅟᅠᇂ ᅟᅠᆫ = ᅟᅠᇵ
++ <Multi_key> <U11c2> <U11af> : "ᇶ" U11f6 : ᅟᅠᇂ ᅟᅠᆯ = ᅟᅠᇶ
++ <Multi_key> <U11c2> <U11b7> : "ᇷ" U11f7 : ᅟᅠᇂ ᅟᅠᆷ = ᅟᅠᇷ
++ <Multi_key> <U11c2> <U11b8> : "ᇸ" U11f8 : ᅟᅠᇂ ᅟᅠᆸ = ᅟᅠᇸ
++ <Multi_key> <U1121> <U1100> : "ᄢ" U1122 : ᄡᅠ ᄀᅠ = ᄢᅠ
++ <Multi_key> <U1121> <U1103> : "ᄣ" U1123 : ᄡᅠ ᄃᅠ = ᄣᅠ
++ <Multi_key> <U1121> <U1107> : "ᄤ" U1124 : ᄡᅠ ᄇᅠ = ᄤᅠ
++ <Multi_key> <U1121> <U1109> : "ᄥ" U1125 : ᄡᅠ ᄉᅠ = ᄥᅠ
++ <Multi_key> <U1121> <U110c> : "ᄦ" U1126 : ᄡᅠ ᄌᅠ = ᄦᅠ
++ <Multi_key> <U1108> <U110b> : "ᄬ" U112c : ᄈᅠ ᄋᅠ = ᄬᅠ
++ <Multi_key> <U1132> <U1100> : "ᄳ" U1133 : ᄲᅠ ᄀᅠ = ᄳᅠ
++ <Multi_key> <U110a> <U1109> : "ᄴ" U1134 : ᄊᅠ ᄉᅠ = ᄴᅠ
++ <Multi_key> <U116a> <U1175> : "ᅫ" U116b : ᅟᅪ ᅟᅵ = ᅟᅫ
++ <Multi_key> <U116f> <U1175> : "ᅰ" U1170 : ᅟᅯ ᅟᅵ = ᅟᅰ
++ <Multi_key> <U116f> <U1173> : "ᆋ" U118b : ᅟᅯ ᅟᅳ = ᅟᆋ
++ <Multi_key> <U11aa> <U11a8> : "ᇄ" U11c4 : ᅟᅠᆪ ᅟᅠᆨ = ᅟᅠᇄ
++ <Multi_key> <U11b0> <U11ba> : "ᇌ" U11cc : ᅟᅠᆰ ᅟᅠᆺ = ᅟᅠᇌ
++ <Multi_key> <U11ce> <U11c2> : "ᇏ" U11cf : ᅟᅠᇎ ᅟᅠᇂ = ᅟᅠᇏ
++ <Multi_key> <U11b1> <U11a8> : "ᇑ" U11d1 : ᅟᅠᆱ ᅟᅠᆨ = ᅟᅠᇑ
++ <Multi_key> <U11b1> <U11ba> : "ᇒ" U11d2 : ᅟᅠᆱ ᅟᅠᆺ = ᅟᅠᇒ
++ <Multi_key> <U11b2> <U11ba> : "ᇓ" U11d3 : ᅟᅠᆲ ᅟᅠᆺ = ᅟᅠᇓ
++ <Multi_key> <U11b2> <U11c2> : "ᇔ" U11d4 : ᅟᅠᆲ ᅟᅠᇂ = ᅟᅠᇔ
++ <Multi_key> <U11b2> <U11bc> : "ᇕ" U11d5 : ᅟᅠᆲ ᅟᅠᆼ = ᅟᅠᇕ
++ <Multi_key> <U11b3> <U11ba> : "ᇖ" U11d6 : ᅟᅠᆳ ᅟᅠᆺ = ᅟᅠᇖ
++ <Multi_key> <U11dd> <U11ba> : "ᇞ" U11de : ᅟᅠᇝ ᅟᅠᆺ = ᅟᅠᇞ
++ <Multi_key> <U11ec> <U11a8> : "ᇭ" U11ed : ᅟᅠᇬ ᅟᅠᆨ = ᅟᅠᇭ
++ <Multi_key> <U1107> <U112d> : "ᄢ" U1122 : ᄇᅠ ᄭᅠ = ᄢᅠ
++ <Multi_key> <U1107> <U112f> : "ᄣ" U1123 : ᄇᅠ ᄯᅠ = ᄣᅠ
++ <Multi_key> <U1107> <U1132> : "ᄤ" U1124 : ᄇᅠ ᄲᅠ = ᄤᅠ
++ <Multi_key> <U1107> <U110a> : "ᄥ" U1125 : ᄇᅠ ᄊᅠ = ᄥᅠ
++ <Multi_key> <U1107> <U1136> : "ᄦ" U1126 : ᄇᅠ ᄶᅠ = ᄦᅠ
++ <Multi_key> <U1107> <U112b> : "ᄬ" U112c : ᄇᅠ ᄫᅠ = ᄬᅠ
++ <Multi_key> <U1109> <U111e> : "ᄳ" U1133 : ᄉᅠ ᄞᅠ = ᄳᅠ
++ <Multi_key> <U1109> <U110a> : "ᄴ" U1134 : ᄉᅠ ᄊᅠ = ᄴᅠ
++ <Multi_key> <U1169> <U1162> : "ᅫ" U116b : ᅟᅩ ᅟᅢ = ᅟᅫ
++ <Multi_key> <U116e> <U1166> : "ᅰ" U1170 : ᅟᅮ ᅟᅦ = ᅟᅰ
++ <Multi_key> <U116e> <U117c> : "ᆋ" U118b : ᅟᅮ ᅟᅼ = ᅟᆋ
++ <Multi_key> <U11a8> <U11e7> : "ᇄ" U11c4 : ᅟᅠᆨ ᅟᅠᇧ = ᅟᅠᇄ
++ <Multi_key> <U11af> <U11aa> : "ᇌ" U11cc : ᅟᅠᆯ ᅟᅠᆪ = ᅟᅠᇌ
++ <Multi_key> <U11af> <U11da> : "ᇑ" U11d1 : ᅟᅠᆯ ᅟᅠᇚ = ᅟᅠᇑ
++ <Multi_key> <U11af> <U11dd> : "ᇒ" U11d2 : ᅟᅠᆯ ᅟᅠᇝ = ᅟᅠᇒ
++ <Multi_key> <U11af> <U11b9> : "ᇓ" U11d3 : ᅟᅠᆯ ᅟᅠᆹ = ᅟᅠᇓ
++ <Multi_key> <U11af> <U11e5> : "ᇔ" U11d4 : ᅟᅠᆯ ᅟᅠᇥ = ᅟᅠᇔ
++ <Multi_key> <U11af> <U11e6> : "ᇕ" U11d5 : ᅟᅠᆯ ᅟᅠᇦ = ᅟᅠᇕ
++ <Multi_key> <U11af> <U11bb> : "ᇖ" U11d6 : ᅟᅠᆯ ᅟᅠᆻ = ᅟᅠᇖ
++ <Multi_key> <U11b7> <U11bb> : "ᇞ" U11de : ᅟᅠᆷ ᅟᅠᆻ = ᅟᅠᇞ
++ <Multi_key> <U11bc> <U11a9> : "ᇭ" U11ed : ᅟᅠᆼ ᅟᅠᆩ = ᅟᅠᇭ
++
++<dead_circumflex> <Multi_key> <underscore> <a> : "ª" U00AA # FEMININE ORDINAL INDICATOR
++<Multi_key> <asciicircum> <underscore> <a> : "ª" U00AA # FEMININE ORDINAL INDICATOR
++<dead_circumflex> <Multi_key> <underbar> <a> : "ª" U00AA # FEMININE ORDINAL INDICATOR
++<Multi_key> <asciicircum> <underbar> <a> : "ª" U00AA # FEMININE ORDINAL INDICATOR
++<dead_circumflex> <2> : "²" U00B2 # SUPERSCRIPT TWO
++<Multi_key> <asciicircum> <2> : "²" U00B2 # SUPERSCRIPT TWO
++<dead_circumflex> <KP_Space> : "²" U00B2 # SUPERSCRIPT TWO
++<Multi_key> <asciicircum> <KP_Space> : "²" U00B2 # SUPERSCRIPT TWO
++<dead_circumflex> <KP_2> : "²" U00B2 # SUPERSCRIPT TWO
++<Multi_key> <asciicircum> <KP_2> : "²" U00B2 # SUPERSCRIPT TWO
++<dead_circumflex> <3> : "³" U00B3 # SUPERSCRIPT THREE
++<Multi_key> <asciicircum> <3> : "³" U00B3 # SUPERSCRIPT THREE
++<dead_circumflex> <KP_3> : "³" U00B3 # SUPERSCRIPT THREE
++<Multi_key> <asciicircum> <KP_3> : "³" U00B3 # SUPERSCRIPT THREE
++<dead_circumflex> <1> : "¹" U00B9 # SUPERSCRIPT ONE
++<Multi_key> <asciicircum> <1> : "¹" U00B9 # SUPERSCRIPT ONE
++<dead_circumflex> <KP_1> : "¹" U00B9 # SUPERSCRIPT ONE
++<Multi_key> <asciicircum> <KP_1> : "¹" U00B9 # SUPERSCRIPT ONE
++<dead_circumflex> <Multi_key> <underscore> <o> : "º" U00BA # MASCULINE ORDINAL INDICATOR
++<Multi_key> <asciicircum> <underscore> <o> : "º" U00BA # MASCULINE ORDINAL INDICATOR
++<dead_circumflex> <Multi_key> <underbar> <o> : "º" U00BA # MASCULINE ORDINAL INDICATOR
++<Multi_key> <asciicircum> <underbar> <o> : "º" U00BA # MASCULINE ORDINAL INDICATOR
++<dead_grave> <A> : "À" U00C0 # LATIN CAPITAL LETTER A WITH GRAVE
++<Multi_key> <grave> <A> : "À" U00C0 # LATIN CAPITAL LETTER A WITH GRAVE
++<combining_grave> <A> : "À" U00C0 # LATIN CAPITAL LETTER A WITH GRAVE
++<dead_acute> <A> : "Á" U00C1 # LATIN CAPITAL LETTER A WITH ACUTE
++<Multi_key> <acute> <A> : "Á" U00C1 # LATIN CAPITAL LETTER A WITH ACUTE
++<Multi_key> <apostrophe> <A> : "Á" U00C1 # LATIN CAPITAL LETTER A WITH ACUTE
++<combining_acute> <A> : "Á" U00C1 # LATIN CAPITAL LETTER A WITH ACUTE
++<dead_circumflex> <A> : "Â" U00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
++<Multi_key> <asciicircum> <A> : "Â" U00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
++<dead_tilde> <A> : "Ã" U00C3 # LATIN CAPITAL LETTER A WITH TILDE
++<Multi_key> <asciitilde> <A> : "Ã" U00C3 # LATIN CAPITAL LETTER A WITH TILDE
++<combining_tilde> <A> : "Ã" U00C3 # LATIN CAPITAL LETTER A WITH TILDE
++<dead_diaeresis> <A> : "Ä" U00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
++<Multi_key> <quotedbl> <A> : "Ä" U00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
++<dead_abovering> <A> : "Å" U00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
++<Multi_key> <o> <A> : "Å" U00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
++<dead_cedilla> <C> : "Ç" U00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
++<Multi_key> <comma> <C> : "Ç" U00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
++<dead_grave> <E> : "È" U00C8 # LATIN CAPITAL LETTER E WITH GRAVE
++<Multi_key> <grave> <E> : "È" U00C8 # LATIN CAPITAL LETTER E WITH GRAVE
++<combining_grave> <E> : "È" U00C8 # LATIN CAPITAL LETTER E WITH GRAVE
++<dead_acute> <E> : "É" U00C9 # LATIN CAPITAL LETTER E WITH ACUTE
++<Multi_key> <acute> <E> : "É" U00C9 # LATIN CAPITAL LETTER E WITH ACUTE
++<Multi_key> <apostrophe> <E> : "É" U00C9 # LATIN CAPITAL LETTER E WITH ACUTE
++<combining_acute> <E> : "É" U00C9 # LATIN CAPITAL LETTER E WITH ACUTE
++<dead_circumflex> <E> : "Ê" U00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
++<Multi_key> <asciicircum> <E> : "Ê" U00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
++<dead_diaeresis> <E> : "Ë" U00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
++<Multi_key> <quotedbl> <E> : "Ë" U00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
++<dead_grave> <I> : "Ì" U00CC # LATIN CAPITAL LETTER I WITH GRAVE
++<Multi_key> <grave> <I> : "Ì" U00CC # LATIN CAPITAL LETTER I WITH GRAVE
++<combining_grave> <I> : "Ì" U00CC # LATIN CAPITAL LETTER I WITH GRAVE
++<dead_acute> <I> : "Í" U00CD # LATIN CAPITAL LETTER I WITH ACUTE
++<Multi_key> <acute> <I> : "Í" U00CD # LATIN CAPITAL LETTER I WITH ACUTE
++<Multi_key> <apostrophe> <I> : "Í" U00CD # LATIN CAPITAL LETTER I WITH ACUTE
++<combining_acute> <I> : "Í" U00CD # LATIN CAPITAL LETTER I WITH ACUTE
++<dead_circumflex> <I> : "Î" U00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
++<Multi_key> <asciicircum> <I> : "Î" U00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
++<dead_diaeresis> <I> : "Ï" U00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
++<Multi_key> <quotedbl> <I> : "Ï" U00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
++<dead_tilde> <N> : "Ñ" U00D1 # LATIN CAPITAL LETTER N WITH TILDE
++<Multi_key> <asciitilde> <N> : "Ñ" U00D1 # LATIN CAPITAL LETTER N WITH TILDE
++<combining_tilde> <N> : "Ñ" U00D1 # LATIN CAPITAL LETTER N WITH TILDE
++<dead_grave> <O> : "Ò" U00D2 # LATIN CAPITAL LETTER O WITH GRAVE
++<Multi_key> <grave> <O> : "Ò" U00D2 # LATIN CAPITAL LETTER O WITH GRAVE
++<combining_grave> <O> : "Ò" U00D2 # LATIN CAPITAL LETTER O WITH GRAVE
++<dead_acute> <O> : "Ó" U00D3 # LATIN CAPITAL LETTER O WITH ACUTE
++<Multi_key> <acute> <O> : "Ó" U00D3 # LATIN CAPITAL LETTER O WITH ACUTE
++<Multi_key> <apostrophe> <O> : "Ó" U00D3 # LATIN CAPITAL LETTER O WITH ACUTE
++<combining_acute> <O> : "Ó" U00D3 # LATIN CAPITAL LETTER O WITH ACUTE
++<dead_circumflex> <O> : "Ô" U00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
++<Multi_key> <asciicircum> <O> : "Ô" U00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
++<dead_tilde> <O> : "Õ" U00D5 # LATIN CAPITAL LETTER O WITH TILDE
++<Multi_key> <asciitilde> <O> : "Õ" U00D5 # LATIN CAPITAL LETTER O WITH TILDE
++<combining_tilde> <O> : "Õ" U00D5 # LATIN CAPITAL LETTER O WITH TILDE
++<dead_diaeresis> <O> : "Ö" U00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
++<Multi_key> <quotedbl> <O> : "Ö" U00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
++<Multi_key> <slash> <O> : "Ø" U00D8 # LATIN CAPITAL LETTER O WITH STROKE
++<Multi_key> <KP_Divide> <O> : "Ø" U00D8 # LATIN CAPITAL LETTER O WITH STROKE
++<dead_grave> <U> : "Ù" U00D9 # LATIN CAPITAL LETTER U WITH GRAVE
++<Multi_key> <grave> <U> : "Ù" U00D9 # LATIN CAPITAL LETTER U WITH GRAVE
++<combining_grave> <U> : "Ù" U00D9 # LATIN CAPITAL LETTER U WITH GRAVE
++<dead_acute> <U> : "Ú" U00DA # LATIN CAPITAL LETTER U WITH ACUTE
++<Multi_key> <acute> <U> : "Ú" U00DA # LATIN CAPITAL LETTER U WITH ACUTE
++<Multi_key> <apostrophe> <U> : "Ú" U00DA # LATIN CAPITAL LETTER U WITH ACUTE
++<combining_acute> <U> : "Ú" U00DA # LATIN CAPITAL LETTER U WITH ACUTE
++<dead_circumflex> <U> : "Û" U00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
++<Multi_key> <asciicircum> <U> : "Û" U00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
++<dead_diaeresis> <U> : "Ü" U00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
++<Multi_key> <quotedbl> <U> : "Ü" U00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
++<dead_acute> <Y> : "Ý" U00DD # LATIN CAPITAL LETTER Y WITH ACUTE
++<Multi_key> <acute> <Y> : "Ý" U00DD # LATIN CAPITAL LETTER Y WITH ACUTE
++<Multi_key> <apostrophe> <Y> : "Ý" U00DD # LATIN CAPITAL LETTER Y WITH ACUTE
++<combining_acute> <Y> : "Ý" U00DD # LATIN CAPITAL LETTER Y WITH ACUTE
++<dead_grave> <a> : "à" U00E0 # LATIN SMALL LETTER A WITH GRAVE
++<Multi_key> <grave> <a> : "à" U00E0 # LATIN SMALL LETTER A WITH GRAVE
++<combining_grave> <a> : "à" U00E0 # LATIN SMALL LETTER A WITH GRAVE
++<dead_acute> <a> : "á" U00E1 # LATIN SMALL LETTER A WITH ACUTE
++<Multi_key> <acute> <a> : "á" U00E1 # LATIN SMALL LETTER A WITH ACUTE
++<Multi_key> <apostrophe> <a> : "á" U00E1 # LATIN SMALL LETTER A WITH ACUTE
++<combining_acute> <a> : "á" U00E1 # LATIN SMALL LETTER A WITH ACUTE
++<dead_circumflex> <a> : "â" U00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
++<Multi_key> <asciicircum> <a> : "â" U00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
++<dead_tilde> <a> : "ã" U00E3 # LATIN SMALL LETTER A WITH TILDE
++<Multi_key> <asciitilde> <a> : "ã" U00E3 # LATIN SMALL LETTER A WITH TILDE
++<combining_tilde> <a> : "ã" U00E3 # LATIN SMALL LETTER A WITH TILDE
++<dead_diaeresis> <a> : "ä" U00E4 # LATIN SMALL LETTER A WITH DIAERESIS
++<Multi_key> <quotedbl> <a> : "ä" U00E4 # LATIN SMALL LETTER A WITH DIAERESIS
++<dead_abovering> <a> : "å" U00E5 # LATIN SMALL LETTER A WITH RING ABOVE
++<Multi_key> <o> <a> : "å" U00E5 # LATIN SMALL LETTER A WITH RING ABOVE
++<dead_cedilla> <c> : "ç" U00E7 # LATIN SMALL LETTER C WITH CEDILLA
++<Multi_key> <comma> <c> : "ç" U00E7 # LATIN SMALL LETTER C WITH CEDILLA
++<dead_grave> <e> : "è" U00E8 # LATIN SMALL LETTER E WITH GRAVE
++<Multi_key> <grave> <e> : "è" U00E8 # LATIN SMALL LETTER E WITH GRAVE
++<combining_grave> <e> : "è" U00E8 # LATIN SMALL LETTER E WITH GRAVE
++<dead_acute> <e> : "é" U00E9 # LATIN SMALL LETTER E WITH ACUTE
++<Multi_key> <acute> <e> : "é" U00E9 # LATIN SMALL LETTER E WITH ACUTE
++<Multi_key> <apostrophe> <e> : "é" U00E9 # LATIN SMALL LETTER E WITH ACUTE
++<combining_acute> <e> : "é" U00E9 # LATIN SMALL LETTER E WITH ACUTE
++<dead_circumflex> <e> : "ê" U00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
++<Multi_key> <asciicircum> <e> : "ê" U00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
++<dead_diaeresis> <e> : "ë" U00EB # LATIN SMALL LETTER E WITH DIAERESIS
++<Multi_key> <quotedbl> <e> : "ë" U00EB # LATIN SMALL LETTER E WITH DIAERESIS
++<dead_grave> <i> : "ì" U00EC # LATIN SMALL LETTER I WITH GRAVE
++<Multi_key> <grave> <i> : "ì" U00EC # LATIN SMALL LETTER I WITH GRAVE
++<combining_grave> <i> : "ì" U00EC # LATIN SMALL LETTER I WITH GRAVE
++<dead_acute> <i> : "í" U00ED # LATIN SMALL LETTER I WITH ACUTE
++<Multi_key> <acute> <i> : "í" U00ED # LATIN SMALL LETTER I WITH ACUTE
++<Multi_key> <apostrophe> <i> : "í" U00ED # LATIN SMALL LETTER I WITH ACUTE
++<combining_acute> <i> : "í" U00ED # LATIN SMALL LETTER I WITH ACUTE
++<dead_circumflex> <i> : "î" U00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
++<Multi_key> <asciicircum> <i> : "î" U00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
++<dead_diaeresis> <i> : "ï" U00EF # LATIN SMALL LETTER I WITH DIAERESIS
++<Multi_key> <quotedbl> <i> : "ï" U00EF # LATIN SMALL LETTER I WITH DIAERESIS
++<dead_tilde> <n> : "ñ" U00F1 # LATIN SMALL LETTER N WITH TILDE
++<Multi_key> <asciitilde> <n> : "ñ" U00F1 # LATIN SMALL LETTER N WITH TILDE
++<combining_tilde> <n> : "ñ" U00F1 # LATIN SMALL LETTER N WITH TILDE
++<dead_grave> <o> : "ò" U00F2 # LATIN SMALL LETTER O WITH GRAVE
++<Multi_key> <grave> <o> : "ò" U00F2 # LATIN SMALL LETTER O WITH GRAVE
++<combining_grave> <o> : "ò" U00F2 # LATIN SMALL LETTER O WITH GRAVE
++<dead_acute> <o> : "ó" U00F3 # LATIN SMALL LETTER O WITH ACUTE
++<Multi_key> <acute> <o> : "ó" U00F3 # LATIN SMALL LETTER O WITH ACUTE
++<Multi_key> <apostrophe> <o> : "ó" U00F3 # LATIN SMALL LETTER O WITH ACUTE
++<combining_acute> <o> : "ó" U00F3 # LATIN SMALL LETTER O WITH ACUTE
++<dead_circumflex> <o> : "ô" U00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
++<Multi_key> <asciicircum> <o> : "ô" U00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
++<dead_tilde> <o> : "õ" U00F5 # LATIN SMALL LETTER O WITH TILDE
++<Multi_key> <asciitilde> <o> : "õ" U00F5 # LATIN SMALL LETTER O WITH TILDE
++<combining_tilde> <o> : "õ" U00F5 # LATIN SMALL LETTER O WITH TILDE
++<dead_diaeresis> <o> : "ö" U00F6 # LATIN SMALL LETTER O WITH DIAERESIS
++<Multi_key> <quotedbl> <o> : "ö" U00F6 # LATIN SMALL LETTER O WITH DIAERESIS
++<Multi_key> <slash> <o> : "ø" U00F8 # LATIN SMALL LETTER O WITH STROKE
++<Multi_key> <KP_Divide> <o> : "ø" U00F8 # LATIN SMALL LETTER O WITH STROKE
++<dead_grave> <u> : "ù" U00F9 # LATIN SMALL LETTER U WITH GRAVE
++<Multi_key> <grave> <u> : "ù" U00F9 # LATIN SMALL LETTER U WITH GRAVE
++<combining_grave> <u> : "ù" U00F9 # LATIN SMALL LETTER U WITH GRAVE
++<dead_acute> <u> : "ú" U00FA # LATIN SMALL LETTER U WITH ACUTE
++<Multi_key> <acute> <u> : "ú" U00FA # LATIN SMALL LETTER U WITH ACUTE
++<Multi_key> <apostrophe> <u> : "ú" U00FA # LATIN SMALL LETTER U WITH ACUTE
++<combining_acute> <u> : "ú" U00FA # LATIN SMALL LETTER U WITH ACUTE
++<dead_circumflex> <u> : "û" U00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
++<Multi_key> <asciicircum> <u> : "û" U00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
++<dead_diaeresis> <u> : "ü" U00FC # LATIN SMALL LETTER U WITH DIAERESIS
++<Multi_key> <quotedbl> <u> : "ü" U00FC # LATIN SMALL LETTER U WITH DIAERESIS
++<dead_acute> <y> : "ý" U00FD # LATIN SMALL LETTER Y WITH ACUTE
++<Multi_key> <acute> <y> : "ý" U00FD # LATIN SMALL LETTER Y WITH ACUTE
++<Multi_key> <apostrophe> <y> : "ý" U00FD # LATIN SMALL LETTER Y WITH ACUTE
++<combining_acute> <y> : "ý" U00FD # LATIN SMALL LETTER Y WITH ACUTE
++<dead_diaeresis> <y> : "ÿ" U00FF # LATIN SMALL LETTER Y WITH DIAERESIS
++<Multi_key> <quotedbl> <y> : "ÿ" U00FF # LATIN SMALL LETTER Y WITH DIAERESIS
++<dead_macron> <A> : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON
++<Multi_key> <macron> <A> : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON
++<Multi_key> <underscore> <A> : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON
++<dead_macron> <a> : "ā" U0101 # LATIN SMALL LETTER A WITH MACRON
++<Multi_key> <macron> <a> : "ā" U0101 # LATIN SMALL LETTER A WITH MACRON
++<Multi_key> <underscore> <a> : "ā" U0101 # LATIN SMALL LETTER A WITH MACRON
++<dead_breve> <A> : "Ă" U0102 # LATIN CAPITAL LETTER A WITH BREVE
++<Multi_key> <U> <A> : "Ă" U0102 # LATIN CAPITAL LETTER A WITH BREVE
++<Multi_key> <b> <A> : "Ă" U0102 # LATIN CAPITAL LETTER A WITH BREVE
++<dead_breve> <a> : "ă" U0103 # LATIN SMALL LETTER A WITH BREVE
++<Multi_key> <U> <a> : "ă" U0103 # LATIN SMALL LETTER A WITH BREVE
++<Multi_key> <b> <a> : "ă" U0103 # LATIN SMALL LETTER A WITH BREVE
++<dead_ogonek> <A> : "Ą" U0104 # LATIN CAPITAL LETTER A WITH OGONEK
++<Multi_key> <semicolon> <A> : "Ą" U0104 # LATIN CAPITAL LETTER A WITH OGONEK
++<dead_ogonek> <a> : "ą" U0105 # LATIN SMALL LETTER A WITH OGONEK
++<Multi_key> <semicolon> <a> : "ą" U0105 # LATIN SMALL LETTER A WITH OGONEK
++<dead_acute> <C> : "Ç" U0106 # LATIN CAPITAL LETTER C WITH ACUTE
++<Multi_key> <acute> <C> : "Ć" U0106 # LATIN CAPITAL LETTER C WITH ACUTE
++<Multi_key> <apostrophe> <C> : "Ć" U0106 # LATIN CAPITAL LETTER C WITH ACUTE
++<combining_acute> <C> : "Ć" U0106 # LATIN CAPITAL LETTER C WITH ACUTE
++<dead_acute> <c> : "ç" U0107 # LATIN SMALL LETTER C WITH ACUTE
++<Multi_key> <acute> <c> : "ć" U0107 # LATIN SMALL LETTER C WITH ACUTE
++<Multi_key> <apostrophe> <c> : "ć" U0107 # LATIN SMALL LETTER C WITH ACUTE
++<combining_acute> <c> : "ć" U0107 # LATIN SMALL LETTER C WITH ACUTE
++<dead_circumflex> <C> : "Ĉ" U0108 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
++<Multi_key> <asciicircum> <C> : "Ĉ" U0108 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
++<dead_circumflex> <c> : "ĉ" U0109 # LATIN SMALL LETTER C WITH CIRCUMFLEX
++<Multi_key> <asciicircum> <c> : "ĉ" U0109 # LATIN SMALL LETTER C WITH CIRCUMFLEX
++<dead_abovedot> <C> : "Ċ" U010A # LATIN CAPITAL LETTER C WITH DOT ABOVE
++<Multi_key> <period> <C> : "Ċ" U010A # LATIN CAPITAL LETTER C WITH DOT ABOVE
++<dead_abovedot> <c> : "ċ" U010B # LATIN SMALL LETTER C WITH DOT ABOVE
++<Multi_key> <period> <c> : "ċ" U010B # LATIN SMALL LETTER C WITH DOT ABOVE
++<dead_caron> <C> : "Č" U010C # LATIN CAPITAL LETTER C WITH CARON
++<Multi_key> <c> <C> : "Č" U010C # LATIN CAPITAL LETTER C WITH CARON
++<dead_caron> <c> : "č" U010D # LATIN SMALL LETTER C WITH CARON
++<Multi_key> <c> <c> : "č" U010D # LATIN SMALL LETTER C WITH CARON
++<dead_caron> <D> : "Ď" U010E # LATIN CAPITAL LETTER D WITH CARON
++<Multi_key> <c> <D> : "Ď" U010E # LATIN CAPITAL LETTER D WITH CARON
++<dead_caron> <d> : "ď" U010F # LATIN SMALL LETTER D WITH CARON
++<Multi_key> <c> <d> : "ď" U010F # LATIN SMALL LETTER D WITH CARON
++<Multi_key> <slash> <D> : "Đ" U0110 # LATIN CAPITAL LETTER D WITH STROKE
++<Multi_key> <KP_Divide> <D> : "Đ" U0110 # LATIN CAPITAL LETTER D WITH STROKE
++<Multi_key> <slash> <d> : "đ" U0111 # LATIN SMALL LETTER D WITH STROKE
++<Multi_key> <KP_Divide> <d> : "đ" U0111 # LATIN SMALL LETTER D WITH STROKE
++<dead_macron> <E> : "Ē" U0112 # LATIN CAPITAL LETTER E WITH MACRON
++<Multi_key> <macron> <E> : "Ē" U0112 # LATIN CAPITAL LETTER E WITH MACRON
++<Multi_key> <underscore> <E> : "Ē" U0112 # LATIN CAPITAL LETTER E WITH MACRON
++<dead_macron> <e> : "ē" U0113 # LATIN SMALL LETTER E WITH MACRON
++<Multi_key> <macron> <e> : "ē" U0113 # LATIN SMALL LETTER E WITH MACRON
++<Multi_key> <underscore> <e> : "ē" U0113 # LATIN SMALL LETTER E WITH MACRON
++<dead_breve> <E> : "Ĕ" U0114 # LATIN CAPITAL LETTER E WITH BREVE
++<Multi_key> <U> <E> : "Ĕ" U0114 # LATIN CAPITAL LETTER E WITH BREVE
++<Multi_key> <b> <E> : "Ĕ" U0114 # LATIN CAPITAL LETTER E WITH BREVE
++<dead_breve> <e> : "ĕ" U0115 # LATIN SMALL LETTER E WITH BREVE
++<Multi_key> <U> <e> : "ĕ" U0115 # LATIN SMALL LETTER E WITH BREVE
++<Multi_key> <b> <e> : "ĕ" U0115 # LATIN SMALL LETTER E WITH BREVE
++<dead_abovedot> <E> : "Ė" U0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE
++<Multi_key> <period> <E> : "Ė" U0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE
++<dead_abovedot> <e> : "ė" U0117 # LATIN SMALL LETTER E WITH DOT ABOVE
++<Multi_key> <period> <e> : "ė" U0117 # LATIN SMALL LETTER E WITH DOT ABOVE
++<dead_ogonek> <E> : "Ę" U0118 # LATIN CAPITAL LETTER E WITH OGONEK
++<Multi_key> <semicolon> <E> : "Ę" U0118 # LATIN CAPITAL LETTER E WITH OGONEK
++<dead_ogonek> <e> : "ę" U0119 # LATIN SMALL LETTER E WITH OGONEK
++<Multi_key> <semicolon> <e> : "ę" U0119 # LATIN SMALL LETTER E WITH OGONEK
++<dead_caron> <E> : "Ě" U011A # LATIN CAPITAL LETTER E WITH CARON
++<Multi_key> <c> <E> : "Ě" U011A # LATIN CAPITAL LETTER E WITH CARON
++<dead_caron> <e> : "ě" U011B # LATIN SMALL LETTER E WITH CARON
++<Multi_key> <c> <e> : "ě" U011B # LATIN SMALL LETTER E WITH CARON
++<dead_circumflex> <G> : "Ĝ" U011C # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
++<Multi_key> <asciicircum> <G> : "Ĝ" U011C # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
++<dead_circumflex> <g> : "ĝ" U011D # LATIN SMALL LETTER G WITH CIRCUMFLEX
++<Multi_key> <asciicircum> <g> : "ĝ" U011D # LATIN SMALL LETTER G WITH CIRCUMFLEX
++<dead_breve> <G> : "Ğ" U011E # LATIN CAPITAL LETTER G WITH BREVE
++<Multi_key> <U> <G> : "Ğ" U011E # LATIN CAPITAL LETTER G WITH BREVE
++<Multi_key> <b> <G> : "Ğ" U011E # LATIN CAPITAL LETTER G WITH BREVE
++<dead_breve> <g> : "ğ" U011F # LATIN SMALL LETTER G WITH BREVE
++<Multi_key> <U> <g> : "ğ" U011F # LATIN SMALL LETTER G WITH BREVE
++<Multi_key> <b> <g> : "ğ" U011F # LATIN SMALL LETTER G WITH BREVE
++<dead_abovedot> <G> : "Ġ" U0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE
++<Multi_key> <period> <G> : "Ġ" U0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE
++<dead_abovedot> <g> : "ġ" U0121 # LATIN SMALL LETTER G WITH DOT ABOVE
++<Multi_key> <period> <g> : "ġ" U0121 # LATIN SMALL LETTER G WITH DOT ABOVE
++<dead_cedilla> <G> : "Ģ" U0122 # LATIN CAPITAL LETTER G WITH CEDILLA
++<Multi_key> <comma> <G> : "Ģ" U0122 # LATIN CAPITAL LETTER G WITH CEDILLA
++<dead_cedilla> <g> : "ģ" U0123 # LATIN SMALL LETTER G WITH CEDILLA
++<Multi_key> <comma> <g> : "ģ" U0123 # LATIN SMALL LETTER G WITH CEDILLA
++<dead_circumflex> <H> : "Ĥ" U0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
++<Multi_key> <asciicircum> <H> : "Ĥ" U0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
++<dead_circumflex> <h> : "ĥ" U0125 # LATIN SMALL LETTER H WITH CIRCUMFLEX
++<Multi_key> <asciicircum> <h> : "ĥ" U0125 # LATIN SMALL LETTER H WITH CIRCUMFLEX
++<Multi_key> <slash> <H> : "Ħ" U0126 # LATIN CAPITAL LETTER H WITH STROKE
++<Multi_key> <KP_Divide> <H> : "Ħ" U0126 # LATIN CAPITAL LETTER H WITH STROKE
++<Multi_key> <slash> <h> : "ħ" U0127 # LATIN SMALL LETTER H WITH STROKE
++<Multi_key> <KP_Divide> <h> : "ħ" U0127 # LATIN SMALL LETTER H WITH STROKE
++<dead_tilde> <I> : "Ĩ" U0128 # LATIN CAPITAL LETTER I WITH TILDE
++<Multi_key> <asciitilde> <I> : "Ĩ" U0128 # LATIN CAPITAL LETTER I WITH TILDE
++<combining_tilde> <I> : "Ĩ" U0128 # LATIN CAPITAL LETTER I WITH TILDE
++<dead_tilde> <i> : "ĩ" U0129 # LATIN SMALL LETTER I WITH TILDE
++<Multi_key> <asciitilde> <i> : "ĩ" U0129 # LATIN SMALL LETTER I WITH TILDE
++<combining_tilde> <i> : "ĩ" U0129 # LATIN SMALL LETTER I WITH TILDE
++<dead_macron> <I> : "Ī" U012A # LATIN CAPITAL LETTER I WITH MACRON
++<Multi_key> <macron> <I> : "Ī" U012A # LATIN CAPITAL LETTER I WITH MACRON
++<Multi_key> <underscore> <I> : "Ī" U012A # LATIN CAPITAL LETTER I WITH MACRON
++<dead_macron> <i> : "ī" U012B # LATIN SMALL LETTER I WITH MACRON
++<Multi_key> <macron> <i> : "ī" U012B # LATIN SMALL LETTER I WITH MACRON
++<Multi_key> <underscore> <i> : "ī" U012B # LATIN SMALL LETTER I WITH MACRON
++<dead_breve> <I> : "Ĭ" U012C # LATIN CAPITAL LETTER I WITH BREVE
++<Multi_key> <U> <I> : "Ĭ" U012C # LATIN CAPITAL LETTER I WITH BREVE
++<Multi_key> <b> <I> : "Ĭ" U012C # LATIN CAPITAL LETTER I WITH BREVE
++<dead_breve> <i> : "ĭ" U012D # LATIN SMALL LETTER I WITH BREVE
++<Multi_key> <U> <i> : "ĭ" U012D # LATIN SMALL LETTER I WITH BREVE
++<Multi_key> <b> <i> : "ĭ" U012D # LATIN SMALL LETTER I WITH BREVE
++<dead_ogonek> <I> : "Į" U012E # LATIN CAPITAL LETTER I WITH OGONEK
++<Multi_key> <semicolon> <I> : "Į" U012E # LATIN CAPITAL LETTER I WITH OGONEK
++<dead_ogonek> <i> : "į" U012F # LATIN SMALL LETTER I WITH OGONEK
++<Multi_key> <semicolon> <i> : "į" U012F # LATIN SMALL LETTER I WITH OGONEK
++<dead_abovedot> <I> : "İ" U0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE
++<Multi_key> <period> <I> : "İ" U0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE
++<dead_circumflex> <J> : "Ĵ" U0134 # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
++<Multi_key> <asciicircum> <J> : "Ĵ" U0134 # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
++<dead_circumflex> <j> : "ĵ" U0135 # LATIN SMALL LETTER J WITH CIRCUMFLEX
++<Multi_key> <asciicircum> <j> : "ĵ" U0135 # LATIN SMALL LETTER J WITH CIRCUMFLEX
++<dead_cedilla> <K> : "Ķ" U0136 # LATIN CAPITAL LETTER K WITH CEDILLA
++<Multi_key> <comma> <K> : "Ķ" U0136 # LATIN CAPITAL LETTER K WITH CEDILLA
++<dead_cedilla> <k> : "ķ" U0137 # LATIN SMALL LETTER K WITH CEDILLA
++<Multi_key> <comma> <k> : "ķ" U0137 # LATIN SMALL LETTER K WITH CEDILLA
++<dead_acute> <L> : "Ĺ" U0139 # LATIN CAPITAL LETTER L WITH ACUTE
++<Multi_key> <acute> <L> : "Ĺ" U0139 # LATIN CAPITAL LETTER L WITH ACUTE
++<Multi_key> <apostrophe> <L> : "Ĺ" U0139 # LATIN CAPITAL LETTER L WITH ACUTE
++<combining_acute> <L> : "Ĺ" U0139 # LATIN CAPITAL LETTER L WITH ACUTE
++<dead_acute> <l> : "ĺ" U013A # LATIN SMALL LETTER L WITH ACUTE
++<Multi_key> <acute> <l> : "ĺ" U013A # LATIN SMALL LETTER L WITH ACUTE
++<Multi_key> <apostrophe> <l> : "ĺ" U013A # LATIN SMALL LETTER L WITH ACUTE
++<combining_acute> <l> : "ĺ" U013A # LATIN SMALL LETTER L WITH ACUTE
++<dead_cedilla> <L> : "Ļ" U013B # LATIN CAPITAL LETTER L WITH CEDILLA
++<Multi_key> <comma> <L> : "Ļ" U013B # LATIN CAPITAL LETTER L WITH CEDILLA
++<dead_cedilla> <l> : "ļ" U013C # LATIN SMALL LETTER L WITH CEDILLA
++<Multi_key> <comma> <l> : "ļ" U013C # LATIN SMALL LETTER L WITH CEDILLA
++<dead_caron> <L> : "Ľ" U013D # LATIN CAPITAL LETTER L WITH CARON
++<Multi_key> <c> <L> : "Ľ" U013D # LATIN CAPITAL LETTER L WITH CARON
++<dead_caron> <l> : "ľ" U013E # LATIN SMALL LETTER L WITH CARON
++<Multi_key> <c> <l> : "ľ" U013E # LATIN SMALL LETTER L WITH CARON
++<Multi_key> <slash> <L> : "Ł" U0141 # LATIN CAPITAL LETTER L WITH STROKE
++<Multi_key> <KP_Divide> <L> : "Ł" U0141 # LATIN CAPITAL LETTER L WITH STROKE
++<Multi_key> <slash> <l> : "ł" U0142 # LATIN SMALL LETTER L WITH STROKE
++<Multi_key> <KP_Divide> <l> : "ł" U0142 # LATIN SMALL LETTER L WITH STROKE
++<dead_acute> <N> : "Ń" U0143 # LATIN CAPITAL LETTER N WITH ACUTE
++<Multi_key> <acute> <N> : "Ń" U0143 # LATIN CAPITAL LETTER N WITH ACUTE
++<Multi_key> <apostrophe> <N> : "Ń" U0143 # LATIN CAPITAL LETTER N WITH ACUTE
++<combining_acute> <N> : "Ń" U0143 # LATIN CAPITAL LETTER N WITH ACUTE
++<dead_acute> <n> : "ń" U0144 # LATIN SMALL LETTER N WITH ACUTE
++<Multi_key> <acute> <n> : "ń" U0144 # LATIN SMALL LETTER N WITH ACUTE
++<Multi_key> <apostrophe> <n> : "ń" U0144 # LATIN SMALL LETTER N WITH ACUTE
++<combining_acute> <n> : "ń" U0144 # LATIN SMALL LETTER N WITH ACUTE
++<dead_cedilla> <N> : "Ņ" U0145 # LATIN CAPITAL LETTER N WITH CEDILLA
++<Multi_key> <comma> <N> : "Ņ" U0145 # LATIN CAPITAL LETTER N WITH CEDILLA
++<dead_cedilla> <n> : "ņ" U0146 # LATIN SMALL LETTER N WITH CEDILLA
++<Multi_key> <comma> <n> : "ņ" U0146 # LATIN SMALL LETTER N WITH CEDILLA
++<dead_caron> <N> : "Ň" U0147 # LATIN CAPITAL LETTER N WITH CARON
++<Multi_key> <c> <N> : "Ň" U0147 # LATIN CAPITAL LETTER N WITH CARON
++<dead_caron> <n> : "ň" U0148 # LATIN SMALL LETTER N WITH CARON
++<Multi_key> <c> <n> : "ň" U0148 # LATIN SMALL LETTER N WITH CARON
++<dead_macron> <O> : "Ō" U014C # LATIN CAPITAL LETTER O WITH MACRON
++<Multi_key> <macron> <O> : "Ō" U014C # LATIN CAPITAL LETTER O WITH MACRON
++<Multi_key> <underscore> <O> : "Ō" U014C # LATIN CAPITAL LETTER O WITH MACRON
++<dead_macron> <o> : "ō" U014D # LATIN SMALL LETTER O WITH MACRON
++<Multi_key> <macron> <o> : "ō" U014D # LATIN SMALL LETTER O WITH MACRON
++<Multi_key> <underscore> <o> : "ō" U014D # LATIN SMALL LETTER O WITH MACRON
++<dead_breve> <O> : "Ŏ" U014E # LATIN CAPITAL LETTER O WITH BREVE
++<Multi_key> <U> <O> : "Ŏ" U014E # LATIN CAPITAL LETTER O WITH BREVE
++<Multi_key> <b> <O> : "Ŏ" U014E # LATIN CAPITAL LETTER O WITH BREVE
++<dead_breve> <o> : "ŏ" U014F # LATIN SMALL LETTER O WITH BREVE
++<Multi_key> <U> <o> : "ŏ" U014F # LATIN SMALL LETTER O WITH BREVE
++<Multi_key> <b> <o> : "ŏ" U014F # LATIN SMALL LETTER O WITH BREVE
++<dead_doubleacute> <O> : "Ő" U0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
++<Multi_key> <equal> <O> : "Ő" U0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
++<dead_doubleacute> <o> : "ő" U0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE
++<Multi_key> <equal> <o> : "ő" U0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE
++<dead_acute> <R> : "Ŕ" U0154 # LATIN CAPITAL LETTER R WITH ACUTE
++<Multi_key> <acute> <R> : "Ŕ" U0154 # LATIN CAPITAL LETTER R WITH ACUTE
++<Multi_key> <apostrophe> <R> : "Ŕ" U0154 # LATIN CAPITAL LETTER R WITH ACUTE
++<combining_acute> <R> : "Ŕ" U0154 # LATIN CAPITAL LETTER R WITH ACUTE
++<dead_acute> <r> : "ŕ" U0155 # LATIN SMALL LETTER R WITH ACUTE
++<Multi_key> <acute> <r> : "ŕ" U0155 # LATIN SMALL LETTER R WITH ACUTE
++<Multi_key> <apostrophe> <r> : "ŕ" U0155 # LATIN SMALL LETTER R WITH ACUTE
++<combining_acute> <r> : "ŕ" U0155 # LATIN SMALL LETTER R WITH ACUTE
++<dead_cedilla> <R> : "Ŗ" U0156 # LATIN CAPITAL LETTER R WITH CEDILLA
++<Multi_key> <comma> <R> : "Ŗ" U0156 # LATIN CAPITAL LETTER R WITH CEDILLA
++<dead_cedilla> <r> : "ŗ" U0157 # LATIN SMALL LETTER R WITH CEDILLA
++<Multi_key> <comma> <r> : "ŗ" U0157 # LATIN SMALL LETTER R WITH CEDILLA
++<dead_caron> <R> : "Ř" U0158 # LATIN CAPITAL LETTER R WITH CARON
++<Multi_key> <c> <R> : "Ř" U0158 # LATIN CAPITAL LETTER R WITH CARON
++<dead_caron> <r> : "ř" U0159 # LATIN SMALL LETTER R WITH CARON
++<Multi_key> <c> <r> : "ř" U0159 # LATIN SMALL LETTER R WITH CARON
++<dead_acute> <S> : "Ś" U015A # LATIN CAPITAL LETTER S WITH ACUTE
++<Multi_key> <acute> <S> : "Ś" U015A # LATIN CAPITAL LETTER S WITH ACUTE
++<Multi_key> <apostrophe> <S> : "Ś" U015A # LATIN CAPITAL LETTER S WITH ACUTE
++<combining_acute> <S> : "Ś" U015A # LATIN CAPITAL LETTER S WITH ACUTE
++<dead_acute> <s> : "ś" U015B # LATIN SMALL LETTER S WITH ACUTE
++<Multi_key> <acute> <s> : "ś" U015B # LATIN SMALL LETTER S WITH ACUTE
++<Multi_key> <apostrophe> <s> : "ś" U015B # LATIN SMALL LETTER S WITH ACUTE
++<combining_acute> <s> : "ś" U015B # LATIN SMALL LETTER S WITH ACUTE
++<dead_circumflex> <S> : "Ŝ" U015C # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
++<Multi_key> <asciicircum> <S> : "Ŝ" U015C # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
++<dead_circumflex> <s> : "ŝ" U015D # LATIN SMALL LETTER S WITH CIRCUMFLEX
++<Multi_key> <asciicircum> <s> : "ŝ" U015D # LATIN SMALL LETTER S WITH CIRCUMFLEX
++<dead_cedilla> <S> : "Ş" U015E # LATIN CAPITAL LETTER S WITH CEDILLA
++<Multi_key> <comma> <S> : "Ş" U015E # LATIN CAPITAL LETTER S WITH CEDILLA
++<dead_cedilla> <s> : "ş" U015F # LATIN SMALL LETTER S WITH CEDILLA
++<Multi_key> <comma> <s> : "ş" U015F # LATIN SMALL LETTER S WITH CEDILLA
++<dead_caron> <S> : "Š" U0160 # LATIN CAPITAL LETTER S WITH CARON
++<Multi_key> <c> <S> : "Š" U0160 # LATIN CAPITAL LETTER S WITH CARON
++<dead_caron> <s> : "š" U0161 # LATIN SMALL LETTER S WITH CARON
++<Multi_key> <c> <s> : "š" U0161 # LATIN SMALL LETTER S WITH CARON
++<dead_cedilla> <T> : "Ţ" U0162 # LATIN CAPITAL LETTER T WITH CEDILLA
++<Multi_key> <comma> <T> : "Ţ" U0162 # LATIN CAPITAL LETTER T WITH CEDILLA
++<dead_cedilla> <t> : "ţ" U0163 # LATIN SMALL LETTER T WITH CEDILLA
++<Multi_key> <comma> <t> : "ţ" U0163 # LATIN SMALL LETTER T WITH CEDILLA
++<dead_caron> <T> : "Ť" U0164 # LATIN CAPITAL LETTER T WITH CARON
++<Multi_key> <c> <T> : "Ť" U0164 # LATIN CAPITAL LETTER T WITH CARON
++<dead_caron> <t> : "ť" U0165 # LATIN SMALL LETTER T WITH CARON
++<Multi_key> <c> <t> : "ť" U0165 # LATIN SMALL LETTER T WITH CARON
++<Multi_key> <slash> <T> : "Ŧ" U0166 # LATIN CAPITAL LETTER T WITH STROKE
++<Multi_key> <KP_Divide> <T> : "Ŧ" U0166 # LATIN CAPITAL LETTER T WITH STROKE
++<Multi_key> <slash> <t> : "ŧ" U0167 # LATIN SMALL LETTER T WITH STROKE
++<Multi_key> <KP_Divide> <t> : "ŧ" U0167 # LATIN SMALL LETTER T WITH STROKE
++<dead_tilde> <U> : "Ũ" U0168 # LATIN CAPITAL LETTER U WITH TILDE
++<Multi_key> <asciitilde> <U> : "Ũ" U0168 # LATIN CAPITAL LETTER U WITH TILDE
++<combining_tilde> <U> : "Ũ" U0168 # LATIN CAPITAL LETTER U WITH TILDE
++<dead_tilde> <u> : "ũ" U0169 # LATIN SMALL LETTER U WITH TILDE
++<Multi_key> <asciitilde> <u> : "ũ" U0169 # LATIN SMALL LETTER U WITH TILDE
++<combining_tilde> <u> : "ũ" U0169 # LATIN SMALL LETTER U WITH TILDE
++<dead_macron> <U> : "Ū" U016A # LATIN CAPITAL LETTER U WITH MACRON
++<Multi_key> <macron> <U> : "Ū" U016A # LATIN CAPITAL LETTER U WITH MACRON
++<Multi_key> <underscore> <U> : "Ū" U016A # LATIN CAPITAL LETTER U WITH MACRON
++<dead_macron> <u> : "ū" U016B # LATIN SMALL LETTER U WITH MACRON
++<Multi_key> <macron> <u> : "ū" U016B # LATIN SMALL LETTER U WITH MACRON
++<Multi_key> <underscore> <u> : "ū" U016B # LATIN SMALL LETTER U WITH MACRON
++<dead_breve> <U> : "Ŭ" U016C # LATIN CAPITAL LETTER U WITH BREVE
++<Multi_key> <U> <U> : "Ŭ" U016C # LATIN CAPITAL LETTER U WITH BREVE
++<Multi_key> <b> <U> : "Ŭ" U016C # LATIN CAPITAL LETTER U WITH BREVE
++<dead_breve> <u> : "ŭ" U016D # LATIN SMALL LETTER U WITH BREVE
++<Multi_key> <U> <u> : "ŭ" U016D # LATIN SMALL LETTER U WITH BREVE
++<Multi_key> <b> <u> : "ŭ" U016D # LATIN SMALL LETTER U WITH BREVE
++<dead_abovering> <U> : "Ů" U016E # LATIN CAPITAL LETTER U WITH RING ABOVE
++<Multi_key> <o> <U> : "Ů" U016E # LATIN CAPITAL LETTER U WITH RING ABOVE
++<dead_abovering> <u> : "ů" U016F # LATIN SMALL LETTER U WITH RING ABOVE
++<Multi_key> <o> <u> : "ů" U016F # LATIN SMALL LETTER U WITH RING ABOVE
++<dead_doubleacute> <U> : "Ű" U0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
++<Multi_key> <equal> <U> : "Ű" U0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
++<dead_doubleacute> <u> : "ű" U0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE
++<Multi_key> <equal> <u> : "ű" U0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE
++<dead_ogonek> <U> : "Ų" U0172 # LATIN CAPITAL LETTER U WITH OGONEK
++<Multi_key> <semicolon> <U> : "Ų" U0172 # LATIN CAPITAL LETTER U WITH OGONEK
++<dead_ogonek> <u> : "ų" U0173 # LATIN SMALL LETTER U WITH OGONEK
++<Multi_key> <semicolon> <u> : "ų" U0173 # LATIN SMALL LETTER U WITH OGONEK
++<dead_circumflex> <W> : "Ŵ" U0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
++<Multi_key> <asciicircum> <W> : "Ŵ" U0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
++<dead_circumflex> <w> : "ŵ" U0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX
++<Multi_key> <asciicircum> <w> : "ŵ" U0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX
++<dead_circumflex> <Y> : "Ŷ" U0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
++<Multi_key> <asciicircum> <Y> : "Ŷ" U0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
++<dead_circumflex> <y> : "ŷ" U0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX
++<Multi_key> <asciicircum> <y> : "ŷ" U0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX
++<dead_diaeresis> <Y> : "Ÿ" U0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS
++<Multi_key> <quotedbl> <Y> : "Ÿ" U0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS
++<dead_acute> <Z> : "Ź" U0179 # LATIN CAPITAL LETTER Z WITH ACUTE
++<Multi_key> <acute> <Z> : "Ź" U0179 # LATIN CAPITAL LETTER Z WITH ACUTE
++<Multi_key> <apostrophe> <Z> : "Ź" U0179 # LATIN CAPITAL LETTER Z WITH ACUTE
++<combining_acute> <Z> : "Ź" U0179 # LATIN CAPITAL LETTER Z WITH ACUTE
++<dead_acute> <z> : "ź" U017A # LATIN SMALL LETTER Z WITH ACUTE
++<Multi_key> <acute> <z> : "ź" U017A # LATIN SMALL LETTER Z WITH ACUTE
++<Multi_key> <apostrophe> <z> : "ź" U017A # LATIN SMALL LETTER Z WITH ACUTE
++<combining_acute> <z> : "ź" U017A # LATIN SMALL LETTER Z WITH ACUTE
++<dead_abovedot> <Z> : "Ż" U017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE
++<Multi_key> <period> <Z> : "Ż" U017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE
++<dead_abovedot> <z> : "ż" U017C # LATIN SMALL LETTER Z WITH DOT ABOVE
++<Multi_key> <period> <z> : "ż" U017C # LATIN SMALL LETTER Z WITH DOT ABOVE
++<dead_caron> <Z> : "Ž" U017D # LATIN CAPITAL LETTER Z WITH CARON
++<Multi_key> <c> <Z> : "Ž" U017D # LATIN CAPITAL LETTER Z WITH CARON
++<dead_caron> <z> : "ž" U017E # LATIN SMALL LETTER Z WITH CARON
++<Multi_key> <c> <z> : "ž" U017E # LATIN SMALL LETTER Z WITH CARON
++<Multi_key> <slash> <b> : "ƀ" U0180 # LATIN SMALL LETTER B WITH STROKE
++<Multi_key> <KP_Divide> <b> : "ƀ" U0180 # LATIN SMALL LETTER B WITH STROKE
++<Multi_key> <slash> <I> : "Ɨ" U0197 # LATIN CAPITAL LETTER I WITH STROKE
++<Multi_key> <KP_Divide> <I> : "Ɨ" U0197 # LATIN CAPITAL LETTER I WITH STROKE
++<dead_horn> <O> : "Ơ" U01A0 # LATIN CAPITAL LETTER O WITH HORN
++<Multi_key> <plus> <O> : "Ơ" U01A0 # LATIN CAPITAL LETTER O WITH HORN
++<dead_horn> <o> : "ơ" U01A1 # LATIN SMALL LETTER O WITH HORN
++<Multi_key> <plus> <o> : "ơ" U01A1 # LATIN SMALL LETTER O WITH HORN
++<dead_horn> <U> : "Ư" U01AF # LATIN CAPITAL LETTER U WITH HORN
++<Multi_key> <plus> <U> : "Ư" U01AF # LATIN CAPITAL LETTER U WITH HORN
++<dead_horn> <u> : "ư" U01B0 # LATIN SMALL LETTER U WITH HORN
++<Multi_key> <plus> <u> : "ư" U01B0 # LATIN SMALL LETTER U WITH HORN
++<Multi_key> <slash> <Z> : "Ƶ" U01B5 # LATIN CAPITAL LETTER Z WITH STROKE
++<Multi_key> <KP_Divide> <Z> : "Ƶ" U01B5 # LATIN CAPITAL LETTER Z WITH STROKE
++<Multi_key> <slash> <z> : "ƶ" U01B6 # LATIN SMALL LETTER Z WITH STROKE
++<Multi_key> <KP_Divide> <z> : "ƶ" U01B6 # LATIN SMALL LETTER Z WITH STROKE
++<dead_caron> <A> : "Ǎ" U01CD # LATIN CAPITAL LETTER A WITH CARON
++<Multi_key> <c> <A> : "Ǎ" U01CD # LATIN CAPITAL LETTER A WITH CARON
++<dead_caron> <a> : "ǎ" U01CE # LATIN SMALL LETTER A WITH CARON
++<Multi_key> <c> <a> : "ǎ" U01CE # LATIN SMALL LETTER A WITH CARON
++<dead_caron> <I> : "Ǐ" U01CF # LATIN CAPITAL LETTER I WITH CARON
++<Multi_key> <c> <I> : "Ǐ" U01CF # LATIN CAPITAL LETTER I WITH CARON
++<dead_caron> <i> : "ǐ" U01D0 # LATIN SMALL LETTER I WITH CARON
++<Multi_key> <c> <i> : "ǐ" U01D0 # LATIN SMALL LETTER I WITH CARON
++<dead_caron> <O> : "Ǒ" U01D1 # LATIN CAPITAL LETTER O WITH CARON
++<Multi_key> <c> <O> : "Ǒ" U01D1 # LATIN CAPITAL LETTER O WITH CARON
++<dead_caron> <o> : "ǒ" U01D2 # LATIN SMALL LETTER O WITH CARON
++<Multi_key> <c> <o> : "ǒ" U01D2 # LATIN SMALL LETTER O WITH CARON
++<dead_caron> <U> : "Ǔ" U01D3 # LATIN CAPITAL LETTER U WITH CARON
++<Multi_key> <c> <U> : "Ǔ" U01D3 # LATIN CAPITAL LETTER U WITH CARON
++<dead_caron> <u> : "ǔ" U01D4 # LATIN SMALL LETTER U WITH CARON
++<Multi_key> <c> <u> : "ǔ" U01D4 # LATIN SMALL LETTER U WITH CARON
++<dead_macron> <Udiaeresis> : "Ǖ" U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
++<Multi_key> <macron> <Udiaeresis> : "Ǖ" U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
++<Multi_key> <underscore> <Udiaeresis> : "Ǖ" U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
++<dead_macron> <dead_diaeresis> <U> : "Ǖ" U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
++<dead_macron> <Multi_key> <quotedbl> <U> : "Ǖ" U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
++<Multi_key> <macron> <dead_diaeresis> <U> : "Ǖ" U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
++<Multi_key> <macron> <quotedbl> <U> : "Ǖ" U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
++<Multi_key> <underscore> <dead_diaeresis> <U> : "Ǖ" U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
++<Multi_key> <underscore> <quotedbl> <U> : "Ǖ" U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
++<dead_macron> <udiaeresis> : "ǖ" U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
++<Multi_key> <macron> <udiaeresis> : "ǖ" U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
++<Multi_key> <underscore> <udiaeresis> : "ǖ" U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
++<dead_macron> <dead_diaeresis> <u> : "ǖ" U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
++<dead_macron> <Multi_key> <quotedbl> <u> : "ǖ" U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
++<Multi_key> <macron> <dead_diaeresis> <u> : "ǖ" U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
++<Multi_key> <macron> <quotedbl> <u> : "ǖ" U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
++<Multi_key> <underscore> <dead_diaeresis> <u> : "ǖ" U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
++<Multi_key> <underscore> <quotedbl> <u> : "ǖ" U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
++<dead_acute> <Udiaeresis> : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
++<Multi_key> <acute> <Udiaeresis> : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
++<Multi_key> <apostrophe> <Udiaeresis> : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
++<dead_acute> <dead_diaeresis> <U> : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
++<dead_acute> <Multi_key> <quotedbl> <U> : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
++<Multi_key> <acute> <dead_diaeresis> <U> : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
++<Multi_key> <acute> <quotedbl> <U> : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
++<Multi_key> <apostrophe> <dead_diaeresis> <U> : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
++<Multi_key> <apostrophe> <quotedbl> <U> : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
++<combining_acute> <Udiaeresis> : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
++<combining_acute> <dead_diaeresis> <U> : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
++<combining_acute> <Multi_key> <quotedbl> <U> : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
++<dead_acute> <udiaeresis> : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
++<Multi_key> <acute> <udiaeresis> : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
++<Multi_key> <apostrophe> <udiaeresis> : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
++<dead_acute> <dead_diaeresis> <u> : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
++<dead_acute> <Multi_key> <quotedbl> <u> : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
++<Multi_key> <acute> <dead_diaeresis> <u> : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
++<Multi_key> <acute> <quotedbl> <u> : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
++<Multi_key> <apostrophe> <dead_diaeresis> <u> : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
++<Multi_key> <apostrophe> <quotedbl> <u> : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
++<combining_acute> <udiaeresis> : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
++<combining_acute> <dead_diaeresis> <u> : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
++<combining_acute> <Multi_key> <quotedbl> <u> : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
++<dead_caron> <Udiaeresis> : "Ǚ" U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
++<Multi_key> <c> <Udiaeresis> : "Ǚ" U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
++<dead_caron> <dead_diaeresis> <U> : "Ǚ" U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
++<dead_caron> <Multi_key> <quotedbl> <U> : "Ǚ" U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
++<Multi_key> <c> <dead_diaeresis> <U> : "Ǚ" U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
++<Multi_key> <c> <quotedbl> <U> : "Ǚ" U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
++<dead_caron> <udiaeresis> : "ǚ" U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
++<Multi_key> <c> <udiaeresis> : "ǚ" U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
++<dead_caron> <dead_diaeresis> <u> : "ǚ" U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
++<dead_caron> <Multi_key> <quotedbl> <u> : "ǚ" U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
++<Multi_key> <c> <dead_diaeresis> <u> : "ǚ" U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
++<Multi_key> <c> <quotedbl> <u> : "ǚ" U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
++<dead_grave> <Udiaeresis> : "Ǜ" U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
++<Multi_key> <grave> <Udiaeresis> : "Ǜ" U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
++<dead_grave> <dead_diaeresis> <U> : "Ǜ" U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
++<dead_grave> <Multi_key> <quotedbl> <U> : "Ǜ" U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
++<Multi_key> <grave> <dead_diaeresis> <U> : "Ǜ" U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
++<Multi_key> <grave> <quotedbl> <U> : "Ǜ" U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
++<combining_grave> <Udiaeresis> : "Ǜ" U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
++<combining_grave> <dead_diaeresis> <U> : "Ǜ" U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
++<combining_grave> <Multi_key> <quotedbl> <U> : "Ǜ" U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
++<dead_grave> <udiaeresis> : "ǜ" U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
++<Multi_key> <grave> <udiaeresis> : "ǜ" U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
++<dead_grave> <dead_diaeresis> <u> : "ǜ" U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
++<dead_grave> <Multi_key> <quotedbl> <u> : "ǜ" U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
++<Multi_key> <grave> <dead_diaeresis> <u> : "ǜ" U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
++<Multi_key> <grave> <quotedbl> <u> : "ǜ" U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
++<combining_grave> <udiaeresis> : "ǜ" U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
++<combining_grave> <dead_diaeresis> <u> : "ǜ" U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
++<combining_grave> <Multi_key> <quotedbl> <u> : "ǜ" U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
++<dead_macron> <Adiaeresis> : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
++<Multi_key> <macron> <Adiaeresis> : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
++<Multi_key> <underscore> <Adiaeresis> : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
++<dead_macron> <dead_diaeresis> <A> : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
++<dead_macron> <Multi_key> <quotedbl> <A> : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
++<Multi_key> <macron> <dead_diaeresis> <A> : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
++<Multi_key> <macron> <quotedbl> <A> : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
++<Multi_key> <underscore> <dead_diaeresis> <A> : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
++<Multi_key> <underscore> <quotedbl> <A> : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
++<dead_macron> <adiaeresis> : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
++<Multi_key> <macron> <adiaeresis> : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
++<Multi_key> <underscore> <adiaeresis> : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
++<dead_macron> <dead_diaeresis> <a> : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
++<dead_macron> <Multi_key> <quotedbl> <a> : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
++<Multi_key> <macron> <dead_diaeresis> <a> : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
++<Multi_key> <macron> <quotedbl> <a> : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
++<Multi_key> <underscore> <dead_diaeresis> <a> : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
++<Multi_key> <underscore> <quotedbl> <a> : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
++<dead_macron> <U0226> : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
++<Multi_key> <macron> <U0226> : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
++<Multi_key> <underscore> <U0226> : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
++<dead_macron> <dead_abovedot> <A> : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
++<dead_macron> <Multi_key> <period> <A> : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
++<Multi_key> <macron> <dead_abovedot> <A> : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
++<Multi_key> <macron> <period> <A> : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
++<Multi_key> <underscore> <dead_abovedot> <A> : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
++<Multi_key> <underscore> <period> <A> : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
++<dead_macron> <U0227> : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
++<Multi_key> <macron> <U0227> : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
++<Multi_key> <underscore> <U0227> : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
++<dead_macron> <dead_abovedot> <a> : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
++<dead_macron> <Multi_key> <period> <a> : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
++<Multi_key> <macron> <dead_abovedot> <a> : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
++<Multi_key> <macron> <period> <a> : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
++<Multi_key> <underscore> <dead_abovedot> <a> : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
++<Multi_key> <underscore> <period> <a> : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
++<dead_macron> <AE> : "Ǣ" U01E2 # LATIN CAPITAL LETTER AE WITH MACRON
++<Multi_key> <macron> <AE> : "Ǣ" U01E2 # LATIN CAPITAL LETTER AE WITH MACRON
++<Multi_key> <underscore> <AE> : "Ǣ" U01E2 # LATIN CAPITAL LETTER AE WITH MACRON
++<dead_macron> <ae> : "ǣ" U01E3 # LATIN SMALL LETTER AE WITH MACRON
++<Multi_key> <macron> <ae> : "ǣ" U01E3 # LATIN SMALL LETTER AE WITH MACRON
++<Multi_key> <underscore> <ae> : "ǣ" U01E3 # LATIN SMALL LETTER AE WITH MACRON
++<Multi_key> <slash> <G> : "Ǥ" U01E4 # LATIN CAPITAL LETTER G WITH STROKE
++<Multi_key> <KP_Divide> <G> : "Ǥ" U01E4 # LATIN CAPITAL LETTER G WITH STROKE
++<Multi_key> <slash> <g> : "ǥ" U01E5 # LATIN SMALL LETTER G WITH STROKE
++<Multi_key> <KP_Divide> <g> : "ǥ" U01E5 # LATIN SMALL LETTER G WITH STROKE
++<dead_caron> <G> : "Ǧ" U01E6 # LATIN CAPITAL LETTER G WITH CARON
++<Multi_key> <c> <G> : "Ǧ" U01E6 # LATIN CAPITAL LETTER G WITH CARON
++<dead_caron> <g> : "ǧ" U01E7 # LATIN SMALL LETTER G WITH CARON
++<Multi_key> <c> <g> : "ǧ" U01E7 # LATIN SMALL LETTER G WITH CARON
++<dead_caron> <K> : "Ǩ" U01E8 # LATIN CAPITAL LETTER K WITH CARON
++<Multi_key> <c> <K> : "Ǩ" U01E8 # LATIN CAPITAL LETTER K WITH CARON
++<dead_caron> <k> : "ǩ" U01E9 # LATIN SMALL LETTER K WITH CARON
++<Multi_key> <c> <k> : "ǩ" U01E9 # LATIN SMALL LETTER K WITH CARON
++<dead_ogonek> <O> : "Ǫ" U01EA # LATIN CAPITAL LETTER O WITH OGONEK
++<Multi_key> <semicolon> <O> : "Ǫ" U01EA # LATIN CAPITAL LETTER O WITH OGONEK
++<dead_ogonek> <o> : "ǫ" U01EB # LATIN SMALL LETTER O WITH OGONEK
++<Multi_key> <semicolon> <o> : "ǫ" U01EB # LATIN SMALL LETTER O WITH OGONEK
++<dead_macron> <U01ea> : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
++<Multi_key> <macron> <U01ea> : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
++<Multi_key> <underscore> <U01ea> : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
++<dead_macron> <dead_ogonek> <O> : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
++<dead_macron> <Multi_key> <semicolon> <O> : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
++<Multi_key> <macron> <dead_ogonek> <O> : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
++<Multi_key> <macron> <semicolon> <O> : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
++<Multi_key> <underscore> <dead_ogonek> <O> : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
++<Multi_key> <underscore> <semicolon> <O> : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
++<dead_macron> <U01eb> : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
++<Multi_key> <macron> <U01eb> : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
++<Multi_key> <underscore> <U01eb> : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
++<dead_macron> <dead_ogonek> <o> : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
++<dead_macron> <Multi_key> <semicolon> <o> : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
++<Multi_key> <macron> <dead_ogonek> <o> : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
++<Multi_key> <macron> <semicolon> <o> : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
++<Multi_key> <underscore> <dead_ogonek> <o> : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
++<Multi_key> <underscore> <semicolon> <o> : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
++<dead_caron> <U01b7> : "Ǯ" U01EE # LATIN CAPITAL LETTER EZH WITH CARON
++<Multi_key> <c> <U01b7> : "Ǯ" U01EE # LATIN CAPITAL LETTER EZH WITH CARON
++<dead_caron> <U0292> : "ǯ" U01EF # LATIN SMALL LETTER EZH WITH CARON
++<Multi_key> <c> <U0292> : "ǯ" U01EF # LATIN SMALL LETTER EZH WITH CARON
++<dead_caron> <j> : "ǰ" U01F0 # LATIN SMALL LETTER J WITH CARON
++<Multi_key> <c> <j> : "ǰ" U01F0 # LATIN SMALL LETTER J WITH CARON
++<dead_acute> <G> : "Ǵ" U01F4 # LATIN CAPITAL LETTER G WITH ACUTE
++<Multi_key> <acute> <G> : "Ǵ" U01F4 # LATIN CAPITAL LETTER G WITH ACUTE
++<Multi_key> <apostrophe> <G> : "Ǵ" U01F4 # LATIN CAPITAL LETTER G WITH ACUTE
++<combining_acute> <G> : "Ǵ" U01F4 # LATIN CAPITAL LETTER G WITH ACUTE
++<dead_acute> <g> : "ǵ" U01F5 # LATIN SMALL LETTER G WITH ACUTE
++<Multi_key> <acute> <g> : "ǵ" U01F5 # LATIN SMALL LETTER G WITH ACUTE
++<Multi_key> <apostrophe> <g> : "ǵ" U01F5 # LATIN SMALL LETTER G WITH ACUTE
++<combining_acute> <g> : "ǵ" U01F5 # LATIN SMALL LETTER G WITH ACUTE
++<dead_grave> <N> : "Ǹ" U01F8 # LATIN CAPITAL LETTER N WITH GRAVE
++<Multi_key> <grave> <N> : "Ǹ" U01F8 # LATIN CAPITAL LETTER N WITH GRAVE
++<combining_grave> <N> : "Ǹ" U01F8 # LATIN CAPITAL LETTER N WITH GRAVE
++<dead_grave> <n> : "ǹ" U01F9 # LATIN SMALL LETTER N WITH GRAVE
++<Multi_key> <grave> <n> : "ǹ" U01F9 # LATIN SMALL LETTER N WITH GRAVE
++<combining_grave> <n> : "ǹ" U01F9 # LATIN SMALL LETTER N WITH GRAVE
++<dead_acute> <Aring> : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
++<Multi_key> <acute> <Aring> : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
++<Multi_key> <apostrophe> <Aring> : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
++<dead_acute> <dead_abovering> <A> : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
++<dead_acute> <Multi_key> <o> <A> : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
++<Multi_key> <acute> <dead_abovering> <A> : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
++<Multi_key> <acute> <o> <A> : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
++<Multi_key> <apostrophe> <dead_abovering> <A> : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
++<Multi_key> <apostrophe> <o> <A> : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
++<combining_acute> <Aring> : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
++<combining_acute> <dead_abovering> <A> : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
++<combining_acute> <Multi_key> <o> <A> : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
++<dead_acute> <aring> : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
++<Multi_key> <acute> <aring> : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
++<Multi_key> <apostrophe> <aring> : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
++<dead_acute> <dead_abovering> <a> : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
++<dead_acute> <Multi_key> <o> <a> : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
++<Multi_key> <acute> <dead_abovering> <a> : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
++<Multi_key> <acute> <o> <a> : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
++<Multi_key> <apostrophe> <dead_abovering> <a> : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
++<Multi_key> <apostrophe> <o> <a> : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
++<combining_acute> <aring> : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
++<combining_acute> <dead_abovering> <a> : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
++<combining_acute> <Multi_key> <o> <a> : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
++<dead_acute> <AE> : "Ǽ" U01FC # LATIN CAPITAL LETTER AE WITH ACUTE
++<Multi_key> <acute> <AE> : "Ǽ" U01FC # LATIN CAPITAL LETTER AE WITH ACUTE
++<Multi_key> <apostrophe> <AE> : "Ǽ" U01FC # LATIN CAPITAL LETTER AE WITH ACUTE
++<combining_acute> <AE> : "Ǽ" U01FC # LATIN CAPITAL LETTER AE WITH ACUTE
++<dead_acute> <ae> : "ǽ" U01FD # LATIN SMALL LETTER AE WITH ACUTE
++<Multi_key> <acute> <ae> : "ǽ" U01FD # LATIN SMALL LETTER AE WITH ACUTE
++<Multi_key> <apostrophe> <ae> : "ǽ" U01FD # LATIN SMALL LETTER AE WITH ACUTE
++<combining_acute> <ae> : "ǽ" U01FD # LATIN SMALL LETTER AE WITH ACUTE
++<dead_acute> <Ooblique> : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
++<Multi_key> <acute> <Ooblique> : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
++<Multi_key> <apostrophe> <Ooblique> : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
++<dead_acute> <Multi_key> <slash> <O> : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
++<Multi_key> <acute> <slash> <O> : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
++<Multi_key> <apostrophe> <slash> <O> : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
++<dead_acute> <Multi_key> <KP_Divide> <O> : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
++<Multi_key> <acute> <KP_Divide> <O> : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
++<Multi_key> <apostrophe> <KP_Divide> <O> : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
++<combining_acute> <Ooblique> : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
++<combining_acute> <Multi_key> <slash> <O> : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
++<combining_acute> <Multi_key> <KP_Divide> <O> : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
++<dead_acute> <oslash> : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
++<Multi_key> <acute> <oslash> : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
++<Multi_key> <apostrophe> <oslash> : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
++<dead_acute> <Multi_key> <slash> <o> : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
++<Multi_key> <acute> <slash> <o> : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
++<Multi_key> <apostrophe> <slash> <o> : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
++<dead_acute> <Multi_key> <KP_Divide> <o> : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
++<Multi_key> <acute> <KP_Divide> <o> : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
++<Multi_key> <apostrophe> <KP_Divide> <o> : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
++<combining_acute> <oslash> : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
++<combining_acute> <Multi_key> <slash> <o> : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
++<combining_acute> <Multi_key> <KP_Divide> <o> : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
++<U030f> <A> : "Ȁ" U0200 # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
++<U030f> <a> : "ȁ" U0201 # LATIN SMALL LETTER A WITH DOUBLE GRAVE
++<U0311> <A> : "Ȃ" U0202 # LATIN CAPITAL LETTER A WITH INVERTED BREVE
++<U0311> <a> : "ȃ" U0203 # LATIN SMALL LETTER A WITH INVERTED BREVE
++<U030f> <E> : "Ȅ" U0204 # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
++<U030f> <e> : "ȅ" U0205 # LATIN SMALL LETTER E WITH DOUBLE GRAVE
++<U0311> <E> : "Ȇ" U0206 # LATIN CAPITAL LETTER E WITH INVERTED BREVE
++<U0311> <e> : "ȇ" U0207 # LATIN SMALL LETTER E WITH INVERTED BREVE
++<U030f> <I> : "Ȉ" U0208 # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
++<U030f> <i> : "ȉ" U0209 # LATIN SMALL LETTER I WITH DOUBLE GRAVE
++<U0311> <I> : "Ȋ" U020A # LATIN CAPITAL LETTER I WITH INVERTED BREVE
++<U0311> <i> : "ȋ" U020B # LATIN SMALL LETTER I WITH INVERTED BREVE
++<U030f> <O> : "Ȍ" U020C # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
++<U030f> <o> : "ȍ" U020D # LATIN SMALL LETTER O WITH DOUBLE GRAVE
++<U0311> <O> : "Ȏ" U020E # LATIN CAPITAL LETTER O WITH INVERTED BREVE
++<U0311> <o> : "ȏ" U020F # LATIN SMALL LETTER O WITH INVERTED BREVE
++<U030f> <R> : "Ȑ" U0210 # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
++<U030f> <r> : "ȑ" U0211 # LATIN SMALL LETTER R WITH DOUBLE GRAVE
++<U0311> <R> : "Ȓ" U0212 # LATIN CAPITAL LETTER R WITH INVERTED BREVE
++<U0311> <r> : "ȓ" U0213 # LATIN SMALL LETTER R WITH INVERTED BREVE
++<U030f> <U> : "Ȕ" U0214 # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
++<U030f> <u> : "ȕ" U0215 # LATIN SMALL LETTER U WITH DOUBLE GRAVE
++<U0311> <U> : "Ȗ" U0216 # LATIN CAPITAL LETTER U WITH INVERTED BREVE
++<U0311> <u> : "ȗ" U0217 # LATIN SMALL LETTER U WITH INVERTED BREVE
++<U0326> <S> : "Ș" U0218 # LATIN CAPITAL LETTER S WITH COMMA BELOW
++<U0326> <s> : "ș" U0219 # LATIN SMALL LETTER S WITH COMMA BELOW
++<U0326> <T> : "Ț" U021A # LATIN CAPITAL LETTER T WITH COMMA BELOW
++<U0326> <t> : "ț" U021B # LATIN SMALL LETTER T WITH COMMA BELOW
++<dead_caron> <H> : "Ȟ" U021E # LATIN CAPITAL LETTER H WITH CARON
++<Multi_key> <c> <H> : "Ȟ" U021E # LATIN CAPITAL LETTER H WITH CARON
++<dead_caron> <h> : "ȟ" U021F # LATIN SMALL LETTER H WITH CARON
++<Multi_key> <c> <h> : "ȟ" U021F # LATIN SMALL LETTER H WITH CARON
++<dead_abovedot> <A> : "Ȧ" U0226 # LATIN CAPITAL LETTER A WITH DOT ABOVE
++<Multi_key> <period> <A> : "Ȧ" U0226 # LATIN CAPITAL LETTER A WITH DOT ABOVE
++<dead_abovedot> <a> : "ȧ" U0227 # LATIN SMALL LETTER A WITH DOT ABOVE
++<Multi_key> <period> <a> : "ȧ" U0227 # LATIN SMALL LETTER A WITH DOT ABOVE
++<dead_cedilla> <E> : "Ȩ" U0228 # LATIN CAPITAL LETTER E WITH CEDILLA
++<Multi_key> <comma> <E> : "Ȩ" U0228 # LATIN CAPITAL LETTER E WITH CEDILLA
++<dead_cedilla> <e> : "ȩ" U0229 # LATIN SMALL LETTER E WITH CEDILLA
++<Multi_key> <comma> <e> : "ȩ" U0229 # LATIN SMALL LETTER E WITH CEDILLA
++<dead_macron> <Odiaeresis> : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
++<Multi_key> <macron> <Odiaeresis> : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
++<Multi_key> <underscore> <Odiaeresis> : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
++<dead_macron> <dead_diaeresis> <O> : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
++<dead_macron> <Multi_key> <quotedbl> <O> : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
++<Multi_key> <macron> <dead_diaeresis> <O> : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
++<Multi_key> <macron> <quotedbl> <O> : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
++<Multi_key> <underscore> <dead_diaeresis> <O> : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
++<Multi_key> <underscore> <quotedbl> <O> : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
++<dead_macron> <odiaeresis> : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
++<Multi_key> <macron> <odiaeresis> : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
++<Multi_key> <underscore> <odiaeresis> : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
++<dead_macron> <dead_diaeresis> <o> : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
++<dead_macron> <Multi_key> <quotedbl> <o> : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
++<Multi_key> <macron> <dead_diaeresis> <o> : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
++<Multi_key> <macron> <quotedbl> <o> : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
++<Multi_key> <underscore> <dead_diaeresis> <o> : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
++<Multi_key> <underscore> <quotedbl> <o> : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
++<dead_macron> <Otilde> : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
++<Multi_key> <macron> <Otilde> : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
++<Multi_key> <underscore> <Otilde> : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
++<dead_macron> <dead_tilde> <O> : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
++<dead_macron> <Multi_key> <asciitilde> <O> : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
++<Multi_key> <macron> <dead_tilde> <O> : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
++<Multi_key> <macron> <asciitilde> <O> : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
++<Multi_key> <underscore> <dead_tilde> <O> : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
++<Multi_key> <underscore> <asciitilde> <O> : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
++<dead_macron> <combining_tilde> <O> : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
++<Multi_key> <macron> <combining_tilde> <O> : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
++<Multi_key> <underscore> <combining_tilde> <O> : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
++<dead_macron> <otilde> : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
++<Multi_key> <macron> <otilde> : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
++<Multi_key> <underscore> <otilde> : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
++<dead_macron> <dead_tilde> <o> : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
++<dead_macron> <Multi_key> <asciitilde> <o> : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
++<Multi_key> <macron> <dead_tilde> <o> : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
++<Multi_key> <macron> <asciitilde> <o> : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
++<Multi_key> <underscore> <dead_tilde> <o> : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
++<Multi_key> <underscore> <asciitilde> <o> : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
++<dead_macron> <combining_tilde> <o> : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
++<Multi_key> <macron> <combining_tilde> <o> : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
++<Multi_key> <underscore> <combining_tilde> <o> : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
++<dead_abovedot> <O> : "Ȯ" U022E # LATIN CAPITAL LETTER O WITH DOT ABOVE
++<Multi_key> <period> <O> : "Ȯ" U022E # LATIN CAPITAL LETTER O WITH DOT ABOVE
++<dead_abovedot> <o> : "ȯ" U022F # LATIN SMALL LETTER O WITH DOT ABOVE
++<Multi_key> <period> <o> : "ȯ" U022F # LATIN SMALL LETTER O WITH DOT ABOVE
++<dead_macron> <U022e> : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
++<Multi_key> <macron> <U022e> : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
++<Multi_key> <underscore> <U022e> : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
++<dead_macron> <dead_abovedot> <O> : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
++<dead_macron> <Multi_key> <period> <O> : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
++<Multi_key> <macron> <dead_abovedot> <O> : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
++<Multi_key> <macron> <period> <O> : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
++<Multi_key> <underscore> <dead_abovedot> <O> : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
++<Multi_key> <underscore> <period> <O> : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
++<dead_macron> <U022f> : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
++<Multi_key> <macron> <U022f> : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
++<Multi_key> <underscore> <U022f> : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
++<dead_macron> <dead_abovedot> <o> : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
++<dead_macron> <Multi_key> <period> <o> : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
++<Multi_key> <macron> <dead_abovedot> <o> : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
++<Multi_key> <macron> <period> <o> : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
++<Multi_key> <underscore> <dead_abovedot> <o> : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
++<Multi_key> <underscore> <period> <o> : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
++<dead_macron> <Y> : "Ȳ" U0232 # LATIN CAPITAL LETTER Y WITH MACRON
++<Multi_key> <macron> <Y> : "Ȳ" U0232 # LATIN CAPITAL LETTER Y WITH MACRON
++<Multi_key> <underscore> <Y> : "Ȳ" U0232 # LATIN CAPITAL LETTER Y WITH MACRON
++<dead_macron> <y> : "ȳ" U0233 # LATIN SMALL LETTER Y WITH MACRON
++<Multi_key> <macron> <y> : "ȳ" U0233 # LATIN SMALL LETTER Y WITH MACRON
++<Multi_key> <underscore> <y> : "ȳ" U0233 # LATIN SMALL LETTER Y WITH MACRON
++<Multi_key> <slash> <i> : "ɨ" U0268 # LATIN SMALL LETTER I WITH STROKE
++<Multi_key> <KP_Divide> <i> : "ɨ" U0268 # LATIN SMALL LETTER I WITH STROKE
++<Multi_key> <slash> <U0294> : "ʡ" U02A1 # LATIN LETTER GLOTTAL STOP WITH STROKE
++<Multi_key> <KP_Divide> <U0294> : "ʡ" U02A1 # LATIN LETTER GLOTTAL STOP WITH STROKE
++<dead_circumflex> <Multi_key> <underscore> <h> : "ʰ" U02B0 # MODIFIER LETTER SMALL H
++<Multi_key> <asciicircum> <underscore> <h> : "ʰ" U02B0 # MODIFIER LETTER SMALL H
++<dead_circumflex> <Multi_key> <underbar> <h> : "ʰ" U02B0 # MODIFIER LETTER SMALL H
++<Multi_key> <asciicircum> <underbar> <h> : "ʰ" U02B0 # MODIFIER LETTER SMALL H
++<dead_circumflex> <Multi_key> <underscore> <U0266> : "ʱ" U02B1 # MODIFIER LETTER SMALL H WITH HOOK
++<Multi_key> <asciicircum> <underscore> <U0266> : "ʱ" U02B1 # MODIFIER LETTER SMALL H WITH HOOK
++<dead_circumflex> <Multi_key> <underbar> <U0266> : "ʱ" U02B1 # MODIFIER LETTER SMALL H WITH HOOK
++<Multi_key> <asciicircum> <underbar> <U0266> : "ʱ" U02B1 # MODIFIER LETTER SMALL H WITH HOOK
++<dead_circumflex> <Multi_key> <underscore> <j> : "ʲ" U02B2 # MODIFIER LETTER SMALL J
++<Multi_key> <asciicircum> <underscore> <j> : "ʲ" U02B2 # MODIFIER LETTER SMALL J
++<dead_circumflex> <Multi_key> <underbar> <j> : "ʲ" U02B2 # MODIFIER LETTER SMALL J
++<Multi_key> <asciicircum> <underbar> <j> : "ʲ" U02B2 # MODIFIER LETTER SMALL J
++<dead_circumflex> <Multi_key> <underscore> <r> : "ʳ" U02B3 # MODIFIER LETTER SMALL R
++<Multi_key> <asciicircum> <underscore> <r> : "ʳ" U02B3 # MODIFIER LETTER SMALL R
++<dead_circumflex> <Multi_key> <underbar> <r> : "ʳ" U02B3 # MODIFIER LETTER SMALL R
++<Multi_key> <asciicircum> <underbar> <r> : "ʳ" U02B3 # MODIFIER LETTER SMALL R
++<dead_circumflex> <Multi_key> <underscore> <U0279> : "ʴ" U02B4 # MODIFIER LETTER SMALL TURNED R
++<Multi_key> <asciicircum> <underscore> <U0279> : "ʴ" U02B4 # MODIFIER LETTER SMALL TURNED R
++<dead_circumflex> <Multi_key> <underbar> <U0279> : "ʴ" U02B4 # MODIFIER LETTER SMALL TURNED R
++<Multi_key> <asciicircum> <underbar> <U0279> : "ʴ" U02B4 # MODIFIER LETTER SMALL TURNED R
++<dead_circumflex> <Multi_key> <underscore> <U027b> : "ʵ" U02B5 # MODIFIER LETTER SMALL TURNED R WITH HOOK
++<Multi_key> <asciicircum> <underscore> <U027b> : "ʵ" U02B5 # MODIFIER LETTER SMALL TURNED R WITH HOOK
++<dead_circumflex> <Multi_key> <underbar> <U027b> : "ʵ" U02B5 # MODIFIER LETTER SMALL TURNED R WITH HOOK
++<Multi_key> <asciicircum> <underbar> <U027b> : "ʵ" U02B5 # MODIFIER LETTER SMALL TURNED R WITH HOOK
++<dead_circumflex> <Multi_key> <underscore> <U0281> : "ʶ" U02B6 # MODIFIER LETTER SMALL CAPITAL INVERTED R
++<Multi_key> <asciicircum> <underscore> <U0281> : "ʶ" U02B6 # MODIFIER LETTER SMALL CAPITAL INVERTED R
++<dead_circumflex> <Multi_key> <underbar> <U0281> : "ʶ" U02B6 # MODIFIER LETTER SMALL CAPITAL INVERTED R
++<Multi_key> <asciicircum> <underbar> <U0281> : "ʶ" U02B6 # MODIFIER LETTER SMALL CAPITAL INVERTED R
++<dead_circumflex> <Multi_key> <underscore> <w> : "ʷ" U02B7 # MODIFIER LETTER SMALL W
++<Multi_key> <asciicircum> <underscore> <w> : "ʷ" U02B7 # MODIFIER LETTER SMALL W
++<dead_circumflex> <Multi_key> <underbar> <w> : "ʷ" U02B7 # MODIFIER LETTER SMALL W
++<Multi_key> <asciicircum> <underbar> <w> : "ʷ" U02B7 # MODIFIER LETTER SMALL W
++<dead_circumflex> <Multi_key> <underscore> <y> : "ʸ" U02B8 # MODIFIER LETTER SMALL Y
++<Multi_key> <asciicircum> <underscore> <y> : "ʸ" U02B8 # MODIFIER LETTER SMALL Y
++<dead_circumflex> <Multi_key> <underbar> <y> : "ʸ" U02B8 # MODIFIER LETTER SMALL Y
++<Multi_key> <asciicircum> <underbar> <y> : "ʸ" U02B8 # MODIFIER LETTER SMALL Y
++<dead_circumflex> <Multi_key> <underscore> <U0263> : "ˠ" U02E0 # MODIFIER LETTER SMALL GAMMA
++<Multi_key> <asciicircum> <underscore> <U0263> : "ˠ" U02E0 # MODIFIER LETTER SMALL GAMMA
++<dead_circumflex> <Multi_key> <underbar> <U0263> : "ˠ" U02E0 # MODIFIER LETTER SMALL GAMMA
++<Multi_key> <asciicircum> <underbar> <U0263> : "ˠ" U02E0 # MODIFIER LETTER SMALL GAMMA
++<dead_circumflex> <Multi_key> <underscore> <l> : "ˡ" U02E1 # MODIFIER LETTER SMALL L
++<Multi_key> <asciicircum> <underscore> <l> : "ˡ" U02E1 # MODIFIER LETTER SMALL L
++<dead_circumflex> <Multi_key> <underbar> <l> : "ˡ" U02E1 # MODIFIER LETTER SMALL L
++<Multi_key> <asciicircum> <underbar> <l> : "ˡ" U02E1 # MODIFIER LETTER SMALL L
++<dead_circumflex> <Multi_key> <underscore> <s> : "ˢ" U02E2 # MODIFIER LETTER SMALL S
++<Multi_key> <asciicircum> <underscore> <s> : "ˢ" U02E2 # MODIFIER LETTER SMALL S
++<dead_circumflex> <Multi_key> <underbar> <s> : "ˢ" U02E2 # MODIFIER LETTER SMALL S
++<Multi_key> <asciicircum> <underbar> <s> : "ˢ" U02E2 # MODIFIER LETTER SMALL S
++<dead_circumflex> <Multi_key> <underscore> <x> : "ˣ" U02E3 # MODIFIER LETTER SMALL X
++<Multi_key> <asciicircum> <underscore> <x> : "ˣ" U02E3 # MODIFIER LETTER SMALL X
++<dead_circumflex> <Multi_key> <underbar> <x> : "ˣ" U02E3 # MODIFIER LETTER SMALL X
++<Multi_key> <asciicircum> <underbar> <x> : "ˣ" U02E3 # MODIFIER LETTER SMALL X
++<dead_circumflex> <Multi_key> <underscore> <U0295> : "ˤ" U02E4 # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
++<Multi_key> <asciicircum> <underscore> <U0295> : "ˤ" U02E4 # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
++<dead_circumflex> <Multi_key> <underbar> <U0295> : "ˤ" U02E4 # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
++<Multi_key> <asciicircum> <underbar> <U0295> : "ˤ" U02E4 # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
++<dead_diaeresis> <acute> : "̈́" U0344 # COMBINING GREEK DIALYTIKA TONOS
++<dead_diaeresis> <apostrophe> : "̈́" U0344 # COMBINING GREEK DIALYTIKA TONOS
++<Multi_key> <quotedbl> <dead_acute> : "̈́" U0344 # COMBINING GREEK DIALYTIKA TONOS
++<Multi_key> <quotedbl> <acute> : "̈́" U0344 # COMBINING GREEK DIALYTIKA TONOS
++<Multi_key> <quotedbl> <apostrophe> : "̈́" U0344 # COMBINING GREEK DIALYTIKA TONOS
++<Multi_key> <quotedbl> <combining_acute> : "̈́" U0344 # COMBINING GREEK DIALYTIKA TONOS
++<Multi_key> <diaeresis> <dead_acute> : "΅" U0385 # GREEK DIALYTIKA TONOS
++<Multi_key> <diaeresis> <acute> : "΅" U0385 # GREEK DIALYTIKA TONOS
++<Multi_key> <diaeresis> <apostrophe> : "΅" U0385 # GREEK DIALYTIKA TONOS
++<Multi_key> <diaeresis> <combining_acute> : "΅" U0385 # GREEK DIALYTIKA TONOS
++<dead_acute> <Greek_ALPHA> : "Ά" U0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS
++<Multi_key> <acute> <Greek_ALPHA> : "Ά" U0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS
++<Multi_key> <apostrophe> <Greek_ALPHA> : "Ά" U0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS
++<combining_acute> <Greek_ALPHA> : "Ά" U0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS
++<dead_acute> <Greek_EPSILON> : "Έ" U0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS
++<Multi_key> <acute> <Greek_EPSILON> : "Έ" U0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS
++<Multi_key> <apostrophe> <Greek_EPSILON> : "Έ" U0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS
++<combining_acute> <Greek_EPSILON> : "Έ" U0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS
++<dead_acute> <Greek_ETA> : "Ή" U0389 # GREEK CAPITAL LETTER ETA WITH TONOS
++<Multi_key> <acute> <Greek_ETA> : "Ή" U0389 # GREEK CAPITAL LETTER ETA WITH TONOS
++<Multi_key> <apostrophe> <Greek_ETA> : "Ή" U0389 # GREEK CAPITAL LETTER ETA WITH TONOS
++<combining_acute> <Greek_ETA> : "Ή" U0389 # GREEK CAPITAL LETTER ETA WITH TONOS
++<dead_acute> <Greek_IOTA> : "Ί" U038A # GREEK CAPITAL LETTER IOTA WITH TONOS
++<Multi_key> <acute> <Greek_IOTA> : "Ί" U038A # GREEK CAPITAL LETTER IOTA WITH TONOS
++<Multi_key> <apostrophe> <Greek_IOTA> : "Ί" U038A # GREEK CAPITAL LETTER IOTA WITH TONOS
++<combining_acute> <Greek_IOTA> : "Ί" U038A # GREEK CAPITAL LETTER IOTA WITH TONOS
++<dead_acute> <Greek_OMICRON> : "Ό" U038C # GREEK CAPITAL LETTER OMICRON WITH TONOS
++<Multi_key> <acute> <Greek_OMICRON> : "Ό" U038C # GREEK CAPITAL LETTER OMICRON WITH TONOS
++<Multi_key> <apostrophe> <Greek_OMICRON> : "Ό" U038C # GREEK CAPITAL LETTER OMICRON WITH TONOS
++<combining_acute> <Greek_OMICRON> : "Ό" U038C # GREEK CAPITAL LETTER OMICRON WITH TONOS
++<dead_acute> <Greek_UPSILON> : "Ύ" U038E # GREEK CAPITAL LETTER UPSILON WITH TONOS
++<Multi_key> <acute> <Greek_UPSILON> : "Ύ" U038E # GREEK CAPITAL LETTER UPSILON WITH TONOS
++<Multi_key> <apostrophe> <Greek_UPSILON> : "Ύ" U038E # GREEK CAPITAL LETTER UPSILON WITH TONOS
++<combining_acute> <Greek_UPSILON> : "Ύ" U038E # GREEK CAPITAL LETTER UPSILON WITH TONOS
++<dead_acute> <Greek_OMEGA> : "Ώ" U038F # GREEK CAPITAL LETTER OMEGA WITH TONOS
++<Multi_key> <acute> <Greek_OMEGA> : "Ώ" U038F # GREEK CAPITAL LETTER OMEGA WITH TONOS
++<Multi_key> <apostrophe> <Greek_OMEGA> : "Ώ" U038F # GREEK CAPITAL LETTER OMEGA WITH TONOS
++<combining_acute> <Greek_OMEGA> : "Ώ" U038F # GREEK CAPITAL LETTER OMEGA WITH TONOS
++<dead_acute> <Greek_iotadieresis> : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
++<Multi_key> <acute> <Greek_iotadieresis> : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
++<Multi_key> <apostrophe> <Greek_iotadieresis> : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
++<dead_acute> <dead_diaeresis> <Greek_iota> : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
++<dead_acute> <Multi_key> <quotedbl> <Greek_iota> : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
++<Multi_key> <acute> <dead_diaeresis> <Greek_iota> : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
++<Multi_key> <acute> <quotedbl> <Greek_iota> : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
++<Multi_key> <apostrophe> <dead_diaeresis> <Greek_iota> : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
++<Multi_key> <apostrophe> <quotedbl> <Greek_iota> : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
++<combining_acute> <Greek_iotadieresis> : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
++<combining_acute> <dead_diaeresis> <Greek_iota> : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
++<combining_acute> <Multi_key> <quotedbl> <Greek_iota> : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
++<dead_diaeresis> <Greek_IOTA> : "Ϊ" U03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
++<Multi_key> <quotedbl> <Greek_IOTA> : "Ϊ" U03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
++<dead_diaeresis> <Greek_UPSILON> : "Ϋ" U03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
++<Multi_key> <quotedbl> <Greek_UPSILON> : "Ϋ" U03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
++<dead_acute> <Greek_alpha> : "ά" U03AC # GREEK SMALL LETTER ALPHA WITH TONOS
++<Multi_key> <acute> <Greek_alpha> : "ά" U03AC # GREEK SMALL LETTER ALPHA WITH TONOS
++<Multi_key> <apostrophe> <Greek_alpha> : "ά" U03AC # GREEK SMALL LETTER ALPHA WITH TONOS
++<combining_acute> <Greek_alpha> : "ά" U03AC # GREEK SMALL LETTER ALPHA WITH TONOS
++<dead_acute> <Greek_epsilon> : "έ" U03AD # GREEK SMALL LETTER EPSILON WITH TONOS
++<Multi_key> <acute> <Greek_epsilon> : "έ" U03AD # GREEK SMALL LETTER EPSILON WITH TONOS
++<Multi_key> <apostrophe> <Greek_epsilon> : "έ" U03AD # GREEK SMALL LETTER EPSILON WITH TONOS
++<combining_acute> <Greek_epsilon> : "έ" U03AD # GREEK SMALL LETTER EPSILON WITH TONOS
++<dead_acute> <Greek_eta> : "ή" U03AE # GREEK SMALL LETTER ETA WITH TONOS
++<Multi_key> <acute> <Greek_eta> : "ή" U03AE # GREEK SMALL LETTER ETA WITH TONOS
++<Multi_key> <apostrophe> <Greek_eta> : "ή" U03AE # GREEK SMALL LETTER ETA WITH TONOS
++<combining_acute> <Greek_eta> : "ή" U03AE # GREEK SMALL LETTER ETA WITH TONOS
++<dead_acute> <Greek_iota> : "ί" U03AF # GREEK SMALL LETTER IOTA WITH TONOS
++<Multi_key> <acute> <Greek_iota> : "ί" U03AF # GREEK SMALL LETTER IOTA WITH TONOS
++<Multi_key> <apostrophe> <Greek_iota> : "ί" U03AF # GREEK SMALL LETTER IOTA WITH TONOS
++<combining_acute> <Greek_iota> : "ί" U03AF # GREEK SMALL LETTER IOTA WITH TONOS
++<dead_acute> <Greek_upsilondieresis> : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
++<Multi_key> <acute> <Greek_upsilondieresis> : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
++<Multi_key> <apostrophe> <Greek_upsilondieresis> : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
++<dead_acute> <dead_diaeresis> <Greek_upsilon> : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
++<dead_acute> <Multi_key> <quotedbl> <Greek_upsilon> : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
++<Multi_key> <acute> <dead_diaeresis> <Greek_upsilon> : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
++<Multi_key> <acute> <quotedbl> <Greek_upsilon> : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
++<Multi_key> <apostrophe> <dead_diaeresis> <Greek_upsilon> : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
++<Multi_key> <apostrophe> <quotedbl> <Greek_upsilon> : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
++<combining_acute> <Greek_upsilondieresis> : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
++<combining_acute> <dead_diaeresis> <Greek_upsilon> : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
++<combining_acute> <Multi_key> <quotedbl> <Greek_upsilon> : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
++<dead_diaeresis> <Greek_iota> : "ϊ" U03CA # GREEK SMALL LETTER IOTA WITH DIALYTIKA
++<Multi_key> <quotedbl> <Greek_iota> : "ϊ" U03CA # GREEK SMALL LETTER IOTA WITH DIALYTIKA
++<dead_diaeresis> <Greek_upsilon> : "ϋ" U03CB # GREEK SMALL LETTER UPSILON WITH DIALYTIKA
++<Multi_key> <quotedbl> <Greek_upsilon> : "ϋ" U03CB # GREEK SMALL LETTER UPSILON WITH DIALYTIKA
++<dead_acute> <Greek_omicron> : "ό" U03CC # GREEK SMALL LETTER OMICRON WITH TONOS
++<Multi_key> <acute> <Greek_omicron> : "ό" U03CC # GREEK SMALL LETTER OMICRON WITH TONOS
++<Multi_key> <apostrophe> <Greek_omicron> : "ό" U03CC # GREEK SMALL LETTER OMICRON WITH TONOS
++<combining_acute> <Greek_omicron> : "ό" U03CC # GREEK SMALL LETTER OMICRON WITH TONOS
++<dead_acute> <Greek_upsilon> : "ύ" U03CD # GREEK SMALL LETTER UPSILON WITH TONOS
++<Multi_key> <acute> <Greek_upsilon> : "ύ" U03CD # GREEK SMALL LETTER UPSILON WITH TONOS
++<Multi_key> <apostrophe> <Greek_upsilon> : "ύ" U03CD # GREEK SMALL LETTER UPSILON WITH TONOS
++<combining_acute> <Greek_upsilon> : "ύ" U03CD # GREEK SMALL LETTER UPSILON WITH TONOS
++<dead_acute> <Greek_omega> : "ώ" U03CE # GREEK SMALL LETTER OMEGA WITH TONOS
++<Multi_key> <acute> <Greek_omega> : "ώ" U03CE # GREEK SMALL LETTER OMEGA WITH TONOS
++<Multi_key> <apostrophe> <Greek_omega> : "ώ" U03CE # GREEK SMALL LETTER OMEGA WITH TONOS
++<combining_acute> <Greek_omega> : "ώ" U03CE # GREEK SMALL LETTER OMEGA WITH TONOS
++<Multi_key> <acute> <U03d2> : "ϓ" U03D3 # GREEK UPSILON WITH ACUTE AND HOOK SYMBOL
++<Multi_key> <apostrophe> <U03d2> : "ϓ" U03D3 # GREEK UPSILON WITH ACUTE AND HOOK SYMBOL
++<Multi_key> <quotedbl> <U03d2> : "ϔ" U03D4 # GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
++<dead_grave> <Cyrillic_IE> : "Ѐ" U0400 # CYRILLIC CAPITAL LETTER IE WITH GRAVE
++<Multi_key> <grave> <Cyrillic_IE> : "Ѐ" U0400 # CYRILLIC CAPITAL LETTER IE WITH GRAVE
++<combining_grave> <Cyrillic_IE> : "Ѐ" U0400 # CYRILLIC CAPITAL LETTER IE WITH GRAVE
++<dead_diaeresis> <Cyrillic_IE> : "Ё" U0401 # CYRILLIC CAPITAL LETTER IO
++<Multi_key> <quotedbl> <Cyrillic_IE> : "Ё" U0401 # CYRILLIC CAPITAL LETTER IO
++<dead_acute> <Cyrillic_GHE> : "Ѓ" U0403 # CYRILLIC CAPITAL LETTER GJE
++<Multi_key> <acute> <Cyrillic_GHE> : "Ѓ" U0403 # CYRILLIC CAPITAL LETTER GJE
++<Multi_key> <apostrophe> <Cyrillic_GHE> : "Ѓ" U0403 # CYRILLIC CAPITAL LETTER GJE
++<combining_acute> <Cyrillic_GHE> : "Ѓ" U0403 # CYRILLIC CAPITAL LETTER GJE
++<dead_diaeresis> <Ukrainian_I> : "Ї" U0407 # CYRILLIC CAPITAL LETTER YI
++<Multi_key> <quotedbl> <Ukrainian_I> : "Ї" U0407 # CYRILLIC CAPITAL LETTER YI
++<dead_acute> <Cyrillic_KA> : "Ќ" U040C # CYRILLIC CAPITAL LETTER KJE
++<Multi_key> <acute> <Cyrillic_KA> : "Ќ" U040C # CYRILLIC CAPITAL LETTER KJE
++<Multi_key> <apostrophe> <Cyrillic_KA> : "Ќ" U040C # CYRILLIC CAPITAL LETTER KJE
++<combining_acute> <Cyrillic_KA> : "Ќ" U040C # CYRILLIC CAPITAL LETTER KJE
++<dead_grave> <Cyrillic_I> : "Ѝ" U040D # CYRILLIC CAPITAL LETTER I WITH GRAVE
++<Multi_key> <grave> <Cyrillic_I> : "Ѝ" U040D # CYRILLIC CAPITAL LETTER I WITH GRAVE
++<combining_grave> <Cyrillic_I> : "Ѝ" U040D # CYRILLIC CAPITAL LETTER I WITH GRAVE
++<dead_breve> <Cyrillic_U> : "Ў" U040E # CYRILLIC CAPITAL LETTER SHORT U
++<Multi_key> <U> <Cyrillic_U> : "Ў" U040E # CYRILLIC CAPITAL LETTER SHORT U
++<Multi_key> <b> <Cyrillic_U> : "Ў" U040E # CYRILLIC CAPITAL LETTER SHORT U
++<dead_breve> <Cyrillic_I> : "Й" U0419 # CYRILLIC CAPITAL LETTER SHORT I
++<Multi_key> <U> <Cyrillic_I> : "Й" U0419 # CYRILLIC CAPITAL LETTER SHORT I
++<Multi_key> <b> <Cyrillic_I> : "Й" U0419 # CYRILLIC CAPITAL LETTER SHORT I
++<dead_breve> <Cyrillic_i> : "й" U0439 # CYRILLIC SMALL LETTER SHORT I
++<Multi_key> <U> <Cyrillic_i> : "й" U0439 # CYRILLIC SMALL LETTER SHORT I
++<Multi_key> <b> <Cyrillic_i> : "й" U0439 # CYRILLIC SMALL LETTER SHORT I
++<dead_grave> <Cyrillic_ie> : "ѐ" U0450 # CYRILLIC SMALL LETTER IE WITH GRAVE
++<Multi_key> <grave> <Cyrillic_ie> : "ѐ" U0450 # CYRILLIC SMALL LETTER IE WITH GRAVE
++<combining_grave> <Cyrillic_ie> : "ѐ" U0450 # CYRILLIC SMALL LETTER IE WITH GRAVE
++<dead_diaeresis> <Cyrillic_ie> : "ё" U0451 # CYRILLIC SMALL LETTER IO
++<Multi_key> <quotedbl> <Cyrillic_ie> : "ё" U0451 # CYRILLIC SMALL LETTER IO
++<dead_acute> <Cyrillic_ghe> : "ѓ" U0453 # CYRILLIC SMALL LETTER GJE
++<Multi_key> <acute> <Cyrillic_ghe> : "ѓ" U0453 # CYRILLIC SMALL LETTER GJE
++<Multi_key> <apostrophe> <Cyrillic_ghe> : "ѓ" U0453 # CYRILLIC SMALL LETTER GJE
++<combining_acute> <Cyrillic_ghe> : "ѓ" U0453 # CYRILLIC SMALL LETTER GJE
++<dead_diaeresis> <Ukrainian_i> : "ї" U0457 # CYRILLIC SMALL LETTER YI
++<Multi_key> <quotedbl> <Ukrainian_i> : "ї" U0457 # CYRILLIC SMALL LETTER YI
++<dead_acute> <Cyrillic_ka> : "ќ" U045C # CYRILLIC SMALL LETTER KJE
++<Multi_key> <acute> <Cyrillic_ka> : "ќ" U045C # CYRILLIC SMALL LETTER KJE
++<Multi_key> <apostrophe> <Cyrillic_ka> : "ќ" U045C # CYRILLIC SMALL LETTER KJE
++<combining_acute> <Cyrillic_ka> : "ќ" U045C # CYRILLIC SMALL LETTER KJE
++<dead_grave> <Cyrillic_i> : "ѝ" U045D # CYRILLIC SMALL LETTER I WITH GRAVE
++<Multi_key> <grave> <Cyrillic_i> : "ѝ" U045D # CYRILLIC SMALL LETTER I WITH GRAVE
++<combining_grave> <Cyrillic_i> : "ѝ" U045D # CYRILLIC SMALL LETTER I WITH GRAVE
++<dead_breve> <Cyrillic_u> : "ў" U045E # CYRILLIC SMALL LETTER SHORT U
++<Multi_key> <U> <Cyrillic_u> : "ў" U045E # CYRILLIC SMALL LETTER SHORT U
++<Multi_key> <b> <Cyrillic_u> : "ў" U045E # CYRILLIC SMALL LETTER SHORT U
++<U030f> <U0474> : "Ѷ" U0476 # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
++<U030f> <U0475> : "ѷ" U0477 # CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
++<Multi_key> <slash> <Cyrillic_GHE> : "Ғ" U0492 # CYRILLIC CAPITAL LETTER GHE WITH STROKE
++<Multi_key> <KP_Divide> <Cyrillic_GHE> : "Ғ" U0492 # CYRILLIC CAPITAL LETTER GHE WITH STROKE
++<Multi_key> <slash> <Cyrillic_ghe> : "ғ" U0493 # CYRILLIC SMALL LETTER GHE WITH STROKE
++<Multi_key> <KP_Divide> <Cyrillic_ghe> : "ғ" U0493 # CYRILLIC SMALL LETTER GHE WITH STROKE
++<Multi_key> <slash> <Cyrillic_KA> : "Ҟ" U049E # CYRILLIC CAPITAL LETTER KA WITH STROKE
++<Multi_key> <KP_Divide> <Cyrillic_KA> : "Ҟ" U049E # CYRILLIC CAPITAL LETTER KA WITH STROKE
++<Multi_key> <slash> <Cyrillic_ka> : "ҟ" U049F # CYRILLIC SMALL LETTER KA WITH STROKE
++<Multi_key> <KP_Divide> <Cyrillic_ka> : "ҟ" U049F # CYRILLIC SMALL LETTER KA WITH STROKE
++<Multi_key> <slash> <U04ae> : "Ұ" U04B0 # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
++<Multi_key> <KP_Divide> <U04ae> : "Ұ" U04B0 # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
++<Multi_key> <slash> <U04af> : "ұ" U04B1 # CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
++<Multi_key> <KP_Divide> <U04af> : "ұ" U04B1 # CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
++<dead_breve> <Cyrillic_ZHE> : "Ӂ" U04C1 # CYRILLIC CAPITAL LETTER ZHE WITH BREVE
++<Multi_key> <U> <Cyrillic_ZHE> : "Ӂ" U04C1 # CYRILLIC CAPITAL LETTER ZHE WITH BREVE
++<Multi_key> <b> <Cyrillic_ZHE> : "Ӂ" U04C1 # CYRILLIC CAPITAL LETTER ZHE WITH BREVE
++<dead_breve> <Cyrillic_zhe> : "ӂ" U04C2 # CYRILLIC SMALL LETTER ZHE WITH BREVE
++<Multi_key> <U> <Cyrillic_zhe> : "ӂ" U04C2 # CYRILLIC SMALL LETTER ZHE WITH BREVE
++<Multi_key> <b> <Cyrillic_zhe> : "ӂ" U04C2 # CYRILLIC SMALL LETTER ZHE WITH BREVE
++<dead_breve> <Cyrillic_A> : "Ӑ" U04D0 # CYRILLIC CAPITAL LETTER A WITH BREVE
++<Multi_key> <U> <Cyrillic_A> : "Ӑ" U04D0 # CYRILLIC CAPITAL LETTER A WITH BREVE
++<Multi_key> <b> <Cyrillic_A> : "Ӑ" U04D0 # CYRILLIC CAPITAL LETTER A WITH BREVE
++<dead_breve> <Cyrillic_a> : "ӑ" U04D1 # CYRILLIC SMALL LETTER A WITH BREVE
++<Multi_key> <U> <Cyrillic_a> : "ӑ" U04D1 # CYRILLIC SMALL LETTER A WITH BREVE
++<Multi_key> <b> <Cyrillic_a> : "ӑ" U04D1 # CYRILLIC SMALL LETTER A WITH BREVE
++<dead_diaeresis> <Cyrillic_A> : "Ӓ" U04D2 # CYRILLIC CAPITAL LETTER A WITH DIAERESIS
++<Multi_key> <quotedbl> <Cyrillic_A> : "Ӓ" U04D2 # CYRILLIC CAPITAL LETTER A WITH DIAERESIS
++<dead_diaeresis> <Cyrillic_a> : "ӓ" U04D3 # CYRILLIC SMALL LETTER A WITH DIAERESIS
++<Multi_key> <quotedbl> <Cyrillic_a> : "ӓ" U04D3 # CYRILLIC SMALL LETTER A WITH DIAERESIS
++<dead_breve> <Cyrillic_IE> : "Ӗ" U04D6 # CYRILLIC CAPITAL LETTER IE WITH BREVE
++<Multi_key> <U> <Cyrillic_IE> : "Ӗ" U04D6 # CYRILLIC CAPITAL LETTER IE WITH BREVE
++<Multi_key> <b> <Cyrillic_IE> : "Ӗ" U04D6 # CYRILLIC CAPITAL LETTER IE WITH BREVE
++<dead_breve> <Cyrillic_ie> : "ӗ" U04D7 # CYRILLIC SMALL LETTER IE WITH BREVE
++<Multi_key> <U> <Cyrillic_ie> : "ӗ" U04D7 # CYRILLIC SMALL LETTER IE WITH BREVE
++<Multi_key> <b> <Cyrillic_ie> : "ӗ" U04D7 # CYRILLIC SMALL LETTER IE WITH BREVE
++<dead_diaeresis> <U04d8> : "Ӛ" U04DA # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
++<Multi_key> <quotedbl> <U04d8> : "Ӛ" U04DA # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
++<dead_diaeresis> <U04d9> : "ӛ" U04DB # CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
++<Multi_key> <quotedbl> <U04d9> : "ӛ" U04DB # CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
++<dead_diaeresis> <Cyrillic_ZHE> : "Ӝ" U04DC # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
++<Multi_key> <quotedbl> <Cyrillic_ZHE> : "Ӝ" U04DC # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
++<dead_diaeresis> <Cyrillic_zhe> : "ӝ" U04DD # CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
++<Multi_key> <quotedbl> <Cyrillic_zhe> : "ӝ" U04DD # CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
++<dead_diaeresis> <Cyrillic_ZE> : "Ӟ" U04DE # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
++<Multi_key> <quotedbl> <Cyrillic_ZE> : "Ӟ" U04DE # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
++<dead_diaeresis> <Cyrillic_ze> : "ӟ" U04DF # CYRILLIC SMALL LETTER ZE WITH DIAERESIS
++<Multi_key> <quotedbl> <Cyrillic_ze> : "ӟ" U04DF # CYRILLIC SMALL LETTER ZE WITH DIAERESIS
++<dead_macron> <Cyrillic_I> : "Ӣ" U04E2 # CYRILLIC CAPITAL LETTER I WITH MACRON
++<Multi_key> <macron> <Cyrillic_I> : "Ӣ" U04E2 # CYRILLIC CAPITAL LETTER I WITH MACRON
++<Multi_key> <underscore> <Cyrillic_I> : "Ӣ" U04E2 # CYRILLIC CAPITAL LETTER I WITH MACRON
++<dead_macron> <Cyrillic_i> : "ӣ" U04E3 # CYRILLIC SMALL LETTER I WITH MACRON
++<Multi_key> <macron> <Cyrillic_i> : "ӣ" U04E3 # CYRILLIC SMALL LETTER I WITH MACRON
++<Multi_key> <underscore> <Cyrillic_i> : "ӣ" U04E3 # CYRILLIC SMALL LETTER I WITH MACRON
++<dead_diaeresis> <Cyrillic_I> : "Ӥ" U04E4 # CYRILLIC CAPITAL LETTER I WITH DIAERESIS
++<Multi_key> <quotedbl> <Cyrillic_I> : "Ӥ" U04E4 # CYRILLIC CAPITAL LETTER I WITH DIAERESIS
++<dead_diaeresis> <Cyrillic_i> : "ӥ" U04E5 # CYRILLIC SMALL LETTER I WITH DIAERESIS
++<Multi_key> <quotedbl> <Cyrillic_i> : "ӥ" U04E5 # CYRILLIC SMALL LETTER I WITH DIAERESIS
++<dead_diaeresis> <Cyrillic_O> : "Ӧ" U04E6 # CYRILLIC CAPITAL LETTER O WITH DIAERESIS
++<Multi_key> <quotedbl> <Cyrillic_O> : "Ӧ" U04E6 # CYRILLIC CAPITAL LETTER O WITH DIAERESIS
++<dead_diaeresis> <Cyrillic_o> : "ӧ" U04E7 # CYRILLIC SMALL LETTER O WITH DIAERESIS
++<Multi_key> <quotedbl> <Cyrillic_o> : "ӧ" U04E7 # CYRILLIC SMALL LETTER O WITH DIAERESIS
++<dead_diaeresis> <U04e8> : "Ӫ" U04EA # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
++<Multi_key> <quotedbl> <U04e8> : "Ӫ" U04EA # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
++<dead_diaeresis> <U04e9> : "ӫ" U04EB # CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
++<Multi_key> <quotedbl> <U04e9> : "ӫ" U04EB # CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
++<dead_diaeresis> <Cyrillic_E> : "Ӭ" U04EC # CYRILLIC CAPITAL LETTER E WITH DIAERESIS
++<Multi_key> <quotedbl> <Cyrillic_E> : "Ӭ" U04EC # CYRILLIC CAPITAL LETTER E WITH DIAERESIS
++<dead_diaeresis> <Cyrillic_e> : "ӭ" U04ED # CYRILLIC SMALL LETTER E WITH DIAERESIS
++<Multi_key> <quotedbl> <Cyrillic_e> : "ӭ" U04ED # CYRILLIC SMALL LETTER E WITH DIAERESIS
++<dead_macron> <Cyrillic_U> : "Ӯ" U04EE # CYRILLIC CAPITAL LETTER U WITH MACRON
++<Multi_key> <macron> <Cyrillic_U> : "Ӯ" U04EE # CYRILLIC CAPITAL LETTER U WITH MACRON
++<Multi_key> <underscore> <Cyrillic_U> : "Ӯ" U04EE # CYRILLIC CAPITAL LETTER U WITH MACRON
++<dead_macron> <Cyrillic_u> : "ӯ" U04EF # CYRILLIC SMALL LETTER U WITH MACRON
++<Multi_key> <macron> <Cyrillic_u> : "ӯ" U04EF # CYRILLIC SMALL LETTER U WITH MACRON
++<Multi_key> <underscore> <Cyrillic_u> : "ӯ" U04EF # CYRILLIC SMALL LETTER U WITH MACRON
++<dead_diaeresis> <Cyrillic_U> : "Ӱ" U04F0 # CYRILLIC CAPITAL LETTER U WITH DIAERESIS
++<Multi_key> <quotedbl> <Cyrillic_U> : "Ӱ" U04F0 # CYRILLIC CAPITAL LETTER U WITH DIAERESIS
++<dead_diaeresis> <Cyrillic_u> : "ӱ" U04F1 # CYRILLIC SMALL LETTER U WITH DIAERESIS
++<Multi_key> <quotedbl> <Cyrillic_u> : "ӱ" U04F1 # CYRILLIC SMALL LETTER U WITH DIAERESIS
++<dead_doubleacute> <Cyrillic_U> : "Ӳ" U04F2 # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
++<Multi_key> <equal> <Cyrillic_U> : "Ӳ" U04F2 # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
++<dead_doubleacute> <Cyrillic_u> : "ӳ" U04F3 # CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
++<Multi_key> <equal> <Cyrillic_u> : "ӳ" U04F3 # CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
++<dead_diaeresis> <Cyrillic_CHE> : "Ӵ" U04F4 # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
++<Multi_key> <quotedbl> <Cyrillic_CHE> : "Ӵ" U04F4 # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
++<dead_diaeresis> <Cyrillic_che> : "ӵ" U04F5 # CYRILLIC SMALL LETTER CHE WITH DIAERESIS
++<Multi_key> <quotedbl> <Cyrillic_che> : "ӵ" U04F5 # CYRILLIC SMALL LETTER CHE WITH DIAERESIS
++<dead_diaeresis> <Cyrillic_YERU> : "Ӹ" U04F8 # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
++<Multi_key> <quotedbl> <Cyrillic_YERU> : "Ӹ" U04F8 # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
++<dead_diaeresis> <Cyrillic_yeru> : "ӹ" U04F9 # CYRILLIC SMALL LETTER YERU WITH DIAERESIS
++<Multi_key> <quotedbl> <Cyrillic_yeru> : "ӹ" U04F9 # CYRILLIC SMALL LETTER YERU WITH DIAERESIS
++<Multi_key> <U0653> <Arabic_alef> : "آ" U0622 # ARABIC LETTER ALEF WITH MADDA ABOVE
++<Multi_key> <U0654> <Arabic_alef> : "أ" U0623 # ARABIC LETTER ALEF WITH HAMZA ABOVE
++<Multi_key> <U0654> <Arabic_waw> : "ؤ" U0624 # ARABIC LETTER WAW WITH HAMZA ABOVE
++<Multi_key> <U0655> <Arabic_alef> : "إ" U0625 # ARABIC LETTER ALEF WITH HAMZA BELOW
++<Multi_key> <U0654> <Arabic_yeh> : "ئ" U0626 # ARABIC LETTER YEH WITH HAMZA ABOVE
++<Multi_key> <U0654> <U06d5> : "ۀ" U06C0 # ARABIC LETTER HEH WITH YEH ABOVE
++<Multi_key> <U0654> <U06c1> : "ۂ" U06C2 # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
++<Multi_key> <U0654> <U06d2> : "ۓ" U06D3 # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
++<Multi_key> <U093c> <U0928> : "ऩ" U0929 # DEVANAGARI LETTER NNNA
++<Multi_key> <U093c> <U0930> : "ऱ" U0931 # DEVANAGARI LETTER RRA
++<Multi_key> <U093c> <U0933> : "ऴ" U0934 # DEVANAGARI LETTER LLLA
++<Multi_key> <U093c> <U0915> : "क़" U0958 # DEVANAGARI LETTER QA
++<Multi_key> <U093c> <U0916> : "ख़" U0959 # DEVANAGARI LETTER KHHA
++<Multi_key> <U093c> <U0917> : "ग़" U095A # DEVANAGARI LETTER GHHA
++<Multi_key> <U093c> <U091c> : "ज़" U095B # DEVANAGARI LETTER ZA
++<Multi_key> <U093c> <U0921> : "ड़" U095C # DEVANAGARI LETTER DDDHA
++<Multi_key> <U093c> <U0922> : "ढ़" U095D # DEVANAGARI LETTER RHA
++<Multi_key> <U093c> <U092b> : "फ़" U095E # DEVANAGARI LETTER FA
++<Multi_key> <U093c> <U092f> : "य़" U095F # DEVANAGARI LETTER YYA
++<Multi_key> <U09c7> <U09be> : "ো" U09CB # BENGALI VOWEL SIGN O
++<Multi_key> <U09c7> <U09d7> : "ৌ" U09CC # BENGALI VOWEL SIGN AU
++<Multi_key> <U09bc> <U09a1> : "ড়" U09DC # BENGALI LETTER RRA
++<Multi_key> <U09bc> <U09a2> : "ঢ়" U09DD # BENGALI LETTER RHA
++<Multi_key> <U09bc> <U09af> : "য়" U09DF # BENGALI LETTER YYA
++<Multi_key> <U0a3c> <U0a32> : "ਲ਼" U0A33 # GURMUKHI LETTER LLA
++<Multi_key> <U0a3c> <U0a38> : "ਸ਼" U0A36 # GURMUKHI LETTER SHA
++<Multi_key> <U0a3c> <U0a16> : "ਖ਼" U0A59 # GURMUKHI LETTER KHHA
++<Multi_key> <U0a3c> <U0a17> : "ਗ਼" U0A5A # GURMUKHI LETTER GHHA
++<Multi_key> <U0a3c> <U0a1c> : "ਜ਼" U0A5B # GURMUKHI LETTER ZA
++<Multi_key> <U0a3c> <U0a2b> : "ਫ਼" U0A5E # GURMUKHI LETTER FA
++<Multi_key> <U0b47> <U0b56> : "ୈ" U0B48 # ORIYA VOWEL SIGN AI
++<Multi_key> <U0b47> <U0b3e> : "ୋ" U0B4B # ORIYA VOWEL SIGN O
++<Multi_key> <U0b47> <U0b57> : "ୌ" U0B4C # ORIYA VOWEL SIGN AU
++<Multi_key> <U0b3c> <U0b21> : "ଡ଼" U0B5C # ORIYA LETTER RRA
++<Multi_key> <U0b3c> <U0b22> : "ଢ଼" U0B5D # ORIYA LETTER RHA
++<Multi_key> <U0bd7> <U0b92> : "ஔ" U0B94 # TAMIL LETTER AU
++<Multi_key> <U0bc6> <U0bbe> : "ொ" U0BCA # TAMIL VOWEL SIGN O
++<Multi_key> <U0bc7> <U0bbe> : "ோ" U0BCB # TAMIL VOWEL SIGN OO
++<Multi_key> <U0bc6> <U0bd7> : "ௌ" U0BCC # TAMIL VOWEL SIGN AU
++<Multi_key> <U0c46> <U0c56> : "ై" U0C48 # TELUGU VOWEL SIGN AI
++<Multi_key> <U0cbf> <U0cd5> : "ೀ" U0CC0 # KANNADA VOWEL SIGN II
++<Multi_key> <U0cc6> <U0cd5> : "ೇ" U0CC7 # KANNADA VOWEL SIGN EE
++<Multi_key> <U0cc6> <U0cd6> : "ೈ" U0CC8 # KANNADA VOWEL SIGN AI
++<Multi_key> <U0cc6> <U0cc2> : "ೊ" U0CCA # KANNADA VOWEL SIGN O
++<Multi_key> <U0cca> <U0cd5> : "ೋ" U0CCB # KANNADA VOWEL SIGN OO
++<Multi_key> <U0cc6> <U0cc2> <U0cd5> : "ೋ" U0CCB # KANNADA VOWEL SIGN OO
++<Multi_key> <U0d46> <U0d3e> : "ൊ" U0D4A # MALAYALAM VOWEL SIGN O
++<Multi_key> <U0d47> <U0d3e> : "ോ" U0D4B # MALAYALAM VOWEL SIGN OO
++<Multi_key> <U0d46> <U0d57> : "ൌ" U0D4C # MALAYALAM VOWEL SIGN AU
++<Multi_key> <U0dd9> <U0dca> : "ේ" U0DDA # SINHALA VOWEL SIGN DIGA KOMBUVA
++<Multi_key> <U0dd9> <U0dcf> : "ො" U0DDC # SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA
++<Multi_key> <U0ddc> <U0dca> : "ෝ" U0DDD # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA
++<Multi_key> <U0dd9> <U0dcf> <U0dca> : "ෝ" U0DDD # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA
++<Multi_key> <U0dd9> <U0ddf> : "ෞ" U0DDE # SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
++<Multi_key> <U0fb7> <U0f42> : "གྷ" U0F43 # TIBETAN LETTER GHA
++<Multi_key> <U0fb7> <U0f4c> : "ཌྷ" U0F4D # TIBETAN LETTER DDHA
++<Multi_key> <U0fb7> <U0f51> : "དྷ" U0F52 # TIBETAN LETTER DHA
++<Multi_key> <U0fb7> <U0f56> : "བྷ" U0F57 # TIBETAN LETTER BHA
++<Multi_key> <U0fb7> <U0f5b> : "ཛྷ" U0F5C # TIBETAN LETTER DZHA
++<Multi_key> <U0fb5> <U0f40> : "ཀྵ" U0F69 # TIBETAN LETTER KSSA
++<Multi_key> <U0f71> <U0f72> : "ཱི" U0F73 # TIBETAN VOWEL SIGN II
++<Multi_key> <U0f71> <U0f74> : "ཱུ" U0F75 # TIBETAN VOWEL SIGN UU
++<Multi_key> <U0fb2> <U0f80> : "ྲྀ" U0F76 # TIBETAN VOWEL SIGN VOCALIC R
++<Multi_key> <U0fb3> <U0f80> : "ླྀ" U0F78 # TIBETAN VOWEL SIGN VOCALIC L
++<Multi_key> <U0f71> <U0f80> : "ཱྀ" U0F81 # TIBETAN VOWEL SIGN REVERSED II
++<Multi_key> <U0f92> <U0fb7> : "ྒྷ" U0F93 # TIBETAN SUBJOINED LETTER GHA
++<Multi_key> <U0f9c> <U0fb7> : "ྜྷ" U0F9D # TIBETAN SUBJOINED LETTER DDHA
++<Multi_key> <U0fa1> <U0fb7> : "ྡྷ" U0FA2 # TIBETAN SUBJOINED LETTER DHA
++<Multi_key> <U0fa6> <U0fb7> : "ྦྷ" U0FA7 # TIBETAN SUBJOINED LETTER BHA
++<Multi_key> <U0fab> <U0fb7> : "ྫྷ" U0FAC # TIBETAN SUBJOINED LETTER DZHA
++<Multi_key> <U0f90> <U0fb5> : "ྐྵ" U0FB9 # TIBETAN SUBJOINED LETTER KSSA
++<Multi_key> <U102e> <U1025> : "ဦ" U1026 # MYANMAR LETTER UU
++<U0325> <A> : "Ḁ" U1E00 # LATIN CAPITAL LETTER A WITH RING BELOW
++<U0325> <a> : "ḁ" U1E01 # LATIN SMALL LETTER A WITH RING BELOW
++<dead_abovedot> <B> : "Ḃ" U1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE
++<Multi_key> <period> <B> : "Ḃ" U1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE
++<dead_abovedot> <b> : "ḃ" U1E03 # LATIN SMALL LETTER B WITH DOT ABOVE
++<Multi_key> <period> <b> : "ḃ" U1E03 # LATIN SMALL LETTER B WITH DOT ABOVE
++<dead_belowdot> <B> : "Ḅ" U1E04 # LATIN CAPITAL LETTER B WITH DOT BELOW
++<Multi_key> <exclam> <B> : "Ḅ" U1E04 # LATIN CAPITAL LETTER B WITH DOT BELOW
++<combining_belowdot> <B> : "Ḅ" U1E04 # LATIN CAPITAL LETTER B WITH DOT BELOW
++<dead_belowdot> <b> : "ḅ" U1E05 # LATIN SMALL LETTER B WITH DOT BELOW
++<Multi_key> <exclam> <b> : "ḅ" U1E05 # LATIN SMALL LETTER B WITH DOT BELOW
++<combining_belowdot> <b> : "ḅ" U1E05 # LATIN SMALL LETTER B WITH DOT BELOW
++<U0331> <B> : "Ḇ" U1E06 # LATIN CAPITAL LETTER B WITH LINE BELOW
++<U0331> <b> : "ḇ" U1E07 # LATIN SMALL LETTER B WITH LINE BELOW
++<dead_acute> <Ccedilla> : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
++<Multi_key> <acute> <Ccedilla> : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
++<Multi_key> <apostrophe> <Ccedilla> : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
++<dead_acute> <dead_cedilla> <C> : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
++<dead_acute> <Multi_key> <comma> <C> : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
++<Multi_key> <acute> <dead_cedilla> <C> : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
++<Multi_key> <acute> <comma> <C> : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
++<Multi_key> <apostrophe> <dead_cedilla> <C> : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
++<Multi_key> <apostrophe> <comma> <C> : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
++<combining_acute> <Ccedilla> : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
++<combining_acute> <dead_cedilla> <C> : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
++<combining_acute> <Multi_key> <comma> <C> : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
++<dead_acute> <ccedilla> : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
++<Multi_key> <acute> <ccedilla> : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
++<Multi_key> <apostrophe> <ccedilla> : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
++<dead_acute> <dead_cedilla> <c> : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
++<dead_acute> <Multi_key> <comma> <c> : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
++<Multi_key> <acute> <dead_cedilla> <c> : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
++<Multi_key> <acute> <comma> <c> : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
++<Multi_key> <apostrophe> <dead_cedilla> <c> : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
++<Multi_key> <apostrophe> <comma> <c> : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
++<combining_acute> <ccedilla> : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
++<combining_acute> <dead_cedilla> <c> : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
++<combining_acute> <Multi_key> <comma> <c> : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
++<dead_abovedot> <D> : "Ḋ" U1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE
++<Multi_key> <period> <D> : "Ḋ" U1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE
++<dead_abovedot> <d> : "ḋ" U1E0B # LATIN SMALL LETTER D WITH DOT ABOVE
++<Multi_key> <period> <d> : "ḋ" U1E0B # LATIN SMALL LETTER D WITH DOT ABOVE
++<dead_belowdot> <D> : "Ḍ" U1E0C # LATIN CAPITAL LETTER D WITH DOT BELOW
++<Multi_key> <exclam> <D> : "Ḍ" U1E0C # LATIN CAPITAL LETTER D WITH DOT BELOW
++<combining_belowdot> <D> : "Ḍ" U1E0C # LATIN CAPITAL LETTER D WITH DOT BELOW
++<dead_belowdot> <d> : "ḍ" U1E0D # LATIN SMALL LETTER D WITH DOT BELOW
++<Multi_key> <exclam> <d> : "ḍ" U1E0D # LATIN SMALL LETTER D WITH DOT BELOW
++<combining_belowdot> <d> : "ḍ" U1E0D # LATIN SMALL LETTER D WITH DOT BELOW
++<U0331> <D> : "Ḏ" U1E0E # LATIN CAPITAL LETTER D WITH LINE BELOW
++<U0331> <d> : "ḏ" U1E0F # LATIN SMALL LETTER D WITH LINE BELOW
++<dead_cedilla> <D> : "Ḑ" U1E10 # LATIN CAPITAL LETTER D WITH CEDILLA
++<Multi_key> <comma> <D> : "Ḑ" U1E10 # LATIN CAPITAL LETTER D WITH CEDILLA
++<dead_cedilla> <d> : "ḑ" U1E11 # LATIN SMALL LETTER D WITH CEDILLA
++<Multi_key> <comma> <d> : "ḑ" U1E11 # LATIN SMALL LETTER D WITH CEDILLA
++<U032d> <D> : "Ḓ" U1E12 # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
++<U032d> <d> : "ḓ" U1E13 # LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
++<dead_grave> <Emacron> : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
++<Multi_key> <grave> <Emacron> : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
++<dead_grave> <dead_macron> <E> : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
++<dead_grave> <Multi_key> <macron> <E> : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
++<dead_grave> <Multi_key> <underscore> <E> : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
++<Multi_key> <grave> <dead_macron> <E> : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
++<Multi_key> <grave> <macron> <E> : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
++<Multi_key> <grave> <underscore> <E> : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
++<combining_grave> <Emacron> : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
++<combining_grave> <dead_macron> <E> : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
++<combining_grave> <Multi_key> <macron> <E> : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
++<combining_grave> <Multi_key> <underscore> <E> : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
++<dead_grave> <emacron> : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
++<Multi_key> <grave> <emacron> : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
++<dead_grave> <dead_macron> <e> : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
++<dead_grave> <Multi_key> <macron> <e> : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
++<dead_grave> <Multi_key> <underscore> <e> : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
++<Multi_key> <grave> <dead_macron> <e> : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
++<Multi_key> <grave> <macron> <e> : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
++<Multi_key> <grave> <underscore> <e> : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
++<combining_grave> <emacron> : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
++<combining_grave> <dead_macron> <e> : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
++<combining_grave> <Multi_key> <macron> <e> : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
++<combining_grave> <Multi_key> <underscore> <e> : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
++<dead_acute> <Emacron> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++<Multi_key> <acute> <Emacron> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++<Multi_key> <apostrophe> <Emacron> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++<dead_acute> <dead_macron> <E> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++<dead_acute> <Multi_key> <macron> <E> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++<dead_acute> <Multi_key> <underscore> <E> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++<Multi_key> <acute> <dead_macron> <E> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++<Multi_key> <acute> <macron> <E> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++<Multi_key> <acute> <underscore> <E> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++<Multi_key> <apostrophe> <dead_macron> <E> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++<Multi_key> <apostrophe> <macron> <E> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++<Multi_key> <apostrophe> <underscore> <E> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++<combining_acute> <Emacron> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++<combining_acute> <dead_macron> <E> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++<combining_acute> <Multi_key> <macron> <E> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++<combining_acute> <Multi_key> <underscore> <E> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++<dead_acute> <emacron> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++<Multi_key> <acute> <emacron> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++<Multi_key> <apostrophe> <emacron> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++<dead_acute> <dead_macron> <e> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++<dead_acute> <Multi_key> <macron> <e> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++<dead_acute> <Multi_key> <underscore> <e> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++<Multi_key> <acute> <dead_macron> <e> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++<Multi_key> <acute> <macron> <e> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++<Multi_key> <acute> <underscore> <e> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++<Multi_key> <apostrophe> <dead_macron> <e> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++<Multi_key> <apostrophe> <macron> <e> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++<Multi_key> <apostrophe> <underscore> <e> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++<combining_acute> <emacron> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++<combining_acute> <dead_macron> <e> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++<combining_acute> <Multi_key> <macron> <e> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++<combining_acute> <Multi_key> <underscore> <e> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++<U032d> <E> : "Ḙ" U1E18 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
++<U032d> <e> : "ḙ" U1E19 # LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
++<U0330> <E> : "Ḛ" U1E1A # LATIN CAPITAL LETTER E WITH TILDE BELOW
++<U0330> <e> : "ḛ" U1E1B # LATIN SMALL LETTER E WITH TILDE BELOW
++<dead_breve> <U0228> : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
++<Multi_key> <U> <U0228> : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
++<Multi_key> <b> <U0228> : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
++<dead_breve> <dead_cedilla> <E> : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
++<dead_breve> <Multi_key> <comma> <E> : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
++<Multi_key> <U> <dead_cedilla> <E> : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
++<Multi_key> <U> <comma> <E> : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
++<Multi_key> <b> <dead_cedilla> <E> : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
++<Multi_key> <b> <comma> <E> : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
++<dead_breve> <U0229> : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
++<Multi_key> <U> <U0229> : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
++<Multi_key> <b> <U0229> : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
++<dead_breve> <dead_cedilla> <e> : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
++<dead_breve> <Multi_key> <comma> <e> : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
++<Multi_key> <U> <dead_cedilla> <e> : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
++<Multi_key> <U> <comma> <e> : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
++<Multi_key> <b> <dead_cedilla> <e> : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
++<Multi_key> <b> <comma> <e> : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
++<dead_abovedot> <F> : "Ḟ" U1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE
++<Multi_key> <period> <F> : "Ḟ" U1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE
++<dead_abovedot> <f> : "ḟ" U1E1F # LATIN SMALL LETTER F WITH DOT ABOVE
++<Multi_key> <period> <f> : "ḟ" U1E1F # LATIN SMALL LETTER F WITH DOT ABOVE
++<dead_macron> <G> : "Ḡ" U1E20 # LATIN CAPITAL LETTER G WITH MACRON
++<Multi_key> <macron> <G> : "Ḡ" U1E20 # LATIN CAPITAL LETTER G WITH MACRON
++<Multi_key> <underscore> <G> : "Ḡ" U1E20 # LATIN CAPITAL LETTER G WITH MACRON
++<dead_macron> <g> : "ḡ" U1E21 # LATIN SMALL LETTER G WITH MACRON
++<Multi_key> <macron> <g> : "ḡ" U1E21 # LATIN SMALL LETTER G WITH MACRON
++<Multi_key> <underscore> <g> : "ḡ" U1E21 # LATIN SMALL LETTER G WITH MACRON
++<dead_abovedot> <H> : "Ḣ" U1E22 # LATIN CAPITAL LETTER H WITH DOT ABOVE
++<Multi_key> <period> <H> : "Ḣ" U1E22 # LATIN CAPITAL LETTER H WITH DOT ABOVE
++<dead_abovedot> <h> : "ḣ" U1E23 # LATIN SMALL LETTER H WITH DOT ABOVE
++<Multi_key> <period> <h> : "ḣ" U1E23 # LATIN SMALL LETTER H WITH DOT ABOVE
++<dead_belowdot> <H> : "Ḥ" U1E24 # LATIN CAPITAL LETTER H WITH DOT BELOW
++<Multi_key> <exclam> <H> : "Ḥ" U1E24 # LATIN CAPITAL LETTER H WITH DOT BELOW
++<combining_belowdot> <H> : "Ḥ" U1E24 # LATIN CAPITAL LETTER H WITH DOT BELOW
++<dead_belowdot> <h> : "ḥ" U1E25 # LATIN SMALL LETTER H WITH DOT BELOW
++<Multi_key> <exclam> <h> : "ḥ" U1E25 # LATIN SMALL LETTER H WITH DOT BELOW
++<combining_belowdot> <h> : "ḥ" U1E25 # LATIN SMALL LETTER H WITH DOT BELOW
++<dead_diaeresis> <H> : "Ḧ" U1E26 # LATIN CAPITAL LETTER H WITH DIAERESIS
++<Multi_key> <quotedbl> <H> : "Ḧ" U1E26 # LATIN CAPITAL LETTER H WITH DIAERESIS
++<dead_diaeresis> <h> : "ḧ" U1E27 # LATIN SMALL LETTER H WITH DIAERESIS
++<Multi_key> <quotedbl> <h> : "ḧ" U1E27 # LATIN SMALL LETTER H WITH DIAERESIS
++<dead_cedilla> <H> : "Ḩ" U1E28 # LATIN CAPITAL LETTER H WITH CEDILLA
++<Multi_key> <comma> <H> : "Ḩ" U1E28 # LATIN CAPITAL LETTER H WITH CEDILLA
++<dead_cedilla> <h> : "ḩ" U1E29 # LATIN SMALL LETTER H WITH CEDILLA
++<Multi_key> <comma> <h> : "ḩ" U1E29 # LATIN SMALL LETTER H WITH CEDILLA
++<U032e> <H> : "Ḫ" U1E2A # LATIN CAPITAL LETTER H WITH BREVE BELOW
++<U032e> <h> : "ḫ" U1E2B # LATIN SMALL LETTER H WITH BREVE BELOW
++<U0330> <I> : "Ḭ" U1E2C # LATIN CAPITAL LETTER I WITH TILDE BELOW
++<U0330> <i> : "ḭ" U1E2D # LATIN SMALL LETTER I WITH TILDE BELOW
++<dead_acute> <Idiaeresis> : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
++<Multi_key> <acute> <Idiaeresis> : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
++<Multi_key> <apostrophe> <Idiaeresis> : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
++<dead_acute> <dead_diaeresis> <I> : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
++<dead_acute> <Multi_key> <quotedbl> <I> : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
++<Multi_key> <acute> <dead_diaeresis> <I> : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
++<Multi_key> <acute> <quotedbl> <I> : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
++<Multi_key> <apostrophe> <dead_diaeresis> <I> : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
++<Multi_key> <apostrophe> <quotedbl> <I> : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
++<combining_acute> <Idiaeresis> : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
++<combining_acute> <dead_diaeresis> <I> : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
++<combining_acute> <Multi_key> <quotedbl> <I> : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
++<dead_acute> <idiaeresis> : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
++<Multi_key> <acute> <idiaeresis> : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
++<Multi_key> <apostrophe> <idiaeresis> : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
++<dead_acute> <dead_diaeresis> <i> : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
++<dead_acute> <Multi_key> <quotedbl> <i> : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
++<Multi_key> <acute> <dead_diaeresis> <i> : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
++<Multi_key> <acute> <quotedbl> <i> : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
++<Multi_key> <apostrophe> <dead_diaeresis> <i> : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
++<Multi_key> <apostrophe> <quotedbl> <i> : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
++<combining_acute> <idiaeresis> : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
++<combining_acute> <dead_diaeresis> <i> : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
++<combining_acute> <Multi_key> <quotedbl> <i> : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
++<dead_acute> <K> : "Ḱ" U1E30 # LATIN CAPITAL LETTER K WITH ACUTE
++<Multi_key> <acute> <K> : "Ḱ" U1E30 # LATIN CAPITAL LETTER K WITH ACUTE
++<Multi_key> <apostrophe> <K> : "Ḱ" U1E30 # LATIN CAPITAL LETTER K WITH ACUTE
++<combining_acute> <K> : "Ḱ" U1E30 # LATIN CAPITAL LETTER K WITH ACUTE
++<dead_acute> <k> : "ḱ" U1E31 # LATIN SMALL LETTER K WITH ACUTE
++<Multi_key> <acute> <k> : "ḱ" U1E31 # LATIN SMALL LETTER K WITH ACUTE
++<Multi_key> <apostrophe> <k> : "ḱ" U1E31 # LATIN SMALL LETTER K WITH ACUTE
++<combining_acute> <k> : "ḱ" U1E31 # LATIN SMALL LETTER K WITH ACUTE
++<dead_belowdot> <K> : "Ḳ" U1E32 # LATIN CAPITAL LETTER K WITH DOT BELOW
++<Multi_key> <exclam> <K> : "Ḳ" U1E32 # LATIN CAPITAL LETTER K WITH DOT BELOW
++<combining_belowdot> <K> : "Ḳ" U1E32 # LATIN CAPITAL LETTER K WITH DOT BELOW
++<dead_belowdot> <k> : "ḳ" U1E33 # LATIN SMALL LETTER K WITH DOT BELOW
++<Multi_key> <exclam> <k> : "ḳ" U1E33 # LATIN SMALL LETTER K WITH DOT BELOW
++<combining_belowdot> <k> : "ḳ" U1E33 # LATIN SMALL LETTER K WITH DOT BELOW
++<U0331> <K> : "Ḵ" U1E34 # LATIN CAPITAL LETTER K WITH LINE BELOW
++<U0331> <k> : "ḵ" U1E35 # LATIN SMALL LETTER K WITH LINE BELOW
++<dead_belowdot> <L> : "Ḷ" U1E36 # LATIN CAPITAL LETTER L WITH DOT BELOW
++<Multi_key> <exclam> <L> : "Ḷ" U1E36 # LATIN CAPITAL LETTER L WITH DOT BELOW
++<combining_belowdot> <L> : "Ḷ" U1E36 # LATIN CAPITAL LETTER L WITH DOT BELOW
++<dead_belowdot> <l> : "ḷ" U1E37 # LATIN SMALL LETTER L WITH DOT BELOW
++<Multi_key> <exclam> <l> : "ḷ" U1E37 # LATIN SMALL LETTER L WITH DOT BELOW
++<combining_belowdot> <l> : "ḷ" U1E37 # LATIN SMALL LETTER L WITH DOT BELOW
++<dead_macron> <U1e36> : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
++<Multi_key> <macron> <U1e36> : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
++<Multi_key> <underscore> <U1e36> : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
++<dead_macron> <dead_belowdot> <L> : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
++<dead_macron> <Multi_key> <exclam> <L> : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
++<Multi_key> <macron> <dead_belowdot> <L> : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
++<Multi_key> <macron> <exclam> <L> : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
++<Multi_key> <underscore> <dead_belowdot> <L> : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
++<Multi_key> <underscore> <exclam> <L> : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
++<dead_macron> <combining_belowdot> <L> : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
++<Multi_key> <macron> <combining_belowdot> <L> : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
++<Multi_key> <underscore> <combining_belowdot> <L> : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
++<dead_macron> <U1e37> : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
++<Multi_key> <macron> <U1e37> : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
++<Multi_key> <underscore> <U1e37> : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
++<dead_macron> <dead_belowdot> <l> : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
++<dead_macron> <Multi_key> <exclam> <l> : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
++<Multi_key> <macron> <dead_belowdot> <l> : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
++<Multi_key> <macron> <exclam> <l> : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
++<Multi_key> <underscore> <dead_belowdot> <l> : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
++<Multi_key> <underscore> <exclam> <l> : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
++<dead_macron> <combining_belowdot> <l> : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
++<Multi_key> <macron> <combining_belowdot> <l> : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
++<Multi_key> <underscore> <combining_belowdot> <l> : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
++<U0331> <L> : "Ḻ" U1E3A # LATIN CAPITAL LETTER L WITH LINE BELOW
++<U0331> <l> : "ḻ" U1E3B # LATIN SMALL LETTER L WITH LINE BELOW
++<U032d> <L> : "Ḽ" U1E3C # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
++<U032d> <l> : "ḽ" U1E3D # LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
++<dead_acute> <M> : "Ḿ" U1E3E # LATIN CAPITAL LETTER M WITH ACUTE
++<Multi_key> <acute> <M> : "Ḿ" U1E3E # LATIN CAPITAL LETTER M WITH ACUTE
++<Multi_key> <apostrophe> <M> : "Ḿ" U1E3E # LATIN CAPITAL LETTER M WITH ACUTE
++<combining_acute> <M> : "Ḿ" U1E3E # LATIN CAPITAL LETTER M WITH ACUTE
++<dead_acute> <m> : "ḿ" U1E3F # LATIN SMALL LETTER M WITH ACUTE
++<Multi_key> <acute> <m> : "ḿ" U1E3F # LATIN SMALL LETTER M WITH ACUTE
++<Multi_key> <apostrophe> <m> : "ḿ" U1E3F # LATIN SMALL LETTER M WITH ACUTE
++<combining_acute> <m> : "ḿ" U1E3F # LATIN SMALL LETTER M WITH ACUTE
++<dead_abovedot> <M> : "Ṁ" U1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE
++<Multi_key> <period> <M> : "Ṁ" U1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE
++<dead_abovedot> <m> : "ṁ" U1E41 # LATIN SMALL LETTER M WITH DOT ABOVE
++<Multi_key> <period> <m> : "ṁ" U1E41 # LATIN SMALL LETTER M WITH DOT ABOVE
++<dead_belowdot> <M> : "Ṃ" U1E42 # LATIN CAPITAL LETTER M WITH DOT BELOW
++<Multi_key> <exclam> <M> : "Ṃ" U1E42 # LATIN CAPITAL LETTER M WITH DOT BELOW
++<combining_belowdot> <M> : "Ṃ" U1E42 # LATIN CAPITAL LETTER M WITH DOT BELOW
++<dead_belowdot> <m> : "ṃ" U1E43 # LATIN SMALL LETTER M WITH DOT BELOW
++<Multi_key> <exclam> <m> : "ṃ" U1E43 # LATIN SMALL LETTER M WITH DOT BELOW
++<combining_belowdot> <m> : "ṃ" U1E43 # LATIN SMALL LETTER M WITH DOT BELOW
++<dead_abovedot> <N> : "Ṅ" U1E44 # LATIN CAPITAL LETTER N WITH DOT ABOVE
++<Multi_key> <period> <N> : "Ṅ" U1E44 # LATIN CAPITAL LETTER N WITH DOT ABOVE
++<dead_abovedot> <n> : "ṅ" U1E45 # LATIN SMALL LETTER N WITH DOT ABOVE
++<Multi_key> <period> <n> : "ṅ" U1E45 # LATIN SMALL LETTER N WITH DOT ABOVE
++<dead_belowdot> <N> : "Ṇ" U1E46 # LATIN CAPITAL LETTER N WITH DOT BELOW
++<Multi_key> <exclam> <N> : "Ṇ" U1E46 # LATIN CAPITAL LETTER N WITH DOT BELOW
++<combining_belowdot> <N> : "Ṇ" U1E46 # LATIN CAPITAL LETTER N WITH DOT BELOW
++<dead_belowdot> <n> : "ṇ" U1E47 # LATIN SMALL LETTER N WITH DOT BELOW
++<Multi_key> <exclam> <n> : "ṇ" U1E47 # LATIN SMALL LETTER N WITH DOT BELOW
++<combining_belowdot> <n> : "ṇ" U1E47 # LATIN SMALL LETTER N WITH DOT BELOW
++<U0331> <N> : "Ṉ" U1E48 # LATIN CAPITAL LETTER N WITH LINE BELOW
++<U0331> <n> : "ṉ" U1E49 # LATIN SMALL LETTER N WITH LINE BELOW
++<U032d> <N> : "Ṋ" U1E4A # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
++<U032d> <n> : "ṋ" U1E4B # LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
++<dead_acute> <Otilde> : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++<Multi_key> <acute> <Otilde> : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++<Multi_key> <apostrophe> <Otilde> : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++<dead_acute> <dead_tilde> <O> : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++<dead_acute> <Multi_key> <asciitilde> <O> : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++<Multi_key> <acute> <dead_tilde> <O> : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++<Multi_key> <acute> <asciitilde> <O> : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++<Multi_key> <apostrophe> <dead_tilde> <O> : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++<Multi_key> <apostrophe> <asciitilde> <O> : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++<dead_acute> <combining_tilde> <O> : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++<Multi_key> <acute> <combining_tilde> <O> : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++<Multi_key> <apostrophe> <combining_tilde> <O> : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++<combining_acute> <Otilde> : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++<combining_acute> <dead_tilde> <O> : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++<combining_acute> <Multi_key> <asciitilde> <O> : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++<combining_acute> <combining_tilde> <O> : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++<dead_acute> <otilde> : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++<Multi_key> <acute> <otilde> : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++<Multi_key> <apostrophe> <otilde> : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++<dead_acute> <dead_tilde> <o> : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++<dead_acute> <Multi_key> <asciitilde> <o> : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++<Multi_key> <acute> <dead_tilde> <o> : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++<Multi_key> <acute> <asciitilde> <o> : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++<Multi_key> <apostrophe> <dead_tilde> <o> : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++<Multi_key> <apostrophe> <asciitilde> <o> : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++<dead_acute> <combining_tilde> <o> : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++<Multi_key> <acute> <combining_tilde> <o> : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++<Multi_key> <apostrophe> <combining_tilde> <o> : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++<combining_acute> <otilde> : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++<combining_acute> <dead_tilde> <o> : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++<combining_acute> <Multi_key> <asciitilde> <o> : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++<combining_acute> <combining_tilde> <o> : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++<dead_diaeresis> <Otilde> : "Ṏ" U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
++<Multi_key> <quotedbl> <Otilde> : "Ṏ" U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
++<dead_diaeresis> <dead_tilde> <O> : "Ṏ" U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
++<dead_diaeresis> <Multi_key> <asciitilde> <O> : "Ṏ" U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
++<Multi_key> <quotedbl> <dead_tilde> <O> : "Ṏ" U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
++<Multi_key> <quotedbl> <asciitilde> <O> : "Ṏ" U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
++<dead_diaeresis> <combining_tilde> <O> : "Ṏ" U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
++<Multi_key> <quotedbl> <combining_tilde> <O> : "Ṏ" U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
++<dead_diaeresis> <otilde> : "ṏ" U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
++<Multi_key> <quotedbl> <otilde> : "ṏ" U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
++<dead_diaeresis> <dead_tilde> <o> : "ṏ" U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
++<dead_diaeresis> <Multi_key> <asciitilde> <o> : "ṏ" U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
++<Multi_key> <quotedbl> <dead_tilde> <o> : "ṏ" U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
++<Multi_key> <quotedbl> <asciitilde> <o> : "ṏ" U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
++<dead_diaeresis> <combining_tilde> <o> : "ṏ" U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
++<Multi_key> <quotedbl> <combining_tilde> <o> : "ṏ" U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
++<dead_grave> <Omacron> : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
++<Multi_key> <grave> <Omacron> : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
++<dead_grave> <dead_macron> <O> : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
++<dead_grave> <Multi_key> <macron> <O> : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
++<dead_grave> <Multi_key> <underscore> <O> : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
++<Multi_key> <grave> <dead_macron> <O> : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
++<Multi_key> <grave> <macron> <O> : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
++<Multi_key> <grave> <underscore> <O> : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
++<combining_grave> <Omacron> : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
++<combining_grave> <dead_macron> <O> : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
++<combining_grave> <Multi_key> <macron> <O> : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
++<combining_grave> <Multi_key> <underscore> <O> : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
++<dead_grave> <omacron> : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
++<Multi_key> <grave> <omacron> : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
++<dead_grave> <dead_macron> <o> : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
++<dead_grave> <Multi_key> <macron> <o> : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
++<dead_grave> <Multi_key> <underscore> <o> : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
++<Multi_key> <grave> <dead_macron> <o> : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
++<Multi_key> <grave> <macron> <o> : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
++<Multi_key> <grave> <underscore> <o> : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
++<combining_grave> <omacron> : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
++<combining_grave> <dead_macron> <o> : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
++<combining_grave> <Multi_key> <macron> <o> : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
++<combining_grave> <Multi_key> <underscore> <o> : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
++<dead_acute> <Omacron> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++<Multi_key> <acute> <Omacron> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++<Multi_key> <apostrophe> <Omacron> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++<dead_acute> <dead_macron> <O> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++<dead_acute> <Multi_key> <macron> <O> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++<dead_acute> <Multi_key> <underscore> <O> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++<Multi_key> <acute> <dead_macron> <O> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++<Multi_key> <acute> <macron> <O> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++<Multi_key> <acute> <underscore> <O> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++<Multi_key> <apostrophe> <dead_macron> <O> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++<Multi_key> <apostrophe> <macron> <O> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++<Multi_key> <apostrophe> <underscore> <O> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++<combining_acute> <Omacron> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++<combining_acute> <dead_macron> <O> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++<combining_acute> <Multi_key> <macron> <O> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++<combining_acute> <Multi_key> <underscore> <O> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++<dead_acute> <omacron> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++<Multi_key> <acute> <omacron> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++<Multi_key> <apostrophe> <omacron> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++<dead_acute> <dead_macron> <o> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++<dead_acute> <Multi_key> <macron> <o> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++<dead_acute> <Multi_key> <underscore> <o> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++<Multi_key> <acute> <dead_macron> <o> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++<Multi_key> <acute> <macron> <o> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++<Multi_key> <acute> <underscore> <o> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++<Multi_key> <apostrophe> <dead_macron> <o> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++<Multi_key> <apostrophe> <macron> <o> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++<Multi_key> <apostrophe> <underscore> <o> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++<combining_acute> <omacron> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++<combining_acute> <dead_macron> <o> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++<combining_acute> <Multi_key> <macron> <o> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++<combining_acute> <Multi_key> <underscore> <o> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++<dead_acute> <P> : "Ṕ" U1E54 # LATIN CAPITAL LETTER P WITH ACUTE
++<Multi_key> <acute> <P> : "Ṕ" U1E54 # LATIN CAPITAL LETTER P WITH ACUTE
++<Multi_key> <apostrophe> <P> : "Ṕ" U1E54 # LATIN CAPITAL LETTER P WITH ACUTE
++<combining_acute> <P> : "Ṕ" U1E54 # LATIN CAPITAL LETTER P WITH ACUTE
++<dead_acute> <p> : "ṕ" U1E55 # LATIN SMALL LETTER P WITH ACUTE
++<Multi_key> <acute> <p> : "ṕ" U1E55 # LATIN SMALL LETTER P WITH ACUTE
++<Multi_key> <apostrophe> <p> : "ṕ" U1E55 # LATIN SMALL LETTER P WITH ACUTE
++<combining_acute> <p> : "ṕ" U1E55 # LATIN SMALL LETTER P WITH ACUTE
++<dead_abovedot> <P> : "Ṗ" U1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE
++<Multi_key> <period> <P> : "Ṗ" U1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE
++<dead_abovedot> <p> : "ṗ" U1E57 # LATIN SMALL LETTER P WITH DOT ABOVE
++<Multi_key> <period> <p> : "ṗ" U1E57 # LATIN SMALL LETTER P WITH DOT ABOVE
++<dead_abovedot> <R> : "Ṙ" U1E58 # LATIN CAPITAL LETTER R WITH DOT ABOVE
++<Multi_key> <period> <R> : "Ṙ" U1E58 # LATIN CAPITAL LETTER R WITH DOT ABOVE
++<dead_abovedot> <r> : "ṙ" U1E59 # LATIN SMALL LETTER R WITH DOT ABOVE
++<Multi_key> <period> <r> : "ṙ" U1E59 # LATIN SMALL LETTER R WITH DOT ABOVE
++<dead_belowdot> <R> : "Ṛ" U1E5A # LATIN CAPITAL LETTER R WITH DOT BELOW
++<Multi_key> <exclam> <R> : "Ṛ" U1E5A # LATIN CAPITAL LETTER R WITH DOT BELOW
++<combining_belowdot> <R> : "Ṛ" U1E5A # LATIN CAPITAL LETTER R WITH DOT BELOW
++<dead_belowdot> <r> : "ṛ" U1E5B # LATIN SMALL LETTER R WITH DOT BELOW
++<Multi_key> <exclam> <r> : "ṛ" U1E5B # LATIN SMALL LETTER R WITH DOT BELOW
++<combining_belowdot> <r> : "ṛ" U1E5B # LATIN SMALL LETTER R WITH DOT BELOW
++<dead_macron> <U1e5a> : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
++<Multi_key> <macron> <U1e5a> : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
++<Multi_key> <underscore> <U1e5a> : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
++<dead_macron> <dead_belowdot> <R> : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
++<dead_macron> <Multi_key> <exclam> <R> : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
++<Multi_key> <macron> <dead_belowdot> <R> : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
++<Multi_key> <macron> <exclam> <R> : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
++<Multi_key> <underscore> <dead_belowdot> <R> : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
++<Multi_key> <underscore> <exclam> <R> : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
++<dead_macron> <combining_belowdot> <R> : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
++<Multi_key> <macron> <combining_belowdot> <R> : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
++<Multi_key> <underscore> <combining_belowdot> <R> : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
++<dead_macron> <U1e5b> : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
++<Multi_key> <macron> <U1e5b> : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
++<Multi_key> <underscore> <U1e5b> : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
++<dead_macron> <dead_belowdot> <r> : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
++<dead_macron> <Multi_key> <exclam> <r> : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
++<Multi_key> <macron> <dead_belowdot> <r> : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
++<Multi_key> <macron> <exclam> <r> : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
++<Multi_key> <underscore> <dead_belowdot> <r> : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
++<Multi_key> <underscore> <exclam> <r> : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
++<dead_macron> <combining_belowdot> <r> : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
++<Multi_key> <macron> <combining_belowdot> <r> : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
++<Multi_key> <underscore> <combining_belowdot> <r> : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
++<U0331> <R> : "Ṟ" U1E5E # LATIN CAPITAL LETTER R WITH LINE BELOW
++<U0331> <r> : "ṟ" U1E5F # LATIN SMALL LETTER R WITH LINE BELOW
++<dead_abovedot> <S> : "Ṡ" U1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE
++<Multi_key> <period> <S> : "Ṡ" U1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE
++<dead_abovedot> <s> : "ṡ" U1E61 # LATIN SMALL LETTER S WITH DOT ABOVE
++<Multi_key> <period> <s> : "ṡ" U1E61 # LATIN SMALL LETTER S WITH DOT ABOVE
++<dead_belowdot> <S> : "Ṣ" U1E62 # LATIN CAPITAL LETTER S WITH DOT BELOW
++<Multi_key> <exclam> <S> : "Ṣ" U1E62 # LATIN CAPITAL LETTER S WITH DOT BELOW
++<combining_belowdot> <S> : "Ṣ" U1E62 # LATIN CAPITAL LETTER S WITH DOT BELOW
++<dead_belowdot> <s> : "ṣ" U1E63 # LATIN SMALL LETTER S WITH DOT BELOW
++<Multi_key> <exclam> <s> : "ṣ" U1E63 # LATIN SMALL LETTER S WITH DOT BELOW
++<combining_belowdot> <s> : "ṣ" U1E63 # LATIN SMALL LETTER S WITH DOT BELOW
++<dead_abovedot> <Sacute> : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
++<Multi_key> <period> <Sacute> : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
++<dead_abovedot> <dead_acute> <S> : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
++<dead_abovedot> <Multi_key> <acute> <S> : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
++<dead_abovedot> <Multi_key> <apostrophe> <S> : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
++<Multi_key> <period> <dead_acute> <S> : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
++<Multi_key> <period> <acute> <S> : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
++<Multi_key> <period> <apostrophe> <S> : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
++<dead_abovedot> <combining_acute> <S> : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
++<Multi_key> <period> <combining_acute> <S> : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
++<dead_abovedot> <sacute> : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
++<Multi_key> <period> <sacute> : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
++<dead_abovedot> <dead_acute> <s> : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
++<dead_abovedot> <Multi_key> <acute> <s> : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
++<dead_abovedot> <Multi_key> <apostrophe> <s> : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
++<Multi_key> <period> <dead_acute> <s> : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
++<Multi_key> <period> <acute> <s> : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
++<Multi_key> <period> <apostrophe> <s> : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
++<dead_abovedot> <combining_acute> <s> : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
++<Multi_key> <period> <combining_acute> <s> : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
++<dead_abovedot> <Scaron> : "Ṧ" U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
++<Multi_key> <period> <Scaron> : "Ṧ" U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
++<dead_abovedot> <dead_caron> <S> : "Ṧ" U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
++<dead_abovedot> <Multi_key> <c> <S> : "Ṧ" U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
++<Multi_key> <period> <dead_caron> <S> : "Ṧ" U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
++<Multi_key> <period> <c> <S> : "Ṧ" U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
++<dead_abovedot> <scaron> : "ṧ" U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
++<Multi_key> <period> <scaron> : "ṧ" U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
++<dead_abovedot> <dead_caron> <s> : "ṧ" U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
++<dead_abovedot> <Multi_key> <c> <s> : "ṧ" U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
++<Multi_key> <period> <dead_caron> <s> : "ṧ" U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
++<Multi_key> <period> <c> <s> : "ṧ" U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
++<dead_abovedot> <U1e62> : "Ṩ" U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
++<Multi_key> <period> <U1e62> : "Ṩ" U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
++<dead_abovedot> <dead_belowdot> <S> : "Ṩ" U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
++<dead_abovedot> <Multi_key> <exclam> <S> : "Ṩ" U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
++<Multi_key> <period> <dead_belowdot> <S> : "Ṩ" U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
++<Multi_key> <period> <exclam> <S> : "Ṩ" U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
++<dead_abovedot> <combining_belowdot> <S> : "Ṩ" U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
++<Multi_key> <period> <combining_belowdot> <S> : "Ṩ" U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
++<dead_abovedot> <U1e63> : "ṩ" U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
++<Multi_key> <period> <U1e63> : "ṩ" U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
++<dead_abovedot> <dead_belowdot> <s> : "ṩ" U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
++<dead_abovedot> <Multi_key> <exclam> <s> : "ṩ" U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
++<Multi_key> <period> <dead_belowdot> <s> : "ṩ" U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
++<Multi_key> <period> <exclam> <s> : "ṩ" U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
++<dead_abovedot> <combining_belowdot> <s> : "ṩ" U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
++<Multi_key> <period> <combining_belowdot> <s> : "ṩ" U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
++<dead_abovedot> <T> : "Ṫ" U1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE
++<Multi_key> <period> <T> : "Ṫ" U1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE
++<dead_abovedot> <t> : "ṫ" U1E6B # LATIN SMALL LETTER T WITH DOT ABOVE
++<Multi_key> <period> <t> : "ṫ" U1E6B # LATIN SMALL LETTER T WITH DOT ABOVE
++<dead_belowdot> <T> : "Ṭ" U1E6C # LATIN CAPITAL LETTER T WITH DOT BELOW
++<Multi_key> <exclam> <T> : "Ṭ" U1E6C # LATIN CAPITAL LETTER T WITH DOT BELOW
++<combining_belowdot> <T> : "Ṭ" U1E6C # LATIN CAPITAL LETTER T WITH DOT BELOW
++<dead_belowdot> <t> : "ṭ" U1E6D # LATIN SMALL LETTER T WITH DOT BELOW
++<Multi_key> <exclam> <t> : "ṭ" U1E6D # LATIN SMALL LETTER T WITH DOT BELOW
++<combining_belowdot> <t> : "ṭ" U1E6D # LATIN SMALL LETTER T WITH DOT BELOW
++<U0331> <T> : "Ṯ" U1E6E # LATIN CAPITAL LETTER T WITH LINE BELOW
++<U0331> <t> : "ṯ" U1E6F # LATIN SMALL LETTER T WITH LINE BELOW
++<U032d> <T> : "Ṱ" U1E70 # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
++<U032d> <t> : "ṱ" U1E71 # LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
++<U0324> <U> : "Ṳ" U1E72 # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
++<U0324> <u> : "ṳ" U1E73 # LATIN SMALL LETTER U WITH DIAERESIS BELOW
++<U0330> <U> : "Ṵ" U1E74 # LATIN CAPITAL LETTER U WITH TILDE BELOW
++<U0330> <u> : "ṵ" U1E75 # LATIN SMALL LETTER U WITH TILDE BELOW
++<U032d> <U> : "Ṷ" U1E76 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
++<U032d> <u> : "ṷ" U1E77 # LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
++<dead_acute> <Utilde> : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++<Multi_key> <acute> <Utilde> : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++<Multi_key> <apostrophe> <Utilde> : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++<dead_acute> <dead_tilde> <U> : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++<dead_acute> <Multi_key> <asciitilde> <U> : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++<Multi_key> <acute> <dead_tilde> <U> : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++<Multi_key> <acute> <asciitilde> <U> : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++<Multi_key> <apostrophe> <dead_tilde> <U> : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++<Multi_key> <apostrophe> <asciitilde> <U> : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++<dead_acute> <combining_tilde> <U> : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++<Multi_key> <acute> <combining_tilde> <U> : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++<Multi_key> <apostrophe> <combining_tilde> <U> : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++<combining_acute> <Utilde> : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++<combining_acute> <dead_tilde> <U> : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++<combining_acute> <Multi_key> <asciitilde> <U> : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++<combining_acute> <combining_tilde> <U> : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++<dead_acute> <utilde> : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++<Multi_key> <acute> <utilde> : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++<Multi_key> <apostrophe> <utilde> : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++<dead_acute> <dead_tilde> <u> : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++<dead_acute> <Multi_key> <asciitilde> <u> : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++<Multi_key> <acute> <dead_tilde> <u> : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++<Multi_key> <acute> <asciitilde> <u> : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++<Multi_key> <apostrophe> <dead_tilde> <u> : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++<Multi_key> <apostrophe> <asciitilde> <u> : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++<dead_acute> <combining_tilde> <u> : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++<Multi_key> <acute> <combining_tilde> <u> : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++<Multi_key> <apostrophe> <combining_tilde> <u> : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++<combining_acute> <utilde> : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++<combining_acute> <dead_tilde> <u> : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++<combining_acute> <Multi_key> <asciitilde> <u> : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++<combining_acute> <combining_tilde> <u> : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++<dead_diaeresis> <Umacron> : "Ṻ" U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
++<Multi_key> <quotedbl> <Umacron> : "Ṻ" U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
++<dead_diaeresis> <dead_macron> <U> : "Ṻ" U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
++<dead_diaeresis> <Multi_key> <macron> <U> : "Ṻ" U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
++<dead_diaeresis> <Multi_key> <underscore> <U> : "Ṻ" U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
++<Multi_key> <quotedbl> <dead_macron> <U> : "Ṻ" U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
++<Multi_key> <quotedbl> <macron> <U> : "Ṻ" U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
++<Multi_key> <quotedbl> <underscore> <U> : "Ṻ" U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
++<dead_diaeresis> <umacron> : "ṻ" U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
++<Multi_key> <quotedbl> <umacron> : "ṻ" U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
++<dead_diaeresis> <dead_macron> <u> : "ṻ" U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
++<dead_diaeresis> <Multi_key> <macron> <u> : "ṻ" U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
++<dead_diaeresis> <Multi_key> <underscore> <u> : "ṻ" U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
++<Multi_key> <quotedbl> <dead_macron> <u> : "ṻ" U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
++<Multi_key> <quotedbl> <macron> <u> : "ṻ" U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
++<Multi_key> <quotedbl> <underscore> <u> : "ṻ" U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
++<dead_tilde> <V> : "Ṽ" U1E7C # LATIN CAPITAL LETTER V WITH TILDE
++<Multi_key> <asciitilde> <V> : "Ṽ" U1E7C # LATIN CAPITAL LETTER V WITH TILDE
++<combining_tilde> <V> : "Ṽ" U1E7C # LATIN CAPITAL LETTER V WITH TILDE
++<dead_tilde> <v> : "ṽ" U1E7D # LATIN SMALL LETTER V WITH TILDE
++<Multi_key> <asciitilde> <v> : "ṽ" U1E7D # LATIN SMALL LETTER V WITH TILDE
++<combining_tilde> <v> : "ṽ" U1E7D # LATIN SMALL LETTER V WITH TILDE
++<dead_belowdot> <V> : "Ṿ" U1E7E # LATIN CAPITAL LETTER V WITH DOT BELOW
++<Multi_key> <exclam> <V> : "Ṿ" U1E7E # LATIN CAPITAL LETTER V WITH DOT BELOW
++<combining_belowdot> <V> : "Ṿ" U1E7E # LATIN CAPITAL LETTER V WITH DOT BELOW
++<dead_belowdot> <v> : "ṿ" U1E7F # LATIN SMALL LETTER V WITH DOT BELOW
++<Multi_key> <exclam> <v> : "ṿ" U1E7F # LATIN SMALL LETTER V WITH DOT BELOW
++<combining_belowdot> <v> : "ṿ" U1E7F # LATIN SMALL LETTER V WITH DOT BELOW
++<dead_grave> <W> : "Ẁ" U1E80 # LATIN CAPITAL LETTER W WITH GRAVE
++<Multi_key> <grave> <W> : "Ẁ" U1E80 # LATIN CAPITAL LETTER W WITH GRAVE
++<combining_grave> <W> : "Ẁ" U1E80 # LATIN CAPITAL LETTER W WITH GRAVE
++<dead_grave> <w> : "ẁ" U1E81 # LATIN SMALL LETTER W WITH GRAVE
++<Multi_key> <grave> <w> : "ẁ" U1E81 # LATIN SMALL LETTER W WITH GRAVE
++<combining_grave> <w> : "ẁ" U1E81 # LATIN SMALL LETTER W WITH GRAVE
++<dead_acute> <W> : "Ẃ" U1E82 # LATIN CAPITAL LETTER W WITH ACUTE
++<Multi_key> <acute> <W> : "Ẃ" U1E82 # LATIN CAPITAL LETTER W WITH ACUTE
++<Multi_key> <apostrophe> <W> : "Ẃ" U1E82 # LATIN CAPITAL LETTER W WITH ACUTE
++<combining_acute> <W> : "Ẃ" U1E82 # LATIN CAPITAL LETTER W WITH ACUTE
++<dead_acute> <w> : "ẃ" U1E83 # LATIN SMALL LETTER W WITH ACUTE
++<Multi_key> <acute> <w> : "ẃ" U1E83 # LATIN SMALL LETTER W WITH ACUTE
++<Multi_key> <apostrophe> <w> : "ẃ" U1E83 # LATIN SMALL LETTER W WITH ACUTE
++<combining_acute> <w> : "ẃ" U1E83 # LATIN SMALL LETTER W WITH ACUTE
++<dead_diaeresis> <W> : "Ẅ" U1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS
++<Multi_key> <quotedbl> <W> : "Ẅ" U1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS
++<dead_diaeresis> <w> : "ẅ" U1E85 # LATIN SMALL LETTER W WITH DIAERESIS
++<Multi_key> <quotedbl> <w> : "ẅ" U1E85 # LATIN SMALL LETTER W WITH DIAERESIS
++<dead_abovedot> <W> : "Ẇ" U1E86 # LATIN CAPITAL LETTER W WITH DOT ABOVE
++<Multi_key> <period> <W> : "Ẇ" U1E86 # LATIN CAPITAL LETTER W WITH DOT ABOVE
++<dead_abovedot> <w> : "ẇ" U1E87 # LATIN SMALL LETTER W WITH DOT ABOVE
++<Multi_key> <period> <w> : "ẇ" U1E87 # LATIN SMALL LETTER W WITH DOT ABOVE
++<dead_belowdot> <W> : "Ẉ" U1E88 # LATIN CAPITAL LETTER W WITH DOT BELOW
++<Multi_key> <exclam> <W> : "Ẉ" U1E88 # LATIN CAPITAL LETTER W WITH DOT BELOW
++<combining_belowdot> <W> : "Ẉ" U1E88 # LATIN CAPITAL LETTER W WITH DOT BELOW
++<dead_belowdot> <w> : "ẉ" U1E89 # LATIN SMALL LETTER W WITH DOT BELOW
++<Multi_key> <exclam> <w> : "ẉ" U1E89 # LATIN SMALL LETTER W WITH DOT BELOW
++<combining_belowdot> <w> : "ẉ" U1E89 # LATIN SMALL LETTER W WITH DOT BELOW
++<dead_abovedot> <X> : "Ẋ" U1E8A # LATIN CAPITAL LETTER X WITH DOT ABOVE
++<Multi_key> <period> <X> : "Ẋ" U1E8A # LATIN CAPITAL LETTER X WITH DOT ABOVE
++<dead_abovedot> <x> : "ẋ" U1E8B # LATIN SMALL LETTER X WITH DOT ABOVE
++<Multi_key> <period> <x> : "ẋ" U1E8B # LATIN SMALL LETTER X WITH DOT ABOVE
++<dead_diaeresis> <X> : "Ẍ" U1E8C # LATIN CAPITAL LETTER X WITH DIAERESIS
++<Multi_key> <quotedbl> <X> : "Ẍ" U1E8C # LATIN CAPITAL LETTER X WITH DIAERESIS
++<dead_diaeresis> <x> : "ẍ" U1E8D # LATIN SMALL LETTER X WITH DIAERESIS
++<Multi_key> <quotedbl> <x> : "ẍ" U1E8D # LATIN SMALL LETTER X WITH DIAERESIS
++<dead_abovedot> <Y> : "Ẏ" U1E8E # LATIN CAPITAL LETTER Y WITH DOT ABOVE
++<Multi_key> <period> <Y> : "Ẏ" U1E8E # LATIN CAPITAL LETTER Y WITH DOT ABOVE
++<dead_abovedot> <y> : "ẏ" U1E8F # LATIN SMALL LETTER Y WITH DOT ABOVE
++<Multi_key> <period> <y> : "ẏ" U1E8F # LATIN SMALL LETTER Y WITH DOT ABOVE
++<dead_circumflex> <Z> : "Ẑ" U1E90 # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
++<Multi_key> <asciicircum> <Z> : "Ẑ" U1E90 # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
++<dead_circumflex> <z> : "ẑ" U1E91 # LATIN SMALL LETTER Z WITH CIRCUMFLEX
++<Multi_key> <asciicircum> <z> : "ẑ" U1E91 # LATIN SMALL LETTER Z WITH CIRCUMFLEX
++<dead_belowdot> <Z> : "Ẓ" U1E92 # LATIN CAPITAL LETTER Z WITH DOT BELOW
++<Multi_key> <exclam> <Z> : "Ẓ" U1E92 # LATIN CAPITAL LETTER Z WITH DOT BELOW
++<combining_belowdot> <Z> : "Ẓ" U1E92 # LATIN CAPITAL LETTER Z WITH DOT BELOW
++<dead_belowdot> <z> : "ẓ" U1E93 # LATIN SMALL LETTER Z WITH DOT BELOW
++<Multi_key> <exclam> <z> : "ẓ" U1E93 # LATIN SMALL LETTER Z WITH DOT BELOW
++<combining_belowdot> <z> : "ẓ" U1E93 # LATIN SMALL LETTER Z WITH DOT BELOW
++<U0331> <Z> : "Ẕ" U1E94 # LATIN CAPITAL LETTER Z WITH LINE BELOW
++<U0331> <z> : "ẕ" U1E95 # LATIN SMALL LETTER Z WITH LINE BELOW
++<U0331> <h> : "ẖ" U1E96 # LATIN SMALL LETTER H WITH LINE BELOW
++<dead_diaeresis> <t> : "ẗ" U1E97 # LATIN SMALL LETTER T WITH DIAERESIS
++<Multi_key> <quotedbl> <t> : "ẗ" U1E97 # LATIN SMALL LETTER T WITH DIAERESIS
++<dead_abovering> <w> : "ẘ" U1E98 # LATIN SMALL LETTER W WITH RING ABOVE
++<Multi_key> <o> <w> : "ẘ" U1E98 # LATIN SMALL LETTER W WITH RING ABOVE
++<dead_abovering> <y> : "ẙ" U1E99 # LATIN SMALL LETTER Y WITH RING ABOVE
++<Multi_key> <o> <y> : "ẙ" U1E99 # LATIN SMALL LETTER Y WITH RING ABOVE
++<dead_abovedot> <U017f> : "ẛ" U1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE
++<Multi_key> <period> <U017f> : "ẛ" U1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE
++<dead_belowdot> <A> : "Ạ" U1EA0 # LATIN CAPITAL LETTER A WITH DOT BELOW
++<Multi_key> <exclam> <A> : "Ạ" U1EA0 # LATIN CAPITAL LETTER A WITH DOT BELOW
++<combining_belowdot> <A> : "Ạ" U1EA0 # LATIN CAPITAL LETTER A WITH DOT BELOW
++<dead_belowdot> <a> : "ạ" U1EA1 # LATIN SMALL LETTER A WITH DOT BELOW
++<Multi_key> <exclam> <a> : "ạ" U1EA1 # LATIN SMALL LETTER A WITH DOT BELOW
++<combining_belowdot> <a> : "ạ" U1EA1 # LATIN SMALL LETTER A WITH DOT BELOW
++<dead_hook> <A> : "Ả" U1EA2 # LATIN CAPITAL LETTER A WITH HOOK ABOVE
++<Multi_key> <question> <A> : "Ả" U1EA2 # LATIN CAPITAL LETTER A WITH HOOK ABOVE
++<combining_hook> <A> : "Ả" U1EA2 # LATIN CAPITAL LETTER A WITH HOOK ABOVE
++<dead_hook> <a> : "ả" U1EA3 # LATIN SMALL LETTER A WITH HOOK ABOVE
++<Multi_key> <question> <a> : "ả" U1EA3 # LATIN SMALL LETTER A WITH HOOK ABOVE
++<combining_hook> <a> : "ả" U1EA3 # LATIN SMALL LETTER A WITH HOOK ABOVE
++<dead_acute> <Acircumflex> : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <acute> <Acircumflex> : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <apostrophe> <Acircumflex> : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
++<dead_acute> <dead_circumflex> <A> : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
++<dead_acute> <Multi_key> <asciicircum> <A> : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <acute> <dead_circumflex> <A> : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <acute> <asciicircum> <A> : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <apostrophe> <dead_circumflex> <A> : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <apostrophe> <asciicircum> <A> : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
++<combining_acute> <Acircumflex> : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
++<combining_acute> <dead_circumflex> <A> : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
++<combining_acute> <Multi_key> <asciicircum> <A> : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
++<dead_acute> <acircumflex> : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <acute> <acircumflex> : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <apostrophe> <acircumflex> : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
++<dead_acute> <dead_circumflex> <a> : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
++<dead_acute> <Multi_key> <asciicircum> <a> : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <acute> <dead_circumflex> <a> : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <acute> <asciicircum> <a> : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <apostrophe> <dead_circumflex> <a> : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <apostrophe> <asciicircum> <a> : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
++<combining_acute> <acircumflex> : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
++<combining_acute> <dead_circumflex> <a> : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
++<combining_acute> <Multi_key> <asciicircum> <a> : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
++<dead_grave> <Acircumflex> : "Ầ" U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
++<Multi_key> <grave> <Acircumflex> : "Ầ" U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
++<dead_grave> <dead_circumflex> <A> : "Ầ" U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
++<dead_grave> <Multi_key> <asciicircum> <A> : "Ầ" U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
++<Multi_key> <grave> <dead_circumflex> <A> : "Ầ" U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
++<Multi_key> <grave> <asciicircum> <A> : "Ầ" U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
++<combining_grave> <Acircumflex> : "Ầ" U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
++<combining_grave> <dead_circumflex> <A> : "Ầ" U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
++<combining_grave> <Multi_key> <asciicircum> <A> : "Ầ" U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
++<dead_grave> <acircumflex> : "ầ" U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
++<Multi_key> <grave> <acircumflex> : "ầ" U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
++<dead_grave> <dead_circumflex> <a> : "ầ" U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
++<dead_grave> <Multi_key> <asciicircum> <a> : "ầ" U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
++<Multi_key> <grave> <dead_circumflex> <a> : "ầ" U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
++<Multi_key> <grave> <asciicircum> <a> : "ầ" U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
++<combining_grave> <acircumflex> : "ầ" U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
++<combining_grave> <dead_circumflex> <a> : "ầ" U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
++<combining_grave> <Multi_key> <asciicircum> <a> : "ầ" U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
++<dead_hook> <Acircumflex> : "Ẩ" U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++<Multi_key> <question> <Acircumflex> : "Ẩ" U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++<dead_hook> <dead_circumflex> <A> : "Ẩ" U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++<dead_hook> <Multi_key> <asciicircum> <A> : "Ẩ" U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++<Multi_key> <question> <dead_circumflex> <A> : "Ẩ" U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++<Multi_key> <question> <asciicircum> <A> : "Ẩ" U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++<combining_hook> <Acircumflex> : "Ẩ" U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++<combining_hook> <dead_circumflex> <A> : "Ẩ" U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++<combining_hook> <Multi_key> <asciicircum> <A> : "Ẩ" U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++<dead_hook> <acircumflex> : "ẩ" U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++<Multi_key> <question> <acircumflex> : "ẩ" U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++<dead_hook> <dead_circumflex> <a> : "ẩ" U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++<dead_hook> <Multi_key> <asciicircum> <a> : "ẩ" U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++<Multi_key> <question> <dead_circumflex> <a> : "ẩ" U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++<Multi_key> <question> <asciicircum> <a> : "ẩ" U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++<combining_hook> <acircumflex> : "ẩ" U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++<combining_hook> <dead_circumflex> <a> : "ẩ" U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++<combining_hook> <Multi_key> <asciicircum> <a> : "ẩ" U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++<dead_tilde> <Acircumflex> : "Ẫ" U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
++<Multi_key> <asciitilde> <Acircumflex> : "Ẫ" U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
++<dead_tilde> <dead_circumflex> <A> : "Ẫ" U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
++<dead_tilde> <Multi_key> <asciicircum> <A> : "Ẫ" U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
++<Multi_key> <asciitilde> <dead_circumflex> <A> : "Ẫ" U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
++<Multi_key> <asciitilde> <asciicircum> <A> : "Ẫ" U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
++<combining_tilde> <Acircumflex> : "Ẫ" U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
++<combining_tilde> <dead_circumflex> <A> : "Ẫ" U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
++<combining_tilde> <Multi_key> <asciicircum> <A> : "Ẫ" U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
++<dead_tilde> <acircumflex> : "ẫ" U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
++<Multi_key> <asciitilde> <acircumflex> : "ẫ" U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
++<dead_tilde> <dead_circumflex> <a> : "ẫ" U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
++<dead_tilde> <Multi_key> <asciicircum> <a> : "ẫ" U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
++<Multi_key> <asciitilde> <dead_circumflex> <a> : "ẫ" U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
++<Multi_key> <asciitilde> <asciicircum> <a> : "ẫ" U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
++<combining_tilde> <acircumflex> : "ẫ" U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
++<combining_tilde> <dead_circumflex> <a> : "ẫ" U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
++<combining_tilde> <Multi_key> <asciicircum> <a> : "ẫ" U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
++<dead_circumflex> <U1ea0> : "Ậ" U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++<Multi_key> <asciicircum> <U1ea0> : "Ậ" U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++<dead_circumflex> <dead_belowdot> <A> : "Ậ" U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++<dead_circumflex> <Multi_key> <exclam> <A> : "Ậ" U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++<Multi_key> <asciicircum> <dead_belowdot> <A> : "Ậ" U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++<Multi_key> <asciicircum> <exclam> <A> : "Ậ" U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++<dead_circumflex> <combining_belowdot> <A> : "Ậ" U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++<Multi_key> <asciicircum> <combining_belowdot> <A> : "Ậ" U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++<dead_circumflex> <U1ea1> : "ậ" U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++<Multi_key> <asciicircum> <U1ea1> : "ậ" U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++<dead_circumflex> <dead_belowdot> <a> : "ậ" U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++<dead_circumflex> <Multi_key> <exclam> <a> : "ậ" U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++<Multi_key> <asciicircum> <dead_belowdot> <a> : "ậ" U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++<Multi_key> <asciicircum> <exclam> <a> : "ậ" U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++<dead_circumflex> <combining_belowdot> <a> : "ậ" U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++<Multi_key> <asciicircum> <combining_belowdot> <a> : "ậ" U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++<dead_acute> <Abreve> : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++<Multi_key> <acute> <Abreve> : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++<Multi_key> <apostrophe> <Abreve> : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++<dead_acute> <dead_breve> <A> : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++<dead_acute> <Multi_key> <U> <A> : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++<dead_acute> <Multi_key> <b> <A> : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++<Multi_key> <acute> <dead_breve> <A> : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++<Multi_key> <acute> <U> <A> : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++<Multi_key> <acute> <b> <A> : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++<Multi_key> <apostrophe> <dead_breve> <A> : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++<Multi_key> <apostrophe> <U> <A> : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++<Multi_key> <apostrophe> <b> <A> : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++<combining_acute> <Abreve> : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++<combining_acute> <dead_breve> <A> : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++<combining_acute> <Multi_key> <U> <A> : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++<combining_acute> <Multi_key> <b> <A> : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++<dead_acute> <abreve> : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++<Multi_key> <acute> <abreve> : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++<Multi_key> <apostrophe> <abreve> : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++<dead_acute> <dead_breve> <a> : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++<dead_acute> <Multi_key> <U> <a> : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++<dead_acute> <Multi_key> <b> <a> : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++<Multi_key> <acute> <dead_breve> <a> : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++<Multi_key> <acute> <U> <a> : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++<Multi_key> <acute> <b> <a> : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++<Multi_key> <apostrophe> <dead_breve> <a> : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++<Multi_key> <apostrophe> <U> <a> : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++<Multi_key> <apostrophe> <b> <a> : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++<combining_acute> <abreve> : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++<combining_acute> <dead_breve> <a> : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++<combining_acute> <Multi_key> <U> <a> : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++<combining_acute> <Multi_key> <b> <a> : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++<dead_grave> <Abreve> : "Ằ" U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
++<Multi_key> <grave> <Abreve> : "Ằ" U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
++<dead_grave> <dead_breve> <A> : "Ằ" U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
++<dead_grave> <Multi_key> <U> <A> : "Ằ" U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
++<dead_grave> <Multi_key> <b> <A> : "Ằ" U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
++<Multi_key> <grave> <dead_breve> <A> : "Ằ" U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
++<Multi_key> <grave> <U> <A> : "Ằ" U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
++<Multi_key> <grave> <b> <A> : "Ằ" U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
++<combining_grave> <Abreve> : "Ằ" U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
++<combining_grave> <dead_breve> <A> : "Ằ" U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
++<combining_grave> <Multi_key> <U> <A> : "Ằ" U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
++<combining_grave> <Multi_key> <b> <A> : "Ằ" U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
++<dead_grave> <abreve> : "ằ" U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
++<Multi_key> <grave> <abreve> : "ằ" U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
++<dead_grave> <dead_breve> <a> : "ằ" U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
++<dead_grave> <Multi_key> <U> <a> : "ằ" U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
++<dead_grave> <Multi_key> <b> <a> : "ằ" U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
++<Multi_key> <grave> <dead_breve> <a> : "ằ" U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
++<Multi_key> <grave> <U> <a> : "ằ" U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
++<Multi_key> <grave> <b> <a> : "ằ" U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
++<combining_grave> <abreve> : "ằ" U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
++<combining_grave> <dead_breve> <a> : "ằ" U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
++<combining_grave> <Multi_key> <U> <a> : "ằ" U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
++<combining_grave> <Multi_key> <b> <a> : "ằ" U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
++<dead_hook> <Abreve> : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
++<Multi_key> <question> <Abreve> : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
++<dead_hook> <dead_breve> <A> : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
++<dead_hook> <Multi_key> <U> <A> : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
++<dead_hook> <Multi_key> <b> <A> : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
++<Multi_key> <question> <dead_breve> <A> : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
++<Multi_key> <question> <U> <A> : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
++<Multi_key> <question> <b> <A> : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
++<combining_hook> <Abreve> : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
++<combining_hook> <dead_breve> <A> : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
++<combining_hook> <Multi_key> <U> <A> : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
++<combining_hook> <Multi_key> <b> <A> : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
++<dead_hook> <abreve> : "ẳ" U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
++<Multi_key> <question> <abreve> : "ẳ" U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
++<dead_hook> <dead_breve> <a> : "ẳ" U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
++<dead_hook> <Multi_key> <U> <a> : "ẳ" U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
++<dead_hook> <Multi_key> <b> <a> : "ẳ" U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
++<Multi_key> <question> <dead_breve> <a> : "ẳ" U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
++<Multi_key> <question> <U> <a> : "ẳ" U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
++<Multi_key> <question> <b> <a> : "ẳ" U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
++<combining_hook> <abreve> : "ẳ" U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
++<combining_hook> <dead_breve> <a> : "ẳ" U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
++<combining_hook> <Multi_key> <U> <a> : "ẳ" U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
++<combining_hook> <Multi_key> <b> <a> : "ẳ" U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
++<dead_tilde> <Abreve> : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
++<Multi_key> <asciitilde> <Abreve> : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
++<dead_tilde> <dead_breve> <A> : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
++<dead_tilde> <Multi_key> <U> <A> : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
++<dead_tilde> <Multi_key> <b> <A> : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
++<Multi_key> <asciitilde> <dead_breve> <A> : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
++<Multi_key> <asciitilde> <U> <A> : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
++<Multi_key> <asciitilde> <b> <A> : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
++<combining_tilde> <Abreve> : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
++<combining_tilde> <dead_breve> <A> : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
++<combining_tilde> <Multi_key> <U> <A> : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
++<combining_tilde> <Multi_key> <b> <A> : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
++<dead_tilde> <abreve> : "ẵ" U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
++<Multi_key> <asciitilde> <abreve> : "ẵ" U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
++<dead_tilde> <dead_breve> <a> : "ẵ" U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
++<dead_tilde> <Multi_key> <U> <a> : "ẵ" U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
++<dead_tilde> <Multi_key> <b> <a> : "ẵ" U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
++<Multi_key> <asciitilde> <dead_breve> <a> : "ẵ" U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
++<Multi_key> <asciitilde> <U> <a> : "ẵ" U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
++<Multi_key> <asciitilde> <b> <a> : "ẵ" U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
++<combining_tilde> <abreve> : "ẵ" U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
++<combining_tilde> <dead_breve> <a> : "ẵ" U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
++<combining_tilde> <Multi_key> <U> <a> : "ẵ" U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
++<combining_tilde> <Multi_key> <b> <a> : "ẵ" U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
++<dead_breve> <U1ea0> : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
++<Multi_key> <U> <U1ea0> : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
++<Multi_key> <b> <U1ea0> : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
++<dead_breve> <dead_belowdot> <A> : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
++<dead_breve> <Multi_key> <exclam> <A> : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
++<Multi_key> <U> <dead_belowdot> <A> : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
++<Multi_key> <U> <exclam> <A> : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
++<Multi_key> <b> <dead_belowdot> <A> : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
++<Multi_key> <b> <exclam> <A> : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
++<dead_breve> <combining_belowdot> <A> : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
++<Multi_key> <U> <combining_belowdot> <A> : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
++<Multi_key> <b> <combining_belowdot> <A> : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
++<dead_breve> <U1ea1> : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
++<Multi_key> <U> <U1ea1> : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
++<Multi_key> <b> <U1ea1> : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
++<dead_breve> <dead_belowdot> <a> : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
++<dead_breve> <Multi_key> <exclam> <a> : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
++<Multi_key> <U> <dead_belowdot> <a> : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
++<Multi_key> <U> <exclam> <a> : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
++<Multi_key> <b> <dead_belowdot> <a> : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
++<Multi_key> <b> <exclam> <a> : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
++<dead_breve> <combining_belowdot> <a> : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
++<Multi_key> <U> <combining_belowdot> <a> : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
++<Multi_key> <b> <combining_belowdot> <a> : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
++<dead_belowdot> <E> : "Ẹ" U1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW
++<Multi_key> <exclam> <E> : "Ẹ" U1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW
++<combining_belowdot> <E> : "Ẹ" U1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW
++<dead_belowdot> <e> : "ẹ" U1EB9 # LATIN SMALL LETTER E WITH DOT BELOW
++<Multi_key> <exclam> <e> : "ẹ" U1EB9 # LATIN SMALL LETTER E WITH DOT BELOW
++<combining_belowdot> <e> : "ẹ" U1EB9 # LATIN SMALL LETTER E WITH DOT BELOW
++<dead_hook> <E> : "Ẻ" U1EBA # LATIN CAPITAL LETTER E WITH HOOK ABOVE
++<Multi_key> <question> <E> : "Ẻ" U1EBA # LATIN CAPITAL LETTER E WITH HOOK ABOVE
++<combining_hook> <E> : "Ẻ" U1EBA # LATIN CAPITAL LETTER E WITH HOOK ABOVE
++<dead_hook> <e> : "ẻ" U1EBB # LATIN SMALL LETTER E WITH HOOK ABOVE
++<Multi_key> <question> <e> : "ẻ" U1EBB # LATIN SMALL LETTER E WITH HOOK ABOVE
++<combining_hook> <e> : "ẻ" U1EBB # LATIN SMALL LETTER E WITH HOOK ABOVE
++<dead_tilde> <E> : "Ẽ" U1EBC # LATIN CAPITAL LETTER E WITH TILDE
++<Multi_key> <asciitilde> <E> : "Ẽ" U1EBC # LATIN CAPITAL LETTER E WITH TILDE
++<combining_tilde> <E> : "Ẽ" U1EBC # LATIN CAPITAL LETTER E WITH TILDE
++<dead_tilde> <e> : "ẽ" U1EBD # LATIN SMALL LETTER E WITH TILDE
++<Multi_key> <asciitilde> <e> : "ẽ" U1EBD # LATIN SMALL LETTER E WITH TILDE
++<combining_tilde> <e> : "ẽ" U1EBD # LATIN SMALL LETTER E WITH TILDE
++<dead_acute> <Ecircumflex> : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <acute> <Ecircumflex> : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <apostrophe> <Ecircumflex> : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
++<dead_acute> <dead_circumflex> <E> : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
++<dead_acute> <Multi_key> <asciicircum> <E> : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <acute> <dead_circumflex> <E> : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <acute> <asciicircum> <E> : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <apostrophe> <dead_circumflex> <E> : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <apostrophe> <asciicircum> <E> : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
++<combining_acute> <Ecircumflex> : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
++<combining_acute> <dead_circumflex> <E> : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
++<combining_acute> <Multi_key> <asciicircum> <E> : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
++<dead_acute> <ecircumflex> : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <acute> <ecircumflex> : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <apostrophe> <ecircumflex> : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
++<dead_acute> <dead_circumflex> <e> : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
++<dead_acute> <Multi_key> <asciicircum> <e> : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <acute> <dead_circumflex> <e> : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <acute> <asciicircum> <e> : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <apostrophe> <dead_circumflex> <e> : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <apostrophe> <asciicircum> <e> : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
++<combining_acute> <ecircumflex> : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
++<combining_acute> <dead_circumflex> <e> : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
++<combining_acute> <Multi_key> <asciicircum> <e> : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
++<dead_grave> <Ecircumflex> : "Ề" U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
++<Multi_key> <grave> <Ecircumflex> : "Ề" U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
++<dead_grave> <dead_circumflex> <E> : "Ề" U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
++<dead_grave> <Multi_key> <asciicircum> <E> : "Ề" U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
++<Multi_key> <grave> <dead_circumflex> <E> : "Ề" U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
++<Multi_key> <grave> <asciicircum> <E> : "Ề" U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
++<combining_grave> <Ecircumflex> : "Ề" U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
++<combining_grave> <dead_circumflex> <E> : "Ề" U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
++<combining_grave> <Multi_key> <asciicircum> <E> : "Ề" U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
++<dead_grave> <ecircumflex> : "ề" U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
++<Multi_key> <grave> <ecircumflex> : "ề" U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
++<dead_grave> <dead_circumflex> <e> : "ề" U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
++<dead_grave> <Multi_key> <asciicircum> <e> : "ề" U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
++<Multi_key> <grave> <dead_circumflex> <e> : "ề" U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
++<Multi_key> <grave> <asciicircum> <e> : "ề" U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
++<combining_grave> <ecircumflex> : "ề" U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
++<combining_grave> <dead_circumflex> <e> : "ề" U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
++<combining_grave> <Multi_key> <asciicircum> <e> : "ề" U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
++<dead_hook> <Ecircumflex> : "Ể" U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++<Multi_key> <question> <Ecircumflex> : "Ể" U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++<dead_hook> <dead_circumflex> <E> : "Ể" U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++<dead_hook> <Multi_key> <asciicircum> <E> : "Ể" U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++<Multi_key> <question> <dead_circumflex> <E> : "Ể" U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++<Multi_key> <question> <asciicircum> <E> : "Ể" U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++<combining_hook> <Ecircumflex> : "Ể" U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++<combining_hook> <dead_circumflex> <E> : "Ể" U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++<combining_hook> <Multi_key> <asciicircum> <E> : "Ể" U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++<dead_hook> <ecircumflex> : "ể" U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++<Multi_key> <question> <ecircumflex> : "ể" U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++<dead_hook> <dead_circumflex> <e> : "ể" U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++<dead_hook> <Multi_key> <asciicircum> <e> : "ể" U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++<Multi_key> <question> <dead_circumflex> <e> : "ể" U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++<Multi_key> <question> <asciicircum> <e> : "ể" U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++<combining_hook> <ecircumflex> : "ể" U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++<combining_hook> <dead_circumflex> <e> : "ể" U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++<combining_hook> <Multi_key> <asciicircum> <e> : "ể" U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++<dead_tilde> <Ecircumflex> : "Ễ" U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
++<Multi_key> <asciitilde> <Ecircumflex> : "Ễ" U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
++<dead_tilde> <dead_circumflex> <E> : "Ễ" U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
++<dead_tilde> <Multi_key> <asciicircum> <E> : "Ễ" U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
++<Multi_key> <asciitilde> <dead_circumflex> <E> : "Ễ" U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
++<Multi_key> <asciitilde> <asciicircum> <E> : "Ễ" U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
++<combining_tilde> <Ecircumflex> : "Ễ" U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
++<combining_tilde> <dead_circumflex> <E> : "Ễ" U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
++<combining_tilde> <Multi_key> <asciicircum> <E> : "Ễ" U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
++<dead_tilde> <ecircumflex> : "ễ" U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
++<Multi_key> <asciitilde> <ecircumflex> : "ễ" U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
++<dead_tilde> <dead_circumflex> <e> : "ễ" U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
++<dead_tilde> <Multi_key> <asciicircum> <e> : "ễ" U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
++<Multi_key> <asciitilde> <dead_circumflex> <e> : "ễ" U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
++<Multi_key> <asciitilde> <asciicircum> <e> : "ễ" U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
++<combining_tilde> <ecircumflex> : "ễ" U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
++<combining_tilde> <dead_circumflex> <e> : "ễ" U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
++<combining_tilde> <Multi_key> <asciicircum> <e> : "ễ" U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
++<dead_circumflex> <U1eb8> : "Ệ" U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++<Multi_key> <asciicircum> <U1eb8> : "Ệ" U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++<dead_circumflex> <dead_belowdot> <E> : "Ệ" U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++<dead_circumflex> <Multi_key> <exclam> <E> : "Ệ" U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++<Multi_key> <asciicircum> <dead_belowdot> <E> : "Ệ" U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++<Multi_key> <asciicircum> <exclam> <E> : "Ệ" U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++<dead_circumflex> <combining_belowdot> <E> : "Ệ" U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++<Multi_key> <asciicircum> <combining_belowdot> <E> : "Ệ" U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++<dead_circumflex> <U1eb9> : "ệ" U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++<Multi_key> <asciicircum> <U1eb9> : "ệ" U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++<dead_circumflex> <dead_belowdot> <e> : "ệ" U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++<dead_circumflex> <Multi_key> <exclam> <e> : "ệ" U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++<Multi_key> <asciicircum> <dead_belowdot> <e> : "ệ" U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++<Multi_key> <asciicircum> <exclam> <e> : "ệ" U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++<dead_circumflex> <combining_belowdot> <e> : "ệ" U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++<Multi_key> <asciicircum> <combining_belowdot> <e> : "ệ" U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++<dead_hook> <I> : "Ỉ" U1EC8 # LATIN CAPITAL LETTER I WITH HOOK ABOVE
++<Multi_key> <question> <I> : "Ỉ" U1EC8 # LATIN CAPITAL LETTER I WITH HOOK ABOVE
++<combining_hook> <I> : "Ỉ" U1EC8 # LATIN CAPITAL LETTER I WITH HOOK ABOVE
++<dead_hook> <i> : "ỉ" U1EC9 # LATIN SMALL LETTER I WITH HOOK ABOVE
++<Multi_key> <question> <i> : "ỉ" U1EC9 # LATIN SMALL LETTER I WITH HOOK ABOVE
++<combining_hook> <i> : "ỉ" U1EC9 # LATIN SMALL LETTER I WITH HOOK ABOVE
++<dead_belowdot> <I> : "Ị" U1ECA # LATIN CAPITAL LETTER I WITH DOT BELOW
++<Multi_key> <exclam> <I> : "Ị" U1ECA # LATIN CAPITAL LETTER I WITH DOT BELOW
++<combining_belowdot> <I> : "Ị" U1ECA # LATIN CAPITAL LETTER I WITH DOT BELOW
++<dead_belowdot> <i> : "ị" U1ECB # LATIN SMALL LETTER I WITH DOT BELOW
++<Multi_key> <exclam> <i> : "ị" U1ECB # LATIN SMALL LETTER I WITH DOT BELOW
++<combining_belowdot> <i> : "ị" U1ECB # LATIN SMALL LETTER I WITH DOT BELOW
++<dead_belowdot> <O> : "Ọ" U1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW
++<Multi_key> <exclam> <O> : "Ọ" U1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW
++<combining_belowdot> <O> : "Ọ" U1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW
++<dead_belowdot> <o> : "ọ" U1ECD # LATIN SMALL LETTER O WITH DOT BELOW
++<Multi_key> <exclam> <o> : "ọ" U1ECD # LATIN SMALL LETTER O WITH DOT BELOW
++<combining_belowdot> <o> : "ọ" U1ECD # LATIN SMALL LETTER O WITH DOT BELOW
++<dead_hook> <O> : "Ỏ" U1ECE # LATIN CAPITAL LETTER O WITH HOOK ABOVE
++<Multi_key> <question> <O> : "Ỏ" U1ECE # LATIN CAPITAL LETTER O WITH HOOK ABOVE
++<combining_hook> <O> : "Ỏ" U1ECE # LATIN CAPITAL LETTER O WITH HOOK ABOVE
++<dead_hook> <o> : "ỏ" U1ECF # LATIN SMALL LETTER O WITH HOOK ABOVE
++<Multi_key> <question> <o> : "ỏ" U1ECF # LATIN SMALL LETTER O WITH HOOK ABOVE
++<combining_hook> <o> : "ỏ" U1ECF # LATIN SMALL LETTER O WITH HOOK ABOVE
++<dead_acute> <Ocircumflex> : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <acute> <Ocircumflex> : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <apostrophe> <Ocircumflex> : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
++<dead_acute> <dead_circumflex> <O> : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
++<dead_acute> <Multi_key> <asciicircum> <O> : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <acute> <dead_circumflex> <O> : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <acute> <asciicircum> <O> : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <apostrophe> <dead_circumflex> <O> : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <apostrophe> <asciicircum> <O> : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
++<combining_acute> <Ocircumflex> : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
++<combining_acute> <dead_circumflex> <O> : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
++<combining_acute> <Multi_key> <asciicircum> <O> : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
++<dead_acute> <ocircumflex> : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <acute> <ocircumflex> : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <apostrophe> <ocircumflex> : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
++<dead_acute> <dead_circumflex> <o> : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
++<dead_acute> <Multi_key> <asciicircum> <o> : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <acute> <dead_circumflex> <o> : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <acute> <asciicircum> <o> : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <apostrophe> <dead_circumflex> <o> : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
++<Multi_key> <apostrophe> <asciicircum> <o> : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
++<combining_acute> <ocircumflex> : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
++<combining_acute> <dead_circumflex> <o> : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
++<combining_acute> <Multi_key> <asciicircum> <o> : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
++<dead_grave> <Ocircumflex> : "Ồ" U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
++<Multi_key> <grave> <Ocircumflex> : "Ồ" U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
++<dead_grave> <dead_circumflex> <O> : "Ồ" U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
++<dead_grave> <Multi_key> <asciicircum> <O> : "Ồ" U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
++<Multi_key> <grave> <dead_circumflex> <O> : "Ồ" U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
++<Multi_key> <grave> <asciicircum> <O> : "Ồ" U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
++<combining_grave> <Ocircumflex> : "Ồ" U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
++<combining_grave> <dead_circumflex> <O> : "Ồ" U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
++<combining_grave> <Multi_key> <asciicircum> <O> : "Ồ" U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
++<dead_grave> <ocircumflex> : "ồ" U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
++<Multi_key> <grave> <ocircumflex> : "ồ" U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
++<dead_grave> <dead_circumflex> <o> : "ồ" U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
++<dead_grave> <Multi_key> <asciicircum> <o> : "ồ" U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
++<Multi_key> <grave> <dead_circumflex> <o> : "ồ" U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
++<Multi_key> <grave> <asciicircum> <o> : "ồ" U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
++<combining_grave> <ocircumflex> : "ồ" U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
++<combining_grave> <dead_circumflex> <o> : "ồ" U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
++<combining_grave> <Multi_key> <asciicircum> <o> : "ồ" U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
++<dead_hook> <Ocircumflex> : "Ổ" U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++<Multi_key> <question> <Ocircumflex> : "Ổ" U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++<dead_hook> <dead_circumflex> <O> : "Ổ" U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++<dead_hook> <Multi_key> <asciicircum> <O> : "Ổ" U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++<Multi_key> <question> <dead_circumflex> <O> : "Ổ" U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++<Multi_key> <question> <asciicircum> <O> : "Ổ" U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++<combining_hook> <Ocircumflex> : "Ổ" U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++<combining_hook> <dead_circumflex> <O> : "Ổ" U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++<combining_hook> <Multi_key> <asciicircum> <O> : "Ổ" U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++<dead_hook> <ocircumflex> : "ổ" U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++<Multi_key> <question> <ocircumflex> : "ổ" U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++<dead_hook> <dead_circumflex> <o> : "ổ" U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++<dead_hook> <Multi_key> <asciicircum> <o> : "ổ" U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++<Multi_key> <question> <dead_circumflex> <o> : "ổ" U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++<Multi_key> <question> <asciicircum> <o> : "ổ" U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++<combining_hook> <ocircumflex> : "ổ" U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++<combining_hook> <dead_circumflex> <o> : "ổ" U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++<combining_hook> <Multi_key> <asciicircum> <o> : "ổ" U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++<dead_tilde> <Ocircumflex> : "Ỗ" U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
++<Multi_key> <asciitilde> <Ocircumflex> : "Ỗ" U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
++<dead_tilde> <dead_circumflex> <O> : "Ỗ" U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
++<dead_tilde> <Multi_key> <asciicircum> <O> : "Ỗ" U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
++<Multi_key> <asciitilde> <dead_circumflex> <O> : "Ỗ" U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
++<Multi_key> <asciitilde> <asciicircum> <O> : "Ỗ" U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
++<combining_tilde> <Ocircumflex> : "Ỗ" U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
++<combining_tilde> <dead_circumflex> <O> : "Ỗ" U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
++<combining_tilde> <Multi_key> <asciicircum> <O> : "Ỗ" U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
++<dead_tilde> <ocircumflex> : "ỗ" U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
++<Multi_key> <asciitilde> <ocircumflex> : "ỗ" U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
++<dead_tilde> <dead_circumflex> <o> : "ỗ" U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
++<dead_tilde> <Multi_key> <asciicircum> <o> : "ỗ" U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
++<Multi_key> <asciitilde> <dead_circumflex> <o> : "ỗ" U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
++<Multi_key> <asciitilde> <asciicircum> <o> : "ỗ" U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
++<combining_tilde> <ocircumflex> : "ỗ" U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
++<combining_tilde> <dead_circumflex> <o> : "ỗ" U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
++<combining_tilde> <Multi_key> <asciicircum> <o> : "ỗ" U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
++<dead_circumflex> <U1ecc> : "Ộ" U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++<Multi_key> <asciicircum> <U1ecc> : "Ộ" U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++<dead_circumflex> <dead_belowdot> <O> : "Ộ" U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++<dead_circumflex> <Multi_key> <exclam> <O> : "Ộ" U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++<Multi_key> <asciicircum> <dead_belowdot> <O> : "Ộ" U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++<Multi_key> <asciicircum> <exclam> <O> : "Ộ" U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++<dead_circumflex> <combining_belowdot> <O> : "Ộ" U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++<Multi_key> <asciicircum> <combining_belowdot> <O> : "Ộ" U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++<dead_circumflex> <U1ecd> : "ộ" U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++<Multi_key> <asciicircum> <U1ecd> : "ộ" U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++<dead_circumflex> <dead_belowdot> <o> : "ộ" U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++<dead_circumflex> <Multi_key> <exclam> <o> : "ộ" U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++<Multi_key> <asciicircum> <dead_belowdot> <o> : "ộ" U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++<Multi_key> <asciicircum> <exclam> <o> : "ộ" U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++<dead_circumflex> <combining_belowdot> <o> : "ộ" U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++<Multi_key> <asciicircum> <combining_belowdot> <o> : "ộ" U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++<dead_acute> <Ohorn> : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
++<Multi_key> <acute> <Ohorn> : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
++<Multi_key> <apostrophe> <Ohorn> : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
++<dead_acute> <dead_horn> <O> : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
++<dead_acute> <Multi_key> <plus> <O> : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
++<Multi_key> <acute> <dead_horn> <O> : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
++<Multi_key> <acute> <plus> <O> : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
++<Multi_key> <apostrophe> <dead_horn> <O> : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
++<Multi_key> <apostrophe> <plus> <O> : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
++<combining_acute> <Ohorn> : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
++<combining_acute> <dead_horn> <O> : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
++<combining_acute> <Multi_key> <plus> <O> : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
++<dead_acute> <ohorn> : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
++<Multi_key> <acute> <ohorn> : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
++<Multi_key> <apostrophe> <ohorn> : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
++<dead_acute> <dead_horn> <o> : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
++<dead_acute> <Multi_key> <plus> <o> : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
++<Multi_key> <acute> <dead_horn> <o> : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
++<Multi_key> <acute> <plus> <o> : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
++<Multi_key> <apostrophe> <dead_horn> <o> : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
++<Multi_key> <apostrophe> <plus> <o> : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
++<combining_acute> <ohorn> : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
++<combining_acute> <dead_horn> <o> : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
++<combining_acute> <Multi_key> <plus> <o> : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
++<dead_grave> <Ohorn> : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
++<Multi_key> <grave> <Ohorn> : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
++<dead_grave> <dead_horn> <O> : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
++<dead_grave> <Multi_key> <plus> <O> : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
++<Multi_key> <grave> <dead_horn> <O> : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
++<Multi_key> <grave> <plus> <O> : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
++<combining_grave> <Ohorn> : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
++<combining_grave> <dead_horn> <O> : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
++<combining_grave> <Multi_key> <plus> <O> : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
++<dead_grave> <ohorn> : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
++<Multi_key> <grave> <ohorn> : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
++<dead_grave> <dead_horn> <o> : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
++<dead_grave> <Multi_key> <plus> <o> : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
++<Multi_key> <grave> <dead_horn> <o> : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
++<Multi_key> <grave> <plus> <o> : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
++<combining_grave> <ohorn> : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
++<combining_grave> <dead_horn> <o> : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
++<combining_grave> <Multi_key> <plus> <o> : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
++<dead_hook> <Ohorn> : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
++<Multi_key> <question> <Ohorn> : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
++<dead_hook> <dead_horn> <O> : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
++<dead_hook> <Multi_key> <plus> <O> : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
++<Multi_key> <question> <dead_horn> <O> : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
++<Multi_key> <question> <plus> <O> : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
++<combining_hook> <Ohorn> : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
++<combining_hook> <dead_horn> <O> : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
++<combining_hook> <Multi_key> <plus> <O> : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
++<dead_hook> <ohorn> : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
++<Multi_key> <question> <ohorn> : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
++<dead_hook> <dead_horn> <o> : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
++<dead_hook> <Multi_key> <plus> <o> : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
++<Multi_key> <question> <dead_horn> <o> : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
++<Multi_key> <question> <plus> <o> : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
++<combining_hook> <ohorn> : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
++<combining_hook> <dead_horn> <o> : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
++<combining_hook> <Multi_key> <plus> <o> : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
++<dead_tilde> <Ohorn> : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
++<Multi_key> <asciitilde> <Ohorn> : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
++<dead_tilde> <dead_horn> <O> : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
++<dead_tilde> <Multi_key> <plus> <O> : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
++<Multi_key> <asciitilde> <dead_horn> <O> : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
++<Multi_key> <asciitilde> <plus> <O> : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
++<combining_tilde> <Ohorn> : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
++<combining_tilde> <dead_horn> <O> : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
++<combining_tilde> <Multi_key> <plus> <O> : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
++<dead_tilde> <ohorn> : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
++<Multi_key> <asciitilde> <ohorn> : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
++<dead_tilde> <dead_horn> <o> : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
++<dead_tilde> <Multi_key> <plus> <o> : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
++<Multi_key> <asciitilde> <dead_horn> <o> : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
++<Multi_key> <asciitilde> <plus> <o> : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
++<combining_tilde> <ohorn> : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
++<combining_tilde> <dead_horn> <o> : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
++<combining_tilde> <Multi_key> <plus> <o> : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
++<dead_belowdot> <Ohorn> : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
++<Multi_key> <exclam> <Ohorn> : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
++<dead_belowdot> <dead_horn> <O> : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
++<dead_belowdot> <Multi_key> <plus> <O> : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
++<Multi_key> <exclam> <dead_horn> <O> : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
++<Multi_key> <exclam> <plus> <O> : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
++<combining_belowdot> <Ohorn> : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
++<combining_belowdot> <dead_horn> <O> : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
++<combining_belowdot> <Multi_key> <plus> <O> : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
++<dead_belowdot> <ohorn> : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
++<Multi_key> <exclam> <ohorn> : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
++<dead_belowdot> <dead_horn> <o> : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
++<dead_belowdot> <Multi_key> <plus> <o> : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
++<Multi_key> <exclam> <dead_horn> <o> : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
++<Multi_key> <exclam> <plus> <o> : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
++<combining_belowdot> <ohorn> : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
++<combining_belowdot> <dead_horn> <o> : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
++<combining_belowdot> <Multi_key> <plus> <o> : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
++<dead_belowdot> <U> : "Ụ" U1EE4 # LATIN CAPITAL LETTER U WITH DOT BELOW
++<Multi_key> <exclam> <U> : "Ụ" U1EE4 # LATIN CAPITAL LETTER U WITH DOT BELOW
++<combining_belowdot> <U> : "Ụ" U1EE4 # LATIN CAPITAL LETTER U WITH DOT BELOW
++<dead_belowdot> <u> : "ụ" U1EE5 # LATIN SMALL LETTER U WITH DOT BELOW
++<Multi_key> <exclam> <u> : "ụ" U1EE5 # LATIN SMALL LETTER U WITH DOT BELOW
++<combining_belowdot> <u> : "ụ" U1EE5 # LATIN SMALL LETTER U WITH DOT BELOW
++<dead_hook> <U> : "Ủ" U1EE6 # LATIN CAPITAL LETTER U WITH HOOK ABOVE
++<Multi_key> <question> <U> : "Ủ" U1EE6 # LATIN CAPITAL LETTER U WITH HOOK ABOVE
++<combining_hook> <U> : "Ủ" U1EE6 # LATIN CAPITAL LETTER U WITH HOOK ABOVE
++<dead_hook> <u> : "ủ" U1EE7 # LATIN SMALL LETTER U WITH HOOK ABOVE
++<Multi_key> <question> <u> : "ủ" U1EE7 # LATIN SMALL LETTER U WITH HOOK ABOVE
++<combining_hook> <u> : "ủ" U1EE7 # LATIN SMALL LETTER U WITH HOOK ABOVE
++<dead_acute> <Uhorn> : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
++<Multi_key> <acute> <Uhorn> : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
++<Multi_key> <apostrophe> <Uhorn> : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
++<dead_acute> <dead_horn> <U> : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
++<dead_acute> <Multi_key> <plus> <U> : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
++<Multi_key> <acute> <dead_horn> <U> : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
++<Multi_key> <acute> <plus> <U> : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
++<Multi_key> <apostrophe> <dead_horn> <U> : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
++<Multi_key> <apostrophe> <plus> <U> : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
++<combining_acute> <Uhorn> : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
++<combining_acute> <dead_horn> <U> : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
++<combining_acute> <Multi_key> <plus> <U> : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
++<dead_acute> <uhorn> : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
++<Multi_key> <acute> <uhorn> : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
++<Multi_key> <apostrophe> <uhorn> : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
++<dead_acute> <dead_horn> <u> : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
++<dead_acute> <Multi_key> <plus> <u> : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
++<Multi_key> <acute> <dead_horn> <u> : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
++<Multi_key> <acute> <plus> <u> : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
++<Multi_key> <apostrophe> <dead_horn> <u> : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
++<Multi_key> <apostrophe> <plus> <u> : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
++<combining_acute> <uhorn> : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
++<combining_acute> <dead_horn> <u> : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
++<combining_acute> <Multi_key> <plus> <u> : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
++<dead_grave> <Uhorn> : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
++<Multi_key> <grave> <Uhorn> : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
++<dead_grave> <dead_horn> <U> : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
++<dead_grave> <Multi_key> <plus> <U> : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
++<Multi_key> <grave> <dead_horn> <U> : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
++<Multi_key> <grave> <plus> <U> : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
++<combining_grave> <Uhorn> : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
++<combining_grave> <dead_horn> <U> : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
++<combining_grave> <Multi_key> <plus> <U> : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
++<dead_grave> <uhorn> : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
++<Multi_key> <grave> <uhorn> : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
++<dead_grave> <dead_horn> <u> : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
++<dead_grave> <Multi_key> <plus> <u> : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
++<Multi_key> <grave> <dead_horn> <u> : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
++<Multi_key> <grave> <plus> <u> : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
++<combining_grave> <uhorn> : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
++<combining_grave> <dead_horn> <u> : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
++<combining_grave> <Multi_key> <plus> <u> : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
++<dead_hook> <Uhorn> : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
++<Multi_key> <question> <Uhorn> : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
++<dead_hook> <dead_horn> <U> : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
++<dead_hook> <Multi_key> <plus> <U> : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
++<Multi_key> <question> <dead_horn> <U> : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
++<Multi_key> <question> <plus> <U> : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
++<combining_hook> <Uhorn> : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
++<combining_hook> <dead_horn> <U> : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
++<combining_hook> <Multi_key> <plus> <U> : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
++<dead_hook> <uhorn> : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
++<Multi_key> <question> <uhorn> : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
++<dead_hook> <dead_horn> <u> : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
++<dead_hook> <Multi_key> <plus> <u> : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
++<Multi_key> <question> <dead_horn> <u> : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
++<Multi_key> <question> <plus> <u> : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
++<combining_hook> <uhorn> : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
++<combining_hook> <dead_horn> <u> : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
++<combining_hook> <Multi_key> <plus> <u> : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
++<dead_tilde> <Uhorn> : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
++<Multi_key> <asciitilde> <Uhorn> : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
++<dead_tilde> <dead_horn> <U> : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
++<dead_tilde> <Multi_key> <plus> <U> : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
++<Multi_key> <asciitilde> <dead_horn> <U> : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
++<Multi_key> <asciitilde> <plus> <U> : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
++<combining_tilde> <Uhorn> : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
++<combining_tilde> <dead_horn> <U> : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
++<combining_tilde> <Multi_key> <plus> <U> : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
++<dead_tilde> <uhorn> : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
++<Multi_key> <asciitilde> <uhorn> : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
++<dead_tilde> <dead_horn> <u> : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
++<dead_tilde> <Multi_key> <plus> <u> : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
++<Multi_key> <asciitilde> <dead_horn> <u> : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
++<Multi_key> <asciitilde> <plus> <u> : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
++<combining_tilde> <uhorn> : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
++<combining_tilde> <dead_horn> <u> : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
++<combining_tilde> <Multi_key> <plus> <u> : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
++<dead_belowdot> <Uhorn> : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
++<Multi_key> <exclam> <Uhorn> : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
++<dead_belowdot> <dead_horn> <U> : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
++<dead_belowdot> <Multi_key> <plus> <U> : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
++<Multi_key> <exclam> <dead_horn> <U> : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
++<Multi_key> <exclam> <plus> <U> : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
++<combining_belowdot> <Uhorn> : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
++<combining_belowdot> <dead_horn> <U> : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
++<combining_belowdot> <Multi_key> <plus> <U> : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
++<dead_belowdot> <uhorn> : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
++<Multi_key> <exclam> <uhorn> : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
++<dead_belowdot> <dead_horn> <u> : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
++<dead_belowdot> <Multi_key> <plus> <u> : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
++<Multi_key> <exclam> <dead_horn> <u> : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
++<Multi_key> <exclam> <plus> <u> : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
++<combining_belowdot> <uhorn> : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
++<combining_belowdot> <dead_horn> <u> : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
++<combining_belowdot> <Multi_key> <plus> <u> : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
++<dead_grave> <Y> : "Ỳ" U1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE
++<Multi_key> <grave> <Y> : "Ỳ" U1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE
++<combining_grave> <Y> : "Ỳ" U1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE
++<dead_grave> <y> : "ỳ" U1EF3 # LATIN SMALL LETTER Y WITH GRAVE
++<Multi_key> <grave> <y> : "ỳ" U1EF3 # LATIN SMALL LETTER Y WITH GRAVE
++<combining_grave> <y> : "ỳ" U1EF3 # LATIN SMALL LETTER Y WITH GRAVE
++<dead_belowdot> <Y> : "Ỵ" U1EF4 # LATIN CAPITAL LETTER Y WITH DOT BELOW
++<Multi_key> <exclam> <Y> : "Ỵ" U1EF4 # LATIN CAPITAL LETTER Y WITH DOT BELOW
++<combining_belowdot> <Y> : "Ỵ" U1EF4 # LATIN CAPITAL LETTER Y WITH DOT BELOW
++<dead_belowdot> <y> : "ỵ" U1EF5 # LATIN SMALL LETTER Y WITH DOT BELOW
++<Multi_key> <exclam> <y> : "ỵ" U1EF5 # LATIN SMALL LETTER Y WITH DOT BELOW
++<combining_belowdot> <y> : "ỵ" U1EF5 # LATIN SMALL LETTER Y WITH DOT BELOW
++<dead_hook> <Y> : "Ỷ" U1EF6 # LATIN CAPITAL LETTER Y WITH HOOK ABOVE
++<Multi_key> <question> <Y> : "Ỷ" U1EF6 # LATIN CAPITAL LETTER Y WITH HOOK ABOVE
++<combining_hook> <Y> : "Ỷ" U1EF6 # LATIN CAPITAL LETTER Y WITH HOOK ABOVE
++<dead_hook> <y> : "ỷ" U1EF7 # LATIN SMALL LETTER Y WITH HOOK ABOVE
++<Multi_key> <question> <y> : "ỷ" U1EF7 # LATIN SMALL LETTER Y WITH HOOK ABOVE
++<combining_hook> <y> : "ỷ" U1EF7 # LATIN SMALL LETTER Y WITH HOOK ABOVE
++<dead_tilde> <Y> : "Ỹ" U1EF8 # LATIN CAPITAL LETTER Y WITH TILDE
++<Multi_key> <asciitilde> <Y> : "Ỹ" U1EF8 # LATIN CAPITAL LETTER Y WITH TILDE
++<combining_tilde> <Y> : "Ỹ" U1EF8 # LATIN CAPITAL LETTER Y WITH TILDE
++<dead_tilde> <y> : "ỹ" U1EF9 # LATIN SMALL LETTER Y WITH TILDE
++<Multi_key> <asciitilde> <y> : "ỹ" U1EF9 # LATIN SMALL LETTER Y WITH TILDE
++<combining_tilde> <y> : "ỹ" U1EF9 # LATIN SMALL LETTER Y WITH TILDE
++<U0313> <Greek_alpha> : "ἀ" U1F00 # GREEK SMALL LETTER ALPHA WITH PSILI
++<Multi_key> <parenright> <Greek_alpha> : "ἀ" U1F00 # GREEK SMALL LETTER ALPHA WITH PSILI
++<U0314> <Greek_alpha> : "ἁ" U1F01 # GREEK SMALL LETTER ALPHA WITH DASIA
++<Multi_key> <parenleft> <Greek_alpha> : "ἁ" U1F01 # GREEK SMALL LETTER ALPHA WITH DASIA
++<dead_grave> <U1f00> : "ἂ" U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
++<Multi_key> <grave> <U1f00> : "ἂ" U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
++<dead_grave> <U0313> <Greek_alpha> : "ἂ" U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
++<dead_grave> <Multi_key> <parenright> <Greek_alpha> : "ἂ" U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
++<Multi_key> <grave> <U0313> <Greek_alpha> : "ἂ" U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
++<Multi_key> <grave> <parenright> <Greek_alpha> : "ἂ" U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
++<combining_grave> <U1f00> : "ἂ" U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
++<combining_grave> <U0313> <Greek_alpha> : "ἂ" U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
++<combining_grave> <Multi_key> <parenright> <Greek_alpha> : "ἂ" U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
++<dead_grave> <U1f01> : "ἃ" U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
++<Multi_key> <grave> <U1f01> : "ἃ" U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
++<dead_grave> <U0314> <Greek_alpha> : "ἃ" U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
++<dead_grave> <Multi_key> <parenleft> <Greek_alpha> : "ἃ" U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
++<Multi_key> <grave> <U0314> <Greek_alpha> : "ἃ" U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
++<Multi_key> <grave> <parenleft> <Greek_alpha> : "ἃ" U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
++<combining_grave> <U1f01> : "ἃ" U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
++<combining_grave> <U0314> <Greek_alpha> : "ἃ" U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
++<combining_grave> <Multi_key> <parenleft> <Greek_alpha> : "ἃ" U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
++<dead_acute> <U1f00> : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
++<Multi_key> <acute> <U1f00> : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <U1f00> : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
++<dead_acute> <U0313> <Greek_alpha> : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
++<dead_acute> <Multi_key> <parenright> <Greek_alpha> : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
++<Multi_key> <acute> <U0313> <Greek_alpha> : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
++<Multi_key> <acute> <parenright> <Greek_alpha> : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <U0313> <Greek_alpha> : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <parenright> <Greek_alpha> : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
++<combining_acute> <U1f00> : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
++<combining_acute> <U0313> <Greek_alpha> : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
++<combining_acute> <Multi_key> <parenright> <Greek_alpha> : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
++<dead_acute> <U1f01> : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
++<Multi_key> <acute> <U1f01> : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <U1f01> : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
++<dead_acute> <U0314> <Greek_alpha> : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
++<dead_acute> <Multi_key> <parenleft> <Greek_alpha> : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
++<Multi_key> <acute> <U0314> <Greek_alpha> : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
++<Multi_key> <acute> <parenleft> <Greek_alpha> : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <U0314> <Greek_alpha> : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <parenleft> <Greek_alpha> : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
++<combining_acute> <U1f01> : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
++<combining_acute> <U0314> <Greek_alpha> : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
++<combining_acute> <Multi_key> <parenleft> <Greek_alpha> : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
++<U0342> <U1f00> : "ἆ" U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
++<dead_tilde> <U1f00> : "ἆ" U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
++<Multi_key> <asciitilde> <U1f00> : "ἆ" U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
++<U0342> <U0313> <Greek_alpha> : "ἆ" U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
++<U0342> <Multi_key> <parenright> <Greek_alpha> : "ἆ" U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
++<dead_tilde> <U0313> <Greek_alpha> : "ἆ" U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
++<dead_tilde> <Multi_key> <parenright> <Greek_alpha> : "ἆ" U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
++<Multi_key> <asciitilde> <U0313> <Greek_alpha> : "ἆ" U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
++<Multi_key> <asciitilde> <parenright> <Greek_alpha> : "ἆ" U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
++<U0342> <U1f01> : "ἇ" U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
++<dead_tilde> <U1f01> : "ἇ" U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <U1f01> : "ἇ" U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
++<U0342> <U0314> <Greek_alpha> : "ἇ" U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
++<U0342> <Multi_key> <parenleft> <Greek_alpha> : "ἇ" U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
++<dead_tilde> <U0314> <Greek_alpha> : "ἇ" U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
++<dead_tilde> <Multi_key> <parenleft> <Greek_alpha> : "ἇ" U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <U0314> <Greek_alpha> : "ἇ" U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <parenleft> <Greek_alpha> : "ἇ" U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
++<U0313> <Greek_ALPHA> : "Ἀ" U1F08 # GREEK CAPITAL LETTER ALPHA WITH PSILI
++<Multi_key> <parenright> <Greek_ALPHA> : "Ἀ" U1F08 # GREEK CAPITAL LETTER ALPHA WITH PSILI
++<U0314> <Greek_ALPHA> : "Ἁ" U1F09 # GREEK CAPITAL LETTER ALPHA WITH DASIA
++<Multi_key> <parenleft> <Greek_ALPHA> : "Ἁ" U1F09 # GREEK CAPITAL LETTER ALPHA WITH DASIA
++<dead_grave> <U1f08> : "Ἂ" U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
++<Multi_key> <grave> <U1f08> : "Ἂ" U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
++<dead_grave> <U0313> <Greek_ALPHA> : "Ἂ" U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
++<dead_grave> <Multi_key> <parenright> <Greek_ALPHA> : "Ἂ" U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
++<Multi_key> <grave> <U0313> <Greek_ALPHA> : "Ἂ" U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
++<Multi_key> <grave> <parenright> <Greek_ALPHA> : "Ἂ" U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
++<combining_grave> <U1f08> : "Ἂ" U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
++<combining_grave> <U0313> <Greek_ALPHA> : "Ἂ" U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
++<combining_grave> <Multi_key> <parenright> <Greek_ALPHA> : "Ἂ" U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
++<dead_grave> <U1f09> : "Ἃ" U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
++<Multi_key> <grave> <U1f09> : "Ἃ" U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
++<dead_grave> <U0314> <Greek_ALPHA> : "Ἃ" U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
++<dead_grave> <Multi_key> <parenleft> <Greek_ALPHA> : "Ἃ" U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
++<Multi_key> <grave> <U0314> <Greek_ALPHA> : "Ἃ" U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
++<Multi_key> <grave> <parenleft> <Greek_ALPHA> : "Ἃ" U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
++<combining_grave> <U1f09> : "Ἃ" U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
++<combining_grave> <U0314> <Greek_ALPHA> : "Ἃ" U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
++<combining_grave> <Multi_key> <parenleft> <Greek_ALPHA> : "Ἃ" U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
++<dead_acute> <U1f08> : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
++<Multi_key> <acute> <U1f08> : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <U1f08> : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
++<dead_acute> <U0313> <Greek_ALPHA> : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
++<dead_acute> <Multi_key> <parenright> <Greek_ALPHA> : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
++<Multi_key> <acute> <U0313> <Greek_ALPHA> : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
++<Multi_key> <acute> <parenright> <Greek_ALPHA> : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <U0313> <Greek_ALPHA> : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <parenright> <Greek_ALPHA> : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
++<combining_acute> <U1f08> : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
++<combining_acute> <U0313> <Greek_ALPHA> : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
++<combining_acute> <Multi_key> <parenright> <Greek_ALPHA> : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
++<dead_acute> <U1f09> : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
++<Multi_key> <acute> <U1f09> : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <U1f09> : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
++<dead_acute> <U0314> <Greek_ALPHA> : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
++<dead_acute> <Multi_key> <parenleft> <Greek_ALPHA> : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
++<Multi_key> <acute> <U0314> <Greek_ALPHA> : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
++<Multi_key> <acute> <parenleft> <Greek_ALPHA> : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <U0314> <Greek_ALPHA> : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <parenleft> <Greek_ALPHA> : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
++<combining_acute> <U1f09> : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
++<combining_acute> <U0314> <Greek_ALPHA> : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
++<combining_acute> <Multi_key> <parenleft> <Greek_ALPHA> : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
++<U0342> <U1f08> : "Ἆ" U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
++<dead_tilde> <U1f08> : "Ἆ" U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
++<Multi_key> <asciitilde> <U1f08> : "Ἆ" U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
++<U0342> <U0313> <Greek_ALPHA> : "Ἆ" U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
++<U0342> <Multi_key> <parenright> <Greek_ALPHA> : "Ἆ" U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
++<dead_tilde> <U0313> <Greek_ALPHA> : "Ἆ" U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
++<dead_tilde> <Multi_key> <parenright> <Greek_ALPHA> : "Ἆ" U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
++<Multi_key> <asciitilde> <U0313> <Greek_ALPHA> : "Ἆ" U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
++<Multi_key> <asciitilde> <parenright> <Greek_ALPHA> : "Ἆ" U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
++<U0342> <U1f09> : "Ἇ" U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
++<dead_tilde> <U1f09> : "Ἇ" U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <U1f09> : "Ἇ" U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
++<U0342> <U0314> <Greek_ALPHA> : "Ἇ" U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
++<U0342> <Multi_key> <parenleft> <Greek_ALPHA> : "Ἇ" U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
++<dead_tilde> <U0314> <Greek_ALPHA> : "Ἇ" U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
++<dead_tilde> <Multi_key> <parenleft> <Greek_ALPHA> : "Ἇ" U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <U0314> <Greek_ALPHA> : "Ἇ" U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <parenleft> <Greek_ALPHA> : "Ἇ" U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
++<U0313> <Greek_epsilon> : "ἐ" U1F10 # GREEK SMALL LETTER EPSILON WITH PSILI
++<Multi_key> <parenright> <Greek_epsilon> : "ἐ" U1F10 # GREEK SMALL LETTER EPSILON WITH PSILI
++<U0314> <Greek_epsilon> : "ἑ" U1F11 # GREEK SMALL LETTER EPSILON WITH DASIA
++<Multi_key> <parenleft> <Greek_epsilon> : "ἑ" U1F11 # GREEK SMALL LETTER EPSILON WITH DASIA
++<dead_grave> <U1f10> : "ἒ" U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
++<Multi_key> <grave> <U1f10> : "ἒ" U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
++<dead_grave> <U0313> <Greek_epsilon> : "ἒ" U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
++<dead_grave> <Multi_key> <parenright> <Greek_epsilon> : "ἒ" U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
++<Multi_key> <grave> <U0313> <Greek_epsilon> : "ἒ" U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
++<Multi_key> <grave> <parenright> <Greek_epsilon> : "ἒ" U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
++<combining_grave> <U1f10> : "ἒ" U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
++<combining_grave> <U0313> <Greek_epsilon> : "ἒ" U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
++<combining_grave> <Multi_key> <parenright> <Greek_epsilon> : "ἒ" U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
++<dead_grave> <U1f11> : "ἓ" U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
++<Multi_key> <grave> <U1f11> : "ἓ" U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
++<dead_grave> <U0314> <Greek_epsilon> : "ἓ" U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
++<dead_grave> <Multi_key> <parenleft> <Greek_epsilon> : "ἓ" U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
++<Multi_key> <grave> <U0314> <Greek_epsilon> : "ἓ" U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
++<Multi_key> <grave> <parenleft> <Greek_epsilon> : "ἓ" U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
++<combining_grave> <U1f11> : "ἓ" U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
++<combining_grave> <U0314> <Greek_epsilon> : "ἓ" U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
++<combining_grave> <Multi_key> <parenleft> <Greek_epsilon> : "ἓ" U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
++<dead_acute> <U1f10> : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
++<Multi_key> <acute> <U1f10> : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <U1f10> : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
++<dead_acute> <U0313> <Greek_epsilon> : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
++<dead_acute> <Multi_key> <parenright> <Greek_epsilon> : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
++<Multi_key> <acute> <U0313> <Greek_epsilon> : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
++<Multi_key> <acute> <parenright> <Greek_epsilon> : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <U0313> <Greek_epsilon> : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <parenright> <Greek_epsilon> : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
++<combining_acute> <U1f10> : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
++<combining_acute> <U0313> <Greek_epsilon> : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
++<combining_acute> <Multi_key> <parenright> <Greek_epsilon> : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
++<dead_acute> <U1f11> : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
++<Multi_key> <acute> <U1f11> : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <U1f11> : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
++<dead_acute> <U0314> <Greek_epsilon> : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
++<dead_acute> <Multi_key> <parenleft> <Greek_epsilon> : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
++<Multi_key> <acute> <U0314> <Greek_epsilon> : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
++<Multi_key> <acute> <parenleft> <Greek_epsilon> : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <U0314> <Greek_epsilon> : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <parenleft> <Greek_epsilon> : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
++<combining_acute> <U1f11> : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
++<combining_acute> <U0314> <Greek_epsilon> : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
++<combining_acute> <Multi_key> <parenleft> <Greek_epsilon> : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
++<U0313> <Greek_EPSILON> : "Ἐ" U1F18 # GREEK CAPITAL LETTER EPSILON WITH PSILI
++<Multi_key> <parenright> <Greek_EPSILON> : "Ἐ" U1F18 # GREEK CAPITAL LETTER EPSILON WITH PSILI
++<U0314> <Greek_EPSILON> : "Ἑ" U1F19 # GREEK CAPITAL LETTER EPSILON WITH DASIA
++<Multi_key> <parenleft> <Greek_EPSILON> : "Ἑ" U1F19 # GREEK CAPITAL LETTER EPSILON WITH DASIA
++<dead_grave> <U1f18> : "Ἒ" U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
++<Multi_key> <grave> <U1f18> : "Ἒ" U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
++<dead_grave> <U0313> <Greek_EPSILON> : "Ἒ" U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
++<dead_grave> <Multi_key> <parenright> <Greek_EPSILON> : "Ἒ" U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
++<Multi_key> <grave> <U0313> <Greek_EPSILON> : "Ἒ" U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
++<Multi_key> <grave> <parenright> <Greek_EPSILON> : "Ἒ" U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
++<combining_grave> <U1f18> : "Ἒ" U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
++<combining_grave> <U0313> <Greek_EPSILON> : "Ἒ" U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
++<combining_grave> <Multi_key> <parenright> <Greek_EPSILON> : "Ἒ" U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
++<dead_grave> <U1f19> : "Ἓ" U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
++<Multi_key> <grave> <U1f19> : "Ἓ" U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
++<dead_grave> <U0314> <Greek_EPSILON> : "Ἓ" U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
++<dead_grave> <Multi_key> <parenleft> <Greek_EPSILON> : "Ἓ" U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
++<Multi_key> <grave> <U0314> <Greek_EPSILON> : "Ἓ" U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
++<Multi_key> <grave> <parenleft> <Greek_EPSILON> : "Ἓ" U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
++<combining_grave> <U1f19> : "Ἓ" U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
++<combining_grave> <U0314> <Greek_EPSILON> : "Ἓ" U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
++<combining_grave> <Multi_key> <parenleft> <Greek_EPSILON> : "Ἓ" U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
++<dead_acute> <U1f18> : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
++<Multi_key> <acute> <U1f18> : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <U1f18> : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
++<dead_acute> <U0313> <Greek_EPSILON> : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
++<dead_acute> <Multi_key> <parenright> <Greek_EPSILON> : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
++<Multi_key> <acute> <U0313> <Greek_EPSILON> : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
++<Multi_key> <acute> <parenright> <Greek_EPSILON> : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <U0313> <Greek_EPSILON> : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <parenright> <Greek_EPSILON> : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
++<combining_acute> <U1f18> : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
++<combining_acute> <U0313> <Greek_EPSILON> : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
++<combining_acute> <Multi_key> <parenright> <Greek_EPSILON> : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
++<dead_acute> <U1f19> : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
++<Multi_key> <acute> <U1f19> : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <U1f19> : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
++<dead_acute> <U0314> <Greek_EPSILON> : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
++<dead_acute> <Multi_key> <parenleft> <Greek_EPSILON> : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
++<Multi_key> <acute> <U0314> <Greek_EPSILON> : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
++<Multi_key> <acute> <parenleft> <Greek_EPSILON> : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <U0314> <Greek_EPSILON> : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <parenleft> <Greek_EPSILON> : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
++<combining_acute> <U1f19> : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
++<combining_acute> <U0314> <Greek_EPSILON> : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
++<combining_acute> <Multi_key> <parenleft> <Greek_EPSILON> : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
++<U0313> <Greek_eta> : "ἠ" U1F20 # GREEK SMALL LETTER ETA WITH PSILI
++<Multi_key> <parenright> <Greek_eta> : "ἠ" U1F20 # GREEK SMALL LETTER ETA WITH PSILI
++<U0314> <Greek_eta> : "ἡ" U1F21 # GREEK SMALL LETTER ETA WITH DASIA
++<Multi_key> <parenleft> <Greek_eta> : "ἡ" U1F21 # GREEK SMALL LETTER ETA WITH DASIA
++<dead_grave> <U1f20> : "ἢ" U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
++<Multi_key> <grave> <U1f20> : "ἢ" U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
++<dead_grave> <U0313> <Greek_eta> : "ἢ" U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
++<dead_grave> <Multi_key> <parenright> <Greek_eta> : "ἢ" U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
++<Multi_key> <grave> <U0313> <Greek_eta> : "ἢ" U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
++<Multi_key> <grave> <parenright> <Greek_eta> : "ἢ" U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
++<combining_grave> <U1f20> : "ἢ" U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
++<combining_grave> <U0313> <Greek_eta> : "ἢ" U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
++<combining_grave> <Multi_key> <parenright> <Greek_eta> : "ἢ" U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
++<dead_grave> <U1f21> : "ἣ" U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
++<Multi_key> <grave> <U1f21> : "ἣ" U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
++<dead_grave> <U0314> <Greek_eta> : "ἣ" U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
++<dead_grave> <Multi_key> <parenleft> <Greek_eta> : "ἣ" U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
++<Multi_key> <grave> <U0314> <Greek_eta> : "ἣ" U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
++<Multi_key> <grave> <parenleft> <Greek_eta> : "ἣ" U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
++<combining_grave> <U1f21> : "ἣ" U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
++<combining_grave> <U0314> <Greek_eta> : "ἣ" U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
++<combining_grave> <Multi_key> <parenleft> <Greek_eta> : "ἣ" U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
++<dead_acute> <U1f20> : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
++<Multi_key> <acute> <U1f20> : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <U1f20> : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
++<dead_acute> <U0313> <Greek_eta> : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
++<dead_acute> <Multi_key> <parenright> <Greek_eta> : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
++<Multi_key> <acute> <U0313> <Greek_eta> : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
++<Multi_key> <acute> <parenright> <Greek_eta> : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <U0313> <Greek_eta> : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <parenright> <Greek_eta> : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
++<combining_acute> <U1f20> : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
++<combining_acute> <U0313> <Greek_eta> : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
++<combining_acute> <Multi_key> <parenright> <Greek_eta> : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
++<dead_acute> <U1f21> : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
++<Multi_key> <acute> <U1f21> : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <U1f21> : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
++<dead_acute> <U0314> <Greek_eta> : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
++<dead_acute> <Multi_key> <parenleft> <Greek_eta> : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
++<Multi_key> <acute> <U0314> <Greek_eta> : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
++<Multi_key> <acute> <parenleft> <Greek_eta> : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <U0314> <Greek_eta> : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <parenleft> <Greek_eta> : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
++<combining_acute> <U1f21> : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
++<combining_acute> <U0314> <Greek_eta> : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
++<combining_acute> <Multi_key> <parenleft> <Greek_eta> : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
++<U0342> <U1f20> : "ἦ" U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
++<dead_tilde> <U1f20> : "ἦ" U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
++<Multi_key> <asciitilde> <U1f20> : "ἦ" U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
++<U0342> <U0313> <Greek_eta> : "ἦ" U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
++<U0342> <Multi_key> <parenright> <Greek_eta> : "ἦ" U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
++<dead_tilde> <U0313> <Greek_eta> : "ἦ" U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
++<dead_tilde> <Multi_key> <parenright> <Greek_eta> : "ἦ" U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
++<Multi_key> <asciitilde> <U0313> <Greek_eta> : "ἦ" U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
++<Multi_key> <asciitilde> <parenright> <Greek_eta> : "ἦ" U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
++<U0342> <U1f21> : "ἧ" U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
++<dead_tilde> <U1f21> : "ἧ" U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <U1f21> : "ἧ" U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
++<U0342> <U0314> <Greek_eta> : "ἧ" U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
++<U0342> <Multi_key> <parenleft> <Greek_eta> : "ἧ" U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
++<dead_tilde> <U0314> <Greek_eta> : "ἧ" U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
++<dead_tilde> <Multi_key> <parenleft> <Greek_eta> : "ἧ" U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <U0314> <Greek_eta> : "ἧ" U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <parenleft> <Greek_eta> : "ἧ" U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
++<U0313> <Greek_ETA> : "Ἠ" U1F28 # GREEK CAPITAL LETTER ETA WITH PSILI
++<Multi_key> <parenright> <Greek_ETA> : "Ἠ" U1F28 # GREEK CAPITAL LETTER ETA WITH PSILI
++<U0314> <Greek_ETA> : "Ἡ" U1F29 # GREEK CAPITAL LETTER ETA WITH DASIA
++<Multi_key> <parenleft> <Greek_ETA> : "Ἡ" U1F29 # GREEK CAPITAL LETTER ETA WITH DASIA
++<dead_grave> <U1f28> : "Ἢ" U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
++<Multi_key> <grave> <U1f28> : "Ἢ" U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
++<dead_grave> <U0313> <Greek_ETA> : "Ἢ" U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
++<dead_grave> <Multi_key> <parenright> <Greek_ETA> : "Ἢ" U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
++<Multi_key> <grave> <U0313> <Greek_ETA> : "Ἢ" U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
++<Multi_key> <grave> <parenright> <Greek_ETA> : "Ἢ" U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
++<combining_grave> <U1f28> : "Ἢ" U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
++<combining_grave> <U0313> <Greek_ETA> : "Ἢ" U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
++<combining_grave> <Multi_key> <parenright> <Greek_ETA> : "Ἢ" U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
++<dead_grave> <U1f29> : "Ἣ" U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
++<Multi_key> <grave> <U1f29> : "Ἣ" U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
++<dead_grave> <U0314> <Greek_ETA> : "Ἣ" U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
++<dead_grave> <Multi_key> <parenleft> <Greek_ETA> : "Ἣ" U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
++<Multi_key> <grave> <U0314> <Greek_ETA> : "Ἣ" U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
++<Multi_key> <grave> <parenleft> <Greek_ETA> : "Ἣ" U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
++<combining_grave> <U1f29> : "Ἣ" U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
++<combining_grave> <U0314> <Greek_ETA> : "Ἣ" U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
++<combining_grave> <Multi_key> <parenleft> <Greek_ETA> : "Ἣ" U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
++<dead_acute> <U1f28> : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
++<Multi_key> <acute> <U1f28> : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <U1f28> : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
++<dead_acute> <U0313> <Greek_ETA> : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
++<dead_acute> <Multi_key> <parenright> <Greek_ETA> : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
++<Multi_key> <acute> <U0313> <Greek_ETA> : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
++<Multi_key> <acute> <parenright> <Greek_ETA> : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <U0313> <Greek_ETA> : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <parenright> <Greek_ETA> : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
++<combining_acute> <U1f28> : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
++<combining_acute> <U0313> <Greek_ETA> : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
++<combining_acute> <Multi_key> <parenright> <Greek_ETA> : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
++<dead_acute> <U1f29> : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
++<Multi_key> <acute> <U1f29> : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <U1f29> : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
++<dead_acute> <U0314> <Greek_ETA> : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
++<dead_acute> <Multi_key> <parenleft> <Greek_ETA> : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
++<Multi_key> <acute> <U0314> <Greek_ETA> : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
++<Multi_key> <acute> <parenleft> <Greek_ETA> : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <U0314> <Greek_ETA> : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <parenleft> <Greek_ETA> : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
++<combining_acute> <U1f29> : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
++<combining_acute> <U0314> <Greek_ETA> : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
++<combining_acute> <Multi_key> <parenleft> <Greek_ETA> : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
++<U0342> <U1f28> : "Ἦ" U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
++<dead_tilde> <U1f28> : "Ἦ" U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
++<Multi_key> <asciitilde> <U1f28> : "Ἦ" U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
++<U0342> <U0313> <Greek_ETA> : "Ἦ" U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
++<U0342> <Multi_key> <parenright> <Greek_ETA> : "Ἦ" U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
++<dead_tilde> <U0313> <Greek_ETA> : "Ἦ" U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
++<dead_tilde> <Multi_key> <parenright> <Greek_ETA> : "Ἦ" U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
++<Multi_key> <asciitilde> <U0313> <Greek_ETA> : "Ἦ" U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
++<Multi_key> <asciitilde> <parenright> <Greek_ETA> : "Ἦ" U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
++<U0342> <U1f29> : "Ἧ" U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
++<dead_tilde> <U1f29> : "Ἧ" U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <U1f29> : "Ἧ" U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
++<U0342> <U0314> <Greek_ETA> : "Ἧ" U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
++<U0342> <Multi_key> <parenleft> <Greek_ETA> : "Ἧ" U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
++<dead_tilde> <U0314> <Greek_ETA> : "Ἧ" U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
++<dead_tilde> <Multi_key> <parenleft> <Greek_ETA> : "Ἧ" U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <U0314> <Greek_ETA> : "Ἧ" U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <parenleft> <Greek_ETA> : "Ἧ" U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
++<U0313> <Greek_iota> : "ἰ" U1F30 # GREEK SMALL LETTER IOTA WITH PSILI
++<Multi_key> <parenright> <Greek_iota> : "ἰ" U1F30 # GREEK SMALL LETTER IOTA WITH PSILI
++<U0314> <Greek_iota> : "ἱ" U1F31 # GREEK SMALL LETTER IOTA WITH DASIA
++<Multi_key> <parenleft> <Greek_iota> : "ἱ" U1F31 # GREEK SMALL LETTER IOTA WITH DASIA
++<dead_grave> <U1f30> : "ἲ" U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
++<Multi_key> <grave> <U1f30> : "ἲ" U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
++<dead_grave> <U0313> <Greek_iota> : "ἲ" U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
++<dead_grave> <Multi_key> <parenright> <Greek_iota> : "ἲ" U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
++<Multi_key> <grave> <U0313> <Greek_iota> : "ἲ" U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
++<Multi_key> <grave> <parenright> <Greek_iota> : "ἲ" U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
++<combining_grave> <U1f30> : "ἲ" U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
++<combining_grave> <U0313> <Greek_iota> : "ἲ" U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
++<combining_grave> <Multi_key> <parenright> <Greek_iota> : "ἲ" U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
++<dead_grave> <U1f31> : "ἳ" U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
++<Multi_key> <grave> <U1f31> : "ἳ" U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
++<dead_grave> <U0314> <Greek_iota> : "ἳ" U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
++<dead_grave> <Multi_key> <parenleft> <Greek_iota> : "ἳ" U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
++<Multi_key> <grave> <U0314> <Greek_iota> : "ἳ" U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
++<Multi_key> <grave> <parenleft> <Greek_iota> : "ἳ" U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
++<combining_grave> <U1f31> : "ἳ" U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
++<combining_grave> <U0314> <Greek_iota> : "ἳ" U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
++<combining_grave> <Multi_key> <parenleft> <Greek_iota> : "ἳ" U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
++<dead_acute> <U1f30> : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
++<Multi_key> <acute> <U1f30> : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <U1f30> : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
++<dead_acute> <U0313> <Greek_iota> : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
++<dead_acute> <Multi_key> <parenright> <Greek_iota> : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
++<Multi_key> <acute> <U0313> <Greek_iota> : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
++<Multi_key> <acute> <parenright> <Greek_iota> : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <U0313> <Greek_iota> : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <parenright> <Greek_iota> : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
++<combining_acute> <U1f30> : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
++<combining_acute> <U0313> <Greek_iota> : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
++<combining_acute> <Multi_key> <parenright> <Greek_iota> : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
++<dead_acute> <U1f31> : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
++<Multi_key> <acute> <U1f31> : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <U1f31> : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
++<dead_acute> <U0314> <Greek_iota> : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
++<dead_acute> <Multi_key> <parenleft> <Greek_iota> : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
++<Multi_key> <acute> <U0314> <Greek_iota> : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
++<Multi_key> <acute> <parenleft> <Greek_iota> : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <U0314> <Greek_iota> : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <parenleft> <Greek_iota> : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
++<combining_acute> <U1f31> : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
++<combining_acute> <U0314> <Greek_iota> : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
++<combining_acute> <Multi_key> <parenleft> <Greek_iota> : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
++<U0342> <U1f30> : "ἶ" U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
++<dead_tilde> <U1f30> : "ἶ" U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
++<Multi_key> <asciitilde> <U1f30> : "ἶ" U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
++<U0342> <U0313> <Greek_iota> : "ἶ" U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
++<U0342> <Multi_key> <parenright> <Greek_iota> : "ἶ" U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
++<dead_tilde> <U0313> <Greek_iota> : "ἶ" U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
++<dead_tilde> <Multi_key> <parenright> <Greek_iota> : "ἶ" U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
++<Multi_key> <asciitilde> <U0313> <Greek_iota> : "ἶ" U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
++<Multi_key> <asciitilde> <parenright> <Greek_iota> : "ἶ" U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
++<U0342> <U1f31> : "ἷ" U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
++<dead_tilde> <U1f31> : "ἷ" U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <U1f31> : "ἷ" U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
++<U0342> <U0314> <Greek_iota> : "ἷ" U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
++<U0342> <Multi_key> <parenleft> <Greek_iota> : "ἷ" U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
++<dead_tilde> <U0314> <Greek_iota> : "ἷ" U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
++<dead_tilde> <Multi_key> <parenleft> <Greek_iota> : "ἷ" U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <U0314> <Greek_iota> : "ἷ" U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <parenleft> <Greek_iota> : "ἷ" U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
++<U0313> <Greek_IOTA> : "Ἰ" U1F38 # GREEK CAPITAL LETTER IOTA WITH PSILI
++<Multi_key> <parenright> <Greek_IOTA> : "Ἰ" U1F38 # GREEK CAPITAL LETTER IOTA WITH PSILI
++<U0314> <Greek_IOTA> : "Ἱ" U1F39 # GREEK CAPITAL LETTER IOTA WITH DASIA
++<Multi_key> <parenleft> <Greek_IOTA> : "Ἱ" U1F39 # GREEK CAPITAL LETTER IOTA WITH DASIA
++<dead_grave> <U1f38> : "Ἲ" U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
++<Multi_key> <grave> <U1f38> : "Ἲ" U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
++<dead_grave> <U0313> <Greek_IOTA> : "Ἲ" U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
++<dead_grave> <Multi_key> <parenright> <Greek_IOTA> : "Ἲ" U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
++<Multi_key> <grave> <U0313> <Greek_IOTA> : "Ἲ" U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
++<Multi_key> <grave> <parenright> <Greek_IOTA> : "Ἲ" U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
++<combining_grave> <U1f38> : "Ἲ" U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
++<combining_grave> <U0313> <Greek_IOTA> : "Ἲ" U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
++<combining_grave> <Multi_key> <parenright> <Greek_IOTA> : "Ἲ" U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
++<dead_grave> <U1f39> : "Ἳ" U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
++<Multi_key> <grave> <U1f39> : "Ἳ" U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
++<dead_grave> <U0314> <Greek_IOTA> : "Ἳ" U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
++<dead_grave> <Multi_key> <parenleft> <Greek_IOTA> : "Ἳ" U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
++<Multi_key> <grave> <U0314> <Greek_IOTA> : "Ἳ" U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
++<Multi_key> <grave> <parenleft> <Greek_IOTA> : "Ἳ" U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
++<combining_grave> <U1f39> : "Ἳ" U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
++<combining_grave> <U0314> <Greek_IOTA> : "Ἳ" U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
++<combining_grave> <Multi_key> <parenleft> <Greek_IOTA> : "Ἳ" U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
++<dead_acute> <U1f38> : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
++<Multi_key> <acute> <U1f38> : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <U1f38> : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
++<dead_acute> <U0313> <Greek_IOTA> : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
++<dead_acute> <Multi_key> <parenright> <Greek_IOTA> : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
++<Multi_key> <acute> <U0313> <Greek_IOTA> : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
++<Multi_key> <acute> <parenright> <Greek_IOTA> : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <U0313> <Greek_IOTA> : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <parenright> <Greek_IOTA> : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
++<combining_acute> <U1f38> : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
++<combining_acute> <U0313> <Greek_IOTA> : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
++<combining_acute> <Multi_key> <parenright> <Greek_IOTA> : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
++<dead_acute> <U1f39> : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
++<Multi_key> <acute> <U1f39> : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <U1f39> : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
++<dead_acute> <U0314> <Greek_IOTA> : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
++<dead_acute> <Multi_key> <parenleft> <Greek_IOTA> : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
++<Multi_key> <acute> <U0314> <Greek_IOTA> : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
++<Multi_key> <acute> <parenleft> <Greek_IOTA> : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <U0314> <Greek_IOTA> : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <parenleft> <Greek_IOTA> : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
++<combining_acute> <U1f39> : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
++<combining_acute> <U0314> <Greek_IOTA> : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
++<combining_acute> <Multi_key> <parenleft> <Greek_IOTA> : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
++<U0342> <U1f38> : "Ἶ" U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
++<dead_tilde> <U1f38> : "Ἶ" U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
++<Multi_key> <asciitilde> <U1f38> : "Ἶ" U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
++<U0342> <U0313> <Greek_IOTA> : "Ἶ" U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
++<U0342> <Multi_key> <parenright> <Greek_IOTA> : "Ἶ" U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
++<dead_tilde> <U0313> <Greek_IOTA> : "Ἶ" U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
++<dead_tilde> <Multi_key> <parenright> <Greek_IOTA> : "Ἶ" U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
++<Multi_key> <asciitilde> <U0313> <Greek_IOTA> : "Ἶ" U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
++<Multi_key> <asciitilde> <parenright> <Greek_IOTA> : "Ἶ" U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
++<U0342> <U1f39> : "Ἷ" U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
++<dead_tilde> <U1f39> : "Ἷ" U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <U1f39> : "Ἷ" U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
++<U0342> <U0314> <Greek_IOTA> : "Ἷ" U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
++<U0342> <Multi_key> <parenleft> <Greek_IOTA> : "Ἷ" U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
++<dead_tilde> <U0314> <Greek_IOTA> : "Ἷ" U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
++<dead_tilde> <Multi_key> <parenleft> <Greek_IOTA> : "Ἷ" U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <U0314> <Greek_IOTA> : "Ἷ" U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <parenleft> <Greek_IOTA> : "Ἷ" U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
++<U0313> <Greek_omicron> : "ὀ" U1F40 # GREEK SMALL LETTER OMICRON WITH PSILI
++<Multi_key> <parenright> <Greek_omicron> : "ὀ" U1F40 # GREEK SMALL LETTER OMICRON WITH PSILI
++<U0314> <Greek_omicron> : "ὁ" U1F41 # GREEK SMALL LETTER OMICRON WITH DASIA
++<Multi_key> <parenleft> <Greek_omicron> : "ὁ" U1F41 # GREEK SMALL LETTER OMICRON WITH DASIA
++<dead_grave> <U1f40> : "ὂ" U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
++<Multi_key> <grave> <U1f40> : "ὂ" U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
++<dead_grave> <U0313> <Greek_omicron> : "ὂ" U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
++<dead_grave> <Multi_key> <parenright> <Greek_omicron> : "ὂ" U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
++<Multi_key> <grave> <U0313> <Greek_omicron> : "ὂ" U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
++<Multi_key> <grave> <parenright> <Greek_omicron> : "ὂ" U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
++<combining_grave> <U1f40> : "ὂ" U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
++<combining_grave> <U0313> <Greek_omicron> : "ὂ" U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
++<combining_grave> <Multi_key> <parenright> <Greek_omicron> : "ὂ" U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
++<dead_grave> <U1f41> : "ὃ" U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
++<Multi_key> <grave> <U1f41> : "ὃ" U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
++<dead_grave> <U0314> <Greek_omicron> : "ὃ" U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
++<dead_grave> <Multi_key> <parenleft> <Greek_omicron> : "ὃ" U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
++<Multi_key> <grave> <U0314> <Greek_omicron> : "ὃ" U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
++<Multi_key> <grave> <parenleft> <Greek_omicron> : "ὃ" U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
++<combining_grave> <U1f41> : "ὃ" U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
++<combining_grave> <U0314> <Greek_omicron> : "ὃ" U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
++<combining_grave> <Multi_key> <parenleft> <Greek_omicron> : "ὃ" U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
++<dead_acute> <U1f40> : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
++<Multi_key> <acute> <U1f40> : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <U1f40> : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
++<dead_acute> <U0313> <Greek_omicron> : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
++<dead_acute> <Multi_key> <parenright> <Greek_omicron> : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
++<Multi_key> <acute> <U0313> <Greek_omicron> : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
++<Multi_key> <acute> <parenright> <Greek_omicron> : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <U0313> <Greek_omicron> : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <parenright> <Greek_omicron> : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
++<combining_acute> <U1f40> : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
++<combining_acute> <U0313> <Greek_omicron> : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
++<combining_acute> <Multi_key> <parenright> <Greek_omicron> : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
++<dead_acute> <U1f41> : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
++<Multi_key> <acute> <U1f41> : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <U1f41> : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
++<dead_acute> <U0314> <Greek_omicron> : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
++<dead_acute> <Multi_key> <parenleft> <Greek_omicron> : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
++<Multi_key> <acute> <U0314> <Greek_omicron> : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
++<Multi_key> <acute> <parenleft> <Greek_omicron> : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <U0314> <Greek_omicron> : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <parenleft> <Greek_omicron> : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
++<combining_acute> <U1f41> : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
++<combining_acute> <U0314> <Greek_omicron> : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
++<combining_acute> <Multi_key> <parenleft> <Greek_omicron> : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
++<U0313> <Greek_OMICRON> : "Ὀ" U1F48 # GREEK CAPITAL LETTER OMICRON WITH PSILI
++<Multi_key> <parenright> <Greek_OMICRON> : "Ὀ" U1F48 # GREEK CAPITAL LETTER OMICRON WITH PSILI
++<U0314> <Greek_OMICRON> : "Ὁ" U1F49 # GREEK CAPITAL LETTER OMICRON WITH DASIA
++<Multi_key> <parenleft> <Greek_OMICRON> : "Ὁ" U1F49 # GREEK CAPITAL LETTER OMICRON WITH DASIA
++<dead_grave> <U1f48> : "Ὂ" U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
++<Multi_key> <grave> <U1f48> : "Ὂ" U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
++<dead_grave> <U0313> <Greek_OMICRON> : "Ὂ" U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
++<dead_grave> <Multi_key> <parenright> <Greek_OMICRON> : "Ὂ" U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
++<Multi_key> <grave> <U0313> <Greek_OMICRON> : "Ὂ" U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
++<Multi_key> <grave> <parenright> <Greek_OMICRON> : "Ὂ" U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
++<combining_grave> <U1f48> : "Ὂ" U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
++<combining_grave> <U0313> <Greek_OMICRON> : "Ὂ" U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
++<combining_grave> <Multi_key> <parenright> <Greek_OMICRON> : "Ὂ" U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
++<dead_grave> <U1f49> : "Ὃ" U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
++<Multi_key> <grave> <U1f49> : "Ὃ" U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
++<dead_grave> <U0314> <Greek_OMICRON> : "Ὃ" U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
++<dead_grave> <Multi_key> <parenleft> <Greek_OMICRON> : "Ὃ" U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
++<Multi_key> <grave> <U0314> <Greek_OMICRON> : "Ὃ" U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
++<Multi_key> <grave> <parenleft> <Greek_OMICRON> : "Ὃ" U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
++<combining_grave> <U1f49> : "Ὃ" U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
++<combining_grave> <U0314> <Greek_OMICRON> : "Ὃ" U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
++<combining_grave> <Multi_key> <parenleft> <Greek_OMICRON> : "Ὃ" U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
++<dead_acute> <U1f48> : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
++<Multi_key> <acute> <U1f48> : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <U1f48> : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
++<dead_acute> <U0313> <Greek_OMICRON> : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
++<dead_acute> <Multi_key> <parenright> <Greek_OMICRON> : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
++<Multi_key> <acute> <U0313> <Greek_OMICRON> : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
++<Multi_key> <acute> <parenright> <Greek_OMICRON> : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <U0313> <Greek_OMICRON> : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <parenright> <Greek_OMICRON> : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
++<combining_acute> <U1f48> : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
++<combining_acute> <U0313> <Greek_OMICRON> : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
++<combining_acute> <Multi_key> <parenright> <Greek_OMICRON> : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
++<dead_acute> <U1f49> : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
++<Multi_key> <acute> <U1f49> : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <U1f49> : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
++<dead_acute> <U0314> <Greek_OMICRON> : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
++<dead_acute> <Multi_key> <parenleft> <Greek_OMICRON> : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
++<Multi_key> <acute> <U0314> <Greek_OMICRON> : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
++<Multi_key> <acute> <parenleft> <Greek_OMICRON> : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <U0314> <Greek_OMICRON> : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <parenleft> <Greek_OMICRON> : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
++<combining_acute> <U1f49> : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
++<combining_acute> <U0314> <Greek_OMICRON> : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
++<combining_acute> <Multi_key> <parenleft> <Greek_OMICRON> : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
++<U0313> <Greek_upsilon> : "ὐ" U1F50 # GREEK SMALL LETTER UPSILON WITH PSILI
++<Multi_key> <parenright> <Greek_upsilon> : "ὐ" U1F50 # GREEK SMALL LETTER UPSILON WITH PSILI
++<U0314> <Greek_upsilon> : "ὑ" U1F51 # GREEK SMALL LETTER UPSILON WITH DASIA
++<Multi_key> <parenleft> <Greek_upsilon> : "ὑ" U1F51 # GREEK SMALL LETTER UPSILON WITH DASIA
++<dead_grave> <U1f50> : "ὒ" U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
++<Multi_key> <grave> <U1f50> : "ὒ" U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
++<dead_grave> <U0313> <Greek_upsilon> : "ὒ" U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
++<dead_grave> <Multi_key> <parenright> <Greek_upsilon> : "ὒ" U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
++<Multi_key> <grave> <U0313> <Greek_upsilon> : "ὒ" U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
++<Multi_key> <grave> <parenright> <Greek_upsilon> : "ὒ" U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
++<combining_grave> <U1f50> : "ὒ" U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
++<combining_grave> <U0313> <Greek_upsilon> : "ὒ" U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
++<combining_grave> <Multi_key> <parenright> <Greek_upsilon> : "ὒ" U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
++<dead_grave> <U1f51> : "ὓ" U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
++<Multi_key> <grave> <U1f51> : "ὓ" U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
++<dead_grave> <U0314> <Greek_upsilon> : "ὓ" U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
++<dead_grave> <Multi_key> <parenleft> <Greek_upsilon> : "ὓ" U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
++<Multi_key> <grave> <U0314> <Greek_upsilon> : "ὓ" U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
++<Multi_key> <grave> <parenleft> <Greek_upsilon> : "ὓ" U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
++<combining_grave> <U1f51> : "ὓ" U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
++<combining_grave> <U0314> <Greek_upsilon> : "ὓ" U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
++<combining_grave> <Multi_key> <parenleft> <Greek_upsilon> : "ὓ" U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
++<dead_acute> <U1f50> : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
++<Multi_key> <acute> <U1f50> : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <U1f50> : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
++<dead_acute> <U0313> <Greek_upsilon> : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
++<dead_acute> <Multi_key> <parenright> <Greek_upsilon> : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
++<Multi_key> <acute> <U0313> <Greek_upsilon> : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
++<Multi_key> <acute> <parenright> <Greek_upsilon> : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <U0313> <Greek_upsilon> : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <parenright> <Greek_upsilon> : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
++<combining_acute> <U1f50> : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
++<combining_acute> <U0313> <Greek_upsilon> : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
++<combining_acute> <Multi_key> <parenright> <Greek_upsilon> : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
++<dead_acute> <U1f51> : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
++<Multi_key> <acute> <U1f51> : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <U1f51> : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
++<dead_acute> <U0314> <Greek_upsilon> : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
++<dead_acute> <Multi_key> <parenleft> <Greek_upsilon> : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
++<Multi_key> <acute> <U0314> <Greek_upsilon> : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
++<Multi_key> <acute> <parenleft> <Greek_upsilon> : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <U0314> <Greek_upsilon> : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <parenleft> <Greek_upsilon> : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
++<combining_acute> <U1f51> : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
++<combining_acute> <U0314> <Greek_upsilon> : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
++<combining_acute> <Multi_key> <parenleft> <Greek_upsilon> : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
++<U0342> <U1f50> : "ὖ" U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
++<dead_tilde> <U1f50> : "ὖ" U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
++<Multi_key> <asciitilde> <U1f50> : "ὖ" U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
++<U0342> <U0313> <Greek_upsilon> : "ὖ" U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
++<U0342> <Multi_key> <parenright> <Greek_upsilon> : "ὖ" U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
++<dead_tilde> <U0313> <Greek_upsilon> : "ὖ" U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
++<dead_tilde> <Multi_key> <parenright> <Greek_upsilon> : "ὖ" U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
++<Multi_key> <asciitilde> <U0313> <Greek_upsilon> : "ὖ" U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
++<Multi_key> <asciitilde> <parenright> <Greek_upsilon> : "ὖ" U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
++<U0342> <U1f51> : "ὗ" U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
++<dead_tilde> <U1f51> : "ὗ" U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <U1f51> : "ὗ" U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
++<U0342> <U0314> <Greek_upsilon> : "ὗ" U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
++<U0342> <Multi_key> <parenleft> <Greek_upsilon> : "ὗ" U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
++<dead_tilde> <U0314> <Greek_upsilon> : "ὗ" U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
++<dead_tilde> <Multi_key> <parenleft> <Greek_upsilon> : "ὗ" U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <U0314> <Greek_upsilon> : "ὗ" U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <parenleft> <Greek_upsilon> : "ὗ" U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
++<U0314> <Greek_UPSILON> : "Ὑ" U1F59 # GREEK CAPITAL LETTER UPSILON WITH DASIA
++<Multi_key> <parenleft> <Greek_UPSILON> : "Ὑ" U1F59 # GREEK CAPITAL LETTER UPSILON WITH DASIA
++<dead_grave> <U1f59> : "Ὓ" U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
++<Multi_key> <grave> <U1f59> : "Ὓ" U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
++<dead_grave> <U0314> <Greek_UPSILON> : "Ὓ" U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
++<dead_grave> <Multi_key> <parenleft> <Greek_UPSILON> : "Ὓ" U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
++<Multi_key> <grave> <U0314> <Greek_UPSILON> : "Ὓ" U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
++<Multi_key> <grave> <parenleft> <Greek_UPSILON> : "Ὓ" U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
++<combining_grave> <U1f59> : "Ὓ" U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
++<combining_grave> <U0314> <Greek_UPSILON> : "Ὓ" U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
++<combining_grave> <Multi_key> <parenleft> <Greek_UPSILON> : "Ὓ" U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
++<dead_acute> <U1f59> : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
++<Multi_key> <acute> <U1f59> : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <U1f59> : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
++<dead_acute> <U0314> <Greek_UPSILON> : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
++<dead_acute> <Multi_key> <parenleft> <Greek_UPSILON> : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
++<Multi_key> <acute> <U0314> <Greek_UPSILON> : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
++<Multi_key> <acute> <parenleft> <Greek_UPSILON> : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <U0314> <Greek_UPSILON> : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <parenleft> <Greek_UPSILON> : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
++<combining_acute> <U1f59> : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
++<combining_acute> <U0314> <Greek_UPSILON> : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
++<combining_acute> <Multi_key> <parenleft> <Greek_UPSILON> : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
++<U0342> <U1f59> : "Ὗ" U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
++<dead_tilde> <U1f59> : "Ὗ" U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <U1f59> : "Ὗ" U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
++<U0342> <U0314> <Greek_UPSILON> : "Ὗ" U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
++<U0342> <Multi_key> <parenleft> <Greek_UPSILON> : "Ὗ" U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
++<dead_tilde> <U0314> <Greek_UPSILON> : "Ὗ" U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
++<dead_tilde> <Multi_key> <parenleft> <Greek_UPSILON> : "Ὗ" U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <U0314> <Greek_UPSILON> : "Ὗ" U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <parenleft> <Greek_UPSILON> : "Ὗ" U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
++<U0313> <Greek_omega> : "ὠ" U1F60 # GREEK SMALL LETTER OMEGA WITH PSILI
++<Multi_key> <parenright> <Greek_omega> : "ὠ" U1F60 # GREEK SMALL LETTER OMEGA WITH PSILI
++<U0314> <Greek_omega> : "ὡ" U1F61 # GREEK SMALL LETTER OMEGA WITH DASIA
++<Multi_key> <parenleft> <Greek_omega> : "ὡ" U1F61 # GREEK SMALL LETTER OMEGA WITH DASIA
++<dead_grave> <U1f60> : "ὢ" U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
++<Multi_key> <grave> <U1f60> : "ὢ" U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
++<dead_grave> <U0313> <Greek_omega> : "ὢ" U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
++<dead_grave> <Multi_key> <parenright> <Greek_omega> : "ὢ" U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
++<Multi_key> <grave> <U0313> <Greek_omega> : "ὢ" U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
++<Multi_key> <grave> <parenright> <Greek_omega> : "ὢ" U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
++<combining_grave> <U1f60> : "ὢ" U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
++<combining_grave> <U0313> <Greek_omega> : "ὢ" U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
++<combining_grave> <Multi_key> <parenright> <Greek_omega> : "ὢ" U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
++<dead_grave> <U1f61> : "ὣ" U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
++<Multi_key> <grave> <U1f61> : "ὣ" U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
++<dead_grave> <U0314> <Greek_omega> : "ὣ" U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
++<dead_grave> <Multi_key> <parenleft> <Greek_omega> : "ὣ" U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
++<Multi_key> <grave> <U0314> <Greek_omega> : "ὣ" U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
++<Multi_key> <grave> <parenleft> <Greek_omega> : "ὣ" U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
++<combining_grave> <U1f61> : "ὣ" U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
++<combining_grave> <U0314> <Greek_omega> : "ὣ" U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
++<combining_grave> <Multi_key> <parenleft> <Greek_omega> : "ὣ" U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
++<dead_acute> <U1f60> : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
++<Multi_key> <acute> <U1f60> : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <U1f60> : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
++<dead_acute> <U0313> <Greek_omega> : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
++<dead_acute> <Multi_key> <parenright> <Greek_omega> : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
++<Multi_key> <acute> <U0313> <Greek_omega> : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
++<Multi_key> <acute> <parenright> <Greek_omega> : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <U0313> <Greek_omega> : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <parenright> <Greek_omega> : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
++<combining_acute> <U1f60> : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
++<combining_acute> <U0313> <Greek_omega> : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
++<combining_acute> <Multi_key> <parenright> <Greek_omega> : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
++<dead_acute> <U1f61> : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
++<Multi_key> <acute> <U1f61> : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <U1f61> : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
++<dead_acute> <U0314> <Greek_omega> : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
++<dead_acute> <Multi_key> <parenleft> <Greek_omega> : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
++<Multi_key> <acute> <U0314> <Greek_omega> : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
++<Multi_key> <acute> <parenleft> <Greek_omega> : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <U0314> <Greek_omega> : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <parenleft> <Greek_omega> : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
++<combining_acute> <U1f61> : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
++<combining_acute> <U0314> <Greek_omega> : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
++<combining_acute> <Multi_key> <parenleft> <Greek_omega> : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
++<U0342> <U1f60> : "ὦ" U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
++<dead_tilde> <U1f60> : "ὦ" U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
++<Multi_key> <asciitilde> <U1f60> : "ὦ" U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
++<U0342> <U0313> <Greek_omega> : "ὦ" U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
++<U0342> <Multi_key> <parenright> <Greek_omega> : "ὦ" U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
++<dead_tilde> <U0313> <Greek_omega> : "ὦ" U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
++<dead_tilde> <Multi_key> <parenright> <Greek_omega> : "ὦ" U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
++<Multi_key> <asciitilde> <U0313> <Greek_omega> : "ὦ" U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
++<Multi_key> <asciitilde> <parenright> <Greek_omega> : "ὦ" U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
++<U0342> <U1f61> : "ὧ" U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
++<dead_tilde> <U1f61> : "ὧ" U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <U1f61> : "ὧ" U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
++<U0342> <U0314> <Greek_omega> : "ὧ" U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
++<U0342> <Multi_key> <parenleft> <Greek_omega> : "ὧ" U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
++<dead_tilde> <U0314> <Greek_omega> : "ὧ" U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
++<dead_tilde> <Multi_key> <parenleft> <Greek_omega> : "ὧ" U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <U0314> <Greek_omega> : "ὧ" U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <parenleft> <Greek_omega> : "ὧ" U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
++<U0313> <Greek_OMEGA> : "Ὠ" U1F68 # GREEK CAPITAL LETTER OMEGA WITH PSILI
++<Multi_key> <parenright> <Greek_OMEGA> : "Ὠ" U1F68 # GREEK CAPITAL LETTER OMEGA WITH PSILI
++<U0314> <Greek_OMEGA> : "Ὡ" U1F69 # GREEK CAPITAL LETTER OMEGA WITH DASIA
++<Multi_key> <parenleft> <Greek_OMEGA> : "Ὡ" U1F69 # GREEK CAPITAL LETTER OMEGA WITH DASIA
++<dead_grave> <U1f68> : "Ὢ" U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
++<Multi_key> <grave> <U1f68> : "Ὢ" U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
++<dead_grave> <U0313> <Greek_OMEGA> : "Ὢ" U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
++<dead_grave> <Multi_key> <parenright> <Greek_OMEGA> : "Ὢ" U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
++<Multi_key> <grave> <U0313> <Greek_OMEGA> : "Ὢ" U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
++<Multi_key> <grave> <parenright> <Greek_OMEGA> : "Ὢ" U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
++<combining_grave> <U1f68> : "Ὢ" U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
++<combining_grave> <U0313> <Greek_OMEGA> : "Ὢ" U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
++<combining_grave> <Multi_key> <parenright> <Greek_OMEGA> : "Ὢ" U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
++<dead_grave> <U1f69> : "Ὣ" U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
++<Multi_key> <grave> <U1f69> : "Ὣ" U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
++<dead_grave> <U0314> <Greek_OMEGA> : "Ὣ" U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
++<dead_grave> <Multi_key> <parenleft> <Greek_OMEGA> : "Ὣ" U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
++<Multi_key> <grave> <U0314> <Greek_OMEGA> : "Ὣ" U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
++<Multi_key> <grave> <parenleft> <Greek_OMEGA> : "Ὣ" U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
++<combining_grave> <U1f69> : "Ὣ" U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
++<combining_grave> <U0314> <Greek_OMEGA> : "Ὣ" U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
++<combining_grave> <Multi_key> <parenleft> <Greek_OMEGA> : "Ὣ" U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
++<dead_acute> <U1f68> : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
++<Multi_key> <acute> <U1f68> : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <U1f68> : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
++<dead_acute> <U0313> <Greek_OMEGA> : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
++<dead_acute> <Multi_key> <parenright> <Greek_OMEGA> : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
++<Multi_key> <acute> <U0313> <Greek_OMEGA> : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
++<Multi_key> <acute> <parenright> <Greek_OMEGA> : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <U0313> <Greek_OMEGA> : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
++<Multi_key> <apostrophe> <parenright> <Greek_OMEGA> : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
++<combining_acute> <U1f68> : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
++<combining_acute> <U0313> <Greek_OMEGA> : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
++<combining_acute> <Multi_key> <parenright> <Greek_OMEGA> : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
++<dead_acute> <U1f69> : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
++<Multi_key> <acute> <U1f69> : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <U1f69> : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
++<dead_acute> <U0314> <Greek_OMEGA> : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
++<dead_acute> <Multi_key> <parenleft> <Greek_OMEGA> : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
++<Multi_key> <acute> <U0314> <Greek_OMEGA> : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
++<Multi_key> <acute> <parenleft> <Greek_OMEGA> : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <U0314> <Greek_OMEGA> : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
++<Multi_key> <apostrophe> <parenleft> <Greek_OMEGA> : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
++<combining_acute> <U1f69> : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
++<combining_acute> <U0314> <Greek_OMEGA> : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
++<combining_acute> <Multi_key> <parenleft> <Greek_OMEGA> : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
++<U0342> <U1f68> : "Ὦ" U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
++<dead_tilde> <U1f68> : "Ὦ" U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
++<Multi_key> <asciitilde> <U1f68> : "Ὦ" U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
++<U0342> <U0313> <Greek_OMEGA> : "Ὦ" U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
++<U0342> <Multi_key> <parenright> <Greek_OMEGA> : "Ὦ" U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
++<dead_tilde> <U0313> <Greek_OMEGA> : "Ὦ" U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
++<dead_tilde> <Multi_key> <parenright> <Greek_OMEGA> : "Ὦ" U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
++<Multi_key> <asciitilde> <U0313> <Greek_OMEGA> : "Ὦ" U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
++<Multi_key> <asciitilde> <parenright> <Greek_OMEGA> : "Ὦ" U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
++<U0342> <U1f69> : "Ὧ" U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
++<dead_tilde> <U1f69> : "Ὧ" U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <U1f69> : "Ὧ" U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
++<U0342> <U0314> <Greek_OMEGA> : "Ὧ" U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
++<U0342> <Multi_key> <parenleft> <Greek_OMEGA> : "Ὧ" U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
++<dead_tilde> <U0314> <Greek_OMEGA> : "Ὧ" U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
++<dead_tilde> <Multi_key> <parenleft> <Greek_OMEGA> : "Ὧ" U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <U0314> <Greek_OMEGA> : "Ὧ" U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
++<Multi_key> <asciitilde> <parenleft> <Greek_OMEGA> : "Ὧ" U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
++<dead_grave> <Greek_alpha> : "ὰ" U1F70 # GREEK SMALL LETTER ALPHA WITH VARIA
++<Multi_key> <grave> <Greek_alpha> : "ὰ" U1F70 # GREEK SMALL LETTER ALPHA WITH VARIA
++<combining_grave> <Greek_alpha> : "ὰ" U1F70 # GREEK SMALL LETTER ALPHA WITH VARIA
++<dead_grave> <Greek_epsilon> : "ὲ" U1F72 # GREEK SMALL LETTER EPSILON WITH VARIA
++<Multi_key> <grave> <Greek_epsilon> : "ὲ" U1F72 # GREEK SMALL LETTER EPSILON WITH VARIA
++<combining_grave> <Greek_epsilon> : "ὲ" U1F72 # GREEK SMALL LETTER EPSILON WITH VARIA
++<dead_grave> <Greek_eta> : "ὴ" U1F74 # GREEK SMALL LETTER ETA WITH VARIA
++<Multi_key> <grave> <Greek_eta> : "ὴ" U1F74 # GREEK SMALL LETTER ETA WITH VARIA
++<combining_grave> <Greek_eta> : "ὴ" U1F74 # GREEK SMALL LETTER ETA WITH VARIA
++<dead_grave> <Greek_iota> : "ὶ" U1F76 # GREEK SMALL LETTER IOTA WITH VARIA
++<Multi_key> <grave> <Greek_iota> : "ὶ" U1F76 # GREEK SMALL LETTER IOTA WITH VARIA
++<combining_grave> <Greek_iota> : "ὶ" U1F76 # GREEK SMALL LETTER IOTA WITH VARIA
++<dead_grave> <Greek_omicron> : "ὸ" U1F78 # GREEK SMALL LETTER OMICRON WITH VARIA
++<Multi_key> <grave> <Greek_omicron> : "ὸ" U1F78 # GREEK SMALL LETTER OMICRON WITH VARIA
++<combining_grave> <Greek_omicron> : "ὸ" U1F78 # GREEK SMALL LETTER OMICRON WITH VARIA
++<dead_grave> <Greek_upsilon> : "ὺ" U1F7A # GREEK SMALL LETTER UPSILON WITH VARIA
++<Multi_key> <grave> <Greek_upsilon> : "ὺ" U1F7A # GREEK SMALL LETTER UPSILON WITH VARIA
++<combining_grave> <Greek_upsilon> : "ὺ" U1F7A # GREEK SMALL LETTER UPSILON WITH VARIA
++<dead_grave> <Greek_omega> : "ὼ" U1F7C # GREEK SMALL LETTER OMEGA WITH VARIA
++<Multi_key> <grave> <Greek_omega> : "ὼ" U1F7C # GREEK SMALL LETTER OMEGA WITH VARIA
++<combining_grave> <Greek_omega> : "ὼ" U1F7C # GREEK SMALL LETTER OMEGA WITH VARIA
++<dead_iota> <U1f00> : "ᾀ" U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f00> : "ᾀ" U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
++<dead_iota> <U0313> <Greek_alpha> : "ᾀ" U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <parenright> <Greek_alpha> : "ᾀ" U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U0313> <Greek_alpha> : "ᾀ" U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <parenright> <Greek_alpha> : "ᾀ" U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
++<dead_iota> <U1f01> : "ᾁ" U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f01> : "ᾁ" U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
++<dead_iota> <U0314> <Greek_alpha> : "ᾁ" U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <parenleft> <Greek_alpha> : "ᾁ" U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U0314> <Greek_alpha> : "ᾁ" U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <parenleft> <Greek_alpha> : "ᾁ" U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
++<dead_iota> <U1f02> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f02> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <dead_grave> <U1f00> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <U1f00> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <U1f00> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <U1f00> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <dead_grave> <U0313> <Greek_alpha> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <dead_grave> <Multi_key> <parenright> <Greek_alpha> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <U0313> <Greek_alpha> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <parenright> <Greek_alpha> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <U0313> <Greek_alpha> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <parenright> <Greek_alpha> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <U0313> <Greek_alpha> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <parenright> <Greek_alpha> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <combining_grave> <U1f00> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <U1f00> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <combining_grave> <U0313> <Greek_alpha> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <combining_grave> <Multi_key> <parenright> <Greek_alpha> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <U0313> <Greek_alpha> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <parenright> <Greek_alpha> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <U1f03> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f03> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <dead_grave> <U1f01> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <U1f01> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <U1f01> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <U1f01> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <dead_grave> <U0314> <Greek_alpha> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <dead_grave> <Multi_key> <parenleft> <Greek_alpha> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <U0314> <Greek_alpha> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <parenleft> <Greek_alpha> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <U0314> <Greek_alpha> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <parenleft> <Greek_alpha> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <U0314> <Greek_alpha> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <parenleft> <Greek_alpha> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <combining_grave> <U1f01> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <U1f01> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <combining_grave> <U0314> <Greek_alpha> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <combining_grave> <Multi_key> <parenleft> <Greek_alpha> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <U0314> <Greek_alpha> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <parenleft> <Greek_alpha> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <U1f04> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f04> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <dead_acute> <U1f00> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <U1f00> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <U1f00> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <U1f00> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <U1f00> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <U1f00> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <dead_acute> <U0313> <Greek_alpha> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <dead_acute> <Multi_key> <parenright> <Greek_alpha> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <U0313> <Greek_alpha> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <parenright> <Greek_alpha> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <U0313> <Greek_alpha> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <parenright> <Greek_alpha> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <U0313> <Greek_alpha> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <parenright> <Greek_alpha> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <U0313> <Greek_alpha> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <parenright> <Greek_alpha> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <U0313> <Greek_alpha> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <parenright> <Greek_alpha> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <combining_acute> <U1f00> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <U1f00> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <combining_acute> <U0313> <Greek_alpha> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <combining_acute> <Multi_key> <parenright> <Greek_alpha> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <U0313> <Greek_alpha> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <parenright> <Greek_alpha> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <U1f05> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f05> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <dead_acute> <U1f01> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <U1f01> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <U1f01> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <U1f01> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <U1f01> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <U1f01> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <dead_acute> <U0314> <Greek_alpha> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <dead_acute> <Multi_key> <parenleft> <Greek_alpha> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <U0314> <Greek_alpha> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <parenleft> <Greek_alpha> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <U0314> <Greek_alpha> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <parenleft> <Greek_alpha> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <U0314> <Greek_alpha> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <parenleft> <Greek_alpha> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <U0314> <Greek_alpha> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <parenleft> <Greek_alpha> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <U0314> <Greek_alpha> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <parenleft> <Greek_alpha> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <combining_acute> <U1f01> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <U1f01> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <combining_acute> <U0314> <Greek_alpha> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <combining_acute> <Multi_key> <parenleft> <Greek_alpha> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <U0314> <Greek_alpha> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <parenleft> <Greek_alpha> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <U1f06> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f06> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <U0342> <U1f00> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <dead_tilde> <U1f00> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <U1f00> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <U1f00> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <U1f00> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <U1f00> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <U0342> <U0313> <Greek_alpha> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <U0342> <Multi_key> <parenright> <Greek_alpha> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <dead_tilde> <U0313> <Greek_alpha> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <dead_tilde> <Multi_key> <parenright> <Greek_alpha> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <U0313> <Greek_alpha> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <parenright> <Greek_alpha> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <U0313> <Greek_alpha> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <parenright> <Greek_alpha> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <U0313> <Greek_alpha> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <parenright> <Greek_alpha> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <U0313> <Greek_alpha> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <parenright> <Greek_alpha> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <U1f07> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f07> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <U0342> <U1f01> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <dead_tilde> <U1f01> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <U1f01> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <U1f01> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <U1f01> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <U1f01> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <U0342> <U0314> <Greek_alpha> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <U0342> <Multi_key> <parenleft> <Greek_alpha> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <dead_tilde> <U0314> <Greek_alpha> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <dead_tilde> <Multi_key> <parenleft> <Greek_alpha> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <U0314> <Greek_alpha> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <parenleft> <Greek_alpha> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <U0314> <Greek_alpha> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <parenleft> <Greek_alpha> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <U0314> <Greek_alpha> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <parenleft> <Greek_alpha> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <U0314> <Greek_alpha> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <parenleft> <Greek_alpha> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <U1f08> : "ᾈ" U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f08> : "ᾈ" U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
++<dead_iota> <U0313> <Greek_ALPHA> : "ᾈ" U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <parenright> <Greek_ALPHA> : "ᾈ" U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U0313> <Greek_ALPHA> : "ᾈ" U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <parenright> <Greek_ALPHA> : "ᾈ" U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
++<dead_iota> <U1f09> : "ᾉ" U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f09> : "ᾉ" U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
++<dead_iota> <U0314> <Greek_ALPHA> : "ᾉ" U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <parenleft> <Greek_ALPHA> : "ᾉ" U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U0314> <Greek_ALPHA> : "ᾉ" U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <parenleft> <Greek_ALPHA> : "ᾉ" U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
++<dead_iota> <U1f0a> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f0a> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <dead_grave> <U1f08> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <U1f08> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <U1f08> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <U1f08> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <dead_grave> <U0313> <Greek_ALPHA> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <dead_grave> <Multi_key> <parenright> <Greek_ALPHA> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <U0313> <Greek_ALPHA> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <parenright> <Greek_ALPHA> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <U0313> <Greek_ALPHA> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <parenright> <Greek_ALPHA> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <U0313> <Greek_ALPHA> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <parenright> <Greek_ALPHA> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <combining_grave> <U1f08> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <U1f08> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <combining_grave> <U0313> <Greek_ALPHA> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <combining_grave> <Multi_key> <parenright> <Greek_ALPHA> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <U0313> <Greek_ALPHA> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <parenright> <Greek_ALPHA> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <U1f0b> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f0b> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <dead_grave> <U1f09> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <U1f09> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <U1f09> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <U1f09> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <dead_grave> <U0314> <Greek_ALPHA> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <dead_grave> <Multi_key> <parenleft> <Greek_ALPHA> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <U0314> <Greek_ALPHA> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <parenleft> <Greek_ALPHA> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <U0314> <Greek_ALPHA> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <parenleft> <Greek_ALPHA> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <U0314> <Greek_ALPHA> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <parenleft> <Greek_ALPHA> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <combining_grave> <U1f09> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <U1f09> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <combining_grave> <U0314> <Greek_ALPHA> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <combining_grave> <Multi_key> <parenleft> <Greek_ALPHA> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <U0314> <Greek_ALPHA> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <parenleft> <Greek_ALPHA> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <U1f0c> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f0c> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <dead_acute> <U1f08> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <U1f08> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <U1f08> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <U1f08> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <U1f08> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <U1f08> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <dead_acute> <U0313> <Greek_ALPHA> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <dead_acute> <Multi_key> <parenright> <Greek_ALPHA> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <U0313> <Greek_ALPHA> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <parenright> <Greek_ALPHA> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <U0313> <Greek_ALPHA> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <parenright> <Greek_ALPHA> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <U0313> <Greek_ALPHA> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <parenright> <Greek_ALPHA> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <U0313> <Greek_ALPHA> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <parenright> <Greek_ALPHA> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <U0313> <Greek_ALPHA> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <parenright> <Greek_ALPHA> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <combining_acute> <U1f08> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <U1f08> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <combining_acute> <U0313> <Greek_ALPHA> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <combining_acute> <Multi_key> <parenright> <Greek_ALPHA> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <U0313> <Greek_ALPHA> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <parenright> <Greek_ALPHA> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <U1f0d> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f0d> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <dead_acute> <U1f09> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <U1f09> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <U1f09> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <U1f09> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <U1f09> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <U1f09> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <dead_acute> <U0314> <Greek_ALPHA> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <dead_acute> <Multi_key> <parenleft> <Greek_ALPHA> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <U0314> <Greek_ALPHA> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <parenleft> <Greek_ALPHA> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <U0314> <Greek_ALPHA> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <parenleft> <Greek_ALPHA> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <U0314> <Greek_ALPHA> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <parenleft> <Greek_ALPHA> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <U0314> <Greek_ALPHA> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <parenleft> <Greek_ALPHA> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <U0314> <Greek_ALPHA> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <parenleft> <Greek_ALPHA> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <combining_acute> <U1f09> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <U1f09> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <combining_acute> <U0314> <Greek_ALPHA> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <combining_acute> <Multi_key> <parenleft> <Greek_ALPHA> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <U0314> <Greek_ALPHA> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <parenleft> <Greek_ALPHA> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <U1f0e> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f0e> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <U0342> <U1f08> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <dead_tilde> <U1f08> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <U1f08> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <U1f08> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <U1f08> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <U1f08> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <U0342> <U0313> <Greek_ALPHA> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <U0342> <Multi_key> <parenright> <Greek_ALPHA> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <dead_tilde> <U0313> <Greek_ALPHA> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <dead_tilde> <Multi_key> <parenright> <Greek_ALPHA> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <U0313> <Greek_ALPHA> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <parenright> <Greek_ALPHA> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <U0313> <Greek_ALPHA> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <parenright> <Greek_ALPHA> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <U0313> <Greek_ALPHA> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <parenright> <Greek_ALPHA> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <U0313> <Greek_ALPHA> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <parenright> <Greek_ALPHA> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <U1f0f> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f0f> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <U0342> <U1f09> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <dead_tilde> <U1f09> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <U1f09> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <U1f09> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <U1f09> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <U1f09> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <U0342> <U0314> <Greek_ALPHA> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <U0342> <Multi_key> <parenleft> <Greek_ALPHA> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <dead_tilde> <U0314> <Greek_ALPHA> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <dead_tilde> <Multi_key> <parenleft> <Greek_ALPHA> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <U0314> <Greek_ALPHA> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <parenleft> <Greek_ALPHA> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <U0314> <Greek_ALPHA> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <parenleft> <Greek_ALPHA> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <U0314> <Greek_ALPHA> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <parenleft> <Greek_ALPHA> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <U0314> <Greek_ALPHA> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <parenleft> <Greek_ALPHA> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <U1f20> : "ᾐ" U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f20> : "ᾐ" U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
++<dead_iota> <U0313> <Greek_eta> : "ᾐ" U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <parenright> <Greek_eta> : "ᾐ" U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U0313> <Greek_eta> : "ᾐ" U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <parenright> <Greek_eta> : "ᾐ" U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
++<dead_iota> <U1f21> : "ᾑ" U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f21> : "ᾑ" U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
++<dead_iota> <U0314> <Greek_eta> : "ᾑ" U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <parenleft> <Greek_eta> : "ᾑ" U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U0314> <Greek_eta> : "ᾑ" U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <parenleft> <Greek_eta> : "ᾑ" U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
++<dead_iota> <U1f22> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f22> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <dead_grave> <U1f20> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <U1f20> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <U1f20> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <U1f20> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <dead_grave> <U0313> <Greek_eta> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <dead_grave> <Multi_key> <parenright> <Greek_eta> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <U0313> <Greek_eta> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <parenright> <Greek_eta> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <U0313> <Greek_eta> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <parenright> <Greek_eta> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <U0313> <Greek_eta> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <parenright> <Greek_eta> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <combining_grave> <U1f20> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <U1f20> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <combining_grave> <U0313> <Greek_eta> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <combining_grave> <Multi_key> <parenright> <Greek_eta> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <U0313> <Greek_eta> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <parenright> <Greek_eta> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <U1f23> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f23> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <dead_grave> <U1f21> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <U1f21> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <U1f21> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <U1f21> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <dead_grave> <U0314> <Greek_eta> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <dead_grave> <Multi_key> <parenleft> <Greek_eta> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <U0314> <Greek_eta> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <parenleft> <Greek_eta> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <U0314> <Greek_eta> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <parenleft> <Greek_eta> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <U0314> <Greek_eta> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <parenleft> <Greek_eta> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <combining_grave> <U1f21> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <U1f21> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <combining_grave> <U0314> <Greek_eta> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <combining_grave> <Multi_key> <parenleft> <Greek_eta> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <U0314> <Greek_eta> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <parenleft> <Greek_eta> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <U1f24> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f24> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <dead_acute> <U1f20> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <U1f20> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <U1f20> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <U1f20> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <U1f20> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <U1f20> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <dead_acute> <U0313> <Greek_eta> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <dead_acute> <Multi_key> <parenright> <Greek_eta> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <U0313> <Greek_eta> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <parenright> <Greek_eta> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <U0313> <Greek_eta> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <parenright> <Greek_eta> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <U0313> <Greek_eta> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <parenright> <Greek_eta> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <U0313> <Greek_eta> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <parenright> <Greek_eta> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <U0313> <Greek_eta> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <parenright> <Greek_eta> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <combining_acute> <U1f20> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <U1f20> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <combining_acute> <U0313> <Greek_eta> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <combining_acute> <Multi_key> <parenright> <Greek_eta> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <U0313> <Greek_eta> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <parenright> <Greek_eta> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <U1f25> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f25> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <dead_acute> <U1f21> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <U1f21> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <U1f21> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <U1f21> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <U1f21> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <U1f21> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <dead_acute> <U0314> <Greek_eta> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <dead_acute> <Multi_key> <parenleft> <Greek_eta> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <U0314> <Greek_eta> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <parenleft> <Greek_eta> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <U0314> <Greek_eta> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <parenleft> <Greek_eta> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <U0314> <Greek_eta> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <parenleft> <Greek_eta> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <U0314> <Greek_eta> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <parenleft> <Greek_eta> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <U0314> <Greek_eta> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <parenleft> <Greek_eta> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <combining_acute> <U1f21> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <U1f21> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <combining_acute> <U0314> <Greek_eta> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <combining_acute> <Multi_key> <parenleft> <Greek_eta> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <U0314> <Greek_eta> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <parenleft> <Greek_eta> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <U1f26> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f26> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <U0342> <U1f20> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <dead_tilde> <U1f20> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <U1f20> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <U1f20> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <U1f20> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <U1f20> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <U0342> <U0313> <Greek_eta> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <U0342> <Multi_key> <parenright> <Greek_eta> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <dead_tilde> <U0313> <Greek_eta> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <dead_tilde> <Multi_key> <parenright> <Greek_eta> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <U0313> <Greek_eta> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <parenright> <Greek_eta> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <U0313> <Greek_eta> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <parenright> <Greek_eta> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <U0313> <Greek_eta> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <parenright> <Greek_eta> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <U0313> <Greek_eta> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <parenright> <Greek_eta> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <U1f27> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f27> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <U0342> <U1f21> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <dead_tilde> <U1f21> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <U1f21> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <U1f21> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <U1f21> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <U1f21> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <U0342> <U0314> <Greek_eta> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <U0342> <Multi_key> <parenleft> <Greek_eta> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <dead_tilde> <U0314> <Greek_eta> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <dead_tilde> <Multi_key> <parenleft> <Greek_eta> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <U0314> <Greek_eta> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <parenleft> <Greek_eta> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <U0314> <Greek_eta> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <parenleft> <Greek_eta> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <U0314> <Greek_eta> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <parenleft> <Greek_eta> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <U0314> <Greek_eta> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <parenleft> <Greek_eta> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <U1f28> : "ᾘ" U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f28> : "ᾘ" U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
++<dead_iota> <U0313> <Greek_ETA> : "ᾘ" U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <parenright> <Greek_ETA> : "ᾘ" U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U0313> <Greek_ETA> : "ᾘ" U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <parenright> <Greek_ETA> : "ᾘ" U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
++<dead_iota> <U1f29> : "ᾙ" U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f29> : "ᾙ" U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
++<dead_iota> <U0314> <Greek_ETA> : "ᾙ" U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <parenleft> <Greek_ETA> : "ᾙ" U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U0314> <Greek_ETA> : "ᾙ" U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <parenleft> <Greek_ETA> : "ᾙ" U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
++<dead_iota> <U1f2a> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f2a> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <dead_grave> <U1f28> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <U1f28> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <U1f28> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <U1f28> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <dead_grave> <U0313> <Greek_ETA> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <dead_grave> <Multi_key> <parenright> <Greek_ETA> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <U0313> <Greek_ETA> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <parenright> <Greek_ETA> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <U0313> <Greek_ETA> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <parenright> <Greek_ETA> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <U0313> <Greek_ETA> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <parenright> <Greek_ETA> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <combining_grave> <U1f28> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <U1f28> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <combining_grave> <U0313> <Greek_ETA> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <combining_grave> <Multi_key> <parenright> <Greek_ETA> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <U0313> <Greek_ETA> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <parenright> <Greek_ETA> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <U1f2b> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f2b> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <dead_grave> <U1f29> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <U1f29> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <U1f29> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <U1f29> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <dead_grave> <U0314> <Greek_ETA> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <dead_grave> <Multi_key> <parenleft> <Greek_ETA> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <U0314> <Greek_ETA> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <parenleft> <Greek_ETA> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <U0314> <Greek_ETA> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <parenleft> <Greek_ETA> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <U0314> <Greek_ETA> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <parenleft> <Greek_ETA> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <combining_grave> <U1f29> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <U1f29> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <combining_grave> <U0314> <Greek_ETA> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <combining_grave> <Multi_key> <parenleft> <Greek_ETA> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <U0314> <Greek_ETA> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <parenleft> <Greek_ETA> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <U1f2c> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f2c> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <dead_acute> <U1f28> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <U1f28> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <U1f28> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <U1f28> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <U1f28> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <U1f28> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <dead_acute> <U0313> <Greek_ETA> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <dead_acute> <Multi_key> <parenright> <Greek_ETA> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <U0313> <Greek_ETA> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <parenright> <Greek_ETA> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <U0313> <Greek_ETA> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <parenright> <Greek_ETA> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <U0313> <Greek_ETA> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <parenright> <Greek_ETA> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <U0313> <Greek_ETA> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <parenright> <Greek_ETA> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <U0313> <Greek_ETA> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <parenright> <Greek_ETA> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <combining_acute> <U1f28> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <U1f28> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <combining_acute> <U0313> <Greek_ETA> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <combining_acute> <Multi_key> <parenright> <Greek_ETA> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <U0313> <Greek_ETA> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <parenright> <Greek_ETA> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <U1f2d> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f2d> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <dead_acute> <U1f29> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <U1f29> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <U1f29> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <U1f29> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <U1f29> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <U1f29> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <dead_acute> <U0314> <Greek_ETA> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <dead_acute> <Multi_key> <parenleft> <Greek_ETA> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <U0314> <Greek_ETA> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <parenleft> <Greek_ETA> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <U0314> <Greek_ETA> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <parenleft> <Greek_ETA> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <U0314> <Greek_ETA> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <parenleft> <Greek_ETA> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <U0314> <Greek_ETA> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <parenleft> <Greek_ETA> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <U0314> <Greek_ETA> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <parenleft> <Greek_ETA> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <combining_acute> <U1f29> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <U1f29> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <combining_acute> <U0314> <Greek_ETA> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <combining_acute> <Multi_key> <parenleft> <Greek_ETA> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <U0314> <Greek_ETA> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <parenleft> <Greek_ETA> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <U1f2e> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f2e> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <U0342> <U1f28> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <dead_tilde> <U1f28> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <U1f28> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <U1f28> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <U1f28> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <U1f28> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <U0342> <U0313> <Greek_ETA> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <U0342> <Multi_key> <parenright> <Greek_ETA> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <dead_tilde> <U0313> <Greek_ETA> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <dead_tilde> <Multi_key> <parenright> <Greek_ETA> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <U0313> <Greek_ETA> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <parenright> <Greek_ETA> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <U0313> <Greek_ETA> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <parenright> <Greek_ETA> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <U0313> <Greek_ETA> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <parenright> <Greek_ETA> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <U0313> <Greek_ETA> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <parenright> <Greek_ETA> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <U1f2f> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f2f> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <U0342> <U1f29> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <dead_tilde> <U1f29> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <U1f29> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <U1f29> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <U1f29> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <U1f29> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <U0342> <U0314> <Greek_ETA> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <U0342> <Multi_key> <parenleft> <Greek_ETA> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <dead_tilde> <U0314> <Greek_ETA> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <dead_tilde> <Multi_key> <parenleft> <Greek_ETA> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <U0314> <Greek_ETA> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <parenleft> <Greek_ETA> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <U0314> <Greek_ETA> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <parenleft> <Greek_ETA> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <U0314> <Greek_ETA> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <parenleft> <Greek_ETA> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <U0314> <Greek_ETA> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <parenleft> <Greek_ETA> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <U1f60> : "ᾠ" U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f60> : "ᾠ" U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
++<dead_iota> <U0313> <Greek_omega> : "ᾠ" U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <parenright> <Greek_omega> : "ᾠ" U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U0313> <Greek_omega> : "ᾠ" U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <parenright> <Greek_omega> : "ᾠ" U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
++<dead_iota> <U1f61> : "ᾡ" U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f61> : "ᾡ" U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
++<dead_iota> <U0314> <Greek_omega> : "ᾡ" U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <parenleft> <Greek_omega> : "ᾡ" U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U0314> <Greek_omega> : "ᾡ" U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <parenleft> <Greek_omega> : "ᾡ" U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
++<dead_iota> <U1f62> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f62> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <dead_grave> <U1f60> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <U1f60> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <U1f60> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <U1f60> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <dead_grave> <U0313> <Greek_omega> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <dead_grave> <Multi_key> <parenright> <Greek_omega> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <U0313> <Greek_omega> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <parenright> <Greek_omega> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <U0313> <Greek_omega> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <parenright> <Greek_omega> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <U0313> <Greek_omega> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <parenright> <Greek_omega> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <combining_grave> <U1f60> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <U1f60> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <combining_grave> <U0313> <Greek_omega> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <combining_grave> <Multi_key> <parenright> <Greek_omega> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <U0313> <Greek_omega> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <parenright> <Greek_omega> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <U1f63> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f63> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <dead_grave> <U1f61> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <U1f61> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <U1f61> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <U1f61> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <dead_grave> <U0314> <Greek_omega> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <dead_grave> <Multi_key> <parenleft> <Greek_omega> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <U0314> <Greek_omega> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <parenleft> <Greek_omega> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <U0314> <Greek_omega> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <parenleft> <Greek_omega> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <U0314> <Greek_omega> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <parenleft> <Greek_omega> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <combining_grave> <U1f61> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <U1f61> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <combining_grave> <U0314> <Greek_omega> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <combining_grave> <Multi_key> <parenleft> <Greek_omega> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <U0314> <Greek_omega> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <parenleft> <Greek_omega> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++<dead_iota> <U1f64> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f64> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <dead_acute> <U1f60> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <U1f60> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <U1f60> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <U1f60> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <U1f60> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <U1f60> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <dead_acute> <U0313> <Greek_omega> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <dead_acute> <Multi_key> <parenright> <Greek_omega> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <U0313> <Greek_omega> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <parenright> <Greek_omega> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <U0313> <Greek_omega> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <parenright> <Greek_omega> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <U0313> <Greek_omega> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <parenright> <Greek_omega> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <U0313> <Greek_omega> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <parenright> <Greek_omega> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <U0313> <Greek_omega> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <parenright> <Greek_omega> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <combining_acute> <U1f60> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <U1f60> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <combining_acute> <U0313> <Greek_omega> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <combining_acute> <Multi_key> <parenright> <Greek_omega> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <U0313> <Greek_omega> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <parenright> <Greek_omega> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <U1f65> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f65> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <dead_acute> <U1f61> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <U1f61> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <U1f61> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <U1f61> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <U1f61> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <U1f61> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <dead_acute> <U0314> <Greek_omega> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <dead_acute> <Multi_key> <parenleft> <Greek_omega> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <U0314> <Greek_omega> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <parenleft> <Greek_omega> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <U0314> <Greek_omega> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <parenleft> <Greek_omega> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <U0314> <Greek_omega> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <parenleft> <Greek_omega> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <U0314> <Greek_omega> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <parenleft> <Greek_omega> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <U0314> <Greek_omega> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <parenleft> <Greek_omega> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <combining_acute> <U1f61> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <U1f61> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <combining_acute> <U0314> <Greek_omega> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <combining_acute> <Multi_key> <parenleft> <Greek_omega> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <U0314> <Greek_omega> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <parenleft> <Greek_omega> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++<dead_iota> <U1f66> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f66> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <U0342> <U1f60> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <dead_tilde> <U1f60> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <U1f60> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <U1f60> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <U1f60> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <U1f60> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <U0342> <U0313> <Greek_omega> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <U0342> <Multi_key> <parenright> <Greek_omega> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <dead_tilde> <U0313> <Greek_omega> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <dead_tilde> <Multi_key> <parenright> <Greek_omega> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <U0313> <Greek_omega> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <parenright> <Greek_omega> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <U0313> <Greek_omega> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <parenright> <Greek_omega> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <U0313> <Greek_omega> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <parenright> <Greek_omega> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <U0313> <Greek_omega> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <parenright> <Greek_omega> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <U1f67> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f67> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <U0342> <U1f61> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <dead_tilde> <U1f61> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <U1f61> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <U1f61> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <U1f61> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <U1f61> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <U0342> <U0314> <Greek_omega> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <U0342> <Multi_key> <parenleft> <Greek_omega> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <dead_tilde> <U0314> <Greek_omega> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <dead_tilde> <Multi_key> <parenleft> <Greek_omega> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <U0314> <Greek_omega> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <parenleft> <Greek_omega> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <U0314> <Greek_omega> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <parenleft> <Greek_omega> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <U0314> <Greek_omega> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <parenleft> <Greek_omega> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <U0314> <Greek_omega> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <parenleft> <Greek_omega> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <U1f68> : "ᾨ" U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f68> : "ᾨ" U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
++<dead_iota> <U0313> <Greek_OMEGA> : "ᾨ" U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <parenright> <Greek_OMEGA> : "ᾨ" U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U0313> <Greek_OMEGA> : "ᾨ" U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <parenright> <Greek_OMEGA> : "ᾨ" U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
++<dead_iota> <U1f69> : "ᾩ" U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f69> : "ᾩ" U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
++<dead_iota> <U0314> <Greek_OMEGA> : "ᾩ" U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <parenleft> <Greek_OMEGA> : "ᾩ" U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U0314> <Greek_OMEGA> : "ᾩ" U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <parenleft> <Greek_OMEGA> : "ᾩ" U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
++<dead_iota> <U1f6a> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f6a> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <dead_grave> <U1f68> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <U1f68> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <U1f68> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <U1f68> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <dead_grave> <U0313> <Greek_OMEGA> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <dead_grave> <Multi_key> <parenright> <Greek_OMEGA> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <U0313> <Greek_OMEGA> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <parenright> <Greek_OMEGA> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <U0313> <Greek_OMEGA> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <parenright> <Greek_OMEGA> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <U0313> <Greek_OMEGA> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <parenright> <Greek_OMEGA> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <combining_grave> <U1f68> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <U1f68> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <combining_grave> <U0313> <Greek_OMEGA> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <combining_grave> <Multi_key> <parenright> <Greek_OMEGA> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <U0313> <Greek_OMEGA> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <parenright> <Greek_OMEGA> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <U1f6b> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f6b> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <dead_grave> <U1f69> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <U1f69> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <U1f69> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <U1f69> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <dead_grave> <U0314> <Greek_OMEGA> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <dead_grave> <Multi_key> <parenleft> <Greek_OMEGA> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <U0314> <Greek_OMEGA> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <parenleft> <Greek_OMEGA> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <U0314> <Greek_OMEGA> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <parenleft> <Greek_OMEGA> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <U0314> <Greek_OMEGA> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <parenleft> <Greek_OMEGA> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <combining_grave> <U1f69> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <U1f69> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <combining_grave> <U0314> <Greek_OMEGA> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <combining_grave> <Multi_key> <parenleft> <Greek_OMEGA> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <U0314> <Greek_OMEGA> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <parenleft> <Greek_OMEGA> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++<dead_iota> <U1f6c> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f6c> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <dead_acute> <U1f68> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <U1f68> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <U1f68> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <U1f68> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <U1f68> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <U1f68> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <dead_acute> <U0313> <Greek_OMEGA> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <dead_acute> <Multi_key> <parenright> <Greek_OMEGA> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <U0313> <Greek_OMEGA> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <parenright> <Greek_OMEGA> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <U0313> <Greek_OMEGA> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <parenright> <Greek_OMEGA> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <U0313> <Greek_OMEGA> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <parenright> <Greek_OMEGA> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <U0313> <Greek_OMEGA> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <parenright> <Greek_OMEGA> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <U0313> <Greek_OMEGA> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <parenright> <Greek_OMEGA> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <combining_acute> <U1f68> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <U1f68> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <combining_acute> <U0313> <Greek_OMEGA> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <combining_acute> <Multi_key> <parenright> <Greek_OMEGA> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <U0313> <Greek_OMEGA> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <parenright> <Greek_OMEGA> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <U1f6d> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f6d> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <dead_acute> <U1f69> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <U1f69> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <U1f69> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <U1f69> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <U1f69> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <U1f69> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <dead_acute> <U0314> <Greek_OMEGA> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <dead_acute> <Multi_key> <parenleft> <Greek_OMEGA> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <U0314> <Greek_OMEGA> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <parenleft> <Greek_OMEGA> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <U0314> <Greek_OMEGA> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <parenleft> <Greek_OMEGA> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <U0314> <Greek_OMEGA> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <parenleft> <Greek_OMEGA> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <U0314> <Greek_OMEGA> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <parenleft> <Greek_OMEGA> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <U0314> <Greek_OMEGA> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <parenleft> <Greek_OMEGA> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <combining_acute> <U1f69> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <U1f69> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <combining_acute> <U0314> <Greek_OMEGA> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <combining_acute> <Multi_key> <parenleft> <Greek_OMEGA> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <U0314> <Greek_OMEGA> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <parenleft> <Greek_OMEGA> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++<dead_iota> <U1f6e> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f6e> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <U0342> <U1f68> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <dead_tilde> <U1f68> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <U1f68> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <U1f68> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <U1f68> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <U1f68> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <U0342> <U0313> <Greek_OMEGA> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <U0342> <Multi_key> <parenright> <Greek_OMEGA> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <dead_tilde> <U0313> <Greek_OMEGA> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <dead_tilde> <Multi_key> <parenright> <Greek_OMEGA> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <U0313> <Greek_OMEGA> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <parenright> <Greek_OMEGA> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <U0313> <Greek_OMEGA> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <parenright> <Greek_OMEGA> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <U0313> <Greek_OMEGA> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <parenright> <Greek_OMEGA> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <U0313> <Greek_OMEGA> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <parenright> <Greek_OMEGA> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <U1f6f> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f6f> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <U0342> <U1f69> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <dead_tilde> <U1f69> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <U1f69> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <U1f69> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <U1f69> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <U1f69> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <U0342> <U0314> <Greek_OMEGA> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <U0342> <Multi_key> <parenleft> <Greek_OMEGA> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <dead_tilde> <U0314> <Greek_OMEGA> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <dead_tilde> <Multi_key> <parenleft> <Greek_OMEGA> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <U0314> <Greek_OMEGA> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <parenleft> <Greek_OMEGA> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <U0314> <Greek_OMEGA> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <parenleft> <Greek_OMEGA> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <U0314> <Greek_OMEGA> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <parenleft> <Greek_OMEGA> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <U0314> <Greek_OMEGA> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <parenleft> <Greek_OMEGA> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++<dead_breve> <Greek_alpha> : "ᾰ" U1FB0 # GREEK SMALL LETTER ALPHA WITH VRACHY
++<Multi_key> <U> <Greek_alpha> : "ᾰ" U1FB0 # GREEK SMALL LETTER ALPHA WITH VRACHY
++<Multi_key> <b> <Greek_alpha> : "ᾰ" U1FB0 # GREEK SMALL LETTER ALPHA WITH VRACHY
++<dead_macron> <Greek_alpha> : "ᾱ" U1FB1 # GREEK SMALL LETTER ALPHA WITH MACRON
++<Multi_key> <macron> <Greek_alpha> : "ᾱ" U1FB1 # GREEK SMALL LETTER ALPHA WITH MACRON
++<Multi_key> <underscore> <Greek_alpha> : "ᾱ" U1FB1 # GREEK SMALL LETTER ALPHA WITH MACRON
++<dead_iota> <U1f70> : "ᾲ" U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f70> : "ᾲ" U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
++<dead_iota> <dead_grave> <Greek_alpha> : "ᾲ" U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <Greek_alpha> : "ᾲ" U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <Greek_alpha> : "ᾲ" U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <Greek_alpha> : "ᾲ" U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
++<dead_iota> <combining_grave> <Greek_alpha> : "ᾲ" U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <Greek_alpha> : "ᾲ" U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
++<dead_iota> <Greek_alpha> : "ᾳ" U1FB3 # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <Greek_alpha> : "ᾳ" U1FB3 # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
++<dead_iota> <Greek_alphaaccent> : "ᾴ" U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <Greek_alphaaccent> : "ᾴ" U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
++<dead_iota> <dead_acute> <Greek_alpha> : "ᾴ" U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <Greek_alpha> : "ᾴ" U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <Greek_alpha> : "ᾴ" U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <Greek_alpha> : "ᾴ" U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <Greek_alpha> : "ᾴ" U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <Greek_alpha> : "ᾴ" U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
++<dead_iota> <combining_acute> <Greek_alpha> : "ᾴ" U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <Greek_alpha> : "ᾴ" U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
++<U0342> <Greek_alpha> : "ᾶ" U1FB6 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
++<dead_tilde> <Greek_alpha> : "ᾶ" U1FB6 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
++<Multi_key> <asciitilde> <Greek_alpha> : "ᾶ" U1FB6 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
++<dead_iota> <U1fb6> : "ᾷ" U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1fb6> : "ᾷ" U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <U0342> <Greek_alpha> : "ᾷ" U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <dead_tilde> <Greek_alpha> : "ᾷ" U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <Greek_alpha> : "ᾷ" U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <Greek_alpha> : "ᾷ" U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <Greek_alpha> : "ᾷ" U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <Greek_alpha> : "ᾷ" U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
++<dead_breve> <Greek_ALPHA> : "Ᾰ" U1FB8 # GREEK CAPITAL LETTER ALPHA WITH VRACHY
++<Multi_key> <U> <Greek_ALPHA> : "Ᾰ" U1FB8 # GREEK CAPITAL LETTER ALPHA WITH VRACHY
++<Multi_key> <b> <Greek_ALPHA> : "Ᾰ" U1FB8 # GREEK CAPITAL LETTER ALPHA WITH VRACHY
++<dead_macron> <Greek_ALPHA> : "Ᾱ" U1FB9 # GREEK CAPITAL LETTER ALPHA WITH MACRON
++<Multi_key> <macron> <Greek_ALPHA> : "Ᾱ" U1FB9 # GREEK CAPITAL LETTER ALPHA WITH MACRON
++<Multi_key> <underscore> <Greek_ALPHA> : "Ᾱ" U1FB9 # GREEK CAPITAL LETTER ALPHA WITH MACRON
++<dead_grave> <Greek_ALPHA> : "Ὰ" U1FBA # GREEK CAPITAL LETTER ALPHA WITH VARIA
++<Multi_key> <grave> <Greek_ALPHA> : "Ὰ" U1FBA # GREEK CAPITAL LETTER ALPHA WITH VARIA
++<combining_grave> <Greek_ALPHA> : "Ὰ" U1FBA # GREEK CAPITAL LETTER ALPHA WITH VARIA
++<dead_iota> <Greek_ALPHA> : "ᾼ" U1FBC # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <Greek_ALPHA> : "ᾼ" U1FBC # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
++<Multi_key> <diaeresis> <U0342> : "῁" U1FC1 # GREEK DIALYTIKA AND PERISPOMENI
++<Multi_key> <diaeresis> <dead_tilde> : "῁" U1FC1 # GREEK DIALYTIKA AND PERISPOMENI
++<Multi_key> <diaeresis> <asciitilde> : "῁" U1FC1 # GREEK DIALYTIKA AND PERISPOMENI
++<dead_iota> <U1f74> : "ῂ" U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f74> : "ῂ" U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
++<dead_iota> <dead_grave> <Greek_eta> : "ῂ" U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <Greek_eta> : "ῂ" U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <Greek_eta> : "ῂ" U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <Greek_eta> : "ῂ" U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
++<dead_iota> <combining_grave> <Greek_eta> : "ῂ" U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <Greek_eta> : "ῂ" U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
++<dead_iota> <Greek_eta> : "ῃ" U1FC3 # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <Greek_eta> : "ῃ" U1FC3 # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
++<dead_iota> <Greek_etaaccent> : "ῄ" U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <Greek_etaaccent> : "ῄ" U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
++<dead_iota> <dead_acute> <Greek_eta> : "ῄ" U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <Greek_eta> : "ῄ" U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <Greek_eta> : "ῄ" U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <Greek_eta> : "ῄ" U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <Greek_eta> : "ῄ" U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <Greek_eta> : "ῄ" U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
++<dead_iota> <combining_acute> <Greek_eta> : "ῄ" U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <Greek_eta> : "ῄ" U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
++<U0342> <Greek_eta> : "ῆ" U1FC6 # GREEK SMALL LETTER ETA WITH PERISPOMENI
++<dead_tilde> <Greek_eta> : "ῆ" U1FC6 # GREEK SMALL LETTER ETA WITH PERISPOMENI
++<Multi_key> <asciitilde> <Greek_eta> : "ῆ" U1FC6 # GREEK SMALL LETTER ETA WITH PERISPOMENI
++<dead_iota> <U1fc6> : "ῇ" U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1fc6> : "ῇ" U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <U0342> <Greek_eta> : "ῇ" U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <dead_tilde> <Greek_eta> : "ῇ" U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <Greek_eta> : "ῇ" U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <Greek_eta> : "ῇ" U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <Greek_eta> : "ῇ" U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <Greek_eta> : "ῇ" U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
++<dead_grave> <Greek_EPSILON> : "Ὲ" U1FC8 # GREEK CAPITAL LETTER EPSILON WITH VARIA
++<Multi_key> <grave> <Greek_EPSILON> : "Ὲ" U1FC8 # GREEK CAPITAL LETTER EPSILON WITH VARIA
++<combining_grave> <Greek_EPSILON> : "Ὲ" U1FC8 # GREEK CAPITAL LETTER EPSILON WITH VARIA
++<dead_grave> <Greek_ETA> : "Ὴ" U1FCA # GREEK CAPITAL LETTER ETA WITH VARIA
++<Multi_key> <grave> <Greek_ETA> : "Ὴ" U1FCA # GREEK CAPITAL LETTER ETA WITH VARIA
++<combining_grave> <Greek_ETA> : "Ὴ" U1FCA # GREEK CAPITAL LETTER ETA WITH VARIA
++<dead_iota> <Greek_ETA> : "ῌ" U1FCC # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <Greek_ETA> : "ῌ" U1FCC # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
++<Multi_key> <U1fbf> <dead_grave> : "῍" U1FCD # GREEK PSILI AND VARIA
++<Multi_key> <U1fbf> <grave> : "῍" U1FCD # GREEK PSILI AND VARIA
++<Multi_key> <U1fbf> <combining_grave> : "῍" U1FCD # GREEK PSILI AND VARIA
++<Multi_key> <U1fbf> <dead_acute> : "῎" U1FCE # GREEK PSILI AND OXIA
++<Multi_key> <U1fbf> <acute> : "῎" U1FCE # GREEK PSILI AND OXIA
++<Multi_key> <U1fbf> <apostrophe> : "῎" U1FCE # GREEK PSILI AND OXIA
++<Multi_key> <U1fbf> <combining_acute> : "῎" U1FCE # GREEK PSILI AND OXIA
++<Multi_key> <U1fbf> <U0342> : "῏" U1FCF # GREEK PSILI AND PERISPOMENI
++<Multi_key> <U1fbf> <dead_tilde> : "῏" U1FCF # GREEK PSILI AND PERISPOMENI
++<Multi_key> <U1fbf> <asciitilde> : "῏" U1FCF # GREEK PSILI AND PERISPOMENI
++<dead_breve> <Greek_iota> : "ῐ" U1FD0 # GREEK SMALL LETTER IOTA WITH VRACHY
++<Multi_key> <U> <Greek_iota> : "ῐ" U1FD0 # GREEK SMALL LETTER IOTA WITH VRACHY
++<Multi_key> <b> <Greek_iota> : "ῐ" U1FD0 # GREEK SMALL LETTER IOTA WITH VRACHY
++<dead_macron> <Greek_iota> : "ῑ" U1FD1 # GREEK SMALL LETTER IOTA WITH MACRON
++<Multi_key> <macron> <Greek_iota> : "ῑ" U1FD1 # GREEK SMALL LETTER IOTA WITH MACRON
++<Multi_key> <underscore> <Greek_iota> : "ῑ" U1FD1 # GREEK SMALL LETTER IOTA WITH MACRON
++<dead_grave> <Greek_iotadieresis> : "ῒ" U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
++<Multi_key> <grave> <Greek_iotadieresis> : "ῒ" U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
++<dead_grave> <dead_diaeresis> <Greek_iota> : "ῒ" U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
++<dead_grave> <Multi_key> <quotedbl> <Greek_iota> : "ῒ" U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
++<Multi_key> <grave> <dead_diaeresis> <Greek_iota> : "ῒ" U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
++<Multi_key> <grave> <quotedbl> <Greek_iota> : "ῒ" U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
++<combining_grave> <Greek_iotadieresis> : "ῒ" U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
++<combining_grave> <dead_diaeresis> <Greek_iota> : "ῒ" U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
++<combining_grave> <Multi_key> <quotedbl> <Greek_iota> : "ῒ" U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
++<U0342> <Greek_iota> : "ῖ" U1FD6 # GREEK SMALL LETTER IOTA WITH PERISPOMENI
++<dead_tilde> <Greek_iota> : "ῖ" U1FD6 # GREEK SMALL LETTER IOTA WITH PERISPOMENI
++<Multi_key> <asciitilde> <Greek_iota> : "ῖ" U1FD6 # GREEK SMALL LETTER IOTA WITH PERISPOMENI
++<U0342> <Greek_iotadieresis> : "ῗ" U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
++<dead_tilde> <Greek_iotadieresis> : "ῗ" U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
++<Multi_key> <asciitilde> <Greek_iotadieresis> : "ῗ" U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
++<U0342> <dead_diaeresis> <Greek_iota> : "ῗ" U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
++<U0342> <Multi_key> <quotedbl> <Greek_iota> : "ῗ" U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
++<dead_tilde> <dead_diaeresis> <Greek_iota> : "ῗ" U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
++<dead_tilde> <Multi_key> <quotedbl> <Greek_iota> : "ῗ" U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
++<Multi_key> <asciitilde> <dead_diaeresis> <Greek_iota> : "ῗ" U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
++<Multi_key> <asciitilde> <quotedbl> <Greek_iota> : "ῗ" U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
++<dead_breve> <Greek_IOTA> : "Ῐ" U1FD8 # GREEK CAPITAL LETTER IOTA WITH VRACHY
++<Multi_key> <U> <Greek_IOTA> : "Ῐ" U1FD8 # GREEK CAPITAL LETTER IOTA WITH VRACHY
++<Multi_key> <b> <Greek_IOTA> : "Ῐ" U1FD8 # GREEK CAPITAL LETTER IOTA WITH VRACHY
++<dead_macron> <Greek_IOTA> : "Ῑ" U1FD9 # GREEK CAPITAL LETTER IOTA WITH MACRON
++<Multi_key> <macron> <Greek_IOTA> : "Ῑ" U1FD9 # GREEK CAPITAL LETTER IOTA WITH MACRON
++<Multi_key> <underscore> <Greek_IOTA> : "Ῑ" U1FD9 # GREEK CAPITAL LETTER IOTA WITH MACRON
++<dead_grave> <Greek_IOTA> : "Ὶ" U1FDA # GREEK CAPITAL LETTER IOTA WITH VARIA
++<Multi_key> <grave> <Greek_IOTA> : "Ὶ" U1FDA # GREEK CAPITAL LETTER IOTA WITH VARIA
++<combining_grave> <Greek_IOTA> : "Ὶ" U1FDA # GREEK CAPITAL LETTER IOTA WITH VARIA
++<Multi_key> <U1ffe> <dead_grave> : "῝" U1FDD # GREEK DASIA AND VARIA
++<Multi_key> <U1ffe> <grave> : "῝" U1FDD # GREEK DASIA AND VARIA
++<Multi_key> <U1ffe> <combining_grave> : "῝" U1FDD # GREEK DASIA AND VARIA
++<Multi_key> <U1ffe> <dead_acute> : "῞" U1FDE # GREEK DASIA AND OXIA
++<Multi_key> <U1ffe> <acute> : "῞" U1FDE # GREEK DASIA AND OXIA
++<Multi_key> <U1ffe> <apostrophe> : "῞" U1FDE # GREEK DASIA AND OXIA
++<Multi_key> <U1ffe> <combining_acute> : "῞" U1FDE # GREEK DASIA AND OXIA
++<Multi_key> <U1ffe> <U0342> : "῟" U1FDF # GREEK DASIA AND PERISPOMENI
++<Multi_key> <U1ffe> <dead_tilde> : "῟" U1FDF # GREEK DASIA AND PERISPOMENI
++<Multi_key> <U1ffe> <asciitilde> : "῟" U1FDF # GREEK DASIA AND PERISPOMENI
++<dead_breve> <Greek_upsilon> : "ῠ" U1FE0 # GREEK SMALL LETTER UPSILON WITH VRACHY
++<Multi_key> <U> <Greek_upsilon> : "ῠ" U1FE0 # GREEK SMALL LETTER UPSILON WITH VRACHY
++<Multi_key> <b> <Greek_upsilon> : "ῠ" U1FE0 # GREEK SMALL LETTER UPSILON WITH VRACHY
++<dead_macron> <Greek_upsilon> : "ῡ" U1FE1 # GREEK SMALL LETTER UPSILON WITH MACRON
++<Multi_key> <macron> <Greek_upsilon> : "ῡ" U1FE1 # GREEK SMALL LETTER UPSILON WITH MACRON
++<Multi_key> <underscore> <Greek_upsilon> : "ῡ" U1FE1 # GREEK SMALL LETTER UPSILON WITH MACRON
++<dead_grave> <Greek_upsilondieresis> : "ῢ" U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
++<Multi_key> <grave> <Greek_upsilondieresis> : "ῢ" U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
++<dead_grave> <dead_diaeresis> <Greek_upsilon> : "ῢ" U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
++<dead_grave> <Multi_key> <quotedbl> <Greek_upsilon> : "ῢ" U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
++<Multi_key> <grave> <dead_diaeresis> <Greek_upsilon> : "ῢ" U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
++<Multi_key> <grave> <quotedbl> <Greek_upsilon> : "ῢ" U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
++<combining_grave> <Greek_upsilondieresis> : "ῢ" U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
++<combining_grave> <dead_diaeresis> <Greek_upsilon> : "ῢ" U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
++<combining_grave> <Multi_key> <quotedbl> <Greek_upsilon> : "ῢ" U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
++<U0313> <Greek_rho> : "ῤ" U1FE4 # GREEK SMALL LETTER RHO WITH PSILI
++<Multi_key> <parenright> <Greek_rho> : "ῤ" U1FE4 # GREEK SMALL LETTER RHO WITH PSILI
++<U0314> <Greek_rho> : "ῥ" U1FE5 # GREEK SMALL LETTER RHO WITH DASIA
++<Multi_key> <parenleft> <Greek_rho> : "ῥ" U1FE5 # GREEK SMALL LETTER RHO WITH DASIA
++<U0342> <Greek_upsilon> : "ῦ" U1FE6 # GREEK SMALL LETTER UPSILON WITH PERISPOMENI
++<dead_tilde> <Greek_upsilon> : "ῦ" U1FE6 # GREEK SMALL LETTER UPSILON WITH PERISPOMENI
++<Multi_key> <asciitilde> <Greek_upsilon> : "ῦ" U1FE6 # GREEK SMALL LETTER UPSILON WITH PERISPOMENI
++<U0342> <Greek_upsilondieresis> : "ῧ" U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
++<dead_tilde> <Greek_upsilondieresis> : "ῧ" U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
++<Multi_key> <asciitilde> <Greek_upsilondieresis> : "ῧ" U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
++<U0342> <dead_diaeresis> <Greek_upsilon> : "ῧ" U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
++<U0342> <Multi_key> <quotedbl> <Greek_upsilon> : "ῧ" U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
++<dead_tilde> <dead_diaeresis> <Greek_upsilon> : "ῧ" U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
++<dead_tilde> <Multi_key> <quotedbl> <Greek_upsilon> : "ῧ" U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
++<Multi_key> <asciitilde> <dead_diaeresis> <Greek_upsilon> : "ῧ" U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
++<Multi_key> <asciitilde> <quotedbl> <Greek_upsilon> : "ῧ" U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
++<dead_breve> <Greek_UPSILON> : "Ῠ" U1FE8 # GREEK CAPITAL LETTER UPSILON WITH VRACHY
++<Multi_key> <U> <Greek_UPSILON> : "Ῠ" U1FE8 # GREEK CAPITAL LETTER UPSILON WITH VRACHY
++<Multi_key> <b> <Greek_UPSILON> : "Ῠ" U1FE8 # GREEK CAPITAL LETTER UPSILON WITH VRACHY
++<dead_macron> <Greek_UPSILON> : "Ῡ" U1FE9 # GREEK CAPITAL LETTER UPSILON WITH MACRON
++<Multi_key> <macron> <Greek_UPSILON> : "Ῡ" U1FE9 # GREEK CAPITAL LETTER UPSILON WITH MACRON
++<Multi_key> <underscore> <Greek_UPSILON> : "Ῡ" U1FE9 # GREEK CAPITAL LETTER UPSILON WITH MACRON
++<dead_grave> <Greek_UPSILON> : "Ὺ" U1FEA # GREEK CAPITAL LETTER UPSILON WITH VARIA
++<Multi_key> <grave> <Greek_UPSILON> : "Ὺ" U1FEA # GREEK CAPITAL LETTER UPSILON WITH VARIA
++<combining_grave> <Greek_UPSILON> : "Ὺ" U1FEA # GREEK CAPITAL LETTER UPSILON WITH VARIA
++<U0314> <Greek_RHO> : "Ῥ" U1FEC # GREEK CAPITAL LETTER RHO WITH DASIA
++<Multi_key> <parenleft> <Greek_RHO> : "Ῥ" U1FEC # GREEK CAPITAL LETTER RHO WITH DASIA
++<Multi_key> <diaeresis> <dead_grave> : "῭" U1FED # GREEK DIALYTIKA AND VARIA
++<Multi_key> <diaeresis> <grave> : "῭" U1FED # GREEK DIALYTIKA AND VARIA
++<Multi_key> <diaeresis> <combining_grave> : "῭" U1FED # GREEK DIALYTIKA AND VARIA
++<dead_iota> <U1f7c> : "ῲ" U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1f7c> : "ῲ" U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
++<dead_iota> <dead_grave> <Greek_omega> : "ῲ" U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <grave> <Greek_omega> : "ῲ" U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_grave> <Greek_omega> : "ῲ" U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <grave> <Greek_omega> : "ῲ" U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
++<dead_iota> <combining_grave> <Greek_omega> : "ῲ" U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_grave> <Greek_omega> : "ῲ" U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
++<dead_iota> <Greek_omega> : "ῳ" U1FF3 # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <Greek_omega> : "ῳ" U1FF3 # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
++<dead_iota> <Greek_omegaaccent> : "ῴ" U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <Greek_omegaaccent> : "ῴ" U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
++<dead_iota> <dead_acute> <Greek_omega> : "ῴ" U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <acute> <Greek_omega> : "ῴ" U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <apostrophe> <Greek_omega> : "ῴ" U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_acute> <Greek_omega> : "ῴ" U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <acute> <Greek_omega> : "ῴ" U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <apostrophe> <Greek_omega> : "ῴ" U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
++<dead_iota> <combining_acute> <Greek_omega> : "ῴ" U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <combining_acute> <Greek_omega> : "ῴ" U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
++<U0342> <Greek_omega> : "ῶ" U1FF6 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
++<dead_tilde> <Greek_omega> : "ῶ" U1FF6 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
++<Multi_key> <asciitilde> <Greek_omega> : "ῶ" U1FF6 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
++<dead_iota> <U1ff6> : "ῷ" U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U1ff6> : "ῷ" U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <U0342> <Greek_omega> : "ῷ" U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <dead_tilde> <Greek_omega> : "ῷ" U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
++<dead_iota> <Multi_key> <asciitilde> <Greek_omega> : "ῷ" U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <U0342> <Greek_omega> : "ῷ" U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <dead_tilde> <Greek_omega> : "ῷ" U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
++<Multi_key> <Greek_iota> <asciitilde> <Greek_omega> : "ῷ" U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
++<dead_grave> <Greek_OMICRON> : "Ὸ" U1FF8 # GREEK CAPITAL LETTER OMICRON WITH VARIA
++<Multi_key> <grave> <Greek_OMICRON> : "Ὸ" U1FF8 # GREEK CAPITAL LETTER OMICRON WITH VARIA
++<combining_grave> <Greek_OMICRON> : "Ὸ" U1FF8 # GREEK CAPITAL LETTER OMICRON WITH VARIA
++<dead_grave> <Greek_OMEGA> : "Ὼ" U1FFA # GREEK CAPITAL LETTER OMEGA WITH VARIA
++<Multi_key> <grave> <Greek_OMEGA> : "Ὼ" U1FFA # GREEK CAPITAL LETTER OMEGA WITH VARIA
++<combining_grave> <Greek_OMEGA> : "Ὼ" U1FFA # GREEK CAPITAL LETTER OMEGA WITH VARIA
++<dead_iota> <Greek_OMEGA> : "ῼ" U1FFC # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
++<Multi_key> <Greek_iota> <Greek_OMEGA> : "ῼ" U1FFC # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
++<dead_circumflex> <0> : "⁰" U2070 # SUPERSCRIPT ZERO
++<Multi_key> <asciicircum> <0> : "⁰" U2070 # SUPERSCRIPT ZERO
++<dead_circumflex> <KP_0> : "⁰" U2070 # SUPERSCRIPT ZERO
++<Multi_key> <asciicircum> <KP_0> : "⁰" U2070 # SUPERSCRIPT ZERO
++<dead_circumflex> <Multi_key> <underscore> <i> : "ⁱ" U2071 # SUPERSCRIPT LATIN SMALL LETTER I
++<Multi_key> <asciicircum> <underscore> <i> : "ⁱ" U2071 # SUPERSCRIPT LATIN SMALL LETTER I
++<dead_circumflex> <Multi_key> <underbar> <i> : "ⁱ" U2071 # SUPERSCRIPT LATIN SMALL LETTER I
++<Multi_key> <asciicircum> <underbar> <i> : "ⁱ" U2071 # SUPERSCRIPT LATIN SMALL LETTER I
++<dead_circumflex> <4> : "⁴" U2074 # SUPERSCRIPT FOUR
++<Multi_key> <asciicircum> <4> : "⁴" U2074 # SUPERSCRIPT FOUR
++<dead_circumflex> <KP_4> : "⁴" U2074 # SUPERSCRIPT FOUR
++<Multi_key> <asciicircum> <KP_4> : "⁴" U2074 # SUPERSCRIPT FOUR
++<dead_circumflex> <5> : "⁵" U2075 # SUPERSCRIPT FIVE
++<Multi_key> <asciicircum> <5> : "⁵" U2075 # SUPERSCRIPT FIVE
++<dead_circumflex> <KP_5> : "⁵" U2075 # SUPERSCRIPT FIVE
++<Multi_key> <asciicircum> <KP_5> : "⁵" U2075 # SUPERSCRIPT FIVE
++<dead_circumflex> <6> : "⁶" U2076 # SUPERSCRIPT SIX
++<Multi_key> <asciicircum> <6> : "⁶" U2076 # SUPERSCRIPT SIX
++<dead_circumflex> <KP_6> : "⁶" U2076 # SUPERSCRIPT SIX
++<Multi_key> <asciicircum> <KP_6> : "⁶" U2076 # SUPERSCRIPT SIX
++<dead_circumflex> <7> : "⁷" U2077 # SUPERSCRIPT SEVEN
++<Multi_key> <asciicircum> <7> : "⁷" U2077 # SUPERSCRIPT SEVEN
++<dead_circumflex> <KP_7> : "⁷" U2077 # SUPERSCRIPT SEVEN
++<Multi_key> <asciicircum> <KP_7> : "⁷" U2077 # SUPERSCRIPT SEVEN
++<dead_circumflex> <8> : "⁸" U2078 # SUPERSCRIPT EIGHT
++<Multi_key> <asciicircum> <8> : "⁸" U2078 # SUPERSCRIPT EIGHT
++<dead_circumflex> <KP_8> : "⁸" U2078 # SUPERSCRIPT EIGHT
++<Multi_key> <asciicircum> <KP_8> : "⁸" U2078 # SUPERSCRIPT EIGHT
++<dead_circumflex> <9> : "⁹" U2079 # SUPERSCRIPT NINE
++<Multi_key> <asciicircum> <9> : "⁹" U2079 # SUPERSCRIPT NINE
++<dead_circumflex> <KP_9> : "⁹" U2079 # SUPERSCRIPT NINE
++<Multi_key> <asciicircum> <KP_9> : "⁹" U2079 # SUPERSCRIPT NINE
++<dead_circumflex> <plus> : "⁺" U207A # SUPERSCRIPT PLUS SIGN
++<Multi_key> <asciicircum> <plus> : "⁺" U207A # SUPERSCRIPT PLUS SIGN
++<dead_circumflex> <KP_Add> : "⁺" U207A # SUPERSCRIPT PLUS SIGN
++<Multi_key> <asciicircum> <KP_Add> : "⁺" U207A # SUPERSCRIPT PLUS SIGN
++<dead_circumflex> <U2212> : "⁻" U207B # SUPERSCRIPT MINUS
++<Multi_key> <asciicircum> <U2212> : "⁻" U207B # SUPERSCRIPT MINUS
++<dead_circumflex> <equal> : "⁼" U207C # SUPERSCRIPT EQUALS SIGN
++<Multi_key> <asciicircum> <equal> : "⁼" U207C # SUPERSCRIPT EQUALS SIGN
++<dead_circumflex> <KP_Equal> : "⁼" U207C # SUPERSCRIPT EQUALS SIGN
++<Multi_key> <asciicircum> <KP_Equal> : "⁼" U207C # SUPERSCRIPT EQUALS SIGN
++<dead_circumflex> <parenleft> : "⁽" U207D # SUPERSCRIPT LEFT PARENTHESIS
++<Multi_key> <asciicircum> <parenleft> : "⁽" U207D # SUPERSCRIPT LEFT PARENTHESIS
++<dead_circumflex> <parenright> : "⁾" U207E # SUPERSCRIPT RIGHT PARENTHESIS
++<Multi_key> <asciicircum> <parenright> : "⁾" U207E # SUPERSCRIPT RIGHT PARENTHESIS
++<dead_circumflex> <Multi_key> <underscore> <n> : "ⁿ" U207F # SUPERSCRIPT LATIN SMALL LETTER N
++<Multi_key> <asciicircum> <underscore> <n> : "ⁿ" U207F # SUPERSCRIPT LATIN SMALL LETTER N
++<dead_circumflex> <Multi_key> <underbar> <n> : "ⁿ" U207F # SUPERSCRIPT LATIN SMALL LETTER N
++<Multi_key> <asciicircum> <underbar> <n> : "ⁿ" U207F # SUPERSCRIPT LATIN SMALL LETTER N
++<Multi_key> <underscore> <0> : "₀" U2080 # SUBSCRIPT ZERO
++<Multi_key> <underscore> <KP_0> : "₀" U2080 # SUBSCRIPT ZERO
++<Multi_key> <underbar> <0> : "₀" U2080 # SUBSCRIPT ZERO
++<Multi_key> <underbar> <KP_0> : "₀" U2080 # SUBSCRIPT ZERO
++<Multi_key> <underscore> <1> : "₁" U2081 # SUBSCRIPT ONE
++<Multi_key> <underscore> <KP_1> : "₁" U2081 # SUBSCRIPT ONE
++<Multi_key> <underbar> <1> : "₁" U2081 # SUBSCRIPT ONE
++<Multi_key> <underbar> <KP_1> : "₁" U2081 # SUBSCRIPT ONE
++<Multi_key> <underscore> <2> : "₂" U2082 # SUBSCRIPT TWO
++<Multi_key> <underscore> <KP_Space> : "₂" U2082 # SUBSCRIPT TWO
++<Multi_key> <underscore> <KP_2> : "₂" U2082 # SUBSCRIPT TWO
++<Multi_key> <underbar> <2> : "₂" U2082 # SUBSCRIPT TWO
++<Multi_key> <underbar> <KP_Space> : "₂" U2082 # SUBSCRIPT TWO
++<Multi_key> <underbar> <KP_2> : "₂" U2082 # SUBSCRIPT TWO
++<Multi_key> <underscore> <3> : "₃" U2083 # SUBSCRIPT THREE
++<Multi_key> <underscore> <KP_3> : "₃" U2083 # SUBSCRIPT THREE
++<Multi_key> <underbar> <3> : "₃" U2083 # SUBSCRIPT THREE
++<Multi_key> <underbar> <KP_3> : "₃" U2083 # SUBSCRIPT THREE
++<Multi_key> <underscore> <4> : "₄" U2084 # SUBSCRIPT FOUR
++<Multi_key> <underscore> <KP_4> : "₄" U2084 # SUBSCRIPT FOUR
++<Multi_key> <underbar> <4> : "₄" U2084 # SUBSCRIPT FOUR
++<Multi_key> <underbar> <KP_4> : "₄" U2084 # SUBSCRIPT FOUR
++<Multi_key> <underscore> <5> : "₅" U2085 # SUBSCRIPT FIVE
++<Multi_key> <underscore> <KP_5> : "₅" U2085 # SUBSCRIPT FIVE
++<Multi_key> <underbar> <5> : "₅" U2085 # SUBSCRIPT FIVE
++<Multi_key> <underbar> <KP_5> : "₅" U2085 # SUBSCRIPT FIVE
++<Multi_key> <underscore> <6> : "₆" U2086 # SUBSCRIPT SIX
++<Multi_key> <underscore> <KP_6> : "₆" U2086 # SUBSCRIPT SIX
++<Multi_key> <underbar> <6> : "₆" U2086 # SUBSCRIPT SIX
++<Multi_key> <underbar> <KP_6> : "₆" U2086 # SUBSCRIPT SIX
++<Multi_key> <underscore> <7> : "₇" U2087 # SUBSCRIPT SEVEN
++<Multi_key> <underscore> <KP_7> : "₇" U2087 # SUBSCRIPT SEVEN
++<Multi_key> <underbar> <7> : "₇" U2087 # SUBSCRIPT SEVEN
++<Multi_key> <underbar> <KP_7> : "₇" U2087 # SUBSCRIPT SEVEN
++<Multi_key> <underscore> <8> : "₈" U2088 # SUBSCRIPT EIGHT
++<Multi_key> <underscore> <KP_8> : "₈" U2088 # SUBSCRIPT EIGHT
++<Multi_key> <underbar> <8> : "₈" U2088 # SUBSCRIPT EIGHT
++<Multi_key> <underbar> <KP_8> : "₈" U2088 # SUBSCRIPT EIGHT
++<Multi_key> <underscore> <9> : "₉" U2089 # SUBSCRIPT NINE
++<Multi_key> <underscore> <KP_9> : "₉" U2089 # SUBSCRIPT NINE
++<Multi_key> <underbar> <9> : "₉" U2089 # SUBSCRIPT NINE
++<Multi_key> <underbar> <KP_9> : "₉" U2089 # SUBSCRIPT NINE
++<Multi_key> <underscore> <plus> : "₊" U208A # SUBSCRIPT PLUS SIGN
++<Multi_key> <underscore> <KP_Add> : "₊" U208A # SUBSCRIPT PLUS SIGN
++<Multi_key> <underbar> <plus> : "₊" U208A # SUBSCRIPT PLUS SIGN
++<Multi_key> <underbar> <KP_Add> : "₊" U208A # SUBSCRIPT PLUS SIGN
++<Multi_key> <underscore> <U2212> : "₋" U208B # SUBSCRIPT MINUS
++<Multi_key> <underbar> <U2212> : "₋" U208B # SUBSCRIPT MINUS
++<Multi_key> <underscore> <equal> : "₌" U208C # SUBSCRIPT EQUALS SIGN
++<Multi_key> <underscore> <KP_Equal> : "₌" U208C # SUBSCRIPT EQUALS SIGN
++<Multi_key> <underbar> <equal> : "₌" U208C # SUBSCRIPT EQUALS SIGN
++<Multi_key> <underbar> <KP_Equal> : "₌" U208C # SUBSCRIPT EQUALS SIGN
++<Multi_key> <underscore> <parenleft> : "₍" U208D # SUBSCRIPT LEFT PARENTHESIS
++<Multi_key> <underbar> <parenleft> : "₍" U208D # SUBSCRIPT LEFT PARENTHESIS
++<Multi_key> <underscore> <parenright> : "₎" U208E # SUBSCRIPT RIGHT PARENTHESIS
++<Multi_key> <underbar> <parenright> : "₎" U208E # SUBSCRIPT RIGHT PARENTHESIS
++<dead_circumflex> <Multi_key> <S> <M> : "℠" U2120 # SERVICE MARK
++<Multi_key> <asciicircum> <S> <M> : "℠" U2120 # SERVICE MARK
++<dead_circumflex> <Multi_key> <T> <M> : "™" U2122 # TRADE MARK SIGN
++<Multi_key> <asciicircum> <T> <M> : "™" U2122 # TRADE MARK SIGN
++<Multi_key> <slash> <leftarrow> : "↚" U219A # LEFTWARDS ARROW WITH STROKE
++<Multi_key> <KP_Divide> <leftarrow> : "↚" U219A # LEFTWARDS ARROW WITH STROKE
++<Multi_key> <slash> <rightarrow> : "↛" U219B # RIGHTWARDS ARROW WITH STROKE
++<Multi_key> <KP_Divide> <rightarrow> : "↛" U219B # RIGHTWARDS ARROW WITH STROKE
++<Multi_key> <slash> <U2194> : "↮" U21AE # LEFT RIGHT ARROW WITH STROKE
++<Multi_key> <KP_Divide> <U2194> : "↮" U21AE # LEFT RIGHT ARROW WITH STROKE
++<Multi_key> <U2203> <U0338> : "∄" U2204 # THERE DOES NOT EXIST
++<Multi_key> <U2208> <U0338> : "∉" U2209 # NOT AN ELEMENT OF
++<Multi_key> <U220b> <U0338> : "∌" U220C # DOES NOT CONTAIN AS MEMBER
++<Multi_key> <U2223> <U0338> : "∤" U2224 # DOES NOT DIVIDE
++<Multi_key> <U2225> <U0338> : "∦" U2226 # NOT PARALLEL TO
++<Multi_key> <U223c> <U0338> : "≁" U2241 # NOT TILDE
++<Multi_key> <U2243> <U0338> : "≄" U2244 # NOT ASYMPTOTICALLY EQUAL TO
++<Multi_key> <approximate> <U0338> : "≇" U2247 # NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
++<Multi_key> <U2248> <U0338> : "≉" U2249 # NOT ALMOST EQUAL TO
++<Multi_key> <equal> <U0338> : "≠" U2260 # NOT EQUAL TO
++<Multi_key> <KP_Equal> <U0338> : "≠" U2260 # NOT EQUAL TO
++<Multi_key> <identical> <U0338> : "≢" U2262 # NOT IDENTICAL TO
++<Multi_key> <U224d> <U0338> : "≭" U226D # NOT EQUIVALENT TO
++<Multi_key> <less> <U0338> : "≮" U226E # NOT LESS-THAN
++<Multi_key> <leftcaret> <U0338> : "≮" U226E # NOT LESS-THAN
++<Multi_key> <greater> <U0338> : "≯" U226F # NOT GREATER-THAN
++<Multi_key> <rightcaret> <U0338> : "≯" U226F # NOT GREATER-THAN
++<Multi_key> <lessthanequal> <U0338> : "≰" U2270 # NEITHER LESS-THAN NOR EQUAL TO
++<Multi_key> <greaterthanequal> <U0338> : "≱" U2271 # NEITHER GREATER-THAN NOR EQUAL TO
++<Multi_key> <U2272> <U0338> : "≴" U2274 # NEITHER LESS-THAN NOR EQUIVALENT TO
++<Multi_key> <U2273> <U0338> : "≵" U2275 # NEITHER GREATER-THAN NOR EQUIVALENT TO
++<Multi_key> <U2276> <U0338> : "≸" U2278 # NEITHER LESS-THAN NOR GREATER-THAN
++<Multi_key> <U2277> <U0338> : "≹" U2279 # NEITHER GREATER-THAN NOR LESS-THAN
++<Multi_key> <U227a> <U0338> : "⊀" U2280 # DOES NOT PRECEDE
++<Multi_key> <U227b> <U0338> : "⊁" U2281 # DOES NOT SUCCEED
++<Multi_key> <includedin> <U0338> : "⊄" U2284 # NOT A SUBSET OF
++<Multi_key> <leftshoe> <U0338> : "⊄" U2284 # NOT A SUBSET OF
++<Multi_key> <includes> <U0338> : "⊅" U2285 # NOT A SUPERSET OF
++<Multi_key> <rightshoe> <U0338> : "⊅" U2285 # NOT A SUPERSET OF
++<Multi_key> <U2286> <U0338> : "⊈" U2288 # NEITHER A SUBSET OF NOR EQUAL TO
++<Multi_key> <U2287> <U0338> : "⊉" U2289 # NEITHER A SUPERSET OF NOR EQUAL TO
++<Multi_key> <righttack> <U0338> : "⊬" U22AC # DOES NOT PROVE
++<Multi_key> <U22a8> <U0338> : "⊭" U22AD # NOT TRUE
++<Multi_key> <U22a9> <U0338> : "⊮" U22AE # DOES NOT FORCE
++<Multi_key> <U22ab> <U0338> : "⊯" U22AF # NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
++<Multi_key> <U227c> <U0338> : "⋠" U22E0 # DOES NOT PRECEDE OR EQUAL
++<Multi_key> <U227d> <U0338> : "⋡" U22E1 # DOES NOT SUCCEED OR EQUAL
++<Multi_key> <U2291> <U0338> : "⋢" U22E2 # NOT SQUARE IMAGE OF OR EQUAL TO
++<Multi_key> <U2292> <U0338> : "⋣" U22E3 # NOT SQUARE ORIGINAL OF OR EQUAL TO
++<Multi_key> <U22b2> <U0338> : "⋪" U22EA # NOT NORMAL SUBGROUP OF
++<Multi_key> <U22b3> <U0338> : "⋫" U22EB # DOES NOT CONTAIN AS NORMAL SUBGROUP
++<Multi_key> <U22b4> <U0338> : "⋬" U22EC # NOT NORMAL SUBGROUP OF OR EQUAL TO
++<Multi_key> <U22b5> <U0338> : "⋭" U22ED # DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
++<Multi_key> <parenleft> <1> <parenright> : "①" U2460 # CIRCLED DIGIT ONE
++<Multi_key> <parenleft> <KP_1> <parenright> : "①" U2460 # CIRCLED DIGIT ONE
++<Multi_key> <parenleft> <2> <parenright> : "②" U2461 # CIRCLED DIGIT TWO
++<Multi_key> <parenleft> <KP_Space> <parenright> : "②" U2461 # CIRCLED DIGIT TWO
++<Multi_key> <parenleft> <KP_2> <parenright> : "②" U2461 # CIRCLED DIGIT TWO
++<Multi_key> <parenleft> <3> <parenright> : "③" U2462 # CIRCLED DIGIT THREE
++<Multi_key> <parenleft> <KP_3> <parenright> : "③" U2462 # CIRCLED DIGIT THREE
++<Multi_key> <parenleft> <4> <parenright> : "④" U2463 # CIRCLED DIGIT FOUR
++<Multi_key> <parenleft> <KP_4> <parenright> : "④" U2463 # CIRCLED DIGIT FOUR
++<Multi_key> <parenleft> <5> <parenright> : "⑤" U2464 # CIRCLED DIGIT FIVE
++<Multi_key> <parenleft> <KP_5> <parenright> : "⑤" U2464 # CIRCLED DIGIT FIVE
++<Multi_key> <parenleft> <6> <parenright> : "⑥" U2465 # CIRCLED DIGIT SIX
++<Multi_key> <parenleft> <KP_6> <parenright> : "⑥" U2465 # CIRCLED DIGIT SIX
++<Multi_key> <parenleft> <7> <parenright> : "⑦" U2466 # CIRCLED DIGIT SEVEN
++<Multi_key> <parenleft> <KP_7> <parenright> : "⑦" U2466 # CIRCLED DIGIT SEVEN
++<Multi_key> <parenleft> <8> <parenright> : "⑧" U2467 # CIRCLED DIGIT EIGHT
++<Multi_key> <parenleft> <KP_8> <parenright> : "⑧" U2467 # CIRCLED DIGIT EIGHT
++<Multi_key> <parenleft> <9> <parenright> : "⑨" U2468 # CIRCLED DIGIT NINE
++<Multi_key> <parenleft> <KP_9> <parenright> : "⑨" U2468 # CIRCLED DIGIT NINE
++<Multi_key> <parenleft> <1> <0> <parenright> : "⑩" U2469 # CIRCLED NUMBER TEN
++<Multi_key> <parenleft> <1> <KP_0> <parenright> : "⑩" U2469 # CIRCLED NUMBER TEN
++<Multi_key> <parenleft> <KP_1> <0> <parenright> : "⑩" U2469 # CIRCLED NUMBER TEN
++<Multi_key> <parenleft> <KP_1> <KP_0> <parenright> : "⑩" U2469 # CIRCLED NUMBER TEN
++<Multi_key> <parenleft> <1> <1> <parenright> : "⑪" U246A # CIRCLED NUMBER ELEVEN
++<Multi_key> <parenleft> <1> <KP_1> <parenright> : "⑪" U246A # CIRCLED NUMBER ELEVEN
++<Multi_key> <parenleft> <KP_1> <1> <parenright> : "⑪" U246A # CIRCLED NUMBER ELEVEN
++<Multi_key> <parenleft> <KP_1> <KP_1> <parenright> : "⑪" U246A # CIRCLED NUMBER ELEVEN
++<Multi_key> <parenleft> <1> <2> <parenright> : "⑫" U246B # CIRCLED NUMBER TWELVE
++<Multi_key> <parenleft> <1> <KP_Space> <parenright> : "⑫" U246B # CIRCLED NUMBER TWELVE
++<Multi_key> <parenleft> <1> <KP_2> <parenright> : "⑫" U246B # CIRCLED NUMBER TWELVE
++<Multi_key> <parenleft> <KP_1> <2> <parenright> : "⑫" U246B # CIRCLED NUMBER TWELVE
++<Multi_key> <parenleft> <KP_1> <KP_Space> <parenright> : "⑫" U246B # CIRCLED NUMBER TWELVE
++<Multi_key> <parenleft> <KP_1> <KP_2> <parenright> : "⑫" U246B # CIRCLED NUMBER TWELVE
++<Multi_key> <parenleft> <1> <3> <parenright> : "⑬" U246C # CIRCLED NUMBER THIRTEEN
++<Multi_key> <parenleft> <1> <KP_3> <parenright> : "⑬" U246C # CIRCLED NUMBER THIRTEEN
++<Multi_key> <parenleft> <KP_1> <3> <parenright> : "⑬" U246C # CIRCLED NUMBER THIRTEEN
++<Multi_key> <parenleft> <KP_1> <KP_3> <parenright> : "⑬" U246C # CIRCLED NUMBER THIRTEEN
++<Multi_key> <parenleft> <1> <4> <parenright> : "⑭" U246D # CIRCLED NUMBER FOURTEEN
++<Multi_key> <parenleft> <1> <KP_4> <parenright> : "⑭" U246D # CIRCLED NUMBER FOURTEEN
++<Multi_key> <parenleft> <KP_1> <4> <parenright> : "⑭" U246D # CIRCLED NUMBER FOURTEEN
++<Multi_key> <parenleft> <KP_1> <KP_4> <parenright> : "⑭" U246D # CIRCLED NUMBER FOURTEEN
++<Multi_key> <parenleft> <1> <5> <parenright> : "⑮" U246E # CIRCLED NUMBER FIFTEEN
++<Multi_key> <parenleft> <1> <KP_5> <parenright> : "⑮" U246E # CIRCLED NUMBER FIFTEEN
++<Multi_key> <parenleft> <KP_1> <5> <parenright> : "⑮" U246E # CIRCLED NUMBER FIFTEEN
++<Multi_key> <parenleft> <KP_1> <KP_5> <parenright> : "⑮" U246E # CIRCLED NUMBER FIFTEEN
++<Multi_key> <parenleft> <1> <6> <parenright> : "⑯" U246F # CIRCLED NUMBER SIXTEEN
++<Multi_key> <parenleft> <1> <KP_6> <parenright> : "⑯" U246F # CIRCLED NUMBER SIXTEEN
++<Multi_key> <parenleft> <KP_1> <6> <parenright> : "⑯" U246F # CIRCLED NUMBER SIXTEEN
++<Multi_key> <parenleft> <KP_1> <KP_6> <parenright> : "⑯" U246F # CIRCLED NUMBER SIXTEEN
++<Multi_key> <parenleft> <1> <7> <parenright> : "⑰" U2470 # CIRCLED NUMBER SEVENTEEN
++<Multi_key> <parenleft> <1> <KP_7> <parenright> : "⑰" U2470 # CIRCLED NUMBER SEVENTEEN
++<Multi_key> <parenleft> <KP_1> <7> <parenright> : "⑰" U2470 # CIRCLED NUMBER SEVENTEEN
++<Multi_key> <parenleft> <KP_1> <KP_7> <parenright> : "⑰" U2470 # CIRCLED NUMBER SEVENTEEN
++<Multi_key> <parenleft> <1> <8> <parenright> : "⑱" U2471 # CIRCLED NUMBER EIGHTEEN
++<Multi_key> <parenleft> <1> <KP_8> <parenright> : "⑱" U2471 # CIRCLED NUMBER EIGHTEEN
++<Multi_key> <parenleft> <KP_1> <8> <parenright> : "⑱" U2471 # CIRCLED NUMBER EIGHTEEN
++<Multi_key> <parenleft> <KP_1> <KP_8> <parenright> : "⑱" U2471 # CIRCLED NUMBER EIGHTEEN
++<Multi_key> <parenleft> <1> <9> <parenright> : "⑲" U2472 # CIRCLED NUMBER NINETEEN
++<Multi_key> <parenleft> <1> <KP_9> <parenright> : "⑲" U2472 # CIRCLED NUMBER NINETEEN
++<Multi_key> <parenleft> <KP_1> <9> <parenright> : "⑲" U2472 # CIRCLED NUMBER NINETEEN
++<Multi_key> <parenleft> <KP_1> <KP_9> <parenright> : "⑲" U2472 # CIRCLED NUMBER NINETEEN
++<Multi_key> <parenleft> <2> <0> <parenright> : "⑳" U2473 # CIRCLED NUMBER TWENTY
++<Multi_key> <parenleft> <2> <KP_0> <parenright> : "⑳" U2473 # CIRCLED NUMBER TWENTY
++<Multi_key> <parenleft> <KP_Space> <0> <parenright> : "⑳" U2473 # CIRCLED NUMBER TWENTY
++<Multi_key> <parenleft> <KP_Space> <KP_0> <parenright> : "⑳" U2473 # CIRCLED NUMBER TWENTY
++<Multi_key> <parenleft> <KP_2> <0> <parenright> : "⑳" U2473 # CIRCLED NUMBER TWENTY
++<Multi_key> <parenleft> <KP_2> <KP_0> <parenright> : "⑳" U2473 # CIRCLED NUMBER TWENTY
++<Multi_key> <parenleft> <A> <parenright> : "Ⓐ" U24B6 # CIRCLED LATIN CAPITAL LETTER A
++<Multi_key> <parenleft> <B> <parenright> : "Ⓑ" U24B7 # CIRCLED LATIN CAPITAL LETTER B
++<Multi_key> <parenleft> <C> <parenright> : "Ⓒ" U24B8 # CIRCLED LATIN CAPITAL LETTER C
++<Multi_key> <parenleft> <D> <parenright> : "Ⓓ" U24B9 # CIRCLED LATIN CAPITAL LETTER D
++<Multi_key> <parenleft> <E> <parenright> : "Ⓔ" U24BA # CIRCLED LATIN CAPITAL LETTER E
++<Multi_key> <parenleft> <F> <parenright> : "Ⓕ" U24BB # CIRCLED LATIN CAPITAL LETTER F
++<Multi_key> <parenleft> <G> <parenright> : "Ⓖ" U24BC # CIRCLED LATIN CAPITAL LETTER G
++<Multi_key> <parenleft> <H> <parenright> : "Ⓗ" U24BD # CIRCLED LATIN CAPITAL LETTER H
++<Multi_key> <parenleft> <I> <parenright> : "Ⓘ" U24BE # CIRCLED LATIN CAPITAL LETTER I
++<Multi_key> <parenleft> <J> <parenright> : "Ⓙ" U24BF # CIRCLED LATIN CAPITAL LETTER J
++<Multi_key> <parenleft> <K> <parenright> : "Ⓚ" U24C0 # CIRCLED LATIN CAPITAL LETTER K
++<Multi_key> <parenleft> <L> <parenright> : "Ⓛ" U24C1 # CIRCLED LATIN CAPITAL LETTER L
++<Multi_key> <parenleft> <M> <parenright> : "Ⓜ" U24C2 # CIRCLED LATIN CAPITAL LETTER M
++<Multi_key> <parenleft> <N> <parenright> : "Ⓝ" U24C3 # CIRCLED LATIN CAPITAL LETTER N
++<Multi_key> <parenleft> <O> <parenright> : "Ⓞ" U24C4 # CIRCLED LATIN CAPITAL LETTER O
++<Multi_key> <parenleft> <P> <parenright> : "Ⓟ" U24C5 # CIRCLED LATIN CAPITAL LETTER P
++<Multi_key> <parenleft> <Q> <parenright> : "Ⓠ" U24C6 # CIRCLED LATIN CAPITAL LETTER Q
++<Multi_key> <parenleft> <R> <parenright> : "Ⓡ" U24C7 # CIRCLED LATIN CAPITAL LETTER R
++<Multi_key> <parenleft> <S> <parenright> : "Ⓢ" U24C8 # CIRCLED LATIN CAPITAL LETTER S
++<Multi_key> <parenleft> <T> <parenright> : "Ⓣ" U24C9 # CIRCLED LATIN CAPITAL LETTER T
++<Multi_key> <parenleft> <U> <parenright> : "Ⓤ" U24CA # CIRCLED LATIN CAPITAL LETTER U
++<Multi_key> <parenleft> <V> <parenright> : "Ⓥ" U24CB # CIRCLED LATIN CAPITAL LETTER V
++<Multi_key> <parenleft> <W> <parenright> : "Ⓦ" U24CC # CIRCLED LATIN CAPITAL LETTER W
++<Multi_key> <parenleft> <X> <parenright> : "Ⓧ" U24CD # CIRCLED LATIN CAPITAL LETTER X
++<Multi_key> <parenleft> <Y> <parenright> : "Ⓨ" U24CE # CIRCLED LATIN CAPITAL LETTER Y
++<Multi_key> <parenleft> <Z> <parenright> : "Ⓩ" U24CF # CIRCLED LATIN CAPITAL LETTER Z
++<Multi_key> <parenleft> <a> <parenright> : "ⓐ" U24D0 # CIRCLED LATIN SMALL LETTER A
++<Multi_key> <parenleft> <b> <parenright> : "ⓑ" U24D1 # CIRCLED LATIN SMALL LETTER B
++<Multi_key> <parenleft> <c> <parenright> : "ⓒ" U24D2 # CIRCLED LATIN SMALL LETTER C
++<Multi_key> <parenleft> <d> <parenright> : "ⓓ" U24D3 # CIRCLED LATIN SMALL LETTER D
++<Multi_key> <parenleft> <e> <parenright> : "ⓔ" U24D4 # CIRCLED LATIN SMALL LETTER E
++<Multi_key> <parenleft> <f> <parenright> : "ⓕ" U24D5 # CIRCLED LATIN SMALL LETTER F
++<Multi_key> <parenleft> <g> <parenright> : "ⓖ" U24D6 # CIRCLED LATIN SMALL LETTER G
++<Multi_key> <parenleft> <h> <parenright> : "ⓗ" U24D7 # CIRCLED LATIN SMALL LETTER H
++<Multi_key> <parenleft> <i> <parenright> : "ⓘ" U24D8 # CIRCLED LATIN SMALL LETTER I
++<Multi_key> <parenleft> <j> <parenright> : "ⓙ" U24D9 # CIRCLED LATIN SMALL LETTER J
++<Multi_key> <parenleft> <k> <parenright> : "ⓚ" U24DA # CIRCLED LATIN SMALL LETTER K
++<Multi_key> <parenleft> <l> <parenright> : "ⓛ" U24DB # CIRCLED LATIN SMALL LETTER L
++<Multi_key> <parenleft> <m> <parenright> : "ⓜ" U24DC # CIRCLED LATIN SMALL LETTER M
++<Multi_key> <parenleft> <n> <parenright> : "ⓝ" U24DD # CIRCLED LATIN SMALL LETTER N
++<Multi_key> <parenleft> <o> <parenright> : "ⓞ" U24DE # CIRCLED LATIN SMALL LETTER O
++<Multi_key> <parenleft> <p> <parenright> : "ⓟ" U24DF # CIRCLED LATIN SMALL LETTER P
++<Multi_key> <parenleft> <q> <parenright> : "ⓠ" U24E0 # CIRCLED LATIN SMALL LETTER Q
++<Multi_key> <parenleft> <r> <parenright> : "ⓡ" U24E1 # CIRCLED LATIN SMALL LETTER R
++<Multi_key> <parenleft> <s> <parenright> : "ⓢ" U24E2 # CIRCLED LATIN SMALL LETTER S
++<Multi_key> <parenleft> <t> <parenright> : "ⓣ" U24E3 # CIRCLED LATIN SMALL LETTER T
++<Multi_key> <parenleft> <u> <parenright> : "ⓤ" U24E4 # CIRCLED LATIN SMALL LETTER U
++<Multi_key> <parenleft> <v> <parenright> : "ⓥ" U24E5 # CIRCLED LATIN SMALL LETTER V
++<Multi_key> <parenleft> <w> <parenright> : "ⓦ" U24E6 # CIRCLED LATIN SMALL LETTER W
++<Multi_key> <parenleft> <x> <parenright> : "ⓧ" U24E7 # CIRCLED LATIN SMALL LETTER X
++<Multi_key> <parenleft> <y> <parenright> : "ⓨ" U24E8 # CIRCLED LATIN SMALL LETTER Y
++<Multi_key> <parenleft> <z> <parenright> : "ⓩ" U24E9 # CIRCLED LATIN SMALL LETTER Z
++<Multi_key> <parenleft> <0> <parenright> : "⓪" U24EA # CIRCLED DIGIT ZERO
++<Multi_key> <parenleft> <KP_0> <parenright> : "⓪" U24EA # CIRCLED DIGIT ZERO
++<Multi_key> <U2add> <U0338> : "⫝̸" U2ADC # FORKING
++<dead_voiced_sound> <U304b> : "が" U304C # HIRAGANA LETTER GA
++<dead_voiced_sound> <U304d> : "ぎ" U304E # HIRAGANA LETTER GI
++<dead_voiced_sound> <U304f> : "ぐ" U3050 # HIRAGANA LETTER GU
++<dead_voiced_sound> <U3051> : "げ" U3052 # HIRAGANA LETTER GE
++<dead_voiced_sound> <U3053> : "ご" U3054 # HIRAGANA LETTER GO
++<dead_voiced_sound> <U3055> : "ざ" U3056 # HIRAGANA LETTER ZA
++<dead_voiced_sound> <U3057> : "じ" U3058 # HIRAGANA LETTER ZI
++<dead_voiced_sound> <U3059> : "ず" U305A # HIRAGANA LETTER ZU
++<dead_voiced_sound> <U305b> : "ぜ" U305C # HIRAGANA LETTER ZE
++<dead_voiced_sound> <U305d> : "ぞ" U305E # HIRAGANA LETTER ZO
++<dead_voiced_sound> <U305f> : "だ" U3060 # HIRAGANA LETTER DA
++<dead_voiced_sound> <U3061> : "ぢ" U3062 # HIRAGANA LETTER DI
++<dead_voiced_sound> <U3064> : "づ" U3065 # HIRAGANA LETTER DU
++<dead_voiced_sound> <U3066> : "で" U3067 # HIRAGANA LETTER DE
++<dead_voiced_sound> <U3068> : "ど" U3069 # HIRAGANA LETTER DO
++<dead_voiced_sound> <U306f> : "ば" U3070 # HIRAGANA LETTER BA
++<dead_semivoiced_sound> <U306f> : "ぱ" U3071 # HIRAGANA LETTER PA
++<dead_voiced_sound> <U3072> : "び" U3073 # HIRAGANA LETTER BI
++<dead_semivoiced_sound> <U3072> : "ぴ" U3074 # HIRAGANA LETTER PI
++<dead_voiced_sound> <U3075> : "ぶ" U3076 # HIRAGANA LETTER BU
++<dead_semivoiced_sound> <U3075> : "ぷ" U3077 # HIRAGANA LETTER PU
++<dead_voiced_sound> <U3078> : "べ" U3079 # HIRAGANA LETTER BE
++<dead_semivoiced_sound> <U3078> : "ぺ" U307A # HIRAGANA LETTER PE
++<dead_voiced_sound> <U307b> : "ぼ" U307C # HIRAGANA LETTER BO
++<dead_semivoiced_sound> <U307b> : "ぽ" U307D # HIRAGANA LETTER PO
++<dead_voiced_sound> <U3046> : "ゔ" U3094 # HIRAGANA LETTER VU
++<dead_voiced_sound> <U309d> : "ゞ" U309E # HIRAGANA VOICED ITERATION MARK
++<dead_voiced_sound> <kana_KA> : "ガ" U30AC # KATAKANA LETTER GA
++<dead_voiced_sound> <kana_KI> : "ギ" U30AE # KATAKANA LETTER GI
++<dead_voiced_sound> <kana_KU> : "グ" U30B0 # KATAKANA LETTER GU
++<dead_voiced_sound> <kana_KE> : "ゲ" U30B2 # KATAKANA LETTER GE
++<dead_voiced_sound> <kana_KO> : "ゴ" U30B4 # KATAKANA LETTER GO
++<dead_voiced_sound> <kana_SA> : "ザ" U30B6 # KATAKANA LETTER ZA
++<dead_voiced_sound> <kana_SHI> : "ジ" U30B8 # KATAKANA LETTER ZI
++<dead_voiced_sound> <kana_SU> : "ズ" U30BA # KATAKANA LETTER ZU
++<dead_voiced_sound> <kana_SE> : "ゼ" U30BC # KATAKANA LETTER ZE
++<dead_voiced_sound> <kana_SO> : "ゾ" U30BE # KATAKANA LETTER ZO
++<dead_voiced_sound> <kana_TA> : "ダ" U30C0 # KATAKANA LETTER DA
++<dead_voiced_sound> <kana_CHI> : "ヂ" U30C2 # KATAKANA LETTER DI
++<dead_voiced_sound> <kana_TSU> : "ヅ" U30C5 # KATAKANA LETTER DU
++<dead_voiced_sound> <kana_TE> : "デ" U30C7 # KATAKANA LETTER DE
++<dead_voiced_sound> <kana_TO> : "ド" U30C9 # KATAKANA LETTER DO
++<dead_voiced_sound> <kana_HA> : "バ" U30D0 # KATAKANA LETTER BA
++<dead_semivoiced_sound> <kana_HA> : "パ" U30D1 # KATAKANA LETTER PA
++<dead_voiced_sound> <kana_HI> : "ビ" U30D3 # KATAKANA LETTER BI
++<dead_semivoiced_sound> <kana_HI> : "ピ" U30D4 # KATAKANA LETTER PI
++<dead_voiced_sound> <kana_FU> : "ブ" U30D6 # KATAKANA LETTER BU
++<dead_semivoiced_sound> <kana_FU> : "プ" U30D7 # KATAKANA LETTER PU
++<dead_voiced_sound> <kana_HE> : "ベ" U30D9 # KATAKANA LETTER BE
++<dead_semivoiced_sound> <kana_HE> : "ペ" U30DA # KATAKANA LETTER PE
++<dead_voiced_sound> <kana_HO> : "ボ" U30DC # KATAKANA LETTER BO
++<dead_semivoiced_sound> <kana_HO> : "ポ" U30DD # KATAKANA LETTER PO
++<dead_voiced_sound> <kana_U> : "ヴ" U30F4 # KATAKANA LETTER VU
++<dead_voiced_sound> <kana_WA> : "ヷ" U30F7 # KATAKANA LETTER VA
++<dead_voiced_sound> <U30f0> : "ヸ" U30F8 # KATAKANA LETTER VI
++<dead_voiced_sound> <U30f1> : "ヹ" U30F9 # KATAKANA LETTER VE
++<dead_voiced_sound> <kana_WO> : "ヺ" U30FA # KATAKANA LETTER VO
++<dead_voiced_sound> <U30fd> : "ヾ" U30FE # KATAKANA VOICED ITERATION MARK
++<dead_circumflex> <U4e00> : "㆒" U3192 # IDEOGRAPHIC ANNOTATION ONE MARK
++<Multi_key> <asciicircum> <U4e00> : "㆒" U3192 # IDEOGRAPHIC ANNOTATION ONE MARK
++<dead_circumflex> <U4e8c> : "㆓" U3193 # IDEOGRAPHIC ANNOTATION TWO MARK
++<Multi_key> <asciicircum> <U4e8c> : "㆓" U3193 # IDEOGRAPHIC ANNOTATION TWO MARK
++<dead_circumflex> <U4e09> : "㆔" U3194 # IDEOGRAPHIC ANNOTATION THREE MARK
++<Multi_key> <asciicircum> <U4e09> : "㆔" U3194 # IDEOGRAPHIC ANNOTATION THREE MARK
++<dead_circumflex> <U56db> : "㆕" U3195 # IDEOGRAPHIC ANNOTATION FOUR MARK
++<Multi_key> <asciicircum> <U56db> : "㆕" U3195 # IDEOGRAPHIC ANNOTATION FOUR MARK
++<dead_circumflex> <U4e0a> : "㆖" U3196 # IDEOGRAPHIC ANNOTATION TOP MARK
++<Multi_key> <asciicircum> <U4e0a> : "㆖" U3196 # IDEOGRAPHIC ANNOTATION TOP MARK
++<dead_circumflex> <U4e2d> : "㆗" U3197 # IDEOGRAPHIC ANNOTATION MIDDLE MARK
++<Multi_key> <asciicircum> <U4e2d> : "㆗" U3197 # IDEOGRAPHIC ANNOTATION MIDDLE MARK
++<dead_circumflex> <U4e0b> : "㆘" U3198 # IDEOGRAPHIC ANNOTATION BOTTOM MARK
++<Multi_key> <asciicircum> <U4e0b> : "㆘" U3198 # IDEOGRAPHIC ANNOTATION BOTTOM MARK
++<dead_circumflex> <U7532> : "㆙" U3199 # IDEOGRAPHIC ANNOTATION FIRST MARK
++<Multi_key> <asciicircum> <U7532> : "㆙" U3199 # IDEOGRAPHIC ANNOTATION FIRST MARK
++<dead_circumflex> <U4e59> : "㆚" U319A # IDEOGRAPHIC ANNOTATION SECOND MARK
++<Multi_key> <asciicircum> <U4e59> : "㆚" U319A # IDEOGRAPHIC ANNOTATION SECOND MARK
++<dead_circumflex> <U4e19> : "㆛" U319B # IDEOGRAPHIC ANNOTATION THIRD MARK
++<Multi_key> <asciicircum> <U4e19> : "㆛" U319B # IDEOGRAPHIC ANNOTATION THIRD MARK
++<dead_circumflex> <U4e01> : "㆜" U319C # IDEOGRAPHIC ANNOTATION FOURTH MARK
++<Multi_key> <asciicircum> <U4e01> : "㆜" U319C # IDEOGRAPHIC ANNOTATION FOURTH MARK
++<dead_circumflex> <U5929> : "㆝" U319D # IDEOGRAPHIC ANNOTATION HEAVEN MARK
++<Multi_key> <asciicircum> <U5929> : "㆝" U319D # IDEOGRAPHIC ANNOTATION HEAVEN MARK
++<dead_circumflex> <U5730> : "㆞" U319E # IDEOGRAPHIC ANNOTATION EARTH MARK
++<Multi_key> <asciicircum> <U5730> : "㆞" U319E # IDEOGRAPHIC ANNOTATION EARTH MARK
++<dead_circumflex> <U4eba> : "㆟" U319F # IDEOGRAPHIC ANNOTATION MAN MARK
++<Multi_key> <asciicircum> <U4eba> : "㆟" U319F # IDEOGRAPHIC ANNOTATION MAN MARK
++<Multi_key> <parenleft> <2> <1> <parenright> : "㉑" U3251 # CIRCLED NUMBER TWENTY ONE
++<Multi_key> <parenleft> <2> <KP_1> <parenright> : "㉑" U3251 # CIRCLED NUMBER TWENTY ONE
++<Multi_key> <parenleft> <KP_Space> <1> <parenright> : "㉑" U3251 # CIRCLED NUMBER TWENTY ONE
++<Multi_key> <parenleft> <KP_Space> <KP_1> <parenright> : "㉑" U3251 # CIRCLED NUMBER TWENTY ONE
++<Multi_key> <parenleft> <KP_2> <1> <parenright> : "㉑" U3251 # CIRCLED NUMBER TWENTY ONE
++<Multi_key> <parenleft> <KP_2> <KP_1> <parenright> : "㉑" U3251 # CIRCLED NUMBER TWENTY ONE
++<Multi_key> <parenleft> <2> <2> <parenright> : "㉒" U3252 # CIRCLED NUMBER TWENTY TWO
++<Multi_key> <parenleft> <2> <KP_Space> <parenright> : "㉒" U3252 # CIRCLED NUMBER TWENTY TWO
++<Multi_key> <parenleft> <2> <KP_2> <parenright> : "㉒" U3252 # CIRCLED NUMBER TWENTY TWO
++<Multi_key> <parenleft> <KP_Space> <2> <parenright> : "㉒" U3252 # CIRCLED NUMBER TWENTY TWO
++<Multi_key> <parenleft> <KP_Space> <KP_Space> <parenright> : "㉒" U3252 # CIRCLED NUMBER TWENTY TWO
++<Multi_key> <parenleft> <KP_Space> <KP_2> <parenright> : "㉒" U3252 # CIRCLED NUMBER TWENTY TWO
++<Multi_key> <parenleft> <KP_2> <2> <parenright> : "㉒" U3252 # CIRCLED NUMBER TWENTY TWO
++<Multi_key> <parenleft> <KP_2> <KP_Space> <parenright> : "㉒" U3252 # CIRCLED NUMBER TWENTY TWO
++<Multi_key> <parenleft> <KP_2> <KP_2> <parenright> : "㉒" U3252 # CIRCLED NUMBER TWENTY TWO
++<Multi_key> <parenleft> <2> <3> <parenright> : "㉓" U3253 # CIRCLED NUMBER TWENTY THREE
++<Multi_key> <parenleft> <2> <KP_3> <parenright> : "㉓" U3253 # CIRCLED NUMBER TWENTY THREE
++<Multi_key> <parenleft> <KP_Space> <3> <parenright> : "㉓" U3253 # CIRCLED NUMBER TWENTY THREE
++<Multi_key> <parenleft> <KP_Space> <KP_3> <parenright> : "㉓" U3253 # CIRCLED NUMBER TWENTY THREE
++<Multi_key> <parenleft> <KP_2> <3> <parenright> : "㉓" U3253 # CIRCLED NUMBER TWENTY THREE
++<Multi_key> <parenleft> <KP_2> <KP_3> <parenright> : "㉓" U3253 # CIRCLED NUMBER TWENTY THREE
++<Multi_key> <parenleft> <2> <4> <parenright> : "㉔" U3254 # CIRCLED NUMBER TWENTY FOUR
++<Multi_key> <parenleft> <2> <KP_4> <parenright> : "㉔" U3254 # CIRCLED NUMBER TWENTY FOUR
++<Multi_key> <parenleft> <KP_Space> <4> <parenright> : "㉔" U3254 # CIRCLED NUMBER TWENTY FOUR
++<Multi_key> <parenleft> <KP_Space> <KP_4> <parenright> : "㉔" U3254 # CIRCLED NUMBER TWENTY FOUR
++<Multi_key> <parenleft> <KP_2> <4> <parenright> : "㉔" U3254 # CIRCLED NUMBER TWENTY FOUR
++<Multi_key> <parenleft> <KP_2> <KP_4> <parenright> : "㉔" U3254 # CIRCLED NUMBER TWENTY FOUR
++<Multi_key> <parenleft> <2> <5> <parenright> : "㉕" U3255 # CIRCLED NUMBER TWENTY FIVE
++<Multi_key> <parenleft> <2> <KP_5> <parenright> : "㉕" U3255 # CIRCLED NUMBER TWENTY FIVE
++<Multi_key> <parenleft> <KP_Space> <5> <parenright> : "㉕" U3255 # CIRCLED NUMBER TWENTY FIVE
++<Multi_key> <parenleft> <KP_Space> <KP_5> <parenright> : "㉕" U3255 # CIRCLED NUMBER TWENTY FIVE
++<Multi_key> <parenleft> <KP_2> <5> <parenright> : "㉕" U3255 # CIRCLED NUMBER TWENTY FIVE
++<Multi_key> <parenleft> <KP_2> <KP_5> <parenright> : "㉕" U3255 # CIRCLED NUMBER TWENTY FIVE
++<Multi_key> <parenleft> <2> <6> <parenright> : "㉖" U3256 # CIRCLED NUMBER TWENTY SIX
++<Multi_key> <parenleft> <2> <KP_6> <parenright> : "㉖" U3256 # CIRCLED NUMBER TWENTY SIX
++<Multi_key> <parenleft> <KP_Space> <6> <parenright> : "㉖" U3256 # CIRCLED NUMBER TWENTY SIX
++<Multi_key> <parenleft> <KP_Space> <KP_6> <parenright> : "㉖" U3256 # CIRCLED NUMBER TWENTY SIX
++<Multi_key> <parenleft> <KP_2> <6> <parenright> : "㉖" U3256 # CIRCLED NUMBER TWENTY SIX
++<Multi_key> <parenleft> <KP_2> <KP_6> <parenright> : "㉖" U3256 # CIRCLED NUMBER TWENTY SIX
++<Multi_key> <parenleft> <2> <7> <parenright> : "㉗" U3257 # CIRCLED NUMBER TWENTY SEVEN
++<Multi_key> <parenleft> <2> <KP_7> <parenright> : "㉗" U3257 # CIRCLED NUMBER TWENTY SEVEN
++<Multi_key> <parenleft> <KP_Space> <7> <parenright> : "㉗" U3257 # CIRCLED NUMBER TWENTY SEVEN
++<Multi_key> <parenleft> <KP_Space> <KP_7> <parenright> : "㉗" U3257 # CIRCLED NUMBER TWENTY SEVEN
++<Multi_key> <parenleft> <KP_2> <7> <parenright> : "㉗" U3257 # CIRCLED NUMBER TWENTY SEVEN
++<Multi_key> <parenleft> <KP_2> <KP_7> <parenright> : "㉗" U3257 # CIRCLED NUMBER TWENTY SEVEN
++<Multi_key> <parenleft> <2> <8> <parenright> : "㉘" U3258 # CIRCLED NUMBER TWENTY EIGHT
++<Multi_key> <parenleft> <2> <KP_8> <parenright> : "㉘" U3258 # CIRCLED NUMBER TWENTY EIGHT
++<Multi_key> <parenleft> <KP_Space> <8> <parenright> : "㉘" U3258 # CIRCLED NUMBER TWENTY EIGHT
++<Multi_key> <parenleft> <KP_Space> <KP_8> <parenright> : "㉘" U3258 # CIRCLED NUMBER TWENTY EIGHT
++<Multi_key> <parenleft> <KP_2> <8> <parenright> : "㉘" U3258 # CIRCLED NUMBER TWENTY EIGHT
++<Multi_key> <parenleft> <KP_2> <KP_8> <parenright> : "㉘" U3258 # CIRCLED NUMBER TWENTY EIGHT
++<Multi_key> <parenleft> <2> <9> <parenright> : "㉙" U3259 # CIRCLED NUMBER TWENTY NINE
++<Multi_key> <parenleft> <2> <KP_9> <parenright> : "㉙" U3259 # CIRCLED NUMBER TWENTY NINE
++<Multi_key> <parenleft> <KP_Space> <9> <parenright> : "㉙" U3259 # CIRCLED NUMBER TWENTY NINE
++<Multi_key> <parenleft> <KP_Space> <KP_9> <parenright> : "㉙" U3259 # CIRCLED NUMBER TWENTY NINE
++<Multi_key> <parenleft> <KP_2> <9> <parenright> : "㉙" U3259 # CIRCLED NUMBER TWENTY NINE
++<Multi_key> <parenleft> <KP_2> <KP_9> <parenright> : "㉙" U3259 # CIRCLED NUMBER TWENTY NINE
++<Multi_key> <parenleft> <3> <0> <parenright> : "㉚" U325A # CIRCLED NUMBER THIRTY
++<Multi_key> <parenleft> <3> <KP_0> <parenright> : "㉚" U325A # CIRCLED NUMBER THIRTY
++<Multi_key> <parenleft> <KP_3> <0> <parenright> : "㉚" U325A # CIRCLED NUMBER THIRTY
++<Multi_key> <parenleft> <KP_3> <KP_0> <parenright> : "㉚" U325A # CIRCLED NUMBER THIRTY
++<Multi_key> <parenleft> <3> <1> <parenright> : "㉛" U325B # CIRCLED NUMBER THIRTY ONE
++<Multi_key> <parenleft> <3> <KP_1> <parenright> : "㉛" U325B # CIRCLED NUMBER THIRTY ONE
++<Multi_key> <parenleft> <KP_3> <1> <parenright> : "㉛" U325B # CIRCLED NUMBER THIRTY ONE
++<Multi_key> <parenleft> <KP_3> <KP_1> <parenright> : "㉛" U325B # CIRCLED NUMBER THIRTY ONE
++<Multi_key> <parenleft> <3> <2> <parenright> : "㉜" U325C # CIRCLED NUMBER THIRTY TWO
++<Multi_key> <parenleft> <3> <KP_Space> <parenright> : "㉜" U325C # CIRCLED NUMBER THIRTY TWO
++<Multi_key> <parenleft> <3> <KP_2> <parenright> : "㉜" U325C # CIRCLED NUMBER THIRTY TWO
++<Multi_key> <parenleft> <KP_3> <2> <parenright> : "㉜" U325C # CIRCLED NUMBER THIRTY TWO
++<Multi_key> <parenleft> <KP_3> <KP_Space> <parenright> : "㉜" U325C # CIRCLED NUMBER THIRTY TWO
++<Multi_key> <parenleft> <KP_3> <KP_2> <parenright> : "㉜" U325C # CIRCLED NUMBER THIRTY TWO
++<Multi_key> <parenleft> <3> <3> <parenright> : "㉝" U325D # CIRCLED NUMBER THIRTY THREE
++<Multi_key> <parenleft> <3> <KP_3> <parenright> : "㉝" U325D # CIRCLED NUMBER THIRTY THREE
++<Multi_key> <parenleft> <KP_3> <3> <parenright> : "㉝" U325D # CIRCLED NUMBER THIRTY THREE
++<Multi_key> <parenleft> <KP_3> <KP_3> <parenright> : "㉝" U325D # CIRCLED NUMBER THIRTY THREE
++<Multi_key> <parenleft> <3> <4> <parenright> : "㉞" U325E # CIRCLED NUMBER THIRTY FOUR
++<Multi_key> <parenleft> <3> <KP_4> <parenright> : "㉞" U325E # CIRCLED NUMBER THIRTY FOUR
++<Multi_key> <parenleft> <KP_3> <4> <parenright> : "㉞" U325E # CIRCLED NUMBER THIRTY FOUR
++<Multi_key> <parenleft> <KP_3> <KP_4> <parenright> : "㉞" U325E # CIRCLED NUMBER THIRTY FOUR
++<Multi_key> <parenleft> <3> <5> <parenright> : "㉟" U325F # CIRCLED NUMBER THIRTY FIVE
++<Multi_key> <parenleft> <3> <KP_5> <parenright> : "㉟" U325F # CIRCLED NUMBER THIRTY FIVE
++<Multi_key> <parenleft> <KP_3> <5> <parenright> : "㉟" U325F # CIRCLED NUMBER THIRTY FIVE
++<Multi_key> <parenleft> <KP_3> <KP_5> <parenright> : "㉟" U325F # CIRCLED NUMBER THIRTY FIVE
++<Multi_key> <parenleft> <U1100> <parenright> : "㉠" U3260 # CIRCLED HANGUL KIYEOK
++<Multi_key> <parenleft> <U1102> <parenright> : "㉡" U3261 # CIRCLED HANGUL NIEUN
++<Multi_key> <parenleft> <U1103> <parenright> : "㉢" U3262 # CIRCLED HANGUL TIKEUT
++<Multi_key> <parenleft> <U1105> <parenright> : "㉣" U3263 # CIRCLED HANGUL RIEUL
++<Multi_key> <parenleft> <U1106> <parenright> : "㉤" U3264 # CIRCLED HANGUL MIEUM
++<Multi_key> <parenleft> <U1107> <parenright> : "㉥" U3265 # CIRCLED HANGUL PIEUP
++<Multi_key> <parenleft> <U1109> <parenright> : "㉦" U3266 # CIRCLED HANGUL SIOS
++<Multi_key> <parenleft> <U110b> <parenright> : "㉧" U3267 # CIRCLED HANGUL IEUNG
++<Multi_key> <parenleft> <U110c> <parenright> : "㉨" U3268 # CIRCLED HANGUL CIEUC
++<Multi_key> <parenleft> <U110e> <parenright> : "㉩" U3269 # CIRCLED HANGUL CHIEUCH
++<Multi_key> <parenleft> <U110f> <parenright> : "㉪" U326A # CIRCLED HANGUL KHIEUKH
++<Multi_key> <parenleft> <U1110> <parenright> : "㉫" U326B # CIRCLED HANGUL THIEUTH
++<Multi_key> <parenleft> <U1111> <parenright> : "㉬" U326C # CIRCLED HANGUL PHIEUPH
++<Multi_key> <parenleft> <U1112> <parenright> : "㉭" U326D # CIRCLED HANGUL HIEUH
++<Multi_key> <parenleft> <U1100> <U1161> <parenright> : "㉮" U326E # CIRCLED HANGUL KIYEOK A
++<Multi_key> <parenleft> <U1102> <U1161> <parenright> : "㉯" U326F # CIRCLED HANGUL NIEUN A
++<Multi_key> <parenleft> <U1103> <U1161> <parenright> : "㉰" U3270 # CIRCLED HANGUL TIKEUT A
++<Multi_key> <parenleft> <U1105> <U1161> <parenright> : "㉱" U3271 # CIRCLED HANGUL RIEUL A
++<Multi_key> <parenleft> <U1106> <U1161> <parenright> : "㉲" U3272 # CIRCLED HANGUL MIEUM A
++<Multi_key> <parenleft> <U1107> <U1161> <parenright> : "㉳" U3273 # CIRCLED HANGUL PIEUP A
++<Multi_key> <parenleft> <U1109> <U1161> <parenright> : "㉴" U3274 # CIRCLED HANGUL SIOS A
++<Multi_key> <parenleft> <U110b> <U1161> <parenright> : "㉵" U3275 # CIRCLED HANGUL IEUNG A
++<Multi_key> <parenleft> <U110c> <U1161> <parenright> : "㉶" U3276 # CIRCLED HANGUL CIEUC A
++<Multi_key> <parenleft> <U110e> <U1161> <parenright> : "㉷" U3277 # CIRCLED HANGUL CHIEUCH A
++<Multi_key> <parenleft> <U110f> <U1161> <parenright> : "㉸" U3278 # CIRCLED HANGUL KHIEUKH A
++<Multi_key> <parenleft> <U1110> <U1161> <parenright> : "㉹" U3279 # CIRCLED HANGUL THIEUTH A
++<Multi_key> <parenleft> <U1111> <U1161> <parenright> : "㉺" U327A # CIRCLED HANGUL PHIEUPH A
++<Multi_key> <parenleft> <U1112> <U1161> <parenright> : "㉻" U327B # CIRCLED HANGUL HIEUH A
++<Multi_key> <parenleft> <U4e00> <parenright> : "㊀" U3280 # CIRCLED IDEOGRAPH ONE
++<Multi_key> <parenleft> <U4e8c> <parenright> : "㊁" U3281 # CIRCLED IDEOGRAPH TWO
++<Multi_key> <parenleft> <U4e09> <parenright> : "㊂" U3282 # CIRCLED IDEOGRAPH THREE
++<Multi_key> <parenleft> <U56db> <parenright> : "㊃" U3283 # CIRCLED IDEOGRAPH FOUR
++<Multi_key> <parenleft> <U4e94> <parenright> : "㊄" U3284 # CIRCLED IDEOGRAPH FIVE
++<Multi_key> <parenleft> <U516d> <parenright> : "㊅" U3285 # CIRCLED IDEOGRAPH SIX
++<Multi_key> <parenleft> <U4e03> <parenright> : "㊆" U3286 # CIRCLED IDEOGRAPH SEVEN
++<Multi_key> <parenleft> <U516b> <parenright> : "㊇" U3287 # CIRCLED IDEOGRAPH EIGHT
++<Multi_key> <parenleft> <U4e5d> <parenright> : "㊈" U3288 # CIRCLED IDEOGRAPH NINE
++<Multi_key> <parenleft> <U5341> <parenright> : "㊉" U3289 # CIRCLED IDEOGRAPH TEN
++<Multi_key> <parenleft> <U6708> <parenright> : "㊊" U328A # CIRCLED IDEOGRAPH MOON
++<Multi_key> <parenleft> <U706b> <parenright> : "㊋" U328B # CIRCLED IDEOGRAPH FIRE
++<Multi_key> <parenleft> <U6c34> <parenright> : "㊌" U328C # CIRCLED IDEOGRAPH WATER
++<Multi_key> <parenleft> <U6728> <parenright> : "㊍" U328D # CIRCLED IDEOGRAPH WOOD
++<Multi_key> <parenleft> <U91d1> <parenright> : "㊎" U328E # CIRCLED IDEOGRAPH METAL
++<Multi_key> <parenleft> <U571f> <parenright> : "㊏" U328F # CIRCLED IDEOGRAPH EARTH
++<Multi_key> <parenleft> <U65e5> <parenright> : "㊐" U3290 # CIRCLED IDEOGRAPH SUN
++<Multi_key> <parenleft> <U682a> <parenright> : "㊑" U3291 # CIRCLED IDEOGRAPH STOCK
++<Multi_key> <parenleft> <U6709> <parenright> : "㊒" U3292 # CIRCLED IDEOGRAPH HAVE
++<Multi_key> <parenleft> <U793e> <parenright> : "㊓" U3293 # CIRCLED IDEOGRAPH SOCIETY
++<Multi_key> <parenleft> <U540d> <parenright> : "㊔" U3294 # CIRCLED IDEOGRAPH NAME
++<Multi_key> <parenleft> <U7279> <parenright> : "㊕" U3295 # CIRCLED IDEOGRAPH SPECIAL
++<Multi_key> <parenleft> <U8ca1> <parenright> : "㊖" U3296 # CIRCLED IDEOGRAPH FINANCIAL
++<Multi_key> <parenleft> <U795d> <parenright> : "㊗" U3297 # CIRCLED IDEOGRAPH CONGRATULATION
++<Multi_key> <parenleft> <U52b4> <parenright> : "㊘" U3298 # CIRCLED IDEOGRAPH LABOR
++<Multi_key> <parenleft> <U79d8> <parenright> : "㊙" U3299 # CIRCLED IDEOGRAPH SECRET
++<Multi_key> <parenleft> <U7537> <parenright> : "㊚" U329A # CIRCLED IDEOGRAPH MALE
++<Multi_key> <parenleft> <U5973> <parenright> : "㊛" U329B # CIRCLED IDEOGRAPH FEMALE
++<Multi_key> <parenleft> <U9069> <parenright> : "㊜" U329C # CIRCLED IDEOGRAPH SUITABLE
++<Multi_key> <parenleft> <U512a> <parenright> : "㊝" U329D # CIRCLED IDEOGRAPH EXCELLENT
++<Multi_key> <parenleft> <U5370> <parenright> : "㊞" U329E # CIRCLED IDEOGRAPH PRINT
++<Multi_key> <parenleft> <U6ce8> <parenright> : "㊟" U329F # CIRCLED IDEOGRAPH ATTENTION
++<Multi_key> <parenleft> <U9805> <parenright> : "㊠" U32A0 # CIRCLED IDEOGRAPH ITEM
++<Multi_key> <parenleft> <U4f11> <parenright> : "㊡" U32A1 # CIRCLED IDEOGRAPH REST
++<Multi_key> <parenleft> <U5199> <parenright> : "㊢" U32A2 # CIRCLED IDEOGRAPH COPY
++<Multi_key> <parenleft> <U6b63> <parenright> : "㊣" U32A3 # CIRCLED IDEOGRAPH CORRECT
++<Multi_key> <parenleft> <U4e0a> <parenright> : "㊤" U32A4 # CIRCLED IDEOGRAPH HIGH
++<Multi_key> <parenleft> <U4e2d> <parenright> : "㊥" U32A5 # CIRCLED IDEOGRAPH CENTRE
++<Multi_key> <parenleft> <U4e0b> <parenright> : "㊦" U32A6 # CIRCLED IDEOGRAPH LOW
++<Multi_key> <parenleft> <U5de6> <parenright> : "㊧" U32A7 # CIRCLED IDEOGRAPH LEFT
++<Multi_key> <parenleft> <U53f3> <parenright> : "㊨" U32A8 # CIRCLED IDEOGRAPH RIGHT
++<Multi_key> <parenleft> <U533b> <parenright> : "㊩" U32A9 # CIRCLED IDEOGRAPH MEDICINE
++<Multi_key> <parenleft> <U5b97> <parenright> : "㊪" U32AA # CIRCLED IDEOGRAPH RELIGION
++<Multi_key> <parenleft> <U5b66> <parenright> : "㊫" U32AB # CIRCLED IDEOGRAPH STUDY
++<Multi_key> <parenleft> <U76e3> <parenright> : "㊬" U32AC # CIRCLED IDEOGRAPH SUPERVISE
++<Multi_key> <parenleft> <U4f01> <parenright> : "㊭" U32AD # CIRCLED IDEOGRAPH ENTERPRISE
++<Multi_key> <parenleft> <U8cc7> <parenright> : "㊮" U32AE # CIRCLED IDEOGRAPH RESOURCE
++<Multi_key> <parenleft> <U5354> <parenright> : "㊯" U32AF # CIRCLED IDEOGRAPH ALLIANCE
++<Multi_key> <parenleft> <U591c> <parenright> : "㊰" U32B0 # CIRCLED IDEOGRAPH NIGHT
++<Multi_key> <parenleft> <3> <6> <parenright> : "㊱" U32B1 # CIRCLED NUMBER THIRTY SIX
++<Multi_key> <parenleft> <3> <KP_6> <parenright> : "㊱" U32B1 # CIRCLED NUMBER THIRTY SIX
++<Multi_key> <parenleft> <KP_3> <6> <parenright> : "㊱" U32B1 # CIRCLED NUMBER THIRTY SIX
++<Multi_key> <parenleft> <KP_3> <KP_6> <parenright> : "㊱" U32B1 # CIRCLED NUMBER THIRTY SIX
++<Multi_key> <parenleft> <3> <7> <parenright> : "㊲" U32B2 # CIRCLED NUMBER THIRTY SEVEN
++<Multi_key> <parenleft> <3> <KP_7> <parenright> : "㊲" U32B2 # CIRCLED NUMBER THIRTY SEVEN
++<Multi_key> <parenleft> <KP_3> <7> <parenright> : "㊲" U32B2 # CIRCLED NUMBER THIRTY SEVEN
++<Multi_key> <parenleft> <KP_3> <KP_7> <parenright> : "㊲" U32B2 # CIRCLED NUMBER THIRTY SEVEN
++<Multi_key> <parenleft> <3> <8> <parenright> : "㊳" U32B3 # CIRCLED NUMBER THIRTY EIGHT
++<Multi_key> <parenleft> <3> <KP_8> <parenright> : "㊳" U32B3 # CIRCLED NUMBER THIRTY EIGHT
++<Multi_key> <parenleft> <KP_3> <8> <parenright> : "㊳" U32B3 # CIRCLED NUMBER THIRTY EIGHT
++<Multi_key> <parenleft> <KP_3> <KP_8> <parenright> : "㊳" U32B3 # CIRCLED NUMBER THIRTY EIGHT
++<Multi_key> <parenleft> <3> <9> <parenright> : "㊴" U32B4 # CIRCLED NUMBER THIRTY NINE
++<Multi_key> <parenleft> <3> <KP_9> <parenright> : "㊴" U32B4 # CIRCLED NUMBER THIRTY NINE
++<Multi_key> <parenleft> <KP_3> <9> <parenright> : "㊴" U32B4 # CIRCLED NUMBER THIRTY NINE
++<Multi_key> <parenleft> <KP_3> <KP_9> <parenright> : "㊴" U32B4 # CIRCLED NUMBER THIRTY NINE
++<Multi_key> <parenleft> <4> <0> <parenright> : "㊵" U32B5 # CIRCLED NUMBER FORTY
++<Multi_key> <parenleft> <4> <KP_0> <parenright> : "㊵" U32B5 # CIRCLED NUMBER FORTY
++<Multi_key> <parenleft> <KP_4> <0> <parenright> : "㊵" U32B5 # CIRCLED NUMBER FORTY
++<Multi_key> <parenleft> <KP_4> <KP_0> <parenright> : "㊵" U32B5 # CIRCLED NUMBER FORTY
++<Multi_key> <parenleft> <4> <1> <parenright> : "㊶" U32B6 # CIRCLED NUMBER FORTY ONE
++<Multi_key> <parenleft> <4> <KP_1> <parenright> : "㊶" U32B6 # CIRCLED NUMBER FORTY ONE
++<Multi_key> <parenleft> <KP_4> <1> <parenright> : "㊶" U32B6 # CIRCLED NUMBER FORTY ONE
++<Multi_key> <parenleft> <KP_4> <KP_1> <parenright> : "㊶" U32B6 # CIRCLED NUMBER FORTY ONE
++<Multi_key> <parenleft> <4> <2> <parenright> : "㊷" U32B7 # CIRCLED NUMBER FORTY TWO
++<Multi_key> <parenleft> <4> <KP_Space> <parenright> : "㊷" U32B7 # CIRCLED NUMBER FORTY TWO
++<Multi_key> <parenleft> <4> <KP_2> <parenright> : "㊷" U32B7 # CIRCLED NUMBER FORTY TWO
++<Multi_key> <parenleft> <KP_4> <2> <parenright> : "㊷" U32B7 # CIRCLED NUMBER FORTY TWO
++<Multi_key> <parenleft> <KP_4> <KP_Space> <parenright> : "㊷" U32B7 # CIRCLED NUMBER FORTY TWO
++<Multi_key> <parenleft> <KP_4> <KP_2> <parenright> : "㊷" U32B7 # CIRCLED NUMBER FORTY TWO
++<Multi_key> <parenleft> <4> <3> <parenright> : "㊸" U32B8 # CIRCLED NUMBER FORTY THREE
++<Multi_key> <parenleft> <4> <KP_3> <parenright> : "㊸" U32B8 # CIRCLED NUMBER FORTY THREE
++<Multi_key> <parenleft> <KP_4> <3> <parenright> : "㊸" U32B8 # CIRCLED NUMBER FORTY THREE
++<Multi_key> <parenleft> <KP_4> <KP_3> <parenright> : "㊸" U32B8 # CIRCLED NUMBER FORTY THREE
++<Multi_key> <parenleft> <4> <4> <parenright> : "㊹" U32B9 # CIRCLED NUMBER FORTY FOUR
++<Multi_key> <parenleft> <4> <KP_4> <parenright> : "㊹" U32B9 # CIRCLED NUMBER FORTY FOUR
++<Multi_key> <parenleft> <KP_4> <4> <parenright> : "㊹" U32B9 # CIRCLED NUMBER FORTY FOUR
++<Multi_key> <parenleft> <KP_4> <KP_4> <parenright> : "㊹" U32B9 # CIRCLED NUMBER FORTY FOUR
++<Multi_key> <parenleft> <4> <5> <parenright> : "㊺" U32BA # CIRCLED NUMBER FORTY FIVE
++<Multi_key> <parenleft> <4> <KP_5> <parenright> : "㊺" U32BA # CIRCLED NUMBER FORTY FIVE
++<Multi_key> <parenleft> <KP_4> <5> <parenright> : "㊺" U32BA # CIRCLED NUMBER FORTY FIVE
++<Multi_key> <parenleft> <KP_4> <KP_5> <parenright> : "㊺" U32BA # CIRCLED NUMBER FORTY FIVE
++<Multi_key> <parenleft> <4> <6> <parenright> : "㊻" U32BB # CIRCLED NUMBER FORTY SIX
++<Multi_key> <parenleft> <4> <KP_6> <parenright> : "㊻" U32BB # CIRCLED NUMBER FORTY SIX
++<Multi_key> <parenleft> <KP_4> <6> <parenright> : "㊻" U32BB # CIRCLED NUMBER FORTY SIX
++<Multi_key> <parenleft> <KP_4> <KP_6> <parenright> : "㊻" U32BB # CIRCLED NUMBER FORTY SIX
++<Multi_key> <parenleft> <4> <7> <parenright> : "㊼" U32BC # CIRCLED NUMBER FORTY SEVEN
++<Multi_key> <parenleft> <4> <KP_7> <parenright> : "㊼" U32BC # CIRCLED NUMBER FORTY SEVEN
++<Multi_key> <parenleft> <KP_4> <7> <parenright> : "㊼" U32BC # CIRCLED NUMBER FORTY SEVEN
++<Multi_key> <parenleft> <KP_4> <KP_7> <parenright> : "㊼" U32BC # CIRCLED NUMBER FORTY SEVEN
++<Multi_key> <parenleft> <4> <8> <parenright> : "㊽" U32BD # CIRCLED NUMBER FORTY EIGHT
++<Multi_key> <parenleft> <4> <KP_8> <parenright> : "㊽" U32BD # CIRCLED NUMBER FORTY EIGHT
++<Multi_key> <parenleft> <KP_4> <8> <parenright> : "㊽" U32BD # CIRCLED NUMBER FORTY EIGHT
++<Multi_key> <parenleft> <KP_4> <KP_8> <parenright> : "㊽" U32BD # CIRCLED NUMBER FORTY EIGHT
++<Multi_key> <parenleft> <4> <9> <parenright> : "㊾" U32BE # CIRCLED NUMBER FORTY NINE
++<Multi_key> <parenleft> <4> <KP_9> <parenright> : "㊾" U32BE # CIRCLED NUMBER FORTY NINE
++<Multi_key> <parenleft> <KP_4> <9> <parenright> : "㊾" U32BE # CIRCLED NUMBER FORTY NINE
++<Multi_key> <parenleft> <KP_4> <KP_9> <parenright> : "㊾" U32BE # CIRCLED NUMBER FORTY NINE
++<Multi_key> <parenleft> <5> <0> <parenright> : "㊿" U32BF # CIRCLED NUMBER FIFTY
++<Multi_key> <parenleft> <5> <KP_0> <parenright> : "㊿" U32BF # CIRCLED NUMBER FIFTY
++<Multi_key> <parenleft> <KP_5> <0> <parenright> : "㊿" U32BF # CIRCLED NUMBER FIFTY
++<Multi_key> <parenleft> <KP_5> <KP_0> <parenright> : "㊿" U32BF # CIRCLED NUMBER FIFTY
++<Multi_key> <parenleft> <kana_A> <parenright> : "㋐" U32D0 # CIRCLED KATAKANA A
++<Multi_key> <parenleft> <kana_I> <parenright> : "㋑" U32D1 # CIRCLED KATAKANA I
++<Multi_key> <parenleft> <kana_U> <parenright> : "㋒" U32D2 # CIRCLED KATAKANA U
++<Multi_key> <parenleft> <kana_E> <parenright> : "㋓" U32D3 # CIRCLED KATAKANA E
++<Multi_key> <parenleft> <kana_O> <parenright> : "㋔" U32D4 # CIRCLED KATAKANA O
++<Multi_key> <parenleft> <kana_KA> <parenright> : "㋕" U32D5 # CIRCLED KATAKANA KA
++<Multi_key> <parenleft> <kana_KI> <parenright> : "㋖" U32D6 # CIRCLED KATAKANA KI
++<Multi_key> <parenleft> <kana_KU> <parenright> : "㋗" U32D7 # CIRCLED KATAKANA KU
++<Multi_key> <parenleft> <kana_KE> <parenright> : "㋘" U32D8 # CIRCLED KATAKANA KE
++<Multi_key> <parenleft> <kana_KO> <parenright> : "㋙" U32D9 # CIRCLED KATAKANA KO
++<Multi_key> <parenleft> <kana_SA> <parenright> : "㋚" U32DA # CIRCLED KATAKANA SA
++<Multi_key> <parenleft> <kana_SHI> <parenright> : "㋛" U32DB # CIRCLED KATAKANA SI
++<Multi_key> <parenleft> <kana_SU> <parenright> : "㋜" U32DC # CIRCLED KATAKANA SU
++<Multi_key> <parenleft> <kana_SE> <parenright> : "㋝" U32DD # CIRCLED KATAKANA SE
++<Multi_key> <parenleft> <kana_SO> <parenright> : "㋞" U32DE # CIRCLED KATAKANA SO
++<Multi_key> <parenleft> <kana_TA> <parenright> : "㋟" U32DF # CIRCLED KATAKANA TA
++<Multi_key> <parenleft> <kana_CHI> <parenright> : "㋠" U32E0 # CIRCLED KATAKANA TI
++<Multi_key> <parenleft> <kana_TSU> <parenright> : "㋡" U32E1 # CIRCLED KATAKANA TU
++<Multi_key> <parenleft> <kana_TE> <parenright> : "㋢" U32E2 # CIRCLED KATAKANA TE
++<Multi_key> <parenleft> <kana_TO> <parenright> : "㋣" U32E3 # CIRCLED KATAKANA TO
++<Multi_key> <parenleft> <kana_NA> <parenright> : "㋤" U32E4 # CIRCLED KATAKANA NA
++<Multi_key> <parenleft> <kana_NI> <parenright> : "㋥" U32E5 # CIRCLED KATAKANA NI
++<Multi_key> <parenleft> <kana_NU> <parenright> : "㋦" U32E6 # CIRCLED KATAKANA NU
++<Multi_key> <parenleft> <kana_NE> <parenright> : "㋧" U32E7 # CIRCLED KATAKANA NE
++<Multi_key> <parenleft> <kana_NO> <parenright> : "㋨" U32E8 # CIRCLED KATAKANA NO
++<Multi_key> <parenleft> <kana_HA> <parenright> : "㋩" U32E9 # CIRCLED KATAKANA HA
++<Multi_key> <parenleft> <kana_HI> <parenright> : "㋪" U32EA # CIRCLED KATAKANA HI
++<Multi_key> <parenleft> <kana_FU> <parenright> : "㋫" U32EB # CIRCLED KATAKANA HU
++<Multi_key> <parenleft> <kana_HE> <parenright> : "㋬" U32EC # CIRCLED KATAKANA HE
++<Multi_key> <parenleft> <kana_HO> <parenright> : "㋭" U32ED # CIRCLED KATAKANA HO
++<Multi_key> <parenleft> <kana_MA> <parenright> : "㋮" U32EE # CIRCLED KATAKANA MA
++<Multi_key> <parenleft> <kana_MI> <parenright> : "㋯" U32EF # CIRCLED KATAKANA MI
++<Multi_key> <parenleft> <kana_MU> <parenright> : "㋰" U32F0 # CIRCLED KATAKANA MU
++<Multi_key> <parenleft> <kana_ME> <parenright> : "㋱" U32F1 # CIRCLED KATAKANA ME
++<Multi_key> <parenleft> <kana_MO> <parenright> : "㋲" U32F2 # CIRCLED KATAKANA MO
++<Multi_key> <parenleft> <kana_YA> <parenright> : "㋳" U32F3 # CIRCLED KATAKANA YA
++<Multi_key> <parenleft> <kana_YU> <parenright> : "㋴" U32F4 # CIRCLED KATAKANA YU
++<Multi_key> <parenleft> <kana_YO> <parenright> : "㋵" U32F5 # CIRCLED KATAKANA YO
++<Multi_key> <parenleft> <kana_RA> <parenright> : "㋶" U32F6 # CIRCLED KATAKANA RA
++<Multi_key> <parenleft> <kana_RI> <parenright> : "㋷" U32F7 # CIRCLED KATAKANA RI
++<Multi_key> <parenleft> <kana_RU> <parenright> : "㋸" U32F8 # CIRCLED KATAKANA RU
++<Multi_key> <parenleft> <kana_RE> <parenright> : "㋹" U32F9 # CIRCLED KATAKANA RE
++<Multi_key> <parenleft> <kana_RO> <parenright> : "㋺" U32FA # CIRCLED KATAKANA RO
++<Multi_key> <parenleft> <kana_WA> <parenright> : "㋻" U32FB # CIRCLED KATAKANA WA
++<Multi_key> <parenleft> <U30f0> <parenright> : "㋼" U32FC # CIRCLED KATAKANA WI
++<Multi_key> <parenleft> <U30f1> <parenright> : "㋽" U32FD # CIRCLED KATAKANA WE
++<Multi_key> <parenleft> <kana_WO> <parenright> : "㋾" U32FE # CIRCLED KATAKANA WO
++<Multi_key> <U05b4> <hebrew_yod> : "יִ" UFB1D # HEBREW LETTER YOD WITH HIRIQ
++<Multi_key> <U05b7> <U05f2> : "ײַ" UFB1F # HEBREW LIGATURE YIDDISH YOD YOD PATAH
++<Multi_key> <U05c1> <hebrew_shin> : "שׁ" UFB2A # HEBREW LETTER SHIN WITH SHIN DOT
++<Multi_key> <U05c2> <hebrew_shin> : "שׂ" UFB2B # HEBREW LETTER SHIN WITH SIN DOT
++<Multi_key> <U05c1> <Ufb49> : "שּׁ" UFB2C # HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT
++<Multi_key> <U05c1> <U05bc> <hebrew_shin> : "שּׁ" UFB2C # HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT
++<Multi_key> <U05c2> <Ufb49> : "שּׂ" UFB2D # HEBREW LETTER SHIN WITH DAGESH AND SIN DOT
++<Multi_key> <U05c2> <U05bc> <hebrew_shin> : "שּׂ" UFB2D # HEBREW LETTER SHIN WITH DAGESH AND SIN DOT
++<Multi_key> <U05b7> <hebrew_aleph> : "אַ" UFB2E # HEBREW LETTER ALEF WITH PATAH
++<Multi_key> <U05b8> <hebrew_aleph> : "אָ" UFB2F # HEBREW LETTER ALEF WITH QAMATS
++<Multi_key> <U05bc> <hebrew_aleph> : "אּ" UFB30 # HEBREW LETTER ALEF WITH MAPIQ
++<Multi_key> <U05bc> <hebrew_bet> : "בּ" UFB31 # HEBREW LETTER BET WITH DAGESH
++<Multi_key> <U05bc> <hebrew_beth> : "בּ" UFB31 # HEBREW LETTER BET WITH DAGESH
++<Multi_key> <U05bc> <hebrew_gimel> : "גּ" UFB32 # HEBREW LETTER GIMEL WITH DAGESH
++<Multi_key> <U05bc> <hebrew_gimmel> : "גּ" UFB32 # HEBREW LETTER GIMEL WITH DAGESH
++<Multi_key> <U05bc> <hebrew_dalet> : "דּ" UFB33 # HEBREW LETTER DALET WITH DAGESH
++<Multi_key> <U05bc> <hebrew_daleth> : "דּ" UFB33 # HEBREW LETTER DALET WITH DAGESH
++<Multi_key> <U05bc> <hebrew_he> : "הּ" UFB34 # HEBREW LETTER HE WITH MAPIQ
++<Multi_key> <U05bc> <hebrew_waw> : "וּ" UFB35 # HEBREW LETTER VAV WITH DAGESH
++<Multi_key> <U05bc> <hebrew_zain> : "זּ" UFB36 # HEBREW LETTER ZAYIN WITH DAGESH
++<Multi_key> <U05bc> <hebrew_zayin> : "זּ" UFB36 # HEBREW LETTER ZAYIN WITH DAGESH
++<Multi_key> <U05bc> <hebrew_tet> : "טּ" UFB38 # HEBREW LETTER TET WITH DAGESH
++<Multi_key> <U05bc> <hebrew_teth> : "טּ" UFB38 # HEBREW LETTER TET WITH DAGESH
++<Multi_key> <U05bc> <hebrew_yod> : "יּ" UFB39 # HEBREW LETTER YOD WITH DAGESH
++<Multi_key> <U05bc> <hebrew_finalkaph> : "ךּ" UFB3A # HEBREW LETTER FINAL KAF WITH DAGESH
++<Multi_key> <U05bc> <hebrew_kaph> : "כּ" UFB3B # HEBREW LETTER KAF WITH DAGESH
++<Multi_key> <U05bc> <hebrew_lamed> : "לּ" UFB3C # HEBREW LETTER LAMED WITH DAGESH
++<Multi_key> <U05bc> <hebrew_mem> : "מּ" UFB3E # HEBREW LETTER MEM WITH DAGESH
++<Multi_key> <U05bc> <hebrew_nun> : "נּ" UFB40 # HEBREW LETTER NUN WITH DAGESH
++<Multi_key> <U05bc> <hebrew_samech> : "סּ" UFB41 # HEBREW LETTER SAMEKH WITH DAGESH
++<Multi_key> <U05bc> <hebrew_samekh> : "סּ" UFB41 # HEBREW LETTER SAMEKH WITH DAGESH
++<Multi_key> <U05bc> <hebrew_finalpe> : "ףּ" UFB43 # HEBREW LETTER FINAL PE WITH DAGESH
++<Multi_key> <U05bc> <hebrew_pe> : "פּ" UFB44 # HEBREW LETTER PE WITH DAGESH
++<Multi_key> <U05bc> <hebrew_zade> : "צּ" UFB46 # HEBREW LETTER TSADI WITH DAGESH
++<Multi_key> <U05bc> <hebrew_zadi> : "צּ" UFB46 # HEBREW LETTER TSADI WITH DAGESH
++<Multi_key> <U05bc> <hebrew_kuf> : "קּ" UFB47 # HEBREW LETTER QOF WITH DAGESH
++<Multi_key> <U05bc> <hebrew_qoph> : "קּ" UFB47 # HEBREW LETTER QOF WITH DAGESH
++<Multi_key> <U05bc> <hebrew_resh> : "רּ" UFB48 # HEBREW LETTER RESH WITH DAGESH
++<Multi_key> <U05bc> <hebrew_shin> : "שּ" UFB49 # HEBREW LETTER SHIN WITH DAGESH
++<Multi_key> <U05bc> <hebrew_taf> : "תּ" UFB4A # HEBREW LETTER TAV WITH DAGESH
++<Multi_key> <U05bc> <hebrew_taw> : "תּ" UFB4A # HEBREW LETTER TAV WITH DAGESH
++<Multi_key> <U05b9> <hebrew_waw> : "וֹ" UFB4B # HEBREW LETTER VAV WITH HOLAM
++<Multi_key> <U05bf> <hebrew_bet> : "בֿ" UFB4C # HEBREW LETTER BET WITH RAFE
++<Multi_key> <U05bf> <hebrew_beth> : "בֿ" UFB4C # HEBREW LETTER BET WITH RAFE
++<Multi_key> <U05bf> <hebrew_kaph> : "כֿ" UFB4D # HEBREW LETTER KAF WITH RAFE
++<Multi_key> <U05bf> <hebrew_pe> : "פֿ" UFB4E # HEBREW LETTER PE WITH RAFE
++<Multi_key> <U1d157> <U1d165> : "텞" U1D15E # MUSICAL SYMBOL HALF NOTE
++<Multi_key> <U1d158> <U1d165> : "텟" U1D15F # MUSICAL SYMBOL QUARTER NOTE
++<Multi_key> <U1d15f> <U1d16e> : "텠" U1D160 # MUSICAL SYMBOL EIGHTH NOTE
++<Multi_key> <U1d158> <U1d165> <U1d16e> : "텠" U1D160 # MUSICAL SYMBOL EIGHTH NOTE
++<Multi_key> <U1d15f> <U1d16f> : "텡" U1D161 # MUSICAL SYMBOL SIXTEENTH NOTE
++<Multi_key> <U1d158> <U1d165> <U1d16f> : "텡" U1D161 # MUSICAL SYMBOL SIXTEENTH NOTE
++<Multi_key> <U1d15f> <U1d170> : "텢" U1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE
++<Multi_key> <U1d158> <U1d165> <U1d170> : "텢" U1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE
++<Multi_key> <U1d15f> <U1d171> : "텣" U1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE
++<Multi_key> <U1d158> <U1d165> <U1d171> : "텣" U1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE
++<Multi_key> <U1d15f> <U1d172> : "텤" U1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
++<Multi_key> <U1d158> <U1d165> <U1d172> : "텤" U1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
++<Multi_key> <U1d1b9> <U1d165> : "톻" U1D1BB # MUSICAL SYMBOL MINIMA
++<Multi_key> <U1d1ba> <U1d165> : "톼" U1D1BC # MUSICAL SYMBOL MINIMA BLACK
++<Multi_key> <U1d1bb> <U1d16e> : "톽" U1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE
++<Multi_key> <U1d1b9> <U1d165> <U1d16e> : "톽" U1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE
++<Multi_key> <U1d1bc> <U1d16e> : "톾" U1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK
++<Multi_key> <U1d1ba> <U1d165> <U1d16e> : "톾" U1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK
++<Multi_key> <U1d1bb> <U1d16f> : "톿" U1D1BF # MUSICAL SYMBOL FUSA WHITE
++<Multi_key> <U1d1b9> <U1d165> <U1d16f> : "톿" U1D1BF # MUSICAL SYMBOL FUSA WHITE
++<Multi_key> <U1d1bc> <U1d16f> : "퇀" U1D1C0 # MUSICAL SYMBOL FUSA BLACK
++<Multi_key> <U1d1ba> <U1d165> <U1d16f> : "퇀" U1D1C0 # MUSICAL SYMBOL FUSA BLACK
+Index: xc/nls/XI18N_OBJS/Imakefile
+diff -u xc/nls/XI18N_OBJS/Imakefile:1.2 xc/nls/XI18N_OBJS/Imakefile:1.2.4.1
+--- xc/nls/XI18N_OBJS/Imakefile:1.2 Fri Apr 23 18:44:34 2004
++++ xc/nls/XI18N_OBJS/Imakefile Tue Jan 25 02:03:01 2005
+@@ -1,5 +1,5 @@
+ XCOMM $Xorg: Imakefile,v 1.1 2000/12/12 13:00:42 coskrey Exp $
+-XCOMM $XdotOrg: xc/nls/XI18N_OBJS/Imakefile,v 1.2 2004/04/23 18:44:34 eich Exp $
++XCOMM $XdotOrg: xc/nls/XI18N_OBJS/Imakefile,v 1.2.4.1 2005/01/25 02:03:01 gisburn Exp $
+
+
+
+@@ -70,6 +70,7 @@
+ XI18NTarget(en_US.UTF-8)
+ XI18NTarget(ja_JP.UTF-8)
+ XI18NTarget(ko_KR.UTF-8)
++XI18NTarget(pt_BR.UTF-8)
+ XI18NTarget(th_TH.UTF-8)
+ XI18NTarget(zh_TW.UTF-8)
+ #ifdef UXPArchitecture
+Index: xc/nls/XI18N_OBJS/pt_BR.UTF-8
+diff -u /dev/null xc/nls/XI18N_OBJS/pt_BR.UTF-8:1.1.2.1
+--- /dev/null Fri Feb 11 21:35:32 2005
++++ xc/nls/XI18N_OBJS/pt_BR.UTF-8 Tue Jan 25 02:03:01 2005
+@@ -0,0 +1,7 @@
++# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME
++#
++# XI18N objects table for pt_BR.UTF-8 locale
++#
++XLC common/xlcUTF8Load _XlcUtf8Loader # XLC_open
++XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister
++XOM common/xomGeneric _XomGenericOpenOM # XOM_open
+Index: xc/nls/XLC_LOCALE/Imakefile
+diff -u xc/nls/XLC_LOCALE/Imakefile:1.2 xc/nls/XLC_LOCALE/Imakefile:1.2.4.1
+--- xc/nls/XLC_LOCALE/Imakefile:1.2 Fri Apr 23 18:44:34 2004
++++ xc/nls/XLC_LOCALE/Imakefile Tue Jan 25 02:03:01 2005
+@@ -1,5 +1,5 @@
+ XCOMM $Xorg: Imakefile,v 1.3 2000/08/17 19:46:59 cpqbld Exp $
+-XCOMM $XdotOrg: xc/nls/XLC_LOCALE/Imakefile,v 1.2 2004/04/23 18:44:34 eich Exp $
++XCOMM $XdotOrg: xc/nls/XLC_LOCALE/Imakefile,v 1.2.4.1 2005/01/25 02:03:01 gisburn Exp $
+
+
+
+@@ -70,6 +70,7 @@
+ LTarget(microsoft-cp1256)
+ LTarget(mulelao-1)
+ LTarget(nokhchi-1)
++LTarget(pt_BR.UTF-8)
+ LTarget(tatar-cyr)
+ LTarget(th_TH)
+ LTarget(th_TH.UTF-8)
+Index: xc/nls/XLC_LOCALE/en_US.UTF-8
+diff -u xc/nls/XLC_LOCALE/en_US.UTF-8:1.2 xc/nls/XLC_LOCALE/en_US.UTF-8:1.2.4.1
+--- xc/nls/XLC_LOCALE/en_US.UTF-8:1.2 Fri Apr 23 18:44:34 2004
++++ xc/nls/XLC_LOCALE/en_US.UTF-8 Mon Dec 13 14:14:37 2004
+@@ -11,20 +11,9 @@
+
+ object_name generic
+
+-XCOMM fs0 class
++XCOMM fs0 class (7 bit ASCII)
+ fs0 {
+ charset {
+- name ISO10646-1
+- }
+- font {
+- primary ISO10646-1
+- }
+-}
+-XCOMM We leave the legacy encodings in for the moment, because we don't
+-XCOMM have that many ISO10646 fonts yet.
+-XCOMM fs1 class (7 bit ASCII)
+-fs1 {
+- charset {
+ name ISO8859-1:GL
+ }
+ font {
+@@ -32,8 +21,8 @@
+ vertical_rotate all
+ }
+ }
+-XCOMM fs2 class (ISO8859 families)
+-fs2 {
++XCOMM fs1 class (ISO8859 families)
++fs1 {
+ charset {
+ name ISO8859-1:GR
+ }
+@@ -41,8 +30,8 @@
+ primary ISO8859-1:GR
+ }
+ }
+-XCOMM fs3 class (Kanji)
+-fs3 {
++XCOMM fs2 class (Kanji)
++fs2 {
+ charset {
+ name JISX0208.1983-0:GL
+ }
+@@ -50,8 +39,8 @@
+ primary JISX0208.1983-0:GL
+ }
+ }
+-XCOMM fs4 class (Korean Character)
+-fs4 {
++XCOMM fs3 class (Korean Character)
++fs3 {
+ charset {
+ name KSC5601.1987-0:GL
+ }
+@@ -59,8 +48,8 @@
+ primary KSC5601.1987-0:GL
+ }
+ }
+-XCOMM fs5 class (Chinese Han Character)
+-fs5 {
++XCOMM fs4 class (Chinese Han Character)
++fs4 {
+ charset {
+ name GB2312.1980-0:GL
+ }
+@@ -68,8 +57,8 @@
+ primary GB2312.1980-0:GL
+ }
+ }
+-XCOMM fs6 class (Half Kana)
+-fs6 {
++XCOMM fs5 class (Half Kana)
++fs5 {
+ charset {
+ name JISX0201.1976-0:GR
+ }
+@@ -78,6 +67,16 @@
+ vertical_rotate all
+ }
+ }
++XCOMM ISO10646 should come last so the fonts above will actually be used
++XCOMM fs6 class
++fs6 {
++ charset {
++ name ISO10646-1
++ }
++ font {
++ primary ISO10646-1
++ }
++}
+ END XLC_FONTSET
+
+ XCOMM
+Index: xc/nls/XLC_LOCALE/pt_BR.UTF-8
+diff -u /dev/null xc/nls/XLC_LOCALE/pt_BR.UTF-8:1.1.2.2
+--- /dev/null Fri Feb 11 21:35:32 2005
++++ xc/nls/XLC_LOCALE/pt_BR.UTF-8 Tue Feb 1 03:17:00 2005
+@@ -0,0 +1,142 @@
++XCOMM XLocale Database Sample for pt_BR.UTF-8
++XCOMM
++XCOMM Based on XLocale Database Sample for en_US.UTF-8
++XCOMM
++
++XCOMM
++XCOMM XLC_FONTSET category
++XCOMM
++XLC_FONTSET
++
++on_demand_loading True
++
++object_name generic
++
++XCOMM fs0 class (7 bit ASCII)
++fs0 {
++ charset {
++ name ISO8859-1:GL
++ }
++ font {
++ primary ISO8859-1:GL
++ vertical_rotate all
++ }
++}
++XCOMM fs1 class (ISO8859 families)
++fs1 {
++ charset {
++ name ISO8859-1:GR
++ }
++ font {
++ primary ISO8859-1:GR
++ }
++}
++XCOMM fs2 class (Kanji)
++fs2 {
++ charset {
++ name JISX0208.1983-0:GL
++ }
++ font {
++ primary JISX0208.1983-0:GL
++ }
++}
++XCOMM fs3 class (Korean Character)
++fs3 {
++ charset {
++ name KSC5601.1987-0:GL
++ }
++ font {
++ primary KSC5601.1987-0:GL
++ }
++}
++XCOMM fs4 class (Chinese Han Character)
++fs4 {
++ charset {
++ name GB2312.1980-0:GL
++ }
++ font {
++ primary GB2312.1980-0:GL
++ }
++}
++XCOMM fs5 class (Half Kana)
++fs5 {
++ charset {
++ name JISX0201.1976-0:GR
++ }
++ font {
++ primary JISX0201.1976-0:GR
++ vertical_rotate all
++ }
++}
++XCOMM ISO10646 is last, per Roland Mainz in
++XCOMM http://bugs.freedesktop.org/show_bug.cgi?id=1896
++fs6 {
++ charset {
++ name ISO10646-1
++ }
++ font {
++ primary ISO10646-1
++ }
++}
++END XLC_FONTSET
++
++XCOMM
++XCOMM XLC_XLOCALE category
++XCOMM
++XLC_XLOCALE
++
++encoding_name UTF-8
++mb_cur_max 6
++state_depend_encoding False
++
++XCOMM cs0 class
++cs0 {
++ side GL:Default
++ length 1
++ ct_encoding ISO8859-1:GL
++}
++
++XCOMM cs1 class
++cs1 {
++ side GR:Default
++ length 1
++ ct_encoding ISO8859-1:GR
++}
++
++XCOMM cs2 class
++cs2 {
++ side GR
++ length 2
++ ct_encoding JISX0208.1983-0:GL; JISX0208.1983-0:GR;\
++ JISX0208.1983-1:GL; JISX0208.1983-1:GR
++}
++
++XCOMM cs3 class
++cs3 {
++ side GL
++ length 2
++ ct_encoding KSC5601.1987-0:GL; KSC5601.1987-0:GR;\
++ KSC5601.1987-1:GL; KSC5601.1987-1:GR
++}
++
++XCOMM cs4 class
++cs4 {
++ side GR
++ length 2
++ ct_encoding GB2312.1980-0:GL; GB2312.1980-0:GR
++}
++
++XCOMM cs5 class
++cs5 {
++ side GR
++ length 1
++ ct_encoding JISX0201.1976-0:GR
++}
++
++XCOMM cs6 class
++cs6 {
++ side none
++ ct_encoding ISO10646-1
++}
++
++END XLC_XLOCALE
+Index: xc/programs/Imakefile
+diff -u xc/programs/Imakefile:1.8 xc/programs/Imakefile:1.8.2.1
+--- xc/programs/Imakefile:1.8 Thu Sep 2 01:10:29 2004
++++ xc/programs/Imakefile Mon Jan 24 05:01:54 2005
+@@ -56,7 +56,7 @@
+ XVINFOSRCDIR = xvinfo
+ #endif
+ XHOSTSRCDIR = xhost
+-#if BuildPlugin
++#if BuildPlugin && BuildXaw
+ XRXSRCDIR = xrx
+ #endif
+ XSMSRCDIR = xsm
+Index: xc/programs/Xserver/Imakefile
+diff -u xc/programs/Xserver/Imakefile:1.19 xc/programs/Xserver/Imakefile:1.19.2.1
+--- xc/programs/Xserver/Imakefile:1.19 Wed Sep 1 00:59:17 2004
++++ xc/programs/Xserver/Imakefile Wed Dec 15 19:22:53 2004
+@@ -1,4 +1,4 @@
+-XCOMM $XdotOrg: xc/programs/Xserver/Imakefile,v 1.19 2004/09/01 00:59:17 kem Exp $
++XCOMM $XdotOrg: xc/programs/Xserver/Imakefile,v 1.19.2.1 2004/12/15 19:22:53 ago Exp $
+ XCOMM $Xorg: Imakefile,v 1.4 2001/03/14 18:42:02 pookie Exp $
+ /*
+ * Server Master Makefile
+@@ -1019,7 +1019,8 @@
+ XWINOBJS = $(XWINDDXDIR)/stubs.o $(XWINDDXDIR)/XWin.res
+ XWINLIBS = PreFbLibs $(XWINLIB) FbPostFbLibs $(XWINLIB) $(XWINLAYERLIB) \
+ $(SHADOW) $(XWINPARSERLIB) $(ROOTLESSLIB)
+-XWINSYSLIBS = $(FONTLIBS) $(LDPRELIBS) $(XONLYLIB) $(SYSLIBS) -lgdi32
++XWINSYSLIBS = $(FONTLIBS) $(LDPRELIBS) $(XONLYLIB) $(SYSLIBS) -lgdi32 \
++ -lbinmode
+
+ EXTRA_LDOPTIONS = -e _mainCRTStartup
+
+Index: xc/programs/Xserver/GL/dri/dri.c
+diff -u xc/programs/Xserver/GL/dri/dri.c:1.6 xc/programs/Xserver/GL/dri/dri.c:1.6.2.1
+--- xc/programs/Xserver/GL/dri/dri.c:1.6 Fri Jul 30 20:38:27 2004
++++ xc/programs/Xserver/GL/dri/dri.c Wed Dec 8 05:44:42 2004
+@@ -71,6 +71,8 @@
+ extern Bool noPanoramiXExtension;
+ #endif
+
++extern Bool noXFree86DRIExtension;
++
+ static int DRIScreenPrivIndex = -1;
+ static int DRIWindowPrivIndex = -1;
+ static unsigned long DRIGeneration = 0;
+@@ -129,6 +131,13 @@
+ DRIGeneration = serverGeneration;
+ }
+
++ /* If the DRI extension is disabled, do not initialize the DRI */
++ if (noXFree86DRIExtension) {
++ DRIDrvMsg(pScreen->myNum, X_WARNING,
++ "Direct rendering has been disabled.\n");
++ return FALSE;
++ }
++
+ /*
+ * If Xinerama is on, don't allow DRI to initialise. It won't be usable
+ * anyway.
+Index: xc/programs/Xserver/Xext/saver.c
+diff -u xc/programs/Xserver/Xext/saver.c:1.2 xc/programs/Xserver/Xext/saver.c:1.2.4.2
+--- xc/programs/Xserver/Xext/saver.c:1.2 Fri Apr 23 18:44:41 2004
++++ xc/programs/Xserver/Xext/saver.c Mon Dec 13 03:34:33 2004
+@@ -1,4 +1,4 @@
+-/* $XdotOrg: xc/programs/Xserver/Xext/saver.c,v 1.2 2004/04/23 18:44:41 eich Exp $ */
++/* $XdotOrg: xc/programs/Xserver/Xext/saver.c,v 1.2.4.2 2004/12/13 03:34:33 gisburn Exp $ */
+ /*
+ * $XConsortium: saver.c,v 1.12 94/04/17 20:59:36 dpw Exp $
+ *
+@@ -210,7 +210,7 @@
+
+ #define GetScreenPrivate(s) ((ScreenSaverScreenPrivatePtr)(s)->devPrivates[ScreenPrivateIndex].ptr)
+ #define SetScreenPrivate(s,v) ((s)->devPrivates[ScreenPrivateIndex].ptr = (pointer) v);
+-#define SetupScreen(s) ScreenSaverScreenPrivatePtr pPriv = GetScreenPrivate(s)
++#define SetupScreen(s) ScreenSaverScreenPrivatePtr pPriv = (s ? GetScreenPrivate(s) : NULL)
+
+ #define New(t) ((t *) xalloc (sizeof (t)))
+
+@@ -1185,6 +1185,7 @@
+ pPriv = GetScreenPrivate (pDraw->pScreen);
+ if (pPriv && pPriv->attr && pPriv->attr->client == client)
+ {
++ FreeResource (pPriv->attr->resource, AttrType);
+ FreeScreenAttr (pPriv->attr);
+ pPriv->attr = NULL;
+ CheckScreenPrivate (pDraw->pScreen);
+Index: xc/programs/Xserver/Xext/xf86bigfont.c
+diff -u xc/programs/Xserver/Xext/xf86bigfont.c:1.2 xc/programs/Xserver/Xext/xf86bigfont.c:1.2.4.1
+--- xc/programs/Xserver/Xext/xf86bigfont.c:1.2 Fri Apr 23 18:44:41 2004
++++ xc/programs/Xserver/Xext/xf86bigfont.c Wed Dec 8 06:41:00 2004
+@@ -99,12 +99,12 @@
+
+ static unsigned int pagesize;
+
++static Bool badSysCall = FALSE;
++
+ #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__CYGWIN__)
+
+ #include <sys/signal.h>
+
+-static Bool badSysCall = FALSE;
+-
+ static void
+ SigSysHandler(
+ int signo)
+@@ -471,13 +471,16 @@
+
+ if (nCharInfos > 0) {
+ #ifdef HAS_SHM
+- pDesc = (ShmDescPtr) FontGetPrivate(pFont, FontShmdescIndex);
++ if (!badSysCall)
++ pDesc = (ShmDescPtr) FontGetPrivate(pFont, FontShmdescIndex);
++ else
++ pDesc = NULL;
+ if (pDesc) {
+ pCI = (xCharInfo *) pDesc->attach_addr;
+ if (stuff_flags & XF86Bigfont_FLAGS_Shm)
+ shmid = pDesc->shmid;
+ } else {
+- if (stuff_flags & XF86Bigfont_FLAGS_Shm)
++ if (stuff_flags & XF86Bigfont_FLAGS_Shm && !badSysCall)
+ pDesc = shmalloc(nCharInfos * sizeof(xCharInfo)
+ + sizeof(CARD32));
+ if (pDesc) {
+@@ -522,7 +525,7 @@
+ }
+ }
+ #ifdef HAS_SHM
+- if (pDesc) {
++ if (pDesc && !badSysCall) {
+ *(CARD32 *)(pCI + nCharInfos) = signature;
+ if (!FontSetPrivate(pFont, FontShmdescIndex, pDesc)) {
+ shmdealloc(pDesc);
+Index: xc/programs/Xserver/Xext/xf86vmode.c
+diff -u xc/programs/Xserver/Xext/xf86vmode.c:1.2 xc/programs/Xserver/Xext/xf86vmode.c:1.2.4.1
+--- xc/programs/Xserver/Xext/xf86vmode.c:1.2 Fri Apr 23 18:44:41 2004
++++ xc/programs/Xserver/Xext/xf86vmode.c Wed Dec 15 05:01:25 2004
+@@ -29,7 +29,7 @@
+ from Kaleb S. KEITHLEY
+
+ */
+-/* $XdotOrg: xc/programs/Xserver/Xext/xf86vmode.c,v 1.2 2004/04/23 18:44:41 eich Exp $ */
++/* $XdotOrg: xc/programs/Xserver/Xext/xf86vmode.c,v 1.2.4.1 2004/12/15 05:01:25 gisburn Exp $ */
+ /* $Xorg: xf86vmode.c,v 1.3 2000/08/17 19:47:59 cpqbld Exp $ */
+ /* THIS IS NOT AN X CONSORTIUM STANDARD OR AN X PROJECT TEAM SPECIFICATION */
+
+@@ -52,6 +52,8 @@
+ #include "xf86_ansic.h"
+ #endif
+
++#define DEFAULT_XF86VIDMODE_VERBOSITY 3
++
+ static int VidModeErrorBase;
+ static int VidModeGeneration = 0;
+ static int VidModeClientPrivateIndex;
+@@ -468,7 +470,7 @@
+ rep.vtotal = VidModeGetModeValue(mode, VIDMODE_V_TOTAL);
+ rep.flags = VidModeGetModeValue(mode, VIDMODE_FLAGS);
+
+- if (xf86GetVerbosity() > 1) {
++ if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
+ ErrorF("GetModeLine - scrn: %d clock: %ld\n",
+ stuff->screen, (unsigned long)rep.dotclock);
+ ErrorF("GetModeLine - hdsp: %d hbeg: %d hend: %d httl: %d\n",
+@@ -676,7 +678,7 @@
+ stuff->after_vtotal = oldstuff->after_vtotal;
+ stuff->after_flags = oldstuff->after_flags;
+ }
+- if (xf86GetVerbosity() > 1) {
++ if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
+ ErrorF("AddModeLine - scrn: %d clock: %ld\n",
+ (int)stuff->screen, (unsigned long)stuff->dotclock);
+ ErrorF("AddModeLine - hdsp: %d hbeg: %d hend: %d httl: %d\n",
+@@ -787,7 +789,7 @@
+
+ VidModeAddModeline(stuff->screen, mode);
+
+- if (xf86GetVerbosity() > 1)
++ if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY)
+ ErrorF("AddModeLine - Succeeded\n");
+ return client->noClientException;
+ }
+@@ -824,7 +826,7 @@
+ stuff->flags = oldstuff->flags;
+ stuff->privsize = oldstuff->privsize;
+ }
+- if (xf86GetVerbosity() > 1) {
++ if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
+ ErrorF("DeleteModeLine - scrn: %d clock: %ld\n",
+ (int)stuff->screen, (unsigned long)stuff->dotclock);
+ ErrorF(" hdsp: %d hbeg: %d hend: %d httl: %d\n",
+@@ -843,7 +845,7 @@
+ len = client->req_len - (sizeof(xXF86VidModeDeleteModeLineReq) >> 2);
+ }
+ if (len != stuff->privsize) {
+- if (xf86GetVerbosity() > 1) {
++ if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
+ ErrorF("req_len = %ld, sizeof(Req) = %d, privsize = %ld, "
+ "len = %d, length = %d\n",
+ (unsigned long)client->req_len,
+@@ -859,7 +861,7 @@
+ if (!VidModeGetCurrentModeline(stuff->screen, &mode, &dotClock))
+ return BadValue;
+
+- if (xf86GetVerbosity() > 1) {
++ if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
+ ErrorF("Checking against clock: %d (%d)\n",
+ VidModeGetModeValue(mode, VIDMODE_CLOCK), dotClock);
+ ErrorF(" hdsp: %d hbeg: %d hend: %d httl: %d\n",
+@@ -882,7 +884,7 @@
+ return BadValue;
+
+ do {
+- if (xf86GetVerbosity() > 1) {
++ if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
+ ErrorF("Checking against clock: %d (%d)\n",
+ VidModeGetModeValue(mode, VIDMODE_CLOCK), dotClock);
+ ErrorF(" hdsp: %d hbeg: %d hend: %d httl: %d\n",
+@@ -900,7 +902,7 @@
+ if ((VidModeGetDotClock(stuff->screen, stuff->dotclock) == dotClock) &&
+ MODEMATCH(mode, stuff)) {
+ VidModeDeleteModeline(stuff->screen, mode);
+- if (xf86GetVerbosity())
++ if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY)
+ ErrorF("DeleteModeLine - Succeeded\n");
+ return(client->noClientException);
+ }
+@@ -940,7 +942,7 @@
+ stuff->flags = oldstuff->flags;
+ stuff->privsize = oldstuff->privsize;
+ }
+- if (xf86GetVerbosity() > 1) {
++ if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
+ ErrorF("ModModeLine - scrn: %d hdsp: %d hbeg: %d hend: %d httl: %d\n",
+ (int)stuff->screen, stuff->hdisplay, stuff->hsyncstart,
+ stuff->hsyncend, stuff->htotal);
+@@ -1028,7 +1030,7 @@
+ VidModeSetCrtcForMode(stuff->screen, mode);
+ VidModeSwitchMode(stuff->screen, mode);
+
+- if (xf86GetVerbosity() > 1)
++ if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY)
+ ErrorF("ModModeLine - Succeeded\n");
+ return(client->noClientException);
+ }
+@@ -1066,7 +1068,7 @@
+ stuff->flags = oldstuff->flags;
+ stuff->privsize = oldstuff->privsize;
+ }
+- if (xf86GetVerbosity() > 1) {
++ if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
+ ErrorF("ValidateModeLine - scrn: %d clock: %ld\n",
+ (int)stuff->screen, (unsigned long)stuff->dotclock);
+ ErrorF(" hdsp: %d hbeg: %d hend: %d httl: %d\n",
+@@ -1146,7 +1148,7 @@
+ swapl(&rep.status, n);
+ }
+ WriteToClient(client, sizeof(xXF86VidModeValidateModeLineReply), (char *)&rep);
+- if (xf86GetVerbosity() > 1)
++ if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY)
+ ErrorF("ValidateModeLine - Succeeded (status = %d)\n", status);
+ return(client->noClientException);
+ }
+@@ -1200,7 +1202,7 @@
+ stuff->flags = oldstuff->flags;
+ stuff->privsize = oldstuff->privsize;
+ }
+- if (xf86GetVerbosity() > 1) {
++ if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
+ ErrorF("SwitchToMode - scrn: %d clock: %ld\n",
+ (int)stuff->screen, (unsigned long)stuff->dotclock);
+ ErrorF(" hdsp: %d hbeg: %d hend: %d httl: %d\n",
+@@ -1235,7 +1237,7 @@
+ return BadValue;
+
+ do {
+- if (xf86GetVerbosity() > 1) {
++ if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY) {
+ ErrorF("Checking against clock: %d (%d)\n",
+ VidModeGetModeValue(mode, VIDMODE_CLOCK), dotClock);
+ ErrorF(" hdsp: %d hbeg: %d hend: %d httl: %d\n",
+@@ -1256,7 +1258,7 @@
+ if (!VidModeSwitchMode(stuff->screen, mode))
+ return BadValue;
+
+- if (xf86GetVerbosity() > 1)
++ if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY)
+ ErrorF("SwitchToMode - Succeeded\n");
+ return(client->noClientException);
+ }
+Index: xc/programs/Xserver/XpConfig/Imakefile
+diff -u xc/programs/Xserver/XpConfig/Imakefile:1.2 xc/programs/Xserver/XpConfig/Imakefile:1.2.6.1
+--- xc/programs/Xserver/XpConfig/Imakefile:1.2 Fri Apr 23 18:45:37 2004
++++ xc/programs/Xserver/XpConfig/Imakefile Tue Jan 25 02:03:01 2005
+@@ -468,9 +468,14 @@
+ pt.ISO8859-15 \
+ pt_BR \
+ pt_BR.ISO8859-1 \
+- pt_BR.UTF-8 \
++ pt_BR.ISO-8859-1 \
++ pt_BR.ISO_8859-1 \
+ pt_BR.iso88591 \
++ pt_BR.iso885915 \
++ pt_BR.88591 \
++ pt_BR.88591.en \
+ pt_BR.utf8 \
++ pt_BR.UTF-8 \
+ pt_PT \
+ pt_PT.ISO8859-1 \
+ pt_PT.ISO8859-15 \
+Index: xc/programs/Xserver/Xprint/Imakefile
+diff -u xc/programs/Xserver/Xprint/Imakefile:1.3 xc/programs/Xserver/Xprint/Imakefile:1.3.4.1
+--- xc/programs/Xserver/Xprint/Imakefile:1.3 Mon Apr 26 11:07:03 2004
++++ xc/programs/Xserver/Xprint/Imakefile Wed Dec 15 07:38:28 2004
+@@ -126,13 +126,11 @@
+
+ DependTarget()
+
+-MANDIR = $(MISCMANDIR)
+-MANSUFFIX = $(MISCMANSUFFIX)
+-InstallManPage(Xprint,$(MANDIR))
++InstallManPage(Xprt,$(MANDIR))
+
+ #ifdef HasDocBookTools
+-all:: Xprint.man Xprint.html
++all:: Xprt.man Xprt.html
+
+-ConvertDocBookToManPage(Xprint.sgml, Xprint.man)
+-ConvertDocBookToHTML(Xprint.sgml, Xprint.html)
++ConvertDocBookToManPage(Xprt.sgml, Xprt.man)
++ConvertDocBookToHTML(Xprt.sgml, Xprt.html)
+ #endif /* HasDocBookTools */
+Index: xc/programs/Xserver/Xprint/Init.c
+diff -u xc/programs/Xserver/Xprint/Init.c:1.6 xc/programs/Xserver/Xprint/Init.c:1.6.4.2
+--- xc/programs/Xserver/Xprint/Init.c:1.6 Thu Jun 24 06:26:27 2004
++++ xc/programs/Xserver/Xprint/Init.c Mon Dec 13 05:12:12 2004
+@@ -163,6 +163,7 @@
+ PixmapFormatRec PSPixmapFormats[] = {
+ { 1, 1, BITMAP_SCANLINE_PAD },
+ { 8, 8, BITMAP_SCANLINE_PAD },
++ { 12, 16, BITMAP_SCANLINE_PAD },
+ { 24, 32, BITMAP_SCANLINE_PAD }
+ };
+
+@@ -1217,9 +1218,9 @@
+ * calling XpContextOfClient (in Xserver/Xext/xprint.c) to determine
+ * the context associated with the client, and then queries the context's
+ * attributes to determine whether the bitmap fonts should be visible.
+- * It looks at the value of the xp-listfonts-mode document/page attribute to
++ * It looks at the value of the xp-listfonts-modes document/page attribute to
+ * see if xp-list-glyph-fonts has been left out of the mode list. Only
+- * if the xp-listfonts-mode attribute exists, and it does not contain
++ * if the xp-listfonts-modes attribute exists, and it does not contain
+ * xp-list-glyph-fonts does this function return FALSE. In any other
+ * case the funtion returns TRUE, indicating that the bitmap fonts
+ * should be visible to the client.
+@@ -1238,10 +1239,10 @@
+ * Check the page attributes, and if it's not defined there, then
+ * check the document attributes.
+ */
+- mode = XpGetOneAttribute(pContext, XPPageAttr, "xp-listfonts-mode");
++ mode = XpGetOneAttribute(pContext, XPPageAttr, "xp-listfonts-modes");
+ if(!mode || !strlen(mode))
+ {
+- mode = XpGetOneAttribute(pContext, XPDocAttr, "xp-listfonts-mode");
++ mode = XpGetOneAttribute(pContext, XPDocAttr, "xp-listfonts-modes");
+ if(!mode || !strlen(mode))
+ return TRUE;
+ }
+@@ -1251,14 +1252,21 @@
+
+ return TRUE;
+ }
++
+ /*
+ * XpClientIsPrintClient is called by the font code to find out if
+ * a particular client has set a context which references a printer
+- * which utilizes a particular font path. This function works by
+- * calling XpContextOfClient (in Xserver/Xext/xprint.c) to determine
+- * the context associated with the client, and then looks up the
+- * font directory for the context. The font directory is then compared
+- * with the directory specified in the FontPathElement which is passed in.
++ * which utilizes a particular font path.
++ * This function works by calling XpContextOfClient
++ * (in Xserver/Xext/xprint.c) to determine the context associated with
++ * the client and then looks at the value of the xp-listfonts-modes
++ * document/page attribute to see if xp-list-internal-printer-fonts has
++ * been left out of the mode list.
++ * If the xp-listfonts-modes attribute exists, and it does not contain
++ * xp-list-internal-printer-fonts this function returns FALSE.
++ * Otherwise it looks up the font directory for the context. The font
++ * directory is then compared with the directory specified in the
++ * FontPathElement which is passed in.
+ */
+ Bool
+ XpClientIsPrintClient(
+@@ -1266,11 +1274,28 @@
+ FontPathElementPtr fpe)
+ {
+ XpContextPtr pContext;
++ char *mode;
+ char *modelID, *fontDir;
+
+ if(!(pContext = XpContextOfClient(client)))
+ return FALSE;
+
++ /*
++ * Check the page attributes, and if it's not defined there, then
++ * check the document attributes.
++ */
++ mode = XpGetOneAttribute(pContext, XPPageAttr, "xp-listfonts-modes");
++ if(!mode || !strlen(mode))
++ {
++ mode = XpGetOneAttribute(pContext, XPDocAttr, "xp-listfonts-modes");
++ }
++
++ if(mode && strlen(mode))
++ {
++ if(!strstr(mode, "xp-list-internal-printer-fonts"))
++ return FALSE;
++ }
++
+ if (!fpe)
+ return TRUE;
+
+Index: xc/programs/Xserver/Xprint/Oid.c
+diff -u xc/programs/Xserver/Xprint/Oid.c:1.2 xc/programs/Xserver/Xprint/Oid.c:1.2.4.1
+--- xc/programs/Xserver/Xprint/Oid.c:1.2 Fri Apr 23 18:57:32 2004
++++ xc/programs/Xserver/Xprint/Oid.c Mon Dec 13 05:30:48 2004
+@@ -2104,16 +2104,16 @@
+ {
+ switch(notify)
+ {
+- case XPOID_NOTIFY_UNSUPPORTED:
+- return (const char*)NULL;
+- break;
+- case XPOID_NOTIFY_NONE:
+- return NOTIFY_NONE_STR;
+- break;
+- case XPOID_NOTIFY_EMAIL:
+- return NOTIFY_EMAIL_STR;
+- break;
++ case XPOID_NOTIFY_NONE:
++ return NOTIFY_NONE_STR;
++ case XPOID_NOTIFY_EMAIL:
++ return NOTIFY_EMAIL_STR;
++ case XPOID_NOTIFY_UNSUPPORTED:
++ return (const char *)NULL;
+ }
++
++ ErrorF("XpOidNotifyString: Unsupported notify=%ld\n", (long)notify);
++ return (const char *)NULL;
+ }
+
+ /*
+Index: xc/programs/Xserver/Xprint/Util.c
+diff -u xc/programs/Xserver/Xprint/Util.c:1.2 xc/programs/Xserver/Xprint/Util.c:1.2.4.1
+--- xc/programs/Xserver/Xprint/Util.c:1.2 Fri Apr 23 18:57:32 2004
++++ xc/programs/Xserver/Xprint/Util.c Mon Jan 24 03:39:28 2005
+@@ -141,30 +141,6 @@
+ return string;
+ }
+
+-/*
+- * ExecCommand takes two character pointers - the command to execute,
+- * and the "argv" style NULL-terminated vector of arguments for the command.
+- * We wait for the command to terminate before continuing to ensure that
+- * we don't delete the job file before the spooler has made a copy.
+- */
+-void
+-ExecCommand(
+- char *pCommand,
+- char **argVector)
+-{
+- pid_t childPid;
+- int status;
+-
+- if((childPid = fork()) == 0)
+- {
+- execv(pCommand, argVector);
+- }
+- else
+- {
+- (void) waitpid(childPid, &status, 0);
+- }
+- return;
+-}
+
+ /*
+ * TransferBytes reads numBytes of data from pSrcFile and writes them
+Index: xc/programs/Xserver/Xprint/Xprint.html
+diff -u xc/programs/Xserver/Xprint/Xprint.html:1.3 xc/programs/Xserver/Xprint/Xprint.html:removed
+--- xc/programs/Xserver/Xprint/Xprint.html:1.3 Tue Jun 29 17:10:13 2004
++++ xc/programs/Xserver/Xprint/Xprint.html Fri Feb 11 21:35:32 2005
+@@ -1,296 +0,0 @@
+-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Xprint</title><meta name="generator" content="DocBook XSL Stylesheets V1.62.4"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="Xprint"></a><div class="titlepage"><div></div><div></div></div><div class="refnamediv"><h2>Name</h2><p>Xprint — The "X print service" - a portable, network-transparent printing system based on the X11 protocol</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p>Xprint is a very flexible, extensible, scaleable, client/server
+- print system based on ISO 10175 (and some other specs) and the X11
+- rendering protocol.
+- Using Xprint an application can search, query and use devices like
+- printers, FAX machines or create documents in formats like PDF.
+- In particular, an application can seek a printer, query supported
+- attributes (like paper size, trays, fonts etc.), configure the printer
+- device to match it’s needs and print on it like on any other X device
+- reusing parts of the code which is used for the video card Xserver.
+- </p></div><div xmlns:ns1="" class="refsect1" lang="en"><a name="id2802146"></a><h2>OVERVIEW</h2><p>
+- The "X Print Service" technology allows X rendering to devices such as
+- printers and fax. Most of the service is available in the X11
+- technology stack as Xp, with the remainder in single toolkit stacks (e.g. DtPrint for CDE).
+- Modifications have also been made to the LessTif/Motif/Qt technology
+- stacks to support Xprint.
+- </p><p>
+- The Xp portion consists of:
+- </p><div class="itemizedlist"><ul type="disc"><li><p>Xp Extension for the X-Server (included in the X-Server Xprt)</p></li><li><p>Xp Extension API for the client side (libXp/libXprintUtils)</p></li><li><p>PCL ddx driver that converts core X to native PCL</p></li><li><p>PDF ddx driver that converts core X to native PDF</p></li><li><p>PostScript ddx driver that converts core X to native PostScript</p></li><li><p>Raster ddx driver that generates xwd rasters which can be converted to PCL, PDF or PostScript rasters</p></li></ul></div><p>
+- From an X clients perspective, it can attach to one of two nearly
+- identical X-Servers, a "Video" X-Server, and a "Print" X-Server
+- which has the additional Xp capability but otherwise looks and
+- behaves the same.
+- </p></div><div xmlns:ns2="" class="refsect1" lang="en"><a name="id2804972"></a><h2>HOW THE X PRINT SERVICE WORKS</h2><p>
+- The X Print Service expands on the traditional X-Server and Xlib world
+- in four ways.
+-
+- </p><div class="orderedlist"><ol type="1"><li><p>
+- Most obvious is the use of "print ddx drivers" instead of
+- "video ddx drivers". While a video ddx driver modifies pixels
+- in a video frame buffer, a print ddx driver generates "page
+- description language (PDL)" output (such as PCL, PDF or PostScript)
+- or sends the print rendering instructions to a platform-specific
+- print API (like Win32/GDI).
+- </p><p>
+- Once a print ddx driver generates PDL output, it can be sent to
+- a spooler such as <span class="citerefentry"><span class="refentrytitle">lp</span>(1)</span>
+- or retrieved by the client (to implement functionality like "print-to-file").
+- </p><p>
+- Though not currently done, a single X-Server can support both
+- print and video ddx drivers.
+- </p></li><li><p>
+- Since printers support "paged" output, unlike video, a portion
+- of the Xp Extension supports APIs to delineate printed output.
+- For example, <tt class="function">XpStartPage</tt> and <tt class="function">XpEndPage</tt> tell the X-Server where
+- a physical page starts and ends in an otherwise continuous
+- stream of X rendering primitives. Likewise, <tt class="function">XpStartJob</tt> and
+- <tt class="function">XpEndJob</tt> determine when a collection of pages starts and ends.
+- <tt class="function">XpEndJob</tt> typically causes the generated PDL to be submitted to
+- a spooler, such as <span class="citerefentry"><span class="refentrytitle">lp</span>(1)</span>.
+- </p></li><li><p>
+- Since printers have extensive capabilities, another portion of
+- the Xp Extension supports APIs to manipulate "print contexts".
+- </p><p>
+- Once a printer is selected using the Xp Extension API, a print
+- context to represent it can be created. A print context
+- embodies the printer selected - it contains the printer's
+- default capabilities, selectable range of capabilities,
+- printer state, and generated output. Some "attributes" within
+- the print context can be modified by the user, and the
+- X-Server and print ddx driver will react accordingly. For
+- example, the attribute "content-orientation" can be set to
+- "landscape" or "portrait" (if the printer supports these
+- values - which can be queried using the Xprint API as well).
+- </p></li><li><p>
+- Since printers can have "built in" fonts, the Xp Extension in
+- the X-Server works with the print ddx drivers to make
+- available (for printing only) additional fonts on a per print
+- context basis.
+- </p><p>
+- When a print context is created and set for a given printer,
+- the X font calls may be able to access additional printer
+- fonts. To do this (typically), the X-Server must have access
+- to "printer metric files" (.pmf) that describe at minimum the
+- metrics of the built in fonts.
+- </p></li></ol></div></div><div xmlns:ns3="" class="refsect1" lang="en"><a name="id2804885"></a><h2>USAGE</h2><p>
+- There are three tasks to start the X Print Service:
+- </p><div class="orderedlist"><ol type="1"><li><p>configuring the X Print Server,</p></li><li><p>starting the X Print Service</p></li><li><p>configuring the user session so that clients can find the running X Print Service</p></li></ol></div><p>
+- The tasks are described in detail below.
+- </p></div><div xmlns:ns4="" class="refsect1" lang="en"><a name="id2804911"></a><h2>SERVER CONFIGURATION</h2><p>
+- The X Print Server (Xprt) can read a number of configuration files which
+- control its behavior and support for printers. Each vendor platform has
+- a default location for this information. Xprt can also read the
+- environment variable <tt class="envar">XPCONFIGDIR</tt> to locate alternate configuration
+- directories. Common settings include:
+-
+- </p><table class="simplelist" border="0" summary="Simple list"><tr><td>export XPCONFIGDIR=/X11/lib/X11/XpConfig/</td></tr><tr><td>export XPCONFIGDIR=/proj/x11/xc/programs/Xserver/XpConfig/</td></tr></table><p>
+- Xprt has many built-in defaults, and lacking any configuration files,
+- will immediately try to support all printers visible via <span class="citerefentry"><span class="refentrytitle">lpstat</span>(1)</span>.
+- </p><p>
+- In order of importance for configuration by a system administrator, the
+- configuration files for a "C" locale are as follows (see <span class="citerefentry"><span class="refentrytitle">Xprt</span>(1x)</span> for more
+- details (including support for non-"C" locales)):
+- </p><div class="variablelist"><dl><dt><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/Xprinters</tt></span></dt><dd><p>
+- 'Xprinters' is the top most configuration file. It tells
+- Xprt which specific printer names (e.g. mylaser) should
+- be supported, and whether <span class="citerefentry"><span class="refentrytitle">lpstat</span>(1)</span> or other commands
+- should be used to automatically supplement the list of
+- printers.
+- </p></dd><dt><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/attributes/printer</tt></span></dt><dd><p>
+- The 'printer' file maps printer names to model
+- configurations (see 'model-config' below). For example,
+- "mylaser" could be mapped to a "HPDJ1600C", and all other
+- arbitrary printers could be mapped to a default, such as
+- "HPLJ4SI". When depending on <span class="citerefentry"><span class="refentrytitle">lpstat</span>(1)</span> in the Xprinters
+- file, setting up defaults in 'printer' becomes all the
+- more important.
+- </p></dd><dt><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/attributes/document</tt></span></dt><dd><p>
+- The 'document' file specifies the initial document values
+- for any print jobs. For example, which paper tray to
+- use, what default resolution, etc.
+- </p></dd><dt><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/attributes/job</tt></span></dt><dd><p>
+- The 'job' file specifies the initial job values for any
+- print jobs. For example, "notification-profile" can be
+- set so that when a print job is successfully sent to a
+- printer, e-mail is sent to the user.
+- </p></dd><dt><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/models/PSdefault/model-config</tt>, </span><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/models/PSdefault/fonts/fonts.dir</tt>, </span><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00051.pmf</tt>, </span><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00093.pmf</tt></span></dt><dd><p>
+- The 'model-config' file has attributes that describe the
+- printer model’s capabilities and default settings.
+- Printer model fonts may also be present. The model-config
+- file also identifies the print ddx driver to be used.
+-
+- For each printer model supported, a complete hierarchy of
+- files should exist. In most cases, these files do not
+- need to be modified.
+- </p></dd><dt><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/ddx-config/raster/pcl</tt>, </span><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/ddx-config/raster/pdf</tt>, </span><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/ddx-config/raster/postscript</tt></span></dt><dd><p>
+- The print ddx drivers can have highly specific
+- configuration files to control their behavior. In most
+- cases, these files do not need to be modified.
+- </p></dd></dl></div><p>
+-
+- More information in how to configure and customize the X print server can be found in the
+- <span class="citerefentry"><span class="refentrytitle">Xprt</span>(1x)</span>
+- manual page.
+- </p></div><div xmlns:ns5="" class="refsect1" lang="en"><a name="id2805644"></a><h2>STARTING UP</h2><p>
+- The summary checklist for starting the X Print Service is as follows:
+-
+- </p><div class="orderedlist"><ol type="1"><li><p>
+- Choose an execution model for the X Print Service. The X
+- Print Service can be run on a per-user session basis, per
+- machine basis, or can be run on a few machines globally
+- available to a number of users.
+- </p></li><li><p>
+- If print jobs are to be submitted to a spooler (almost always
+- the case), make sure all needed printers are available to the
+- spooler subsystem (most often <span class="citerefentry"><span class="refentrytitle">lp</span>(1)</span>)
+- on the same machine running the X Print Service.
+- </p></li><li><p>
+- Configure the X Print Server. See ``X Print Server
+- Configuration''.
+- </p></li><li><p>
+- Depending on #1, start the X Print Server process "Xprt", and
+- then the toolkit-specific Print Dialog Manager Daemon process
+- (such as CDEnext's "dtpdmd") at the appropriate times.
+- Note that libXprintUtils-based applications/toolkits do not need
+- a Print Dialog Manager Daemon process to use Xprint.
+- </p></li></ol></div><p>
+- The details are described below.
+- </p><p>
+- Because the X Print Service is based on X, it can be easily distributed.
+- The most significant factors in which execution model to choose will be
+- driven by:
+- </p><div class="itemizedlist"><ul type="disc"><li><p>
+- how many printers will be accessable through the printer
+- subsystem on any given machine. A system administrator may
+- choose to cluster printers on a few given machines, or
+- scatter them across an organization and possibly make
+- extensive use of remote spoolers to make them globally
+- available.
+- </p></li><li><p>
+- how many machines will need a copy of the X Print Server
+- configuration files. The files have been architected so
+- that one super-set version of them can be maintained and
+- distributed (e.g. via NFS), and a per-machine or per-user
+- version of the `Xprinters' is all that is needed to have the
+- appropriate information in them utilized or ignored.
+- </p></li><li><p>
+- how many users can demand services from a given X Print
+- Service.
+- </p></li></ul></div><p>
+-
+- With the above in mind, some obvious execution models include:
+- </p><div class="itemizedlist"><ul type="disc"><li><p>
+- Global - in this model, the system administrator is choosing
+- to run the X Print Service on a *few* select machines with
+- appropriate printers configured, and allow clients access to
+- the global resource. This can centralize the administration
+- of printers and configuration files, but may have to be
+- monitored for performance loading.
+- </p><p>
+- Startup would likely be done by boot-up scripts (such as <tt class="filename">/etc/init.d/xprint</tt>).
+- </p></li><li><p>
+- Per-machine - every machine with potential X Print Service
+- users would run the service. Printer and configuration file
+- administration is decentralized, and usage would be limited
+- to the users on the machine.
+- </p><p>
+- Startup would likely be done by boot-up scripts (such as <tt class="filename">/etc/init.d/xprint</tt>).
+- </p></li><li><p>
+- Per-user session - every user would run an entire X Print
+- Service for themselves. In the future, the Video X Server
+- normally started may contain Print X Server capability, so
+- this model becomes very natural.
+- </p><p>
+- Startup would likely be done at session login or by
+- launching actions or processes manually once the user
+- logs in. Note: Deamons like "dtpdmd" must be started after Xprt.
+- </p></li></ul></div><p>
+- Starting of the processes is straight forward. In strict order (example is for manually starting the X print server for CDEnext usage):
+- </p><div class="orderedlist"><ol type="1"><li><pre class="programlisting">[machineA] % Xprt [-XpFile Xprinters file] [:dispNum] </pre><p>
+- Note that Xprt will look for configuration files in either
+- a default location or where <tt class="envar">XPCONFIGDIR</tt> points.
+- </p><p><tt class="option">-XpFile</tt> specifies an alternate `Xprinters' file, rather
+- than the default one or `<tt class="filename">${XPCONFIGDIR}/C/print/Xprinters</tt>'.
+- </p></li><li><pre class="programlisting">[machineA] % dtpdmd -d machineA[:dispNum] [-l /tmp/dtpdmd.log] </pre><p>
+- The dtpdmd will maintain an X-Selection on the X-Server,
+- and will start dtpdm's as required to service requests.
+- </p></li></ol></div><p>
+- In all but the per-user session model, the machine running the dtpdmd
+- (thus dtpdm's) will need display authorization to the users video
+- display.
+- </p></div><div xmlns:ns6="" class="refsect1" lang="en"><a name="id2805858"></a><h2>CLIENT CONFIGURATION</h2><p>
+- Once a X Print Server and dtpdmd have been started -- many of them
+- in some cases -- clients will need to find and use them. There are
+- two mechanisms that allow clients to discover X Print Servers and
+- printers.
+-
+- </p><div class="itemizedlist"><ul type="disc"><li><p>
+- "X Print Specifier" - assuming usage of the DtPrint/XprintUtils-based print
+- applications, the following notation is understood:
+- </p><pre class="programlisting">printer_name@machine[:dispNum]</pre><p>
+- For example:
+- </p><pre class="programlisting">colorlj7@printhub:2</pre><p>
+- In the above example, the X Print Server running at `printhub:2'
+- is assumed to support the printer named `colorlj7'.
+- </p></li><li><p><tt class="envar">${XPSERVERLIST}</tt> - assuming usage of the DtPrint print dialogs,
+- the environment variable <tt class="envar">${XPSERVERLIST}</tt> can contain a list
+- of X Print Servers. For example:
+- </p><pre class="programlisting">XPSERVERLIST="printhub:2 printhub:3 otherdept:0"</pre><p>
+- Then in the dialogs, only a printer name needs to be entered.
+- The dialog will then search the X Print Servers in <tt class="envar">${XPSERVERLIST}</tt>
+- for a server than supports the printer, and then establish
+- contact.
+- </p></li></ul></div></div><div class="refsect1" lang="en"><a name="id2805927"></a><h2>END-USER SEQUENCE</h2><p>
+- From most CDEnext applications, printing is accomplished by bringing
+- down the File menu and selecting Print.... This will result in
+- the DtPrintSetupBox dialog, which will request the name of a printer,
+- and offer limited capability to configure print options (e.g. number
+- of copies). If the user wishes, they can select Setup..., which
+- will start a dtpdm capable of modifying additional print options.
+- Finally, the user should select Print.
+- </p></div><div class="refsect1" lang="en"><a name="id2805949"></a><h2>ENVIRONMENT</h2><div class="variablelist"><dl><dt><span class="term"><tt class="envar">${XPCONFIGDIR}</tt></span></dt><dd><p> This environment variable points to the root
+- of the Xprint server configuration directory hierarchy.
+- If the variable is not defined, the default
+- path is be assumed. The default path may be
+- <tt class="filename">/usr/X11R6/lib/X11/xserver/</tt>,
+- <tt class="filename">/usr/lib/X11/xserver/</tt>,
+- <tt class="filename">/usr/share/Xprint/xserver/</tt> or
+- <tt class="filename">/usr/openwin/server/etc/XpConfig</tt>, depending on the
+- system, and may be configured in <tt class="filename">/etc/init.d/xprint</tt>.</p></dd><dt><span class="term"><tt class="envar">${LANG}</tt></span></dt><dd><p>
+- This environment variable selects the locale settings used by the Xprint server.
+- Xprt allows language-specific settings (stored in <tt class="filename">${XPCONFIGDIR}/${LANG}/print/</tt>)
+- which will override the default settings (stored in <tt class="filename">${XPCONFIGDIR}/C/print/</tt>).
+- If <tt class="envar">${LANG}</tt> is not set "C" is assumed.
+- </p></dd><dt><span class="term"><tt class="envar">${XPSERVERLIST}</tt></span></dt><dd xmlns:ns7=""><p>The environment variable <tt class="envar">${XPSERVERLIST}</tt> contains a list
+- of display identifiers (separated by whitespace) which tell an
+- application where it can find the Xprint servers. Usually
+- <tt class="envar">${XPSERVERLIST}</tt> is set by the profile startup scripts (e.g.
+- <tt class="filename">/etc/profile</tt> or <tt class="filename">/etc/profile.d/xprint.sh</tt>) using the output of
+- <b class="userinput"><tt>/etc/init.d/xprint get_xpserverlist</tt></b>.</p><p>Example:
+- </p><div class="informalexample"><pre class="programlisting">
+- export XPSERVERLIST="`/etc/init.d/xprint get_xpserverlist`"</pre></div><p>Alternatively <tt class="envar">${XPSERVERLIST}</tt> can be set
+- manually. Example:</p><div class="informalexample"><pre class="programlisting">
+- export XPSERVERLIST="littlecat:80 bitdog:72"</pre></div><p>
+- instructs an application to find an Xprint server at display
+- 80 on the machine "littlecat" and at display 72 on the
+- machine bigdog.
+- </p></dd><dt><span class="term"><tt class="envar">${XPRINTER}</tt></span></dt><dd xmlns:ns8=""><p>The environment variable <tt class="envar">${XPRINTER}</tt>
+- defines the default printer used by print
+- applications. The syntax is either
+- <i class="replaceable"><tt>printername</tt></i> or
+- <i class="replaceable"><tt>printername</tt></i>@<i class="replaceable"><tt>display</tt></i>.</p><p>Examples:
+- </p><div class="variablelist"><dl><dt><span class="term"><b class="userinput"><tt>XPRINTER=ps003</tt></b></span></dt><dd><p>
+- tells an application to look for the
+- first printer named "ps003" on all Xprint
+- servers.</p></dd><dt><span class="term"><b class="userinput"><tt>XPRINTER=hplaser19@littlecat:80</tt></b></span></dt><dd><p>
+- tells an application to use the printer "hplaser19"
+- on the Xprint server at display
+- "littlecat:80".</p></dd></dl></div><p>If <tt class="envar">${XPRINTER}</tt> is not set the applications
+- will examine the values of the <tt class="envar">${PDPRINTER}</tt>,
+- <tt class="envar">${LPDEST}</tt>, and
+- <tt class="envar">${PRINTER}</tt> environment variables (in that order).
+- </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2806168"></a><h2>SEE ALSO</h2><p><span class="simplelist"><span class="citerefentry"><span class="refentrytitle">X11</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">xplsprinters</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xprehashprinterlist</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xphelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpxmhelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpawhelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpxthelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpsimplehelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">Xserver</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">Xprt</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">libXp</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">libXprintUtils</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">libXprintAppUtils</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">XmPrintShell</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">XawPrintShell</span>(3x)</span>, Xprint FAQ (<a href="http://xprint.mozdev.org/docs/Xprint_FAQ.html" target="_top">http://xprint.mozdev.org/docs/Xprint_FAQ.html</a>), Xprint main site (<a href="http://xprint.mozdev.org/" target="_top">http://xprint.mozdev.org/</a>)</span></p></div><div class="refsect1" lang="en"><a name="id2806340"></a><h2>AUTHORS</h2><p>
+- This manual page was written by
+- Roland Mainz <tt class="email"><<a href="mailto:roland.mainz@nrubsig.org">roland.mainz@nrubsig.org</a>></tt> based on the original X11R6.6
+- <tt class="filename">xc/programs/Xserver/XpConfig/README</tt>.
+- </p></div></div></body></html>
+Index: xc/programs/Xserver/Xprint/Xprint.man
+diff -u xc/programs/Xserver/Xprint/Xprint.man:1.3 xc/programs/Xserver/Xprint/Xprint.man:removed
+--- xc/programs/Xserver/Xprint/Xprint.man:1.3 Tue Jun 29 17:10:13 2004
++++ xc/programs/Xserver/Xprint/Xprint.man Fri Feb 11 21:35:32 2005
+@@ -1,415 +0,0 @@
+-.\" This manpage has been automatically generated by docbook2man
+-.\" from a DocBook document. This tool can be found at:
+-.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
+-.\" Please send any bug reports, improvements, comments, patches,
+-.\" etc. to Steve Cheng <steve@ggi-project.org>.
+-.TH "Xprint" "__miscmansuffix__" "29 June 2004" "" ""
+-.SH NAME
+-Xprint \- The \&"X print service\&" - a portable, network-transparent printing system based on the X11 protocol
+-.SH SYNOPSIS
+-.PP
+-Xprint is a very flexible, extensible, scaleable, client/server
+-print system based on ISO 10175 (and some other specs) and the X11
+-rendering protocol.
+-Using Xprint an application can search, query and use devices like
+-printers, FAX machines or create documents in formats like PDF.
+-In particular, an application can seek a printer, query supported
+-attributes (like paper size, trays, fonts etc.), configure the printer
+-device to match its needs and print on it like on any other X device
+-reusing parts of the code which is used for the video card Xserver.
+-.SH "OVERVIEW"
+-.PP
+-The "X Print Service" technology allows X rendering to devices such as
+-printers and fax. Most of the service is available in the X11
+-technology stack as Xp, with the remainder in single toolkit stacks (e.g. DtPrint for CDE).
+-Modifications have also been made to the LessTif/Motif/Qt technology
+-stacks to support Xprint.
+-.PP
+-The Xp portion consists of:
+-.TP 0.2i
+-\(bu
+-Xp Extension for the X-Server (included in the X-Server Xprt)
+-.TP 0.2i
+-\(bu
+-Xp Extension API for the client side (libXp/libXprintUtils)
+-.TP 0.2i
+-\(bu
+-PCL ddx driver that converts core X to native PCL
+-.TP 0.2i
+-\(bu
+-PDF ddx driver that converts core X to native PDF
+-.TP 0.2i
+-\(bu
+-PostScript ddx driver that converts core X to native PostScript
+-.TP 0.2i
+-\(bu
+-Raster ddx driver that generates xwd rasters which can be converted to PCL, PDF or PostScript rasters
+-.PP
+-From an X clients perspective, it can attach to one of two nearly
+-identical X-Servers, a "Video" X-Server, and a "Print" X-Server
+-which has the additional Xp capability but otherwise looks and
+-behaves the same.
+-.SH "HOW THE X PRINT SERVICE WORKS"
+-.PP
+-The X Print Service expands on the traditional X-Server and Xlib world
+-in four ways.
+-.TP 1.
+-Most obvious is the use of "print ddx drivers" instead of
+-"video ddx drivers". While a video ddx driver modifies pixels
+-in a video frame buffer, a print ddx driver generates "page
+-description language (PDL)" output (such as PCL, PDF or PostScript)
+-or sends the print rendering instructions to a platform-specific
+-print API (like Win32/GDI).
+-
+-Once a print ddx driver generates PDL output, it can be sent to
+-a spooler such as \fBlp\fR(1)
+-or retrieved by the client (to implement functionality like "print-to-file").
+-
+-Though not currently done, a single X-Server can support both
+-print and video ddx drivers.
+-.TP 2.
+-Since printers support "paged" output, unlike video, a portion
+-of the Xp Extension supports APIs to delineate printed output.
+-For example, \fBXpStartPage\fR and \fBXpEndPage\fR tell the X-Server where
+-a physical page starts and ends in an otherwise continuous
+-stream of X rendering primitives. Likewise, \fBXpStartJob\fR and
+-\fBXpEndJob\fR determine when a collection of pages starts and ends.
+-\fBXpEndJob\fR typically causes the generated PDL to be submitted to
+-a spooler, such as \fBlp\fR(1).
+-.TP 3.
+-Since printers have extensive capabilities, another portion of
+-the Xp Extension supports APIs to manipulate "print contexts".
+-
+-Once a printer is selected using the Xp Extension API, a print
+-context to represent it can be created. A print context
+-embodies the printer selected - it contains the printer's
+-default capabilities, selectable range of capabilities,
+-printer state, and generated output. Some "attributes" within
+-the print context can be modified by the user, and the
+-X-Server and print ddx driver will react accordingly. For
+-example, the attribute "content-orientation" can be set to
+-"landscape" or "portrait" (if the printer supports these
+-values - which can be queried using the Xprint API as well).
+-.TP 4.
+-Since printers can have "built in" fonts, the Xp Extension in
+-the X-Server works with the print ddx drivers to make
+-available (for printing only) additional fonts on a per print
+-context basis.
+-
+-When a print context is created and set for a given printer,
+-the X font calls may be able to access additional printer
+-fonts. To do this (typically), the X-Server must have access
+-to "printer metric files" (.pmf) that describe at minimum the
+-metrics of the built in fonts.
+-.SH "USAGE"
+-.PP
+-There are three tasks to start the X Print Service:
+-.TP 1.
+-configuring the X Print Server,
+-.TP 2.
+-starting the X Print Service
+-.TP 3.
+-configuring the user session so that clients can find the running X Print Service
+-.PP
+-The tasks are described in detail below.
+-.SH "SERVER CONFIGURATION"
+-.PP
+-The X Print Server (Xprt) can read a number of configuration files which
+-control its behavior and support for printers. Each vendor platform has
+-a default location for this information. Xprt can also read the
+-environment variable \fBXPCONFIGDIR\fR to locate alternate configuration
+-directories. Common settings include:
+-
+-export XPCONFIGDIR=/X11/lib/X11/XpConfig/
+-
+-export XPCONFIGDIR=/proj/x11/xc/programs/Xserver/XpConfig/
+-.PP
+-Xprt has many built-in defaults, and lacking any configuration files,
+-will immediately try to support all printers visible via \fBlpstat\fR(1).
+-.PP
+-In order of importance for configuration by a system administrator, the
+-configuration files for a "C" locale are as follows (see \fBXprt\fR(__mansuffix__) for more
+-details (including support for non-"C" locales)):
+-.TP
+-\fB\fI${XPCONFIGDIR}/C/print/Xprinters\fB\fR
+-\&'Xprinters' is the top most configuration file. It tells
+-Xprt which specific printer names (e.g. mylaser) should
+-be supported, and whether \fBlpstat\fR(1) or other commands
+-should be used to automatically supplement the list of
+-printers.
+-.TP
+-\fB\fI${XPCONFIGDIR}/C/print/attributes/printer\fB\fR
+-The 'printer' file maps printer names to model
+-configurations (see 'model-config' below). For example,
+-"mylaser" could be mapped to a "HPDJ1600C", and all other
+-arbitrary printers could be mapped to a default, such as
+-"HPLJ4SI". When depending on \fBlpstat\fR(1) in the Xprinters
+-file, setting up defaults in 'printer' becomes all the
+-more important.
+-.TP
+-\fB\fI${XPCONFIGDIR}/C/print/attributes/document\fB\fR
+-The 'document' file specifies the initial document values
+-for any print jobs. For example, which paper tray to
+-use, what default resolution, etc.
+-.TP
+-\fB\fI${XPCONFIGDIR}/C/print/attributes/job\fB\fR
+-The 'job' file specifies the initial job values for any
+-print jobs. For example, "notification-profile" can be
+-set so that when a print job is successfully sent to a
+-printer, e-mail is sent to the user.
+-.TP
+-\fB\fI${XPCONFIGDIR}/C/print/models/PSdefault/model-config\fB\fR
+-.TP
+-\fB\fI${XPCONFIGDIR}/C/print/models/PSdefault/fonts/fonts.dir\fB\fR
+-.TP
+-\fB\fI${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00051.pmf\fB\fR
+-.TP
+-\fB\fI${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00093.pmf\fB\fR
+-The 'model-config' file has attributes that describe the
+-printer models capabilities and default settings.
+-Printer model fonts may also be present. The model-config
+-file also identifies the print ddx driver to be used.
+-For each printer model supported, a complete hierarchy of
+-files should exist. In most cases, these files do not
+-need to be modified.
+-.TP
+-\fB\fI${XPCONFIGDIR}/C/print/ddx-config/raster/pcl\fB\fR
+-.TP
+-\fB\fI${XPCONFIGDIR}/C/print/ddx-config/raster/pdf\fB\fR
+-.TP
+-\fB\fI${XPCONFIGDIR}/C/print/ddx-config/raster/postscript\fB\fR
+-The print ddx drivers can have highly specific
+-configuration files to control their behavior. In most
+-cases, these files do not need to be modified.
+-More information in how to configure and customize the X print server can be found in the
+-\fBXprt\fR(__mansuffix__)
+-manual page.
+-.SH "STARTING UP"
+-.PP
+-The summary checklist for starting the X Print Service is as follows:
+-.TP 1.
+-Choose an execution model for the X Print Service. The X
+-Print Service can be run on a per-user session basis, per
+-machine basis, or can be run on a few machines globally
+-available to a number of users.
+-.TP 2.
+-If print jobs are to be submitted to a spooler (almost always
+-the case), make sure all needed printers are available to the
+-spooler subsystem (most often \fBlp\fR(1))
+-on the same machine running the X Print Service.
+-.TP 3.
+-Configure the X Print Server. See ``X Print Server
+-Configuration''.
+-.TP 4.
+-Depending on #1, start the X Print Server process "Xprt", and
+-then the toolkit-specific Print Dialog Manager Daemon process
+-(such as CDEnext's "dtpdmd") at the appropriate times.
+-Note that libXprintUtils-based applications/toolkits do not need
+-a Print Dialog Manager Daemon process to use Xprint.
+-The details are described below.
+-.PP
+-Because the X Print Service is based on X, it can be easily distributed.
+-The most significant factors in which execution model to choose will be
+-driven by:
+-.TP 0.2i
+-\(bu
+-how many printers will be accessable through the printer
+-subsystem on any given machine. A system administrator may
+-choose to cluster printers on a few given machines, or
+-scatter them across an organization and possibly make
+-extensive use of remote spoolers to make them globally
+-available.
+-.TP 0.2i
+-\(bu
+-how many machines will need a copy of the X Print Server
+-configuration files. The files have been architected so
+-that one super-set version of them can be maintained and
+-distributed (e.g. via NFS), and a per-machine or per-user
+-version of the `Xprinters' is all that is needed to have the
+-appropriate information in them utilized or ignored.
+-.TP 0.2i
+-\(bu
+-how many users can demand services from a given X Print
+-Service.
+-With the above in mind, some obvious execution models include:
+-.TP 0.2i
+-\(bu
+-Global - in this model, the system administrator is choosing
+-to run the X Print Service on a *few* select machines with
+-appropriate printers configured, and allow clients access to
+-the global resource. This can centralize the administration
+-of printers and configuration files, but may have to be
+-monitored for performance loading.
+-
+-Startup would likely be done by boot-up scripts (such as \fI/etc/init.d/xprint\fR).
+-.TP 0.2i
+-\(bu
+-Per-machine - every machine with potential X Print Service
+-users would run the service. Printer and configuration file
+-administration is decentralized, and usage would be limited
+-to the users on the machine.
+-
+-Startup would likely be done by boot-up scripts (such as \fI/etc/init.d/xprint\fR).
+-.TP 0.2i
+-\(bu
+-Per-user session - every user would run an entire X Print
+-Service for themselves. In the future, the Video X Server
+-normally started may contain Print X Server capability, so
+-this model becomes very natural.
+-
+-Startup would likely be done at session login or by
+-launching actions or processes manually once the user
+-logs in. Note: Deamons like "dtpdmd" must be started after Xprt.
+-.PP
+-Starting of the processes is straight forward. In strict order (example is for manually starting the X print server for CDEnext usage):
+-.TP 1.
+-
+-.nf
+-[machineA] % Xprt [-XpFile Xprinters file] [:dispNum]
+-.fi
+-
+-Note that Xprt will look for configuration files in either
+-a default location or where \fBXPCONFIGDIR\fR points.
+-
+-\fB-XpFile\fR specifies an alternate `Xprinters' file, rather
+-than the default one or `\fI${XPCONFIGDIR}/C/print/Xprinters\fR'.
+-.TP 2.
+-
+-.nf
+-[machineA] % dtpdmd -d machineA[:dispNum] [-l /tmp/dtpdmd.log]
+-.fi
+-
+-The dtpdmd will maintain an X-Selection on the X-Server,
+-and will start dtpdm's as required to service requests.
+-.PP
+-In all but the per-user session model, the machine running the dtpdmd
+-(thus dtpdm's) will need display authorization to the users video
+-display.
+-.SH "CLIENT CONFIGURATION"
+-.PP
+-Once a X Print Server and dtpdmd have been started -- many of them
+-in some cases -- clients will need to find and use them. There are
+-two mechanisms that allow clients to discover X Print Servers and
+-printers.
+-.TP 0.2i
+-\(bu
+-"X Print Specifier" - assuming usage of the DtPrint/XprintUtils-based print
+-applications, the following notation is understood:
+-
+-
+-.nf
+-printer_name@machine[:dispNum]
+-.fi
+-
+-For example:
+-
+-
+-.nf
+-colorlj7@printhub:2
+-.fi
+-
+-In the above example, the X Print Server running at `printhub:2'
+-is assumed to support the printer named `colorlj7'.
+-.TP 0.2i
+-\(bu
+-\fB${XPSERVERLIST}\fR - assuming usage of the DtPrint print dialogs,
+-the environment variable \fB${XPSERVERLIST}\fR can contain a list
+-of X Print Servers. For example:
+-
+-
+-.nf
+-XPSERVERLIST="printhub:2 printhub:3 otherdept:0"
+-.fi
+-
+-Then in the dialogs, only a printer name needs to be entered.
+-The dialog will then search the X Print Servers in \fB${XPSERVERLIST}\fR
+-for a server than supports the printer, and then establish
+-contact.
+-.SH "END-USER SEQUENCE"
+-.PP
+-From most CDEnext applications, printing is accomplished by bringing
+-down the File menu and selecting Print.... This will result in
+-the DtPrintSetupBox dialog, which will request the name of a printer,
+-and offer limited capability to configure print options (e.g. number
+-of copies). If the user wishes, they can select Setup..., which
+-will start a dtpdm capable of modifying additional print options.
+-Finally, the user should select Print.
+-.SH "ENVIRONMENT"
+-.TP
+-\fB${XPCONFIGDIR}\fR
+-This environment variable points to the root
+-of the Xprint server configuration directory hierarchy.
+-If the variable is not defined, the default
+-path is be assumed. The default path may be
+-\fI/usr/X11R6/lib/X11/xserver/\fR,
+-\fI/usr/lib/X11/xserver/\fR,
+-\fI/usr/share/Xprint/xserver/\fR or
+-\fI/usr/openwin/server/etc/XpConfig\fR, depending on the
+-system, and may be configured in \fI/etc/init.d/xprint\fR.
+-.TP
+-\fB${LANG}\fR
+-This environment variable selects the locale settings used by the Xprint server.
+-Xprt allows language-specific settings (stored in \fI${XPCONFIGDIR}/${LANG}/print/\fR)
+-which will override the default settings (stored in \fI${XPCONFIGDIR}/C/print/\fR).
+-If \fB${LANG}\fR is not set "C" is assumed.
+-.TP
+-\fB${XPSERVERLIST}\fR
+-The environment variable \fB${XPSERVERLIST}\fR contains a list
+-of display identifiers (separated by whitespace) which tell an
+-application where it can find the Xprint servers. Usually
+-\fB${XPSERVERLIST}\fR is set by the profile startup scripts (e.g.
+-\fI/etc/profile\fR or \fI/etc/profile.d/xprint.sh\fR) using the output of
+-\fB/etc/init.d/xprint get_xpserverlist\fR.
+-
+-Example:
+-.PP
+-
+-.nf
+- export XPSERVERLIST="`/etc/init.d/xprint get_xpserverlist`"
+-.fi
+-
+-Alternatively \fB${XPSERVERLIST}\fR can be set
+-manually. Example:
+-
+-
+-.nf
+- export XPSERVERLIST="littlecat:80 bitdog:72"
+-.fi
+-
+-instructs an application to find an Xprint server at display
+-80 on the machine "littlecat" and at display 72 on the
+-machine bigdog.
+-.TP
+-\fB${XPRINTER} \fR
+-The environment variable \fB${XPRINTER}\fR
+-defines the default printer used by print
+-applications. The syntax is either
+-\fIprintername\fR or
+-\fIprintername\fR@\fIdisplay\fR.
+-
+-Examples:
+-.RS
+-.TP
+-\fBXPRINTER=ps003\fR
+-tells an application to look for the
+-first printer named "ps003" on all Xprint
+-servers.
+-.TP
+-\fBXPRINTER=hplaser19@littlecat:80\fR
+-tells an application to use the printer "hplaser19"
+-on the Xprint server at display
+-"littlecat:80".
+-.RE
+-
+-If \fB${XPRINTER}\fR is not set the applications
+-will examine the values of the \fB${PDPRINTER}\fR,
+-\fB${LPDEST}\fR, and
+-\fB${PRINTER}\fR environment variables (in that order).
+-.SH "SEE ALSO"
+-.PP
+-\fBX11\fR(__miscmansuffix__), \fBxplsprinters\fR(__mansuffix__), \fBxprehashprinterlist\fR(__mansuffix__), \fBxphelloworld\fR(__mansuffix__), \fBxpxmhelloworld\fR(__mansuffix__), \fBxpawhelloworld\fR(__mansuffix__), \fBxpxthelloworld\fR(__mansuffix__), \fBxpsimplehelloworld\fR(__mansuffix__), \fBXserver\fR(__mansuffix__), \fBXprt\fR(__mansuffix__), \fBlibXp\fR(__libmansuffix__), \fBlibXprintUtils\fR(__libmansuffix__), \fBlibXprintAppUtils\fR(__libmansuffix__), \fBXmPrintShell\fR(__libmansuffix__), \fBXawPrintShell\fR(__libmansuffix__), Xprint FAQ (http://xprint.mozdev.org/docs/Xprint_FAQ.html <URL:http://xprint.mozdev.org/docs/Xprint_FAQ.html>), Xprint main site (http://xprint.mozdev.org/ <URL:http://xprint.mozdev.org/>)
+-.SH "AUTHORS"
+-.PP
+-This manual page was written by
+-Roland Mainz <roland.mainz@nrubsig.org> based on the original X11R6.6
+-\fIxc/programs/Xserver/XpConfig/README\fR.
+Index: xc/programs/Xserver/Xprint/Xprint.sgml
+diff -u xc/programs/Xserver/Xprint/Xprint.sgml:1.3 xc/programs/Xserver/Xprint/Xprint.sgml:removed
+--- xc/programs/Xserver/Xprint/Xprint.sgml:1.3 Tue Jun 29 17:10:13 2004
++++ xc/programs/Xserver/Xprint/Xprint.sgml Fri Feb 11 21:35:32 2005
+@@ -1,627 +0,0 @@
+-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.2//EN" '/usr/share/sgml/docbook_4.2/docbook.dtd'>
+-
+-<!-- Process this file with docbook-to-man to generate an nroff manual
+- page: 'docbook-to-man manpage.sgml > manpage.1'. You may view
+- the manual page with: 'docbook-to-man manpage.sgml | nroff -man | less'.
+- A typical entry in a Makefile or Makefile.am is:
+-
+-manpage.1: manpage.sgml
+- docbook-to-man $< > $@
+-
+-HTML generation can be done like this:
+-% xsltproc ==docbook /usr/share/sgml/docbook/docbook-xsl-stylesheets-1.60.1/html/docbook.xsl Xprint.sgml >Xprint.html
+- -->
+-
+-<refentry id="Xprint">
+- <refmeta>
+- <refentrytitle>Xprint</refentrytitle>
+- <manvolnum>__miscmansuffix__</manvolnum>
+- </refmeta>
+- <refnamediv>
+- <refname>Xprint</refname>
+-
+- <refpurpose>The "X print service" - a portable, network-transparent printing system based on the X11 protocol</refpurpose>
+- </refnamediv>
+- <refsynopsisdiv>
+- <para>Xprint is a very flexible, extensible, scaleable, client/server
+- print system based on ISO 10175 (and some other specs) and the X11
+- rendering protocol.
+- Using Xprint an application can search, query and use devices like
+- printers, FAX machines or create documents in formats like PDF.
+- In particular, an application can seek a printer, query supported
+- attributes (like paper size, trays, fonts etc.), configure the printer
+- device to match it’s needs and print on it like on any other X device
+- reusing parts of the code which is used for the video card Xserver.
+- </para>
+- </refsynopsisdiv>
+-
+- <refsect1>
+- <title>OVERVIEW</title>
+- <para>
+- The "X Print Service" technology allows X rendering to devices such as
+- printers and fax. Most of the service is available in the X11
+- technology stack as Xp, with the remainder in single toolkit stacks (e.g. DtPrint for CDE).
+- Modifications have also been made to the LessTif/Motif/Qt technology
+- stacks to support Xprint.
+- </para>
+- <para>
+- The Xp portion consists of:
+- <itemizedlist>
+- <listitem><para>Xp Extension for the X-Server (included in the X-Server Xprt)</para></listitem>
+- <listitem><para>Xp Extension API for the client side (libXp/libXprintUtils)</para></listitem>
+- <listitem><para>PCL ddx driver that converts core X to native PCL</para></listitem>
+- <listitem><para>PDF ddx driver that converts core X to native PDF</para></listitem>
+- <listitem><para>PostScript ddx driver that converts core X to native PostScript</para></listitem>
+- <listitem><para>Raster ddx driver that generates xwd rasters which can be converted to PCL, PDF or PostScript rasters</para></listitem>
+- </itemizedlist>
+- </para>
+- <para>
+- From an X clients perspective, it can attach to one of two nearly
+- identical X-Servers, a "Video" X-Server, and a "Print" X-Server
+- which has the additional Xp capability but otherwise looks and
+- behaves the same.
+- </para>
+- </refsect1>
+-
+- <refsect1>
+- <title>HOW THE X PRINT SERVICE WORKS</title>
+- <para>
+- The X Print Service expands on the traditional X-Server and Xlib world
+- in four ways.
+-
+- <orderedlist>
+- <listitem>
+- <para>
+- Most obvious is the use of "print ddx drivers" instead of
+- "video ddx drivers". While a video ddx driver modifies pixels
+- in a video frame buffer, a print ddx driver generates "page
+- description language (PDL)" output (such as PCL, PDF or PostScript)
+- or sends the print rendering instructions to a platform-specific
+- print API (like Win32/GDI).
+- </para>
+- <para>
+- Once a print ddx driver generates PDL output, it can be sent to
+- a spooler such as <citerefentry><refentrytitle>lp</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+- or retrieved by the client (to implement functionality like "print-to-file").
+- </para>
+- <para>
+- Though not currently done, a single X-Server can support both
+- print and video ddx drivers.
+- <!-- FIXME: IBM/AIX people have integrated Xprt into their main Xserver (currently experimental) ... -->
+- </para>
+- </listitem>
+- <listitem>
+- <para>
+- Since printers support "paged" output, unlike video, a portion
+- of the Xp Extension supports APIs to delineate printed output.
+- For example, <function>XpStartPage</function> and <function>XpEndPage</function> tell the X-Server where
+- a physical page starts and ends in an otherwise continuous
+- stream of X rendering primitives. Likewise, <function>XpStartJob</function> and
+- <function>XpEndJob</function> determine when a collection of pages starts and ends.
+- <function>XpEndJob</function> typically causes the generated PDL to be submitted to
+- a spooler, such as <citerefentry><refentrytitle>lp</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
+- </para>
+- </listitem>
+- <listitem>
+- <para>
+- Since printers have extensive capabilities, another portion of
+- the Xp Extension supports APIs to manipulate "print contexts".
+- </para>
+- <para>
+- Once a printer is selected using the Xp Extension API, a print
+- context to represent it can be created. A print context
+- embodies the printer selected - it contains the printer's
+- default capabilities, selectable range of capabilities,
+- printer state, and generated output. Some "attributes" within
+- the print context can be modified by the user, and the
+- X-Server and print ddx driver will react accordingly. For
+- example, the attribute "content-orientation" can be set to
+- "landscape" or "portrait" (if the printer supports these
+- values - which can be queried using the Xprint API as well).
+- </para>
+- </listitem>
+- <listitem>
+- <para>
+- Since printers can have "built in" fonts, the Xp Extension in
+- the X-Server works with the print ddx drivers to make
+- available (for printing only) additional fonts on a per print
+- context basis.
+- </para>
+- <para>
+- When a print context is created and set for a given printer,
+- the X font calls may be able to access additional printer
+- fonts. To do this (typically), the X-Server must have access
+- to "printer metric files" (.pmf) that describe at minimum the
+- metrics of the built in fonts.
+- </para>
+- </listitem>
+- </orderedlist>
+- </para>
+- </refsect1>
+-
+- <refsect1>
+- <title>USAGE</title>
+- <para>
+- There are three tasks to start the X Print Service:
+- <orderedlist>
+- <listitem><para>configuring the X Print Server,</para></listitem>
+- <listitem><para>starting the X Print Service</para></listitem>
+- <listitem><para>configuring the user session so that clients can find the running X Print Service</para></listitem>
+- </orderedlist>
+- </para>
+- <para>
+- The tasks are described in detail below.
+- </para>
+- </refsect1>
+-
+- <refsect1>
+- <title>SERVER CONFIGURATION</title>
+- <para>
+- The X Print Server (Xprt) can read a number of configuration files which
+- control its behavior and support for printers. Each vendor platform has
+- a default location for this information. Xprt can also read the
+- environment variable <envar>XPCONFIGDIR</envar> to locate alternate configuration
+- directories. Common settings include:
+-
+- <simplelist type="vert">
+- <member>export XPCONFIGDIR=/X11/lib/X11/XpConfig/</member>
+- <member>export XPCONFIGDIR=/proj/x11/xc/programs/Xserver/XpConfig/</member>
+- </simplelist>
+- </para>
+- <para>
+- Xprt has many built-in defaults, and lacking any configuration files,
+- will immediately try to support all printers visible via <citerefentry><refentrytitle>lpstat</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
+- </para>
+- <para>
+- In order of importance for configuration by a system administrator, the
+- configuration files for a "C" locale are as follows (see <citerefentry><refentrytitle>Xprt</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry> for more
+- details (including support for non-"C" locales)):
+- <variablelist>
+- <varlistentry>
+- <term><filename>${XPCONFIGDIR}/C/print/Xprinters</filename></term>
+- <listitem>
+- <para>
+- 'Xprinters' is the top most configuration file. It tells
+- Xprt which specific printer names (e.g. mylaser) should
+- be supported, and whether <citerefentry><refentrytitle>lpstat</refentrytitle><manvolnum>1</manvolnum></citerefentry> or other commands
+- should be used to automatically supplement the list of
+- printers.
+- </para>
+- </listitem>
+- </varlistentry>
+-
+- <varlistentry>
+- <term><filename>${XPCONFIGDIR}/C/print/attributes/printer</filename></term>
+- <listitem>
+- <para>
+- The 'printer' file maps printer names to model
+- configurations (see 'model-config' below). For example,
+- "mylaser" could be mapped to a "HPDJ1600C", and all other
+- arbitrary printers could be mapped to a default, such as
+- "HPLJ4SI". When depending on <citerefentry><refentrytitle>lpstat</refentrytitle><manvolnum>1</manvolnum></citerefentry> in the Xprinters
+- file, setting up defaults in 'printer' becomes all the
+- more important.
+- </para>
+- </listitem>
+- </varlistentry>
+-
+- <varlistentry>
+- <term><filename>${XPCONFIGDIR}/C/print/attributes/document</filename></term>
+- <listitem>
+- <para>
+- The 'document' file specifies the initial document values
+- for any print jobs. For example, which paper tray to
+- use, what default resolution, etc.
+- </para>
+- </listitem>
+- </varlistentry>
+-
+- <varlistentry>
+- <term><filename>${XPCONFIGDIR}/C/print/attributes/job</filename></term>
+- <listitem>
+- <para>
+- The 'job' file specifies the initial job values for any
+- print jobs. For example, "notification-profile" can be
+- set so that when a print job is successfully sent to a
+- printer, e-mail is sent to the user.
+- </para>
+- </listitem>
+- </varlistentry>
+-
+- <varlistentry>
+- <term><filename>${XPCONFIGDIR}/C/print/models/PSdefault/model-config</filename></term>
+- <term><filename>${XPCONFIGDIR}/C/print/models/PSdefault/fonts/fonts.dir</filename></term>
+- <term><filename>${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00051.pmf</filename></term>
+- <term><filename>${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00093.pmf</filename></term>
+-
+- <listitem>
+- <para>
+- The 'model-config' file has attributes that describe the
+- printer model’s capabilities and default settings.
+- Printer model fonts may also be present. The model-config
+- file also identifies the print ddx driver to be used.
+-
+- For each printer model supported, a complete hierarchy of
+- files should exist. In most cases, these files do not
+- need to be modified.
+- </para>
+- </listitem>
+- </varlistentry>
+-
+- <varlistentry>
+- <term><filename>${XPCONFIGDIR}/C/print/ddx-config/raster/pcl</filename></term>
+- <term><filename>${XPCONFIGDIR}/C/print/ddx-config/raster/pdf</filename></term>
+- <term><filename>${XPCONFIGDIR}/C/print/ddx-config/raster/postscript</filename></term>
+-
+- <listitem>
+- <para>
+- The print ddx drivers can have highly specific
+- configuration files to control their behavior. In most
+- cases, these files do not need to be modified.
+- </para>
+- </listitem>
+- </varlistentry>
+- </variablelist>
+-
+- More information in how to configure and customize the X print server can be found in the
+- <citerefentry><refentrytitle>Xprt</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry>
+- manual page.
+- </para>
+- </refsect1>
+-
+- <refsect1>
+- <title>STARTING UP</title>
+- <para>
+- The summary checklist for starting the X Print Service is as follows:
+-
+- <orderedlist>
+- <listitem>
+- <para>
+- Choose an execution model for the X Print Service. The X
+- Print Service can be run on a per-user session basis, per
+- machine basis, or can be run on a few machines globally
+- available to a number of users.
+- </para>
+- </listitem>
+- <listitem>
+- <para>
+- If print jobs are to be submitted to a spooler (almost always
+- the case), make sure all needed printers are available to the
+- spooler subsystem (most often <citerefentry><refentrytitle>lp</refentrytitle><manvolnum>1</manvolnum></citerefentry>)
+- on the same machine running the X Print Service.
+- </para>
+- </listitem>
+- <listitem>
+- <para>
+- Configure the X Print Server. See ``X Print Server
+- Configuration''.
+- </para>
+- </listitem>
+- <listitem>
+- <para>
+- Depending on #1, start the X Print Server process "Xprt", and
+- then the toolkit-specific Print Dialog Manager Daemon process
+- (such as CDEnext's "dtpdmd") at the appropriate times.
+- Note that libXprintUtils-based applications/toolkits do not need
+- a Print Dialog Manager Daemon process to use Xprint.
+- </para>
+- </listitem>
+- </orderedlist>
+- The details are described below.
+- </para>
+- <para>
+- Because the X Print Service is based on X, it can be easily distributed.
+- The most significant factors in which execution model to choose will be
+- driven by:
+- <itemizedlist>
+- <listitem>
+- <para>
+- how many printers will be accessable through the printer
+- subsystem on any given machine. A system administrator may
+- choose to cluster printers on a few given machines, or
+- scatter them across an organization and possibly make
+- extensive use of remote spoolers to make them globally
+- available.
+- </para>
+- </listitem>
+- <listitem>
+- <para>
+- how many machines will need a copy of the X Print Server
+- configuration files. The files have been architected so
+- that one super-set version of them can be maintained and
+- distributed (e.g. via NFS), and a per-machine or per-user
+- version of the `Xprinters' is all that is needed to have the
+- appropriate information in them utilized or ignored.
+- </para>
+- </listitem>
+- <listitem>
+- <para>
+- how many users can demand services from a given X Print
+- Service.
+- </para>
+- </listitem>
+- </itemizedlist>
+-
+- With the above in mind, some obvious execution models include:
+- <itemizedlist>
+- <listitem>
+- <para>
+- Global - in this model, the system administrator is choosing
+- to run the X Print Service on a *few* select machines with
+- appropriate printers configured, and allow clients access to
+- the global resource. This can centralize the administration
+- of printers and configuration files, but may have to be
+- monitored for performance loading.
+- </para>
+- <para>
+- Startup would likely be done by boot-up scripts (such as <filename>/etc/init.d/xprint</filename>).
+- </para>
+- </listitem>
+-
+- <listitem>
+- <para>
+- Per-machine - every machine with potential X Print Service
+- users would run the service. Printer and configuration file
+- administration is decentralized, and usage would be limited
+- to the users on the machine.
+- </para>
+- <para>
+- Startup would likely be done by boot-up scripts (such as <filename>/etc/init.d/xprint</filename>).
+- </para>
+- </listitem>
+-
+- <listitem>
+- <para>
+- Per-user session - every user would run an entire X Print
+- Service for themselves. In the future, the Video X Server
+- normally started may contain Print X Server capability, so
+- this model becomes very natural.
+- </para>
+- <para>
+- Startup would likely be done at session login or by
+- launching actions or processes manually once the user
+- logs in. Note: Deamons like "dtpdmd" must be started after Xprt.
+- </para>
+- </listitem>
+- </itemizedlist>
+- </para>
+- <para>
+- Starting of the processes is straight forward. In strict order (example is for manually starting the X print server for CDEnext usage):
+- <orderedlist>
+- <listitem>
+- <para>
+- <programlisting>[machineA] % Xprt [-XpFile <Xprinters file>] [:dispNum] &</programlisting>
+- </para>
+- <para>
+- Note that Xprt will look for configuration files in either
+- a default location or where <envar>XPCONFIGDIR</envar> points.
+- </para>
+- <para>
+- <option>-XpFile</option> specifies an alternate `Xprinters' file, rather
+- than the default one or `<filename>${XPCONFIGDIR}/C/print/Xprinters</filename>'.
+- </para>
+- </listitem>
+- <listitem>
+- <para>
+- <programlisting>[machineA] % dtpdmd -d machineA[:dispNum] [-l /tmp/dtpdmd.log] &</programlisting>
+- </para>
+- <para>
+- The dtpdmd will maintain an X-Selection on the X-Server,
+- and will start dtpdm's as required to service requests.
+- </para>
+- </listitem>
+- </orderedlist>
+- </para>
+- <para>
+- In all but the per-user session model, the machine running the dtpdmd
+- (thus dtpdm's) will need display authorization to the users video
+- display.
+- </para>
+- </refsect1>
+-
+- <refsect1>
+- <title>CLIENT CONFIGURATION</title>
+- <para>
+- Once a X Print Server and dtpdmd have been started -- many of them
+- in some cases -- clients will need to find and use them. There are
+- two mechanisms that allow clients to discover X Print Servers and
+- printers.
+-
+- <itemizedlist>
+- <listitem>
+- <para>
+- "X Print Specifier" - assuming usage of the DtPrint/XprintUtils-based print
+- applications, the following notation is understood:
+- </para>
+- <para>
+- <programlisting>printer_name@machine[:dispNum]</programlisting>
+- </para>
+- <para>
+- For example:
+- </para>
+- <para>
+- <programlisting>colorlj7@printhub:2</programlisting>
+- </para>
+- <para>
+- In the above example, the X Print Server running at `printhub:2'
+- is assumed to support the printer named `colorlj7'.
+- </para>
+- </listitem>
+- <listitem>
+- <para>
+- <envar>${XPSERVERLIST}</envar> - assuming usage of the DtPrint print dialogs,
+- the environment variable <envar>${XPSERVERLIST}</envar> can contain a list
+- of X Print Servers. For example:
+- </para>
+- <para>
+- <programlisting>XPSERVERLIST="printhub:2 printhub:3 otherdept:0"</programlisting>
+- </para>
+- <para>
+- Then in the dialogs, only a printer name needs to be entered.
+- The dialog will then search the X Print Servers in <envar>${XPSERVERLIST}</envar>
+- for a server than supports the printer, and then establish
+- contact.
+- </para>
+- </listitem>
+- </itemizedlist>
+- </para>
+- </refsect1>
+-
+- <refsect1>
+- <title>END-USER SEQUENCE</title>
+- <para>
+- From most CDEnext applications, printing is accomplished by bringing
+- down the <File> menu and selecting <Print...>. This will result in
+- the DtPrintSetupBox dialog, which will request the name of a printer,
+- and offer limited capability to configure print options (e.g. number
+- of copies). If the user wishes, they can select <Setup...>, which
+- will start a dtpdm capable of modifying additional print options.
+- Finally, the user should select <Print>.
+- </para>
+- </refsect1>
+-
+- <refsect1>
+- <title>ENVIRONMENT</title>
+- <variablelist>
+- <varlistentry>
+- <term><envar>${XPCONFIGDIR}</envar></term>
+- <listitem>
+- <para> This environment variable points to the root
+- of the Xprint server configuration directory hierarchy.
+- If the variable is not defined, the default
+- path is be assumed. The default path may be
+- <filename>/usr/X11R6/lib/X11/xserver/</filename>,
+- <filename>/usr/lib/X11/xserver/</filename>,
+- <filename>/usr/share/Xprint/xserver/</filename> or
+- <filename>/usr/openwin/server/etc/XpConfig</filename>, depending on the
+- system, and may be configured in <filename>/etc/init.d/xprint</filename>.</para>
+- </listitem>
+- </varlistentry>
+-
+- <varlistentry>
+- <term><envar>${LANG}</envar></term>
+- <listitem>
+- <para>
+- This environment variable selects the locale settings used by the Xprint server.
+- Xprt allows language-specific settings (stored in <filename>${XPCONFIGDIR}/${LANG}/print/</filename>)
+- which will override the default settings (stored in <filename>${XPCONFIGDIR}/C/print/</filename>).
+- If <envar>${LANG}</envar> is not set "C" is assumed.
+- </para>
+- </listitem>
+- </varlistentry>
+-
+- <varlistentry>
+- <term><envar>${XPSERVERLIST}</envar></term>
+- <listitem>
+- <para>The environment variable <envar>${XPSERVERLIST}</envar> contains a list
+- of display identifiers (separated by whitespace) which tell an
+- application where it can find the Xprint servers. Usually
+- <envar>${XPSERVERLIST}</envar> is set by the profile startup scripts (e.g.
+- <filename>/etc/profile</filename> or <filename>/etc/profile.d/xprint.sh</filename>) using the output of
+- <userinput>/etc/init.d/xprint get_xpserverlist</userinput>.</para>
+- <para>Example:
+- <informalexample>
+- <programlisting>
+- export XPSERVERLIST="`/etc/init.d/xprint get_xpserverlist`"</programlisting>
+- </informalexample>
+- </para>
+- <para>Alternatively <envar>${XPSERVERLIST}</envar> can be set
+- manually. Example:</para>
+- <informalexample>
+- <programlisting>
+- export XPSERVERLIST="littlecat:80 bitdog:72"</programlisting>
+- </informalexample>
+- <para>
+- instructs an application to find an Xprint server at display
+- 80 on the machine "littlecat" and at display 72 on the
+- machine bigdog.
+- </para>
+- </listitem>
+- </varlistentry>
+-
+- <varlistentry>
+- <term><envar>${XPRINTER}</envar>
+- </term>
+- <listitem>
+- <para>The environment variable <envar>${XPRINTER}</envar>
+- defines the default printer used by print
+- applications. The syntax is either
+- <replaceable>printername</replaceable> or
+- <replaceable>printername</replaceable>@<replaceable>display</replaceable>.</para>
+- <para>Examples:
+- <variablelist>
+- <varlistentry>
+- <term><userinput>XPRINTER=ps003</userinput></term>
+- <listitem><para>
+- tells an application to look for the
+- first printer named "ps003" on all Xprint
+- servers.</para>
+- </listitem>
+- </varlistentry>
+-
+- <varlistentry>
+- <!-- brain dead <term> does not permit quote marks
+- (in XPRINTER="hplaser19@littlecat:80"), so omit them -->
+- <term><userinput>XPRINTER=hplaser19@littlecat:80</userinput></term>
+- <listitem><para>
+- tells an application to use the printer "hplaser19"
+- on the Xprint server at display
+- "littlecat:80".</para>
+- </listitem>
+- </varlistentry>
+-
+- </variablelist>
+- </para>
+- <para>If <envar>${XPRINTER}</envar> is not set the applications
+- will examine the values of the <envar>${PDPRINTER}</envar>,
+- <envar>${LPDEST}</envar>, and
+- <envar>${PRINTER}</envar> environment variables (in that order).
+- </para>
+- </listitem>
+- </varlistentry>
+- </variablelist>
+- </refsect1>
+-
+- <refsect1>
+- <title>SEE ALSO</title>
+- <para>
+- <simplelist type="inline">
+- <!-- specific references -->
+- <!-- none -->
+-
+- <!-- Xprint general references -->
+-<!--
+- <member><citerefentry><refentrytitle>Xprint</refentrytitle><manvolnum>__miscmansuffix__</manvolnum></citerefentry></member>
+--->
+- <member><citerefentry><refentrytitle>X11</refentrytitle><manvolnum>__miscmansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xplsprinters</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xprehashprinterlist</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xphelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xpxmhelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xpawhelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xpxthelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xpsimplehelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>Xserver</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>Xprt</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <!-- ToDO: Add manual pages for the single Xprint DDX implementations (PostScript/PDF/PCL/PCL-MONO/Raster/etc.) -->
+- <member><citerefentry><refentrytitle>libXp</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>libXprintUtils</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>libXprintAppUtils</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>XmPrintShell</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>XawPrintShell</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
+- <member>Xprint FAQ (<ulink url="http://xprint.mozdev.org/docs/Xprint_FAQ.html">http://xprint.mozdev.org/docs/Xprint_FAQ.html</ulink>)</member>
+- <member>Xprint main site (<ulink url="http://xprint.mozdev.org/">http://xprint.mozdev.org/</ulink>)</member>
+- </simplelist>
+- </para>
+- </refsect1>
+-
+- <refsect1>
+- <title>AUTHORS</title>
+- <para>
+- This manual page was written by
+- Roland Mainz <email>roland.mainz@nrubsig.org</email> based on the original X11R6.6
+- <filename>xc/programs/Xserver/XpConfig/README</filename>.
+- </para>
+- </refsect1>
+-</refentry>
+-
+Index: xc/programs/Xserver/Xprint/Xprt.html
+diff -u /dev/null xc/programs/Xserver/Xprint/Xprt.html:1.2.2.1
+--- /dev/null Fri Feb 11 21:35:32 2005
++++ xc/programs/Xserver/Xprint/Xprt.html Wed Dec 15 07:38:29 2004
+@@ -0,0 +1,115 @@
++<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Xprt</title><meta name="generator" content="DocBook XSL Stylesheets V1.62.4"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="Xprt"></a><div class="titlepage"><div></div><div></div></div><div class="refnamediv"><h2>Name</h2><p>Xprt — Print server for X Version 11</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><tt class="command">Xprt</tt> [<tt class="option">-ac</tt>] [<tt class="option">-audit <i class="replaceable"><tt>level</tt></i></tt>] [<tt class="option">-pn</tt>] [<tt class="option">-fp <i class="replaceable"><tt>fontpath</tt></i></tt>] [<tt class="option">-XpFile <i class="replaceable"><tt>file</tt></i></tt>] [<tt class="option">-XpSpoolerType <i class="replaceable"><tt>spoolername</tt></i></tt>] [<tt class="option">:<i class="replaceable"><tt>display</tt></i></tt>]</p></div></div><div class="refsect1" lang="en"><a name="id2804962"></a><h2>DESCRIPTION</h2><p><span><b class="command">Xprt</b></span> is the Xprint print server
++ for version 11 of the X Window system for non display devices
++ such as printers and fax machines.</p><p>Xprint is an advanced printing system which enables X11
++ applications to use devices like printers, FAX or create
++ documents in formats like PostScript, PCL or PDF. It may be used by
++ clients such as <span class="application">mozilla</span>.
++ </p><p>Xprint is a very flexible, extensible, scaleable, client/server
++ print system based on ISO 10175 (and some other specs) and the X11
++ rendering protocol.
++ Using Xprint an application can search, query and use devices like
++ printers, FAX machines or create documents in formats like PDF.
++ In particular, an application can seek a printer, query supported
++ attributes (like paper size, trays, fonts etc.), configure the printer
++ device to match it's needs and print on it like on any other X device
++ reusing parts of the code which is used for the video card Xserver.
++ </p></div><div xmlns:ns1="" class="refsect1" lang="en"><a name="id2805117"></a><h2>USAGE</h2><p>
++ Although Xprt may be invoked from the command line, it is
++ preferable to run it as a daemon via the init script
++ <tt class="filename">/etc/init.d/xprint</tt> (where this script exists).
++ </p><p>Client programs such as mozilla will require environment
++ variable <tt class="envar">${XPSERVERLIST}</tt> to be set, identifying the
++ "display" on which Xprt is running. This variable may be set
++ for all users via <tt class="filename">/etc/profile</tt> (or similar), using
++ <b class="userinput"><tt>/etc/init.d/xprint get_xpserverlist</tt></b>:
++ </p><div class="informalexample"><pre class="programlisting">export XPSERVERLIST=`/etc/init.d/xprint get_xpserverlist`</pre></div></div><div class="refsect1" lang="en"><a name="id2805150"></a><h2>OPTIONS</h2><p>Many of Xprt's command line options are shared in common
++ with the usual X servers (see <span class="citerefentry"><span class="refentrytitle">Xserver</span>(1x)</span>).
++ Commonly used options include:</p><div class="variablelist"><dl><dt><span class="term"><tt class="option">:<i class="replaceable"><tt>display</tt></i></tt></span></dt><dd><p> The X server runs on the given display. If multiple X
++ servers are to run simultaneously on a host, each must
++ have a unique display number. Note that the standard X
++ server (for video displays) typically runs on display
++ :0. If <tt class="filename">/etc/init.d/xprint</tt> is used
++ to invoke Xprt, it may be configured to automatically assign an available
++ display number.</p></dd><dt><span class="term"><tt class="option">-ac</tt></span></dt><dd><p>disables host-based access control mechanisms. Enables access
++ by any host, and permits any host to modify the access control
++ list. Use with extreme caution. This option exists primarily
++ for running test suites remotely.</p></dd><dt><span class="term"><tt class="option">-audit <i class="replaceable"><tt>level</tt></i></tt></span></dt><dd><p>sets the audit trail level. The default level is 1, meaning
++ only connection rejections are reported. Level 2 additionally
++ reports all successful connections and disconnects. Level 4
++ enables messages from the SECURITY extension, if present,
++ including generation and revocation of authorizations and
++ violations of the security policy. Level 0 turns off the audit
++ trail. Audit lines are sent as standard error output.</p></dd><dt><span class="term"><tt class="option">-fp <i class="replaceable"><tt>fontpath</tt></i></tt></span></dt><dd><p>sets the search path for fonts. This path is a comma
++ separated list of directories which Xprt searches for
++ font databases.</p></dd><dt><span class="term"><tt class="option">-pn</tt></span></dt><dd><p>permits the server to continue running if it fails to
++ establish all of its well-known sockets (connection
++ points for clients), but establishes at least
++ one.</p></dd><dt><span class="term"><tt class="option">-XpFile <i class="replaceable"><tt>file</tt></i></tt></span></dt><dd><p>Sets an altername Xprinters file (see section FILES).</p></dd><dt><span class="term"><tt class="option">-XpSpoolerType <i class="replaceable"><tt>spoolername</tt></i></tt></span></dt><dd xmlns:ns2=""><p>
++ Defines the spooler system to be used for print job spooling.
++ Supported values in xprint.mozdev.org release 009 are:
++ </p><table class="simplelist" border="0" summary="Simple list"><tr><td>aix</td></tr><tr><td>aix4</td></tr><tr><td>bsd</td></tr><tr><td>osf</td></tr><tr><td>solaris</td></tr><tr><td>sysv</td></tr><tr><td>uxp</td></tr><tr><td>cups</td></tr><tr><td>lprng</td></tr><tr><td>other</td></tr><tr><td>none</td></tr></table><p>
++ (multiple values can be specified, seperated by ':', the first active spooler will be chosen).
++ The default value is platform-specific and can be obtained via
++ </p><pre class="programlisting">Xprt -h</pre><p>.
++ </p></dd></dl></div></div><div xmlns:ns3="" class="refsect1" lang="en"><a name="id2805336"></a><h2>ENVIRONMENT</h2><p>
++ The following environment variables are recognized by the X print server
++ (environment variables recognized by Xprint clients are described in
++ <span class="citerefentry"><span class="refentrytitle">Xprint</span>(7)</span>):
++
++ </p><div class="variablelist"><dl><dt><span class="term"><tt class="envar">${XPCONFIGDIR}</tt></span></dt><dd><p> This environment variable points to the root
++ of the Xprint server configuration directory hierarchy.
++ If the variable is not defined, the default
++ path is be assumed. The default path may be
++ <tt class="filename">/usr/X11R6/lib/X11/xserver/</tt>,
++ <tt class="filename">/usr/lib/X11/xserver/</tt>,
++ <tt class="filename">/usr/share/Xprint/xserver/</tt> or
++ <tt class="filename">/usr/openwin/server/etc/XpConfig</tt>, depending on the
++ system, and may be configured in <tt class="filename">/etc/init.d/xprint</tt>.</p></dd><dt><span class="term"><tt class="envar">${LANG}</tt></span></dt><dd><p>
++ This environment variable selects the locale settings used by the Xprint server.
++ Xprt allows language-specific settings (stored in <tt class="filename">${XPCONFIGDIR}/${LANG}/print/</tt>)
++ which will override the default settings (stored in <tt class="filename">${XPCONFIGDIR}/C/print/</tt>).
++ If <tt class="envar">${LANG}</tt> is not set "C" is assumed.
++ </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2805421"></a><h2>FILES</h2><div class="variablelist"><dl><dt><span class="term"><tt class="filename">${XPCONFIGDIR}/${LANG}/print/Xprinters</tt>, </span><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/Xprinters</tt></span></dt><dd><p>
++ `Xprinters' is the top most configuration file. It tells
++ Xprt which specific printer names (e.g. mylaser) should
++ be supported, and whether <span class="citerefentry"><span class="refentrytitle">lpstat</span>(1)</span> or other commands
++ should be used to automatically supplement the list of
++ printers.
++ </p></dd><dt><span class="term"><tt class="filename">${XPCONFIGDIR}/${LANG}/print/attributes/printer</tt>, </span><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/attributes/printer</tt></span></dt><dd><p>
++ The `printer' file maps printer names to model
++ configurations (see `model-config' below). For example,
++ "mylaser" could be mapped to a "HPDJ1600C", and all other
++ arbitrary printers could be mapped to a default, such as
++ "HPLJ4SI". When depending on <span class="citerefentry"><span class="refentrytitle">lpstat</span>(1)</span> in the Xprinters
++ file, setting up defaults in `printer' becomes all the
++ more important.
++ </p></dd><dt><span class="term"><tt class="filename">${XPCONFIGDIR}/${LANG}/print/attributes/document</tt>, </span><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/attributes/document</tt></span></dt><dd><p>
++ The `document' file specifies the initial document values
++ for any print jobs. For example, which paper tray to
++ use, what default resolution, etc.
++ </p></dd><dt><span class="term"><tt class="filename">${XPCONFIGDIR}/${LANG}/print/attributes/job</tt>, </span><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/attributes/job</tt></span></dt><dd><p>
++ The `job' file specifies the initial job values for any
++ print jobs. For example, "notification-profile" can be
++ set so that when a print job is successfully sent to a
++ printer, e-mail is sent to the user.
++ </p></dd><dt><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/models/PSdefault/model-config</tt>, </span><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/models/PSdefault/fonts/fonts.dir</tt>, </span><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00051.pmf</tt>, </span><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00093.pmf</tt></span></dt><dd><p>
++ The `model-config' file has attributes that describe the
++ printer model's capabilities and default settings.
++ Printer model fonts may also be present. The model-config
++ file also identifies the print ddx driver to be used.
++
++ For each printer model supported, a complete hierarchy of
++ files should exist. In most cases, these files do not
++ need to be modified.
++ </p></dd><dt><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/ddx-config/raster/pdf</tt>, </span><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/ddx-config/raster/pcl</tt>, </span><span class="term"><tt class="filename">${XPCONFIGDIR}/C/print/ddx-config/raster/postscript</tt></span></dt><dd><p>
++ The print ddx drivers can have highly specific
++ configuration files to control their behavior. In most
++ cases, these files do not need to be modified.
++ </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2805584"></a><h2>SEE ALSO</h2><p><span class="simplelist"><span class="citerefentry"><span class="refentrytitle">Xprint</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">X11</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">xplsprinters</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xprehashprinterlist</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xphelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpxmhelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpawhelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpxthelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpsimplehelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">Xserver</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">libXp</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">libXprintUtils</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">libXprintAppUtils</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">XmPrintShell</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">XawPrintShell</span>(3x)</span>, Xprint FAQ (<a href="http://xprint.mozdev.org/docs/Xprint_FAQ.html" target="_top">http://xprint.mozdev.org/docs/Xprint_FAQ.html</a>), Xprint main site (<a href="http://xprint.mozdev.org/" target="_top">http://xprint.mozdev.org/</a>)</span></p></div><div class="refsect1" lang="en"><a name="id2805757"></a><h2>AUTHORS</h2><p>
++ This manual page was written by
++ Drew Parsons <tt class="email"><<a href="mailto:dparsons@debian.org">dparsons@debian.org</a>></tt> and
++ Roland Mainz <tt class="email"><<a href="mailto:roland.mainz@nrubsig.org">roland.mainz@nrubsig.org</a>></tt>,
++ with some help from the man page at
++ <a href="http://www.sins.com.au/unix/manpages/Xprt.html" target="_top">http://www.sins.com.au/unix/manpages/Xprt.html</a> and the XFree86
++ man page for <span class="citerefentry"><span class="refentrytitle">Xserver</span>(1)</span>.
++ </p></div></div></body></html>
+Index: xc/programs/Xserver/Xprint/Xprt.man
+diff -u /dev/null xc/programs/Xserver/Xprint/Xprt.man:1.1.4.1
+--- /dev/null Fri Feb 11 21:35:32 2005
++++ xc/programs/Xserver/Xprint/Xprt.man Wed Dec 15 07:38:29 2004
+@@ -0,0 +1,196 @@
++.\" -*- coding: us-ascii -*-
++.TH Xprt __appmansuffix__ "25 November 2004"
++.SH NAME
++Xprt \- Print server for X Version 11
++.SH SYNOPSIS
++.ad l
++\fBXprt\fR \kx
++.if (\nxu > (\n(.lu / 2)) .nr x (\n(.lu / 5)
++'in \n(.iu+\nxu
++[\fB\-ac\fR] [\fB\-audit \fBlevel\fR\fR] [\fB\-pn\fR] [\fB\-fp \fBfontpath\fR\fR] [\fB\-XpFile \fBfile\fR\fR] [\fB\-XpSpoolerType \fBspoolername\fR\fR] [\fB:\fBdisplay\fR\fR]
++'in \n(.iu-\nxu
++.ad b
++.SH DESCRIPTION
++Xprt is the Xprint print server
++for version 11 of the X Window system for non display devices
++such as printers and fax machines.
++.PP
++Xprint is an advanced printing system which enables X11
++applications to use devices like printers, FAX or create
++documents in formats like PostScript, PCL or PDF. It may be used by
++clients such as mozilla.
++.PP
++Xprint is a very flexible, extensible, scaleable, client/server
++print system based on ISO 10175 (and some other specs) and the X11
++rendering protocol.
++Using Xprint an application can search, query and use devices like
++printers, FAX machines or create documents in formats like PDF.
++In particular, an application can seek a printer, query supported
++attributes (like paper size, trays, fonts etc.), configure the printer
++device to match it's needs and print on it like on any other X device
++reusing parts of the code which is used for the video card Xserver.
++.SH USAGE
++Although Xprt may be invoked from the command line, it is
++preferable to run it as a daemon via the init script
++\fB/etc/init.d/xprint\fR (where this script exists).
++.PP
++Client programs such as mozilla will require environment
++variable \fB${XPSERVERLIST}\fR to be set, identifying the
++"display" on which Xprt is running. This variable may be set
++for all users via \fB/etc/profile\fR (or similar), using
++\fB/etc/init.d/xprint get_xpserverlist\fR:
++
++.nf
++export XPSERVERLIST=`/etc/init.d/xprint get_xpserverlist`
++.fi
++
++.SH OPTIONS
++Many of Xprt's command line options are shared in common
++with the usual X servers (see \fBXserver\fR(__appmansuffix__)).
++Commonly used options include:
++.TP
++\fB:\fIdisplay\fB\fR
++The X server runs on the given display. If multiple X
++servers are to run simultaneously on a host, each must
++have a unique display number. Note that the standard X
++server (for video displays) typically runs on display
++:0. If \fB/etc/init.d/xprint\fR is used
++to invoke Xprt, it may be configured to automatically assign an available
++display number.
++.TP
++\fB\-ac\fR
++disables host-based access control mechanisms. Enables access
++by any host, and permits any host to modify the access control
++list. Use with extreme caution. This option exists primarily
++for running test suites remotely.
++.TP
++\fB\-audit \fIlevel\fB\fR
++sets the audit trail level. The default level is 1, meaning
++only connection rejections are reported. Level 2 additionally
++reports all successful connections and disconnects. Level 4
++enables messages from the SECURITY extension, if present,
++including generation and revocation of authorizations and
++violations of the security policy. Level 0 turns off the audit
++trail. Audit lines are sent as standard error output.
++.TP
++\fB\-fp \fIfontpath\fB\fR
++sets the search path for fonts. This path is a comma
++separated list of directories which Xprt searches for
++font databases.
++.TP
++\fB\-pn\fR
++permits the server to continue running if it fails to
++establish all of its well-known sockets (connection
++points for clients), but establishes at least
++one.
++.TP
++\fB\-XpFile \fIfile\fB\fR
++Sets an altername Xprinters file (see section FILES).
++.TP
++\fB\-XpSpoolerType \fIspoolername\fB\fR
++Defines the spooler system to be used for print job spooling.
++Supported values in xprint.mozdev.org release 009 are:
++
++aix
++
++aix4
++
++bsd
++
++osf
++
++solaris
++
++sysv
++
++uxp
++
++cups
++
++lprng
++
++other
++
++none
++
++(multiple values can be specified, seperated by ':', the first active spooler will be chosen).
++The default value is platform-specific and can be obtained via
++
++.nf
++Xprt \-h
++.fi
++
++\&.
++.SH ENVIRONMENT
++The following environment variables are recognized by the X print server
++(environment variables recognized by Xprint clients are described in
++\fBXprint\fR(__miscmansuffix__)):
++.TP
++\fB${XPCONFIGDIR}\fR
++This environment variable points to the root
++of the Xprint server configuration directory hierarchy.
++If the variable is not defined, the default
++path is be assumed. The default path may be
++\fB/usr/X11R6/lib/X11/xserver/\fR,
++\fB/usr/lib/X11/xserver/\fR,
++\fB/usr/share/Xprint/xserver/\fR or
++\fB/usr/openwin/server/etc/XpConfig\fR, depending on the
++system, and may be configured in \fB/etc/init.d/xprint\fR.
++.TP
++\fB${LANG}\fR
++This environment variable selects the locale settings used by the Xprint server.
++Xprt allows language-specific settings (stored in \fB${XPCONFIGDIR}/${LANG}/print/\fR)
++which will override the default settings (stored in \fB${XPCONFIGDIR}/C/print/\fR).
++If \fB${LANG}\fR is not set "C" is assumed.
++.PP
++.SH FILES
++.TP
++\fB${XPCONFIGDIR}/${LANG}/print/Xprinters\fR, \fB${XPCONFIGDIR}/C/print/Xprinters\fR
++`Xprinters' is the top most configuration file. It tells
++Xprt which specific printer names (e.g. mylaser) should
++be supported, and whether \fBlpstat\fR(1) or other commands
++should be used to automatically supplement the list of
++printers.
++.TP
++\fB${XPCONFIGDIR}/${LANG}/print/attributes/printer\fR, \fB${XPCONFIGDIR}/C/print/attributes/printer\fR
++The `printer' file maps printer names to model
++configurations (see `model-config' below). For example,
++"mylaser" could be mapped to a "HPDJ1600C", and all other
++arbitrary printers could be mapped to a default, such as
++"HPLJ4SI". When depending on \fBlpstat\fR(1) in the Xprinters
++file, setting up defaults in `printer' becomes all the
++more important.
++.TP
++\fB${XPCONFIGDIR}/${LANG}/print/attributes/document\fR, \fB${XPCONFIGDIR}/C/print/attributes/document\fR
++The `document' file specifies the initial document values
++for any print jobs. For example, which paper tray to
++use, what default resolution, etc.
++.TP
++\fB${XPCONFIGDIR}/${LANG}/print/attributes/job\fR, \fB${XPCONFIGDIR}/C/print/attributes/job\fR
++The `job' file specifies the initial job values for any
++print jobs. For example, "notification-profile" can be
++set so that when a print job is successfully sent to a
++printer, e-mail is sent to the user.
++.TP
++\fB${XPCONFIGDIR}/C/print/models/PSdefault/model\-config\fR, \fB${XPCONFIGDIR}/C/print/models/PSdefault/fonts/fonts.dir\fR, \fB${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00051.pmf\fR, \fB${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00093.pmf\fR
++The `model-config' file has attributes that describe the
++printer model's capabilities and default settings.
++Printer model fonts may also be present. The model-config
++file also identifies the print ddx driver to be used.
++For each printer model supported, a complete hierarchy of
++files should exist. In most cases, these files do not
++need to be modified.
++.TP
++\fB${XPCONFIGDIR}/C/print/ddx\-config/raster/pdf\fR, \fB${XPCONFIGDIR}/C/print/ddx\-config/raster/pcl\fR, \fB${XPCONFIGDIR}/C/print/ddx\-config/raster/postscript\fR
++The print ddx drivers can have highly specific
++configuration files to control their behavior. In most
++cases, these files do not need to be modified.
++.SH "SEE ALSO"
++\fBXprint\fR(__miscmansuffix__), \fBX11\fR(__miscmansuffix__), \fBxplsprinters\fR(__appmansuffix__), \fBxprehashprinterlist\fR(__appmansuffix__), \fBxphelloworld\fR(__appmansuffix__), \fBxpxmhelloworld\fR(__appmansuffix__), \fBxpawhelloworld\fR(__appmansuffix__), \fBxpxthelloworld\fR(__appmansuffix__), \fBxpsimplehelloworld\fR(__appmansuffix__), \fBXserver\fR(__appmansuffix__), \fBlibXp\fR(__libmansuffix__), \fBlibXprintUtils\fR(__libmansuffix__), \fBlibXprintAppUtils\fR(__libmansuffix__), \fBXmPrintShell\fR(__libmansuffix__), \fBXawPrintShell\fR(__libmansuffix__), Xprint FAQ (http://xprint.mozdev.org/docs/Xprint_FAQ.html), Xprint main site (http://xprint.mozdev.org/)
++.SH AUTHORS
++This manual page was written by
++Drew Parsons <dparsons@debian.org> and
++Roland Mainz <roland.mainz@nrubsig.org>,
++with some help from the man page at
++http://www.sins.com.au/unix/manpages/Xprt.html and the XFree86
++man page for \fBXserver\fR(1).
+Index: xc/programs/Xserver/Xprint/Xprt.sgml
+diff -u /dev/null xc/programs/Xserver/Xprint/Xprt.sgml:1.1.4.1
+--- /dev/null Fri Feb 11 21:35:32 2005
++++ xc/programs/Xserver/Xprint/Xprt.sgml Wed Dec 15 07:38:29 2004
+@@ -0,0 +1,371 @@
++<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.2//EN" 'http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd'>
++
++<!-- Process this file with docbook-to-man to generate an nroff manual
++ page: 'docbook-to-man manpage.sgml > manpage.1'. You may view
++ the manual page with: 'docbook-to-man manpage.sgml | nroff -man | less'.
++ A typical entry in a Makefile or Makefile.am is:
++
++manpage.1: manpage.sgml
++ docbook-to-man $< > $@
++
++HTML generation can be done like this:
++% xsltproc ==docbook /usr/share/sgml/docbook/docbook-xsl-stylesheets-1.60.1/html/docbook.xsl Xprint.sgml >Xprint.html
++ -->
++
++<refentry id="Xprt">
++ <refmeta>
++ <refentrytitle>Xprt</refentrytitle>
++ <manvolnum>__appmansuffix__</manvolnum>
++ </refmeta>
++ <refnamediv>
++ <refname>Xprt</refname>
++
++ <refpurpose>Print server for X Version 11</refpurpose>
++ </refnamediv>
++ <refsynopsisdiv>
++ <cmdsynopsis>
++ <command>Xprt</command>
++
++ <arg><option>-ac</option></arg>
++
++ <arg><option>-audit <replaceable>level</replaceable></option></arg>
++
++ <arg><option>-pn</option></arg>
++
++ <arg><option>-fp <replaceable>fontpath</replaceable></option></arg>
++
++ <arg><option>-XpFile <replaceable>file</replaceable></option></arg>
++
++ <arg><option>-XpSpoolerType <replaceable>spoolername</replaceable></option></arg>
++
++ <arg><option>:<replaceable>display</replaceable></option></arg>
++
++ </cmdsynopsis>
++ </refsynopsisdiv>
++ <refsect1>
++ <title>DESCRIPTION</title>
++
++ <para><command>Xprt</command> is the Xprint print server
++ for version 11 of the X Window system for non display devices
++ such as printers and fax machines.</para>
++
++ <para>Xprint is an advanced printing system which enables X11
++ applications to use devices like printers, FAX or create
++ documents in formats like PostScript, PCL or PDF. It may be used by
++ clients such as <application>mozilla</application>.
++ </para>
++
++ <para>Xprint is a very flexible, extensible, scaleable, client/server
++ print system based on ISO 10175 (and some other specs) and the X11
++ rendering protocol.
++ Using Xprint an application can search, query and use devices like
++ printers, FAX machines or create documents in formats like PDF.
++ In particular, an application can seek a printer, query supported
++ attributes (like paper size, trays, fonts etc.), configure the printer
++ device to match it's needs and print on it like on any other X device
++ reusing parts of the code which is used for the video card Xserver.
++ </para>
++ </refsect1>
++
++ <refsect1>
++ <title>USAGE</title>
++
++ <para>
++ Although Xprt may be invoked from the command line, it is
++ preferable to run it as a daemon via the init script
++ <filename>/etc/init.d/xprint</filename> (where this script exists).
++ </para>
++
++ <para>Client programs such as mozilla will require environment
++ variable <envar>${XPSERVERLIST}</envar> to be set, identifying the
++ "display" on which Xprt is running. This variable may be set
++ for all users via <filename>/etc/profile</filename> (or similar), using
++ <userinput>/etc/init.d/xprint get_xpserverlist</userinput>:
++ <informalexample>
++ <programlisting>export XPSERVERLIST=`/etc/init.d/xprint get_xpserverlist`</programlisting>
++ </informalexample>
++ </para>
++ </refsect1>
++
++ <refsect1>
++ <title>OPTIONS</title>
++
++ <para>Many of Xprt's command line options are shared in common
++ with the usual X servers (see <citerefentry><refentrytitle>Xserver</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry>).
++ Commonly used options include:</para>
++
++ <variablelist>
++ <varlistentry>
++ <term><option>:<replaceable>display</replaceable></option>
++ </term>
++ <listitem>
++ <para> The X server runs on the given display. If multiple X
++ servers are to run simultaneously on a host, each must
++ have a unique display number. Note that the standard X
++ server (for video displays) typically runs on display
++ :0. If <filename>/etc/init.d/xprint</filename> is used
++ to invoke Xprt, it may be configured to automatically assign an available
++ display number.</para>
++ </listitem>
++ </varlistentry>
++ <varlistentry>
++ <term><option>-ac</option>
++ </term>
++ <listitem>
++ <para>disables host-based access control mechanisms. Enables access
++ by any host, and permits any host to modify the access control
++ list. Use with extreme caution. This option exists primarily
++ for running test suites remotely.</para>
++ </listitem>
++ </varlistentry>
++ <varlistentry>
++ <term><option>-audit <replaceable>level</replaceable></option>
++ </term>
++ <listitem>
++ <para>sets the audit trail level. The default level is 1, meaning
++ only connection rejections are reported. Level 2 additionally
++ reports all successful connections and disconnects. Level 4
++ enables messages from the SECURITY extension, if present,
++ including generation and revocation of authorizations and
++ violations of the security policy. Level 0 turns off the audit
++ trail. Audit lines are sent as standard error output.</para>
++ </listitem>
++ </varlistentry>
++ <varlistentry>
++ <term><option>-fp <replaceable>fontpath</replaceable></option>
++ </term>
++ <listitem>
++ <para>sets the search path for fonts. This path is a comma
++ separated list of directories which Xprt searches for
++ font databases.</para>
++ </listitem>
++ </varlistentry>
++ <varlistentry>
++ <term><option>-pn</option>
++ </term>
++ <listitem>
++ <para>permits the server to continue running if it fails to
++ establish all of its well-known sockets (connection
++ points for clients), but establishes at least
++ one.</para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>-XpFile <replaceable>file</replaceable></option>
++ </term>
++ <listitem>
++ <para>Sets an altername Xprinters file (see section FILES).</para>
++ </listitem>
++ </varlistentry>
++ <varlistentry>
++ <term><option>-XpSpoolerType <replaceable>spoolername</replaceable></option>
++ </term>
++ <listitem>
++ <para>
++ Defines the spooler system to be used for print job spooling.
++ Supported values in xprint.mozdev.org release 009 are:
++ <simplelist type="vert">
++ <member>aix</member>
++ <member>aix4</member>
++ <member>bsd</member>
++ <member>osf</member>
++ <member>solaris</member>
++ <member>sysv</member>
++ <member>uxp</member>
++ <member>cups</member>
++ <member>lprng</member>
++ <member>other</member>
++ <member>none</member>
++ </simplelist>
++ (multiple values can be specified, seperated by ':', the first active spooler will be chosen).
++ The default value is platform-specific and can be obtained via
++ <programlisting>Xprt -h</programlisting>.
++ </para>
++ </listitem>
++ </varlistentry>
++ </variablelist>
++ </refsect1>
++
++ <refsect1>
++ <title>ENVIRONMENT</title>
++ <para>
++ The following environment variables are recognized by the X print server
++ (environment variables recognized by Xprint clients are described in
++ <citerefentry><refentrytitle>Xprint</refentrytitle><manvolnum>__miscmansuffix__</manvolnum></citerefentry>):
++
++ <variablelist>
++ <varlistentry>
++ <term><envar>${XPCONFIGDIR}</envar></term>
++ <listitem>
++ <para> This environment variable points to the root
++ of the Xprint server configuration directory hierarchy.
++ If the variable is not defined, the default
++ path is be assumed. The default path may be
++ <filename>/usr/X11R6/lib/X11/xserver/</filename>,
++ <filename>/usr/lib/X11/xserver/</filename>,
++ <filename>/usr/share/Xprint/xserver/</filename> or
++ <filename>/usr/openwin/server/etc/XpConfig</filename>, depending on the
++ system, and may be configured in <filename>/etc/init.d/xprint</filename>.</para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><envar>${LANG}</envar></term>
++ <listitem>
++ <para>
++ This environment variable selects the locale settings used by the Xprint server.
++ Xprt allows language-specific settings (stored in <filename>${XPCONFIGDIR}/${LANG}/print/</filename>)
++ which will override the default settings (stored in <filename>${XPCONFIGDIR}/C/print/</filename>).
++ If <envar>${LANG}</envar> is not set "C" is assumed.
++ </para>
++ </listitem>
++ </varlistentry>
++ </variablelist>
++ </para>
++ </refsect1>
++
++ <refsect1>
++ <title>FILES</title>
++
++ <variablelist>
++ <varlistentry>
++ <term><filename>${XPCONFIGDIR}/${LANG}/print/Xprinters</filename></term>
++ <term><filename>${XPCONFIGDIR}/C/print/Xprinters</filename></term>
++ <listitem>
++ <para>
++ `Xprinters' is the top most configuration file. It tells
++ Xprt which specific printer names (e.g. mylaser) should
++ be supported, and whether <citerefentry><refentrytitle>lpstat</refentrytitle><manvolnum>1</manvolnum></citerefentry> or other commands
++ should be used to automatically supplement the list of
++ printers.
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><filename>${XPCONFIGDIR}/${LANG}/print/attributes/printer</filename></term>
++ <term><filename>${XPCONFIGDIR}/C/print/attributes/printer</filename></term>
++ <listitem>
++ <para>
++ The `printer' file maps printer names to model
++ configurations (see `model-config' below). For example,
++ "mylaser" could be mapped to a "HPDJ1600C", and all other
++ arbitrary printers could be mapped to a default, such as
++ "HPLJ4SI". When depending on <citerefentry><refentrytitle>lpstat</refentrytitle><manvolnum>1</manvolnum></citerefentry> in the Xprinters
++ file, setting up defaults in `printer' becomes all the
++ more important.
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><filename>${XPCONFIGDIR}/${LANG}/print/attributes/document</filename></term>
++ <term><filename>${XPCONFIGDIR}/C/print/attributes/document</filename></term>
++ <listitem>
++ <para>
++ The `document' file specifies the initial document values
++ for any print jobs. For example, which paper tray to
++ use, what default resolution, etc.
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><filename>${XPCONFIGDIR}/${LANG}/print/attributes/job</filename></term>
++ <term><filename>${XPCONFIGDIR}/C/print/attributes/job</filename></term>
++ <listitem>
++ <para>
++ The `job' file specifies the initial job values for any
++ print jobs. For example, "notification-profile" can be
++ set so that when a print job is successfully sent to a
++ printer, e-mail is sent to the user.
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><filename>${XPCONFIGDIR}/C/print/models/PSdefault/model-config</filename></term>
++ <term><filename>${XPCONFIGDIR}/C/print/models/PSdefault/fonts/fonts.dir</filename></term>
++ <term><filename>${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00051.pmf</filename></term>
++ <term><filename>${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00093.pmf</filename></term>
++
++ <listitem>
++ <para>
++ The `model-config' file has attributes that describe the
++ printer model's capabilities and default settings.
++ Printer model fonts may also be present. The model-config
++ file also identifies the print ddx driver to be used.
++
++ For each printer model supported, a complete hierarchy of
++ files should exist. In most cases, these files do not
++ need to be modified.
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><filename>${XPCONFIGDIR}/C/print/ddx-config/raster/pdf</filename></term>
++ <term><filename>${XPCONFIGDIR}/C/print/ddx-config/raster/pcl</filename></term>
++ <term><filename>${XPCONFIGDIR}/C/print/ddx-config/raster/postscript</filename></term>
++
++ <listitem>
++ <para>
++ The print ddx drivers can have highly specific
++ configuration files to control their behavior. In most
++ cases, these files do not need to be modified.
++ </para>
++ </listitem>
++ </varlistentry>
++
++ </variablelist>
++ </refsect1>
++
++ <refsect1>
++ <title>SEE ALSO</title>
++ <para>
++ <simplelist type="inline">
++ <!-- specific references -->
++ <!-- none -->
++
++ <!-- Xprint general references -->
++ <member><citerefentry><refentrytitle>Xprint</refentrytitle><manvolnum>__miscmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>X11</refentrytitle><manvolnum>__miscmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xplsprinters</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xprehashprinterlist</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xphelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpxmhelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpawhelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpxthelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpsimplehelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>Xserver</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++<!--
++ <member><citerefentry><refentrytitle>Xprt</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++-->
++ <!-- ToDO: Add manual pages for the single Xprint DDX implementations (PostScript/PDF/PCL/PCL-MONO/Raster/etc.) -->
++ <member><citerefentry><refentrytitle>libXp</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>libXprintUtils</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>libXprintAppUtils</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>XmPrintShell</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>XawPrintShell</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
++ <member>Xprint FAQ (<ulink url="http://xprint.mozdev.org/docs/Xprint_FAQ.html">http://xprint.mozdev.org/docs/Xprint_FAQ.html</ulink>)</member>
++ <member>Xprint main site (<ulink url="http://xprint.mozdev.org/">http://xprint.mozdev.org/</ulink>)</member>
++ </simplelist>
++ </para>
++ </refsect1>
++
++ <refsect1>
++ <title>AUTHORS</title>
++ <para>
++ This manual page was written by
++ Drew Parsons <email>dparsons@debian.org</email> and
++ Roland Mainz <email>roland.mainz@nrubsig.org</email>,
++ with some help from the man page at
++ <ulink url="http://www.sins.com.au/unix/manpages/Xprt.html">http://www.sins.com.au/unix/manpages/Xprt.html</ulink> and the XFree86
++ man page for <citerefentry><refentrytitle>Xserver</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
++ </para>
++ </refsect1>
++</refentry>
++
++
++
+Index: xc/programs/Xserver/Xprint/attributes.c
+diff -u xc/programs/Xserver/Xprint/attributes.c:1.5 xc/programs/Xserver/Xprint/attributes.c:1.5.4.3
+--- xc/programs/Xserver/Xprint/attributes.c:1.5 Mon Jul 19 22:01:52 2004
++++ xc/programs/Xserver/Xprint/attributes.c Mon Jan 24 03:39:28 2005
+@@ -816,7 +816,7 @@
+ char *s, c;
+
+ if (*type != XrmQString)
+- return;
++ return False;
+
+ for (firstNameSeen = False; *quarks; bindings++, quarks++) {
+ if (*bindings == XrmBindLoosely) {
+@@ -1084,34 +1084,6 @@
+ }
+
+ /*
+- * ExecuteCommand takes two pointers - the command to execute,
+- * and the "argv" style NULL-terminated vector of arguments for the command.
+- * We wait for the command to terminate before continuing to ensure that
+- * we don't delete the job file before the spooler has made a copy.
+- */
+-static void
+-ExecCommand(pCommand, argVector)
+- char *pCommand;
+- char **argVector;
+-{
+- pid_t childPid;
+- int status;
+-
+- if((childPid = fork()) == 0)
+- {
+- /* return BadAlloc? */
+- if (execv(pCommand, argVector) == -1) {
+- FatalError("unable to exec '%s'", pCommand);
+- }
+- }
+- else
+- {
+- (void) waitpid(childPid, &status, 0);
+- }
+- return;
+-}
+-
+-/*
+ * SendFileToCommand takes three character pointers - the file name,
+ * the command to execute,
+ * and the "argv" style NULL-terminated vector of arguments for the command.
+@@ -1515,6 +1487,8 @@
+
+ FreeVector(vector);
+ xfree(cmdNam);
++
++ return Success;
+ }
+
+ /*
+Index: xc/programs/Xserver/Xprint/attributes.h
+diff -u xc/programs/Xserver/Xprint/attributes.h:1.2 xc/programs/Xserver/Xprint/attributes.h:1.2.4.1
+--- xc/programs/Xserver/Xprint/attributes.h:1.2 Fri Apr 23 18:57:32 2004
++++ xc/programs/Xserver/Xprint/attributes.h Mon Jan 24 03:39:28 2005
+@@ -109,8 +109,6 @@
+ char *ReplaceFileString(char *string,
+ char *inFileName,
+ char *outFileName);
+-void ExecCommand(char *pCommand,
+- char **argVector);
+ int TransferBytes(FILE *pSrcFile,
+ FILE *pDstFile,
+ int numBytes);
+Index: xc/programs/Xserver/Xprint/spooler.c
+diff -u xc/programs/Xserver/Xprint/spooler.c:1.3 xc/programs/Xserver/Xprint/spooler.c:1.3.4.1
+--- xc/programs/Xserver/Xprint/spooler.c:1.3 Thu Jun 24 06:26:27 2004
++++ xc/programs/Xserver/Xprint/spooler.c Mon Jan 24 04:20:45 2005
+@@ -125,7 +125,7 @@
+ "| sort -u` " \
+ "| nawk -F: ' NF == 2 { name=$1 } " \
+ " NF == 1 { sub(\"^.*description\\( - undefined|=\\)\",\"\"); " \
+- " printf \"%sxp-printerattr.descriptor=%s\\n\", name, $1 } '"
++ " printf \"%s\txp-printerattr.descriptor=%s\\n\", name, $1 } '"
+
+ #define LIST_QUEUES_OTHER \
+ "LANG=C lpstat -v | " \
+Index: xc/programs/Xserver/Xprint/etc/init.d/xprint.cpp
+diff -u xc/programs/Xserver/Xprint/etc/init.d/xprint.cpp:1.2 xc/programs/Xserver/Xprint/etc/init.d/xprint.cpp:1.2.2.1
+--- xc/programs/Xserver/Xprint/etc/init.d/xprint.cpp:1.2 Wed Aug 11 13:55:03 2004
++++ xc/programs/Xserver/Xprint/etc/init.d/xprint.cpp Mon Jan 24 03:29:12 2005
+@@ -248,7 +248,7 @@
+ tok="${val#*=}"
+ done
+ done
+- ) | tr "," "[\n]" | fontpath2fontlist
++ ) | tr "," "\n" | fontpath2fontlist
+ }
+
+ get_fontlist_from_all_xfs_configs()
+@@ -832,7 +832,7 @@
+ echo ${display}
+ fi
+ )
+- done | tr "[\n]" " "
++ done | tr "\n" " "
+ )
+ # Only produce output if we have some entries...
+ [ "${xpserverlist}" != "" ] && echo "${xpserverlist}"
+Index: xc/programs/Xserver/Xprint/pcl/PclInit.c
+diff -u xc/programs/Xserver/Xprint/pcl/PclInit.c:1.2 xc/programs/Xserver/Xprint/pcl/PclInit.c:1.2.4.2
+--- xc/programs/Xserver/Xprint/pcl/PclInit.c:1.2 Fri Apr 23 18:57:50 2004
++++ xc/programs/Xserver/Xprint/pcl/PclInit.c Mon Dec 13 05:16:11 2004
+@@ -329,12 +329,12 @@
+ */
+
+ static char DOC_ATT_SUPP[]="document-attributes-supported";
+-static char DOC_ATT_VAL[]="document-format";
++static char DOC_ATT_VAL[]="document-format xp-listfonts-modes";
+ static char JOB_ATT_SUPP[]="job-attributes-supported";
+ static char JOB_ATT_VAL[]="";
+ static char PAGE_ATT_SUPP[]="xp-page-attributes-supported";
+ static char PAGE_ATT_VAL[]="content-orientation default-printer-resolution \
+-default-input-tray default-medium plex";
++default-input-tray default-medium plex xp-listfonts-modes";
+
+ static int
+ PclInitContext(XpContextPtr pCon)
+@@ -427,7 +427,7 @@
+ server = XpGetOneAttribute( pCon, XPServerAttr, DOC_ATT_SUPP );
+ if( ( attrStr = (char *)xalloc(strlen(server) + strlen(DOC_ATT_SUPP)
+ + strlen(DOC_ATT_VAL) +
+- strlen(PAGE_ATT_VAL) + 6 ) )
++ strlen(PAGE_ATT_VAL) + 8 ) )
+ == (char *)NULL )
+ return BadAlloc;
+ sprintf( attrStr, "*%s:\t%s %s %s", DOC_ATT_SUPP, server,
+@@ -440,7 +440,7 @@
+ */
+ server = XpGetOneAttribute( pCon, XPServerAttr, JOB_ATT_SUPP );
+ if( ( attrStr = (char *)xalloc(strlen(server) + strlen(JOB_ATT_SUPP)
+- + strlen(JOB_ATT_VAL) + 4 ) )
++ + strlen(JOB_ATT_VAL) + 8 ) )
+ == (char *)NULL )
+ return BadAlloc;
+ sprintf( attrStr, "*%s:\t%s %s", JOB_ATT_SUPP, server, JOB_ATT_VAL );
+@@ -452,7 +452,7 @@
+ */
+ server = XpGetOneAttribute( pCon, XPServerAttr, PAGE_ATT_SUPP );
+ if( ( attrStr = (char *)xalloc(strlen(server) + strlen(PAGE_ATT_SUPP)
+- + strlen(PAGE_ATT_VAL) + 4 ) )
++ + strlen(PAGE_ATT_VAL) + 8 ) )
+ == (char *)NULL )
+ return BadAlloc;
+ sprintf( attrStr, "*%s:\t%s %s", PAGE_ATT_SUPP, server, PAGE_ATT_VAL );
+Index: xc/programs/Xserver/Xprint/ps/Ps.h
+diff -u xc/programs/Xserver/Xprint/ps/Ps.h:1.3 xc/programs/Xserver/Xprint/ps/Ps.h:1.3.4.3
+--- xc/programs/Xserver/Xprint/ps/Ps.h:1.3 Sun Jul 18 05:21:20 2004
++++ xc/programs/Xserver/Xprint/ps/Ps.h Mon Jan 24 03:39:28 2005
+@@ -350,7 +350,6 @@
+
+ extern Bool InitializePsDriver(int ndx, ScreenPtr pScreen, int argc,
+ char **argv);
+-static Bool PsDestroyContext(XpContextPtr pCon);
+ extern XpContextPtr PsGetContextFromWindow(WindowPtr win);
+
+ /*
+@@ -374,9 +373,6 @@
+ */
+
+ extern Bool PsCreateGC(GCPtr pGC);
+-static int PsGetDrawablePrivateStuff(DrawablePtr pDrawable, GC *gc,
+- unsigned long *valid, PsOutPtr *psOut,
+- ColormapPtr *cMap);
+ extern PsContextPrivPtr PsGetPsContextPriv( DrawablePtr pDrawable );
+ extern int PsUpdateDrawableGC(GCPtr pGC, DrawablePtr pDrawable,
+ PsOutPtr *psOut, ColormapPtr *cMap);
+@@ -556,7 +552,7 @@
+ extern void PsStoreColors(ColormapPtr pColor, int ndef, xColorItem *pdefs);
+ extern void PsResolveColor(unsigned short *pRed, unsigned short *pGreen,
+ unsigned short *pBlue, VisualPtr pVisual);
+-extern int PsGetPixelColor(ColormapPtr cMap, int pixval);
++extern PsOutColor PsGetPixelColor(ColormapPtr cMap, int pixval);
+ extern void PsSetFillColor(DrawablePtr pDrawable, GCPtr pGC, PsOutPtr psOut,
+ ColormapPtr cMap);
+
+@@ -566,6 +562,7 @@
+
+ extern PixmapPtr PsCreatePixmap(ScreenPtr pScreen, int width, int height,
+ int depth);
++extern void PsScrubPixmap(PixmapPtr pPixmap);
+ extern Bool PsDestroyPixmap(PixmapPtr pPixmap);
+ extern DisplayListPtr PsGetFreeDisplayBlock(PsPixmapPrivPtr priv);
+ extern void PsReplayPixmap(PixmapPtr pix, DrawablePtr pDrawable);
+Index: xc/programs/Xserver/Xprint/ps/PsArea.c
+diff -u xc/programs/Xserver/Xprint/ps/PsArea.c:1.2 xc/programs/Xserver/Xprint/ps/PsArea.c:1.2.4.1
+--- xc/programs/Xserver/Xprint/ps/PsArea.c:1.2 Fri Apr 23 18:57:56 2004
++++ xc/programs/Xserver/Xprint/ps/PsArea.c Mon Dec 13 05:01:14 2004
+@@ -131,6 +131,13 @@
+ PsOut_Offset(psOut, pDrawable->x, pDrawable->y);
+ pt = (char *)(&i); i = 1; if( pt[0]=='\001' ) swap = 1; else swap = 0;
+
++#ifdef PSOUT_USE_DEEPCOLOR
++ if( depth==30 )
++ {
++ ErrorF("PsPutScaledImage: Not implemented yet for 30bit\m");
++ }
++ else
++#endif /* PSOUT_USE_DEEPCOLOR */
+ if( depth==24 )
+ {
+ PsOut_BeginImage(psOut, 0, 0, x, y, w, h, sw, sh, 3);
+@@ -174,6 +181,34 @@
+ else goto error;
+ PsOut_EndImage(psOut);
+ }
++#ifdef PSOUT_USE_DEEPCOLOR
++ else if( (depth > 8) && (depth < 16) )
++ {
++ int rowsiz = PixmapBytePad(w, depth);
++ PsOut_BeginImage(psOut, 0, 0, x, y, w, h, sw, sh, 3);
++ for( r=0 ; r<h ; r++ )
++ {
++ short *pt = (short *)&pImage[rowsiz*r];
++ for( c=0 ; c<w ; c++,pt++ )
++ {
++ PsOutColor clr = PsGetPixelColor(cMap, (int)(*pt)&0xFFFF);
++ /* XXX: This needs to be fixed for endian swapping and to support
++ * depths deeper than 8bit per R-,G-,B-gun... */
++ int val = PSOUTCOLOR_TO_RGB24BIT(clr);
++ char *ipt = (char *)&val;
++ if( swap )
++ {
++ char tmp[4];
++ tmp[0] = ipt[3]; tmp[1] = ipt[2]; tmp[2] = ipt[1]; tmp[3] = ipt[0];
++ PsOut_OutImageBytes(psOut, 3, &tmp[1]);
++ }
++ else
++ PsOut_OutImageBytes(psOut, 3, &ipt[1]);
++ }
++ }
++ PsOut_EndImage(psOut);
++ }
++#endif /* PSOUT_USE_DEEPCOLOR */
+ else if( depth==8 )
+ {
+ int rowsiz = PixmapBytePad(w, depth);
+@@ -183,8 +218,9 @@
+ char *pt = &pImage[rowsiz*r];
+ for( c=0 ; c<w ; c++,pt++ )
+ {
+- int val = PsGetPixelColor(cMap, (int)(*pt)&0xFF);
+- char *ipt = (char *)&val;
++ PsOutColor clr = PsGetPixelColor(cMap, (int)(*pt)&0xFF);
++ int val = PSOUTCOLOR_TO_RGB24BIT(clr);
++ char *ipt = (char *)&val;
+ if( swap )
+ {
+ char tmp[4];
+@@ -296,6 +332,14 @@
+
+ PsOut_BeginImageCache(psOut, cache_id);
+ #endif
++
++#ifdef PSOUT_USE_DEEPCOLOR
++ if( depth==30 )
++ {
++ ErrorF("PsPutScaledImageIM: Not implemented yet for 30bit\m");
++ }
++ else
++#endif /* PSOUT_USE_DEEPCOLOR */
+ if( depth==24 )
+ {
+ PsOut_BeginImageIM(psOut, 0, 0, x, y, w, h, sw, sh, 3);
+@@ -339,6 +383,32 @@
+ else goto error;
+ PsOut_EndImage(psOut);
+ }
++#ifdef PSOUT_USE_DEEPCOLOR
++ else if( (depth > 8) && (depth < 16) )
++ {
++ int rowsiz = PixmapBytePad(w, depth);
++ PsOut_BeginImageIM(psOut, 0, 0, x, y, w, h, sw, sh, 3);
++ for( r=0 ; r<h ; r++ )
++ {
++ short *pt = (short *)&pImage[rowsiz*r];
++ for( c=0 ; c<w ; c++,pt++ )
++ {
++ PsOutColor clr = PsGetPixelColor(cMap, (int)(*pt)&0xFFFF);
++ int val = PSOUTCOLOR_TO_RGB24BIT(clr);
++ char *ipt = (char *)&val;
++ if( swap )
++ {
++ char tmp[4];
++ tmp[0] = ipt[3]; tmp[1] = ipt[2]; tmp[2] = ipt[1]; tmp[3] = ipt[0];
++ PsOut_OutImageBytes(psOut, 3, &tmp[1]);
++ }
++ else
++ PsOut_OutImageBytes(psOut, 3, &ipt[1]);
++ }
++ }
++ PsOut_EndImage(psOut);
++ }
++#endif /* PSOUT_USE_DEEPCOLOR */
+ else if( depth==8 )
+ {
+ int rowsiz = PixmapBytePad(w, depth);
+@@ -348,8 +418,11 @@
+ char *pt = &pImage[rowsiz*r];
+ for( c=0 ; c<w ; c++,pt++ )
+ {
+- int val = PsGetPixelColor(cMap, (int)(*pt)&0xFF);
+- char *ipt = (char *)&val;
++ PsOutColor clr = PsGetPixelColor(cMap, (int)(*pt)&0xFF);
++ /* XXX: This needs to be fixed for endian swapping and to support
++ * depths deeper than 8bit per R-,G-,B-gun... */
++ int val = PSOUTCOLOR_TO_RGB24BIT(clr);
++ char *ipt = (char *)&val;
+ if( swap )
+ {
+ char tmp[4];
+Index: xc/programs/Xserver/Xprint/ps/PsColor.c
+diff -u xc/programs/Xserver/Xprint/ps/PsColor.c:1.3 xc/programs/Xserver/Xprint/ps/PsColor.c:1.3.4.2
+--- xc/programs/Xserver/Xprint/ps/PsColor.c:1.3 Sun Jul 18 05:21:20 2004
++++ xc/programs/Xserver/Xprint/ps/PsColor.c Mon Dec 13 05:34:20 2004
+@@ -75,6 +75,8 @@
+ ********************************************************************/
+
+ #include "Ps.h"
++#include "mi.h"
++#include "micmap.h"
+ #include "gcstruct.h"
+ #include "windowstr.h"
+ #include "colormapst.h"
+@@ -82,49 +84,25 @@
+ Bool
+ PsCreateColormap(ColormapPtr pColor)
+ {
+- int i;
+- unsigned short rgb;
+- VisualPtr pVisual = pColor->pVisual;
+- Pixel pix;
+-
+- if( pVisual->class==TrueColor )
+- {
+- for( i=0 ; i<pVisual->ColormapEntries ; i++ )
+- {
+- rgb = (i<<8)|i;
+-
+- pColor->red[i].fShared = FALSE;
+- pColor->red[i].co.local.red = rgb;
+- pColor->red[i].co.local.green = 0;
+- pColor->red[i].co.local.blue = 0;
+-
+- pColor->green[i].fShared = FALSE;
+- pColor->green[i].co.local.red = 0;
+- pColor->green[i].co.local.green = rgb;
+- pColor->green[i].co.local.blue = 0;
+-
+- pColor->blue[i].fShared = FALSE;
+- pColor->blue[i].co.local.red = 0;
+- pColor->blue[i].co.local.green = 0;
+- pColor->blue[i].co.local.blue = rgb;
+- }
+- }
+- return TRUE;
++ return miInitializeColormap(pColor);
+ }
+
+ void
+ PsDestroyColormap(ColormapPtr pColor)
+ {
++ /* NO-OP */
+ }
+
+ void
+ PsInstallColormap(ColormapPtr pColor)
+ {
++ miInstallColormap(pColor);
+ }
+
+ void
+ PsUninstallColormap(ColormapPtr pColor)
+ {
++ miUninstallColormap(pColor);
+ }
+
+ int
+@@ -132,7 +110,7 @@
+ ScreenPtr pScreen,
+ XID *pCmapList)
+ {
+- return 0;
++ return miListInstalledColormaps(pScreen, pCmapList);
+ }
+
+ void
+@@ -160,18 +138,71 @@
+ unsigned short *pBlue,
+ VisualPtr pVisual)
+ {
++ miResolveColor(pRed, pGreen, pBlue, pVisual);
+ }
+
+-int
++PsOutColor
+ PsGetPixelColor(ColormapPtr cMap, int pixval)
+ {
+- int r, g, b;
+- if( cMap->pVisual->class==TrueColor ) return(pixval);
+- if( pixval<0 || pixval>255 ) return(0);
+- r = cMap->red[pixval].co.local.red>>8;
+- g = cMap->red[pixval].co.local.green>>8;
+- b = cMap->red[pixval].co.local.blue>>8;
+- return((r<<16)|(g<<8)|b);
++ VisualPtr v = cMap->pVisual;
++ switch( v->class )
++ {
++ case TrueColor:
++ {
++ PsOutColor p = pixval;
++ PsOutColor r, g, b;
++#ifdef PSOUT_USE_DEEPCOLOR
++ int shift = 16 - v->bitsPerRGBValue;
++#else
++ int shift = 8 - v->bitsPerRGBValue;
++#endif /* PSOUT_USE_DEEPCOLOR */
++
++ r = ((p & v->redMask) >> v->offsetRed) << shift;
++ g = ((p & v->greenMask) >> v->offsetGreen) << shift;
++ b = ((p & v->blueMask) >> v->offsetBlue) << shift;
++
++#ifdef PSOUT_USE_DEEPCOLOR
++ return((r<<32)|(g<<16)|b);
++#else
++ return((r<<16)|(g<<8)|b);
++#endif /* PSOUT_USE_DEEPCOLOR */
++ }
++ case PseudoColor:
++ case GrayScale:
++ case StaticGray:
++ {
++ PsOutColor r, g, b;
++
++ if( pixval < 0 || pixval > v->ColormapEntries)
++ return(0);
++
++ r = cMap->red[pixval].co.local.red;
++ g = cMap->red[pixval].co.local.green;
++ b = cMap->red[pixval].co.local.blue;
++
++ if ((v->class | DynamicClass) == GrayScale)
++ {
++ /* rescale to gray (see |miResolveColor()|) */
++ r = g = b = (30L*r + 59L*g + 11L*b) / 100L;
++ }
++
++#ifdef PSOUT_USE_DEEPCOLOR
++ return((r<<32)|(g<<16)|b);
++#else
++ r >>= 8;
++ g >>= 8;
++ b >>= 8;
++
++ return((r<<16)|(g<<8)|b);
++#endif /* PSOUT_USE_DEEPCOLOR */
++ }
++ default:
++ FatalError("PsGetPixelColor: Unsupported visual %x\n",
++ (int)cMap->pVisual->class);
++ break;
++ }
++
++ return 0; /* NO-OP*/
+ }
+
+ void
+Index: xc/programs/Xserver/Xprint/ps/PsGC.c
+diff -u xc/programs/Xserver/Xprint/ps/PsGC.c:1.3 xc/programs/Xserver/Xprint/ps/PsGC.c:1.3.4.1
+--- xc/programs/Xserver/Xprint/ps/PsGC.c:1.3 Sun Jul 18 05:21:20 2004
++++ xc/programs/Xserver/Xprint/ps/PsGC.c Mon Dec 13 05:06:13 2004
+@@ -380,6 +380,16 @@
+ {
+ GCPtr pDst;
+
++ if (pSrc == NULL) {
++ /* https://freedesktop.org/bugzilla/show_bug.cgi?id=1416 ("'x11perf
++ * -copypixpix500' crashes Xprt's PostScript DDX [PsCreateAndCopyGC"):
++ * I have no clue whether this is the real fix or just wallpapering
++ * over the crash (that's why we warn here loudly when this
++ * happens) ... */
++ fprintf(stderr, "PsCreateAndCopyGC: pSrc == NULL\n");
++ return NULL;
++ }
++
+ if ((pDst =
+ CreateScratchGC(pDrawable->pScreen, pDrawable->depth)) == NULL)
+ {
+Index: xc/programs/Xserver/Xprint/ps/PsInit.c
+diff -u xc/programs/Xserver/Xprint/ps/PsInit.c:1.3 xc/programs/Xserver/Xprint/ps/PsInit.c:1.3.4.4
+--- xc/programs/Xserver/Xprint/ps/PsInit.c:1.3 Mon Apr 26 11:07:03 2004
++++ xc/programs/Xserver/Xprint/ps/PsInit.c Mon Dec 13 06:29:43 2004
+@@ -119,8 +119,18 @@
+ #endif
+ char **printerNames;
+ int numPrinters;
+- int nVisuals;
+- int nDepths;
++ int nv, /* total number of visuals */
++ nv_1bit, /* number of 8bit visuals */
++ nv_8bit, /* number of 8bit visuals */
++ nv_12bit, /* number of 12bit visuals */
++ nv_24bit, /* number of 24bit visuals*/
++ nv_30bit; /* number of 30bit visuals*/
++ int nd; /* number of depths */
++ VisualID *vids_1bit,
++ *vids_8bit,
++ *vids_12bit,
++ *vids_24bit,
++ *vids_30bit;
+ VisualPtr visuals;
+ DepthPtr depths;
+ VisualID defaultVisual;
+@@ -179,44 +189,180 @@
+ /* Will BitmapToRegion make any difference at all? */
+ pScreen->BitmapToRegion = mfbPixmapToRegion;
+
+- nVisuals = 2;
+- nDepths = 2;
+- visuals = (VisualPtr)xalloc(nVisuals*sizeof(VisualRec));
+- depths = (DepthPtr) xalloc(nDepths*sizeof(DepthRec));
+-
+- visuals[0].vid = FakeClientID(0);
+- visuals[0].class = TrueColor;
+- visuals[0].bitsPerRGBValue = 8;
+- visuals[0].ColormapEntries = 256;
+- visuals[0].nplanes = 24;
+- visuals[0].redMask = 0x00FF0000;
+- visuals[0].greenMask = 0x0000FF00;
+- visuals[0].blueMask = 0x000000FF;
+- visuals[0].offsetRed = 16;
+- visuals[0].offsetGreen = 8;
+- visuals[0].offsetBlue = 0;
+-
+- visuals[1].vid = FakeClientID(0);
+- visuals[1].class = PseudoColor;
+- visuals[1].bitsPerRGBValue = 8;
+- visuals[1].ColormapEntries = 256;
+- visuals[1].nplanes = 8;
+- visuals[1].redMask = 0x0;
+- visuals[1].greenMask = 0x0;
+- visuals[1].blueMask = 0x0;
+- visuals[1].offsetRed = 0x0;
+- visuals[1].offsetGreen = 0x0;
+- visuals[1].offsetBlue = 0x0;
+-
+- depths[0].depth = 24;
+- depths[0].numVids = 1;
+- depths[0].vids = (VisualID *)xalloc(sizeof(VisualID));
+- depths[0].vids[0] = visuals[0].vid;
+-
+- depths[1].depth = 8;
+- depths[1].numVids = 1;
+- depths[1].vids = (VisualID *)xalloc(sizeof(VisualID));
+- depths[1].vids[0] = visuals[1].vid;
++ visuals = (VisualPtr) xalloc(8*sizeof(VisualRec));
++ depths = (DepthPtr) xalloc(8*sizeof(DepthRec));
++ vids_1bit = (VisualID *)xalloc(8*sizeof(VisualID));
++ vids_8bit = (VisualID *)xalloc(8*sizeof(VisualID));
++ vids_12bit = (VisualID *)xalloc(8*sizeof(VisualID));
++ vids_24bit = (VisualID *)xalloc(8*sizeof(VisualID));
++ vids_30bit = (VisualID *)xalloc(8*sizeof(VisualID));
++
++ nv = nv_1bit = nv_8bit = nv_12bit = nv_24bit = nv_30bit = nd = 0;
++
++ /* TrueColor, 24bit */
++ visuals[nv].vid = FakeClientID(0);
++ visuals[nv].class = TrueColor;
++ visuals[nv].bitsPerRGBValue = 8;
++ visuals[nv].ColormapEntries = 256;
++ visuals[nv].nplanes = 24;
++ visuals[nv].redMask = 0X00FF0000;
++ visuals[nv].greenMask = 0X0000FF00;
++ visuals[nv].blueMask = 0X000000FF;
++ visuals[nv].offsetRed = 16;
++ visuals[nv].offsetGreen = 8;
++ visuals[nv].offsetBlue = 0;
++ vids_24bit[nv_24bit] = visuals[nv].vid;
++ nv++; nv_24bit++;
++
++ /* PseudoColor, 8bit */
++ visuals[nv].vid = FakeClientID(0);
++ visuals[nv].class = PseudoColor;
++ visuals[nv].bitsPerRGBValue = 8;
++ visuals[nv].ColormapEntries = 256;
++ visuals[nv].nplanes = 8;
++ visuals[nv].redMask = 0x0;
++ visuals[nv].greenMask = 0x0;
++ visuals[nv].blueMask = 0x0;
++ visuals[nv].offsetRed = 0x0;
++ visuals[nv].offsetGreen = 0x0;
++ visuals[nv].offsetBlue = 0x0;
++ vids_8bit[nv_8bit] = visuals[nv].vid;
++ nv++; nv_8bit++;
++
++ /* GrayScale, 8bit */
++ visuals[nv].vid = FakeClientID(0);
++ visuals[nv].class = GrayScale;
++ visuals[nv].bitsPerRGBValue = 8;
++ visuals[nv].ColormapEntries = 256;
++ visuals[nv].nplanes = 8;
++ visuals[nv].redMask = 0x0;
++ visuals[nv].greenMask = 0x0;
++ visuals[nv].blueMask = 0x0;
++ visuals[nv].offsetRed = 0x0;
++ visuals[nv].offsetGreen = 0x0;
++ visuals[nv].offsetBlue = 0x0;
++ vids_8bit[nv_8bit] = visuals[nv].vid;
++ nv++; nv_8bit++;
++
++ /* StaticGray, 8bit */
++ visuals[nv].vid = FakeClientID(0);
++ visuals[nv].class = StaticGray;
++ visuals[nv].bitsPerRGBValue = 8;
++ visuals[nv].ColormapEntries = 256;
++ visuals[nv].nplanes = 8;
++ visuals[nv].redMask = 0x0;
++ visuals[nv].greenMask = 0x0;
++ visuals[nv].blueMask = 0x0;
++ visuals[nv].offsetRed = 0x0;
++ visuals[nv].offsetGreen = 0x0;
++ visuals[nv].offsetBlue = 0x0;
++ vids_8bit[nv_8bit] = visuals[nv].vid;
++ nv++; nv_8bit++;
++
++ /* StaticGray, 1bit */
++ visuals[nv].vid = FakeClientID(0);
++ visuals[nv].class = StaticGray;
++ visuals[nv].bitsPerRGBValue = 1;
++ visuals[nv].ColormapEntries = 2;
++ visuals[nv].nplanes = 1;
++ visuals[nv].redMask = 0x0;
++ visuals[nv].greenMask = 0x0;
++ visuals[nv].blueMask = 0x0;
++ visuals[nv].offsetRed = 0x0;
++ visuals[nv].offsetGreen = 0x0;
++ visuals[nv].offsetBlue = 0x0;
++ vids_1bit[nv_1bit] = visuals[nv].vid;
++ nv++; nv_1bit++;
++
++#ifdef PSOUT_USE_DEEPCOLOR
++ /* TrueColor, 30bit, 10bit per R-,G-,B-gun */
++ visuals[nv].vid = FakeClientID(0);
++ visuals[nv].class = TrueColor;
++ visuals[nv].bitsPerRGBValue = 10;
++ visuals[nv].ColormapEntries = 1024;
++ visuals[nv].nplanes = 30;
++ visuals[nv].redMask = 0X3FF00000;
++ visuals[nv].greenMask = 0X000FFC00;
++ visuals[nv].blueMask = 0X000003FF;
++ visuals[nv].offsetRed = 20;
++ visuals[nv].offsetGreen = 10;
++ visuals[nv].offsetBlue = 0;
++ vids_30bit[nv_30bit] = visuals[nv].vid;
++ nv++; nv_30bit++;
++
++ /* PostScript Level 2 and above, colors can have 12 bits per component
++ * (36 bit for RGB) */
++
++ /* GrayScale, 12bit, 12bit per R-,G-,B-gun */
++ visuals[nv].vid = FakeClientID(0);
++ visuals[nv].class = GrayScale;
++ visuals[nv].bitsPerRGBValue = 12;
++ visuals[nv].ColormapEntries = 4096;
++ visuals[nv].nplanes = 12;
++ visuals[nv].redMask = 0x0;
++ visuals[nv].greenMask = 0x0;
++ visuals[nv].blueMask = 0x0;
++ visuals[nv].offsetRed = 0x0;
++ visuals[nv].offsetGreen = 0x0;
++ visuals[nv].offsetBlue = 0x0;
++ vids_12bit[nv_12bit] = visuals[nv].vid;
++ nv++; nv_12bit++;
++
++ /* StaticGray, 12bit, 12bit per R-,G-,B-gun */
++ visuals[nv].vid = FakeClientID(0);
++ visuals[nv].class = StaticGray;
++ visuals[nv].bitsPerRGBValue = 12;
++ visuals[nv].ColormapEntries = 4096;
++ visuals[nv].nplanes = 12;
++ visuals[nv].redMask = 0x0;
++ visuals[nv].greenMask = 0x0;
++ visuals[nv].blueMask = 0x0;
++ visuals[nv].offsetRed = 0x0;
++ visuals[nv].offsetGreen = 0x0;
++ visuals[nv].offsetBlue = 0x0;
++ vids_12bit[nv_12bit] = visuals[nv].vid;
++ nv++; nv_12bit++;
++#endif /* PSOUT_USE_DEEPCOLOR */
++
++ if( nv_30bit > 0 )
++ {
++ depths[nd].depth = 30;
++ depths[nd].numVids = nv_30bit;
++ depths[nd].vids = vids_30bit;
++ nd++;
++ }
++
++ if( nv_24bit > 0 )
++ {
++ depths[nd].depth = 24;
++ depths[nd].numVids = nv_24bit;
++ depths[nd].vids = vids_24bit;
++ nd++;
++ }
++
++ if( nv_12bit > 0 )
++ {
++ depths[nd].depth = 12;
++ depths[nd].numVids = nv_12bit;
++ depths[nd].vids = vids_12bit;
++ nd++;
++ }
++
++ if( nv_8bit > 0 )
++ {
++ depths[nd].depth = 8;
++ depths[nd].numVids = nv_8bit;
++ depths[nd].vids = vids_8bit;
++ nd++;
++ }
++
++ if( nv_1bit > 0 )
++ {
++ depths[nd].depth = 1;
++ depths[nd].numVids = nv_1bit;
++ depths[nd].vids = vids_1bit;
++ nd++;
++ }
+
+ /* Defaul visual is 8bit PseudoColor */
+ defaultVisual = visuals[1].vid;
+@@ -228,7 +374,7 @@
+
+ GlxWrapInitVisuals(&proc);
+ /* GlxInitVisuals ignores the last three arguments. */
+- proc(&visuals, &depths, &nVisuals, &nDepths,
++ proc(&visuals, &depths, &nv, &nd,
+ &rootDepth, &defaultVisual, 0, 0, 0);
+ }
+ #endif /* GLXEXT */
+@@ -237,8 +383,8 @@
+ pScreen->width, pScreen->height,
+ (int) (pScreen->width / (pScreen->mmWidth / 25.40)),
+ (int) (pScreen->height / (pScreen->mmHeight / 25.40)),
+- 0, rootDepth, nDepths,
+- depths, defaultVisual, nVisuals, visuals);
++ 0, rootDepth, nd,
++ depths, defaultVisual, nv, visuals);
+
+ if( cfbCreateDefColormap(pScreen)==FALSE ) return FALSE;
+
+@@ -282,12 +428,12 @@
+ */
+
+ static char DOC_ATT_SUPP[]="document-attributes-supported";
+-static char DOC_ATT_VAL[]="document-format";
++static char DOC_ATT_VAL[]="document-format xp-listfonts-modes";
+ static char JOB_ATT_SUPP[]="job-attributes-supported";
+ static char JOB_ATT_VAL[]="";
+ static char PAGE_ATT_SUPP[]="xp-page-attributes-supported";
+ static char PAGE_ATT_VAL[]="content-orientation default-printer-resolution \
+-default-input-tray default-medium plex";
++default-input-tray default-medium plex xp-listfonts-modes";
+
+ static int
+ PsInitContext(pCon)
+@@ -346,7 +492,7 @@
+ server = XpGetOneAttribute( pCon, XPServerAttr, DOC_ATT_SUPP );
+ if ((attrStr = (char *) xalloc(strlen(server) +
+ strlen(DOC_ATT_SUPP) + strlen(DOC_ATT_VAL)
+- + strlen(PAGE_ATT_VAL) + 6)) == NULL)
++ + strlen(PAGE_ATT_VAL) + 8)) == NULL)
+ {
+ return BadAlloc;
+ }
+@@ -360,7 +506,7 @@
+ */
+ server = XpGetOneAttribute( pCon, XPServerAttr, JOB_ATT_SUPP );
+ if ((attrStr = (char *) xalloc(strlen(server) + strlen(JOB_ATT_SUPP) +
+- strlen(JOB_ATT_VAL) + 4)) == NULL)
++ strlen(JOB_ATT_VAL) + 8)) == NULL)
+ {
+ return BadAlloc;
+ }
+@@ -373,7 +519,7 @@
+ */
+ server = XpGetOneAttribute( pCon, XPServerAttr, PAGE_ATT_SUPP );
+ if ((attrStr = (char *) xalloc(strlen(server) + strlen(PAGE_ATT_SUPP) +
+- strlen(PAGE_ATT_VAL) + 4)) == NULL)
++ strlen(PAGE_ATT_VAL) + 8)) == NULL)
+ {
+ return BadAlloc;
+ }
+Index: xc/programs/Xserver/Xprint/ps/PsPixmap.c
+diff -u xc/programs/Xserver/Xprint/ps/PsPixmap.c:1.3 xc/programs/Xserver/Xprint/ps/PsPixmap.c:1.3.2.2
+--- xc/programs/Xserver/Xprint/ps/PsPixmap.c:1.3 Wed Aug 18 18:41:40 2004
++++ xc/programs/Xserver/Xprint/ps/PsPixmap.c Mon Dec 13 05:48:41 2004
+@@ -92,7 +92,7 @@
+ {
+ PixmapPtr pPixmap;
+
+- pPixmap = (PixmapPtr)xalloc(sizeof(PixmapRec));
++ pPixmap = (PixmapPtr)xcalloc(1, sizeof(PixmapRec));
+ if( !pPixmap) return NullPixmap;
+ pPixmap->drawable.type = DRAWABLE_PIXMAP;
+ pPixmap->drawable.class = 0;
+@@ -108,20 +108,21 @@
+ pPixmap->devKind = 0;
+ pPixmap->refcnt = 1;
+
+- pPixmap->devPrivate.ptr = (PsPixmapPrivPtr)xalloc(sizeof(PsPixmapPrivRec));
++ pPixmap->devPrivate.ptr = (PsPixmapPrivPtr)xcalloc(1, sizeof(PsPixmapPrivRec));
+ if( !pPixmap->devPrivate.ptr )
+ { xfree(pPixmap); return NullPixmap; }
+- memset(pPixmap->devPrivate.ptr, 0, sizeof(PsPixmapPrivRec));
+ return pPixmap;
+ }
+
+-Bool
+-PsDestroyPixmap(PixmapPtr pPixmap)
++/* PsScrubPixmap: Remove all content from a pixmap (used by
++ * |PsPolyFillRect()| when the "solid fill" operation covers
++ * the whole pixmap) */
++void
++PsScrubPixmap(PixmapPtr pPixmap)
+ {
+ PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pPixmap->devPrivate.ptr;
+ DisplayListPtr disp = priv->dispList;
+
+- if( --pPixmap->refcnt ) return TRUE;
+ while( disp )
+ {
+ int i;
+@@ -178,6 +179,20 @@
+ }
+ xfree(oldDisp);
+ }
++
++ priv->dispList = NULL;
++}
++
++Bool
++PsDestroyPixmap(PixmapPtr pPixmap)
++{
++ PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pPixmap->devPrivate.ptr;
++ DisplayListPtr disp = priv->dispList;
++
++ if( --pPixmap->refcnt ) return TRUE;
++
++ PsScrubPixmap(pPixmap);
++
+ xfree(priv);
+ xfree(pPixmap);
+ return TRUE;
+@@ -192,11 +207,11 @@
+ {
+ if( disp->nelms>=DPY_BLOCKSIZE && disp->next ) continue;
+ if( disp->nelms<DPY_BLOCKSIZE ) return(disp);
+- disp->next = (DisplayListPtr)xalloc(sizeof(DisplayListRec));
++ disp->next = (DisplayListPtr)xcalloc(1, sizeof(DisplayListRec));
+ disp->next->next = (DisplayListPtr)0;
+ disp->next->nelms = 0;
+ }
+- disp = (DisplayListPtr)xalloc(sizeof(DisplayListRec));
++ disp = (DisplayListPtr)xcalloc(1, sizeof(DisplayListRec));
+ disp->next = (DisplayListPtr)0;
+ disp->nelms = 0;
+ priv->dispList = disp;
+@@ -480,6 +495,7 @@
+
+ for( i=0 ; i<disp->nelms ; i++,elm++ )
+ {
++ if( !elm->gc ) continue; /* workaround for https://freedesktop.org/bugzilla/show_bug.cgi?id=1416 */
+ if( !elm->gc->fgPixel ) continue;
+ switch(elm->type)
+ {
+@@ -498,7 +514,7 @@
+
+ if( (*nElms) )
+ {
+- elms = (PsElmPtr)xalloc((*nElms)*sizeof(PsElmRec));
++ elms = (PsElmPtr)xcalloc(1, (*nElms)*sizeof(PsElmRec));
+ if( elms )
+ {
+ disp = priv->dispList;
+@@ -568,7 +584,7 @@
+ int i;
+ PsElmPtr newElms;
+
+- newElms = (PsElmPtr)xalloc(nElms*sizeof(PsElmRec));
++ newElms = (PsElmPtr)xcalloc(1, nElms*sizeof(PsElmRec));
+ if( !newElms ) return(newElms);
+ for( i=0 ; i<nElms ; i++ )
+ {
+Index: xc/programs/Xserver/Xprint/ps/PsPolygon.c
+diff -u xc/programs/Xserver/Xprint/ps/PsPolygon.c:1.2 xc/programs/Xserver/Xprint/ps/PsPolygon.c:1.2.4.1
+--- xc/programs/Xserver/Xprint/ps/PsPolygon.c:1.2 Fri Apr 23 18:57:56 2004
++++ xc/programs/Xserver/Xprint/ps/PsPolygon.c Mon Dec 13 05:48:41 2004
+@@ -203,6 +203,31 @@
+ DisplayListPtr disp;
+ GCPtr gc;
+
++#ifdef DBE
++ /* Remove previous pixmap content if we render one single rect which
++ * covers the whole pixmap surface (this optimisation was added for
++ * the double-buffer extension ("DBE") which uses |PolyFillRect()|
++ * to clear the buffer - but it makes sense in other cases, too).
++ */
++ if (nRects == 1)
++ {
++ extern Bool noDbeExtension;
++
++ if ( (pRects[0].x==0) && (pRects[0].y==0) &&
++ (pRects[0].width==pDrawable->width) && (pRects[0].height==pDrawable->height) &&
++ (pGC->fillStyle == FillSolid) &&
++ (noDbeExtension == False))
++ {
++#ifdef DEBUG_gismobile
++ ErrorF("PsPolyFillRect: scrubbing pixmap...\n");
++#endif /* DEBUG_gismobile */
++ /* Remove all content from the pixmap as it would be covered
++ * by the whole rect anyway */
++ PsScrubPixmap(pDrawable);
++ }
++ }
++#endif /* DBE */
++
+ if ((gc = PsCreateAndCopyGC(pDrawable, pGC)) == NULL) return;
+
+ disp = PsGetFreeDisplayBlock(priv);
+Index: xc/programs/Xserver/Xprint/ps/psout.c
+diff -u xc/programs/Xserver/Xprint/ps/psout.c:1.3 xc/programs/Xserver/Xprint/ps/psout.c:1.3.4.2
+--- xc/programs/Xserver/Xprint/ps/psout.c:1.3 Thu May 6 00:24:32 2004
++++ xc/programs/Xserver/Xprint/ps/psout.c Mon Dec 13 06:35:36 2004
+@@ -422,17 +422,19 @@
+ }
+
+ static void
+-S_Color(PsOutPtr self, int clr)
++S_Color(PsOutPtr self, PsOutColor clr)
+ {
+ int ir, ig, ib;
+- ir = clr>>16; ig = (clr>>8)&0xFF; ib = clr&0xFF;
++ ir = PSOUTCOLOR_TO_REDBITS(clr);
++ ig = PSOUTCOLOR_TO_GREENBITS(clr);
++ ib = PSOUTCOLOR_TO_BLUEBITS(clr);
+ if( ir==ig && ig==ib )
+- { S_OutNum(self, (float)ir/255.); S_OutTok(self, "g", 1); }
++ { S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ir)); S_OutTok(self, "g", 1); }
+ else
+ {
+- S_OutNum(self, (float)ir/255.);
+- S_OutNum(self, (float)ig/255.);
+- S_OutNum(self, (float)ib/255.);
++ S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ir));
++ S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ig));
++ S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ib));
+ S_OutTok(self, "sc", 1);
+ }
+ }
+@@ -636,7 +638,7 @@
+ /*
+ * Initialize the structure
+ */
+- psout->CurColor = 0xFFFFFFFF;
++ psout->CurColor = PSOUTCOLOR_NOCOLOR;
+ psout->LineWidth = 1;
+ psout->LineCap = PsCButt;
+ psout->LineJoin = PsJMiter;
+@@ -723,7 +725,7 @@
+ PsOut_DirtyAttributes(PsOutPtr self)
+ {
+ int i;
+- self->CurColor = 0xFFFFFFFF;
++ self->CurColor = PSOUTCOLOR_NOCOLOR;
+ self->LineWidth = -1;
+ self->LineCap = (PsCapEnum)-1;
+ self->LineJoin = (PsJoinEnum)-1;
+@@ -911,7 +913,7 @@
+ }
+
+ void
+-PsOut_Color(PsOutPtr self, int clr)
++PsOut_Color(PsOutPtr self, PsOutColor clr)
+ {
+ if( clr==self->CurColor || self->InTile>=PsStip ) return;
+ self->CurColor = clr;
+@@ -926,7 +928,7 @@
+
+ void
+ PsOut_LineAttrs(PsOutPtr self, int wd, PsCapEnum cap, PsJoinEnum join,
+- int nDsh, int *dsh, int dshOff, int bclr)
++ int nDsh, int *dsh, int dshOff, PsOutColor bclr)
+ {
+ int i;
+ int same = 1;
+@@ -973,7 +975,10 @@
+ S_OutTok(self, "ds", 1);
+ }
+
+- if( nDsh ) self->LineBClr = bclr; else bclr = -1;
++ if( nDsh )
++ self->LineBClr = bclr;
++ else
++ bclr = PSOUTCOLOR_NOCOLOR;
+ }
+
+ void
+@@ -1094,7 +1099,7 @@
+ if( i==0 ) S_OutTok(self, "m", 0);
+ else S_OutTok(self, "l", 0);
+ }
+- if( self->LineBClr>=0 )
++ if( self->LineBClr != PSOUTCOLOR_NOCOLOR )
+ {
+ S_OutTok(self, "gs", 0);
+ S_Color(self, self->LineBClr);
+@@ -1133,7 +1138,7 @@
+ S_OutNum(self, (float)w);
+ S_OutNum(self, (float)h);
+ S_OutTok(self, "R", 0);
+- if( self->LineBClr>=0 )
++ if( self->LineBClr != PSOUTCOLOR_NOCOLOR )
+ {
+ S_OutTok(self, "gs", 0);
+ S_Color(self, self->LineBClr);
+@@ -1159,7 +1164,7 @@
+ S_OutNum(self, ang1+ang2);
+ if( ang2<0 ) S_OutTok(self, "An", 0);
+ else S_OutTok(self, "Ac", 0);
+- if( self->LineBClr>=0 )
++ if( self->LineBClr != PSOUTCOLOR_NOCOLOR )
+ {
+ S_OutTok(self, "gs", 0);
+ S_Color(self, self->LineBClr);
+@@ -1169,7 +1174,7 @@
+ }
+
+ void
+-PsOut_Text(PsOutPtr self, int x, int y, char *text, int textl, int bclr)
++PsOut_Text(PsOutPtr self, int x, int y, char *text, int textl, PsOutColor bclr)
+ {
+ int xo = self->XOff;
+ int yo = self->YOff;
+@@ -1179,21 +1184,23 @@
+ S_OutStr(self, text, textl);
+ S_OutNum(self, (float)x);
+ S_OutNum(self, (float)y);
+- if( bclr<0 ) S_OutTok(self, "T", 1);
++ if( bclr == PSOUTCOLOR_NOCOLOR )
++ S_OutTok(self, "T", 1);
+ else
+ {
+- int ir = bclr>>16;
+- int ig = (bclr>>8)&0xFF;
+- int ib = bclr&0xFF;
+- S_OutNum(self, (float)ir/255.);
+- S_OutNum(self, (float)ig/255.);
+- S_OutNum(self, (float)ib/255.);
++ int ir = PSOUTCOLOR_TO_REDBITS(bclr);
++ int ig = PSOUTCOLOR_TO_GREENBITS(bclr);
++ int ib = PSOUTCOLOR_TO_BLUEBITS(bclr);
++
++ S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ir));
++ S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ig));
++ S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ib));
+ S_OutTok(self, "Tb", 1);
+ }
+ }
+
+ void
+-PsOut_Text16(PsOutPtr self, int x, int y, unsigned short *text, int textl, int bclr)
++PsOut_Text16(PsOutPtr self, int x, int y, unsigned short *text, int textl, PsOutColor bclr)
+ {
+ int xo = self->XOff;
+ int yo = self->YOff;
+@@ -1203,22 +1210,23 @@
+ S_OutStr16(self, text, textl);
+ S_OutNum(self, (float)x);
+ S_OutNum(self, (float)y);
+- if( bclr<0 ) S_OutTok(self, "T", 1);
++ if( bclr == PSOUTCOLOR_NOCOLOR )
++ S_OutTok(self, "T", 1);
+ else
+ {
+- int ir = bclr>>16;
+- int ig = (bclr>>8)&0xFF;
+- int ib = bclr&0xFF;
+- S_OutNum(self, (float)ir/255.);
+- S_OutNum(self, (float)ig/255.);
+- S_OutNum(self, (float)ib/255.);
++ int ir = PSOUTCOLOR_TO_REDBITS(bclr);
++ int ig = PSOUTCOLOR_TO_GREENBITS(bclr);
++ int ib = PSOUTCOLOR_TO_BLUEBITS(bclr);
++ S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ir));
++ S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ig));
++ S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ib));
+ S_OutTok(self, "Tb", 1);
+ }
+ }
+
+ #ifdef BM_CACHE
+ void /* new */
+-PsOut_ImageCache(PsOutPtr self, int x, int y, long cache_id, int bclr, int fclr)
++PsOut_ImageCache(PsOutPtr self, int x, int y, long cache_id, PsOutColor bclr, PsOutColor fclr)
+ {
+ char cacheID[10];
+ int xo = self->XOff;
+@@ -1231,22 +1239,26 @@
+ S_OutNum(self, (float)x);
+ S_OutNum(self, (float)y);
+
+- if( fclr==0xFFFFFF )
++ if( fclr==PSOUTCOLOR_WHITE )
+ {
+- int ir, ig, ib;
+- ir = bclr>>16; ig = (bclr>>8)&0xFF; ib = bclr&0xFF;
++ int ir = PSOUTCOLOR_TO_REDBITS(bclr);
++ int ig = PSOUTCOLOR_TO_GREENBITS(bclr);
++ int ib = PSOUTCOLOR_TO_BLUEBITS(bclr);
++
+ if( ir==ig && ig==ib )
+- S_OutNum(self, (float)ir/255.);
++ S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ir));
+ else
+ S_OutNum(self, (float)0);
+ self->RevImage = 1;
+ }
+ else
+ {
+- int ir, ig, ib;
+- ir = fclr>>16; ig = (fclr>>8)&0xFF; ib = fclr&0xFF;
++ int ir = PSOUTCOLOR_TO_REDBITS(fclr);
++ int ig = PSOUTCOLOR_TO_GREENBITS(fclr);
++ int ib = PSOUTCOLOR_TO_BLUEBITS(fclr);
++
+ if( ir==ig && ig==ib )
+- S_OutNum(self, (float)ir/255.);
++ S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ir));
+ else
+ S_OutNum(self, (float)0);
+ }
+@@ -1272,10 +1284,10 @@
+ #endif
+
+ void
+-PsOut_BeginImage(PsOutPtr self, int bclr, int fclr, int x, int y,
++PsOut_BeginImage(PsOutPtr self, PsOutColor bclr, PsOutColor fclr, int x, int y,
+ int w, int h, int sw, int sh, int format)
+ {
+- int savClr = self->CurColor;
++ PsOutColor savClr = self->CurColor;
+ int xo = self->XOff;
+ int yo = self->YOff;
+
+@@ -1291,7 +1303,7 @@
+ S_OutTok(self, "<", 0);
+ self->ImageFormat = format;
+ self->RevImage = 0;
+- if( self->InTile==PsTile && format==1 && fclr==0xFFFFFF )
++ if( self->InTile==PsTile && format==1 && fclr==PSOUTCOLOR_WHITE )
+ self->RevImage = 1;
+ return;
+ }
+@@ -1300,7 +1312,7 @@
+ if( format==1 )
+ {
+ S_OutTok(self, "gs", 0);
+- if( fclr==0xFFFFFF )
++ if( fclr==PSOUTCOLOR_WHITE )
+ {
+ PsOut_Color(self, fclr);
+ PsOut_FillRect(self, x, y, sw, sh);
+@@ -1332,10 +1344,10 @@
+ }
+
+ void
+-PsOut_BeginImageIM(PsOutPtr self, int bclr, int fclr, int x, int y,
++PsOut_BeginImageIM(PsOutPtr self, PsOutColor bclr, PsOutColor fclr, int x, int y,
+ int w, int h, int sw, int sh, int format)
+ {
+- int savClr = self->CurColor;
++ PsOutColor savClr = self->CurColor;
+ int xo = self->XOff;
+ int yo = self->YOff;
+
+@@ -1351,7 +1363,7 @@
+ S_OutTok(self, "<", 0);
+ self->ImageFormat = format;
+ self->RevImage = 0;
+- if( self->InTile==PsTile && format==1 && fclr==0xFFFFFF )
++ if( self->InTile==PsTile && format==1 && fclr==PSOUTCOLOR_WHITE )
+ self->RevImage = 1;
+ return;
+ }
+@@ -1363,7 +1375,7 @@
+ #ifdef BM_CACHE
+ S_OutTok(self, "g", 1);
+ #else
+- if( fclr==0xFFFFFF )
++ if( fclr==PSOUTCOLOR_WHITE )
+ {
+ PsOut_Color(self, bclr);
+ self->RevImage = 1;
+@@ -1411,7 +1423,7 @@
+ S_OutTok(self, ">", 1);
+ if( self->ImageFormat==1 && self->InTile==PsTile )
+ {
+- if( self->ImgFClr==0xFFFFFF )
++ if( self->ImgFClr==PSOUTCOLOR_WHITE )
+ {
+ PsOut_Color(self, self->ImgFClr);
+ PsOut_FillRect(self, self->ImgX, self->ImgY, self->SclW, self->SclH);
+@@ -1436,14 +1448,16 @@
+ self->RevImage = 0;
+ return;
+ }
+-
++ /*
++ * Bug 4639307: Move flush before "> im" to get all of bitmap into ps file.
++ */
++ S_Flush(self);
+ #ifdef BM_CACHE
+ if(self->start_image)
+ S_OutTok(self, "> im", 1); /* new */
+ #endif
+ self->ImageFormat = 0;
+ self->RevImage = 0;
+- S_Flush(self);
+ #ifdef BM_CACHE
+ if(self->start_image)
+ {
+@@ -1509,7 +1523,7 @@
+
+ int
+ PsOut_BeginPattern(PsOutPtr self, void *tag, int w, int h, PsFillEnum type,
+- int bclr, int fclr)
++ PsOutColor bclr, PsOutColor fclr)
+ {
+ int i;
+ char key[64];
+@@ -1585,7 +1599,7 @@
+ case PsOpStip: key[0] = 'o'; break; }
+ S_OutTok(self, key, 0);
+ S_OutTok(self, "spt", 1);
+- self->CurColor = 0xFFFFFFFF;
++ self->CurColor = PSOUTCOLOR_NOCOLOR;
+ }
+
+ void
+Index: xc/programs/Xserver/Xprint/ps/psout.h
+diff -u xc/programs/Xserver/Xprint/ps/psout.h:1.2 xc/programs/Xserver/Xprint/ps/psout.h:1.2.4.1
+--- xc/programs/Xserver/Xprint/ps/psout.h:1.2 Fri Apr 23 18:57:56 2004
++++ xc/programs/Xserver/Xprint/ps/psout.h Mon Dec 13 05:01:15 2004
+@@ -153,6 +153,30 @@
+ PsFontType3
+ } PsFTDownloadFontType;
+
++#ifdef PSOUT_USE_DEEPCOLOR
++typedef long long PsOutColor;
++#define PSOUTCOLOR_TO_REDBITS(clr) ((clr) >> 32)
++#define PSOUTCOLOR_TO_GREENBITS(clr) (((clr) >> 16) & 0xFFFF)
++#define PSOUTCOLOR_TO_BLUEBITS(clr) ((clr) & 0xFFFF)
++#define PSOUTCOLOR_BITS_TO_PSFLOAT(b) ((float)(b) / 65535.)
++#define PSOUTCOLOR_WHITE (0xFFFFFFFFFFFFLL)
++#define PSOUTCOLOR_NOCOLOR (-1LL)
++#define PSOUTCOLOR_TO_RGB24BIT(clr) (((PSOUTCOLOR_TO_REDBITS(clr) >> 8) << 16) | \
++ ((PSOUTCOLOR_TO_GREENBITS(clr) >> 8) << 8) | \
++ ((PSOUTCOLOR_TO_BLUEBITS(clr) >> 8) << 0))
++#else
++typedef long PsOutColor;
++#define PSOUTCOLOR_TO_REDBITS(clr) ((clr) >> 16)
++#define PSOUTCOLOR_TO_GREENBITS(clr) (((clr) >> 8) & 0xFF)
++#define PSOUTCOLOR_TO_BLUEBITS(clr) ((clr) & 0xFF)
++#define PSOUTCOLOR_BITS_TO_PSFLOAT(b) ((float)(b) / 255.)
++#define PSOUTCOLOR_WHITE (0xFFFFFF)
++#define PSOUTCOLOR_NOCOLOR (-1)
++#define PSOUTCOLOR_TO_RGB24BIT(clr) ((PSOUTCOLOR_TO_REDBITS(clr) << 16) | \
++ (PSOUTCOLOR_TO_GREENBITS(clr) << 8) | \
++ (PSOUTCOLOR_TO_BLUEBITS(clr) << 0))
++#endif /* PSOUT_USE_DEEPCOLOR */
++
+ #ifdef USE_PSOUT_PRIVATE
+ typedef void *voidPtr;
+
+@@ -168,14 +192,14 @@
+ {
+ FILE *Fp;
+ char Buf[16384];
+- int CurColor;
++ PsOutColor CurColor;
+ int LineWidth;
+ PsCapEnum LineCap;
+ PsJoinEnum LineJoin;
+ int NDashes;
+ int *Dashes;
+ int DashOffset;
+- int LineBClr;
++ PsOutColor LineBClr;
+ PsRuleEnum FillRule;
+ char *FontName;
+ int FontSize;
+@@ -193,8 +217,8 @@
+
+ PsFillEnum InTile;
+ int ImgSkip;
+- int ImgBClr;
+- int ImgFClr;
++ PsOutColor ImgBClr;
++ PsOutColor ImgFClr;
+ int ImgX;
+ int ImgY;
+ int ImgW;
+@@ -230,11 +254,11 @@
+
+ extern void PsOut_Clip(PsOutPtr self, int clpTyp, PsClipPtr clpinf);
+
+-extern void PsOut_Color(PsOutPtr self, int clr);
++extern void PsOut_Color(PsOutPtr self, PsOutColor clr);
+ extern void PsOut_FillRule(PsOutPtr self, PsRuleEnum rule);
+ extern void PsOut_LineAttrs(PsOutPtr self, int wd, PsCapEnum cap,
+ PsJoinEnum join, int nDsh, int *dsh, int dshOff,
+- int bclr);
++ PsOutColor bclr);
+ extern void PsOut_TextAttrs(PsOutPtr self, char *fnam, int siz, int iso);
+ extern void PsOut_TextAttrsMtx(PsOutPtr self, char *fnam, float *mtx, int iso);
+
+@@ -250,12 +274,12 @@
+ float ang1, float ang2);
+
+ extern void PsOut_Text(PsOutPtr self, int x, int y, char *text, int textl,
+- int bclr);
+-extern void PsOut_Text16(PsOutPtr self, int x, int y, unsigned short *text, int textl, int bclr);
++ PsOutColor bclr);
++extern void PsOut_Text16(PsOutPtr self, int x, int y, unsigned short *text, int textl, PsOutColor bclr);
+
+-extern void PsOut_BeginImage(PsOutPtr self, int bclr, int fclr, int x, int y,
++extern void PsOut_BeginImage(PsOutPtr self, PsOutColor bclr, PsOutColor fclr, int x, int y,
+ int w, int h, int sw, int sh, int format);
+-extern void PsOut_BeginImageIM(PsOutPtr self, int bclr, int fclr, int x, int y,
++extern void PsOut_BeginImageIM(PsOutPtr self, PsOutColor bclr, PsOutColor fclr, int x, int y,
+ int w, int h, int sw, int sh, int format);
+ extern void PsOut_EndImage(PsOutPtr self);
+ extern void PsOut_OutImageBytes(PsOutPtr self, int nBytes, char *bytes);
+@@ -265,7 +289,7 @@
+ extern void PsOut_EndFrame(PsOutPtr self);
+
+ extern int PsOut_BeginPattern(PsOutPtr self, void *tag, int w, int h,
+- PsFillEnum type, int bclr, int fclr);
++ PsFillEnum type, PsOutColor bclr, PsOutColor fclr);
+ extern void PsOut_EndPattern(PsOutPtr self);
+ extern void PsOut_SetPattern(PsOutPtr self, void *tag, PsFillEnum type);
+
+Index: xc/programs/Xserver/dix/Imakefile
+diff -u xc/programs/Xserver/dix/Imakefile:1.2 xc/programs/Xserver/dix/Imakefile:1.2.4.1
+--- xc/programs/Xserver/dix/Imakefile:1.2 Fri Apr 23 19:04:43 2004
++++ xc/programs/Xserver/dix/Imakefile Wed Dec 15 04:53:05 2004
+@@ -73,7 +73,7 @@
+
+ #ifdef DarwinArchitecture
+ #if DarwinQuartzSupport
+- QUARTZ_DEFINES = -DDARWIN_WITH_QUARTZ -DROOTLESS
++ QUARTZ_DEFINES = -DDARWIN_WITH_QUARTZ
+ #endif
+ #endif
+
+Index: xc/programs/Xserver/dix/dispatch.c
+diff -u xc/programs/Xserver/dix/dispatch.c:1.5 xc/programs/Xserver/dix/dispatch.c:1.5.2.1
+--- xc/programs/Xserver/dix/dispatch.c:1.5 Sat Jul 31 01:48:27 2004
++++ xc/programs/Xserver/dix/dispatch.c Mon Dec 13 01:23:05 2004
+@@ -1,4 +1,4 @@
+-/* $XdotOrg: xc/programs/Xserver/dix/dispatch.c,v 1.5 2004/07/31 01:48:27 anholt Exp $ */
++/* $XdotOrg: xc/programs/Xserver/dix/dispatch.c,v 1.5.2.1 2004/12/13 01:23:05 gisburn Exp $ */
+ /* $Xorg: dispatch.c,v 1.5 2001/02/09 02:04:40 xorgcvs Exp $ */
+ /************************************************************
+
+@@ -362,7 +362,7 @@
+ register int nready;
+ register HWEventQueuePtr* icheck = checkForInput;
+ #ifdef SMART_SCHEDULE
+- int start_tick;
++ long start_tick;
+ #endif
+
+ nextFreeClientID = 1;
+Index: xc/programs/Xserver/dix/main.c
+diff -u xc/programs/Xserver/dix/main.c:1.3 xc/programs/Xserver/dix/main.c:1.3.4.1
+--- xc/programs/Xserver/dix/main.c:1.3 Wed Jun 30 20:06:53 2004
++++ xc/programs/Xserver/dix/main.c Wed Dec 8 06:02:34 2004
+@@ -1,4 +1,4 @@
+-/* $XdotOrg: xc/programs/Xserver/dix/main.c,v 1.3 2004/06/30 20:06:53 kem Exp $ */
++/* $XdotOrg: xc/programs/Xserver/dix/main.c,v 1.3.4.1 2004/12/08 06:02:34 gisburn Exp $ */
+ /* $XFree86: xc/programs/Xserver/dix/main.c,v 3.43 2003/10/30 21:21:02 herrb Exp $ */
+ /***********************************************************
+
+@@ -689,7 +689,7 @@
+ if (i == MAXSCREENS)
+ return -1;
+
+- pScreen = (ScreenPtr) xalloc(sizeof(ScreenRec));
++ pScreen = (ScreenPtr) xcalloc(1, sizeof(ScreenRec));
+ if (!pScreen)
+ return -1;
+
+Index: xc/programs/Xserver/fb/fb.h
+diff -u xc/programs/Xserver/fb/fb.h:1.6 xc/programs/Xserver/fb/fb.h:1.6.2.1
+--- xc/programs/Xserver/fb/fb.h:1.6 Wed Aug 11 21:14:17 2004
++++ xc/programs/Xserver/fb/fb.h Wed Dec 15 04:53:05 2004
+@@ -22,7 +22,7 @@
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+-/* $XdotOrg: xc/programs/Xserver/fb/fb.h,v 1.6 2004/08/11 21:14:17 kem Exp $ */
++/* $XdotOrg: xc/programs/Xserver/fb/fb.h,v 1.6.2.1 2004/12/15 04:53:05 gisburn Exp $ */
+
+ #ifndef _FB_H_
+ #define _FB_H_
+@@ -647,7 +647,7 @@
+ ((WindowPtr) (pWin))->devPrivates[fbGetWinPrivateIndex()].ptr)
+ #endif
+
+-#if defined(__DARWIN__)||defined(__CYGWIN__)
++#ifdef ROOTLESS
+ #define __fbPixOriginX(pPix) ((pPix)->drawable.x)
+ #define __fbPixOriginY(pPix) ((pPix)->drawable.y)
+ #else
+Index: xc/programs/Xserver/fb/fbwindow.c
+diff -u xc/programs/Xserver/fb/fbwindow.c:1.4 xc/programs/Xserver/fb/fbwindow.c:1.4.2.1
+--- xc/programs/Xserver/fb/fbwindow.c:1.4 Fri Aug 13 08:16:14 2004
++++ xc/programs/Xserver/fb/fbwindow.c Fri Dec 17 00:38:21 2004
+@@ -1,4 +1,4 @@
+-/* $XdotOrg: xc/programs/Xserver/fb/fbwindow.c,v 1.4 2004/08/13 08:16:14 keithp Exp $ */
++/* $XdotOrg: xc/programs/Xserver/fb/fbwindow.c,v 1.4.2.1 2004/12/17 00:38:21 gisburn Exp $ */
+ /*
+ * Id: fbwindow.c,v 1.1 1999/11/02 03:54:45 keithp Exp $
+ *
+@@ -122,12 +122,9 @@
+ {
+ RegionRec rgnDst;
+ int dx, dy;
+-#ifdef COMPOSITE
++
+ PixmapPtr pPixmap = fbGetWindowPixmap (pWin);
+ DrawablePtr pDrawable = &pPixmap->drawable;
+-#else
+- DrawablePtr pDrawable = &WindowTable[pWin->drawable.pScreen->myNum]->drawable;
+-#endif
+
+ dx = ptOldOrg.x - pWin->drawable.x;
+ dy = ptOldOrg.y - pWin->drawable.y;
+Index: xc/programs/Xserver/hw/xfree86/common/compiler.h
+diff -u xc/programs/Xserver/hw/xfree86/common/compiler.h:1.3 xc/programs/Xserver/hw/xfree86/common/compiler.h:1.3.2.1
+--- xc/programs/Xserver/hw/xfree86/common/compiler.h:1.3 Fri Aug 27 19:27:12 2004
++++ xc/programs/Xserver/hw/xfree86/common/compiler.h Thu Jan 13 00:30:55 2005
+@@ -1076,7 +1076,12 @@
+
+ extern volatile unsigned char *ioBase;
+
+-# define eieio() __asm__ __volatile__ ("eieio" ::: "memory")
++#if defined(linux) && defined(__powerpc64__)
++# include <asm/memory.h>
++#endif /* defined(linux) && defined(__powerpc64__) */
++#ifndef eieio /* We deal with arch-specific eieio() routines above... */
++# define eieio() __asm__ __volatile__ ("eieio" ::: "memory")
++#endif /* eieio */
+
+ static __inline__ unsigned char
+ xf86ReadMmio8(__volatile__ void *base, const unsigned long offset)
+Index: xc/programs/Xserver/hw/xfree86/common/xf86Configure.c
+diff -u xc/programs/Xserver/hw/xfree86/common/xf86Configure.c:1.6 xc/programs/Xserver/hw/xfree86/common/xf86Configure.c:1.6.2.1
+--- xc/programs/Xserver/hw/xfree86/common/xf86Configure.c:1.6 Sun Aug 15 15:40:19 2004
++++ xc/programs/Xserver/hw/xfree86/common/xf86Configure.c Wed Dec 15 05:22:16 2004
+@@ -731,19 +731,13 @@
+
+ for (i=0;i<4;i++) {
+ switch (ConfiguredMonitor->det_mon[i].type) {
+- case DT:
+- case DS_STD_TIMINGS:
+- case DS_WHITE_P:
+- break;
+ case DS_NAME:
+ ptr->mon_modelname = xf86confrealloc(ptr->mon_modelname,
+ strlen((char*)(ConfiguredMonitor->det_mon[i].section.name))
+ + 1);
+ strcpy(ptr->mon_modelname,
+ (char*)(ConfiguredMonitor->det_mon[i].section.name));
+- break;
+- case DS_ASCII_STR:
+- case DS_SERIAL:
++ break;
+ case DS_RANGES:
+ ptr->mon_hsync[ptr->mon_n_hsync].lo =
+ ConfiguredMonitor->det_mon[i].section.ranges.min_h;
+Index: xc/programs/Xserver/hw/xfree86/common/xf86Events.c
+diff -u xc/programs/Xserver/hw/xfree86/common/xf86Events.c:1.3 xc/programs/Xserver/hw/xfree86/common/xf86Events.c:1.3.2.1
+--- xc/programs/Xserver/hw/xfree86/common/xf86Events.c:1.3 Fri Jul 30 20:56:53 2004
++++ xc/programs/Xserver/hw/xfree86/common/xf86Events.c Wed Dec 15 05:36:14 2004
+@@ -49,7 +49,7 @@
+ */
+
+ /* $XConsortium: xf86Events.c /main/46 1996/10/25 11:36:30 kaleb $ */
+-/* $XdotOrg: xc/programs/Xserver/hw/xfree86/common/xf86Events.c,v 1.3 2004/07/30 20:56:53 eich Exp $ */
++/* $XdotOrg: xc/programs/Xserver/hw/xfree86/common/xf86Events.c,v 1.3.2.1 2004/12/15 05:36:14 gisburn Exp $ */
+
+ /* [JCH-96/01/21] Extended std reverse map to four buttons. */
+
+@@ -1334,6 +1334,10 @@
+ ErrorF("xf86VTSwitch: Leaving, xf86Exiting is %s\n",
+ BOOLTOSTRING((dispatchException & DE_TERMINATE) ? TRUE : FALSE));
+ #endif
++#ifdef DPMSExtension
++ if (DPMSPowerLevel != DPMSModeOn)
++ DPMSSet(DPMSModeOn);
++#endif
+ for (i = 0; i < xf86NumScreens; i++) {
+ if (!(dispatchException & DE_TERMINATE))
+ if (xf86Screens[i]->EnableDisableFBAccess)
+@@ -1353,13 +1357,9 @@
+ }
+ #endif /* !__UNIXOS2__ */
+ xf86EnterServerState(SETUP);
+- for (i = 0; i < xf86NumScreens; i++) {
+-#ifdef DPMSExtension
+- if (xf86Screens[i]->DPMSSet)
+- xf86Screens[i]->DPMSSet(xf86Screens[i],DPMSModeOn,0);
+-#endif
++ for (i = 0; i < xf86NumScreens; i++)
+ xf86Screens[i]->LeaveVT(i, 0);
+- }
++
+ for (ih = InputHandlers; ih; ih = ih->next)
+ xf86DisableInputHandler(ih);
+ xf86AccessLeave(); /* We need this here, otherwise */
+Index: xc/programs/Xserver/hw/xfree86/common/xf86Init.c
+diff -u xc/programs/Xserver/hw/xfree86/common/xf86Init.c:1.12 xc/programs/Xserver/hw/xfree86/common/xf86Init.c:1.12.2.2
+--- xc/programs/Xserver/hw/xfree86/common/xf86Init.c:1.12 Fri Aug 20 05:22:39 2004
++++ xc/programs/Xserver/hw/xfree86/common/xf86Init.c Fri Dec 17 02:01:21 2004
+@@ -96,6 +96,7 @@
+ #ifdef DPMSExtension
+ #define DPMS_SERVER
+ #include "extensions/dpms.h"
++#include "dpmsproc.h"
+ #endif
+
+
+@@ -1244,7 +1245,7 @@
+ /*
+ * try to deinitialize all input devices
+ */
+- if (xf86Info.pKeyboard)
++ if (xf86Info.kbdProc && xf86Info.pKeyboard)
+ (xf86Info.kbdProc)(xf86Info.pKeyboard, DEVICE_CLOSE);
+
+ /*
+@@ -1254,6 +1255,10 @@
+ /* Need the sleep when starting X from within another X session */
+ sleep(1);
+ #endif
++#ifdef DPMSExtension /* Turn screens back on */
++ if (DPMSPowerLevel != DPMSModeOn)
++ DPMSSet(DPMSModeOn);
++#endif
+ if (xf86Screens) {
+ if (xf86Screens[0]->vtSema)
+ xf86EnterServerState(SETUP);
+@@ -1265,10 +1270,6 @@
+ * screen explicitely.
+ */
+ xf86EnableAccess(xf86Screens[i]);
+-#ifdef DPMSExtension
+- if (xf86Screens[i]->DPMSSet)
+- xf86Screens[i]->DPMSSet(xf86Screens[i],DPMSModeOn,0);
+-#endif
+ (xf86Screens[i]->LeaveVT)(i, 0);
+ }
+ }
+@@ -1763,8 +1764,22 @@
+ #endif
+
+ #if XORG_VERSION_SNAP >= 900
+- ErrorF(" (%d.%d.0 RC %d)", XORG_VERSION_MAJOR, XORG_VERSION_MINOR + 1,
+- XORG_VERSION_SNAP - 900);
++ /* When the patch number is 99, that signifies that the we are making
++ * a release candidate for a major version; however, if the patch
++ * number is < 99, then we are making a release candidate for the next
++ * point release.
++ */
++ if (XORG_VERSION_PATCH == 99)
++ ErrorF(" (%d.%d.0 RC %d)",
++ XORG_VERSION_MAJOR,
++ XORG_VERSION_MINOR + 1,
++ XORG_VERSION_SNAP - 900);
++ else
++ ErrorF(" (%d.%d.%d RC %d)",
++ XORG_VERSION_MAJOR,
++ XORG_VERSION_MINOR,
++ XORG_VERSION_PATCH + 1,
++ XORG_VERSION_SNAP - 900);
+ #endif
+
+ #ifdef XORG_CUSTOM_VERSION
+Index: xc/programs/Xserver/hw/xfree86/common/xf86Xinput.c
+diff -u xc/programs/Xserver/hw/xfree86/common/xf86Xinput.c:1.1.1.2 xc/programs/Xserver/hw/xfree86/common/xf86Xinput.c:1.1.1.2.6.1
+--- xc/programs/Xserver/hw/xfree86/common/xf86Xinput.c:1.1.1.2 Tue Nov 25 19:28:33 2003
++++ xc/programs/Xserver/hw/xfree86/common/xf86Xinput.c Mon Dec 13 02:15:29 2004
+@@ -932,10 +932,15 @@
+ /* modeled from xf86Events.c */
+ if (device->ptrfeed->ctrl.threshold) {
+ if ((abs(dx) + abs(dy)) >= device->ptrfeed->ctrl.threshold) {
+- valuator[0] = (dx * device->ptrfeed->ctrl.num) /
+- device->ptrfeed->ctrl.den;
+- valuator[1] = (dy * device->ptrfeed->ctrl.num) /
+- device->ptrfeed->ctrl.den;
++ local->dxremaind = ((float)dx * (float)(device->ptrfeed->ctrl.num)) /
++ (float)(device->ptrfeed->ctrl.den) + local->dxremaind;
++ valuator[0] = (int)local->dxremaind;
++ local->dxremaind = local->dxremaind - (float)valuator[0];
++
++ local->dyremaind = ((float)dy * (float)(device->ptrfeed->ctrl.num)) /
++ (float)(device->ptrfeed->ctrl.den) + local->dyremaind;
++ valuator[1] = (int)local->dyremaind;
++ local->dyremaind = local->dyremaind - (float)valuator[1];
+ }
+ }
+ else if (dx || dy) {
+Index: xc/programs/Xserver/hw/xfree86/common/xf86pciBus.c
+diff -u xc/programs/Xserver/hw/xfree86/common/xf86pciBus.c:1.4 xc/programs/Xserver/hw/xfree86/common/xf86pciBus.c:1.4.2.2
+--- xc/programs/Xserver/hw/xfree86/common/xf86pciBus.c:1.4 Mon Aug 9 22:37:22 2004
++++ xc/programs/Xserver/hw/xfree86/common/xf86pciBus.c Tue Jan 25 02:52:42 2005
+@@ -104,9 +104,6 @@
+
+ #define PCI_MEM32_LENGTH_MAX 0xFFFFFFFF
+
+-#undef MIN
+-#define MIN(x,y) ((x<y)?x:y)
+-
+ #define B2M(tag,base) pciBusAddrToHostAddr(tag,PCI_MEM,base)
+ #define B2I(tag,base) (base)
+ #define B2H(tag,base,type) (((type & ResPhysMask) == ResMem) ? \
+@@ -307,7 +304,7 @@
+ mem64 = TRUE;
+ #if defined(LONG64) || defined(WORD64)
+ info->memBase[0] |=
+- (memType)PCIGETMEMORY64HIGH(pcrp->pci_base1) << 32;
++ (memType)PCIGETMEMORY64HIGH(pcrp->pci_base0) << 32;
+ #else
+ if (pcrp->pci_base1)
+ info->memBase[0] = 0;
+@@ -327,7 +324,7 @@
+ mem64 = TRUE;
+ #if defined(LONG64) || defined(WORD64)
+ info->memBase[1] |=
+- (memType)PCIGETMEMORY64HIGH(pcrp->pci_base2) << 32;
++ (memType)PCIGETMEMORY64HIGH(pcrp->pci_base1) << 32;
+ #else
+ if (pcrp->pci_base2)
+ info->memBase[1] = 0;
+@@ -348,7 +345,7 @@
+ mem64 = TRUE;
+ #if defined(LONG64) || defined(WORD64)
+ info->memBase[2] |=
+- (memType)PCIGETMEMORY64HIGH(pcrp->pci_base3) << 32;
++ (memType)PCIGETMEMORY64HIGH(pcrp->pci_base2) << 32;
+ #else
+ if (pcrp->pci_base3)
+ info->memBase[2] = 0;
+@@ -369,7 +366,7 @@
+ mem64 = TRUE;
+ #if defined(LONG64) || defined(WORD64)
+ info->memBase[3] |=
+- (memType)PCIGETMEMORY64HIGH(pcrp->pci_base4) << 32;
++ (memType)PCIGETMEMORY64HIGH(pcrp->pci_base3) << 32;
+ #else
+ if (pcrp->pci_base4)
+ info->memBase[3] = 0;
+@@ -390,7 +387,7 @@
+ mem64 = TRUE;
+ #if defined(LONG64) || defined(WORD64)
+ info->memBase[4] |=
+- (memType)PCIGETMEMORY64HIGH(pcrp->pci_base5) << 32;
++ (memType)PCIGETMEMORY64HIGH(pcrp->pci_base4) << 32;
+ #else
+ if (pcrp->pci_base5)
+ info->memBase[4] = 0;
+@@ -1649,7 +1646,7 @@
+ m = xf86JoinResLists(m,tmp);
+ tmp = m;
+ while (tmp) {
+- tmp->block_end = MIN(tmp->block_end,PCI_MEM32_LENGTH_MAX);
++ tmp->block_end = min(tmp->block_end,PCI_MEM32_LENGTH_MAX);
+ tmp = tmp->next;
+ }
+ } else if ((pbp->primary == pvp->bus) &&
+Index: xc/programs/Xserver/hw/xfree86/ddc/edid.h
+diff -u xc/programs/Xserver/hw/xfree86/ddc/edid.h:1.2 xc/programs/Xserver/hw/xfree86/ddc/edid.h:1.2.4.2
+--- xc/programs/Xserver/hw/xfree86/ddc/edid.h:1.2 Fri Apr 23 19:21:03 2004
++++ xc/programs/Xserver/hw/xfree86/ddc/edid.h Thu Jan 13 00:03:59 2005
+@@ -11,7 +11,7 @@
+ */
+
+ #ifndef _EDID_H_
+-#define _EDID_H_ 1
++#define _EDID_H_
+
+ #include "vdif.h"
+
+@@ -126,7 +126,9 @@
+ #define SETUP _SETUP(GET(D_INPUT))
+ #define _SYNC(x) (x & 0x0F)
+ #define SYNC _SYNC(GET(D_INPUT))
+-#define _GAMMA(x) ((x + 100.0)/100.0)
++#define _DFP(x) (x & 0x01)
++#define DFP _DFP(GET(D_INPUT))
++#define _GAMMA(x) (x == 0xff ? 1.0 : ((x + 100.0)/100.0))
+ #define GAMMA _GAMMA(GET(D_GAMMA))
+ #define HSIZE_MAX GET(D_HSIZE)
+ #define VSIZE_MAX GET(D_VSIZE)
+@@ -158,20 +160,28 @@
+ #define T_MANU GET(E_TMANU)
+
+ /* extract information from estabished timing section */
++#define _VALID_TIMING(x) !(((x[0] == 0x01) && (x[1] == 0x01)) \
++ || ((x[0] == 0x00) && (x[1] == 0x00)) \
++ || ((x[0] == 0x20) && (x[1] == 0x20)) )
++
++#define VALID_TIMING _VALID_TIMING(c)
+ #define _HSIZE1(x) ((x[0] + 31) * 8)
+ #define HSIZE1 _HSIZE1(c)
+ #define RATIO(x) ((x[1] & 0xC0) >> 6)
+ #define RATIO1_1 0
++/* EDID Ver. 1.3 redefined this */
++#define RATIO16_10 RATIO1_1
+ #define RATIO4_3 1
+ #define RATIO5_4 2
+ #define RATIO16_9 3
+-#define _VSIZE1(x,y) switch(RATIO(x)){ \
+- case RATIO1_1: y = _HSIZE1(x); break; \
++#define _VSIZE1(x,y,r) switch(RATIO(x)){ \
++ case RATIO1_1: y = ((v->version > 1 || v->revision > 2) \
++ ? (_HSIZE1(x) * 10) / 16 : _HSIZE1(x)); break; \
+ case RATIO4_3: y = _HSIZE1(x) * 3 / 4; break; \
+ case RATIO5_4: y = _HSIZE1(x) * 4 / 5; break; \
+ case RATIO16_9: y = _HSIZE1(x) * 9 / 16; break; \
+ }
+-#define VSIZE1(x) _VSIZE1(c,x)
++#define VSIZE1(x) _VSIZE1(c,x,v)
+ #define _REFRESH_R(x) (x[1] & 0x3F) + 60
+ #define REFRESH_R _REFRESH_R(c)
+ #define _ID_LOW(x) x[0]
+@@ -183,7 +193,7 @@
+ #define NEXT_STD_TIMING _NEXT_STD_TIMING(c)
+
+
+-/* EDID Ver. > 1.2 */
++/* EDID Ver. >= 1.2 */
+ #define _IS_MONITOR_DESC(x) (x[0] == 0 && x[1] == 0 && x[2] == 0 && x[4] == 0)
+ #define IS_MONITOR_DESC _IS_MONITOR_DESC(c)
+ #define _PIXEL_CLOCK(x) (x[0] + (x[1] << 8)) * 10000
+@@ -214,8 +224,10 @@
+ #define V_BORDER _V_BORDER(c)
+ #define _INTERLACED(x) ((x[17] & 0x80) >> 7)
+ #define INTERLACED _INTERLACED(c)
+-#define _STEREO(x) ((x[17] & 0x60) >> 6)
++#define _STEREO(x) ((x[17] & 0x60) >> 5)
+ #define STEREO _STEREO(c)
++#define _STEREO1(x) (x[17] & 0x1)
++#define STEREO1 _STEREO(c)
+ #define _SYNC_T(x) ((x[17] & 0x18) >> 4)
+ #define SYNC_T _SYNC_T(c)
+ #define _MISC(x) ((x[17] & 0x06) >> 2)
+@@ -236,6 +248,18 @@
+ #define MAX_H _MAX_H(c)
+ #define _MAX_CLOCK(x) x[9]
+ #define MAX_CLOCK _MAX_CLOCK(c)
++#define _HAVE_2ND_GTF(x) (x[10] == 0x02)
++#define HAVE_2ND_GTF _HAVE_2ND_GTF(c)
++#define _F_2ND_GTF(x) (x[12] * 2)
++#define F_2ND_GTF _F_2ND_GTF(c)
++#define _C_2ND_GTF(x) (x[13] / 2)
++#define C_2ND_GTF _C_2ND_GTF(c)
++#define _M_2ND_GTF(x) (x[14] + (x[15] << 8))
++#define M_2ND_GTF _M_2ND_GTF(c)
++#define _K_2ND_GTF(x) (x[16])
++#define K_2ND_GTF _K_2ND_GTF(c)
++#define _J_2ND_GTF(x) (x[17] / 2)
++#define J_2ND_GTF _J_2ND_GTF(c)
+ #define MONITOR_NAME 0xFC
+ #define ADD_COLOR_POINT 0xFB
+ #define WHITEX F_CC(I_CC((GET(D_BW_LOW)),(GET(D_WHITEX)),2))
+@@ -255,6 +279,7 @@
+ #define _WHITE_GAMMA2(x) _GAMMA(x[14])
+ #define WHITE_GAMMA2 _WHITE_GAMMA2(c)
+ #define ADD_STD_TIMINGS 0xFA
++#define ADD_DUMMY 0x10
+
+ #define _NEXT_DT_MD_SECTION(x) (x = (x + DET_TIMING_INFO_LEN))
+ #define NEXT_DT_MD_SECTION _NEXT_DT_MD_SECTION(c)
+@@ -264,6 +289,9 @@
+ /* input type */
+ #define DIGITAL(x) x
+
++/* DFP */
++#define DFP1(x) x
++
+ /* input voltage level */
+ #define V070 0 /* 0.700V/0.300V */
+ #define V071 1 /* 0.714V/0.286V */
+@@ -297,8 +325,12 @@
+ /* detailed timing misc */
+ #define IS_INTERLACED(x) (x)
+ #define IS_STEREO(x) (x)
+-#define IS_RIGHT_ON_SYNC(x) (x & 0x01)
+-#define IS_LEFT_ON_SYNC(x) (x & 0x02)
++#define IS_RIGHT_STEREO(x) (x & 0x01)
++#define IS_LEFT_STEREO(x) (x & 0x02)
++#define IS_4WAY_STEREO(x) (x & 0x03)
++#define IS_RIGHT_ON_SYNC(x) IS_RIGHT_STEREO(x)
++#define IS_LEFT_ON_SYNC(x) IS_LEFT_STEREO(x)
++
+
+ typedef unsigned int Uint;
+ typedef unsigned char Uchar;
+@@ -321,6 +353,7 @@
+ unsigned int input_voltage:2;
+ unsigned int input_setup:1;
+ unsigned int input_sync:5;
++ unsigned int input_dfp:1;
+ int hsize;
+ int vsize;
+ float gamma;
+@@ -368,6 +401,7 @@
+ unsigned int stereo:2;
+ unsigned int sync:2;
+ unsigned int misc:2;
++ unsigned int stereo_1:1;
+ };
+
+ #define DT 0
+@@ -377,6 +411,7 @@
+ #define DS_RANGES 0xFD
+ #define DS_WHITE_P 0xFB
+ #define DS_STD_TIMINGS 0xFA
++#define DS_DUMMY 0x10
+
+ struct monitor_ranges {
+ int min_v;
+@@ -384,6 +419,11 @@
+ int min_h;
+ int max_h;
+ int max_clock;
++ int gtf_2nd_f;
++ int gtf_2nd_c;
++ int gtf_2nd_m;
++ int gtf_2nd_k;
++ int gtf_2nd_j;
+ };
+
+ struct whitePoints{
+Index: xc/programs/Xserver/hw/xfree86/ddc/interpret_edid.c
+diff -u xc/programs/Xserver/hw/xfree86/ddc/interpret_edid.c:1.3 xc/programs/Xserver/hw/xfree86/ddc/interpret_edid.c:1.3.2.1
+--- xc/programs/Xserver/hw/xfree86/ddc/interpret_edid.c:1.3 Fri Aug 27 12:32:14 2004
++++ xc/programs/Xserver/hw/xfree86/ddc/interpret_edid.c Fri Dec 17 01:28:14 2004
+@@ -13,16 +13,21 @@
+
+ static void get_vendor_section(Uchar*, struct vendor *);
+ static void get_version_section(Uchar*, struct edid_version *);
+-static void get_display_section(Uchar*, struct disp_features *);
++static void get_display_section(Uchar*, struct disp_features *,
++ struct edid_version *);
+ static void get_established_timing_section(Uchar*, struct established_timings *);
+-static void get_std_timing_section(Uchar*, struct std_timings *);
++static void get_std_timing_section(Uchar*, struct std_timings *,
++ struct edid_version *);
+ static void get_dt_md_section(Uchar *, struct edid_version *,
+ struct detailed_monitor_section *det_mon);
+ static void copy_string(Uchar *, Uchar *);
+-static void get_dst_timing_section(Uchar *, struct std_timings *);
++static void get_dst_timing_section(Uchar *, struct std_timings *,
++ struct edid_version *);
+ static void get_monitor_ranges(Uchar *, struct monitor_ranges *);
+ static void get_whitepoint_section(Uchar *, struct whitePoints *);
+ static void get_detailed_timing_section(Uchar*, struct detailed_timings *);
++static Bool validate_version(int scrnIndex, struct edid_version *);
++
+
+ xf86MonPtr
+ xf86InterpretEDID(int scrnIndex, Uchar *block)
+@@ -33,15 +38,24 @@
+ if (! (m = xnfcalloc(sizeof(xf86Monitor),1))) return NULL;
+ m->scrnIndex = scrnIndex;
+ m->rawData = block;
++
+ get_vendor_section(SECTION(VENDOR_SECTION,block),&m->vendor);
+ get_version_section(SECTION(VERSION_SECTION,block),&m->ver);
+- get_display_section(SECTION(DISPLAY_SECTION,block),&m->features);
++ if (!validate_version(scrnIndex, &m->ver)) goto error;
++ get_display_section(SECTION(DISPLAY_SECTION,block),&m->features,
++ &m->ver);
+ get_established_timing_section(SECTION(ESTABLISHED_TIMING_SECTION,block),
+ &m->timings1);
+- get_std_timing_section(SECTION(STD_TIMING_SECTION,block),m->timings2);
++ get_std_timing_section(SECTION(STD_TIMING_SECTION,block),m->timings2,
++ &m->ver);
+ get_dt_md_section(SECTION(DET_TIMING_SECTION,block),&m->ver, m->det_mon);
+ m->no_sections = (int)*(char *)SECTION(NO_EDID,block);
++
+ return (m);
++
++ error:
++ xfree(m);
++ return NULL;
+ }
+
+ static void
+@@ -66,12 +80,16 @@
+ }
+
+ static void
+-get_display_section(Uchar *c, struct disp_features *r)
++get_display_section(Uchar *c, struct disp_features *r,
++ struct edid_version *v)
+ {
+ r->input_type = INPUT_TYPE;
+- r->input_voltage = INPUT_VOLTAGE;
+- r->input_setup = SETUP;
+- r->input_sync = SYNC;
++ if (!DIGITAL(r->input_type)) {
++ r->input_voltage = INPUT_VOLTAGE;
++ r->input_setup = SETUP;
++ r->input_sync = SYNC;
++ } else if (v->version > 1 || v->revision > 2)
++ r->input_dfp = DFP;
+ r->hsize = HSIZE_MAX;
+ r->vsize = VSIZE_MAX;
+ r->gamma = GAMMA;
+@@ -97,15 +115,20 @@
+ }
+
+ static void
+-get_std_timing_section(Uchar *c, struct std_timings *r)
++get_std_timing_section(Uchar *c, struct std_timings *r,
++ struct edid_version *v)
+ {
+ int i;
+
+ for (i=0;i<STD_TIMINGS;i++){
+- r[i].hsize = HSIZE1;
+- VSIZE1(r[i].vsize);
+- r[i].refresh = REFRESH_R;
+- r[i].id = STD_TIMING_ID;
++ if (VALID_TIMING) {
++ r[i].hsize = HSIZE1;
++ VSIZE1(r[i].vsize);
++ r[i].refresh = REFRESH_R;
++ r[i].id = STD_TIMING_ID;
++ } else {
++ r[i].hsize = r[i].vsize = r[i].refresh = r[i].id = 0;
++ }
+ NEXT_STD_TIMING;
+ }
+ }
+@@ -142,8 +165,11 @@
+ break;
+ case ADD_STD_TIMINGS:
+ det_mon[i].type = DS_STD_TIMINGS;
+- get_dst_timing_section(c,det_mon[i].section.std_t);
++ get_dst_timing_section(c,det_mon[i].section.std_t, ver);
+ break;
++ case ADD_DUMMY:
++ det_mon[i].type = DS_DUMMY;
++ break;
+ }
+ } else {
+ det_mon[i].type = DT;
+@@ -165,7 +191,8 @@
+ }
+
+ static void
+-get_dst_timing_section(Uchar *c, struct std_timings *t)
++get_dst_timing_section(Uchar *c, struct std_timings *t,
++ struct edid_version *v)
+ {
+ int j;
+ c = c + 5;
+@@ -188,6 +215,14 @@
+ r->max_clock = 0;
+ if(MAX_CLOCK != 0xff) /* is specified? */
+ r->max_clock = MAX_CLOCK * 10;
++ if (HAVE_2ND_GTF) {
++ r->gtf_2nd_f = F_2ND_GTF;
++ r->gtf_2nd_c = C_2ND_GTF;
++ r->gtf_2nd_m = M_2ND_GTF;
++ r->gtf_2nd_k = K_2ND_GTF;
++ r->gtf_2nd_j = J_2ND_GTF;
++ } else
++ r->gtf_2nd_f = 0;
+ }
+
+ static void
+@@ -221,8 +256,21 @@
+ r->v_border = V_BORDER;
+ r->interlaced = INTERLACED;
+ r->stereo = STEREO;
++ r->stereo_1 = STEREO1;
+ r->sync = SYNC_T;
+ r->misc = MISC;
+ }
+
+
++static Bool
++validate_version(int scrnIndex, struct edid_version *r)
++{
++ if (r->version != 1)
++ return FALSE;
++ if (r->revision > 3) {
++ xf86DrvMsg(scrnIndex, X_ERROR,"EDID Version 1.%i not yet supported\n",
++ r->revision);
++ return FALSE;
++ }
++ return TRUE;
++}
+Index: xc/programs/Xserver/hw/xfree86/ddc/print_edid.c
+diff -u xc/programs/Xserver/hw/xfree86/ddc/print_edid.c:1.2 xc/programs/Xserver/hw/xfree86/ddc/print_edid.c:1.2.4.1
+--- xc/programs/Xserver/hw/xfree86/ddc/print_edid.c:1.2 Fri Apr 23 19:21:03 2004
++++ xc/programs/Xserver/hw/xfree86/ddc/print_edid.c Fri Dec 17 01:28:14 2004
+@@ -12,7 +12,8 @@
+
+ static void print_vendor(int scrnIndex, struct vendor *);
+ static void print_version(int scrnIndex, struct edid_version *);
+-static void print_display(int scrnIndex, struct disp_features *);
++static void print_display(int scrnIndex, struct disp_features *,
++ struct edid_version *);
+ static void print_established_timings(int scrnIndex,
+ struct established_timings *);
+ static void print_std_timings(int scrnIndex, struct std_timings *);
+@@ -21,19 +22,23 @@
+ static void print_detailed_timings(int scrnIndex, struct detailed_timings *);
+
+ static void print_input_features(int scrnIndex, struct disp_features *);
+-static void print_dpms_features(int scrnIndex, struct disp_features *);
++static void print_dpms_features(int scrnIndex, struct disp_features *,
++ struct edid_version *v);
+ static void print_whitepoint(int scrnIndex, struct disp_features *);
+-
++static void print_number_sections(int scrnIndex, int);
++
+ xf86MonPtr
+ xf86PrintEDID(xf86MonPtr m)
+ {
+ if (!(m)) return NULL;
+ print_vendor(m->scrnIndex,&m->vendor);
+ print_version(m->scrnIndex,&m->ver);
+- print_display(m->scrnIndex,&m->features);
++ print_display(m->scrnIndex,&m->features, &m->ver);
+ print_established_timings(m->scrnIndex,&m->timings1);
+ print_std_timings(m->scrnIndex,m->timings2);
+ print_detailed_monitor_section(m->scrnIndex,m->det_mon);
++ print_number_sections(m->scrnIndex,m->no_sections);
++
+ return m;
+ }
+
+@@ -53,7 +58,8 @@
+ }
+
+ static void
+-print_display(int scrnIndex, struct disp_features *disp)
++print_display(int scrnIndex, struct disp_features *disp,
++ struct edid_version *version)
+ {
+ print_input_features(scrnIndex,disp);
+ xf86DrvMsg(scrnIndex,X_INFO,"Max H-Image Size [cm]: ");
+@@ -66,16 +72,18 @@
+ else
+ xf86ErrorF("V-Size may change\n");
+ xf86DrvMsg(scrnIndex,X_INFO,"Gamma: %.2f\n", disp->gamma);
+- print_dpms_features(scrnIndex,disp);
++ print_dpms_features(scrnIndex,disp,version);
+ print_whitepoint(scrnIndex,disp);
+ }
+
+ static void
+ print_input_features(int scrnIndex, struct disp_features *c)
+ {
+- if (DIGITAL(c->input_type))
++ if (DIGITAL(c->input_type)) {
+ xf86DrvMsg(scrnIndex,X_INFO,"Digital Display Input\n");
+- else {
++ if (DFP1(c->input_dfp))
++ xf86DrvMsg(scrnIndex,X_INFO,"DFP 1.x compatible TMDS\n");
++ } else {
+ xf86DrvMsg(scrnIndex,X_INFO,"Analog Display Input, ");
+ xf86ErrorF("Input Voltage Level: ");
+ switch (c->input_voltage){
+@@ -111,7 +119,8 @@
+ }
+
+ static void
+-print_dpms_features(int scrnIndex, struct disp_features *c)
++print_dpms_features(int scrnIndex, struct disp_features *c,
++ struct edid_version *v)
+ {
+ if (c->dpms) {
+ xf86DrvMsg(scrnIndex,X_INFO,"DPMS capabilities:");
+@@ -140,6 +149,10 @@
+ if (PREFERRED_TIMING_MODE(c->msc))
+ xf86DrvMsg(scrnIndex,X_INFO,
+ "First detailed timing is preferred mode\n");
++ else if (v->version == 1 && v->revision >= 3)
++ xf86DrvMsg(scrnIndex,X_INFO,
++ "First detailed timing not preferred "
++ "mode in violation of standard!");
+ if (GFT_SUPPORTED(c->msc))
+ xf86DrvMsg(scrnIndex,X_INFO,
+ "GTF timings supported\n");
+@@ -234,7 +247,15 @@
+ if (m[i].section.ranges.max_clock != 0)
+ xf86ErrorF(" PixClock max %i MHz\n",m[i].section.ranges.max_clock);
+ else
+- xf86DrvMsg(scrnIndex,X_INFO,"\n");
++ xf86ErrorF("\n");
++ if (m[i].section.ranges.gtf_2nd_f > 0)
++ xf86DrvMsg(scrnIndex,X_INFO," 2nd GTF parameters: f: %i kHz "
++ "c: %i m: %i k %i j %i\n",
++ m[i].section.ranges.gtf_2nd_f,
++ m[i].section.ranges.gtf_2nd_c,
++ m[i].section.ranges.gtf_2nd_m,
++ m[i].section.ranges.gtf_2nd_k,
++ m[i].section.ranges.gtf_2nd_j);
+ break;
+ case DS_STD_TIMINGS:
+ for (j = 0; j<5; j++)
+@@ -252,6 +273,9 @@
+ m[i].section.wp[j].white_y,
+ m[i].section.wp[j].white_gamma);
+ break;
++ case DS_DUMMY:
++ default:
++ break;
+ }
+ }
+ }
+@@ -278,9 +302,32 @@
+ xf86ErrorF("v_border: %i\n",t->v_border);
+ if (IS_STEREO(t->stereo)) {
+ xf86DrvMsg(scrnIndex,X_INFO,"Stereo: ");
+- if (IS_RIGHT_ON_SYNC(t->stereo))
+- xf86ErrorF("right channel on sync\n");
+- else xf86ErrorF("right channel on sync\n");
++ if (IS_RIGHT_STEREO(t->stereo)) {
++ if (!t->stereo_1)
++ xf86ErrorF("right channel on sync\n");
++ else
++ xf86ErrorF("left channel on sync\n");
++ } else if (IS_LEFT_STEREO(t->stereo)) {
++ if (!t->stereo_1)
++ xf86ErrorF("right channel on even line\n");
++ else
++ xf86ErrorF("left channel on evel line\n");
++ }
++ if (IS_4WAY_STEREO(t->stereo)) {
++ if (!t->stereo_1)
++ xf86ErrorF("4-way interleaved\n");
++ else
++ xf86ErrorF("side-by-side interleaved");
++ }
+ }
+ }
+ }
++
++static void
++print_number_sections(int scrnIndex, int num)
++{
++ if (num)
++ xf86DrvMsg(scrnIndex,X_INFO,"Number of EDID sections to follow: %i\n",
++ num);
++}
++
+Index: xc/programs/Xserver/hw/xfree86/doc/BUILD
+diff -u xc/programs/Xserver/hw/xfree86/doc/BUILD:1.4.2.2 xc/programs/Xserver/hw/xfree86/doc/BUILD:1.4.2.3
+--- xc/programs/Xserver/hw/xfree86/doc/BUILD:1.4.2.2 Fri Sep 17 15:38:18 2004
++++ xc/programs/Xserver/hw/xfree86/doc/BUILD Tue Feb 8 00:44:26 2005
+@@ -1,9 +1,9 @@
+ Building the X Window System from the X.org Source Distribution
+
+- Jim Gettys and Keith Packard (for X11R6.8.1)
++ Jim Gettys and Keith Packard (for X11R6.8.2)
+ David Dawes and Matthieu Herrb (for XFree86 4.4 RC2)
+
+- 17 September 2004
++ 9 February 2005
+
+ Abstract
+
+@@ -22,62 +22,62 @@
+ son, flex, zlib (development package), ncurses (development package), font-
+ config (development package), expat (development package), and Perl.
+
+-1. How to get the X11R6.8.1 distribution source
++1. How to get the X11R6.8.2 distribution source
+
+-One way of getting the X11R6.8.1 source is to obtain it directly from the
++One way of getting the X11R6.8.2 source is to obtain it directly from the
+ X.Org CVS repository. There are several ways of doing that, and they are
+ described in the CVS section of our wiki <URL:http://wiki.x.org> The CVS tag
+-for this release is "XORG-6_8_1". The tag for the maintenance branch for
++for this release is "XORG-6_8_2". The tag for the maintenance branch for
+ this release is "XORG-6_8-branch".
+
+-Another method of getting the X11R6.8.1 source is to either download the
+-6.8.1 source tarballs sites from freedesktop.org using either ftp or http.
++Another method of getting the X11R6.8.2 source is to either download the
++6.8.2 source tarballs sites from freedesktop.org using either ftp or http.
+ The procedure for this is as follows:
+
+- o The X11R6.8.1 source is contained in the files:
++ o The X11R6.8.2 source is contained in the files:
+
+- X11R6.8.1-src1.tar.gz
++ X11R6.8.2-src1.tar.gz
+
+- X11R6.8.1-src2.tar.gz
++ X11R6.8.2-src2.tar.gz
+
+- X11R6.8.1-src3.tar.gz
++ X11R6.8.2-src3.tar.gz
+
+- X11R6.8.1-src4.tar.gz
++ X11R6.8.2-src4.tar.gz
+
+- X11R6.8.1-src5.tar.gz
++ X11R6.8.2-src5.tar.gz
+
+- X11R6.8.1-src6.tar.gz
++ X11R6.8.2-src6.tar.gz
+
+- X11R6.8.1-src7.tar.gz
++ X11R6.8.2-src7.tar.gz
+
+- These can be found at ftp://ftp.freedesktop.org/xorg/X11R6.8.1/src/ or
+- http://freedesktop.org/~xorg/X11R6.8.1/src/ and similar locations on
+- X.org mirror sites. X11R6.8.1-src4.tgz and X11R6.8.1-src5.tar.gz con-
+- tains the fonts. X11R6.8.1-src6.tar.gz contains the documentation
+- source. X11R6.8.1-src7.tar.gz contains the hardcopy documentation.
+- X11R6.8.1-src1.tar.gz, X11R6.8.1-src2.tar.gz and X11R6.8.1-src3.tar.gz
++ These can be found at ftp://ftp.freedesktop.org/xorg/X11R6.8.2/src/ or
++ http://freedesktop.org/~xorg/X11R6.8.2/src/ and similar locations on
++ X.org mirror sites. X11R6.8.2-src4.tgz and X11R6.8.2-src5.tar.gz con-
++ tains the fonts. X11R6.8.2-src6.tar.gz contains the documentation
++ source. X11R6.8.2-src7.tar.gz contains the hardcopy documentation.
++ X11R6.8.2-src1.tar.gz, X11R6.8.2-src2.tar.gz and X11R6.8.2-src3.tar.gz
+ contains everything else. If you don't need the docs or fonts you can
+- get by with only X11R6.8.1-src1.tar.gz, X11R6.8.1-src2.tar.gz and
+- X11R6.8.1-src3.tar.gz.
++ get by with only X11R6.8.2-src1.tar.gz, X11R6.8.2-src2.tar.gz and
++ X11R6.8.2-src3.tar.gz.
+
+ o Extract each of these files by running the following from a directory on
+ a filesystem containing enough space (the full source requires around
+ 305MB, and a similar amount is required in addition to this for the com-
+ piled binaries):
+
+- gzip -d < X11R6.8.1-src1.tar.gz | tar vxf -
++ gzip -d < X11R6.8.2-src1.tar.gz | tar vxf -
+
+- gzip -d < X11R6.8.1-src2.tar.gz | tar vxf -
++ gzip -d < X11R6.8.2-src2.tar.gz | tar vxf -
+
+- gzip -d < X11R6.8.1-src3.tar.gz | tar vxf -
++ gzip -d < X11R6.8.2-src3.tar.gz | tar vxf -
+
+- gzip -d < X11R6.8.1-src4.tar.gz | tar vxf -
++ gzip -d < X11R6.8.2-src4.tar.gz | tar vxf -
+
+- gzip -d < X11R6.8.1-src5.tar.gz | tar vxf -
++ gzip -d < X11R6.8.2-src5.tar.gz | tar vxf -
+
+- gzip -d < X11R6.8.1-src6.tar.gz | tar vxf -
++ gzip -d < X11R6.8.2-src6.tar.gz | tar vxf -
+
+- gzip -d < X11R6.8.1-src7.tar.gz | tar vxf -
++ gzip -d < X11R6.8.2-src7.tar.gz | tar vxf -
+
+ All methods will produce one main source directory called xc.
+
+@@ -96,23 +96,23 @@
+ easy to create build problems by changing the default configuration. Check
+ the configuration parameters specified in the xc/config/cf/README.
+
+-If you are using just the X11R6.8.1-src1.tar.gz, X11R6.8.1-src2.tar.gz and
+-X11R6.8.1-src3.tar.gz parts of the source dist, you will need to define
++If you are using just the X11R6.8.2-src1.tar.gz, X11R6.8.2-src2.tar.gz and
++X11R6.8.2-src3.tar.gz parts of the source dist, you will need to define
+ BuildFonts to NO.
+
+ 3. Using a shadow directory of symbolic links for the build
+
+ A recommended practice is to use a shadow directory of symbolic links to do
+-the build of X11R6.8.1 as this allows you to keep the source directory unmod-
++the build of X11R6.8.2 as this allows you to keep the source directory unmod-
+ ified during the build. It has the following benefits:
+
+ o When you are using CVS to maintain your source tree, the update process
+ is not disturbed by foreign files not under CVS's control.
+
+- o It is possible to build X11R6.8.1 for several different Operating System
++ o It is possible to build X11R6.8.2 for several different Operating System
+ or architectures from the same sources, shared by read-only NFS mounts.
+
+- o It is possible to build X11R6.8.1 with different configuration options,
++ o It is possible to build X11R6.8.2 with different configuration options,
+ by putting a real copy of the host.def file in each build tree and by
+ customizing it separately in each build tree.
+
+@@ -135,7 +135,7 @@
+ See the lndir(1) manual page for details.
+
+ If lndir is not already installed on your system, you can build it manually
+-from the X11R6.8.1 sources by running the following commands:
++from the X11R6.8.2 sources by running the following commands:
+
+ cd xc/config/util
+
+@@ -158,7 +158,7 @@
+ addressed the OS-specific details, go your build directory (either the xc
+ directory or the shadow tree created before) and run "make World" with the
+ BOOTSTRAPCFLAGS set as described in the OS-specific README (if necessary, but
+-most systems supported by X11R6.8.1 don't need BOOTSTRAPCFLAGS). It is
++most systems supported by X11R6.8.2 don't need BOOTSTRAPCFLAGS). It is
+ advisable to redirect stdout and stderr to World.Log so that you can track
+ down problems that might occur during the build.
+
+@@ -197,7 +197,11 @@
+ To do the install, run "make install" and "make install.man". Make sure you
+ have enough space in /usr/X11R6 for the install to succeed. If you want to
+ install on a filesystem other than /usr, make a symbolic link to /usr/X11R6
+-before installing.
++before installing. To install the tree into a different directory than
++/usr/X11R6 you can specify DESTDIR:
++
++ make install DESTDIR=<install_target_dir> make install.man DEST-
++ DIR=<install_target_dir>
+
+ Cross compiling is supported if the appropriate config files for your target
+ platforms exist. You must have the compiler toolchain installed for your tar-
+@@ -231,7 +235,7 @@
+ 6. Other useful make targets
+
+ There are some other useful targets defined in the top level Makefile of
+-X11R6.8.1:
++X11R6.8.2:
+
+ o Everything after a make World, make Everything does everything a make
+ World does, except the cleaning of the tree. It is a way to quickly
+@@ -247,11 +251,11 @@
+ make depend
+ make
+
+- to rebuild the X11R6.8.1.
++ to rebuild the X11R6.8.2.
+
+ o distclean does a full cleaning of the source tree, removing all gener-
+ ated files. After a make distclean, make World is the only option to
+- rebuild X11R6.8.1.
++ rebuild X11R6.8.2.
+
+ o includes generates all generated header files and in-tree symbolic links
+ needed by the build. These files are removed by a make clean.
+@@ -268,4 +272,4 @@
+ $Id$
+
+
+-$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/BUILD,v 1.4.2.2 2004/09/17 15:38:18 kem Exp $
++$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/BUILD,v 1.4.2.3 2005/02/08 00:44:26 kem Exp $
+Index: xc/programs/Xserver/hw/xfree86/doc/DESIGN
+diff -u xc/programs/Xserver/hw/xfree86/doc/DESIGN:1.3.2.1 xc/programs/Xserver/hw/xfree86/doc/DESIGN:1.3.2.2
+--- xc/programs/Xserver/hw/xfree86/doc/DESIGN:1.3.2.1 Fri Sep 17 15:38:18 2004
++++ xc/programs/Xserver/hw/xfree86/doc/DESIGN Tue Feb 8 00:44:27 2005
+@@ -1,7 +1,7 @@
+ XFree86 server 4.x Design (DRAFT)
+
+ The XFree86 Project, Inc
+- Updates for X11R6.8.1 by Jim Gettys
++ Updates for X11R6.8.2 by Jim Gettys
+
+ 19 December 2003
+
+@@ -6370,4 +6370,4 @@
+ Generated from XFree86: xc/programs/Xserver/hw/xfree86/doc/sgml/DESIGN.sgml,v 1.53 dawes Exp $
+
+
+-$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/DESIGN,v 1.3.2.1 2004/09/17 15:38:18 kem Exp $
++$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/DESIGN,v 1.3.2.2 2005/02/08 00:44:27 kem Exp $
+Index: xc/programs/Xserver/hw/xfree86/doc/Install
+diff -u xc/programs/Xserver/hw/xfree86/doc/Install:1.3.2.1 xc/programs/Xserver/hw/xfree86/doc/Install:1.3.2.2
+--- xc/programs/Xserver/hw/xfree86/doc/Install:1.3.2.1 Fri Sep 17 15:38:18 2004
++++ xc/programs/Xserver/hw/xfree86/doc/Install Tue Feb 8 00:44:27 2005
+@@ -1,13 +1,13 @@
+- Installation Details for X11R6.8.1
++ Installation Details for X11R6.8.2
+
+ The X.Org Foundation
+
+- 17 September 2004
++ 9 February 2005
+
+ Abstract
+
+ How to install the X.Org Foundation's X Window System release ver-
+- sion X11R6.8.1.
++ sion X11R6.8.2.
+
+ 1. Introduction
+
+@@ -28,4 +28,4 @@
+ $Id$
+
+
+-$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/Install,v 1.3.2.1 2004/09/17 15:38:18 kem Exp $
++$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/Install,v 1.3.2.2 2005/02/08 00:44:27 kem Exp $
+Index: xc/programs/Xserver/hw/xfree86/doc/OS2.Notes
+diff -u xc/programs/Xserver/hw/xfree86/doc/OS2.Notes:1.3.2.1 xc/programs/Xserver/hw/xfree86/doc/OS2.Notes:1.3.2.2
+--- xc/programs/Xserver/hw/xfree86/doc/OS2.Notes:1.3.2.1 Fri Sep 17 15:38:18 2004
++++ xc/programs/Xserver/hw/xfree86/doc/OS2.Notes Tue Feb 8 00:44:27 2005
+@@ -1,4 +1,4 @@
+- Notes on Rebuilding X11R6.8.1/OS2 from Scratch
++ Notes on Rebuilding X11R6.8.2/OS2 from Scratch
+
+ Holger Veit
+
+@@ -16,11 +16,11 @@
+ Please also read README.OS2 for end-user information, and set at least the
+ environment variables described there.
+
+-At the current time, the most recent version available is X11R6.8.1 This is a
++At the current time, the most recent version available is X11R6.8.2 This is a
+ full and unrestricted version which comes with complete source code. 4.0 is a
+ highly experimental release, so many features that might have worked in ear-
+ lier versions, may now no longer work, or work differently. Be aware that
+-for OS/2, X11R6.8.1 is considered to be alpha software.
++for OS/2, X11R6.8.2 is considered to be alpha software.
+
+ 2. Tools required
+
+@@ -69,9 +69,9 @@
+ critical is only EMX/gcc and GNU make. Note that the second GCC implementa-
+ tion which might still be available from some archives is NOT compatible.
+
+-Furthermore, you need the X11R6.8.1 sources. These are available from the
++Furthermore, you need the X11R6.8.2 sources. These are available from the
+ common X.org repositories. Look into a directory which is often named
+-/pub/R6.8.1.
++/pub/R6.8.2.
+
+ 3. Compiling and Installing
+
+@@ -146,14 +146,14 @@
+ servers). Certain changes must be set to the following values:
+
+ o Disable if not already done any PC98 server; PC98 (Japanese
+- X11R6.8.1) does not work yet. Porters from Japan are welcome!
++ X11R6.8.2) does not work yet. Porters from Japan are welcome!
+
+ o #define WacomSupport NO #define ElographicsSupport
+ NO Both options are not yet supported.
+
+ o Tcl* and Tk* don't need to be set explicitly. Reasonable defaults
+ are in the other config files, provided you have a complete
+- X11R6.8.1/OS2 binary tree with the tcl/tk runtime support
++ X11R6.8.2/OS2 binary tree with the tcl/tk runtime support
+ installed.
+
+ o #define BuildDynamicLoading NO This does not work.
+@@ -167,7 +167,7 @@
+
+ 9. Set the environment variable X11ROOT to something different than it is;
+ otherwise the installation process will overwrite your original
+- X11R6.8.1/OS2 installation. If you have not set this variable, go back
++ X11R6.8.2/OS2 installation. If you have not set this variable, go back
+ to the prefix section of this document: you have forgotten something.
+
+ 10. Copy the file xc/pro-
+@@ -202,13 +202,13 @@
+ lation. This is no problem and has no effect on the rest of the
+ system.
+
+- 2. The imake.exe which is installed in \X11R6.8.1\bin is usually
++ 2. The imake.exe which is installed in \X11R6.8.2\bin is usually
+ defective. The one which was built initially and installed in
+ the root directory of the drive where you have the source tree is
+- okay. So simply copy this \imake.exe to the \X11R6.8.1\bin direc-
++ okay. So simply copy this \imake.exe to the \X11R6.8.2\bin direc-
+ tory manually. Some day this might be fixed.
+
+ Well, you see, this was quite easy :-)
+
+
+-$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/OS2.Notes,v 1.3.2.1 2004/09/17 15:38:18 kem Exp $
++$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/OS2.Notes,v 1.3.2.2 2005/02/08 00:44:27 kem Exp $
+Index: xc/programs/Xserver/hw/xfree86/doc/README
+diff -u xc/programs/Xserver/hw/xfree86/doc/README:1.3.2.2 xc/programs/Xserver/hw/xfree86/doc/README:1.3.2.4
+--- xc/programs/Xserver/hw/xfree86/doc/README:1.3.2.2 Fri Sep 17 15:38:18 2004
++++ xc/programs/Xserver/hw/xfree86/doc/README Tue Feb 8 23:54:04 2005
+@@ -1,29 +1,29 @@
+- README for X11R6.8.1
++ README for X11R6.8.2
+
+ The X.Org Foundation
+
+- 17 September 2004
++ 9 February 2005
+
+ Abstract
+
+- X11R6.8.1 is an Open Source version of the X Window System that
++ X11R6.8.2 is an Open Source version of the X Window System that
+ supports many UNIX(R) and UNIX-like operating systems (such as
+ Linux, FreeBSD, NetBSD, OpenBSD and Solaris x86) on Intel and other
+- platforms. This version is compatible with X11R6.8 and other X
++ platforms. This version is compatible with X11R6.8.1 and other X
+ window system implementations which support the X11R6 standard.
+
+-1. What is X11R6.8.1?
++1. What is X11R6.8.2?
+
+-X11R6.8.1 is the eighth full release in the X11R6 series.
++X11R6.8.2 is the eighth full release in the X11R6 series.
+
+-X11R6.8.1 is the current X.Org Foundation release series. The core of
+-X11R6.8.1 is a modular X server. The 6.8.1 version is a new release that
++X11R6.8.2 is the current X.Org Foundation release series. The core of
++X11R6.8.2 is a modular X server. The 6.8.2 version is a new release that
+ includes additional hardware support, functional enhancements and bug fixes.
+ Specific release enhancements can be viewed in the Release Notes.
+
+-Most modern PC video hardware is supported in X11R6.8.1, and most PC video
++Most modern PC video hardware is supported in X11R6.8.2, and most PC video
+ hardware that isn't supported explicitly can be used with the "vesa" driver.
+-The Release Notes has a table showing the drivers provided with X11R6.8.1,
++The Release Notes has a table showing the drivers provided with X11R6.8.2,
+ and links to related documentation.
+
+ The X.Org Foundation X releases are produced by the X.Org Foundation. The
+@@ -34,8 +34,8 @@
+ is free to all participants. Applications for Membership are now being
+ accepted, and active participants in the further development of the X Window
+ Technology are invited to complete a membership application
+-<URL:http://www.x.org/XOrg_Foundation_Membership.html>. The X11R6.8.1 code-
+-base forms the second X window system release since the formation of the
++<URL:http://www.x.org/XOrg_Foundation_Membership.html>. The X11R6.8.2 code-
++base forms the fourth X window system release since the formation of the
+ X.org foundataion and includes code from the X Consortium, the Open Group and
+ the XFree86[tm] project. This release is dedicated to the greater X commu-
+ nity, developers and users alike.
+@@ -96,38 +96,38 @@
+ <URL:http://bugzilla.freedesktop.org/> using the xorg component. This will
+ ensure that they are included in future releases.
+
+-6. How to get X11R6.8.1
++6. How to get X11R6.8.2
+
+-X11R6.8.1 can be found from the X.Org Foundation wiki at
++X11R6.8.2 can be found from the X.Org Foundation wiki at
+ <URL:http://wiki.x.org>, and at mirrors of this server. Information about
+ obtaining and installing binary distributions of this release can be found in
+ the Installation Document. Information about obtaining the release in source
+ form is given below.
+
+-The source for version 6.8.1 is split into seven tarballs:
++The source for version 6.8.2 is split into seven tarballs:
+
+- X11R6.8.1-src1.tar.gz
+- X11R6.8.1-src2.tar.gz
+- X11R6.8.1-src3.tar.gz
+- X11R6.8.1-src4.tar.gz
+- X11R6.8.1-src5.tar.gz
+- X11R6.8.1-src6.tar.gz
+- X11R6.8.1-src7.tar.gz
++ X11R6.8.2-src1.tar.gz
++ X11R6.8.2-src2.tar.gz
++ X11R6.8.2-src3.tar.gz
++ X11R6.8.2-src4.tar.gz
++ X11R6.8.2-src5.tar.gz
++ X11R6.8.2-src6.tar.gz
++ X11R6.8.2-src7.tar.gz
+
+ The first three contain everything except the fonts and general X11 documen-
+-tation. Those three are sufficient for building X11R6.8.1 if you already
++tation. Those three are sufficient for building X11R6.8.2 if you already
+ have a set of fonts. The fourth and fifth contain the fonts. The sixth con-
+ tains the source for the general X11 documentation. The seventh contains the
+ general X11 documentation in hardcopy format.
+
+-To format the X11R6.8.1 documentation use the latest version of our doctools
++To format the X11R6.8.2 documentation use the latest version of our doctools
+ package available from the Xorg CVS repository's "doctools" module.
+
+ The X source code for this and all releases/snapshots as well as development
+ versions can also be accessed via the Freedesktop.org CVS repository. It's
+ also possible to browse the freedesktop CVS repository
+ <URL:http://cvs.freedesktop.org/>. The CVS tag for this version is
+-"XORG-6_8_1". The CVS tag for the stable branch for this release is
++"XORG-6_8_2". The CVS tag for the stable branch for this release is
+ "XORG-6_8-branch". To check out the latest development version, don't spec-
+ ify any tag.
+
+@@ -144,4 +144,4 @@
+ $Id$.
+
+
+-$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README,v 1.3.2.2 2004/09/17 15:38:18 kem Exp $
++$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README,v 1.3.2.4 2005/02/08 23:54:04 kem Exp $
+Index: xc/programs/Xserver/hw/xfree86/doc/README.DECtga
+diff -u xc/programs/Xserver/hw/xfree86/doc/README.DECtga:1.3.2.1 xc/programs/Xserver/hw/xfree86/doc/README.DECtga:1.3.2.2
+--- xc/programs/Xserver/hw/xfree86/doc/README.DECtga:1.3.2.1 Fri Sep 17 15:38:18 2004
++++ xc/programs/Xserver/hw/xfree86/doc/README.DECtga Tue Feb 8 00:44:27 2005
+@@ -1,13 +1,13 @@
+ Information for DEC 21030 Users (aka TGA)
+
+ The XFree86 Project, Inc.
+- Updates for X11R6.8.1 by Jim Gettys
++ Updates for X11R6.8.2 by Jim Gettys
+
+ March 25th, 2004
+
+ 1. DEC 21030
+
+- o The DEC 21030 is supported by X11R6.8.1. The driver is now partially
++ o The DEC 21030 is supported by X11R6.8.2. The driver is now partially
+ accelerated. The built-in graphics on the Multia is supported in
+ 8-plane mode, and PCI cards with 8 or 16 MB framebuffers are supported
+ in 24-plane mode. TGA2 (aka PowerStorm 3D30/4D20) cards are not cur-
+@@ -64,4 +64,4 @@
+ o Tim Rowley, <tor@cs.brown.edu>
+
+
+-$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.DECtga,v 1.3.2.1 2004/09/17 15:38:18 kem Exp $
++$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.DECtga,v 1.3.2.2 2005/02/08 00:44:27 kem Exp $
+Index: xc/programs/Xserver/hw/xfree86/doc/README.Darwin
+diff -u xc/programs/Xserver/hw/xfree86/doc/README.Darwin:1.3.2.1 xc/programs/Xserver/hw/xfree86/doc/README.Darwin:1.3.2.2
+--- xc/programs/Xserver/hw/xfree86/doc/README.Darwin:1.3.2.1 Fri Sep 17 15:38:18 2004
++++ xc/programs/Xserver/hw/xfree86/doc/README.Darwin Tue Feb 8 00:44:27 2005
+@@ -37,16 +37,16 @@
+ other windows. The X11 root window is not displayed in rootless mode as Aqua
+ handles the desktop background.
+
+-From the console, the Darwin port of X11R6.8.1 uses the IOKit for device
+-driver loading and discovery, rather than the X11R6.8.1 module loader.
+-Because of this, the X11R6.8.1 configuration file is not used on Darwin or
++From the console, the Darwin port of X11R6.8.2 uses the IOKit for device
++driver loading and discovery, rather than the X11R6.8.2 module loader.
++Because of this, the X11R6.8.2 configuration file is not used on Darwin or
+ Mac OS X systems. The descriptions found elsewhere of devices supported by
+-X11R6.8.1 for other operating systems also do not apply.
++X11R6.8.2 for other operating systems also do not apply.
+
+-X11R6.8.1 for Darwin or Mac OS X will work with any video card that you have
++X11R6.8.2 for Darwin or Mac OS X will work with any video card that you have
+ an IOKit driver for. If you are running Mac OS X, this typically means any
+ card that has been shipped by Apple. If a card works for you with the Mac
+-OS X GUI, it will work on the same machine with X11R6.8.1. If you have a pure
++OS X GUI, it will work on the same machine with X11R6.8.2. If you have a pure
+ Darwin installation, you may need to download additional third-party drivers
+ from Apple's Darwin site. IOKit drivers are typically installed in /Sys-
+ tem/Library/Extensions/ or /Library/Extensions/.
+@@ -58,9 +58,9 @@
+ 3. Getting Started
+
+ Following are instructions for building and running your own copy of
+-X11R6.8.1. The procedure for getting your X server up and running on Darwin
++X11R6.8.2. The procedure for getting your X server up and running on Darwin
+ and Mac OS X are very similar. Where there are differences I have noted them
+-below. Note that to build X11R6.8.1 for yourself on Mac OS X, you need to
++below. Note that to build X11R6.8.2 for yourself on Mac OS X, you need to
+ install the Developers' Tools.
+
+ /Applications.
+@@ -93,9 +93,9 @@
+
+ Wait for all the files to complete downloading.
+
+-3.2 Build X11R6.8.1
++3.2 Build X11R6.8.2
+
+-Once you have everything ready it is easy to build and install X11R6.8.1.
++Once you have everything ready it is easy to build and install X11R6.8.2.
+ From the command line:
+
+ cd sandbox/xc
+@@ -126,20 +126,20 @@
+ specified in the preferences.) The way to set the path depends on the shell
+ you are using. This is described in the man page documentation for the shell.
+
+-In addition you may also want to add the man pages from X11R6.8.1 to the list
++In addition you may also want to add the man pages from X11R6.8.2 to the list
+ of pages to be searched when you are looking for documentation. The X11 man
+ pages are located in /usr/X11R6/man and the MANPATH environment variable con-
+ tains the list of directories to search.
+
+ 4.2 Starting the X Server
+
+-On Mac OS X, you can run X11R6.8.1 from the Darwin text console or in paral-
++On Mac OS X, you can run X11R6.8.2 from the Darwin text console or in paral-
+ lel with Aqua. To get to the text console in Mac OS X you need to logout and
+ type ``>console'' as the user name. This will shutdown Core Graphics and
+ bring up the console login prompt. Login again as your user. From the text
+ console you can start the X Window System by typing ``exec startx''.
+
+-When you are ready to quit X11R6.8.1 type ``exit'' in the main terminal win-
++When you are ready to quit X11R6.8.2 type ``exit'' in the main terminal win-
+ dow or quit with the window manager if you have one running. Unfortunately in
+ IOKit mode, the X server does not shutdown correctly and if you did not start
+ with ``exec startx'', you will get an apparently frozen screen with only a
+@@ -149,7 +149,7 @@
+ at the text console login prompt. With Mac OS X, Core Graphics will restart
+ and you should be given a login window.
+
+-To start X11R6.8.1 in Quartz mode you can launch the XDarwin application in
++To start X11R6.8.2 in Quartz mode you can launch the XDarwin application in
+ the /Applications folder, or from the command line type ``startx --
+ -quartz''. By default this will give you a mode picker to choose between full
+ screen or rootless mode. You can change the default to always use a particu-
+@@ -182,7 +182,7 @@
+ The X Window System is very customizable and you will certainly want to
+ change some things. There is a lot you can do to control how your windows
+ look, how the windows are moved, resized, etc. You will likely want to get a
+-fancier window manager than twm, which is included with X11R6.8.1. The .xini-
++fancier window manager than twm, which is included with X11R6.8.2. The .xini-
+ trc file in your home directory controls what programs are run when you start
+ the X Window System. You can find a sample .xinitrc file in
+ /etc/X11/xinit/xinitrc.
+@@ -204,4 +204,4 @@
+ Generated from XdotOrg: xc/programs/Xserver/hw/xfree86/doc/sgml/Darwin.sgml,v 1.2 eich Exp $
+
+
+-$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.Darwin,v 1.3.2.1 2004/09/17 15:38:18 kem Exp $
++$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.Darwin,v 1.3.2.2 2005/02/08 00:44:27 kem Exp $
+Index: xc/programs/Xserver/hw/xfree86/doc/README.I128
+diff -u xc/programs/Xserver/hw/xfree86/doc/README.I128:1.3 xc/programs/Xserver/hw/xfree86/doc/README.I128:1.3.2.1
+--- xc/programs/Xserver/hw/xfree86/doc/README.I128:1.3 Fri Sep 3 23:41:21 2004
++++ xc/programs/Xserver/hw/xfree86/doc/README.I128 Tue Feb 8 00:44:27 2005
+@@ -40,8 +40,8 @@
+ file. When running the xorgcfg or xorgconfig programs one merely needs to
+ select an I128 card so that the correct server will be used. One need not
+ and should not specify a RAMDAC, clockchip or allow the setup program to
+-probe for clocks. The driver will auto-detect the amount of video ram pre-
+-sent.
++probe for clocks. The driver will auto-detect the amount of video ram
++present.
+
+ The following Section "Device" options are supported by the I128 driver:
+
+@@ -98,4 +98,4 @@
+ o Galen Brooks, <galen@interlabs.com>
+
+
+-$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.I128,v 1.3 2004/09/03 23:41:21 kem Exp $
++$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.I128,v 1.3.2.1 2005/02/08 00:44:27 kem Exp $
+Index: xc/programs/Xserver/hw/xfree86/doc/README.LynxOS
+diff -u xc/programs/Xserver/hw/xfree86/doc/README.LynxOS:1.3.2.1 xc/programs/Xserver/hw/xfree86/doc/README.LynxOS:1.3.2.2
+--- xc/programs/Xserver/hw/xfree86/doc/README.LynxOS:1.3.2.1 Fri Sep 17 15:38:18 2004
++++ xc/programs/Xserver/hw/xfree86/doc/README.LynxOS Tue Feb 8 00:44:27 2005
+@@ -1,54 +1,54 @@
+- README for X11R6.8.1 on LynxOS
++ README for X11R6.8.2 on LynxOS
+
+ Thomas Mueller
+
+ 25 August 2004
+
+-1. What and Where is X11R6.8.1?
++1. What and Where is X11R6.8.2?
+
+-X11R6.8.1 is a port of X11R6.4 that supports several versions of Intel-based
++X11R6.8.2 is a port of X11R6.4 that supports several versions of Intel-based
+ Unix. It is derived from XFree86 4.4 rc2 which was derived from X386 1.2,
+ which was the X server distributed with X11R5. This release consists of many
+ new features and performance improvements as well as many bug fixes.
+
+ See the Copyright Notice.
+
+-Building of this X11R6.8.1 version has been tested on `LynxOS 3.1.0a i386'
++Building of this X11R6.8.2 version has been tested on `LynxOS 3.1.0a i386'
+ and `LynxOS 4.0.0 i386'.
+
+-Previous releases of X11R6.8.1 supported LynxOS on the x86 and on the PowerPC
++Previous releases of X11R6.8.2 supported LynxOS on the x86 and on the PowerPC
+ platform. Building on PowerPC platforms has not been tested recently.
+
+-2. Installing X11R6.8.1
++2. Installing X11R6.8.2
+
+ Please refer to the Installation Document for detailed installation instruc-
+ tions.
+
+ It may be necessary to increase the process stack limit in order to build
+-X11R6.8.1 and run X11R6.8.1 on your system. Edit /etc/startab and reboot your
++X11R6.8.2 and run X11R6.8.2 on your system. Edit /etc/startab and reboot your
+ system to make the changes active before you begin the installation.
+
+ Also, be sure to include /usr/X11R6/bin in your PATH environment variable.
+
+-Refer to the next section Running X11R6.8.1 (section 3., page 1) for further
+-information on necessary configuration steps before running X11R6.8.1 on
++Refer to the next section Running X11R6.8.2 (section 3., page 1) for further
++information on necessary configuration steps before running X11R6.8.2 on
+ LynxOS.
+
+-2.1 Accessing X11R6.8.1 manual pages
++2.1 Accessing X11R6.8.2 manual pages
+
+ Include /usr/X11R6/man in the MANPATH environment variable or add the direc-
+ tory /usr/X11R6/man to /usr/Lib/man.config
+
+-3. Running X11R6.8.1
++3. Running X11R6.8.2
+
+ This section describes the changes to the LynxOS environment which may be
+-necessary to successfully run X11R6.8.1.
++necessary to successfully run X11R6.8.2.
+
+ 3.1 System tuning
+
+ 3.1.1 Tunable parameters
+
+-To reasonably run X11R6.8.1 you may have to adjust a few system parameters.
++To reasonably run X11R6.8.2 you may have to adjust a few system parameters.
+
+ On LynxOS 3.1.0 and 4.0.0 include a line
+
+@@ -71,7 +71,7 @@
+
+ If you're using an Intel PentiumPRO or Pentium II (or higher) class CPU you
+ might want to install the MTRR device driver. This driver enables the
+-X11R6.8.1 X server to manipulate the CPU memory type range registers which
++X11R6.8.2 X server to manipulate the CPU memory type range registers which
+ may improve performance on certain systems.
+
+ To install the driver follow these steps:
+@@ -96,10 +96,10 @@
+ # make install
+ # reboot -N
+
+-3.2 Mouse support in X11R6.8.1
++3.2 Mouse support in X11R6.8.2
+
+-X11R6.8.1 includes support for PnP mice (see also Mouse Support in
+-X11R6.8.1). The current LynxOS TTY device driver doesn't allow the necessary
++X11R6.8.2 includes support for PnP mice (see also Mouse Support in
++X11R6.8.2). The current LynxOS TTY device driver doesn't allow the necessary
+ manipulation of the RTS line and therefore the support for PnP mice has been
+ disabled for LynxOS.
+
+@@ -152,29 +152,29 @@
+
+ 3.5 X Server debug diagnostics output and other VT peculiarities
+
+-Output made by the X11R6.8.1 X on its stdout or stderr will be lost after the
+-server switches to graphics mode. The X11R6.8.1 server stores its output in
++Output made by the X11R6.8.2 X on its stdout or stderr will be lost after the
++server switches to graphics mode. The X11R6.8.2 server stores its output in
+ /usr/adm/Xorg.n.log (where n is the screen number).
+
+ When the X server is running output made to other consoles will be lost.
+ After server shutdown the screen contents of other consoles may be inconsis-
+ tent with what one would expect (i.e. random).
+
+-4. Compiling the X11R6.8.1 Distribution
++4. Compiling the X11R6.8.2 Distribution
+
+ The next sections contain LynxOS specific notes with respect to the build
+ process.
+
+ 4.1 Disk space requirements
+
+-Currently there is no support for shared libraries in the LynxOS X11R6.8.1
++Currently there is no support for shared libraries in the LynxOS X11R6.8.2
+ port. A complete binary installation along with manual pages will require
+ approximately 250 MBytes of disk space. To compile the system you will need
+ at least 350 MBytes of free disk space.
+
+ 4.2 Changes to system environment (LynxOS x86)
+
+-Before compiling the X11R6.8.1 distribution you will have to make a few lit-
++Before compiling the X11R6.8.2 distribution you will have to make a few lit-
+ tle adjustments to your system:
+
+ o If not already installed, on your `LynxOS 3.1.0a' system create a shell
+@@ -218,24 +218,24 @@
+
+ make World
+
+-to compile X11R6.8.1. After some time (and hopefully a successful build of
+-the X11R6.8.1 system) you can install the software using
++to compile X11R6.8.2. After some time (and hopefully a successful build of
++the X11R6.8.2 system) you can install the software using
+
+ make install
+
+ You must be logged in as super-user (root) when you invoke `make install'.
+
+-4.4 Installing X11R6.8.1 manual pages
++4.4 Installing X11R6.8.2 manual pages
+
+ LynxOS uses cat-able manual pages, and because a doc preparation system is
+ definitely not a vital component of a real-time operating system you must
+ first install groff-1.09 (or newer).
+
+-X11R6.8.1 manual pages may be installed using
++X11R6.8.2 manual pages may be installed using
+
+ make install.man
+
+-The index and whatis database for the X11R6.8.1 manual pages will be created
++The index and whatis database for the X11R6.8.2 manual pages will be created
+ automatically. If you already have a whatis database or index file in the
+ destination directories you should perform a sort/uniq operation to remove
+ duplicate entries:
+@@ -250,4 +250,4 @@
+ mv /tmp/tmpfile /usr/X11R6/man/whatis
+
+
+-$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.LynxOS,v 1.3.2.1 2004/09/17 15:38:18 kem Exp $
++$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.LynxOS,v 1.3.2.2 2005/02/08 00:44:27 kem Exp $
+Index: xc/programs/Xserver/hw/xfree86/doc/README.NetBSD
+diff -u xc/programs/Xserver/hw/xfree86/doc/README.NetBSD:1.3.2.1 xc/programs/Xserver/hw/xfree86/doc/README.NetBSD:1.3.2.2
+--- xc/programs/Xserver/hw/xfree86/doc/README.NetBSD:1.3.2.1 Fri Sep 17 15:38:19 2004
++++ xc/programs/Xserver/hw/xfree86/doc/README.NetBSD Tue Feb 8 00:44:27 2005
+@@ -1,10 +1,10 @@
+- README for X11R6.8.1 on NetBSD
++ README for X11R6.8.2 on NetBSD
+
+ Rich Murphey, David Dawes, Marc Wandschneider, Mark Weaver, Matthieu Herrb
+
+-1. What and Where is X11R6.8.1?
++1. What and Where is X11R6.8.2?
+
+-X11R6.8.1 is an Open Source version of the X Window System that supports sev-
++X11R6.8.2 is an Open Source version of the X Window System that supports sev-
+ eral UNIX(R) and UNIX-like operating systems (such as Linux, the BSDs and
+ Solaris x86) on Intel and other platforms. This version is compatible with
+ X11R6.6, and is based on the XFree86 4.4.0RC2 code base, which, in turn was
+@@ -12,16 +12,16 @@
+
+ See the Copyright Notice.
+
+-The sources for X11R6.8.1 are available from:
++The sources for X11R6.8.2 are available from:
+
+ http://wiki.x.org
+
+-X11R6.8.1 also builds on other NetBSD architectures. See section Building on
++X11R6.8.2 also builds on other NetBSD architectures. See section Building on
+ other architectures (section 7.4, page 1) for details.
+
+ 2. New OS dependent features
+
+-See the Release Notes for non-OS dependent new features in X11R6.8.1.
++See the Release Notes for non-OS dependent new features in X11R6.8.2.
+
+ 2.1 New OS dependent features in 4.2.0
+
+@@ -94,7 +94,7 @@
+
+ 4.1 About mouse configuration
+
+-X11R6.8.1 has support for the mouse driver included in the wscons console
++X11R6.8.2 has support for the mouse driver included in the wscons console
+ driver introduced by NetBSD 1.4. Specify ``wsmouse'' as the protocol and
+ ``/dev/wsmouse0'' as the device in /etc/X11/xorg.conf if you're using NetBSD
+ 1.4 or later with a PS/2 mouse.
+@@ -210,14 +210,14 @@
+ X servers can take advantage (or require) linear access to the display mem-
+ ory.
+
+-Most X11R6.8.1 card drivers require linear memory access. There are two ways
++Most X11R6.8.2 card drivers require linear memory access. There are two ways
+ to allow X to access linear memory:
+
+ The first way is to disable the kernel security feature by adding ``option
+ INSECURE'' in the kernel configuration file and build a new kernel.
+
+ The second way is to install the aperture driver, included in source form in
+-xc/programs/Xserver/hw/xfree86/etc/apNetBSD.shar in the X11R6.8.1 source dis-
++xc/programs/Xserver/hw/xfree86/etc/apNetBSD.shar in the X11R6.8.2 source dis-
+ tribution. Unpack it in a new directory of your choice by running:
+
+ sh apNetBSD.shar
+@@ -359,4 +359,4 @@
+ vatzis, Jack Velte, Nate Williams and Pace Willison.
+
+
+-$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.NetBSD,v 1.3.2.1 2004/09/17 15:38:19 kem Exp $
++$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.NetBSD,v 1.3.2.2 2005/02/08 00:44:27 kem Exp $
+Index: xc/programs/Xserver/hw/xfree86/doc/README.OpenBSD
+diff -u xc/programs/Xserver/hw/xfree86/doc/README.OpenBSD:1.3.2.1 xc/programs/Xserver/hw/xfree86/doc/README.OpenBSD:1.3.2.2
+--- xc/programs/Xserver/hw/xfree86/doc/README.OpenBSD:1.3.2.1 Fri Sep 17 15:38:19 2004
++++ xc/programs/Xserver/hw/xfree86/doc/README.OpenBSD Tue Feb 8 00:44:27 2005
+@@ -1,119 +1,40 @@
+- README for X11R6.8.1 on OpenBSD
++ README for X11R6.8.2 on OpenBSD
+
+ Matthieu Herrb
+
+- Last modified on: 9 December 2003; updated 25 March 2004 by Jim Gettys for
+- X11R6.8.1
++ Last modified on: 4 February 2005.
+
+-1. What and Where is X11R6.8.1?
++1. What and Where is X11R6.8.2?
+
+-The X.org Foundation X11R6.8.1 is an Open Source version of the X Window Sys-
++The X.org Foundation X11R6.8.2 is an Open Source version of the X Window Sys-
+ tem that supports several UNIX(R) and UNIX-like operating systems (such as
+ Linux, the BSDs and Solaris x86) on Intel and other platforms.
+
+ See the Copyright Notice.
+
+-The sources for X11R6.8.1 are available from
++The sources for X11R6.8.2 are available from http://wiki.x.org
+
+-http://wiki.x.org
+-
+-X11R6.8.1 also builds on other OpenBSD architectures. See section Building on
+-other architectures (section 8., page 1) for details.
++X11R6.8.2 builds on most architectures supported by OpenBSD. See section
++Building on other architectures (section 7., page 1) for details.
+
+ 2. Bug Reports for This Document
+
+-Use the X.org Bugzilla at urlnam <URL:http://bugzilla.freedesktop.org> to
+-submit comments or suggestions about this file, using the xorg product.
++Use the X.org Bugzilla at http://bugs.freedesktop.org to submit comments or
++suggestions about this file, using the xorg product.
+
+ 3. New OS dependent features
+
+-See the Release Notes for non-OS dependent new features in X11R6.8.1.
+-
+-3.1 New OS related features
+-
+- o The IPv6 support is enabled on OpenBSD, but XDMCP over IPv6 is not cur-
+- rently enabled since the code uses IPv6 mapped IPv4 addresses which are
+- not supported on OpenBSD.
+-
+- o The userland part of DRI is enabled and built. Now waiting for someone
+- to port the kernel modules...
+-
+- o All major revisions of the shared libraries are incremented on OpenBSD
+- 3.3 and later, to support the API changes introduced by gcc stack pro-
+- tector.
+-
+-3.2 New OS related features in 4.3
+-
+- o Support for some VGA cards on OpenBSD/alpha
+-
+-3.3 New OS dependent features in 4.2
+-
+- o Support for OpenBSD/macppc on the ATI Rage128 based Power Macintoshes.
+-
+- o Support for building clients on OpenBSD/sparc64.
+-
+-3.4 New OS dependent features in 4.0.3
+-
+- o Support for the wscons console driver in post 2.8 OpenBSD.
+-
+- o A fix for multi-threaded libraries support.
+-
+-3.5 New OS dependent features in 4.0.2
+-
+- o Support for the OpenBSD ports tree,
+-
+- o Preliminary support for the macppc architecture (clients build and work,
+- the server doesn't work yet),
+-
+- o xdm now writes an utmp entry,
+-
+- o startx now creates an Xauthority magic cookie for the display.
+-
+-3.6 New OS dependent features in 4.0.1
+-
+- o Several features from the OpenBSD X11 tree were merged into xdm:
++See the Release Notes for non-OS dependent new features in X11R6.8.2.
+
+- o support for Kerberos IV authentication
++ o Switch the the Xinput-aware kbd driver for keyboard input
+
+- o use the arc4random(4) random number generator
++3.1 New OS related features in X.Org 6.8
+
+- o add a new resource "allowRootLogin", which can be used to disable
+- root logins through xdm
++ o Support for Propolice in modules.
+
+- o log failed logins to syslogd
++ o Server support for OpenBSD/amd64.
+
+- o verify that the shell is valid using /etc/shell
+-
+- o verify that the account hasn't expired
+-
+- o The Xsun server can be built again on OpenBSD/sparc.
+-
+-3.7 New OS dependent features in 4.0
+-
+- o Multi-thread safe libraries are built by default on OpenBSD 2.6 and
+- later,
+-
+- o Preliminary APM support.
+-
+-3.8 New OS dependent features in 3.9.18
+-
+- o Support for USB mices has been added on OpenBSD.
+-
+- o Soft-booting secondary cards through the int10 BIOS interface is now
+- possible using the x86emu real mode emulator.
+-
+-3.9 New OS dependent features in 3.9.17
+-
+- o Silken mouse is supported for serial mices, and, under post 2.6 OpenBSD-
+- current for PS/2 mices.
+-
+- o MTRR Write Combining is enabled under post 2.6 OpenBSD-current.
+-
+-4. Installing the Binaries
+-
+-Refer to the Installation Document for detailed installation instructions.
+-
+-5. Configuring X for Your Hardware
++4. Configuring X for Your Hardware
+
+ The /etc/X11/xorg.conf file tells the X server what kind of monitor, video
+ card and mouse you have. You must create it to tell the server what specific
+@@ -123,7 +44,7 @@
+
+ o Your mouse type, baud rate and its /dev entry.
+
+- o The video card's chipset (e.g. ET4000, S3, etc).
++ o The video card's chipset (e.g. ATI Radeon, nVidia GeForce 4/MX etc).
+
+ o Your monitor's sync frequencies.
+
+@@ -138,33 +59,28 @@
+ Once you've set up a xorg.conf file, you can fine tune the video modes with
+ the xvidtune utility.
+
+-5.1 About mouse configuration
++4.1 About mouse configuration
+
+-X11R6.8.1 has support for the mouse driver included in the new wscons console
+-driver introduced by OpenBSD-2.9. Specify ``wsmouse'' as the protocol and
+-``/dev/wsmouse0'' as the device in /etc/X11/xorg.conf if you're using
+-OpenBSD-2.9 or later with a PS/2 or USB mouse.
++X11R6.8.2 has support for the mouse driver included in the new wscons console
++driver. Specify ``wsmouse'' as the protocol and ``/dev/wsmouse'' as the
++device in /etc/X11/xorg.conf with a PS/2 or USB mouse.
+
+ See README.mouse for general instruction on mouse configuration.
+
+-6. Running X
++5. Running X
+
+-6.1 Starting xdm, the display manager
++5.1 Starting xdm, the display manager
+
+ To start the display manager, log in as root on the console and type: ``xdm
+ -nodaemon''.
+
+-You can start xdm automatically on bootup by changing the line
+-
+- xdm_flags=NO # for normal use: xdm_flags=""
+-
+-to:
++You can start xdm automatically on bootup by adding the line:
+
+ xdm_flags="" # for normal use: xdm_flags=""
+
+-in /etc/rc.conf.
++in /etc/rc.conf.local.
+
+-6.2 Running X without the display manager
++5.2 Running X without the display manager
+
+ The easiest way for new users to start X windows is to type: ``startx >&
+ startx.log''. Error messages are lost unless you redirect them because the
+@@ -174,21 +90,15 @@
+ tomize your X by creating .xinitrc, .xserverrc, and .twmrc files in your home
+ directory as described in the xinit and startx man pages.
+
+-7. Kernel Support for X
+-
+-To make sure X support is enabled under OpenBSD, the following line must be
+-in your config file in /sys/arch/i386/conf:
++6. Kernel Support for X
+
+- option APERTURE
++OpenBSD's GENERIC kernels have all support for running X enabled.
+
+-7.1 Console drivers
++6.1 Console drivers
+
+ The server supports wscons, the standard OpenBSD/i386 console driver.
+
+-The pcvt console driver which was the default up to OpenBSD 2.8, is also sup-
+-ported on those releases.
+-
+-7.2 Aperture Driver
++6.2 Aperture Driver
+
+ By default OpenBSD includes the BSD 4.4 kernel security feature that disables
+ access to the /dev/mem device when in multi-user mode. But the X server
+@@ -214,12 +124,12 @@
+ terminals, only the first one will have linear memory access. Set
+ securelevel to -1 if you need more that one X server at a time.
+
+-7.3 MIT-SHM
++6.3 MIT-SHM
+
+ OpenBSD supports System V shared memory. If X detects this support in your
+ kernel, it will support the MIT-SHM extension.
+
+-8. Rebuilding the X Distribution
++7. Rebuilding the X Distribution
+
+ You should configure the distribution by editing xc/config/cf/host.def
+ before compiling. To compile the sources, invoke ``make World'' in the xc
+@@ -230,9 +140,11 @@
+ OpenBSD XF4 source tree is available by anoncvs from all OpenBSD anoncvs
+ servers. See http://www.openbsd.org/anoncvs.html for details on anoncvs.
+
+-X11R6.8.1 also compiles on other OpenBSD architectures.
++X11R6.8.2 compiles on most OpenBSD architectures. The X.Org X server builds
++and run on the following systems. On other architectures supported by
++OpenBSD, only client side libraries and applications are supported.
+
+-8.1 X11R6.8.1 on OpenBSD/alpha
++7.1 OpenBSD/alpha
+
+ The X server is known to work on some VGA cards in alpha machines that sup-
+ port BWX I/O, with OpenBSD 3.2 and higher.
+@@ -253,11 +165,10 @@
+ OpenBSD 3.1 and higher includes an OS-specific driver wsfb that is used to
+ support TGA cards.
+
+-8.2 X11R6.8.1 on OpenBSD/macppc
++7.2 OpenBSD/macppc
+
+-The X server is currently known to work on the G4 Macs and new iBooks with
+-ATI Rage 128 cards running OpenBSD 3.0 or later. Other machines are more or
+-less untested. Earlier OpenBSD versions lack some kernel support for it.
++The X server is currently known to work on most of the G4 Macs and iBooks
++with ATI or nVidia cards. Other machines are more or less untested.
+
+ Use xorgconfig to build a /etc/X11/xorg.conf file before starting the server
+ for the first time.
+@@ -267,32 +178,24 @@
+
+ Modeline "1152x768" 64.995 1152 1213 1349 1472 768 771 777 806 -HSync -VSync
+
+-8.3 OpenBSD/sparc
++7.3 OpenBSD/sparc
+
+ OpenBSD 3.2 on sparc switched to the wscons device driver and now uses the OS
+ specific wsfb driver in the X server. This driver is not included in
+-X11R6.8.1. Please use the version shipped with OpenBSD instead.
+-
+-8.4 OpenBSD/sparc64
+-
+-This version only has support for X clients on OpenBSD/sparc64. Note that the
+-version shipped with OpenBSD also has support for the X server on both SBus
+-and PCI based machines.
++X11R6.8.2. Please use the version shipped with OpenBSD instead.
+
+-9. Building New X Clients
++7.4 OpenBSD/sparc64
+
+-The easiest way to build a new client (X application) is to use xmkmf if an
+-Imakefile is included in the sources. Type ``xmkmf -a'' to create the Make-
+-files, check the configuration if necessary and type ``make''. Whenever you
+-install additional man pages you should update whatis.db by running ``make-
+-whatis /usr/X11R6/man''.
++This version only has support PCI based machines using ATI cards on
++OpenBSD/sparc64. Note that the version shipped with OpenBSD has support for
++the X server on both SBus and UPA (unaccelerated) based cards.
+
+-10. Thanks
++8. Thanks
+
+-Many thanks to all people who contributed to make X11R6.8.1 work on *BSD, in
+-particular: David Dawes, Todd Fries, Rod Grimes, Charles Hannum, Amancio
+-Hasty, Christoph Robitschko, Matthias Scheler, Michael Smith, Ignatios Sou-
+-vatzis, Jack Velte, Nate Williams and Pace Willison.
++Many thanks to all people who contributed to make X11R6.8.2 work on *BSD, in
++particular: David Dawes, Todd Fries, Miodrag Vallat, Rod Grimes, Charles Han-
++num, Amancio Hasty, Christoph Robitschko, Matthias Scheler, Michael Smith,
++Ignatios Souvatzis, Jack Velte, Nate Williams and Pace Willison.
+
+
+-$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.OpenBSD,v 1.3.2.1 2004/09/17 15:38:19 kem Exp $
++$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.OpenBSD,v 1.3.2.2 2005/02/08 00:44:27 kem Exp $
+Index: xc/programs/Xserver/hw/xfree86/doc/README.SCO
+diff -u xc/programs/Xserver/hw/xfree86/doc/README.SCO:1.3.2.1 xc/programs/Xserver/hw/xfree86/doc/README.SCO:1.3.2.2
+--- xc/programs/Xserver/hw/xfree86/doc/README.SCO:1.3.2.1 Fri Sep 17 15:38:19 2004
++++ xc/programs/Xserver/hw/xfree86/doc/README.SCO Tue Feb 8 00:44:27 2005
+@@ -6,12 +6,12 @@
+
+ 1. Requirements
+
+-Before you can either compile or execute a binary distribution of X11R6.8.1,
++Before you can either compile or execute a binary distribution of X11R6.8.2,
+ the following conditions must be met:
+
+ o Ensure that you are running Release 5.0.4 or later. This is required
+ because OSS646 is only supported on those platforms. There are no plans
+- to support X11R6.8.1 on earlier releases of OpenServer.
++ to support X11R6.8.2 on earlier releases of OpenServer.
+
+ o Ensure that OSS646, the ``Execution Environment Update'' package is
+ installed, if appropriate. Check the release notes for that update to
+@@ -29,7 +29,7 @@
+ est version can always be found at the SCO FTP site
+ <URL:ftp://ftp.sco.com/pub/openserver5/opensrc>.
+
+- o To compile X11R6.8.1, you must use the SCO-supported version of the GNU
++ o To compile X11R6.8.2, you must use the SCO-supported version of the GNU
+ C Compiler. It is possible that Skunkware versions of the compiler will
+ work too, but this has not been tested. The ``GNU Development System''
+ is available for all releases from (and including) SCO OpenServer
+@@ -42,7 +42,7 @@
+ o If you are not using OSR 5.0.7 or later, you need to get an updated con-
+ sole driver. See urlnam <URL:http://www.sco.com> for details on
+ OpenServer supplements. If you can't or don't want to upgrade your con-
+- sole driver, X11R6.8.1 will still compile, but you may run into problems
++ sole driver, X11R6.8.2 will still compile, but you may run into problems
+ with some cards such as the Riva TNT and ATI Rage cards. The problem
+ with the console driver in 5.0.6A and earlier is that when the X server
+ sets graphics mode, the driver does not set a status bit, so any text
+@@ -51,11 +51,11 @@
+ console video memory. This just happens to be slap bang in the middle
+ of palette data for the Riva TNT, so you get color map corruption. The
+ updated console driver also has an improved mechanism for allocating
+- video memory that X11R6.8.1 detects at compile time, and it will use it
++ video memory that X11R6.8.2 detects at compile time, and it will use it
+ if it exists. It is STRONGLY recommended that you get the console
+ driver update.
+
+-2. Compiling X11R6.8.1
++2. Compiling X11R6.8.2
+
+ Using the GNU Development System, compiling the distribution should be fairly
+ straightforward. Before attempting to compile the system though, you should
+@@ -85,7 +85,7 @@
+ o If you want to install the manual pages, execute the command make
+ install.man 2>&1 | tee -a install.log as root.
+
+-3. Before Running X11R6.8.1
++3. Before Running X11R6.8.2
+
+ The SCO xterm terminfo description is not compatible with the xterm in the R5
+ distribution.
+@@ -99,7 +99,7 @@
+
+ 4. Switching Consoles
+
+-X11R6.8.1 uses similar console switching keys as the SCO R4 and R5 servers.
++X11R6.8.2 uses similar console switching keys as the SCO R4 and R5 servers.
+ That is, Ctrl-PrntScr takes you to the next console along from the one X is
+ running on. If this is the last console it will take you to console 1. Ctrl-
+ Alt-FXX, where XX is a function key between F1 and F12 will switch you to the
+@@ -135,12 +135,12 @@
+
+ 6. Using SCO binaries/servers.
+
+-X11R6.8.1 will accept connections from SCO binaries (R3 upwards) and the SCO
+-R5 server will also accept connections from X11R6.8.1 binaries. This means
++X11R6.8.2 will accept connections from SCO binaries (R3 upwards) and the SCO
++R5 server will also accept connections from X11R6.8.2 binaries. This means
+ you may mix and match the two if you have ODT. For example you may still use
+ the Panning Motif window manager (pmwm) if you prefer.
+
+ Generated from XdotOrg: xc/programs/Xserver/hw/xfree86/doc/sgml/SCO.sgml,v 1.3 keithp Exp $
+
+
+-$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.SCO,v 1.3.2.1 2004/09/17 15:38:19 kem Exp $
++$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.SCO,v 1.3.2.2 2005/02/08 00:44:27 kem Exp $
+Index: xc/programs/Xserver/hw/xfree86/doc/README.SiS
+diff -u xc/programs/Xserver/hw/xfree86/doc/README.SiS:1.3.2.1 xc/programs/Xserver/hw/xfree86/doc/README.SiS:1.3.2.2
+--- xc/programs/Xserver/hw/xfree86/doc/README.SiS:1.3.2.1 Fri Sep 17 15:38:19 2004
++++ xc/programs/Xserver/hw/xfree86/doc/README.SiS Tue Feb 8 00:44:27 2005
+@@ -2,7 +2,7 @@
+
+ Thomas Winischhofer (<thomas@winischhofer.net>)
+
+- 5 October 2003
++ 7 February 2005
+
+ 1. Introduction
+
+@@ -16,21 +16,17 @@
+
+ o 300 series: 300/305, 540, 630/730
+
+- o 315 series: 315, 550, 650, 651, M650, 740
++ o 315 series: 315/E/PRO, 550/551/552, 650, 651, M650, 740
+
+- o 330 series: 330 ("Xabre"), 661FX, M661FX, 741, 760
++ o 330 series: 330 ("Xabre"), M]661[F/M]X, [M]741[GX], [M]760[GX]
+
+-The driver supports:
++Among other features, the driver supports
+
+- o 8/16/24 bits color depth; old series also 15;
++ o 8/16/24 bits color depth; old series also 15
+
+- o XAA
++ o Hardware cursor; 315/330 series: Color HW cursor
+
+- o XVideo (Xv)
+-
+- o Render (XRAND)
+-
+- o Hardware cursor; 315/330 series: Color HW cursor;
++ o XAA; XVideo (Xv); RENDER (XRAND) and other extensions
+
+ o 6326: TV output
+
+@@ -40,12 +36,11 @@
+ o 300/315/330 series: LCD output via LVDS transmitters or SiS video
+ bridges
+
+- o 300/315/330 series: Dual head mode; Xinerama; Merged framebuffer mode;
++ o 300/315/330 series: Dual head mode; Xinerama; Merged framebuffer mode
+
+-This document gives an overview over the driver's features and configuration
+-options. Please see http://www.winischhofer.net/linuxsisvga.shtml for
+-detailed documentation and updates. Support for the 661, 741 and 760 is
+-entirely untested as of this writing, and possibly incomplete for LCD output.
++This document provides a brief overview over the driver's features and con-
++figuration options. Please see http://www.winischhofer.at/linuxsisvga.shtml
++for detailed documentation and updates.
+
+ 2. xorg.conf Options
+
+@@ -53,182 +48,210 @@
+ them must be specified in the Device section of the xorg.conf file for this
+ card.
+
++In the list below, the options' arguments are described by type. For
++"boolean", the keywords "on", "true" and "yes", as well as "off", "false" and
++"no" respectively have the same meaning.
++
+ 2.1 For all chipsets
+
+- Option "SWCursor", "HWCursor"
++ Option "SWCursor" boolean]
++
++ Option "HWCursor" boolean]
+ These options select whether the software (SW) or hardware (HW)
+ cursor should be used. The default is using the hardware cursor.
+
+- Option "NoAccel"
+- Disables 2D acceleration. Default: 2D acceleration is enabled.
++ Option "NoAccel" boolean]
++ Disables 2D acceleration. By default, 2D acceleration is enabled.
+
+- Option "Turboqueue"
+- SiS chipsets have the option to extend the engine command queue
+- on VRAM. This concept is called "TurboQueue" and gives some per-
+- formance improvement. Due to hardware bugs, the TurboQueue is
+- disabled on the 530/620, otherwise enabled by default.
+-
+- Option "Rotate"
++ Option "Rotate" string]
+ This option enables clockwise ("CW") or counter-clockwise ("CCW")
+ rotation of the display. Enabling either CW or CCW rotation dis-
+ ables the RandR extension. Default: no rotation.
+
+- Option "ShadowFB"
++ Option "ShadowFB" boolean]
+ This option enables the shadow framebuffer layer. By default, it
+ is disabled.
+
+- Option "NoXVideo"
+- Disables the XVideo support. Default: XVideo support is enabled.
++ Option "NoXVideo" boolean]
++ Disables the XVideo (Xv) support. By default, XVideo support is
++ enabled.
+
+- Option "CRT1Gamma"
++ Option "CRT1Gamma" boolean]
+ Enables or disables gamma correction. Default: gamma correction
+ is enabled.
+
+ 2.2 old series specific options
+
+- Option "FastVram"
++ Option "FastVram" boolean]
+ Enables 1 cycle memory access for read and write operations. The
+ default depends on the chipset used.
+
+- Option "NoHostBus"
++ Option "Turboqueue" boolean]
++ SiS chipsets have the ability to extend the engine command queue
++ in video RAM. This concept is called "TurboQueue" and gives some
++ performance improvement. Due to hardware bugs, the TurboQueue is
++ disabled on the 530/620, otherwise enabled by default.
++
++ Option "NoHostBus" boolean]
+ For 5597/5598 only. This option, if set, disables the CPU to VGA
+ host bus. Disabling the host bus will result in a severe perfor-
+ mance regression.
+
+- VideoRAM size
++ VideoRAM size]
+ The SiS 6326 can only directly address 4096K bytes of video RAM.
+ However, there are some cards out there featuring 8192K (8MB) of
+- video RAM. This RAM is not addressable by the engines. There-
+- fore, by default, the driver will only use 4096K. This behavior
+- can be overridden by specifying the amount of video RAM using the
+- VideoRAM keyword. If more than 4096K is specified, the driver
+- will disable 2D acceleration, Xv and the HW cursor. On all other
+- chipsets, this keyword is ignored.
++ video RAM. This RAM is not addressable by the engines. Therefore,
++ by default, the driver will only use 4096K. This behavior can be
++ overridden by specifying the amount of video RAM using the Video-
++ RAM keyword. If more than 4096K is specified, the driver will
++ disable 2D acceleration, Xv and the HW cursor. On all other
++ chipsets, this keyword is ignored. The size argument is expected
++ in KB, but without "KB".
+
+- Option "NoYV12"
++ Option "NoYV12" boolean]
+ Due to hardware bugs, XVideo may display a corrupt image when
+ using YV12 encoded material. This option, if set, disables sup-
+ port for YV12 and hence forces the Xv-aware application to use
+ either YUV2 or XShm for video output.
+
+- Option "TVStandard"
++ Option "TVStandard" string]
+ (6326 only) Selects the TV output standard. May be PAL or NTSC.
+ By default, this is selected by a jumper on the card.
+
+ 2.3 300/315/330 series specific options
+
+- Option "ForceCRT1"
++ Option "EnableSiSCtrl" boolean]
++ This option enables/disables the driver's interface for the SiSC-
++ trl utility. Please see http://www.winischhofer.at/linux-
++ sisvga.shtml for more information.
++
++ Option "Turboqueue" boolean]
++ (300 series only) SiS chipsets have the ability to extend the
++ engine command queue in video RAM. This concept is called "Turbo-
++ Queue" and gives some performance improvement. The TurboQueue is
++ enabled by default.
++
++ Option "ForceCRT1" boolean]
+ Enables or disables CRT1 (= the external VGA monitor). By
+ default, the driver will use CRT1 if a monitor is detected during
+ server start. Some older monitors can't be detected, so they may
+ require setting this option to true. To disable CRT1 output, set
+ this option to false.
+
+- Option "ForceCRT1Type"
+- SiS 650, M650 and 651 with either 301LV or 302LV video bridge
+- only. May be VGA or LCD. Specifying LCD will force the driver to
+- use the VGA controller's CRT1 channel for driving the LCD, while
+- CRT2 is free for TV usage. Default is VGA.
+-
+- Option "ForceCRT2Type"
+- Selects the CRT2 output device type. Valid parameters are LCD,
+- TV, SVIDEO, COMPOSITE, SCART, VGA, NONE. NONE disables CRT2.
+- SVIDEO and COMPOSITE are only for systems with a SiS video bridge
+- and select the desired plug type. For Chrontel systems, TV should
+- be used instead. VGA means secondary VGA and is only available
+- on some SiS video bridges (301, 301B, 301C).
+-
+- Option "CRT2Gamma"
+- Enables or disables gamma correction for CRT2. This is only sup-
+- ported for SiS video bridges. Default: gamma correction for CRT2
+- is enabled.
++ Option "ForceCRT1Type" string]
++ (For SiS 650, M650, 651, 661, 741, 760 with either SiS 301LV,
++ 302LV or SiS 301C video bridge only) The argument may be "VGA" or
++ "LCD". Specifying LCD will force the driver to use the VGA con-
++ troller's CRT1 channel for driving the LCD while CRT2 is free
++ for TV usage. Default is VGA.
++
++ Option "ForceCRT2Type" string]
++ Selects the CRT2 output device type. Valid parameters are "LCD",
++ "TV", "SVIDEO", "COMPOSITE", "SVIDEO+COMPOSITE", "SCART", "VGA",
++ "YPBPR480I", "YPBPR480P", "YPBPR720P", "YPBPR1080I" or "NONE".
++ NONE disables CRT2. SVIDEO, COMPOSITE, SVIDEO+COMPOSITE, SCART
++ and all the YPBPR alternatives are only for systems with a SiS
++ video bridge and select the desired plug or tv standard type. For
++ Chrontel systems, TV should be used instead. VGA means secondary
++ VGA and is only available on some SiS video bridges (301, 301B,
++ 301C).
++
++ Option "CRT2Gamma" boolean]
++ (For SiS video bridges only) This option enables or disables
++ gamma correction for CRT2. Default: gamma correction for CRT2 is
++ enabled.
+
+- Option "DRI"
++ Option "DRI" boolean]
+ Although this option is accepted for all chipsets, it currently
+ only makes sense on the 300 series; DRI is only supported on
+ these chipsets. This option enables/disables DRI.
+
+- Option "TVStandard"
++ Option "TVStandard" string]
+ Selects the TV output standard. May be PAL or NTSC, on some
+ machines (depending on the hardware) also PALM and PALN. Default:
+ BIOS setting.
+
+- Option "TVXPosOffset", "TVYPosOffset"
++ Option "TVXPosOffset" integer]
++
++ Option "TVYPosOffset" integer]
+ These options allow relocating the image on your TV. Both options
+ take an integer within the range of -16 to 16. Default: 0. Not
+ supported for Chrontel 7019.
+
+- Option "CHTVOverscan"
+- For Chrontel TV encoders only. Selects whether TV output should
++ Option "CHTVOverscan" boolean]
++ (For Chrontel TV encoders only) Selects whether TV output should
+ be overscan or underscan.
+
+- Option "CHTVSuperOverscan"
+- For Chrontel 7005 TV encoders in PAL mode only. Selects whether
++ Option "CHTVSuperOverscan" boolean]
++ (For Chrontel 7005 TV encoders in PAL mode only) Selects whether
+ TV output should be super-overscan (slightly larger than the
+ viewable area) or not.
+
+- Option "SISTVXScale", "SISTVYScale"
+- For SiS video bridges only. These options allow zooming the image
+- on your TV. SISTVXScale takes an integer within the range of -16
+- to 16. SISTVYScale accepts -4 to 3. Default: 0. Not all modes
+- can be scaled.
++ Option "SISTVXScale" integer]
+
+-2.4 300 series specific options
++ Option "SISTVYScale" integer]
++ (For SiS video bridges only) These options allow zooming the
++ image on your TV. SISTVXScale takes an integer within the range
++ of -16 to 16. SISTVYScale accepts -4 to 3. Default: 0. Not all
++ modes can be scaled.
+
+- Option "MaxXFBMem"
+- DRI requires the linux kernel's SiS framebuffer driver "sisfb"
+- and some other modules which come with either the linux kernel or
+- X11R6.8.1. (On *BSD, the DRI driver does not require any frame-
+- buffer driver.) Sisfb takes care of memory management for tex-
+- ture data. In order to prevent the X driver and sisfb from over-
+- writing each others video memory, sisfb reserves an amount of
+- video memory for the X driver. This amount can either be selected
+- using sisfb's mem parameter, or auto-selected depending on the
+- amount of total video RAM available. However, the X driver needs
+- to know about the amount of RAM sisfb reserved. For this purpose,
+- the Option "MaxXFBMem" exists.
+-
+- XFree 4.3.0 disabled SiS DRI support due to a lack of maintenance
+- of the SiS DRI driver. X11R6.8.1 and X11R6.8.1 and XFree86 4.4
+- contains a newly written SiS DRI driver by Eric Anholt.
+-
+- If you intend to use DRI, I recommend setting the total video
+- memory in the BIOS to 64MB in order to at least overcome the lack
+- of memory swap functions.
+-
+- Sisfb can be used for memory management only, or as a complete
+- framebuffer driver. If you start sisfb with a valid mode (ie you
+- gain a graphical console), the X driver can communicate with
+- sisfb and doesn't require setting the MaxXFBMem option at all.
+- The X driver will receive enough information from sisfb in this
+- case.
+-
+- However, if you use sisfb for memory management only, ie you
+- started sisfb with mode=none and still have a text mode console,
+- there is no communication between sisfb and the X driver. In this
+- case, you need to set MaxXFBMem to the same value as you gave
+- sisfb with its mem parameter. If you didn't specify any mem
+- parameter, sisfb will reserve 12288KB if more than 16MB of total
+- video RAM is available, 8192KB if between 12 and 16MB of video
+- RAM is available, 4096KB in all other cases.
++2.4 300 series specific options
+
+- Then you need to specify any of these amounts as the parameter
+- for the MaxXFBMem option. The value is to be given without 'KB'.
++ Option "MaxXFBMem" size]
++ This option might only be needed if you are running X on a Linux
++ 2.4 series kernel. This option is not needed and should be omit-
++ ted on Linux 2.6 and *BSD.
++
++ The Linux kernel features a framebuffer driver named "sisfb"
++ which takes care of memory management for DRI/DRM (such as for 3D
++ texture data). In order to keep the X driver and sisfb from over-
++ writing each other's video memory, sisfb reserves a certain
++ amount of video memory for the X driver. Reserved memory is for X
++ 2D, pixmap cache and video data only. Sisfb will not present this
++ memory to the DRI. The amount of reserved memory can either be
++ selected using sisfb's mem parameter or auto-selected depending
++ on the total amount of video RAM available.
++
++ Fact of the matter is, the X driver needs to know about the
++ amount of RAM sisfb reserved. For this purpose, the Option
++ "MaxXFBMem" exists.
++
++ If you start sisfb with a valid mode (ie you run a graphical con-
++ sole), the X driver can communicate with sisfb and doesn't
++ require setting the MaxXFBMem option at all. The X driver will
++ receive enough information from sisfb in this case.
++
++ If you, on the other hand, use sisfb for memory management only,
++ ie you started sisfb with mode=none and still have a text mode
++ console, there is no communication between sisfb and the X
++ driver. In this - and ONLY this - case, you need to set MaxXFBMem
++ to the same value as you gave sisfb with its mem parameter. If
++ you didn't specify any mem parameter, sisfb will reserve (and you
++ will have to specify by MaxXFBMem) 12288KB if more than 16MB of
++ total video RAM is available, 8192KB if between 12 and 16MB of
++ video RAM is available, 4096KB in all other cases. The size is
++ expected in KB, without the "KB".
++
++ Final word of advice: If you intend to use DRI on an integrated
++ chipset (such as the 630/730), it is recommended to set the total
++ video memory in the BIOS to 64MB in order to at least overcome
++ the DRI driver's lack of memory swap functions.
+
+ 2.5 315/330 series specific options
+
+- Option "RenderAcceleration"
+- Enables or disables RENDER acceleration. By default, RENDER
+- acceleration is enabled.
+-
+- Option "XvOnCRT2"
+- 315, 650, 740, 330 only. This option selects whether the XVideo
+- (Xv) overlay should be displayed on CRT1 or CRT2. Setting this
+- options means CRT2. The other CRT will only display the (blue)
+- color key.
++ Option "RenderAcceleration" boolean]
++ Enables or disables RENDER acceleration. This feature, for
++ instance, accelerates output of anti-aliased text. By default,
++ RENDER acceleration is enabled.
++
++ Option "XvOnCRT2" boolean]
++ (For 315, 650, 740, 330 only) This option selects whether the
++ XVideo (Xv) overlay should be displayed on CRT1 or CRT2. Setting
++ this option means CRT2. The other CRT will only display the (by
++ default: blue) color key or a black/red pattern.
+
+ Document based on 4.1 version written by Joanjo Santamarta and 3.3 version
+ written by Xavier Ducoin.
+
+
+-$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.SiS,v 1.3.2.1 2004/09/17 15:38:19 kem Exp $
++$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.SiS,v 1.3.2.2 2005/02/08 00:44:27 kem Exp $
+Index: xc/programs/Xserver/hw/xfree86/doc/README.Solaris
+diff -u xc/programs/Xserver/hw/xfree86/doc/README.Solaris:1.3.2.1 xc/programs/Xserver/hw/xfree86/doc/README.Solaris:1.3.2.2
+--- xc/programs/Xserver/hw/xfree86/doc/README.Solaris:1.3.2.1 Fri Sep 17 15:38:19 2004
++++ xc/programs/Xserver/hw/xfree86/doc/README.Solaris Tue Feb 8 00:44:27 2005
+@@ -81,15 +81,15 @@
+ There are only a total of 8 available VT's (7 normal VT's + 1 console) not
+ the usual 15. If you have all 8 allocated, and you attempt to allocate a
+ additional VT you will panic the system. (This bug is worked around in the
+-Solaris X11R6.8.1 Xserver.)
++Solaris X11R6.8.2 Xserver.)
+
+ From a programming stand point, they work pretty much as documented in the
+ AT&T Unix System V/386 Release 4 Integrated Software Development Guide, how-
+ ever a number of ioctl() calls are broken.
+
+-2. Notes for building X11R6.8.1 on Solaris
++2. Notes for building X11R6.8.2 on Solaris
+
+- 1. Both GCC, and the Sun Studio compilers are supported by X11R6.8.1. The
++ 1. Both GCC, and the Sun Studio compilers are supported by X11R6.8.2. The
+ minimum recommended GCC release is 2.7.2. Some earlier GCC's are known
+ to not work and should be avoided.
+
+@@ -115,7 +115,7 @@
+ Whether this behaviour still exists with newer GCC's has not been veri-
+ fied.
+
+- 4. To build X11R6.8.1 with GCC you need gcc and (optionally) c++filt from
++ 4. To build X11R6.8.2 with GCC you need gcc and (optionally) c++filt from
+ GNU binutils. Don't install gas or ld from GNU binutils, use the one
+ provided by Sun.
+
+@@ -123,7 +123,7 @@
+ bolic links named cc, CC, and c++filt pointing respectively to the
+ actual gcc, g++ and c++filt commands.
+
+- 5. If you are using Sun compilers to compile the X11R6.8.1 distribution,
++ 5. If you are using Sun compilers to compile the X11R6.8.2 distribution,
+ you need to modify your PATH appropriately so the Sun compiler tools
+ are available. Normally, they should be in /opt/SUNWspro/bin
+
+@@ -195,12 +195,16 @@
+ (and reported!). It might even have broken some aspects of the x86
+ port.
+
++ 3. The kbd driver is not yet supported on Solaris, but the server still
++ logs a message that it can't find the Keyboard driver and suggests you
++ use kbd. That message should be ignored in this release.
++
+ 5. Bug Notification
+
+ Bug reports should be reported using the bugzilla.freedesktop.org using the
+ xorg product or sent to <xorg@freedesktop.org>.
+
+- Generated from XdotOrg: xc/programs/Xserver/hw/xfree86/doc/sgml/Solaris.sgml,v 1.3 kem Exp $
++ Generated from XdotOrg: xc/programs/Xserver/hw/xfree86/doc/sgml/Solaris.sgml,v 1.3.2.1 gisburn Exp $
+
+
+-$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.Solaris,v 1.3.2.1 2004/09/17 15:38:19 kem Exp $
++$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.Solaris,v 1.3.2.2 2005/02/08 00:44:27 kem Exp $
+Index: xc/programs/Xserver/hw/xfree86/doc/README.XKB-Config
+diff -u xc/programs/Xserver/hw/xfree86/doc/README.XKB-Config:1.3.2.1 xc/programs/Xserver/hw/xfree86/doc/README.XKB-Config:1.3.2.2
+--- xc/programs/Xserver/hw/xfree86/doc/README.XKB-Config:1.3.2.1 Fri Sep 17 15:38:19 2004
++++ xc/programs/Xserver/hw/xfree86/doc/README.XKB-Config Tue Feb 8 00:44:27 2005
+@@ -6,7 +6,7 @@
+
+ Abstract
+
+- This document describes how to configure X11R6.8.1 XKB from a
++ This document describes how to configure X11R6.8.2 XKB from a
+ user's point a few. It converts basic configuration syntax and
+ gives also a few examples.
+
+@@ -193,4 +193,4 @@
+ compatibility reasons. Avoid using it if it is possible.
+
+
+-$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.XKB-Config,v 1.3.2.1 2004/09/17 15:38:19 kem Exp $
++$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.XKB-Config,v 1.3.2.2 2005/02/08 00:44:27 kem Exp $
+Index: xc/programs/Xserver/hw/xfree86/doc/README.XKB-Enhancing
+diff -u xc/programs/Xserver/hw/xfree86/doc/README.XKB-Enhancing:1.3 xc/programs/Xserver/hw/xfree86/doc/README.XKB-Enhancing:1.3.2.1
+--- xc/programs/Xserver/hw/xfree86/doc/README.XKB-Enhancing:1.3 Fri Sep 3 23:41:21 2004
++++ xc/programs/Xserver/hw/xfree86/doc/README.XKB-Enhancing Tue Feb 8 00:44:27 2005
+@@ -132,12 +132,12 @@
+ as of a vector of columns per each keycode (naturally the dimension of this
+ vector may differ for different keycodes). What is it good for? The group is
+ not very useful unless you intend to use more than one logically different
+-set of symbols (like more than one alphabet) defined in a single mapping
+-table. But then, the group has a natural meaning - each symbol set has its
+-own group and changing it means selecting a different one. XKB approach
+-allows up to four different groups. The columns inside each group are called
+-(shift) levels. The X server knows the current group and reports it together
+-with modifier set and with a keycode in key events.
++set of symbols (like more than one alphabet) defined in a single mapping ta-
++ble. But then, the group has a natural meaning - each symbol set has its own
++group and changing it means selecting a different one. XKB approach allows
++up to four different groups. The columns inside each group are called (shift)
++levels. The X server knows the current group and reports it together with
++modifier set and with a keycode in key events.
+
+ To sum it up:
+
+@@ -506,4 +506,4 @@
+ And that should be it. Enjoy creating your own xkb mapping.
+
+
+-$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.XKB-Enhancing,v 1.3 2004/09/03 23:41:21 kem Exp $
++$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.XKB-Enhancing,v 1.3.2.1 2005/02/08 00:44:27 kem Exp $
+Index: xc/programs/Xserver/hw/xfree86/doc/README.ati
+diff -u xc/programs/Xserver/hw/xfree86/doc/README.ati:1.3 xc/programs/Xserver/hw/xfree86/doc/README.ati:1.3.2.1
+--- xc/programs/Xserver/hw/xfree86/doc/README.ati:1.3 Fri Sep 3 23:41:21 2004
++++ xc/programs/Xserver/hw/xfree86/doc/README.ati Tue Feb 8 00:44:27 2005
+@@ -69,8 +69,8 @@
+ The driver currently supports the SuperVGA capabilities of all ATI adapters
+ except some early Mach8 and Mach32 adapters that do not provide the required
+ functionality. This support works for monochrome, 16-colour and 256-colour
+-video modes, if one of the following ATI graphics controller chips is pre-
+-sent:
++video modes, if one of the following ATI graphics controller chips is
++present:
+
+ VGAWonder series: 18800, 18800-1, 28800-2, 28800-4, 28800-5, 28800-6
+ Mach32 series: 68800-3, 68800-6, 68800AX, 68800LX
+@@ -705,4 +705,4 @@
+ $Id$ Based on XFree86: xc/programs/Xserver/hw/xfree86/doc/sgml/ati.sgml,v 3.42 2003/01/20 03:43:07 dawes Exp
+
+
+-$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.ati,v 1.3 2004/09/03 23:41:21 kem Exp $
++$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.ati,v 1.3.2.1 2005/02/08 00:44:27 kem Exp $
+Index: xc/programs/Xserver/hw/xfree86/doc/README.chips
+diff -u xc/programs/Xserver/hw/xfree86/doc/README.chips:1.3.2.1 xc/programs/Xserver/hw/xfree86/doc/README.chips:1.3.2.2
+--- xc/programs/Xserver/hw/xfree86/doc/README.chips:1.3.2.1 Fri Sep 17 15:38:19 2004
++++ xc/programs/Xserver/hw/xfree86/doc/README.chips Tue Feb 8 00:44:27 2005
+@@ -7,9 +7,9 @@
+
+ 1. Introduction
+
+-The Chips and Technologies driver release in X11R6.8.1 came from XFree86 4.4
++The Chips and Technologies driver release in X11R6.8.2 came from XFree86 4.4
+ rc2; this document was originally included in that release and has been
+-updated modestly to reflect differences between X11R6.8.1 and XFree86 4.4
++updated modestly to reflect differences between X11R6.8.2 and XFree86 4.4
+ rc2.
+
+ With the release of XFree86 version 4.0, the Chips and Technologies driver
+@@ -961,7 +961,7 @@
+
+ startx -- -depth 24 -fbbpp 32 8-8-8 RGB truecolor
+
+- however as X11R6.8.1 allows 32bpp pixmaps to be used with frame-
++ however as X11R6.8.2 allows 32bpp pixmaps to be used with frame-
+ buffers operating in 24bpp, this mode of operating will cost per-
+ formance for no gain in functionality.
+
+@@ -1033,4 +1033,4 @@
+ bugs and extensively testing this server.
+
+
+-$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.chips,v 1.3.2.1 2004/09/17 15:38:19 kem Exp $
++$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.chips,v 1.3.2.2 2005/02/08 00:44:27 kem Exp $
+Index: xc/programs/Xserver/hw/xfree86/doc/README.dps
+diff -u xc/programs/Xserver/hw/xfree86/doc/README.dps:1.3.2.1 xc/programs/Xserver/hw/xfree86/doc/README.dps:1.3.2.2
+--- xc/programs/Xserver/hw/xfree86/doc/README.dps:1.3.2.1 Fri Sep 17 15:38:19 2004
++++ xc/programs/Xserver/hw/xfree86/doc/README.dps Tue Feb 8 00:44:27 2005
+@@ -34,7 +34,7 @@
+ server which, when executed, causes a line to be drawn.
+
+ This document does not aim at teaching programming with DPS; it is only a
+-summary description of the DPS support code included with X11R6.8.1. More
++summary description of the DPS support code included with X11R6.8.2. More
+ information about DPS, including a DPS bibliography, is available from the
+ DPS extension site <URL:http://dps.sourceforge.net>.
+
+@@ -49,14 +49,14 @@
+ ``DPS agent.'' In this latter case, the term ``server-side'' is somewhat
+ misleading.
+
+-At the time of writing, only the client side is included with X11R6.8.1; the
++At the time of writing, only the client side is included with X11R6.8.2; the
+ server side must be obtained separately. Please see server side (section 3.,
+ page 1) later in this document for more information.
+
+ 2. The DPS client side
+
+ The DPS client side consists of four libraries and a number of basic tools
+-for programming and configuration; these are all included with X11R6.8.1.
++for programming and configuration; these are all included with X11R6.8.2.
+
+ 2.1 Libraries
+
+@@ -80,14 +80,14 @@
+ is a DPS drawing area that automatically manages issues such as scrolling,
+ scaling, client-side backing store, incremental redisplay, etc. The Font
+ Selection Box, and its associated Font Preview, present a convenient and pow-
+-erful interface for choosing scalable fonts. Finally, the Color Picker pre-
+-sents an interface for choosing colours using either of the RGB or HSV
++erful interface for choosing scalable fonts. Finally, the Color Picker
++presents an interface for choosing colours using either of the RGB or HSV
+ spaces. The latter three widgets are documented in [DPTX]; some summary
+ Scrolling Widget documentation is available in the doc subdirectory of the
+ DPS.tar.gz file, available from urlnam <URL:ftp://dps.source-
+ forge.net/pub/dps/DPS.tar.gz>.
+
+-The source code for libdpstkXm is included with X11R6.8.1; however, as it
++The source code for libdpstkXm is included with X11R6.8.2; however, as it
+ depends on Motif, this library is not built by default. A GTK-based library
+ providing some of the functionality of libdpstkXm is available from the
+ gtkDPS site <URL:http://www.gyve.org/gtkDPS/>.
+@@ -100,7 +100,7 @@
+ they use Xt or not.
+
+ This state of affairs is unfortunately true of the version of libdps included
+-with X11R6.8.1. We are currently considering various solutions to this prob-
++with X11R6.8.2. We are currently considering various solutions to this prob-
+ lem (including the use of weak linker symbols or splitting off the guilty
+ functions into a separate library).
+
+@@ -122,7 +122,7 @@
+
+ 2.3 Sample clients
+
+-X11R6.8.1 contains three sample DPS clients, dpsinfo, dpsexec and texteroids.
++X11R6.8.2 contains three sample DPS clients, dpsinfo, dpsexec and texteroids.
+ They are documented in their respective manual pages.
+
+ A number of sample clients that depend on Motif are available in urlnam
+@@ -188,4 +188,4 @@
+ Updated by Jim Gettys.
+
+
+-$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.dps,v 1.3.2.1 2004/09/17 15:38:19 kem Exp $
++$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.dps,v 1.3.2.2 2005/02/08 00:44:27 kem Exp $
+Index: xc/programs/Xserver/hw/xfree86/doc/README.fonts
+diff -u xc/programs/Xserver/hw/xfree86/doc/README.fonts:1.3.2.1 xc/programs/Xserver/hw/xfree86/doc/README.fonts:1.3.2.2
+--- xc/programs/Xserver/hw/xfree86/doc/README.fonts:1.3.2.1 Fri Sep 17 15:38:19 2004
++++ xc/programs/Xserver/hw/xfree86/doc/README.fonts Tue Feb 8 00:44:27 2005
+@@ -1,4 +1,4 @@
+- Fonts in X11R6.8.1
++ Fonts in X11R6.8.2
+
+ Juliusz Chroboczek, <jch@pps.jussieu.fr>
+
+@@ -6,9 +6,9 @@
+
+ 1. Introduction
+
+-This document describes the support for fonts in X11R6.8.1. Installing fonts
++This document describes the support for fonts in X11R6.8.2. Installing fonts
+ (section 2., page 1) is aimed at the casual user wishing to install fonts in
+-X11R6.8.1 the rest of the document describes the font support in more detail.
++X11R6.8.2 the rest of the document describes the font support in more detail.
+
+ We assume some familiarity with digital fonts. If anything is not clear to
+ you, please consult Appendix: Background (section 5., page 1) at the end of
+@@ -19,7 +19,7 @@
+ X includes two font systems: the original core X11 fonts system, which is
+ present in all implementations of X11, and the Xft fonts system, which may
+ not be distributed with implementations of X11 that are not based on
+-X11R6.8.1 but will hopefully be included by them in the future
++X11R6.8.2 but will hopefully be included by them in the future
+
+ The core X11 fonts system is directly derived from the fonts system included
+ with X11R1 in 1987, which could only use monochrome bitmap fonts. Over the
+@@ -48,13 +48,13 @@
+
+ Xft has no configuration mechanism itself, rather it relies upon the fontcon-
+ fig library to configure and customize fonts. That library is not specific
+-to X11R6.8.1 or indeed on any particular font output mechanism. This discus-
++to X11R6.8.2 or indeed on any particular font output mechanism. This discus-
+ sion describes how fontconfig, rather than Xft, works.
+
+ 2.1.1 Installing fonts in Xft
+
+ Fontconfig looks for fonts in a set of well-known directories that include
+-all of X11R6.8.1's standard font directories
++all of X11R6.8.2's standard font directories
+ (`/usr/X11R6/lib/X11/lib/fonts/*') by default) as well as a directory called
+ `.fonts/' in the user's home directory. Installing a font for use by Xft
+ applications is as simple as copying a font file into one of these directo-
+@@ -115,7 +115,7 @@
+ </edit>
+ </match>
+
+-Xft supports sub-pixel rasterisation on LCD displays. X11R6.8.1 should auto-
++Xft supports sub-pixel rasterisation on LCD displays. X11R6.8.2 should auto-
+ matically enable this feature on laptops and when using an LCD monitor con-
+ nected with a DVI cable; you can check whether this was done by typing
+
+@@ -186,8 +186,8 @@
+
+ 2.2.1 Installing bitmap fonts
+
+-The X11R6.8.1 server can use bitmap fonts in both the cross-platform BDF for-
+-mat and the somewhat more efficient binary PCF format. (X11R6.8.1 also sup-
++The X11R6.8.2 server can use bitmap fonts in both the cross-platform BDF for-
++mat and the somewhat more efficient binary PCF format. (X11R6.8.2 also sup-
+ ports the obsolete SNF format.)
+
+ Bitmap fonts are normally distributed in the BDF format. Before installing
+@@ -216,7 +216,7 @@
+
+ 2.2.2 Installing scalable fonts
+
+-The X11R6.8.1 server supports scalable fonts in four formats: Type 1, Speedo,
++The X11R6.8.2 server supports scalable fonts in four formats: Type 1, Speedo,
+ TrueType and CIDFont. This section only applies to the former three; for
+ information on CIDFonts, please see Installing CIDFonts (section 2.2.3, page
+ 1) later in this document.
+@@ -252,7 +252,7 @@
+
+ Munhwa-Regular--UniKS-UCS2-H
+
+-The CIDFont code in X11R6.8.1 requires a very rigid directory structure. The
++The CIDFont code in X11R6.8.2 requires a very rigid directory structure. The
+ main directory must be called `CID' (its location defaults to
+ `/usr/X11R6/lib/X11/fonts/CID' but it may be located anywhere), and it should
+ contain a subdirectory for every CID collection. Every subdirectory must
+@@ -311,7 +311,7 @@
+ bitmap fonts; this way, the server will prefer bitmap fonts to scalable fonts
+ when an exact match is possible, but will avoid scaling bitmap fonts when a
+ scalable font can be used. (The `:unscaled' hack, while still supported,
+-should no longer be necessary in X11R6.8.1.)
++should no longer be necessary in X11R6.8.2.)
+
+ You may check the font path of the running server by typing the command
+
+@@ -354,11 +354,11 @@
+ you are trying to use a font in a format that is not supported by your
+ server.
+
+-X11R6.8.1 supports the BDF, PCF, SNF, Type 1, Speedo, TrueType, OpenType and
+-CIDFont font formats. However, not all X11R6.8.1 servers come with all the
++X11R6.8.2 supports the BDF, PCF, SNF, Type 1, Speedo, TrueType, OpenType and
++CIDFont font formats. However, not all X11R6.8.2 servers come with all the
+ font backends configured in.
+
+-On most platforms, the X11R6.8.1 servers are modular: the font backends are
++On most platforms, the X11R6.8.2 servers are modular: the font backends are
+ included in modules that are loaded at runtime. The modules to be loaded are
+ specified in the `xorg.conf' file using the `Load' directive:
+
+@@ -366,7 +366,7 @@
+
+ If you have trouble installing fonts in a specific format, you may want to
+ check the server's log file in order to see whether the relevant modules are
+-properly loaded. The list of font modules distributed with X11R6.8.1 is as
++properly loaded. The list of font modules distributed with X11R6.8.2 is as
+ follows:
+
+ o "bitmap": bitmap fonts (`*.bdf', `*.pcf' and `*.snf');
+@@ -383,7 +383,7 @@
+
+ Please note that the argument of the `Load' directive is case-sensitive.
+
+-3. Fonts included with X11R6.8.1
++3. Fonts included with X11R6.8.2
+
+ 3.1 Standard bitmap fonts
+
+@@ -392,7 +392,7 @@
+ Helvetica and some members of the Lucida family. In the SI, these fonts are
+ provided in the ISO 8859-1 encoding (ISO Latin Western-European).
+
+-In X11R6.8.1, a number of these fonts are provided in Unicode-encoded font
++In X11R6.8.2, a number of these fonts are provided in Unicode-encoded font
+ files instead. At build time, these fonts are split into font files encoded
+ according to legacy encodings, a process which allows us to provide the stan-
+ dard fonts in a number of regional encodings with no duplication of work.
+@@ -470,7 +470,7 @@
+
+ 3.3 Standard scalable fonts
+
+-X11R6.8.1 includes all the scalable fonts distributed with X11R6.
++X11R6.8.2 includes all the scalable fonts distributed with X11R6.
+
+ 3.3.1 Standard Type 1 fonts
+
+@@ -492,7 +492,7 @@
+
+ /usr/X11R6/lib/X11/fonts/Type1/UT*.pfa
+
+-Finally, X11R6.8.1 also comes with Type 1 versions of Bitstream Courier and
++Finally, X11R6.8.2 also comes with Type 1 versions of Bitstream Courier and
+ Charter. These fonts have XLFD
+
+ -bitstream-courier-*-*-normal--0-0-0-0-m-0-iso8859-1
+@@ -504,7 +504,7 @@
+
+ 3.3.2 Standard Speedo fonts
+
+-X11R6.8.1 includes Speedo versions of the Bitstream Courier and Charter
++X11R6.8.2 includes Speedo versions of the Bitstream Courier and Charter
+ fonts. In order to use these fonts, you should ensure that your X server is
+ loading the `Speedo' font backend; see Troubleshooting (section 2.2.5, page
+ 1).
+@@ -521,7 +521,7 @@
+
+ 3.4 The Bigelow & Holmes Luxi family
+
+-X11R6.8.1 includes the Luxi family of scalable fonts, in both TrueType and
++X11R6.8.2 includes the Luxi family of scalable fonts, in both TrueType and
+ Type 1 format. This family consists of the fonts Luxi Serif, with XLFD
+
+ -b&h-luxi serif-medium-*-normal--*-*-*-*-p-*-*-*
+@@ -567,11 +567,11 @@
+
+ An earlier version of the Luxi fonts was made available under the name
+ Lucidux. This name should no longer be used due to trademark uncertainties,
+-and all traces of the Lucidux name have been removed from X11R6.8.1.
++and all traces of the Lucidux name have been removed from X11R6.8.2.
+
+ 4. More about core fonts
+
+-This section describes X11R6.8.1-specific enhancements to the core X11 fonts
++This section describes X11R6.8.2-specific enhancements to the core X11 fonts
+ system.
+
+ 4.1 Core fonts and internationalisation
+@@ -594,7 +594,7 @@
+ backends to share their encoding data, and allows simple configuration of new
+ locales independently of font type.
+
+-Please note: the X-TrueType (X-TT) backend is not included in X11R6.8.1.
++Please note: the X-TrueType (X-TT) backend is not included in X11R6.8.2.
+ That functionality has been merged into the FreeType backend.>
+
+ In the fontenc layer, an encoding is defined by a name (such as iso8859-1),
+@@ -654,7 +654,7 @@
+ used to automatically build `encodings.dir' files. Please see the mkfont-
+ dir(1) manual page for more details.
+
+-A number of encoding files for common encodings are included with X11R6.8.1.
++A number of encoding files for common encodings are included with X11R6.8.2.
+ Information on writing new encoding files can be found in Format of encodings
+ directory files (section 4.1.3, page 1) and Format of encoding files (section
+ 4.1.4, page 1) later in this document.
+@@ -974,8 +974,8 @@
+ bw=0.5:ds=y:ai=0.2:mincho.ttc -misc-mincho-bold-i-normal--0-0-0-0-c-0-jisx0201.1976-0
+
+ setup the complete combination of jisx0208 and jisx0201 using mincho.ttc
+-only. More information on the TTCap syntax is found on the After X-TT Pro-
+-ject page <URL:http://x-tt.sourceforge.jp/>.
++only. More information on the TTCap syntax is found on the After X-TT
++Project page <URL:http://x-tt.sourceforge.jp/>.
+
+ The FreeType backend uses the fontenc layer in order to support recoding of
+ fonts; this was described in The fontenc layer (section 4.1.1, page 1) and
+@@ -990,7 +990,7 @@
+
+ Since the functionalities for CJKV support introduced by X-TT have been
+ merged into the new FreeType backend, the X-TT backend will be removed from
+-X11R6.8.1's tree near the future. Therefore, the use of FreeType backend is
++X11R6.8.2's tree near the future. Therefore, the use of FreeType backend is
+ preferred over the X-TT backend.
+
+ General information on X-TrueType may be found at the After X-TT Project page
+@@ -1137,15 +1137,15 @@
+
+ 6. References
+
+-X11R6.8.1 comes with extensive documentation in the form of manual pages and
++X11R6.8.2 comes with extensive documentation in the form of manual pages and
+ typeset documents. Before installing fonts, you really should read the font-
+ config(3) and mkfontdir(1) manual pages; other manual pages of interest
+ include X(7), Xserver(1), xset(1), Xft(3), xlsfonts(1) and showfont(1). In
+ addition, you may want to read the X Logical Font Description document, by
+ Jim Flowers, which is provided in the file `xc/doc/xlfd.PS.Z'.
+
+-The latest released version of the X11R6.8.1 documentation (including this
+-document and all manual pages) can be found from current X11R6.8.1 documenta-
++The latest released version of the X11R6.8.2 documentation (including this
++document and all manual pages) can be found from current X11R6.8.2 documenta-
+ tion <URL:http://wiki.x.org/>.
+
+ The comp.fonts FAQ <URL:http://www.netmeg.net/faq/computers/fonts/>, which is
+@@ -1181,4 +1181,4 @@
+ for example RFC 373.
+
+
+-$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.fonts,v 1.3.2.1 2004/09/17 15:38:19 kem Exp $
++$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.fonts,v 1.3.2.2 2005/02/08 00:44:27 kem Exp $
+Index: xc/programs/Xserver/hw/xfree86/doc/README.i740
+diff -u xc/programs/Xserver/hw/xfree86/doc/README.i740:1.3.2.1 xc/programs/Xserver/hw/xfree86/doc/README.i740:1.3.2.2
+--- xc/programs/Xserver/hw/xfree86/doc/README.i740:1.3.2.1 Fri Sep 17 15:38:19 2004
++++ xc/programs/Xserver/hw/xfree86/doc/README.i740 Tue Feb 8 00:44:27 2005
+@@ -167,7 +167,7 @@
+
+ o Daryll Strauss <daryll@precisioninsight.com>
+
+-The X11R6.8.1 version of this driver originally came from XFree86 4.4 rc2.
++The X11R6.8.2 version of this driver originally came from XFree86 4.4 rc2.
+
+ The XFree86 version of this driver was donated to The XFree86 Project by:
+
+@@ -178,4 +178,4 @@
+ http://www.precisioninsight.com
+
+
+-$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.i740,v 1.3.2.1 2004/09/17 15:38:19 kem Exp $
++$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.i740,v 1.3.2.2 2005/02/08 00:44:27 kem Exp $
+Index: xc/programs/Xserver/hw/xfree86/doc/README.i810
+diff -u xc/programs/Xserver/hw/xfree86/doc/README.i810:1.3.2.1 xc/programs/Xserver/hw/xfree86/doc/README.i810:1.3.2.2
+--- xc/programs/Xserver/hw/xfree86/doc/README.i810:1.3.2.1 Fri Sep 17 15:38:19 2004
++++ xc/programs/Xserver/hw/xfree86/doc/README.i810 Tue Feb 8 00:44:27 2005
+@@ -105,7 +105,7 @@
+
+ o Keith Whitwell
+
+-The X11R6.8.1 version of this driver originally came from XFree86 4.4 rc2.
++The X11R6.8.2 version of this driver originally came from XFree86 4.4 rc2.
+
+ The XFree86 version of this driver was donated to The XFree86 Project by:
+
+@@ -118,4 +118,4 @@
+ Generated from XFree86: xc/programs/Xserver/hw/xfree86/doc/sgml/i810.sgml,v 1.4 dawes Exp $
+
+
+-$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.i810,v 1.3.2.1 2004/09/17 15:38:19 kem Exp $
++$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.i810,v 1.3.2.2 2005/02/08 00:44:27 kem Exp $
+Index: xc/programs/Xserver/hw/xfree86/doc/README.mouse
+diff -u xc/programs/Xserver/hw/xfree86/doc/README.mouse:1.4.2.1 xc/programs/Xserver/hw/xfree86/doc/README.mouse:1.4.2.2
+--- xc/programs/Xserver/hw/xfree86/doc/README.mouse:1.4.2.1 Fri Sep 17 15:38:19 2004
++++ xc/programs/Xserver/hw/xfree86/doc/README.mouse Tue Feb 8 00:44:27 2005
+@@ -1,4 +1,4 @@
+- Mouse Support in X11R6.8.1
++ Mouse Support in X11R6.8.2
+
+ Kazutaka Yokota
+
+@@ -6,7 +6,7 @@
+
+ 1. Introduction
+
+-This document describes mouse support in X.org Foundation's X11R6.8.1 server.
++This document describes mouse support in X.org Foundation's X11R6.8.2 server.
+
+ Mouse configuration has often been mysterious task for novice users. How-
+ ever, once you learn several basics, it is straightforward to write the mouse
+@@ -66,7 +66,7 @@
+ find an appropriate adapter with which you can connect the PS/2 mouse to a
+ serial port or visa versa.
+
+-X11R6.8.1 supports the mouse with a wheel, a roller or a knob. Its action is
++X11R6.8.2 supports the mouse with a wheel, a roller or a knob. Its action is
+ detected as the Z (third) axis motion of the mouse. As the X server or
+ clients normally do not use the Z axis movement of the pointing device, a
+ configuration option, "ZAxisMapping", is provided to assign the Z axis move-
+@@ -101,7 +101,7 @@
+ SP: support is available in a different form
+
+ *1 Refer to the following sections for details.
+- *2 X11R6.8.1/OS2 will support any type of mouse that the OS supports,
++ *2 X11R6.8.2/OS2 will support any type of mouse that the OS supports,
+ whether it is serial, bus mouse, or PnP type.
+
+ 3.2 BSD/OS
+@@ -203,10 +203,10 @@
+
+ 3.12 OS/2
+
+-X11R6.8.1/OS2 always uses the native mouse driver of the operating system and
++X11R6.8.2/OS2 always uses the native mouse driver of the operating system and
+ will support any type of pointer that the OS supports, whether it is serial,
+ bus mouse, or PnP type. If the mouse works under Presentation Manager, it
+-will also work under X11R6.8.1/OS2.
++will also work under X11R6.8.2/OS2.
+
+ Always specify "OSMouse" as the protocol type.
+
+@@ -435,7 +435,7 @@
+ server.
+
+ NOTE #1: horizontal movement may not always be detected by the current ver-
+-sion of the X11R6.8.1 X servers, because there appears to be no accepted
++sion of the X11R6.8.2 X servers, because there appears to be no accepted
+ standard as to how the horizontal direction is encoded in mouse data.
+
+ NOTE #2: Some mice think left is the negative horizontal direction, others
+@@ -989,4 +989,4 @@
+ EndSection
+
+
+-$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.mouse,v 1.4.2.1 2004/09/17 15:38:19 kem Exp $
++$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.mouse,v 1.4.2.2 2005/02/08 00:44:27 kem Exp $
+Index: xc/programs/Xserver/hw/xfree86/doc/README.r128
+diff -u xc/programs/Xserver/hw/xfree86/doc/README.r128:1.3.2.1 xc/programs/Xserver/hw/xfree86/doc/README.r128:1.3.2.2
+--- xc/programs/Xserver/hw/xfree86/doc/README.r128:1.3.2.1 Fri Sep 17 15:38:19 2004
++++ xc/programs/Xserver/hw/xfree86/doc/README.r128 Tue Feb 8 00:44:27 2005
+@@ -78,7 +78,7 @@
+
+ 8. Authors
+
+-The X11R6.8.1 driver was originally part of XFree86 4.4 rc2.
++The X11R6.8.2 driver was originally part of XFree86 4.4 rc2.
+
+ The XFree86 4 driver was ported from XFree86 3.3.x and enhanced by:
+
+@@ -119,4 +119,4 @@
+ http://www.suse.com
+
+
+-$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.r128,v 1.3.2.1 2004/09/17 15:38:19 kem Exp $
++$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.r128,v 1.3.2.2 2005/02/08 00:44:27 kem Exp $
+Index: xc/programs/Xserver/hw/xfree86/doc/README.rendition
+diff -u xc/programs/Xserver/hw/xfree86/doc/README.rendition:1.3.2.1 xc/programs/Xserver/hw/xfree86/doc/README.rendition:1.3.2.2
+--- xc/programs/Xserver/hw/xfree86/doc/README.rendition:1.3.2.1 Fri Sep 17 15:38:19 2004
++++ xc/programs/Xserver/hw/xfree86/doc/README.rendition Tue Feb 8 00:44:27 2005
+@@ -107,7 +107,7 @@
+ "ShadowFB" and automatically enable it. It also disables the
+ acceleration. The option is not activated by default.
+
+-6. News in the X11R6.8.1 release
++6. News in the X11R6.8.2 release
+
+ This driver was originally part of the XFree86 4.4 rc2 release.
+
+@@ -148,4 +148,4 @@
+ eral bugs left to clear out before if is stable for general use.
+
+
+-$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.rendition,v 1.3.2.1 2004/09/17 15:38:19 kem Exp $
++$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.rendition,v 1.3.2.2 2005/02/08 00:44:27 kem Exp $
+Index: xc/programs/Xserver/hw/xfree86/doc/README.s3virge
+diff -u xc/programs/Xserver/hw/xfree86/doc/README.s3virge:1.3.2.1 xc/programs/Xserver/hw/xfree86/doc/README.s3virge:1.3.2.2
+--- xc/programs/Xserver/hw/xfree86/doc/README.s3virge:1.3.2.1 Fri Sep 17 15:38:19 2004
++++ xc/programs/Xserver/hw/xfree86/doc/README.s3virge Tue Feb 8 00:44:27 2005
+@@ -6,7 +6,7 @@
+
+ 1. Supported hardware
+
+-The s3virge driver in X11R6.8.1 supports the S3 ViRGE, ViRGE DX, GX, GX2, MX,
++The s3virge driver in X11R6.8.2 supports the S3 ViRGE, ViRGE DX, GX, GX2, MX,
+ MX+, and VX chipsets. It also supports Trio3D and Trio3D/2x chips. A major-
+ ity of testing is done on ViRGE DX chips, making them the most stable to
+ date. This release has added support for doublescan modes on DX.
+@@ -45,7 +45,7 @@
+
+ 5. Support:
+
+-For support with X11R6.8.1 video drivers please refer to our web site at
++For support with X11R6.8.2 video drivers please refer to our web site at
+ wiki.x.org <URL:http://wiki.x.org>.
+
+ 6. Authors
+@@ -61,4 +61,4 @@
+ o Kevin Brosius <cobra@compuserve.com>
+
+
+-$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.s3virge,v 1.3.2.1 2004/09/17 15:38:19 kem Exp $
++$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/README.s3virge,v 1.3.2.2 2005/02/08 00:44:27 kem Exp $
+Index: xc/programs/Xserver/hw/xfree86/doc/RELNOTES
+diff -u xc/programs/Xserver/hw/xfree86/doc/RELNOTES:1.5.2.1 xc/programs/Xserver/hw/xfree86/doc/RELNOTES:1.5.2.3
+--- xc/programs/Xserver/hw/xfree86/doc/RELNOTES:1.5.2.1 Fri Sep 17 15:38:19 2004
++++ xc/programs/Xserver/hw/xfree86/doc/RELNOTES Tue Feb 8 23:54:04 2005
+@@ -1,19 +1,19 @@
+- Release Notes for X11R6.8.1
++ Release Notes for X11R6.8.2
+
+ The X.Org Foundation
+ The XFree86 Project, Inc.
+
+- 17 September 2004
++ 9 February 2005
+
+ Abstract
+
+ These release notes contains information about features and their
+- status in the X.Org Foundation X11R6.8.1 release. It is based on
++ status in the X.Org Foundation X11R6.8.2 release. It is based on
+ the XFree86 4.4RC2 RELNOTES document published by The XFree86[tm]
+ Project, Inc. There are significant updates and differences in the
+ X.Org release as noted below.
+
+-1. Introduction to the X11R6.8.1 Release
++1. Introduction to the X11R6.8.2 Release
+
+ The release numbering is based on the original MIT X numbering system. X11
+ refers to the version of the network protocol that the X Window system is
+@@ -37,7 +37,7 @@
+ top.org using the xorg product, and discussions on this server take place on
+ <xorg@freedesktop.org>.
+
+-X11R6.8.1 comes with a graphical configuration tool called "xorgcfg", which
++X11R6.8.2 comes with a graphical configuration tool called "xorgcfg", which
+ also has a text mode interface and can be used to create an initial configu-
+ ration file. It can also be used to customise existing configurations.
+
+@@ -63,20 +63,21 @@
+ quick read through the Installation Document. It may save you some time and
+ also help you figure out which of the binary releases you need.
+
+-The next section describes what is new in the latest version (6.8.1) compared
+-with the previous full release (6.8). The other sections below describe some
+-of the new features and changes between 3.3.x and 4.0. There are lots of new
+-features, and we definitely don't have enough space to cover them all here.
++The next section describes what is new in the latest version (6.8.2) compared
++with the previous full release (6.8.1). The other sections below describe
++some of the new features and changes between 3.3.x and 4.0. There are lots
++of new features, and we definitely don't have enough space to cover them all
++here.
+
+-2. Summary of new features in X11R6.8.1
++2. Summary of new features in X11R6.8.2
+
+-This is a sampling of the new features in X11R6.8.1. A more complete list of
++This is a sampling of the new features in X11R6.8.2. A more complete list of
+ changes can be found in the ChangeLog file that is part of the X source tree.
+
+ o Freetype was updated to version 2.1.8. But installing freetype from X
+ distributions would often or usually result in the replacement or use of
+ "stale" versions of freetype. On Linux, FreeBSD, Solaris 10, and SCO5,
+- therefore, X11R6.8.1 will by default use the version of freetype2 that
++ therefore, X11R6.8.2 will by default use the version of freetype2 that
+ is installed on the system. If your system doesn't come with an
+ installed freetype2 and you wish to use the version supplied with this
+ distribution, please add:
+@@ -85,10 +86,10 @@
+
+ to config/cf/host.def.
+
+- o The XTT font module and FreeType1 have been retired because FreeType2
++ o The XTT font module and FreeType1 have been retired because FreeType2
+ subsumes their functionality
+
+- o Retire old PS Type1 font rasterizer (except for CID font usage) since
++ o Retire old PS Type1 font rasterizer (except for CID font usage) since
+ the FreeType2 rasterizer now handles PS Type1 (*.pfa, *.pfb)
+
+ o Render implementation fixes
+@@ -97,6 +98,8 @@
+
+ o Updated SiS driver
+
++ o Updated Nvidia driver (opensource version)
++
+ o Render acceleration for ATI's R100 and R200-series cards
+
+ o Substantial speedups in the software implementation of the render exten-
+@@ -113,11 +116,12 @@
+ o Software mouse cursor is now based on the Damage extension
+
+ o A new keyboard driver is enabled by default. The old driver is disabled
+- unless explicitly compiled in by defining the macro USE_DEPRECATED_KEY-
+- BOARD_DRIVER
++ unless explicitly compiled in by defining the macro |USE_DEPRECATED_KEY-
++ BOARD_DRIVER|.
+
+- o Extensions can be enabled/disabled from the configuration file and from
+- the command line
++ o All extensions (except Xserver-specific extensions "DMX" and "XpExten-
++ sion") can now be enabled/disabled from the configuration file and from
++ the command line.
+
+ o Mac OS X updates:
+
+@@ -134,9 +138,11 @@
+
+ o Fixed some GLX rendering problems on Mac OS X 10.2 and earlier
+
++ o Updated xterm version
++
+ 2.1 New X extensions
+
+-X11R6.8.1 includes four new extensions:
++X11R6.8.2 includes four new extensions:
+
+ XFixes
+ The XFixes extension is a collection of improvements for defi-
+@@ -163,7 +169,7 @@
+ core protocol and the RENDER extension, the compositing manager
+ can create special effects, such as translucennt windows.
+
+- The Composite extension is considered experimental in X11R6.8.1
++ The Composite extension is considered experimental in X11R6.8.2
+ and is turned off by default.
+
+ XEvIE (X Event Interception Extension) (experimental)
+@@ -173,7 +179,7 @@
+ (i.e., interested clients). This feature is required by the GNOME
+ accessibility project.
+
+- The XEvIE extension is considered experimental in X11R6.8.1 and
++ The XEvIE extension is considered experimental in X11R6.8.2 and
+ is turned off by default.
+
+ As noted above, some extensions are disabled by default. They can be enabled
+@@ -189,7 +195,7 @@
+
+ 2.2 Distributed Multihead X (DMX)
+
+-X11R6.8.1 includes a new X server, called Xdmx, that allows users to create a
++X11R6.8.2 includes a new X server, called Xdmx, that allows users to create a
+ single unified desktop from multiple running X servers. It works by creating
+ a local screen on each of these running X servers, which can be distributed
+ across a network, and then presents that set of screens to the user. When
+@@ -201,8 +207,9 @@
+
+ 2.3 Xprint updates
+
+- o Integrated various fixes from xprint.mozdev.org (more or less the whole
+- codebase has been merged)
++ o Integrated various fixes from xprint.mozdev.org
++ <URL:http://xprint.mozdev.org> (more or less the whole codebase has been
++ merged)
+
+ o Integrated various fixes from Sun Microsystems
+
+@@ -211,18 +218,20 @@
+ o New set of maintenance tools for the Xprint server (xplsprinters, xpre-
+ hashprinterlist, etc.)
+
+- o Added new XprintUtils client library to make the usage off Xprint easier
++ o Added new XprintUtils client library to make the usage of Xprint easier
+
+ o Various other features and fixes integrated
+
+ o Athena toolkit now has print support (XawPrintShell) which is included
+- in a separate version of that library (Xaw8)
++ in a new version of that library (Xaw8)
+
+- o Various applications/tools like xman, xedit, xlogo, etc. now have print
+- support
++ o Various applications/tools like xman, xedit, xlogo, xlsfonts, etc. now
++ have print support
+
+ 2.4 Updated Mesa and DRI from upstream sources
+
++ o Mesa version has been updated to 6.2.1 (in X11R6.8.2)
++
+ o More OpenGL extensions
+
+ o MergedFB for Radeon (Dualhead DRI support on these cards)
+@@ -242,23 +251,7 @@
+
+ 2.5 Video driver enhancements
+
+- o SiS driver updates include
+-
+- o output device hotplugging
+-
+- o lots of fixes for 661, 741, 760
+-
+- o extended interface for SiSCtrl?
+-
+- o extended LCD handling (allow more modes)
+-
+- o HDTV support (480p, 480i, 720p. 1080i; 315/330 series)
+-
+- o Added video blitter Xv adapter (315/330 series)
+-
+- o extended RENDER acceleration
+-
+- o Radeon driver updates:
++ o ATI Radeon driver updates:
+
+ o Merged Framebuffer support (dualhead with DRI)
+
+@@ -277,13 +270,9 @@
+
+ o Many other small fixes
+
+- o Neomagic driver updates
+-
+- o Support for Xv on pre-nm2160 chips
+-
+- o Pseudocolor overlay mode
++ o Chips driver update
+
+- o Improved support for lowres double scan modes
++ o Improved BE support
+
+ o MGA driver updates
+
+@@ -291,6 +280,14 @@
+
+ o Updated 3D driver
+
++ o Neomagic driver updates
++
++ o Support for Xv on pre-nm2160 chips
++
++ o Pseudocolor overlay mode (=PseudoColor emulation)
++
++ o Improved support for lowres double scan modes
++
+ o i810 driver updates
+
+ o Dualhead support (i830+)
+@@ -299,17 +296,33 @@
+
+ o New 3D driver (i830+)
+
++ o i810 driver is now supported for AMD64
++
++ o S3 driver updates
++
++ o Support for additional IBM RAMDACS
++
+ o Savage driver updates
+
+ o Pseudocolor overlay mode
+
+- o S3 driver updates
++ o SiS driver updates include
+
+- o Support for additional IBM RAMDACS
++ o output device hotplugging
+
+- o Chips driver update
++ o lots of fixes for 661, 741, 760
+
+- o Improved BE support
++ o extended interface for SiSCtrl?
++
++ o extended LCD handling (allow more modes)
++
++ o HDTV support (480p, 480i, 720p. 1080i; 315/330 series)
++
++ o Added video blitter Xv adapter (315/330 series)
++
++ o extended RENDER acceleration
++
++ o SiS driver now supported on AMD64
+
+ o New Voodoo driver (Alan Cox)
+
+@@ -320,7 +333,7 @@
+
+ 3.1 Video Drivers
+
+-X11R6.8.1 includes the following video drivers:
++X11R6.8.2 includes the following video drivers:
+
+ +--------------+--------------------------+---------------------------------------------+
+ |Driver Name | Description | Further Information |
+@@ -376,48 +389,63 @@
+ Darwin/Mac OS X uses IOKit drivers and does not use the module loader drivers
+ listed above. Further information can be found in README.Darwin.
+
+-X11R6.8.1 includes the following input drivers:
++X11R6.8.2 includes the following print drivers:
++
++3.2 Print Drivers
++
+++------------+----------------------------------------+---------------------+
++|Driver Name | Description | Further Information |
+++------------+----------------------------------------+---------------------+
++|PostScript | PostScript driver | |
++|PCL | PCL color driver | |
++|PCL-MONO | PCL monocrome driver | |
++|RASTER | Monocrome raster driver (XWD, PS, PCL) | |
+++------------+----------------------------------------+---------------------+
++
++Drivers marked with (*) are available for Linux only.
++
++X11R6.8.2 includes the following input drivers:
+
+-3.2 Input Drivers
++3.3 Input Drivers
+
+- +------------+----------------------------------+---------------------+
+- |Driver Name | Description | Further Information |
+- +------------+----------------------------------+---------------------+
+- |aiptek(*) | Aiptek USB tablet | aiptek(4) |
+- |calcomp | Calcomp | |
+- |citron | Citron | citron(4) |
+- |digitaledge | DigitalEdge | |
+- |dmc | DMC | dmc(4) |
+- |dynapro | Dynapro | |
+- |elographics | EloGraphics | |
+- |fpit | Fujitsu Stylistic Tablet PCs | fpit(4) |
+- |hyperpen | Aiptek HyperPen 6000 | |
+- |js_x | JamStudio pentablet | js_x(4) |
+- |kbd | generic keyboards (alternate) | kbd(4) |
+- |keyboard | generic keyboards | keyboard(4) |
+- |microtouch | MicroTouch | |
+- |mouse | most mouse devices | mouse(4) |
+- |mutouch | MicroTouch | |
+- |palmax | Palmax PD1000/PD1100 | palmax(4) |
+- |penmount | PenMount | |
+- |spaceorb | SpaceOrb | |
+- |summa | SummaGraphics | |
+- |tek4957 | Tektronix 4957 tablet | tek4957(4) |
+- |ur98(*) | Union Reality UR-F98 headtracker | ur98(4) |
+- |void | dummy device | void(4) |
+- |wacom | Wacom tablets | wacom(4) |
+- +------------+----------------------------------+---------------------+
++ +------------+-------------------------------------+---------------------+
++ |Driver Name | Description | Further Information |
++ +------------+-------------------------------------+---------------------+
++ |aiptek(*) | Aiptek USB tablet | aiptek(4) |
++ |calcomp | Calcomp | |
++ |citron | Citron | citron(4) |
++ |digitaledge | DigitalEdge | |
++ |dmc | DMC | dmc(4) |
++ |dynapro | Dynapro | |
++ |elographics | EloGraphics | |
++ |fpit | Fujitsu Stylistic Tablet PCs | fpit(4) |
++ |hyperpen | Aiptek HyperPen 6000 | |
++ |js_x | JamStudio pentablet | js_x(4) |
++ |kbd | generic keyboards (loadable module) | kbd(4) |
++ |keyboard | generic keyboards (builtin driver) | keyboard(4) |
++ |microtouch | MicroTouch | |
++ |mouse | most mouse devices | mouse(4) |
++ |mutouch | MicroTouch | |
++ |palmax | Palmax PD1000/PD1100 | palmax(4) |
++ |penmount | PenMount | |
++ |spaceorb | SpaceOrb | |
++ |summa | SummaGraphics | |
++ |tek4957 | Tektronix 4957 tablet | tek4957(4) |
++ |ur98(*) | Union Reality UR-F98 headtracker | ur98(4) |
++ |void | dummy device | void(4) |
++ |wacom | Wacom tablets | wacom(4) |
++ +------------+-------------------------------------+---------------------+
+
+ Drivers marked with (*) are available for Linux only.
+
+-4. Overview of X11R6.8.1
++4. Overview of X11R6.8.2
+
+-On most platforms, X11R6.8.1 has a single X server binary called Xorg. This
++On most platforms, X11R6.8.2 has a single X server binary called Xorg. This
+ binary can either have one or more video and input drivers linked in stati-
+ cally, or more usually, dynamically, and in that manner load the video
+ drivers, input drivers, and other modules that are needed.
+
+-X11R6.8.1 has X server support for most UNIX® and UNIX-like operating systems
++X11R6.8.2 has X server support for most UNIX® and UNIX-like operating systems
+ on Intel/x86 platforms, plus support for Linux and some BSD OSs on Alpha,
+ PowerPC, IA-64, AMD64, Sparc, and Mips platforms, and for Darwin on PowerPC.
+
+@@ -433,7 +461,7 @@
+
+ A main benefit of this, is that when modules are updated, they do not need to
+ be recompiled for every different operating system. The loader in version
+-6.8.1 has support for Intel (x86), Alpha and PowerPC platforms. It also has
++6.8.2 has support for Intel (x86), Alpha and PowerPC platforms. It also has
+ preliminary support for Sparc platforms.
+
+ The X server makes use of modules for video drivers, X server extensions,
+@@ -476,13 +504,13 @@
+ 4.4 XAA
+
+ The XFree86 Acceleration Architecture (XAA) was completely rewritten from
+-scratch for XFree86 4.x and is used in X11R6.8.1. Most drivers implement
++scratch for XFree86 4.x and is used in X11R6.8.2. Most drivers implement
+ acceleration by making use of the XAA module. The Xorg server will accept
+ modules built either for XFree86 4.4 servers or its own.
+
+ 4.5 Multi-head
+
+-Some multi-head configurations are supported in X11R6.8.1, primarily with
++Some multi-head configurations are supported in X11R6.8.2, primarily with
+ multiple PCI/AGP cards.
+
+ One of the main problems is with drivers not sufficiently initialising cards
+@@ -505,7 +533,7 @@
+ Xinerama is not enabled by default, and can be enabled with the +xinerama
+ command line option for the X server.
+
+-Xinerama was included with X11R6.4. The version included in X11R6.8.1 was
++Xinerama was included with X11R6.4. The version included in X11R6.8.2 was
+ completely rewritten for improved performance and correctness.
+
+ Known problems:
+@@ -517,7 +545,7 @@
+
+ 4.7 DGA version 2
+
+-DGA 2.0 is included in 6.8.1. Documentation for the client libraries can be
++DGA 2.0 is included in 6.8.2. Documentation for the client libraries can be
+ found in the XDGA(3) man page. A good degree of backwards compatibility with
+ version 1.0 is provided.
+
+@@ -554,11 +582,11 @@
+
+ 4.10 XVideo Extension (Xv)
+
+-The XVideo extension is supported in X11R6.7.x. An XvQueryPortAttributes
+-function has been added as well as support for XvImages. XvImages are XIm-
+-ages in alternate color spaces such as YUV and can be passed to the server
+-through shared memory segments. This allows clients to display YUV data with
+-high quality hardware scaling and filtering.
++The XVideo extension is supported in X11R6.7.x and newer releases. An
++XvQueryPortAttributes function has been added as well as support for XvIm-
++ages. XvImages are XImages in alternate color spaces such as YUV and can be
++passed to the server through shared memory segments. This allows clients to
++display YUV data with high quality hardware scaling and filtering.
+
+ 4.11 X Rendering Extension (Render)
+
+@@ -589,17 +617,18 @@
+ To allow a graceful transition for applications moving from core text render-
+ ing to the Render extension, Xft can use either the core rendering requests
+ or the Render extension for text. See the section on FreeType support in Xft
+-for instructions on configuring X11R6.8.1 to use an existing FreeType instal-
++for instructions on configuring X11R6.8.2 to use an existing FreeType instal-
+ lation.
+
+ The Xft library uses configuration files, /etc/fonts/fonts.conf and
+ /etc/fonts/local.conf, which contains information about which directories
+ contain font files and also provides a sophisticated font aliasing mechanism.
+-Documentation for that file is included in the Xft(3) man page.
++Documentation for that file is included in the Xft(3), fontconfig(3) and
++fonts.conf(4) man pages.
+
+ 4.11.2 Application Support For Anti-Aliased Text
+
+-Only four applications have been modified in X11R6.8.1 to work with the Ren-
++Only four applications have been modified in X11R6.8.2 to work with the Ren-
+ der extension and the Xft and FreeType libraries to provide anti-aliased
+ text: xterm, xditview, x11perf and xclock. Migration of other applications
+ may occur in future releases.
+@@ -645,32 +674,32 @@
+
+ o Please refer to xedit(1) for more details.
+
+- o XPrint support.
++ o Support for printing via Xprint.
+
+ 4.14 Font support
+
+-Details about the font support in X11R6.8.1.x can be found in the
+-README.fonts document.
++Details about the font support in X11R6.8.x can be found in the README.fonts
++document.
+
+ 4.15 TrueType support
+
+ X11R6.7 came with two TrueType backends. The functionality from the `X-True-
+-Type' backend has been integrated into the `FreeType' backend which is
+-designed to transparently support all of the functionality from the `X-True-
+-Type' backend with the exception of the font encoding libraries; the
+-`FreeType' backend uses only the fontenc-based encoding system .
++Type' (="XTT") backend has been integrated into the `FreeType' backend which
++is designed to transparently support all of the functionality from the `X-
++TrueType' backend with the exception of the font encoding libraries; the
++`FreeType' backend uses only the fontenc-based encoding system.
+
+ 4.16 CID font support
+
+-Support for CID-keyed fonts is included in X11R6.8.1 The CID-keyed font for-
++Support for CID-keyed fonts is included in X11R6.8.2 The CID-keyed font for-
+ mat was designed by Adobe Systems <URL:http://www.adobe.com> for fonts with
+-large character sets. The CID-keyed font support in X11R6.8.1 was donated by
++large character sets. The CID-keyed font support in X11R6.8.2 was donated by
+ SGI <URL:http://www.sgi.com>. See the LICENSE document for a copy of the CID
+ Font Code Public License.
+
+ 4.17 Internationalisation of the scalable font backends
+
+-X11R6.8.1 has a ``fontenc'' layer to allow the scalable font backends to use
++X11R6.8.2 has a ``fontenc'' layer to allow the scalable font backends to use
+ a common method of font re-encoding. This re-encoding makes it possible to
+ uses fonts in encodings other than their their native encoding. This layer
+ is used by the Type1, Speedo and FreeType backends.
+@@ -684,7 +713,7 @@
+
+ 4.19 Unicode/ISO 10646 support
+
+-What is included in X11R6.8.1
++What is included in X11R6.8.2
+
+ o All ``-misc-fixed-*'' BDF fonts are now available in the ISO10646-1
+ encoding and cover at least the 614 characters found in ISO
+@@ -718,7 +747,7 @@
+ 4.20 Xlib Compose file support and extensions
+
+ A more flexible Compose file processing system was added to Xlib in
+-X11R6.8.1. The compose file is searched for in the following order:
++X11R6.8.2. The compose file is searched for in the following order:
+
+ 1. If the environment variable $XCOMPOSEFILE is set, its value is used as
+ the name of the Compose file.
+@@ -765,14 +794,14 @@
+
+ 4.21 Bitstream Vera fonts
+
+-X11R6.8.1 includes the Bitstream Vera family of typefaces in TrueType format.
++X11R6.8.2 includes the Bitstream Vera family of typefaces in TrueType format.
+ This family includes the ``Bitstream Vera Sans'', ``Bitstream Vera Sans
+ Mono'' and ``Bitstream Vera Serif'' in Roman and Bold varients as well as the
+ ``Bitstream Vera Sans'' and ``Bitstream Vera Sans Mono'' in Oblique and Bold
+ Oblique. These fonts include all of the glyphs needed for ISO 8859 parts 1
+ 9 and 15.
+
+-The license terms for the Vera fonts are inclued in the file COPYRIGHT.Vera>.
++The license terms for the Vera fonts are inclued in the file COPYRIGHT.Vera.
+
+ 4.22 Luxi fonts from Bigelow and Holmes
+
+@@ -801,7 +830,7 @@
+
+ 5. Miscellaneous
+
+-This section describes other items of note for the X11R6.8.1 release.
++This section describes other items of note for the X11R6.8.2 release.
+
+ 5.1 Legacy keyboard driver phase-out
+
+@@ -862,22 +891,28 @@
+
+ 6. Attributions/Acknowledgements/Credits
+
+-This section lists the credits for the X11R6.8.1 release. For a more
++This section lists the credits for the X11R6.8.2 release. For a more
+ detailed breakdown, refer to the ChangeLog file in the X.Org source tree, the
+ ChangeLog's in or the 'cvs log' information for individual source files."
+
+- These people contributed in some way to X11R6.8.1
+- Paul Anderson, Eric Anholt, Daniel Berrange, Russ Blaine, Ryan
+- Breen, Alan Coopersmith, Michel Daenzer, David Dawes, Alex
+- Deucher, Stefan Dirsch, Egbert Eich, Rik Faith, Jim Gettys,
+- Alexander Gottwald, Mike A. Harris, John Harper, John Heasley,
+- Matthieu Herrb, Alan Hourihane, Kristian Høsberg, Harold L. Hunt
+- II, Adam Jackson, Deron Johnson, Ivan Kokshaysky, Stuart Kreit-
+- man, Peter Kunzman, Nolan Leake, Ryan Lortie, Andreas Luik, Tor-
+- rey T. Lyons, Roland Mainz, Guy Martin, Kevin E. Martin, Keith
+- Packard, Greg Parker, Aaron Plattner, Søren Sandmann, Ty Sarna,
+- Yu Shao, Bryan Stine, Owen Taylor, Travis Tilley, Ryan Underwood,
+- Ronny Vindenes, Chisato Yamauchi
++ These people contributed in some way to X11R6.8.2
++ Paul Anderson, Eric Anholt, Dave Airlie, Donnie Berkholz, Daniel
++ Berrange, Thomas Biege, Russ Blaine, Ryan Breen, Alan Cooper-
++ smith, Jay Cotton, Michel Daenzer, David Dawes, Kevin DeKorte,
++ Alex Deucher, Stefan Dirsch, Egbert Eich, Rik Faith, Jim Gettys,
++ Giuseppe Ghibò, Thomas Gilg, Alexander Gottwald, Mike A. Harris,
++ John Harper, John Heasley, Jeremy Huddleston, Matthieu Herrb,
++ Alan Hourihane, Jay Hobson, Matthias Hopf, Kristian Høsberg,
++ Harold L. Hunt II, Adam Jackson, Daniel Jacobowitz, Deron John-
++ son, Masaki Katakai, Stephen Kennedy, Ivan Kokshaysky, Stuart
++ Kreitman, Peter Kunzman, Julien Lafon, Nolan Leake, Ryan Lortie,
++ Andreas Luik, Torrey T. Lyons, Roland Mainz, Guy Martin, Kevin E.
++ Martin, Dan McNichol, Dagfinn Ilmari Mannsaker, Simon Montagu,
++ Keith Packard, Greg Parker, Drew Parsons, Aaron Plattner, Branden
++ Robinson, Søren Sandmann, Ty Sarna, Yu Shao, Gustavo Noronha
++ Silva, Bryan Stine, Owen Taylor, Travis Tilley, Ryan Underwood,
++ Ronny Vindenes, Chisato Yamauchi, Mark Vojkovich, Tim Yamin, Hui
++ Yu
+
+ The X Window System has been a collaborative effort from its inception. Our
+ apologies for anyone or organization inadvertently overlooked. Many individ-
+@@ -886,105 +921,103 @@
+
+ This product includes software developed by:
+ Paul Anderson, Michael Bax, Jehan Bing, Peter Breitenlohner, Alan
+- Coopersmith, Egbert Eich, John Dennis, Fabrizio Gennari, Jim Get-
+- tys, Alexander Gottwald, Ralf Habacker Mike Harris, Mattheiu
+- Herrb Alan Hourihane, Harold L Hunt II, Elliot Lee, Jeremy Katz,
+- Kaleb Keithley, Stuart Kreitman, Andreas Luik, Torrey Lyons,
+- Roland Mainz, Kevin E. Martin, Takuma Murakami, Kensuke Mat-
+- suzaki, Keith Packard, Ivan Pascal, Earle F. Philhower III, Ben-
+- jamin Rienfenstahl, Leon Shiman, Toshimitsu Tanaka, Nicholas
+- Wourms.
+-
+- 2d3d Inc., Aaron Plattner, Adam de Boor, Adam Jackson, Adobe Sys-
+- tems Inc., After X-TT Project, AGE Logic Inc., Alan Coopersmith,
+- Alan Cox, Alan Hourihane, Alexander Gottwald, Alex Deucher,
+- Andreas Luik, Andreas Monitzer, Andrew C Aitchison, Andy Ritger,
+- Ani Joshi, Anton Zioviev, Apollo Computer Inc., Apple Computer
+- Inc., Ares Software Corp., AT&T Inc., ATI Technologies Inc., Ben-
+- jamin Rienfenstahl, Bigelow and Holmes, Bill Reynolds, Bitstream
+- Inc., Bitstream, Inc, Brian Fundakowski Feldman, Brian Goines,
+- Brian Paul, Bruno Haible, Bryan Stine, Charles Murcko, Chen
+- Xiangyang, Chisato Yamauchi, Chris Constello, Christian Zietz,
+- Cognition Corp., Compaq Computer Corporation, Concurrent Computer
+- Corporation, Conectiva S.A., Corin Anderson, Craig Struble, Dae-
+- woo Electronics Co. Ltd., Dale Schumacher, Damien Miller, Daniel
+- Berrange, Daniel Stone, Daniver Limited, Daryll Strauss, Data
+- General Corporation, David Bateman, David Dawes, David E. Wexel-
+- blat, David Holland, David J. McKay, David McCullough, David Mos-
+- berger-Tang, David S. Miller, Davor Matic, Deron Johnson, Digital
+- Equipment Corporation, Dirk Hohndel, Doug Anson, Earle F. Phil-
+- hower III, Edouard TISSERANT, Eduardo Horvath, Egbert Eich,
+- Elliot Lee, Eric Anholt, Eric Fortune, Eric Sunshine, Erik For-
+- tune, Erik Nygren, Evans & Sutherland Computer Corporation, Fabio
+- Massimo Di Nitto Fabrizio Gennari, Finn Thoegersen, Frederic Lep-
+- ied, Free Software Foundation Inc., Fujitsu Limited, Fujitsu Open
+- Systems Solutions Inc., Fuji Xerox Co. Ltd., Geert Uytterhoeven,
+- Gerrit Jan Akkerman, Gerry Toll, Glenn G. Lai, GNOME Foundation,
+- Go Watanabe, Gregory Mokhin, Greg Parker, GROUPE BULL, Guy Mar-
+- tin, Hans Oey, Harald Koenig, Harm Hanemaayer, Harold L Hunt II,
+- Harry Langenbacher, Henry A. Worth, Hewlett-Packard Company,
+- Hitachi Ltd, Holger Veit, Howard Greenwell, Hummingbird Communi-
+- cations Ltd., IBM Corporation, Intel Corporation, INTERACTIVE
+- Systems Corporation, International Business Machines Corp., Itai
+- Nahshon, Ivan Kokshaysky, Ivan Pascal, Jakub Jelinek, James Tsil-
+- las, Jason Bacon, Jean-loup Gailly, Jeff Kirk, Jeffrey Hsu, Jehan
+- Bing, Jeremy Katz, Jim Gettys, Jim Tsillas, J. Kean Johnston,
+- John Dennis, John Harper, John Heasley, Jon Block, Jon Tombs,
+- Jorge Delgado, Joseph Friedman, Joseph V. Moss, Juliusz
+- Chroboczek, Jyunji Takagi, Kaleb Keithley, Kaleb S. Keithley,
+- Kazushi (Jam) Marukawa, Kazuyuki (ikko-) Okamoto, Kean Johnston.
+- Keith Packard, Keith Packard, Keith Whitwell, Kensuke Matsuzaki,
+- Kristian Høgsberg, Larry Wall, Lawrence Berkeley Laboratory,
+- Lennart Augustsson, Leon Shiman, Lexmark International Inc.,
+- Linus Torvalds, Luc Verhaegen, Machine Vision Holdings Inc., Man-
+- fred Brands, Marc Aurele La France Mark Adler, Mark J. Kilgard,
+- Mark Leisher, Mark Smulders, Mark Vojkovich, Massachusetts Insti-
+- tute Of Technology, Matrox Graphics, Mattheiu Herrb Matthew
+- Grossman, Matthieu Herrb, Metro Link Inc., Michael Bax, Michael
+- H. Schimek, Michael P. Marking, Michael Schimek, Michael Smith,
+- Michel Daenzer, Mike A. Harris, Mike Harris, Ming Yu, MIPS Com-
+- puter Systems Inc., National Semiconductor, NCR Corporation Inc.,
+- Netscape Communications Corporation, Network Computing Devices
+- Inc., Nicholas Wourms, Noah Levitt, Nolan Leake, Novell Inc.,
+- Nozomi YTOW, NTT Software Corporation, Number Nine Computer
+- Corp., Number Nine Visual Technologies, NVIDIA Corp., Oivier
+- Danet, Oki Technosystems Laboratory Inc., OMRON Corporation, Open
+- Software Foundation, Orest Zborowski, Owen Taylor, Pablo Saratx-
+- aga, Panacea Inc., Panagiotis Tsirigotis, Paolo Severini, Pascal
+- Haible, Patrick Lecoanet, Patrick Lerda, Paul Anderson, Paul
+- Elliott, Peter Breitenlohner, Peter Kunzmann, Peter Trattler,
+- Philip Homburg, Precision Insight Inc., Prentice Hall, Quarter-
+- deck Office Systems, Ralf Habacker Randy Hendry, Ranier Keller,
+- Red Hat Inc., Regents of the University of California, Regis
+- Cridlig, Rene Cougnenc, Richard A. Hecker, Richard Burdick, Rich
+- Murphey, Rickard E. Faith, Rik Faith, Robert Baron, Robert
+- Chesler, Robert Millan. Robert V. Baron, Robin Cutshaw, Roland
+- Mainz, Ronny Vindenes, Russ Blaine, Ryan Breen, Ryan Lortie, Ryan
+- Underwood, S3 Graphics Inc., Sam Leffler, SciTech Software, Scott
+- Laird, Sebastien Marineau, Shigehiro Nomura, ShoGraphics Inc.,
+- Shunsuke Akiyama, Silicon Graphics Computer Systems Inc., Silicon
+- Integrated Systems Corp Inc., Silicon Motion Inc., Simon P.
+- Cooper, Snitily Graphics Consulting Services, Sony Corporation,
+- Søren Sandmann, SRI, Stanislav Brabec, Stefan Dirsch, Stephan
+- Dirsch, Stephan Lang, Steven Lang, Stuart Kreitman, Sun Microsys-
+- tems Inc., SunSoft Inc., SuSE Inc, Sven Luther, Takis Psarogian-
+- nakopoulos, Takuma Murakami, Takuya SHIOZAKI, Tektronix Inc., The
+- DOS-EMU-Development-Team, The Institute of Software Academia
+- Sinica, The NetBSD Foundation, Theo de Raadt, Theodore Ts'o, The
+- Open Group, The Open Software Foundation, The Regents of the Uni-
+- versity of California, The Santa Cruz Operation Inc., The Weather
+- Channel Inc., The X Consortium, The XFree86 Project Inc., Thomas
+- E. Dickey, Thomas G. Lane, Thomas Hellström, Thomas Mueller,
+- Thomas Roell, Thomas Thanner, Thomas Winischhofer, Thomas Wol-
+- fram, Thorsten.Ohl, Tiago Gons, Todd C. Miller, Tomohiro KUBOTA,
+- Torrey Lyons, Torrey T. Lyons, TOSHIBA Corp., Toshimitsu Tanaka,
+- Travis Tilley, Tungsten Graphics Inc., Ty Sarna, UCHIYAMA
+- Yasushi, Unicode Inc., UniSoft Group Limited, University of Utah,
+- UNIX System Laboratories Inc., URW++ GmbH, VA Linux Systems, VIA
+- Technologies Inc., Video Electronics Standard, VMware Inc., Vrije
+- Universiteit, Wittawat Yamwong, Wyse Technology Inc., X Consor-
+- tium, Xi Graphics Inc., X-Oz Technologies, X-TrueType Server Pro-
+- ject and their contributors, Yu Shao,
++ Coopersmith, Thomas Dickey, Egbert Eich, John Dennis, Fabrizio
++ Gennari, Jim Gettys, Alexander Gottwald, Ralf Habacker, Mike Har-
++ ris, Mattheiu Herrb, Alan Hourihane, Harold L Hunt II, Elliot
++ Lee, Jeremy Katz, Kaleb Keithley, Stuart Kreitman, Andreas Luik,
++ Torrey Lyons, Roland Mainz, Kevin E. Martin, Takuma Murakami,
++ Kensuke Matsuzaki, Keith Packard, Ivan Pascal, Earle F. Philhower
++ III, Benjamin Rienfenstahl, Leon Shiman, Toshimitsu Tanaka,
++ Nicholas Wourms, 2d3d Inc., Aaron Plattner, Adam de Boor, Adam
++ Jackson, Adobe Systems Inc., After X-TT Project, AGE Logic Inc.,
++ Alan Coopersmith, Alan Cox, Alan Hourihane, Alexander Gottwald,
++ Alex Deucher, Andreas Luik, Andreas Monitzer, Andrew C Aitchison,
++ Andy Ritger, Ani Joshi, Anton Zioviev, Apollo Computer Inc.,
++ Apple Computer Inc., Ares Software Corp., AT&T Inc., ATI Tech-
++ nologies Inc., Benjamin Rienfenstahl, Bigelow and Holmes, Bill
++ Reynolds, Bitstream Inc., Bitstream, Inc, Brian Fundakowski Feld-
++ man, Brian Goines, Brian Paul, Bruno Haible, Bryan Stine, Charles
++ Murcko, Chen Xiangyang, Chisato Yamauchi, Chris Constello, Chris-
++ tian Zietz, Cognition Corp., Compaq Computer Corporation, Concur-
++ rent Computer Corporation, Conectiva S.A., Corin Anderson, Craig
++ Struble, Daewoo Electronics Co. Ltd., Dale Schumacher, Damien
++ Miller, Daniel Berrange, Daniel Stone, Daniver Limited, Daryll
++ Strauss, Data General Corporation, David Bateman, David Dawes,
++ David E. Wexelblat, David Holland, David J. McKay, David McCul-
++ lough, David Mosberger-Tang, David S. Miller, Davor Matic, Deron
++ Johnson, Digital Equipment Corporation, Dirk Hohndel, Doug Anson,
++ Earle F. Philhower III, Edouard TISSERANT, Eduardo Horvath,
++ Egbert Eich, Elliot Lee, Eric Anholt, Eric Fortune, Eric Sun-
++ shine, Erik Fortune, Erik Nygren, Evans & Sutherland Computer
++ Corporation, Fabio Massimo Di Nitto Fabrizio Gennari, Finn
++ Thoegersen, Frederic Lepied, Free Software Foundation Inc.,
++ Fujitsu Limited, Fujitsu Open Systems Solutions Inc., Fuji Xerox
++ Co. Ltd., Geert Uytterhoeven, Gerrit Jan Akkerman, Gerry Toll,
++ Glenn G. Lai, GNOME Foundation, Go Watanabe, Gregory Mokhin, Greg
++ Parker, GROUPE BULL, Guy Martin, Hans Oey, Harald Koenig, Harm
++ Hanemaayer, Harold L Hunt II, Harry Langenbacher, Henry A. Worth,
++ Hewlett-Packard Company, Hitachi Ltd, Holger Veit, Howard Green-
++ well, Hummingbird Communications Ltd., IBM Corporation, Intel
++ Corporation, INTERACTIVE Systems Corporation, International Busi-
++ ness Machines Corp., Itai Nahshon, Ivan Kokshaysky, Ivan Pascal,
++ Jakub Jelinek, James Tsillas, Jason Bacon, Jean-loup Gailly, Jeff
++ Kirk, Jeffrey Hsu, Jehan Bing, Jeremy Katz, Jim Gettys, Jim Tsil-
++ las, J. Kean Johnston, John Dennis, John Harper, John Heasley,
++ Jon Block, Jon Tombs, Jorge Delgado, Joseph Friedman, Joseph V.
++ Moss, Juliusz Chroboczek, Jyunji Takagi, Kaleb Keithley, Kaleb S.
++ Keithley, Kazushi (Jam) Marukawa, Kazuyuki (ikko-) Okamoto, Kean
++ Johnston. Keith Packard, Keith Packard, Keith Whitwell, Kensuke
++ Matsuzaki, Kristian Høgsberg, Larry Wall, Lawrence Berkeley Labo-
++ ratory, Lennart Augustsson, Leon Shiman, Lexmark International
++ Inc., Linus Torvalds, Luc Verhaegen, Machine Vision Holdings
++ Inc., Manfred Brands, Marc Aurele La France Mark Adler, Mark J.
++ Kilgard, Mark Leisher, Mark Smulders, Mark Vojkovich, Mas-
++ sachusetts Institute Of Technology, Matrox Graphics, Mattheiu
++ Herrb Matthew Grossman, Matthieu Herrb, Metro Link Inc., Michael
++ Bax, Michael H. Schimek, Michael P. Marking, Michael Schimek,
++ Michael Smith, Michel Daenzer, Mike A. Harris, Mike Harris, Ming
++ Yu, MIPS Computer Systems Inc., National Semiconductor, NCR Cor-
++ poration Inc., Netscape Communications Corporation, Network Com-
++ puting Devices Inc., Nicholas Wourms, Noah Levitt, Nolan Leake,
++ Novell Inc., Nozomi YTOW, NTT Software Corporation, Number Nine
++ Computer Corp., Number Nine Visual Technologies, NVIDIA Corp.,
++ Oivier Danet, Oki Technosystems Laboratory Inc., OMRON Corpora-
++ tion, Open Software Foundation, Orest Zborowski, Owen Taylor,
++ Pablo Saratxaga, Panacea Inc., Panagiotis Tsirigotis, Paolo Sev-
++ erini, Pascal Haible, Patrick Lecoanet, Patrick Lerda, Paul
++ Anderson, Paul Elliott, Peter Breitenlohner, Peter Kunzmann,
++ Peter Trattler, Philip Homburg, Precision Insight Inc., Prentice
++ Hall, Quarterdeck Office Systems, Ralf Habacker Randy Hendry,
++ Ranier Keller, Red Hat Inc., Regents of the University of Cali-
++ fornia, Regis Cridlig, Rene Cougnenc, Richard A. Hecker, Richard
++ Burdick, Rich Murphey, Rickard E. Faith, Rik Faith, Robert Baron,
++ Robert Chesler, Robert Millan. Robert V. Baron, Robin Cutshaw,
++ Roland Mainz, Ronny Vindenes, Russ Blaine, Ryan Breen, Ryan Lor-
++ tie, Ryan Underwood, S3 Graphics Inc., Sam Leffler, SciTech Soft-
++ ware, Scott Laird, Sebastien Marineau, Shigehiro Nomura, Sho-
++ Graphics Inc., Shunsuke Akiyama, Silicon Graphics Computer Sys-
++ tems Inc., Silicon Integrated Systems Corp Inc., Silicon Motion
++ Inc., Simon P. Cooper, Snitily Graphics Consulting Services, Sony
++ Corporation, Søren Sandmann, SRI, Stanislav Brabec, Stefan
++ Dirsch, Stephan Dirsch, Stephan Lang, Steven Lang, Stuart Kreit-
++ man, Sun Microsystems Inc., SunSoft Inc., SuSE Inc, Sven Luther,
++ Takis Psarogiannakopoulos, Takuma Murakami, Takuya SHIOZAKI, Tek-
++ tronix Inc., The DOS-EMU-Development-Team, The Institute of Soft-
++ ware Academia Sinica, The NetBSD Foundation, Theo de Raadt,
++ Theodore Ts'o, The Open Group, The Open Software Foundation, The
++ Regents of the University of California, The Santa Cruz Operation
++ Inc., The Weather Channel Inc., The X Consortium, The XFree86
++ Project Inc., Thomas E. Dickey, Thomas G. Lane, Thomas Hellström,
++ Thomas Mueller, Thomas Roell, Thomas Thanner, Thomas Winis-
++ chhofer, Thomas Wolfram, Thorsten.Ohl, Tiago Gons, Todd C.
++ Miller, Tomohiro KUBOTA, Torrey Lyons, Torrey T. Lyons, TOSHIBA
++ Corp., Toshimitsu Tanaka, Travis Tilley, Tungsten Graphics Inc.,
++ Ty Sarna, UCHIYAMA Yasushi, Unicode Inc., UniSoft Group Limited,
++ University of Utah, UNIX System Laboratories Inc., URW++ GmbH, VA
++ Linux Systems, VIA Technologies Inc., Video Electronics Standard,
++ VMware Inc., Vrije Universiteit, Wittawat Yamwong, Wyse Technol-
++ ogy Inc., X Consortium, Xi Graphics Inc., X-Oz Technologies, X-
++ TrueType Server Project and their contributors, Yu Shao,
+
+ This product includes software developed by The XFree86 Project,
+ Inc (http://www.xfree86.org/) and its contributors.
+@@ -1005,4 +1038,4 @@
+ and its contributors.
+
+
+-$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/RELNOTES,v 1.5.2.1 2004/09/17 15:38:19 kem Exp $
++$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/RELNOTES,v 1.5.2.3 2005/02/08 23:54:04 kem Exp $
+Index: xc/programs/Xserver/hw/xfree86/doc/Versions
+diff -u xc/programs/Xserver/hw/xfree86/doc/Versions:1.3.2.1 xc/programs/Xserver/hw/xfree86/doc/Versions:1.3.2.2
+--- xc/programs/Xserver/hw/xfree86/doc/Versions:1.3.2.1 Fri Sep 17 15:38:19 2004
++++ xc/programs/Xserver/hw/xfree86/doc/Versions Tue Feb 8 00:44:27 2005
+@@ -1,9 +1,9 @@
+ X.Org and XFree86 Version Numbering Schemes
+
+ The XFree86 Project, Inc
+- Updated for X11R6.8.1 by Keith Packard and Kevin E. Martin
++ Updated for X11R6.8.2 by Keith Packard and Kevin E. Martin
+
+- 17 September 2004
++ 9 February 2005
+
+ Abstract
+
+@@ -19,7 +19,7 @@
+ branches. First is the trunk of the CVS repository. This is the main devel-
+ opment stream, where all new work and work for future releases is done.
+
+-Second is the stable bugfix branch for the latest full release (6.8.1). It
++Second is the stable bugfix branch for the latest full release (6.8.2). It
+ is created around the time of the release. The branch for the current
+ release is called "XORG-6_8-branch". Fixes for bugs found in the release
+ will be added to this branch (as well as the trunk), and updates to this
+@@ -41,7 +41,7 @@
+ release.
+
+ The next full release will be version 7.0. There is no scheduled update
+-release, but if one is needed, the version will be 6.8.2.
++release, but if one is needed, the version will be 6.8.3.
+
+ Aside from actual releases, snapshots of the active release branches are
+ tagged in the CVS repository from time to time. Each such snapshot has an
+@@ -153,4 +153,4 @@
+ }
+
+
+-$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/Versions,v 1.3.2.1 2004/09/17 15:38:19 kem Exp $
++$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/Versions,v 1.3.2.2 2005/02/08 00:44:27 kem Exp $
+Index: xc/programs/Xserver/hw/xfree86/doc/sgml/BUILD.sgml
+diff -u xc/programs/Xserver/hw/xfree86/doc/sgml/BUILD.sgml:1.4 xc/programs/Xserver/hw/xfree86/doc/sgml/BUILD.sgml:1.4.2.1
+--- xc/programs/Xserver/hw/xfree86/doc/sgml/BUILD.sgml:1.4 Wed Sep 8 01:54:29 2004
++++ xc/programs/Xserver/hw/xfree86/doc/sgml/BUILD.sgml Wed Dec 15 07:08:45 2004
+@@ -280,6 +280,12 @@
+ to succeed. If you want to install on a filesystem other than
+ <tt>/usr</tt>, make a symbolic link to <tt>/usr/X11R6</tt> before
+ installing.
++To install the tree into a different directory than <tt>/usr/X11R6</tt>
++you can specify <tt>DESTDIR</tt>:
++<quote><tt>
++make install DESTDIR=<install_target_dir>
++make install.man DESTDIR=<install_target_dir>
++</tt></quote>
+
+ <p>
+ Cross compiling is supported if the appropriate config files for your
+Index: xc/programs/Xserver/hw/xfree86/doc/sgml/OpenBSD.sgml
+diff -u xc/programs/Xserver/hw/xfree86/doc/sgml/OpenBSD.sgml:1.2 xc/programs/Xserver/hw/xfree86/doc/sgml/OpenBSD.sgml:1.2.4.1
+--- xc/programs/Xserver/hw/xfree86/doc/sgml/OpenBSD.sgml:1.2 Fri Apr 23 19:23:59 2004
++++ xc/programs/Xserver/hw/xfree86/doc/sgml/OpenBSD.sgml Mon Feb 7 23:15:26 2005
+@@ -6,8 +6,7 @@
+ <title>README for X11R&relvers; on OpenBSD
+ <author>
+ Matthieu Herrb
+-<Date>Last modified on: 9 December 2003; updated 25 March 2004 by Jim Gettys
+-for X11R&relvers;
++<Date>Last modified on: 4 February 2005.
+
+ <ident>
+ </ident>
+@@ -18,28 +17,29 @@
+ <sect>What and Where is X11R&relvers;?
+
+ <p>
+-The X.org Foundation X11R&relvers; is an Open Source version of the X Window System that supports
++The X.org Foundation X11R&relvers; is an Open Source version of
++the X Window System that supports
+ several UNIX(R) and UNIX-like operating systems (such as Linux, the BSDs
+ and Solaris x86) on Intel and other platforms.
+
+ See the <htmlurl url="COPYRIGHT.html" name="Copyright Notice">.
+
+ <![ %notsnapshot [
+-The sources for X11R&relvers; are available from
+-
++The sources for X11R&relvers; are available from
+ <htmlurl name="http://wiki.x.org"
+ url="http://wiki.x.org">]]>
+
+ <p>
+
+-X11R&relvers; also builds on other OpenBSD architectures. See section
++X11R&relvers; builds on most architectures supported by OpenBSD. See section
+ <ref id="otherarch" name="Building on other architectures"> for details.
+
+
+ <sect>Bug Reports for This Document
+
+ <p>
+-Use the X.org Bugzilla at <url url="http://bugzilla.freedesktop.org">
++Use the X.org Bugzilla at <htmlurl
++url="http://bugs.freedesktop.org" name="http://bugs.freedesktop.org">
+ to submit comments or suggestions about this file, using the xorg product.
+
+ <sect>New OS dependent features
+@@ -47,96 +47,17 @@
+ See the <htmlurl url="RELNOTES.html" name="Release Notes"> for
+ non-OS dependent new features in X11R&relvers;.
+
+-<sect1>New OS related features
+-<p>
+-<itemize>
+-<item>The IPv6 support is enabled on OpenBSD, but XDMCP over IPv6 is
+-not currently enabled since the code uses IPv6 mapped IPv4 addresses
+-which are not supported on OpenBSD.
+-<item>The userland part of DRI is enabled and built. Now waiting for
+-someone to port the kernel modules...
+-<item>All major revisions of the shared libraries are incremented on
+-OpenBSD 3.3 and later, to support the API changes introduced by
+-gcc stack protector.
+-</itemize>
+-
+-<sect1>New OS related features in 4.3
+-<p>
+-<itemize>
+-<item>Support for some VGA cards on OpenBSD/alpha
+-</itemize>
+-
+-<sect1>New OS dependent features in 4.2
+-<p>
+-<itemize>
+-<item>Support for OpenBSD/macppc on the ATI Rage128 based
+-Power Macintoshes.
+-<item>Support for building clients on OpenBSD/sparc64.
+-</itemize>
+-
+-<sect1>New OS dependent features in 4.0.3
+-<p>
+-<itemize>
+-<item>Support for the wscons console driver in post 2.8 OpenBSD.
+-<item>A fix for multi-threaded libraries support.
+-</itemize>
+-
+-<sect1>New OS dependent features in 4.0.2
+-<p>
+-<itemize>
+-<item>Support for the OpenBSD ports tree,
+-<item>Preliminary support for the macppc architecture (clients build
+-and work, the server doesn't work yet),
+-<item>xdm now writes an utmp entry,
+-<item>startx now creates an Xauthority magic cookie for the display.
+-</itemize>
+-
+-<sect1>New OS dependent features in 4.0.1
+-<p>
+-<itemize>
+-<item>Several features from the OpenBSD X11 tree were merged into xdm:
+-<itemize>
+-<item> support for Kerberos IV authentication
+-<item>use the arc4random(4) random number generator
+-<item>add a new resource "allowRootLogin", which can be used to disable
+- root logins through xdm
+-<item>log failed logins to syslogd
+-<item>verify that the shell is valid using /etc/shell
+-<item>verify that the account hasn't expired
+-</itemize>
+-<item>The Xsun server can be built again on OpenBSD/sparc.
+-</itemize>
+-
+-<sect1>New OS dependent features in 4.0
+ <p>
+ <itemize>
+-<item>Multi-thread safe libraries are built by default on OpenBSD 2.6
+- and later,
+-<item>Preliminary APM support.
++<item>Switch the the Xinput-aware kbd driver for keyboard input
+ </itemize>
+
+-<sect1>New OS dependent features in 3.9.18
+-<p>
++<sect1>New OS related features in X.Org 6.8
+ <itemize>
+-<item>Support for USB mices has been added on OpenBSD.
+-<item>Soft-booting secondary cards through the int10 BIOS interface is
+-now possible using the x86emu real mode emulator.
++<item>Support for Propolice in modules.
++<item>Server support for OpenBSD/amd64.
+ </itemize>
+
+-<sect1>New OS dependent features in 3.9.17
+-<p>
+-<itemize>
+-<item><em>Silken mouse</em> is supported for serial mices, and, under
+-post 2.6 OpenBSD-current for PS/2 mices.
+-<item>MTRR Write Combining is enabled under post 2.6 OpenBSD-current.
+-</itemize>
+-
+-<sect>Installing the Binaries
+-
+-<p>
+-Refer to the <htmlurl url="Install.html" name="Installation Document">
+-for detailed installation instructions.
+-
+ <sect>Configuring X for Your Hardware
+ <p>
+ The <tt>/etc/X11/xorg.conf</tt> file tells the X server what kind of
+@@ -147,7 +68,7 @@
+ You'll need info on your hardware:
+ <itemize>
+ <item>Your mouse type, baud rate and its /dev entry.
+-<item>The video card's chipset (e.g. ET4000, S3, etc).
++<item>The video card's chipset (e.g. ATI Radeon, nVidia GeForce 4/MX etc).
+ <item>Your monitor's sync frequencies.
+ </itemize>
+
+@@ -168,10 +89,10 @@
+
+ <p>
+ X11R&relvers; has support for the mouse driver included in
+-the new <bf/wscons/ console driver introduced by OpenBSD-2.9.
++the new <bf/wscons/ console driver.
+ Specify ``<tt/wsmouse/'' as the protocol and
+-``<tt>/dev/wsmouse0</tt>'' as the device in <tt>/etc/X11/xorg.conf</tt>
+-if you're using OpenBSD-2.9 or later with a PS/2 or USB mouse.
++``<tt>/dev/wsmouse</tt>'' as the device in <tt>/etc/X11/xorg.conf</tt>
++with a PS/2 or USB mouse.
+ <p>
+ See <htmlurl url="mouse.html" name="README.mouse"> for general
+ instruction on mouse configuration.
+@@ -187,15 +108,11 @@
+ To start the display manager, log in as root on the console and type:
+ ``<tt/xdm -nodaemon/''.
+
+-You can start xdm automatically on bootup by changing the line
+-<tscreen><verb>
+-xdm_flags=NO # for normal use: xdm_flags=""
+-</verb></tscreen>
+-to:
++You can start xdm automatically on bootup by adding the line:
+ <tscreen><verb>
+ xdm_flags="" # for normal use: xdm_flags=""
+ </verb></tscreen>
+-in <tt>/etc/rc.conf</tt>.
++in <tt>/etc/rc.conf.local</tt>.
+
+ <sect1>Running X without the display manager
+ <p>
+@@ -211,21 +128,12 @@
+ <sect>Kernel Support for X
+
+ <p>
+-To make sure X support is enabled under OpenBSD, the following
+-line must be in your config file in <tt>/sys/arch/i386/conf</tt>:
+-
+-<tscreen>
+- option APERTURE
+-</tscreen>
++OpenBSD's GENERIC kernels have all support for running X enabled.
+
+ <sect1>Console drivers
+ <p>
+ The server supports wscons, the standard OpenBSD/i386 console driver.
+
+-<p>
+-The pcvt console driver which was the default up to OpenBSD
+-2.8, is also supported on those releases.
+-
+ <sect1>Aperture Driver
+ <p>
+ By default OpenBSD includes the BSD 4.4 kernel security
+@@ -281,8 +189,12 @@
+ <label id="otherarch">
+
+ <p>
+-X11R&relvers; also compiles on other OpenBSD architectures.
+-<sect1>X11R&relvers; on OpenBSD/alpha
++X11R&relvers; compiles on most OpenBSD architectures. The X.Org
++X server builds and run on the following systems. On other
++architectures supported by OpenBSD, only client side libraries and
++applications are supported.
++
++<sect1>OpenBSD/alpha
+ <p>
+ The X server is known to work on some VGA cards in alpha
+ machines that support BWX I/O, with OpenBSD 3.2 and higher.
+@@ -300,12 +212,11 @@
+ version shipped with OpenBSD 3.1 and higher includes an OS-specific
+ driver <em/wsfb/ that is used to support TGA cards.
+
+-<sect1>X11R&relvers; on OpenBSD/macppc
++<sect1>OpenBSD/macppc
+ <p>
+-The X server is currently known to work on the G4 Macs and new
+-iBooks with ATI Rage 128 cards running OpenBSD 3.0 or later.
+-Other machines are more or less untested. Earlier OpenBSD versions
+-lack some kernel support for it.
++The X server is currently known to work on most of the G4 Macs and
++iBooks with ATI or nVidia cards.
++Other machines are more or less untested.
+ <p>
+ Use xorgconfig to build a /etc/X11/xorg.conf file before starting
+ the server for the first time.
+@@ -326,20 +237,10 @@
+
+ <sect1>OpenBSD/sparc64
+ <p>
+-This version only has support for X clients on
+-OpenBSD/sparc64. Note that the version shipped with OpenBSD also has
+-support for the X server on both SBus and PCI based machines.
+-
++This version only has support PCI based machines using ATI cards on
++OpenBSD/sparc64. Note that the version shipped with OpenBSD has
++support for the X server on both SBus and UPA (unaccelerated) based cards.
+
+-<sect>Building New X Clients
+-
+-<p>
+-The easiest way to build a new client (X application) is to use
+-<tt/xmkmf/ if an <tt/Imakefile/ is included in the sources. Type
+-``<tt/xmkmf -a/'' to create the Makefiles, check the configuration if
+-necessary and type ``<tt/make/''. Whenever you install additional man
+-pages you should update <tt/whatis.db/ by running ``<tt>makewhatis
+-/usr/X11R6/man</tt>''.
+
+ <sect> Thanks
+ <p>
+@@ -347,6 +248,7 @@
+ *BSD, in particular:
+ <bf/David Dawes/,
+ <bf/Todd Fries/,
++<bf/Miodrag Vallat/,
+ <bf/Rod Grimes/,
+ <bf/Charles Hannum/,
+ <bf/Amancio Hasty/,
+Index: xc/programs/Xserver/hw/xfree86/doc/sgml/README.sgml
+diff -u xc/programs/Xserver/hw/xfree86/doc/sgml/README.sgml:1.4 xc/programs/Xserver/hw/xfree86/doc/sgml/README.sgml:1.4.2.1
+--- xc/programs/Xserver/hw/xfree86/doc/sgml/README.sgml:1.4 Fri Sep 3 22:00:10 2004
++++ xc/programs/Xserver/hw/xfree86/doc/sgml/README.sgml Tue Feb 8 23:25:54 2005
+@@ -95,7 +95,7 @@
+ and active participants in the further development of the X Window
+ Technology are invited to complete a
+ <url url="http://www.x.org/XOrg_Foundation_Membership.html" name="membership application">.
+-The X11R&relvers; codebase forms the second X window system release since
++The X11R&relvers; codebase forms the &whichxorgrel; X window system release since
+ the formation of the X.org foundataion and includes code from the X
+ Consortium, the Open Group and the XFree86™ project.
+ This release is dedicated to the greater X community, developers
+Index: xc/programs/Xserver/hw/xfree86/doc/sgml/RELNOTES.sgml
+diff -u xc/programs/Xserver/hw/xfree86/doc/sgml/RELNOTES.sgml:1.7 xc/programs/Xserver/hw/xfree86/doc/sgml/RELNOTES.sgml:1.7.2.3
+--- xc/programs/Xserver/hw/xfree86/doc/sgml/RELNOTES.sgml:1.7 Sat Sep 4 00:22:32 2004
++++ xc/programs/Xserver/hw/xfree86/doc/sgml/RELNOTES.sgml Tue Feb 8 23:54:04 2005
+@@ -118,12 +118,13 @@
+
+ to config/cf/host.def.
+
+-<item> The XTT font module and FreeType1 have been retired because FreeType2 subsumes
++<item>The XTT font module and FreeType1 have been retired because FreeType2 subsumes
+ their functionality
+-<item> Retire old PS Type1 font rasterizer (except for CID font usage) since the FreeType2 rasterizer now handles PS Type1 (*.pfa, *.pfb)
++<item>Retire old PS Type1 font rasterizer (except for CID font usage) since the FreeType2 rasterizer now handles PS Type1 (*.pfa, *.pfb)
+ <item>Render implementation fixes
+ <item>Updated x86emu and resynced with upstream at Scitech
+ <item>Updated SiS driver
++<item>Updated Nvidia driver (opensource version)
+ <item>Render acceleration for ATI's R100 and R200-series cards
+ <item>Substantial speedups in the software implementation of the
+ render extensions when compiled with gcc 3.4 on the i386 architecture.
+@@ -134,8 +135,9 @@
+ <item>Allow backward compatibility but internally covert to new format
+ </itemize>
+ <item>Software mouse cursor is now based on the Damage extension
+-<item>A new keyboard driver is enabled by default. The old driver is disabled unless explicitly compiled in by defining the macro USE_DEPRECATED_KEYBOARD_DRIVER
+-<item>Extensions can be enabled/disabled from the configuration file and from the command line
++<item>A new keyboard driver is enabled by default. The old driver is disabled unless explicitly compiled in by defining the macro |USE_DEPRECATED_KEYBOARD_DRIVER|.
++<item>All extensions (except Xserver-specific extensions "DMX" and "XpExtension") can now be
++enabled/disabled from the configuration file and from the command line.
+ <item>Mac OS X updates:
+ <itemize>
+ <item>Support dynamic screen configuration changes in rootless mode
+@@ -145,6 +147,7 @@
+ <item>Fixed launch of X clients from Finder with a space in their path
+ <item>Fixed some GLX rendering problems on Mac OS X 10.2 and earlier
+ </itemize>
++<item>Updated xterm version
+ </itemize>
+
+ <sect1>New X extensions
+@@ -229,89 +232,92 @@
+ Xprint updates
+ <p>
+ <itemize>
+- <item>Integrated various fixes from xprint.mozdev.org (more or less the whole codebase has been merged)
++ <item>Integrated various fixes from <url name="xprint.mozdev.org" url="http://xprint.mozdev.org"> (more or less the whole codebase has been merged)
+ <item>Integrated various fixes from Sun Microsystems
+ <item>OpenGL is now supported for printing
+ <item>New set of maintenance tools for the Xprint server (xplsprinters, xprehashprinterlist, etc.)
+- <item>Added new XprintUtils client library to make the usage off Xprint easier
++ <item>Added new XprintUtils client library to make the usage of Xprint easier
+ <item>Various other features and fixes integrated
+ <item>Athena toolkit now has print support (XawPrintShell) which is included
+- in a separate version of that library (Xaw8)
+- <item>Various applications/tools like xman, xedit, xlogo, etc. now have
+- print support
++ in a new version of that library (Xaw8)
++ <item>Various applications/tools like xman, xedit, xlogo, xlsfonts, etc.
++ now have print support
+ </itemize>
+
+ <sect1>Updated Mesa and DRI from upstream sources
+ <P>
+- <itemize>
+- <item>More OpenGL extensions
+- <item>MergedFB for Radeon (Dualhead DRI support on these cards)
+- <item>Many GLX fixes
+- <item>Working SiS DRI driver
+- <item>Major Radeon and R200 DRI driver updates
+- <item>fbconfigs support
+- <item>Beginnings of pbuffer support (indirect only, and only in specific circumstances).
+- <item>Merge Mach64 DRI support (Eric Anholt, July 23)
+- </itemize>
++ <itemize>
++ <item>Mesa version has been updated to 6.2.1 (in X11R6.8.2)
++ <item>More OpenGL extensions
++ <item>MergedFB for Radeon (Dualhead DRI support on these cards)
++ <item>Many GLX fixes
++ <item>Working SiS DRI driver
++ <item>Major Radeon and R200 DRI driver updates
++ <item>fbconfigs support
++ <item>Beginnings of pbuffer support (indirect only, and only in specific circumstances).
++ <item>Merge Mach64 DRI support (Eric Anholt, July 23)
++ </itemize>
+
+ <sect1>Video driver enhancements
+ <p>
+ <itemize>
+- <item>SiS driver updates include
+- <itemize>
+- <item>output device hotplugging
+- <item>lots of fixes for 661, 741, 760
+- <item>extended interface for SiSCtrl?
+- <item>extended LCD handling (allow more modes)
+- <item>HDTV support (480p, 480i, 720p. 1080i; 315/330 series)
+- <item>Added video blitter Xv adapter (315/330 series)
+- <item>extended RENDER acceleration
+- </itemize>
+- <item>Radeon driver updates:
+- <itemize>
+- <item>Merged Framebuffer support (dualhead with DRI)
+- <item>DynamicClocks option (reduced power usage)
+- <item>Render acceleration (r100, r200 chips only)
+- <item>Support for new ATI chips (R420/M18, R423, RV370/M22, RV380/M24, RS300)
+- <item>DRI support for IGP chips
+- <item>Xv gamma correction
+- <item>Updated 3D drivers
+- <item>Many other small fixes
+- </itemize>
+- <item>Neomagic driver updates
+- <itemize>
+- <item>Support for Xv on pre-nm2160 chips
+- <item>Pseudocolor overlay mode
+- <item>Improved support for lowres double scan modes
+- </itemize>
+- <item>MGA driver updates
+- <itemize>
+- <item>Support for DDC and DPMS on second head on G400
+- <item>Updated 3D driver
+- </itemize>
+- <item>i810 driver updates
+- <itemize>
+- <item>Dualhead support (i830+)
+- <item>i915 support
+- <item>New 3D driver (i830+)
+- </itemize>
+- <item>Savage driver updates
+- <itemize>
+- <item>Pseudocolor overlay mode
+- </itemize>
+- <item>S3 driver updates
+- <itemize>
+- <item>Support for additional IBM RAMDACS
+- </itemize>
+- <item>Chips driver update
+- <itemize>
+- <item>Improved BE support
+- </itemize>
+- <item>New Voodoo driver (Alan Cox)
+- <itemize>
+- <item>Provides native (glide-less) acceleration and mode setup for voodoo/voodoo2 boards
+- </itemize>
+- </itemize>
++ <item>ATI Radeon driver updates:
++ <itemize>
++ <item>Merged Framebuffer support (dualhead with DRI)
++ <item>DynamicClocks option (reduced power usage)
++ <item>Render acceleration (r100, r200 chips only)
++ <item>Support for new ATI chips (R420/M18, R423, RV370/M22, RV380/M24, RS300)
++ <item>DRI support for IGP chips
++ <item>Xv gamma correction
++ <item>Updated 3D drivers
++ <item>Many other small fixes
++ </itemize>
++ <item>Chips driver update
++ <itemize>
++ <item>Improved BE support
++ </itemize>
++ <item>MGA driver updates
++ <itemize>
++ <item>Support for DDC and DPMS on second head on G400
++ <item>Updated 3D driver
++ </itemize>
++ <item>Neomagic driver updates
++ <itemize>
++ <item>Support for Xv on pre-nm2160 chips
++ <item>Pseudocolor overlay mode (=PseudoColor emulation)
++ <item>Improved support for lowres double scan modes
++ </itemize>
++ <item>i810 driver updates
++ <itemize>
++ <item>Dualhead support (i830+)
++ <item>i915 support
++ <item>New 3D driver (i830+)
++ <item>i810 driver is now supported for AMD64
++ </itemize>
++ <item>S3 driver updates
++ <itemize>
++ <item>Support for additional IBM RAMDACS
++ </itemize>
++ <item>Savage driver updates
++ <itemize>
++ <item>Pseudocolor overlay mode
++ </itemize>
++ <item>SiS driver updates include
++ <itemize>
++ <item>output device hotplugging
++ <item>lots of fixes for 661, 741, 760
++ <item>extended interface for SiSCtrl?
++ <item>extended LCD handling (allow more modes)
++ <item>HDTV support (480p, 480i, 720p. 1080i; 315/330 series)
++ <item>Added video blitter Xv adapter (315/330 series)
++ <item>extended RENDER acceleration
++ <item>SiS driver now supported on AMD64
++ </itemize>
++ <item>New Voodoo driver (Alan Cox)
++ <itemize>
++ <item>Provides native (glide-less) acceleration and mode setup for voodoo/voodoo2 boards
++ </itemize>
++</itemize>
+
+ <sect>Drivers
+ <P>
+@@ -418,6 +424,27 @@
+ listed above. Further information can be found in
+ <htmlurl name="README.Darwin" url="Darwin.html">.
+
++X11R&relvers; includes the following print drivers:
++
++<sect1>Print Drivers
++<p>
++
++<table border=1 align="center">
++<tabular ca="|l|l|l|">
++ <tabrow>Driver Name<colsep>Description<colsep>Further Information</tabrow>
++ <hline>
++ <tabrow><tt>PostScript</tt><colsep>PostScript driver<colsep> </tabrow>
++ <tabrow><tt>PCL</tt><colsep>PCL color driver<colsep> </tabrow>
++ <tabrow><tt>PCL-MONO</tt><colsep>PCL monocrome driver<colsep> </tabrow>
++ <tabrow><tt>RASTER</tt><colsep>Monocrome raster driver (XWD, PS, PCL)<colsep> </tabrow>
++<!-- not yet
++ <tabrow><tt>SVG</tt><colsep>Scaleable Vector Graphics driver<colsep> </tabrow>
++-->
++</tabular>
++</table>
++
++Drivers marked with (*) are available for Linux only.
++
+ X11R&relvers; includes the following input drivers:
+
+ <sect1>Input Drivers
+@@ -445,9 +472,9 @@
+ <tabrow><tt>hyperpen</tt><colsep>Aiptek HyperPen 6000<colsep> </tabrow>
+ <tabrow><tt>js_x</tt><colsep>JamStudio pentablet<colsep><htmlurl
+ name="js_x(4)" url="js_x.4.html"></tabrow>
+- <tabrow><tt>kbd</tt><colsep>generic keyboards (alternate)<colsep><htmlurl
++ <tabrow><tt>kbd</tt><colsep>generic keyboards (loadable module)<colsep><htmlurl
+ name="kbd(4)" url="kbd.4.html"></tabrow>
+- <tabrow><tt>keyboard</tt><colsep>generic keyboards<colsep><htmlurl
++ <tabrow><tt>keyboard</tt><colsep>generic keyboards (builtin driver)<colsep><htmlurl
+ name="keyboard(4)" url="keyboard.4.html"></tabrow>
+ <tabrow><tt>microtouch</tt><colsep>MicroTouch<colsep> </tabrow>
+ <tabrow><tt>mouse</tt><colsep>most mouse devices<colsep><htmlurl
+@@ -639,8 +666,7 @@
+
+ <sect1>XVideo Extension (Xv)
+ <p>
+-
+-The XVideo extension is supported in X11R6.7.x.
++The XVideo extension is supported in X11R6.7.x and newer releases.
+ An XvQueryPortAttributes function has been added as well as
+ support for XvImages. XvImages are XImages in alternate color spaces
+ such as YUV and can be passed to the server through shared memory
+@@ -692,7 +718,11 @@
+ and <tt>/etc/fonts/local.conf</tt>, which
+ contains information about which directories contain font files and also
+ provides a sophisticated font aliasing mechanism. Documentation for that
+-file is included in the <htmlurl name="Xft(3)" url="Xft.3.man"> man page.
++file is included in the
++<htmlurl name="Xft(3)" url="Xft.3.man">,
++<htmlurl name="fontconfig(3)" url="fontconfig.3.man"> and
++<htmlurl name="fonts.conf(4)" url="fonts.conf.4.man">
++man pages.
+
+ </sect2>
+
+@@ -756,7 +786,7 @@
+ <item>Flexible search/replace interface that allows regex matches.
+ <item>Please refer to <tt><htmlurl name="xedit(1)" url="xedit.1.html"></tt>
+ for more details.
+- <item>XPrint support.
++ <item>Support for printing via Xprint.
+ </itemize>
+
+ <!--
+@@ -767,17 +797,18 @@
+ <sect1>Font support
+ <p>
+
+-Details about the font support in X11R&relvers;.x can be found
++Details about the font support in X11R&lastfullrelvers;.x can be found
+ in the <htmlurl name="README.fonts" url="fonts.html"> document.
+
+ <sect1>TrueType support
+ <p>
+
+ X11R6.7 came with two TrueType backends. The functionality from the
+-`X-TrueType' backend has been integrated into the `FreeType' backend which
+-is designed to transparently support all of the functionality from the
+-`X-TrueType' backend with the exception of the font encoding libraries; the
+-`FreeType' backend uses only the fontenc-based encoding system .
++`X-TrueType' (="XTT") backend has been integrated into the `FreeType'
++backend which is designed to transparently support all of the functionality
++from the `X-TrueType' backend with the exception of the font encoding
++libraries; the `FreeType' backend uses only the fontenc-based encoding
++system.
+
+ <sect1>CID font support
+ <p>
+@@ -904,7 +935,7 @@
+ and 15.
+
+ The license terms for the Vera fonts are inclued in the file
+-<tt/COPYRIGHT.Vera/>.
++<tt/COPYRIGHT.Vera/.
+
+ <sect1>Luxi fonts from Bigelow and Holmes <label id="luxi">
+ <p>
+@@ -1029,30 +1060,44 @@
+ <tag>These people contributed in some way to X11R&relvers;</tag>
+ Paul Anderson,
+ Eric Anholt,
++Dave Airlie,
++Donnie Berkholz,
+ Daniel Berrange,
++Thomas Biege,
+ Russ Blaine,
+ Ryan Breen,
+ Alan Coopersmith,
++Jay Cotton,
+ Michel Daenzer,
+ David Dawes,
++Kevin DeKorte,
+ Alex Deucher,
+ Stefan Dirsch,
+ Egbert Eich,
+ Rik Faith,
+ Jim Gettys,
++Giuseppe Ghibò,
++Thomas Gilg,
+ Alexander Gottwald,
+ Mike A. Harris,
+ John Harper,
+ John Heasley,
++Jeremy Huddleston,
+ Matthieu Herrb,
+ Alan Hourihane,
++Jay Hobson,
++Matthias Hopf,
+ Kristian Høsberg,
+ Harold L. Hunt II,
+ Adam Jackson,
++Daniel Jacobowitz,
+ Deron Johnson,
++Masaki Katakai,
++Stephen Kennedy,
+ Ivan Kokshaysky,
+ Stuart Kreitman,
+-Peter Kunzman,
++Peter Kunzman,
++Julien Lafon,
+ Nolan Leake,
+ Ryan Lortie,
+ Andreas Luik,
+@@ -1060,18 +1105,27 @@
+ Roland Mainz,
+ Guy Martin,
+ Kevin E. Martin,
++Dan McNichol,
++Dagfinn Ilmari Mannsaker,
++Simon Montagu,
+ Keith Packard,
+ Greg Parker,
++Drew Parsons,
+ Aaron Plattner,
++Branden Robinson,
+ Søren Sandmann,
+ Ty Sarna,
+ Yu Shao,
++Gustavo Noronha Silva,
+ Bryan Stine,
+ Owen Taylor,
+ Travis Tilley,
+ Ryan Underwood,
+ Ronny Vindenes,
+-Chisato Yamauchi
++Chisato Yamauchi,
++Mark Vojkovich,
++Tim Yamin,
++Hui Yu
+ </descrip>
+
+ <p>
+@@ -1089,14 +1143,15 @@
+ Jehan Bing,
+ Peter Breitenlohner,
+ Alan Coopersmith,
++Thomas Dickey,
+ Egbert Eich,
+ John Dennis,
+ Fabrizio Gennari,
+ Jim Gettys,
+ Alexander Gottwald,
+-Ralf Habacker
++Ralf Habacker,
+ Mike Harris,
+-Mattheiu Herrb
++Mattheiu Herrb,
+ Alan Hourihane,
+ Harold L Hunt II,
+ Elliot Lee,
+@@ -1106,7 +1161,7 @@
+ Andreas Luik,
+ Torrey Lyons,
+ Roland Mainz,
+-Kevin E. Martin,
++Kevin E. Martin,
+ Takuma Murakami,
+ Kensuke Matsuzaki,
+ Keith Packard,
+@@ -1115,8 +1170,7 @@
+ Benjamin Rienfenstahl,
+ Leon Shiman,
+ Toshimitsu Tanaka,
+-Nicholas Wourms.
+-
++Nicholas Wourms,
+ 2d3d Inc.,
+ Aaron Plattner,
+ Adam de Boor,
+Index: xc/programs/Xserver/hw/xfree86/doc/sgml/SiS.sgml
+diff -u xc/programs/Xserver/hw/xfree86/doc/sgml/SiS.sgml:1.2 xc/programs/Xserver/hw/xfree86/doc/sgml/SiS.sgml:1.2.4.2
+--- xc/programs/Xserver/hw/xfree86/doc/sgml/SiS.sgml:1.2 Fri Apr 23 19:23:59 2004
++++ xc/programs/Xserver/hw/xfree86/doc/sgml/SiS.sgml Tue Feb 8 00:19:04 2005
+@@ -7,7 +7,7 @@
+ <!-- Title information -->
+ <title>Information for SiS Users
+ <author>Thomas Winischhofer (<email>thomas@winischhofer.net</email>)
+-<date>5 October 2003
++<date>7 February 2005
+
+ <ident>
+ </ident>
+@@ -17,137 +17,152 @@
+
+ <sect> Introduction <p>
+
+-This driver is written by Thomas Winischhofer and is a (nearly) complete re-write
+-of a driver written for the SiS6326 and SiS530 by Alan Hourihane and others.
++This driver is written by Thomas Winischhofer and is a (nearly) complete
++re-write of a driver written for the SiS6326 and SiS530 by Alan Hourihane
++and others.
+
+ It currently supports the following chipsets:
+ <itemize>
+ <item>old series: 5597/5598, 6236/AGP/DVD, 530/620
+ <item>300 series: 300/305, 540, 630/730
+- <item>315 series: 315, 550, 650, 651, M650, 740
+- <item>330 series: 330 ("Xabre"), 661FX, M661FX, 741, 760
++ <item>315 series: 315/E/PRO, 550/551/552, 650, 651, M650, 740
++ <item>330 series: 330 ("Xabre"), [M]661[F/M]X, [M]741[GX], [M]760[GX]
+ </itemize>
+
+-The driver supports:
++Among other features, the driver supports
+ <itemize>
+- <item>8/16/24 bits color depth; old series also 15;
+- <item>XAA
+- <item>XVideo (Xv)
+- <item>Render (XRAND)
+- <item>Hardware cursor; 315/330 series: Color HW cursor;
++ <item>8/16/24 bits color depth; old series also 15
++ <item>Hardware cursor; 315/330 series: Color HW cursor
++ <item>XAA; XVideo (Xv); RENDER (XRAND) and other extensions
+ <item>6326: TV output
+ <item>300/315/330 series: TV output via Chrontel TV encoders or SiS video bridges
+ <item>300/315/330 series: LCD output via LVDS transmitters or SiS video bridges
+- <item>300/315/330 series: Dual head mode; Xinerama; Merged framebuffer mode;
++ <item>300/315/330 series: Dual head mode; Xinerama; Merged framebuffer mode
+ </itemize>
+
+-This document gives an overview over the driver's features and configuration options.
+-Please see http://www.winischhofer.net/linuxsisvga.shtml for detailed documentation
+-and updates. Support for the 661, 741 and 760 is entirely untested as of this writing,
+-and possibly incomplete for LCD output.
++This document provides a brief overview over the driver's features and
++configuration options. Please see http://www.winischhofer.at/linuxsisvga.shtml
++for detailed documentation and updates.
+
+ <sect> xorg.conf Options <p>
+
+-The following options are of particular interest for the SiS
+-driver. Each of them must be specified in the Device section of the
+-xorg.conf file for this card.
++The following options are of particular interest for the SiS driver. Each of them
++must be specified in the Device section of the xorg.conf file for this card.
+
+-<sect1>For all chipsets<p>
++In the list below, the options' arguments are described by type. For "boolean",
++the keywords "on", "true" and "yes", as well as "off", "false" and "no" respectively
++have the same meaning.
++
++<sect1> For all chipsets<p>
+
+ <descrip>
+-<tag>Option "SWCursor", "HWCursor"</tag>
++<tag>Option "SWCursor" [boolean]</tag>
++<tag>Option "HWCursor" [boolean]</tag>
+ These options select whether the software (SW) or hardware (HW) cursor should
+ be used. The default is using the hardware cursor.
+-<tag>Option "NoAccel"</tag>
+- Disables 2D acceleration. Default: 2D acceleration is enabled.
+-<tag>Option "Turboqueue"</tag>
+- SiS chipsets have the option to extend the engine command queue on
+- VRAM. This concept is called "TurboQueue" and gives some performance improvement.
+- Due to hardware bugs, the TurboQueue is disabled on the 530/620, otherwise
+- enabled by default.
+-<tag>Option "Rotate"</tag>
+- This option enables clockwise ("CW") or counter-clockwise ("CCW") rotation of
++<tag>Option "NoAccel" [boolean]</tag>
++ Disables 2D acceleration. By default, 2D acceleration is enabled.
++<tag>Option "Rotate" [string]</tag>
++ This option enables clockwise ("CW") or counter-clockwise ("CCW") rotation of
+ the display. Enabling either CW or CCW rotation disables the RandR extension.
+ Default: no rotation.
+-<tag>Option "ShadowFB"</tag>
+- This option enables the shadow framebuffer layer. By default, it is disabled.
+-<tag>Option "NoXVideo"</tag>
+- Disables the XVideo support. Default: XVideo support is enabled.
+-<tag>Option "CRT1Gamma"</tag>
+- Enables or disables gamma correction. Default: gamma correction is enabled.
++<tag>Option "ShadowFB" [boolean]</tag>
++ This option enables the shadow framebuffer layer. By default, it is disabled.
++<tag>Option "NoXVideo" [boolean]</tag>
++ Disables the XVideo (Xv) support. By default, XVideo support is enabled.
++<tag>Option "CRT1Gamma" [boolean]</tag>
++ Enables or disables gamma correction. Default: gamma correction is enabled.
+ </descrip>
+
+-<sect1>old series specific options <p>
++<sect1> old series specific options <p>
+
+ <descrip>
+-<tag>Option "FastVram"</tag>
+- Enables 1 cycle memory access for read and write operations. The default
++<tag>Option "FastVram" [boolean]</tag>
++ Enables 1 cycle memory access for read and write operations. The default
+ depends on the chipset used.
+-<tag>Option "NoHostBus"</tag>
+- For 5597/5598 only. This option, if set, disables the CPU to VGA host bus.
++<tag>Option "Turboqueue" [boolean]</tag>
++ SiS chipsets have the ability to extend the engine command queue in
++ video RAM. This concept is called "TurboQueue" and gives some performance
++ improvement. Due to hardware bugs, the TurboQueue is disabled on the 530/620,
++ otherwise enabled by default.
++<tag>Option "NoHostBus" [boolean]</tag>
++ For 5597/5598 only. This option, if set, disables the CPU to VGA host bus.
+ Disabling the host bus will result in a severe performance regression.
+-<tag>VideoRAM size</tag> The SiS 6326 can only directly address 4096K
+- bytes of video RAM. However, there are some cards out there featuring
+- 8192K (8MB) of video RAM. This RAM is not addressable by the engines.
+- Therefore, by default, the driver will only use 4096K. This behavior
+- can be overridden by specifying the amount of video RAM using the
+- VideoRAM keyword. If more than 4096K is specified, the driver will
+- disable 2D acceleration, Xv and the HW cursor. On all other chipsets,
+- this keyword is ignored.
+-<tag>Option "NoYV12"</tag>
+- Due to hardware bugs, XVideo may display a corrupt image when using
++<tag>VideoRAM [size]</tag>
++ The SiS 6326 can only directly address 4096K bytes of video RAM. However,
++ there are some cards out there featuring 8192K (8MB) of video RAM. This RAM
++ is not addressable by the engines. Therefore, by default, the driver will
++ only use 4096K. This behavior can be overridden by specifying the amount of
++ video RAM using the VideoRAM keyword. If more than 4096K is specified, the
++ driver will disable 2D acceleration, Xv and the HW cursor. On all other
++ chipsets, this keyword is ignored. The size argument is expected in KB, but
++ without "KB".
++<tag>Option "NoYV12" [boolean]</tag>
++ Due to hardware bugs, XVideo may display a corrupt image when using
+ YV12 encoded material. This option, if set, disables support for YV12
+ and hence forces the Xv-aware application to use either YUV2 or XShm
+ for video output.
+-<tag>Option "TVStandard"</tag>
++<tag>Option "TVStandard" [string]</tag>
+ (6326 only) Selects the TV output standard. May be PAL or NTSC. By default,
+ this is selected by a jumper on the card.
+ </descrip>
+
+-<sect1>300/315/330 series specific options<p>
++<sect1> 300/315/330 series specific options<p>
+
+ <descrip>
+-<tag>Option "ForceCRT1"</tag>
+- Enables or disables CRT1 (= the external VGA monitor). By default,
++<tag>Option "EnableSiSCtrl" [boolean]</tag>
++ This option enables/disables the driver's interface for the SiSCtrl
++ utility. Please see http://www.winischhofer.at/linuxsisvga.shtml
++ for more information.
++<tag>Option "Turboqueue" [boolean]</tag>
++ (300 series only) SiS chipsets have the ability to extend the engine
++ command queue in video RAM. This concept is called "TurboQueue" and gives
++ some performance improvement. The TurboQueue is enabled by default.
++<tag>Option "ForceCRT1" [boolean]</tag>
++ Enables or disables CRT1 (= the external VGA monitor). By default,
+ the driver will use CRT1 if a monitor is detected during server
+ start. Some older monitors can't be detected, so they may require
+ setting this option to true. To disable CRT1 output, set this option
+ to false.
+-<tag>Option "ForceCRT1Type"</tag>
+- SiS 650, M650 and 651 with either 301LV or 302LV video bridge only.
+- May be VGA or LCD. Specifying LCD will force the driver to use the
+- VGA controller's CRT1 channel for driving the LCD, while CRT2 is
+- free for TV usage. Default is VGA.
+-<tag>Option "ForceCRT2Type"</tag>
+- Selects the CRT2 output device type. Valid parameters are LCD, TV,
+- SVIDEO, COMPOSITE, SCART, VGA, NONE. NONE disables CRT2. SVIDEO and
+- COMPOSITE are only for systems with a SiS video bridge and select the
+- desired plug type. For Chrontel systems, TV should be used instead.
+- VGA means secondary VGA and is only available on some SiS video bridges
++<tag>Option "ForceCRT1Type" [string]</tag>
++ (For SiS 650, M650, 651, 661, 741, 760 with either SiS 301LV, 302LV or
++ SiS 301C video bridge only) The argument may be "VGA" or "LCD". Specifying
++ LCD will force the driver to use the VGA controller's CRT1 channel for
++ driving the LCD while CRT2 is free for TV usage. Default is VGA.
++<tag>Option "ForceCRT2Type" [string]</tag>
++ Selects the CRT2 output device type. Valid parameters are "LCD", "TV",
++ "SVIDEO", "COMPOSITE", "SVIDEO+COMPOSITE", "SCART", "VGA", "YPBPR480I",
++ "YPBPR480P", "YPBPR720P", "YPBPR1080I" or "NONE". NONE disables CRT2.
++ SVIDEO, COMPOSITE, SVIDEO+COMPOSITE, SCART and all the YPBPR alternatives
++ are only for systems with a SiS video bridge and select the desired plug
++ or tv standard type. For Chrontel systems, TV should be used instead. VGA
++ means secondary VGA and is only available on some SiS video bridges
+ (301, 301B, 301C).
+-<tag>Option "CRT2Gamma"</tag>
+- Enables or disables gamma correction for CRT2. This is only supported
+- for SiS video bridges. Default: gamma correction for CRT2 is enabled.
+-<tag>Option "DRI"</tag>
++<tag>Option "CRT2Gamma" [boolean]</tag>
++ (For SiS video bridges only) This option enables or disables gamma
++ correction for CRT2. Default: gamma correction for CRT2 is enabled.
++<tag>Option "DRI" [boolean]</tag>
+ Although this option is accepted for all chipsets, it currently only
+ makes sense on the 300 series; DRI is only supported on these chipsets.
+ This option enables/disables DRI.
+-<tag>Option "TVStandard"</tag>
++<tag>Option "TVStandard" [string]</tag>
+ Selects the TV output standard. May be PAL or NTSC, on some machines
+ (depending on the hardware) also PALM and PALN. Default: BIOS setting.
+-<tag>Option "TVXPosOffset", "TVYPosOffset"</tag>
++<tag>Option "TVXPosOffset" [integer]</tag>
++<tag>Option "TVYPosOffset" [integer]</tag>
+ These options allow relocating the image on your TV. Both options take
+ an integer within the range of -16 to 16. Default: 0. Not supported for
+ Chrontel 7019.
+-<tag>Option "CHTVOverscan"</tag>
+- For Chrontel TV encoders only. Selects whether TV output should be
++<tag>Option "CHTVOverscan" [boolean]</tag>
++ (For Chrontel TV encoders only) Selects whether TV output should be
+ overscan or underscan.
+-<tag>Option "CHTVSuperOverscan"</tag>
+- For Chrontel 7005 TV encoders in PAL mode only. Selects whether TV output
++<tag>Option "CHTVSuperOverscan" [boolean]</tag>
++ (For Chrontel 7005 TV encoders in PAL mode only) Selects whether TV output
+ should be super-overscan (slightly larger than the viewable area) or
+ not.
+-<tag> Option "SISTVXScale", "SISTVYScale"</tag>
+- For SiS video bridges only. These options allow zooming the image on
++<tag>Option "SISTVXScale" [integer]</tag>
++<tag>Option "SISTVYScale" [integer]</tag>
++ (For SiS video bridges only) These options allow zooming the image on
+ your TV. SISTVXScale takes an integer within the range of -16 to 16.
+ SISTVYScale accepts -4 to 3. Default: 0. Not all modes can be scaled.
+ </descrip>
+@@ -155,50 +170,52 @@
+ <sect1> 300 series specific options<p>
+
+ <descrip>
+-<tag>Option "MaxXFBMem"</tag>
+- DRI requires the linux kernel's SiS framebuffer driver "sisfb" and some
+- other modules which come with either the linux kernel or X11R&relvers;. (On *BSD,
+- the DRI driver does not require any framebuffer driver.)
+- Sisfb takes care of memory management for texture data. In order to prevent
+- the X driver and sisfb from overwriting each others video memory, sisfb
+- reserves an amount of video memory for the X driver. This amount can either
+- be selected using sisfb's mem parameter, or auto-selected depending on the
+- amount of total video RAM available. However, the X driver needs to know about
+- the amount of RAM sisfb reserved. For this purpose, the Option "MaxXFBMem" exists.
+-
+- XFree 4.3.0 disabled SiS DRI support due to a lack of maintenance of the SiS DRI
+- driver. X11R&relvers; and X11R&relvers; and XFree86 4.4 contains a newly written
+- SiS DRI driver by Eric Anholt.
+-
+- If you intend to use DRI, I recommend setting the total video memory in the BIOS
+- to 64MB in order to at least overcome the lack of memory swap functions.
+-
+- Sisfb can be used for memory management only, or as a complete framebuffer driver.
+- If you start sisfb with a valid mode (ie you gain a graphical console), the X driver
+- can communicate with sisfb and doesn't require setting the MaxXFBMem option at all.
+- The X driver will receive enough information from sisfb in this case.
+-
+- However, if you use sisfb for memory management only, ie you started sisfb with
+- mode=none and still have a text mode console, there is no communication between sisfb
+- and the X driver. In this case, you need to set MaxXFBMem to the same value as you
+- gave sisfb with its mem parameter. If you didn't specify any mem parameter, sisfb
+- will reserve 12288KB if more than 16MB of total video RAM is available, 8192KB if
+- between 12 and 16MB of video RAM is available, 4096KB in all other cases.
+-
+- Then you need to specify any of these amounts as the parameter for the MaxXFBMem
+- option. The value is to be given without 'KB'.
++<tag>Option "MaxXFBMem" [size]</tag>
++ This option might only be needed if you are running X on a Linux 2.4 series
++ kernel. This option is not needed and should be omitted on Linux 2.6 and *BSD.
++
++ The Linux kernel features a framebuffer driver named "sisfb" which takes care
++ of memory management for DRI/DRM (such as for 3D texture data). In order to
++ keep the X driver and sisfb from overwriting each other's video memory, sisfb
++ reserves a certain amount of video memory for the X driver. Reserved memory
++ is for X 2D, pixmap cache and video data only. Sisfb will not present this
++ memory to the DRI. The amount of reserved memory can either be selected using
++ sisfb's mem parameter or auto-selected depending on the total amount of video
++ RAM available.
++
++ Fact of the matter is, the X driver needs to know about the amount of RAM
++ sisfb reserved. For this purpose, the Option "MaxXFBMem" exists.
++
++ If you start sisfb with a valid mode (ie you run a graphical console), the
++ X driver can communicate with sisfb and doesn't require setting the MaxXFBMem
++ option at all. The X driver will receive enough information from sisfb in
++ this case.
++
++ If you, on the other hand, use sisfb for memory management only, ie you started
++ sisfb with mode=none and still have a text mode console, there is no communication
++ between sisfb and the X driver. In this - and ONLY this - case, you need to set
++ MaxXFBMem to the same value as you gave sisfb with its mem parameter. If you
++ didn't specify any mem parameter, sisfb will reserve (and you will have to
++ specify by MaxXFBMem) 12288KB if more than 16MB of total video RAM is available,
++ 8192KB if between 12 and 16MB of video RAM is available, 4096KB in all other
++ cases. The size is expected in KB, without the "KB".
++
++ Final word of advice: If you intend to use DRI on an integrated chipset (such
++ as the 630/730), it is recommended to set the total video memory in the BIOS to
++ 64MB in order to at least overcome the DRI driver's lack of memory swap functions.
+ </descrip>
+
+ <sect1> 315/330 series specific options<p>
+
+ <descrip>
+-<tag>Option "RenderAcceleration"</tag>
+- Enables or disables RENDER acceleration. By default, RENDER acceleration
+- is enabled.
+-<tag>Option "XvOnCRT2"</tag>
+- 315, 650, 740, 330 only. This option selects whether the XVideo (Xv)
+- overlay should be displayed on CRT1 or CRT2. Setting this options
+- means CRT2. The other CRT will only display the (blue) color key.
++<tag>Option "RenderAcceleration" [boolean]</tag>
++ Enables or disables RENDER acceleration. This feature, for instance, accelerates
++ output of anti-aliased text. By default, RENDER acceleration is enabled.
++<tag>Option "XvOnCRT2" [boolean]</tag>
++ (For 315, 650, 740, 330 only) This option selects whether the XVideo (Xv)
++ overlay should be displayed on CRT1 or CRT2. Setting this option means CRT2.
++ The other CRT will only display the (by default: blue) color key or a black/red
++ pattern.
+ </descrip>
+
+ Document based on 4.1 version written by Joanjo Santamarta and 3.3 version
+Index: xc/programs/Xserver/hw/xfree86/doc/sgml/Solaris.sgml
+diff -u xc/programs/Xserver/hw/xfree86/doc/sgml/Solaris.sgml:1.3 xc/programs/Xserver/hw/xfree86/doc/sgml/Solaris.sgml:1.3.2.1
+--- xc/programs/Xserver/hw/xfree86/doc/sgml/Solaris.sgml:1.3 Thu Aug 19 16:28:42 2004
++++ xc/programs/Xserver/hw/xfree86/doc/sgml/Solaris.sgml Mon Feb 7 23:15:26 2005
+@@ -9,7 +9,7 @@
+ <date>2004 August 18
+
+ <ident>
+-$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/sgml/Solaris.sgml,v 1.3 2004/08/19 16:28:42 kem Exp $
++$XdotOrg: xc/programs/Xserver/hw/xfree86/doc/sgml/Solaris.sgml,v 1.3.2.1 2005/02/07 23:15:26 gisburn Exp $
+ </ident>
+
+ <!-- Table of contents -->
+@@ -195,6 +195,11 @@
+ The SPARC port is still quite new, so instability is to be expected (and
+ reported!).
+ It might even have broken some aspects of the x86 port.<p>
++<item>
++The <tt>kbd</tt> driver is not yet supported on Solaris, but the server
++still logs a message that it can't find the <tt>Keyboard</tt> driver and
++suggests you use <tt>kbd</tt>. That message should be ignored in this
++release.
+ </enum>
+ <sect>Bug Notification<p>
+ Bug reports should be reported using the bugzilla.freedesktop.org using the
+Index: xc/programs/Xserver/hw/xfree86/doc/sgml/defs.ent
+diff -u xc/programs/Xserver/hw/xfree86/doc/sgml/defs.ent:1.6.2.2 xc/programs/Xserver/hw/xfree86/doc/sgml/defs.ent:1.6.2.5
+--- xc/programs/Xserver/hw/xfree86/doc/sgml/defs.ent:1.6.2.2 Fri Sep 17 15:38:20 2004
++++ xc/programs/Xserver/hw/xfree86/doc/sgml/defs.ent Tue Feb 8 23:25:54 2005
+@@ -2,25 +2,27 @@
+
+ <!-- shared entity definitions for the XFree86 documentation -->
+
+-<!-- XFree86 version string -->
++<!-- Xorg version string -->
+ <!ENTITY majorvers CDATA "6">
+-<!ENTITY reldate CDATA "17 September 2004">
+-<!ENTITY relvers CDATA "6.8.1">
+-<!ENTITY prevrelvers CDATA "6.8">
+-<!ENTITY fullrelvers CDATA "6.8.1">
++<!ENTITY reldate CDATA "9 February 2005">
++<!ENTITY relvers CDATA "6.8.2">
++<!ENTITY lastfullrelvers CDATA "6.8">
++<!ENTITY prevrelvers CDATA "6.8.1">
++<!ENTITY fullrelvers CDATA "6.8.2">
+ <!ENTITY prevfullrelvers CDATA "6.8.0">
+ <!ENTITY nextrelvers CDATA "7.0">
+ <!ENTITY nextfullrelvers CDATA "7.0.0">
+-<!ENTITY nextfullreldate CDATA "early 2005">
+-<!ENTITY nextupdrelvers CDATA "6.8.2">
++<!ENTITY nextfullreldate CDATA "mid-2005">
++<!ENTITY nextupdrelvers CDATA "6.8.3">
+
+ <!ENTITY srcvers CDATA "440">
+ <!ENTITY prevsrcvers CDATA "680">
+ <!ENTITY fullsrcvers CDATA "440">
+ <!ENTITY prevfullsrcvers CDATA "680">
+ <!ENTITY whichfullrel CDATA "eighth">
+-<!ENTITY whichupdaterel CDATA "none">
+-<!ENTITY reltag CDATA "XORG-6_8_1">
++<!ENTITY whichxorgrel CDATA "fourth">
++<!ENTITY whichupdaterel CDATA "second">
++<!ENTITY reltag CDATA "XORG-6_8_2">
+ <!ENTITY relbranchtag CDATA "XORG-6_8-branch">
+ <!ENTITY rcnum CDATA "0">
+
+Index: xc/programs/Xserver/hw/xfree86/drivers/ati/Imakefile
+diff -u xc/programs/Xserver/hw/xfree86/drivers/ati/Imakefile:1.6 xc/programs/Xserver/hw/xfree86/drivers/ati/Imakefile:1.6.2.1
+--- xc/programs/Xserver/hw/xfree86/drivers/ati/Imakefile:1.6 Fri Jul 30 22:20:21 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/ati/Imakefile Wed Dec 15 08:47:20 2004
+@@ -87,8 +87,16 @@
+ * Currently, ATIAvoidNonPCI needs to be set to YES for those platforms that do
+ * not tolerate PCI master aborts.
+ */
++/*
++ * Some older IA64 platforms don't mind if we are poking around in PIO
++ * space, however the newer once do an MC if we poke any registers outside
++ * a small band in the VGA range. Therefore it is best not to touch PIO
++ * space in IA64 at all.
++ * This will disenfranchise Mach8/32 users but these cards are ISA and
++ * there is no IA64 with ISA slots. It is not recommended to use ISA
++ * adaptor boards for those cards.
++ */
+ #if defined(i386Architecture) || \
+- defined(ia64Architecture) || \
+ defined(AMD64Architecture) || \
+ defined(AlphaArchitecture)
+ # ifndef ATIAvoidCPIO
+@@ -149,7 +157,8 @@
+
+ #endif
+
+-DEFINES = $(CPIODEFINES) $(DGADEFINES) $(NONPCIDEFINES) $(DRIDEFINES)
++DEFINES = $(CPIODEFINES) $(DGADEFINES) $(NONPCIDEFINES) $(NOLEGACYDEFINES) \
++ $(DRIDEFINES)
+
+ SRCS1 = ati.c atiadapter.c atibus.c atichip.c atiident.c atioption.c \
+ atiprobe.c atividmem.c $(CPIOSRCS1) $(MODSRCS1) \
+Index: xc/programs/Xserver/hw/xfree86/drivers/ati/atipreinit.c
+diff -u xc/programs/Xserver/hw/xfree86/drivers/ati/atipreinit.c:1.3 xc/programs/Xserver/hw/xfree86/drivers/ati/atipreinit.c:1.3.4.1
+--- xc/programs/Xserver/hw/xfree86/drivers/ati/atipreinit.c:1.3 Mon Jul 26 19:14:58 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/ati/atipreinit.c Wed Dec 15 07:58:15 2004
+@@ -1918,11 +1918,11 @@
+ VBlankEnd += 0x0100U;
+
+ pATI->LCDHBlankWidth = HBlankEnd - HBlankStart;
+- pATI->LCDHSyncStart = HSyncStart - HBlankStart - 1;
++ pATI->LCDHSyncStart = HSyncStart - HBlankStart;
+ pATI->LCDHSyncWidth = HSyncEnd - HSyncStart;
+
+ pATI->LCDVBlankWidth = VBlankEnd - VBlankStart;
+- pATI->LCDVSyncStart = VSyncStart - VBlankStart - 1;
++ pATI->LCDVSyncStart = VSyncStart - VBlankStart;
+ pATI->LCDVSyncWidth = VSyncEnd - VSyncStart;
+
+ HDisplay = HTotal + 5 - pATI->LCDHBlankWidth;
+Index: xc/programs/Xserver/hw/xfree86/drivers/ati/atiprobe.c
+diff -u xc/programs/Xserver/hw/xfree86/drivers/ati/atiprobe.c:1.3 xc/programs/Xserver/hw/xfree86/drivers/ati/atiprobe.c:1.3.2.2
+--- xc/programs/Xserver/hw/xfree86/drivers/ati/atiprobe.c:1.3 Fri Jul 30 20:30:51 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/ati/atiprobe.c Wed Dec 15 08:47:20 2004
+@@ -1243,6 +1243,10 @@
+ xf86MsgVerb(X_INFO, 2, ATI_NAME ": Unshared VGA not probed.\n");
+ }
+
++ /*
++ * Mach8/32 probing doesn't work well on some legacy free ia64
++ * However if we use AVOID_CPIO we don't get here at all.
++ */
+ if (ATICheckSparseIOBases(NULL, ProbeFlags, 0x02E8U, 8,
+ fChipsets[ATI_CHIPSET_IBM8514] ||
+ fChipsets[ATI_CHIPSET_MACH8] ||
+@@ -1275,6 +1279,10 @@
+ ATI_NAME ": Unshared 8514/A not probed.\n");
+ }
+
++ /*
++ * Also NONPCI Mach64 probing is evil on legacy free platforms.
++ * However if we use AVOID_CPIO we don't get here at all.
++ */
+ for (i = 0; i < NumberOf(Mach64SparseIOBases); i++)
+ {
+ if (ATICheckSparseIOBases(NULL, ProbeFlags, Mach64SparseIOBases[i],
+@@ -1309,7 +1317,6 @@
+ ATIClaimSparseIOBases(ProbeFlags, Mach64SparseIOBases[i], 4,
+ DetectedMach64);
+ }
+-
+ #endif /* AVOID_NON_PCI */
+
+ }
+@@ -1539,7 +1546,6 @@
+ ATIFindVGA(pVideo, &pVGA, &pATI, p8514,
+ ProbeFlags);
+ }
+-
+ xf86SetPciVideo(NULL, NONE);
+ break;
+ }
+@@ -1554,6 +1560,9 @@
+ continue;
+
+ pPCI = pVideo->thisCard;
++ if (pPCI == NULL)
++ continue;
++
+ PciReg = pciReadLong(pPCI->tag, PCI_REG_USERCONFIG);
+ j = PciReg & 0x03U;
+ if (j == 0x03U)
+Index: xc/programs/Xserver/hw/xfree86/drivers/ati/ativga.c
+diff -u xc/programs/Xserver/hw/xfree86/drivers/ati/ativga.c:1.2 xc/programs/Xserver/hw/xfree86/drivers/ati/ativga.c:1.2.4.1
+--- xc/programs/Xserver/hw/xfree86/drivers/ati/ativga.c:1.2 Fri Apr 23 19:26:46 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/ati/ativga.c Wed Dec 15 07:58:15 2004
+@@ -185,7 +185,11 @@
+ (pATI->Chip >= ATI_CHIP_264CT))
+ pMode->CrtcHBlankStart--;
+ pMode->CrtcHSyncStart = pMode->HSyncStart >> 3;
++ if (pATI->LCDPanelID >= 0)
++ pMode->CrtcHSyncStart--;
+ pMode->CrtcHSyncEnd = pMode->HSyncEnd >> 3;
++ if (pATI->LCDPanelID >= 0)
++ pMode->CrtcHSyncEnd--;
+ pMode->CrtcHBlankEnd = (pMode->HTotal >> 3) - 1;
+ pMode->CrtcHTotal = (pMode->HTotal >> 3) - 5;
+ pMode->CrtcHSkew = pMode->HSkew;
+@@ -327,6 +331,11 @@
+ pMode->CrtcVBlankStart++;
+ else
+ pMode->CrtcVBlankStart--;
++ if (pATI->LCDPanelID >= 0)
++ {
++ pMode->CrtcVSyncStart--;
++ pMode->CrtcVSyncEnd--;
++ }
+ pMode->CrtcVBlankEnd--;
+ if (pATI->Chip < ATI_CHIP_264CT)
+ pMode->CrtcVBlankEnd--;
+Index: xc/programs/Xserver/hw/xfree86/drivers/ati/r128_accel.c
+diff -u xc/programs/Xserver/hw/xfree86/drivers/ati/r128_accel.c:1.3 xc/programs/Xserver/hw/xfree86/drivers/ati/r128_accel.c:1.3.4.1
+--- xc/programs/Xserver/hw/xfree86/drivers/ati/r128_accel.c:1.3 Wed Jun 16 09:43:58 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/ati/r128_accel.c Wed Dec 15 09:22:02 2004
+@@ -237,17 +237,23 @@
+ i = 0;
+ do {
+ ret = drmCommandNone(info->drmFD, DRM_R128_CCE_IDLE);
+- } while ( ret && errno == EBUSY && i++ < R128_IDLE_RETRY );
++ } while ( ret && errno == EBUSY && i++ < (R128_IDLE_RETRY * R128_IDLE_RETRY) );
+
+ if (ret && ret != -EBUSY) {
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ "%s: CCE idle %d\n", __FUNCTION__, ret);
+ }
+
++ if (i > R128_IDLE_RETRY) {
++ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
++ "%s: (DEBUG) CCE idle took i = %d\n", __FUNCTION__, i);
++ }
++
+ if (ret == 0) return;
+
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ "Idle timed out, resetting engine...\n");
++ R128CCE_STOP(pScrn, info);
+ R128EngineReset(pScrn);
+
+ /* Always restart the engine when doing CCE 2D acceleration */
+Index: xc/programs/Xserver/hw/xfree86/drivers/ati/r128_dri.c
+diff -u xc/programs/Xserver/hw/xfree86/drivers/ati/r128_dri.c:1.4 xc/programs/Xserver/hw/xfree86/drivers/ati/r128_dri.c:1.4.4.1
+--- xc/programs/Xserver/hw/xfree86/drivers/ati/r128_dri.c:1.4 Sat Jul 10 14:22:35 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/ati/r128_dri.c Wed Dec 15 08:53:01 2004
+@@ -1297,6 +1297,7 @@
+ if (info->irq) {
+ drmCtlUninstHandler(info->drmFD);
+ info->irq = 0;
++ info->gen_int_cntl = 0;
+ }
+
+ /* De-allocate vertex buffers */
+Index: xc/programs/Xserver/hw/xfree86/drivers/ati/r128_driver.c
+diff -u xc/programs/Xserver/hw/xfree86/drivers/ati/r128_driver.c:1.10 xc/programs/Xserver/hw/xfree86/drivers/ati/r128_driver.c:1.10.2.1
+--- xc/programs/Xserver/hw/xfree86/drivers/ati/r128_driver.c:1.10 Sun Aug 15 00:44:57 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/ati/r128_driver.c Wed Dec 15 09:13:36 2004
+@@ -1640,7 +1640,11 @@
+ NULL, /* linePitches */
+ 8 * 64, /* minPitch */
+ 8 * 1024, /* maxPitch */
+- 8 * 64, /* pitchInc */
++/*
++ * ATI docs say pitchInc must be 8 * 64, but this doesn't permit a pitch of
++ * 800 bytes, which is known to work on the Rage128 LF on clamshell iBooks
++ */
++ 8 * 32, /* pitchInc */
+ 128, /* minHeight */
+ 2048, /* maxHeight */
+ pScrn->display->virtualX,
+Index: xc/programs/Xserver/hw/xfree86/drivers/ati/r128_video.c
+diff -u xc/programs/Xserver/hw/xfree86/drivers/ati/r128_video.c:1.2 xc/programs/Xserver/hw/xfree86/drivers/ati/r128_video.c:1.2.4.1
+--- xc/programs/Xserver/hw/xfree86/drivers/ati/r128_video.c:1.2 Fri Apr 23 19:26:46 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/ati/r128_video.c Wed Dec 15 09:13:36 2004
+@@ -579,20 +579,20 @@
+
+ pScreen = screenInfo.screens[pScrn->scrnIndex];
+
+- new_linear = xf86AllocateOffscreenLinear(pScreen, size, 16,
++ new_linear = xf86AllocateOffscreenLinear(pScreen, size, 8,
+ NULL, NULL, NULL);
+
+ if(!new_linear) {
+ int max_size;
+
+- xf86QueryLargestOffscreenLinear(pScreen, &max_size, 16,
++ xf86QueryLargestOffscreenLinear(pScreen, &max_size, 8,
+ PRIORITY_EXTREME);
+
+ if(max_size < size)
+ return NULL;
+
+ xf86PurgeUnlockedOffscreenAreas(pScreen);
+- new_linear = xf86AllocateOffscreenLinear(pScreen, size, 16,
++ new_linear = xf86AllocateOffscreenLinear(pScreen, size, 8,
+ NULL, NULL, NULL);
+ }
+
+Index: xc/programs/Xserver/hw/xfree86/drivers/ati/radeon.h
+diff -u xc/programs/Xserver/hw/xfree86/drivers/ati/radeon.h:1.8 xc/programs/Xserver/hw/xfree86/drivers/ati/radeon.h:1.8.2.1
+--- xc/programs/Xserver/hw/xfree86/drivers/ati/radeon.h:1.8 Thu Aug 12 05:00:22 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/ati/radeon.h Tue Jan 25 03:20:12 2005
+@@ -555,6 +555,7 @@
+ Bool RenderAccel;
+ Bool RenderInited3D;
+ FBLinearPtr RenderTex;
++ Bool RenderTexValidR100;
+ void (*RenderCallback)(ScrnInfoPtr);
+ Time RenderTimeout;
+
+Index: xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_bios.c
+diff -u xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_bios.c:1.1 xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_bios.c:1.1.2.1
+--- xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_bios.c:1.1 Fri Jul 30 22:20:21 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_bios.c Thu Dec 16 02:08:34 2004
+@@ -198,13 +198,28 @@
+ return FALSE;
+ }
+ } else {
++ /* Some laptops only have one connector (VGA) listed in the connector table,
++ * we need to add LVDS in as a non-DDC display.
++ * Note, we can't assume the listed VGA will be filled in PortInfo[0],
++ * when walking through connector table. connector_found has following meaning:
++ * 0 -- nothing found,
++ * 1 -- only PortInfo[0] filled,
++ * 2 -- only PortInfo[1] filled,
++ * 3 -- both are filled.
++ */
++ int connector_found = 0;
++
+ if ((tmp = RADEON_BIOS16(info->ROMHeaderStart + 0x50))) {
+ for (i = 1; i < 4; i++) {
+
+ if (!RADEON_BIOS8(tmp + i*2) && i > 1) break; /* end of table */
+
+ tmp0 = RADEON_BIOS16(tmp + i*2);
+- if (((tmp0 >> 12) & 0x1f) == 0) continue; /* no connector */
++ if (((tmp0 >> 12) & 0x0f) == 0) continue; /* no connector */
++ if (connector_found > 0) {
++ if (pRADEONEnt->PortInfo[tmp1].DDCType == ((tmp0 >> 8) & 0x0f))
++ continue; /* same connector */
++ }
+
+ /* internal DDC_DVI port will get assigned to PortInfo[0], or if there is no DDC_DVI (like in some IGPs). */
+ tmp1 = ((((tmp0 >> 8) & 0xf) == DDC_DVI) || (tmp1 == 1)) ? 0 : 1; /* determine port info index */
+@@ -222,9 +237,7 @@
+ pRADEONEnt->PortInfo[tmp1].TMDSType == TMDS_INT)
+ pRADEONEnt->PortInfo[tmp1].TMDSType = TMDS_UNKNOWN;
+
+- xf86DrvMsg(0, X_INFO, "Connector%d: DDCType-%d, DACType-%d, TMDSType-%d, ConnectorType-%d\n",
+- tmp1, pRADEONEnt->PortInfo[tmp1].DDCType, pRADEONEnt->PortInfo[tmp1].DACType,
+- pRADEONEnt->PortInfo[tmp1].TMDSType, pRADEONEnt->PortInfo[tmp1].ConnectorType);
++ connector_found += (tmp1 + 1);
+ }
+ } else {
+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "No Connector Info Table found!\n");
+@@ -232,14 +245,54 @@
+ }
+
+ if (info->IsMobility) {
+- if ((tmp = RADEON_BIOS16(info->ROMHeaderStart + 0x42))) {
+- if ((tmp0 = RADEON_BIOS16(tmp + 0x15))) {
+- if ((tmp1 = RADEON_BIOS8(tmp0+2) & 0x07)) {
+- pRADEONEnt->PortInfo[0].DDCType = tmp1;
+- xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "LCD DDC Info Table found!\n");
+- }
++ /* For the cases where only one VGA connector is found,
++ we assume LVDS is not listed in the connector table,
++ add it in here as the first port.
++ */
++ if ((connector_found < 3) && (pRADEONEnt->PortInfo[tmp1].ConnectorType == CONNECTOR_CRT)) {
++ if (connector_found == 1) {
++ memcpy (&pRADEONEnt->PortInfo[1], &pRADEONEnt->PortInfo[0],
++ sizeof (pRADEONEnt->PortInfo[0]));
++ }
++ pRADEONEnt->PortInfo[0].DACType = DAC_TVDAC;
++ pRADEONEnt->PortInfo[0].TMDSType = TMDS_UNKNOWN;
++ pRADEONEnt->PortInfo[0].DDCType = DDC_NONE_DETECTED;
++ pRADEONEnt->PortInfo[0].ConnectorType = CONNECTOR_PROPRIETARY;
++
++ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "LVDS port is not in connector table, added in.\n");
++ if (connector_found == 0) connector_found = 1;
++ else connector_found = 3;
+ }
+- }
++
++ if ((tmp = RADEON_BIOS16(info->ROMHeaderStart + 0x42))) {
++ if ((tmp0 = RADEON_BIOS16(tmp + 0x15))) {
++ if ((tmp1 = RADEON_BIOS8(tmp0+2) & 0x07)) {
++ pRADEONEnt->PortInfo[0].DDCType = tmp1;
++ xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "LCD DDC Info Table found!\n");
++ }
++ }
++ }
++ } else if (connector_found == 2) {
++ memcpy (&pRADEONEnt->PortInfo[0], &pRADEONEnt->PortInfo[1],
++ sizeof (pRADEONEnt->PortInfo[0]));
++ pRADEONEnt->PortInfo[1].DACType = DAC_UNKNOWN;
++ pRADEONEnt->PortInfo[1].TMDSType = TMDS_UNKNOWN;
++ pRADEONEnt->PortInfo[1].DDCType = DDC_NONE_DETECTED;
++ pRADEONEnt->PortInfo[1].ConnectorType = CONNECTOR_NONE;
++ connector_found = 1;
++ }
++
++ if (connector_found == 0) {
++ xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "No connector found in Connector Info Table.\n");
++ } else {
++ xf86DrvMsg(0, X_INFO, "Connector0: DDCType-%d, DACType-%d, TMDSType-%d, ConnectorType-%d\n",
++ pRADEONEnt->PortInfo[0].DDCType, pRADEONEnt->PortInfo[0].DACType,
++ pRADEONEnt->PortInfo[0].TMDSType, pRADEONEnt->PortInfo[0].ConnectorType);
++ }
++ if (connector_found == 3) {
++ xf86DrvMsg(0, X_INFO, "Connector1: DDCType-%d, DACType-%d, TMDSType-%d, ConnectorType-%d\n",
++ pRADEONEnt->PortInfo[1].DDCType, pRADEONEnt->PortInfo[1].DACType,
++ pRADEONEnt->PortInfo[1].TMDSType, pRADEONEnt->PortInfo[1].ConnectorType);
+ }
+
+ #if 0
+Index: xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c
+diff -u xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c:1.19 xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c:1.19.2.7
+--- xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c:1.19 Wed Aug 25 00:30:41 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c Fri Dec 17 00:13:18 2004
+@@ -365,6 +365,7 @@
+ "xf86InitInt10",
+ "xf86FreeInt10",
+ "xf86int10Addr",
++ "xf86ExecX86int10",
+ NULL
+ };
+
+@@ -1311,7 +1312,7 @@
+ info->PanelYRes = (INREG(RADEON_CRTC_V_TOTAL_DISP)>>16) + 1;
+ }
+ if (fp_horz_stretch & RADEON_HORZ_STRETCH_ENABLE) {
+- info->PanelXRes = ((fp_vert_stretch>>16) + 1) * 8;
++ info->PanelXRes = ((fp_horz_stretch>>16) + 1) * 8;
+ } else {
+ info->PanelXRes = ((INREG(RADEON_CRTC_H_TOTAL_DISP)>>16) + 1) * 8;
+ }
+@@ -1712,6 +1713,13 @@
+ break;
+ }
+ }
++ for (i = 0; i < max_mt; i++) {
++ if (strcmp(s2, MonTypeName[i]) == 0) {
++ pRADEONEnt->PortInfo[1].MonType = MonTypeID[i];
++ break;
++ }
++ }
++
+ if (i == max_mt)
+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ "Invalid Monitor type specified for 2nd port \n");
+@@ -1744,32 +1752,45 @@
+
+ }
+
+- if (pRADEONEnt->PortInfo[0].MonType == MT_UNKNOWN || pRADEONEnt->PortInfo[1].MonType == MT_UNKNOWN) {
+-
+- if(((!info->HasCRTC2) || info->IsDellServer) &&
+- (pRADEONEnt->PortInfo[0].MonType == MT_UNKNOWN)) {
++ if(((!info->HasCRTC2) || info->IsDellServer)) {
++ if (pRADEONEnt->PortInfo[0].MonType == MT_UNKNOWN) {
+ if((pRADEONEnt->PortInfo[0].MonType = RADEONDisplayDDCConnected(pScrn, DDC_DVI, &pRADEONEnt->PortInfo[0])));
+ else if((pRADEONEnt->PortInfo[0].MonType = RADEONDisplayDDCConnected(pScrn, DDC_VGA, &pRADEONEnt->PortInfo[0])));
+ else if((pRADEONEnt->PortInfo[0].MonType = RADEONDisplayDDCConnected(pScrn, DDC_CRT2, &pRADEONEnt->PortInfo[0])));
+ else
+ pRADEONEnt->PortInfo[0].MonType = MT_CRT;
++ }
+
+- if (!ignore_edid) {
+- if (pRADEONEnt->PortInfo[0].MonInfo) {
+- xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Monitor1 EDID data ---------------------------\n");
+- xf86PrintEDID(pRADEONEnt->PortInfo[0].MonInfo );
+- xf86DrvMsg(pScrn->scrnIndex, X_INFO, "End of Monitor1 EDID data --------------------\n");
+- }
++ if (!ignore_edid) {
++ if (pRADEONEnt->PortInfo[0].MonInfo) {
++ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Monitor1 EDID data ---------------------------\n");
++ xf86PrintEDID(pRADEONEnt->PortInfo[0].MonInfo );
++ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "End of Monitor1 EDID data --------------------\n");
+ }
+-
+- pRADEONEnt->MonType1 = pRADEONEnt->PortInfo[0].MonType;
+- pRADEONEnt->MonInfo1 = pRADEONEnt->PortInfo[0].MonInfo;
+- pRADEONEnt->MonType2 = MT_NONE;
+- pRADEONEnt->MonInfo2 = NULL;
+- info->MergeType = MT_NONE;
+- return TRUE;
+ }
+
++ pRADEONEnt->MonType1 = pRADEONEnt->PortInfo[0].MonType;
++ pRADEONEnt->MonInfo1 = pRADEONEnt->PortInfo[0].MonInfo;
++ pRADEONEnt->MonType2 = MT_NONE;
++ pRADEONEnt->MonInfo2 = NULL;
++ info->MergeType = MT_NONE;
++ info->DisplayType = pRADEONEnt->MonType1;
++
++ xf86DrvMsg(pScrn->scrnIndex, X_INFO,
++ "Primary:\n Monitor -- %s\n Connector -- %s\n DAC Type -- %s\n TMDS Type -- %s\n DDC Type -- %s\n",
++ MonTypeName[pRADEONEnt->PortInfo[0].MonType+1],
++ info->IsAtomBios ?
++ ConnectorTypeNameATOM[pRADEONEnt->PortInfo[0].ConnectorType]:
++ ConnectorTypeName[pRADEONEnt->PortInfo[0].ConnectorType],
++ DACTypeName[pRADEONEnt->PortInfo[0].DACType+1],
++ TMDSTypeName[pRADEONEnt->PortInfo[0].TMDSType+1],
++ DDCTypeName[pRADEONEnt->PortInfo[0].DDCType]);
++
++ return TRUE;
++ }
++
++ if (pRADEONEnt->PortInfo[0].MonType == MT_UNKNOWN || pRADEONEnt->PortInfo[1].MonType == MT_UNKNOWN) {
++
+ /* Primary Head (DVI or Laptop Int. panel)*/
+ /* A ddc capable display connected on DVI port */
+ if (pRADEONEnt->PortInfo[0].MonType == MT_UNKNOWN) {
+@@ -2583,8 +2604,10 @@
+ if (ddc->det_mon[j].type == 0) {
+ struct detailed_timings *d_timings =
+ &ddc->det_mon[j].section.d_timings;
+- if (info->PanelXRes < d_timings->h_active &&
+- info->PanelYRes < d_timings->v_active) {
++ if (info->PanelXRes <= d_timings->h_active &&
++ info->PanelYRes <= d_timings->v_active) {
++
++ if (info->DotClock) continue; /* Timings already inited */
+
+ info->PanelXRes = d_timings->h_active;
+ info->PanelYRes = d_timings->v_active;
+@@ -3157,8 +3180,9 @@
+ new->next = NULL;
+ new->prev = last;
+
+- last->next = new;
++ if (last) last->next = new;
+ last = new;
++ if (!first) first = new;
+ }
+ }
+ }
+@@ -4471,10 +4495,12 @@
+
+ RADEONSave(pScrn);
+
+- if (xf86ReturnOptValBool(info->Options, OPTION_DYNAMIC_CLOCKS, FALSE)) {
+- RADEONSetDynamicClock(pScrn, 1);
+- } else {
+- RADEONSetDynamicClock(pScrn, 0);
++ if ((!info->IsSecondary) && info->IsMobility) {
++ if (xf86ReturnOptValBool(info->Options, OPTION_DYNAMIC_CLOCKS, FALSE)) {
++ RADEONSetDynamicClock(pScrn, 1);
++ } else {
++ RADEONSetDynamicClock(pScrn, 0);
++ }
+ }
+
+ if (info->FBDev) {
+@@ -7133,6 +7159,7 @@
+ RADEONDoAdjustFrame(pScrn, x, y, FALSE);
+ }
+
++ RADEONSetFBLocation (pScrn);
+ #ifdef XF86DRI
+ if (info->CPStarted) DRIUnlock(pScrn->pScreen);
+ #endif
+@@ -7145,9 +7172,22 @@
+ {
+ ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+ RADEONInfoPtr info = RADEONPTR(pScrn);
++ unsigned char *RADEONMMIO = info->MMIO;
+
+ RADEONTRACE(("RADEONEnterVT\n"));
+
++ if (INREG(RADEON_CONFIG_MEMSIZE) == 0) { /* Softboot V_BIOS */
++ xf86Int10InfoPtr pInt;
++ xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
++ "zero MEMSIZE, probably at D3cold. Re-POSTing via int10.\n");
++ pInt = xf86InitInt10 (info->pEnt->index);
++ if (pInt) {
++ pInt->num = 0xe6;
++ xf86ExecX86int10 (pInt);
++ xf86FreeInt10 (pInt);
++ }
++ }
++
+ if (info->FBDev) {
+ unsigned char *RADEONMMIO = info->MMIO;
+ if (!fbdevHWEnterVT(scrnIndex,flags)) return FALSE;
+@@ -7158,6 +7198,8 @@
+ } else
+ if (!RADEONModeInit(pScrn, pScrn->currentMode)) return FALSE;
+
++ RADEONSetFBLocation (pScrn);
++
+ #ifdef XF86DRI
+ if (info->directRenderingEnabled) {
+ /* get the Radeon back into shape after resume */
+Index: xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_reg.h
+diff -u xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_reg.h:1.7 xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_reg.h:1.7.2.1
+--- xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_reg.h:1.7 Mon Aug 9 22:37:22 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_reg.h Fri Dec 17 00:13:18 2004
+@@ -803,7 +803,7 @@
+ # define RADEON_MC_MCLK_MAX_DYN_STOP_LAT (1<<12)
+ # define RADEON_IO_MCLK_MAX_DYN_STOP_LAT (1<<13)
+ # define RADEON_MC_MCLK_DYN_ENABLE (1 << 14)
+-# define RADEON_IO_MCLK_DYN_ENABLE (1 << 14)
++# define RADEON_IO_MCLK_DYN_ENABLE (1 << 15)
+ #define RADEON_MDGPIO_A_REG 0x01ac
+ #define RADEON_MDGPIO_EN_REG 0x01b0
+ #define RADEON_MDGPIO_MASK 0x0198
+Index: xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_render.c
+diff -u xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_render.c:1.8 xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_render.c:1.8.2.1
+--- xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_render.c:1.8 Mon Aug 30 04:31:50 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_render.c Tue Jan 25 03:20:12 2005
+@@ -7,6 +7,11 @@
+ #ifndef RENDER_GENERIC_HELPER
+ #define RENDER_GENERIC_HELPER
+
++/* R100 code path constants */
++/* Minimum working values for RV200: 65x8 - your mileage may vary */
++#define MAGIC_R100_MIN_TEX_WIDTH (65)
++#define MAGIC_R100_MIN_TEX_HEIGHT (8)
++
+ static void RadeonInit3DEngineMMIO(ScrnInfoPtr pScrn);
+ #ifdef XF86DRI
+ static void RadeonInit3DEngineCP(ScrnInfoPtr pScrn);
+@@ -421,6 +426,8 @@
+ CARD8 *dst;
+ CARD32 tex_size = 0, txformat;
+ int dst_pitch, offset, size, i, tex_bytepp;
++ int offscreensize = (pScrn->bitsPerPixel >> 3) *
++ pScrn->displayWidth * MAGIC_R100_MIN_TEX_HEIGHT;
+ ACCEL_PREAMBLE();
+
+ if ((width > 2048) || (height > 2048))
+@@ -440,7 +447,8 @@
+ dst_pitch = (width * tex_bytepp + 31) & ~31;
+ size = dst_pitch * height;
+
+- if (!AllocateLinear(pScrn, size))
++ /* Allocate off-screen space for texture pre-rendering as well */
++ if (!AllocateLinear(pScrn, size + offscreensize))
+ return FALSE;
+
+ if (flags & XAA_RENDER_REPEAT) {
+@@ -451,7 +459,7 @@
+ txformat |= RADEON_TXFORMAT_NON_POWER2;
+ }
+
+- offset = info->RenderTex->offset * pScrn->bitsPerPixel / 8;
++ offset = info->RenderTex->offset * pScrn->bitsPerPixel / 8 + offscreensize;
+
+ /* Upload texture to card. Should use ImageWrite to avoid syncing. */
+ i = height;
+@@ -481,6 +489,7 @@
+ RADEON_CLAMP_S_WRAP |
+ RADEON_CLAMP_T_WRAP);
+ FINISH_ACCEL();
++ info->RenderTexValidR100 = FALSE;
+
+ return TRUE;
+ }
+@@ -608,6 +617,95 @@
+
+ ACCEL_PREAMBLE();
+
++ /* R100 chips seem to have cache problems and do not reload small textures
++ * from memory for small render areas. Thus we have to render a
++ * 'sufficiently large' portion of the texture (may contain uninitialized
++ * data as well) to off-screen memory to invalidate the cache. */
++ if (!info->RenderTexValidR100 &&
++ width*height < MAGIC_R100_MIN_TEX_WIDTH*MAGIC_R100_MIN_TEX_HEIGHT)
++/* (width<MAGIC_R100_MIN_TEX_WIDTH || height<MAGIC_R100_MIN_TEX_HEIGHT))*/
++ {
++ fboffset = info->fbLocation + pScrn->fbOffset +
++ info->RenderTex->offset * (pScrn->bitsPerPixel >> 3);
++ l = 0.0;
++ t = 0.0;
++ r = MAGIC_R100_MIN_TEX_WIDTH;
++ b = MAGIC_R100_MIN_TEX_HEIGHT;
++
++#ifdef ACCEL_CP
++ BEGIN_RING(23);
++
++ OUT_ACCEL_REG(RADEON_RB3D_COLOROFFSET, fboffset);
++
++ OUT_RING(CP_PACKET3(RADEON_CP_PACKET3_3D_DRAW_IMMD, 17));
++ /* RADEON_SE_VTX_FMT */
++ OUT_RING(RADEON_CP_VC_FRMT_XY |
++ RADEON_CP_VC_FRMT_ST0);
++ /* SE_VF_CNTL */
++ OUT_RING(RADEON_CP_VC_CNTL_PRIM_TYPE_TRI_FAN |
++ RADEON_CP_VC_CNTL_PRIM_WALK_RING |
++ RADEON_CP_VC_CNTL_MAOS_ENABLE |
++ RADEON_CP_VC_CNTL_VTX_FMT_RADEON_MODE |
++ (4 << RADEON_CP_VC_CNTL_NUM_SHIFT));
++
++ OUT_RING(F_TO_DW(l));
++ OUT_RING(F_TO_DW(t));
++ OUT_RING(F_TO_DW(l));
++ OUT_RING(F_TO_DW(t));
++
++ OUT_RING(F_TO_DW(r));
++ OUT_RING(F_TO_DW(t));
++ OUT_RING(F_TO_DW(r));
++ OUT_RING(F_TO_DW(t));
++
++ OUT_RING(F_TO_DW(r));
++ OUT_RING(F_TO_DW(b));
++ OUT_RING(F_TO_DW(r));
++ OUT_RING(F_TO_DW(b));
++
++ OUT_RING(F_TO_DW(l));
++ OUT_RING(F_TO_DW(b));
++ OUT_RING(F_TO_DW(l));
++ OUT_RING(F_TO_DW(b));
++
++ OUT_ACCEL_REG(RADEON_WAIT_UNTIL, RADEON_WAIT_3D_IDLECLEAN);
++
++ ADVANCE_RING();
++#else
++ BEGIN_ACCEL(19);
++
++ OUT_ACCEL_REG(RADEON_RB3D_COLOROFFSET, fboffset);
++
++ OUT_ACCEL_REG(RADEON_SE_VF_CNTL, RADEON_VF_PRIM_TYPE_TRIANGLE_FAN |
++ RADEON_VF_PRIM_WALK_DATA |
++ RADEON_VF_RADEON_MODE |
++ (4 << RADEON_VF_NUM_VERTICES_SHIFT));
++
++ OUT_ACCEL_REG(RADEON_SE_PORT_DATA0, F_TO_DW(l));
++ OUT_ACCEL_REG(RADEON_SE_PORT_DATA0, F_TO_DW(t));
++ OUT_ACCEL_REG(RADEON_SE_PORT_DATA0, F_TO_DW(l));
++ OUT_ACCEL_REG(RADEON_SE_PORT_DATA0, F_TO_DW(t));
++
++ OUT_ACCEL_REG(RADEON_SE_PORT_DATA0, F_TO_DW(r));
++ OUT_ACCEL_REG(RADEON_SE_PORT_DATA0, F_TO_DW(t));
++ OUT_ACCEL_REG(RADEON_SE_PORT_DATA0, F_TO_DW(r));
++ OUT_ACCEL_REG(RADEON_SE_PORT_DATA0, F_TO_DW(t));
++
++ OUT_ACCEL_REG(RADEON_SE_PORT_DATA0, F_TO_DW(r));
++ OUT_ACCEL_REG(RADEON_SE_PORT_DATA0, F_TO_DW(b));
++ OUT_ACCEL_REG(RADEON_SE_PORT_DATA0, F_TO_DW(r));
++ OUT_ACCEL_REG(RADEON_SE_PORT_DATA0, F_TO_DW(b));
++
++ OUT_ACCEL_REG(RADEON_SE_PORT_DATA0, F_TO_DW(l));
++ OUT_ACCEL_REG(RADEON_SE_PORT_DATA0, F_TO_DW(b));
++ OUT_ACCEL_REG(RADEON_SE_PORT_DATA0, F_TO_DW(l));
++ OUT_ACCEL_REG(RADEON_SE_PORT_DATA0, F_TO_DW(b));
++
++ OUT_ACCEL_REG(RADEON_WAIT_UNTIL, RADEON_WAIT_3D_IDLECLEAN);
++ FINISH_ACCEL();
++#endif
++ }
++
+ /* Note: we can't simply set up the 3D surface at the same location as the
+ * front buffer, because the 2048x2048 limit on coordinates may be smaller
+ * than the (MergedFB) screen.
+@@ -696,6 +794,7 @@
+ OUT_ACCEL_REG(RADEON_WAIT_UNTIL, RADEON_WAIT_3D_IDLECLEAN);
+ FINISH_ACCEL();
+ #endif
++ info->RenderTexValidR100 = TRUE;
+
+ }
+
+Index: xc/programs/Xserver/hw/xfree86/drivers/chips/chips.man
+diff -u xc/programs/Xserver/hw/xfree86/drivers/chips/chips.man:1.2 xc/programs/Xserver/hw/xfree86/drivers/chips/chips.man:1.2.4.1
+--- xc/programs/Xserver/hw/xfree86/drivers/chips/chips.man:1.2 Fri Apr 23 19:27:21 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/chips/chips.man Mon Jan 24 02:38:14 2005
+@@ -205,6 +205,17 @@
+ off by default. Using this option forces the use of an independent refresh
+ rate on the two screens.
+ Default: off.
++.TP
++.BI "Option \*qFpMode\*q \*q" boolean \*q
++The driver probes the chip to find out if a flat panel (LCD) is connected
++and active. If this is true it limits the possible screen size to the maximum
++resolution of the panel. The chips is initialized by the BIOS which may
++set the chip to 'dual' mode even if no panel is connected. In this case
++the available resolution on the CRT is limited to the panel size
++the BIOS has set. To tell the driver that no panel is connected despite
++of what the BIOS is saying set this option to off. Don't set it to off
++if a panel is connected.
++Default: value probed by BIOS.
+ .SH "SEE ALSO"
+ __xservername__(__appmansuffix__), __xconfigfile__(__filemansuffix__), xorgconfig(__appmansuffix__), Xserver(__appmansuffix__), X(__miscmansuffix__)
+ .PP
+Index: xc/programs/Xserver/hw/xfree86/drivers/i810/common.h
+diff -u xc/programs/Xserver/hw/xfree86/drivers/i810/common.h:1.3 xc/programs/Xserver/hw/xfree86/drivers/i810/common.h:1.3.4.1
+--- xc/programs/Xserver/hw/xfree86/drivers/i810/common.h:1.3 Tue Jun 22 14:28:46 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/i810/common.h Wed Dec 15 09:35:23 2004
+@@ -173,7 +173,7 @@
+ #define BEGIN_LP_RING(n) \
+ unsigned int outring, ringmask; \
+ volatile unsigned char *virt; \
+- unsigned int needed; \
++ int needed; \
+ if ((n) & 1) \
+ ErrorF("BEGIN_LP_RING called with odd argument: %d\n", n); \
+ if ((n) > 2 && (I810_DEBUG&DEBUG_ALWAYS_SYNC)) \
+@@ -206,7 +206,7 @@
+ #define BEGIN_LP_RING(n) \
+ unsigned int outring, ringmask; \
+ volatile unsigned char *virt; \
+- unsigned int needed; \
++ int needed; \
+ if ((n) & 1) \
+ ErrorF("BEGIN_LP_RING called with odd argument: %d\n", n); \
+ if ((n) > 2 && (I810_DEBUG&DEBUG_ALWAYS_SYNC)) \
+Index: xc/programs/Xserver/hw/xfree86/drivers/i810/i810.h
+diff -u xc/programs/Xserver/hw/xfree86/drivers/i810/i810.h:1.4 xc/programs/Xserver/hw/xfree86/drivers/i810/i810.h:1.4.4.1
+--- xc/programs/Xserver/hw/xfree86/drivers/i810/i810.h:1.4 Tue Jun 22 14:28:46 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/i810/i810.h Wed Dec 15 09:35:23 2004
+@@ -172,7 +172,7 @@
+ unsigned long OverlayPhysical;
+ unsigned long OverlayStart;
+ int colorKey;
+- int surfaceAllocation[I810_TOTAL_SURFACES];
++ unsigned int surfaceAllocation[I810_TOTAL_SURFACES];
+ int numSurfaces;
+
+ DGAModePtr DGAModes;
+@@ -295,9 +295,10 @@
+ extern void I810Sync(ScrnInfoPtr pScrn);
+ extern unsigned long I810LocalToPhysical(ScrnInfoPtr pScrn,
+ unsigned long local);
+-extern int I810AllocLow(I810MemRange * result, I810MemRange * pool, int size);
++extern int I810AllocLow(I810MemRange * result, I810MemRange * pool,
++ int size);
+ extern int I810AllocHigh(I810MemRange * result, I810MemRange * pool,
+- int size);
++ int size);
+ extern Bool I810AllocateFront(ScrnInfoPtr pScrn);
+
+ extern int I810AllocateGARTMemory(ScrnInfoPtr pScrn);
+Index: xc/programs/Xserver/hw/xfree86/drivers/i810/i810_accel.c
+diff -u xc/programs/Xserver/hw/xfree86/drivers/i810/i810_accel.c:1.4 xc/programs/Xserver/hw/xfree86/drivers/i810/i810_accel.c:1.4.2.1
+--- xc/programs/Xserver/hw/xfree86/drivers/i810/i810_accel.c:1.4 Fri Jul 30 20:30:52 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/i810/i810_accel.c Wed Dec 15 09:35:23 2004
+@@ -259,7 +259,7 @@
+ #ifdef XF86DRI
+ /* VT switching tries to do this.
+ */
+- if (!pI810->LockHeld && pI810->directRenderingEnabled) {
++ if ((!pI810->LockHeld && pI810->directRenderingEnabled) || !pScrn->vtSema) {
+ return;
+ }
+ #endif
+Index: xc/programs/Xserver/hw/xfree86/drivers/i810/i810_dri.c
+diff -u xc/programs/Xserver/hw/xfree86/drivers/i810/i810_dri.c:1.4 xc/programs/Xserver/hw/xfree86/drivers/i810/i810_dri.c:1.4.4.2
+--- xc/programs/Xserver/hw/xfree86/drivers/i810/i810_dri.c:1.4 Tue Jun 22 14:28:46 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/i810/i810_dri.c Tue Jan 25 00:22:23 2005
+@@ -290,7 +290,7 @@
+ unsigned long dcacheHandle;
+ int sysmem_size = 0;
+ int back_size = 0;
+- int pitch_idx = 0;
++ unsigned int pitch_idx = 0;
+ int bufs;
+ int width = pScrn->displayWidth * pI810->cpp;
+ int i;
+@@ -1497,6 +1497,11 @@
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,"%s\n",strerror(errno));
+ return FALSE;
+ }
++ if (pI810->cursorARGBHandle != 0)
++ if (drmAgpUnbind(pI810->drmSubFD, pI810->cursorARGBHandle) != 0) {
++ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,"%s\n",strerror(errno));
++ return FALSE;
++ }
+ if (pI810->agpAcquired == TRUE)
+ drmAgpRelease(pI810->drmSubFD);
+ pI810->agpAcquired = FALSE;
+Index: xc/programs/Xserver/hw/xfree86/drivers/i810/i810_driver.c
+diff -u xc/programs/Xserver/hw/xfree86/drivers/i810/i810_driver.c:1.9 xc/programs/Xserver/hw/xfree86/drivers/i810/i810_driver.c:1.9.2.1
+--- xc/programs/Xserver/hw/xfree86/drivers/i810/i810_driver.c:1.9 Wed Aug 25 00:30:41 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/i810/i810_driver.c Wed Dec 15 09:35:23 2004
+@@ -1124,14 +1124,6 @@
+ xf86SetOperatingState(resVgaIo, pI810->pEnt->index, ResUnusedOpr);
+ xf86SetOperatingState(resVgaMem, pI810->pEnt->index, ResDisableOpr);
+
+- pI810->LpRing = xalloc(sizeof(I810RingBuffer));
+- if (!pI810->LpRing) {
+- xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+- "Could not allocate lpring data structure.\n");
+- I810FreeRec(pScrn);
+- return FALSE;
+- }
+-
+ return TRUE;
+ }
+
+@@ -1159,7 +1151,7 @@
+ I810MapMem(ScrnInfoPtr pScrn)
+ {
+ I810Ptr pI810 = I810PTR(pScrn);
+- unsigned i;
++ long i;
+
+ for (i = 2; i < pI810->FbMapSize; i <<= 1) ;
+ pI810->FbMapSize = i;
+@@ -2074,6 +2066,13 @@
+ pI810 = I810PTR(pScrn);
+ hwp = VGAHWPTR(pScrn);
+
++ pI810->LpRing = xcalloc(sizeof(I810RingBuffer),1);
++ if (!pI810->LpRing) {
++ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
++ "Could not allocate lpring data structure.\n");
++ return FALSE;
++ }
++
+ miClearVisualTypes();
+
+ /* Re-implemented Direct Color support, -jens */
+Index: xc/programs/Xserver/hw/xfree86/drivers/i810/i810_memory.c
+diff -u xc/programs/Xserver/hw/xfree86/drivers/i810/i810_memory.c:1.4 xc/programs/Xserver/hw/xfree86/drivers/i810/i810_memory.c:1.4.2.1
+--- xc/programs/Xserver/hw/xfree86/drivers/i810/i810_memory.c:1.4 Mon Aug 30 03:19:08 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/i810/i810_memory.c Wed Dec 15 09:35:23 2004
+@@ -55,7 +55,7 @@
+ int
+ I810AllocLow(I810MemRange * result, I810MemRange * pool, int size)
+ {
+- if (size > pool->Size)
++ if (size > (long)pool->Size)
+ return 0;
+
+ pool->Size -= size;
+@@ -69,7 +69,7 @@
+ int
+ I810AllocHigh(I810MemRange * result, I810MemRange * pool, int size)
+ {
+- if (size > pool->Size)
++ if (size > (long)pool->Size)
+ return 0;
+
+ pool->Size -= size;
+Index: xc/programs/Xserver/hw/xfree86/drivers/i810/i810_reg.h
+diff -u xc/programs/Xserver/hw/xfree86/drivers/i810/i810_reg.h:1.3 xc/programs/Xserver/hw/xfree86/drivers/i810/i810_reg.h:1.3.4.1
+--- xc/programs/Xserver/hw/xfree86/drivers/i810/i810_reg.h:1.3 Tue Jun 22 14:28:46 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/i810/i810_reg.h Wed Dec 15 09:35:23 2004
+@@ -459,11 +459,11 @@
+ #define I830_HEAD_MASK 0x001FFFFC
+
+ #define RING_START 0x08
+-#define START_ADDR 0x00FFFFF8
++#define START_ADDR 0x03FFFFF8
+ #define I830_RING_START_MASK 0xFFFFF000
+
+ #define RING_LEN 0x0C
+-#define RING_NR_PAGES 0x000FF000
++#define RING_NR_PAGES 0x001FF000
+ #define I830_RING_NR_PAGES 0x001FF000
+ #define RING_REPORT_MASK 0x00000006
+ #define RING_REPORT_64K 0x00000002
+Index: xc/programs/Xserver/hw/xfree86/drivers/i810/i830.h
+diff -u xc/programs/Xserver/hw/xfree86/drivers/i810/i830.h:1.5 xc/programs/Xserver/hw/xfree86/drivers/i810/i830.h:1.5.4.1
+--- xc/programs/Xserver/hw/xfree86/drivers/i810/i830.h:1.5 Tue Jul 6 14:37:47 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/i810/i830.h Wed Dec 15 09:35:23 2004
+@@ -180,17 +180,17 @@
+ int CacheLines;
+
+ /* These are set in PreInit and never changed. */
+- unsigned long FbMapSize;
+- unsigned long TotalVideoRam;
++ long FbMapSize;
++ long TotalVideoRam;
+ I830MemRange StolenMemory; /* pre-allocated memory */
+- unsigned long BIOSMemorySize; /* min stolen pool size */
++ long BIOSMemorySize; /* min stolen pool size */
+ int BIOSMemSizeLoc;
+
+ /* These change according to what has been allocated. */
+ long FreeMemory;
+ I830MemRange MemoryAperture;
+ I830MemPool StolenPool;
+- unsigned long allocatedMemory;
++ long allocatedMemory;
+
+ /* Regions allocated either from the above pools, or from agpgart. */
+ /* for single and dual head configurations */
+@@ -348,7 +348,7 @@
+ int xoffset;
+ int yoffset;
+
+- int SaveGeneration;
++ unsigned int SaveGeneration;
+ Bool vbeRestoreWorkaround;
+ Bool displayInfo;
+ Bool devicePresence;
+@@ -415,7 +415,7 @@
+ extern Bool I830BindGARTMemory(ScrnInfoPtr pScrn);
+ extern Bool I830UnbindGARTMemory(ScrnInfoPtr pScrn);
+ extern unsigned long I830AllocVidMem(ScrnInfoPtr pScrn, I830MemRange *result,
+- I830MemPool *pool, unsigned long size,
++ I830MemPool *pool, long size,
+ unsigned long alignment, int flags);
+
+ extern void I830PrintAllRegisters(I830RegPtr i830Reg);
+Index: xc/programs/Xserver/hw/xfree86/drivers/i810/i830_driver.c
+diff -u xc/programs/Xserver/hw/xfree86/drivers/i810/i830_driver.c:1.6 xc/programs/Xserver/hw/xfree86/drivers/i810/i830_driver.c:1.6.2.1
+--- xc/programs/Xserver/hw/xfree86/drivers/i810/i830_driver.c:1.6 Fri Jul 30 20:38:27 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/i810/i830_driver.c Wed Dec 15 09:35:23 2004
+@@ -594,6 +594,7 @@
+ I830Ptr pI830 = I830PTR(pScrn);
+ vbeInfoPtr pVbe = pI830->pVbe;
+ CARD32 temp;
++
+ #ifdef I915G_WORKAROUND
+ int getmode;
+ int mode;
+@@ -1018,7 +1019,7 @@
+ I830MapMem(ScrnInfoPtr pScrn)
+ {
+ I830Ptr pI830 = I830PTR(pScrn);
+- unsigned i;
++ long i;
+
+ for (i = 2; i < pI830->FbMapSize; i <<= 1) ;
+ pI830->FbMapSize = i;
+@@ -2898,7 +2899,7 @@
+ OUTREG(LP_RING + RING_TAIL, 0);
+ OUTREG(LP_RING + RING_HEAD, 0);
+
+- if ((pI830->LpRing->mem.Start & I830_RING_START_MASK) !=
++ if ((long)(pI830->LpRing->mem.Start & I830_RING_START_MASK) !=
+ pI830->LpRing->mem.Start) {
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ "I830SetRingRegs: Ring buffer start (%lx) violates its "
+@@ -3441,7 +3442,7 @@
+ I830Ptr pI8301 = I830PTR(pI830->entityPrivate->pScrn_1);
+
+ temp = INREG(stridereg);
+- if (temp / pI8301->cpp != pI830->entityPrivate->pScrn_1->displayWidth) {
++ if (temp / pI8301->cpp != (CARD32)(pI830->entityPrivate->pScrn_1->displayWidth)) {
+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ "Correcting plane %c stride (%d -> %d)\n", PIPE_NAME(pI830->pipe),
+ (int)(temp / pI8301->cpp), pI830->entityPrivate->pScrn_1->displayWidth);
+@@ -3459,7 +3460,7 @@
+ sizereg = pI830->pipe ? DSPASIZE : DSPBSIZE;
+
+ temp = INREG(stridereg);
+- if (temp / pI8302->cpp != pI830->entityPrivate->pScrn_2->displayWidth) {
++ if (temp / pI8302->cpp != (CARD32)(pI830->entityPrivate->pScrn_2->displayWidth)) {
+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ "Correcting plane %c stride (%d -> %d)\n", PIPE_NAME(!pI830->pipe),
+ (int)(temp / pI8302->cpp), pI830->entityPrivate->pScrn_2->displayWidth);
+@@ -3478,7 +3479,7 @@
+ I830Ptr pI8302 = I830PTR(pI830->entityPrivate->pScrn_2);
+
+ temp = INREG(stridereg);
+- if (temp / pI8301->cpp != pI830->entityPrivate->pScrn_1->displayWidth) {
++ if (temp / pI8301->cpp != (CARD32)(pI830->entityPrivate->pScrn_1->displayWidth)) {
+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ "Correcting plane %c stride (%d -> %d)\n", PIPE_NAME(pI830->pipe),
+ (int)(temp / pI8301->cpp), pI830->entityPrivate->pScrn_1->displayWidth);
+@@ -3494,7 +3495,7 @@
+ sizereg = !pI830->pipe ? DSPASIZE : DSPBSIZE;
+
+ temp = INREG(stridereg);
+- if (temp / pI8302->cpp != pI830->entityPrivate->pScrn_2->displayWidth) {
++ if (temp / pI8302->cpp != ((CARD32)pI830->entityPrivate->pScrn_2->displayWidth)) {
+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ "Correcting plane %c stride (%d -> %d)\n", PIPE_NAME(!pI830->pipe),
+ (int)(temp / pI8302->cpp), pI830->entityPrivate->pScrn_2->displayWidth);
+@@ -3515,7 +3516,7 @@
+ continue;
+
+ temp = INREG(stridereg);
+- if (temp / pI830->cpp != pScrn->displayWidth) {
++ if (temp / pI830->cpp != (CARD32)pScrn->displayWidth) {
+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ "Correcting plane %c stride (%d -> %d)\n", PIPE_NAME(i),
+ (int)(temp / pI830->cpp), pScrn->displayWidth);
+@@ -4354,6 +4355,9 @@
+ SaveHWOperatingState(pScrn);
+ #endif
+
++ ResetState(pScrn, TRUE);
++ RestoreHWState(pScrn);
++
+ if (IsPrimary(pScrn)) {
+ if (!SetDisplayDevices(pScrn, pI830->savedDevices)) {
+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+@@ -4365,8 +4369,6 @@
+ }
+ }
+
+- ResetState(pScrn, TRUE);
+- RestoreHWState(pScrn);
+ RestoreBIOSMemSize(pScrn);
+ if (IsPrimary(pScrn))
+ I830UnbindGARTMemory(pScrn);
+@@ -4506,7 +4508,8 @@
+ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ I830Ptr pI830 = I830PTR(pScrn);
+ Bool on = xf86IsUnblank(mode);
+- CARD32 temp, ctrl, base, i;
++ CARD32 temp, ctrl, base;
++ int i;
+
+ DPRINTF(PFX, "I830BIOSSaveScreen: %d, on is %s\n", mode, BOOLTOSTRING(on));
+
+Index: xc/programs/Xserver/hw/xfree86/drivers/i810/i830_memory.c
+diff -u xc/programs/Xserver/hw/xfree86/drivers/i810/i830_memory.c:1.4 xc/programs/Xserver/hw/xfree86/drivers/i810/i830_memory.c:1.4.4.1
+--- xc/programs/Xserver/hw/xfree86/drivers/i810/i830_memory.c:1.4 Tue Jul 6 14:37:47 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/i810/i830_memory.c Wed Dec 15 09:35:23 2004
+@@ -63,10 +63,10 @@
+ */
+ static unsigned long
+ AllocFromPool(ScrnInfoPtr pScrn, I830MemRange *result, I830MemPool *pool,
+- unsigned long size, unsigned long alignment, int flags)
++ long size, unsigned long alignment, int flags)
+ {
+ I830Ptr pI830 = I830PTR(pScrn);
+- unsigned long needed, start, end;
++ long needed, start, end;
+ Bool dryrun = ((flags & ALLOCATE_DRY_RUN) != 0);
+
+ if (!result || !pool || !size)
+@@ -94,7 +94,7 @@
+ }
+ }
+ if (needed > pool->Free.Size) {
+- unsigned long extra;
++ long extra;
+ /* See if the pool can be grown. */
+ if (pI830->StolenOnly && !dryrun)
+ return 0;
+@@ -107,7 +107,7 @@
+ return 0;
+ }
+
+- if (!dryrun && (extra > pI830->MemoryAperture.Size))
++ if (!dryrun && ((long)extra > pI830->MemoryAperture.Size))
+ return 0;
+
+ pool->Free.Size += extra;
+@@ -136,7 +136,7 @@
+ }
+
+ static unsigned long
+-AllocFromAGP(ScrnInfoPtr pScrn, I830MemRange *result, unsigned long size,
++AllocFromAGP(ScrnInfoPtr pScrn, I830MemRange *result, long size,
+ unsigned long alignment, int flags)
+ {
+ I830Ptr pI830 = I830PTR(pScrn);
+@@ -212,7 +212,7 @@
+
+ unsigned long
+ I830AllocVidMem(ScrnInfoPtr pScrn, I830MemRange *result, I830MemPool *pool,
+- unsigned long size, unsigned long alignment, int flags)
++ long size, unsigned long alignment, int flags)
+ {
+ I830Ptr pI830 = I830PTR(pScrn);
+ Bool dryrun = ((flags & ALLOCATE_DRY_RUN) != 0);
+@@ -392,7 +392,7 @@
+ I830Allocate2DMemory(ScrnInfoPtr pScrn, const int flags)
+ {
+ I830Ptr pI830 = I830PTR(pScrn);
+- unsigned long size, alloced;
++ long size, alloced;
+ Bool dryrun = ((flags & ALLOCATE_DRY_RUN) != 0);
+ int verbosity = dryrun ? 4 : 1;
+ const char *s = dryrun ? "[dryrun] " : "";
+@@ -610,9 +610,9 @@
+ return FALSE;
+ }
+ } else {
+- unsigned long lineSize;
+- unsigned long extra = 0;
+- unsigned long maxFb = 0;
++ long lineSize;
++ long extra = 0;
++ long maxFb = 0;
+
+ /*
+ * XXX Need to "free" up any 3D allocations if the DRI ended up
+@@ -857,7 +857,7 @@
+ I830GetExcessMemoryAllocations(ScrnInfoPtr pScrn)
+ {
+ I830Ptr pI830 = I830PTR(pScrn);
+- unsigned long allocated;
++ long allocated;
+
+ allocated = pI830->StolenPool.Total.Size + pI830->allocatedMemory;
+ if (allocated > pI830->TotalVideoRam)
+@@ -1367,7 +1367,7 @@
+ I830Ptr pI830 = I830PTR(pScrn);
+ int pitch, ntiles, i;
+ static int nextTile = 0;
+- static int tileGeneration = -1;
++ static unsigned int tileGeneration = -1;
+
+ #if 0
+ /* Hack to "improve" the alignment of the front buffer.
+Index: xc/programs/Xserver/hw/xfree86/drivers/i810/i830_video.c
+diff -u xc/programs/Xserver/hw/xfree86/drivers/i810/i830_video.c:1.4 xc/programs/Xserver/hw/xfree86/drivers/i810/i830_video.c:1.4.2.1
+--- xc/programs/Xserver/hw/xfree86/drivers/i810/i830_video.c:1.4 Thu Aug 26 05:10:56 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/i810/i830_video.c Wed Jan 12 23:22:41 2005
+@@ -632,7 +632,7 @@
+ pPriv->gamma0 = 0x080808;
+
+ /* gotta uninit this someplace */
+- REGION_INIT(pScreen, &pPriv->clip, NullBox, 0);
++ REGION_NULL(pScreen, &pPriv->clip);
+
+ pI830->adaptor = adapt;
+
+Index: xc/programs/Xserver/hw/xfree86/drivers/nsc/nsc_gx1_video.c
+diff -u xc/programs/Xserver/hw/xfree86/drivers/nsc/nsc_gx1_video.c:1.2 xc/programs/Xserver/hw/xfree86/drivers/nsc/nsc_gx1_video.c:1.2.4.1
+--- xc/programs/Xserver/hw/xfree86/drivers/nsc/nsc_gx1_video.c:1.2 Fri Apr 23 19:40:15 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/nsc/nsc_gx1_video.c Thu Dec 16 01:30:36 2004
+@@ -240,45 +240,42 @@
+ GeodePtr pGeode;
+
+ ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
++ XF86VideoAdaptorPtr *adaptors, *newAdaptors = NULL;
++ XF86VideoAdaptorPtr newAdaptor = NULL;
++
++ int num_adaptors;
+
+ pGeode = GEODEPTR(pScreenInfo);
+
+- if (!pGeode->NoAccel) {
+- ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+- XF86VideoAdaptorPtr *adaptors, *newAdaptors = NULL;
+- XF86VideoAdaptorPtr newAdaptor = NULL;
+-
+- int num_adaptors;
+-
+- DEBUGMSG(0, (0, X_NONE, "InitVideo\n"));
+- newAdaptor = GX1SetupImageVideo(pScreen);
+- GX1InitOffscreenImages(pScreen);
+-
+- num_adaptors = xf86XVListGenericAdaptors(pScrn, &adaptors);
+-
+- if (newAdaptor) {
+- if (!num_adaptors) {
+- num_adaptors = 1;
+- adaptors = &newAdaptor;
+- } else {
+- newAdaptors = /* need to free this someplace */
+- xalloc((num_adaptors + 1) * sizeof(XF86VideoAdaptorPtr *));
+- if (newAdaptors) {
++
++ DEBUGMSG(0, (0, X_NONE, "InitVideo\n"));
++ newAdaptor = GX1SetupImageVideo(pScreen);
++ GX1InitOffscreenImages(pScreen);
++
++ num_adaptors = xf86XVListGenericAdaptors(pScreenInfo, &adaptors);
++
++ if (newAdaptor) {
++ if (!num_adaptors) {
++ num_adaptors = 1;
++ adaptors = &newAdaptor;
++ } else {
++ newAdaptors = /* need to free this someplace */
++ xalloc((num_adaptors + 1) * sizeof(XF86VideoAdaptorPtr *));
++ if (newAdaptors) {
+ memcpy(newAdaptors, adaptors, num_adaptors *
+ sizeof(XF86VideoAdaptorPtr));
+ newAdaptors[num_adaptors] = newAdaptor;
+ adaptors = newAdaptors;
+ num_adaptors++;
+- }
+- }
+- }
+-
+- if (num_adaptors)
+- xf86XVScreenInit(pScreen, adaptors, num_adaptors);
+-
+- if (newAdaptors)
+- xfree(newAdaptors);
++ }
++ }
+ }
++
++ if (num_adaptors)
++ xf86XVScreenInit(pScreen, adaptors, num_adaptors);
++
++ if (newAdaptors)
++ xfree(newAdaptors);
+ }
+
+ /* client libraries expect an encoding */
+@@ -413,17 +410,15 @@
+ void
+ GX1ResetVideo(ScrnInfoPtr pScrn)
+ {
+- GeodePtr pGeode = GEODEPTR(pScrn);
++ GeodePtr pGeode = GEODEPTR(pScrn);
+
+- if (!pGeode->NoAccel) {
+- GeodePortPrivPtr pPriv = pGeode->adaptor->pPortPrivates[0].ptr;
++ GeodePortPrivPtr pPriv = pGeode->adaptor->pPortPrivates[0].ptr;
+
+- DEBUGMSG(0, (0, X_NONE, "ResetVideo\n"));
+- GX1AccelSync(pScrn);
+- GFX(set_video_palette(NULL));
+- GX1SetColorkey(pScrn, pPriv);
+- GFX(set_video_filter(pPriv->filter, pPriv->filter));
+- }
++ DEBUGMSG(0, (0, X_NONE, "ResetVideo\n"));
++ if (!pGeode->NoAccel) GX1AccelSync(pScrn);
++ GFX(set_video_palette(NULL));
++ GX1SetColorkey(pScrn, pPriv);
++ GFX(set_video_filter(pPriv->filter, pPriv->filter));
+ }
+
+ /*----------------------------------------------------------------------------
+@@ -537,7 +532,7 @@
+ DEBUGMSG(0, (0, X_NONE, "StopVideo\n"));
+ REGION_EMPTY(pScrn->pScreen, &pPriv->clip);
+
+- GX1AccelSync(pScrn);
++ if (!pGeode->NoAccel) GX1AccelSync(pScrn);
+ if (exit) {
+ if (pPriv->videoStatus & CLIENT_VIDEO_ON) {
+ GFX(set_video_enable(0));
+@@ -580,8 +575,9 @@
+ Atom attribute, INT32 value, pointer data)
+ {
+ GeodePortPrivPtr pPriv = (GeodePortPrivPtr) data;
++ GeodePtr pGeode = GEODEPTR(pScrn);
+
+- GX1AccelSync(pScrn);
++ if (!pGeode->NoAccel) GX1AccelSync(pScrn);
+ if (attribute == xvColorKey) {
+ pPriv->colorKey = value;
+ GX1SetColorkey(pScrn, pPriv);
+@@ -1002,7 +998,7 @@
+ GeodePtr pGeode = GEODEPTR(pScrn);
+
+ /* DisplayModePtr mode = pScrn->currentMode; */
+- GX1AccelSync(pScrn);
++ if (!pGeode->NoAccel) GX1AccelSync(pScrn);
+
+ GFX(set_video_enable(1));
+
+@@ -1353,7 +1349,7 @@
+ (*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask);
+ pScreen->BlockHandler = GX1BlockHandler;
+
+- GX1AccelSync(pScrn);
++ if (!pGeode->NoAccel) GX1AccelSync(pScrn);
+ if (pPriv->videoStatus & TIMER_MASK) {
+ UpdateCurrentTime();
+ if (pPriv->videoStatus & OFF_TIMER) {
+Index: xc/programs/Xserver/hw/xfree86/drivers/nsc/nsc_gx2_video.c
+diff -u xc/programs/Xserver/hw/xfree86/drivers/nsc/nsc_gx2_video.c:1.2 xc/programs/Xserver/hw/xfree86/drivers/nsc/nsc_gx2_video.c:1.2.4.1
+--- xc/programs/Xserver/hw/xfree86/drivers/nsc/nsc_gx2_video.c:1.2 Fri Apr 23 19:40:15 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/nsc/nsc_gx2_video.c Thu Dec 16 01:30:36 2004
+@@ -233,46 +233,42 @@
+ void
+ GX2InitVideo(ScreenPtr pScreen)
+ {
+- GeodePtr pGeode;
+- ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
++ GeodePtr pGeode;
++ ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
++ XF86VideoAdaptorPtr *adaptors, *newAdaptors = NULL;
++ XF86VideoAdaptorPtr newAdaptor = NULL;
+
+- pGeode = GEODEPTR(pScreenInfo);
++ int num_adaptors;
+
+- if (!pGeode->NoAccel) {
+- ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+- XF86VideoAdaptorPtr *adaptors, *newAdaptors = NULL;
+- XF86VideoAdaptorPtr newAdaptor = NULL;
++ pGeode = GEODEPTR(pScreenInfo);
+
+- int num_adaptors;
++ newAdaptor = GX2SetupImageVideo(pScreen);
++ GX2InitOffscreenImages(pScreen);
+
+- newAdaptor = GX2SetupImageVideo(pScreen);
+- GX2InitOffscreenImages(pScreen);
++ num_adaptors = xf86XVListGenericAdaptors(pScreenInfo, &adaptors);
+
+- num_adaptors = xf86XVListGenericAdaptors(pScrn, &adaptors);
+-
+- if (newAdaptor) {
+- if (!num_adaptors) {
++ if (newAdaptor) {
++ if (!num_adaptors) {
+ num_adaptors = 1;
+ adaptors = &newAdaptor;
+- } else {
++ } else {
+ newAdaptors = /* need to free this someplace */
+- xalloc((num_adaptors + 1) * sizeof(XF86VideoAdaptorPtr *));
++ xalloc((num_adaptors + 1) * sizeof(XF86VideoAdaptorPtr *));
+ if (newAdaptors) {
+- memcpy(newAdaptors, adaptors, num_adaptors *
+- sizeof(XF86VideoAdaptorPtr));
+- newAdaptors[num_adaptors] = newAdaptor;
+- adaptors = newAdaptors;
+- num_adaptors++;
++ memcpy(newAdaptors, adaptors, num_adaptors *
++ sizeof(XF86VideoAdaptorPtr));
++ newAdaptors[num_adaptors] = newAdaptor;
++ adaptors = newAdaptors;
++ num_adaptors++;
+ }
+- }
+- }
++ }
++ }
+
+- if (num_adaptors)
+- xf86XVScreenInit(pScreen, adaptors, num_adaptors);
++ if (num_adaptors)
++ xf86XVScreenInit(pScreen, adaptors, num_adaptors);
+
+- if (newAdaptors)
+- xfree(newAdaptors);
+- }
++ if (newAdaptors)
++ xfree(newAdaptors);
+ }
+
+ /* client libraries expect an encoding */
+@@ -416,16 +412,14 @@
+ void
+ GX2ResetVideo(ScrnInfoPtr pScrn)
+ {
+- GeodePtr pGeode = GEODEPTR(pScrn);
++ GeodePtr pGeode = GEODEPTR(pScrn);
+
+- if (!pGeode->NoAccel) {
+- GeodePortPrivPtr pPriv = pGeode->adaptor->pPortPrivates[0].ptr;
++ GeodePortPrivPtr pPriv = pGeode->adaptor->pPortPrivates[0].ptr;
+
+- GX2AccelSync(pScrn);
+- GFX(set_video_palette(NULL));
+- GX2SetColorkey(pScrn, pPriv);
+- GFX(set_video_filter(pPriv->filter, pPriv->filter));
+- }
++ if (!pGeode->NoAccel) GX2AccelSync(pScrn);
++ GFX(set_video_palette(NULL));
++ GX2SetColorkey(pScrn, pPriv);
++ GFX(set_video_filter(pPriv->filter, pPriv->filter));
+ }
+
+ /*----------------------------------------------------------------------------
+@@ -537,7 +531,7 @@
+
+ REGION_EMPTY(pScrn->pScreen, &pPriv->clip);
+
+- GX2AccelSync(pScrn);
++ if (!pGeode->NoAccel) GX2AccelSync(pScrn);
+ if (exit) {
+ if (pPriv->videoStatus & CLIENT_VIDEO_ON) {
+ GFX(set_video_enable(0));
+@@ -580,8 +574,9 @@
+ Atom attribute, INT32 value, pointer data)
+ {
+ GeodePortPrivPtr pPriv = (GeodePortPrivPtr) data;
++ GeodePtr pGeode = GEODEPTR(pScrn);
+
+- GX2AccelSync(pScrn);
++ if (!pGeode->NoAccel) GX2AccelSync(pScrn);
+ if (attribute == xvColorKey) {
+ pPriv->colorKey = value;
+ GX2SetColorkey(pScrn, pPriv);
+@@ -941,7 +936,7 @@
+ {
+ GeodePtr pGeode = GEODEPTR(pScrn);
+
+- GX2AccelSync(pScrn);
++ if (!pGeode->NoAccel) GX2AccelSync(pScrn);
+
+ GFX(set_video_enable(1));
+
+@@ -1298,7 +1293,7 @@
+ (*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask);
+ pScreen->BlockHandler = GX2BlockHandler;
+
+- GX2AccelSync(pScrn);
++ if (!pGeode->NoAccel) GX2AccelSync(pScrn);
+ if (pPriv->videoStatus & TIMER_MASK) {
+ UpdateCurrentTime();
+ if (pPriv->videoStatus & OFF_TIMER) {
+Index: xc/programs/Xserver/hw/xfree86/drivers/nv/nv.man
+diff -u xc/programs/Xserver/hw/xfree86/drivers/nv/nv.man:1.2 xc/programs/Xserver/hw/xfree86/drivers/nv/nv.man:1.2.4.1
+--- xc/programs/Xserver/hw/xfree86/drivers/nv/nv.man:1.2 Fri Apr 23 19:42:10 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/nv/nv.man Sun Nov 14 18:13:27 2004
+@@ -1,4 +1,4 @@
+-.\" $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv.man,v 1.22 2003/10/18 01:14:26 mvojkovi Exp $
++.\" $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv.man,v 1.26 2004/10/15 20:32:21 mvojkovi Exp $
+ .\" shorthand for double quote that works everywhere.
+ .ds q \N'34'
+ .TH NV __drivermansuffix__ __vendorversion__
+@@ -51,7 +51,7 @@
+ NV17, NV18, NV25, NV28
+ .TP 22
+ .B GeForce FX, QUADRO FX
+-NV30, NV31, NV34, NV35, NV36, NV38
++NV30, NV31, NV34, NV35, NV36, NV37, NV38, NV40, NV41, NV43, NV44, NV45
+ .SH CONFIGURATION DETAILS
+ Please refer to __xconfigfile__(__filemansuffix__) for general configuration
+ details. This section only covers configuration details specific to this
+@@ -102,6 +102,11 @@
+ nForce2, GeForce4, Quadro4, Geforce FX and Quadro FX.
+ Default: off.
+ .TP
++.BI "Option \*qFPScale\*q \*q" boolean \*q
++Supported only on GeForce4, Quadro4, Geforce FX and Quadro FX. This option
++tells to the driver to scale lower resolutions up to the flat panel's native
++resolution. Default: on.
++.TP
+ .BI "Option \*qRotate\*q \*qCW\*q"
+ .TP
+ .BI "Option \*qRotate\*q \*qCCW\*q"
+@@ -118,3 +123,37 @@
+ .SH AUTHORS
+ Authors include: David McKay, Jarno Paananen, Chas Inman, Dave Schmenk,
+ Mark Vojkovich
++.SH COPYRIGHT
++.LP
++NOTICE TO USER: The source code is copyrighted under U.S. and
++international laws. Users and possessors of this source code are
++hereby granted a nonexclusive, royalty-free copyright license to
++use this code in individual and commercial software.
++.LP
++Any use of this source code must include, in the user documentation and
++internal comments to the code, notices to the end user as follows:
++.LP
++Copyright 1993-2003 NVIDIA, Corporation. All rights reserved.
++.LP
++NVIDIA, CORPORATION MAKES NO REPRESENTATION ABOUT THE SUITABILITY
++OF THIS SOURCE CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS"
++WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. NVIDIA, CORPORATION
++DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOURCE CODE,
++INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT,
++AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
++NVIDIA, CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL,
++OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM
++LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
++OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOURCE CODE.
++.LP
++U.S. Government End Users. This source code is a "commercial
++item," as that term is defined at 48 C.F.R. 2.101 (OCT 1995),
++consisting of "commercial computer software" and "commercial
++computer software documentation," as such terms are used in
++48 C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
++only as a commercial end item. Consistent with 48 C.F.R.
++12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995),
++all U.S. Government End Users acquire the source code with only
++those rights set forth herein.
++
+Index: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_cursor.c
+diff -u xc/programs/Xserver/hw/xfree86/drivers/nv/nv_cursor.c:1.2 xc/programs/Xserver/hw/xfree86/drivers/nv/nv_cursor.c:1.2.4.1
+--- xc/programs/Xserver/hw/xfree86/drivers/nv/nv_cursor.c:1.2 Fri Apr 23 19:42:10 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/nv/nv_cursor.c Sun Nov 14 18:13:27 2004
+@@ -37,7 +37,7 @@
+ |* *|
+ \***************************************************************************/
+
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_cursor.c,v 1.11 2002/11/26 23:41:58 mvojkovi Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_cursor.c,v 1.13 2004/03/13 22:07:05 mvojkovi Exp $ */
+
+ #include "nv_include.h"
+
+@@ -239,28 +239,37 @@
+ NVPtr pNv = NVPTR(pScrn);
+ CARD32 *image = pCurs->bits->argb;
+ CARD32 *dst = (CARD32*)pNv->CURSOR;
++ CARD32 alpha, tmp;
+ int x, y, w, h;
+
+ w = pCurs->bits->width;
+ h = pCurs->bits->height;
+
+-#if X_BYTE_ORDER == X_BIG_ENDIAN
+- if((pNv->Chipset & 0x0ff0) == 0x0110) {
+- CARD32 tmp;
+-
++ if((pNv->Chipset & 0x0ff0) == 0x0110) { /* premultiply */
+ for(y = 0; y < h; y++) {
+ for(x = 0; x < w; x++) {
+- tmp = *image++;
+- *dst++ = BYTE_SWAP_32(tmp);
+- }
+- for(; x < 64; x++)
+- *dst++ = 0;
+- }
+- } else
++ alpha = *image >> 24;
++ if(alpha == 0xff)
++ tmp = *image;
++ else {
++ tmp = (alpha << 24) |
++ (((*image & 0xff) * alpha) / 255) |
++ ((((*image & 0xff00) * alpha) / 255) & 0xff00) |
++ ((((*image & 0xff0000) * alpha) / 255) & 0xff0000);
++ }
++ image++;
++#if X_BYTE_ORDER == X_BIG_ENDIAN
++ *dst++ = BYTE_SWAP_32(tmp);
++#else
++ *dst++ = tmp;
+ #endif
+- {
++ }
++ for(; x < 64; x++)
++ *dst++ = 0;
++ }
++ } else {
+ for(y = 0; y < h; y++) {
+- for(x = 0; x < w; x++)
++ for(x = 0; x < w; x++)
+ *dst++ = *image++;
+ for(; x < 64; x++)
+ *dst++ = 0;
+@@ -299,9 +308,7 @@
+ infoPtr->UseHWCursor = NVUseHWCursor;
+
+ #ifdef ARGB_CURSOR
+- if(pNv->alphaCursor &&
+- (((pNv->Chipset & 0x0ff0) != 0x0110) || !pNv->FPDither))
+- {
++ if(pNv->alphaCursor) {
+ infoPtr->UseHWCursorARGB = NVUseHWCursorARGB;
+ infoPtr->LoadCursorARGB = NVLoadCursorARGB;
+ }
+Index: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_dac.c
+diff -u xc/programs/Xserver/hw/xfree86/drivers/nv/nv_dac.c:1.2 xc/programs/Xserver/hw/xfree86/drivers/nv/nv_dac.c:1.2.4.2
+--- xc/programs/Xserver/hw/xfree86/drivers/nv/nv_dac.c:1.2 Fri Apr 23 19:42:10 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/nv/nv_dac.c Thu Dec 16 01:42:35 2004
+@@ -37,10 +37,38 @@
+ |* *|
+ \***************************************************************************/
+
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_dac.c,v 1.37 2003/09/08 20:00:27 mvojkovi Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_dac.c,v 1.44 2004/12/09 00:21:04 mvojkovi Exp $ */
+
+ #include "nv_include.h"
+
++static int
++NVDACPanelTweaks(NVPtr pNv, NVRegPtr state)
++{
++ int tweak = 0;
++
++ if(pNv->usePanelTweak) {
++ tweak = pNv->PanelTweak;
++ } else {
++ /* begin flat panel hacks */
++ /* This is unfortunate, but some chips need this register
++ tweaked or else you get artifacts where adjacent pixels are
++ swapped. There are no hard rules for what to set here so all
++ we can do is experiment and apply hacks. */
++
++ if(((pNv->Chipset & 0xffff) == 0x0328) && (state->bpp == 32)) {
++ /* At least one NV34 laptop needs this workaround. */
++ tweak = -1;
++ }
++
++ if((pNv->Chipset & 0xfff0) == 0x0310) {
++ tweak = 1;
++ }
++ /* end flat panel hacks */
++ }
++
++ return tweak;
++}
++
+ Bool
+ NVDACInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
+ {
+@@ -58,7 +86,6 @@
+ int vertBlankStart = mode->CrtcVDisplay - 1;
+ int vertBlankEnd = mode->CrtcVTotal - 1;
+
+-
+ NVPtr pNv = NVPTR(pScrn);
+ NVRegPtr nvReg = &pNv->ModeReg;
+ NVFBLayout *pLayout = &pNv->CurrentLayout;
+@@ -186,6 +213,8 @@
+ {
+ nvReg->scale |= (1 << 8) ;
+ }
++ nvReg->crtcSync = pNv->PRAMDAC[0x0828/4];
++ nvReg->crtcSync += NVDACPanelTweaks(pNv, nvReg);
+ }
+
+ nvReg->vpll = nvReg->pll;
+@@ -193,6 +222,9 @@
+ nvReg->vpllB = nvReg->pllB;
+ nvReg->vpll2B = nvReg->pllB;
+
++ VGA_WR08(pNv->PCIO, 0x03D4, 0x1C);
++ nvReg->fifo = VGA_RD08(pNv->PCIO, 0x03D5) & ~(1<<5);
++
+ if(pNv->CRTCnumber) {
+ nvReg->head = pNv->PCRTC0[0x00000860/4] & ~0x00001000;
+ nvReg->head2 = pNv->PCRTC0[0x00002860/4] | 0x00001000;
+@@ -215,29 +247,29 @@
+ if(mode->Flags & V_DBLSCAN)
+ nvReg->cursorConfig |= (1 << 4);
+ if(pNv->alphaCursor) {
+- nvReg->cursorConfig |= 0x04011000;
++ if((pNv->Chipset & 0x0ff0) != 0x0110)
++ nvReg->cursorConfig |= 0x04011000;
++ else
++ nvReg->cursorConfig |= 0x14011000;
+ nvReg->general |= (1 << 29);
++ } else
++ nvReg->cursorConfig |= 0x02000000;
+
++ if(pNv->twoHeads) {
+ if((pNv->Chipset & 0x0ff0) == 0x0110) {
+- nvReg->dither = pNv->PRAMDAC[0x0528/4] & ~0x00010000;
+- if(pNv->FPDither)
+- nvReg->dither |= 0x00010000;
+- else
+- nvReg->cursorConfig |= (1 << 28);
+- } else
+- if((pNv->Chipset & 0x0ff0) >= 0x0170) {
++ nvReg->dither = pNv->PRAMDAC[0x0528/4] & ~0x00010000;
++ if(pNv->FPDither)
++ nvReg->dither |= 0x00010000;
++ } else {
+ nvReg->dither = pNv->PRAMDAC[0x083C/4] & ~1;
+- nvReg->cursorConfig |= (1 << 28);
+ if(pNv->FPDither)
+ nvReg->dither |= 1;
+- } else {
+- nvReg->cursorConfig |= (1 << 28);
+- }
+- } else
+- nvReg->cursorConfig |= 0x02000000;
++ }
++ }
+
+ nvReg->timingH = 0;
+ nvReg->timingV = 0;
++ nvReg->displayV = mode->CrtcVDisplay;
+
+ return (TRUE);
+ }
+@@ -250,8 +282,6 @@
+ int restore = VGA_SR_MODE;
+
+ if(primary) restore |= VGA_SR_CMAP | VGA_SR_FONTS;
+- else if((pNv->Chipset & 0xffff) == 0x0018)
+- restore |= VGA_SR_CMAP;
+ NVLoadStateExt(pNv, nvReg);
+ #if defined(__powerpc__)
+ restore &= ~VGA_SR_FONTS;
+@@ -274,8 +304,6 @@
+ saveFonts = FALSE;
+ #endif
+
+- NVLockUnlock(pNv, 0);
+-
+ vgaHWSave(pScrn, vgaReg, VGA_SR_CMAP | VGA_SR_MODE |
+ (saveFonts? VGA_SR_FONTS : 0));
+ NVUnloadStateExt(pNv, nvReg);
+Index: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_dma.h
+diff -u xc/programs/Xserver/hw/xfree86/drivers/nv/nv_dma.h:1.2 xc/programs/Xserver/hw/xfree86/drivers/nv/nv_dma.h:1.2.4.1
+--- xc/programs/Xserver/hw/xfree86/drivers/nv/nv_dma.h:1.2 Fri Apr 23 19:42:10 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/nv/nv_dma.h Sun Nov 14 18:13:27 2004
+@@ -38,7 +38,7 @@
+ |* *|
+ \***************************************************************************/
+
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_dma.h,v 1.1 2003/07/31 20:24:29 mvojkovi Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_dma.h,v 1.4 2004/03/20 01:52:16 mvojkovi Exp $ */
+
+ #define SURFACE_FORMAT 0x00000300
+ #define SURFACE_FORMAT_DEPTH8 0x00000001
+@@ -145,9 +145,15 @@
+ #define STRETCH_BLIT_FORMAT_DEPTH8 0x00000004
+ #define STRETCH_BLIT_FORMAT_DEPTH16 0x00000007
+ #define STRETCH_BLIT_FORMAT_DEPTH24 0x00000004
++#define STRETCH_BLIT_FORMAT_A8R8G8B8 0x00000003
+ #define STRETCH_BLIT_FORMAT_X8R8G8B8 0x00000004
+ #define STRETCH_BLIT_FORMAT_YUYV 0x00000005
+ #define STRETCH_BLIT_FORMAT_UYVY 0x00000006
++/* STRETCH_BLIT_OPERATION is only supported on TNT2 and newer */
++#define STRETCH_BLIT_OPERATION 0x0000E304
++#define STRETCH_BLIT_OPERATION_ROP 0x00000001
++#define STRETCH_BLIT_OPERATION_COPY 0x00000003
++#define STRETCH_BLIT_OPERATION_BLEND 0x00000002
+ #define STRETCH_BLIT_CLIP_POINT 0x0000E308
+ #define STRETCH_BLIT_CLIP_POINT_X 15:0
+ #define STRETCH_BLIT_CLIP_POINT_Y 31:16
+Index: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_driver.c
+diff -u xc/programs/Xserver/hw/xfree86/drivers/nv/nv_driver.c:1.5 xc/programs/Xserver/hw/xfree86/drivers/nv/nv_driver.c:1.5.2.2
+--- xc/programs/Xserver/hw/xfree86/drivers/nv/nv_driver.c:1.5 Mon Aug 16 09:13:14 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/nv/nv_driver.c Thu Dec 16 01:42:35 2004
+@@ -1,4 +1,4 @@
+-/* $XdotOrg: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_driver.c,v 1.5 2004/08/16 09:13:14 ajax Exp $ */
++/* $XdotOrg: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_driver.c,v 1.5.2.2 2004/12/16 01:42:35 gisburn Exp $ */
+ /* $XConsortium: nv_driver.c /main/3 1996/10/28 05:13:37 kaleb $ */
+ /*
+ * Copyright 1996-1997 David J. McKay
+@@ -25,7 +25,7 @@
+ /* Hacked together from mga driver and 3.3.4 NVIDIA driver by Jarno Paananen
+ <jpaana@s2.org> */
+
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_driver.c,v 1.122 2004/01/10 22:31:53 mvojkovi Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_driver.c,v 1.130 2004/12/09 00:21:04 mvojkovi Exp $ */
+
+ #include "nv_include.h"
+
+@@ -113,18 +113,19 @@
+ { 0x10DE0175, "GeForce4 420 Go" },
+ { 0x10DE0176, "GeForce4 420 Go 32M" },
+ { 0x10DE0177, "GeForce4 460 Go" },
++ { 0x10DE0178, "Quadro4 550 XGL" },
+ #if defined(__powerpc__)
+ { 0x10DE0179, "GeForce4 MX (Mac)" },
+ #else
+ { 0x10DE0179, "GeForce4 440 Go 64M" },
+ #endif
+- { 0x10DE017D, "GeForce4 410 Go 16M" },
+- { 0x10DE017C, "Quadro4 500 GoGL" },
+- { 0x10DE0178, "Quadro4 550 XGL" },
+ { 0x10DE017A, "Quadro4 NVS" },
++ { 0x10DE017C, "Quadro4 500 GoGL" },
++ { 0x10DE017D, "GeForce4 410 Go 16M" },
+ { 0x10DE0181, "GeForce4 MX 440 with AGP8X" },
+ { 0x10DE0182, "GeForce4 MX 440SE with AGP8X" },
+ { 0x10DE0183, "GeForce4 MX 420 with AGP8X" },
++ { 0x10DE0185, "GeForce4 MX 4000" },
+ { 0x10DE0186, "GeForce4 448 Go" },
+ { 0x10DE0187, "GeForce4 488 Go" },
+ { 0x10DE0188, "Quadro4 580 XGL" },
+@@ -133,6 +134,8 @@
+ #endif
+ { 0x10DE018A, "Quadro4 280 NVS" },
+ { 0x10DE018B, "Quadro4 380 XGL" },
++ { 0x10DE018C, "Quadro NVS 50 PCI" },
++ { 0x10DE018D, "GeForce4 448 Go" },
+ { 0x10DE01F0, "GeForce4 MX Integrated GPU" },
+ { 0x10DE0200, "GeForce3" },
+ { 0x10DE0201, "GeForce3 Ti 200" },
+@@ -174,6 +177,8 @@
+ { 0x10DE0323, "GeForce FX 5200SE" },
+ { 0x10DE0324, "GeForce FX Go5200" },
+ { 0x10DE0325, "GeForce FX Go5250" },
++ { 0x10DE0326, "GeForce FX 5500" },
++ { 0x10DE0327, "GeForce FX 5100" },
+ { 0x10DE0328, "GeForce FX Go5200 32M/64M" },
+ #if defined(__powerpc__)
+ { 0x10DE0329, "GeForce FX 5200 (Mac)" },
+@@ -181,15 +186,16 @@
+ { 0x10DE0329, "0x0329" },
+ #endif
+ { 0x10DE032A, "Quadro NVS 280 PCI" },
+- { 0x10DE032B, "Quadro FX 500" },
+- { 0x10DE032C, "GeForce FX Go5300" },
++ { 0x10DE032B, "Quadro FX 500/600 PCI" },
++ { 0x10DE032C, "GeForce FX Go53xx Series" },
+ { 0x10DE032D, "GeForce FX Go5100" },
+ { 0x10DE032F, "0x032F" },
+ { 0x10DE0330, "GeForce FX 5900 Ultra" },
+ { 0x10DE0331, "GeForce FX 5900" },
+ { 0x10DE0332, "GeForce FX 5900XT" },
+ { 0x10DE0333, "GeForce FX 5950 Ultra" },
+- { 0x10DE0334, "0x0334" },
++ { 0x10DE033F, "Quadro FX 700" },
++ { 0x10DE0334, "GeForce FX 5900ZT" },
+ { 0x10DE0338, "Quadro FX 3000" },
+ { 0x10DE0341, "GeForce FX 5700 Ultra" },
+ { 0x10DE0342, "GeForce FX 5700" },
+@@ -203,6 +209,42 @@
+ { 0x10DE034C, "Quadro FX Go1000" },
+ { 0x10DE034E, "Quadro FX 1100" },
+ { 0x10DE034F, "0x034F" },
++ { 0x10DE0040, "GeForce 6800 Ultra" },
++ { 0x10DE0041, "GeForce 6800" },
++ { 0x10DE0042, "GeForce 6800 LE" },
++ { 0x10DE0043, "0x0043" },
++ { 0x10DE0045, "GeForce 6800 GT" },
++ { 0x10DE0049, "0x0049" },
++ { 0x10DE004E, "Quadro FX 4000" },
++ { 0x10DE004D, "Quadro FX 4400" },
++ { 0x10DE00C0, "0x00C0" },
++ { 0x10DE00C1, "0x00C1" },
++ { 0x10DE00C2, "GeForce 6800 LE" },
++ { 0x10DE00C8, "0x00C8" },
++ { 0x10DE00C9, "0x00C9" },
++ { 0x10DE00CC, "0x00CC" },
++ { 0x10DE00CE, "0x00CE" },
++ { 0x10DE0140, "GeForce 6600 GT" },
++ { 0x10DE0141, "GeForce 6600" },
++ { 0x10DE0142, "0x0142" },
++ { 0x10DE0143, "0x0143" },
++ { 0x10DE0144, "GeForce Go 6600" },
++ { 0x10DE0145, "GeForce 6610 XL" },
++ { 0x10DE0146, "GeForce Go 6600 TE/6200 TE" },
++ { 0x10DE0147, "0x0147" },
++ { 0x10DE0148, "GeForce Go 6600" },
++ { 0x10DE0149, "0x0149" },
++ { 0x10DE014B, "0x014B" },
++ { 0x10DE014C, "0x014C" },
++ { 0x10DE014D, "0x014D" },
++ { 0x10DE014E, "Quadro FX 540" },
++ { 0x10DE014F, "GeForce 6200" },
++ { 0x10DE0160, "0x0160" },
++ { 0x10DE0166, "0x0166" },
++ { 0x10DE0210, "0x0210" },
++ { 0x10DE0211, "0x0211" },
++ { 0x10DE021D, "0x021D" },
++ { 0x10DE021E, "0x021E" },
+ {-1, NULL}
+ };
+
+@@ -350,7 +392,9 @@
+ OPTION_VIDEO_KEY,
+ OPTION_FLAT_PANEL,
+ OPTION_FP_DITHER,
+- OPTION_CRTC_NUMBER
++ OPTION_CRTC_NUMBER,
++ OPTION_FP_SCALE,
++ OPTION_FP_TWEAK
+ } NVOpts;
+
+
+@@ -365,6 +409,8 @@
+ { OPTION_FLAT_PANEL, "FlatPanel", OPTV_BOOLEAN, {0}, FALSE },
+ { OPTION_FP_DITHER, "FPDither", OPTV_BOOLEAN, {0}, FALSE },
+ { OPTION_CRTC_NUMBER, "CrtcNumber", OPTV_INTEGER, {0}, FALSE },
++ { OPTION_FP_SCALE, "FPScale", OPTV_BOOLEAN, {0}, FALSE },
++ { OPTION_FP_TWEAK, "FPTweak", OPTV_INTEGER, {0}, FALSE },
+ { -1, NULL, OPTV_NONE, {0}, FALSE }
+ };
+
+@@ -494,6 +540,36 @@
+
+ #define MAX_CHIPS MAXSCREENS
+
++
++static CARD32
++NVGetPCIXpressChip (pciVideoPtr pVideo)
++{
++ volatile CARD32 *regs;
++ CARD32 pciid, pcicmd;
++ PCITAG Tag = ((pciConfigPtr)(pVideo->thisCard))->tag;
++
++ pcicmd = pciReadLong(Tag, PCI_CMD_STAT_REG);
++ pciWriteLong(Tag, PCI_CMD_STAT_REG, pcicmd | PCI_CMD_MEM_ENABLE);
++
++ regs = xf86MapPciMem(-1, VIDMEM_MMIO, Tag, pVideo->memBase[0], 0x2000);
++
++ pciid = regs[0x1800/4];
++
++ xf86UnMapVidMem(-1, (pointer)regs, 0x2000);
++
++ pciWriteLong(Tag, PCI_CMD_STAT_REG, pcicmd);
++
++ if((pciid & 0x0000ffff) == 0x000010DE)
++ pciid = 0x10DE0000 | (pciid >> 16);
++ else
++ if((pciid & 0xffff0000) == 0xDE100000) /* wrong endian */
++ pciid = 0x10DE0000 | ((pciid << 8) & 0x0000ff00) |
++ ((pciid >> 8) & 0x000000ff);
++
++ return pciid;
++}
++
++
+ /* Mandatory */
+ static Bool
+ NVProbe(DriverPtr drv, int flags)
+@@ -523,7 +599,11 @@
+ ((*ppPci)->vendor == PCI_VENDOR_NVIDIA))
+ {
+ SymTabRec *nvchips = NVKnownChipsets;
+- int token = ((*ppPci)->vendor << 16) | (*ppPci)->chipType;
++ int pciid = ((*ppPci)->vendor << 16) | (*ppPci)->chipType;
++ int token = pciid;
++
++ if((token & 0xfff0) == 0x00F0)
++ token = NVGetPCIXpressChip(*ppPci);
+
+ while(nvchips->name) {
+ if(token == nvchips->token)
+@@ -532,10 +612,10 @@
+ }
+
+ if(nvchips->name) { /* found one */
+- NVChipsets[numUsed].token = nvchips->token;
++ NVChipsets[numUsed].token = pciid;
+ NVChipsets[numUsed].name = nvchips->name;
+- NVPciChipsets[numUsed].numChipset = nvchips->token;
+- NVPciChipsets[numUsed].PCIid = nvchips->token;
++ NVPciChipsets[numUsed].numChipset = pciid;
++ NVPciChipsets[numUsed].PCIid = pciid;
+ NVPciChipsets[numUsed].resList = RES_SHARED_VGA;
+ numUsed++;
+ } else if ((*ppPci)->vendor == PCI_VENDOR_NVIDIA) {
+@@ -551,10 +631,19 @@
+ case 0x0320:
+ case 0x0330:
+ case 0x0340:
+- NVChipsets[numUsed].token = token;
++ case 0x0040:
++ case 0x00C0:
++ case 0x0120:
++ case 0x0140:
++ case 0x0160:
++ case 0x0130:
++ case 0x01D0:
++ case 0x0090:
++ case 0x0210:
++ NVChipsets[numUsed].token = pciid;
+ NVChipsets[numUsed].name = "Unknown NVIDIA chip";
+- NVPciChipsets[numUsed].numChipset = token;
+- NVPciChipsets[numUsed].PCIid = token;
++ NVPciChipsets[numUsed].numChipset = pciid;
++ NVPciChipsets[numUsed].PCIid = pciid;
+ NVPciChipsets[numUsed].resList = RES_SHARED_VGA;
+ numUsed++;
+ break;
+@@ -768,6 +857,17 @@
+ static ModeStatus
+ NVValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags)
+ {
++ NVPtr pNv = NVPTR(xf86Screens[scrnIndex]);
++
++ if(pNv->fpWidth && pNv->fpHeight) {
++ if((pNv->fpWidth < mode->HDisplay) || (pNv->fpHeight < mode->VDisplay)) {
++ xf86DrvMsg(scrnIndex, X_INFO, "Mode \"%s\" is larger than "
++ "BIOS programmed panel size of %d x %d. Removing.\n",
++ mode->name, pNv->fpWidth, pNv->fpHeight);
++ return (MODE_BAD);
++ }
++ }
++
+ return (MODE_OK);
+ }
+
+@@ -887,11 +987,16 @@
+ } else {
+ from = X_PROBED;
+ pNv->Chipset = (pNv->PciInfo->vendor << 16) | pNv->PciInfo->chipType;
++
++ if((pNv->Chipset & 0xfff0) == 0x00F0)
++ pNv->Chipset = NVGetPCIXpressChip(pNv->PciInfo);
++
+ pScrn->chipset = (char *)xf86TokenToString(NVKnownChipsets,
+ pNv->Chipset);
+ if(!pScrn->chipset)
+ pScrn->chipset = "Unknown NVIDIA chipset";
+ }
++
+ if (pNv->pEnt->device->chipRev >= 0) {
+ pNv->ChipRev = pNv->pEnt->device->chipRev;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "ChipRev override: %d\n",
+@@ -1026,6 +1131,12 @@
+ }
+ xf86DrvMsg(pScrn->scrnIndex, from, "Using %s cursor\n",
+ pNv->HWCursor ? "HW" : "SW");
++
++ pNv->FpScale = TRUE;
++ if (xf86GetOptValBool(pNv->Options, OPTION_FP_SCALE, &pNv->FpScale)) {
++ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Flat panel scaling %s\n",
++ pNv->FpScale ? "on" : "off");
++ }
+ if (xf86ReturnOptValBool(pNv->Options, OPTION_NOACCEL, FALSE)) {
+ pNv->NoAccel = TRUE;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Acceleration disabled\n");
+@@ -1115,6 +1226,14 @@
+ pNv->CRTCnumber = -1; /* autodetect later */
+ }
+
++
++ if (xf86GetOptValInteger(pNv->Options, OPTION_FP_TWEAK,
++ &pNv->PanelTweak))
++ {
++ pNv->usePanelTweak = TRUE;
++ } else {
++ pNv->usePanelTweak = FALSE;
++ }
+
+ if (pNv->pEnt->device->MemBase != 0) {
+ /* Require that the config file value matches one of the PCI values. */
+@@ -1178,12 +1297,46 @@
+ return FALSE;
+ }
+
+- pNv->alphaCursor = ((pNv->Chipset & 0x0ff0) >= 0x0110);
+-
+- pNv->Architecture = (pNv->Chipset & 0x0f00) >> 4;
++ switch (pNv->Chipset & 0x0ff0) {
++ case 0x0100: /* GeForce 256 */
++ case 0x0110: /* GeForce2 MX */
++ case 0x0150: /* GeForce2 */
++ case 0x0170: /* GeForce4 MX */
++ case 0x0180: /* GeForce4 MX (8x AGP) */
++ case 0x01A0: /* nForce */
++ case 0x01F0: /* nForce2 */
++ pNv->Architecture = NV_ARCH_10;
++ break;
++ case 0x0200: /* GeForce3 */
++ case 0x0250: /* GeForce4 Ti */
++ case 0x0280: /* GeForce4 Ti (8x AGP) */
++ pNv->Architecture = NV_ARCH_20;
++ break;
++ case 0x0300: /* GeForceFX 5800 */
++ case 0x0310: /* GeForceFX 5600 */
++ case 0x0320: /* GeForceFX 5200 */
++ case 0x0330: /* GeForceFX 5900 */
++ case 0x0340: /* GeForceFX 5700 */
++ pNv->Architecture = NV_ARCH_30;
++ break;
++ case 0x0040:
++ case 0x00C0:
++ case 0x0120:
++ case 0x0130:
++ case 0x0140:
++ case 0x0160:
++ case 0x01D0:
++ case 0x0090:
++ case 0x0210:
++ pNv->Architecture = NV_ARCH_40;
++ break;
++ default:
++ pNv->Architecture = NV_ARCH_04;
++ break;
++ }
+
+- if(pNv->Architecture < NV_ARCH_10)
+- pNv->Architecture = NV_ARCH_04;
++ pNv->alphaCursor = (pNv->Architecture >= NV_ARCH_10) &&
++ ((pNv->Chipset & 0x0ff0) != 0x0100);
+
+ NVCommonSetup(pScrn);
+
+@@ -1225,17 +1378,17 @@
+ clockRanges->minClock = pNv->MinVClockFreqKHz;
+ clockRanges->maxClock = pNv->MaxVClockFreqKHz;
+ clockRanges->clockIndex = -1; /* programmable */
+- if(((pNv->Chipset & 0x0ff0) <= 0x0100) ||
+- ((pNv->Chipset & 0x0ff0) == 0x0150) ||
+- ((pNv->Chipset & 0x0ff0) >= 0x0300))
++ clockRanges->doubleScanAllowed = TRUE;
++ if((pNv->Architecture == NV_ARCH_20) ||
++ ((pNv->Architecture == NV_ARCH_10) &&
++ ((pNv->Chipset & 0x0ff0) != 0x0100) &&
++ ((pNv->Chipset & 0x0ff0) != 0x0150)))
+ {
+- clockRanges->interlaceAllowed = TRUE;
+- } else {
+- /* No NV2x chips support interlaced modes and the only
+- NV1x chips that do are NV10 and NV15 */
++ /* HW is broken */
+ clockRanges->interlaceAllowed = FALSE;
++ } else {
++ clockRanges->interlaceAllowed = TRUE;
+ }
+- clockRanges->doubleScanAllowed = TRUE;
+
+ if(pNv->FlatPanel == 1) {
+ clockRanges->interlaceAllowed = FALSE;
+@@ -1488,22 +1641,28 @@
+ NVPtr pNv = NVPTR(pScrn);
+ NVRegPtr nvReg = &pNv->SavedReg;
+
++ NVLockUnlock(pNv, 0);
++
+ if(pNv->twoHeads) {
+ VGA_WR08(pNv->PCIO, 0x03D4, 0x44);
+- VGA_WR08(pNv->PCIO, 0x03D5, nvReg->crtcOwner);
++ VGA_WR08(pNv->PCIO, 0x03D5, pNv->CRTCnumber * 0x3);
+ NVLockUnlock(pNv, 0);
+ }
+
+- NVLockUnlock(pNv, 0);
+-
+ /* Only restore text mode fonts/text for the primary card */
+ vgaHWProtect(pScrn, TRUE);
+ NVDACRestore(pScrn, vgaReg, nvReg, pNv->Primary);
++ if(pNv->twoHeads) {
++ VGA_WR08(pNv->PCIO, 0x03D4, 0x44);
++ VGA_WR08(pNv->PCIO, 0x03D5, nvReg->crtcOwner);
++ }
+ vgaHWProtect(pScrn, FALSE);
+ }
+
+ static void NVBacklightEnable(NVPtr pNv, Bool on)
+ {
++ CARD32 fpcontrol = pNv->PRAMDAC[0x0848/4] & 0xCfffffCC;
++
+ /* This is done differently on each laptop. Here we
+ define the ones we know for sure. */
+
+@@ -1524,6 +1683,12 @@
+ pNv->PCRTC0[0x081C/4] = tmp_pcrt;
+ }
+ #endif
++
++ /* cut the TMDS output */
++ if(on) fpcontrol |= pNv->fpSyncs;
++ else fpcontrol |= 0x20000022;
++
++ pNv->PRAMDAC[0x0848/4] = fpcontrol;
+ }
+
+ static void
+@@ -1533,6 +1698,8 @@
+
+ if (!pScrn->vtSema) return;
+
++ vgaHWDPMSSet(pScrn, PowerManagementMode, flags);
++
+ switch (PowerManagementMode) {
+ case DPMSModeStandby: /* HSync: Off, VSync: On */
+ case DPMSModeSuspend: /* HSync: On, VSync: Off */
+@@ -1544,7 +1711,6 @@
+ default:
+ break;
+ }
+- vgaHWDPMSSet(pScrn, PowerManagementMode, flags);
+ }
+
+
+@@ -1646,7 +1812,7 @@
+ * function. If not, the visuals will need to be setup before calling
+ * a fb ScreenInit() function and fixed up after.
+ *
+- * For most PC hardware at depths >= 8, the defaults that cfb uses
++ * For most PC hardware at depths >= 8, the defaults that fb uses
+ * are not appropriate. In this driver, we fixup the visuals after.
+ */
+
+@@ -1830,6 +1996,13 @@
+ vgaHWPtr pVga = VGAHWPTR(pScrn);
+ vgaRegPtr vgaReg = &pVga->SavedReg;
+
++ NVLockUnlock(pNv, 0);
++ if(pNv->twoHeads) {
++ VGA_WR08(pNv->PCIO, 0x03D4, 0x44);
++ VGA_WR08(pNv->PCIO, 0x03D5, pNv->CRTCnumber * 0x3);
++ NVLockUnlock(pNv, 0);
++ }
++
+ NVDACSave(pScrn, vgaReg, nvReg, pNv->Primary);
+ }
+
+Index: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_hw.c
+diff -u xc/programs/Xserver/hw/xfree86/drivers/nv/nv_hw.c:1.2 xc/programs/Xserver/hw/xfree86/drivers/nv/nv_hw.c:1.2.4.2
+--- xc/programs/Xserver/hw/xfree86/drivers/nv/nv_hw.c:1.2 Fri Apr 23 19:42:10 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/nv/nv_hw.c Thu Dec 16 01:42:35 2004
+@@ -36,7 +36,7 @@
+ |* those rights set forth herein. *|
+ |* *|
+ \***************************************************************************/
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_hw.c,v 1.4 2003/11/03 05:11:25 tsi Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_hw.c,v 1.13 2004/12/09 00:21:04 mvojkovi Exp $ */
+
+ #include "nv_local.h"
+ #include "compiler.h"
+@@ -71,6 +71,12 @@
+ (ShowHide & 0x01);
+ VGA_WR08(pNv->PCIO, 0x3D4, 0x31);
+ VGA_WR08(pNv->PCIO, 0x3D5, pNv->CurrentState->cursor1);
++
++ if(pNv->Architecture == NV_ARCH_40) { /* HW bug */
++ volatile CARD32 curpos = pNv->PRAMDAC[0x0300/4];
++ pNv->PRAMDAC[0x0300/4] = curpos;
++ }
++
+ return (current & 0x01);
+ }
+
+@@ -132,6 +138,26 @@
+ {
+ unsigned int pll, N, M, MB, NB, P;
+
++ if(pNv->Architecture >= NV_ARCH_40) {
++ pll = pNv->PMC[0x4020/4];
++ P = (pll >> 16) & 0x03;
++ pll = pNv->PMC[0x4024/4];
++ M = pll & 0xFF;
++ N = (pll >> 8) & 0xFF;
++ MB = (pll >> 16) & 0xFF;
++ NB = (pll >> 24) & 0xFF;
++ *MClk = ((N * NB * pNv->CrystalFreqKHz) / (M * MB)) >> P;
++
++ pll = pNv->PMC[0x4000/4];
++ P = (pll >> 16) & 0x03;
++ pll = pNv->PMC[0x4004/4];
++ M = pll & 0xFF;
++ N = (pll >> 8) & 0xFF;
++ MB = (pll >> 16) & 0xFF;
++ NB = (pll >> 24) & 0xFF;
++
++ *NVClk = ((N * NB * pNv->CrystalFreqKHz) / (M * MB)) >> P;
++ } else
+ if(pNv->twoStagePLL) {
+ pll = pNv->PRAMDAC0[0x0504/4];
+ M = pll & 0xFF;
+@@ -202,6 +228,10 @@
+ P = (pll >> 16) & 0x0F;
+ *NVClk = (N * pNv->CrystalFreqKHz / M) >> P;
+ }
++
++#if 0
++ ErrorF("NVClock = %i MHz, MEMClock = %i MHz\n", *NVClk/1000, *MClk/1000);
++#endif
+ }
+
+
+@@ -509,21 +539,6 @@
+ clwm = us_crt * crtc_drain_rate/(1000*1000);
+ clwm++; /* fixed point <= float_point - 1. Fixes that */
+
+- /*
+- //
+- // Another concern, only for high pclks so don't do this
+- // with video:
+- // What happens if the latency to fetch the cbs is so large that
+- // fifo empties. In that case we need to have an alternate clwm value
+- // based off the total burst fetch
+- //
+- us_crt = (cbs * 1000 * 1000)/ (8*width)/mclk_freq ;
+- us_crt = us_crt + us_m + us_n + us_p + (4 * 1000 * 1000)/mclk_freq;
+- clwm_mt = us_crt * crtc_drain_rate/(1000*1000);
+- clwm_mt ++;
+- if(clwm_mt > clwm)
+- clwm = clwm_mt;
+- */
+ /* Finally, a heuristic check when width == 64 bits */
+ if(width == 1){
+ nvclk_fill = nvclk_freq * 8;
+@@ -622,6 +637,28 @@
+ }
+ }
+
++
++static void nv30UpdateArbitrationSettings (
++ NVPtr pNv,
++ unsigned *burst,
++ unsigned *lwm
++)
++{
++ unsigned int MClk, NVClk;
++ unsigned int fifo_size, burst_size, graphics_lwm;
++
++ fifo_size = 2048;
++ burst_size = 512;
++ graphics_lwm = fifo_size - burst_size;
++
++ nvGetClocks(pNv, &MClk, &NVClk);
++
++ *burst = 0;
++ burst_size >>= 5;
++ while(burst_size >>= 1) (*burst)++;
++ *lwm = graphics_lwm >> 3;
++}
++
+ static void nForceUpdateArbitrationSettings (
+ unsigned VClk,
+ unsigned pixelDepth,
+@@ -632,12 +669,17 @@
+ {
+ nv10_fifo_info fifo_data;
+ nv10_sim_state sim_data;
+- unsigned int M, N, P, pll, MClk, NVClk;
+- unsigned int uMClkPostDiv, memctrl;
++ unsigned int M, N, P, pll, MClk, NVClk, memctrl;
++
++ if((pNv->Chipset & 0x0FF0) == 0x01A0) {
++ unsigned int uMClkPostDiv;
+
+- uMClkPostDiv = (pciReadLong(pciTag(0, 0, 3), 0x6C) >> 8) & 0xf;
+- if(!uMClkPostDiv) uMClkPostDiv = 4;
+- MClk = 400000 / uMClkPostDiv;
++ uMClkPostDiv = (pciReadLong(pciTag(0, 0, 3), 0x6C) >> 8) & 0xf;
++ if(!uMClkPostDiv) uMClkPostDiv = 4;
++ MClk = 400000 / uMClkPostDiv;
++ } else {
++ MClk = pciReadLong(pciTag(0, 0, 5), 0x4C) / 1000;
++ }
+
+ pll = pNv->PRAMDAC0[0x0500/4];
+ M = (pll >> 0) & 0xFF; N = (pll >> 8) & 0xFF; P = (pll >> 16) & 0x0F;
+@@ -837,12 +879,16 @@
+ &(state->arbitration0),
+ &(state->arbitration1),
+ pNv);
+- } else {
++ } else if(pNv->Architecture < NV_ARCH_30) {
+ nv10UpdateArbitrationSettings(VClk,
+ pixelDepth * 8,
+ &(state->arbitration0),
+ &(state->arbitration1),
+ pNv);
++ } else {
++ nv30UpdateArbitrationSettings(pNv,
++ &(state->arbitration0),
++ &(state->arbitration1));
+ }
+ state->cursor0 = 0x80 | (pNv->CursorStart >> 17);
+ state->cursor1 = (pNv->CursorStart >> 11) << 2;
+@@ -901,79 +947,167 @@
+ pNv->PFB[0x02B4/4] = pNv->FbMapSize - 1;
+ }
+
+- pNv->PRAMIN[0x0000] = 0x80000010;
+- pNv->PRAMIN[0x0001] = 0x80011201;
+- pNv->PRAMIN[0x0002] = 0x80000011;
+- pNv->PRAMIN[0x0003] = 0x80011202;
+- pNv->PRAMIN[0x0004] = 0x80000012;
+- pNv->PRAMIN[0x0005] = 0x80011203;
+- pNv->PRAMIN[0x0006] = 0x80000013;
+- pNv->PRAMIN[0x0007] = 0x80011204;
+- pNv->PRAMIN[0x0008] = 0x80000014;
+- pNv->PRAMIN[0x0009] = 0x80011205;
+- pNv->PRAMIN[0x000A] = 0x80000015;
+- pNv->PRAMIN[0x000B] = 0x80011206;
+- pNv->PRAMIN[0x000C] = 0x80000016;
+- pNv->PRAMIN[0x000D] = 0x80011207;
+- pNv->PRAMIN[0x000E] = 0x80000017;
+- pNv->PRAMIN[0x000F] = 0x80011208;
+- pNv->PRAMIN[0x0800] = 0x00003000;
+- pNv->PRAMIN[0x0801] = pNv->FbMapSize - 1;
+- pNv->PRAMIN[0x0802] = 0x00000002;
+- pNv->PRAMIN[0x0803] = 0x00000002;
+- if(pNv->Architecture >= NV_ARCH_10)
+- pNv->PRAMIN[0x0804] = 0x01008062;
+- else
+- pNv->PRAMIN[0x0804] = 0x01008042;
+- pNv->PRAMIN[0x0805] = 0x00000000;
+- pNv->PRAMIN[0x0806] = 0x12001200;
+- pNv->PRAMIN[0x0807] = 0x00000000;
+- pNv->PRAMIN[0x0808] = 0x01008043;
+- pNv->PRAMIN[0x0809] = 0x00000000;
+- pNv->PRAMIN[0x080A] = 0x00000000;
+- pNv->PRAMIN[0x080B] = 0x00000000;
+- pNv->PRAMIN[0x080C] = 0x01008044;
+- pNv->PRAMIN[0x080D] = 0x00000002;
+- pNv->PRAMIN[0x080E] = 0x00000000;
+- pNv->PRAMIN[0x080F] = 0x00000000;
+- pNv->PRAMIN[0x0810] = 0x01008019;
+- pNv->PRAMIN[0x0811] = 0x00000000;
+- pNv->PRAMIN[0x0812] = 0x00000000;
+- pNv->PRAMIN[0x0813] = 0x00000000;
+- pNv->PRAMIN[0x0814] = 0x0100A05C;
+- pNv->PRAMIN[0x0815] = 0x00000000;
+- pNv->PRAMIN[0x0816] = 0x00000000;
+- pNv->PRAMIN[0x0817] = 0x00000000;
+- pNv->PRAMIN[0x0818] = 0x0100805F;
+- pNv->PRAMIN[0x0819] = 0x00000000;
+- pNv->PRAMIN[0x081A] = 0x12001200;
+- pNv->PRAMIN[0x081B] = 0x00000000;
+- pNv->PRAMIN[0x081C] = 0x0100804A;
+- pNv->PRAMIN[0x081D] = 0x00000002;
+- pNv->PRAMIN[0x081E] = 0x00000000;
+- pNv->PRAMIN[0x081F] = 0x00000000;
+- pNv->PRAMIN[0x0820] = 0x01018077;
+- pNv->PRAMIN[0x0821] = 0x00000000;
+- pNv->PRAMIN[0x0822] = 0x01201200;
+- pNv->PRAMIN[0x0823] = 0x00000000;
+- pNv->PRAMIN[0x0824] = 0x00003002;
+- pNv->PRAMIN[0x0825] = 0x00007FFF;
+- pNv->PRAMIN[0x0826] = pNv->FbUsableSize | 0x00000002;
+- pNv->PRAMIN[0x0827] = 0x00000002;
++ if(pNv->Architecture >= NV_ARCH_40) {
++ pNv->PRAMIN[0x0000] = 0x80000010;
++ pNv->PRAMIN[0x0001] = 0x00101202;
++ pNv->PRAMIN[0x0002] = 0x80000011;
++ pNv->PRAMIN[0x0003] = 0x00101204;
++ pNv->PRAMIN[0x0004] = 0x80000012;
++ pNv->PRAMIN[0x0005] = 0x00101206;
++ pNv->PRAMIN[0x0006] = 0x80000013;
++ pNv->PRAMIN[0x0007] = 0x00101208;
++ pNv->PRAMIN[0x0008] = 0x80000014;
++ pNv->PRAMIN[0x0009] = 0x0010120A;
++ pNv->PRAMIN[0x000A] = 0x80000015;
++ pNv->PRAMIN[0x000B] = 0x0010120C;
++ pNv->PRAMIN[0x000C] = 0x80000016;
++ pNv->PRAMIN[0x000D] = 0x0010120E;
++ pNv->PRAMIN[0x000E] = 0x80000017;
++ pNv->PRAMIN[0x000F] = 0x00101210;
++ pNv->PRAMIN[0x0800] = 0x00003000;
++ pNv->PRAMIN[0x0801] = pNv->FbMapSize - 1;
++ pNv->PRAMIN[0x0802] = 0x00000002;
++ pNv->PRAMIN[0x0808] = 0x02080062;
++ pNv->PRAMIN[0x0809] = 0x00000000;
++ pNv->PRAMIN[0x080A] = 0x00001200;
++ pNv->PRAMIN[0x080B] = 0x00001200;
++ pNv->PRAMIN[0x080C] = 0x00000000;
++ pNv->PRAMIN[0x080D] = 0x00000000;
++ pNv->PRAMIN[0x0810] = 0x02080043;
++ pNv->PRAMIN[0x0811] = 0x00000000;
++ pNv->PRAMIN[0x0812] = 0x00000000;
++ pNv->PRAMIN[0x0813] = 0x00000000;
++ pNv->PRAMIN[0x0814] = 0x00000000;
++ pNv->PRAMIN[0x0815] = 0x00000000;
++ pNv->PRAMIN[0x0818] = 0x02080044;
++ pNv->PRAMIN[0x0819] = 0x02000000;
++ pNv->PRAMIN[0x081A] = 0x00000000;
++ pNv->PRAMIN[0x081B] = 0x00000000;
++ pNv->PRAMIN[0x081C] = 0x00000000;
++ pNv->PRAMIN[0x081D] = 0x00000000;
++ pNv->PRAMIN[0x0820] = 0x02080019;
++ pNv->PRAMIN[0x0821] = 0x00000000;
++ pNv->PRAMIN[0x0822] = 0x00000000;
++ pNv->PRAMIN[0x0823] = 0x00000000;
++ pNv->PRAMIN[0x0824] = 0x00000000;
++ pNv->PRAMIN[0x0825] = 0x00000000;
++ pNv->PRAMIN[0x0828] = 0x020A005C;
++ pNv->PRAMIN[0x0829] = 0x00000000;
++ pNv->PRAMIN[0x082A] = 0x00000000;
++ pNv->PRAMIN[0x082B] = 0x00000000;
++ pNv->PRAMIN[0x082C] = 0x00000000;
++ pNv->PRAMIN[0x082D] = 0x00000000;
++ pNv->PRAMIN[0x0830] = 0x0208009F;
++ pNv->PRAMIN[0x0831] = 0x00000000;
++ pNv->PRAMIN[0x0832] = 0x00001200;
++ pNv->PRAMIN[0x0833] = 0x00001200;
++ pNv->PRAMIN[0x0834] = 0x00000000;
++ pNv->PRAMIN[0x0835] = 0x00000000;
++ pNv->PRAMIN[0x0838] = 0x0208004A;
++ pNv->PRAMIN[0x0839] = 0x02000000;
++ pNv->PRAMIN[0x083A] = 0x00000000;
++ pNv->PRAMIN[0x083B] = 0x00000000;
++ pNv->PRAMIN[0x083C] = 0x00000000;
++ pNv->PRAMIN[0x083D] = 0x00000000;
++ pNv->PRAMIN[0x0840] = 0x02080077;
++ pNv->PRAMIN[0x0841] = 0x00000000;
++ pNv->PRAMIN[0x0842] = 0x00001200;
++ pNv->PRAMIN[0x0843] = 0x00001200;
++ pNv->PRAMIN[0x0844] = 0x00000000;
++ pNv->PRAMIN[0x0845] = 0x00000000;
++ pNv->PRAMIN[0x084C] = 0x00003002;
++ pNv->PRAMIN[0x084D] = 0x00007FFF;
++ pNv->PRAMIN[0x084E] = pNv->FbUsableSize | 0x00000002;
+
+ #if X_BYTE_ORDER == X_BIG_ENDIAN
+- pNv->PRAMIN[0x0804] |= 0x00080000;
+- pNv->PRAMIN[0x0808] |= 0x00080000;
+- pNv->PRAMIN[0x080C] |= 0x00080000;
+- pNv->PRAMIN[0x0810] |= 0x00080000;
+- pNv->PRAMIN[0x0814] |= 0x00080000;
+- pNv->PRAMIN[0x0818] |= 0x00080000;
+- pNv->PRAMIN[0x081C] |= 0x00080000;
+- pNv->PRAMIN[0x0820] |= 0x00080000;
++ pNv->PRAMIN[0x080A] |= 0x01000000;
++ pNv->PRAMIN[0x0812] |= 0x01000000;
++ pNv->PRAMIN[0x081A] |= 0x01000000;
++ pNv->PRAMIN[0x0822] |= 0x01000000;
++ pNv->PRAMIN[0x082A] |= 0x01000000;
++ pNv->PRAMIN[0x0832] |= 0x01000000;
++ pNv->PRAMIN[0x083A] |= 0x01000000;
++ pNv->PRAMIN[0x0842] |= 0x01000000;
++ pNv->PRAMIN[0x0819] = 0x01000000;
++ pNv->PRAMIN[0x0839] = 0x01000000;
++#endif
++ } else {
++ pNv->PRAMIN[0x0000] = 0x80000010;
++ pNv->PRAMIN[0x0001] = 0x80011201;
++ pNv->PRAMIN[0x0002] = 0x80000011;
++ pNv->PRAMIN[0x0003] = 0x80011202;
++ pNv->PRAMIN[0x0004] = 0x80000012;
++ pNv->PRAMIN[0x0005] = 0x80011203;
++ pNv->PRAMIN[0x0006] = 0x80000013;
++ pNv->PRAMIN[0x0007] = 0x80011204;
++ pNv->PRAMIN[0x0008] = 0x80000014;
++ pNv->PRAMIN[0x0009] = 0x80011205;
++ pNv->PRAMIN[0x000A] = 0x80000015;
++ pNv->PRAMIN[0x000B] = 0x80011206;
++ pNv->PRAMIN[0x000C] = 0x80000016;
++ pNv->PRAMIN[0x000D] = 0x80011207;
++ pNv->PRAMIN[0x000E] = 0x80000017;
++ pNv->PRAMIN[0x000F] = 0x80011208;
++ pNv->PRAMIN[0x0800] = 0x00003000;
++ pNv->PRAMIN[0x0801] = pNv->FbMapSize - 1;
++ pNv->PRAMIN[0x0802] = 0x00000002;
++ pNv->PRAMIN[0x0803] = 0x00000002;
++ if(pNv->Architecture >= NV_ARCH_10)
++ pNv->PRAMIN[0x0804] = 0x01008062;
++ else
++ pNv->PRAMIN[0x0804] = 0x01008042;
++ pNv->PRAMIN[0x0805] = 0x00000000;
++ pNv->PRAMIN[0x0806] = 0x12001200;
++ pNv->PRAMIN[0x0807] = 0x00000000;
++ pNv->PRAMIN[0x0808] = 0x01008043;
++ pNv->PRAMIN[0x0809] = 0x00000000;
++ pNv->PRAMIN[0x080A] = 0x00000000;
++ pNv->PRAMIN[0x080B] = 0x00000000;
++ pNv->PRAMIN[0x080C] = 0x01008044;
++ pNv->PRAMIN[0x080D] = 0x00000002;
++ pNv->PRAMIN[0x080E] = 0x00000000;
++ pNv->PRAMIN[0x080F] = 0x00000000;
++ pNv->PRAMIN[0x0810] = 0x01008019;
++ pNv->PRAMIN[0x0811] = 0x00000000;
++ pNv->PRAMIN[0x0812] = 0x00000000;
++ pNv->PRAMIN[0x0813] = 0x00000000;
++ pNv->PRAMIN[0x0814] = 0x0100A05C;
++ pNv->PRAMIN[0x0815] = 0x00000000;
++ pNv->PRAMIN[0x0816] = 0x00000000;
++ pNv->PRAMIN[0x0817] = 0x00000000;
++ if(pNv->WaitVSyncPossible)
++ pNv->PRAMIN[0x0818] = 0x0100809F;
++ else
++ pNv->PRAMIN[0x0818] = 0x0100805F;
++ pNv->PRAMIN[0x0819] = 0x00000000;
++ pNv->PRAMIN[0x081A] = 0x12001200;
++ pNv->PRAMIN[0x081B] = 0x00000000;
++ pNv->PRAMIN[0x081C] = 0x0100804A;
++ pNv->PRAMIN[0x081D] = 0x00000002;
++ pNv->PRAMIN[0x081E] = 0x00000000;
++ pNv->PRAMIN[0x081F] = 0x00000000;
++ pNv->PRAMIN[0x0820] = 0x01018077;
++ pNv->PRAMIN[0x0821] = 0x00000000;
++ pNv->PRAMIN[0x0822] = 0x12001200;
++ pNv->PRAMIN[0x0823] = 0x00000000;
++ pNv->PRAMIN[0x0824] = 0x00003002;
++ pNv->PRAMIN[0x0825] = 0x00007FFF;
++ pNv->PRAMIN[0x0826] = pNv->FbUsableSize | 0x00000002;
++ pNv->PRAMIN[0x0827] = 0x00000002;
+
+- pNv->PRAMIN[0x080D] = 0x00000001;
+- pNv->PRAMIN[0x081D] = 0x00000001;
++#if X_BYTE_ORDER == X_BIG_ENDIAN
++ pNv->PRAMIN[0x0804] |= 0x00080000;
++ pNv->PRAMIN[0x0808] |= 0x00080000;
++ pNv->PRAMIN[0x080C] |= 0x00080000;
++ pNv->PRAMIN[0x0810] |= 0x00080000;
++ pNv->PRAMIN[0x0814] |= 0x00080000;
++ pNv->PRAMIN[0x0818] |= 0x00080000;
++ pNv->PRAMIN[0x081C] |= 0x00080000;
++ pNv->PRAMIN[0x0820] |= 0x00080000;
++ pNv->PRAMIN[0x080D] = 0x00000001;
++ pNv->PRAMIN[0x081D] = 0x00000001;
+ #endif
++ }
+
+ if(pNv->Architecture < NV_ARCH_10) {
+ if((pNv->Chipset & 0x0fff) == 0x0020) {
+@@ -985,6 +1119,7 @@
+ pNv->PGRAPH[0x0084/4] = 0x72111101;
+ pNv->PGRAPH[0x0088/4] = 0x11D5F071;
+ pNv->PGRAPH[0x008C/4] = 0x0004FF31;
++ pNv->PGRAPH[0x008C/4] = 0x4004FF31;
+
+ pNv->PGRAPH[0x0140/4] = 0x00000000;
+ pNv->PGRAPH[0x0100/4] = 0xFFFFFFFF;
+@@ -993,6 +1128,7 @@
+ pNv->PGRAPH[0x0720/4] = 0x00000001;
+
+ pNv->PGRAPH[0x0810/4] = 0x00000000;
++ pNv->PGRAPH[0x0608/4] = 0xFFFFFFFF;
+ } else {
+ pNv->PGRAPH[0x0080/4] = 0xFFFFFFFF;
+ pNv->PGRAPH[0x0080/4] = 0x00000000;
+@@ -1002,6 +1138,8 @@
+ pNv->PGRAPH[0x0144/4] = 0x10010100;
+ pNv->PGRAPH[0x0714/4] = 0xFFFFFFFF;
+ pNv->PGRAPH[0x0720/4] = 0x00000001;
++ pNv->PGRAPH[0x0710/4] &= 0x0007ff00;
++ pNv->PGRAPH[0x0710/4] |= 0x00020100;
+
+ if(pNv->Architecture == NV_ARCH_10) {
+ pNv->PGRAPH[0x0084/4] = 0x00118700;
+@@ -1017,8 +1155,55 @@
+ pNv->PGRAPH[0x688/4] = pNv->FbMapSize - 1;
+
+ pNv->PGRAPH[0x0810/4] = 0x00000000;
++ pNv->PGRAPH[0x0608/4] = 0xFFFFFFFF;
+ } else {
+- if(pNv->Architecture >= NV_ARCH_30) {
++ if(pNv->Architecture >= NV_ARCH_40) {
++ pNv->PGRAPH[0x0084/4] = 0x401287c0;
++ pNv->PGRAPH[0x008C/4] = 0x60de8051;
++ pNv->PGRAPH[0x0090/4] = 0x00008000;
++ pNv->PGRAPH[0x0610/4] = 0x00be3c5f;
++
++ if((pNv->Chipset & 0xfff0) == 0x0040) {
++ pNv->PGRAPH[0x09b0/4] = 0x83280fff;
++ pNv->PGRAPH[0x09b4/4] = 0x000000a0;
++ } else {
++ pNv->PGRAPH[0x0820/4] = 0x83280eff;
++ pNv->PGRAPH[0x0824/4] = 0x000000a0;
++ }
++
++ switch(pNv->Chipset & 0xfff0) {
++ case 0x0040:
++ pNv->PGRAPH[0x09b8/4] = 0x0078e366;
++ pNv->PGRAPH[0x09bc/4] = 0x0000014c;
++ pNv->PFB[0x033C/4] &= 0xffff7fff;
++ break;
++ case 0x00C0:
++ pNv->PGRAPH[0x0828/4] = 0x007596ff;
++ pNv->PGRAPH[0x082C/4] = 0x00000108;
++ break;
++ case 0x0160:
++ pNv->PMC[0x1700/4] = pNv->PFB[0x020C/4];
++ pNv->PMC[0x1704/4] = 0;
++ pNv->PMC[0x1708/4] = 0;
++ pNv->PMC[0x170C/4] = pNv->PFB[0x020C/4];
++ pNv->PGRAPH[0x0860/4] = 0;
++ pNv->PGRAPH[0x0864/4] = 0;
++ pNv->PRAMDAC[0x0608/4] |= 0x00100000;
++ break;
++ case 0x0140:
++ pNv->PGRAPH[0x0828/4] = 0x0072cb77;
++ pNv->PGRAPH[0x082C/4] = 0x00000108;
++ break;
++ default:
++ break;
++ };
++
++ pNv->PGRAPH[0x0b38/4] = 0x2ffff800;
++ pNv->PGRAPH[0x0b3c/4] = 0x00006000;
++ pNv->PGRAPH[0x032C/4] = 0x01000000;
++ pNv->PGRAPH[0x0220/4] = 0x00001200;
++ } else
++ if(pNv->Architecture == NV_ARCH_30) {
+ pNv->PGRAPH[0x0084/4] = 0x40108700;
+ pNv->PGRAPH[0x0890/4] = 0x00140000;
+ pNv->PGRAPH[0x008C/4] = 0xf00e0431;
+@@ -1055,19 +1240,44 @@
+ for(i = 0; i < 32; i++)
+ pNv->PGRAPH[(0x0900/4) + i] = pNv->PFB[(0x0240/4) + i];
+
+- pNv->PGRAPH[0x09A4/4] = pNv->PFB[0x0200/4];
+- pNv->PGRAPH[0x09A8/4] = pNv->PFB[0x0204/4];
+- pNv->PGRAPH[0x0750/4] = 0x00EA0000;
+- pNv->PGRAPH[0x0754/4] = pNv->PFB[0x0200/4];
+- pNv->PGRAPH[0x0750/4] = 0x00EA0004;
+- pNv->PGRAPH[0x0754/4] = pNv->PFB[0x0204/4];
+-
+- pNv->PGRAPH[0x0820/4] = 0;
+- pNv->PGRAPH[0x0824/4] = 0;
+- pNv->PGRAPH[0x0864/4] = pNv->FbMapSize - 1;
+- pNv->PGRAPH[0x0868/4] = pNv->FbMapSize - 1;
++ if(pNv->Architecture >= NV_ARCH_40) {
++ if((pNv->Chipset & 0xfff0) == 0x0040) {
++ pNv->PGRAPH[0x09A4/4] = pNv->PFB[0x0200/4];
++ pNv->PGRAPH[0x09A8/4] = pNv->PFB[0x0204/4];
++ pNv->PGRAPH[0x69A4/4] = pNv->PFB[0x0200/4];
++ pNv->PGRAPH[0x69A8/4] = pNv->PFB[0x0204/4];
++
++ pNv->PGRAPH[0x0820/4] = 0;
++ pNv->PGRAPH[0x0824/4] = 0;
++ pNv->PGRAPH[0x0864/4] = pNv->FbMapSize - 1;
++ pNv->PGRAPH[0x0868/4] = pNv->FbMapSize - 1;
++ } else {
++ pNv->PGRAPH[0x09F0/4] = pNv->PFB[0x0200/4];
++ pNv->PGRAPH[0x09F4/4] = pNv->PFB[0x0204/4];
++ pNv->PGRAPH[0x69F0/4] = pNv->PFB[0x0200/4];
++ pNv->PGRAPH[0x69F4/4] = pNv->PFB[0x0204/4];
++
++ pNv->PGRAPH[0x0840/4] = 0;
++ pNv->PGRAPH[0x0844/4] = 0;
++ pNv->PGRAPH[0x08a0/4] = pNv->FbMapSize - 1;
++ pNv->PGRAPH[0x08a4/4] = pNv->FbMapSize - 1;
++ }
++ } else {
++ pNv->PGRAPH[0x09A4/4] = pNv->PFB[0x0200/4];
++ pNv->PGRAPH[0x09A8/4] = pNv->PFB[0x0204/4];
++ pNv->PGRAPH[0x0750/4] = 0x00EA0000;
++ pNv->PGRAPH[0x0754/4] = pNv->PFB[0x0200/4];
++ pNv->PGRAPH[0x0750/4] = 0x00EA0004;
++ pNv->PGRAPH[0x0754/4] = pNv->PFB[0x0204/4];
++
++ pNv->PGRAPH[0x0820/4] = 0;
++ pNv->PGRAPH[0x0824/4] = 0;
++ pNv->PGRAPH[0x0864/4] = pNv->FbMapSize - 1;
++ pNv->PGRAPH[0x0868/4] = pNv->FbMapSize - 1;
++ }
+
+ pNv->PGRAPH[0x0B20/4] = 0x00000000;
++ pNv->PGRAPH[0x0B04/4] = 0xFFFFFFFF;
+ }
+ }
+ pNv->PGRAPH[0x053C/4] = 0;
+@@ -1079,10 +1289,16 @@
+ pNv->PFIFO[0x0141] = 0x00000001;
+ pNv->PFIFO[0x0480] = 0x00000000;
+ pNv->PFIFO[0x0494] = 0x00000000;
+- pNv->PFIFO[0x0481] = 0x00000100;
++ if(pNv->Architecture >= NV_ARCH_40)
++ pNv->PFIFO[0x0481] = 0x00010000;
++ else
++ pNv->PFIFO[0x0481] = 0x00000100;
+ pNv->PFIFO[0x0490] = 0x00000000;
+ pNv->PFIFO[0x0491] = 0x00000000;
+- pNv->PFIFO[0x048B] = 0x00001209;
++ if(pNv->Architecture >= NV_ARCH_40)
++ pNv->PFIFO[0x048B] = 0x00001213;
++ else
++ pNv->PFIFO[0x048B] = 0x00001209;
+ pNv->PFIFO[0x0400] = 0x00000000;
+ pNv->PFIFO[0x0414] = 0x00000000;
+ pNv->PFIFO[0x0084] = 0x03000100;
+@@ -1122,12 +1338,14 @@
+ pNv->PMC[0x1588/4] = 0;
+
+ pNv->PCRTC[0x0810/4] = state->cursorConfig;
++ pNv->PCRTC[0x0830/4] = state->displayV - 3;
++ pNv->PCRTC[0x0834/4] = state->displayV - 1;
+
+ if(pNv->FlatPanel) {
+ if((pNv->Chipset & 0x0ff0) == 0x0110) {
+ pNv->PRAMDAC[0x0528/4] = state->dither;
+ } else
+- if((pNv->Chipset & 0x0ff0) >= 0x0170) {
++ if(pNv->twoHeads) {
+ pNv->PRAMDAC[0x083C/4] = state->dither;
+ }
+
+@@ -1153,10 +1371,16 @@
+ VGA_WR08(pNv->PCIO, 0x03D5, state->pixel);
+ VGA_WR08(pNv->PCIO, 0x03D4, 0x2D);
+ VGA_WR08(pNv->PCIO, 0x03D5, state->horiz);
++ VGA_WR08(pNv->PCIO, 0x03D4, 0x1C);
++ VGA_WR08(pNv->PCIO, 0x03D5, state->fifo);
+ VGA_WR08(pNv->PCIO, 0x03D4, 0x1B);
+ VGA_WR08(pNv->PCIO, 0x03D5, state->arbitration0);
+ VGA_WR08(pNv->PCIO, 0x03D4, 0x20);
+ VGA_WR08(pNv->PCIO, 0x03D5, state->arbitration1);
++ if(pNv->Architecture >= NV_ARCH_30) {
++ VGA_WR08(pNv->PCIO, 0x03D4, 0x47);
++ VGA_WR08(pNv->PCIO, 0x03D5, state->arbitration1 >> 8);
++ }
+ VGA_WR08(pNv->PCIO, 0x03D4, 0x30);
+ VGA_WR08(pNv->PCIO, 0x03D5, state->cursor0);
+ VGA_WR08(pNv->PCIO, 0x03D4, 0x31);
+@@ -1177,6 +1401,7 @@
+ }
+ } else {
+ pNv->PRAMDAC[0x0848/4] = state->scale;
++ pNv->PRAMDAC[0x0828/4] = state->crtcSync;
+ }
+ pNv->PRAMDAC[0x0600/4] = state->general;
+
+@@ -1202,10 +1427,16 @@
+ state->pixel = VGA_RD08(pNv->PCIO, 0x03D5);
+ VGA_WR08(pNv->PCIO, 0x03D4, 0x2D);
+ state->horiz = VGA_RD08(pNv->PCIO, 0x03D5);
++ VGA_WR08(pNv->PCIO, 0x03D4, 0x1C);
++ state->fifo = VGA_RD08(pNv->PCIO, 0x03D5);
+ VGA_WR08(pNv->PCIO, 0x03D4, 0x1B);
+ state->arbitration0 = VGA_RD08(pNv->PCIO, 0x03D5);
+ VGA_WR08(pNv->PCIO, 0x03D4, 0x20);
+ state->arbitration1 = VGA_RD08(pNv->PCIO, 0x03D5);
++ if(pNv->Architecture >= NV_ARCH_30) {
++ VGA_WR08(pNv->PCIO, 0x03D4, 0x47);
++ state->arbitration1 |= (VGA_RD08(pNv->PCIO, 0x03D5) & 1) << 8;
++ }
+ VGA_WR08(pNv->PCIO, 0x03D4, 0x30);
+ state->cursor0 = VGA_RD08(pNv->PCIO, 0x03D5);
+ VGA_WR08(pNv->PCIO, 0x03D4, 0x31);
+@@ -1240,7 +1471,7 @@
+ if((pNv->Chipset & 0x0ff0) == 0x0110) {
+ state->dither = pNv->PRAMDAC[0x0528/4];
+ } else
+- if((pNv->Chipset & 0x0ff0) >= 0x0170) {
++ if(pNv->twoHeads) {
+ state->dither = pNv->PRAMDAC[0x083C/4];
+ }
+
+@@ -1251,6 +1482,10 @@
+ state->timingV = VGA_RD08(pNv->PCIO, 0x03D5);
+ }
+ }
++
++ if(pNv->FlatPanel) {
++ state->crtcSync = pNv->PRAMDAC[0x0828/4];
++ }
+ }
+
+ void NVSetStartAddress (
+Index: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_proto.h
+diff -u xc/programs/Xserver/hw/xfree86/drivers/nv/nv_proto.h:1.2 xc/programs/Xserver/hw/xfree86/drivers/nv/nv_proto.h:1.2.4.1
+--- xc/programs/Xserver/hw/xfree86/drivers/nv/nv_proto.h:1.2 Fri Apr 23 19:42:10 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/nv/nv_proto.h Sun Nov 14 18:13:27 2004
+@@ -1,4 +1,4 @@
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_proto.h,v 1.9 2003/05/04 01:20:52 mvojkovi Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_proto.h,v 1.11 2004/03/20 01:52:16 mvojkovi Exp $ */
+
+ #ifndef __NV_PROTO_H__
+ #define __NV_PROTO_H__
+@@ -37,6 +37,7 @@
+ void NVResetGraphics(ScrnInfoPtr pScrn);
+ void NVDmaKickoff(NVPtr pNv);
+ void NVDmaWait(NVPtr pNv, int size);
++void NVWaitVSync(NVPtr pNv);
+
+ /* in nv_dga.c */
+ Bool NVDGAInit(ScreenPtr pScreen);
+Index: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_setup.c
+diff -u xc/programs/Xserver/hw/xfree86/drivers/nv/nv_setup.c:1.2 xc/programs/Xserver/hw/xfree86/drivers/nv/nv_setup.c:1.2.4.2
+--- xc/programs/Xserver/hw/xfree86/drivers/nv/nv_setup.c:1.2 Fri Apr 23 19:42:10 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/nv/nv_setup.c Thu Dec 16 01:42:35 2004
+@@ -37,7 +37,7 @@
+ |* *|
+ \***************************************************************************/
+
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_setup.c,v 1.39 2003/11/07 23:56:28 mvojkovi Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_setup.c,v 1.44 2004/12/09 00:21:05 mvojkovi Exp $ */
+
+ #include "nv_include.h"
+
+@@ -292,10 +292,10 @@
+ }
+ #endif
+
+- if((pNv->Chipset & 0xffff) == 0x01a0) {
++ if(implementation == 0x01a0) {
+ int amt = pciReadLong(pciTag(0, 0, 1), 0x7C);
+ pNv->RamAmountKBytes = (((amt >> 6) & 31) + 1) * 1024;
+- } else if((pNv->Chipset & 0xffff) == 0x01f0) {
++ } else if(implementation == 0x01f0) {
+ int amt = pciReadLong(pciTag(0, 0, 1), 0x84);
+ pNv->RamAmountKBytes = (((amt >> 4) & 127) + 1) * 1024;
+ } else {
+@@ -304,10 +304,7 @@
+
+ pNv->CrystalFreqKHz = (pNv->PEXTDEV[0x0000/4] & (1 << 6)) ? 14318 : 13500;
+
+- if((implementation == 0x0170) ||
+- (implementation == 0x0180) ||
+- (implementation == 0x01F0) ||
+- (implementation >= 0x0250))
++ if(pNv->twoHeads && (implementation != 0x0110))
+ {
+ if(pNv->PEXTDEV[0x0000/4] & (1 << 22))
+ pNv->CrystalFreqKHz = 27000;
+@@ -381,15 +378,22 @@
+ pNv->PDIO0 = (U008*)pNv->REGS + 0x00681000;
+ pNv->PVIO = (U008*)pNv->REGS + 0x000C0000;
+
+- pNv->twoHeads = (implementation >= 0x0110) &&
++ pNv->twoHeads = (pNv->Architecture >= NV_ARCH_10) &&
++ (implementation != 0x0100) &&
+ (implementation != 0x0150) &&
+ (implementation != 0x01A0) &&
+ (implementation != 0x0200);
+
+- pNv->fpScaler = (pNv->twoHeads && (implementation != 0x0110));
++ pNv->fpScaler = (pNv->FpScale && pNv->twoHeads && (implementation!=0x0110));
+
+ pNv->twoStagePLL = (implementation == 0x0310) ||
+- (implementation == 0x0340);
++ (implementation == 0x0340) ||
++ (pNv->Architecture >= NV_ARCH_40);
++
++ pNv->WaitVSyncPossible = (pNv->Architecture >= NV_ARCH_10) &&
++ (implementation != 0x0100);
++
++ pNv->BlendingPossible = ((pNv->Chipset & 0xffff) != 0x0020);
+
+ /* look for known laptop chips */
+ switch(pNv->Chipset & 0xffff) {
+@@ -403,7 +407,7 @@
+ case 0x017D:
+ case 0x0186:
+ case 0x0187:
+- case 0x0189:
++ case 0x018D:
+ case 0x0286:
+ case 0x028C:
+ case 0x0316:
+@@ -425,6 +429,13 @@
+ case 0x0349:
+ case 0x034B:
+ case 0x034C:
++ case 0x0160:
++ case 0x0166:
++ case 0x00C8:
++ case 0x00CC:
++ case 0x0144:
++ case 0x0146:
++ case 0x0148:
+ mobile = TRUE;
+ break;
+ default:
+@@ -659,6 +670,7 @@
+ if(pNv->FlatPanel && !pNv->Television) {
+ pNv->fpWidth = pNv->PRAMDAC[0x0820/4] + 1;
+ pNv->fpHeight = pNv->PRAMDAC[0x0800/4] + 1;
++ pNv->fpSyncs = pNv->PRAMDAC[0x0848/4] & 0x30000033;
+ xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "Panel size is %i x %i\n",
+ pNv->fpWidth, pNv->fpHeight);
+ }
+@@ -666,7 +678,7 @@
+ if(monitorA)
+ xf86SetDDCproperties(pScrn, monitorA);
+
+- if(!pNv->FlatPanel || (pScrn->depth != 24))
++ if(!pNv->FlatPanel || (pScrn->depth != 24) || !pNv->twoHeads)
+ pNv->FPDither = FALSE;
+ }
+
+Index: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_type.h
+diff -u xc/programs/Xserver/hw/xfree86/drivers/nv/nv_type.h:1.2 xc/programs/Xserver/hw/xfree86/drivers/nv/nv_type.h:1.2.4.2
+--- xc/programs/Xserver/hw/xfree86/drivers/nv/nv_type.h:1.2 Fri Apr 23 19:42:10 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/nv/nv_type.h Thu Dec 16 01:42:35 2004
+@@ -1,4 +1,4 @@
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_type.h,v 1.44 2003/09/08 20:00:27 mvojkovi Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_type.h,v 1.50 2004/12/09 00:21:05 mvojkovi Exp $ */
+
+ #ifndef __NV_STRUCT_H__
+ #define __NV_STRUCT_H__
+@@ -13,6 +13,7 @@
+ #define NV_ARCH_10 0x10
+ #define NV_ARCH_20 0x20
+ #define NV_ARCH_30 0x30
++#define NV_ARCH_40 0x40
+
+
+ #define BITMASK(t,b) (((unsigned)(1U << (((t)-(b)+1)))-1) << (b))
+@@ -43,6 +44,7 @@
+ U032 scale;
+ U032 dither;
+ U032 extra;
++ U032 fifo;
+ U032 pixel;
+ U032 horiz;
+ U032 arbitration0;
+@@ -65,6 +67,8 @@
+ U032 cursor2;
+ U032 timingH;
+ U032 timingV;
++ U032 displayV;
++ U032 crtcSync;
+ } RIVA_HW_STATE, *NVRegPtr;
+
+
+@@ -90,6 +94,7 @@
+ CARD32 ScratchBufferStart;
+ Bool NoAccel;
+ Bool HWCursor;
++ Bool FpScale;
+ Bool ShadowFB;
+ unsigned char * ShadowPtr;
+ int ShadowPitch;
+@@ -153,6 +158,9 @@
+ Bool fpScaler;
+ int fpWidth;
+ int fpHeight;
++ CARD32 fpSyncs;
++ Bool usePanelTweak;
++ int PanelTweak;
+
+ CARD32 dmaPut;
+ CARD32 dmaCurrent;
+@@ -161,6 +169,8 @@
+ CARD32 *dmaBase;
+
+ CARD32 currentRop;
++ Bool WaitVSyncPossible;
++ Bool BlendingPossible;
+ } NVRec, *NVPtr;
+
+ #define NVPTR(p) ((NVPtr)((p)->driverPrivate))
+Index: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_video.c
+diff -u xc/programs/Xserver/hw/xfree86/drivers/nv/nv_video.c:1.2 xc/programs/Xserver/hw/xfree86/drivers/nv/nv_video.c:1.2.4.1
+--- xc/programs/Xserver/hw/xfree86/drivers/nv/nv_video.c:1.2 Fri Apr 23 19:42:10 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/nv/nv_video.c Sun Nov 14 18:13:27 2004
+@@ -1,4 +1,4 @@
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_video.c,v 1.20tsi Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_video.c,v 1.23 2004/03/20 22:07:06 mvojkovi Exp $ */
+
+ #include "xf86.h"
+ #include "xf86_OSproc.h"
+@@ -46,6 +46,7 @@
+ Bool grabbedByV4L;
+ Bool iturbt_709;
+ Bool blitter;
++ Bool SyncToVBlank;
+ FBLinearPtr linear;
+ int pitch;
+ int offset;
+@@ -95,7 +96,7 @@
+
+ static Atom xvBrightness, xvContrast, xvColorKey, xvSaturation,
+ xvHue, xvAutopaintColorKey, xvSetDefaults, xvDoubleBuffer,
+- xvITURBT709;
++ xvITURBT709, xvSyncToVBlank;
+
+ /* client libraries expect an encoding */
+ static XF86VideoEncodingRec DummyEncoding =
+@@ -114,9 +115,8 @@
+ {15, DirectColor}, {16, DirectColor}, {24, DirectColor}
+ };
+
+-#define NUM_ATTRIBUTES 9
+-
+-XF86AttributeRec NVAttributes[NUM_ATTRIBUTES] =
++#define NUM_OVERLAY_ATTRIBUTES 9
++XF86AttributeRec NVOverlayAttributes[NUM_OVERLAY_ATTRIBUTES] =
+ {
+ {XvSettable | XvGettable, 0, 1, "XV_DOUBLE_BUFFER"},
+ {XvSettable | XvGettable, 0, (1 << 24) - 1, "XV_COLORKEY"},
+@@ -129,6 +129,14 @@
+ {XvSettable | XvGettable, 0, 1, "XV_ITURBT_709"}
+ };
+
++#define NUM_BLIT_ATTRIBUTES 2
++XF86AttributeRec NVBlitAttributes[NUM_BLIT_ATTRIBUTES] =
++{
++ {XvSettable , 0, 0, "XV_SET_DEFAULTS"},
++ {XvSettable | XvGettable, 0, 1, "XV_SYNC_TO_VBLANK"}
++};
++
++
+ #define NUM_IMAGES_YUV 4
+ #define NUM_IMAGES_ALL 5
+
+@@ -285,7 +293,10 @@
+ NVPtr pNv = NVPTR(pScrn);
+ int num_adaptors;
+
+- if((pScrn->bitsPerPixel != 8) && (pNv->Architecture >= NV_ARCH_10)) {
++ if((pScrn->bitsPerPixel != 8) && (pNv->Architecture >= NV_ARCH_10) &&
++ ((pNv->Architecture <= NV_ARCH_30) ||
++ ((pNv->Chipset & 0xfff0) == 0x0040)))
++ {
+ overlayAdaptor = NVSetupOverlayVideo(pScreen);
+
+ if(overlayAdaptor)
+@@ -358,8 +369,13 @@
+ for(i = 0; i < NUM_BLIT_PORTS; i++)
+ adapt->pPortPrivates[i].ptr = (pointer)(pPriv);
+
+- adapt->pAttributes = NULL;
+- adapt->nAttributes = 0;
++ if(pNv->WaitVSyncPossible) {
++ adapt->pAttributes = NVBlitAttributes;
++ adapt->nAttributes = NUM_BLIT_ATTRIBUTES;
++ } else {
++ adapt->pAttributes = NULL;
++ adapt->nAttributes = 0;
++ }
+ adapt->pImages = NVImages;
+ adapt->nImages = NUM_IMAGES_ALL;
+ adapt->PutVideo = NULL;
+@@ -377,9 +393,12 @@
+ pPriv->grabbedByV4L = FALSE;
+ pPriv->blitter = TRUE;
+ pPriv->doubleBuffer = FALSE;
++ pPriv->SyncToVBlank = pNv->WaitVSyncPossible;
+
+ pNv->blitAdaptor = adapt;
+
++ xvSyncToVBlank = MAKE_ATOM("XV_SYNC_TO_VBLANK");
++
+ return adapt;
+ }
+
+@@ -409,8 +428,8 @@
+ adapt->pPortPrivates = (DevUnion*)(&adapt[1]);
+ pPriv = (NVPortPrivPtr)(&adapt->pPortPrivates[1]);
+ adapt->pPortPrivates[0].ptr = (pointer)(pPriv);
+- adapt->pAttributes = NVAttributes;
+- adapt->nAttributes = NUM_ATTRIBUTES;
++ adapt->pAttributes = NVOverlayAttributes;
++ adapt->nAttributes = NUM_OVERLAY_ATTRIBUTES;
+ adapt->pImages = NVImages;
+ adapt->nImages = NUM_IMAGES_YUV;
+ adapt->PutVideo = NULL;
+@@ -571,8 +590,19 @@
+ NVDmaNext (pNv, SURFACE_FORMAT_DEPTH15);
+ }
+
+- NVDmaStart(pNv, STRETCH_BLIT_FORMAT, 1);
+- NVDmaNext (pNv, format);
++ if(pPriv->SyncToVBlank) {
++ NVDmaKickoff(pNv);
++ NVWaitVSync(pNv);
++ }
++
++ if(pNv->BlendingPossible) {
++ NVDmaStart(pNv, STRETCH_BLIT_FORMAT, 2);
++ NVDmaNext (pNv, format);
++ NVDmaNext (pNv, STRETCH_BLIT_OPERATION_COPY);
++ } else {
++ NVDmaStart(pNv, STRETCH_BLIT_FORMAT, 1);
++ NVDmaNext (pNv, format);
++ }
+
+ while(nbox--) {
+ NVDmaStart(pNv, RECT_SOLID_COLOR, 1);
+@@ -757,7 +787,20 @@
+ pointer data
+ )
+ {
+- return BadMatch;
++ NVPortPrivPtr pPriv = (NVPortPrivPtr)data;
++ NVPtr pNv = NVPTR(pScrnInfo);
++
++ if ((attribute == xvSyncToVBlank) && pNv->WaitVSyncPossible) {
++ if ((value < 0) || (value > 1))
++ return BadValue;
++ pPriv->SyncToVBlank = value;
++ } else
++ if (attribute == xvSetDefaults) {
++ pPriv->SyncToVBlank = pNv->WaitVSyncPossible;
++ } else
++ return BadMatch;
++
++ return Success;
+ }
+
+ static int NVGetBlitPortAttribute
+@@ -768,7 +811,14 @@
+ pointer data
+ )
+ {
+- return BadMatch;
++ NVPortPrivPtr pPriv = (NVPortPrivPtr)data;
++
++ if(attribute == xvSyncToVBlank)
++ *value = (pPriv->SyncToVBlank) ? 1 : 0;
++ else
++ return BadMatch;
++
++ return Success;
+ }
+
+
+@@ -1434,8 +1484,8 @@
+ NVGetSurfaceAttribute,
+ NVSetSurfaceAttribute,
+ 2046, 2046,
+- NUM_ATTRIBUTES - 1,
+- &NVAttributes[1]
++ NUM_OVERLAY_ATTRIBUTES - 1,
++ &NVOverlayAttributes[1]
+ },
+ {
+ &NVImages[2],
+@@ -1447,8 +1497,8 @@
+ NVGetSurfaceAttribute,
+ NVSetSurfaceAttribute,
+ 2046, 2046,
+- NUM_ATTRIBUTES - 1,
+- &NVAttributes[1]
++ NUM_OVERLAY_ATTRIBUTES - 1,
++ &NVOverlayAttributes[1]
+ },
+ };
+
+Index: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_xaa.c
+diff -u xc/programs/Xserver/hw/xfree86/drivers/nv/nv_xaa.c:1.2 xc/programs/Xserver/hw/xfree86/drivers/nv/nv_xaa.c:1.2.4.1
+--- xc/programs/Xserver/hw/xfree86/drivers/nv/nv_xaa.c:1.2 Fri Apr 23 19:42:10 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/nv/nv_xaa.c Sun Nov 14 18:13:27 2004
+@@ -37,7 +37,7 @@
+ |* *|
+ \***************************************************************************/
+
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_xaa.c,v 1.33 2003/09/21 00:17:34 mvojkovi Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_xaa.c,v 1.35 2004/03/20 16:25:18 mvojkovi Exp $ */
+
+ #include "nv_include.h"
+ #include "xaalocal.h"
+@@ -151,6 +151,19 @@
+ }
+ }
+
++void
++NVWaitVSync(NVPtr pNv)
++{
++ NVDmaStart(pNv, 0x0000A12C, 1);
++ NVDmaNext (pNv, 0);
++ NVDmaStart(pNv, 0x0000A134, 1);
++ NVDmaNext (pNv, pNv->CRTCnumber);
++ NVDmaStart(pNv, 0x0000A100, 1);
++ NVDmaNext (pNv, 0);
++ NVDmaStart(pNv, 0x0000A130, 1);
++ NVDmaNext (pNv, 0);
++}
++
+ /*
+ currentRop = 0-15 solid fill
+ 16-31 8x8 pattern fill
+Index: xc/programs/Xserver/hw/xfree86/drivers/sis/init301.c
+diff -u xc/programs/Xserver/hw/xfree86/drivers/sis/init301.c:1.13 xc/programs/Xserver/hw/xfree86/drivers/sis/init301.c:1.13.2.1
+--- xc/programs/Xserver/hw/xfree86/drivers/sis/init301.c:1.13 Fri Aug 20 18:57:06 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/sis/init301.c Wed Feb 2 01:36:05 2005
+@@ -1,5 +1,5 @@
+ /* $XFree86$ */
+-/* $XdotOrg: xc/programs/Xserver/hw/xfree86/drivers/sis/init301.c,v 1.13 2004/08/20 18:57:06 kem Exp $ */
++/* $XdotOrg: xc/programs/Xserver/hw/xfree86/drivers/sis/init301.c,v 1.13.2.1 2005/02/02 01:36:05 gisburn Exp $ */
+ /*
+ * Mode initializing code (CRT2 section)
+ * for SiS 300/305/540/630/730 and
+@@ -3501,9 +3501,9 @@
+ SiS_Pr->SiS_RVBHCMAX = ROMAddr[romptr];
+ SiS_Pr->SiS_RVBHCFACT = ROMAddr[romptr+1];
+ SiS_Pr->SiS_VGAHT = ROMAddr[romptr+2] | ((ROMAddr[romptr+3] & 0x0f) << 8);
+- SiS_Pr->SiS_VGAVT = ROMAddr[romptr+4] | ((ROMAddr[romptr+3] & 0xf0) << 4);
++ SiS_Pr->SiS_VGAVT = (ROMAddr[romptr+4] << 4) | ((ROMAddr[romptr+3] & 0xf0) >> 4);
+ SiS_Pr->SiS_HT = ROMAddr[romptr+5] | ((ROMAddr[romptr+6] & 0x0f) << 8);
+- SiS_Pr->SiS_VT = ROMAddr[romptr+7] | ((ROMAddr[romptr+6] & 0xf0) << 4);
++ SiS_Pr->SiS_VT = (ROMAddr[romptr+7] << 4) | ((ROMAddr[romptr+6] & 0xf0) >> 4);
+ if(SiS_Pr->SiS_VGAHT) gotit = TRUE;
+ else {
+ SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
+Index: xc/programs/Xserver/hw/xfree86/drivers/sis/sis.h
+diff -u xc/programs/Xserver/hw/xfree86/drivers/sis/sis.h:1.18 xc/programs/Xserver/hw/xfree86/drivers/sis/sis.h:1.18.2.1
+--- xc/programs/Xserver/hw/xfree86/drivers/sis/sis.h:1.18 Fri Aug 20 18:57:06 2004
++++ xc/programs/Xserver/hw/xfree86/drivers/sis/sis.h Wed Feb 2 03:22:36 2005
+@@ -1,5 +1,5 @@
+ /* $XFree86$ */
+-/* $XdotOrg: xc/programs/Xserver/hw/xfree86/drivers/sis/sis.h,v 1.18 2004/08/20 18:57:06 kem Exp $ */
++/* $XdotOrg: xc/programs/Xserver/hw/xfree86/drivers/sis/sis.h,v 1.18.2.1 2005/02/02 03:22:36 gisburn Exp $ */
+ /*
+ * Main global data and definitions
+ *
+@@ -472,7 +472,7 @@
+
+ /* Used for makeing use of the BIOS scratch area (save/restore mode number) */
+ #undef SIS_USE_BIOS_SCRATCH
+-#if (defined(i386) || defined(__i386) || defined(__i386__) || defined(__AMD64__))
++#if (defined(i386) || defined(__i386) || defined(__i386__) || defined(__AMD64__) || defined(__amd64__))
+ #define SIS_USE_BIOS_SCRATCH
+ #endif
+
+Index: xc/programs/Xserver/hw/xfree86/input/keyboard/kbd.c
+diff -u xc/programs/Xserver/hw/xfree86/input/keyboard/kbd.c:1.6 xc/programs/Xserver/hw/xfree86/input/keyboard/kbd.c:1.6.2.1
+--- xc/programs/Xserver/hw/xfree86/input/keyboard/kbd.c:1.6 Tue Aug 31 01:36:13 2004
++++ xc/programs/Xserver/hw/xfree86/input/keyboard/kbd.c Thu Dec 16 03:38:45 2004
+@@ -1,4 +1,4 @@
+-/* $XdotOrg: xc/programs/Xserver/hw/xfree86/input/keyboard/kbd.c,v 1.6 2004/08/31 01:36:13 kem Exp $ */
++/* $XdotOrg: xc/programs/Xserver/hw/xfree86/input/keyboard/kbd.c,v 1.6.2.1 2004/12/16 03:38:45 gisburn Exp $ */
+ /* $XFree86: xc/programs/Xserver/hw/xfree86/input/keyboard/kbd.c,v 1.8 2003/11/03 05:11:47 tsi Exp $ */
+
+ /*
+@@ -12,7 +12,7 @@
+ * xf86Events.c and xf86Io.c which are
+ * Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany.
+ */
+-/* $XdotOrg: xc/programs/Xserver/hw/xfree86/input/keyboard/kbd.c,v 1.6 2004/08/31 01:36:13 kem Exp $ */
++/* $XdotOrg: xc/programs/Xserver/hw/xfree86/input/keyboard/kbd.c,v 1.6.2.1 2004/12/16 03:38:45 gisburn Exp $ */
+
+ #define NEED_EVENTS
+ #include "X.h"
+@@ -135,7 +135,7 @@
+ "Protocol", "standard",
+ "AutoRepeat", "500 30",
+ "XkbRules", __XKBDEFRULES__,
+- "XkbModel", "pc101",
++ "XkbModel", "pc105",
+ "XkbLayout", "us",
+ "Panix106", "off",
+ "CustomKeycodes", "off",
+@@ -372,6 +372,7 @@
+ }
+ #endif
+ pKbd->SetLeds(pInfo, pKbd->leds);
++ pKbd->autoRepeat = ctrl->autoRepeat;
+
+ return (Success);
+ }
+@@ -720,14 +721,14 @@
+ /*
+ * check for an autorepeat-event
+ */
+- if (down) {
++ if (down && KeyPressed(keycode)) {
+ int num = keycode >> 3;
+ int bit = 1 << (keycode & 7);
+- if ((keyc->down[num] & bit) &&
+- ((kbdfeed->ctrl.autoRepeat != AutoRepeatModeOn) ||
+- keyc->modifierMap[keycode] ||
+- !(kbdfeed->ctrl.autoRepeats[num] & bit)))
+- return;
++
++ if ((pKbd->autoRepeat != AutoRepeatModeOn) ||
++ keyc->modifierMap[keycode] ||
++ !(kbdfeed->ctrl.autoRepeats[num] & bit))
++ return;
+ }
+
+ if (UsePrefix) {
+Index: xc/programs/Xserver/hw/xfree86/loader/dixsym.c
+diff -u xc/programs/Xserver/hw/xfree86/loader/dixsym.c:1.5 xc/programs/Xserver/hw/xfree86/loader/dixsym.c:1.5.2.2
+--- xc/programs/Xserver/hw/xfree86/loader/dixsym.c:1.5 Thu Aug 19 04:08:40 2004
++++ xc/programs/Xserver/hw/xfree86/loader/dixsym.c Wed Dec 8 05:32:54 2004
+@@ -1,4 +1,4 @@
+-/* $XdotOrg: xc/programs/Xserver/hw/xfree86/loader/dixsym.c,v 1.5 2004/08/19 04:08:40 kem Exp $ */
++/* $XdotOrg: xc/programs/Xserver/hw/xfree86/loader/dixsym.c,v 1.5.2.2 2004/12/08 05:32:54 gisburn Exp $ */
+ /* $XFree86: xc/programs/Xserver/hw/xfree86/loader/dixsym.c,v 1.63 2003/12/03
+ * 17:11:29 tsi Exp $ */
+
+@@ -325,15 +325,122 @@
+ SYMFUNC(AdjustWaitForDelay)
+ SYMVAR(noTestExtensions)
+ SYMFUNC(GiveUp)
++
++#ifdef BEZIER
++ SYMVAR(noBezierExtension)
++#endif
++#ifdef BIGREQS
++ SYMVAR(noBigReqExtension)
++#endif
+ #ifdef COMPOSITE
+ SYMVAR(noCompositeExtension)
+ #endif
++#ifdef DAMAGE
++ SYMVAR(noDamageExtension)
++#endif
++#ifdef DBE
++ SYMVAR(noDbeExtension)
++#endif
++#ifdef DPSEXT
++ SYMVAR(noDPSExtension)
++#endif
++#ifdef DPMSExtension
++ SYMVAR(noDPMSExtension)
++#endif
++#ifdef EVI
++ SYMVAR(noEVIExtension)
++#endif
++#ifdef FONTCACHE
++ SYMVAR(noFontCacheExtension)
++#endif
++#ifdef GLXEXT
++ SYMVAR(noGlxExtension)
++#endif
++#ifdef LBX
++ SYMVAR(noLbxExtension)
++#endif
++#ifdef SCREENSAVER
++ SYMVAR(noScreenSaverExtension)
++#endif
++#ifdef MITSHM
++ SYMVAR(noMITShmExtension)
++#endif
++#ifdef MITMISC
++ SYMVAR(noMITMiscExtension)
++#endif
++#ifdef MULTIBUFFER
++ SYMVAR(noMultibufferExtension)
++#endif
++#ifdef RANDR
++ SYMVAR(noRRExtension)
++#endif
+ #ifdef RENDER
+ SYMVAR(noRenderExtension)
+ #endif
++#ifdef SHAPE
++ SYMVAR(noShapeExtension)
++#endif
++#ifdef XCSECURITY
++ SYMVAR(noSecurityExtension)
++#endif
++#ifdef XSYNC
++ SYMVAR(noSyncExtension)
++#endif
++#ifdef TOGCUP
++ SYMVAR(noXcupExtension)
++#endif
++#ifdef PEXEXT
++ SYMVAR(noPexExtension)
++#endif
++#ifdef RES
++ SYMVAR(noResExtension)
++#endif
++#ifdef XAPPGROUP
++ SYMVAR(noXagExtension)
++#endif
++#ifdef XCMISC
++ SYMVAR(noXCMiscExtension)
++#endif
+ #ifdef XEVIE
+ SYMVAR(noXevieExtension)
+ #endif
++#ifdef XIE
++ SYMVAR(noXie)
++#endif
++#ifdef XF86BIGFONT
++ SYMVAR(noXFree86BigfontExtension)
++#endif
++#ifdef XFreeXDGA
++ SYMVAR(noXFree86DGAExtension)
++#endif
++#ifdef XF86DRI
++ SYMVAR(noXFree86DRIExtension)
++#endif
++#ifdef XF86MISC
++ SYMVAR(noXFree86MiscExtension)
++#endif
++#ifdef XF86VIDMODE
++ SYMVAR(noXFree86VidModeExtension)
++#endif
++#ifdef XFIXES
++ SYMVAR(noXFixesExtension)
++#endif
++#ifdef XKB
++/* |noXkbExtension| is defined in xc/programs/Xserver/xkb/xkbInit.c */
++ SYMVAR(noXkbExtension)
++#endif
++#ifdef PANORAMIX
++ SYMVAR(noPanoramiXExtension)
++#endif
++#ifdef XINPUT
++ SYMVAR(noXInputExtension)
++#endif
++#ifdef XIDLE
++ SYMVAR(noXIdleExtension)
++#endif
++#ifdef XV
++ SYMVAR(noXvExtension)
++#endif
+
+ /* log.c */
+ SYMFUNC(LogVWrite)
+@@ -386,7 +493,6 @@
+ /* xkb/xkbInit.c */
+ SYMFUNC(XkbInitKeyboardDeviceStruct)
+ SYMFUNC(XkbSetRulesDflts)
+- SYMVAR(noXkbExtension)
+ #endif
+
+ #ifdef XINPUT
+Index: xc/programs/Xserver/hw/xfree86/loader/elfloader.c
+diff -u xc/programs/Xserver/hw/xfree86/loader/elfloader.c:1.2 xc/programs/Xserver/hw/xfree86/loader/elfloader.c:1.2.4.1
+--- xc/programs/Xserver/hw/xfree86/loader/elfloader.c:1.2 Fri Apr 23 19:54:06 2004
++++ xc/programs/Xserver/hw/xfree86/loader/elfloader.c Wed Dec 8 06:25:07 2004
+@@ -1,4 +1,4 @@
+-/* $XdotOrg: xc/programs/Xserver/hw/xfree86/loader/elfloader.c,v 1.2 2004/04/23 19:54:06 eich Exp $ */
++/* $XdotOrg: xc/programs/Xserver/hw/xfree86/loader/elfloader.c,v 1.2.4.1 2004/12/08 06:25:07 gisburn Exp $ */
+ /* $XFree86: xc/programs/Xserver/hw/xfree86/loader/elfloader.c,v 1.61tsi Exp $ */
+
+ /*
+@@ -922,7 +922,7 @@
+ ErrorF("ELFCreateGOT() Unable to reallocate memory!!!!\n");
+ return FALSE;
+ }
+-# if defined(linux) || defined(__OpenBSD__)
++# if defined(linux) || defined(__OpenBSD__) || defined(sun)
+ {
+ unsigned long page_size = getpagesize();
+ unsigned long round;
+@@ -1097,7 +1097,7 @@
+ ErrorF("ELFCreatePLT() Unable to allocate memory!!!!\n");
+ return;
+ }
+-# if defined(linux) || defined(__OpenBSD__)
++# if defined(linux) || defined(__OpenBSD__) || defined(sun)
+ {
+ unsigned long page_size = getpagesize();
+ unsigned long round;
+@@ -2775,7 +2775,7 @@
+ elffile->lsection[j].size = SecSize(i);
+ elffile->lsection[j].flags = flags;
+ switch (SecType(i)) {
+-#if defined(linux) || defined(__OpenBSD__)
++#if defined(linux) || defined(__OpenBSD__) || defined(sun)
+ case SHT_PROGBITS:
+ {
+ unsigned long page_size = getpagesize();
+@@ -2979,7 +2979,7 @@
+ ErrorF("Unable to allocate ELF sections\n");
+ return NULL;
+ }
+-# if defined(linux) || defined(__OpenBSD__)
++# if defined(linux) || defined(__OpenBSD__) || defined(sun)
+ {
+ unsigned long page_size = getpagesize();
+ unsigned long round;
+Index: xc/programs/Xserver/hw/xfree86/loader/extsym.c
+diff -u xc/programs/Xserver/hw/xfree86/loader/extsym.c:1.4 xc/programs/Xserver/hw/xfree86/loader/extsym.c:1.4.2.1
+--- xc/programs/Xserver/hw/xfree86/loader/extsym.c:1.4 Mon Aug 9 03:40:50 2004
++++ xc/programs/Xserver/hw/xfree86/loader/extsym.c Wed Dec 8 05:32:54 2004
+@@ -1,4 +1,4 @@
+-/* $XdotOrg: xc/programs/Xserver/hw/xfree86/loader/extsym.c,v 1.4 2004/08/09 03:40:50 krh Exp $ */
++/* $XdotOrg: xc/programs/Xserver/hw/xfree86/loader/extsym.c,v 1.4.2.1 2004/12/08 05:32:54 gisburn Exp $ */
+ /* $XFree86: xc/programs/Xserver/hw/xfree86/loader/extsym.c,v 1.9 2003/10/15 16:29:03 dawes Exp $ */
+
+ /*
+@@ -66,7 +66,6 @@
+ #ifdef PANORAMIX
+ SYMFUNC(XineramaRegisterConnectionBlockCallback)
+ SYMFUNC(XineramaDeleteResource)
+- SYMVAR(noPanoramiXExtension)
+ SYMVAR(PanoramiXNumScreens)
+ SYMVAR(panoramiXdataPtr)
+ SYMVAR(PanoramiXVisualTable)
+Index: xc/programs/Xserver/hw/xfree86/os-support/bsd/bsd_KbdMap.c
+diff -u xc/programs/Xserver/hw/xfree86/os-support/bsd/bsd_KbdMap.c:1.2 xc/programs/Xserver/hw/xfree86/os-support/bsd/bsd_KbdMap.c:1.2.4.1
+--- xc/programs/Xserver/hw/xfree86/os-support/bsd/bsd_KbdMap.c:1.2 Fri Apr 23 19:54:07 2004
++++ xc/programs/Xserver/hw/xfree86/os-support/bsd/bsd_KbdMap.c Mon Dec 13 14:03:44 2004
+@@ -677,11 +677,11 @@
+ };
+
+ static CARD8 wsSunMap[] = {
+- /* 0x00 */ KEY_NOTUSED,
+- /* 0x01 */ KEY_NOTUSED, /* stop */
+- /* 0x02 */ KEY_NOTUSED, /* BrightnessDown / S-VolumeDown */
+- /* 0x03 */ KEY_NOTUSED, /* again */
+- /* 0x04 */ KEY_NOTUSED, /* BridgtnessUp / S-VolumeUp */
++ /* 0x00 */ KEY_Help,
++ /* 0x01 */ KEY_L1, /* stop */
++ /* 0x02 */ KEY_AudioLower, /* BrightnessDown / S-VolumeDown */
++ /* 0x03 */ KEY_L2, /* again */
++ /* 0x04 */ KEY_AudioRaise, /* BridgtnessUp / S-VolumeUp */
+ /* 0x05 */ KEY_F1,
+ /* 0x06 */ KEY_F2,
+ /* 0x07 */ KEY_F10,
+@@ -700,10 +700,10 @@
+ /* 0x14 */ KEY_Up,
+ /* 0x15 */ KEY_Pause,
+ /* 0x16 */ KEY_Print,
+- /* 0x17 */ KEY_NOTUSED, /* props */
++ /* 0x17 */ KEY_ScrollLock,
+ /* 0x18 */ KEY_Left,
+- /* 0x19 */ KEY_ScrollLock,
+- /* 0x1a */ KEY_NOTUSED, /* undo */
++ /* 0x19 */ KEY_L3, /* props */
++ /* 0x1a */ KEY_L4, /* undo */
+ /* 0x1b */ KEY_Down,
+ /* 0x1c */ KEY_Right,
+ /* 0x1d */ KEY_Escape,
+@@ -722,13 +722,13 @@
+ /* 0x2a */ KEY_Tilde,
+ /* 0x2b */ KEY_BackSpace,
+ /* 0x2c */ KEY_Insert,
+- /* 0x2d */ KEY_KP_Equal,
++ /* 0x2d */ KEY_Mute, /* Audio Mute */
+ /* 0x2e */ KEY_KP_Divide,
+ /* 0x2f */ KEY_KP_Multiply,
+ /* 0x30 */ KEY_NOTUSED,
+- /* 0x31 */ KEY_NOTUSED, /* front */
++ /* 0x31 */ KEY_L5, /* front */
+ /* 0x32 */ KEY_KP_Decimal,
+- /* 0x33 */ KEY_NOTUSED, /* copy */
++ /* 0x33 */ KEY_L6, /* copy */
+ /* 0x34 */ KEY_Home,
+ /* 0x35 */ KEY_Tab,
+ /* 0x36 */ KEY_Q,
+@@ -744,13 +744,13 @@
+ /* 0x40 */ KEY_LBrace,
+ /* 0x41 */ KEY_RBrace,
+ /* 0x42 */ KEY_Delete,
+- /* 0x43 */ KEY_NOTUSED, /* compose */
++ /* 0x43 */ KEY_Menu, /* compose */
+ /* 0x44 */ KEY_KP_7,
+ /* 0x45 */ KEY_KP_8,
+ /* 0x46 */ KEY_KP_9,
+ /* 0x47 */ KEY_KP_Minus,
+- /* 0x48 */ KEY_NOTUSED, /* open */
+- /* 0x49 */ KEY_NOTUSED, /* paste */
++ /* 0x48 */ KEY_L7, /* open */
++ /* 0x49 */ KEY_L8, /* paste */
+ /* 0x4a */ KEY_End,
+ /* 0x4b */ KEY_NOTUSED,
+ /* 0x4c */ KEY_LCtrl,
+@@ -772,9 +772,9 @@
+ /* 0x5c */ KEY_KP_5,
+ /* 0x5d */ KEY_KP_6,
+ /* 0x5e */ KEY_KP_0,
+- /* 0x5f */ KEY_NOTUSED, /* find */
++ /* 0x5f */ KEY_L9, /* find */
+ /* 0x60 */ KEY_PgUp,
+- /* 0x61 */ KEY_NOTUSED, /* cut */
++ /* 0x61 */ KEY_L10, /* cut */
+ /* 0x62 */ KEY_NumLock,
+ /* 0x63 */ KEY_ShiftL,
+ /* 0x64 */ KEY_Z,
+@@ -801,7 +801,7 @@
+ /* 0x79 */ KEY_Space,
+ /* 0x7a */ KEY_RMeta,
+ /* 0x7b */ KEY_PgDown,
+- /* 0x7c */ KEY_NOTUSED,
++ /* 0x7c */ KEY_Less, /* < > on some keyboards */
+ /* 0x7d */ KEY_KP_Plus,
+ /* 0x7e */ KEY_NOTUSED,
+ /* 0x7f */ KEY_NOTUSED
+@@ -1044,9 +1044,11 @@
+ case PCCONS:
+ case PCVT:
+ pKbd->RemapScanCode = ATScancode;
++ break;
+ #endif
+ #ifdef WSCONS_SUPPORT
+ case WSCONS:
++ if (!pKbd->isConsole) {
+ switch (pKbd->wsKbdType) {
+ case WSKBD_TYPE_PC_XT:
+ case WSKBD_TYPE_PC_AT:
+@@ -1061,6 +1063,9 @@
+ break;
+ #endif
+ #ifdef WSKBD_TYPE_SUN
++#ifdef WSKBD_TYPE_SUN5
++ case WSKBD_TYPE_SUN5:
++#endif
+ case WSKBD_TYPE_SUN:
+ pKbd->scancodeMap = &wsSun;
+ break;
+@@ -1068,6 +1073,9 @@
+ default:
+ ErrorF("Unknown wskbd type %d\n", pKbd->wsKbdType);
+ }
++ } else {
++ pKbd->RemapScanCode = ATScancode;
++ }
+ break;
+ #endif
+ }
+Index: xc/programs/Xserver/hw/xfree86/os-support/bsd/bsd_kbd.c
+diff -u xc/programs/Xserver/hw/xfree86/os-support/bsd/bsd_kbd.c:1.2 xc/programs/Xserver/hw/xfree86/os-support/bsd/bsd_kbd.c:1.2.4.2
+--- xc/programs/Xserver/hw/xfree86/os-support/bsd/bsd_kbd.c:1.2 Fri Apr 23 19:54:07 2004
++++ xc/programs/Xserver/hw/xfree86/os-support/bsd/bsd_kbd.c Tue Feb 1 03:32:38 2005
+@@ -143,7 +143,7 @@
+ KbdOn(InputInfoPtr pInfo, int what)
+ {
+ KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+-#if defined(SYSCONS_SUPPORT) || defined(PCCONS_SUPPORT) || defined(PCVT_SUPPORT)
++#if defined(SYSCONS_SUPPORT) || defined(PCCONS_SUPPORT) || defined(PCVT_SUPPORT) || defined(WSCONS_SUPPORT)
+ BsdKbdPrivPtr priv = (BsdKbdPrivPtr) pKbd->private;
+ struct termios nTty;
+ #endif
+@@ -154,7 +154,7 @@
+ if (pKbd->isConsole) {
+ switch (pKbd->consType) {
+
+-#if defined(SYSCONS_SUPPORT) || defined(PCCONS_SUPPORT) || defined(PCVT_SUPPORT)
++#if defined(SYSCONS_SUPPORT) || defined(PCCONS_SUPPORT) || defined(PCVT_SUPPORT) || defined(WSCONS_SUPPORT)
+ case SYSCONS:
+ case PCCONS:
+ case PCVT:
+@@ -170,7 +170,10 @@
+ nTty.c_cc[VMIN] = 1;
+ cfsetispeed(&nTty, 9600);
+ cfsetospeed(&nTty, 9600);
+- tcsetattr(pInfo->fd, TCSANOW, &nTty);
++ if (tcsetattr(pInfo->fd, TCSANOW, &nTty) < 0) {
++ xf86Msg(X_ERROR, "KbdOn: tcsetattr: %s\n",
++ strerror(errno));
++ }
+ break;
+ #endif
+ }
+@@ -197,7 +200,7 @@
+ "or use for example:\n\n"
+ "Option \"Protocol\" \"wskbd\"\n"
+ "Option \"Device\" \"/dev/wskbd0\"\n"
+- "\nin your XF86Config(5) file\n");
++ "\nin your xorg.conf(5) file\n");
+ }
+ break;
+ #endif
+@@ -232,7 +235,7 @@
+ case WSCONS:
+ option = WSKBD_TRANSLATED;
+ ioctl(xf86Info.consoleFd, WSKBDIO_SETMODE, &option);
+- tcsetattr(xf86Info.consoleFd, TCSANOW, &(priv->kbdtty));
++ tcsetattr(pInfo->fd, TCSANOW, &(priv->kbdtty));
+ break;
+ #endif
+ }
+@@ -292,7 +295,7 @@
+
+ if ((ModifierSet(ControlMask | AltMask)) ||
+ (ModifierSet(ControlMask | AltLangMask))) {
+- if (VTSwitchEnabled && !xf86Info.vtSysreq) {
++ if (VTSwitchEnabled && !xf86Info.vtSysreq && !xf86Info.dontVTSwitch) {
+ switch (key) {
+ case KEY_F1:
+ case KEY_F2:
+@@ -318,7 +321,7 @@
+ }
+ }
+ #ifdef USE_VT_SYSREQ
+- if (VTSwitchEnabled && xf86Info.vtSysreq) {
++ if (VTSwitchEnabled && xf86Info.vtSysreq && !xf86Info.dontVTSwitch) {
+ switch (key) {
+ case KEY_F1:
+ case KEY_F2:
+@@ -380,22 +383,30 @@
+ }
+
+ #ifdef WSCONS_SUPPORT
++
+ static void
+ WSReadInput(InputInfoPtr pInfo)
+ {
+ KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+ struct wscons_event events[64];
+- int n, i;
++ int type;
++ int blocked, n, i;
++
+ if ((n = read( pInfo->fd, events, sizeof(events))) > 0) {
+ n /= sizeof(struct wscons_event);
+- for (i = 0; i < n; i++)
+- pKbd->PostEvent(pInfo, events[i].value,
+- events[i].type == WSCONS_EVENT_KEY_DOWN ? TRUE : FALSE);
+- }
++ for (i = 0; i < n; i++) {
++ type = events[i].type;
++ if (type == WSCONS_EVENT_KEY_UP || type == WSCONS_EVENT_KEY_DOWN) {
++ /* It seems better to block SIGIO there */
++ blocked = xf86BlockSIGIO();
++ pKbd->PostEvent(pInfo, (unsigned int)(events[i].value),
++ type == WSCONS_EVENT_KEY_DOWN ? TRUE : FALSE);
++ xf86UnblockSIGIO(blocked);
++ }
++ } /* for */
++ }
+ }
+-#endif
+
+-#ifdef WSCONS_SUPPORT
+ static void
+ printWsType(char *type, char *devname)
+ {
+@@ -448,15 +459,14 @@
+ pKbd->consType = xf86Info.consType;
+ }
+ } else {
+- pInfo->fd = open(s, O_RDONLY | O_NONBLOCK | O_EXCL);
++ pInfo->fd = open(s, O_RDONLY | O_NONBLOCK | O_EXCL);
+ if (pInfo->fd == -1) {
+ xf86Msg(X_ERROR, "%s: cannot open \"%s\"\n", pInfo->name, s);
+ xfree(s);
+ return FALSE;
+ }
+ pKbd->isConsole = FALSE;
+- /* XXX What is consType here? */
+- pKbd->consType = SYSCONS;
++ pKbd->consType = xf86Info.consType;
+ xfree(s);
+ }
+
+@@ -495,6 +505,11 @@
+ printWsType("Sun", pInfo->name);
+ break;
+ #endif
++#ifdef WSKBD_TYPE_SUN5
++ case WSKBD_TYPE_SUN5:
++ xf86Msg(X_PROBED, "Keyboard type: Sun5\n");
++ break;
++#endif
+ default:
+ xf86Msg(X_ERROR, "%s: Unsupported wskbd type \"%d\"",
+ pInfo->name, pKbd->wsKbdType);
+@@ -535,4 +550,3 @@
+ }
+ return TRUE;
+ }
+-
+Index: xc/programs/Xserver/hw/xfree86/os-support/bus/460gxPCI.c
+diff -u xc/programs/Xserver/hw/xfree86/os-support/bus/460gxPCI.c:1.1.1.2 xc/programs/Xserver/hw/xfree86/os-support/bus/460gxPCI.c:1.1.1.2.6.2
+--- xc/programs/Xserver/hw/xfree86/os-support/bus/460gxPCI.c:1.1.1.2 Tue Nov 25 19:28:50 2003
++++ xc/programs/Xserver/hw/xfree86/os-support/bus/460gxPCI.c Fri Dec 17 00:53:09 2004
+@@ -201,32 +201,46 @@
+ * the chipset scan is to be stopped, or FALSE if the scan is to move on to the
+ * next chipset.
+ */
++
+ Bool
+-xf86PreScan460GX(void)
++xorgProbe460GX(scanpciWrapperOpt flags)
+ {
+ pciBusInfo_t *pBusInfo;
+ PCITAG tag;
+- CARD32 tmp;
+- int i, devno;
+
+ /* Bus zero should already be set up */
+ if (!(pBusInfo = pciBusInfo[0])) {
+ cbn_460gx = -1;
+ return FALSE;
+ }
+-
+ /* First look for a 460GX's primary host bridge */
+ tag = PCI_MAKE_TAG(0, 0x10, 0);
+- if (pciReadLong(tag, PCI_ID_REG) != DEVID(VENDOR_INTEL, CHIP_460GX_SAC)) {
+- cbn_460gx = -1;
+- return FALSE;
++ if (pciReadLong(tag, PCI_ID_REG) == DEVID(VENDOR_INTEL, CHIP_460GX_SAC)) {
++ return TRUE;
+ }
+
++ cbn_460gx = -1;
++
++ return FALSE;
++}
++
++void
++xf86PreScan460GX(void)
++{
++ pciBusInfo_t *pBusInfo;
++ PCITAG tag;
++ CARD32 tmp;
++ int i, devno;
++
++ if (!(pBusInfo = pciBusInfo[0]))
++ return;
++
+ /* Get CBN (Chipset bus number) */
++ tag = PCI_MAKE_TAG(0, 0x10, 0);
+ if (!(cbn_460gx = (unsigned int)pciReadByte(tag, CBN))) {
+ /* Sanity check failed */
+ cbn_460gx = -1;
+- return TRUE;
++ return;
+ }
+
+ if (pciNumBuses <= cbn_460gx)
+@@ -242,7 +256,7 @@
+ if (pciReadLong(tag, PCI_ID_REG) != DEVID(VENDOR_INTEL, CHIP_460GX_SAC)) {
+ /* Sanity check failed */
+ cbn_460gx = -1;
+- return TRUE;
++ return;
+ }
+
+ /*
+@@ -257,7 +271,7 @@
+ DEVID(VENDOR_INTEL, CHIP_460GX_SAC)) {
+ /* Sanity check failed */
+ cbn_460gx = -1;
+- return TRUE;
++ return;
+ }
+
+ if (devno == 0x10)
+@@ -278,7 +292,7 @@
+ if (cbdevs_460gx & (1 << devno)) {
+ /* Sanity check failed */
+ cbn_460gx = -1;
+- return TRUE;
++ return;
+ }
+
+ /*
+@@ -294,7 +308,7 @@
+ if (cbdevs_460gx & (1 << devno)) {
+ /* Sanity check failed */
+ cbn_460gx = -1;
+- return TRUE;
++ return;
+ }
+
+ /*
+@@ -310,7 +324,7 @@
+ break;
+ /* Sanity check failed */
+ cbn_460gx = -1;
+- return TRUE;
++ return;
+ }
+ }
+
+@@ -337,7 +351,7 @@
+ break;
+ }
+
+- return TRUE;
++ return;
+ }
+
+ /* This does some 460GX-related processing after the PCI bus scan */
+@@ -423,7 +437,7 @@
+ if (pPCI->funcnum > 0)
+ break;
+
+- if ((pBusInfo = pciBusInfo[busno_460gx[i]]))
++ if ((pBusInfo == pciBusInfo[busno_460gx[i]]))
+ break;
+
+ /* Fix bus linkage */
+Index: xc/programs/Xserver/hw/xfree86/os-support/bus/460gxPCI.h
+diff -u xc/programs/Xserver/hw/xfree86/os-support/bus/460gxPCI.h:1.1.1.1 xc/programs/Xserver/hw/xfree86/os-support/bus/460gxPCI.h:1.1.1.1.6.1
+--- xc/programs/Xserver/hw/xfree86/os-support/bus/460gxPCI.h:1.1.1.1 Fri Nov 14 16:48:56 2003
++++ xc/programs/Xserver/hw/xfree86/os-support/bus/460gxPCI.h Wed Dec 15 15:24:45 2004
+@@ -29,8 +29,10 @@
+ #define PCI_460GX_H 1
+
+ #include <X11/Xdefs.h>
++#include <Pci.h>
+
+-Bool xf86PreScan460GX(void);
++Bool xorgProbe460GX(scanpciWrapperOpt flags);
++void xf86PreScan460GX(void);
+ void xf86PostScan460GX(void);
+
+ #endif
+Index: xc/programs/Xserver/hw/xfree86/os-support/bus/Imakefile
+diff -u xc/programs/Xserver/hw/xfree86/os-support/bus/Imakefile:1.4 xc/programs/Xserver/hw/xfree86/os-support/bus/Imakefile:1.4.2.1
+--- xc/programs/Xserver/hw/xfree86/os-support/bus/Imakefile:1.4 Wed Aug 11 21:14:17 2004
++++ xc/programs/Xserver/hw/xfree86/os-support/bus/Imakefile Wed Dec 15 15:24:45 2004
+@@ -126,8 +126,8 @@
+ PCIARCHOBJ = sparcPci.o
+ # endif
+ #elif defined(ia64Architecture)
+-PCIARCHSRC = ia64Pci.c 460gxPCI.c e8870PCI.c zx1PCI.c
+-PCIARCHOBJ = ia64Pci.o 460gxPCI.o e8870PCI.o zx1PCI.o
++PCIARCHSRC = 460gxPCI.c e8870PCI.c zx1PCI.c
++PCIARCHOBJ = 460gxPCI.o e8870PCI.o zx1PCI.o
+ #endif
+
+ SRCS = Pci.c $(PCIDRVRSRC) $(SBUSDRVSRC) $(PCIARCHSRC)
+Index: xc/programs/Xserver/hw/xfree86/os-support/bus/Pci.c
+diff -u xc/programs/Xserver/hw/xfree86/os-support/bus/Pci.c:1.3 xc/programs/Xserver/hw/xfree86/os-support/bus/Pci.c:1.3.2.1
+--- xc/programs/Xserver/hw/xfree86/os-support/bus/Pci.c:1.3 Fri Jul 30 19:04:14 2004
++++ xc/programs/Xserver/hw/xfree86/os-support/bus/Pci.c Wed Dec 15 05:52:16 2004
+@@ -954,10 +954,13 @@
+ pciBusInfo_t *busp;
+ int idx = 0, i;
+ PCITAG tag;
++ static Bool done = FALSE;
+
+- if (pci_devp[0])
++ if (done || pci_devp[0])
+ return pci_devp;
+
++ done = TRUE;
++
+ pciInit();
+
+ #ifdef XF86SCANPCI_WRAPPER
+Index: xc/programs/Xserver/hw/xfree86/os-support/bus/e8870PCI.c
+diff -u xc/programs/Xserver/hw/xfree86/os-support/bus/e8870PCI.c:1.1.1.2 xc/programs/Xserver/hw/xfree86/os-support/bus/e8870PCI.c:1.1.1.2.6.1
+--- xc/programs/Xserver/hw/xfree86/os-support/bus/e8870PCI.c:1.1.1.2 Tue Nov 25 19:28:50 2003
++++ xc/programs/Xserver/hw/xfree86/os-support/bus/e8870PCI.c Wed Dec 15 15:24:45 2004
+@@ -34,17 +34,23 @@
+ #include "Pci.h"
+
+ Bool
+-xf86PreScanE8870(void)
++xorgProbeE8870(scanpciWrapperOpt flags)
+ {
+ PCITAG tag;
+
+ /* Look for an E8870's Hub interface */
+ tag = PCI_MAKE_TAG(0, 0x1E, 0);
+- if (pciReadLong(tag, PCI_ID_REG) != DEVID(VENDOR_INTEL, CHIP_82801_P2P))
+- return FALSE;
++ if (pciReadLong(tag, PCI_ID_REG) == DEVID(VENDOR_INTEL, CHIP_82801_P2P))
++ return TRUE;
++
++ return FALSE;
++}
+
++void
++xf86PreScanE8870(void)
++{
+ /* XXX Fill me in... */
+- return TRUE;
++ return;
+ }
+
+ void
+Index: xc/programs/Xserver/hw/xfree86/os-support/bus/e8870PCI.h
+diff -u xc/programs/Xserver/hw/xfree86/os-support/bus/e8870PCI.h:1.1.1.1 xc/programs/Xserver/hw/xfree86/os-support/bus/e8870PCI.h:1.1.1.1.6.1
+--- xc/programs/Xserver/hw/xfree86/os-support/bus/e8870PCI.h:1.1.1.1 Fri Nov 14 16:48:56 2003
++++ xc/programs/Xserver/hw/xfree86/os-support/bus/e8870PCI.h Wed Dec 15 15:24:45 2004
+@@ -29,8 +29,10 @@
+ #define PCI_E8870_H 1
+
+ #include <X11/Xdefs.h>
++#include <Pci.h>
+
+-Bool xf86PreScanE8870(void);
++Bool xorgProbeE8870(scanpciWrapperOpt flags);
++void xf86PreScanE8870(void);
+ void xf86PostScanE8870(void);
+
+ #endif
+Index: xc/programs/Xserver/hw/xfree86/os-support/bus/ia64Pci.c
+diff -u xc/programs/Xserver/hw/xfree86/os-support/bus/ia64Pci.c:1.2 xc/programs/Xserver/hw/xfree86/os-support/bus/ia64Pci.c:removed
+--- xc/programs/Xserver/hw/xfree86/os-support/bus/ia64Pci.c:1.2 Tue Jul 6 14:49:13 2004
++++ xc/programs/Xserver/hw/xfree86/os-support/bus/ia64Pci.c Fri Feb 11 21:35:34 2005
+@@ -1,61 +0,0 @@
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/bus/ia64Pci.c,v 1.3 2003/02/23 20:26:49 tsi Exp $ */
+-/*
+- * Copyright (C) 2002-2003 The XFree86 Project, Inc. All Rights Reserved.
+- *
+- * 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
+- * XFREE86 PROJECT 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 XFree86 Project 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
+- * XFree86 Project.
+- */
+-
+-/*
+- * This file contains the glue needed to support various IA-64 chipsets.
+- */
+-
+-#include "460gxPCI.h"
+-#include "e8870PCI.h"
+-#include "zx1PCI.h"
+-#include "Pci.h"
+-
+-void
+-ia64ScanPCIWrapper(scanpciWrapperOpt flags)
+-{
+-
+- if (flags == SCANPCI_INIT) {
+-
+- /* PCI configuration space probes should be done first */
+- if (xf86PreScan460GX())
+- return;
+- if (xf86PreScanE8870())
+- return;
+-#if 0
+- if (xf86PreScanZX1())
+- return;
+-#endif
+- } else /* if (flags == SCANPCI_TERM) */ {
+-
+- xf86PostScan460GX();
+- xf86PostScanE8870();
+-#if 0
+- xf86PostScanZX1();
+-#endif
+- }
+-
+-}
+Index: xc/programs/Xserver/hw/xfree86/os-support/bus/ix86Pci.c
+diff -u xc/programs/Xserver/hw/xfree86/os-support/bus/ix86Pci.c:1.2 xc/programs/Xserver/hw/xfree86/os-support/bus/ix86Pci.c:1.2.4.1
+--- xc/programs/Xserver/hw/xfree86/os-support/bus/ix86Pci.c:1.2 Tue Jul 6 14:37:48 2004
++++ xc/programs/Xserver/hw/xfree86/os-support/bus/ix86Pci.c Wed Dec 15 05:14:44 2004
+@@ -273,7 +273,7 @@
+ switch (xf86Info.pciFlags) {
+
+ case PCIOsConfig:
+-#if ARCH_PCI_OS_INIT
++#ifdef ARCH_PCI_OS_INIT
+ return;
+ #endif
+
+Index: xc/programs/Xserver/hw/xfree86/os-support/bus/linuxPci.c
+diff -u xc/programs/Xserver/hw/xfree86/os-support/bus/linuxPci.c:1.3 xc/programs/Xserver/hw/xfree86/os-support/bus/linuxPci.c:1.3.4.1
+--- xc/programs/Xserver/hw/xfree86/os-support/bus/linuxPci.c:1.3 Tue Jul 6 14:37:48 2004
++++ xc/programs/Xserver/hw/xfree86/os-support/bus/linuxPci.c Wed Dec 15 05:48:20 2004
+@@ -113,14 +113,16 @@
+ if (fd != -1)
+ close(fd);
+ if (bus < 256) {
+- if (stat("/proc/bus/pci/00", &ignored) < 0)
++ sprintf(file,"/proc/bus/pci/%02x",bus);
++ if (stat(file, &ignored) < 0)
+ sprintf(file, "/proc/bus/pci/0000:%02x/%02x.%1x",
+ bus, dev, func);
+ else
+ sprintf(file, "/proc/bus/pci/%02x/%02x.%1x",
+ bus, dev, func);
+ } else {
+- if (stat("/proc/bus/pci/00", &ignored) < 0)
++ sprintf(file,"/proc/bus/pci/%04x",bus);
++ if (stat(file, &ignored) < 0)
+ sprintf(file, "/proc/bus/pci/0000:%04x/%02x.%1x",
+ bus, dev, func);
+ else
+Index: xc/programs/Xserver/hw/xfree86/os-support/bus/xf86Sbus.h
+diff -u xc/programs/Xserver/hw/xfree86/os-support/bus/xf86Sbus.h:1.2 xc/programs/Xserver/hw/xfree86/os-support/bus/xf86Sbus.h:1.2.4.1
+--- xc/programs/Xserver/hw/xfree86/os-support/bus/xf86Sbus.h:1.2 Fri Apr 23 19:54:08 2004
++++ xc/programs/Xserver/hw/xfree86/os-support/bus/xf86Sbus.h Wed Feb 2 00:59:25 2005
+@@ -27,6 +27,7 @@
+
+ #if defined(linux)
+ #include <asm/types.h>
++#include <linux/fb.h>
+ #include <asm/fbio.h>
+ #include <asm/openpromio.h>
+ #elif defined(SVR4)
+Index: xc/programs/Xserver/hw/xfree86/os-support/bus/zx1PCI.c
+diff -u xc/programs/Xserver/hw/xfree86/os-support/bus/zx1PCI.c:1.1.1.4 xc/programs/Xserver/hw/xfree86/os-support/bus/zx1PCI.c:1.1.1.4.6.1
+--- xc/programs/Xserver/hw/xfree86/os-support/bus/zx1PCI.c:1.1.1.4 Thu Jan 29 08:08:47 2004
++++ xc/programs/Xserver/hw/xfree86/os-support/bus/zx1PCI.c Wed Dec 15 15:24:45 2004
+@@ -465,13 +465,7 @@
+ NULL, /* bridge -- dynamically set */
+ };
+
+-/*
+- * This checks for, and validates, the presence of the ZX1 chipset, and sets
+- * pZX1mio to a non-NULL pointer accordingly. This function is called before
+- * the server's PCI bus scan and returns TRUE if the chipset scan is to be
+- * stopped, or FALSE if the scan is to move on to the next chipset.
+- */
+-Bool
++void
+ xf86PreScanZX1(void)
+ {
+ resRange range;
+@@ -491,7 +485,7 @@
+ mapSize = MIO_SIZE;
+
+ if (!(pZX1mio = xf86MapVidMem(-1, VIDMEM_MMIO, MIO_BASE, mapSize)))
+- return FALSE;
++ return;
+
+ /* Look for ZX1's SBA and IOC */ /* XXX What about Dino? */
+ if ((MIO_LONG(MIO_FUNCTION0 + PCI_ID_REG) !=
+@@ -500,7 +494,7 @@
+ DEVID(VENDOR_HP, CHIP_ZX1_IOC))) {
+ xf86UnMapVidMem(-1, pZX1mio, mapSize);
+ pZX1mio = NULL;
+- return FALSE;
++ return;
+ }
+
+ /* Map rope configuration space */
+@@ -510,7 +504,7 @@
+ !(pZX1ioa = xf86MapVidMem(-1, VIDMEM_MMIO, ioaaddr, IOA_SIZE))) {
+ xf86UnMapVidMem(-1, pZX1mio, mapSize);
+ pZX1mio = NULL;
+- return TRUE;
++ return;
+ }
+
+ for (i = 0; i < 8; i++) {
+@@ -924,7 +918,7 @@
+
+ nRange = 0;
+
+- return TRUE;
++ return;
+ }
+
+ /* This is called to finalise the results of a PCI bus scan */
+Index: xc/programs/Xserver/hw/xfree86/os-support/bus/zx1PCI.h
+diff -u xc/programs/Xserver/hw/xfree86/os-support/bus/zx1PCI.h:1.1.1.1 xc/programs/Xserver/hw/xfree86/os-support/bus/zx1PCI.h:1.1.1.1.6.1
+--- xc/programs/Xserver/hw/xfree86/os-support/bus/zx1PCI.h:1.1.1.1 Fri Nov 14 16:48:56 2003
++++ xc/programs/Xserver/hw/xfree86/os-support/bus/zx1PCI.h Wed Dec 15 15:24:45 2004
+@@ -30,7 +30,7 @@
+
+ #include <X11/Xdefs.h>
+
+-Bool xf86PreScanZX1(void);
++void xf86PreScanZX1(void);
+ void xf86PostScanZX1(void);
+
+ #endif
+Index: xc/programs/Xserver/hw/xfree86/os-support/linux/Imakefile
+diff -u xc/programs/Xserver/hw/xfree86/os-support/linux/Imakefile:1.3 xc/programs/Xserver/hw/xfree86/os-support/linux/Imakefile:1.3.4.1
+--- xc/programs/Xserver/hw/xfree86/os-support/linux/Imakefile:1.3 Wed Jun 16 09:39:15 2004
++++ xc/programs/Xserver/hw/xfree86/os-support/linux/Imakefile Wed Dec 15 15:24:45 2004
+@@ -38,27 +38,32 @@
+ #endif
+
+ #if defined(AlphaArchitecture)
+-AXP_SRC=lnx_ev56.c xf86Axp.c lnx_axp.c
+-AXP_OBJ=lnx_ev56.o xf86Axp.o lnx_axp.o
++PLATFORM_SRC=lnx_ev56.c xf86Axp.c lnx_axp.c
++PLATFORM_OBJ=lnx_ev56.o xf86Axp.o lnx_axp.o
++#endif
++#if defined (ia64Architecture)
++PLATFORM_SRC=ia64Pci.c lnx_ia64.c
++PLATFORM_OBJ=ia64Pci.o lnx_ia64.o
++PLATFORM_DEFINES=-DOS_PROBE_PCI_CHIPSET=lnxProbePciChipset
+ #endif
+
+ SRCS = lnx_init.c lnx_video.c lnx_io.c libc_wrapper.c bios_mmap.c \
+ VTsw_usl.c std_kbdEv.c posix_tty.c $(MOUSESRC) \
+ lnx_pci.c vidmem.c lnx_apm.c $(JOYSTICK_SRC) $(DRI_SRC) $(RES_SRCS) \
+- $(AXP_SRC) lnx_kmod.c lnx_agp.c $(KBDSRC) /*wcHelper.c*/
++ $(PLATFORM_SRC) lnx_kmod.c lnx_agp.c $(KBDSRC) /*wcHelper.c*/
+
+ OBJS = lnx_init.o lnx_video.o lnx_io.o libc_wrapper.o bios_mmap.o \
+ VTsw_usl.o std_kbdEv.o posix_tty.o $(MOUSEOBJ) \
+ lnx_pci.o vidmem.o lnx_apm.o $(JOYSTICK_OBJ) $(DRI_OBJ) $(RES_OBJS) \
+- $(AXP_OBJ) lnx_kmod.o lnx_agp.o $(KBDOBJ) /*wcHelper.o*/
++ $(PLATFORM_OBJ) lnx_kmod.o lnx_agp.o $(KBDOBJ) /*wcHelper.o*/
+
+ INCLUDES = -I$(XF86COMSRC) -I$(XF86OSSRC) -I. -I$(SERVERSRC)/include \
+ -I$(XINCLUDESRC) -I$(EXTINCSRC) -I$(XF86OSSRC)/shared \
+- -I$(DRMSRCDIR)/shared
++ -I$(XF86OSSRC)/bus -I$(DRMSRCDIR)/shared
+
+ RESDEFINES = -DUSESTDRES
+
+-DEFINES = $(MTRRDEFINES) $(RESDEFINES) -DHAVE_SYSV_IPC
++DEFINES = $(MTRRDEFINES) $(RESDEFINES) $(PLATFORM_DEFINES) -DHAVE_SYSV_IPC
+
+ #if defined(AlphaArchitecture)
+ SpecialObjectRule(lnx_ev56.o, lnx_ev56.c, -mcpu=ev56)
+@@ -114,6 +119,9 @@
+ #if defined(AlphaArchitecture)
+ LinkSourceFile(xf86Axp.c,../shared)
+ #endif
++#if defined(ia64Architecture)
++LinkSourceFile(ia64Pci.c,../shared)
++#endif
+ DependTarget()
+
+ InstallDriverSDKNonExecFile(agpgart.h,$(DRIVERSDKINCLUDEDIR)/linux)
+Index: xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_ia64.c
+diff -u /dev/null xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_ia64.c:1.1
+--- /dev/null Fri Feb 11 21:35:34 2005
++++ xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_ia64.c Wed Sep 15 09:23:59 2004
+@@ -0,0 +1,45 @@
++/*
++ * Copyright 2004, Egbert Eich
++ *
++ * 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
++ * EGBERT EICH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
++ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON-
++ * NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++ *
++ * Except as contained in this notice, the name of Egbert Eich shall not
++ * be used in advertising or otherwise to promote the sale, use or other deal-
++ *ings in this Software without prior written authorization from Egbert Eich.
++ *
++ */
++
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <unistd.h>
++
++#include "ia64Pci.h"
++#include "Pci.h"
++
++#if defined OS_PROBE_PCI_CHIPSET
++IA64Chipset OS_PROBE_PCI_CHIPSET(scanpciWrapperOpt flags)
++{
++ struct stat unused;
++
++ if (!stat("/proc/bus/mckinley/zx1",&unused)
++ || !stat("/proc/bus/mckinley/zx2",&unused))
++ return ZX1_CHIPSET;
++
++ return NONE_CHIPSET;
++}
++#endif
+Index: xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_io.c
+diff -u xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_io.c:1.2 xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_io.c:1.2.4.1
+--- xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_io.c:1.2 Fri Apr 23 19:54:08 2004
++++ xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_io.c Wed Feb 2 00:59:25 2005
+@@ -114,6 +114,8 @@
+ #endif /* KDKBDREP */
+ }
+
++#undef rate
++
+ static int
+ KIOCSRATE_ioctl_ok(int rate, int delay) {
+ #ifdef KIOCSRATE
+@@ -141,8 +143,6 @@
+ #endif /* KIOCSRATE */
+ }
+
+-#undef rate
+-
+ void xf86SetKbdRepeat(char rad)
+ {
+ #ifdef __sparc__
+Index: xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_kbd.c
+diff -u xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_kbd.c:1.2 xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_kbd.c:1.2.4.2
+--- xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_kbd.c:1.2 Fri Apr 23 19:54:08 2004
++++ xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_kbd.c Wed Feb 2 00:59:25 2005
+@@ -142,6 +142,8 @@
+ #endif /* KDKBDREP */
+ }
+
++#undef rate
++
+ static int
+ KIOCSRATE_ioctl_ok(int rate, int delay) {
+ #ifdef KIOCSRATE
+@@ -169,8 +171,6 @@
+ #endif /* KIOCSRATE */
+ }
+
+-#undef rate
+-
+ static void
+ SetKbdRepeat(InputInfoPtr pInfo, char rad)
+ {
+@@ -356,7 +356,7 @@
+
+ if ((ModifierSet(ControlMask | AltMask)) ||
+ (ModifierSet(ControlMask | AltLangMask))) {
+- if (VTSwitchEnabled && !xf86Info.vtSysreq) {
++ if (VTSwitchEnabled && !xf86Info.vtSysreq && !xf86Info.dontVTSwitch) {
+ switch (key) {
+ case KEY_F1:
+ case KEY_F2:
+@@ -382,7 +382,7 @@
+ }
+ }
+ #ifdef USE_VT_SYSREQ
+- if (VTSwitchEnabled && xf86Info.vtSysreq) {
++ if (VTSwitchEnabled && xf86Info.vtSysreq && !xf86Info.dontVTSwitch) {
+ switch (key) {
+ case KEY_F1:
+ case KEY_F2:
+Index: xc/programs/Xserver/hw/xfree86/os-support/shared/ia64Pci.c
+diff -u /dev/null xc/programs/Xserver/hw/xfree86/os-support/shared/ia64Pci.c:1.1
+--- /dev/null Fri Feb 11 21:35:34 2005
++++ xc/programs/Xserver/hw/xfree86/os-support/shared/ia64Pci.c Wed Sep 15 09:23:59 2004
+@@ -0,0 +1,81 @@
++/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/bus/ia64Pci.c,v 1.3 2003/02/23 20:26:49 tsi Exp $ */
++/*
++ * Copyright (C) 2002-2003 The XFree86 Project, Inc. All Rights Reserved.
++ *
++ * 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
++ * XFREE86 PROJECT 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 XFree86 Project 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
++ * XFree86 Project.
++ */
++
++/*
++ * This file contains the glue needed to support various IA-64 chipsets.
++ */
++
++#include "460gxPCI.h"
++#include "e8870PCI.h"
++#include "zx1PCI.h"
++#include "Pci.h"
++#include "ia64Pci.h"
++
++void
++ia64ScanPCIWrapper(scanpciWrapperOpt flags)
++{
++ static IA64Chipset chipset = NONE_CHIPSET;
++
++ if (flags == SCANPCI_INIT) {
++
++ /* PCI configuration space probes should be done first */
++ if (xorgProbe460GX(flags)) {
++ chipset = I460GX_CHIPSET;
++ xf86PreScan460GX();
++ return;
++ } else if (xorgProbeE8870(flags)) {
++ chipset = E8870_CHIPSET;
++ xf86PreScanE8870();
++ return;
++ }
++#ifdef OS_PROBE_PCI_CHIPSET
++ chipset = OS_PROBE_PCI_CHIPSET(flags);
++ switch (chipset) {
++ case ZX1_CHIPSET:
++ xf86PreScanZX1();
++ return;
++ default:
++ return;
++ }
++#endif
++ } else /* if (flags == SCANPCI_TERM) */ {
++
++ switch (chipset) {
++ case I460GX_CHIPSET:
++ xf86PostScan460GX();
++ return;
++ case E8870_CHIPSET:
++ xf86PostScanE8870();
++ return;
++ case ZX1_CHIPSET:
++ xf86PostScanZX1();
++ return;
++ default:
++ return;
++ }
++ }
++}
+Index: xc/programs/Xserver/hw/xfree86/os-support/shared/ia64Pci.h
+diff -u /dev/null xc/programs/Xserver/hw/xfree86/os-support/shared/ia64Pci.h:1.1.4.1
+--- /dev/null Fri Feb 11 21:35:34 2005
++++ xc/programs/Xserver/hw/xfree86/os-support/shared/ia64Pci.h Wed Dec 15 16:03:15 2004
+@@ -0,0 +1,41 @@
++/*
++ * Copyright 2004, Egbert Eich
++ *
++ * 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
++ * EGBERT EICH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
++ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON-
++ * NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++ *
++ * Except as contained in this notice, the name of Egbert Eich shall not
++ * be used in advertising or otherwise to promote the sale, use or other deal-
++ *ings in this Software without prior written authorization from Egbert Eich.
++ *
++ */
++#ifndef _IA64_PCI_H
++# define _IA64_PCI_H
++
++#include "Pci.h"
++
++typedef enum {
++ NONE_CHIPSET,
++ I460GX_CHIPSET,
++ E8870_CHIPSET,
++ ZX1_CHIPSET
++} IA64Chipset;
++
++# ifdef OS_PROBE_PCI_CHIPSET
++extern IA64Chipset OS_PROBE_PCI_CHIPSET(scanpciWrapperOpt flags);
++# endif
++#endif
+Index: xc/programs/Xserver/hw/xfree86/os-support/sunos/Imakefile
+diff -u xc/programs/Xserver/hw/xfree86/os-support/sunos/Imakefile:1.2 xc/programs/Xserver/hw/xfree86/os-support/sunos/Imakefile:1.2.4.2
+--- xc/programs/Xserver/hw/xfree86/os-support/sunos/Imakefile:1.2 Fri Apr 23 19:54:13 2004
++++ xc/programs/Xserver/hw/xfree86/os-support/sunos/Imakefile Thu Jan 13 01:18:47 2005
+@@ -1,5 +1,5 @@
+ XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/os-support/sunos/Imakefile,v 1.4 2002/10/17 02:22:49 dawes Exp $
+-XCOMM $XdotOrg: xc/programs/Xserver/hw/xfree86/os-support/sunos/Imakefile,v 1.2 2004/04/23 19:54:13 eich Exp $
++XCOMM $XdotOrg: xc/programs/Xserver/hw/xfree86/os-support/sunos/Imakefile,v 1.2.4.2 2005/01/13 01:18:47 gisburn Exp $
+ XCOMM
+ XCOMM Copyright 2001 The XFree86 Project, Inc. All Rights Reserved.
+ XCOMM
+@@ -32,16 +32,29 @@
+
+ #include <Server.tmpl>
+
+-#if !HasGcc && defined(i386Architecture)
+-#if HasSunC
+-PROWORKS_INOUT_SRC = solaris-ia32.S
+-PROWORKS_INOUT_OBJ = solaris-ia32.o
++#if !HasGcc
++# if HasSunC
++# ifdef i386Architecture
++# define AsmArch ia32
++# define AsmFlags /**/
++# else
++# define AsmArch sparcv8plus
++# define AsmFlags -xarch=v8plus
++# endif
++PROWORKS_ASM_ARCH = AsmArch
++PROWORKS_ASM_FLAGS = AsmFlags
++PROWORKS_INOUT_SRC = solaris-$(PROWORKS_ASM_ARCH).S
++PROWORKS_INOUT_OBJ = solaris-$(PROWORKS_ASM_ARCH).o
++
++all:: $(PROWORKS_ASM_ARCH).il
++includes:: $(PROWORKS_ASM_ARCH).il
+
+-includes:: ia32.il
++CppFileTarget($(PROWORKS_ASM_ARCH).il,solaris-$(PROWORKS_ASM_ARCH).S,-DINLINE_ASM,NullParameter)
+
+-CppFileTarget(ia32.il,solaris-ia32.S,-DINLINE_ASM,NullParameter)
+-ObjectFromAsmSource(solaris-ia32,NullParameter)
+-#else
++$(PROWORKS_INOUT_OBJ): $(PROWORKS_INOUT_SRC)
++ $(AS) -P -o $@ $(PROWORKS_ASM_FLAGS) $(PROWORKS_INOUT_SRC)
++
++#elif defined(i386Architecture)
+ PROWORKS_INOUT_SRC = sun_inout.s
+ PROWORKS_INOUT_OBJ = sun_inout.o
+ #endif
+@@ -63,6 +76,10 @@
+ VTSW_OBJ = VTsw_noop.o
+ #endif
+
++#ifdef SVR4Architecture
++SYSVIPCDEFINES = -DHAVE_SYSV_IPC
++#endif
++
+ SRCS = sun_bios.c sun_init.c $(IO_SRC) $(KBD_SRCS) $(PROWORKS_INOUT_SRC) \
+ sun_mouse.c sun_vid.c agp_noop.c libc_wrapper.c kmod_noop.c pm_noop.c \
+ posix_tty.c sigiostubs.c stdPci.c stdResource.c $(VTSW_SRC)
+@@ -74,7 +91,7 @@
+ -I$(SERVERSRC)/mi -I$(SERVERSRC)/include -I$(SERVERSRC)/Xext \
+ -I$(XINCLUDESRC) -I$(EXTINCSRC)
+
+-DEFINES = -DUSESTDRES
++DEFINES = -DUSESTDRES $(VENDOR_DEFINES) $(SYSVIPCDEFINES)
+
+ SubdirLibraryRule($(OBJS))
+ NormalLibraryObjectRule()
+Index: xc/programs/Xserver/hw/xfree86/os-support/sunos/solaris-sparcv8plus.S
+diff -u /dev/null xc/programs/Xserver/hw/xfree86/os-support/sunos/solaris-sparcv8plus.S:1.1.6.1
+--- /dev/null Fri Feb 11 21:35:34 2005
++++ xc/programs/Xserver/hw/xfree86/os-support/sunos/solaris-sparcv8plus.S Thu Jan 13 01:18:47 2005
+@@ -0,0 +1,144 @@
++/* Copyright 2004 Sun Microsystems, Inc. All rights reserved.
++ *
++ * 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, and/or sell copies of the Software, and to permit persons
++ * to whom the Software is furnished to do so, provided that the above
++ * copyright notice(s) and this permission notice appear in all copies of
++ * the Software and that both the above copyright notice(s) and this
++ * permission notice appear in supporting documentation.
++ *
++ * 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
++ * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
++ * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
++ * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
++ * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
++ * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
++ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++ *
++ * Except as contained in this notice, the name of a copyright holder
++ * shall not be used in advertising or otherwise to promote the sale, use
++ * or other dealings in this Software without prior written authorization
++ * of the copyright holder.
++ */
++
++#ifdef INLINE_ASM
++#define FUNCTION_START(f,n) .inline f,n
++#define FUNCTION_END(f) .end
++#else
++#define _ASM
++#include <sys/asm_linkage.h>
++#define FUNCTION_START(f,n) ENTRY(f)
++#define FUNCTION_END(f) SET_SIZE(f)
++#endif
++
++/* Converted from common/compiler.h gcc inline format to Sun cc inline
++ * format by Kenjiro Tsuji
++ *
++ * The value 0x88 means ASI_PRIMARY_LITTLE.
++ * The store or load to/from the address space will be done
++ * as little-endian. In the original xrog code, the value
++ * is defined as the macro ASI_PL.
++ *
++ * In the original xorg code, "membar #StoreStore|#StoreLoad"
++ * is directly implemented as an instruction "0x8143e00a".
++ *
++ */
++
++ FUNCTION_START(outb, 0)
++ stba %o1, [%o0] 0x88
++ membar #StoreStore|#StoreLoad
++ FUNCTION_END(outb)
++
++ FUNCTION_START(outw, 0)
++ stha %o1, [%o0] 0x88
++ membar #StoreStore|#StoreLoad
++ FUNCTION_END(outw)
++
++ FUNCTION_START(outl, 0)
++ sta %o1, [%o0] 0x88
++ membar #StoreStore|#StoreLoad
++ FUNCTION_END(outl)
++
++ FUNCTION_START(inb, 0)
++ lduba [%o0] 0x88, %o0
++ FUNCTION_END(inb)
++
++ FUNCTION_START(inw, 0)
++ lduha [%o0] 0x88, %o0
++ FUNCTION_END(inw)
++
++ FUNCTION_START(inl, 0)
++ lda [%o0] 0x88, %o0
++ FUNCTION_END(inl)
++
++ FUNCTION_START(xf86ReadMmio8, 0)
++ lduba [%o0 + %o1] 0x88, %o0
++ FUNCTION_END(xf86ReadMmio8)
++
++ FUNCTION_START(xf86ReadMmio16Be, 0)
++ lduh [%o0 + %o1], %o0
++ FUNCTION_END(xf86ReadMmio16Be)
++
++ FUNCTION_START(xf86ReadMmio16Le, 0)
++ lduha [%o0 + %o1] 0x88, %o0
++ FUNCTION_END(xf86ReadMmio16Le)
++
++ FUNCTION_START(xf86ReadMmio32Be, 0)
++ ld [%o0 + %o1], %o0
++ FUNCTION_END(xf86ReadMmio32Be)
++
++ FUNCTION_START(xf86ReadMmio32Le, 0)
++ lda [%o0 + %o1] 0x88, %o0
++ FUNCTION_END(xf86ReadMmio32Le)
++
++ FUNCTION_START(xf86WriteMmio8, 0)
++ stba %o2, [%o0 + %o1] 0x88
++ membar #StoreStore|#StoreLoad
++ FUNCTION_END(xf86WriteMmio8)
++
++ FUNCTION_START(xf86WriteMmio16Be, 0)
++ sth %o2, [%o0 + %o1]
++ membar #StoreStore|#StoreLoad
++ FUNCTION_END(xf86WriteMmio16Be)
++
++ FUNCTION_START(xf86WriteMmio16Le, 0)
++ stha %o2, [%o0 + %o1] 0x88
++ membar #StoreStore|#StoreLoad
++ FUNCTION_END(xf86WriteMmio16Le)
++
++ FUNCTION_START(xf86WriteMmio32Be, 0)
++ st %o2, [%o0 + %o1]
++ membar #StoreStore|#StoreLoad
++ FUNCTION_END(xf86WriteMmio32Be)
++
++ FUNCTION_START(xf86WriteMmio32Le, 0)
++ sta %o2, [%o0 + %o1] 0x88
++ membar #StoreStore|#StoreLoad
++ FUNCTION_END(xf86WriteMmio32Le)
++
++ FUNCTION_START(xf86WriteMmio8NB, 0)
++ add %o0, %o1, %o0
++ stba %o2, [%o0] 0x88
++ FUNCTION_END(xf86WriteMmio8NB)
++
++ FUNCTION_START(xf86WriteMmio16BeNB, 0)
++ sth %o2, [%o0 + %o1]
++ FUNCTION_END(xf86WriteMmio16BeNB)
++
++ FUNCTION_START(xf86WriteMmio16LeNB, 0)
++ stha %o2, [%o0 + %o1] 0x88
++ FUNCTION_END(xf86WriteMmio16LeNB)
++
++ FUNCTION_START(xf86WriteMmio32BeNB, 0)
++ st %o2, [%o0 + %o1]
++ FUNCTION_END(xf86WriteMmio32BeNB)
++
++ FUNCTION_START(xf86WriteMmio32LeNB, 0)
++ sta %o2, [%o0 + %o1] 0x88
++ FUNCTION_END(xf86WriteMmio32LeNB)
++
+Index: xc/programs/Xserver/hw/xfree86/xaa/xaaWrapper.c
+diff -u xc/programs/Xserver/hw/xfree86/xaa/xaaWrapper.c:1.1 xc/programs/Xserver/hw/xfree86/xaa/xaaWrapper.c:1.1.2.1
+--- xc/programs/Xserver/hw/xfree86/xaa/xaaWrapper.c:1.1 Fri Jul 30 21:46:38 2004
++++ xc/programs/Xserver/hw/xfree86/xaa/xaaWrapper.c Fri Dec 17 00:38:21 2004
+@@ -16,16 +16,14 @@
+
+ /* #include "render.h" */
+
+-#if 0
++#if 1
+ #define COND(pDraw) \
+ ((pDraw)->depth \
+ != (xaaWrapperGetScrPriv(((DrawablePtr)(pDraw))->pScreen))->depth)
+-#endif
++#else
+ #define COND(pDraw) 1
+-
+-#if 0
+-static Bool xaaWrapperPreCreateGC(GCPtr pGC);
+ #endif
++
+ static Bool xaaWrapperCreateGC(GCPtr pGC);
+ static void xaaWrapperValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDraw);
+ static void xaaWrapperDestroyGC(GCPtr pGC);
+@@ -36,53 +34,7 @@
+ static void xaaWrapperCopyClip(GCPtr pgcDst, GCPtr pgcSrc);
+ static void xaaWrapperDestroyClip(GCPtr pGC);
+
+-#if 0
+-static void xaaWrapperFillSpans(DrawablePtr pDraw, GC *pGC, int nInit,
+- DDXPointPtr pptInit, int *pwidthInit, int fSorted);
+-static void xaaWrapperSetSpans(DrawablePtr pDraw, GCPtr pGC, char *pcharsrc,
+- DDXPointPtr pptInit, int *pwidthInit, int nspans,
+- int fSorted);
+-static void xaaWrapperPutImage(DrawablePtr pDraw, GCPtr pGC, int depth, int x, int y,
+- int w, int h,int leftPad, int format, char *pImage);
+-static RegionPtr xaaWrapperCopyPlane(DrawablePtr pSrc,
+- DrawablePtr pDst, GCPtr pGC,int srcx, int srcy,
+- int width, int height, int dstx, int dsty,
+- unsigned long bitPlane);
+-static void xaaWrapperPolyPoint(DrawablePtr pDraw, GCPtr pGC, int mode, int npt,
+- xPoint *pptInit);
+-static void xaaWrapperPolylines(DrawablePtr pDraw, GCPtr pGC, int mode,
+- int npt, DDXPointPtr pptInit);
+-static void xaaWrapperPolySegment(DrawablePtr pDraw, GCPtr pGC, int nseg,
+- xSegment *pSeg);
+-static void xaaWrapperPolyRectangle(DrawablePtr pDraw, GCPtr pGC, int nRects,
+- xRectangle *pRects);
+-static void xaaWrapperPolyArc( DrawablePtr pDraw, GCPtr pGC, int narcs, xArc *parcs);
+-static void xaaWrapperFillPolygon(DrawablePtr pDraw, GCPtr pGC, int shape,
+- int mode, int count, DDXPointPtr pptInit);
+-static void xaaWrapperPolyFillRect(DrawablePtr pDraw, GCPtr pGC, int nRectsInit,
+- xRectangle *pRectsInit);
+-static RegionPtr xaaWrapperCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GC *pGC,
+- int srcx, int srcy, int width, int height,
+- int dstx, int dsty);
+-static void xaaWrapperPolyFillArc(DrawablePtr pDraw, GCPtr pGC, int narcs,
+- xArc *parcs);
+-static int xaaWrapperPolyText8(DrawablePtr pDraw, GCPtr pGC, int x, int y, int count,
+- char *chars);
+-static int xaaWrapperPolyText16(DrawablePtr pDraw, GCPtr pGC, int x, int y,
+- int count, unsigned short *chars);
+-static void xaaWrapperImageText8(DrawablePtr pDraw, GCPtr pGC, int x,
+- int y, int count, char *chars);
+-static void xaaWrapperImageText16(DrawablePtr pDraw, GCPtr pGC, int x, int y,
+- int count, unsigned short *chars);
+-static void xaaWrapperImageGlyphBlt(DrawablePtr pDraw, GCPtr pGC, int x, int y,
+- unsigned int nglyph, CharInfoPtr *ppci,
+- pointer pglyphBase);
+-static void xaaWrapperPolyGlyphBlt(DrawablePtr pDraw, GCPtr pGC, int x, int y,
+- unsigned int nglyph, CharInfoPtr *ppci,
+- pointer pglyphBase);
+-static void xaaWrapperPushPixels(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDraw,
+- int dx, int dy, int xOrg, int yOrg);
+-#endif
++
+ static void
+ xaaWrapperComposite (CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst,
+ INT16 xSrc, INT16 ySrc, INT16 xMask, INT16 yMask,
+@@ -145,25 +97,27 @@
+ real->mem = func; \
+ }
+
+-#if 0
+-#define wrap_pre(priv,real,real_func,mem,func) {\
+- priv->mem = real->real_func; \
+- real->real_func = func; \
+-}
+-#endif
+-
+-#define get(priv,real,func,wrap) \
+- priv->wrap = real->func;
+-
+ #define unwrap(priv,real,mem) {\
+ real->mem = priv->mem; \
+ }
+
+-#if 0
+-#define unwrap_pre(priv,real,real_func,mem) {\
+- real->real_func = priv->mem; \
++#define cond_wrap(priv,cond,real,mem,wrapmem,func) {\
++ if (COND(cond)) \
++ priv->wrapmem = real->mem; \
++ else \
++ priv->mem = real->mem; \
++ real->mem = func; \
+ }
+-#endif
++
++#define cond_unwrap(priv,cond,real,mem,wrapmem) {\
++ if (COND(cond)) \
++ real->mem = priv->wrapmem; \
++ else \
++ real->mem = priv->mem; \
++}
++
++#define get(priv,real,func,wrap) \
++ priv->wrap = real->func;
+
+ typedef struct _xaaWrapperGCPriv {
+ GCOps *ops;
+@@ -210,12 +164,11 @@
+ xaaWrapperScrPriv(pWin->drawable.pScreen);
+ Bool ret;
+
+- unwrap (pScrPriv, pWin->drawable.pScreen, CreateWindow);
+- if (COND(&pWin->drawable))
+- pWin->drawable.pScreen->CreateWindow
+- = pScrPriv->wrapCreateWindow;
++ cond_unwrap(pScrPriv, &pWin->drawable, pWin->drawable.pScreen,
++ CreateWindow, wrapCreateWindow);
+ ret = pWin->drawable.pScreen->CreateWindow(pWin);
+- wrap(pScrPriv, pWin->drawable.pScreen, CreateWindow, xaaWrapperCreateWindow);
++ cond_wrap(pScrPriv, &pWin->drawable, pWin->drawable.pScreen, CreateWindow,
++ wrapCreateWindow, xaaWrapperCreateWindow);
+
+ return ret;
+ }
+@@ -244,11 +197,11 @@
+ {
+ xaaWrapperScrPriv(pWin->drawable.pScreen);
+
+- unwrap (pScrPriv, pWin->drawable.pScreen, WindowExposures);
+- if (COND(&pWin->drawable))
+- pWin->drawable.pScreen->WindowExposures = pScrPriv->wrapWindowExposures;
++ cond_unwrap(pScrPriv, &pWin->drawable, pWin->drawable.pScreen,
++ WindowExposures, wrapWindowExposures);
+ pWin->drawable.pScreen->WindowExposures(pWin, prgn, other_exposed);
+- wrap(pScrPriv, pWin->drawable.pScreen, WindowExposures, xaaWrapperWindowExposures);
++ cond_wrap(pScrPriv, &pWin->drawable, pWin->drawable.pScreen,
++ WindowExposures, wrapWindowExposures, xaaWrapperWindowExposures);
+ }
+
+ static void
+@@ -258,29 +211,24 @@
+
+ switch (what) {
+ case PW_BORDER:
+- unwrap (pScrPriv, pWin->drawable.pScreen, PaintWindowBorder);
+- if (COND(&pWin->drawable)) {
+- pWin->drawable.pScreen->PaintWindowBorder
+- = pScrPriv->wrapPaintWindowBorder;
+- XAASync(pWin->drawable.pScreen);
+- }
++ cond_unwrap(pScrPriv, &pWin->drawable, pWin->drawable.pScreen,
++ PaintWindowBorder, wrapPaintWindowBorder);
++
+ pWin->drawable.pScreen->PaintWindowBorder (pWin, pRegion, what);
+- wrap(pScrPriv, pWin->drawable.pScreen, PaintWindowBorder,
+- xaaWrapperPaintWindow);
++ cond_wrap(pScrPriv, &pWin->drawable, pWin->drawable.pScreen,
++ PaintWindowBorder, wrapPaintWindowBorder,
++ xaaWrapperPaintWindow);
+ break;
+ case PW_BACKGROUND:
+- unwrap (pScrPriv, pWin->drawable.pScreen, PaintWindowBackground);
+- if (COND(&pWin->drawable)) {
+- pWin->drawable.pScreen->PaintWindowBackground
+- = pScrPriv->wrapPaintWindowBackground;
+- XAASync(pWin->drawable.pScreen);
+- }
++ cond_unwrap(pScrPriv, &pWin->drawable, pWin->drawable.pScreen,
++ PaintWindowBackground, wrapPaintWindowBackground);
++
+ pWin->drawable.pScreen->PaintWindowBackground (pWin, pRegion, what);
+- wrap(pScrPriv, pWin->drawable.pScreen, PaintWindowBackground,
+- xaaWrapperPaintWindow);
++ cond_wrap(pScrPriv, &pWin->drawable, pWin->drawable.pScreen,
++ PaintWindowBackground, wrapPaintWindowBackground,
++ xaaWrapperPaintWindow);
+ break;
+ }
+-
+ }
+
+ static Bool
+@@ -378,11 +326,7 @@
+ get (pScrPriv, pScreen, PaintWindowBorder, wrapPaintWindowBorder);
+ get (pScrPriv, pScreen, PaintWindowBackground, wrapPaintWindowBackground);
+ get (pScrPriv, pScreen, WindowExposures, wrapWindowExposures);
+-#if 0
+- wrap_pre (pScrPriv, pScreen, CreateGC, wrapCreateGC, xaaWrapperPreCreateGC);
+-#else
+ get (pScrPriv, pScreen, CreateGC, wrapCreateGC);
+-#endif
+ get (pScrPriv, pScreen, CreateColormap, wrapCreateColormap);
+ get (pScrPriv, pScreen, DestroyColormap, wrapDestroyColormap);
+ get (pScrPriv, pScreen, InstallColormap, wrapInstallColormap);
+@@ -435,25 +379,6 @@
+ xaaWrapperCopyClip
+ };
+
+-#if 0
+-GCOps xaaWrapperGCOps = {
+- xaaWrapperFillSpans, xaaWrapperSetSpans,
+- xaaWrapperPutImage, xaaWrapperCopyArea,
+- xaaWrapperCopyPlane, xaaWrapperPolyPoint,
+- xaaWrapperPolylines, xaaWrapperPolySegment,
+- xaaWrapperPolyRectangle, xaaWrapperPolyArc,
+- xaaWrapperFillPolygon, xaaWrapperPolyFillRect,
+- xaaWrapperPolyFillArc, xaaWrapperPolyText8,
+- xaaWrapperPolyText16, xaaWrapperImageText8,
+- xaaWrapperImageText16, xaaWrapperImageGlyphBlt,
+- xaaWrapperPolyGlyphBlt, xaaWrapperPushPixels,
+-#ifdef NEED_LINEHELPER
+- NULL,
+-#endif
+- {NULL} /* devPrivate */
+-};
+-#endif
+-
+ #define XAAWRAPPER_GC_FUNC_PROLOGUE(pGC) \
+ xaaWrapperGCPriv(pGC); \
+ unwrap(pGCPriv, pGC, funcs); \
+@@ -463,23 +388,6 @@
+ wrap(pGCPriv, pGC, funcs, &xaaWrapperGCFuncs); \
+ if (pGCPriv->wrap) wrap(pGCPriv, pGC, ops, pGCPriv->wrapops)
+
+-#if 0
+-static Bool
+-xaaWrapperPreCreateGC(GCPtr pGC)
+-{
+- ScreenPtr pScreen = pGC->pScreen;
+- xaaWrapperScrPriv(pScreen);
+- xaaWrapperGCPriv(pGC);
+- Bool ret;
+-
+- unwrap_pre (pScrPriv, pScreen, CreateGC, wrapCreateGC);
+- ret = (*pScreen->CreateGC) (pGC);
+- wrap_pre (pScrPriv, pScreen, CreateGC, wrapCreateGC, xaaWrapperPreCreateGC);
+-
+- return ret;
+-}
+-#endif
+-
+ static Bool
+ xaaWrapperCreateGC(GCPtr pGC)
+ {
+@@ -572,310 +480,6 @@
+ XAAWRAPPER_GC_FUNC_EPILOGUE (pGC);
+ }
+
+-#if 0
+-#define XAAWRAPPER_GC_OP_PROLOGUE(pGC,pDraw) \
+-/* xaaWrapperScrPriv(pDraw->pScreen); */\
+- xaaWrapperGCPriv(pGC); \
+- GCFuncs *oldFuncs = pGC->funcs; \
+- unwrap(pGCPriv, pGC, funcs); \
+- unwrap(pGCPriv, pGC, ops); \
+-
+-#define XAAWRAPPER_GC_OP_EPILOGUE(pGC,pDraw) \
+- wrap(pGCPriv, pGC, funcs, oldFuncs); \
+- wrap(pGCPriv, pGC, ops, &xaaWrapperGCOps)
+-
+-static void
+-xaaWrapperFillSpans(
+- DrawablePtr pDraw,
+- GC *pGC,
+- int nInit,
+- DDXPointPtr pptInit,
+- int *pwidthInit,
+- int fSorted
+-){
+- XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
+- (*pGC->ops->FillSpans)(pDraw, pGC, nInit, pptInit, pwidthInit, fSorted);
+- XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
+-}
+-
+-static void
+-xaaWrapperSetSpans(
+- DrawablePtr pDraw,
+- GCPtr pGC,
+- char *pcharsrc,
+- DDXPointPtr pptInit,
+- int *pwidthInit,
+- int nspans,
+- int fSorted
+-){
+- XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
+-
+- (*pGC->ops->SetSpans)(pDraw, pGC, pcharsrc, pptInit,
+- pwidthInit, nspans, fSorted);
+- XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
+-}
+-
+-
+-static void
+-xaaWrapperPutImage(
+- DrawablePtr pDraw,
+- GCPtr pGC,
+- int depth,
+- int x, int y, int w, int h,
+- int leftPad,
+- int format,
+- char *pImage
+-){
+- XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
+- (*pGC->ops->PutImage)(pDraw, pGC, depth, x, y, w, h,
+- leftPad, format, pImage);
+- XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
+-}
+-
+-static RegionPtr
+-xaaWrapperCopyArea(
+- DrawablePtr pSrc,
+- DrawablePtr pDst,
+- GC *pGC,
+- int srcx, int srcy,
+- int width, int height,
+- int dstx, int dsty
+-){
+- RegionPtr ret;
+- XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDst);
+- ret = (*pGC->ops->CopyArea)(pSrc, pDst,
+- pGC, srcx, srcy, width, height, dstx, dsty);
+- XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDst);
+-
+- return ret;
+-}
+-
+-
+-static RegionPtr
+-xaaWrapperCopyPlane(
+- DrawablePtr pSrc,
+- DrawablePtr pDst,
+- GCPtr pGC,
+- int srcx, int srcy,
+- int width, int height,
+- int dstx, int dsty,
+- unsigned long bitPlane
+-){
+- RegionPtr ret;
+- XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDst);
+- ret = (*pGC->ops->CopyPlane)(pSrc, pDst,
+- pGC, srcx, srcy, width, height, dstx, dsty, bitPlane);
+- XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDst);
+- return ret;
+-}
+-
+-static void
+-xaaWrapperPolyPoint(
+- DrawablePtr pDraw,
+- GCPtr pGC,
+- int mode,
+- int npt,
+- xPoint *pptInit
+-){
+- XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
+- (*pGC->ops->PolyPoint)(pDraw, pGC, mode, npt, pptInit);
+- XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
+-}
+-
+-static void
+-xaaWrapperPolylines(
+- DrawablePtr pDraw,
+- GCPtr pGC,
+- int mode,
+- int npt,
+- DDXPointPtr pptInit
+-){
+- XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
+- (*pGC->ops->Polylines)(pDraw, pGC, mode, npt, pptInit);
+- XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
+-}
+-
+-static void
+-xaaWrapperPolySegment(
+- DrawablePtr pDraw,
+- GCPtr pGC,
+- int nseg,
+- xSegment *pSeg
+- ){
+- XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
+- (*pGC->ops->PolySegment)(pDraw, pGC, nseg, pSeg);
+- XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
+-}
+-
+-static void
+-xaaWrapperPolyRectangle(
+- DrawablePtr pDraw,
+- GCPtr pGC,
+- int nRects,
+- xRectangle *pRects
+-){
+- XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
+- (*pGC->ops->PolyRectangle)(pDraw, pGC, nRects, pRects);
+- XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
+-}
+-
+-static void
+-xaaWrapperPolyArc(
+- DrawablePtr pDraw,
+- GCPtr pGC,
+- int narcs,
+- xArc *parcs
+-){
+- XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
+- (*pGC->ops->PolyArc)(pDraw, pGC, narcs, parcs);
+- XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
+-}
+-
+-static void
+-xaaWrapperFillPolygon(
+- DrawablePtr pDraw,
+- GCPtr pGC,
+- int shape,
+- int mode,
+- int count,
+- DDXPointPtr pptInit
+-){
+- XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
+- (*pGC->ops->FillPolygon)(pDraw, pGC, shape, mode, count, pptInit);
+- XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
+-}
+-
+-static void
+-xaaWrapperPolyFillRect(
+- DrawablePtr pDraw,
+- GCPtr pGC,
+- int nRectsInit,
+- xRectangle *pRectsInit
+-){
+- XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
+- (*pGC->ops->PolyFillRect)(pDraw, pGC, nRectsInit, pRectsInit);
+- XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
+-}
+-
+-static void
+-xaaWrapperPolyFillArc(
+- DrawablePtr pDraw,
+- GCPtr pGC,
+- int narcs,
+- xArc *parcs
+-){
+- XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
+- (*pGC->ops->PolyFillArc)(pDraw, pGC, narcs, parcs);
+- XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
+-}
+-
+-static int
+-xaaWrapperPolyText8(
+- DrawablePtr pDraw,
+- GCPtr pGC,
+- int x,
+- int y,
+- int count,
+- char *chars
+-){
+- int width;
+-
+- XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
+- width = (*pGC->ops->PolyText8)(pDraw, pGC, x, y, count, chars);
+- XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
+-
+- return width;
+-}
+-
+-static int
+-xaaWrapperPolyText16(
+- DrawablePtr pDraw,
+- GCPtr pGC,
+- int x,
+- int y,
+- int count,
+- unsigned short *chars
+-){
+- int width;
+-
+- XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
+- width = (*pGC->ops->PolyText16)(pDraw, pGC, x, y, count, chars);
+- XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
+-
+- return width;
+-}
+-
+-static void
+-xaaWrapperImageText8(
+- DrawablePtr pDraw,
+- GCPtr pGC,
+- int x,
+- int y,
+- int count,
+- char *chars
+-){
+- XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
+- (*pGC->ops->ImageText8)(pDraw, pGC, x, y, count, chars);
+- XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
+-}
+-
+-static void
+-xaaWrapperImageText16(
+- DrawablePtr pDraw,
+- GCPtr pGC,
+- int x,
+- int y,
+- int count,
+- unsigned short *chars
+-){
+- XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
+- (*pGC->ops->ImageText16)(pDraw, pGC, x, y, count, chars);
+- XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
+-}
+-
+-static void
+-xaaWrapperImageGlyphBlt(
+- DrawablePtr pDraw,
+- GCPtr pGC,
+- int x, int y,
+- unsigned int nglyph,
+- CharInfoPtr *ppci,
+- pointer pglyphBase
+-){
+- XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
+- (*pGC->ops->ImageGlyphBlt)(pDraw, pGC, x, y, nglyph,
+- ppci, pglyphBase);
+- XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
+-}
+-
+-static void
+-xaaWrapperPolyGlyphBlt(
+- DrawablePtr pDraw,
+- GCPtr pGC,
+- int x, int y,
+- unsigned int nglyph,
+- CharInfoPtr *ppci,
+- pointer pglyphBase
+-){
+- XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
+- (*pGC->ops->PolyGlyphBlt)(pDraw, pGC, x, y, nglyph,
+- ppci, pglyphBase);
+- XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
+-}
+-
+-static void
+-xaaWrapperPushPixels(
+- GCPtr pGC,
+- PixmapPtr pBitMap,
+- DrawablePtr pDraw,
+- int dx, int dy, int xOrg, int yOrg
+-){
+- XAAWRAPPER_GC_OP_PROLOGUE(pGC, pDraw);
+- (*pGC->ops->PushPixels)(pGC, pBitMap, pDraw, dx, dy, xOrg, yOrg);
+- XAAWRAPPER_GC_OP_EPILOGUE(pGC, pDraw);
+-}
+-#endif
+-
+ #ifdef RENDER
+ static void
+ xaaWrapperComposite (CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst,
+Index: xc/programs/Xserver/hw/xfree86/xf86cfg/interface.c
+diff -u xc/programs/Xserver/hw/xfree86/xf86cfg/interface.c:1.2 xc/programs/Xserver/hw/xfree86/xf86cfg/interface.c:1.2.4.1
+--- xc/programs/Xserver/hw/xfree86/xf86cfg/interface.c:1.2 Fri Apr 23 19:54:18 2004
++++ xc/programs/Xserver/hw/xfree86/xf86cfg/interface.c Wed Dec 15 03:10:20 2004
+@@ -300,7 +300,7 @@
+
+ startedx = startx();
+ if (XF86Config_path == NULL)
+- XF86Config_path = XtNewString(__XCONFIGFILE__"-4");
++ XF86Config_path = XtNewString(__XCONFIGFILE__);
+ if (XkbConfig_path == NULL) {
+ XmuSnprintf(XkbConfig_path_static, sizeof(XkbConfig_path_static),
+ "%s/%s%s", XFree86Dir, XkbConfigDir, XkbConfigFile);
+@@ -536,9 +536,9 @@
+ # endif
+ #else
+ # ifdef XF86CONFIGDIR
+- XF86Config_path = XtNewString(XF86CONFIGDIR "/"__XCONFIGFILE__"-4");
++ XF86Config_path = XtNewString(XF86CONFIGDIR "/"__XCONFIGFILE__);
+ # else
+- XF86Config_path = XtNewString("/etc/X11/"__XCONFIGFILE__"-4");
++ XF86Config_path = XtNewString("/etc/X11/"__XCONFIGFILE__);
+ # endif
+ #endif
+ }
+Index: xc/programs/Xserver/hw/xfree86/xf86cfg/loader.h
+diff -u xc/programs/Xserver/hw/xfree86/xf86cfg/loader.h:1.2 xc/programs/Xserver/hw/xfree86/xf86cfg/loader.h:1.2.4.1
+--- xc/programs/Xserver/hw/xfree86/xf86cfg/loader.h:1.2 Fri Apr 23 19:54:18 2004
++++ xc/programs/Xserver/hw/xfree86/xf86cfg/loader.h Wed Dec 8 07:02:46 2004
+@@ -75,7 +75,7 @@
+ unsigned long num;
+ char * str;
+ double realnum;
+- Bool bool;
++ Bool xbool;
+ OptFrequency freq;
+ } ValueUnion;
+
+Index: xc/programs/Xserver/hw/xfree86/xf86config/xorgconfig.c
+diff -u xc/programs/Xserver/hw/xfree86/xf86config/xorgconfig.c:1.6 xc/programs/Xserver/hw/xfree86/xf86config/xorgconfig.c:1.6.2.3
+--- xc/programs/Xserver/hw/xfree86/xf86config/xorgconfig.c:1.6 Fri Aug 13 23:57:38 2004
++++ xc/programs/Xserver/hw/xfree86/xf86config/xorgconfig.c Wed Feb 2 03:38:05 2005
+@@ -94,7 +94,7 @@
+ * Chisato Yamauchi(cyamauch@phyas.aichi-edu.ac.jp)
+ */
+ /* $XConsortium: xf86config.c /main/21 1996/10/28 05:43:57 kaleb $ */
+-/* $XdotOrg: xc/programs/Xserver/hw/xfree86/xf86config/xorgconfig.c,v 1.6 2004/08/13 23:57:38 alanc Exp $ */
++/* $XdotOrg: xc/programs/Xserver/hw/xfree86/xf86config/xorgconfig.c,v 1.6.2.3 2005/02/02 03:38:05 gisburn Exp $ */
+
+ #include <stdlib.h>
+ #include <stdio.h>
+@@ -225,7 +225,7 @@
+ #endif
+ int config_xkbdisable = 0;
+ char *config_xkbrules;
+-char *config_xkbmodel = "pc101";
++char *config_xkbmodel = "pc105";
+ char *config_xkblayout = "us";
+ char *config_xkbvariant = (char *) 0;
+ char *config_xkboptions = (char *) 0;
+@@ -679,7 +679,7 @@
+ 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";
++"choose \"Generic 104-key PC\"\n\n";
+
+ static char *xkblayouttext =
+ "Please select the layout corresponding to your keyboard\n";
+@@ -2076,7 +2076,7 @@
+ "# 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"
++"# Option \"XkbModel\" \"pc105\"\n"
+ "# If you have a US Microsoft Natural keyboard, you can use:\n"
+ "# Option \"XkbModel\" \"microsoft\"\n"
+ "#\n"
+@@ -2093,7 +2093,7 @@
+ "\n"
+ "# These are the default XKB settings for "__XSERVERNAME__"\n"
+ "# Option \"XkbRules\" \""__XKBDEFRULES__"\"\n"
+-"# Option \"XkbModel\" \"pc101\"\n"
++"# Option \"XkbModel\" \"pc105\"\n"
+ "# Option \"XkbLayout\" \"us\"\n"
+ "# Option \"XkbVariant\" \"\"\n"
+ "# Option \"XkbOptions\" \"\"\n"
+Index: xc/programs/Xserver/hw/xwin/ChangeLog
+diff -u xc/programs/Xserver/hw/xwin/ChangeLog:1.6 xc/programs/Xserver/hw/xwin/ChangeLog:1.6.2.2
+--- xc/programs/Xserver/hw/xwin/ChangeLog:1.6 Tue Aug 3 10:12:25 2004
++++ xc/programs/Xserver/hw/xwin/ChangeLog Thu Jan 13 03:56:06 2005
+@@ -1,3 +1,133 @@
++2005-01-10 Alexander Gottwald <ago at freedesktop dot org>
++
++ * winkeybd.h
++ * winkeyhook.c
++ * winwndproc.c:
++ Make keyhook feature work in multiwindowmode too
++ Hook windows keys
++
++2005-01-06 Alexander Gottwald <ago at freedesktop dot org>
++
++ * winmultiwindowclass.c:
++ * winmultiwindowwm.c:
++ Fix crash with non-nullterminated strings (reported by Øyvind Harboe)
++
++2004-12-27 Alexander Gottwald <ago at freedesktop dot org>
++
++ * winmultiwindowwindow.c:
++ Bug #1945: Stop unnecessary reordering. (Kensuke Matsuzaki)
++
++2004-12-14 Alexander Gottwald <ago at freedesktop dot org>
++
++ * InitOutput.c:
++ * winprocarg.c:
++ EnumDisplayMonitors is not available on Window NT4 and 95. Resolve
++ the function dynamicly
++
++2004-12-08 Alexander Gottwald <ago at freedesktop dot org>
++
++ * InitOutput.c:
++ * winprocarg.c:
++ Added support for placing the main window with the @<monitor#>.
++ Patch by Mark Fisher, small changes by Alexander Gottwald
++
++2004-12-04 Earle Philhower
++
++ * InitOutput.c:
++ * win.h:
++ * wincreatewnd.c:
++ * winprocarg.c:
++ Optional position -screen parameter (-screen n WxH+X+Y or
++ -screen n W H X Y)
++
++2004-11-24 Alexander Gottwald <ago at freedesktop dot org>
++
++ * winmultiwindowwm.c:
++ Finally the multiwindow mode defines a default cursor
++
++2004-11-11 Alexander Gottwald <ago at freedesktop dot org>
++
++ * winconfig.c:
++ added keyboard layout "French (Switzerland)"
++
++2004-10-28 Alexander Gottwald <ago at freedesktop dot org>
++
++ * win.h:
++ add fRetryCreateSurface
++ * winshaddnl.c (winBltExposedRegionsShadowDDNL):
++ try to recreate the primary surface if it was lost
++ * winshaddnl.c (winCreatePrimarySurfaceShadowDDNL):
++ mark screen to retry creating the primary surface if it failed
++
++2004-10-23 Alexander Gottwald <ago at freedesktop dot org>
++
++ * winconfig (winConfigFiles):
++ Simplify /etc/X11/font-dirs parsing
++
++2004-10-20 Alexander Gottwald <ago at freedesktop dot org>
++
++ * XWin.rc, winresource.h, winwndproc.c:
++ Add ShowCursor entry to tray menu
++
++2004-10-20 Alexander Gottwald <ago at freedesktop dot org>
++
++ * Imakefile:
++ Add ETCX11DIR to DEFINES
++ * InitOutput.c (InitOutput):
++ * winconfig.c (winConfigFiles) :
++ Add entries from /etc/X11/font-dirs to default fontpath
++
++2004-10-16 Alexander Gottwald <ago at freedesktop dot org>
++
++ * winprocarg.c (winInitializeDefaultScreens, ddxProcessArgument):
++ * win.h:
++ Make multiple monitors default for -multiwindow and -mwextwm.
++ Added a flag to indicate if the user has overridden the multimonitor
++ settings. (Øyvind Harboe, Alexander Gottwald)
++
++2004-10-05 Alexander Gottwald <ago at freedesktop dot org>
++
++ * XWin.rc:
++ Set the dialogstyle to DS_CENTERMOUSE. Dialogs will now popup on the
++ monitor where the mouse is and not on the center of the whole desktop.
++
++2004-10-02 Alexander Gottwald <ago at freedesktop dot org>
++
++ * winmouse.c (winMouseProc):
++ Make sure buttons 1-3 are mouse buttons and wheel events are 4-5
++ Document code
++ Replace ErrorF with appropriate winMsg
++ use a symbolic name for the wheel event offset
++
++2004-10-01 Alexander Gottwald <ago at freedesktop dot org>
++
++ * wincreatewnd.c (winCreateBoundingWindowWindowed):
++ Do not adjust workarea if native windowmanager is used
++
++2004-09-22 Kensuke Matsuzaki
++
++ * winclipboardthread.c (winClipboardErrorHandler):
++ * winclipboardwndproc.c (winClipboardWindowProc):
++ * winclipboardxevents.c (winClipboardFlushXEvents):
++ Fix clipboard bug with unicode applications.
++
++2004-09-16 Alexander Gottwald <ago at freedesktop dot org>
++
++ * wincreatewnd.c (winCreateBoundingWindowWindowed):
++ Remove code which prevented the use from specifying the window
++ size in nodecoration mode.
++
++2004-08-26 Chris B <news at sempermax dot com>
++
++ * win.h, winmessages.h:
++ Add defines for WM_XBUTTON
++ * winmouse.c (winMouseProc):
++ Query number of mouse buttons from windows.
++ * winmultiwindowwndproc.c (winTopLevelWindowProc):
++ * winwin32rootlesswndproc.c (winMWExtWMWindowProc):
++ * winwndproc.c (winWindowProc):
++ Handle WM_XBUTTON messages.
++
+ 2004-08-02 Kensuke Matsuzaki
+
+ * winclipboardthread.c winclipboardwndproc.c:
+@@ -7,18 +137,18 @@
+ fUseUnicode, because it don't mean wheather Windows support
+ Unicode or not.
+
+-2004-07-31 Alexander Gottwald <ago@freedesktop.org>
++2004-07-31 Alexander Gottwald <ago at freedesktop dot org>
+
+ * win.h:
+ adjust prototype for winInitCmapPrivates to match Egberts change.
+
+-2004-07-30 Egbert Eich <eich@freedesktop.org>
++2004-07-30 Egbert Eich <eich at freedesktop dot org>
+
+ * winallpriv.c: (winInitCmapPrivates):
+ test if colormap with index really exists in the list of
+ installed maps before using it.
+
+-2004-07-09 Alexander Gottwald <ago@freedesktop.org>
++2004-07-09 Alexander Gottwald <ago at freedesktop dot org>
+
+ * winconfig.c: Add entry for irish layout (ie)
+ * InitOutput.c, winerror.c, winglobals.c: rename g_fUseMsg to
+@@ -27,38 +157,38 @@
+ -silent-dup-error to allow silent termination if another instance of
+ XWin was found running
+
+-2004-06-27 Alexander Gottwald <ago@freedesktop.org>
++2004-06-27 Alexander Gottwald <ago at freedesktop dot org>
+
+ * winconfig.c: Add entry for us layout. This changes not much but
+ removes a strange error message about the unknown us layout.
+
+-2004-06-24 Alexander Gottwald <ago@freedesktop.org>
++2004-06-24 Alexander Gottwald <ago at freedesktop dot org>
+
+ * InitOutput.c: Check for textmode mounted /tmp and print a warning
+
+-2004-06-15 Harold Hunt <huntharo@msu.edu>
++2004-06-15 Harold Hunt <huntharo at msu dot edu>
+
+ * windialogs.c: Fix path to locally installed changelog for the About
+ dialog box.
+
+-2004-05-27 Alexander Gottwald <ago@freedesktop.org>
++2004-05-27 Alexander Gottwald <ago at freedesktop dot org>
+
+ * winpriv.c: Create win32 window if not already created
+ * winmultiwindowwindow.c: Export winCreateWindowWindow
+
+-2004-05-27 Alexander Gottwald <ago@freedesktop.org>
++2004-05-27 Alexander Gottwald <ago at freedesktop dot org>
+
+ * win.h: Allow CYGDEBUG to defined in the Makefile
+ * winwindow.h: Allow CYGWINDOWING_DEBUG to defined in the Makefile
+
+-2004-05-19 Alexander Gottwald <ago@freedesktop.org>
++2004-05-19 Alexander Gottwald <ago at freedesktop dot org>
+
+ * winmultiwindowicons.c (winInitGlobalIcons): Load the small default
+ icon too
+ * winprefs.h, winprefs.c (winOverrideDefaultIcon): Takes the iconsize
+ as parameter
+
+-2004-05-19 Alexander Gottwald <ago@freedesktop.org>
++2004-05-19 Alexander Gottwald <ago at freedesktop dot org>
+
+ * win.h, winmultiwindowicons.c (winXIconToHICON): Takes iconsize
+ as parameter
+@@ -83,14 +213,14 @@
+ winwin32rootless.c (winMWExtWMDestroyFrame): Use winDestroyIcon
+ to free the icon without destroying the global icon.
+
+-2004-05-17 Alexander Gottwald <ago@freedesktop.org>
++2004-05-17 Alexander Gottwald <ago at freedesktop dot org>
+
+ * windialogs.c (winExitDlgProc, winAboutDlgProc),
+ winmultiwindowwndproc.c (winTopLevelWindowProc),
+ winwndproc.c (winWindowProc): Check if g_fSoftwareCursor is set
+ before calling ShowCursor.
+
+-2004-05-09 Dan Wilks <Dan_Wilks@intuit.com>
++2004-05-09 Dan Wilks <Dan_Wilks at intuit dot com>
+
+ * winclipboard.h: Add extern prototypes for winDebug, winErrorFVerb
+ copied from winmsg.h.
+Index: xc/programs/Xserver/hw/xwin/Imakefile
+diff -u xc/programs/Xserver/hw/xwin/Imakefile:1.3 xc/programs/Xserver/hw/xwin/Imakefile:1.3.4.1
+--- xc/programs/Xserver/hw/xwin/Imakefile:1.3 Mon Jun 21 13:19:32 2004
++++ xc/programs/Xserver/hw/xwin/Imakefile Wed Dec 15 19:22:53 2004
+@@ -263,7 +263,7 @@
+ VENDOR_DEFINES = $(VENDOR_STRING) $(VENDOR_CONTACT) $(VERSION_STRING)
+
+ DEFINES = $(OS_DEFINES) $(SHMDEF) $(MMAPDEF) \
+- -DPROJECTROOT="\"$(PROJECTROOT)\""
++ -DPROJECTROOT="\"$(PROJECTROOT)\"" -DETCX11DIR="\"$(ETCX11DIR)\""
+
+ LinkSourceFile(stubs.c,$(SERVERSRC)/Xi)
+ SpecialCObjectRule(stubs,$(ICONFIGFILES),$(EXT_DEFINES))
+Index: xc/programs/Xserver/hw/xwin/InitOutput.c
+diff -u xc/programs/Xserver/hw/xwin/InitOutput.c:1.4 xc/programs/Xserver/hw/xwin/InitOutput.c:1.4.4.1
+--- xc/programs/Xserver/hw/xwin/InitOutput.c:1.4 Tue Jul 27 09:53:14 2004
++++ xc/programs/Xserver/hw/xwin/InitOutput.c Wed Dec 15 19:22:53 2004
+@@ -30,9 +30,7 @@
+
+ #include "win.h"
+ #include "winmsg.h"
+-#ifdef XWIN_XF86CONFIG
+ #include "winconfig.h"
+-#endif
+ #include "winprefs.h"
+ #include "X11/Xlocale.h"
+ #include <mntent.h>
+@@ -437,9 +435,15 @@
+ "\tSpecify an optional refresh rate to use in fullscreen mode\n"
+ "\twith a DirectDraw engine.\n");
+
+- ErrorF ("-screen scr_num [width height]\n"
++ ErrorF ("-screen scr_num [width height [x y] | [[WxH[+X+Y]][@m]] ]\n"
+ "\tEnable screen scr_num and optionally specify a width and\n"
+- "\theight for that screen.\n");
++ "\theight and initial position for that screen. Additionally\n"
++ "\ta monitor number can be specified to start the server on,\n"
++ "\tat which point, all coordinates become relative to that\n"
++ "\tmonitor (Not for Windows NT4 and 95). Examples:\n"
++ "\t -screen 0 800x600+100+100@2 ; 2nd monitor offset 100,100 size 800x600\n"
++ "\t -screen 0 1024x768@3 ; 3rd monitor size 1024x768\n"
++ "\t -screen 0 @1 ; on 1st monitor using its full resolution (the default)\n");
+
+ ErrorF ("-lesspointer\n"
+ "\tHide the windows mouse pointer when it is over an inactive\n"
+@@ -635,6 +639,7 @@
+ winMsg(X_INFO, "XF86Config is not supported\n");
+ winMsg(X_INFO, "See http://x.cygwin.com/docs/faq/cygwin-x-faq.html "
+ "for more information\n");
++ winConfigFiles ();
+ #endif
+
+ /* Load preferences from XWinrc file */
+Index: xc/programs/Xserver/hw/xwin/XWin.rc
+diff -u xc/programs/Xserver/hw/xwin/XWin.rc:1.3 xc/programs/Xserver/hw/xwin/XWin.rc:1.3.4.1
+--- xc/programs/Xserver/hw/xwin/XWin.rc:1.3 Mon Jun 21 13:19:32 2004
++++ xc/programs/Xserver/hw/xwin/XWin.rc Wed Dec 15 19:22:53 2004
+@@ -37,7 +37,7 @@
+
+ /* About */
+ ABOUT_BOX DIALOG DISCARDABLE 32, 32, 240, 105
+-STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE | WS_TABSTOP | DS_CENTER
++STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE | WS_TABSTOP | DS_CENTERMOUSE
+ CAPTION "About Cygwin/X"
+ FONT 8, "MS Sans Serif"
+ BEGIN
+@@ -59,7 +59,7 @@
+ /* Depth change */
+
+ DEPTH_CHANGE_BOX DIALOG DISCARDABLE 32, 32, 180, 100
+-STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE | DS_CENTER
++STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE | DS_CENTERMOUSE
+ FONT 8, "MS Sans Serif"
+ CAPTION "Cygwin/X"
+ BEGIN
+@@ -73,7 +73,7 @@
+ /* Exit */
+
+ EXIT_DIALOG DIALOG DISCARDABLE 32, 32, 180, 78
+-STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE | WS_TABSTOP | DS_CENTER
++STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE | WS_TABSTOP | DS_CENTERMOUSE
+ FONT 8, "MS Sans Serif"
+ CAPTION "Cygwin/X - Exit?"
+ BEGIN
+@@ -94,6 +94,7 @@
+ POPUP "TRAYICON_MENU"
+ BEGIN
+ MENUITEM "&Hide Root Window", ID_APP_HIDE_ROOT
++ MENUITEM "Show Cursor", ID_APP_SHOWCURSOR
+ MENUITEM "&About...", ID_APP_ABOUT
+ MENUITEM SEPARATOR
+ MENUITEM "E&xit", ID_APP_EXIT
+Index: xc/programs/Xserver/hw/xwin/win.h
+diff -u xc/programs/Xserver/hw/xwin/win.h:1.4 xc/programs/Xserver/hw/xwin/win.h:1.4.2.1
+--- xc/programs/Xserver/hw/xwin/win.h:1.4 Sat Jul 31 18:33:56 2004
++++ xc/programs/Xserver/hw/xwin/win.h Wed Dec 15 19:22:53 2004
+@@ -48,6 +48,17 @@
+ #define CYGDEBUG NO
+ #endif
+
++/* WM_XBUTTON Messages. They should go into w32api. */
++#ifndef WM_XBUTTONDOWN
++# define WM_XBUTTONDOWN 523
++#endif
++#ifndef WM_XBUTTONUP
++# define WM_XBUTTONUP 524
++#endif
++#ifndef WM_XBUTTONDBLCLK
++# define WM_XBUTTONDBLCLK 525
++#endif
++
+ #define NEED_EVENTS
+
+ #define WIN_DEFAULT_BPP 0
+@@ -384,6 +395,11 @@
+ DWORD dwHeight_mm;
+ DWORD dwPaddedWidth;
+
++ /* Did the user specify a screen position? */
++ Bool fUserGavePosition;
++ DWORD dwInitialX;
++ DWORD dwInitialY;
++
+ /*
+ * dwStride is the number of whole pixels that occupy a scanline,
+ * including those pixels that are not displayed. This is basically
+@@ -414,6 +430,9 @@
+ #ifdef XWIN_MULTIWINDOW
+ Bool fMultiWindow;
+ #endif
++#if defined(XWIN_MULTIWINDOW) || defined(XWIN_MULTIWINDOWEXTWM)
++ Bool fMultiMonitorOverride;
++#endif
+ Bool fMultipleMonitors;
+ Bool fLessPointer;
+ Bool fScrollbars;
+@@ -497,6 +516,7 @@
+ LPDIRECTDRAW4 pdd4;
+ LPDIRECTDRAWSURFACE4 pddsShadow4;
+ LPDIRECTDRAWSURFACE4 pddsPrimary4;
++ BOOL fRetryCreateSurface;
+
+ /* Privates used by both shadow fb DirectDraw servers */
+ LPDIRECTDRAWCLIPPER pddcPrimary;
+Index: xc/programs/Xserver/hw/xwin/winclipboardthread.c
+diff -u xc/programs/Xserver/hw/xwin/winclipboardthread.c:1.4 xc/programs/Xserver/hw/xwin/winclipboardthread.c:1.4.2.1
+--- xc/programs/Xserver/hw/xwin/winclipboardthread.c:1.4 Tue Aug 3 10:12:25 2004
++++ xc/programs/Xserver/hw/xwin/winclipboardthread.c Wed Dec 15 19:22:53 2004
+@@ -429,8 +429,12 @@
+ pErr->error_code,
+ pszErrorMsg,
+ sizeof (pszErrorMsg));
+- ErrorF ("winClipboardErrorHandler - ERROR: \n\t%s\n", pszErrorMsg);
+-
++ ErrorF ("winClipboardErrorHandler - ERROR: \n\t%s\n"
++ "\tSerial: %d, Request Code: %d, Minor Code: %d\n",
++ pszErrorMsg,
++ pErr->serial,
++ pErr->request_code,
++ pErr->minor_code);
+ return 0;
+ }
+
+Index: xc/programs/Xserver/hw/xwin/winclipboardwndproc.c
+diff -u xc/programs/Xserver/hw/xwin/winclipboardwndproc.c:1.4 xc/programs/Xserver/hw/xwin/winclipboardwndproc.c:1.4.2.1
+--- xc/programs/Xserver/hw/xwin/winclipboardwndproc.c:1.4 Tue Aug 3 10:12:25 2004
++++ xc/programs/Xserver/hw/xwin/winclipboardwndproc.c Wed Dec 15 19:22:53 2004
+@@ -44,6 +44,7 @@
+ */
+
+ extern Bool g_fUseUnicode;
++extern Bool g_fUnicodeSupport;
+ extern void *g_pClipboardDisplay;
+ extern Window g_iClipboardWindow;
+ extern Atom g_atomLastOwnedSelection;
+@@ -445,7 +446,7 @@
+ if (message == WM_RENDERALLFORMATS)
+ fConvertToUnicode = FALSE;
+ else
+- fConvertToUnicode = g_fUseUnicode && (CF_UNICODETEXT == wParam);
++ fConvertToUnicode = g_fUnicodeSupport && (CF_UNICODETEXT == wParam);
+
+ /* Request the selection contents */
+ iReturn = XConvertSelection (pDisplay,
+@@ -521,10 +522,9 @@
+ if (WIN_XEVENTS_NOTIFY != iReturn)
+ {
+ /* Paste no data, to satisfy required call to SetClipboardData */
+- if (fConvertToUnicode)
++ if (g_fUnicodeSupport)
+ SetClipboardData (CF_UNICODETEXT, NULL);
+- else
+- SetClipboardData (CF_TEXT, NULL);
++ SetClipboardData (CF_TEXT, NULL);
+ }
+
+ /* Special handling for WM_RENDERALLFORMATS */
+Index: xc/programs/Xserver/hw/xwin/winclipboardxevents.c
+diff -u xc/programs/Xserver/hw/xwin/winclipboardxevents.c:1.4 xc/programs/Xserver/hw/xwin/winclipboardxevents.c:1.4.2.1
+--- xc/programs/Xserver/hw/xwin/winclipboardxevents.c:1.4 Tue Aug 3 10:12:25 2004
++++ xc/programs/Xserver/hw/xwin/winclipboardxevents.c Wed Dec 15 19:22:53 2004
+@@ -135,8 +135,8 @@
+ iReturn = XChangeProperty (pDisplay,
+ event.xselectionrequest.requestor,
+ event.xselectionrequest.property,
+- event.xselectionrequest.target,
+- sizeof (atomTargetArr[0]),
++ XA_ATOM,
++ 32,
+ PropModeReplace,
+ (unsigned char *) atomTargetArr,
+ (sizeof (atomTargetArr)
+Index: xc/programs/Xserver/hw/xwin/winconfig.c
+diff -u xc/programs/Xserver/hw/xwin/winconfig.c:1.4 xc/programs/Xserver/hw/xwin/winconfig.c:1.4.4.1
+--- xc/programs/Xserver/hw/xwin/winconfig.c:1.4 Tue Jul 27 09:53:14 2004
++++ xc/programs/Xserver/hw/xwin/winconfig.c Wed Dec 15 19:22:53 2004
+@@ -247,6 +247,7 @@
+ { 0x40b, -1, "pc105", "fi", NULL, NULL, "Finnish"},
+ { 0x40c, -1, "pc105", "fr", NULL, NULL, "French (Standard)"},
+ { 0x80c, -1, "pc105", "be", NULL, NULL, "French (Belgian)"},
++ { 0x100c, -1, "pc105", "fr_CH", NULL, NULL, "French (Switzerland)"},
+ { 0x410, -1, "pc105", "it", NULL, NULL, "Italian"},
+ { 0x411, 7, "jp106", "jp", NULL, NULL, "Japanese"},
+ { 0x813, -1, "pc105", "be", NULL, NULL, "Dutch (Belgian)"},
+@@ -730,6 +731,127 @@
+
+ return TRUE;
+ }
++#else
++Bool
++winConfigFiles ()
++{
++ MessageType from;
++
++ /* Fontpath */
++ from = X_DEFAULT;
++
++ if (g_cmdline.fontPath)
++ {
++ from = X_CMDLINE;
++ defaultFontPath = g_cmdline.fontPath;
++ }
++ else
++ {
++ /* Open fontpath configuration file */
++ FILE *fontdirs = fopen(ETCX11DIR "/font-dirs", "rt");
++ if (fontdirs != NULL)
++ {
++ char buffer[256];
++ int needs_sep = TRUE;
++ int comment_block = FALSE;
++
++ /* get defautl fontpath */
++ char *fontpath = xstrdup(defaultFontPath);
++ size_t size = strlen(fontpath);
++
++ /* read all lines */
++ while (!feof(fontdirs))
++ {
++ size_t blen;
++ char *hashchar;
++ char *str;
++ int has_eol = FALSE;
++
++ /* read one line */
++ str = fgets(buffer, sizeof(buffer), fontdirs);
++ if (str == NULL) /* stop on error or eof */
++ break;
++
++ if (strchr(str, '\n') != NULL)
++ has_eol = TRUE;
++
++ /* check if block is continued comment */
++ if (comment_block)
++ {
++ /* ignore all input */
++ *str = 0;
++ blen = 0;
++ if (has_eol) /* check if line ended in this block */
++ comment_block = FALSE;
++ }
++ else
++ {
++ /* find comment character. ignore all trailing input */
++ hashchar = strchr(str, '#');
++ if (hashchar != NULL)
++ {
++ *hashchar = 0;
++ if (!has_eol) /* mark next block as continued comment */
++ comment_block = TRUE;
++ }
++ }
++
++ /* strip whitespaces from beginning */
++ while (*str == ' ' || *str == '\t')
++ str++;
++
++ /* get size, strip whitespaces from end */
++ blen = strlen(str);
++ while (blen > 0 && (str[blen-1] == ' ' ||
++ str[blen-1] == '\t' || str[blen-1] == '\n'))
++ {
++ str[--blen] = 0;
++ }
++
++ /* still something left to add? */
++ if (blen > 0)
++ {
++ size_t newsize = size + blen;
++ /* reserve one character more for ',' */
++ if (needs_sep)
++ newsize++;
++
++ /* allocate memory */
++ if (fontpath == NULL)
++ fontpath = malloc(newsize+1);
++ else
++ fontpath = realloc(fontpath, newsize+1);
++
++ /* add separator */
++ if (needs_sep)
++ {
++ fontpath[size] = ',';
++ size++;
++ needs_sep = FALSE;
++ }
++
++ /* mark next line as new entry */
++ if (has_eol)
++ needs_sep = TRUE;
++
++ /* add block */
++ strncpy(fontpath + size, str, blen);
++ fontpath[newsize] = 0;
++ size = newsize;
++ }
++ }
++
++ /* cleanup */
++ fclose(fontdirs);
++ from = X_CONFIG;
++ defaultFontPath = xstrdup(fontpath);
++ free(fontpath);
++ }
++ }
++ winMsg (from, "FontPath set to \"%s\"\n", defaultFontPath);
++
++ return TRUE;
++}
+ #endif
+
+
+Index: xc/programs/Xserver/hw/xwin/wincreatewnd.c
+diff -u xc/programs/Xserver/hw/xwin/wincreatewnd.c:1.3 xc/programs/Xserver/hw/xwin/wincreatewnd.c:1.3.4.1
+--- xc/programs/Xserver/hw/xwin/wincreatewnd.c:1.3 Mon Jun 21 13:19:32 2004
++++ xc/programs/Xserver/hw/xwin/wincreatewnd.c Wed Dec 15 19:22:53 2004
+@@ -142,6 +142,8 @@
+ winScreenInfo *pScreenInfo = pScreenPriv->pScreenInfo;
+ int iWidth = pScreenInfo->dwUserWidth;
+ int iHeight = pScreenInfo->dwUserHeight;
++ int iPosX;
++ int iPosY;
+ HWND *phwnd = &pScreenPriv->hwndScreen;
+ WNDCLASS wc;
+ RECT rcClient, rcWorkArea;
+@@ -193,6 +195,18 @@
+ /* Adjust for auto-hide taskbars */
+ winAdjustForAutoHide (&rcWorkArea);
+
++ /* Did the user specify a position? */
++ if (pScreenInfo->fUserGavePosition)
++ {
++ iPosX = pScreenInfo->dwInitialX;
++ iPosY = pScreenInfo->dwInitialY;
++ }
++ else
++ {
++ iPosX = rcWorkArea.left;
++ iPosY = rcWorkArea.top;
++ }
++
+ /* Did the user specify a height and width? */
+ if (pScreenInfo->fUserGaveHeightAndWidth)
+ {
+@@ -240,24 +254,6 @@
+ + GetSystemMetrics (SM_CYCAPTION);
+ }
+ }
+- else
+- {
+- /*
+- * User gave a width and height but also said no decoration.
+- * In this case we have to ignore the requested width and height
+- * and instead use the largest possible window that we can.
+- */
+- if (pScreenInfo->fMultipleMonitors)
+- {
+- iWidth = GetSystemMetrics (SM_CXVIRTUALSCREEN);
+- iHeight = GetSystemMetrics (SM_CYVIRTUALSCREEN);
+- }
+- else
+- {
+- iWidth = GetSystemMetrics (SM_CXSCREEN);
+- iHeight = GetSystemMetrics (SM_CYSCREEN);
+- }
+- }
+ }
+ else
+ {
+@@ -289,20 +285,30 @@
+ /* We cannot have scrollbars if we do not have a window border */
+ pScreenInfo->fScrollbars = FALSE;
+ }
++
++ if (TRUE
++#ifdef XWIN_MULTIWINDOWEXTWM
++ && !pScreenInfo->fMWExtWM
++#endif
++#ifdef XWIN_MULTIWINDOW
++ && !pScreenInfo->fMultiWindow
++#endif
++ )
++ {
++ /* Trim window width to fit work area */
++ if (iWidth > (rcWorkArea.right - rcWorkArea.left))
++ iWidth = rcWorkArea.right - rcWorkArea.left;
+
+- /* Trim window width to fit work area */
+- if (iWidth > (rcWorkArea.right - rcWorkArea.left))
+- iWidth = rcWorkArea.right - rcWorkArea.left;
+-
+- /* Trim window height to fit work area */
+- if (iHeight >= (rcWorkArea.bottom - rcWorkArea.top))
+- iHeight = rcWorkArea.bottom - rcWorkArea.top;
++ /* Trim window height to fit work area */
++ if (iHeight >= (rcWorkArea.bottom - rcWorkArea.top))
++ iHeight = rcWorkArea.bottom - rcWorkArea.top;
+
+ #if CYGDEBUG
+- winDebug ("winCreateBoundingWindowWindowed - Adjusted width: %d "\
+- "height: %d\n",
+- iWidth, iHeight);
++ winDebug ("winCreateBoundingWindowWindowed - Adjusted width: %d "\
++ "height: %d\n",
++ iWidth, iHeight);
+ #endif
++ }
+
+ /* Set display and screen-specific tooltip text */
+ if (g_pszQueryHost != NULL)
+@@ -322,8 +328,8 @@
+ WINDOW_CLASS, /* Class name */
+ szTitle, /* Window name */
+ dwWindowStyle,
+- rcWorkArea.left, /* Horizontal position */
+- rcWorkArea.top, /* Vertical position */
++ iPosX, /* Horizontal position */
++ iPosY, /* Vertical position */
+ iWidth, /* Right edge */
+ iHeight, /* Bottom edge */
+ (HWND) NULL, /* No parent or owner window */
+Index: xc/programs/Xserver/hw/xwin/winkeybd.h
+diff -u xc/programs/Xserver/hw/xwin/winkeybd.h:1.3 xc/programs/Xserver/hw/xwin/winkeybd.h:1.3.4.1
+--- xc/programs/Xserver/hw/xwin/winkeybd.h:1.3 Mon Jun 21 13:19:32 2004
++++ xc/programs/Xserver/hw/xwin/winkeybd.h Thu Jan 13 03:56:07 2005
+@@ -140,9 +140,9 @@
+ /* 88 */ 0, 0, 0,
+ /* 89 */ 0, 0, 0,
+ /* 90 */ 0, 0, 0,
+- /* 91 */ 0, 0, 0,
+- /* 92 */ 0, 0, 0,
+- /* 93 */ 0, 0, 0,
++ /* 91 */ VK_LWIN, KEY_LMeta, 0,
++ /* 92 */ VK_RWIN, KEY_RMeta, 0,
++ /* 93 */ VK_APPS, KEY_Menu, 0,
+ /* 94 */ 0, 0, 0,
+ /* 95 */ 0, 0, 0,
+ /* 96 */ 0, 0, 0,
+Index: xc/programs/Xserver/hw/xwin/winkeyhook.c
+diff -u xc/programs/Xserver/hw/xwin/winkeyhook.c:1.2 xc/programs/Xserver/hw/xwin/winkeyhook.c:1.2.4.1
+--- xc/programs/Xserver/hw/xwin/winkeyhook.c:1.2 Mon Jun 21 13:19:32 2004
++++ xc/programs/Xserver/hw/xwin/winkeyhook.c Thu Jan 13 03:56:07 2005
+@@ -65,6 +65,7 @@
+ {
+ BOOL fPassKeystroke = FALSE;
+ PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) lParam;
++ HWND hwnd = GetActiveWindow();
+
+ /* Pass keystrokes on to our main message loop */
+ if (iCode == HC_ACTION)
+@@ -79,9 +80,7 @@
+ case WM_KEYUP: case WM_SYSKEYUP:
+ fPassKeystroke =
+ ((p->vkCode == VK_TAB) && ((p->flags & LLKHF_ALTDOWN) != 0))
+-#if 0
+ || (p->vkCode == VK_LWIN) || (p->vkCode == VK_RWIN)
+-#endif
+ ;
+ break;
+ }
+@@ -107,7 +106,7 @@
+ lParamKey = lParamKey | (0x80000000 & ((p->flags & LLKHF_UP) << 24));
+
+ /* Send message to our main window that has the keyboard focus */
+- PostMessage (g_hwndKeyboardFocus,
++ PostMessage (hwnd,
+ (UINT) wParam,
+ (WPARAM) p->vkCode,
+ lParamKey);
+Index: xc/programs/Xserver/hw/xwin/winmessages.h
+diff -u xc/programs/Xserver/hw/xwin/winmessages.h:1.2 xc/programs/Xserver/hw/xwin/winmessages.h:1.2.4.1
+--- xc/programs/Xserver/hw/xwin/winmessages.h:1.2 Mon Jun 21 13:19:32 2004
++++ xc/programs/Xserver/hw/xwin/winmessages.h Wed Dec 15 19:22:53 2004
+@@ -523,9 +523,9 @@
+ "WM_MBUTTONUP",
+ "WM_MBUTTONDBLCLK",
+ "WM_MOUSEWHEEL",
+- "523",
+- "524",
+- "525",
++ "WM_XBUTTONDOWN",
++ "WM_XBUTTONUP",
++ "WM_XBUTTONDBLCLK",
+ "526",
+ "527",
+ "WM_PARENTNOTIFY",
+Index: xc/programs/Xserver/hw/xwin/winmouse.c
+diff -u xc/programs/Xserver/hw/xwin/winmouse.c:1.3 xc/programs/Xserver/hw/xwin/winmouse.c:1.3.4.1
+--- xc/programs/Xserver/hw/xwin/winmouse.c:1.3 Mon Jun 21 13:19:32 2004
++++ xc/programs/Xserver/hw/xwin/winmouse.c Wed Dec 15 19:22:53 2004
+@@ -64,23 +64,44 @@
+ int
+ winMouseProc (DeviceIntPtr pDeviceInt, int iState)
+ {
+- CARD8 map[6];
++ int lngMouseButtons, i;
++ int lngWheelEvents = 2;
++ CARD8 *map;
+ DevicePtr pDevice = (DevicePtr) pDeviceInt;
+
+ switch (iState)
+ {
+ case DEVICE_INIT:
+- map[1] = 1;
+- map[2] = 2;
+- map[3] = 3;
+- map[4] = 4;
+- map[5] = 5;
++ /* Get number of mouse buttons */
++ lngMouseButtons = GetSystemMetrics(SM_CMOUSEBUTTONS);
++
++ /* Mapping of windows events to X events:
++ * LEFT:1 MIDDLE:2 RIGHT:3
++ * SCROLL_UP:4 SCROLL_DOWN:5
++ * XBUTTON 1:6 XBUTTON 2:7 ...
++ *
++ * To map scroll wheel correctly we need at least the 3 normal buttons
++ */
++ if (lngMouseButtons < 3)
++ lngMouseButtons = 3;
++ winMsg(X_PROBED, "%d mouse buttons found\n", lngMouseButtons);
++
++ /* allocate memory:
++ * number of buttons + 2x mouse wheel event + 1 extra (offset for map)
++ */
++ map = malloc(sizeof(CARD8) * (lngMouseButtons + lngWheelEvents + 1));
++
++ /* initalize button map */
++ map[0] = 0;
++ for (i=1; i <= lngMouseButtons + lngWheelEvents; i++)
++ map[i] = i;
+ InitPointerDeviceStruct (pDevice,
+ map,
+- 5, /* Buttons 4 and 5 are mouse wheel events */
++ lngMouseButtons + lngWheelEvents,
+ miPointerGetMotionEvents,
+ winMouseCtrl,
+ miPointerGetMotionBufferSize ());
++ free(map);
+
+ #if defined(XFree86Server) && defined(XINPUT)
+ g_winMouseButtonMap = pDeviceInt->button->map;
+Index: xc/programs/Xserver/hw/xwin/winmultiwindowclass.c
+diff -u xc/programs/Xserver/hw/xwin/winmultiwindowclass.c:1.3 xc/programs/Xserver/hw/xwin/winmultiwindowclass.c:1.3.4.1
+--- xc/programs/Xserver/hw/xwin/winmultiwindowclass.c:1.3 Mon Jun 21 13:19:32 2004
++++ xc/programs/Xserver/hw/xwin/winmultiwindowclass.c Thu Jan 13 03:56:07 2005
+@@ -175,7 +175,7 @@
+ && prop->format == 8
+ && prop->data)
+ {
+- len_role= strlen ((char *) prop->data);
++ len_role= prop->size;
+
+ (*res_role) = malloc (len_role + 1);
+
+@@ -185,7 +185,8 @@
+ return 0;
+ }
+
+- strcpy ((*res_role), prop->data);
++ strncpy ((*res_role), prop->data, len_role);
++ (*res_role)[len_role] = 0;
+
+ return 1;
+ }
+@@ -299,7 +300,7 @@
+ && prop->type == XA_STRING
+ && prop->data)
+ {
+- len_name = strlen ((char *) prop->data);
++ len_name = prop->size;
+
+ (*wmName) = malloc (len_name + 1);
+
+@@ -309,8 +310,8 @@
+ return 0;
+ }
+
+- /* Add one to len_name to allow copying of trailing 0 */
+- strncpy ((*wmName), prop->data, len_name+1);
++ strncpy ((*wmName), prop->data, len_name);
++ (*wmName)[len_name] = 0;
+
+ return 1;
+ }
+Index: xc/programs/Xserver/hw/xwin/winmultiwindowwindow.c
+diff -u xc/programs/Xserver/hw/xwin/winmultiwindowwindow.c:1.3 xc/programs/Xserver/hw/xwin/winmultiwindowwindow.c:1.3.4.1
+--- xc/programs/Xserver/hw/xwin/winmultiwindowwindow.c:1.3 Mon Jun 21 13:19:32 2004
++++ xc/programs/Xserver/hw/xwin/winmultiwindowwindow.c Thu Jan 13 03:56:07 2005
+@@ -394,7 +394,8 @@
+ * Calling winReorderWindowsMultiWindow here means our window manager
+ * (i.e. Windows Explorer) has initiative to determine Z order.
+ */
+- winReorderWindowsMultiWindow ();
++ if (pWin->nextSib != pOldNextSib)
++ winReorderWindowsMultiWindow ();
+ #else
+ /* Bail out if no window privates or window handle is invalid */
+ if (!pWinPriv || !pWinPriv->hWnd)
+Index: xc/programs/Xserver/hw/xwin/winmultiwindowwm.c
+diff -u xc/programs/Xserver/hw/xwin/winmultiwindowwm.c:1.3 xc/programs/Xserver/hw/xwin/winmultiwindowwm.c:1.3.4.2
+--- xc/programs/Xserver/hw/xwin/winmultiwindowwm.c:1.3 Mon Jun 21 13:19:32 2004
++++ xc/programs/Xserver/hw/xwin/winmultiwindowwm.c Thu Jan 13 03:56:07 2005
+@@ -43,6 +43,7 @@
+ #include <X11/Xlocale.h>
+ #include <X11/Xproto.h>
+ #include <X11/Xutil.h>
++#include <X11/cursorfont.h>
+
+ /* Fixups to prevent collisions between Windows and X headers */
+ #define ATOM DWORD
+@@ -180,7 +181,6 @@
+ static Bool g_shutdown = FALSE;
+ static Bool redirectError = FALSE;
+
+-
+ /*
+ * PushMessage - Push a message onto the queue
+ */
+@@ -405,7 +405,10 @@
+ /* */
+ if (xtpName.value)
+ {
+- *ppName = strdup ((char*)xtpName.value);
++ int size = xtpName.nitems * (xtpName.format >> 3);
++ *ppName = malloc(size + 1);
++ strncpy(*ppName, xtpName.value, size);
++ (*ppName)[size] = 0;
+ XFree (xtpName.value);
+ }
+
+@@ -1184,6 +1187,16 @@
+ pWMInfo->atmPrivMap = XInternAtom (pWMInfo->pDisplay,
+ WIN_HWND_CACHE,
+ False);
++
++
++ if (1) {
++ Cursor cursor = XCreateFontCursor (pWMInfo->pDisplay, XC_left_ptr);
++ if (cursor)
++ {
++ XDefineCursor (pWMInfo->pDisplay, DefaultRootWindow(pWMInfo->pDisplay), cursor);
++ XFreeCursor (pWMInfo->pDisplay, cursor);
++ }
++ }
+ }
+
+
+Index: xc/programs/Xserver/hw/xwin/winmultiwindowwndproc.c
+diff -u xc/programs/Xserver/hw/xwin/winmultiwindowwndproc.c:1.3 xc/programs/Xserver/hw/xwin/winmultiwindowwndproc.c:1.3.4.1
+--- xc/programs/Xserver/hw/xwin/winmultiwindowwndproc.c:1.3 Mon Jun 21 13:19:32 2004
++++ xc/programs/Xserver/hw/xwin/winmultiwindowwndproc.c Wed Dec 15 19:22:53 2004
+@@ -628,6 +628,16 @@
+ break;
+ return winMouseButtonsHandle (s_pScreen, ButtonRelease, Button3, wParam);
+
++ case WM_XBUTTONDBLCLK:
++ case WM_XBUTTONDOWN:
++ if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput)
++ break;
++ return winMouseButtonsHandle (s_pScreen, ButtonPress, HIWORD(wParam) + 5, wParam);
++ case WM_XBUTTONUP:
++ if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput)
++ break;
++ return winMouseButtonsHandle (s_pScreen, ButtonRelease, HIWORD(wParam) + 5, wParam);
++
+ case WM_MOUSEWHEEL:
+ #if CYGMULTIWINDOW_DEBUG
+ ErrorF ("winTopLevelWindowProc - WM_MOUSEWHEEL\n");
+Index: xc/programs/Xserver/hw/xwin/winprocarg.c
+diff -u xc/programs/Xserver/hw/xwin/winprocarg.c:1.3 xc/programs/Xserver/hw/xwin/winprocarg.c:1.3.4.1
+--- xc/programs/Xserver/hw/xwin/winprocarg.c:1.3 Tue Jul 27 09:53:14 2004
++++ xc/programs/Xserver/hw/xwin/winprocarg.c Wed Dec 15 19:22:53 2004
+@@ -52,6 +52,55 @@
+ extern Bool g_fSoftwareCursor;
+ extern Bool g_fSilentDupError;
+
++/* globals required by callback function for monitor information */
++struct GetMonitorInfoData {
++ int requestedMonitor;
++ int monitorNum;
++ Bool bUserSpecifiedMonitor;
++ Bool bMonitorSpecifiedExists;
++ int monitorOffsetX;
++ int monitorOffsetY;
++ int monitorHeight;
++ int monitorWidth;
++};
++
++typedef BOOL (*ENUMDISPLAYMONITORSPROC)(HDC,LPCRECT,MONITORENUMPROC,LPARAM);
++ENUMDISPLAYMONITORSPROC _EnumDisplayMonitors;
++
++BOOL CALLBACK getMonitorInfo(HMONITOR hMonitor, HDC hdc, LPRECT rect, LPARAM _data);
++
++Bool QueryMonitor(int index, struct GetMonitorInfoData *data)
++{
++ /* Load EnumDisplayMonitors from DLL */
++ HMODULE user32;
++ FARPROC func;
++ user32 = LoadLibrary("user32.dll");
++ if (user32 == NULL)
++ {
++ winW32Error(2, "Could not open user32.dll");
++ return FALSE;
++ }
++ func = GetProcAddress(user32, "EnumDisplayMonitors");
++ if (func == NULL)
++ {
++ winW32Error(2, "Could not resolve EnumDisplayMonitors: ");
++ return FALSE;
++ }
++ _EnumDisplayMonitors = (ENUMDISPLAYMONITORSPROC)func;
++
++ /* prepare data */
++ if (data == NULL)
++ return FALSE;
++ memset(data, 0, sizeof(*data));
++ data->requestedMonitor = index;
++
++ /* query information */
++ _EnumDisplayMonitors(NULL, NULL, getMonitorInfo, (LPARAM) data);
++
++ /* cleanup */
++ FreeLibrary(user32);
++ return TRUE;
++}
+
+ /*
+ * Function prototypes
+@@ -70,7 +119,6 @@
+ void
+ winInitializeDefaultScreens (void);
+
+-
+ /*
+ * Process arguments on the command line
+ */
+@@ -112,6 +160,7 @@
+ g_ScreenInfo[i].dwUserHeight = dwHeight;
+ g_ScreenInfo[i].fUserGaveHeightAndWidth
+ = WIN_DEFAULT_USER_GAVE_HEIGHT_AND_WIDTH;
++ g_ScreenInfo[i].fUserGavePosition = FALSE;
+ g_ScreenInfo[i].dwBPP = WIN_DEFAULT_BPP;
+ g_ScreenInfo[i].dwClipUpdatesNBoxes = WIN_DEFAULT_CLIP_UPDATES_NBOXES;
+ #ifdef XWIN_EMULATEPSEUDO
+@@ -128,6 +177,9 @@
+ #ifdef XWIN_MULTIWINDOW
+ g_ScreenInfo[i].fMultiWindow = FALSE;
+ #endif
++#if defined(XWIN_MULTIWINDOW) || defined(XWIN_MULTIWINDOWEXTWM)
++ g_ScreenInfo[i].fMultiMonitorOverride = FALSE;
++#endif
+ g_ScreenInfo[i].fMultipleMonitors = FALSE;
+ g_ScreenInfo[i].fLessPointer = FALSE;
+ g_ScreenInfo[i].fScrollbars = FALSE;
+@@ -247,7 +299,8 @@
+ {
+ int iArgsProcessed = 1;
+ int nScreenNum;
+- int iWidth, iHeight;
++ int iWidth, iHeight, iX, iY;
++ int iMonitor;
+
+ #if CYGDEBUG
+ winDebug ("ddxProcessArgument - screen - argc: %d i: %d\n",
+@@ -272,8 +325,41 @@
+ return 0;
+ }
+
++ /* look for @m where m is monitor number */
++ if (i + 2 < argc
++ && 1 == sscanf(argv[i + 2], "@%d", (int *) &iMonitor))
++ {
++ struct GetMonitorInfoData data;
++ if (!QueryMonitor(iMonitor, &data))
++ {
++ ErrorF ("ddxProcessArgument - screen - "
++ "Querying monitors is not supported on NT4 and Win95\n");
++ } else if (data.bMonitorSpecifiedExists == TRUE)
++ {
++ winErrorFVerb(2, "ddxProcessArgument - screen - Found Valid ``@Monitor'' = %d arg\n", iMonitor);
++ iArgsProcessed = 3;
++ g_ScreenInfo[nScreenNum].fUserGaveHeightAndWidth = FALSE;
++ g_ScreenInfo[nScreenNum].fUserGavePosition = TRUE;
++ g_ScreenInfo[nScreenNum].dwWidth = data.monitorWidth;
++ g_ScreenInfo[nScreenNum].dwHeight = data.monitorHeight;
++ g_ScreenInfo[nScreenNum].dwUserWidth = data.monitorWidth;
++ g_ScreenInfo[nScreenNum].dwUserHeight = data.monitorHeight;
++ g_ScreenInfo[nScreenNum].dwInitialX = data.monitorOffsetX;
++ g_ScreenInfo[nScreenNum].dwInitialY = data.monitorOffsetY;
++ }
++ else
++ {
++ /* monitor does not exist, error out */
++ ErrorF ("ddxProcessArgument - screen - Invalid monitor number %d\n",
++ iMonitor);
++ UseMsg ();
++ exit (0);
++ return 0;
++ }
++ }
++
+ /* Look for 'WxD' or 'W D' */
+- if (i + 2 < argc
++ else if (i + 2 < argc
+ && 2 == sscanf (argv[i + 2], "%dx%d",
+ (int *) &iWidth,
+ (int *) &iHeight))
+@@ -285,6 +371,70 @@
+ g_ScreenInfo[nScreenNum].dwHeight = iHeight;
+ g_ScreenInfo[nScreenNum].dwUserWidth = iWidth;
+ g_ScreenInfo[nScreenNum].dwUserHeight = iHeight;
++ /* Look for WxD+X+Y */
++ if (2 == sscanf (argv[i + 2], "%*dx%*d+%d+%d",
++ (int *) &iX,
++ (int *) &iY))
++ {
++ winErrorFVerb (2, "ddxProcessArgument - screen - Found ``X+Y'' arg\n");
++ g_ScreenInfo[nScreenNum].fUserGavePosition = TRUE;
++ g_ScreenInfo[nScreenNum].dwInitialX = iX;
++ g_ScreenInfo[nScreenNum].dwInitialY = iY;
++
++ /* look for WxD+X+Y@m where m is monitor number. take X,Y to be offsets from monitor's root position */
++ if (1 == sscanf (argv[i + 2], "%*dx%*d+%*d+%*d@%d",
++ (int *) &iMonitor))
++ {
++ struct GetMonitorInfoData data;
++ if (!QueryMonitor(iMonitor, &data))
++ {
++ ErrorF ("ddxProcessArgument - screen - "
++ "Querying monitors is not supported on NT4 and Win95\n");
++ } else if (data.bMonitorSpecifiedExists == TRUE)
++ {
++ g_ScreenInfo[nScreenNum].dwInitialX += data.monitorOffsetX;
++ g_ScreenInfo[nScreenNum].dwInitialY += data.monitorOffsetY;
++ }
++ else
++ {
++ /* monitor does not exist, error out */
++ ErrorF ("ddxProcessArgument - screen - Invalid monitor number %d\n",
++ iMonitor);
++ UseMsg ();
++ exit (0);
++ return 0;
++ }
++
++ }
++ }
++
++ /* look for WxD@m where m is monitor number */
++ else if (1 == sscanf(argv[i + 2], "%*dx%*d@%d",
++ (int *) &iMonitor))
++ {
++ struct GetMonitorInfoData data;
++ if (!QueryMonitor(iMonitor, &data))
++ {
++ ErrorF ("ddxProcessArgument - screen - "
++ "Querying monitors is not supported on NT4 and Win95\n");
++ } else if (data.bMonitorSpecifiedExists == TRUE)
++ {
++ winErrorFVerb (2, "ddxProcessArgument - screen - Found Valid ``@Monitor'' = %d arg\n", iMonitor);
++ g_ScreenInfo[nScreenNum].fUserGavePosition = TRUE;
++ g_ScreenInfo[nScreenNum].dwInitialX = data.monitorOffsetX;
++ g_ScreenInfo[nScreenNum].dwInitialY = data.monitorOffsetY;
++ }
++ else
++ {
++ /* monitor does not exist, error out */
++ ErrorF ("ddxProcessArgument - screen - Invalid monitor number %d\n",
++ iMonitor);
++ UseMsg ();
++ exit (0);
++ return 0;
++ }
++
++ }
+ }
+ else if (i + 3 < argc
+ && 1 == sscanf (argv[i + 2], "%d",
+@@ -299,6 +449,18 @@
+ g_ScreenInfo[nScreenNum].dwHeight = iHeight;
+ g_ScreenInfo[nScreenNum].dwUserWidth = iWidth;
+ g_ScreenInfo[nScreenNum].dwUserHeight = iHeight;
++ if (i + 5 < argc
++ && 1 == sscanf (argv[i + 4], "%d",
++ (int *) &iX)
++ && 1 == sscanf (argv[i + 5], "%d",
++ (int *) &iY))
++ {
++ winErrorFVerb (2, "ddxProcessArgument - screen - Found ``X Y'' arg\n");
++ iArgsProcessed = 6;
++ g_ScreenInfo[nScreenNum].fUserGavePosition = TRUE;
++ g_ScreenInfo[nScreenNum].dwInitialX = iX;
++ g_ScreenInfo[nScreenNum].dwInitialY = iY;
++ }
+ }
+ else
+ {
+@@ -399,12 +561,16 @@
+ /* Parameter is for all screens */
+ for (j = 0; j < MAXSCREENS; j++)
+ {
++ if (!g_ScreenInfo[j].fMultiMonitorOverride)
++ g_ScreenInfo[j].fMultipleMonitors = FALSE;
+ g_ScreenInfo[j].fFullScreen = TRUE;
+ }
+ }
+ else
+ {
+ /* Parameter is for a single screen */
++ if (!g_ScreenInfo[g_iLastScreen].fMultiMonitorOverride)
++ g_ScreenInfo[g_iLastScreen].fMultipleMonitors = FALSE;
+ g_ScreenInfo[g_iLastScreen].fFullScreen = TRUE;
+ }
+
+@@ -451,12 +617,16 @@
+ /* Parameter is for all screens */
+ for (j = 0; j < MAXSCREENS; j++)
+ {
++ if (!g_ScreenInfo[j].fMultiMonitorOverride)
++ g_ScreenInfo[j].fMultipleMonitors = FALSE;
+ g_ScreenInfo[j].fDecoration = FALSE;
+ }
+ }
+ else
+ {
+ /* Parameter is for a single screen */
++ if (!g_ScreenInfo[g_iLastScreen].fMultiMonitorOverride)
++ g_ScreenInfo[g_iLastScreen].fMultipleMonitors = FALSE;
+ g_ScreenInfo[g_iLastScreen].fDecoration = FALSE;
+ }
+
+@@ -478,12 +648,16 @@
+ /* Parameter is for all screens */
+ for (j = 0; j < MAXSCREENS; j++)
+ {
++ if (!g_ScreenInfo[j].fMultiMonitorOverride)
++ g_ScreenInfo[j].fMultipleMonitors = TRUE;
+ g_ScreenInfo[j].fMWExtWM = TRUE;
+ }
+ }
+ else
+ {
+ /* Parameter is for a single screen */
++ if (!g_ScreenInfo[g_iLastScreen].fMultiMonitorOverride)
++ g_ScreenInfo[g_iLastScreen].fMultipleMonitors = TRUE;
+ g_ScreenInfo[g_iLastScreen].fMWExtWM = TRUE;
+ }
+
+@@ -505,12 +679,16 @@
+ /* Parameter is for all screens */
+ for (j = 0; j < MAXSCREENS; j++)
+ {
++ if (!g_ScreenInfo[j].fMultiMonitorOverride)
++ g_ScreenInfo[j].fMultipleMonitors = FALSE;
+ g_ScreenInfo[j].fRootless = TRUE;
+ }
+ }
+ else
+ {
+ /* Parameter is for a single screen */
++ if (!g_ScreenInfo[g_iLastScreen].fMultiMonitorOverride)
++ g_ScreenInfo[g_iLastScreen].fMultipleMonitors = FALSE;
+ g_ScreenInfo[g_iLastScreen].fRootless = TRUE;
+ }
+
+@@ -532,12 +710,16 @@
+ /* Parameter is for all screens */
+ for (j = 0; j < MAXSCREENS; j++)
+ {
++ if (!g_ScreenInfo[j].fMultiMonitorOverride)
++ g_ScreenInfo[j].fMultipleMonitors = TRUE;
+ g_ScreenInfo[j].fMultiWindow = TRUE;
+ }
+ }
+ else
+ {
+ /* Parameter is for a single screen */
++ if (!g_ScreenInfo[g_iLastScreen].fMultiMonitorOverride)
++ g_ScreenInfo[g_iLastScreen].fMultipleMonitors = TRUE;
+ g_ScreenInfo[g_iLastScreen].fMultiWindow = TRUE;
+ }
+
+@@ -560,12 +742,14 @@
+ /* Parameter is for all screens */
+ for (j = 0; j < MAXSCREENS; j++)
+ {
++ g_ScreenInfo[j].fMultiMonitorOverride = TRUE;
+ g_ScreenInfo[j].fMultipleMonitors = TRUE;
+ }
+ }
+ else
+ {
+ /* Parameter is for a single screen */
++ g_ScreenInfo[g_iLastScreen].fMultiMonitorOverride = TRUE;
+ g_ScreenInfo[g_iLastScreen].fMultipleMonitors = TRUE;
+ }
+
+@@ -574,6 +758,36 @@
+ }
+
+ /*
++ * Look for the '-nomultiplemonitors' argument
++ */
++ if (IS_OPTION ("-nomultiplemonitors")
++ || IS_OPTION ("-nomultimonitors"))
++ {
++ /* Is this parameter attached to a screen or is it global? */
++ if (-1 == g_iLastScreen)
++ {
++ int j;
++
++ /* Parameter is for all screens */
++ for (j = 0; j < MAXSCREENS; j++)
++ {
++ g_ScreenInfo[j].fMultiMonitorOverride = TRUE;
++ g_ScreenInfo[j].fMultipleMonitors = FALSE;
++ }
++ }
++ else
++ {
++ /* Parameter is for a single screen */
++ g_ScreenInfo[g_iLastScreen].fMultiMonitorOverride = TRUE;
++ g_ScreenInfo[g_iLastScreen].fMultipleMonitors = FALSE;
++ }
++
++ /* Indicate that we have processed this argument */
++ return 1;
++ }
++
++
++ /*
+ * Look for the '-scrollbars' argument
+ */
+ if (IS_OPTION ("-scrollbars"))
+@@ -1254,3 +1468,24 @@
+ ErrorF ("Release: %s\n\n", VERSION_STRING);
+ ErrorF ("Contact: %s\n\n", VENDOR_CONTACT);
+ }
++
++/*
++ * getMonitorInfo - callback function used to return information from the enumeration of monitors attached
++ */
++
++BOOL CALLBACK getMonitorInfo(HMONITOR hMonitor, HDC hdc, LPRECT rect, LPARAM _data)
++{
++ struct GetMonitorInfoData* data = (struct GetMonitorInfoData*)_data;
++ // only get data for monitor number specified in <data>
++ data->monitorNum++;
++ if (data->monitorNum == data->requestedMonitor)
++ {
++ data->bMonitorSpecifiedExists = TRUE;
++ data->monitorOffsetX = rect->left;
++ data->monitorOffsetY = rect->top;
++ data->monitorHeight = rect->bottom - rect->top;
++ data->monitorWidth = rect->right - rect->left;
++ return FALSE;
++ }
++ return TRUE;
++}
+Index: xc/programs/Xserver/hw/xwin/winresource.h
+diff -u xc/programs/Xserver/hw/xwin/winresource.h:1.2 xc/programs/Xserver/hw/xwin/winresource.h:1.2.4.1
+--- xc/programs/Xserver/hw/xwin/winresource.h:1.2 Mon Jun 21 13:19:32 2004
++++ xc/programs/Xserver/hw/xwin/winresource.h Wed Dec 15 19:22:53 2004
+@@ -48,6 +48,7 @@
+ #define ID_APP_HIDE_ROOT 201
+ #define ID_APP_ALWAYS_ON_TOP 202
+ #define ID_APP_ABOUT 203
++#define ID_APP_SHOWCURSOR 204
+
+ #define ID_ABOUT_UG 300
+ #define ID_ABOUT_FAQ 301
+Index: xc/programs/Xserver/hw/xwin/winshadddnl.c
+diff -u xc/programs/Xserver/hw/xwin/winshadddnl.c:1.3 xc/programs/Xserver/hw/xwin/winshadddnl.c:1.3.4.1
+--- xc/programs/Xserver/hw/xwin/winshadddnl.c:1.3 Mon Jun 21 13:19:32 2004
++++ xc/programs/Xserver/hw/xwin/winshadddnl.c Wed Dec 15 19:22:53 2004
+@@ -141,11 +141,21 @@
+ &ddsd,
+ &pScreenPriv->pddsPrimary4,
+ NULL);
++ pScreenPriv->fRetryCreateSurface = FALSE;
+ if (FAILED (ddrval))
+ {
+- ErrorF ("winCreatePrimarySurfaceShadowDDNL - Could not create primary "
+- "surface: %08x\n",
+- (unsigned int) ddrval);
++ if (ddrval == DDERR_NOEXCLUSIVEMODE)
++ {
++ /* Recreating the surface failed. Mark screen to retry later */
++ pScreenPriv->fRetryCreateSurface = TRUE;
++ winDebug ("winCreatePrimarySurfaceShadowDDNL - Could not create "
++ "primary surface: DDERR_NOEXCLUSIVEMODE\n");
++ }
++ else
++ {
++ ErrorF ("winCreatePrimarySurfaceShadowDDNL - Could not create "
++ "primary surface: %08x\n", (unsigned int) ddrval);
++ }
+ return FALSE;
+ }
+
+@@ -1055,6 +1065,17 @@
+ Bool fReturn = TRUE;
+ int i;
+
++ /* Quite common case. The primary surface was lost (maybe because of depth
++ * change). Try to create a new primary surface. Bail out if this fails */
++ if (pScreenPriv->pddsPrimary4 == NULL && pScreenPriv->fRetryCreateSurface &&
++ !winCreatePrimarySurfaceShadowDDNL(pScreen))
++ {
++ Sleep(100);
++ return FALSE;
++ }
++ if (pScreenPriv->pddsPrimary4 == NULL)
++ return FALSE;
++
+ /* BeginPaint gives us an hdc that clips to the invalidated region */
+ hdcUpdate = BeginPaint (pScreenPriv->hwndScreen, &ps);
+ if (hdcUpdate == NULL)
+Index: xc/programs/Xserver/hw/xwin/winwin32rootlesswndproc.c
+diff -u xc/programs/Xserver/hw/xwin/winwin32rootlesswndproc.c:1.3 xc/programs/Xserver/hw/xwin/winwin32rootlesswndproc.c:1.3.2.1
+--- xc/programs/Xserver/hw/xwin/winwin32rootlesswndproc.c:1.3 Tue Aug 3 10:12:25 2004
++++ xc/programs/Xserver/hw/xwin/winwin32rootlesswndproc.c Wed Dec 15 19:22:53 2004
+@@ -652,6 +652,18 @@
+ ReleaseCapture ();
+ return winMouseButtonsHandle (pScreen, ButtonRelease, Button3, wParam);
+
++ case WM_XBUTTONDBLCLK:
++ case WM_XBUTTONDOWN:
++ if (pScreenPriv == NULL || pScreenInfo->fIgnoreInput)
++ break;
++ SetCapture (hwnd);
++ return winMouseButtonsHandle (pScreen, ButtonPress, HIWORD(wParam) + 5, wParam);
++ case WM_XBUTTONUP:
++ if (pScreenPriv == NULL || pScreenInfo->fIgnoreInput)
++ break;
++ ReleaseCapture ();
++ return winMouseButtonsHandle (pScreen, ButtonRelease, HIWORD(wParam) + 5, wParam);
++
+ case WM_MOUSEWHEEL:
+ #if CYGMULTIWINDOW_DEBUG
+ winDebug ("winMWExtWMWindowProc - WM_MOUSEWHEEL\n");
+Index: xc/programs/Xserver/hw/xwin/winwndproc.c
+diff -u xc/programs/Xserver/hw/xwin/winwndproc.c:1.3 xc/programs/Xserver/hw/xwin/winwndproc.c:1.3.4.2
+--- xc/programs/Xserver/hw/xwin/winwndproc.c:1.3 Mon Jun 21 13:19:32 2004
++++ xc/programs/Xserver/hw/xwin/winwndproc.c Thu Jan 13 03:56:07 2005
+@@ -873,6 +873,28 @@
+ ReleaseCapture ();
+ return winMouseButtonsHandle (s_pScreen, ButtonRelease, Button3, wParam);
+
++ case WM_XBUTTONDBLCLK:
++ case WM_XBUTTONDOWN:
++ if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput)
++ break;
++ if (s_pScreenInfo->fRootless
++#ifdef XWIN_MULTIWINDOWEXTWM
++ || s_pScreenInfo->fMWExtWM
++#endif
++ )
++ SetCapture (hwnd);
++ return winMouseButtonsHandle (s_pScreen, ButtonPress, HIWORD(wParam) + 5, wParam);
++ case WM_XBUTTONUP:
++ if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput)
++ break;
++ if (s_pScreenInfo->fRootless
++#ifdef XWIN_MULTIWINDOWEXTWM
++ || s_pScreenInfo->fMWExtWM
++#endif
++ )
++ ReleaseCapture ();
++ return winMouseButtonsHandle (s_pScreen, ButtonRelease, HIWORD(wParam) + 5, wParam);
++
+ case WM_TIMER:
+ if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput)
+ break;
+@@ -990,7 +1012,7 @@
+ * be returned to Windows. We may be able to trap the Windows keys,
+ * but we should determine if that is desirable before doing so.
+ */
+- if (wParam == VK_LWIN || wParam == VK_RWIN)
++ if ((wParam == VK_LWIN || wParam == VK_RWIN) && !g_fKeyboardHookLL)
+ break;
+
+ #ifdef XKB
+@@ -1031,7 +1053,7 @@
+ * be returned to Windows. We may be able to trap the Windows keys,
+ * but we should determine if that is desirable before doing so.
+ */
+- if (wParam == VK_LWIN || wParam == VK_RWIN)
++ if ((wParam == VK_LWIN || wParam == VK_RWIN) && !g_fKeyboardHookLL)
+ break;
+
+ /* Ignore the fake Ctrl_L that follows an AltGr release */
+@@ -1139,6 +1161,9 @@
+ /* Display Exit dialog */
+ winDisplayExitDialog (s_pScreenPriv);
+ return 0;
++ case ID_APP_SHOWCURSOR:
++ winDebug("ShowCursor: %d\n", ShowCursor(TRUE));
++ return 0;
+
+ #ifdef XWIN_MULTIWINDOW
+ case ID_APP_HIDE_ROOT:
+Index: xc/programs/Xserver/include/globals.h
+diff -u xc/programs/Xserver/include/globals.h:1.4 xc/programs/Xserver/include/globals.h:1.4.2.1
+--- xc/programs/Xserver/include/globals.h:1.4 Sat Jul 31 09:14:06 2004
++++ xc/programs/Xserver/include/globals.h Wed Dec 8 05:28:11 2004
+@@ -1,4 +1,4 @@
+-/* $XdotOrg: xc/programs/Xserver/include/globals.h,v 1.4 2004/07/31 09:14:06 kem Exp $ */
++/* $XdotOrg: xc/programs/Xserver/include/globals.h,v 1.4.2.1 2004/12/08 05:28:11 gisburn Exp $ */
+ /* $XFree86: xc/programs/Xserver/include/globals.h,v 1.3 1999/09/25 14:38:21 dawes Exp $ */
+
+ #ifndef _XSERV_GLOBAL_H_
+@@ -42,23 +42,163 @@
+ #endif
+
+ #ifdef PANORAMIX
+-extern Bool noPanoramiXExtension;
+ extern Bool PanoramiXMapped;
+ extern Bool PanoramiXVisibilityNotifySent;
+ extern Bool PanoramiXWindowExposureSent;
+ extern Bool PanoramiXOneExposeRequest;
+ #endif
+
++#ifdef BEZIER
++extern Bool noBezierExtension;
++#endif
++
++#ifdef BIGREQS
++extern Bool noBigReqExtension;
++#endif
++
++#ifdef COMPOSITE
++extern Bool noCompositeExtension;
++#endif
++
++#ifdef DAMAGE
++extern Bool noDamageExtension;
++#endif
++
++#ifdef DBE
++extern Bool noDbeExtension;
++#endif
++
++#ifdef DPSEXT
++extern Bool noDPSExtension;
++#endif
++
++#ifdef DPMSExtension
++extern Bool noDPMSExtension;
++#endif
++
++#ifdef EVI
++extern Bool noEVIExtension;
++#endif
++
++#ifdef FONTCACHE
++extern Bool noFontCacheExtension;
++#endif
++
++#ifdef GLXEXT
++extern Bool noGlxExtension;
++#endif
++
++#ifdef LBX
++extern Bool noLbxExtension;
++#endif
++
++#ifdef SCREENSAVER
++extern Bool noScreenSaverExtension;
++#endif
++
++#ifdef MITSHM
++extern Bool noMITShmExtension;
++#endif
++
++#ifdef MITMISC
++extern Bool noMITMiscExtension;
++#endif
++
++#ifdef MULTIBUFFER
++extern Bool noMultibufferExtension;
++#endif
++
++#ifdef RANDR
++extern Bool noRRExtension;
++#endif
++
+ #ifdef RENDER
+ extern Bool noRenderExtension;
+ #endif
+
++#ifdef SHAPE
++extern Bool noShapeExtension;
++#endif
++
++#ifdef XCSECURITY
++extern Bool noSecurityExtension;
++#endif
++
++#ifdef XSYNC
++extern Bool noSyncExtension;
++#endif
++
++#ifdef TOGCUP
++extern Bool noXcupExtension;
++#endif
++
++#ifdef PEXEXT
++extern Bool noPexExtension;
++#endif
++
++#ifdef RES
++extern Bool noResExtension;
++#endif
++
++#ifdef XAPPGROUP
++extern Bool noXagExtension;
++#endif
++
++#ifdef XCMISC
++extern Bool noXCMiscExtension;
++#endif
++
+ #ifdef XEVIE
+ extern Bool noXevieExtension;
+ #endif
+
+-#ifdef COMPOSITE
+-extern Bool noCompositeExtension;
++#ifdef XIE
++extern Bool noXie;
++#endif
++
++#ifdef XF86BIGFONT
++extern Bool noXFree86BigfontExtension;
++#endif
++
++#ifdef XFreeXDGA
++extern Bool noXFree86DGAExtension;
++#endif
++
++#ifdef XF86DRI
++extern Bool noXFree86DRIExtension;
++#endif
++
++#ifdef XF86MISC
++extern Bool noXFree86MiscExtension;
++#endif
++
++#ifdef XF86VIDMODE
++extern Bool noXFree86VidModeExtension;
++#endif
++
++#ifdef XFIXES
++extern Bool noXFixesExtension;
++#endif
++
++#ifdef XKB
++/* |noXkbExtension| is defined in xc/programs/Xserver/xkb/xkbInit.c */
++extern Bool noXkbExtension;
++#endif
++
++#ifdef PANORAMIX
++extern Bool noPanoramiXExtension;
++#endif
++
++#ifdef XINPUT
++extern Bool noXInputExtension;
++#endif
++
++#ifdef XIDLE
++extern Bool noXIdleExtension;
++#endif
++
++#ifdef XV
++extern Bool noXvExtension;
+ #endif
+
+-#endif /* _XSERV_GLOBAL_H_ */
++#endif /* !_XSERV_GLOBAL_H_ */
+Index: xc/programs/Xserver/mi/micmap.c
+diff -u xc/programs/Xserver/mi/micmap.c:1.3 xc/programs/Xserver/mi/micmap.c:1.3.4.1
+--- xc/programs/Xserver/mi/micmap.c:1.3 Wed Jun 30 20:06:56 2004
++++ xc/programs/Xserver/mi/micmap.c Fri Dec 17 00:38:22 2004
+@@ -55,10 +55,11 @@
+ int
+ miListInstalledColormaps(ScreenPtr pScreen, Colormap *pmaps)
+ {
+- /* By the time we are processing requests, we can guarantee that there
+- * is always a colormap installed */
+- *pmaps = miInstalledMaps[pScreen->myNum]->mid;
+- return (1);
++ if (miInstalledMaps[pScreen->myNum]) {
++ *pmaps = miInstalledMaps[pScreen->myNum]->mid;
++ return (1);
++ }
++ return 0;
+ }
+
+ void
+Index: xc/programs/Xserver/mi/miinitext.c
+diff -u xc/programs/Xserver/mi/miinitext.c:1.12 xc/programs/Xserver/mi/miinitext.c:1.12.2.3
+--- xc/programs/Xserver/mi/miinitext.c:1.12 Thu Aug 12 08:45:33 2004
++++ xc/programs/Xserver/mi/miinitext.c Mon Dec 13 05:48:41 2004
+@@ -1,4 +1,4 @@
+-/* $XdotOrg: xc/programs/Xserver/mi/miinitext.c,v 1.12 2004/08/12 08:45:33 anholt Exp $ */
++/* $XdotOrg: xc/programs/Xserver/mi/miinitext.c,v 1.12.2.3 2004/12/13 05:48:41 gisburn Exp $ */
+ /* $XFree86: xc/programs/Xserver/mi/miinitext.c,v 3.67 2003/01/12 02:44:27 dawes Exp $ */
+ /***********************************************************
+
+@@ -74,7 +74,6 @@
+ #undef SCREENSAVER
+ #undef XIDLE
+ #undef XRECORD
+-#undef DBE
+ #undef XF86VIDMODE
+ #undef XF86MISC
+ #undef XFreeXDGA
+@@ -88,21 +87,123 @@
+ #undef XEVIE
+ #endif /* PRINT_ONLY_SERVER */
+
+-#ifdef PANORAMIX
+-extern Bool noPanoramiXExtension;
+-#endif
++
+ extern Bool noTestExtensions;
+-#ifdef XKB
+-extern Bool noXkbExtension;
++
++#ifdef BEZIER
++extern Bool noBezierExtension;
++#endif
++#ifdef BIGREQS
++extern Bool noBigReqExtension;
++#endif
++#ifdef COMPOSITE
++extern Bool noCompositeExtension;
++#endif
++#ifdef DAMAGE
++extern Bool noDamageExtension;
++#endif
++#ifdef DBE
++extern Bool noDbeExtension;
++#endif
++#ifdef DPSEXT
++extern Bool noDPSExtension;
++#endif
++#ifdef DPMSExtension
++extern Bool noDPMSExtension;
++#endif
++#ifdef EVI
++extern Bool noEVIExtension;
++#endif
++#ifdef FONTCACHE
++extern Bool noFontCacheExtension;
++#endif
++#ifdef GLXEXT
++extern Bool noGlxExtension;
++#endif
++#ifdef LBX
++extern Bool noLbxExtension;
++#endif
++#ifdef SCREENSAVER
++extern Bool noScreenSaverExtension;
++#endif
++#ifdef MITSHM
++extern Bool noMITShmExtension;
++#endif
++#ifdef MITMISC
++extern Bool noMITMiscExtension;
++#endif
++#ifdef MULTIBUFFER
++extern Bool noMultibufferExtension;
++#endif
++#ifdef RANDR
++extern Bool noRRExtension;
+ #endif
+ #ifdef RENDER
+ extern Bool noRenderExtension;
+ #endif
++#ifdef SHAPE
++extern Bool noShapeExtension;
++#endif
++#ifdef XCSECURITY
++extern Bool noSecurityExtension;
++#endif
++#ifdef XSYNC
++extern Bool noSyncExtension;
++#endif
++#ifdef TOGCUP
++extern Bool noXcupExtension;
++#endif
++#ifdef PEXEXT
++extern Bool noPexExtension;
++#endif
++#ifdef RES
++extern Bool noResExtension;
++#endif
++#ifdef XAPPGROUP
++extern Bool noXagExtension;
++#endif
++#ifdef XCMISC
++extern Bool noXCMiscExtension;
++#endif
+ #ifdef XEVIE
+ extern Bool noXevieExtension;
+ #endif
+-#ifdef COMPOSITE
+-extern Bool noCompositeExtension;
++#ifdef XIE
++extern Bool noXie;
++#endif
++#ifdef XF86BIGFONT
++extern Bool noXFree86BigfontExtension;
++#endif
++#ifdef XFreeXDGA
++extern Bool noXFree86DGAExtension;
++#endif
++#ifdef XF86DRI
++extern Bool noXFree86DRIExtension;
++#endif
++#ifdef XF86MISC
++extern Bool noXFree86MiscExtension;
++#endif
++#ifdef XF86VIDMODE
++extern Bool noXFree86VidModeExtension;
++#endif
++#ifdef XFIXES
++extern Bool noXFixesExtension;
++#endif
++#ifdef XKB
++/* |noXkbExtension| is defined in xc/programs/Xserver/xkb/xkbInit.c */
++extern Bool noXkbExtension;
++#endif
++#ifdef PANORAMIX
++extern Bool noPanoramiXExtension;
++#endif
++#ifdef XINPUT
++extern Bool noXInputExtension;
++#endif
++#ifdef XIDLE
++extern Bool noXIdleExtension;
++#endif
++#ifdef XV
++extern Bool noXvExtension;
+ #endif
+
+ #ifndef XFree86LOADER
+@@ -299,21 +400,118 @@
+
+ static ExtensionToggle ExtensionToggleList[] =
+ {
+- { "XTEST", &noTestExtensions },
+-#ifdef PANORAMIX
+- { "XINERAMA", &noPanoramiXExtension },
++ /* sort order is extension name string as shown in xdpyinfo */
++#ifdef BEZIER
++ { "BEZIER", &noBezierExtension },
++#endif
++#ifdef BIGREQS
++ { "BIG-REQUESTS", &noBigReqExtension },
++#endif
++#ifdef COMPOSITE
++ { "Composite", &noCompositeExtension },
++#endif
++#ifdef DAMAGE
++ { "DAMAGE", &noDamageExtension },
++#endif
++#ifdef DBE
++ { "DOUBLE-BUFFER", &noDbeExtension },
++#endif
++#ifdef DPSEXT
++ { "DPSExtension", &noDPSExtension },
++#endif
++#ifdef DPMSExtension
++ { "DPMS", &noDPMSExtension },
++#endif
++#ifdef EVI
++ { "Extended-Visual-Information", &noEVIExtension },
++#endif
++#ifdef FONTCACHE
++ { "FontCache", &noFontCacheExtension },
++#endif
++#ifdef GLXEXT
++ { "GLX", &noGlxExtension },
++#endif
++#ifdef LBX
++ { "LBX", &noLbxExtension },
++#endif
++#ifdef SCREENSAVER
++ { "MIT-SCREEN-SAVER", &noScreenSaverExtension },
++#endif
++#ifdef MITSHM
++ { SHMNAME, &noMITShmExtension },
++#endif
++#ifdef MITMISC
++ { "MIT-SUNDRY-NONSTANDARD", &noMITMiscExtension },
++#endif
++#ifdef MULTIBUFFER
++ { "Multi-Buffering", &noMultibufferExtension },
++#endif
++#ifdef RANDR
++ { "RANDR", &noRRExtension },
+ #endif
+ #ifdef RENDER
+ { "RENDER", &noRenderExtension },
+ #endif
+-#ifdef XKB
+- { "XKEYBOARD", &noXkbExtension },
++#ifdef SHAPE
++ { "SHAPE", &noShapeExtension },
++#endif
++#ifdef XCSECURITY
++ { "SECURITY", &noSecurityExtension },
++#endif
++#ifdef XSYNC
++ { "SYNC", &noSyncExtension },
++#endif
++#ifdef TOGCUP
++ { "TOG-CUP", &noXcupExtension },
++#endif
++#ifdef PEXEXT
++ { "X3D-PEX", &noPexExtension },
++#endif
++#ifdef RES
++ { "X-Resource", &noResExtension },
++#endif
++#ifdef XAPPGROUP
++ { "XC-APPGROUP", &noXagExtension },
++#endif
++#ifdef XCMISC
++ { "XC-MISC", &noXCMiscExtension },
+ #endif
+ #ifdef XEVIE
+ { "XEVIE", &noXevieExtension },
+ #endif
+-#ifdef COMPOSITE
+- { "Composite", &noCompositeExtension },
++#ifdef XF86BIGFONT
++ { "XFree86-Bigfont", &noXFree86BigfontExtension },
++#endif
++#ifdef XFreeXDGA
++ { "XFree86-DGA", &noXFree86DGAExtension },
++#endif
++#ifdef XF86DRI
++ { "XFree86-DRI", &noXFree86DRIExtension },
++#endif
++#ifdef XF86MISC
++ { "XFree86-Misc", &noXFree86MiscExtension },
++#endif
++#ifdef XF86VIDMODE
++ { "XFree86-VidModeExtension", &noXFree86VidModeExtension },
++#endif
++#ifdef XFIXES
++ { "XFIXES", &noXFixesExtension },
++#endif
++#ifdef XIE
++ { "XIE", &noXie },
++#endif
++#ifdef PANORAMIX
++ { "XINERAMA", &noPanoramiXExtension },
++#endif
++#ifdef XINPUT
++ { "XInputExtension", &noXInputExtension },
++#endif
++#ifdef XKB
++ { "XKEYBOARD", &noXkbExtension },
++#endif
++ { "XTEST", &noTestExtensions },
++#ifdef XV
++ { "XVideo", &noXvExtension },
+ #endif
+ { NULL, NULL }
+ };
+@@ -357,134 +555,136 @@
+ # endif
+ #endif
+ #ifdef BEZIER
+- BezierExtensionInit();
++ if (!noBezierExtension) BezierExtensionInit();
+ #endif
+ #ifdef XTESTEXT1
+ if (!noTestExtensions) XTestExtension1Init();
+ #endif
+ #ifdef SHAPE
+- ShapeExtensionInit();
++ if (!noShapeExtension) ShapeExtensionInit();
+ #endif
+ #ifdef MITSHM
+- ShmExtensionInit();
++ if (!noMITShmExtension) ShmExtensionInit();
+ #endif
+ #ifdef EVI
+- EVIExtensionInit();
++ if (!noEVIExtension) EVIExtensionInit();
+ #endif
+ #ifdef PEXEXT
+- PexExtensionInit();
++ if (!noPexExtension) PexExtensionInit();
+ #endif
+ #ifdef MULTIBUFFER
+- MultibufferExtensionInit();
++ if (!noMultibufferExtension) MultibufferExtensionInit();
+ #endif
+ #if defined(XINPUT) && !defined(NO_HW_ONLY_EXTS)
+- XInputExtensionInit();
++ if (!noXInputExtension) XInputExtensionInit();
+ #endif
+ #ifdef XTEST
+ if (!noTestExtensions) XTestExtensionInit();
+ #endif
+ #ifdef BIGREQS
+- BigReqExtensionInit();
++ if (!noBigReqExtension) BigReqExtensionInit();
+ #endif
+ #ifdef MITMISC
+- MITMiscExtensionInit();
++ if (!noMITMiscExtension) MITMiscExtensionInit();
+ #endif
+ #ifdef XIDLE
+- XIdleExtensionInit();
++ if (!noXIdleExtension) XIdleExtensionInit();
+ #endif
+ #ifdef XTRAP
+ if (!noTestExtensions) DEC_XTRAPInit();
+ #endif
+ #if defined(SCREENSAVER) && !defined(PRINT_ONLY_SERVER)
+- ScreenSaverExtensionInit ();
++ if (!noScreenSaverExtension) ScreenSaverExtensionInit ();
+ #endif
+ #ifdef XV
+- XvExtensionInit();
+- XvMCExtensionInit();
++ if (!noXvExtension) {
++ XvExtensionInit();
++ XvMCExtensionInit();
++ }
+ #endif
+ #ifdef XIE
+- XieInit();
++ if (!noXie) XieInit();
+ #endif
+ #ifdef XSYNC
+- SyncExtensionInit();
++ if (!noSyncExtension) SyncExtensionInit();
+ #endif
+ #if defined(XKB) && !defined(PRINT_ONLY_SERVER) && !defined(NO_HW_ONLY_EXTS)
+ if (!noXkbExtension) XkbExtensionInit();
+ #endif
+ #ifdef XCMISC
+- XCMiscExtensionInit();
++ if (!noXCMiscExtension) XCMiscExtensionInit();
+ #endif
+ #ifdef XRECORD
+ if (!noTestExtensions) RecordExtensionInit();
+ #endif
+ #ifdef LBX
+- LbxExtensionInit();
++ if (!noLbxExtension) LbxExtensionInit();
+ #endif
+ #ifdef DBE
+- DbeExtensionInit();
++ if (!noDbeExtension) DbeExtensionInit();
+ #endif
+ #ifdef XAPPGROUP
+- XagExtensionInit();
++ if (!noXagExtension) XagExtensionInit();
+ #endif
+ #ifdef XCSECURITY
+- SecurityExtensionInit();
++ if (!noSecurityExtension) SecurityExtensionInit();
+ #endif
+ #ifdef XPRINT
+- XpExtensionInit();
++ XpExtensionInit(); /* server-specific extension, cannot be disabled */
+ #endif
+ #ifdef TOGCUP
+- XcupExtensionInit();
++ if (!noXcupExtension) XcupExtensionInit();
+ #endif
+ #if defined(DPMSExtension) && !defined(NO_HW_ONLY_EXTS)
+- DPMSExtensionInit();
++ if (!noDPMSExtension) DPMSExtensionInit();
+ #endif
+ #ifdef FONTCACHE
+- FontCacheExtensionInit();
++ if (!noFontCacheExtension) FontCacheExtensionInit();
+ #endif
+ #ifdef XF86BIGFONT
+- XFree86BigfontExtensionInit();
++ if (!noXFree86BigfontExtension) XFree86BigfontExtensionInit();
+ #endif
+ #if !defined(PRINT_ONLY_SERVER) && !defined(NO_HW_ONLY_EXTS)
+ #if defined(XF86VIDMODE)
+- XFree86VidModeExtensionInit();
++ if (!noXFree86VidModeExtension) XFree86VidModeExtensionInit();
+ #endif
+ #if defined(XF86MISC)
+- XFree86MiscExtensionInit();
++ if (!noXFree86MiscExtension) XFree86MiscExtensionInit();
+ #endif
+ #if defined(XFreeXDGA)
+- XFree86DGAExtensionInit();
++ if (!noXFree86DGAExtension) XFree86DGAExtensionInit();
+ #endif
+ #ifdef XF86DRI
+- XFree86DRIExtensionInit();
++ if (!noXFree86DRIExtension) XFree86DRIExtensionInit();
+ #endif
+ #endif
+ #ifdef GLXEXT
+ #ifndef __DARWIN__
+- GlxExtensionInit();
++ if (!noGlxExtension) GlxExtensionInit();
+ #else
+- DarwinGlxExtensionInit();
++ if (!noGlxExtension) DarwinGlxExtensionInit();
+ #endif
+ #endif
+ #ifdef DPSEXT
+ #ifndef XPRINT
+- DPSExtensionInit();
++ if (!noDPSExtension) DPSExtensionInit();
+ #endif
+ #endif
+ #ifdef XFIXES
+ /* must be before Render to layer DisplayCursor correctly */
+- XFixesExtensionInit();
++ if (!noXFixesExtension) XFixesExtensionInit();
+ #endif
+ #ifdef RENDER
+ if (!noRenderExtension) RenderExtensionInit();
+ #endif
+ #ifdef RANDR
+- RRExtensionInit();
++ if (!noRRExtension) RRExtensionInit();
+ #endif
+ #ifdef RES
+- ResExtensionInit();
++ if (!noResExtension) ResExtensionInit();
+ #endif
+ #ifdef DMXEXT
+- DMXExtensionInit();
++ DMXExtensionInit(); /* server-specific extension, cannot be disabled */
+ #endif
+ #ifdef XEVIE
+ if (!noXevieExtension) XevieExtensionInit();
+@@ -493,7 +693,7 @@
+ if (!noCompositeExtension) CompositeExtensionInit();
+ #endif
+ #ifdef DAMAGE
+- DamageExtensionInit();
++ if (!noDamageExtension) DamageExtensionInit();
+ #endif
+ }
+
+@@ -511,96 +711,37 @@
+ }
+
+ #else /* XFree86LOADER */
+-#if 0
+-/* FIXME:The names here must come from the headers. those with ?? are
+- not included in X11R6.3 sample implementation, so there's a problem... */
+-/* XXX use the correct #ifdefs for symbols not present when an extension
+- is disabled */
+-ExtensionModule extension[] =
+-{
+- { NULL, "BEZIER", NULL, NULL }, /* ?? */
+- { NULL, "XTEST1", &noTestExtensions, NULL }, /* ?? */
+- { NULL, "SHAPE", NULL, NULL },
+- { NULL, "MIT-SHM", NULL, NULL },
+- { NULL, "X3D-PEX", NULL, NULL },
+- { NULL, "Multi-Buffering", NULL, NULL },
+- { NULL, "XInputExtension", NULL, NULL },
+- { NULL, "XTEST", &noTestExtensions, NULL },
+- { NULL, "BIG-REQUESTS", NULL, NULL },
+- { NULL, "MIT-SUNDRY-NONSTANDARD", NULL, NULL },
+- { NULL, "XIDLE", NULL, NULL }, /* ?? */
+- { NULL, "XTRAP", &noTestExtensions, NULL }, /* ?? */
+- { NULL, "MIT-SCREEN-SAVER", NULL, NULL },
+- { NULL, "XVideo", NULL, NULL }, /* ?? */
+- { NULL, "XIE", NULL, NULL },
+- { NULL, "SYNC", NULL, NULL },
+-#ifdef XKB
+- { NULL, "XKEYBOARD", &noXkbExtension, NULL },
+-#else
+- { NULL, "NOXKEYBOARD", NULL, NULL },
+-#endif
+- { NULL, "XC-MISC", NULL, NULL },
+- { NULL, "RECORD", &noTestExtensions, NULL },
+- { NULL, "LBX", NULL, NULL },
+- { NULL, "DOUBLE-BUFFER", NULL, NULL },
+- { NULL, "XC-APPGROUP", NULL, NULL },
+- { NULL, "SECURITY", NULL, NULL },
+- { NULL, "XpExtension", NULL, NULL },
+- { NULL, "XFree86-VidModeExtension", NULL, NULL },
+- { NULL, "XFree86-Misc", NULL, NULL },
+- { NULL, "XFree86-DGA", NULL, NULL },
+- { NULL, "DPMS", NULL, NULL },
+- { NULL, "GLX", NULL, NULL },
+- { NULL, "TOG-CUP", NULL, NULL },
+- { NULL, "Extended-Visual-Information", NULL, NULL },
+-#ifdef PANORAMIX
+- { NULL, "XINERAMA", &noPanoramiXExtension, NULL },
+-#else
+- { NULL, "NOXINERAMA", NULL, NULL },
+-#endif
+- { NULL, "XFree86-Bigfont", NULL, NULL },
+- { NULL, "XFree86-DRI", NULL, NULL },
+- { NULL, "Adobe-DPS-Extension", NULL, NULL },
+- { NULL, "FontCache", NULL, NULL },
+- { NULL, "RENDER", NULL, NULL },
+- { NULL, "RANDR", NULL, NULL },
+- { NULL, "X-Resource", NULL, NULL },
+- { NULL, "DMX", NULL, NULL },
+- { NULL, NULL, NULL, NULL }
+-};
+-#endif
+-
+ /* List of built-in (statically linked) extensions */
+ static ExtensionModule staticExtensions[] = {
+ #ifdef BEZIER
+- { BezierExtensionInit, "BEZIER", NULL, NULL, NULL },
++ { BezierExtensionInit, "BEZIER", &noBezierExtension, NULL, NULL },
+ #endif
+ #ifdef XTESTEXT1
+ { XTestExtension1Init, "XTEST1", &noTestExtensions, NULL, NULL },
+ #endif
+ #ifdef MITSHM
+- { ShmExtensionInit, SHMNAME, NULL, NULL, NULL },
++ { ShmExtensionInit, SHMNAME, &noMITShmExtension, NULL, NULL },
+ #endif
+ #ifdef XINPUT
+- { XInputExtensionInit, "XInputExtension", NULL, NULL, NULL },
++ { XInputExtensionInit, "XInputExtension", &noXInputExtension, NULL, NULL },
+ #endif
+ #ifdef XTEST
+ { XTestExtensionInit, XTestExtensionName, &noTestExtensions, NULL, NULL },
+ #endif
+ #ifdef XIDLE
+- { XIdleExtensionInit, "XIDLE", NULL, NULL, NULL },
++ { XIdleExtensionInit, "XIDLE", &noXIdleExtension, NULL, NULL },
+ #endif
+ #ifdef XKB
+ { XkbExtensionInit, XkbName, &noXkbExtension, NULL, NULL },
+ #endif
+ #ifdef LBX
+- { LbxExtensionInit, LBXNAME, NULL, NULL, NULL },
++ { LbxExtensionInit, LBXNAME, &noLbxExtension, NULL, NULL },
+ #endif
+ #ifdef XAPPGROUP
+- { XagExtensionInit, XAGNAME, NULL, NULL, NULL },
++ { XagExtensionInit, XAGNAME, &noXagExtension, NULL, NULL },
+ #endif
+ #ifdef XCSECURITY
+- { SecurityExtensionInit, SECURITY_EXTENSION_NAME, NULL, NULL, NULL },
++ { SecurityExtensionInit, SECURITY_EXTENSION_NAME, &noSecurityExtension, NULL, NULL },
+ #endif
+ #ifdef XPRINT
+ { XpExtensionInit, XP_PRINTNAME, NULL, NULL, NULL },
+@@ -610,22 +751,22 @@
+ #endif
+ #ifdef XFIXES
+ /* must be before Render to layer DisplayCursor correctly */
+- { XFixesExtensionInit, "XFIXES", NULL, NULL, NULL },
++ { XFixesExtensionInit, "XFIXES", &noXFixesExtension, NULL, NULL },
+ #endif
+ #ifdef XF86BIGFONT
+- { XFree86BigfontExtensionInit, XF86BIGFONTNAME, NULL, NULL, NULL },
++ { XFree86BigfontExtensionInit, XF86BIGFONTNAME, &noXFree86BigfontExtension, NULL, NULL },
+ #endif
+ #ifdef RENDER
+ { RenderExtensionInit, "RENDER", &noRenderExtension, NULL, NULL },
+ #endif
+ #ifdef RANDR
+- { RRExtensionInit, "RANDR", NULL, NULL, NULL },
++ { RRExtensionInit, "RANDR", &noRRExtension, NULL, NULL },
+ #endif
+ #ifdef COMPOSITE
+ { CompositeExtensionInit, "COMPOSITE", &noCompositeExtension, NULL },
+ #endif
+ #ifdef DAMAGE
+- { DamageExtensionInit, "DAMAGE", NULL, NULL },
++ { DamageExtensionInit, "DAMAGE", &noDamageExtension, NULL },
+ #endif
+ #ifdef XEVIE
+ { XevieExtensionInit, "XEVIE", &noXevieExtension, NULL },
+Index: xc/programs/Xserver/miext/damage/Imakefile
+diff -u xc/programs/Xserver/miext/damage/Imakefile:1.4 xc/programs/Xserver/miext/damage/Imakefile:1.4.2.1
+--- xc/programs/Xserver/miext/damage/Imakefile:1.4 Thu Sep 2 04:04:47 2004
++++ xc/programs/Xserver/miext/damage/Imakefile Wed Dec 15 04:53:06 2004
+@@ -8,8 +8,7 @@
+ #endif
+ #endif
+
+-#if (defined(XWinServer) && XWinServer && BuildXWinMultiWindowExtWM) || \
+- (defined(XDarwinServer) && XDarwinServer && DarwinQuartzSupport)
++#if BuildRootless
+ DEFINES = -DROOTLESS_WORKAROUND
+ #endif
+
+Index: xc/programs/Xserver/miext/damage/damage.c
+diff -u xc/programs/Xserver/miext/damage/damage.c:1.11 xc/programs/Xserver/miext/damage/damage.c:1.11.2.1
+--- xc/programs/Xserver/miext/damage/damage.c:1.11 Fri Sep 3 16:18:23 2004
++++ xc/programs/Xserver/miext/damage/damage.c Mon Dec 13 00:56:07 2004
+@@ -1349,7 +1349,7 @@
+ DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+
+ if (checkGCDamage (pDrawable, pGC))
+- damageText (pDrawable, pGC, x, y, (unsigned long) count, chars,
++ x = damageText (pDrawable, pGC, x, y, (unsigned long) count, chars,
+ Linear8Bit, TT_POLY8);
+ else
+ x = (*pGC->ops->PolyText8)(pDrawable, pGC, x, y, count, chars);
+@@ -1368,7 +1368,7 @@
+ DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+
+ if (checkGCDamage (pDrawable, pGC))
+- damageText (pDrawable, pGC, x, y, (unsigned long) count, (char *) chars,
++ x = damageText (pDrawable, pGC, x, y, (unsigned long) count, (char *) chars,
+ FONTLASTROW(pGC->font) == 0 ? Linear16Bit : TwoD16Bit,
+ TT_POLY16);
+ else
+Index: xc/programs/Xserver/os/WaitFor.c
+diff -u xc/programs/Xserver/os/WaitFor.c:1.2 xc/programs/Xserver/os/WaitFor.c:1.2.4.1
+--- xc/programs/Xserver/os/WaitFor.c:1.2 Fri Apr 23 19:54:28 2004
++++ xc/programs/Xserver/os/WaitFor.c Mon Dec 13 01:45:15 2004
+@@ -663,17 +663,11 @@
+ if (!DPMSEnabled)
+ return;
+
+- if (DPMSStandbyTime > 0) {
+- DPMSStandbyTimer = TimerSet(DPMSStandbyTimer, 0, DPMSStandbyTime,
+- DPMSStandbyTimerExpire, NULL);
+- }
+- if (DPMSSuspendTime > 0) {
+- DPMSSuspendTimer = TimerSet(DPMSSuspendTimer, 0, DPMSSuspendTime,
+- DPMSSuspendTimerExpire, NULL);
+- }
+- if (DPMSOffTime > 0) {
+- DPMSOffTimer = TimerSet(DPMSOffTimer, 0, DPMSOffTime,
+- DPMSOffTimerExpire, NULL);
+- }
++ DPMSStandbyTimer = TimerSet(DPMSStandbyTimer, 0, DPMSStandbyTime,
++ DPMSStandbyTimerExpire, NULL);
++ DPMSSuspendTimer = TimerSet(DPMSSuspendTimer, 0, DPMSSuspendTime,
++ DPMSSuspendTimerExpire, NULL);
++ DPMSOffTimer = TimerSet(DPMSOffTimer, 0, DPMSOffTime,
++ DPMSOffTimerExpire, NULL);
+ }
+ #endif
+Index: xc/programs/Xserver/os/utils.c
+diff -u xc/programs/Xserver/os/utils.c:1.6 xc/programs/Xserver/os/utils.c:1.6.2.3
+--- xc/programs/Xserver/os/utils.c:1.6 Wed Aug 11 22:27:50 2004
++++ xc/programs/Xserver/os/utils.c Wed Dec 8 06:34:31 2004
+@@ -1,4 +1,4 @@
+-/* $XdotOrg: xc/programs/Xserver/os/utils.c,v 1.6 2004/08/11 22:27:50 kem Exp $ */
++/* $XdotOrg: xc/programs/Xserver/os/utils.c,v 1.6.2.3 2004/12/08 06:34:31 gisburn Exp $ */
+ /* $Xorg: utils.c,v 1.5 2001/02/09 02:05:24 xorgcvs Exp $ */
+ /*
+
+@@ -119,8 +119,126 @@
+
+ #ifdef RENDER
+ #include "picture.h"
++#endif
++
++Bool noTestExtensions;
++#ifdef BEZIER
++Bool noBezierExtension = FALSE;
++#endif
++#ifdef BIGREQS
++Bool noBigReqExtension = FALSE;
++#endif
++#ifdef COMPOSITE
++/* COMPOSITE is disabled by default for now until the
++ * interface is stable */
++Bool noCompositeExtension = TRUE;
++#endif
++#ifdef DAMAGE
++Bool noDamageExtension = FALSE;
++#endif
++#ifdef DBE
++Bool noDbeExtension = FALSE;
++#endif
++#ifdef DPSEXT
++Bool noDPSExtension = FALSE;
++#endif
++#ifdef DPMSExtension
++Bool noDPMSExtension = FALSE;
++#endif
++#ifdef EVI
++Bool noEVIExtension = FALSE;
++#endif
++#ifdef FONTCACHE
++Bool noFontCacheExtension = FALSE;
++#endif
++#ifdef GLXEXT
++Bool noGlxExtension = FALSE;
++#endif
++#ifdef LBX
++Bool noLbxExtension = FALSE;
++#endif
++#ifdef SCREENSAVER
++Bool noScreenSaverExtension = FALSE;
++#endif
++#ifdef MITSHM
++Bool noMITShmExtension = FALSE;
++#endif
++#ifdef MITMISC
++Bool noMITMiscExtension = FALSE;
++#endif
++#ifdef MULTIBUFFER
++Bool noMultibufferExtension = FALSE;
++#endif
++#ifdef RANDR
++Bool noRRExtension = FALSE;
++#endif
++#ifdef RENDER
+ Bool noRenderExtension = FALSE;
+ #endif
++#ifdef SHAPE
++Bool noShapeExtension = FALSE;
++#endif
++#ifdef XCSECURITY
++Bool noSecurityExtension = FALSE;
++#endif
++#ifdef XSYNC
++Bool noSyncExtension = FALSE;
++#endif
++#ifdef TOGCUP
++Bool noXcupExtension = FALSE;
++#endif
++#ifdef PEXEXT
++Bool noPexExtension = FALSE;
++#endif
++#ifdef RES
++Bool noResExtension = FALSE;
++#endif
++#ifdef XAPPGROUP
++Bool noXagExtension = FALSE;
++#endif
++#ifdef XCMISC
++Bool noXCMiscExtension = FALSE;
++#endif
++#ifdef XEVIE
++/* Xevie is disabled by default for now until the
++ * interface is stable */
++Bool noXevieExtension = TRUE;
++#endif
++#ifdef XIE
++Bool noXie = FALSE;
++#endif
++#ifdef XF86BIGFONT
++Bool noXFree86BigfontExtension = FALSE;
++#endif
++#ifdef XFreeXDGA
++Bool noXFree86DGAExtension = FALSE;
++#endif
++#ifdef XF86DRI
++Bool noXFree86DRIExtension = FALSE;
++#endif
++#ifdef XF86MISC
++Bool noXFree86MiscExtension = FALSE;
++#endif
++#ifdef XF86VIDMODE
++Bool noXFree86VidModeExtension = FALSE;
++#endif
++#ifdef XFIXES
++Bool noXFixesExtension = FALSE;
++#endif
++/* |noXkbExtension| is defined in xc/programs/Xserver/xkb/xkbInit.c */
++#ifdef PANORAMIX
++/* Xinerama is disabled by default unless enabled via +xinerama */
++Bool noPanoramiXExtension = TRUE;
++#endif
++#ifdef XINPUT
++Bool noXInputExtension = FALSE;
++#endif
++#ifdef XIDLE
++Bool noXIdleExtension = FALSE;
++#endif
++#ifdef XV
++Bool noXvExtension = FALSE;
++#endif
+
+ #define X_INCLUDE_NETDB_H
+ #include <X11/Xos_r.h>
+@@ -128,24 +246,14 @@
+ #include <errno.h>
+
+ Bool CoreDump;
+-Bool noTestExtensions;
+
+ #ifdef PANORAMIX
+-Bool noPanoramiXExtension = TRUE;
+ Bool PanoramiXVisibilityNotifySent = FALSE;
+ Bool PanoramiXMapped = FALSE;
+ Bool PanoramiXWindowExposureSent = FALSE;
+ Bool PanoramiXOneExposeRequest = FALSE;
+ #endif
+
+-#ifdef XEVIE
+-Bool noXevieExtension = TRUE;
+-#endif
+-
+-#ifdef COMPOSITE
+-Bool noCompositeExtension = TRUE;
+-#endif
+-
+ int auditTrailLevel = 1;
+
+ Bool Must_have_memory = FALSE;
+@@ -553,7 +661,7 @@
+ ErrorF("-v screen-saver without video blanking\n");
+ ErrorF("-wm WhenMapped default backing-store\n");
+ ErrorF("-x string loads named extension at init time \n");
+- ErrorF("-maxbigreqsize set maximal bigrequest size \n");
++ ErrorF("-maxbigreqsize set maximal bigrequest size \n");
+ #ifdef PANORAMIX
+ ErrorF("+xinerama Enable XINERAMA extension\n");
+ ErrorF("-xinerama Disable XINERAMA extension\n");
+@@ -900,11 +1008,11 @@
+ defaultBackingStore = WhenMapped;
+ else if ( strcmp( argv[i], "-maxbigreqsize") == 0) {
+ if(++i < argc) {
+- int reqSizeArg = atoi(argv[i]);
++ long reqSizeArg = atol(argv[i]);
+
+ /* Request size > 128MB does not make much sense... */
+- if( reqSizeArg > 0 && reqSizeArg < 128 ) {
+- maxBigRequestSize = (reqSizeArg * 1048576) - 1;
++ if( reqSizeArg > 0L && reqSizeArg < 128L ) {
++ maxBigRequestSize = (reqSizeArg * 1048576L) - 1L;
+ }
+ else
+ {
+Index: xc/programs/mkfontscale/mkfontscale.c
+diff -u xc/programs/mkfontscale/mkfontscale.c:1.2 xc/programs/mkfontscale/mkfontscale.c:1.2.4.1
+--- xc/programs/mkfontscale/mkfontscale.c:1.2 Fri Apr 23 19:54:36 2004
++++ xc/programs/mkfontscale/mkfontscale.c Mon Dec 13 13:50:44 2004
+@@ -19,7 +19,7 @@
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+ */
+-/* $XdotOrg: xc/programs/mkfontscale/mkfontscale.c,v 1.2 2004/04/23 19:54:36 eich Exp $ */
++/* $XdotOrg: xc/programs/mkfontscale/mkfontscale.c,v 1.2.4.1 2004/12/13 13:50:44 gisburn Exp $ */
+ /* $XFree86: xc/programs/mkfontscale/mkfontscale.c,v 1.21 2003/12/10 02:58:07 dawes Exp $ */
+
+ #include <stdio.h>
+@@ -63,7 +63,8 @@
+ #endif
+
+ char *encodings_array[] =
+- { "iso8859-1", "iso8859-2", "iso8859-3", "iso8859-4", "iso8859-5",
++ { "ascii-0",
++ "iso8859-1", "iso8859-2", "iso8859-3", "iso8859-4", "iso8859-5",
+ "iso8859-6", "iso8859-6.8", "iso8859-6.8x", "iso8859-6.16",
+ "iso8859-7", "iso8859-8", "iso8859-9", "iso8859-10",
+ "iso8859-11", "iso8859-12", "iso8859-13", "iso8859-14",
+Index: xc/programs/xdm/resource.c
+diff -u xc/programs/xdm/resource.c:1.2 xc/programs/xdm/resource.c:1.2.4.1
+--- xc/programs/xdm/resource.c:1.2 Fri Apr 23 19:54:42 2004
++++ xc/programs/xdm/resource.c Wed Dec 15 01:53:41 2004
+@@ -1,4 +1,4 @@
+-/* $XdotOrg: xc/programs/xdm/resource.c,v 1.2 2004/04/23 19:54:42 eich Exp $ */
++/* $XdotOrg: xc/programs/xdm/resource.c,v 1.2.4.1 2004/12/15 01:53:41 gisburn Exp $ */
+ /* $Xorg: resource.c,v 1.4 2001/02/09 02:05:40 xorgcvs Exp $ */
+ /*
+
+@@ -237,7 +237,7 @@
+ #if !defined(ARC4_RANDOM)
+ { "randomFile", "RandomFile", DM_STRING, &randomFile,
+ DEF_RANDOM_FILE} ,
+-{ "prgndSocket", "PrngdSocket", DM_STRING, &prngdSocket,
++{ "prngdSocket", "PrngdSocket", DM_STRING, &prngdSocket,
+ DEF_PRNGD_SOCKET},
+ { "prngdPort", "PrngdPort", DM_INT, (char **) &prngdPort,
+ DEF_PRNGD_PORT},
+Index: xc/programs/xedit/lisp/lisp.c
+diff -u xc/programs/xedit/lisp/lisp.c:1.5 xc/programs/xedit/lisp/lisp.c:1.5.2.1
+--- xc/programs/xedit/lisp/lisp.c:1.5 Thu Sep 2 08:40:32 2004
++++ xc/programs/xedit/lisp/lisp.c Wed Dec 15 01:09:36 2004
+@@ -46,7 +46,6 @@
+ #endif
+
+ #if defined(linux)
+-#include <asm/page.h> /* for PAGE_SIZE */
+ #define HAS_GETPAGESIZE
+ #define HAS_SC_PAGESIZE /* _SC_PAGESIZE may be an enum for Linux */
+ #endif
+Index: xc/programs/xkbcomp/README.config
+diff -u xc/programs/xkbcomp/README.config:1.3.2.1 xc/programs/xkbcomp/README.config:1.3.2.2
+--- xc/programs/xkbcomp/README.config:1.3.2.1 Fri Sep 17 15:38:20 2004
++++ xc/programs/xkbcomp/README.config Tue Feb 8 00:44:27 2005
+@@ -6,7 +6,7 @@
+
+ Abstract
+
+- This document describes how to configure X11R6.8.1 XKB from a
++ This document describes how to configure X11R6.8.2 XKB from a
+ user's point a few. It converts basic configuration syntax and
+ gives also a few examples.
+
+@@ -193,4 +193,4 @@
+ compatibility reasons. Avoid using it if it is possible.
+
+
+-$XdotOrg: xc/programs/xkbcomp/README.config,v 1.3.2.1 2004/09/17 15:38:20 kem Exp $
++$XdotOrg: xc/programs/xkbcomp/README.config,v 1.3.2.2 2005/02/08 00:44:27 kem Exp $
+Index: xc/programs/xkbcomp/README.enhancing
+diff -u xc/programs/xkbcomp/README.enhancing:1.3 xc/programs/xkbcomp/README.enhancing:1.3.2.1
+--- xc/programs/xkbcomp/README.enhancing:1.3 Fri Sep 3 23:41:22 2004
++++ xc/programs/xkbcomp/README.enhancing Tue Feb 8 00:44:27 2005
+@@ -132,12 +132,12 @@
+ as of a vector of columns per each keycode (naturally the dimension of this
+ vector may differ for different keycodes). What is it good for? The group is
+ not very useful unless you intend to use more than one logically different
+-set of symbols (like more than one alphabet) defined in a single mapping
+-table. But then, the group has a natural meaning - each symbol set has its
+-own group and changing it means selecting a different one. XKB approach
+-allows up to four different groups. The columns inside each group are called
+-(shift) levels. The X server knows the current group and reports it together
+-with modifier set and with a keycode in key events.
++set of symbols (like more than one alphabet) defined in a single mapping ta-
++ble. But then, the group has a natural meaning - each symbol set has its own
++group and changing it means selecting a different one. XKB approach allows
++up to four different groups. The columns inside each group are called (shift)
++levels. The X server knows the current group and reports it together with
++modifier set and with a keycode in key events.
+
+ To sum it up:
+
+@@ -506,4 +506,4 @@
+ And that should be it. Enjoy creating your own xkb mapping.
+
+
+-$XdotOrg: xc/programs/xkbcomp/README.enhancing,v 1.3 2004/09/03 23:41:22 kem Exp $
++$XdotOrg: xc/programs/xkbcomp/README.enhancing,v 1.3.2.1 2005/02/08 00:44:27 kem Exp $
+Index: xc/programs/xkbcomp/rules/Imakefile
+diff -u xc/programs/xkbcomp/rules/Imakefile:1.3 xc/programs/xkbcomp/rules/Imakefile:1.3.4.1
+--- xc/programs/xkbcomp/rules/Imakefile:1.3 Sat May 29 19:33:22 2004
++++ xc/programs/xkbcomp/rules/Imakefile Wed Dec 15 02:54:52 2004
+@@ -1,5 +1,5 @@
+ XCOMM $Xorg: Imakefile,v 1.3 2000/08/17 19:54:41 cpqbld Exp $
+-XCOMM $XdotOrg: xc/programs/xkbcomp/rules/Imakefile,v 1.3 2004/05/29 19:33:22 alanc Exp $
++XCOMM $XdotOrg: xc/programs/xkbcomp/rules/Imakefile,v 1.3.4.1 2004/12/15 02:54:52 gisburn Exp $
+
+ DATAFILES = README sgi xorg sun
+ LISTFILES = sgi.lst xorg.lst xorg-it.lst sun.lst xorg.xml
+@@ -10,4 +10,6 @@
+ InstallMultiple($(LISTFILES),$(LIBDIR)/xkb/rules)
+ InstallCreateLink($(LIBDIR)/xkb/rules,xorg,xfree86)
+ InstallCreateLink($(LIBDIR)/xkb/rules,xorg.lst,xfree86.lst)
++InstallCreateLink($(LIBDIR)/xkb/rules,xorg-it.lst,xfree86-it.lst)
++InstallCreateLink($(LIBDIR)/xkb/rules,xorg.xml,xfree86.xml)
+ DependTarget()
+Index: xc/programs/xkbcomp/symbols/inet
+diff -u xc/programs/xkbcomp/symbols/inet:1.2 xc/programs/xkbcomp/symbols/inet:1.2.4.1
+--- xc/programs/xkbcomp/symbols/inet:1.2 Fri Apr 23 19:54:52 2004
++++ xc/programs/xkbcomp/symbols/inet Wed Dec 15 03:00:47 2004
+@@ -16,7 +16,7 @@
+ // setxkbmap 'my_kb_layout' -variant 'my_kb_variant' -model 'my_eak_type'
+
+ // All keyboards listed here should be also mentioned in
+-// xc/programs/xkbcomp/rules/xfree86, xfree86.lst and xfree86.xml.
++// xc/programs/xkbcomp/rules: xorg, xorg.lst and xorg.xml.
+
+ // Acer
+
+Index: xc/programs/xkbcomp/symbols/macintosh/us
+diff -u xc/programs/xkbcomp/symbols/macintosh/us:1.2 xc/programs/xkbcomp/symbols/macintosh/us:1.2.4.1
+--- xc/programs/xkbcomp/symbols/macintosh/us:1.2 Fri Apr 23 19:54:54 2004
++++ xc/programs/xkbcomp/symbols/macintosh/us Wed Dec 15 02:12:54 2004
+@@ -147,6 +147,7 @@
+
+ include "compose(rwin)"
+ include "apple(extended)"
++ include "srvr_ctrl(xfree86)"
+
+ // *** FIXME
+ // key <LSGT> { [ quoteleft, asciitilde ] };
+Index: xc/programs/xlsfonts/Imakefile
+diff -u xc/programs/xlsfonts/Imakefile:1.2 xc/programs/xlsfonts/Imakefile:1.2.4.2
+--- xc/programs/xlsfonts/Imakefile:1.2 Fri Apr 23 19:54:58 2004
++++ xc/programs/xlsfonts/Imakefile Mon Dec 13 05:26:50 2004
+@@ -1,12 +1,26 @@
+ XCOMM $Xorg: Imakefile,v 1.3 2000/08/17 19:54:53 cpqbld Exp $
+
++#if BuildXprintLib && BuildXprintClients
++# define XlsFontsUseXprint YES
++#endif /* BuildXprintLib && BuildXprintClients */
+
++#if XlsFontsUseXprint
++ PRINT_LIBS = -lXprintUtil $(XPLIB)
++ PRINT_DEFS = -DBUILD_PRINTSUPPORT
++#endif /* XlsFontsUseXprint */
+
+-XCOMM $XFree86$
+
+ DEPLIBS = $(DEPXONLYLIB)
+-LOCAL_LIBRARIES = $(XONLYLIB)
++LOCAL_LIBRARIES = $(PRINT_LIBS) $(XLIB)
++ DEFINES = $(PRINT_DEFS)
+ SRCS = xlsfonts.c dsimple.c
+ OBJS = xlsfonts.o dsimple.o
+
+ ComplexProgramTarget(xlsfonts)
++
++#ifdef HasDocBookTools
++all:: xlsfonts.man xlsfonts.html
++
++ConvertDocBookToManPage(xlsfonts.sgml, xlsfonts.man)
++ConvertDocBookToHTML(xlsfonts.sgml, xlsfonts.html)
++#endif /* HasDocBookTools */
+Index: xc/programs/xlsfonts/dsimple.c
+diff -u xc/programs/xlsfonts/dsimple.c:1.2 xc/programs/xlsfonts/dsimple.c:1.2.4.1
+--- xc/programs/xlsfonts/dsimple.c:1.2 Fri Apr 23 19:54:58 2004
++++ xc/programs/xlsfonts/dsimple.c Mon Dec 13 05:21:05 2004
+@@ -41,6 +41,9 @@
+ * Written by Mark Lillibridge. Last updated 7/1/87
+ */
+
++#ifdef BUILD_PRINTSUPPORT
++#include <X11/XprintUtil/xprintutil.h>
++#endif /* BUILD_PRINTSUPPORT */
+ #include "dsimple.h"
+
+ /*
+@@ -55,9 +58,13 @@
+
+
+ /* This stuff is defined in the calling program by just_display.h */
+-char *program_name = "unknown_program";
+-Display *dpy;
+-int screen;
++char *program_name = "unknown_program";
++Display *dpy = NULL;
++int screen = 0;
++Bool printer_output = False; /* Video or printer output ? */
++#ifdef BUILD_PRINTSUPPORT
++XPContext pcontext = None;
++#endif /* BUILD_PRINTSUPPORT */
+
+ static void _bitmap_error(int, char *);
+
+@@ -131,6 +138,43 @@
+ }
+
+
++#ifdef BUILD_PRINTSUPPORT
++/*
++ * Get_Printer_Name (argc, argv) Look for -printer, -p,
++ * If found, remove it from command line. Don't go past a lone -.
++ */
++char *Get_Printer_Name(pargc, argv)
++ int *pargc; /* MODIFIED */
++ char **argv; /* MODIFIED */
++{
++ int argc = *pargc;
++ char **pargv = argv+1;
++ char *printername = NULL;
++ int i;
++
++ for (i = 1; i < argc; i++) {
++ char *arg = argv[i];
++
++ if (!strcmp (arg, "-printer") || !strcmp (arg, "-p")) {
++ if (++i >= argc) usage ();
++
++ printername = argv[i];
++ *pargc -= 2;
++ continue;
++ }
++ if (!strcmp(arg,"-")) {
++ while (i<argc)
++ *pargv++ = argv[i++];
++ break;
++ }
++ *pargv++ = arg;
++ }
++
++ *pargv = NULL;
++ return (printername);
++}
++#endif /* BUILD_PRINTSUPPORT */
++
+ /*
+ * Open_Display: Routine to open a display with correct error handling.
+ * Does not require dpy or screen defined on entry.
+@@ -163,8 +207,60 @@
+ int *argc; /* MODIFIED */
+ char **argv; /* MODIFIED */
+ {
+- dpy = Open_Display (Get_Display_Name(argc, argv));
+- screen = DefaultScreen(dpy);
++ char *displayname = NULL,
++ *printername = NULL;
++
++ displayname = Get_Display_Name(argc, argv);
++#ifdef BUILD_PRINTSUPPORT
++ printername = Get_Printer_Name(argc, argv);
++
++ if (displayname && printername) {
++ fprintf (stderr, "%s: you cannot specify -printer (-p) and -display (-d) at the same time.\n",
++ program_name);
++ usage ();
++ }
++
++ if (printername) {
++ printer_output = True;
++
++ if (XpuGetPrinter(printername, &dpy, &pcontext) != 1) {
++ fprintf(stderr, "%s: Cannot open printer '%s'.\n", program_name, printername);
++ exit(EXIT_FAILURE);
++ }
++
++ screen = XScreenNumberOfScreen(XpGetScreenOfContext(dpy, pcontext));
++ }
++ else
++#endif /* BUILD_PRINTSUPPORT */
++ {
++ printer_output = False;
++
++ dpy = Open_Display (displayname);
++ screen = XDefaultScreen(dpy);
++ }
++}
++
++/*
++ * Close_Display: Close display
++ */
++void Close_Display(void)
++{
++ if (dpy == NULL)
++ return;
++
++#ifdef BUILD_PRINTSUPPORT
++ if (printer_output) {
++ XpuClosePrinterDisplay(dpy, pcontext);
++ dpy = NULL;
++ pcontext = None;
++ printer_output = False;
++ }
++ else
++#endif /* BUILD_PRINTSUPPORT */
++ {
++ XCloseDisplay(dpy);
++ dpy = NULL;
++ }
+ }
+
+
+@@ -517,5 +613,6 @@
+ vfprintf(stderr, msg, args);
+ va_end(args);
+ fprintf(stderr, "\n");
+- exit(1);
++ Close_Display();
++ exit(EXIT_FAILURE);
+ }
+Index: xc/programs/xlsfonts/dsimple.h
+diff -u xc/programs/xlsfonts/dsimple.h:1.2 xc/programs/xlsfonts/dsimple.h:1.2.4.1
+--- xc/programs/xlsfonts/dsimple.h:1.2 Fri Apr 23 19:54:58 2004
++++ xc/programs/xlsfonts/dsimple.h Mon Dec 13 05:21:05 2004
+@@ -39,11 +39,23 @@
+ * Send bugs, etc. to chariot@athena.mit.edu.
+ */
+
++ /* Simple helper macros */
++#ifndef MAX
++#define MAX(a,b) (((a)>(b))?(a):(b))
++#endif /* MAX */
++#ifndef MIN
++#define MIN(a,b) (((a)<(b))?(a):(b))
++#endif /* MIN */
++
+ /* Global variables used by routines in just_display.c */
+
+ extern char *program_name; /* Name of this program */
+ extern Display *dpy; /* The current display */
+ extern int screen; /* The current screen */
++extern Bool printer_output; /* Video or printer output ? */
++#ifdef BUILD_PRINTSUPPORT
++extern XPContext pcontext; /* The current print context */
++#endif /* BUILD_PRINTSUPPORT */
+
+ #define INIT_NAME program_name=argv[0] /* use this in main to setup
+ program_name */
+@@ -53,8 +65,12 @@
+ char *Malloc(unsigned);
+ char *Realloc(char *, int);
+ char *Get_Display_Name(int *, char **);
++#ifdef BUILD_PRINTSUPPORT
++char *Get_Printer_Name(int *, char **);
++#endif /* BUILD_PRINTSUPPORT */
+ Display *Open_Display(char *);
+ void Setup_Display_And_Screen(int *, char **);
++void Close_Display(void);
+ XFontStruct *Open_Font(char *);
+ void Beep(void);
+ Pixmap ReadBitmapFile(Drawable, char *, int *, int *, int *, int *);
+Index: xc/programs/xlsfonts/xlsfonts.c
+diff -u xc/programs/xlsfonts/xlsfonts.c:1.2 xc/programs/xlsfonts/xlsfonts.c:1.2.4.2
+--- xc/programs/xlsfonts/xlsfonts.c:1.2 Fri Apr 23 19:54:58 2004
++++ xc/programs/xlsfonts/xlsfonts.c Mon Dec 13 05:26:50 2004
+@@ -31,407 +31,575 @@
+ #include <X11/Xos.h>
+ #include <stdio.h>
+ #include <stdlib.h>
++#include <limits.h>
++#ifdef BUILD_PRINTSUPPORT
++#include <X11/XprintUtil/xprintutil.h>
++#endif /* BUILD_PRINTSUPPORT */
+ #include "dsimple.h"
+
+-#define N_START 1000 /* Maximum # of fonts to start with */
+-
+-int max_output_line_width = 79;
+-int output_line_padding = 3;
+-int columns = 0;
+-
+-#define L_SHORT 0
+-#define L_MEDIUM 1
+-#define L_LONG 2
++#define N_START INT_MAX /* Maximum # of fonts to start with (should
++ * always be be > 10000 as modern OSes like
++ * Solaris 8 already have more than 9000 XLFD
++ * fonts available) */
++
++#define L_SHORT 0
++#define L_MEDIUM 1
++#define L_LONG 2
+ #define L_VERYLONG 3
+
+-Bool sort_output = True;
+-Bool open_instead_of_list = False;
+-int long_list = L_SHORT;
+-int nnames = N_START;
+-int font_cnt;
+-int min_max;
++static int max_output_line_width = 79;
++static int output_line_padding = 3;
++static int columns = 0;
++
++static Bool sort_output = True;
++static Bool open_instead_of_list = False;
++static int long_list = L_SHORT;
++static int nnames = N_START;
++static int font_cnt = 0;
++static int min_max;
++
+ typedef struct {
+- char *name;
+- XFontStruct *info;
++ char *name;
++ XFontStruct *info;
++#ifdef BUILD_PRINTSUPPORT
++ char *listfonts_modes;
++#endif /* BUILD_PRINTSUPPORT */
+ } FontList;
+-FontList *font_list;
+
++static FontList *font_list = NULL;
+
+-static void get_list(char *);
++/* Local prototypes */
++#ifdef BUILD_PRINTSUPPORT
++static Bool IsListfontsModesChangeSupported(char *mode);
++static int SetListfontsModes(const char *attrname, Bool enableattr);
++#endif /* BUILD_PRINTSUPPORT */
++static void get_list(char *pattern);
++static int compare(const void *arg1, const void *arg2);
+ static void show_fonts(void);
+-static void copy_number(char **, char **, int, int);
+-static void do_query_font(Display *, char *);
+-static int compare(const void *, const void *);
+-#ifndef max
+-static int max(int, int);
+-#endif
+-static int IgnoreError(Display *, XErrorEvent *);
+-static void PrintProperty(XFontProp *);
+-static void ComputeFontType(XFontStruct *);
+-static void print_character_metrics(register XFontStruct *);
+-
+-
+-void
+-usage()
+-{
+- fprintf (stderr,"usage: %s [-options] [-fn pattern]\n", program_name);
+- fprintf (stderr, "where options include:\n");
+- fprintf (stderr,
+- " -l[l[l]] give long info about each font\n");
+- fprintf (stderr,
+- " -m give character min and max bounds\n");
+- fprintf (stderr,
+- " -C force columns\n");
+- fprintf (stderr,
+- " -1 force single column\n");
+- fprintf (stderr,
+- " -u keep output unsorted\n");
+- fprintf (stderr,
+- " -o use OpenFont/QueryFont instead of ListFonts\n");
+- fprintf (stderr,
+- " -w width maximum width for multiple columns\n");
+- fprintf (stderr,
+- " -n columns number of columns if multi column\n");
+- fprintf (stderr,
+- " -display displayname X server to contact\n");
+- fprintf (stderr,
+- "\n");
+- exit(1);
+-}
+-
+-int
+-main(argc, argv)
+-int argc;
+-char **argv;
+-{
+- int argcnt = 0, i;
+-
+- INIT_NAME;
+-
+- /* Handle command line arguments, open display */
+- Setup_Display_And_Screen(&argc, argv);
+- for (argv++, argc--; argc; argv++, argc--) {
+- if (argv[0][0] == '-') {
+- if (argcnt > 0) usage ();
+- for (i=1; argv[0][i]; i++)
+- switch(argv[0][i]) {
+- case 'l':
+- long_list++;
+- break;
+- case 'm':
+- min_max++;
+- break;
+- case 'C':
+- columns = 0;
+- break;
+- case '1':
+- columns = 1;
+- break;
+- case 'f':
+- if (--argc <= 0) usage ();
+- argcnt++;
+- argv++;
+- get_list(argv[0]);
+- goto next;
+- case 'w':
+- if (--argc <= 0) usage ();
+- argv++;
+- max_output_line_width = atoi(argv[0]);
+- goto next;
+- case 'n':
+- if (--argc <= 0) usage ();
+- argv++;
+- columns = atoi(argv[0]);
+- goto next;
+- case 'o':
+- open_instead_of_list = True;
+- break;
+- case 'u':
+- sort_output = False;
+- break;
+- default:
+- usage();
+- break;
+- }
+- if (i == 1)
+- usage();
+- } else {
+- argcnt++;
+- get_list(argv[0]);
+- }
+- next: ;
+- }
+- if (argcnt == 0)
+- get_list("*");
+- show_fonts();
+- exit(0);
+-}
+-
+-void
+-get_list(pattern)
+- char *pattern;
+-{
+- int available = nnames+1,
+- i;
+- char **fonts;
+- XFontStruct *info;
+-
+- /* Get list of fonts matching pattern */
+- for (;;) {
+- if (open_instead_of_list) {
+- info = XLoadQueryFont (dpy, pattern);
+-
+- if (info) {
+- fonts = &pattern;
+- available = 1;
+- XUnloadFont (dpy, info->fid);
+- } else {
+- fonts = NULL;
+- }
+- break;
+- }
+-
+- if (long_list == L_MEDIUM)
+- fonts = XListFontsWithInfo(dpy,
+- pattern, nnames, &available, &info);
+- else
+- fonts = XListFonts(dpy, pattern, nnames, &available);
+- if (fonts == NULL || available < nnames)
+- break;
+- if (long_list == L_MEDIUM)
+- XFreeFontInfo(fonts, info, available);
+- else
+- XFreeFontNames(fonts);
+- nnames = available * 2;
+- }
+-
+- if (fonts == NULL) {
+- fprintf(stderr, "%s: pattern \"%s\" unmatched\n",
+- program_name, pattern);
+- return;
+- }
+-
+- font_list = (FontList *)Realloc((char *)font_list,
+- (font_cnt + available) * sizeof(FontList));
+- for (i=0; i<available; i++) {
+- font_list[font_cnt].name = fonts[i];
+- if (long_list == L_MEDIUM)
+- font_list[font_cnt].info = info + i;
+- else
+- font_list[font_cnt].info = NULL;
+- font_cnt++;
+- }
+-}
+-
+-static int
+-compare(arg1, arg2)
+- const void *arg1;
+- const void *arg2;
+-{
+- const FontList *f1 = arg1;
+- const FontList *f2 = arg2;
+- const char *p1 = f1->name;
+- const char *p2 = f2->name;
+-
+- while (*p1 && *p2 && *p1 == *p2)
+- p1++, p2++;
+- return(*p1 - *p2);
+-}
+-
+-void
+-show_fonts()
+-{
+- int i;
+-
+- if (font_cnt == 0)
+- return;
+-
+- /* first sort the output */
+- if (sort_output) qsort(font_list, font_cnt, sizeof(FontList), compare);
+-
+- if (long_list > L_MEDIUM) {
+- for (i = 0; i < font_cnt; i++) {
+- do_query_font (dpy, font_list[i].name);
+- }
+- return;
+- }
+-
+- if (long_list == L_MEDIUM) {
+- XFontStruct *pfi;
+- char *string;
+-
+- printf("DIR ");
+- printf("MIN ");
+- printf("MAX ");
+- printf("EXIST ");
+- printf("DFLT ");
+- printf("PROP ");
+- printf("ASC ");
+- printf("DESC ");
+- printf("NAME");
+- printf("\n");
+- for (i=0; i<font_cnt; i++) {
+- pfi = font_list[i].info;
+- if (!pfi) {
+- fprintf (stderr,
+- "%s: no font information for font \"%s\".\n",
+- program_name,
+- font_list[i].name ?
+- font_list[i].name : "");
+- continue;
+- }
+- switch(pfi->direction) {
+- case FontLeftToRight: string = "-->"; break;
+- case FontRightToLeft: string = "<--"; break;
+- default: string = "???"; break;
+- }
+- printf("%-4s", string);
+- if (pfi->min_byte1 == 0
+- && pfi->max_byte1 == 0) {
+- printf(" %3d ", pfi->min_char_or_byte2);
+- printf(" %3d ", pfi->max_char_or_byte2);
+- } else {
+- printf("*%3d ", pfi->min_byte1);
+- printf("*%3d ", pfi->max_byte1);
+- }
+- printf("%5s ", pfi->all_chars_exist ? "all" : "some");
+- printf("%4d ", pfi->default_char);
+- printf("%4d ", pfi->n_properties);
+- printf("%3d ", pfi->ascent);
+- printf("%4d ", pfi->descent);
+- printf("%s\n", font_list[i].name);
+- if (min_max) {
+- char min[ BUFSIZ ],
+- max[ BUFSIZ ];
+- char *pmax = max,
+- *pmin = min;
+-
+- strcpy(pmin, " min(l,r,w,a,d) = (");
+- strcpy(pmax, " max(l,r,w,a,d) = (");
+- pmin += strlen(pmin);
+- pmax += strlen(pmax);
+-
+- copy_number(&pmin, &pmax,
+- pfi->min_bounds.lbearing,
+- pfi->max_bounds.lbearing);
+- *pmin++ = *pmax++ = ',';
+- copy_number(&pmin, &pmax,
+- pfi->min_bounds.rbearing,
+- pfi->max_bounds.rbearing);
+- *pmin++ = *pmax++ = ',';
+- copy_number(&pmin, &pmax,
+- pfi->min_bounds.width,
+- pfi->max_bounds.width);
+- *pmin++ = *pmax++ = ',';
+- copy_number(&pmin, &pmax,
+- pfi->min_bounds.ascent,
+- pfi->max_bounds.ascent);
+- *pmin++ = *pmax++ = ',';
+- copy_number(&pmin, &pmax,
+- pfi->min_bounds.descent,
+- pfi->max_bounds.descent);
+- *pmin++ = *pmax++ = ')';
+- *pmin = *pmax = '\0';
+- printf("%s\n", min);
+- printf("%s\n", max);
+- }
+- }
+- return;
+- }
+-
+- if ((columns == 0 && isatty(1)) || columns > 1) {
+- int width,
+- max_width = 0,
+- lines_per_column,
+- j,
+- index;
+-
+- for (i=0; i<font_cnt; i++) {
+- width = strlen(font_list[i].name);
+- if (width > max_width)
+- max_width = width;
+- }
+- if (max_width == 0)
+- Fatal_Error("all %d fontnames listed are zero length",
+- font_cnt);
+-
+- if (columns == 0) {
+- if ((max_width * 2) + output_line_padding >
+- max_output_line_width) {
+- columns = 1;
+- } else {
+- max_width += output_line_padding;
+- columns = ((max_output_line_width +
+- output_line_padding) / max_width);
+- }
+- } else {
+- max_width += output_line_padding;
+- }
+- if (columns <= 1) goto single_column;
+-
+- if (font_cnt < columns)
+- columns = font_cnt;
+- lines_per_column = (font_cnt + columns - 1) / columns;
+-
+- for (i=0; i<lines_per_column; i++) {
+- for (j=0; j<columns; j++) {
+- index = j * lines_per_column + i;
+- if (index >= font_cnt)
+- break;
+- if (j+1 == columns)
+- printf("%s", font_list[ index ].name);
+- else
+- printf("%-*s",
+- max_width,
+- font_list[ index ].name);
+- }
+- printf("\n");
+- }
+- return;
+- }
+-
+- single_column:
+- for (i=0; i<font_cnt; i++)
+- printf("%s\n", font_list[i].name);
+-}
+-
+-#ifndef max
+-static int
+-max(i, j)
+- int i, j;
+-{
+- if (i > j)
+- return (i);
+- return(j);
+-}
+-#endif
+-
+-void
+-copy_number(pp1, pp2, n1, n2)
+- char **pp1, **pp2;
+- int n1, n2;
+-{
+- char *p1 = *pp1;
+- char *p2 = *pp2;
+- int w;
+-
+- sprintf(p1, "%d", n1);
+- sprintf(p2, "%d", n2);
+- w = max(strlen(p1), strlen(p2));
+- sprintf(p1, "%*d", w, n1);
+- sprintf(p2, "%*d", w, n2);
+- p1 += strlen(p1);
+- p2 += strlen(p2);
+- *pp1 = p1;
+- *pp2 = p2;
++static void copy_number(char **pp1, char**pp2, int n1, int n2);
++static int IgnoreError(Display *disp, XErrorEvent *event);
++static void PrintProperty(XFontProp *prop);
++static void ComputeFontType(XFontStruct *fs);
++static void print_character_metrics(register XFontStruct *info);
++static void do_query_font (Display *dpy, char *name);
++
++void usage(void)
++{
++ fprintf (stderr, "usage: %s [-options] [-fn pattern]\n", program_name);
++ fprintf (stderr, "where options include:\n");
++ fprintf (stderr, " -l[l[l]] give long info about each font\n");
++ fprintf (stderr, " -m give character min and max bounds\n");
++ fprintf (stderr, " -C force columns\n");
++ fprintf (stderr, " -1 force single column\n");
++ fprintf (stderr, " -u keep output unsorted\n");
++#ifdef BUILD_PRINTSUPPORT
++ fprintf (stderr, " -b list printer builtin fonts\n");
++ fprintf (stderr, " -B do not list printer builtin fonts\n");
++ fprintf (stderr, " -g list glyph fonts\n");
++ fprintf (stderr, " -G do not list glyph fonts\n");
++ fprintf (stderr, " -x mode enable listfont mode\n");
++ fprintf (stderr, " -X mode disable listfont mode\n");
++#endif /* BUILD_PRINTSUPPORT */
++ fprintf (stderr, " -o use OpenFont/QueryFont instead of ListFonts\n");
++ fprintf (stderr, " -w width maximum width for multiple columns\n");
++ fprintf (stderr, " -n columns number of columns if multi column\n");
++ fprintf (stderr, " -display displayname X server to contact\n");
++ fprintf (stderr, " -d displayname (alias for -display displayname)\n");
++#ifdef BUILD_PRINTSUPPORT
++ fprintf (stderr, " -printer printername printer to use\n");
++ fprintf (stderr, " -p printername (alias for -p printername)\n");
++#endif /* BUILD_PRINTSUPPORT */
++ fprintf (stderr, "\n");
++ Close_Display();
++ exit(EXIT_FAILURE);
++}
++
++int main(int argc, char **argv)
++{
++ int argcnt = 0, i;
++ char *mode;
++
++ INIT_NAME;
++
++ /* Handle command line arguments, open display */
++ Setup_Display_And_Screen(&argc, argv);
++
++#ifdef BUILD_PRINTSUPPORT
++ if (printer_output) {
++ /* XListFonts*()/XLoadFont*() honor xp-listfonts-modes only
++ * if there is an context _SET_ for this display */
++ XpSetContext(dpy, pcontext);
++ }
++#endif /* BUILD_PRINTSUPPORT */
++
++ for (argv++, argc--; argc; argv++, argc--) {
++ if (argv[0][0] == '-') {
++ if (argcnt > 0) usage ();
++ for (i=1; argv[0][i]; i++)
++ switch(argv[0][i]) {
++ case 'l':
++ long_list++;
++ break;
++ case 'm':
++ min_max++;
++ break;
++ case 'C':
++ columns = 0;
++ break;
++ case '1':
++ columns = 1;
++ break;
++ case 'f': /* "-fn" */
++ if (--argc <= 0) usage ();
++ if (argv[0][i+1] != 'n') usage ();
++ argcnt++;
++ argv++;
++ get_list(argv[0]);
++ goto next;
++ case 'w':
++ if (--argc <= 0) usage ();
++ argv++;
++ max_output_line_width = atoi(argv[0]);
++ goto next;
++ case 'n':
++ if (--argc <= 0) usage ();
++ argv++;
++ columns = atoi(argv[0]);
++ goto next;
++ case 'o':
++ open_instead_of_list = True;
++ break;
++ case 'u':
++ sort_output = False;
++ break;
++#ifdef BUILD_PRINTSUPPORT
++ case 'b':
++ mode = "xp-list-internal-printer-fonts";
++ if (!printer_output)
++ Fatal_Error("Option '%c' only supported for printers.", argv[0][i]);
++ if (!IsListfontsModesChangeSupported(mode))
++ Fatal_Error("Printer does not support changing '%s'.", mode);
++ SetListfontsModes(mode, True);
++ break;
++ case 'B':
++ mode = "xp-list-internal-printer-fonts";
++ if (!printer_output)
++ Fatal_Error("Option '%c' only supported for printers.", argv[0][i]);
++ if (!IsListfontsModesChangeSupported(mode))
++ Fatal_Error("Printer does not support changing '%s'.", mode);
++ SetListfontsModes(mode, False);
++ break;
++ case 'g':
++ mode = "xp-list-glyph-fonts";
++ if (!printer_output)
++ Fatal_Error("Option '%c' only supported for printers.", argv[0][i]);
++ if (!IsListfontsModesChangeSupported(mode))
++ Fatal_Error("Printer does not support changing '%s'.", mode);
++ SetListfontsModes(mode, True);
++ break;
++ case 'G':
++ mode = "xp-list-glyph-fonts";
++ if (!printer_output)
++ Fatal_Error("Option '%c' only supported for printers.", argv[0][i]);
++ if (!IsListfontsModesChangeSupported(mode))
++ Fatal_Error("Printer does not support changing '%s'.", mode);
++ SetListfontsModes(mode, False);
++ break;
++ case 'x':
++ if (--argc <= 0) usage ();
++ argv++;
++ mode = argv[0];
++ if (!printer_output)
++ Fatal_Error("Option '%c' only supported for printers.", argv[0][i-1]);
++ if (!IsListfontsModesChangeSupported(mode))
++ Fatal_Error("Printer does not support changing '%s'.", mode);
++ SetListfontsModes(mode, True);
++ goto next;
++ case 'X':
++ if (--argc <= 0) usage ();
++ argv++;
++ mode = argv[0];
++ if (!printer_output)
++ Fatal_Error("Option '%c' only supported for printers.", argv[0][i-1]);
++ if (!IsListfontsModesChangeSupported(mode))
++ Fatal_Error("Printer does not support changing '%s'.", mode);
++ SetListfontsModes(mode, False);
++ goto next;
++#endif /* BUILD_PRINTSUPPORT */
++ default:
++ usage();
++ break;
++ }
++ if (i == 1)
++ usage();
++ } else {
++ argcnt++;
++ get_list(argv[0]);
++ }
++ next: ;
++ }
++
++ if (argcnt == 0)
++ get_list("*");
++
++ show_fonts();
++
++ Close_Display();
++ return EXIT_SUCCESS;
++}
++
++#ifdef BUILD_PRINTSUPPORT
++/* This should be moved to XprintUtils */
++static
++Bool IsListfontsModesChangeSupported(char *mode)
++{
++ char *value;
++ Bool isSupported;
++
++ value = XpGetOneAttribute(dpy, pcontext, XPPrinterAttr, "xp-listfonts-modes-supported");
++ if (!value)
++ return False;
++
++ isSupported = (strstr(value, mode) != NULL)?(True):(False);
++ XFree(value);
++
++ return isSupported;
++}
++
++/* XXX: This should be moved to XprintUtils (and should have a Document/Page-level
++ * option and should verify that the matching leven supports xp-listfonts-modes
++ * changes)*/
++static
++int SetListfontsModes(const char *attrname, Bool enableattr)
++{
++ char *value,
++ *newvalue;
++
++ value = XpGetOneAttribute(dpy, pcontext, XPDocAttr, "xp-listfonts-modes");
++ if (!value)
++ value = strdup("");
++
++ /* Set attribute */
++ if (enableattr)
++ {
++ /* Return success if |attrname| is already set */
++ if (strstr(value, attrname) != NULL)
++ {
++ XFree(value);
++ return 1; /* success */
++ }
++
++ newvalue = malloc(strlen(value) + strlen(attrname) + 2);
++ if (!newvalue)
++ {
++ XFree(value);
++ Fatal_Error("SetListfontsModes: No memory.");
++ }
++
++ sprintf(newvalue, "%s %s", value, attrname);
++ XpuSetOneAttribute(dpy, pcontext, XPDocAttr, "*xp-listfonts-modes", newvalue, XPAttrMerge);
++
++ free(newvalue);
++ XFree(value);
++ return 1; /* success */
++ }
++ else
++ {
++ char *s, /* copy string "source" */
++ *d; /* copy string "destination" */
++
++ /* Return success if |attrname| not set */
++ d = strstr(value, attrname);
++ if (d == NULL)
++ {
++ XFree(value);
++ return 1; /* success */
++ }
++
++ /* strip |attrname| from |value| */
++ s = d+strlen(attrname);
++ while( (*d++ = *s++) != '\0' )
++ ;
++
++ XpuSetOneAttribute(dpy, pcontext, XPDocAttr, "*xp-listfonts-modes", value, XPAttrMerge);
++
++ XFree(value);
++ return 1; /* success */
++ }
++}
++#endif /* BUILD_PRINTSUPPORT */
++
++static
++void get_list(char *pattern)
++{
++ int available = nnames+1,
++ i;
++ char **fonts;
++ XFontStruct *info;
++
++ /* Get list of fonts matching pattern */
++ for (;;) {
++ if (open_instead_of_list) {
++ info = XLoadQueryFont (dpy, pattern);
++
++ if (info) {
++ fonts = &pattern;
++ available = 1;
++ XUnloadFont (dpy, info->fid);
++ } else {
++ fonts = NULL;
++ }
++ break;
++ }
++
++ if (long_list == L_MEDIUM)
++ fonts = XListFontsWithInfo(dpy, pattern, nnames, &available, &info);
++ else
++ fonts = XListFonts(dpy, pattern, nnames, &available);
++ if (fonts == NULL || available < nnames)
++ break;
++ if (long_list == L_MEDIUM)
++ XFreeFontInfo(fonts, info, available);
++ else
++ XFreeFontNames(fonts);
++ nnames = available * 2;
++ }
++
++ if (fonts == NULL) {
++ fprintf(stderr, "%s: pattern \"%s\" unmatched\n",
++ program_name, pattern);
++ return;
++ }
++
++ font_list = (FontList *)Realloc((char *)font_list,
++ (font_cnt + available) * sizeof(FontList));
++ for (i=0; i<available; i++) {
++ font_list[font_cnt].name = fonts[i];
++ if (long_list == L_MEDIUM)
++ font_list[font_cnt].info = info + i;
++ else
++ font_list[font_cnt].info = NULL;
++
++#ifdef BUILD_PRINTSUPPORT
++ if (printer_output) {
++ char *listfonts_modes;
++
++ listfonts_modes = XpGetOneAttribute(dpy, pcontext, XPDocAttr, "xp-listfonts-modes");
++
++ /* Save status of xp-listfonts-modes */
++ font_list[font_cnt].listfonts_modes = strdup(listfonts_modes?listfonts_modes:"");
++
++ if (listfonts_modes)
++ XFree(listfonts_modes);
++ }
++ else
++ {
++ font_list[font_cnt].listfonts_modes = NULL;
++ }
++#endif /* BUILD_PRINTSUPPORT */
++
++ font_cnt++;
++ }
++}
++
++static
++int compare(const void *arg1, const void *arg2)
++{
++ const FontList *f1 = arg1;
++ const FontList *f2 = arg2;
++ const char *p1 = f1->name;
++ const char *p2 = f2->name;
++
++ while (*p1 && *p2 && *p1 == *p2)
++ p1++, p2++;
++ return(*p1 - *p2);
++}
++
++static
++void show_fonts(void)
++{
++ int i;
++
++ if (font_cnt == 0)
++ return;
++
++ /* first sort the output */
++ if (sort_output) qsort(font_list, font_cnt, sizeof(FontList), compare);
++
++ if (long_list > L_MEDIUM) {
++ for (i = 0; i < font_cnt; i++) {
++#ifdef BUILD_PRINTSUPPORT
++ if (printer_output) {
++ /* Restore saved xp-listfonts-modes status */
++ XpuSetOneAttribute(dpy, pcontext, XPDocAttr, "*xp-listfonts-modes", font_list[i].listfonts_modes, XPAttrMerge);
++ }
++#endif /* BUILD_PRINTSUPPORT */
++
++ do_query_font (dpy, font_list[i].name);
++ }
++ return;
++ }
++
++ if (long_list == L_MEDIUM) {
++ XFontStruct *pfi;
++ char *string;
++
++ printf("DIR ");
++ printf("MIN ");
++ printf("MAX ");
++ printf("EXIST ");
++ printf("DFLT ");
++ printf("PROP ");
++ printf("ASC ");
++ printf("DESC ");
++ printf("NAME");
++ printf("\n");
++ for (i=0; i<font_cnt; i++) {
++ pfi = font_list[i].info;
++ if (!pfi) {
++ fprintf(stderr, "%s: no font information for font \"%s\".\n",
++ program_name,
++ font_list[i].name ?
++ font_list[i].name : "");
++ continue;
++ }
++ switch(pfi->direction) {
++ case FontLeftToRight: string = "-->"; break;
++ case FontRightToLeft: string = "<--"; break;
++ default: string = "???"; break;
++ }
++ printf("%-4s", string);
++ if (pfi->min_byte1 == 0 &&
++ pfi->max_byte1 == 0) {
++ printf(" %3d ", pfi->min_char_or_byte2);
++ printf(" %3d ", pfi->max_char_or_byte2);
++ } else {
++ printf("*%3d ", pfi->min_byte1);
++ printf("*%3d ", pfi->max_byte1);
++ }
++ printf("%5s ", pfi->all_chars_exist ? "all" : "some");
++ printf("%4d ", pfi->default_char);
++ printf("%4d ", pfi->n_properties);
++ printf("%3d ", pfi->ascent);
++ printf("%4d ", pfi->descent);
++ printf("%s\n", font_list[i].name);
++ if (min_max) {
++ char min[ BUFSIZ ],
++ max[ BUFSIZ ];
++ char *pmax = max,
++ *pmin = min;
++
++ strcpy(pmin, " min(l,r,w,a,d) = (");
++ strcpy(pmax, " max(l,r,w,a,d) = (");
++ pmin += strlen(pmin);
++ pmax += strlen(pmax);
++
++ copy_number(&pmin, &pmax,
++ pfi->min_bounds.lbearing,
++ pfi->max_bounds.lbearing);
++ *pmin++ = *pmax++ = ',';
++ copy_number(&pmin, &pmax,
++ pfi->min_bounds.rbearing,
++ pfi->max_bounds.rbearing);
++ *pmin++ = *pmax++ = ',';
++ copy_number(&pmin, &pmax,
++ pfi->min_bounds.width,
++ pfi->max_bounds.width);
++ *pmin++ = *pmax++ = ',';
++ copy_number(&pmin, &pmax,
++ pfi->min_bounds.ascent,
++ pfi->max_bounds.ascent);
++ *pmin++ = *pmax++ = ',';
++ copy_number(&pmin, &pmax,
++ pfi->min_bounds.descent,
++ pfi->max_bounds.descent);
++ *pmin++ = *pmax++ = ')';
++ *pmin = *pmax = '\0';
++ printf("%s\n", min);
++ printf("%s\n", max);
++ }
++ }
++ return;
++ }
++
++ if ((columns == 0 && isatty(1)) || columns > 1) {
++ int width,
++ max_width = 0,
++ lines_per_column,
++ j,
++ index;
++
++ for (i=0; i<font_cnt; i++) {
++ width = strlen(font_list[i].name);
++ if (width > max_width)
++ max_width = width;
++ }
++ if (max_width == 0)
++ Fatal_Error("all %d fontnames listed are zero length", font_cnt);
++
++ if (columns == 0) {
++ if ((max_width * 2) + output_line_padding >
++ max_output_line_width) {
++ columns = 1;
++ } else {
++ max_width += output_line_padding;
++ columns = ((max_output_line_width +
++ output_line_padding) / max_width);
++ }
++ } else {
++ max_width += output_line_padding;
++ }
++ if (columns <= 1) goto single_column;
++
++ if (font_cnt < columns)
++ columns = font_cnt;
++ lines_per_column = (font_cnt + columns - 1) / columns;
++
++ for (i=0; i<lines_per_column; i++) {
++ for (j=0; j<columns; j++) {
++ index = j * lines_per_column + i;
++ if (index >= font_cnt)
++ break;
++ if (j+1 == columns)
++ printf("%s", font_list[ index ].name);
++ else
++ printf("%-*s",
++ max_width,
++ font_list[ index ].name);
++ }
++ printf("\n");
++ }
++ return;
++ }
++
++ single_column:
++ for (i=0; i<font_cnt; i++)
++ printf("%s\n", font_list[i].name);
++}
++
++static
++void copy_number(char **pp1, char**pp2, int n1, int n2)
++{
++ char *p1 = *pp1;
++ char *p2 = *pp2;
++ int w;
++
++ sprintf(p1, "%d", n1);
++ sprintf(p2, "%d", n2);
++ w = MAX(strlen(p1), strlen(p2));
++ sprintf(p1, "%*d", w, n1);
++ sprintf(p2, "%*d", w, n2);
++ p1 += strlen(p1);
++ p2 += strlen(p2);
++ *pp1 = p1;
++ *pp2 = p2;
+ }
+
+
+
+ /* ARGSUSED */
+-static int IgnoreError(disp, event)
+- Display *disp;
+- XErrorEvent *event;
++static
++int IgnoreError(Display *disp, XErrorEvent *event)
+ {
+ return 0;
+ }
+@@ -446,8 +614,8 @@
+
+ #define PrintBounds(_what,_ptr) \
+ { register XCharStruct *p = (_ptr); \
+- printf (bounds_metrics_fmt, _what, p->width, p->lbearing, \
+- p->rbearing, p->ascent, p->descent, p->attributes); }
++ printf (bounds_metrics_fmt, (_what), p->width, p->lbearing, \
++ p->rbearing, p->ascent, p->descent, p->attributes); }
+
+
+ static char* stringValued [] = { /* values are atoms */
+@@ -474,7 +642,14 @@
+ "RASTERIZER_VERSION",
+
+ /* other registered font properties (see the X.org Registry, sec. 15) */
++
++#ifdef BUILD_PRINTSUPPORT
++ /* Used by Xprint's Postscript and PDF DDX */
+ "_ADOBE_POSTSCRIPT_FONTNAME",
++
++ /* Used by Xprint's PCL DDXs */
++ "PCL_FONT_NAME",
++#endif /* BUILD_PRINTSUPPORT */
+
+ /* unregistered font properties */
+ "CHARSET_COLLECTIONS",
+@@ -488,8 +663,8 @@
+ NULL
+ };
+
+-static void PrintProperty (prop)
+- XFontProp *prop;
++static
++void PrintProperty(XFontProp *prop)
+ {
+ char *atom, *value;
+ char nosuch[40];
+@@ -498,9 +673,9 @@
+
+ atom = XGetAtomName(dpy, prop->name);
+ if (!atom) {
+- atom = nosuch;
+- nosuch[0] = '\0';
+- (void)sprintf (atom, "No such atom = %ld", prop->name);
++ atom = nosuch;
++ nosuch[0] = '\0';
++ (void)sprintf (atom, "No such atom = %ld", prop->name);
+ }
+ printf (" %s", atom);
+
+@@ -510,20 +685,20 @@
+ putchar(' ');
+
+ for (i = 0; ; i++) {
+- if (stringValued[i] == NULL) {
+- printf ("%ld\n", prop->card32);
+- break;
+- }
+- if (strcmp(stringValued[i], atom) == 0) {
+- value = XGetAtomName(dpy, prop->card32);
+- if (value == NULL)
+- printf ("%ld (expected string value)\n", prop->card32);
+- else {
+- printf ("%s\n", value);
+- XFree (value);
+- }
+- break;
+- }
++ if (stringValued[i] == NULL) {
++ printf ("%ld\n", prop->card32);
++ break;
++ }
++ if (strcmp(stringValued[i], atom) == 0) {
++ value = XGetAtomName(dpy, prop->card32);
++ if (value == NULL)
++ printf ("%ld (expected string value)\n", prop->card32);
++ else {
++ printf ("%s\n", value);
++ XFree (value);
++ }
++ break;
++ }
+ }
+ if (atom != nosuch) XFree (atom);
+ XSetErrorHandler (oldhandler);
+@@ -531,8 +706,7 @@
+
+
+ static void
+-ComputeFontType (fs)
+- XFontStruct *fs;
++ComputeFontType(XFontStruct *fs)
+ {
+ int i;
+ Bool char_cell = True;
+@@ -542,66 +716,65 @@
+
+ printf (" font type:\t\t");
+ if (fs->min_bounds.width != fs->max_bounds.width) {
+- printf ("Proportional (min and max widths not equal)\n");
+- return;
++ printf ("Proportional (min and max widths not equal)\n");
++ return;
+ }
+
+ if (awatom) {
+- for (i = 0; i < fs->n_properties; i++) {
+- if (fs->properties[i].name == awatom &&
+- (fs->max_bounds.width * 10) != fs->properties[i].card32) {
+- char_cell = False;
+- reason = "font width not equal to AVERAGE_WIDTH";
+- break;
+- }
+- }
++ for (i = 0; i < fs->n_properties; i++) {
++ if (fs->properties[i].name == awatom &&
++ (fs->max_bounds.width * 10) != fs->properties[i].card32) {
++ char_cell = False;
++ reason = "font width not equal to AVERAGE_WIDTH";
++ break;
++ }
++ }
+ }
+
+ if (fs->per_char) {
+- for (i = fs->min_char_or_byte2, cs = fs->per_char;
+- i <= fs->max_char_or_byte2; i++, cs++) {
+- if (cs->width == 0) continue;
+- if (cs->width != fs->max_bounds.width) {
+- /* this shouldn't happen since we checked above */
+- printf ("Proportional (characters not all the same width)\n");
+- return;
+- }
+- if (char_cell) {
+- if (cs->width < 0) {
+- if (!(cs->width <= cs->lbearing &&
+- cs->lbearing <= cs->rbearing &&
+- cs->rbearing <= 0)) {
+- char_cell = False;
+- reason = "ink outside bounding box";
+- }
+- } else {
+- if (!(0 <= cs->lbearing &&
+- cs->lbearing <= cs->rbearing &&
+- cs->rbearing <= cs->width)) {
+- char_cell = False;
+- reason = "ink outside bounding box";
+- }
+- }
+- if (!(cs->ascent <= fs->ascent &&
+- cs->descent <= fs->descent)) {
+- char_cell = False;
+- reason = "characters not all same ascent or descent";
+- }
+- }
+- }
++ for (i = fs->min_char_or_byte2, cs = fs->per_char;
++ i <= fs->max_char_or_byte2; i++, cs++) {
++ if (cs->width == 0) continue;
++ if (cs->width != fs->max_bounds.width) {
++ /* this shouldn't happen since we checked above */
++ printf ("Proportional (characters not all the same width)\n");
++ return;
++ }
++ if (char_cell) {
++ if (cs->width < 0) {
++ if (!(cs->width <= cs->lbearing &&
++ cs->lbearing <= cs->rbearing &&
++ cs->rbearing <= 0)) {
++ char_cell = False;
++ reason = "ink outside bounding box";
++ }
++ } else {
++ if (!(0 <= cs->lbearing &&
++ cs->lbearing <= cs->rbearing &&
++ cs->rbearing <= cs->width)) {
++ char_cell = False;
++ reason = "ink outside bounding box";
++ }
++ }
++ if (!(cs->ascent <= fs->ascent &&
++ cs->descent <= fs->descent)) {
++ char_cell = False;
++ reason = "characters not all same ascent or descent";
++ }
++ }
++ }
+ }
+
+ printf ("%s", char_cell ? "Character Cell" : "Monospaced");
+ if (reason) printf (" (%s)", reason);
+ printf ("\n");
+-
++
+ return;
+ }
+
+
+ static void
+-print_character_metrics (info)
+- register XFontStruct *info;
++print_character_metrics(register XFontStruct *info)
+ {
+ register XCharStruct *pc = info->per_char;
+ register int i, j;
+@@ -610,49 +783,46 @@
+ printf (" character metrics:\n");
+ saven = ((info->min_byte1 << 8) | info->min_char_or_byte2);
+ for (j = info->min_byte1; j <= info->max_byte1; j++) {
+- n = saven;
+- for (i = info->min_char_or_byte2; i <= info->max_char_or_byte2; i++) {
+- char *s = XKeysymToString ((KeySym) n);
+- printf (char_metrics_fmt, j, i, n, pc->width, pc->lbearing,
+- pc->rbearing, pc->ascent, pc->descent, pc->attributes,
+- s ? s : ".");
+- pc++;
+- n++;
+- }
+- saven += 256;
++ n = saven;
++ for (i = info->min_char_or_byte2; i <= info->max_char_or_byte2; i++) {
++ char *s = XKeysymToString ((KeySym) n);
++ printf (char_metrics_fmt, j, i, n, pc->width, pc->lbearing,
++ pc->rbearing, pc->ascent, pc->descent, pc->attributes,
++ s ? s : ".");
++ pc++;
++ n++;
++ }
++ saven += 256;
+ }
+ }
+
+-
+-void
+-do_query_font (dpy, name)
+- Display *dpy;
+- char *name;
++static
++void do_query_font (Display *dpy, char *name)
+ {
+ register int i;
+ register XFontStruct *info = XLoadQueryFont (dpy, name);
+
+ if (!info) {
+- fprintf (stderr, "%s: unable to get info about font \"%s\"\n",
+- program_name, name);
+- return;
++ fprintf (stderr, "%s: unable to get info about font \"%s\"\n",
++ program_name, name);
++ return;
+ }
+ printf ("name: %s\n", name ? name : "(nil)");
+ printf (" direction:\t\t%s\n", ((info->direction == FontLeftToRight)
+- ? "left to right" : "right to left"));
++ ? "left to right" : "right to left"));
+ printf (" indexing:\t\t%s\n",
+- ((info->min_byte1 == 0 && info->max_byte1 == 0) ? "linear" :
+- "matrix"));
++ ((info->min_byte1 == 0 && info->max_byte1 == 0) ? "linear" :
++ "matrix"));
+ printf (" rows:\t\t\t0x%02x thru 0x%02x (%d thru %d)\n",
+- info->min_byte1, info->max_byte1,
+- info->min_byte1, info->max_byte1);
++ info->min_byte1, info->max_byte1,
++ info->min_byte1, info->max_byte1);
+ printf (" columns:\t\t0x%02x thru 0x%02x (%d thru %d)\n",
+- info->min_char_or_byte2, info->max_char_or_byte2,
+- info->min_char_or_byte2, info->max_char_or_byte2);
++ info->min_char_or_byte2, info->max_char_or_byte2,
++ info->min_char_or_byte2, info->max_char_or_byte2);
+ printf (" all chars exist:\t%s\n",
+- (info->all_chars_exist) ? "yes" : "no");
++ (info->all_chars_exist) ? "yes" : "no");
+ printf (" default char:\t\t0x%04x (%d)\n",
+- info->default_char, info->default_char);
++ info->default_char, info->default_char);
+ printf (" ascent:\t\t%d\n", info->ascent);
+ printf (" descent:\t\t%d\n", info->descent);
+ ComputeFontType (info);
+@@ -660,11 +830,13 @@
+ PrintBounds ("min", &info->min_bounds);
+ PrintBounds ("max", &info->max_bounds);
+ if (info->per_char && long_list >= L_VERYLONG)
+- print_character_metrics (info);
++ print_character_metrics (info);
+ printf (" properties:\t\t%d\n", info->n_properties);
+ for (i = 0; i < info->n_properties; i++)
+- PrintProperty (&info->properties[i]);
++ PrintProperty (&info->properties[i]);
+ printf ("\n");
+
+ XFreeFontInfo (NULL, info, 1);
+ }
++
++
+Index: xc/programs/xlsfonts/xlsfonts.man
+diff -u xc/programs/xlsfonts/xlsfonts.man:1.2 xc/programs/xlsfonts/xlsfonts.man:1.2.4.2
+--- xc/programs/xlsfonts/xlsfonts.man:1.2 Fri Apr 23 19:54:58 2004
++++ xc/programs/xlsfonts/xlsfonts.man Wed Dec 15 07:17:48 2004
+@@ -1,105 +1,175 @@
+-.\" $Xorg: xlsfonts.man,v 1.4 2001/02/09 02:05:55 xorgcvs Exp $
+-.\" Copyright 1988, 1998 The Open Group
+-.\"
+-.\" Permission to use, copy, modify, distribute, and sell this software and its
+-.\" documentation for any purpose is hereby granted without fee, provided that
+-.\" the above copyright notice appear in all copies and that both that
+-.\" copyright notice and this permission notice appear in supporting
+-.\" documentation.
+-.\"
+-.\" 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 OPEN GROUP 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 Open Group 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 Open Group.
+-.\"
+-.\" $XFree86: xc/programs/xlsfonts/xlsfonts.man,v 1.7 2001/01/27 18:21:18 dawes Exp $
+-.\"
+-.TH XLSFONTS 1 __xorgversion__
++.\" -*- coding: us-ascii -*-
++.TH xlsfonts __appmansuffix__ "8 October 2004"
+ .SH NAME
+ xlsfonts \- server font list displayer for X
+ .SH SYNOPSIS
+-.B xlsfonts
+-[\-options ...] [\-fn pattern]
++.ad l
++\fBxlsfonts\fR \kx
++.if (\nxu > (\n(.lu / 2)) .nr x (\n(.lu / 5)
++'in \n(.iu+\nxu
++[\fB\-display \fBhost:dpy\fR\fR] [\fB\-l\fR] [\fB\-ll\fR] [\fB\-lll\fR] [\fB\-m\fR] [\fB\-C\fR] [\fB\-1\fR] [\fB\-w \fBwidth\fR\fR] [\fB\-n \fBcolumns\fR\fR] [\fB\-u\fR] [\fB\-o\fR] [\fB\-fn \fBpattern\fR\fR]
++'in \n(.iu-\nxu
++.ad b
++.PP
++.ad l
++\fBxlsfonts\fR \kx
++.if (\nxu > (\n(.lu / 2)) .nr x (\n(.lu / 5)
++'in \n(.iu+\nxu
++\fB\-printer \fBprintername\fR\fR [\fB\-l\fR] [\fB\-ll\fR] [\fB\-lll\fR] [\fB\-m\fR] [\fB\-C\fR] [\fB\-1\fR] [\fB\-w \fBwidth\fR\fR] [\fB\-n \fBcolumns\fR\fR] [\fB\-u\fR] [\fB\-o\fR] [\fB\-b\fR] [\fB\-B\fR] [\fB\-g\fR] [\fB\-G\fR] [\fB\-x \fBmode\fR\fR] [\fB\-X \fBmode\fR\fR] [\fB\-fn \fBpattern\fR\fR]
++'in \n(.iu-\nxu
++.ad b
+ .SH DESCRIPTION
+-.I Xlsfonts
+-lists the fonts that match the given \fIpattern\fP.
+-The wildcard character "*" may be used to match any sequence of
+-characters (including none), and "?" to match any single character.
++xlsfonts lists the fonts that match the given pattern.
++The wildcard character "*" may be used to match any sequence of characters
++(including none), and "?" to match any single character.
+ If no pattern is given, "*" is assumed.
+ .PP
+-The "*" and "?" characters must be quoted to prevent them from
+-being expanded by the shell.
+-.SH "OPTIONS"
+-.PP
+-.TP 8
+-.B \-display \fIhost\fP:\fIdpy\fP
++The "*" and "?" characters must be quoted to prevent them from being expanded by the shell.
++.SH OPTIONS
++.TP
++\fB\-display \fIhost:dpy\fB\fR
+ This option specifies the X server to contact.
+-.PP
+-.TP 8
+-.B \-l
+-Lists some attributes of the font on one line in addition to its name.
+-.TP 8
+-.B \-ll
+-Lists font properties in addition to \fB\-l\fP output.
+-.TP 8
+-.B \-lll
+-Lists character metrics in addition to \fB\-ll\fP output.
+-.TP 8
+-.B \-m
+-This option indicates that long listings should also print the minimum and
+-maximum bounds of each font.
+-.TP 8
+-.B \-C
+-This option indicates that listings should use multiple columns. This is the
+-same as \fB\-n 0\fP.
+-.TP 8
+-.B \-1
+-This option indicates that listings should use a single column. This is the
+-same as \fB\-n 1\fP.
+-.TP 8
+-.B \-w \fIwidth\fP
+-This option specifies the width in characters that should be used in
+-figuring out how many columns to print. The default is 79.
+-.TP 8
+-.B \-n \fIcolumns\fP
+-This option specifies the number of columns to use in displaying the output.
+-By default, it will attempt to fit as many columns of font names into the
+-number of character specified by \fB\-w \fIwidth\fR.
+-.TP 8
+-.B \-u
++.TP
++\fB\-printer \fIprintername\fB\fR
++This option specifies the Xprint printer to contact.
++.TP
++\fB\-d \fIhost:dpy\fB\fR
++Same as \fB\-display \fIhost:dpy\fB\fR.
++.TP
++\fB\-p \fIprintername\fB\fR
++Same as \fB\-printer \fIprintername\fB\fR.
++.TP
++\fB\-l\fR
++Lists some attributes of the font on one line in addition
++to its name.
++.TP
++\fB\-ll\fR
++Lists font properties in addition to \fB\-l\fR output.
++.TP
++\fB\-lll\fR
++Lists character metrics in addition to \fB\-ll\fR output.
++.TP
++\fB\-m\fR
++This option indicates that long listings should also print
++the minimum and maximum bounds of each font.
++.TP
++\fB\-C\fR
++This option indicates that listings should use multiple columns.
++This is the same as \fB\-n 0\fR.
++.TP
++\fB\-1\fR
++This option indicates that listings should use a single column.
++This is the same as \fB\-n 1\fR.
++.TP
++\fB\-w \fIwidth\fB\fR
++This option specifies the width in characters that should be
++used in figuring out how many columns to print.
++The default is 79.
++.TP
++\fB\-n \fIcolumns\fB\fR
++This option specifies the number of columns to use in
++displaying the output. By default, it will attempt to
++fit as many columns of font names into the number of
++character specified by \fB\-w\fR width.
++.TP
++\fB\-u\fR
+ This option indicates that the output should be left unsorted.
+-.TP 8
+-.B \-o
+-This option indicates that \fIxlsfonts\fP should do an \fBOpenFont\fP (and
+-\fBQueryFont\fP, if appropriate) rather than a \fBListFonts\fP. This is
+-useful if \fBListFonts\fP or \fBListFontsWithInfo\fP fail to list a known
+-font (as is the case with some scaled font systems).
+-.TP 8
+-.B \-fn \fIpattern\fP
++.TP
++\fB\-o\fR
++This option indicates that xlsfonts should do an OpenFont
++(and QueryFont, if appropriate) rather than a ListFonts.
++This is useful if ListFonts or ListFontsWithInfo fail to
++list a known font (as is the case with some scaled font
++systems).
++.TP
++\fB\-b\fR
++List printer builtin fonts.
++This is the same as \fB\-x xp\-list\-internal\-printer\-fonts\fR.
++
++(printer mode only)
++.TP
++\fB\-B\fR
++Do not list printer builtin fonts.
++This is the same as \fB\-X xp\-list\-internal\-printer\-fonts\fR.
++
++(printer mode only)
++.TP
++\fB\-g\fR
++List glyph fonts.
++This is the same as \fB\-x xp\-list\-glyph\-fonts\fR.
++
++(printer mode only)
++.TP
++\fB\-G\fR
++Do not list glyph fonts.
++This is the same as \fB\-X xp\-list\-glyph\-fonts\fR.
++
++(printer mode only)
++.TP
++\fB\-x \fImode\fB\fR
++Enable listfont mode \fImode\fR.
++
++Supported modes are:
++.RS
++.TP
++xp-listinternal-printer-fonts
++If \fBxp\-listinternal\-printer\-fonts\fR was set
++(via option \fB\-b\fR or
++\fB\-x xp\-listinternal\-printer\-fonts\fR xlsfonts
++will include all of the fonts defined as internal printer fonts.
++.TP
++xp-list-glyph-fonts
++If \fBxp\-list\-glyph\-fonts\fR was set (via option \fB\-g\fR or
++\fB\-x xp\-list\-glyph\-fonts\fR) xlsfonts will
++include all of the fonts available to the server which have
++glyphs associated with them.
++.RE
++
++
++The default value is implicitly determined by the ddx driver to be the
++all of the listfonts modes specified in the \fBxp\-listfonts\-modes\-supported\fR
++printer attribute.
++
++
++The value of \fBxp\-listfonts\-modes\-supported\fR and
++\fBxp\-listfonts\-modes\fR (the defaults) can be looked-up via
++\fBxplsprinters\fR(__appmansuffix__).
++
++
++(printer mode only)
++.TP
++\fB\-X \fImode\fB\fR
++Disable listfont mode \fImode\fR.
++See option \fB\-x\fR for a list of valid
++\fImode\fR values.
++
++(printer mode only)
++.TP
++\fB\-fn \fIpattern\fB\fR
+ This option specifies the font name pattern to match.
+-.PP
+ .SH "SEE ALSO"
+-X(__miscmansuffix__), Xserver(1), xset(1), xfd(1),
+-.I "X Logical Font Description Conventions"
++\fBX\fR(__miscmansuffix__), \fBXprint\fR(__miscmansuffix__), \fBXserver\fR(__appmansuffix__), \fBxset\fR(__appmansuffix__), \fBxfd\fR(__appmansuffix__), \fBxplsprinters\fR(__appmansuffix__), X Logical Font Description Conventions
+ .SH ENVIRONMENT
+-.TP 8
+-.B DISPLAY
+-to get the default host and display to use.
++.TP
++\fBDISPLAY\fR
++\fBDISPLAY\fR must be set to get the default host and display to use.
++.TP
++\fBXPSERVERLIST\fR
++\fBXPSERVERLIST\fR must be set for the \fB\-printer\fR option
++identifying the available Xprint servers.
++See \fBXprint\fR(__miscmansuffix__)
++for more details.
+ .SH BUGS
+-Doing ``xlsfonts -l'' can tie up your server for a very long time.
+-This is really a bug with single-threaded non-preemptable servers, not with
+-this program.
++Doing ``xlsfonts -l'' can tie up your server for a very long time.
++This is really a bug with single-threaded
++non-preemptable servers, not with this program.
+ .SH AUTHOR
+-Mark Lillibridge, MIT Project Athena; Jim Fulton, MIT X Consortium;
+-Phil Karlton, SGI
++
++Mark Lillibridge
++.PP
++Jim Fulton
++.PP
++Phil Karlton
++.PP
++Roland Mainz
++
+Index: xc/programs/xlsfonts/xlsfonts.sgml
+diff -u /dev/null xc/programs/xlsfonts/xlsfonts.sgml:1.2.4.2
+--- /dev/null Fri Feb 11 21:35:36 2005
++++ xc/programs/xlsfonts/xlsfonts.sgml Wed Dec 15 07:17:48 2004
+@@ -0,0 +1,473 @@
++<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.2//EN" 'http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd'>
++
++<!-- Process this file with DocBook tools to generate the output format
++(such as manual pages or HTML documents).
++
++Note that strings like __appmansuffix__, __filemansuffix__, __libmansuffix__,
++__miscmansuffix__ etc. have to be replaced first (in theory that's the
++job of ENTITIES but some XML tools are highly allergic to such stuff... ;-().
++A quick way to do that is to filter this document via
++/usr/bin/sed "s/__appmansuffix__/${MANSUFFIX}/g;s/__filemansuffix__/${FILEMANSUFFIX}/g;s/__libmansuffix__/${LIBMANSUFFIX}/g;s/__miscmansuffix__/${MISCMANSUFFIX}/g"
++assuming that env vars like MANSUFFIX etc. have been set to the matching
++manual volume numbers.
++ -->
++
++<refentry>
++ <refmeta>
++ <refentrytitle>xlsfonts</refentrytitle>
++ <manvolnum>__appmansuffix__</manvolnum>
++ </refmeta>
++
++ <refnamediv>
++ <refname>xlsfonts</refname>
++ <refpurpose>server font list displayer for X</refpurpose>
++ </refnamediv>
++
++ <refsynopsisdiv>
++ <!-- video mode -->
++ <cmdsynopsis>
++ <command>xlsfonts</command>
++
++ <arg><option>-display <replaceable>host:dpy</replaceable></option></arg>
++
++ <arg><option>-l</option></arg>
++
++ <arg><option>-ll</option></arg>
++
++ <arg><option>-lll</option></arg>
++
++ <arg><option>-m</option></arg>
++
++ <arg><option>-C</option></arg>
++
++ <arg><option>-1</option></arg>
++
++ <arg><option>-w <replaceable>width</replaceable></option></arg>
++
++ <arg><option>-n <replaceable>columns</replaceable></option></arg>
++
++ <arg><option>-u</option></arg>
++
++ <arg><option>-o</option></arg>
++
++ <arg><option>-fn <replaceable>pattern</replaceable></option></arg>
++ </cmdsynopsis>
++
++ <!-- printer mode -->
++ <cmdsynopsis>
++ <command>xlsfonts</command>
++
++ <arg choice="plain"><option>-printer <replaceable>printername</replaceable></option></arg>
++
++ <arg><option>-l</option></arg>
++
++ <arg><option>-ll</option></arg>
++
++ <arg><option>-lll</option></arg>
++
++ <arg><option>-m</option></arg>
++
++ <arg><option>-C</option></arg>
++
++ <arg><option>-1</option></arg>
++
++ <arg><option>-w <replaceable>width</replaceable></option></arg>
++
++ <arg><option>-n <replaceable>columns</replaceable></option></arg>
++
++ <arg><option>-u</option></arg>
++
++ <arg><option>-o</option></arg>
++
++ <arg><option>-b</option></arg>
++
++ <arg><option>-B</option></arg>
++
++ <arg><option>-g</option></arg>
++
++ <arg><option>-G</option></arg>
++
++ <arg><option>-x <replaceable>mode</replaceable></option></arg>
++
++ <arg><option>-X <replaceable>mode</replaceable></option></arg>
++
++ <arg><option>-fn <replaceable>pattern</replaceable></option></arg>
++ </cmdsynopsis>
++ </refsynopsisdiv>
++
++ <refsect1>
++ <title>DESCRIPTION</title>
++
++ <para>
++ <command>xlsfonts</command> lists the fonts that match the given pattern.
++ The wildcard character "*" may be used to match any sequence of characters
++ (including none), and "?" to match any single character.
++ If no pattern is given, "*" is assumed.
++ </para>
++ <para>
++ The "*" and "?" characters must be quoted to prevent them from being expanded by the shell.
++ </para>
++ </refsect1>
++
++ <refsect1>
++ <title>OPTIONS</title>
++
++ <variablelist>
++ <varlistentry>
++ <term><option>-display <replaceable>host:dpy</replaceable></option>
++ </term>
++ <listitem>
++ <para>
++ This option specifies the X server to contact.
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>-printer <replaceable>printername</replaceable></option>
++ </term>
++ <listitem>
++ <para>
++ This option specifies the Xprint printer to contact.
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>-d <replaceable>host:dpy</replaceable></option>
++ </term>
++ <listitem>
++ <para>
++ Same as <option>-display <replaceable>host:dpy</replaceable></option>.
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>-p <replaceable>printername</replaceable></option>
++ </term>
++ <listitem>
++ <para>
++ Same as <option>-printer <replaceable>printername</replaceable></option>.
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>-l</option>
++ </term>
++ <listitem>
++ <para>
++ Lists some attributes of the font on one line in addition
++ to its name.
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>-ll</option>
++ </term>
++ <listitem>
++ <para>
++ Lists font properties in addition to <option>-l</option> output.
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>-lll</option>
++ </term>
++ <listitem>
++ <para>
++ Lists character metrics in addition to <option>-ll</option> output.
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>-m</option>
++ </term>
++ <listitem>
++ <para>
++ This option indicates that long listings should also print
++ the minimum and maximum bounds of each font.
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>-C</option>
++ </term>
++ <listitem>
++ <para>
++ This option indicates that listings should use multiple columns.
++ This is the same as <option>-n 0</option>.
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>-1</option>
++ </term>
++ <listitem>
++ <para>
++ This option indicates that listings should use a single column.
++ This is the same as <option>-n 1</option>.
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>-w <replaceable>width</replaceable></option>
++ </term>
++ <listitem>
++ <para>
++ This option specifies the width in characters that should be
++ used in figuring out how many columns to print.
++ The default is 79.
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>-n <replaceable>columns</replaceable></option>
++ </term>
++ <listitem>
++ <para>
++ This option specifies the number of columns to use in
++ displaying the output. By default, it will attempt to
++ fit as many columns of font names into the number of
++ character specified by <option>-w</option> width.
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>-u</option>
++ </term>
++ <listitem>
++ <para>
++ This option indicates that the output should be left unsorted.
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>-o</option>
++ </term>
++ <listitem>
++ <para>
++ This option indicates that xlsfonts should do an OpenFont
++ (and QueryFont, if appropriate) rather than a ListFonts.
++ This is useful if ListFonts or ListFontsWithInfo fail to
++ list a known font (as is the case with some scaled font
++ systems).
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>-b</option>
++ </term>
++ <listitem>
++ <para>
++ List printer builtin fonts.
++ This is the same as <option>-x xp-list-internal-printer-fonts</option>.
++ </para>
++ <para>
++ (printer mode only)
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>-B</option>
++ </term>
++ <listitem>
++ <para>
++ Do not list printer builtin fonts.
++ This is the same as <option>-X xp-list-internal-printer-fonts</option>.
++ </para>
++ <para>
++ (printer mode only)
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>-g</option>
++ </term>
++ <listitem>
++ <para>
++ List glyph fonts.
++ This is the same as <option>-x xp-list-glyph-fonts</option>.
++ </para>
++ <para>
++ (printer mode only)
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>-G</option>
++ </term>
++ <listitem>
++ <para>
++ Do not list glyph fonts.
++ This is the same as <option>-X xp-list-glyph-fonts</option>.
++ </para>
++ <para>
++ (printer mode only)
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>-x <replaceable>mode</replaceable></option>
++ </term>
++ <listitem>
++ <para>
++ Enable listfont mode <replaceable>mode</replaceable>.
++ </para>
++ <para>
++ Supported modes are:
++ <variablelist>
++ <varlistentry>
++ <term>xp-listinternal-printer-fonts</term>
++ <listitem>
++ <para>
++ If <literal>xp-listinternal-printer-fonts</literal> was set
++ (via option <option>-b</option> or
++ <option>-x xp-listinternal-printer-fonts</option> <command>xlsfonts</command>
++ will include all of the fonts defined as internal printer fonts.
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term>xp-list-glyph-fonts</term>
++ <listitem>
++ <para>
++ If <literal>xp-list-glyph-fonts</literal> was set (via option <option>-g</option> or
++ <option>-x xp-list-glyph-fonts</option>) <command>xlsfonts</command> will
++ include all of the fonts available to the server which have
++ glyphs associated with them.
++ </para>
++ </listitem>
++ </varlistentry>
++ </variablelist>
++
++ <para>
++ The default value is implicitly determined by the ddx driver to be the
++ all of the listfonts modes specified in the <literal>xp-listfonts-modes-supported</literal>
++ printer attribute.
++ </para>
++
++ <para>
++ The value of <literal>xp-listfonts-modes-supported</literal> and
++ <literal>xp-listfonts-modes</literal> (the defaults) can be looked-up via
++ <citerefentry><refentrytitle>xplsprinters</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry>.
++ </para>
++ </para>
++
++ <para>
++ (printer mode only)
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>-X <replaceable>mode</replaceable></option>
++ </term>
++ <listitem>
++ <para>
++ Disable listfont mode <replaceable>mode</replaceable>.
++ See option <option>-x</option> for a list of valid
++ <replaceable>mode</replaceable> values.
++ </para>
++ <para>
++ (printer mode only)
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>-fn <replaceable>pattern</replaceable></option>
++ </term>
++ <listitem>
++ <para>
++ This option specifies the font name pattern to match.
++ </para>
++ </listitem>
++ </varlistentry>
++ </variablelist>
++ </refsect1>
++
++ <refsect1>
++ <title>SEE ALSO</title>
++ <para>
++ <simplelist type="inline">
++ <member><citerefentry><refentrytitle>X</refentrytitle><manvolnum>__miscmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>Xprint</refentrytitle><manvolnum>__miscmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>Xserver</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xset</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xfd</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xplsprinters</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member>X Logical Font Description Conventions</member>
++ </simplelist>
++ </para>
++ </refsect1>
++
++ <refsect1>
++ <title>ENVIRONMENT</title>
++
++ <variablelist>
++ <varlistentry>
++ <term><envar>DISPLAY</envar>
++ </term>
++ <listitem>
++ <para><envar>DISPLAY</envar> must be set to get the default host and display to use.
++ </para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><envar>XPSERVERLIST</envar>
++ </term>
++ <listitem>
++ <para><envar>XPSERVERLIST</envar> must be set for the <option>-printer</option> option
++ identifying the available Xprint servers.
++ See <citerefentry><refentrytitle>Xprint</refentrytitle><manvolnum>__miscmansuffix__</manvolnum></citerefentry>
++ for more details.
++ </para>
++ </listitem>
++ </varlistentry>
++ </variablelist>
++ </refsect1>
++
++ <refsect1>
++ <title>BUGS</title>
++
++ <para>
++ Doing ``xlsfonts -l'' can tie up your server for a very long time.
++ This is really a bug with single-threaded
++ non-preemptable servers, not with this program.
++ </para>
++ </refsect1>
++
++ <refsect1>
++ <title>AUTHOR</title>
++
++ <para>
++ <simplelist>
++ <member><othercredit><firstname>Mark</firstname> <surname>Lillibridge</surname> <affiliation><orgname>MIT Project Athena</orgname></affiliation></othercredit></member>
++ <member><othercredit><firstname>Jim</firstname> <surname>Fulton</surname> <affiliation><orgname>MIT X Consortium</orgname></affiliation></othercredit></member>
++ <member><othercredit><firstname>Phil</firstname> <surname>Karlton</surname> <affiliation><orgname>SGI</orgname></affiliation></othercredit></member>
++ <member><othercredit><firstname>Roland</firstname> <surname>Mainz</surname> <affiliation><orgname>University Giessen</orgname></affiliation></othercredit></member>
++ </simplelist>
++ </para>
++ </refsect1>
++
++</refentry>
++
++
+Index: xc/programs/xman/print.c
+diff -u xc/programs/xman/print.c:1.1 xc/programs/xman/print.c:1.1.4.1
+--- xc/programs/xman/print.c:1.1 Tue Jun 8 02:44:35 2004
++++ xc/programs/xman/print.c Mon Dec 13 07:15:56 2004
+@@ -294,6 +294,10 @@
+ apd->jobtitle = jobtitle;
+
+ n = 0;
++ /* Override any geometry resource settings as XawPrintShell adjusts it's size
++ * to the current page siue when |XawPrintLAYOUTMODE_DRAWABLEAREA| or
++ * |XawPrintLAYOUTMODE_PAGESIZE| are used. */
++ XtSetArg(args[n], XtNgeometry, "+0+0"); n++;
+ XtSetArg(args[n], XawNlayoutMode, XawPrintLAYOUTMODE_DRAWABLEAREA); n++;
+ apd->printshell = CreatePrintShell(toplevel, apd->pscreen, "printshell", args, n);
+
+Index: xc/programs/xman/search.c
+diff -u xc/programs/xman/search.c:1.5 xc/programs/xman/search.c:1.5.2.1
+--- xc/programs/xman/search.c:1.5 Thu Sep 2 08:40:33 2004
++++ xc/programs/xman/search.c Mon Dec 13 07:11:51 2004
+@@ -169,6 +169,10 @@
+ return(NULL);
+ }
+
++ if (strlen(search_string) >= BUFSIZ) {
++ PopupWarning(man_globals, "Search string too long.");
++ return(NULL);
++ }
+ if (search_string[0] == ' ') {
+ PopupWarning(man_globals, "First character cannot be a space.");
+ return(NULL);
+@@ -205,16 +209,17 @@
+ strcpy(path,manpath);
+ }
+
+- sprintf(label,"Results of apropos search on: %s", search_string);
++ snprintf(label, sizeof(label),
++ "Results of apropos search on: %s", search_string);
+
+ #ifdef NO_MANPATH_SUPPORT /* not quite correct, but the best I can do. */
+- sprintf(cmdbuf, APROPOS_FORMAT, search_string, mantmp);
++ snprintf(cmdbuf, sizeof(cmdbuf), APROPOS_FORMAT, search_string, mantmp);
+ #else
+- sprintf(cmdbuf, APROPOS_FORMAT, path, search_string, mantmp);
++ snprintf(cmdbuf, sizeof(cmdbuf), APROPOS_FORMAT, path, search_string, mantmp);
+ #endif
+
+ if(system(cmdbuf) != 0) { /* execute search. */
+- sprintf(error_buf,"Something went wrong trying to run %s\n",cmdbuf);
++ snprintf(error_buf, sizeof(error_buf), "Something went wrong trying to run %s\n",cmdbuf);
+ PopupWarning(man_globals, error_buf);
+ }
+
+@@ -232,7 +237,7 @@
+
+ unlink(mantmp);
+
+- sprintf(string_buf,"%s: nothing appropriate", search_string);
++ snprintf(string_buf, sizeof(string_buf), "%s: nothing appropriate", search_string);
+
+ /*
+ * Check first LOOKLINES lines for "nothing appropriate".
+@@ -263,14 +268,15 @@
+ return(NULL);
+ }
+
+- strcpy(man_globals->manpage_title,label);
++ snprintf(man_globals->manpage_title, sizeof(man_globals->manpage_title),
++ "%s", label);
+ ChangeLabel(man_globals->label,label);
+ fseek(file, 0L, SEEK_SET); /* reset file to point at top. */
+ }
+ else { /* MANUAL SEACH */
+ file = DoManualSearch(man_globals, search_string);
+ if (file == NULL) {
+- sprintf(string_buf,"No manual entry for %s.", search_string);
++ snprintf(string_buf, sizeof(string_buf), "No manual entry for %s.", search_string);
+ ChangeLabel(man_globals->label, string_buf);
+ if (man_globals->label == NULL)
+ PopupWarning(man_globals, string_buf);
+Index: xc/programs/xmodmap/pf.c
+diff -u xc/programs/xmodmap/pf.c:1.1.1.1 xc/programs/xmodmap/pf.c:1.1.1.1.6.1
+--- xc/programs/xmodmap/pf.c:1.1.1.1 Fri Nov 14 16:49:23 2003
++++ xc/programs/xmodmap/pf.c Wed Dec 8 06:16:20 2004
+@@ -87,8 +87,12 @@
+ int i;
+ char *cp;
+
+- len = strlen (buffer);
+-
++ /* copy buffer since it may point to unwritable date */
++ len = strlen(buffer);
++ cp = chk_malloc(len + 1);
++ strcpy(cp, buffer);
++ buffer = cp;
++
+ for (i = 0; i < len; i++) { /* look for blank lines */
+ register char c = buffer[i];
+ if (!(isspace(c) || c == '\n')) break;
+Index: xc/programs/xmodmap/xmodmap.c
+diff -u xc/programs/xmodmap/xmodmap.c:1.2 xc/programs/xmodmap/xmodmap.c:1.2.4.1
+--- xc/programs/xmodmap/xmodmap.c:1.2 Fri Apr 23 19:54:59 2004
++++ xc/programs/xmodmap/xmodmap.c Wed Dec 8 06:16:20 2004
+@@ -51,6 +51,16 @@
+ exit (status);
+ }
+
++void *
++chk_malloc(size_t n_bytes)
++{
++ void *buf = malloc(n_bytes);
++ if (!buf) {
++ fprintf(stderr, "%s: Could not allocate %d bytes\n", ProgramName, (int)n_bytes);
++ Exit(-1);
++ }
++ return buf;
++}
+
+ static char *help_message[] = {
+ "\nwhere options include:",
+@@ -244,9 +254,10 @@
+ case 's':
+ case 'l':
+ case 'c': {
+- char cmd[80]; /* big enough to hold line */
++ char *cmd;
+ didAnything = True;
+ if (++i >= argc) usage ();
++ cmd = chk_malloc (strlen ("remove control = ") + strlen (argv[i]) + 1);
+ (void) sprintf (cmd, "remove %s = %s",
+ ((arg[1] == 's') ? "shift" :
+ ((arg[1] == 'l') ? "lock" :
+@@ -265,10 +276,10 @@
+ case '3':
+ case '4':
+ case '5': {
+- char cmd[80]; /* big enough to hold line */
++ char *cmd;
+ didAnything = True;
+ if (++i >= argc) usage ();
+-
++ cmd = chk_malloc (strlen ("add modX = ") + strlen (argv[i]) + 1);
+ (void) sprintf (cmd, "add mod%c = %s", arg[1], argv[i]);
+ process_line (cmd);
+ continue;
+@@ -281,9 +292,10 @@
+ case 's':
+ case 'l':
+ case 'c': {
+- char cmd[80]; /* big enough to hold line */
++ char *cmd;
+ didAnything = True;
+ if (++i >= argc) usage ();
++ cmd = chk_malloc (strlen ("add control = ") + strlen (argv[i]) + 1);
+ (void) sprintf (cmd, "add %s = %s",
+ ((arg[1] == 's') ? "shift" :
+ ((arg[1] == 'l') ? "lock" :
+Index: xc/programs/xmodmap/xmodmap.h
+diff -u xc/programs/xmodmap/xmodmap.h:1.2 xc/programs/xmodmap/xmodmap.h:1.2.4.1
+--- xc/programs/xmodmap/xmodmap.h:1.2 Fri Apr 23 19:54:59 2004
++++ xc/programs/xmodmap/xmodmap.h Wed Dec 8 06:16:20 2004
+@@ -56,3 +56,5 @@
+ extern void PrintKeyTable(Bool exprs, FILE *fp);
+ extern void PrintPointerMap(FILE *fp);
+ extern int SetPointerMap(unsigned char *map, int n);
++
++extern void *chk_malloc(size_t n_bytes);
+Index: xc/programs/xmore/print.c
+diff -u xc/programs/xmore/print.c:1.4 xc/programs/xmore/print.c:1.4.4.1
+--- xc/programs/xmore/print.c:1.4 Tue Jun 8 02:44:35 2004
++++ xc/programs/xmore/print.c Mon Dec 13 07:15:56 2004
+@@ -305,6 +305,10 @@
+ apd->jobtitle = jobtitle;
+
+ n = 0;
++ /* Override any geometry resource settings as XawPrintShell adjusts it's size
++ * to the current page siue when |XawPrintLAYOUTMODE_DRAWABLEAREA| or
++ * |XawPrintLAYOUTMODE_PAGESIZE| are used. */
++ XtSetArg(args[n], XtNgeometry, "+0+0"); n++;
+ XtSetArg(args[n], XawNlayoutMode, XawPrintLAYOUTMODE_DRAWABLEAREA); n++;
+ apd->printshell = CreatePrintShell(toplevel, apd->pscreen, "printshell", args, n);
+
+Index: xc/programs/xmore/xmore.man
+diff -u xc/programs/xmore/xmore.man:1.1 xc/programs/xmore/xmore.man:1.1.4.1
+--- xc/programs/xmore/xmore.man:1.1 Mon May 24 03:17:44 2004
++++ xc/programs/xmore/xmore.man Tue Feb 1 23:09:30 2005
+@@ -1,25 +1,23 @@
+-.\" This manpage has been automatically generated by docbook2man
+-.\" from a DocBook document. This tool can be found at:
+-.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
+-.\" Please send any bug reports, improvements, comments, patches,
+-.\" etc. to Steve Cheng <steve@ggi-project.org>.
+-.TH "XMORE" "__mansuffix__" "24 May 2004" "" ""
++.\" -*- coding: us-ascii -*-
++.TH xmore __appmansuffix__ "1 February 2005"
+ .SH NAME
+ xmore \- plain text display program for the X Window System
+ .SH SYNOPSIS
+-
+-\fBxmore\fR [ \fB\fIfilename\fB\fR]
+-
+-.SH "DESCRIPTION"
+-.PP
+-\fBxmore\fR is a plain text browser.
+-.SH "ENVIRONMENT"
+-.TP
+-\fBXPSERVERLIST \fR
++.ad l
++\fBxmore\fR \kx
++.if (\nxu > (\n(.lu / 2)) .nr x (\n(.lu / 5)
++'in \n(.iu+\nxu
++[\fB\fBfilename\fR\fR]
++'in \n(.iu-\nxu
++.ad b
++.SH DESCRIPTION
++xmore is a plain text browser.
++.SH ENVIRONMENT
++.TP
++\fBXPSERVERLIST\fR
+ \fB${XPSERVERLIST}\fR must be set,
+ identifying the available Xprint servers.
+ See \fBXprint\fR(__miscmansuffix__)
+ for more details.
+ .SH "SEE ALSO"
+-.PP
+-\fBX11\fR(__miscmansuffix__), \fBxman\fR(__mansuffix__)
++\fBX11\fR(__miscmansuffix__), \fBxman\fR(__appmansuffix__)
+Index: xc/programs/xmore/xmore.sgml
+diff -u xc/programs/xmore/xmore.sgml:1.1 xc/programs/xmore/xmore.sgml:1.1.4.1
+--- xc/programs/xmore/xmore.sgml:1.1 Mon May 24 03:17:44 2004
++++ xc/programs/xmore/xmore.sgml Tue Feb 1 23:09:30 2005
+@@ -1,13 +1,14 @@
+-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.2//EN" '/usr/share/sgml/docbook_4.2/docbook.dtd'>
++<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.2//EN" 'http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd'>
+
+ <!-- Process this file with DocBook tools to generate the output format
+ (such as manual pages or HTML documents).
+
+-Note that strings like __mansuffix__, __filemansuffix__, __libmansuffix__,
++Note that strings like __appmansuffix__, __filemansuffix__, __libmansuffix__,
+ __miscmansuffix__ etc. have to be replaced first (in theory that's the
+ job of ENTITIES but some XML tools are highly allergic to such stuff... ;-().
+ A quick way to do that is to filter this document via
+-/usr/bin/sed "s/__mansuffix__/${MANSUFFIX}/g;s/__filemansuffix__/${FILEMANSUFFIX}/g;s/__libmansuffix__/${LIBMANSUFFIX}/g;s/__miscmansuffix__/${MISCMANSUFFIX}/g"
++/usr/bin/sed "s/__appmansuffix__/${MANSUFFIX}/g;s/__filemansuffix__/${FILEMANSUFFIX}/g;s/__libmansuffix__/${LIBMANSUFFIX}/g;s/__misc
++mansuffix__/${MISCMANSUFFIX}/g"
+ assuming that env vars like MANSUFFIX etc. have been set to the matching
+ manual volume numbers.
+ -->
+@@ -15,7 +16,7 @@
+ <refentry>
+ <refmeta>
+ <refentrytitle>xmore</refentrytitle>
+- <manvolnum>__mansuffix__</manvolnum>
++ <manvolnum>__appmansuffix__</manvolnum>
+ </refmeta>
+ <refnamediv>
+ <refname>xmore</refname>
+@@ -72,7 +73,7 @@
+
+ <!-- Xprint general references -->
+ <member><citerefentry><refentrytitle>X11</refentrytitle><manvolnum>__miscmansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xman</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xman</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
+ </simplelist>
+ </para>
+ </refsect1>
+Index: xc/programs/xphelloworld/xpawhelloworld/xpawhelloworld.c
+diff -u xc/programs/xphelloworld/xpawhelloworld/xpawhelloworld.c:1.2 xc/programs/xphelloworld/xpawhelloworld/xpawhelloworld.c:1.2.6.1
+--- xc/programs/xphelloworld/xpawhelloworld/xpawhelloworld.c:1.2 Fri Apr 23 19:55:00 2004
++++ xc/programs/xphelloworld/xpawhelloworld/xpawhelloworld.c Mon Dec 13 07:15:56 2004
+@@ -302,6 +302,10 @@
+ if( doPrint )
+ {
+ n = 0;
++ /* Override any geometry resource settings as XawPrintShell adjusts it's size
++ * to the current page siue when |XawPrintLAYOUTMODE_DRAWABLEAREA| or
++ * |XawPrintLAYOUTMODE_PAGESIZE| are used. */
++ XtSetArg(args[n], XtNgeometry, "+0+0"); n++;
+ XtSetArg(args[n], XawNlayoutMode, XawPrintLAYOUTMODE_DRAWABLEAREA); n++;
+ print_shell = XtCreatePopupShell("myprintshell",
+ xawPrintShellWidgetClass,
+Index: xc/programs/xphelloworld/xphelloworld/xphelloworld.html
+diff -u xc/programs/xphelloworld/xphelloworld/xphelloworld.html:1.2 xc/programs/xphelloworld/xphelloworld/xphelloworld.html:1.2.6.1
+--- xc/programs/xphelloworld/xphelloworld/xphelloworld.html:1.2 Fri Apr 23 19:55:00 2004
++++ xc/programs/xphelloworld/xphelloworld/xphelloworld.html Wed Dec 15 07:17:48 2004
+@@ -1,9 +1,9 @@
+-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>xphelloworld</title><meta name="generator" content="DocBook XSL Stylesheets V1.62.4"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="id2590201"></a><div class="titlepage"><div></div><div></div></div><div class="refnamediv"><h2>Name</h2><p>xphelloworld — sends a test page to an Xprint printer</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><tt class="command">xphelloworld</tt> [<tt class="option">-printer <i class="replaceable"><tt>printernname</tt></i></tt>] [<tt class="option">-printargs
+- <i class="replaceable"><tt>arg</tt></i>=<i class="replaceable"><tt>value</tt></i> [,...]</tt>] [<tt class="option">-v</tt>] [<tt class="option">-text <i class="replaceable"><tt>text</tt></i></tt>] [<tt class="option">-h</tt>]</p></div></div><div class="refsect1" lang="en"><a name="id2804938"></a><h2>DESCRIPTION</h2><p><span><b class="command">xphelloworld</b></span> is a utility for Xprint, the
++<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>xphelloworld</title><meta name="generator" content="DocBook XSL Stylesheets V1.62.4"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="id2589918"></a><div class="titlepage"><div></div><div></div></div><div class="refnamediv"><h2>Name</h2><p>xphelloworld — sends a test page to an Xprint printer</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><tt class="command">xphelloworld</tt> [<tt class="option">-printer <i class="replaceable"><tt>printernname</tt></i></tt>] [<tt class="option">-printargs
++ <i class="replaceable"><tt>arg</tt></i>=<i class="replaceable"><tt>value</tt></i> [,...]</tt>] [<tt class="option">-v</tt>] [<tt class="option">-text <i class="replaceable"><tt>text</tt></i></tt>] [<tt class="option">-h</tt>]</p></div></div><div class="refsect1" lang="en"><a name="id2804934"></a><h2>DESCRIPTION</h2><p><span><b class="command">xphelloworld</b></span> is a utility for Xprint, the
+ printing system for the X Window system. It sends a test page to
+ the specified printer (or the default printer, if none is specified).
+- </p></div><div class="refsect1" lang="en"><a name="id2804964"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term"><tt class="option">-printer <i class="replaceable"><tt>printernname</tt></i></tt></span></dt><dd><p>printer to use</p></dd><dt><span class="term"><tt class="option">-printargs <i class="replaceable"><tt>arg</tt></i>=<i class="replaceable"><tt>value</tt></i> [,...]</tt></span></dt><dd xmlns:ns1=""><p>Args:
+- </p><div class="variablelist"><dl><dt><span class="term"><b class="userinput"><tt>tofile=<i class="replaceable"><tt>filename</tt></i></tt></b></span></dt><dd><p></p></dd><dt><span class="term"><b class="userinput"><tt>papersize=<i class="replaceable"><tt>paper name</tt></i></tt></b></span></dt><dd><p></p></dd><dt><span class="term"><b class="userinput"><tt>orientation=<i class="replaceable"><tt>orientation</tt></i></tt></b></span></dt><dd><p></p></dd><dt><span class="term"><b class="userinput"><tt>resolution=<i class="replaceable"><tt>DPI</tt></i></tt></b></span></dt><dd><p></p></dd><dt><span class="term"><b class="userinput"><tt>plex=<i class="replaceable"><tt>plex</tt></i></tt></b></span></dt><dd><p></p></dd><dt><span class="term"><b class="userinput"><tt>title=<i class="replaceable"><tt>string</tt></i></tt></b></span></dt><dd><p></p></dd></dl></div></dd><dt><span class="term"><tt class="option">-text <i class="replaceable"><tt>text</tt></i></tt></span></dt><dd><p>Sample text to print. Default is "hello world from X11 print system".</p></dd><dt><span class="term"><tt class="option">-v</tt></span></dt><dd><p>verbose output</p></dd><dt><span class="term"><tt class="option">-h</tt></span></dt><dd><p>print usage</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2805099"></a><h2>ENVIRONMENT</h2><div class="variablelist"><dl><dt><span class="term"><tt class="envar">XPSERVERLIST</tt></span></dt><dd><p><tt class="envar">${XPSERVERLIST}</tt> must be set,
++ </p></div><div class="refsect1" lang="en"><a name="id2804960"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term"><tt class="option">-printer <i class="replaceable"><tt>printernname</tt></i></tt></span></dt><dd><p>printer to use</p></dd><dt><span class="term"><tt class="option">-printargs <i class="replaceable"><tt>arg</tt></i>=<i class="replaceable"><tt>value</tt></i> [,...]</tt></span></dt><dd xmlns:ns1=""><p>Args:
++ </p><div class="variablelist"><dl><dt><span class="term"><b class="userinput"><tt>tofile=<i class="replaceable"><tt>filename</tt></i></tt></b></span></dt><dd><p></p></dd><dt><span class="term"><b class="userinput"><tt>papersize=<i class="replaceable"><tt>paper name</tt></i></tt></b></span></dt><dd><p></p></dd><dt><span class="term"><b class="userinput"><tt>orientation=<i class="replaceable"><tt>orientation</tt></i></tt></b></span></dt><dd><p></p></dd><dt><span class="term"><b class="userinput"><tt>resolution=<i class="replaceable"><tt>DPI</tt></i></tt></b></span></dt><dd><p></p></dd><dt><span class="term"><b class="userinput"><tt>plex=<i class="replaceable"><tt>plex</tt></i></tt></b></span></dt><dd><p></p></dd><dt><span class="term"><b class="userinput"><tt>title=<i class="replaceable"><tt>string</tt></i></tt></b></span></dt><dd><p></p></dd></dl></div></dd><dt><span class="term"><tt class="option">-text <i class="replaceable"><tt>text</tt></i></tt></span></dt><dd><p>Sample text to print. Default is "hello world from X11 print system".</p></dd><dt><span class="term"><tt class="option">-v</tt></span></dt><dd><p>verbose output</p></dd><dt><span class="term"><tt class="option">-h</tt></span></dt><dd><p>print usage</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2805098"></a><h2>ENVIRONMENT</h2><div class="variablelist"><dl><dt><span class="term"><tt class="envar">XPSERVERLIST</tt></span></dt><dd><p><tt class="envar">${XPSERVERLIST}</tt> must be set,
+ identifying the available Xprint servers.
+ See <span class="citerefentry"><span class="refentrytitle">Xprint</span>(7)</span>
+ for more details.
+Index: xc/programs/xphelloworld/xphelloworld/xphelloworld.man
+diff -u xc/programs/xphelloworld/xphelloworld/xphelloworld.man:1.2 xc/programs/xphelloworld/xphelloworld/xphelloworld.man:1.2.6.1
+--- xc/programs/xphelloworld/xphelloworld/xphelloworld.man:1.2 Fri Apr 23 19:55:00 2004
++++ xc/programs/xphelloworld/xphelloworld/xphelloworld.man Wed Dec 15 07:17:48 2004
+@@ -1,64 +1,63 @@
+-.\" This manpage has been automatically generated by docbook2man
+-.\" from a DocBook document. This tool can be found at:
+-.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
+-.\" Please send any bug reports, improvements, comments, patches,
+-.\" etc. to Steve Cheng <steve@ggi-project.org>.
+-.TH "XPHELLOWORLD" "__mansuffix__" "13 February 2004" "" ""
++.\" -*- coding: us-ascii -*-
++.TH xphelloworld __appmansuffix__ "8 October 2004"
+ .SH NAME
+ xphelloworld \- sends a test page to an Xprint printer
+ .SH SYNOPSIS
+-
+-\fBxphelloworld\fR [ \fB-printer \fIprinternname\fB\fR] [ \fB-printargs
+-\fIarg\fB=\fIvalue\fB [,...]\fR] [ \fB-v\fR] [ \fB-text \fItext\fB\fR] [ \fB-h\fR]
+-
+-.SH "DESCRIPTION"
+-.PP
+-\fBxphelloworld\fR is a utility for Xprint, the
++.ad l
++\fBxphelloworld\fR \kx
++.if (\nxu > (\n(.lu / 2)) .nr x (\n(.lu / 5)
++'in \n(.iu+\nxu
++[\fB\-printer \fBprinternname\fR\fR] [\fB\-printargs
++\fBarg\fR= \fBvalue\fR [,...]\fR] [\fB\-v\fR] [\fB\-text \fBtext\fR\fR] [\fB\-h\fR]
++'in \n(.iu-\nxu
++.ad b
++.SH DESCRIPTION
++xphelloworld is a utility for Xprint, the
+ printing system for the X Window system. It sends a test page to
+ the specified printer (or the default printer, if none is specified).
+-.SH "OPTIONS"
+-.TP
+-\fB-printer \fIprinternname\fB \fR
++.SH OPTIONS
++.TP
++\fB\-printer \fIprinternname\fB\fR
+ printer to use
+-.TP
+-\fB-printargs \fIarg\fB=\fIvalue\fB [,...] \fR
++.TP
++\fB\-printargs \fIarg\fB=\fIvalue\fB [,...]\fR
+ Args:
+-.RS
+-.TP
++.RS
++.TP
+ \fBtofile=\fIfilename\fB\fR
+-.TP
++.TP
+ \fBpapersize=\fIpaper name\fB\fR
+-.TP
++.TP
+ \fBorientation=\fIorientation\fB\fR
+-.TP
++.TP
+ \fBresolution=\fIDPI\fB\fR
+-.TP
++.TP
+ \fBplex=\fIplex\fB\fR
+-.TP
++.TP
+ \fBtitle=\fIstring\fB\fR
+ .RE
+-.TP
+-\fB-text \fItext\fB \fR
++
++.TP
++\fB\-text \fItext\fB\fR
+ Sample text to print. Default is "hello world from X11 print system".
+-.TP
+-\fB-v \fR
++.TP
++\fB\-v\fR
+ verbose output
+-.TP
+-\fB-h \fR
++.TP
++\fB\-h\fR
+ print usage
+-.SH "ENVIRONMENT"
+-.TP
+-\fBXPSERVERLIST \fR
++.SH ENVIRONMENT
++.TP
++\fBXPSERVERLIST\fR
+ \fB${XPSERVERLIST}\fR must be set,
+ identifying the available Xprint servers.
+ See \fBXprint\fR(__miscmansuffix__)
+ for more details.
+ .SH "KNOWN BUGS"
+-.PP
+
+-The \fB-text\fR option assumes that the text is in ISO8859-1 encoding
++The \fB\-text\fR option assumes that the text is in ISO8859-1 encoding
+ (the \fB${LANG}\fR environment variable is not honored in this case).
+-A full list of bugs can be obtained from the Xprint.org bug database (http://xprint.mozdev.org/xprint_bugs.html <URL:http://xprint.mozdev.org/xprint_bugs.html>).
++
++A full list of bugs can be obtained from the Xprint.org bug database (http://xprint.mozdev.org/xprint_bugs.html).
+ .SH "SEE ALSO"
+-.PP
+-\fBXprint\fR(__miscmansuffix__), \fBX11\fR(__miscmansuffix__), \fBxplsprinters\fR(__mansuffix__), \fBxpxmhelloworld\fR(__mansuffix__), \fBxpawhelloworld\fR(__mansuffix__), \fBxpxthelloworld\fR(__mansuffix__), \fBxpsimplehelloworld\fR(__mansuffix__), \fBXserver\fR(__mansuffix__), \fBXprt\fR(__mansuffix__), \fBlibXp\fR(__libmansuffix__), \fBlibXprintUtils\fR(__libmansuffix__), \fBlibXprintAppUtils\fR(__libmansuffix__), \fBXmPrintShell\fR(__libmansuffix__), \fBXawPrintShell\fR(__libmansuffix__), Xprint FAQ (http://xprint.mozdev.org/docs/Xprint_FAQ.html <URL:http://xprint.mozdev.org/docs/Xprint_FAQ.html>), Xprint main site (http://xprint.mozdev.org/ <URL:http://xprint.mozdev.org/>)
++\fBXprint\fR(__miscmansuffix__), \fBX11\fR(__miscmansuffix__), \fBxplsprinters\fR(__appmansuffix__), \fBxpxmhelloworld\fR(__appmansuffix__), \fBxpawhelloworld\fR(__appmansuffix__), \fBxpxthelloworld\fR(__appmansuffix__), \fBxpsimplehelloworld\fR(__appmansuffix__), \fBXserver\fR(__appmansuffix__), \fBXprt\fR(__appmansuffix__), \fBlibXp\fR(__libmansuffix__), \fBlibXprintUtils\fR(__libmansuffix__), \fBlibXprintAppUtils\fR(__libmansuffix__), \fBXmPrintShell\fR(__libmansuffix__), \fBXawPrintShell\fR(__libmansuffix__), Xprint FAQ (http://xprint.mozdev.org/docs/Xprint_FAQ.html), Xprint main site (http://xprint.mozdev.org/)
+Index: xc/programs/xphelloworld/xphelloworld/xphelloworld.sgml
+diff -u xc/programs/xphelloworld/xphelloworld/xphelloworld.sgml:1.2 xc/programs/xphelloworld/xphelloworld/xphelloworld.sgml:1.2.6.1
+--- xc/programs/xphelloworld/xphelloworld/xphelloworld.sgml:1.2 Fri Apr 23 19:55:00 2004
++++ xc/programs/xphelloworld/xphelloworld/xphelloworld.sgml Wed Dec 15 07:17:48 2004
+@@ -1,13 +1,13 @@
+-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.2//EN" '/usr/share/sgml/docbook_4.2/docbook.dtd'>
++<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.2//EN" 'http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd'>
+
+ <!-- Process this file with DocBook tools to generate the output format
+ (such as manual pages or HTML documents).
+
+-Note that strings like __mansuffix__, __filemansuffix__, __libmansuffix__,
++Note that strings like __appmansuffix__, __filemansuffix__, __libmansuffix__,
+ __miscmansuffix__ etc. have to be replaced first (in theory that's the
+ job of ENTITIES but some XML tools are highly allergic to such stuff... ;-().
+ A quick way to do that is to filter this document via
+-/usr/bin/sed "s/__mansuffix__/${MANSUFFIX}/g;s/__filemansuffix__/${FILEMANSUFFIX}/g;s/__libmansuffix__/${LIBMANSUFFIX}/g;s/__miscmansuffix__/${MISCMANSUFFIX}/g"
++/usr/bin/sed "s/__appmansuffix__/${MANSUFFIX}/g;s/__filemansuffix__/${FILEMANSUFFIX}/g;s/__libmansuffix__/${LIBMANSUFFIX}/g;s/__miscmansuffix__/${MISCMANSUFFIX}/g"
+ assuming that env vars like MANSUFFIX etc. have been set to the matching
+ manual volume numbers.
+ -->
+@@ -15,7 +15,7 @@
+ <refentry>
+ <refmeta>
+ <refentrytitle>xphelloworld</refentrytitle>
+- <manvolnum>__mansuffix__</manvolnum>
++ <manvolnum>__appmansuffix__</manvolnum>
+ </refmeta>
+ <refnamediv>
+ <refname>xphelloworld</refname>
+@@ -159,16 +159,16 @@
+ <!-- Xprint general references -->
+ <member><citerefentry><refentrytitle>Xprint</refentrytitle><manvolnum>__miscmansuffix__</manvolnum></citerefentry></member>
+ <member><citerefentry><refentrytitle>X11</refentrytitle><manvolnum>__miscmansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xplsprinters</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xplsprinters</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
+ <!--
+- <member><citerefentry><refentrytitle>xphelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xphelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
+ -->
+- <member><citerefentry><refentrytitle>xpxmhelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xpawhelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xpxthelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xpsimplehelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>Xserver</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>Xprt</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpxmhelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpawhelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpxthelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpsimplehelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>Xserver</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>Xprt</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
+ <!-- ToDO: Add manual pages for the single Xprint DDX implementations (PostScript/PDF/PCL/PCL-MONO/Raster/etc.) -->
+ <member><citerefentry><refentrytitle>libXp</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
+ <member><citerefentry><refentrytitle>libXprintUtils</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
+Index: xc/programs/xphelloworld/xpsimplehelloworld/xpsimplehelloworld.html
+diff -u xc/programs/xphelloworld/xpsimplehelloworld/xpsimplehelloworld.html:1.2 xc/programs/xphelloworld/xpsimplehelloworld/xpsimplehelloworld.html:1.2.6.1
+--- xc/programs/xphelloworld/xpsimplehelloworld/xpsimplehelloworld.html:1.2 Fri Apr 23 19:55:00 2004
++++ xc/programs/xphelloworld/xpsimplehelloworld/xpsimplehelloworld.html Wed Dec 15 07:17:49 2004
+@@ -1,4 +1,4 @@
+-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>xpsimplehelloworld</title><meta name="generator" content="DocBook XSL Stylesheets V1.62.4"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="id2590201"></a><div class="titlepage"><div></div><div></div></div><div class="refnamediv"><h2>Name</h2><p>xpsimplehelloworld — "Hello World"-like Xprint sample utility based on plain X11 rendering calls</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><tt class="command">xpsimplehelloworld</tt> [<tt class="option">-printer <i class="replaceable"><tt>printernname</tt></i></tt>] [<tt class="option">-v</tt>] [<tt class="option">-h</tt>]</p></div></div><div class="refsect1" lang="en"><a name="id2802597"></a><h2>DESCRIPTION</h2><p><span><b class="command">xpsimplehelloworld</b></span> is a sample utility for Xprint, the
++<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>xpsimplehelloworld</title><meta name="generator" content="DocBook XSL Stylesheets V1.62.4"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="id2589918"></a><div class="titlepage"><div></div><div></div></div><div class="refnamediv"><h2>Name</h2><p>xpsimplehelloworld — "Hello World"-like Xprint sample utility based on plain X11 rendering calls</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><tt class="command">xpsimplehelloworld</tt> [<tt class="option">-printer <i class="replaceable"><tt>printernname</tt></i></tt>] [<tt class="option">-v</tt>] [<tt class="option">-h</tt>]</p></div></div><div class="refsect1" lang="en"><a name="id2802638"></a><h2>DESCRIPTION</h2><p><span><b class="command">xpsimplehelloworld</b></span> is a sample utility for Xprint, the
+ printing system for the X Window system. It demonstrates how to send a test page to
+ the specified printer (or the default printer, if none is specified) using plain X11
+ rendering instructions and without using special toolkit support (like one of
+@@ -7,10 +7,10 @@
+ <span class="citerefentry"><span class="refentrytitle">XmPrintShell</span>(3x)</span>
+ or
+ <span class="citerefentry"><span class="refentrytitle">XawPrintShell</span>(3x)</span>)).
+- </p></div><div class="refsect1" lang="en"><a name="id2804967"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term"><tt class="option">-printer <i class="replaceable"><tt>printernname</tt></i></tt></span></dt><dd><p>printer to use</p></dd><dt><span class="term"><tt class="option">-v</tt></span></dt><dd><p>verbose output</p></dd><dt><span class="term"><tt class="option">-h</tt></span></dt><dd><p>print usage</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2804998"></a><h2>ENVIRONMENT</h2><div class="variablelist"><dl><dt><span class="term"><tt class="envar">XPSERVERLIST</tt></span></dt><dd><p><tt class="envar">${XPSERVERLIST}</tt> must be set,
++ </p></div><div class="refsect1" lang="en"><a name="id2804961"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term"><tt class="option">-printer <i class="replaceable"><tt>printernname</tt></i></tt></span></dt><dd><p>printer to use</p></dd><dt><span class="term"><tt class="option">-v</tt></span></dt><dd><p>verbose output</p></dd><dt><span class="term"><tt class="option">-h</tt></span></dt><dd><p>print usage</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2804998"></a><h2>ENVIRONMENT</h2><div class="variablelist"><dl><dt><span class="term"><tt class="envar">XPSERVERLIST</tt></span></dt><dd><p><tt class="envar">${XPSERVERLIST}</tt> must be set,
+ identifying the available Xprint servers.
+ See <span class="citerefentry"><span class="refentrytitle">Xprint</span>(7)</span>
+ for more details.
+- </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2805031"></a><h2>KNOWN BUGS</h2><p>
++ </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2805030"></a><h2>KNOWN BUGS</h2><p>
+ A full list of bugs can be obtained from the Xprint.org bug database (<a href="http://xprint.mozdev.org/xprint_bugs.html" target="_top">http://xprint.mozdev.org/xprint_bugs.html</a>).
+- </p></div><div class="refsect1" lang="en"><a name="id2805040"></a><h2>SEE ALSO</h2><p><span class="simplelist"><span class="citerefentry"><span class="refentrytitle">Xprint</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">X11</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">xplsprinters</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xphelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpxmhelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpawhelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpxthelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">Xserver</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">Xprt</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">libXp</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">libXprintUtils</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">libXprintAppUtils</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">XmPrintShell</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">XawPrintShell</span>(3x)</span>, Xprint FAQ (<a href="http://xprint.mozdev.org/docs/Xprint_FAQ.html" target="_top">http://xprint.mozdev.org/docs/Xprint_FAQ.html</a>), Xprint main site (<a href="http://xprint.mozdev.org/" target="_top">http://xprint.mozdev.org/</a>)</span></p></div></div></body></html>
++ </p></div><div class="refsect1" lang="en"><a name="id2805039"></a><h2>SEE ALSO</h2><p><span class="simplelist"><span class="citerefentry"><span class="refentrytitle">Xprint</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">X11</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">xplsprinters</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xphelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpxmhelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpawhelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpxthelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">Xserver</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">Xprt</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">libXp</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">libXprintUtils</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">libXprintAppUtils</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">XmPrintShell</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">XawPrintShell</span>(3x)</span>, Xprint FAQ (<a href="http://xprint.mozdev.org/docs/Xprint_FAQ.html" target="_top">http://xprint.mozdev.org/docs/Xprint_FAQ.html</a>), Xprint main site (<a href="http://xprint.mozdev.org/" target="_top">http://xprint.mozdev.org/</a>)</span></p></div></div></body></html>
+Index: xc/programs/xphelloworld/xpsimplehelloworld/xpsimplehelloworld.man
+diff -u xc/programs/xphelloworld/xpsimplehelloworld/xpsimplehelloworld.man:1.2 xc/programs/xphelloworld/xpsimplehelloworld/xpsimplehelloworld.man:1.2.6.1
+--- xc/programs/xphelloworld/xpsimplehelloworld/xpsimplehelloworld.man:1.2 Fri Apr 23 19:55:00 2004
++++ xc/programs/xphelloworld/xpsimplehelloworld/xpsimplehelloworld.man Wed Dec 15 07:17:49 2004
+@@ -1,18 +1,17 @@
+-.\" This manpage has been automatically generated by docbook2man
+-.\" from a DocBook document. This tool can be found at:
+-.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
+-.\" Please send any bug reports, improvements, comments, patches,
+-.\" etc. to Steve Cheng <steve@ggi-project.org>.
+-.TH "XPSIMPLEHELLOWORLD" "__mansuffix__" "13 February 2004" "" ""
++.\" -*- coding: us-ascii -*-
++.TH xpsimplehelloworld __appmansuffix__ "8 October 2004"
+ .SH NAME
+-xpsimplehelloworld \- \&"Hello World\&"-like Xprint sample utility based on plain X11 rendering calls
++xpsimplehelloworld \- "Hello World"-like Xprint sample utility based on plain X11 rendering calls
+ .SH SYNOPSIS
+-
+-\fBxpsimplehelloworld\fR [ \fB-printer \fIprinternname\fB\fR] [ \fB-v\fR] [ \fB-h\fR]
+-
+-.SH "DESCRIPTION"
+-.PP
+-\fBxpsimplehelloworld\fR is a sample utility for Xprint, the
++.ad l
++\fBxpsimplehelloworld\fR \kx
++.if (\nxu > (\n(.lu / 2)) .nr x (\n(.lu / 5)
++'in \n(.iu+\nxu
++[\fB\-printer \fBprinternname\fR\fR] [\fB\-v\fR] [\fB\-h\fR]
++'in \n(.iu-\nxu
++.ad b
++.SH DESCRIPTION
++xpsimplehelloworld is a sample utility for Xprint, the
+ printing system for the X Window system. It demonstrates how to send a test page to
+ the specified printer (or the default printer, if none is specified) using plain X11
+ rendering instructions and without using special toolkit support (like one of
+@@ -21,26 +20,24 @@
+ \fBXmPrintShell\fR(__libmansuffix__)
+ or
+ \fBXawPrintShell\fR(__libmansuffix__))).
+-.SH "OPTIONS"
+-.TP
+-\fB-printer \fIprinternname\fB \fR
++.SH OPTIONS
++.TP
++\fB\-printer \fIprinternname\fB\fR
+ printer to use
+-.TP
+-\fB-v \fR
++.TP
++\fB\-v\fR
+ verbose output
+-.TP
+-\fB-h \fR
++.TP
++\fB\-h\fR
+ print usage
+-.SH "ENVIRONMENT"
+-.TP
+-\fBXPSERVERLIST \fR
++.SH ENVIRONMENT
++.TP
++\fBXPSERVERLIST\fR
+ \fB${XPSERVERLIST}\fR must be set,
+ identifying the available Xprint servers.
+ See \fBXprint\fR(__miscmansuffix__)
+ for more details.
+ .SH "KNOWN BUGS"
+-.PP
+-A full list of bugs can be obtained from the Xprint.org bug database (http://xprint.mozdev.org/xprint_bugs.html <URL:http://xprint.mozdev.org/xprint_bugs.html>).
++A full list of bugs can be obtained from the Xprint.org bug database (http://xprint.mozdev.org/xprint_bugs.html).
+ .SH "SEE ALSO"
+-.PP
+-\fBXprint\fR(__miscmansuffix__), \fBX11\fR(__miscmansuffix__), \fBxplsprinters\fR(__mansuffix__), \fBxphelloworld\fR(__mansuffix__), \fBxpxmhelloworld\fR(__mansuffix__), \fBxpawhelloworld\fR(__mansuffix__), \fBxpxthelloworld\fR(__mansuffix__), \fBXserver\fR(__mansuffix__), \fBXprt\fR(__mansuffix__), \fBlibXp\fR(__libmansuffix__), \fBlibXprintUtils\fR(__libmansuffix__), \fBlibXprintAppUtils\fR(__libmansuffix__), \fBXmPrintShell\fR(__libmansuffix__), \fBXawPrintShell\fR(__libmansuffix__), Xprint FAQ (http://xprint.mozdev.org/docs/Xprint_FAQ.html <URL:http://xprint.mozdev.org/docs/Xprint_FAQ.html>), Xprint main site (http://xprint.mozdev.org/ <URL:http://xprint.mozdev.org/>)
++\fBXprint\fR(__miscmansuffix__), \fBX11\fR(__miscmansuffix__), \fBxplsprinters\fR(__appmansuffix__), \fBxphelloworld\fR(__appmansuffix__), \fBxpxmhelloworld\fR(__appmansuffix__), \fBxpawhelloworld\fR(__appmansuffix__), \fBxpxthelloworld\fR(__appmansuffix__), \fBXserver\fR(__appmansuffix__), \fBXprt\fR(__appmansuffix__), \fBlibXp\fR(__libmansuffix__), \fBlibXprintUtils\fR(__libmansuffix__), \fBlibXprintAppUtils\fR(__libmansuffix__), \fBXmPrintShell\fR(__libmansuffix__), \fBXawPrintShell\fR(__libmansuffix__), Xprint FAQ (http://xprint.mozdev.org/docs/Xprint_FAQ.html), Xprint main site (http://xprint.mozdev.org/)
+Index: xc/programs/xphelloworld/xpsimplehelloworld/xpsimplehelloworld.sgml
+diff -u xc/programs/xphelloworld/xpsimplehelloworld/xpsimplehelloworld.sgml:1.2 xc/programs/xphelloworld/xpsimplehelloworld/xpsimplehelloworld.sgml:1.2.6.1
+--- xc/programs/xphelloworld/xpsimplehelloworld/xpsimplehelloworld.sgml:1.2 Fri Apr 23 19:55:00 2004
++++ xc/programs/xphelloworld/xpsimplehelloworld/xpsimplehelloworld.sgml Wed Dec 15 07:17:49 2004
+@@ -1,13 +1,13 @@
+-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.2//EN" '/usr/share/sgml/docbook_4.2/docbook.dtd'>
++<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.2//EN" 'http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd'>
+
+ <!-- Process this file with DocBook tools to generate the output format
+ (such as manual pages or HTML documents).
+
+-Note that strings like __mansuffix__, __filemansuffix__, __libmansuffix__,
++Note that strings like __appmansuffix__, __filemansuffix__, __libmansuffix__,
+ __miscmansuffix__ etc. have to be replaced first (in theory that's the
+ job of ENTITIES but some XML tools are highly allergic to such stuff... ;-().
+ A quick way to do that is to filter this document via
+-/usr/bin/sed "s/__mansuffix__/${MANSUFFIX}/g;s/__filemansuffix__/${FILEMANSUFFIX}/g;s/__libmansuffix__/${LIBMANSUFFIX}/g;s/__miscmansuffix__/${MISCMANSUFFIX}/g"
++/usr/bin/sed "s/__appmansuffix__/${MANSUFFIX}/g;s/__filemansuffix__/${FILEMANSUFFIX}/g;s/__libmansuffix__/${LIBMANSUFFIX}/g;s/__miscmansuffix__/${MISCMANSUFFIX}/g"
+ assuming that env vars like MANSUFFIX etc. have been set to the matching
+ manual volume numbers.
+ -->
+@@ -15,7 +15,7 @@
+ <refentry>
+ <refmeta>
+ <refentrytitle>xpsimplehelloworld</refentrytitle>
+- <manvolnum>__mansuffix__</manvolnum>
++ <manvolnum>__appmansuffix__</manvolnum>
+ </refmeta>
+ <refnamediv>
+ <refname>xpsimplehelloworld</refname>
+@@ -113,16 +113,16 @@
+ <!-- Xprint general references -->
+ <member><citerefentry><refentrytitle>Xprint</refentrytitle><manvolnum>__miscmansuffix__</manvolnum></citerefentry></member>
+ <member><citerefentry><refentrytitle>X11</refentrytitle><manvolnum>__miscmansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xplsprinters</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xphelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xpxmhelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xpawhelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xpxthelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xplsprinters</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xphelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpxmhelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpawhelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpxthelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
+ <!--
+- <member><citerefentry><refentrytitle>xpsimplehelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpsimplehelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
+ -->
+- <member><citerefentry><refentrytitle>Xserver</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>Xprt</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>Xserver</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>Xprt</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
+ <!-- ToDO: Add manual pages for the single Xprint DDX implementations (PostScript/PDF/PCL/PCL-MONO/Raster/etc.) -->
+ <member><citerefentry><refentrytitle>libXp</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
+ <member><citerefentry><refentrytitle>libXprintUtils</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
+Index: xc/programs/xphelloworld/xpxmhelloworld/xpxmhelloworld.html
+diff -u xc/programs/xphelloworld/xpxmhelloworld/xpxmhelloworld.html:1.2 xc/programs/xphelloworld/xpxmhelloworld/xpxmhelloworld.html:1.2.6.1
+--- xc/programs/xphelloworld/xpxmhelloworld/xpxmhelloworld.html:1.2 Fri Apr 23 19:55:02 2004
++++ xc/programs/xphelloworld/xpxmhelloworld/xpxmhelloworld.html Wed Dec 15 07:17:49 2004
+@@ -1,13 +1,13 @@
+-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>xpxmhelloworld</title><meta name="generator" content="DocBook XSL Stylesheets V1.62.4"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="id2590201"></a><div class="titlepage"><div></div><div></div></div><div class="refnamediv"><h2>Name</h2><p>xpxmhelloworld — "Hello World"-like Xprint sample utility based on the Motif2 toolkit</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><tt class="command">xpxmhelloworld</tt> [<tt class="option">-print</tt>] [<tt class="option">-printer <i class="replaceable"><tt>printernname</tt></i></tt>] [<tt class="option">-v</tt>] [<tt class="option">-h</tt>] <i class="replaceable"><tt>string</tt></i>... </p></div></div><div class="refsect1" lang="en"><a name="id2804937"></a><h2>DESCRIPTION</h2><p><span><b class="command">xpxmhelloworld</b></span> is a sample utility for Xprint, the
++<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>xpxmhelloworld</title><meta name="generator" content="DocBook XSL Stylesheets V1.62.4"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="id2589918"></a><div class="titlepage"><div></div><div></div></div><div class="refnamediv"><h2>Name</h2><p>xpxmhelloworld — "Hello World"-like Xprint sample utility based on the Motif2 toolkit</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><tt class="command">xpxmhelloworld</tt> [<tt class="option">-print</tt>] [<tt class="option">-printer <i class="replaceable"><tt>printernname</tt></i></tt>] [<tt class="option">-v</tt>] [<tt class="option">-h</tt>] <i class="replaceable"><tt>string</tt></i>... </p></div></div><div class="refsect1" lang="en"><a name="id2802566"></a><h2>DESCRIPTION</h2><p><span><b class="command">xpxmhelloworld</b></span> is a sample utility for Xprint, the
+ printing system for the X Window system. It demonstrates how to send a test page to
+ the specified printer (or the default printer, if none is specified) based on
+ the Motif2 toolkit using the
+ <span class="citerefentry"><span class="refentrytitle">XmPrintShell</span>(3x)</span>
+ widget class.
+- </p></div><div class="refsect1" lang="en"><a name="id2804971"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term"><tt class="option">-print</tt></span></dt><dd><p>Print (default is to display on the video Xserver)</p></dd><dt><span class="term"><tt class="option">-printer <i class="replaceable"><tt>printernname</tt></i></tt></span></dt><dd><p>printer to use</p></dd><dt><span class="term"><tt class="option">-v</tt></span></dt><dd><p>verbose output</p></dd><dt><span class="term"><tt class="option">-h</tt></span></dt><dd><p>print usage</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2805011"></a><h2>ENVIRONMENT</h2><div class="variablelist"><dl><dt><span class="term"><tt class="envar">XPSERVERLIST</tt></span></dt><dd><p><tt class="envar">${XPSERVERLIST}</tt> must be set,
++ </p></div><div class="refsect1" lang="en"><a name="id2804966"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term"><tt class="option">-print</tt></span></dt><dd><p>Print (default is to display on the video Xserver)</p></dd><dt><span class="term"><tt class="option">-printer <i class="replaceable"><tt>printernname</tt></i></tt></span></dt><dd><p>printer to use</p></dd><dt><span class="term"><tt class="option">-v</tt></span></dt><dd><p>verbose output</p></dd><dt><span class="term"><tt class="option">-h</tt></span></dt><dd><p>print usage</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2805012"></a><h2>ENVIRONMENT</h2><div class="variablelist"><dl><dt><span class="term"><tt class="envar">XPSERVERLIST</tt></span></dt><dd><p><tt class="envar">${XPSERVERLIST}</tt> must be set,
+ identifying the available Xprint servers.
+ See <span class="citerefentry"><span class="refentrytitle">Xprint</span>(7)</span>
+ for more details.
+ </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2805044"></a><h2>KNOWN BUGS</h2><p>
+ A full list of bugs can be obtained from the Xprint.org bug database (<a href="http://xprint.mozdev.org/xprint_bugs.html" target="_top">http://xprint.mozdev.org/xprint_bugs.html</a>).
+- </p></div><div class="refsect1" lang="en"><a name="id2805053"></a><h2>SEE ALSO</h2><p><span class="simplelist"><a href="http://nscp.upenn.edu/aix4.3html/libs/motiftr/XmPrintShell.htm" target="_top">http://nscp.upenn.edu/aix4.3html/libs/motiftr/XmPrintShell.htm</a>, <a href="http://nscp.upenn.edu/aix4.3html/libs/motiftr/XmText.htm" target="_top">http://nscp.upenn.edu/aix4.3html/libs/motiftr/XmText.htm</a>, <span class="citerefentry"><span class="refentrytitle">Xprint</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">X11</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">xplsprinters</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xphelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpawhelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpxthelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpsimplehelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">Xserver</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">Xprt</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">libXp</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">libXprintUtils</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">libXprintAppUtils</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">XmPrintShell</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">XawPrintShell</span>(3x)</span>, Xprint FAQ (<a href="http://xprint.mozdev.org/docs/Xprint_FAQ.html" target="_top">http://xprint.mozdev.org/docs/Xprint_FAQ.html</a>), Xprint main site (<a href="http://xprint.mozdev.org/" target="_top">http://xprint.mozdev.org/</a>)</span></p></div></div></body></html>
++ </p></div><div class="refsect1" lang="en"><a name="id2805054"></a><h2>SEE ALSO</h2><p><span class="simplelist"><a href="http://nscp.upenn.edu/aix4.3html/libs/motiftr/XmPrintShell.htm" target="_top">http://nscp.upenn.edu/aix4.3html/libs/motiftr/XmPrintShell.htm</a>, <a href="http://nscp.upenn.edu/aix4.3html/libs/motiftr/XmText.htm" target="_top">http://nscp.upenn.edu/aix4.3html/libs/motiftr/XmText.htm</a>, <span class="citerefentry"><span class="refentrytitle">Xprint</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">X11</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">xplsprinters</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xphelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpawhelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpxthelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpsimplehelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">Xserver</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">Xprt</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">libXp</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">libXprintUtils</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">libXprintAppUtils</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">XmPrintShell</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">XawPrintShell</span>(3x)</span>, Xprint FAQ (<a href="http://xprint.mozdev.org/docs/Xprint_FAQ.html" target="_top">http://xprint.mozdev.org/docs/Xprint_FAQ.html</a>), Xprint main site (<a href="http://xprint.mozdev.org/" target="_top">http://xprint.mozdev.org/</a>)</span></p></div></div></body></html>
+Index: xc/programs/xphelloworld/xpxmhelloworld/xpxmhelloworld.man
+diff -u xc/programs/xphelloworld/xpxmhelloworld/xpxmhelloworld.man:1.2 xc/programs/xphelloworld/xpxmhelloworld/xpxmhelloworld.man:1.2.6.1
+--- xc/programs/xphelloworld/xpxmhelloworld/xpxmhelloworld.man:1.2 Fri Apr 23 19:55:02 2004
++++ xc/programs/xphelloworld/xpxmhelloworld/xpxmhelloworld.man Wed Dec 15 07:17:49 2004
+@@ -1,46 +1,43 @@
+-.\" This manpage has been automatically generated by docbook2man
+-.\" from a DocBook document. This tool can be found at:
+-.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
+-.\" Please send any bug reports, improvements, comments, patches,
+-.\" etc. to Steve Cheng <steve@ggi-project.org>.
+-.TH "XPXMHELLOWORLD" "__mansuffix__" "13 February 2004" "" ""
++.\" -*- coding: us-ascii -*-
++.TH xpxmhelloworld __appmansuffix__ "8 October 2004"
+ .SH NAME
+-xpxmhelloworld \- \&"Hello World\&"-like Xprint sample utility based on the Motif2 toolkit
++xpxmhelloworld \- "Hello World"-like Xprint sample utility based on the Motif2 toolkit
+ .SH SYNOPSIS
+-
+-\fBxpxmhelloworld\fR [ \fB-print\fR] [ \fB-printer \fIprinternname\fB\fR] [ \fB-v\fR] [ \fB-h\fR] \fB\fIstring\fB\fR\fI ...\fR
+-
+-.SH "DESCRIPTION"
+-.PP
+-\fBxpxmhelloworld\fR is a sample utility for Xprint, the
++.ad l
++\fBxpxmhelloworld\fR \kx
++.if (\nxu > (\n(.lu / 2)) .nr x (\n(.lu / 5)
++'in \n(.iu+\nxu
++[\fB\-print\fR] [\fB\-printer \fBprinternname\fR\fR] [\fB\-v\fR] [\fB\-h\fR] \fBstring\fR \&...
++'in \n(.iu-\nxu
++.ad b
++.SH DESCRIPTION
++xpxmhelloworld is a sample utility for Xprint, the
+ printing system for the X Window system. It demonstrates how to send a test page to
+ the specified printer (or the default printer, if none is specified) based on
+ the Motif2 toolkit using the
+ \fBXmPrintShell\fR(__libmansuffix__)
+ widget class.
+-.SH "OPTIONS"
+-.TP
+-\fB-print \fR
++.SH OPTIONS
++.TP
++\fB\-print\fR
+ Print (default is to display on the video Xserver)
+-.TP
+-\fB-printer \fIprinternname\fB \fR
++.TP
++\fB\-printer \fIprinternname\fB\fR
+ printer to use
+-.TP
+-\fB-v \fR
++.TP
++\fB\-v\fR
+ verbose output
+-.TP
+-\fB-h \fR
++.TP
++\fB\-h\fR
+ print usage
+-.SH "ENVIRONMENT"
+-.TP
+-\fBXPSERVERLIST \fR
++.SH ENVIRONMENT
++.TP
++\fBXPSERVERLIST\fR
+ \fB${XPSERVERLIST}\fR must be set,
+ identifying the available Xprint servers.
+ See \fBXprint\fR(__miscmansuffix__)
+ for more details.
+ .SH "KNOWN BUGS"
+-.PP
+-A full list of bugs can be obtained from the Xprint.org bug database (http://xprint.mozdev.org/xprint_bugs.html <URL:http://xprint.mozdev.org/xprint_bugs.html>).
++A full list of bugs can be obtained from the Xprint.org bug database (http://xprint.mozdev.org/xprint_bugs.html).
+ .SH "SEE ALSO"
+-.PP
+-http://nscp.upenn.edu/aix4.3html/libs/motiftr/XmPrintShell.htm <URL:http://nscp.upenn.edu/aix4.3html/libs/motiftr/XmPrintShell.htm>, http://nscp.upenn.edu/aix4.3html/libs/motiftr/XmText.htm <URL:http://nscp.upenn.edu/aix4.3html/libs/motiftr/XmText.htm>, \fBXprint\fR(__miscmansuffix__), \fBX11\fR(__miscmansuffix__), \fBxplsprinters\fR(__mansuffix__), \fBxphelloworld\fR(__mansuffix__), \fBxpawhelloworld\fR(__mansuffix__), \fBxpxthelloworld\fR(__mansuffix__), \fBxpsimplehelloworld\fR(__mansuffix__), \fBXserver\fR(__mansuffix__), \fBXprt\fR(__mansuffix__), \fBlibXp\fR(__libmansuffix__), \fBlibXprintUtils\fR(__libmansuffix__), \fBlibXprintAppUtils\fR(__libmansuffix__), \fBXmPrintShell\fR(__libmansuffix__), \fBXawPrintShell\fR(__libmansuffix__), Xprint FAQ (http://xprint.mozdev.org/docs/Xprint_FAQ.html <URL:http://xprint.mozdev.org/docs/Xprint_FAQ.html>), Xprint main site (http://xprint.mozdev.org/ <URL:http://xprint.mozdev.org/>)
++http://nscp.upenn.edu/aix4.3html/libs/motiftr/XmPrintShell.htm, http://nscp.upenn.edu/aix4.3html/libs/motiftr/XmText.htm, \fBXprint\fR(__miscmansuffix__), \fBX11\fR(__miscmansuffix__), \fBxplsprinters\fR(__appmansuffix__), \fBxphelloworld\fR(__appmansuffix__), \fBxpawhelloworld\fR(__appmansuffix__), \fBxpxthelloworld\fR(__appmansuffix__), \fBxpsimplehelloworld\fR(__appmansuffix__), \fBXserver\fR(__appmansuffix__), \fBXprt\fR(__appmansuffix__), \fBlibXp\fR(__libmansuffix__), \fBlibXprintUtils\fR(__libmansuffix__), \fBlibXprintAppUtils\fR(__libmansuffix__), \fBXmPrintShell\fR(__libmansuffix__), \fBXawPrintShell\fR(__libmansuffix__), Xprint FAQ (http://xprint.mozdev.org/docs/Xprint_FAQ.html), Xprint main site (http://xprint.mozdev.org/)
+Index: xc/programs/xphelloworld/xpxmhelloworld/xpxmhelloworld.sgml
+diff -u xc/programs/xphelloworld/xpxmhelloworld/xpxmhelloworld.sgml:1.2 xc/programs/xphelloworld/xpxmhelloworld/xpxmhelloworld.sgml:1.2.6.1
+--- xc/programs/xphelloworld/xpxmhelloworld/xpxmhelloworld.sgml:1.2 Fri Apr 23 19:55:02 2004
++++ xc/programs/xphelloworld/xpxmhelloworld/xpxmhelloworld.sgml Wed Dec 15 07:17:49 2004
+@@ -1,13 +1,13 @@
+-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.2//EN" '/usr/share/sgml/docbook_4.2/docbook.dtd'>
++<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.2//EN" 'http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd'>
+
+ <!-- Process this file with DocBook tools to generate the output format
+ (such as manual pages or HTML documents).
+
+-Note that strings like __mansuffix__, __filemansuffix__, __libmansuffix__,
++Note that strings like __appmansuffix__, __filemansuffix__, __libmansuffix__,
+ __miscmansuffix__ etc. have to be replaced first (in theory that's the
+ job of ENTITIES but some XML tools are highly allergic to such stuff... ;-().
+ A quick way to do that is to filter this document via
+-/usr/bin/sed "s/__mansuffix__/${MANSUFFIX}/g;s/__filemansuffix__/${FILEMANSUFFIX}/g;s/__libmansuffix__/${LIBMANSUFFIX}/g;s/__miscmansuffix__/${MISCMANSUFFIX}/g"
++/usr/bin/sed "s/__appmansuffix__/${MANSUFFIX}/g;s/__filemansuffix__/${FILEMANSUFFIX}/g;s/__libmansuffix__/${LIBMANSUFFIX}/g;s/__miscmansuffix__/${MISCMANSUFFIX}/g"
+ assuming that env vars like MANSUFFIX etc. have been set to the matching
+ manual volume numbers.
+ -->
+@@ -15,7 +15,7 @@
+ <refentry>
+ <refmeta>
+ <refentrytitle>xpxmhelloworld</refentrytitle>
+- <manvolnum>__mansuffix__</manvolnum>
++ <manvolnum>__appmansuffix__</manvolnum>
+ </refmeta>
+ <refnamediv>
+ <refname>xpxmhelloworld</refname>
+@@ -121,16 +121,16 @@
+ <!-- Xprint general references -->
+ <member><citerefentry><refentrytitle>Xprint</refentrytitle><manvolnum>__miscmansuffix__</manvolnum></citerefentry></member>
+ <member><citerefentry><refentrytitle>X11</refentrytitle><manvolnum>__miscmansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xplsprinters</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xphelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xplsprinters</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xphelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
+ <!--
+- <member><citerefentry><refentrytitle>xpxmhelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpxmhelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
+ -->
+- <member><citerefentry><refentrytitle>xpawhelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xpxthelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xpsimplehelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>Xserver</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>Xprt</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpawhelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpxthelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpsimplehelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>Xserver</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>Xprt</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
+ <!-- ToDO: Add manual pages for the single Xprint DDX implementations (PostScript/PDF/PCL/PCL-MONO/Raster/etc.) -->
+ <member><citerefentry><refentrytitle>libXp</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
+ <member><citerefentry><refentrytitle>libXprintUtils</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
+Index: xc/programs/xphelloworld/xpxthelloworld/xpxthelloworld.html
+diff -u xc/programs/xphelloworld/xpxthelloworld/xpxthelloworld.html:1.2 xc/programs/xphelloworld/xpxthelloworld/xpxthelloworld.html:1.2.6.1
+--- xc/programs/xphelloworld/xpxthelloworld/xpxthelloworld.html:1.2 Fri Apr 23 19:55:03 2004
++++ xc/programs/xphelloworld/xpxthelloworld/xpxthelloworld.html Wed Dec 15 07:17:49 2004
+@@ -1,4 +1,4 @@
+-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>xpxthelloworld</title><meta name="generator" content="DocBook XSL Stylesheets V1.62.4"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="id2590201"></a><div class="titlepage"><div></div><div></div></div><div class="refnamediv"><h2>Name</h2><p>xpxthelloworld — "Hello World"-like Xprint sample utility based on the Xt toolkit</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><tt class="command">xpxthelloworld</tt> [<tt class="option">-print</tt>] [<tt class="option">-printer <i class="replaceable"><tt>printernname</tt></i></tt>] [<tt class="option">-v</tt>] [<tt class="option">-h</tt>]</p></div></div><div class="refsect1" lang="en"><a name="id2802567"></a><h2>DESCRIPTION</h2><p><span><b class="command">xpxthelloworld</b></span> is a sample utility for Xprint, the
++<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>xpxthelloworld</title><meta name="generator" content="DocBook XSL Stylesheets V1.62.4"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="id2589918"></a><div class="titlepage"><div></div><div></div></div><div class="refnamediv"><h2>Name</h2><p>xpxthelloworld — "Hello World"-like Xprint sample utility based on the Xt toolkit</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><tt class="command">xpxthelloworld</tt> [<tt class="option">-print</tt>] [<tt class="option">-printer <i class="replaceable"><tt>printernname</tt></i></tt>] [<tt class="option">-v</tt>] [<tt class="option">-h</tt>]</p></div></div><div class="refsect1" lang="en"><a name="id2802597"></a><h2>DESCRIPTION</h2><p><span><b class="command">xpxthelloworld</b></span> is a sample utility for Xprint, the
+ printing system for the X Window system. It demonstrates how to send a test page to
+ the specified printer (or the default printer, if none is specified) based on
+ the Xt toolkit without using one of the special print shell widget classes
+@@ -6,10 +6,10 @@
+ <span class="citerefentry"><span class="refentrytitle">XmPrintShell</span>(3x)</span>
+ or
+ <span class="citerefentry"><span class="refentrytitle">XawPrintShell</span>(3x)</span>).
+- </p></div><div class="refsect1" lang="en"><a name="id2804972"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term"><tt class="option">-print</tt></span></dt><dd><p>Print (default is to display on the video Xserver)</p></dd><dt><span class="term"><tt class="option">-printer <i class="replaceable"><tt>printernname</tt></i></tt></span></dt><dd><p>printer to use</p></dd><dt><span class="term"><tt class="option">-v</tt></span></dt><dd><p>verbose output</p></dd><dt><span class="term"><tt class="option">-h</tt></span></dt><dd><p>print usage</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2805011"></a><h2>ENVIRONMENT</h2><div class="variablelist"><dl><dt><span class="term"><tt class="envar">XPSERVERLIST</tt></span></dt><dd><p><tt class="envar">${XPSERVERLIST}</tt> must be set,
++ </p></div><div class="refsect1" lang="en"><a name="id2804968"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term"><tt class="option">-print</tt></span></dt><dd><p>Print (default is to display on the video Xserver)</p></dd><dt><span class="term"><tt class="option">-printer <i class="replaceable"><tt>printernname</tt></i></tt></span></dt><dd><p>printer to use</p></dd><dt><span class="term"><tt class="option">-v</tt></span></dt><dd><p>verbose output</p></dd><dt><span class="term"><tt class="option">-h</tt></span></dt><dd><p>print usage</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2805011"></a><h2>ENVIRONMENT</h2><div class="variablelist"><dl><dt><span class="term"><tt class="envar">XPSERVERLIST</tt></span></dt><dd><p><tt class="envar">${XPSERVERLIST}</tt> must be set,
+ identifying the available Xprint servers.
+ See <span class="citerefentry"><span class="refentrytitle">Xprint</span>(7)</span>
+ for more details.
+- </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2805043"></a><h2>KNOWN BUGS</h2><p>
++ </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2805044"></a><h2>KNOWN BUGS</h2><p>
+ A full list of bugs can be obtained from the Xprint.org bug database (<a href="http://xprint.mozdev.org/xprint_bugs.html" target="_top">http://xprint.mozdev.org/xprint_bugs.html</a>).
+- </p></div><div class="refsect1" lang="en"><a name="id2805052"></a><h2>SEE ALSO</h2><p><span class="simplelist"><span class="citerefentry"><span class="refentrytitle">Xprint</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">X11</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">xplsprinters</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xphelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpxmhelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpawhelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpsimplehelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">Xserver</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">Xprt</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">libXp</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">libXprintUtils</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">libXprintAppUtils</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">XmPrintShell</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">XawPrintShell</span>(3x)</span>, Xprint FAQ (<a href="http://xprint.mozdev.org/docs/Xprint_FAQ.html" target="_top">http://xprint.mozdev.org/docs/Xprint_FAQ.html</a>), Xprint main site (<a href="http://xprint.mozdev.org/" target="_top">http://xprint.mozdev.org/</a>)</span></p></div></div></body></html>
++ </p></div><div class="refsect1" lang="en"><a name="id2805053"></a><h2>SEE ALSO</h2><p><span class="simplelist"><span class="citerefentry"><span class="refentrytitle">Xprint</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">X11</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">xplsprinters</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xphelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpxmhelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpawhelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpsimplehelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">Xserver</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">Xprt</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">libXp</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">libXprintUtils</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">libXprintAppUtils</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">XmPrintShell</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">XawPrintShell</span>(3x)</span>, Xprint FAQ (<a href="http://xprint.mozdev.org/docs/Xprint_FAQ.html" target="_top">http://xprint.mozdev.org/docs/Xprint_FAQ.html</a>), Xprint main site (<a href="http://xprint.mozdev.org/" target="_top">http://xprint.mozdev.org/</a>)</span></p></div></div></body></html>
+Index: xc/programs/xphelloworld/xpxthelloworld/xpxthelloworld.man
+diff -u xc/programs/xphelloworld/xpxthelloworld/xpxthelloworld.man:1.2 xc/programs/xphelloworld/xpxthelloworld/xpxthelloworld.man:1.2.6.1
+--- xc/programs/xphelloworld/xpxthelloworld/xpxthelloworld.man:1.2 Fri Apr 23 19:55:03 2004
++++ xc/programs/xphelloworld/xpxthelloworld/xpxthelloworld.man Wed Dec 15 07:17:49 2004
+@@ -1,18 +1,17 @@
+-.\" This manpage has been automatically generated by docbook2man
+-.\" from a DocBook document. This tool can be found at:
+-.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
+-.\" Please send any bug reports, improvements, comments, patches,
+-.\" etc. to Steve Cheng <steve@ggi-project.org>.
+-.TH "XPXTHELLOWORLD" "__mansuffix__" "13 February 2004" "" ""
++.\" -*- coding: us-ascii -*-
++.TH xpxthelloworld __appmansuffix__ "8 October 2004"
+ .SH NAME
+-xpxthelloworld \- \&"Hello World\&"-like Xprint sample utility based on the Xt toolkit
++xpxthelloworld \- "Hello World"-like Xprint sample utility based on the Xt toolkit
+ .SH SYNOPSIS
+-
+-\fBxpxthelloworld\fR [ \fB-print\fR] [ \fB-printer \fIprinternname\fB\fR] [ \fB-v\fR] [ \fB-h\fR]
+-
+-.SH "DESCRIPTION"
+-.PP
+-\fBxpxthelloworld\fR is a sample utility for Xprint, the
++.ad l
++\fBxpxthelloworld\fR \kx
++.if (\nxu > (\n(.lu / 2)) .nr x (\n(.lu / 5)
++'in \n(.iu+\nxu
++[\fB\-print\fR] [\fB\-printer \fBprinternname\fR\fR] [\fB\-v\fR] [\fB\-h\fR]
++'in \n(.iu-\nxu
++.ad b
++.SH DESCRIPTION
++xpxthelloworld is a sample utility for Xprint, the
+ printing system for the X Window system. It demonstrates how to send a test page to
+ the specified printer (or the default printer, if none is specified) based on
+ the Xt toolkit without using one of the special print shell widget classes
+@@ -20,29 +19,27 @@
+ \fBXmPrintShell\fR(__libmansuffix__)
+ or
+ \fBXawPrintShell\fR(__libmansuffix__)).
+-.SH "OPTIONS"
+-.TP
+-\fB-print \fR
++.SH OPTIONS
++.TP
++\fB\-print\fR
+ Print (default is to display on the video Xserver)
+-.TP
+-\fB-printer \fIprinternname\fB \fR
++.TP
++\fB\-printer \fIprinternname\fB\fR
+ printer to use
+-.TP
+-\fB-v \fR
++.TP
++\fB\-v\fR
+ verbose output
+-.TP
+-\fB-h \fR
++.TP
++\fB\-h\fR
+ print usage
+-.SH "ENVIRONMENT"
+-.TP
+-\fBXPSERVERLIST \fR
++.SH ENVIRONMENT
++.TP
++\fBXPSERVERLIST\fR
+ \fB${XPSERVERLIST}\fR must be set,
+ identifying the available Xprint servers.
+ See \fBXprint\fR(__miscmansuffix__)
+ for more details.
+ .SH "KNOWN BUGS"
+-.PP
+-A full list of bugs can be obtained from the Xprint.org bug database (http://xprint.mozdev.org/xprint_bugs.html <URL:http://xprint.mozdev.org/xprint_bugs.html>).
++A full list of bugs can be obtained from the Xprint.org bug database (http://xprint.mozdev.org/xprint_bugs.html).
+ .SH "SEE ALSO"
+-.PP
+-\fBXprint\fR(__miscmansuffix__), \fBX11\fR(__miscmansuffix__), \fBxplsprinters\fR(__mansuffix__), \fBxphelloworld\fR(__mansuffix__), \fBxpxmhelloworld\fR(__mansuffix__), \fBxpawhelloworld\fR(__mansuffix__), \fBxpsimplehelloworld\fR(__mansuffix__), \fBXserver\fR(__mansuffix__), \fBXprt\fR(__mansuffix__), \fBlibXp\fR(__libmansuffix__), \fBlibXprintUtils\fR(__libmansuffix__), \fBlibXprintAppUtils\fR(__libmansuffix__), \fBXmPrintShell\fR(__libmansuffix__), \fBXawPrintShell\fR(__libmansuffix__), Xprint FAQ (http://xprint.mozdev.org/docs/Xprint_FAQ.html <URL:http://xprint.mozdev.org/docs/Xprint_FAQ.html>), Xprint main site (http://xprint.mozdev.org/ <URL:http://xprint.mozdev.org/>)
++\fBXprint\fR(__miscmansuffix__), \fBX11\fR(__miscmansuffix__), \fBxplsprinters\fR(__appmansuffix__), \fBxphelloworld\fR(__appmansuffix__), \fBxpxmhelloworld\fR(__appmansuffix__), \fBxpawhelloworld\fR(__appmansuffix__), \fBxpsimplehelloworld\fR(__appmansuffix__), \fBXserver\fR(__appmansuffix__), \fBXprt\fR(__appmansuffix__), \fBlibXp\fR(__libmansuffix__), \fBlibXprintUtils\fR(__libmansuffix__), \fBlibXprintAppUtils\fR(__libmansuffix__), \fBXmPrintShell\fR(__libmansuffix__), \fBXawPrintShell\fR(__libmansuffix__), Xprint FAQ (http://xprint.mozdev.org/docs/Xprint_FAQ.html), Xprint main site (http://xprint.mozdev.org/)
+Index: xc/programs/xphelloworld/xpxthelloworld/xpxthelloworld.sgml
+diff -u xc/programs/xphelloworld/xpxthelloworld/xpxthelloworld.sgml:1.2 xc/programs/xphelloworld/xpxthelloworld/xpxthelloworld.sgml:1.2.6.1
+--- xc/programs/xphelloworld/xpxthelloworld/xpxthelloworld.sgml:1.2 Fri Apr 23 19:55:03 2004
++++ xc/programs/xphelloworld/xpxthelloworld/xpxthelloworld.sgml Wed Dec 15 07:17:49 2004
+@@ -1,13 +1,13 @@
+-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.2//EN" '/usr/share/sgml/docbook_4.2/docbook.dtd'>
++<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.2//EN" 'http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd'>
+
+ <!-- Process this file with DocBook tools to generate the output format
+ (such as manual pages or HTML documents).
+
+-Note that strings like __mansuffix__, __filemansuffix__, __libmansuffix__,
++Note that strings like __appmansuffix__, __filemansuffix__, __libmansuffix__,
+ __miscmansuffix__ etc. have to be replaced first (in theory that's the
+ job of ENTITIES but some XML tools are highly allergic to such stuff... ;-().
+ A quick way to do that is to filter this document via
+-/usr/bin/sed "s/__mansuffix__/${MANSUFFIX}/g;s/__filemansuffix__/${FILEMANSUFFIX}/g;s/__libmansuffix__/${LIBMANSUFFIX}/g;s/__miscmansuffix__/${MISCMANSUFFIX}/g"
++/usr/bin/sed "s/__appmansuffix__/${MANSUFFIX}/g;s/__filemansuffix__/${FILEMANSUFFIX}/g;s/__libmansuffix__/${LIBMANSUFFIX}/g;s/__miscmansuffix__/${MISCMANSUFFIX}/g"
+ assuming that env vars like MANSUFFIX etc. have been set to the matching
+ manual volume numbers.
+ -->
+@@ -15,7 +15,7 @@
+ <refentry>
+ <refmeta>
+ <refentrytitle>xpxthelloworld</refentrytitle>
+- <manvolnum>__mansuffix__</manvolnum>
++ <manvolnum>__appmansuffix__</manvolnum>
+ </refmeta>
+ <refnamediv>
+ <refname>xpxthelloworld</refname>
+@@ -121,16 +121,16 @@
+ <!-- Xprint general references -->
+ <member><citerefentry><refentrytitle>Xprint</refentrytitle><manvolnum>__miscmansuffix__</manvolnum></citerefentry></member>
+ <member><citerefentry><refentrytitle>X11</refentrytitle><manvolnum>__miscmansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xplsprinters</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xphelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xpxmhelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xpawhelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xplsprinters</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xphelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpxmhelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpawhelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
+ <!--
+- <member><citerefentry><refentrytitle>xpxthelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpxthelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
+ -->
+- <member><citerefentry><refentrytitle>xpsimplehelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>Xserver</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>Xprt</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpsimplehelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>Xserver</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>Xprt</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
+ <!-- ToDO: Add manual pages for the single Xprint DDX implementations (PostScript/PDF/PCL/PCL-MONO/Raster/etc.) -->
+ <member><citerefentry><refentrytitle>libXp</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
+ <member><citerefentry><refentrytitle>libXprintUtils</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
+Index: xc/programs/xplsprinters/xplsprinters.html
+diff -u xc/programs/xplsprinters/xplsprinters.html:1.4 xc/programs/xplsprinters/xplsprinters.html:1.4.4.2
+--- xc/programs/xplsprinters/xplsprinters.html:1.4 Tue Jun 29 17:10:13 2004
++++ xc/programs/xplsprinters/xplsprinters.html Wed Dec 15 07:17:49 2004
+@@ -1,8 +1,8 @@
+-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>xplsprinters</title><meta name="generator" content="DocBook XSL Stylesheets V1.62.4"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="id2590201"></a><div class="titlepage"><div></div><div></div></div><div class="refnamediv"><h2>Name</h2><p>xplsprinters — shows a list of Xprint printers and it's attributes</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><tt class="command">xplsprinters</tt> [<tt class="option">-printer <i class="replaceable"><tt>printername</tt></i></tt>] [<tt class="option">-d</tt>] [<tt class="option">-l</tt>] [<tt class="option">-dump</tt>] [<tt class="option">-h</tt>]</p></div></div><div class="refsect1" lang="en"><a name="id2804932"></a><h2>DESCRIPTION</h2><p><span><b class="command">xplsprinters</b></span> is a utility for Xprint, the
++<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>xplsprinters</title><meta name="generator" content="DocBook XSL Stylesheets V1.62.4"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="id2589918"></a><div class="titlepage"><div></div><div></div></div><div class="refnamediv"><h2>Name</h2><p>xplsprinters — shows a list of Xprint printers and it's attributes</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><tt class="command">xplsprinters</tt> [<tt class="option">-printer <i class="replaceable"><tt>printername</tt></i></tt>] [<tt class="option">-d</tt>] [<tt class="option">-l</tt>] [<tt class="option">-dump</tt>] [<tt class="option">-h</tt>]</p></div></div><div class="refsect1" lang="en"><a name="id2802600"></a><h2>DESCRIPTION</h2><p><span><b class="command">xplsprinters</b></span> is a utility for Xprint, the
+ printing system for the X Window system. It can deliver both a list
+ of printers and attributes supported for a specific list of
+ printers.
+- </p></div><div class="refsect1" lang="en"><a name="id2804945"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term"><tt class="option">-printer <i class="replaceable"><tt>printername</tt></i></tt></span></dt><dd><p>printer to use</p></dd><dt><span class="term"><tt class="option">-dump</tt></span></dt><dd><p>dump all available printer attributes</p></dd><dt><span class="term"><tt class="option">-h | -?</tt></span></dt><dd><p>print usage</p></dd><dt><span class="term"><tt class="option">-d</tt></span></dt><dd><p>print description for each printer</p></dd><dt><span class="term"><tt class="option">-l</tt></span></dt><dd><p>list detailed printer attribute information</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2805006"></a><h2>ENVIRONMENT</h2><div class="variablelist"><dl><dt><span class="term"><tt class="envar">XPSERVERLIST</tt></span></dt><dd><p><tt class="envar">${XPSERVERLIST}</tt> must be set,
++ </p></div><div class="refsect1" lang="en"><a name="id2804939"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term"><tt class="option">-printer <i class="replaceable"><tt>printername</tt></i></tt></span></dt><dd><p>printer to use</p></dd><dt><span class="term"><tt class="option">-dump</tt></span></dt><dd><p>dump all available printer attributes</p></dd><dt><span class="term"><tt class="option">-h | -?</tt></span></dt><dd><p>print usage</p></dd><dt><span class="term"><tt class="option">-d</tt></span></dt><dd><p>print description for each printer</p></dd><dt><span class="term"><tt class="option">-l</tt></span></dt><dd><p>list detailed printer attribute information</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2805006"></a><h2>ENVIRONMENT</h2><div class="variablelist"><dl><dt><span class="term"><tt class="envar">XPSERVERLIST</tt></span></dt><dd><p><tt class="envar">${XPSERVERLIST}</tt> must be set,
+ identifying the available Xprint servers.
+ See <span class="citerefentry"><span class="refentrytitle">Xprint</span>(7)</span>
+ for more details.
+@@ -27,4 +27,7 @@
+ orientation=landscape
+ default_plex=
+ plex=simplex
+-</tt></pre></div></div><div class="refsect1" lang="en"><a name="id2805097"></a><h2>SEE ALSO</h2><p><span class="simplelist"><span class="citerefentry"><span class="refentrytitle">Xprint</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">X11</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">xprehashprinterlist</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xphelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpxmhelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpawhelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpxthelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpsimplehelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">Xserver</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">Xprt</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">libXp</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">libXprintUtils</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">libXprintAppUtils</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">XmPrintShell</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">XawPrintShell</span>(3x)</span>, Xprint FAQ (<a href="http://xprint.mozdev.org/docs/Xprint_FAQ.html" target="_top">http://xprint.mozdev.org/docs/Xprint_FAQ.html</a>), Xprint main site (<a href="http://xprint.mozdev.org/" target="_top">http://xprint.mozdev.org/</a>)</span></p></div></div></body></html>
++</tt></pre></div></div><div class="refsect1" lang="en"><a name="id2805098"></a><h2>NOTES</h2><p>
++ The list of builtin fonts supported by a printer can be obtained
++ using the <span><b class="command">xlsfonts</b></span> command.
++ </p></div><div class="refsect1" lang="en"><a name="id2805108"></a><h2>SEE ALSO</h2><p><span class="simplelist"><span class="citerefentry"><span class="refentrytitle">Xprint</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">X11</span>(7)</span>, <span class="citerefentry"><span class="refentrytitle">xprehashprinterlist</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xphelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpxmhelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpawhelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpxthelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xpsimplehelloworld</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">xlsfonts</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">Xserver</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">Xprt</span>(1x)</span>, <span class="citerefentry"><span class="refentrytitle">libXp</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">libXprintUtils</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">libXprintAppUtils</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">XmPrintShell</span>(3x)</span>, <span class="citerefentry"><span class="refentrytitle">XawPrintShell</span>(3x)</span>, Xprint FAQ (<a href="http://xprint.mozdev.org/docs/Xprint_FAQ.html" target="_top">http://xprint.mozdev.org/docs/Xprint_FAQ.html</a>), Xprint main site (<a href="http://xprint.mozdev.org/" target="_top">http://xprint.mozdev.org/</a>)</span></p></div></div></body></html>
+Index: xc/programs/xplsprinters/xplsprinters.man
+diff -u xc/programs/xplsprinters/xplsprinters.man:1.4 xc/programs/xplsprinters/xplsprinters.man:1.4.4.2
+--- xc/programs/xplsprinters/xplsprinters.man:1.4 Tue Jun 29 17:10:13 2004
++++ xc/programs/xplsprinters/xplsprinters.man Wed Dec 15 07:17:49 2004
+@@ -1,48 +1,46 @@
+-.\" This manpage has been automatically generated by docbook2man
+-.\" from a DocBook document. This tool can be found at:
+-.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
+-.\" Please send any bug reports, improvements, comments, patches,
+-.\" etc. to Steve Cheng <steve@ggi-project.org>.
+-.TH "XPLSPRINTERS" "__mansuffix__" "29 June 2004" "" ""
++.\" -*- coding: us-ascii -*-
++.TH xplsprinters __appmansuffix__ "8 October 2004"
+ .SH NAME
+ xplsprinters \- shows a list of Xprint printers and it's attributes
+ .SH SYNOPSIS
+-
+-\fBxplsprinters\fR [ \fB-printer \fIprintername\fB\fR] [ \fB-d\fR] [ \fB-l\fR] [ \fB-dump\fR] [ \fB-h\fR]
+-
+-.SH "DESCRIPTION"
+-.PP
+-\fBxplsprinters\fR is a utility for Xprint, the
++.ad l
++\fBxplsprinters\fR \kx
++.if (\nxu > (\n(.lu / 2)) .nr x (\n(.lu / 5)
++'in \n(.iu+\nxu
++[\fB\-printer \fBprintername\fR\fR] [\fB\-d\fR] [\fB\-l\fR] [\fB\-dump\fR] [\fB\-h\fR]
++'in \n(.iu-\nxu
++.ad b
++.SH DESCRIPTION
++xplsprinters is a utility for Xprint, the
+ printing system for the X Window system. It can deliver both a list
+ of printers and attributes supported for a specific list of
+ printers.
+-.SH "OPTIONS"
+-.TP
+-\fB-printer \fIprintername\fB \fR
++.SH OPTIONS
++.TP
++\fB\-printer \fIprintername\fB\fR
+ printer to use
+-.TP
+-\fB-dump \fR
++.TP
++\fB\-dump\fR
+ dump all available printer attributes
+-.TP
+-\fB-h | -? \fR
++.TP
++\fB\-h | \-?\fR
+ print usage
+-.TP
+-\fB-d \fR
++.TP
++\fB\-d\fR
+ print description for each printer
+-.TP
+-\fB-l \fR
++.TP
++\fB\-l\fR
+ list detailed printer attribute information
+-.SH "ENVIRONMENT"
+-.TP
+-\fBXPSERVERLIST \fR
++.SH ENVIRONMENT
++.TP
++\fBXPSERVERLIST\fR
+ \fB${XPSERVERLIST}\fR must be set,
+ identifying the available Xprint servers.
+ See \fBXprint\fR(__miscmansuffix__)
+ for more details.
+-.SH "EXAMPLES"
+-.SS "LIST ALL AVAILABLE \&"X PRINT SPECIFIERS\&" (PRINTER NAMES)"
++.SH EXAMPLES
++\fBList all available "X Print Specifiers" (printer names)\fR
+ .PP
+-
+ .nf
+ % \fBxplsprinters\fR
+ .fi
+@@ -56,24 +54,26 @@
+ printer: xp_ps_spooldir_tmp_Xprintjobs@meridian:19
+ printer: xp_pdf_spooldir_tmp_Xprintjobs@meridian:19
+ .fi
+-.SS "GET INFORMATION ABOUT THE SUPPORTED ATTRIBUTES OF PRINTER \&"PS002\&":"
+-.PP
+
++.PP
++\fBGet information about the supported attributes of printer "ps002":\fR
++.PP
+ .nf
+-% \fBxplsprinters -printer ps002 -l\fR
++% \fBxplsprinters \-printer ps002 \-l\fR
+ .fi
+ .PP
+ would print:
+
+ .nf
++
+ printer: ps002@castor:18
+ description=
+- model-identifier=HPDJ1600C
+- default-medium=iso-a4
+- default-input-tray=
+- medium-source-sizes-supported=iso-a4 false 6.35 203.65 6.35 290.65
+- medium-source-sizes-supported=na-letter false 6.35 209.55 6.35 273.05
+- default-printer-resolution=300
++ model\-identifier=HPDJ1600C
++ default\-medium=iso\-a4
++ default\-input\-tray=
++ medium\-source\-sizes\-supported=iso\-a4 false 6.35 203.65 6.35 290.65
++ medium\-source\-sizes\-supported=na\-letter false 6.35 209.55 6.35 273.05
++ default\-printer\-resolution=300
+ resolution=300
+ default_orientation=
+ orientation=portrait
+@@ -81,6 +81,9 @@
+ default_plex=
+ plex=simplex
+ .fi
++
++.SH NOTES
++The list of builtin fonts supported by a printer can be obtained
++using the xlsfonts command.
+ .SH "SEE ALSO"
+-.PP
+-\fBXprint\fR(__miscmansuffix__), \fBX11\fR(__miscmansuffix__), \fBxprehashprinterlist\fR(__mansuffix__), \fBxphelloworld\fR(__mansuffix__), \fBxpxmhelloworld\fR(__mansuffix__), \fBxpawhelloworld\fR(__mansuffix__), \fBxpxthelloworld\fR(__mansuffix__), \fBxpsimplehelloworld\fR(__mansuffix__), \fBXserver\fR(__mansuffix__), \fBXprt\fR(__mansuffix__), \fBlibXp\fR(__libmansuffix__), \fBlibXprintUtils\fR(__libmansuffix__), \fBlibXprintAppUtils\fR(__libmansuffix__), \fBXmPrintShell\fR(__libmansuffix__), \fBXawPrintShell\fR(__libmansuffix__), Xprint FAQ (http://xprint.mozdev.org/docs/Xprint_FAQ.html <URL:http://xprint.mozdev.org/docs/Xprint_FAQ.html>), Xprint main site (http://xprint.mozdev.org/ <URL:http://xprint.mozdev.org/>)
++\fBXprint\fR(__miscmansuffix__), \fBX11\fR(__miscmansuffix__), \fBxprehashprinterlist\fR(__appmansuffix__), \fBxphelloworld\fR(__appmansuffix__), \fBxpxmhelloworld\fR(__appmansuffix__), \fBxpawhelloworld\fR(__appmansuffix__), \fBxpxthelloworld\fR(__appmansuffix__), \fBxpsimplehelloworld\fR(__appmansuffix__), \fBxlsfonts\fR(__appmansuffix__), \fBXserver\fR(__appmansuffix__), \fBXprt\fR(__appmansuffix__), \fBlibXp\fR(__libmansuffix__), \fBlibXprintUtils\fR(__libmansuffix__), \fBlibXprintAppUtils\fR(__libmansuffix__), \fBXmPrintShell\fR(__libmansuffix__), \fBXawPrintShell\fR(__libmansuffix__), Xprint FAQ (http://xprint.mozdev.org/docs/Xprint_FAQ.html), Xprint main site (http://xprint.mozdev.org/)
+Index: xc/programs/xplsprinters/xplsprinters.sgml
+diff -u xc/programs/xplsprinters/xplsprinters.sgml:1.4 xc/programs/xplsprinters/xplsprinters.sgml:1.4.4.2
+--- xc/programs/xplsprinters/xplsprinters.sgml:1.4 Tue Jun 29 17:10:13 2004
++++ xc/programs/xplsprinters/xplsprinters.sgml Wed Dec 15 07:17:49 2004
+@@ -1,13 +1,13 @@
+-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.2//EN" '/usr/share/sgml/docbook_4.2/docbook.dtd'>
++<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.2//EN" 'http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd'>
+
+ <!-- Process this file with DocBook tools to generate the output format
+ (such as manual pages or HTML documents).
+
+-Note that strings like __mansuffix__, __filemansuffix__, __libmansuffix__,
++Note that strings like __appmansuffix__, __filemansuffix__, __libmansuffix__,
+ __miscmansuffix__ etc. have to be replaced first (in theory that's the
+ job of ENTITIES but some XML tools are highly allergic to such stuff... ;-().
+ A quick way to do that is to filter this document via
+-/usr/bin/sed "s/__mansuffix__/${MANSUFFIX}/g;s/__filemansuffix__/${FILEMANSUFFIX}/g;s/__libmansuffix__/${LIBMANSUFFIX}/g;s/__miscmansuffix__/${MISCMANSUFFIX}/g"
++/usr/bin/sed "s/__appmansuffix__/${MANSUFFIX}/g;s/__filemansuffix__/${FILEMANSUFFIX}/g;s/__libmansuffix__/${LIBMANSUFFIX}/g;s/__miscmansuffix__/${MISCMANSUFFIX}/g"
+ assuming that env vars like MANSUFFIX etc. have been set to the matching
+ manual volume numbers.
+ -->
+@@ -15,7 +15,7 @@
+ <refentry>
+ <refmeta>
+ <refentrytitle>xplsprinters</refentrytitle>
+- <manvolnum>__mansuffix__</manvolnum>
++ <manvolnum>__appmansuffix__</manvolnum>
+ </refmeta>
+
+ <refnamediv>
+@@ -151,6 +151,14 @@
+ </refsect1>
+
+ <refsect1>
++ <title>NOTES</title>
++ <para>
++ The list of builtin fonts supported by a printer can be obtained
++ using the <command>xlsfonts</command> command.
++ </para>
++ </refsect1>
++
++ <refsect1>
+ <title>SEE ALSO</title>
+ <para>
+ <simplelist type="inline">
+@@ -161,16 +169,17 @@
+ <member><citerefentry><refentrytitle>Xprint</refentrytitle><manvolnum>__miscmansuffix__</manvolnum></citerefentry></member>
+ <member><citerefentry><refentrytitle>X11</refentrytitle><manvolnum>__miscmansuffix__</manvolnum></citerefentry></member>
+ <!--
+- <member><citerefentry><refentrytitle>xplsprinters</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xplsprinters</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
+ -->
+- <member><citerefentry><refentrytitle>xprehashprinterlist</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xphelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xpxmhelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xpawhelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xpxthelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xpsimplehelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>Xserver</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>Xprt</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xprehashprinterlist</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xphelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpxmhelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpawhelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpxthelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpsimplehelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xlsfonts</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>Xserver</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>Xprt</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
+ <!-- ToDO: Add manual pages for the single Xprint DDX implementations (PostScript/PDF/PCL/PCL-MONO/Raster/etc.) -->
+ <member><citerefentry><refentrytitle>libXp</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
+ <member><citerefentry><refentrytitle>libXprintUtils</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
+Index: xc/programs/xprehashprinterlist/xprehashprinterlist.man
+diff -u xc/programs/xprehashprinterlist/xprehashprinterlist.man:1.1 xc/programs/xprehashprinterlist/xprehashprinterlist.man:1.1.4.1
+--- xc/programs/xprehashprinterlist/xprehashprinterlist.man:1.1 Tue Jun 29 17:10:13 2004
++++ xc/programs/xprehashprinterlist/xprehashprinterlist.man Wed Dec 15 07:17:49 2004
+@@ -1,41 +1,39 @@
+-.\" This manpage has been automatically generated by docbook2man
+-.\" from a DocBook document. This tool can be found at:
+-.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
+-.\" Please send any bug reports, improvements, comments, patches,
+-.\" etc. to Steve Cheng <steve@ggi-project.org>.
+-.TH "XPREHASHPRINTERLIST" "__mansuffix__" "29 June 2004" "" ""
++.\" -*- coding: us-ascii -*-
++.TH xprehashprinterlist __appmansuffix__ "8 October 2004"
+ .SH NAME
+ xprehashprinterlist \- Recomputes the list of available printers.
+ .SH SYNOPSIS
+-
+-\fBxprehashprinterlist\fR [ \fB-v\fR] [ \fB-h\fR]
+-
+-.SH "DESCRIPTION"
+-.PP
+-\fBxprehashprinterlist\fR causes all Xprint servers
+-to recompute (update) their lists of available printers, and update the
++.ad l
++\fBxprehashprinterlist\fR \kx
++.if (\nxu > (\n(.lu / 2)) .nr x (\n(.lu / 5)
++'in \n(.iu+\nxu
++[\fB\-v\fR] [\fB\-h\fR]
++'in \n(.iu-\nxu
++.ad b
++.SH DESCRIPTION
++xprehashprinterlist causes all Xprint servers
++to recompute (update) their lists of available printers, and update the
+ attributes for the printers. The intended usage of this tool is that
+ a system administrator can run it after changing the printer topology.
+-.SH "OPTIONS"
+-.TP
+-\fB-v \fR
++.SH OPTIONS
++.TP
++\fB\-v\fR
+ generate verbose output
+-.TP
+-\fB-h | -? \fR
++.TP
++\fB\-h | \-?\fR
+ print usage
+-.SH "ENVIRONMENT"
+-.TP
+-\fBXPSERVERLIST \fR
++.SH ENVIRONMENT
++.TP
++\fBXPSERVERLIST\fR
+ \fB${XPSERVERLIST}\fR must be set,
+ identifying the available Xprint servers.
+ See \fBXprint\fR(__miscmansuffix__)
+ for more details.
+-.SH "EXAMPLES"
+-.SS "UPDATE THE LIST OF AVAILABLE PRINTERS"
++.SH EXAMPLES
++\fBUpdate the list of available printers\fR
+ .PP
+-
+ .nf
+-% \fBxprehashprinterlist -v\fR
++% \fBxprehashprinterlist \-v\fR
+ .fi
+ .PP
+ would print:
+@@ -43,11 +41,10 @@
+ .nf
+ Rehashing printer list on server 'meridian:34'
+ .fi
+-.SH "NOTES"
+-.PP
+-\fBxprehashprinterlist\fR rehashes all printer lists of all print servers.
+-Alternatively \fBxset rehashprinterlist\fR may be used to rehash only the
++
++.SH NOTES
++xprehashprinterlist rehashes all printer lists of all print servers.
++Alternatively xset rehashprinterlist may be used to rehash only the
+ list of printers in one print server.
+ .SH "SEE ALSO"
+-.PP
+-\fBXprint\fR(__miscmansuffix__), \fBX11\fR(__miscmansuffix__), \fBxset\fR(__mansuffix__), \fBxplsprinters\fR(__mansuffix__), \fBxphelloworld\fR(__mansuffix__), \fBxpxmhelloworld\fR(__mansuffix__), \fBxpawhelloworld\fR(__mansuffix__), \fBxpxthelloworld\fR(__mansuffix__), \fBxpsimplehelloworld\fR(__mansuffix__), \fBXserver\fR(__mansuffix__), \fBXprt\fR(__mansuffix__), \fBlibXp\fR(__libmansuffix__), \fBlibXprintUtils\fR(__libmansuffix__), \fBlibXprintAppUtils\fR(__libmansuffix__), \fBXmPrintShell\fR(__libmansuffix__), \fBXawPrintShell\fR(__libmansuffix__), Xprint FAQ (http://xprint.mozdev.org/docs/Xprint_FAQ.html <URL:http://xprint.mozdev.org/docs/Xprint_FAQ.html>), Xprint main site (http://xprint.mozdev.org/ <URL:http://xprint.mozdev.org/>)
++\fBXprint\fR(__miscmansuffix__), \fBX11\fR(__miscmansuffix__), \fBxset\fR(__appmansuffix__), \fBxplsprinters\fR(__appmansuffix__), \fBxphelloworld\fR(__appmansuffix__), \fBxpxmhelloworld\fR(__appmansuffix__), \fBxpawhelloworld\fR(__appmansuffix__), \fBxpxthelloworld\fR(__appmansuffix__), \fBxpsimplehelloworld\fR(__appmansuffix__), \fBXserver\fR(__appmansuffix__), \fBXprt\fR(__appmansuffix__), \fBlibXp\fR(__libmansuffix__), \fBlibXprintUtils\fR(__libmansuffix__), \fBlibXprintAppUtils\fR(__libmansuffix__), \fBXmPrintShell\fR(__libmansuffix__), \fBXawPrintShell\fR(__libmansuffix__), Xprint FAQ (http://xprint.mozdev.org/docs/Xprint_FAQ.html), Xprint main site (http://xprint.mozdev.org/)
+Index: xc/programs/xprehashprinterlist/xprehashprinterlist.sgml
+diff -u xc/programs/xprehashprinterlist/xprehashprinterlist.sgml:1.1 xc/programs/xprehashprinterlist/xprehashprinterlist.sgml:1.1.4.1
+--- xc/programs/xprehashprinterlist/xprehashprinterlist.sgml:1.1 Tue Jun 29 17:10:13 2004
++++ xc/programs/xprehashprinterlist/xprehashprinterlist.sgml Wed Dec 15 07:17:49 2004
+@@ -1,13 +1,13 @@
+-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.2//EN" '/usr/share/sgml/docbook_4.2/docbook.dtd'>
++<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.2//EN" 'http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd'>
+
+ <!-- Process this file with DocBook tools to generate the output format
+ (such as manual pages or HTML documents).
+
+-Note that strings like __mansuffix__, __filemansuffix__, __libmansuffix__,
++Note that strings like __appmansuffix__, __filemansuffix__, __libmansuffix__,
+ __miscmansuffix__ etc. have to be replaced first (in theory that's the
+ job of ENTITIES but some XML tools are highly allergic to such stuff... ;-().
+ A quick way to do that is to filter this document via
+-/usr/bin/sed "s/__mansuffix__/${MANSUFFIX}/g;s/__filemansuffix__/${FILEMANSUFFIX}/g;s/__libmansuffix__/${LIBMANSUFFIX}/g;s/__miscmansuffix__/${MISCMANSUFFIX}/g"
++/usr/bin/sed "s/__appmansuffix__/${MANSUFFIX}/g;s/__filemansuffix__/${FILEMANSUFFIX}/g;s/__libmansuffix__/${LIBMANSUFFIX}/g;s/__miscmansuffix__/${MISCMANSUFFIX}/g"
+ assuming that env vars like MANSUFFIX etc. have been set to the matching
+ manual volume numbers.
+ -->
+@@ -15,7 +15,7 @@
+ <refentry>
+ <refmeta>
+ <refentrytitle>xprehashprinterlist</refentrytitle>
+- <manvolnum>__mansuffix__</manvolnum>
++ <manvolnum>__appmansuffix__</manvolnum>
+ </refmeta>
+
+ <refnamediv>
+@@ -116,17 +116,17 @@
+ <member><citerefentry><refentrytitle>Xprint</refentrytitle><manvolnum>__miscmansuffix__</manvolnum></citerefentry></member>
+ <member><citerefentry><refentrytitle>X11</refentrytitle><manvolnum>__miscmansuffix__</manvolnum></citerefentry></member>
+ <!--
+- <member><citerefentry><refentrytitle>xprehashprinterlist</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xprehashprinterlist</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
+ -->
+- <member><citerefentry><refentrytitle>xset</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xplsprinters</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xphelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xpxmhelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xpawhelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xpxthelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>xpsimplehelloworld</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>Xserver</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+- <member><citerefentry><refentrytitle>Xprt</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xset</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xplsprinters</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xphelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpxmhelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpawhelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpxthelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>xpsimplehelloworld</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>Xserver</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
++ <member><citerefentry><refentrytitle>Xprt</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
+ <!-- ToDO: Add manual pages for the single Xprint DDX implementations (PostScript/PDF/PCL/PCL-MONO/Raster/etc.) -->
+ <member><citerefentry><refentrytitle>libXp</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
+ <member><citerefentry><refentrytitle>libXprintUtils</refentrytitle><manvolnum>__libmansuffix__</manvolnum></citerefentry></member>
+Index: xc/programs/xrx/Imakefile
+diff -u xc/programs/xrx/Imakefile:1.3 xc/programs/xrx/Imakefile:1.3.2.1
+--- xc/programs/xrx/Imakefile:1.3 Wed Aug 25 00:30:42 2004
++++ xc/programs/xrx/Imakefile Mon Jan 24 05:01:54 2005
+@@ -1,20 +1,10 @@
+ XCOMM $Xorg: Imakefile,v 1.3 2000/08/17 19:54:56 cpqbld Exp $
+-XCOMM $XdotOrg: xc/programs/xrx/Imakefile,v 1.3 2004/08/25 00:30:42 kem Exp $
++XCOMM $XdotOrg: xc/programs/xrx/Imakefile,v 1.3.2.1 2005/01/24 05:01:54 gisburn Exp $
+
+-
+-
+-XCOMM $XFree86$
+-
+-#ifdef deprecated
+ #define IHaveSubdirs
+ #define PassCDebugFlags CDEBUGFLAGS="$(CDEBUGFLAGS)"
+
+-#if BuildPlugin && !defined(VendorHasX11R6_3libXext)
+-LIBXPLUGINDIR = libxplugin
+-#endif
+-
+- SUBDIRS = $(LIBXPLUGINDIR) plugin
++ SUBDIRS = helper plugin xnest-plugin
+
+ MakeSubdirs($(SUBDIRS))
+ DependSubdirs($(SUBDIRS))
+-#endif
+Index: xc/programs/xrx/helper/helper.c
+diff -u xc/programs/xrx/helper/helper.c:1.1.1.1 xc/programs/xrx/helper/helper.c:1.1.1.1.6.1
+--- xc/programs/xrx/helper/helper.c:1.1.1.1 Fri Nov 14 16:49:23 2003
++++ xc/programs/xrx/helper/helper.c Wed Dec 15 01:22:19 2004
+@@ -526,4 +526,6 @@
+
+ /* then wait for it... */
+ XtAppMainLoop(app_context);
++
++ return EXIT_SUCCESS;
+ }
+Index: xc/programs/xrx/plugin/Imakefile
+diff -u xc/programs/xrx/plugin/Imakefile:1.2 xc/programs/xrx/plugin/Imakefile:1.2.4.1
+--- xc/programs/xrx/plugin/Imakefile:1.2 Fri Apr 23 19:55:03 2004
++++ xc/programs/xrx/plugin/Imakefile Mon Jan 24 05:01:54 2005
+@@ -1,9 +1,4 @@
+-XCOMM $Xorg: Imakefile,v 1.4 2001/02/20 15:51:17 pookie Exp $
+-
+-
+-
+-
+-XCOMM $XFree86: xc/programs/xrx/plugin/Imakefile,v 1.12tsi Exp $
++XCOMM $Xorg: Imakefile,v 1.5 2005/09/160 00:51:17 gisburn Exp $
+
+ #if HasSharedLibraries
+
+@@ -14,7 +9,7 @@
+ #define LibName xrx
+ #define SoRev SOXRXREV
+
+-SharedLibReferences(xrx,xrx,$(RXSRC),SOXRXREV,6.3)
++SharedLibReferences(xrx,xrx,$(RXSRC),SOXRXREV,6.8)
+
+ RXSRC = ../rx
+ RX_INCLUDES = -I$(RXSRC)
+@@ -23,73 +18,7 @@
+ SOCKET_DEFINES = -DBSD44SOCKETS
+ #endif
+
+-/* Netscape be damned. Allow fresh (re-)installs to proceed correctly */
+-#if UseInstalledX11
+-
+-#ifdef SGIArchitecture
+-#if OSMajorVersion == 5 && OSMinorVersion < 3 || OSMajorVersion == 6 && OSMinorVersion < 2
+- XT_DEFINES = -DXUSE_XTREGISTERWINDOW
+-#endif
+-/* Even though we want to build the distribution with -n32, Navigator 3.0
+- * binaries are still built on IRIX 5.2, which means we need to use the
+- * old style object format. This is a hack because this Imakefile gets
+- * included too late to do this properly, that is to say that the
+- * CCOPTIONS in Imake.tmpl gets the -n32 options that we don't want,
+- * but the CCOPTIONS in Library.tmpl does get set correctly, and over-
+- * rides the value. So it works, but it's not pretty.
+- */
+-#undef sgiCCOptions
+-#define sgiCCOptions -xansi
+-#ifdef Mips64Architecture
+- SHLIBLDFLAGS = -shared
+-#endif
+- LD = ld
+-#endif
+-
+-#ifdef SunArchitecture
+-VENDOR_INCLUDES = -I/usr/openwin/include
+-#if OSMajorVersion < 5 || OSMajorVersion == 5 && OSMinorVersion < 6
+- XT_DEFINES = -DXUSE_XTREGISTERWINDOW
+-#endif
+-#if !HasGcc
+-/*
+- * Based on Xmd.h 2.6 appears to be no more than R6pl11, so we need this.
+- * Hopefully Sun will fix this in 2.7.
+- */
+-#undef DefaultCCOptions
+-#define DefaultCCOptions -Xc
+-#endif
+-#if OSMajorVersion == 4
+-FUNCPROTO_DEFINES = -DXFUNCPROTO_NOT_AVAILABLE
+-#endif
+-#endif
+-
+-#ifdef HPArchitecture
+-/* Even though HP ships R6 in 10.20, Netscape 3.x is built on HPUX 9 and is
+- * linked against X11R5 libraries, so we continue to use _XtRegisterWindow
+- * until such time as Netscape releases a version that is linked with X11R6.
+- */
+- XT_DEFINES = -DXUSE_XTREGISTERWINDOW
+-#if OSMajorVersion < 10 || (OSMajorVersion == 10 && OSMinorVersion < 2)
+- TOP_INCLUDES = -I/usr/include -I$(BUILDINCDIR)
+-#else
+- TOP_INCLUDES = -I/usr/include/X11R5 -I$(BUILDINCDIR)
+-#endif
+-#endif
+-
+-#if defined(AlphaArchitecture) && defined(OSF1Architecture)
+-#if OSMajorVersion < 4
+- XT_DEFINES = -DXUSE_XTREGISTERWINDOW
+-#endif
+-#endif
+-
+-#ifdef IBMArchitecture
+-/* No clue when IBM might ship R6 */
+- XT_DEFINES = -DXUSE_XTREGISTERWINDOW
+-#endif
+-
+-#endif /* UseInstalledX11 */
+-
++XCOMM -DPLUGIN_TRACE can be added to the following definition to debug
+ PLUGIN_DEFINES = -DXP_UNIX
+ PLUGIN_INCLUDES = -I./include
+
+@@ -107,56 +36,7 @@
+ OBJS = Main.o SetWin.o PProcess.o NewNDest.o Global.o stubs.o \
+ $(PARAMS_OBJS) $(XMISC_OBJS)
+
+-#if UseInstalledX11
+-
+-XCOMM we need to link in the right libraries so it will work no matter
+-XCOMM which libraries Netscape itself is using.
+-#if !VendorHasX11R6_3libXext
+-X11R6_3_EXTENSIONS = ../libxplugin/libxplugin.a
+-#ifdef SunArchitecture
+-PLUGIN_LDOPTIONS = -L/usr/openwin/lib
+-CCENVSETUP =
+-#if OSMajorVersion == 5 && OSMinorVersion > 5
+-RXICELIB = $(ICELIB)
+-#endif
+-#if OSMajorVersion == 4
+- EXTENSIONLIB =
+-#endif
+-#endif
+-#ifdef HPArchitecture
+-#if OSMajorVersion < 10 || (OSMajorVersion == 10 && OSMinorVersion < 2)
+- LDPRELIBS = -L/usr/lib/X11
+-#else
+- LDPRELIBS = -L/usr/lib/X11R5
+-#endif
+-#endif
+-#ifdef IBMArchitecture
+- XTOOLONLYLIB = -lXm -lXt
+- EXTENSIONLIB = -lXext
+- XONLYLIB = -lX11
+- RXICELIB = $(ICELIB)
+- LDPOSTLIBS =
+- LDPRELIBS =
+-#endif
+-#ifdef SequentArchitecture
+- RXICELIB = $(ICELIB)
+- XONLYLIB = -lX11 -lsocket
+-PLUGIN_LDOPTIONS = $(LDPRELIBS)
+-#endif
+-#else
+-PLUGIN_LDOPTIONS = $(LDPRELIBS)
+-#endif
+-
+-/* Sun and HP don't ship it yet, SGI has it inside libXt. */
+-#if defined(AlphaArchitecture) && defined(OSF1Architecture)
+-RXICELIB = $(ICELIB)
+-#endif
+-
+-#else /* UseInstalledX11 */
+-PLUGIN_LDOPTIONS = $(LDPRELIBS)
+-#endif /* UseInstalledX11 */
+-
+- REQUIREDLIBS = $(X11R6_3_EXTENSIONS) $(PLUGIN_LDOPTIONS) $(RXICELIB) $(XTOOLONLYLIB) $(XLIB)
++ REQUIREDLIBS = $(LDPRELIB) XawClientLibs $(XTOOLONLYLIB) $(XPLIB) $(XLIB)
+
+ #include <Library.tmpl>
+
+@@ -171,10 +51,4 @@
+ DependTarget()
+ InstallManPage(libxrx,$(MANDIR))
+
+-#ifdef IBMArchitecture
+-install:: shr.o
+- $(INSTALL) $(INSTALLFLAGS) $(INSTLIBFLAGS) shr.o $(DESTDIR)$(SHLIBDIR)/lib$(LIBNAME).so
+- $(RM) $(DESTDIR)$(SHLIBDIR)/lib$(LIBNAME).a
+-#endif
+-
+ #endif /* HasSharedLibraries */
+Index: xc/programs/xrx/plugin/Main.c
+diff -u xc/programs/xrx/plugin/Main.c:1.2 xc/programs/xrx/plugin/Main.c:1.2.4.1
+--- xc/programs/xrx/plugin/Main.c:1.2 Fri Apr 23 19:55:03 2004
++++ xc/programs/xrx/plugin/Main.c Mon Jan 24 05:01:54 2005
+@@ -52,11 +52,20 @@
+ *
+ */
+
+-#include <ctype.h>
+-#include <stdlib.h>
++
+ #include "RxPlugin.h"
+-#include "X11/StringDefs.h"
++#include <X11/StringDefs.h>
+
++#ifdef USE_MOTIF
++extern WidgetClass xmLabelGadgetClass;
++extern WidgetClass xmPushButtonGadgetClass;
++#else
++#include <X11/Xaw/Label.h>
++#include <X11/Xaw/Command.h>
++#endif /* USE_MOTIF */
++
++#include <ctype.h>
++#include <stdlib.h>
+
+ /***********************************************************************
+ * Utility functions to deal with list of arguments
+@@ -380,14 +389,6 @@
+ StartApplication(This);
+ }
+
+-#if defined(linux) || (defined(sun) && !defined(SVR4))
+-/* deficient linux linker semantics */
+-static WidgetClass xmLabelGadgetClass;
+-static WidgetClass xmPushButtonGadgetClass;
+-#else
+-extern WidgetClass xmLabelGadgetClass;
+-extern WidgetClass xmPushButtonGadgetClass;
+-#endif
+
+ void
+ RxpSetStatusWidget(PluginInstance* This, PluginState state)
+@@ -415,35 +416,12 @@
+ XrmPutStringResource (&db, "*Rx_Start.labelString", "Start");
+ XrmPutStringResource (&db, "RxPlugin_BeenHere", "YES");
+ }
+-#if defined(linux) || (defined(sun) && !defined(SVR4))
+- /*
+- lame loader semantics mean we have to go fishing around to
+- come up with widget class records so we can create some widgets.
+-
+- Names of widgets changed in 4.x, so look for those names too
+- for linux.
+-
+- If Microsoft ever does IE for Linux we'll have to figure out
+- those names too.
+- */
+- if (xmLabelGadgetClass == NULL) {
+- Widget w;
+-
+- w = XtNameToWidget (This->toplevel_widget, "*topLeftArea.urlLabel");
+- if (w == NULL)
+- w = XtNameToWidget (This->toplevel_widget, "*urlBar.urlLocationLabel");
+- xmLabelGadgetClass = XtClass (w);
+- w = XtNameToWidget (This->toplevel_widget, "*toolBar.abort");
+- if (w == NULL)
+- w = XtNameToWidget (This->toplevel_widget, "*PopupMenu.openCustomUrl");
+- xmPushButtonGadgetClass = XtClass (w);
+- }
+-#endif
+
+ n = 0;
+ XtSetArg(args[n], "shadowThickness", 1); n++;
+ XtSetArg(args[n], XtNwidth, This->width); n++;
+ XtSetArg(args[n], XtNheight, This->height); n++;
++#ifdef USE_MOTIF
+ if (state == LOADING) {
+ /* create a label */
+ This->status_widget =
+@@ -465,6 +443,29 @@
+ } else if (state == RUNNING) {
+ /* nothing else to be done */
+ }
++#else
++ if (state == LOADING) {
++ /* create a label */
++ This->status_widget =
++ XtCreateManagedWidget("Rx_Loading", labelWidgetClass,
++ This->plugin_widget, args, n);
++#ifndef NO_STARTING_STATE
++ } else if (state == STARTING) {
++ /* create a label */
++ This->status_widget =
++ XtCreateManagedWidget("Rx_Starting", labelWidgetClass,
++ This->plugin_widget, args, n);
++#endif
++ } else if (state == WAITING) {
++ /* create a push button */
++ This->status_widget =
++ XtCreateManagedWidget("Rx_Start", commandWidgetClass,
++ This->plugin_widget, args, n);
++ XtAddCallback(This->status_widget, XtNcallback, StartCB, This);
++ } else if (state == RUNNING) {
++ /* nothing else to be done */
++ }
++#endif /* USE_MOTIF */
+ This->state = state;
+ }
+
+Index: xc/programs/xrx/plugin/PProcess.c
+diff -u xc/programs/xrx/plugin/PProcess.c:1.2 xc/programs/xrx/plugin/PProcess.c:1.2.4.1
+--- xc/programs/xrx/plugin/PProcess.c:1.2 Fri Apr 23 19:55:03 2004
++++ xc/programs/xrx/plugin/PProcess.c Mon Jan 24 05:01:54 2005
+@@ -686,6 +686,7 @@
+ RxpTeardown (PluginInstance* This)
+ {
+ if (This->toplevel_widget != NULL) {
++#if 0 /* this crashes mozilla/firefox */
+ /* ConfigureNotify on top level */
+ XtRemoveRawEventHandler (This->toplevel_widget,
+ StructureNotifyMask,
+@@ -697,6 +698,7 @@
+ True,
+ RxpWmDelWinHandler,
+ (XtPointer) This);
++#endif
+ #if 0
+ XmRemoveWMProtocolCallback (This->toplevel_widget,
+ RxGlobal.wm_delete_window,
+Index: xc/programs/xrx/plugin/include/npapi.h
+diff -u xc/programs/xrx/plugin/include/npapi.h:1.2 xc/programs/xrx/plugin/include/npapi.h:1.2.4.1
+--- xc/programs/xrx/plugin/include/npapi.h:1.2 Fri Apr 23 19:55:03 2004
++++ xc/programs/xrx/plugin/include/npapi.h Tue Feb 1 11:06:51 2005
+@@ -40,12 +40,15 @@
+ #ifndef _UINT32
+ typedef unsigned int uint32;
+ #endif
++
++#if !(defined(_AIX) && defined(_H_INTTYPES) && defined(_ALL_SOURCE))
+ #ifndef _INT16
+ typedef short int16;
+ #endif
+ #ifndef _INT32
+ typedef int int32;
+ #endif
++#endif
+
+ #ifndef FALSE
+ #define FALSE (0)
+Index: xc/programs/xrx/xnest-plugin/Imakefile
+diff -u xc/programs/xrx/xnest-plugin/Imakefile:1.1.1.1 xc/programs/xrx/xnest-plugin/Imakefile:1.1.1.1.6.1
+--- xc/programs/xrx/xnest-plugin/Imakefile:1.1.1.1 Fri Nov 14 16:49:23 2003
++++ xc/programs/xrx/xnest-plugin/Imakefile Mon Jan 24 05:01:54 2005
+@@ -1,4 +1,4 @@
+-XCOMM $Xorg: Imakefile,v 1.3 2000/08/17 19:55:03 cpqbld Exp $
++XCOMM $Xorg: Imakefile,v 1.4 2004/09/16 00:55:03 gisburn Exp $
+
+ XCOMM This isn't an option we must build a shared lib
+ #define DoSharedLib YES
+@@ -7,7 +7,7 @@
+ #define LibName xrxnest
+ #define SoRev SOXRXREV
+
+-SharedLibReferences(xrxnest,xrxnest,$(RXSRC),SOXRXREV,6.3)
++SharedLibReferences(xrxnest,xrxnest,$(RXSRC),SOXRXREV,6.8)
+
+ RXSRC = ../rx
+ RX_INCLUDES = -I$(RXSRC)
+@@ -17,31 +17,6 @@
+ SOCKET_DEFINES = -DBSD44SOCKETS
+ #endif
+
+-#ifdef SGIArchitecture
+-#if OSMajorVersion == 5 && OSMinorVersion < 3 || OSMajorVersion == 6 && OSMinorV
+-ersion < 2
+- XT_DEFINES = -DXUSE_XTREGISTERWINDOW
+-#endif
+-/* Even though we want to build the distribution with -n32, Navigator 3.0
+- * binaries are still built on IRIX 5.2, which means we need to use the
+- * old style object format. This is a hack because this Imakefile gets
+- * included too late to do this properly, that is to say that the
+- * CCOPTIONS in Imake.tmpl gets the -n32 options that we don't want,
+- * but the CCOPTIONS in Library.tmpl does get set correctly, and over-
+- * rides the value. So it works, but it's not pretty.
+- */
+-#undef sgiCCOptions
+-#define sgiCCOptions -xansi
+-#ifdef Mips64Architecture
+- SHLIBLDFLAGS = -shared
+-#endif
+- LD = ld
+-#endif
+-
+-#ifdef SunArchitecture
+-VENDOR_INCLUDES = -I/usr/openwin/include
+-#endif
+-
+ XCOMM -DPLUGIN_TRACE can be added to the following definition to debug
+ PLUGIN_DEFINES = -DXP_UNIX
+ PLUGIN_INCLUDES = -I$(PLUGINSRC) -I$(PLUGINSRC)/include
+@@ -57,6 +32,8 @@
+ OBJS = Main.o SetWin.o PProcess.o NewNDest.o XnestDis.o \
+ $(PLUGINSRC)/stubs.o $(PLUGIN_OBJS)
+
++ REQUIREDLIBS = $(LDPRELIB) XawClientLibs $(XTOOLONLYLIB) $(XPLIB) $(XLIB)
++
+ #include <Library.tmpl>
+
+ LinkFile(Main.c,$(PLUGINSRC)/Main.c)
+Index: xc/programs/xrx/xnest-plugin/NewNDest.c
+diff -u xc/programs/xrx/xnest-plugin/NewNDest.c:1.1.1.1 xc/programs/xrx/xnest-plugin/NewNDest.c:1.1.1.1.6.1
+--- xc/programs/xrx/xnest-plugin/NewNDest.c:1.1.1.1 Fri Nov 14 16:49:23 2003
++++ xc/programs/xrx/xnest-plugin/NewNDest.c Mon Jan 24 05:01:54 2005
+@@ -59,7 +59,14 @@
+ void
+ RxpDestroy(PluginInstance *This)
+ {
++ int status;
++
+ /* kill child process */
+- kill(This->child_pid, SIGKILL);
++ kill(This->child_pid, SIGTERM);
++
++ /* ... and fetch the status (to avoid dead process childs
++ * floating around) */
++ waitpid(This->child_pid, &status, 0);
++
+ RxpFreeXnestDisplayNumber(This->display_num);
+ }
+Index: xc/programs/xrx/xnest-plugin/SetWin.c
+diff -u xc/programs/xrx/xnest-plugin/SetWin.c:1.1.1.1 xc/programs/xrx/xnest-plugin/SetWin.c:1.1.1.1.6.1
+--- xc/programs/xrx/xnest-plugin/SetWin.c:1.1.1.1 Fri Nov 14 16:49:23 2003
++++ xc/programs/xrx/xnest-plugin/SetWin.c Mon Jan 24 05:01:54 2005
+@@ -65,7 +65,6 @@
+ DestroyCB (Widget widget, XtPointer client_data, XtPointer call_data)
+ {
+ PluginInstance* This = (PluginInstance*) client_data;
+- int i;
+ #ifdef PLUGIN_TRACE
+ fprintf (stderr, "DestroyCB, This: 0x%x\n", This);
+ #endif
+@@ -74,7 +73,7 @@
+ if (This->dont_reparent == RxFalse) {
+ XUnmapWindow(XtDisplay(widget), This->window);
+ XReparentWindow(XtDisplay(widget), This->window,
+- RootWindowOfScreen(XtScreen(widget)), 0, 0);
++ XRootWindowOfScreen(XtScreen(widget)), 0, 0);
+ This->dont_reparent = RxTrue;
+ } else
+ This->dont_reparent = RxFalse;
+@@ -177,20 +176,23 @@
+ #endif
+ pid = fork();
+ if (pid == 0) { /* child process */
+- static char *argv[] = {
+- "Xnest",
+- "-ac", /* no access control (sic!) */
+- ":00", /* display number */
+- "-parent",
+- "01234567890123456789", /* parent window id */
+- NULL
+- };
+- close(ConnectionNumber(display));
+-
+- sprintf(argv[2], ":%d", This->display_num);
+- sprintf(argv[4], "%ld", This->window);
++ char buffer1[64],
++ buffer2[64];
++ char *xnest_argv[6];
++
++ xnest_argv[0] = "Xnest";
++ xnest_argv[1] = "-ac"; /* no access control (sic!) */
++ xnest_argv[2] = buffer1; /* display number */
++ xnest_argv[3] = "-parent";
++ xnest_argv[4] = buffer2; /* parent window id */
++ xnest_argv[5] = NULL;
++
++ close(XConnectionNumber(display));
++
++ sprintf(xnest_argv[2], ":%d", This->display_num);
++ sprintf(xnest_argv[4], "%ld", This->window);
+ /* exec Xnest */
+- execvp("Xnest", argv);
++ execvp("Xnest", xnest_argv);
+ perror("Xnest");
+ return NPERR_GENERIC_ERROR;
+ } else { /* parent process */
+Index: xc/programs/xrx/xnest-plugin/XnestDis.c
+diff -u xc/programs/xrx/xnest-plugin/XnestDis.c:1.2 xc/programs/xrx/xnest-plugin/XnestDis.c:1.2.4.2
+--- xc/programs/xrx/xnest-plugin/XnestDis.c:1.2 Fri Apr 23 19:55:04 2004
++++ xc/programs/xrx/xnest-plugin/XnestDis.c Tue Feb 1 11:06:51 2005
+@@ -29,24 +29,53 @@
+ /* $XFree86$ */
+
+ #include "RxPlugin.h"
++#include <sys/stat.h>
+
+ /***********************************************************************
+ * Utility functions and global variable to manage display numbers
+ ***********************************************************************/
+
+-/* maximum numbers of concurrent instances */
+-#define MAX_PLUGINS 10
++/* maximum numbers of concurrent instances (per machine) */
++#define MAX_PLUGINS 128
+
+-/* start from 5 to avoid possible conflict with multi-display X server */
+-#define XNEST_OFFSET 5
++/* start from 80 to avoid possible conflict with multi-display X server
++ * like SunRay,LTSP, etc.*/
++#define XNEST_OFFSET 80
+
+ /* global allowing to know which display numbers are in use */
+-static int16 xnest_display_numbers[MAX_PLUGINS];
++static char xnest_display_numbers[MAX_PLUGINS];
+
+ void
+ RxpInitXnestDisplayNumbers()
+ {
+- memset(xnest_display_numbers, 0, sizeof(int16) * MAX_PLUGINS);
++ memset(xnest_display_numbers, 0, sizeof(char) * MAX_PLUGINS);
++}
++
++static
++Bool IsDisplayNumFree(int id)
++{
++ char fnamebuf[256];
++ struct stat sbuf;
++ int res;
++
++ /* /tmp/.X%d-lock is more or less the official way... */
++ sprintf(fnamebuf, "/tmp/.X%d-lock", id);
++ res = stat(fnamebuf, &sbuf);
++ if (res == 0)
++ return False;
++
++ /* ... but then we have to test for the old stuff, too... ;-( */
++ sprintf(fnamebuf, "/tmp/.X11-pipe/X%d", id);
++ res = stat(fnamebuf, &sbuf);
++ if (res == 0)
++ return False;
++
++ sprintf(fnamebuf, "/tmp/.X11-unix/X%d", id);
++ res = stat(fnamebuf, &sbuf);
++ if (res == 0)
++ return False;
++
++ return True;
+ }
+
+ /* function returning first display number available */
+@@ -55,7 +84,8 @@
+ {
+ int i;
+ for (i = 0; i < MAX_PLUGINS; i++)
+- if (xnest_display_numbers[i] == 0) {
++ if ((xnest_display_numbers[i] == 0) &&
++ IsDisplayNumFree(i + XNEST_OFFSET)) {
+ xnest_display_numbers[i] = 1;
+ return i + XNEST_OFFSET;
+ }
+Index: xc/programs/xset/Imakefile
+diff -u xc/programs/xset/Imakefile:1.7 xc/programs/xset/Imakefile:1.7.2.1
+--- xc/programs/xset/Imakefile:1.7 Thu Sep 2 08:40:33 2004
++++ xc/programs/xset/Imakefile Mon Dec 13 07:21:02 2004
+@@ -16,12 +16,12 @@
+ #if BuildXprintLib && BuildXprintClients
+ DEPXPRINTLIBS = $(DEPXPRINTLIB)
+ XPRINTLIBS = $(XPLIB)
+- XPRINTDEFINES = -DINCLUDE_XPRINT_SUPPORT
++ XPRINTDEFINES = -DBUILD_PRINTSUPPORT
+ #endif
+
+ DEFINES = ExtensionDefines DPMSDefines \
+ FontCacheExtensionDefines \
+- XkbDefines
++ XkbDefines $(XPRINTDEFINES)
+ DEPLIBS = $(DEPXMUULIB) $(DEPXLIB) $(DEPXF86LIBS) $(DEPFONTLIBS)
+ LOCAL_LIBRARIES = $(XMUULIB) $(XF86LIBS) $(FONTLIBS) $(XPRINTLIBS) $(XLIB)
+
+Index: xc/programs/xset/xset.c
+diff -u xc/programs/xset/xset.c:1.5 xc/programs/xset/xset.c:1.5.2.1
+--- xc/programs/xset/xset.c:1.5 Thu Sep 2 05:50:38 2004
++++ xc/programs/xset/xset.c Mon Dec 13 07:21:02 2004
+@@ -88,7 +88,7 @@
+ static Status set_font_cache(Display *, long, long, long);
+ static void query_cache_status(Display *dpy);
+ #endif
+-#ifdef INCLUDE_XPRINT_SUPPORT
++#ifdef BUILD_PRINTSUPPORT
+ #include <X11/extensions/Print.h>
+ #endif
+
+@@ -206,7 +206,7 @@
+ if (dpy == NULL) {
+ fprintf(stderr, "%s: unable to open display \"%s\"\n",
+ argv[0], XDisplayName (disp));
+- exit(1);
++ exit(EXIT_FAILURE);
+ }
+ XSetErrorHandler (local_xerror);
+ for (i = 1; i < argc; ) {
+@@ -356,7 +356,7 @@
+ }
+ }
+ #endif
+-#ifdef INCLUDE_XPRINT_SUPPORT
++#ifdef BUILD_PRINTSUPPORT
+ else if (strcmp(arg, "rehashprinterlist") == 0) { /* rehash list of printers */
+ short dummy;
+ if (XpQueryVersion(dpy, &dummy, &dummy)) {
+@@ -517,20 +517,20 @@
+ {
+ fprintf(stderr, "illegal combination of values\n");
+ fprintf(stderr, " standby time of %d is greater than suspend time of %d\n", standby_timeout, suspend_timeout);
+- exit(0);
++ exit(EXIT_FAILURE);
+ }
+ if ((off_timeout != 0)&&(suspend_timeout > off_timeout))
+ {
+ fprintf(stderr, "illegal combination of values\n");
+ fprintf(stderr, " suspend time of %d is greater than off time of %d\n", suspend_timeout, off_timeout);
+- exit(0);
++ exit(EXIT_FAILURE);
+ }
+ if ((suspend_timeout == 0)&&(off_timeout != 0)&&
+ (standby_timeout > off_timeout))
+ {
+ fprintf(stderr, "illegal combination of values\n");
+ fprintf(stderr, " standby time of %d is greater than off time of %d\n", standby_timeout, off_timeout);
+- exit(0);
++ exit(EXIT_FAILURE);
+ }
+ DPMSEnable(dpy);
+ DPMSSetTimeouts(dpy, standby_timeout, suspend_timeout, off_timeout);
+@@ -948,7 +948,7 @@
+ fprintf (stderr,
+ "%s: internal error, only parsed %d of %d directories.\n",
+ progName, i, ndirs);
+- exit (1);
++ exit (EXIT_FAILURE);
+ }
+ }
+
+@@ -1513,7 +1513,7 @@
+ fprintf (stderr, " Show font cache statistics:\n");
+ fprintf (stderr, "\t fc s\n");
+ #endif
+-#ifdef INCLUDE_XPRINT_SUPPORT
++#ifdef BUILD_PRINTSUPPORT
+ fprintf (stderr, " To control Xprint features:\n");
+ fprintf (stderr, "\t rehashprinterlist Recomputes the list of available printers\n");
+ #endif
+@@ -1546,14 +1546,14 @@
+ fprintf (stderr, "\t s expose s noexpose\n");
+ fprintf (stderr, "\t s activate s reset\n");
+ fprintf (stderr, " For status information: q\n");
+- exit(0);
++ exit(EXIT_SUCCESS);
+ }
+
+ static void
+ error(char *message)
+ {
+ fprintf( stderr, "%s: %s\n", progName, message );
+- exit( 1 );
++ exit(EXIT_FAILURE);
+ }
+
+
+Index: xc/programs/xterm/INSTALL
+diff -u xc/programs/xterm/INSTALL:1.3 xc/programs/xterm/INSTALL:1.3.2.1
+--- xc/programs/xterm/INSTALL:1.3 Fri Aug 13 12:57:19 2004
++++ xc/programs/xterm/INSTALL Wed Jan 12 21:45:09 2005
+@@ -1,5 +1,5 @@
+--- $XTermId: INSTALL,v 1.75 2004/05/13 00:41:20 tom Exp $
+--- $XFree86: xc/programs/xterm/INSTALL,v 3.35 2004/05/13 00:41:20 dickey Exp $
++-- $XTermId: INSTALL,v 1.77 2004/12/01 01:27:46 tom Exp $
++-- $XFree86: xc/programs/xterm/INSTALL,v 3.36 2004/12/01 01:27:46 dickey Exp $
+ -- Thomas E. Dickey
+
+ Xterm is normally built as part of the X Window System source tree, using
+@@ -287,6 +287,13 @@
+
+ This sets "--enable-wide-chars" as a side-effect.
+
++ --enable-mini-luit enable support for poor man's luit filter (Latin-9)
++
++ Provide built-in support for Latin-9, relying on having specified
++ Unicode (ISO10646) fonts and setting the locale resource to "checkfont".
++
++ This sets "--enable-luit" as a side-effect.
++
+ --enable-sco-fkeys enable support for SCO-style function keys
+
+ Compile-in code to support SCO-style function keys.
+Index: xc/programs/xterm/MANIFEST
+diff -u xc/programs/xterm/MANIFEST:1.3 xc/programs/xterm/MANIFEST:1.3.2.1
+--- xc/programs/xterm/MANIFEST:1.3 Fri Aug 20 18:46:39 2004
++++ xc/programs/xterm/MANIFEST Wed Jan 12 21:45:09 2005
+@@ -1,4 +1,4 @@
+-MANIFEST for xterm, version xterm-196
++MANIFEST for xterm, version xterm-197
+ --------------------------------------------------------------------------------
+ MANIFEST this file
+ 256colres.h resource-definitions for 256-color mode
+Index: xc/programs/xterm/Makefile.in
+diff -u xc/programs/xterm/Makefile.in:1.3 xc/programs/xterm/Makefile.in:1.3.2.1
+--- xc/programs/xterm/Makefile.in:1.3 Fri Aug 13 12:57:19 2004
++++ xc/programs/xterm/Makefile.in Wed Jan 12 21:45:09 2005
+@@ -1,6 +1,6 @@
+-## $XTermId: Makefile.in,v 1.111 2004/07/13 00:41:24 tom Exp $
++## $XTermId: Makefile.in,v 1.113 2004/12/01 01:27:46 tom Exp $
+ ##
+-## $XFree86: xc/programs/xterm/Makefile.in,v 3.48 2004/07/13 00:41:24 dickey Exp $ ##
++## $XFree86: xc/programs/xterm/Makefile.in,v 3.49 2004/12/01 01:27:46 dickey Exp $ ##
+ ##
+ ## Copyright 2002-2003,2004 by Thomas E. Dickey
+ ##
+@@ -68,7 +68,7 @@
+ #### End of system configuration section. ####
+
+ RM = rm -f
+-LINT = lint
++LINT = @LINT@
+
+ DESTDIR =
+ BINDIR = $(DESTDIR)$(bindir)
+Index: xc/programs/xterm/Tekproc.c
+diff -u xc/programs/xterm/Tekproc.c:1.3 xc/programs/xterm/Tekproc.c:1.3.2.1
+--- xc/programs/xterm/Tekproc.c:1.3 Fri Aug 13 12:57:19 2004
++++ xc/programs/xterm/Tekproc.c Wed Jan 12 21:45:09 2005
+@@ -1,11 +1,11 @@
+-/* $XTermId: Tekproc.c,v 1.105 2004/06/06 22:15:25 tom Exp $ */
++/* $XTermId: Tekproc.c,v 1.109 2004/12/01 01:27:46 tom Exp $ */
+
+ /*
+ * $Xorg: Tekproc.c,v 1.5 2001/02/09 02:06:02 xorgcvs Exp $
+ *
+ * Warning, there be crufty dragons here.
+ */
+-/* $XFree86: xc/programs/xterm/Tekproc.c,v 3.49 2004/06/06 22:15:25 dickey Exp $ */
++/* $XFree86: xc/programs/xterm/Tekproc.c,v 3.50 2004/12/01 01:27:46 dickey Exp $ */
+
+ /*
+
+@@ -232,6 +232,9 @@
+ { "tek-page", HandleTekPage },
+ { "tek-reset", HandleTekReset },
+ { "tek-copy", HandleTekCopy },
++#if OPT_TOOLBAR
++ { "set-toolbar", HandleToolbar },
++#endif
+ };
+ /* *INDENT-ON* */
+
+@@ -264,10 +267,8 @@
+ Sres("initialFont", "InitialFont", tek.initial_font, "large"),
+ Sres("ginTerminator", "GinTerminator", tek.gin_terminator_str, GIN_TERM_NONE_STR),
+ #if OPT_TOOLBAR
+- {XtNmenuBar, XtCMenuBar, XtRWidget, sizeof(Widget),
+- XtOffsetOf(TekWidgetRec, tek.menu_bar),
+- XtRWidget, (XtPointer) 0},
+- Ires(XtNmenuHeight, XtCMenuHeight, tek.menu_height, 25),
++ Wres(XtNmenuBar, XtCMenuBar, tek.tb_info.menu_bar, 0),
++ Ires(XtNmenuHeight, XtCMenuHeight, tek.tb_info.menu_height, 25),
+ #endif
+ };
+
+@@ -285,7 +286,7 @@
+ static void TekInitialize(Widget request,
+ Widget wnew,
+ ArgList args,
+- Cardinal * num_args);
++ Cardinal *num_args);
+ static void TekPage(void);
+ static void TekRealize(Widget gw,
+ XtValueMask * valuemaskp,
+@@ -318,7 +319,7 @@
+ TekExpose, /* expose */
+ NULL, /* set_values */
+ NULL, /* set_values_hook */
+- NULL, /* set_values_almost */
++ XtInheritSetValuesAlmost, /* set_values_almost */
+ NULL, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* version */
+@@ -1280,7 +1281,7 @@
+ TekInitialize(Widget request GCC_UNUSED,
+ Widget wnew GCC_UNUSED,
+ ArgList args GCC_UNUSED,
+- Cardinal * num_args GCC_UNUSED)
++ Cardinal *num_args GCC_UNUSED)
+ {
+ Widget tekparent = SHELL_OF(wnew);
+
+@@ -1749,8 +1750,8 @@
+
+ if ((tekcopyfd = open_userfile(screen->uid, screen->gid, buf, False)) >= 0) {
+ sprintf(initbuf, "%c%c%c%c",
+- ESC, screen->page.fontsize + '8',
+- ESC, screen->page.linetype + '`');
++ ESC, (char)(screen->page.fontsize + '8'),
++ ESC, (char)(screen->page.linetype + '`'));
+ write(tekcopyfd, initbuf, 4);
+ Tp = &Tek0;
+ do {
+Index: xc/programs/xterm/VTPrsTbl.c
+diff -u xc/programs/xterm/VTPrsTbl.c:1.3 xc/programs/xterm/VTPrsTbl.c:1.3.2.1
+--- xc/programs/xterm/VTPrsTbl.c:1.3 Fri Aug 13 12:57:19 2004
++++ xc/programs/xterm/VTPrsTbl.c Wed Jan 12 21:45:09 2005
+@@ -1,10 +1,10 @@
+-/* $XTermId: VTPrsTbl.c,v 1.36 2004/05/13 00:41:20 tom Exp $ */
++/* $XTermId: VTPrsTbl.c,v 1.39 2004/12/01 01:27:46 tom Exp $ */
+
+ /*
+ * $Xorg: VTPrsTbl.c,v 1.3 2000/08/17 19:55:07 cpqbld Exp $
+ */
+
+-/* $XFree86: xc/programs/xterm/VTPrsTbl.c,v 3.26 2004/05/13 00:41:20 dickey Exp $ */
++/* $XFree86: xc/programs/xterm/VTPrsTbl.c,v 3.27 2004/12/01 01:27:46 dickey Exp $ */
+ /*
+ *
+ * Copyright 1999-2000,2004 by Thomas E. Dickey
+@@ -771,14 +771,14 @@
+ CASE_CSI_QUOTE_STATE,
+ CASE_CSI_IGNORE,
+ /* $ % & ' */
+-CASE_CSI_IGNORE,
++CASE_CSI_DOLLAR_STATE,
+ CASE_CSI_IGNORE,
+ CASE_CSI_IGNORE,
+ CASE_CSI_TICK_STATE,
+ /* ( ) * + */
+ CASE_CSI_IGNORE,
+ CASE_CSI_IGNORE,
+-CASE_CSI_IGNORE,
++CASE_CSI_STAR_STATE,
+ CASE_CSI_IGNORE,
+ /* , - . / */
+ CASE_CSI_IGNORE,
+@@ -2021,6 +2021,656 @@
+ };
+ #endif /* OPT_DEC_LOCATOR */
+
++#if OPT_DEC_RECTOPS
++Const PARSE_T csi_dollar_table[] = /* CSI ... $ */
++{
++/* NUL SOH STX ETX */
++CASE_IGNORE,
++CASE_IGNORE,
++CASE_IGNORE,
++CASE_IGNORE,
++/* EOT ENQ ACK BEL */
++CASE_IGNORE,
++CASE_ENQ,
++CASE_IGNORE,
++CASE_BELL,
++/* BS HT NL VT */
++CASE_BS,
++CASE_TAB,
++CASE_VMOT,
++CASE_VMOT,
++/* NP CR SO SI */
++CASE_VMOT,
++CASE_CR,
++CASE_SO,
++CASE_SI,
++/* DLE DC1 DC2 DC3 */
++CASE_IGNORE,
++CASE_IGNORE,
++CASE_IGNORE,
++CASE_IGNORE,
++/* DC4 NAK SYN ETB */
++CASE_IGNORE,
++CASE_IGNORE,
++CASE_IGNORE,
++CASE_IGNORE,
++/* CAN EM SUB ESC */
++CASE_GROUND_STATE,
++CASE_IGNORE,
++CASE_GROUND_STATE,
++CASE_ESC,
++/* FS GS RS US */
++CASE_IGNORE,
++CASE_IGNORE,
++CASE_IGNORE,
++CASE_IGNORE,
++/* SP ! " # */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* $ % & ' */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* ( ) * + */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* , - . / */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* 0 1 2 3 */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* 4 5 6 7 */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* 8 9 : ; */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* < = > ? */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* @ A B C */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* D E F G */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* H I J K */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* L M N O */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* P Q R S */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* T U V W */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* X Y Z [ */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* \ ] ^ _ */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* ` a b c */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* d e f g */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* h i j k */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* l m n o */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* p q r s */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_DECCARA,
++CASE_GROUND_STATE,
++/* t u v w */
++CASE_DECRARA,
++CASE_GROUND_STATE,
++CASE_DECCRA,
++CASE_GROUND_STATE,
++/* x y z { */
++CASE_DECFRA,
++CASE_GROUND_STATE,
++CASE_DECERA,
++CASE_DECSERA,
++/* | } ~ DEL */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_IGNORE,
++/* 0x80 0x81 0x82 0x83 */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* 0x84 0x85 0x86 0x87 */
++CASE_IND,
++CASE_NEL,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* 0x88 0x89 0x8a 0x8b */
++CASE_HTS,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* 0x8c 0x8d 0x8e 0x8f */
++CASE_GROUND_STATE,
++CASE_RI,
++CASE_SS2,
++CASE_SS3,
++/* 0x90 0x91 0x92 0x93 */
++CASE_DCS,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* 0x94 0x95 0x96 0x97 */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_SPA,
++CASE_EPA,
++/* 0x98 0x99 0x9a 0x9b */
++CASE_SOS,
++CASE_GROUND_STATE,
++CASE_DECID,
++CASE_CSI_STATE,
++/* 0x9c 0x9d 0x9e 0x9f */
++CASE_ST,
++CASE_OSC,
++CASE_PM,
++CASE_APC,
++/* nobreakspace exclamdown cent sterling */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* currency yen brokenbar section */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* diaeresis copyright ordfeminine guillemotleft */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* notsign hyphen registered macron */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* degree plusminus twosuperior threesuperior */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* acute mu paragraph periodcentered */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* cedilla onesuperior masculine guillemotright */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* onequarter onehalf threequarters questiondown */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* Agrave Aacute Acircumflex Atilde */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* Adiaeresis Aring AE Ccedilla */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* Egrave Eacute Ecircumflex Ediaeresis */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* Igrave Iacute Icircumflex Idiaeresis */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* Eth Ntilde Ograve Oacute */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* Ocircumflex Otilde Odiaeresis multiply */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* Ooblique Ugrave Uacute Ucircumflex */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* Udiaeresis Yacute Thorn ssharp */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* agrave aacute acircumflex atilde */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* adiaeresis aring ae ccedilla */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* egrave eacute ecircumflex ediaeresis */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* igrave iacute icircumflex idiaeresis */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* eth ntilde ograve oacute */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_DECCARA,
++CASE_GROUND_STATE,
++/* ocircumflex otilde odiaeresis division */
++CASE_DECRARA,
++CASE_GROUND_STATE,
++CASE_DECCRA,
++CASE_GROUND_STATE,
++/* oslash ugrave uacute ucircumflex */
++CASE_DECFRA,
++CASE_GROUND_STATE,
++CASE_DECERA,
++CASE_DECSERA,
++/* udiaeresis yacute thorn ydiaeresis */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++};
++
++Const PARSE_T csi_star_table[] = /* CSI ... * */
++{
++/* NUL SOH STX ETX */
++CASE_IGNORE,
++CASE_IGNORE,
++CASE_IGNORE,
++CASE_IGNORE,
++/* EOT ENQ ACK BEL */
++CASE_IGNORE,
++CASE_ENQ,
++CASE_IGNORE,
++CASE_BELL,
++/* BS HT NL VT */
++CASE_BS,
++CASE_TAB,
++CASE_VMOT,
++CASE_VMOT,
++/* NP CR SO SI */
++CASE_VMOT,
++CASE_CR,
++CASE_SO,
++CASE_SI,
++/* DLE DC1 DC2 DC3 */
++CASE_IGNORE,
++CASE_IGNORE,
++CASE_IGNORE,
++CASE_IGNORE,
++/* DC4 NAK SYN ETB */
++CASE_IGNORE,
++CASE_IGNORE,
++CASE_IGNORE,
++CASE_IGNORE,
++/* CAN EM SUB ESC */
++CASE_GROUND_STATE,
++CASE_IGNORE,
++CASE_GROUND_STATE,
++CASE_ESC,
++/* FS GS RS US */
++CASE_IGNORE,
++CASE_IGNORE,
++CASE_IGNORE,
++CASE_IGNORE,
++/* SP ! " # */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* $ % & ' */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* ( ) * + */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* , - . / */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* 0 1 2 3 */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* 4 5 6 7 */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* 8 9 : ; */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* < = > ? */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* @ A B C */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* D E F G */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* H I J K */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* L M N O */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* P Q R S */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* T U V W */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* X Y Z [ */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* \ ] ^ _ */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* ` a b c */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* d e f g */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* h i j k */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* l m n o */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* p q r s */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* t u v w */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* x y z { */
++CASE_DECSACE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* | } ~ DEL */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_IGNORE,
++/* 0x80 0x81 0x82 0x83 */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* 0x84 0x85 0x86 0x87 */
++CASE_IND,
++CASE_NEL,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* 0x88 0x89 0x8a 0x8b */
++CASE_HTS,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* 0x8c 0x8d 0x8e 0x8f */
++CASE_GROUND_STATE,
++CASE_RI,
++CASE_SS2,
++CASE_SS3,
++/* 0x90 0x91 0x92 0x93 */
++CASE_DCS,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* 0x94 0x95 0x96 0x97 */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_SPA,
++CASE_EPA,
++/* 0x98 0x99 0x9a 0x9b */
++CASE_SOS,
++CASE_GROUND_STATE,
++CASE_DECID,
++CASE_CSI_STATE,
++/* 0x9c 0x9d 0x9e 0x9f */
++CASE_ST,
++CASE_OSC,
++CASE_PM,
++CASE_APC,
++/* nobreakspace exclamdown cent sterling */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* currency yen brokenbar section */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* diaeresis copyright ordfeminine guillemotleft */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* notsign hyphen registered macron */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* degree plusminus twosuperior threesuperior */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* acute mu paragraph periodcentered */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* cedilla onesuperior masculine guillemotright */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* onequarter onehalf threequarters questiondown */
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++CASE_CSI_IGNORE,
++/* Agrave Aacute Acircumflex Atilde */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* Adiaeresis Aring AE Ccedilla */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* Egrave Eacute Ecircumflex Ediaeresis */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* Igrave Iacute Icircumflex Idiaeresis */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* Eth Ntilde Ograve Oacute */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* Ocircumflex Otilde Odiaeresis multiply */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* Ooblique Ugrave Uacute Ucircumflex */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* Udiaeresis Yacute Thorn ssharp */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* agrave aacute acircumflex atilde */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* adiaeresis aring ae ccedilla */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* egrave eacute ecircumflex ediaeresis */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* igrave iacute icircumflex idiaeresis */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* eth ntilde ograve oacute */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* ocircumflex otilde odiaeresis division */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* oslash ugrave uacute ucircumflex */
++CASE_DECSACE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++/* udiaeresis yacute thorn ydiaeresis */
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++CASE_GROUND_STATE,
++};
++#endif /* OPT_DEC_RECTOPS */
++
+ Const PARSE_T dec_table[] = /* CSI ? */
+ {
+ /* NUL SOH STX ETX */
+Index: xc/programs/xterm/VTparse.def
+diff -u xc/programs/xterm/VTparse.def:1.3 xc/programs/xterm/VTparse.def:1.3.2.1
+--- xc/programs/xterm/VTparse.def:1.3 Fri Aug 13 12:57:20 2004
++++ xc/programs/xterm/VTparse.def Wed Jan 12 21:45:09 2005
+@@ -1,11 +1,12 @@
++# $XTermId: VTparse.def,v 1.22 2004/12/01 01:27:46 tom Exp $
+ #
+ # $Xorg: VTparse.def,v 1.3 2000/08/17 19:55:08 cpqbld Exp $
+ #
+-# List of symbols that need to be defined for VTparse.h. If you need to
++# List of symbols that need to be defined for VTparse.h. If you need to
+ # change any of the CASE_ macros, make the change here and rerun the command
+ # shown in VTparse.h.
+ #
+-# $XFree86: xc/programs/xterm/VTparse.def,v 3.14 2003/12/31 17:12:26 dickey Exp $
++# $XFree86: xc/programs/xterm/VTparse.def,v 3.15 2004/12/01 01:27:46 dickey Exp $
+ #
+
+ CASE_GROUND_STATE
+@@ -130,3 +131,12 @@
+ CASE_CSI_IGNORE
+ CASE_VT52_IGNORE
+ CASE_VT52_FINISH
++CASE_CSI_DOLLAR_STATE
++CASE_DECCRA
++CASE_DECERA
++CASE_DECFRA
++CASE_DECSERA
++CASE_DECSACE
++CASE_DECCARA
++CASE_DECRARA
++CASE_CSI_STAR_STATE
+Index: xc/programs/xterm/VTparse.h
+diff -u xc/programs/xterm/VTparse.h:1.3 xc/programs/xterm/VTparse.h:1.3.2.1
+--- xc/programs/xterm/VTparse.h:1.3 Fri Aug 13 12:57:20 2004
++++ xc/programs/xterm/VTparse.h Wed Jan 12 21:45:09 2005
+@@ -1,10 +1,12 @@
++/* $XTermId: VTparse.h,v 1.33 2004/12/01 01:27:46 tom Exp $ */
++
+ /*
+ * $Xorg: VTparse.h,v 1.3 2000/08/17 19:55:08 cpqbld Exp $
+ */
+
+-/* $XFree86: xc/programs/xterm/VTparse.h,v 3.19 2003/12/31 17:12:26 dickey Exp $ */
++/* $XFree86: xc/programs/xterm/VTparse.h,v 3.20 2004/12/01 01:27:46 dickey Exp $ */
+ /*
+- * Copyright 2002 by Thomas E. Dickey
++ * Copyright 2002-2003,2004 by Thomas E. Dickey
+ *
+ * All Rights Reserved
+ *
+@@ -63,20 +65,17 @@
+ /*
+ * PARSE_T has to be large enough to handle the number of cases enumerated here.
+ */
+-typedef char PARSE_T;
++typedef unsigned char PARSE_T;
+
+ extern Const PARSE_T ansi_table[];
++extern Const PARSE_T cigtable[];
++extern Const PARSE_T csi2_table[];
+ extern Const PARSE_T csi_ex_table[];
+ extern Const PARSE_T csi_quo_table[];
+-#if OPT_DEC_LOCATOR
+-extern Const PARSE_T csi_tick_table[];
+-#endif /* OPT_DEC_LOCATOR */
+ extern Const PARSE_T csi_table[];
+-extern Const PARSE_T csi2_table[];
+ extern Const PARSE_T dec2_table[];
+ extern Const PARSE_T dec3_table[];
+ extern Const PARSE_T dec_table[];
+-extern Const PARSE_T cigtable[];
+ extern Const PARSE_T eigtable[];
+ extern Const PARSE_T esc_sp_table[];
+ extern Const PARSE_T esc_table[];
+@@ -84,6 +83,15 @@
+ extern Const PARSE_T scstable[];
+ extern Const PARSE_T sos_table[];
+
++#if OPT_DEC_LOCATOR
++extern Const PARSE_T csi_tick_table[];
++#endif /* OPT_DEC_LOCATOR */
++
++#if OPT_DEC_RECTOPS
++extern Const PARSE_T csi_dollar_table[];
++extern Const PARSE_T csi_star_table[];
++#endif /* OPT_DEC_LOCATOR */
++
+ #if OPT_VT52_MODE
+ extern Const PARSE_T vt52_table[];
+ extern Const PARSE_T vt52_esc_table[];
+@@ -227,5 +235,14 @@
+ #define CASE_CSI_IGNORE 119
+ #define CASE_VT52_IGNORE 120
+ #define CASE_VT52_FINISH 121
++#define CASE_CSI_DOLLAR_STATE 122
++#define CASE_DECCRA 123
++#define CASE_DECERA 124
++#define CASE_DECFRA 125
++#define CASE_DECSERA 126
++#define CASE_DECSACE 127
++#define CASE_DECCARA 128
++#define CASE_DECRARA 129
++#define CASE_CSI_STAR_STATE 130
+
+ #endif /* included_VTparse_h */
+Index: xc/programs/xterm/XTerm.ad
+diff -u xc/programs/xterm/XTerm.ad:1.3 xc/programs/xterm/XTerm.ad:1.3.2.1
+--- xc/programs/xterm/XTerm.ad:1.3 Fri Aug 13 12:57:20 2004
++++ xc/programs/xterm/XTerm.ad Wed Jan 12 21:45:09 2005
+@@ -3,8 +3,8 @@
+ !
+ !
+ !
+-! $XTermId: XTerm.ad,v 1.61 2004/07/13 00:41:24 tom Exp $
+-! $XFree86: xc/programs/xterm/XTerm.ad,v 3.28 2004/07/13 00:41:24 dickey Exp $
++! $XTermId: XTerm.ad,v 1.63 2004/12/01 01:27:46 tom Exp $
++! $XFree86: xc/programs/xterm/XTerm.ad,v 3.29 2004/12/01 01:27:46 dickey Exp $
+
+ *saveLines: 1024
+
+@@ -17,6 +17,7 @@
+ *SimpleMenu*Cursor: left_ptr
+
+ *mainMenu.Label: Main Options
++*mainMenu*toolbar*Label: Toolbar
+ *mainMenu*securekbd*Label: Secure Keyboard
+ *mainMenu*allowsends*Label: Allow SendEvents
+ *mainMenu*redraw*Label: Redraw Window
+Index: xc/programs/xterm/aclocal.m4
+diff -u xc/programs/xterm/aclocal.m4:1.3 xc/programs/xterm/aclocal.m4:1.3.2.1
+--- xc/programs/xterm/aclocal.m4:1.3 Fri Aug 13 12:57:20 2004
++++ xc/programs/xterm/aclocal.m4 Wed Jan 12 21:45:09 2005
+@@ -1,6 +1,6 @@
+-dnl $XTermId: aclocal.m4,v 1.173 2004/07/13 00:41:24 tom Exp $
++dnl $XTermId: aclocal.m4,v 1.177 2004/12/01 01:27:46 tom Exp $
+ dnl
+-dnl $XFree86: xc/programs/xterm/aclocal.m4,v 3.53 2004/07/13 00:41:24 dickey Exp $
++dnl $XFree86: xc/programs/xterm/aclocal.m4,v 3.54 2004/12/01 01:27:46 dickey Exp $
+ dnl
+ dnl ---------------------------------------------------------------------------
+ dnl
+@@ -585,7 +585,7 @@
+ fi
+ ])dnl
+ dnl ---------------------------------------------------------------------------
+-dnl CF_GCC_WARNINGS version: 15 updated: 2003/07/05 18:42:30
++dnl CF_GCC_WARNINGS version: 16 updated: 2004/07/23 14:40:34
+ dnl ---------------
+ dnl Check if the compiler supports useful warning options. There's a few that
+ dnl we don't use, simply because they're too noisy:
+@@ -597,6 +597,13 @@
+ dnl is enabled for ncurses using "--enable-const".
+ dnl -pedantic
+ dnl
++dnl Parameter:
++dnl $1 is an optional list of gcc warning flags that a particular
++dnl application might want to use, e.g., "no-unused" for
++dnl -Wno-unused
++dnl Special:
++dnl If $with_ext_const is "yes", add a check for -Wwrite-strings
++dnl
+ AC_DEFUN([CF_GCC_WARNINGS],
+ [
+ AC_REQUIRE([CF_GCC_VERSION])
+@@ -622,7 +629,7 @@
+ Wpointer-arith \
+ Wshadow \
+ Wstrict-prototypes \
+- Wundef $cf_warn_CONST
++ Wundef $cf_warn_CONST $1
+ do
+ CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
+ if AC_TRY_EVAL(ac_compile); then
+@@ -685,7 +692,7 @@
+ [AC_DIVERT_HELP([$1])dnl
+ ])dnl
+ dnl ---------------------------------------------------------------------------
+-dnl CF_IMAKE_CFLAGS version: 22 updated: 2004/04/25 20:55:33
++dnl CF_IMAKE_CFLAGS version: 23 updated: 2004/11/30 19:04:33
+ dnl ---------------
+ dnl Use imake to obtain compiler flags. We could, in principle, write tests to
+ dnl get these, but if imake is properly configured there is no point in doing
+@@ -815,6 +822,16 @@
+ fi
+ fi
+
++# Some imake configurations define PROJECTROOT with an empty value. Remove
++# the empty definition.
++case $IMAKE_CFLAGS in
++*-DPROJECTROOT=/*)
++ ;;
++*)
++ IMAKE_CFLAGS=`echo "$IMAKE_CFLAGS" |sed -e "s,-DPROJECTROOT=[[ ]], ,"`
++ ;;
++esac
++
+ CF_VERBOSE(IMAKE_CFLAGS $IMAKE_CFLAGS)
+ CF_VERBOSE(IMAKE_LOADFLAGS $IMAKE_LOADFLAGS)
+
+@@ -880,6 +897,64 @@
+ test $cf_cv_path_lastlog != no && AC_DEFINE(USE_LASTLOG)
+ ])dnl
+ dnl ---------------------------------------------------------------------------
++dnl CF_MSG_LOG version: 3 updated: 1997/09/07 14:05:52
++dnl ----------
++dnl Write a debug message to config.log, along with the line number in the
++dnl configure script.
++AC_DEFUN([CF_MSG_LOG],[
++echo "(line __oline__) testing $* ..." 1>&AC_FD_CC
++])dnl
++dnl ---------------------------------------------------------------------------
++dnl CF_POSIX_C_SOURCE version: 1 updated: 2004/10/17 10:43:13
++dnl -----------------
++dnl Define _POSIX_C_SOURCE to the given level, and _POSIX_SOURCE if needed.
++dnl
++dnl POSIX.1-1990 _POSIX_SOURCE
++dnl POSIX.1-1990 and _POSIX_SOURCE and
++dnl POSIX.2-1992 C-Language _POSIX_C_SOURCE=2
++dnl Bindings Option
++dnl POSIX.1b-1993 _POSIX_C_SOURCE=199309L
++dnl POSIX.1c-1996 _POSIX_C_SOURCE=199506L
++dnl X/Open 2000 _POSIX_C_SOURCE=200112L
++dnl
++dnl Parameters:
++dnl $1 is the nominal value for _POSIX_C_SOURCE
++AC_DEFUN([CF_POSIX_C_SOURCE],
++[
++cf_POSIX_C_SOURCE=ifelse($1,,199506L,$1)
++AC_CACHE_CHECK(if we should define _POSIX_C_SOURCE,cf_cv_posix_c_source,[
++ CF_MSG_LOG(if the symbol is already defined go no further)
++ AC_TRY_COMPILE([#include <sys/types.h>],[
++#ifndef _POSIX_C_SOURCE
++make an error
++#endif],
++ [cf_cv_posix_c_source=no],
++ [case .$cf_POSIX_C_SOURCE in
++ .[[12]]??*)
++ cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
++ ;;
++ .2)
++ cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE -D_POSIX_SOURCE"
++ ;;
++ .*)
++ cf_cv_posix_c_source="-D_POSIX_SOURCE"
++ ;;
++ esac
++ CF_MSG_LOG(ifdef from value $cf_POSIX_C_SOURCE)
++ cf_save="$CPPFLAGS"
++ CPPFLAGS="$CPPFLAGS $cf_cv_posix_c_source"
++ CF_MSG_LOG(if the second compile does not leave our definition intact error)
++ AC_TRY_COMPILE([#include <sys/types.h>],[
++#ifndef _POSIX_C_SOURCE
++make an error
++#endif],,
++ [cf_cv_posix_c_source=no])
++ CPPFLAGS="$cf_save"
++ ])
++])
++test "$cf_cv_posix_c_source" != no && CPPFLAGS="$CPPFLAGS $cf_cv_posix_c_source"
++])dnl
++dnl ---------------------------------------------------------------------------
+ dnl CF_POSIX_WAIT version: 2 updated: 2000/05/29 16:16:04
+ dnl -------------
+ dnl Check for POSIX wait support
+@@ -1508,19 +1583,32 @@
+ test "$cf_cv_xkb_bell_ext" = yes && AC_DEFINE(HAVE_XKB_BELL_EXT)
+ ])
+ dnl ---------------------------------------------------------------------------
+-dnl CF_XOPEN_SOURCE version: 12 updated: 2004/06/26 18:29:41
++dnl CF_XOPEN_SOURCE version: 15 updated: 2004/11/23 15:41:32
+ dnl ---------------
+ dnl Try to get _XOPEN_SOURCE defined properly that we can use POSIX functions,
+ dnl or adapt to the vendor's definitions to get equivalent functionality.
++dnl
++dnl Parameters:
++dnl $1 is the nominal value for _XOPEN_SOURCE
++dnl $2 is the nominal value for _POSIX_C_SOURCE
+ AC_DEFUN([CF_XOPEN_SOURCE],[
++
++cf_XOPEN_SOURCE=ifelse($1,,500,$1)
++cf_POSIX_C_SOURCE=ifelse($2,,199506L,$2)
++
+ case $host_os in #(vi
+ freebsd*) #(vi
+- CPPFLAGS="$CPPFLAGS -D_BSD_TYPES -D__BSD_VISIBLE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600"
++ # 5.x headers associate
++ # _XOPEN_SOURCE=600 with _POSIX_C_SOURCE=200112L
++ # _XOPEN_SOURCE=500 with _POSIX_C_SOURCE=199506L
++ cf_POSIX_C_SOURCE=200112L
++ cf_XOPEN_SOURCE=600
++ CPPFLAGS="$CPPFLAGS -D_BSD_TYPES -D__BSD_VISIBLE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
+ ;;
+ hpux*) #(vi
+ CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE"
+ ;;
+-irix6.*) #(vi
++irix[[56]].*) #(vi
+ CPPFLAGS="$CPPFLAGS -D_SGI_SOURCE"
+ ;;
+ linux*|gnu*) #(vi
+@@ -1552,37 +1640,18 @@
+ #endif],
+ [cf_cv_xopen_source=no],
+ [cf_save="$CPPFLAGS"
+- CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
++ CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
+ AC_TRY_COMPILE([#include <sys/types.h>],[
+ #ifdef _XOPEN_SOURCE
+ make an error
+ #endif],
+ [cf_cv_xopen_source=no],
+- [cf_cv_xopen_source=yes])
+- CPPFLAGS="$cf_save"
+- ])
+-])
+-test "$cf_cv_xopen_source" = yes && CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
+-
+- # FreeBSD 5.x headers demand this...
+- AC_CACHE_CHECK(if we should define _POSIX_C_SOURCE,cf_cv_xopen_source,[
+- AC_TRY_COMPILE([#include <sys/types.h>],[
+-#ifndef _POSIX_C_SOURCE
+-make an error
+-#endif],
+- [cf_cv_xopen_source=no],
+- [cf_save="$CPPFLAGS"
+- CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE"
+- AC_TRY_COMPILE([#include <sys/types.h>],[
+-#ifdef _POSIX_C_SOURCE
+-make an error
+-#endif],
+- [cf_cv_xopen_source=no],
+- [cf_cv_xopen_source=yes])
++ [cf_cv_xopen_source=$cf_XOPEN_SOURCE])
+ CPPFLAGS="$cf_save"
+ ])
+ ])
+-test "$cf_cv_xopen_source" = yes && CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE"
++test "$cf_cv_xopen_source" != no && CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_cv_xopen_source"
++ CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE)
+ ;;
+ esac
+ ])
+Index: xc/programs/xterm/button.c
+diff -u xc/programs/xterm/button.c:1.3 xc/programs/xterm/button.c:1.3.2.1
+--- xc/programs/xterm/button.c:1.3 Fri Aug 13 12:57:20 2004
++++ xc/programs/xterm/button.c Wed Jan 12 21:45:09 2005
+@@ -1,4 +1,4 @@
+-/* $XTermId: button.c,v 1.160 2004/07/20 01:14:41 tom Exp $ */
++/* $XTermId: button.c,v 1.171 2004/12/01 01:27:46 tom Exp $ */
+
+ /* $Xorg: button.c,v 1.3 2000/08/17 19:55:08 cpqbld Exp $ */
+ /*
+@@ -52,7 +52,7 @@
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ */
+-/* $XFree86: xc/programs/xterm/button.c,v 3.75 2004/07/20 01:14:41 dickey Exp $ */
++/* $XFree86: xc/programs/xterm/button.c,v 3.76 2004/12/01 01:27:46 dickey Exp $ */
+
+ /*
+ button.c Handles button events in the terminal emulator.
+@@ -177,7 +177,7 @@
+ static void TrackDown(XButtonEvent * event);
+ static void _OwnSelection(XtermWidget termw, String * selections, Cardinal count);
+ static void do_select_end(Widget w, XEvent * event, String * params,
+- Cardinal * num_params, Bool use_cursor_loc);
++ Cardinal *num_params, Bool use_cursor_loc);
+
+ Boolean
+ SendMousePosition(Widget w, XEvent * event)
+@@ -825,7 +825,7 @@
+ DiredButton(Widget w GCC_UNUSED,
+ XEvent * event, /* must be XButtonEvent */
+ String * params GCC_UNUSED, /* selections */
+- Cardinal * num_params GCC_UNUSED)
++ Cardinal *num_params GCC_UNUSED)
+ {
+ TScreen *screen = &term->screen;
+ Char Line[6];
+@@ -848,7 +848,7 @@
+ ReadLineButton(Widget w GCC_UNUSED,
+ XEvent * event, /* must be XButtonEvent */
+ String * params GCC_UNUSED, /* selections */
+- Cardinal * num_params GCC_UNUSED)
++ Cardinal *num_params GCC_UNUSED)
+ {
+ TScreen *screen = &term->screen;
+ Char Line[6];
+@@ -908,7 +908,7 @@
+ ViButton(Widget w GCC_UNUSED,
+ XEvent * event, /* must be XButtonEvent */
+ String * params GCC_UNUSED, /* selections */
+- Cardinal * num_params GCC_UNUSED)
++ Cardinal *num_params GCC_UNUSED)
+ {
+ TScreen *screen = &term->screen;
+ int pty = screen->respond;
+@@ -943,7 +943,7 @@
+ HandleSelectExtend(Widget w,
+ XEvent * event, /* must be XMotionEvent */
+ String * params GCC_UNUSED,
+- Cardinal * num_params GCC_UNUSED)
++ Cardinal *num_params GCC_UNUSED)
+ {
+ TScreen *screen;
+ int row, col;
+@@ -967,8 +967,9 @@
+ case NORMAL:
+ /* will get here if send_mouse_pos != MOUSE_OFF */
+ if (screen->send_mouse_pos == BTN_EVENT_MOUSE
+- || screen->send_mouse_pos == ANY_EVENT_MOUSE)
+- SendMousePosition(w, event);
++ || screen->send_mouse_pos == ANY_EVENT_MOUSE) {
++ (void) SendMousePosition(w, event);
++ }
+ break;
+ }
+ }
+@@ -977,7 +978,7 @@
+ do_select_end(Widget w,
+ XEvent * event, /* must be XButtonEvent */
+ String * params, /* selections */
+- Cardinal * num_params,
++ Cardinal *num_params,
+ Bool use_cursor_loc)
+ {
+ #if OPT_READLINE
+@@ -985,8 +986,9 @@
+ TScreen *screen = &term->screen;
+ #endif
+
+- if (!IsXtermWidget(w))
++ if (!IsXtermWidget(w)) {
+ return;
++ }
+
+ ((XtermWidget) w)->screen.selection_time = event->xbutton.time;
+ switch (eventMode) {
+@@ -1018,7 +1020,7 @@
+ HandleSelectEnd(Widget w,
+ XEvent * event, /* must be XButtonEvent */
+ String * params, /* selections */
+- Cardinal * num_params)
++ Cardinal *num_params)
+ {
+ do_select_end(w, event, params, num_params, False);
+ }
+@@ -1027,7 +1029,7 @@
+ HandleKeyboardSelectEnd(Widget w,
+ XEvent * event, /* must be XButtonEvent */
+ String * params, /* selections */
+- Cardinal * num_params)
++ Cardinal *num_params)
+ {
+ do_select_end(w, event, params, num_params, True);
+ }
+@@ -1142,22 +1144,15 @@
+ return eightBitSelectionTargets;
+ }
+
+-static void
+-_GetSelection(Widget w,
+- Time ev_time,
+- String * params, /* selections in precedence order */
+- Cardinal num_params,
+- Atom * targets)
++/*
++ * Lookup the cut-buffer number, which will be in the range 0-7.
++ * If it is not a cut-buffer, it is the primary selection (-1).
++ */
++static int
++CutBuffer(int code)
+ {
+- Atom selection;
+ int cutbuffer;
+- Atom target;
+-
+- if (!IsXtermWidget(w))
+- return;
+-
+- XmuInternStrings(XtDisplay(w), params, (Cardinal) 1, &selection);
+- switch (selection) {
++ switch (code) {
+ case XA_CUT_BUFFER0:
+ cutbuffer = 0;
+ break;
+@@ -1184,7 +1179,37 @@
+ break;
+ default:
+ cutbuffer = -1;
++ break;
+ }
++ return cutbuffer;
++}
++
++static void
++_GetSelection(Widget w,
++ Time ev_time,
++ String * params, /* selections in precedence order */
++ Cardinal num_params,
++ Atom * targets)
++{
++ Atom selection;
++ int cutbuffer;
++ Atom target;
++
++ if (!IsXtermWidget(w))
++ return;
++
++#if OPT_TRACE
++ TRACE(("_GetSelection\n"));
++ if (num_params > 0) {
++ Cardinal n;
++ for (n = 0; n < num_params; ++n) {
++ TRACE(("param[%d]:%s\n", n, params[n]));
++ }
++ }
++#endif
++
++ XmuInternStrings(XtDisplay(w), params, (Cardinal) 1, &selection);
++ cutbuffer = CutBuffer(selection);
+ TRACE(("Cutbuffer: %d, target: %lu\n", cutbuffer,
+ targets ? (unsigned long) targets[0] : 0));
+ if (cutbuffer >= 0) {
+@@ -1192,7 +1217,10 @@
+ unsigned long nbytes;
+ int fmt8 = 8;
+ Atom type = XA_STRING;
+- char *line = XFetchBuffer(XtDisplay(w), &inbytes, cutbuffer);
++ char *line;
++
++ /* 'line' is freed in SelectionReceived */
++ line = XFetchBuffer(XtDisplay(w), &inbytes, cutbuffer);
+ nbytes = (unsigned long) inbytes;
+ if (nbytes > 0)
+ SelectionReceived(w, NULL, &selection, &type, (XtPointer) line,
+@@ -1219,13 +1247,17 @@
+ }
+
+ if (num_params) {
++ /* 'list' is freed in SelectionReceived */
+ list = XtNew(struct _SelectionList);
+- list->params = params;
+- list->count = num_params;
+- list->targets = targets;
+- list->time = ev_time;
+- } else
++ if (list != 0) {
++ list->params = params;
++ list->count = num_params;
++ list->targets = targets;
++ list->time = ev_time;
++ }
++ } else {
+ list = NULL;
++ }
+
+ XtGetSelectionValue(w, selection,
+ target,
+@@ -1244,7 +1276,7 @@
+
+ name = XGetAtomName(dpy, type);
+
+- Trace("Getting %s (%ld)\n", XGetAtomName(dpy, type), (long int) type);
++ Trace("Getting %s (%ld)\n", name, (long int) type);
+ for (cp = line; cp < line + len; cp++)
+ Trace("%c\n", *cp);
+ }
+@@ -1446,7 +1478,7 @@
+ HandleInsertSelection(Widget w,
+ XEvent * event, /* assumed to be XButtonEvent* */
+ String * params, /* selections in precedence order */
+- Cardinal * num_params)
++ Cardinal *num_params)
+ {
+ #if OPT_READLINE
+ int ldelta;
+@@ -1513,7 +1545,7 @@
+ HandleSelectStart(Widget w,
+ XEvent * event, /* must be XButtonEvent* */
+ String * params GCC_UNUSED,
+- Cardinal * num_params GCC_UNUSED)
++ Cardinal *num_params GCC_UNUSED)
+ {
+ TScreen *screen;
+ int startrow, startcol;
+@@ -1538,7 +1570,7 @@
+ HandleKeyboardSelectStart(Widget w,
+ XEvent * event, /* must be XButtonEvent* */
+ String * params GCC_UNUSED,
+- Cardinal * num_params GCC_UNUSED)
++ Cardinal *num_params GCC_UNUSED)
+ {
+ TScreen *screen;
+
+@@ -1619,7 +1651,6 @@
+ endECol = startcol;
+ }
+ ComputeSelect(startERow, startECol, endERow, endECol, False);
+-
+ }
+
+ static void
+@@ -1678,7 +1709,7 @@
+ HandleSelectSet(Widget w,
+ XEvent * event,
+ String * params,
+- Cardinal * num_params)
++ Cardinal *num_params)
+ {
+ SelectSet(w, event, params, *num_params);
+ }
+@@ -1690,12 +1721,14 @@
+ String * params,
+ Cardinal num_params)
+ {
++ TRACE(("SelectSet\n"));
+ /* Only do select stuff if non-null select */
+ if (startSRow != endSRow || startSCol != endSCol) {
+ SaltTextAway(startSRow, startSCol, endSRow, endSCol,
+ params, num_params);
+- } else
++ } else {
+ DisownSelection(term);
++ }
+ }
+
+ #define Abs(x) ((x) < 0 ? -(x) : (x))
+@@ -1705,7 +1738,7 @@
+ do_start_extend(Widget w,
+ XEvent * event, /* must be XButtonEvent* */
+ String * params GCC_UNUSED,
+- Cardinal * num_params GCC_UNUSED,
++ Cardinal *num_params GCC_UNUSED,
+ Bool use_cursor_loc)
+ {
+ TScreen *screen;
+@@ -1815,7 +1848,7 @@
+ HandleStartExtend(Widget w,
+ XEvent * event, /* must be XButtonEvent* */
+ String * params, /* unused */
+- Cardinal * num_params) /* unused */
++ Cardinal *num_params) /* unused */
+ {
+ do_start_extend(w, event, params, num_params, False);
+ }
+@@ -1824,13 +1857,13 @@
+ HandleKeyboardStartExtend(Widget w,
+ XEvent * event, /* must be XButtonEvent* */
+ String * params, /* unused */
+- Cardinal * num_params) /* unused */
++ Cardinal *num_params) /* unused */
+ {
+ do_start_extend(w, event, params, num_params, True);
+ }
+
+ void
+-ScrollSelection(TScreen * screen, int amount)
++ScrollSelection(TScreen * screen, int amount, Bool always)
+ {
+ int minrow = -screen->savedlines - screen->topline;
+ int maxrow = screen->max_row - screen->topline;
+@@ -1854,8 +1887,29 @@
+
+ scroll_update_one(rawRow, rawCol);
+
+- scroll_update_one(screen->startHRow, screen->startHCol);
+- scroll_update_one(screen->endHRow, screen->endHCol);
++ /*
++ * If we are told to scroll the selection but it lies outside the scrolling
++ * margins, then that could cause the selection to move (bad). It is not
++ * simple to fix, because this function is called both for the scrollbar
++ * actions as well as application scrolling. The 'always' flag is set in
++ * the former case. The rest of the logic handles the latter.
++ */
++ if (ScrnHaveSelection(screen)) {
++ int adjust;
++
++ adjust = screen->startHRow + screen->topline;
++ if (always
++ || !ScrnHaveLineMargins(screen)
++ || ScrnIsLineInMargins(screen, adjust)) {
++ scroll_update_one(screen->startHRow, screen->startHCol);
++ }
++ adjust = screen->endHRow + screen->topline;
++ if (always
++ || !ScrnHaveLineMargins(screen)
++ || ScrnIsLineInMargins(screen, adjust)) {
++ scroll_update_one(screen->endHRow, screen->endHCol);
++ }
++ }
+
+ screen->startHCoord = Coordinate(screen->startHRow, screen->startHCol);
+ screen->endHCoord = Coordinate(screen->endHRow, screen->endHCol);
+@@ -2230,7 +2284,7 @@
+ }
+
+ /* check boundaries */
+- ScrollSelection(screen, 0);
++ ScrollSelection(screen, 0, False);
+
+ TrackText(startSRow, startSCol, endSRow, endSCol);
+ return;
+@@ -2297,6 +2351,8 @@
+ TScreen *screen = &term->screen;
+ int i;
+
++ TRACE(("ReHiliteText from %d.%d to %d.%d\n", frow, fcol, trow, tcol));
++
+ if (frow < 0)
+ frow = fcol = 0;
+ else if (frow > screen->max_row)
+@@ -2397,14 +2453,14 @@
+ }
+ *lp = '\0'; /* make sure we have end marked */
+
+- TRACE(("Salted TEXT:%.*s\n", lp - line, line));
++ TRACE(("Salted TEXT:%d:%.*s\n", lp - line, lp - line, line));
+ screen->selection_length = (lp - line);
+ _OwnSelection(term, params, num_params);
+ }
+
+ static Boolean
+ _ConvertSelectionHelper(Widget w,
+- Atom * type, XtPointer * value,
++ Atom * type, XtPointer *value,
+ unsigned long *length, int *format,
+ int (*conversion_function) (Display *,
+ char **, int,
+@@ -2437,7 +2493,7 @@
+ Atom * selection,
+ Atom * target,
+ Atom * type,
+- XtPointer * value,
++ XtPointer *value,
+ unsigned long *length,
+ int *format)
+ {
+@@ -2563,9 +2619,9 @@
+ } else if (*target == XA_LENGTH(d)) {
+ /* This value is wrong if we have UTF-8 text */
+ *value = XtMalloc(4);
+- if (sizeof(long) == 4)
+- *(long *) *value = screen->selection_length;
+- else {
++ if (sizeof(long) == 4) {
++ *(long *) *value = screen->selection_length;
++ } else {
+ long temp = screen->selection_length;
+ memcpy((char *) *value, ((char *) &temp) + sizeof(long) - 4, 4);
+ }
+@@ -2599,15 +2655,7 @@
+ i < screen->selection_count; i++, atomP++) {
+ if (*selection == *atomP)
+ *atomP = (Atom) 0;
+- switch (*atomP) {
+- case XA_CUT_BUFFER0:
+- case XA_CUT_BUFFER1:
+- case XA_CUT_BUFFER2:
+- case XA_CUT_BUFFER3:
+- case XA_CUT_BUFFER4:
+- case XA_CUT_BUFFER5:
+- case XA_CUT_BUFFER6:
+- case XA_CUT_BUFFER7:
++ if (CutBuffer(*atomP) >= 0) {
+ *atomP = (Atom) 0;
+ }
+ }
+@@ -2658,35 +2706,7 @@
+ }
+ XmuInternStrings(XtDisplay((Widget) termw), selections, count, atoms);
+ for (i = 0; i < count; i++) {
+- int cutbuffer;
+- switch (atoms[i]) {
+- case XA_CUT_BUFFER0:
+- cutbuffer = 0;
+- break;
+- case XA_CUT_BUFFER1:
+- cutbuffer = 1;
+- break;
+- case XA_CUT_BUFFER2:
+- cutbuffer = 2;
+- break;
+- case XA_CUT_BUFFER3:
+- cutbuffer = 3;
+- break;
+- case XA_CUT_BUFFER4:
+- cutbuffer = 4;
+- break;
+- case XA_CUT_BUFFER5:
+- cutbuffer = 5;
+- break;
+- case XA_CUT_BUFFER6:
+- cutbuffer = 6;
+- break;
+- case XA_CUT_BUFFER7:
+- cutbuffer = 7;
+- break;
+- default:
+- cutbuffer = -1;
+- }
++ int cutbuffer = CutBuffer(atoms[i]);
+ if (cutbuffer >= 0) {
+ if (termw->screen.selection_length >
+ 4 * XMaxRequestSize(XtDisplay((Widget) termw)) - 32) {
+@@ -2721,50 +2741,52 @@
+ TrackText(0, 0, 0, 0);
+ }
+
++static void
++ResetSelectionState(TScreen * screen)
++{
++ screen->selection_count = 0;
++ screen->startHRow = screen->startHCol = 0;
++ screen->endHRow = screen->endHCol = 0;
++}
++
+ void
+ DisownSelection(XtermWidget termw)
+ {
+- Atom *atoms = termw->screen.selection_atoms;
+- Cardinal count = termw->screen.selection_count;
++ TScreen *screen = &(termw->screen);
++ Atom *atoms = screen->selection_atoms;
++ Cardinal count = screen->selection_count;
+ Cardinal i;
+
++ TRACE(("DisownSelection count %d, start %d.%d, end %d.%d\n",
++ count,
++ screen->startHRow,
++ screen->startHCol,
++ screen->endHRow,
++ screen->endHCol));
++
+ for (i = 0; i < count; i++) {
+- int cutbuffer;
+- switch (atoms[i]) {
+- case XA_CUT_BUFFER0:
+- cutbuffer = 0;
+- break;
+- case XA_CUT_BUFFER1:
+- cutbuffer = 1;
+- break;
+- case XA_CUT_BUFFER2:
+- cutbuffer = 2;
+- break;
+- case XA_CUT_BUFFER3:
+- cutbuffer = 3;
+- break;
+- case XA_CUT_BUFFER4:
+- cutbuffer = 4;
+- break;
+- case XA_CUT_BUFFER5:
+- cutbuffer = 5;
+- break;
+- case XA_CUT_BUFFER6:
+- cutbuffer = 6;
+- break;
+- case XA_CUT_BUFFER7:
+- cutbuffer = 7;
+- break;
+- default:
+- cutbuffer = -1;
+- }
+- if (cutbuffer < 0)
++ int cutbuffer = CutBuffer(atoms[i]);
++ if (cutbuffer < 0) {
+ XtDisownSelection((Widget) termw, atoms[i],
+- termw->screen.selection_time);
++ screen->selection_time);
++ }
++ }
++ /*
++ * If none of the callbacks via XtDisownSelection() reset highlighting
++ * do it now.
++ */
++ if (ScrnHaveSelection(screen)) {
++ /* save data which will be reset */
++ int start_row = screen->startHRow;
++ int start_col = screen->startHCol;
++ int end_row = screen->endHRow;
++ int end_col = screen->endHCol;
++
++ ResetSelectionState(screen);
++ ReHiliteText(start_row, start_col, end_row, end_col);
++ } else {
++ ResetSelectionState(screen);
+ }
+- termw->screen.selection_count = 0;
+- termw->screen.startHRow = termw->screen.startHCol = 0;
+- termw->screen.endHRow = termw->screen.endHCol = 0;
+ }
+
+ /* returns number of chars in line from scol to ecol out */
+@@ -2832,7 +2854,7 @@
+ }
+ previous = c;
+ if (screen->utf8_mode) {
+- lp = convertToUTF8(lp, c);
++ lp = convertToUTF8(lp, (c != 0) ? c : ' ');
+ if (c_1) {
+ lp = convertToUTF8(lp, c_1);
+ if (c_2)
+@@ -2981,7 +3003,7 @@
+ HandleGINInput(Widget w GCC_UNUSED,
+ XEvent * event GCC_UNUSED,
+ String * param_list,
+- Cardinal * nparamsp)
++ Cardinal *nparamsp)
+ {
+ if (term->screen.TekGIN && *nparamsp == 1) {
+ int c = param_list[0][0];
+@@ -3010,7 +3032,7 @@
+ HandleSecure(Widget w GCC_UNUSED,
+ XEvent * event, /* unused */
+ String * params GCC_UNUSED, /* [0] = volume */
+- Cardinal * param_count GCC_UNUSED) /* 0 or 1 */
++ Cardinal *param_count GCC_UNUSED) /* 0 or 1 */
+ {
+ Time ev_time = CurrentTime;
+
+Index: xc/programs/xterm/charclass.c
+diff -u xc/programs/xterm/charclass.c:1.3 xc/programs/xterm/charclass.c:1.3.2.1
+--- xc/programs/xterm/charclass.c:1.3 Fri Aug 13 12:57:20 2004
++++ xc/programs/xterm/charclass.c Wed Jan 12 21:45:09 2005
+@@ -20,14 +20,14 @@
+ * but merging in new intervals is significantly more hassle and
+ * not worth the effort here.
+ */
+-/* $XFree86: xc/programs/xterm/charclass.c,v 1.3 2002/04/28 19:04:19 dickey Exp $ */
++/* $XFree86: xc/programs/xterm/charclass.c,v 1.4 2004/12/01 01:27:46 dickey Exp $ */
+
+ #include <xterm.h>
+ #include <charclass.h>
+
+ #if OPT_WIDE_CHARS
+
+-struct classentry {
++static struct classentry {
+ int class;
+ int first;
+ int last;
+Index: xc/programs/xterm/charproc.c
+diff -u xc/programs/xterm/charproc.c:1.3 xc/programs/xterm/charproc.c:1.3.2.1
+--- xc/programs/xterm/charproc.c:1.3 Fri Aug 13 12:57:20 2004
++++ xc/programs/xterm/charproc.c Wed Jan 12 21:45:09 2005
+@@ -1,10 +1,10 @@
+-/* $XTermId: charproc.c,v 1.498 2004/08/08 22:36:13 tom Exp $ */
++/* $XTermId: charproc.c,v 1.533 2004/12/01 01:27:46 tom Exp $ */
+
+ /*
+ * $Xorg: charproc.c,v 1.6 2001/02/09 02:06:02 xorgcvs Exp $
+ */
+
+-/* $XFree86: xc/programs/xterm/charproc.c,v 3.165 2004/08/08 22:36:13 dickey Exp $ */
++/* $XFree86: xc/programs/xterm/charproc.c,v 3.166 2004/12/01 01:27:46 dickey Exp $ */
+
+ /*
+
+@@ -146,8 +146,9 @@
+ static void SwitchBufs(TScreen * screen);
+ static void ToAlternate(TScreen * screen);
+ static void VTallocbuf(void);
+-static void WriteText(TScreen * screen, PAIRED_CHARS(Char * str, Char *
+- str2), Cardinal len);
++static void WriteText(TScreen * screen,
++ PAIRED_CHARS(Char * str, Char * str2),
++ Cardinal len);
+ static void ansi_modes(XtermWidget termw,
+ void (*func) (unsigned *p, unsigned mask));
+ static void bitclr(unsigned *p, unsigned mask);
+@@ -181,11 +182,6 @@
+ static ANSI reply;
+ static int param[NPARAM];
+
+-#ifdef UNUSED
+-static unsigned long ctotal;
+-static unsigned long ntotal;
+-#endif
+-
+ static jmp_buf vtjmpbuf;
+
+ /* event handlers */
+@@ -270,7 +266,7 @@
+ @Num_Lock Ctrl <Btn5Down>:scroll-forw(1,halfpage,m) \n\
+ <Btn5Down>:scroll-forw(5,line,m) \n\
+ <BtnUp>:select-end(PRIMARY, CUT_BUFFER0) \n\
+- <BtnDown>:bell(0) \
++ <BtnDown>:ignore() \
+ "; /* PROCURA added "Meta <Btn2Down>:clear-saved-lines()" */
+ /* *INDENT-OFF* */
+ static XtActionsRec actionsList[] = {
+@@ -387,6 +383,9 @@
+ { "tek-reset", HandleTekReset },
+ { "tek-copy", HandleTekCopy },
+ #endif
++#if OPT_TOOLBAR
++ { "set-toolbar", HandleToolbar },
++#endif
+ #if OPT_WIDE_CHARS
+ { "set-utf8-mode", HandleUTF8Mode },
+ #endif
+@@ -504,6 +503,9 @@
+
+ #if OPT_BLINK_CURS
+ Bres(XtNcursorBlink, XtCCursorBlink, screen.cursor_blink, FALSE),
++#endif
++
++#if OPT_BLINK_TEXT
+ Bres(XtNshowBlinkAsBold, XtCCursorBlink, screen.blink_as_bold, DEFBLINKASBOLD),
+ #endif
+
+@@ -616,10 +618,9 @@
+ #endif
+
+ #if OPT_TOOLBAR
+- {XtNmenuBar, XtCMenuBar, XtRWidget, sizeof(Widget),
+- XtOffsetOf(XtermWidgetRec, screen.fullVwin.menu_bar),
+- XtRWidget, (XtPointer) 0},
+- Ires(XtNmenuHeight, XtCMenuHeight, screen.fullVwin.menu_height, 25),
++ Wres(XtNmenuBar, XtCMenuBar, VT100_TB_INFO(menu_bar), 0),
++ Ires(XtNmenuHeight, XtCMenuHeight, VT100_TB_INFO(menu_height), 25),
++ Bres(XtNtoolBar, XtCToolBar, screen.toolbars, TRUE),
+ #endif
+
+ #if OPT_WIDE_CHARS
+@@ -652,7 +653,7 @@
+ #endif
+
+ #if OPT_RENDERFONT
+- Ires(XtNfaceSize, XtCFaceSize, misc.face_size, DEFFACESIZE),
++ Dres(XtNfaceSize, XtCFaceSize, misc.face_size, DEFFACESIZE),
+ Sres(XtNfaceName, XtCFaceName, misc.face_name, DEFFACENAME),
+ Sres(XtNfaceNameDoublesize, XtCFaceNameDoublesize, misc.face_wide_name, DEFFACENAME),
+ Bres(XtNrenderFont, XtCRenderFont, misc.render_font, TRUE),
+@@ -660,12 +661,12 @@
+ };
+
+ static Boolean VTSetValues(Widget cur, Widget request, Widget new_arg,
+- ArgList args, Cardinal * num_args);
++ ArgList args, Cardinal *num_args);
+ static void VTClassInit(void);
+ static void VTDestroy(Widget w);
+ static void VTExpose(Widget w, XEvent * event, Region region);
+ static void VTInitialize(Widget wrequest, Widget new_arg, ArgList args,
+- Cardinal * num_args);
++ Cardinal *num_args);
+ static void VTRealize(Widget w, XtValueMask * valuemask,
+ XSetWindowAttributes * values);
+ static void VTResize(Widget w);
+@@ -709,7 +710,7 @@
+ VTExpose, /* expose */
+ VTSetValues, /* set_values */
+ NULL, /* set_values_hook */
+- NULL, /* set_values_almost */
++ XtInheritSetValuesAlmost, /* set_values_almost */
+ NULL, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* version */
+@@ -791,7 +792,6 @@
+ register TScreen *screen = &term->screen;
+ Pixel fg;
+
+- /* FIXME HideCursor(); */
+ if (color >= 0) {
+ term->flags |= FG_COLOR;
+ } else {
+@@ -1008,10 +1008,26 @@
+ print_used = 0; \
+ } \
+
+-extern int last_written_col, last_written_row;
++struct ParseState {
++#if OPT_VT52_MODE
++ Bool vt52_cup;
++#endif
++ Const PARSE_T *groundtable;
++ Const PARSE_T *parsestate;
++ int scstype;
++ Bool private_function; /* distinguish private-mode from standard */
++ int string_mode; /* nonzero iff we're processing a string */
++ int lastchar; /* positive iff we had a graphic character */
++ int nextstate;
++#if OPT_WIDE_CHARS
++ int last_was_wide;
++#endif
++};
++
++static struct ParseState myState;
+
+ static void
+-VTparse(void)
++doparsing(unsigned c, struct ParseState *sp)
+ {
+ /* Buffer for processing printable text */
+ static IChar *print_area;
+@@ -1021,46 +1037,17 @@
+ static Char *string_area;
+ static size_t string_size, string_used;
+
+-#if OPT_VT52_MODE
+- static Bool vt52_cup = FALSE;
+-#endif
+-
+- Const PARSE_T *groundtable = ansi_table;
+ TScreen *screen = &term->screen;
+- Const PARSE_T *parsestate;
+- unsigned int c;
+- Char *cp;
+- int row, col, top, bot, scstype, count;
+- Bool private_function; /* distinguish private-mode from standard */
+- int string_mode; /* nonzero iff we're processing a string */
+- int lastchar; /* positive iff we had a graphic character */
+- int nextstate;
++ int row;
++ int col;
++ int top;
++ int bot;
++ int count;
+ int laststate;
+-#if OPT_WIDE_CHARS
+- int last_was_wide;
+-#endif
+-
+- /* We longjmp back to this point in VTReset() */
+- (void) setjmp(vtjmpbuf);
+-#if OPT_VT52_MODE
+- groundtable = screen->vtXX_level ? ansi_table : vt52_table;
+-#else
+- groundtable = ansi_table;
+-#endif
+- parsestate = groundtable;
+- scstype = 0;
+- private_function = False;
+- string_mode = 0;
+- lastchar = -1; /* not a legal IChar */
+- nextstate = -1; /* not a legal state */
+-#if OPT_WIDE_CHARS
+- last_was_wide = 0;
+-#endif
+-
+- for (;;) {
+- int thischar = -1;
+- c = doinput();
++ int thischar = -1;
++ XTermRect myRect;
+
++ do {
+ #if OPT_WIDE_CHARS
+ if (screen->wide_chars
+ && my_wcwidth(c) == 0) {
+@@ -1068,20 +1055,24 @@
+
+ WriteNow();
+
+- prev = getXtermCell(screen, last_written_row, last_written_col);
++ prev = getXtermCell(screen,
++ screen->last_written_row,
++ screen->last_written_col);
+ precomposed = do_precomposition(prev, c);
+
+ if (precomposed != -1) {
+- putXtermCell(screen, last_written_row, last_written_col, precomposed);
++ putXtermCell(screen,
++ screen->last_written_row,
++ screen->last_written_col, precomposed);
+ } else {
+ addXtermCombining(screen,
+- last_written_row,
+- last_written_col, c);
++ screen->last_written_row,
++ screen->last_written_col, c);
+ }
+ if (!screen->scroll_amt)
+- ScrnRefresh(screen,
+- last_written_row,
+- last_written_col, 1, 1, 1);
++ ScrnUpdate(screen,
++ screen->last_written_row,
++ screen->last_written_col, 1, 1, 1);
+ continue;
+ }
+ #endif
+@@ -1098,17 +1089,18 @@
+ * that denotes the type of sequence.
+ */
+ #if OPT_VT52_MODE
+- if (vt52_cup) {
+- param[nparam++] = (c & 0x7f) - 32;
++ if (sp->vt52_cup) {
++ if (nparam < NPARAM)
++ param[nparam++] = (c & 0x7f) - 32;
+ if (nparam < 2)
+ continue;
+- vt52_cup = FALSE;
++ sp->vt52_cup = FALSE;
+ if ((row = param[0]) < 0)
+ row = 0;
+ if ((col = param[1]) < 0)
+ col = 0;
+ CursorSet(screen, row, col, term->flags);
+- parsestate = vt52_table;
++ sp->parsestate = vt52_table;
+ param[0] = 0;
+ param[1] = 0;
+ continue;
+@@ -1120,23 +1112,23 @@
+ * wide characters, we handle them by treating them the same as
+ * printing characters.
+ */
+- laststate = nextstate;
++ laststate = sp->nextstate;
+ #if OPT_WIDE_CHARS
+ if (c > 255) {
+- if (parsestate == groundtable) {
+- nextstate = CASE_PRINT;
+- } else if (parsestate == sos_table) {
++ if (sp->parsestate == sp->groundtable) {
++ sp->nextstate = CASE_PRINT;
++ } else if (sp->parsestate == sos_table) {
+ c &= 0xffff;
+ if (c > 255) {
+ TRACE(("Found code > 255 while in SOS state: %04X\n", c));
+ c = '?';
+ }
+ } else {
+- nextstate = CASE_GROUND_STATE;
++ sp->nextstate = CASE_GROUND_STATE;
+ }
+ } else
+ #endif
+- nextstate = parsestate[E2A(c)];
++ sp->nextstate = sp->parsestate[E2A(c)];
+
+ #if OPT_BROKEN_OSC
+ /*
+@@ -1147,7 +1139,7 @@
+ * in emulating bad code.
+ */
+ if (screen->brokenLinuxOSC
+- && parsestate == sos_table) {
++ && sp->parsestate == sos_table) {
+ if (string_used) {
+ switch (string_area[0]) {
+ case 'P':
+@@ -1155,8 +1147,8 @@
+ break;
+ /* FALLTHRU */
+ case 'R':
+- parsestate = groundtable;
+- nextstate = parsestate[E2A(c)];
++ sp->parsestate = sp->groundtable;
++ sp->nextstate = sp->parsestate[E2A(c)];
+ TRACE(("Reset to ground state (brokenLinuxOSC)\n"));
+ break;
+ }
+@@ -1172,7 +1164,7 @@
+ * and emulate the old behavior.
+ */
+ if (screen->brokenStringTerm
+- && parsestate == sos_table
++ && sp->parsestate == sos_table
+ && c < 32) {
+ switch (c) {
+ case 5: /* FALLTHRU */
+@@ -1185,8 +1177,8 @@
+ case 14: /* FALLTHRU */
+ case 15: /* FALLTHRU */
+ case 24:
+- parsestate = groundtable;
+- nextstate = parsestate[E2A(c)];
++ sp->parsestate = sp->groundtable;
++ sp->nextstate = sp->parsestate[E2A(c)];
+ TRACE(("Reset to ground state (brokenStringTerm)\n"));
+ break;
+ }
+@@ -1201,9 +1193,9 @@
+ */
+ if (screen->c1_printable
+ && (c >= 128 && c < 160)) {
+- nextstate = (parsestate == esc_table
+- ? CASE_ESC_IGNORE
+- : parsestate[E2A(160)]);
++ sp->nextstate = (sp->parsestate == esc_table
++ ? CASE_ESC_IGNORE
++ : sp->parsestate[E2A(160)]);
+ }
+ #endif
+
+@@ -1221,14 +1213,14 @@
+ #endif
+ if (screen->wide_chars
+ && (c >= 128 && c < 160)) {
+- nextstate = CASE_IGNORE;
++ sp->nextstate = CASE_IGNORE;
+ }
+
+ /*
+ * If this character is a different width than the last one, put the
+ * previous text into the buffer and draw it now.
+ */
+- if (iswide(c) != last_was_wide) {
++ if (iswide(c) != sp->last_was_wide) {
+ WriteNow();
+ }
+ #endif
+@@ -1237,11 +1229,11 @@
+ * Accumulate string for printable text. This may be 8/16-bit
+ * characters.
+ */
+- if (nextstate == CASE_PRINT) {
++ if (sp->nextstate == CASE_PRINT) {
+ SafeAlloc(IChar, print_area, print_used, print_size);
+ if (new_string == 0) {
+ fprintf(stderr,
+- "Cannot allocate %d bytes for printable text\n",
++ "Cannot allocate %u bytes for printable text\n",
+ new_length);
+ continue;
+ }
+@@ -1256,16 +1248,16 @@
+ #endif
+ print_area = new_string;
+ print_size = new_length;
+- print_area[print_used++] = lastchar = thischar = c;
++ print_area[print_used++] = sp->lastchar = thischar = c;
+ #if OPT_WIDE_CHARS
+- last_was_wide = iswide(c);
++ sp->last_was_wide = iswide(c);
+ #endif
+ if (morePtyData(screen, &VTbuffer)) {
+ continue;
+ }
+ }
+
+- if (nextstate == CASE_PRINT
++ if (sp->nextstate == CASE_PRINT
+ || (laststate == CASE_PRINT && print_used)) {
+ WriteNow();
+ }
+@@ -1274,12 +1266,12 @@
+ * Accumulate string for APC, DCS, PM, OSC, SOS controls
+ * This should always be 8-bit characters.
+ */
+- if (parsestate == sos_table) {
++ if (sp->parsestate == sos_table) {
+ SafeAlloc(Char, string_area, string_used, string_size);
+ if (new_string == 0) {
+ fprintf(stderr,
+- "Cannot allocate %d bytes for string mode %d\n",
+- new_length, string_mode);
++ "Cannot allocate %u bytes for string mode %d\n",
++ new_length, sp->string_mode);
+ continue;
+ }
+ #if OPT_WIDE_CHARS
+@@ -1289,46 +1281,48 @@
+ * string.
+ */
+ if ((c & 0xffff) > 255) {
+- nextstate = CASE_PRINT;
++ sp->nextstate = CASE_PRINT;
+ c = '?';
+ }
+ #endif
+ string_area = new_string;
+ string_size = new_length;
+ string_area[string_used++] = c;
+- } else if (parsestate != esc_table) {
++ } else if (sp->parsestate != esc_table) {
+ /* if we were accumulating, we're not any more */
+- string_mode = 0;
++ sp->string_mode = 0;
+ string_used = 0;
+ }
+
+- TRACE(("parse %04X -> %d\n", c, nextstate));
++ TRACE(("parse %04X -> %d\n", c, sp->nextstate));
+
+- switch (nextstate) {
++ switch (sp->nextstate) {
+ case CASE_PRINT:
+- /* printable characters (see above) */
++ TRACE(("CASE_PRINT - printable characters\n"));
+ break;
+
+ case CASE_GROUND_STATE:
+- /* exit ignore mode */
+- parsestate = groundtable;
++ TRACE(("CASE_GROUND_STATE - exit ignore mode\n"));
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_IGNORE:
+- /* Ignore character */
++ TRACE(("CASE_IGNORE - Ignore character\n"));
+ break;
+
+ case CASE_ENQ:
++ TRACE(("CASE_ENQ - answerback\n"));
+ for (count = 0; screen->answer_back[count] != 0; count++)
+ unparseputc(screen->answer_back[count], screen->respond);
+ break;
+
+ case CASE_BELL:
+- if (string_mode == OSC) {
++ TRACE(("CASE_BELL - bell\n"));
++ if (sp->string_mode == OSC) {
+ if (string_used)
+ string_area[--string_used] = '\0';
+ do_osc(string_area, string_used, c);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ } else {
+ /* bell */
+ Bell(XkbBI_TerminalBell, 0);
+@@ -1336,32 +1330,33 @@
+ break;
+
+ case CASE_BS:
+- /* backspace */
++ TRACE(("CASE_BS - backspace\n"));
+ CursorBack(screen, 1);
+ break;
+
+ case CASE_CR:
+- /* carriage return */
++ /* CR */
+ CarriageReturn(screen);
+ break;
+
+ case CASE_ESC:
+- /* escape */
+ if_OPT_VT52_MODE(screen, {
+- parsestate = vt52_esc_table;
++ sp->parsestate = vt52_esc_table;
+ break;
+ });
+- parsestate = esc_table;
++ sp->parsestate = esc_table;
+ break;
+
+ #if OPT_VT52_MODE
+ case CASE_VT52_CUP:
+- vt52_cup = TRUE;
++ TRACE(("CASE_VT52_CUP - VT52 cursor addressing\n"));
++ sp->vt52_cup = TRUE;
+ nparam = 0;
+ break;
+
+ case CASE_VT52_IGNORE:
+- parsestate = vt52_ignore_table;
++ TRACE(("CASE_VT52_IGNORE - VT52 ignore-character\n"));
++ sp->parsestate = vt52_ignore_table;
+ break;
+ #endif
+
+@@ -1382,7 +1377,7 @@
+ count = 1;
+ while ((count-- > 0)
+ && (TabToPrevStop())) ;
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_CHT:
+@@ -1391,7 +1386,7 @@
+ count = 1;
+ while ((count-- > 0)
+ && (TabToNextStop())) ;
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_TAB:
+@@ -1402,64 +1397,64 @@
+ case CASE_SI:
+ screen->curgl = 0;
+ if_OPT_VT52_MODE(screen, {
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ });
+ break;
+
+ case CASE_SO:
+ screen->curgl = 1;
+ if_OPT_VT52_MODE(screen, {
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ });
+ break;
+
+ case CASE_DECDHL:
+ xterm_DECDHL(c == '3');
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_DECSWL:
+ xterm_DECSWL();
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_DECDWL:
+ xterm_DECDWL();
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_SCR_STATE:
+ /* enter scr state */
+- parsestate = scrtable;
++ sp->parsestate = scrtable;
+ break;
+
+ case CASE_SCS0_STATE:
+ /* enter scs state 0 */
+- scstype = 0;
+- parsestate = scstable;
++ sp->scstype = 0;
++ sp->parsestate = scstable;
+ break;
+
+ case CASE_SCS1_STATE:
+ /* enter scs state 1 */
+- scstype = 1;
+- parsestate = scstable;
++ sp->scstype = 1;
++ sp->parsestate = scstable;
+ break;
+
+ case CASE_SCS2_STATE:
+ /* enter scs state 2 */
+- scstype = 2;
+- parsestate = scstable;
++ sp->scstype = 2;
++ sp->parsestate = scstable;
+ break;
+
+ case CASE_SCS3_STATE:
+ /* enter scs state 3 */
+- scstype = 3;
+- parsestate = scstable;
++ sp->scstype = 3;
++ sp->parsestate = scstable;
+ break;
+
+ case CASE_ESC_IGNORE:
+ /* unknown escape sequence */
+- parsestate = eigtable;
++ sp->parsestate = eigtable;
+ break;
+
+ case CASE_ESC_DIGIT:
+@@ -1469,75 +1464,75 @@
+ param[nparam - 1] = 10 * row + (c - '0');
+ if (param[nparam - 1] > 65535)
+ param[nparam - 1] = 65535;
+- if (parsestate == csi_table)
+- parsestate = csi2_table;
++ if (sp->parsestate == csi_table)
++ sp->parsestate = csi2_table;
+ break;
+
+ case CASE_ESC_SEMI:
+ /* semicolon in csi or dec mode */
+ if (nparam < NPARAM)
+ param[nparam++] = DEFAULT;
+- if (parsestate == csi_table)
+- parsestate = csi2_table;
++ if (sp->parsestate == csi_table)
++ sp->parsestate = csi2_table;
+ break;
+
+ case CASE_DEC_STATE:
+ /* enter dec mode */
+- parsestate = dec_table;
++ sp->parsestate = dec_table;
+ break;
+
+ case CASE_DEC2_STATE:
+ /* enter dec2 mode */
+- parsestate = dec2_table;
++ sp->parsestate = dec2_table;
+ break;
+
+ case CASE_DEC3_STATE:
+ /* enter dec3 mode */
+- parsestate = dec3_table;
++ sp->parsestate = dec3_table;
+ break;
+
+ case CASE_ICH:
+- /* ICH */
++ TRACE(("CASE_ICH - insert char\n"));
+ if ((row = param[0]) < 1)
+ row = 1;
+ InsertChar(screen, row);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_CUU:
+- /* CUU */
++ TRACE(("CASE_CUU - cursor up\n"));
+ if ((row = param[0]) < 1)
+ row = 1;
+ CursorUp(screen, row);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_CUD:
+- /* CUD */
++ TRACE(("CASE_CUD - cursor down\n"));
+ if ((row = param[0]) < 1)
+ row = 1;
+ CursorDown(screen, row);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_CUF:
+- /* CUF */
++ TRACE(("CASE_CUF - cursor forward\n"));
+ if ((col = param[0]) < 1)
+ col = 1;
+ CursorForward(screen, col);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_CUB:
+- /* CUB */
++ TRACE(("CASE_CUB - cursor backward\n"));
+ if ((col = param[0]) < 1)
+ col = 1;
+ CursorBack(screen, col);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_CUP:
+- /* CUP | HVP */
++ TRACE(("CASE_CUP - cursor position\n"));
+ if_OPT_XMC_GLITCH(screen, {
+ Jump_XMC(screen);
+ });
+@@ -1546,78 +1541,82 @@
+ if (nparam < 2 || (col = param[1]) < 1)
+ col = 1;
+ CursorSet(screen, row - 1, col - 1, term->flags);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_VPA:
++ TRACE(("CASE_VPA - vertical position\n"));
+ if ((row = param[0]) < 1)
+ row = 1;
+ CursorSet(screen, row - 1, screen->cur_col, term->flags);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_HPA:
+- /* HPA | CHA */
++ TRACE(("CASE_HPA - horizontal position\n"));
+ if ((col = param[0]) < 1)
+ col = 1;
+ CursorSet(screen, screen->cur_row, col - 1, term->flags);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_HP_BUGGY_LL:
++ TRACE(("CASE_HP_BUGGY_LL\n"));
+ /* Some HP-UX applications have the bug that they
+ assume ESC F goes to the lower left corner of
+ the screen, regardless of what terminfo says. */
+ if (screen->hp_ll_bc)
+ CursorSet(screen, screen->max_row, 0, term->flags);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_ED:
+- /* ED */
++ TRACE(("CASE_ED - erase display\n"));
+ do_erase_display(screen, param[0], OFF_PROTECT);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_EL:
+- /* EL */
++ TRACE(("CASE_EL - erase line\n"));
+ do_erase_line(screen, param[0], OFF_PROTECT);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_ECH:
++ TRACE(("CASE_ECH - erase char\n"));
+ /* ECH */
+ ClearRight(screen, param[0] < 1 ? 1 : param[0]);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_IL:
+- /* IL */
++ TRACE(("CASE_IL - insert line\n"));
+ if ((row = param[0]) < 1)
+ row = 1;
+ InsertLine(screen, row);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_DL:
+- /* DL */
++ TRACE(("CASE_DL - delete line\n"));
+ if ((row = param[0]) < 1)
+ row = 1;
+ DeleteLine(screen, row);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_DCH:
+- /* DCH */
++ TRACE(("CASE_DCH - delete char\n"));
+ if ((row = param[0]) < 1)
+ row = 1;
+ DeleteChar(screen, row);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_TRACK_MOUSE:
+ if (screen->send_mouse_pos == VT200_HIGHLIGHT_MOUSE
+ || nparam > 1) {
++ TRACE(("CASE_TRACK_MOUSE\n"));
+ /* Track mouse as long as in window and between
+ * specified rows
+ */
+@@ -1625,27 +1624,29 @@
+ param[2] - 1, param[1] - 1,
+ param[3] - 1, param[4] - 2);
+ } else {
++ TRACE(("CASE_SD - scroll down\n"));
+ /* SD */
+ if ((count = param[0]) < 1)
+ count = 1;
+ RevScroll(screen, count);
+ do_xevents();
+ }
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_DECID:
++ TRACE(("CASE_DECID\n"));
+ if_OPT_VT52_MODE(screen, {
+ unparseputc(ESC, screen->respond);
+ unparseputc('/', screen->respond);
+ unparseputc('Z', screen->respond);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+ });
+- param[0] = -1; /* Default ID parameter */
++ param[0] = DEFAULT; /* Default ID parameter */
+ /* FALLTHRU */
+ case CASE_DA1:
+- /* DA1 */
++ TRACE(("CASE_DA1\n"));
+ if (param[0] <= 1) { /* less than means DEFAULT */
+ count = 0;
+ reply.a_type = CSI;
+@@ -1695,11 +1696,11 @@
+ reply.a_final = 'c';
+ unparseseq(&reply, screen->respond);
+ }
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_DA2:
+- /* DA2 */
++ TRACE(("CASE_DA2\n"));
+ if (param[0] <= 0) { /* less than means DEFAULT */
+ count = 0;
+ reply.a_type = CSI;
+@@ -1716,11 +1717,11 @@
+ reply.a_final = 'c';
+ unparseseq(&reply, screen->respond);
+ }
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_DECRPTUI:
+- /* DECRPTUI */
++ TRACE(("CASE_DECRPTUI\n"));
+ if ((screen->terminal_id >= 400)
+ && (param[0] <= 0)) { /* less than means DEFAULT */
+ unparseputc1(DCS, screen->respond);
+@@ -1729,32 +1730,31 @@
+ unparseputc('0', screen->respond);
+ unparseputc1(ST, screen->respond);
+ }
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_TBC:
+- /* TBC */
++ TRACE(("CASE_TBC - tab clear\n"));
+ if ((row = param[0]) <= 0) /* less than means default */
+ TabClear(term->tabs, screen->cur_col);
+ else if (row == 3)
+ TabZonk(term->tabs);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_SET:
+- /* SET */
++ TRACE(("CASE_SET - set mode\n"));
+ ansi_modes(term, bitset);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_RST:
+- /* RST */
++ TRACE(("CASE_RST - reset mode\n"));
+ ansi_modes(term, bitclr);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_SGR:
+- /* SGR */
+ for (row = 0; row < nparam; ++row) {
+ if_OPT_XMC_GLITCH(screen, {
+ Mark_XMC(screen, param[row]);
+@@ -1942,18 +1942,19 @@
+ break;
+ }
+ }
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ /* DSR (except for the '?') is a superset of CPR */
+ case CASE_DSR:
+- private_function = True;
++ sp->private_function = True;
+
+ /* FALLTHRU */
+ case CASE_CPR:
++ TRACE(("CASE_CPR - cursor position\n"));
+ count = 0;
+ reply.a_type = CSI;
+- reply.a_pintro = private_function ? '?' : 0;
++ reply.a_pintro = sp->private_function ? '?' : 0;
+ reply.a_inters = 0;
+ reply.a_final = 'n';
+
+@@ -1999,33 +2000,38 @@
+ if ((reply.a_nparam = count) != 0)
+ unparseseq(&reply, screen->respond);
+
+- parsestate = groundtable;
+- private_function = False;
++ sp->parsestate = sp->groundtable;
++ sp->private_function = False;
+ break;
+
+ case CASE_MC:
++ TRACE(("CASE_MC - media control\n"));
+ xtermMediaControl(param[0], FALSE);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_DEC_MC:
++ TRACE(("CASE_DEC_MC - DEC media control\n"));
+ xtermMediaControl(param[0], TRUE);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_HP_MEM_LOCK:
+ case CASE_HP_MEM_UNLOCK:
++ TRACE(("%s\n", ((sp->parsestate[c] == CASE_HP_MEM_LOCK)
++ ? "CASE_HP_MEM_LOCK"
++ : "CASE_HP_MEM_UNLOCK")));
+ if (screen->scroll_amt)
+ FlushScroll(screen);
+- if (parsestate[c] == CASE_HP_MEM_LOCK)
++ if (sp->parsestate[c] == CASE_HP_MEM_LOCK)
+ screen->top_marg = screen->cur_row;
+ else
+ screen->top_marg = 0;
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_DECSTBM:
+- /* DECSTBM - set scrolling region */
++ TRACE(("CASE_DECSTBM - set scrolling region\n"));
+ if ((top = param[0]) < 1)
+ top = 1;
+ if (nparam < 2 || (bot = param[1]) == DEFAULT
+@@ -2039,11 +2045,11 @@
+ screen->bot_marg = bot - 1;
+ CursorSet(screen, 0, 0, term->flags);
+ }
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_DECREQTPARM:
+- /* DECREQTPARM */
++ TRACE(("CASE_DECREQTPARM\n"));
+ if (screen->terminal_id < 200) { /* VT102 */
+ if ((row = param[0]) == DEFAULT)
+ row = 0;
+@@ -2063,7 +2069,7 @@
+ unparseseq(&reply, screen->respond);
+ }
+ }
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_DECSET:
+@@ -2072,7 +2078,7 @@
+ if (screen->vtXX_level != 0)
+ #endif
+ dpmodes(term, bitset);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ #if OPT_TEK4014
+ if (screen->TekEmu)
+ return;
+@@ -2084,70 +2090,63 @@
+ dpmodes(term, bitclr);
+ #if OPT_VT52_MODE
+ if (screen->vtXX_level == 0)
+- groundtable = vt52_table;
++ sp->groundtable = vt52_table;
+ else if (screen->terminal_id >= 100)
+- groundtable = ansi_table;
++ sp->groundtable = ansi_table;
+ #endif
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_DECALN:
+- /* DECALN */
++ TRACE(("CASE_DECALN - alignment test\n"));
+ if (screen->cursor_state)
+ HideCursor();
+- for (row = screen->max_row; row >= 0; row--) {
+- bzero(SCRN_BUF_ATTRS(screen, row),
+- col = screen->max_col + 1);
+- for (cp = SCRN_BUF_CHARS(screen, row); col > 0; col--)
+- *cp++ = (Char) 'E';
+- if_OPT_WIDE_CHARS(screen, {
+- bzero(SCRN_BUF_WIDEC(screen, row),
+- screen->max_col + 1);
+- });
+- }
+- ScrnRefresh(screen, 0, 0, screen->max_row + 1,
+- screen->max_col + 1, False);
+- parsestate = groundtable;
++ screen->top_marg = 0;
++ screen->bot_marg = screen->max_row;
++ CursorSet(screen, 0, 0, term->flags);
++ xtermParseRect(screen, 0, 0, &myRect);
++ ScrnFillRectangle(screen, &myRect, 'E', 0);
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_GSETS:
+- TRACE(("CASE_GSETS(%d) = '%c'\n", scstype, c));
++ TRACE(("CASE_GSETS(%d) = '%c'\n", sp->scstype, c));
+ if (screen->vtXX_level != 0)
+- screen->gsets[scstype] = c;
+- parsestate = groundtable;
++ screen->gsets[sp->scstype] = c;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_DECSC:
+- /* DECSC */
++ TRACE(("CASE_DECSC - save cursor\n"));
+ CursorSave(term);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_DECRC:
+- /* DECRC */
++ TRACE(("CASE_DECRC - restore cursor\n"));
+ CursorRestore(term);
+ if_OPT_ISO_COLORS(screen, {
+ setExtendedFG();
+ });
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_DECKPAM:
+- /* DECKPAM */
++ TRACE(("CASE_DECKPAM\n"));
+ term->keyboard.flags |= MODE_DECKPAM;
+ update_appkeypad();
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_DECKPNM:
+- /* DECKPNM */
++ TRACE(("CASE_DECKPNM\n"));
+ term->keyboard.flags &= ~MODE_DECKPAM;
+ update_appkeypad();
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_CSI_QUOTE_STATE:
+- parsestate = csi_quo_table;
++ sp->parsestate = csi_quo_table;
+ break;
+
+ #if OPT_VT52_MODE
+@@ -2157,8 +2156,8 @@
+ screen->vtXX_level));
+ if (screen->terminal_id >= 100
+ && screen->vtXX_level == 0) {
+- groundtable =
+- parsestate = ansi_table;
++ sp->groundtable =
++ sp->parsestate = ansi_table;
+ screen->vtXX_level = screen->vt52_save_level;
+ screen->curgl = screen->vt52_save_curgl;
+ screen->curgr = screen->vt52_save_curgr;
+@@ -2171,19 +2170,19 @@
+ case CASE_ANSI_LEVEL_1:
+ TRACE(("CASE_ANSI_LEVEL_1\n"));
+ set_ansi_conformance(screen, 1);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_ANSI_LEVEL_2:
+ TRACE(("CASE_ANSI_LEVEL_2\n"));
+ set_ansi_conformance(screen, 2);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_ANSI_LEVEL_3:
+ TRACE(("CASE_ANSI_LEVEL_3\n"));
+ set_ansi_conformance(screen, 3);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_DECSCL:
+@@ -2203,35 +2202,37 @@
+ show_8bit_control(True);
+ }
+ }
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_DECSCA:
++ TRACE(("CASE_DECSCA\n"));
+ screen->protected_mode = DEC_PROTECT;
+ if (param[0] <= 0 || param[0] == 2)
+ term->flags &= ~PROTECTED;
+ else if (param[0] == 1)
+ term->flags |= PROTECTED;
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_DECSED:
+- /* DECSED */
++ TRACE(("CASE_DECSED\n"));
+ do_erase_display(screen, param[0], DEC_PROTECT);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_DECSEL:
+- /* DECSEL */
++ TRACE(("CASE_DECSEL\n"));
+ do_erase_line(screen, param[0], DEC_PROTECT);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_ST:
++ TRACE(("CASE_ST: End of String (%d bytes)\n", string_used));
+ if (!string_used)
+ break;
+ string_area[--string_used] = '\0';
+- switch (string_mode) {
++ switch (sp->string_mode) {
+ case APC:
+ /* ignored */
+ break;
+@@ -2248,128 +2249,130 @@
+ /* ignored */
+ break;
+ }
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_SOS:
+- TRACE(("begin SOS: Start of String\n"));
+- string_mode = SOS;
+- parsestate = sos_table;
++ TRACE(("CASE_SOS: Start of String\n"));
++ sp->string_mode = SOS;
++ sp->parsestate = sos_table;
+ break;
+
+ case CASE_PM:
+- TRACE(("begin PM: Privacy Message\n"));
+- string_mode = PM;
+- parsestate = sos_table;
++ TRACE(("CASE_PM: Privacy Message\n"));
++ sp->string_mode = PM;
++ sp->parsestate = sos_table;
+ break;
+
+ case CASE_DCS:
+- TRACE(("begin DCS: Device Control String\n"));
+- string_mode = DCS;
+- parsestate = sos_table;
++ TRACE(("CASE_DCS: Device Control String\n"));
++ sp->string_mode = DCS;
++ sp->parsestate = sos_table;
+ break;
+
+ case CASE_APC:
+- TRACE(("begin APC: Application Program Command\n"));
+- string_mode = APC;
+- parsestate = sos_table;
++ TRACE(("CASE_APC: Application Program Command\n"));
++ sp->string_mode = APC;
++ sp->parsestate = sos_table;
+ break;
+
+ case CASE_SPA:
++ TRACE(("CASE_SPA - start protected area\n"));
+ screen->protected_mode = ISO_PROTECT;
+ term->flags |= PROTECTED;
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_EPA:
++ TRACE(("CASE_EPA - end protected area\n"));
+ term->flags &= ~PROTECTED;
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_SU:
+- /* SU */
++ TRACE(("CASE_SU - scroll up\n"));
+ if ((count = param[0]) < 1)
+ count = 1;
+ xtermScroll(screen, count);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_IND:
+- /* IND */
++ TRACE(("CASE_IND - index\n"));
+ xtermIndex(screen, 1);
+ do_xevents();
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_CPL:
+- /* cursor prev line */
++ TRACE(("CASE_CPL - cursor prev line\n"));
+ CursorPrevLine(screen, param[0]);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_CNL:
+- /* cursor next line */
++ TRACE(("CASE_NPL - cursor next line\n"));
+ CursorNextLine(screen, param[0]);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_NEL:
+- /* NEL */
++ TRACE(("CASE_NEL\n"));
+ xtermIndex(screen, 1);
+ CarriageReturn(screen);
+ do_xevents();
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_HTS:
+- /* HTS */
++ TRACE(("CASE_HTS - horizontal tab set\n"));
+ TabSet(term->tabs, screen->cur_col);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_RI:
+- /* RI */
++ TRACE(("CASE_RI - reverse index\n"));
+ RevIndex(screen, 1);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_SS2:
+- /* SS2 */
++ TRACE(("CASE_SS2\n"));
+ screen->curss = 2;
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_SS3:
+- /* SS3 */
++ TRACE(("CASE_SS3\n"));
+ screen->curss = 3;
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_CSI_STATE:
+ /* enter csi state */
+ nparam = 1;
+ param[0] = DEFAULT;
+- parsestate = csi_table;
++ sp->parsestate = csi_table;
+ break;
+
+ case CASE_ESC_SP_STATE:
+ /* esc space */
+- parsestate = esc_sp_table;
++ sp->parsestate = esc_sp_table;
+ break;
+
+ case CASE_CSI_EX_STATE:
+ /* csi exclamation */
+- parsestate = csi_ex_table;
++ sp->parsestate = csi_ex_table;
+ break;
+
+ #if OPT_DEC_LOCATOR
+ case CASE_CSI_TICK_STATE:
+ /* csi tick (') */
+- parsestate = csi_tick_table;
++ sp->parsestate = csi_tick_table;
+ break;
+
+ case CASE_DECEFR:
+- TRACE(("DECEFR - Enable Filter Rectangle\n"));
++ TRACE(("CASE_DECEFR - Enable Filter Rectangle\n"));
+ if (screen->send_mouse_pos == DEC_LOCATOR) {
+ MotionOff(screen, term);
+ if ((screen->loc_filter_top = param[0]) < 1)
+@@ -2382,7 +2385,7 @@
+ screen->loc_filter_right = LOC_FILTER_POS;
+ InitLocatorFilter(term);
+ }
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_DECELR:
+@@ -2405,7 +2408,7 @@
+ }
+ screen->loc_filter = FALSE;
+ }
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_DECSLE:
+@@ -2432,7 +2435,7 @@
+ break;
+ }
+ }
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_DECRQLP:
+@@ -2441,106 +2444,182 @@
+ /* Issue DECLRP Locator Position Report */
+ GetLocatorPosition(term);
+ }
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+ #endif /* OPT_DEC_LOCATOR */
+
++#if OPT_DEC_RECTOPS
++ case CASE_CSI_DOLLAR_STATE:
++ /* csi dollar ($) */
++ if (screen->vtXX_level >= 4)
++ sp->parsestate = csi_dollar_table;
++ else
++ sp->parsestate = eigtable;
++ break;
++
++ case CASE_CSI_STAR_STATE:
++ /* csi dollar (*) */
++ if (screen->vtXX_level >= 4)
++ sp->parsestate = csi_star_table;
++ else
++ sp->parsestate = eigtable;
++ break;
++
++ case CASE_DECCRA:
++ TRACE(("CASE_DECCRA - Copy rectangular area\n"));
++ xtermParseRect(screen, nparam, param, &myRect);
++ ScrnCopyRectangle(screen, &myRect, nparam - 5, param + 5);
++ break;
++
++ case CASE_DECERA:
++ TRACE(("CASE_DECERA - Erase rectangular area\n"));
++ xtermParseRect(screen, nparam, param, &myRect);
++ ScrnFillRectangle(screen, &myRect, ' ', 0);
++ break;
++
++ case CASE_DECFRA:
++ TRACE(("CASE_DECFRA - Fill rectangular area\n"));
++ if (nparam > 0
++ && ((param[0] >= 32 && param[0] <= 126)
++ || (param[0] >= 160 && param[0] <= 255))) {
++ xtermParseRect(screen, nparam - 1, param + 1, &myRect);
++ ScrnFillRectangle(screen, &myRect, param[0], term->flags);
++ }
++ break;
++
++ case CASE_DECSERA:
++ TRACE(("CASE_DECSERA - Selective erase rectangular area\n"));
++ xtermParseRect(screen, nparam > 4 ? 4 : nparam, param, &myRect);
++ ScrnWipeRectangle(screen, &myRect);
++ break;
++
++ case CASE_DECSACE:
++ TRACE(("CASE_DECSACE - Select attribute change extent\n"));
++ screen->cur_decsace = param[0];
++ break;
++
++ case CASE_DECCARA:
++ TRACE(("CASE_DECCARA - Change attributes in rectangular area\n"));
++ xtermParseRect(screen, nparam > 4 ? 4 : nparam, param, &myRect);
++ ScrnMarkRectangle(screen, &myRect, False, nparam - 4, param + 4);
++ break;
++
++ case CASE_DECRARA:
++ TRACE(("CASE_DECRARA - Reverse attributes in rectangular area\n"));
++ xtermParseRect(screen, nparam > 4 ? 4 : nparam, param, &myRect);
++ ScrnMarkRectangle(screen, &myRect, True, nparam - 4, param + 4);
++ break;
++#else
++ case CASE_CSI_DOLLAR_STATE:
++ /* csi dollar ($) */
++ sp->parsestate = eigtable;
++ break;
++
++ case CASE_CSI_STAR_STATE:
++ /* csi dollar (*) */
++ sp->parsestate = eigtable;
++ break;
++#endif /* OPT_DEC_RECTOPS */
++
+ case CASE_S7C1T:
++ TRACE(("CASE_S7C1T\n"));
+ show_8bit_control(False);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_S8C1T:
++ TRACE(("CASE_S8C1T\n"));
+ #if OPT_VT52_MODE
+ if (screen->vtXX_level <= 1)
+ break;
+ #endif
+ show_8bit_control(True);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_OSC:
+- TRACE(("begin OSC: Operating System Command\n"));
+- parsestate = sos_table;
+- string_mode = OSC;
++ TRACE(("CASE_OSC: Operating System Command\n"));
++ sp->parsestate = sos_table;
++ sp->string_mode = OSC;
+ break;
+
+ case CASE_RIS:
+- /* RIS */
++ TRACE(("CASE_RIS\n"));
+ VTReset(TRUE, TRUE);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_DECSTR:
+- /* DECSTR */
++ TRACE(("CASE_DECSTR\n"));
+ VTReset(FALSE, FALSE);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_REP:
+- /* REP */
+- if (lastchar >= 0 &&
+- groundtable[E2A(lastchar)] == CASE_PRINT) {
++ TRACE(("CASE_REP\n"));
++ if (sp->lastchar >= 0 &&
++ sp->groundtable[E2A(sp->lastchar)] == CASE_PRINT) {
+ IChar repeated[2];
+ count = (param[0] < 1) ? 1 : param[0];
+- repeated[0] = lastchar;
++ repeated[0] = sp->lastchar;
+ while (count-- > 0) {
+ dotext(screen,
+ screen->gsets[(int) (screen->curgl)],
+ repeated, 1);
+ }
+ }
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_LS2:
+- /* LS2 */
++ TRACE(("CASE_LS2\n"));
+ screen->curgl = 2;
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_LS3:
+- /* LS3 */
++ TRACE(("CASE_LS3\n"));
+ screen->curgl = 3;
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_LS3R:
+- /* LS3R */
++ TRACE(("CASE_LS3R\n"));
+ screen->curgr = 3;
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_LS2R:
+- /* LS2R */
++ TRACE(("CASE_LS2R\n"));
+ screen->curgr = 2;
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_LS1R:
+- /* LS1R */
++ TRACE(("CASE_LS1R\n"));
+ screen->curgr = 1;
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_XTERM_SAVE:
+ savemodes(term);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_XTERM_RESTORE:
+ restoremodes(term);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+
+ case CASE_XTERM_WINOPS:
++ TRACE(("CASE_XTERM_WINOPS\n"));
+ if (screen->allowWindowOps)
+ window_ops(term);
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+ #if OPT_WIDE_CHARS
+ case CASE_ESC_PERCENT:
+- parsestate = esc_pct_table;
++ sp->parsestate = esc_pct_table;
+ break;
+
+ case CASE_UTF8:
+@@ -2564,16 +2643,39 @@
+ ? "UTF-8 mode set from command-line"
+ : "wideChars resource was not set"));
+ }
+- parsestate = groundtable;
++ sp->parsestate = sp->groundtable;
+ break;
+ #endif
+
+ case CASE_CSI_IGNORE:
+- parsestate = cigtable;
++ sp->parsestate = cigtable;
+ break;
+ }
+- if (parsestate == groundtable)
+- lastchar = thischar;
++ if (sp->parsestate == sp->groundtable)
++ sp->lastchar = thischar;
++ } while (0);
++}
++
++static void
++VTparse(void)
++{
++ TScreen *screen;
++
++ /* We longjmp back to this point in VTReset() */
++ (void) setjmp(vtjmpbuf);
++ screen = &term->screen;
++ memset(&myState, 0, sizeof(myState));
++#if OPT_VT52_MODE
++ myState.groundtable = screen->vtXX_level ? ansi_table : vt52_table;
++#else
++ myState.groundtable = ansi_table;
++#endif
++ myState.parsestate = myState.groundtable;
++ myState.lastchar = -1; /* not a legal IChar */
++ myState.nextstate = -1; /* not a legal state */
++
++ for (;;) {
++ doparsing(doinput(), &myState);
+ }
+ }
+
+@@ -3050,9 +3152,12 @@
+ });
+
+ #if OPT_WIDE_CHARS
+- for (offset = 0; offset < len && chars_chomped > 0; offset += chars_chomped) {
++ for (offset = 0;
++ offset < len && (chars_chomped > 0 || screen->do_wrap);
++ offset += chars_chomped) {
+ int width_available = screen->max_col - screen->cur_col + 1;
+- int width_here = 0, need_wrap = 0;
++ int width_here = 0;
++ int need_wrap = 0;
+ chars_chomped = 0;
+
+ if (screen->do_wrap && (term->flags & WRAPAROUND)) {
+@@ -3082,13 +3187,9 @@
+ else
+ width_here -= my_wcwidth(buf[chars_chomped + offset]);
+ need_wrap = 1;
+- }
+-
+- if (width_here == width_available) {
++ } else if (width_here == width_available) {
+ need_wrap = 1;
+- }
+-
+- if (chars_chomped != (len - offset)) {
++ } else if (chars_chomped != (len - offset)) {
+ need_wrap = 1;
+ }
+
+@@ -3100,7 +3201,7 @@
+ * rewriting all of the memory-management for the screen
+ * buffers (perhaps this is simpler).
+ */
+- {
++ if (chars_chomped != 0) {
+ static unsigned limit;
+ static Char *hibyte, *lobyte;
+ Boolean both = False;
+@@ -3221,6 +3322,11 @@
+ curXtermChrSet(screen->cur_row),
+ len, visibleChars(PAIRED_CHARS(str, str2), len)));
+
++ if (ScrnHaveSelection(screen)
++ && ScrnIsLineInSelection(screen, screen->cur_row - screen->topline)) {
++ ScrnDisownSelection(screen);
++ }
++
+ if (screen->cur_row - screen->topline <= screen->max_row) {
+ if (screen->cursor_state)
+ HideCursor();
+@@ -3239,7 +3345,7 @@
+ memset(str, ' ', len);
+ if_OPT_WIDE_CHARS(screen, {
+ if (str2 != 0)
+- memset(str2, ' ', len);
++ memset(str2, 0, len);
+ });
+ }
+
+@@ -3257,19 +3363,9 @@
+ PAIRED_CHARS(str, str2), len, 0);
+
+ resetXtermGC(screen, flags, False);
+-
+- /*
+- * The following statements compile data to compute the
+- * average number of characters written on each call to
+- * XText. The data may be examined via the use of a
+- * "hidden" escape sequence.
+- */
+-#ifdef UNUSED
+- ctotal += len;
+- ++ntotal;
+-#endif
+ }
+ }
++
+ ScreenWrite(screen, PAIRED_CHARS(str, str2), flags, fg_bg, len);
+ CursorForward(screen, visual_width(PAIRED_CHARS(str, str2), len));
+ #if OPT_ZICONBEEP
+@@ -3347,16 +3443,12 @@
+ TRACE(("HandleStructNotify(ConfigureNotify)\n"));
+ #if OPT_TOOLBAR
+ if (term->screen.Vshow) {
+-#ifndef NO_ACTIVE_ICON
+- struct _vtwin *Vwin = term->screen.whichVwin;
+-#else
+- struct _vtwin *Vwin = &(term->screen.fullVwin);
+-#endif
+- if (Vwin->menu_bar) {
+- XtVaGetValues(Vwin->menu_bar,
+- XtNheight, &Vwin->menu_height,
++ struct _vtwin *Vwin = WhichVWin(&(term->screen));
++ if (Vwin->tb_info.menu_bar) {
++ XtVaGetValues(Vwin->tb_info.menu_bar,
++ XtNheight, &Vwin->tb_info.menu_height,
+ (XtPointer) 0);
+- TRACE(("...menu_height %d\n", Vwin->menu_height));
++ TRACE(("...menu_height %d\n", Vwin->tb_info.menu_height));
+ }
+ }
+ #endif
+@@ -3517,6 +3609,11 @@
+ MotionOff(screen, termw);
+ set_mousemode(X10_MOUSE);
+ break;
++#if OPT_TOOLBAR
++ case 10: /* rxvt */
++ ShowToolbar(func == bitset);
++ break;
++#endif
+ #if OPT_BLINK_CURS
+ case 12: /* att610: Start/stop blinking cursor */
+ if (screen->cursor_blink_res) {
+@@ -3738,6 +3835,7 @@
+ register int i;
+
+ for (i = 0; i < nparam; i++) {
++ TRACE(("savemodes %d\n", param[i]));
+ switch (param[i]) {
+ case 1: /* DECCKM */
+ DoSM(DP_DECCKM, termw->keyboard.flags & MODE_DECCKM);
+@@ -3765,6 +3863,11 @@
+ case SET_X10_MOUSE: /* mouse bogus sequence */
+ DoSM(DP_X_X10MSE, screen->send_mouse_pos);
+ break;
++#if OPT_TOOLBAR
++ case 10: /* rxvt */
++ DoSM(DP_TOOLBAR, screen->toolbars);
++ break;
++#endif
+ #if OPT_BLINK_CURS
+ case 12: /* att610: Start/stop blinking cursor */
+ if (screen->cursor_blink_res) {
+@@ -3848,6 +3951,7 @@
+ register int i, j;
+
+ for (i = 0; i < nparam; i++) {
++ TRACE(("restoremodes %d\n", param[i]));
+ switch (param[i]) {
+ case 1: /* DECCKM */
+ bitcpy(&termw->keyboard.flags,
+@@ -3899,6 +4003,12 @@
+ case SET_X10_MOUSE: /* MIT bogus sequence */
+ DoRM(DP_X_X10MSE, screen->send_mouse_pos);
+ break;
++#if OPT_TOOLBAR
++ case 10: /* rxvt */
++ DoRM(DP_TOOLBAR, screen->toolbars);
++ ShowToolbar(screen->toolbars);
++ break;
++#endif
+ #if OPT_BLINK_CURS
+ case 12: /* att610: Start/stop blinking cursor */
+ if (screen->cursor_blink_res) {
+@@ -4045,6 +4155,7 @@
+ unsigned root_width;
+ unsigned root_height;
+
++ TRACE(("window_ops %d\n", param[0]));
+ switch (param[0]) {
+ case 1: /* Restore (de-iconify) window */
+ XMapWindow(screen->display,
+@@ -4244,17 +4355,18 @@
+ || c == APC
+ || c == SS3) {
+ if (ap->a_pintro != 0)
+- unparseputc((char) ap->a_pintro, fd);
++ unparseputc(ap->a_pintro, fd);
+ for (i = 0; i < ap->a_nparam; ++i) {
+ if (i != 0)
+ unparseputc(';', fd);
+ unparseputn((unsigned int) ap->a_param[i], fd);
+ }
+- inters = ap->a_inters;
+- for (i = 3; i >= 0; --i) {
+- c = CharOf(inters >> (8 * i));
+- if (c != 0)
+- unparseputc(c, fd);
++ if ((inters = ap->a_inters) != 0) {
++ for (i = 3; i >= 0; --i) {
++ c = CharOf(inters >> (8 * i));
++ if (c != 0)
++ unparseputc(c, fd);
++ }
+ }
+ unparseputc((char) ap->a_final, fd);
+ }
+@@ -4274,9 +4386,8 @@
+ void
+ unparseputc(int c, int fd)
+ {
+- register TScreen *screen = &term->screen;
+ IChar buf[2];
+- register int i = 1;
++ int i = 1;
+
+ #if OPT_TCAP_QUERY
+ /*
+@@ -4285,7 +4396,7 @@
+ * printable ASCII (counting tab, carriage return, etc). For now,
+ * just use hexadecimal for the whole thing.
+ */
+- if (screen->tc_query >= 0) {
++ if (term->screen.tc_query >= 0) {
+ char tmp[3];
+ sprintf(tmp, "%02X", c & 0xFF);
+ buf[0] = tmp[0];
+@@ -4305,7 +4416,7 @@
+
+ /* If send/receive mode is reset, we echo characters locally */
+ if ((term->keyboard.flags & MODE_SRM) == 0) {
+- dotext(screen, screen->gsets[(int) (screen->curgl)], buf, i);
++ doparsing(c, &myState);
+ }
+ }
+
+@@ -4362,7 +4473,6 @@
+
+ rows = screen->max_row + 1;
+ SwitchBufPtrs(screen);
+- TrackText(0, 0, 0, 0); /* remove any highlighting */
+
+ if ((top = -screen->topline) < rows) {
+ if (screen->scroll_amt)
+@@ -4378,7 +4488,7 @@
+ (unsigned) (rows - top) * FontHeight(screen),
+ FALSE);
+ }
+- ScrnRefresh(screen, 0, 0, rows, screen->max_col + 1, False);
++ ScrnUpdate(screen, 0, 0, rows, screen->max_col + 1, False);
+ }
+
+ /* swap buffer line pointers between alt and regular screens */
+@@ -4650,10 +4760,19 @@
+ (XtConvertArgList) NULL, (Cardinal) 0);
+ }
+
++/*
++ * The whole wnew->screen struct is zeroed in VTInitialize. Use these macros
++ * where applicable for copying the pieces from the request widget into the
++ * new widget. We do not have to use them for wnew->misc, but the associated
++ * traces are very useful for debugging.
++ */
+ #if OPT_TRACE
+ #define init_Bres(name) \
+ TRACE(("init " #name " = %s\n", \
+ BtoS(wnew->name = request->name)))
++#define init_Dres(name) \
++ TRACE(("init " #name " = %lf\n", \
++ wnew->name = request->name))
+ #define init_Ires(name) \
+ TRACE(("init " #name " = %d\n", \
+ wnew->name = request->name))
+@@ -4666,6 +4785,7 @@
+ fill_Tres(wnew, request, offset)))
+ #else
+ #define init_Bres(name) wnew->name = request->name
++#define init_Dres(name) wnew->name = request->name
+ #define init_Ires(name) wnew->name = request->name
+ #define init_Sres(name) wnew->name = x_strtrim(request->name)
+ #define init_Tres(offset) fill_Tres(wnew, request, offset)
+@@ -4719,6 +4839,9 @@
+ {
+ char *locale;
+ Boolean is_utf8;
++#ifdef HAVE_LANGINFO_CODESET
++ char *encoding;
++#endif
+
+ TRACE(("VTInitialize_locale\n"));
+ TRACE(("... request screen.utf8_mode = %d\n", request->screen.utf8_mode));
+@@ -4728,12 +4851,15 @@
+ if ((locale = getenv("LANG")) == 0 || *locale == '\0')
+ locale = "";
+ #ifdef HAVE_LANGINFO_CODESET
+- is_utf8 = (strcmp(nl_langinfo(CODESET), "UTF-8") == 0);
++ encoding = nl_langinfo(CODESET);
++ is_utf8 = (strcmp(encoding, "UTF-8") == 0);
+ #else
+ is_utf8 = (strstr(locale, "UTF-8") != NULL);
+ #endif
+ TRACE(("... is_utf8 = %s\n", BtoS(is_utf8)));
+
++ request->screen.latin9_mode = 0;
++ request->screen.unicode_font = 0;
+ #if OPT_LUIT_PROG
+ request->misc.callfilter = 0;
+ request->misc.use_encoding = 0;
+@@ -4741,11 +4867,46 @@
+ TRACE(("... setup for luit:\n"));
+ TRACE(("... request misc.locale_str = \"%s\"\n", request->misc.locale_str));
+
+- if (x_strcasecmp(request->misc.locale_str, "TRUE") == 0 ||
+- x_strcasecmp(request->misc.locale_str, "ON") == 0 ||
+- x_strcasecmp(request->misc.locale_str, "YES") == 0 ||
+- x_strcasecmp(request->misc.locale_str, "AUTO") == 0 ||
+- strcmp(request->misc.locale_str, "1") == 0) {
++#if OPT_MINI_LUIT
++ if (x_strcasecmp(request->misc.locale_str, "CHECKFONT") == 0) {
++ int fl = (request->misc.default_font.f_n
++ ? strlen(request->misc.default_font.f_n)
++ : 0);
++ if (fl > 11
++ && x_strcasecmp(request->misc.default_font.f_n + fl - 11,
++ "-ISO10646-1") == 0) {
++ request->screen.unicode_font = 1;
++ /* unicode font, use TRUE */
++#ifdef HAVE_LANGINFO_CODESET
++ if (!strcmp(encoding, "ANSI_X3.4-1968")
++ || !strcmp(encoding, "ISO-8859-1")) {
++ if (request->screen.utf8_mode == 3)
++ request->screen.utf8_mode = 0;
++ } else if (!strcmp(encoding, "ISO-8859-15")) {
++ if (request->screen.utf8_mode == 3)
++ request->screen.utf8_mode = 0;
++ request->screen.latin9_mode = 1;
++ } else {
++ request->misc.callfilter = is_utf8 ? 0 : 1;
++ request->screen.utf8_mode = 2;
++ }
++#else
++ request->misc.callfilter = is_utf8 ? 0 : 1;
++ request->screen.utf8_mode = 2;
++#endif
++ } else {
++ /* other encoding, use FALSE */
++ if (request->screen.utf8_mode == 3) {
++ request->screen.utf8_mode = is_utf8 ? 2 : 0;
++ }
++ }
++ } else
++#endif /* OPT_MINI_LUIT */
++ if (x_strcasecmp(request->misc.locale_str, "TRUE") == 0 ||
++ x_strcasecmp(request->misc.locale_str, "ON") == 0 ||
++ x_strcasecmp(request->misc.locale_str, "YES") == 0 ||
++ x_strcasecmp(request->misc.locale_str, "AUTO") == 0 ||
++ strcmp(request->misc.locale_str, "1") == 0) {
+ /* when true ... fully obeying LC_CTYPE locale */
+ request->misc.callfilter = is_utf8 ? 0 : 1;
+ request->screen.utf8_mode = 2;
+@@ -4805,7 +4966,7 @@
+ VTInitialize(Widget wrequest,
+ Widget new_arg,
+ ArgList args GCC_UNUSED,
+- Cardinal * num_args GCC_UNUSED)
++ Cardinal *num_args GCC_UNUSED)
+ {
+ XtermWidget request = (XtermWidget) wrequest;
+ XtermWidget wnew = (XtermWidget) new_arg;
+@@ -4918,6 +5079,9 @@
+ init_Ires(screen.scrolllines);
+ init_Bres(screen.scrollttyoutput);
+ init_Bres(screen.scrollkey);
++#if OPT_TOOLBAR
++ init_Bres(screen.toolbars);
++#endif
+
+ init_Sres(screen.term_id);
+ for (s = request->screen.term_id; *s; s++) {
+@@ -4998,6 +5162,9 @@
+ init_Bres(screen.allowWindowOps);
+ #ifndef NO_ACTIVE_ICON
+ wnew->screen.fnt_icon = request->screen.fnt_icon;
++ init_Bres(misc.active_icon);
++ init_Ires(misc.icon_border_width);
++ wnew->misc.icon_border_pixel = request->misc.icon_border_pixel;
+ #endif /* NO_ACTIVE_ICON */
+ init_Bres(misc.titeInhibit);
+ init_Bres(misc.tiXtraScroll);
+@@ -5110,6 +5277,8 @@
+ || visInfoPtr->depth <= 1) {
+ TRACE(("disabling color since screen is monochrome\n"));
+ color_ok = False;
++ } else {
++ XFree(visInfoPtr);
+ }
+ }
+
+@@ -5167,7 +5336,7 @@
+ #endif
+
+ #if OPT_RENDERFONT
+- init_Ires(misc.face_size);
++ init_Dres(misc.face_size);
+ init_Sres(misc.face_name);
+ init_Sres(misc.face_wide_name);
+ init_Bres(misc.render_font);
+@@ -5195,6 +5364,17 @@
+ }
+ TRACE(("initialized UTF-8 mode to %d\n", wnew->screen.utf8_mode));
+
++#if OPT_MINI_LUIT
++ if (request->screen.latin9_mode) {
++ wnew->screen.latin9_mode = True;
++ }
++ if (request->screen.unicode_font) {
++ wnew->screen.unicode_font = True;
++ }
++ TRACE(("initialized Latin9 mode to %d\n", wnew->screen.latin9_mode));
++ TRACE(("initialized unicode_font to %d\n", wnew->screen.unicode_font));
++#endif
++
+ if (wnew->screen.wide_chars != False)
+ wnew->num_ptrs = (OFF_COM2H + 1);
+ #endif /* OPT_WIDE_CHARS */
+@@ -5227,8 +5407,8 @@
+
+ #if HANDLE_STRUCT_NOTIFY
+ #if OPT_TOOLBAR
+- wnew->screen.fullVwin.menu_bar = request->screen.fullVwin.menu_bar;
+- init_Ires(screen.fullVwin.menu_height);
++ wnew->VT100_TB_INFO(menu_bar) = request->VT100_TB_INFO(menu_bar);
++ init_Ires(VT100_TB_INFO(menu_height));
+ #else
+ /* Flag icon name with "***" on window output when iconified.
+ * Put in a handler that will tell us when we get Map/Unmap events.
+@@ -5451,10 +5631,11 @@
+ #ifndef NO_ACTIVE_ICON
+ if (term->misc.active_icon && screen->fnt_icon) {
+ int iconX = 0, iconY = 0;
+- Widget shell = XtParent(term);
++ Widget shell = SHELL_OF(term);
+ unsigned long mask;
+ XGCValues xgcv;
+
++ TRACE(("Initializing active-icon\n"));
+ XtVaGetValues(shell, XtNiconX, &iconX, XtNiconY, &iconY, (XtPointer) 0);
+ xtermComputeFontInfo(screen, &(screen->iconVwin), screen->fnt_icon, 0);
+
+@@ -5499,7 +5680,18 @@
+ screen->iconVwin.reverseGC =
+ screen->iconVwin.reverseboldGC =
+ XtGetGC(shell, mask, &xgcv);
++#if OPT_TOOLBAR
++ /*
++ * Toolbar is initialized before we get here. Enable the menu item
++ * and set it properly.
++ */
++ set_sensitivity(mw,
++ vtMenuEntries[vtMenu_activeicon].widget,
++ TRUE);
++ update_activeicon();
++#endif
+ } else {
++ TRACE(("Disabled active-icon\n"));
+ term->misc.active_icon = False;
+ }
+ #endif /* NO_ACTIVE_ICON */
+@@ -5586,7 +5778,6 @@
+ {
+ unsigned i, j;
+ char *p, *s, *t, *ns, *end, buf[32];
+- XIM xim = (XIM) NULL;
+ XIMStyles *xim_styles;
+ XIMStyle input_style = 0;
+ Boolean found;
+@@ -5613,7 +5804,7 @@
+
+ if (!term->misc.input_method || !*term->misc.input_method) {
+ if ((p = XSetLocaleModifiers("")) != NULL && *p)
+- xim = XOpenIM(XtDisplay(term), NULL, NULL, NULL);
++ term->screen.xim = XOpenIM(XtDisplay(term), NULL, NULL, NULL);
+ } else {
+ s = term->misc.input_method;
+ i = 5 + strlen(s);
+@@ -5636,7 +5827,10 @@
+ strncat(t, s, end - s);
+
+ if ((p = XSetLocaleModifiers(t)) != 0 && *p
+- && (xim = XOpenIM(XtDisplay(term), NULL, NULL, NULL)) != 0)
++ && (term->screen.xim = XOpenIM(XtDisplay(term),
++ NULL,
++ NULL,
++ NULL)) != 0)
+ break;
+
+ }
+@@ -5645,20 +5839,23 @@
+ MyStackFree(t, buf);
+ }
+
+- if (xim == NULL && (p = XSetLocaleModifiers("@im=none")) != NULL && *p)
+- xim = XOpenIM(XtDisplay(term), NULL, NULL, NULL);
++ if (term->screen.xim == NULL
++ && (p = XSetLocaleModifiers("@im=none")) != NULL
++ && *p) {
++ term->screen.xim = XOpenIM(XtDisplay(term), NULL, NULL, NULL);
++ }
+
+- if (!xim) {
++ if (!term->screen.xim) {
+ fprintf(stderr, "Failed to open input method\n");
+ return;
+ }
+ TRACE(("VTInitI18N opened input method\n"));
+
+- if (XGetIMValues(xim, XNQueryInputStyle, &xim_styles, NULL)
++ if (XGetIMValues(term->screen.xim, XNQueryInputStyle, &xim_styles, NULL)
+ || !xim_styles
+ || !xim_styles->count_styles) {
+ fprintf(stderr, "input method doesn't support any style\n");
+- XCloseIM(xim);
++ XCloseIM(term->screen.xim);
+ term->misc.cannot_im = True;
+ return;
+ }
+@@ -5702,7 +5899,7 @@
+ fprintf(stderr,
+ "input method doesn't support my preedit type (%s)\n",
+ term->misc.preedit_type);
+- XCloseIM(xim);
++ XCloseIM(term->screen.xim);
+ term->misc.cannot_im = True;
+ return;
+ }
+@@ -5714,7 +5911,7 @@
+ if (input_style == (XIMPreeditArea | XIMStatusArea)) {
+ fprintf(stderr,
+ "This program doesn't support the 'OffTheSpot' preedit type\n");
+- XCloseIM(xim);
++ XCloseIM(term->screen.xim);
+ term->misc.cannot_im = True;
+ return;
+ }
+@@ -5753,7 +5950,7 @@
+ if (term->screen.fs == NULL) {
+ fprintf(stderr, "Preparation of default font set "
+ "\"%s\" for XIM failed.\n", DEFXIMFONT);
+- XCloseIM(xim);
++ XCloseIM(term->screen.xim);
+ term->misc.cannot_im = True;
+ return;
+ }
+@@ -5767,14 +5964,14 @@
+ XNSpotLocation, &spot,
+ XNFontSet, term->screen.fs,
+ NULL);
+- term->screen.xic = XCreateIC(xim,
++ term->screen.xic = XCreateIC(term->screen.xim,
+ XNInputStyle, input_style,
+ XNClientWindow, XtWindow(term),
+ XNFocusWindow, XtWindow(term),
+ XNPreeditAttributes, p_list,
+ NULL);
+ } else {
+- term->screen.xic = XCreateIC(xim, XNInputStyle, input_style,
++ term->screen.xic = XCreateIC(term->screen.xim, XNInputStyle, input_style,
+ XNClientWindow, XtWindow(term),
+ XNFocusWindow, XtWindow(term),
+ NULL);
+@@ -5782,7 +5979,7 @@
+
+ if (!term->screen.xic) {
+ fprintf(stderr, "Failed to create input context\n");
+- XCloseIM(xim);
++ XCloseIM(term->screen.xim);
+ }
+ #if defined(USE_XIM_INSTANTIATE_CB)
+ else {
+@@ -5790,7 +5987,7 @@
+
+ destroy_cb.callback = xim_destroy_cb;
+ destroy_cb.client_data = NULL;
+- if (XSetIMValues(xim, XNDestroyCallback, &destroy_cb, NULL))
++ if (XSetIMValues(term->screen.xim, XNDestroyCallback, &destroy_cb, NULL))
+ fprintf(stderr, "Could not set destroy callback to IM\n");
+ }
+ #endif
+@@ -5820,7 +6017,7 @@
+ Widget request GCC_UNUSED,
+ Widget wnew,
+ ArgList args GCC_UNUSED,
+- Cardinal * num_args GCC_UNUSED)
++ Cardinal *num_args GCC_UNUSED)
+ {
+ XtermWidget curvt = (XtermWidget) cur;
+ XtermWidget newvt = (XtermWidget) wnew;
+@@ -5875,6 +6072,14 @@
+
+ #define setGC(value) set_at = __LINE__, currentGC = value
+
++#define OutsideSelection(screen,row,col) \
++ ((row) > (screen)->endHRow || \
++ ((row) == (screen)->endHRow && \
++ (col) >= (screen)->endHCol) || \
++ (row) < (screen)->startHRow || \
++ ((row) == (screen)->startHRow && \
++ (col) < (screen)->startHCol))
++
+ /*
+ * Shows cursor at new cursor position in screen.
+ */
+@@ -5962,6 +6167,20 @@
+ }
+
+ /*
++ * If the cursor happens to be on blanks, and the foreground color is set
++ * but not the background, do not treat it as a colored cell.
++ */
++#if OPT_ISO_COLORS
++ if ((flags & TERM_COLOR_FLAGS) == BG_COLOR
++#if OPT_WIDE_CHARS
++ && chi == 0
++#endif
++ && clo == ' ') {
++ flags &= ~TERM_COLOR_FLAGS;
++ }
++#endif
++
++ /*
+ * Compare the current cell to the last set of colors used for the
+ * cursor and update the GC's if needed.
+ */
+@@ -5975,12 +6194,7 @@
+ fg_pix = getXtermForeground(flags, extract_fg(fg_bg, flags));
+ bg_pix = getXtermBackground(flags, extract_bg(fg_bg, flags));
+
+- if (screen->cur_row > screen->endHRow ||
+- (screen->cur_row == screen->endHRow &&
+- screen->cur_col >= screen->endHCol) ||
+- screen->cur_row < screen->startHRow ||
+- (screen->cur_row == screen->startHRow &&
+- screen->cur_col < screen->startHCol))
++ if (OutsideSelection(screen, screen->cur_row, screen->cur_col))
+ in_selection = False;
+ else
+ in_selection = True;
+@@ -6160,12 +6374,7 @@
+ fg_bg = SCRN_BUF_COLOR(screen, screen->cursor_row)[cursor_col];
+ });
+
+- if (screen->cursor_row > screen->endHRow ||
+- (screen->cursor_row == screen->endHRow &&
+- screen->cursor_col >= screen->endHCol) ||
+- screen->cursor_row < screen->startHRow ||
+- (screen->cursor_row == screen->startHRow &&
+- screen->cursor_col < screen->startHCol))
++ if (OutsideSelection(screen, screen->cursor_row, screen->cursor_col))
+ in_selection = False;
+ else
+ in_selection = True;
+@@ -6554,7 +6763,7 @@
+ HandleKeymapChange(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ static XtTranslations keymap, original;
+ static XtResource key_resources[] =
+@@ -6591,7 +6800,7 @@
+ (void) strcpy(pmapClass, pmapName);
+ if (islower(CharOf(pmapClass[0])))
+ pmapClass[0] = toupper(CharOf(pmapClass[0]));
+- XtGetSubresources(w, (XtPointer) & keymap, pmapName, pmapClass,
++ XtGetSubresources(w, (XtPointer) &keymap, pmapName, pmapClass,
+ key_resources, (Cardinal) 1, NULL, (Cardinal) 0);
+ if (keymap != NULL)
+ XtOverrideTranslations(w, keymap);
+@@ -6605,7 +6814,7 @@
+ HandleBell(Widget w GCC_UNUSED,
+ XEvent * event GCC_UNUSED,
+ String * params, /* [0] = volume */
+- Cardinal * param_count) /* 0 or 1 */
++ Cardinal *param_count) /* 0 or 1 */
+ {
+ int percent = (*param_count) ? atoi(params[0]) : 0;
+
+@@ -6617,7 +6826,7 @@
+ HandleVisualBell(Widget w GCC_UNUSED,
+ XEvent * event GCC_UNUSED,
+ String * params GCC_UNUSED,
+- Cardinal * param_count GCC_UNUSED)
++ Cardinal *param_count GCC_UNUSED)
+ {
+ VisualBell();
+ }
+@@ -6627,7 +6836,7 @@
+ HandleIgnore(Widget w,
+ XEvent * event,
+ String * params GCC_UNUSED,
+- Cardinal * param_count GCC_UNUSED)
++ Cardinal *param_count GCC_UNUSED)
+ {
+ /* do nothing, but check for funny escape sequences */
+ (void) SendMousePosition(w, event);
+Index: xc/programs/xterm/configure
+diff -u xc/programs/xterm/configure:1.3 xc/programs/xterm/configure:1.3.2.1
+--- xc/programs/xterm/configure:1.3 Fri Aug 20 18:46:39 2004
++++ xc/programs/xterm/configure Wed Jan 12 21:45:09 2005
+@@ -235,11 +235,12 @@
+ --disable-tek4014 disable tek4014 emulation
+ --enable-toolbar compile-in toolbar for pulldown menus
+ --disable-vt52 disable VT52 emulation
++ --enable-mini-luit enable mini-luit (built-in Latin9 support)
+ --enable-luit enable luit filter (Unicode translation)
+ --enable-wide-chars enable wide-character support
+- --enable-dabbrev enable dynamic-abbreviation support
+ EOF
+ cat <<\EOF
++ --enable-dabbrev enable dynamic-abbreviation support
+ --enable-dec-locator enable DECterm Locator support
+ --disable-ziconbeep disable -ziconbeep option
+ Testing/development Options:
+@@ -614,7 +615,7 @@
+ fi
+
+ echo $ac_n "checking host system type""... $ac_c" 1>&6
+-echo "configure:618: checking host system type" >&5
++echo "configure:619: checking host system type" >&5
+
+ host_alias=$host
+ case "$host_alias" in
+@@ -675,7 +676,7 @@
+ # Extract the first word of "gcc", so it can be a program name with args.
+ set dummy gcc; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:679: checking for $ac_word" >&5
++echo "configure:680: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -705,7 +706,7 @@
+ # Extract the first word of "cc", so it can be a program name with args.
+ set dummy cc; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:709: checking for $ac_word" >&5
++echo "configure:710: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -756,7 +757,7 @@
+ # Extract the first word of "cl", so it can be a program name with args.
+ set dummy cl; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:760: checking for $ac_word" >&5
++echo "configure:761: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -788,7 +789,7 @@
+ fi
+
+ echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
+-echo "configure:792: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
++echo "configure:793: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+
+ ac_ext=c
+ # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+@@ -799,12 +800,12 @@
+
+ cat > conftest.$ac_ext << EOF
+
+-#line 803 "configure"
++#line 804 "configure"
+ #include "confdefs.h"
+
+ main(){return(0);}
+ EOF
+-if { (eval echo configure:808: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:809: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ ac_cv_prog_cc_works=yes
+ # If we can't run a trivial program, we are probably using a cross compiler.
+ if (./conftest; exit) 2>/dev/null; then
+@@ -830,12 +831,12 @@
+ { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
+ fi
+ echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
+-echo "configure:834: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
++echo "configure:835: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+ echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
+ cross_compiling=$ac_cv_prog_cc_cross
+
+ echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
+-echo "configure:839: checking whether we are using GNU C" >&5
++echo "configure:840: checking whether we are using GNU C" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -844,7 +845,7 @@
+ yes;
+ #endif
+ EOF
+-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:848: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
++if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:849: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+ ac_cv_prog_gcc=yes
+ else
+ ac_cv_prog_gcc=no
+@@ -863,7 +864,7 @@
+ ac_save_CFLAGS="$CFLAGS"
+ CFLAGS=
+ echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+-echo "configure:867: checking whether ${CC-cc} accepts -g" >&5
++echo "configure:868: checking whether ${CC-cc} accepts -g" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -895,7 +896,7 @@
+ fi
+
+ echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
+-echo "configure:899: checking how to run the C preprocessor" >&5
++echo "configure:900: checking how to run the C preprocessor" >&5
+ # On Suns, sometimes $CPP names a directory.
+ if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+@@ -910,13 +911,13 @@
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp.
+ cat > conftest.$ac_ext <<EOF
+-#line 914 "configure"
++#line 915 "configure"
+ #include "confdefs.h"
+ #include <assert.h>
+ Syntax Error
+ EOF
+ ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+-{ (eval echo configure:920: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++{ (eval echo configure:921: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+ if test -z "$ac_err"; then
+ :
+@@ -927,13 +928,13 @@
+ rm -rf conftest*
+ CPP="${CC-cc} -E -traditional-cpp"
+ cat > conftest.$ac_ext <<EOF
+-#line 931 "configure"
++#line 932 "configure"
+ #include "confdefs.h"
+ #include <assert.h>
+ Syntax Error
+ EOF
+ ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+-{ (eval echo configure:937: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++{ (eval echo configure:938: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+ if test -z "$ac_err"; then
+ :
+@@ -944,13 +945,13 @@
+ rm -rf conftest*
+ CPP="${CC-cc} -nologo -E"
+ cat > conftest.$ac_ext <<EOF
+-#line 948 "configure"
++#line 949 "configure"
+ #include "confdefs.h"
+ #include <assert.h>
+ Syntax Error
+ EOF
+ ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+-{ (eval echo configure:954: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++{ (eval echo configure:955: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+ if test -z "$ac_err"; then
+ :
+@@ -976,13 +977,13 @@
+
+ if test $ac_cv_prog_gcc = yes; then
+ echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6
+-echo "configure:980: checking whether ${CC-cc} needs -traditional" >&5
++echo "configure:981: checking whether ${CC-cc} needs -traditional" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_gcc_traditional'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ ac_pattern="Autoconf.*'x'"
+ cat > conftest.$ac_ext <<EOF
+-#line 986 "configure"
++#line 987 "configure"
+ #include "confdefs.h"
+ #include <sgtty.h>
+ Autoconf TIOCGETP
+@@ -1000,7 +1001,7 @@
+
+ if test $ac_cv_prog_gcc_traditional = no; then
+ cat > conftest.$ac_ext <<EOF
+-#line 1004 "configure"
++#line 1005 "configure"
+ #include "confdefs.h"
+ #include <termio.h>
+ Autoconf TCGETA
+@@ -1026,7 +1027,7 @@
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:1030: checking for $ac_word" >&5
++echo "configure:1031: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -1067,7 +1068,7 @@
+ # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+ # ./install, which can be erroneously created by make from ./install.sh.
+ echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+-echo "configure:1071: checking for a BSD compatible install" >&5
++echo "configure:1072: checking for a BSD compatible install" >&5
+ if test -z "$INSTALL"; then
+ if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+@@ -1138,12 +1139,46 @@
+ # sed with no file args requires a program.
+ test "$program_transform_name" = "" && program_transform_name="s,x,x,"
+
++for ac_prog in tdlint lint alint
++do
++# Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
++echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
++echo "configure:1148: checking for $ac_word" >&5
++if eval "test \"`echo '$''{'ac_cv_prog_LINT'+set}'`\" = set"; then
++ echo $ac_n "(cached) $ac_c" 1>&6
++else
++ if test -n "$LINT"; then
++ ac_cv_prog_LINT="$LINT" # Let the user override the test.
++else
++ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
++ ac_dummy="$PATH"
++ for ac_dir in $ac_dummy; do
++ test -z "$ac_dir" && ac_dir=.
++ if test -f $ac_dir/$ac_word; then
++ ac_cv_prog_LINT="$ac_prog"
++ break
++ fi
++ done
++ IFS="$ac_save_ifs"
++fi
++fi
++LINT="$ac_cv_prog_LINT"
++if test -n "$LINT"; then
++ echo "$ac_t""$LINT" 1>&6
++else
++ echo "$ac_t""no" 1>&6
++fi
++
++test -n "$LINT" && break
++done
++
+
+ ### checks for UNIX variants that set C preprocessor variables
+ echo $ac_n "checking for AIX""... $ac_c" 1>&6
+-echo "configure:1145: checking for AIX" >&5
++echo "configure:1180: checking for AIX" >&5
+ cat > conftest.$ac_ext <<EOF
+-#line 1147 "configure"
++#line 1182 "configure"
+ #include "confdefs.h"
+ #ifdef _AIX
+ yes
+@@ -1165,7 +1200,7 @@
+
+
+ echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6
+-echo "configure:1169: checking for POSIXized ISC" >&5
++echo "configure:1204: checking for POSIXized ISC" >&5
+ if test -d /etc/conf/kconfig.d &&
+ grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1
+ then
+@@ -1186,672 +1221,692 @@
+ fi
+
+
+-### checks for header files
+-for ac_hdr in \
+-ncurses/term.h \
+-stdlib.h \
+-termios.h \
+-unistd.h \
++### checks for compiler characteristics
+
+-do
+-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+-echo "configure:1200: checking for $ac_hdr" >&5
+-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
++echo $ac_n "checking for ${CC-cc} option to accept ANSI C""... $ac_c" 1>&6
++echo "configure:1228: checking for ${CC-cc} option to accept ANSI C" >&5
++if eval "test \"`echo '$''{'cf_cv_ansi_cc'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+- cat > conftest.$ac_ext <<EOF
+-#line 1205 "configure"
+-#include "confdefs.h"
+-#include <$ac_hdr>
+-EOF
+-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+-{ (eval echo configure:1210: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+-if test -z "$ac_err"; then
+- rm -rf conftest*
+- eval "ac_cv_header_$ac_safe=yes"
+-else
+- echo "$ac_err" >&5
+- echo "configure: failed program was:" >&5
+- cat conftest.$ac_ext >&5
+- rm -rf conftest*
+- eval "ac_cv_header_$ac_safe=no"
+-fi
+-rm -f conftest*
+-fi
+-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+- echo "$ac_t""yes" 1>&6
+- ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+- cat >> confdefs.h <<EOF
+-#define $ac_tr_hdr 1
+-EOF
+-
+-else
+- echo "$ac_t""no" 1>&6
+-fi
+-done
++
++cf_cv_ansi_cc=no
++cf_save_CFLAGS="$CFLAGS"
++cf_save_CPPFLAGS="$CPPFLAGS"
++# Don't try gcc -ansi; that turns off useful extensions and
++# breaks some systems' header files.
++# AIX -qlanglvl=ansi
++# Ultrix and OSF/1 -std1
++# HP-UX -Aa -D_HPUX_SOURCE
++# SVR4 -Xc
++# UnixWare 1.2 (cannot use -Xc, since ANSI/POSIX clashes)
++for cf_arg in "-DCC_HAS_PROTOS" \
++ "" \
++ -qlanglvl=ansi \
++ -std1 \
++ -Ae \
++ "-Aa -D_HPUX_SOURCE" \
++ -Xc
++do
++
++cf_fix_cppflags=no
++cf_new_cflags=
++cf_new_cppflags=
++cf_new_extra_cppflags=
+
+-echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
+-echo "configure:1237: checking whether time.h and sys/time.h may both be included" >&5
+-if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
+- echo $ac_n "(cached) $ac_c" 1>&6
+-else
+- cat > conftest.$ac_ext <<EOF
+-#line 1242 "configure"
+-#include "confdefs.h"
+-#include <sys/types.h>
+-#include <sys/time.h>
+-#include <time.h>
+-int main() {
+-struct tm *tp;
+-; return 0; }
+-EOF
+-if { (eval echo configure:1251: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+- rm -rf conftest*
+- ac_cv_header_time=yes
+-else
+- echo "configure: failed program was:" >&5
+- cat conftest.$ac_ext >&5
+- rm -rf conftest*
+- ac_cv_header_time=no
+-fi
+-rm -f conftest*
+-fi
++for cf_add_cflags in $cf_arg
++do
++case $cf_fix_cppflags in
++no)
++ case $cf_add_cflags in #(vi
++ -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
++ case $cf_add_cflags in
++ -D*)
++ cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+
+-echo "$ac_t""$ac_cv_header_time" 1>&6
+-if test $ac_cv_header_time = yes; then
+- cat >> confdefs.h <<\EOF
+-#define TIME_WITH_SYS_TIME 1
+-EOF
++ test "${cf_add_cflags}" != "${cf_tst_cflags}" \
++ && test -z "${cf_tst_cflags}" \
++ && cf_fix_cppflags=yes
+
+-fi
++ if test $cf_fix_cppflags = yes ; then
++ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
++ continue
++ elif test "${cf_tst_cflags}" = "\"'" ; then
++ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
++ continue
++ fi
++ ;;
++ esac
++ case "$CPPFLAGS" in
++ *$cf_add_cflags) #(vi
++ ;;
++ *) #(vi
++ cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
++ ;;
++ esac
++ ;;
++ *)
++ cf_new_cflags="$cf_new_cflags $cf_add_cflags"
++ ;;
++ esac
++ ;;
++yes)
++ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+
++ cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+
+- echo $ac_n "checking for nl_langinfo and CODESET""... $ac_c" 1>&6
+-echo "configure:1273: checking for nl_langinfo and CODESET" >&5
+-if eval "test \"`echo '$''{'am_cv_langinfo_codeset'+set}'`\" = set"; then
+- echo $ac_n "(cached) $ac_c" 1>&6
+-else
+- cat > conftest.$ac_ext <<EOF
+-#line 1278 "configure"
+-#include "confdefs.h"
+-#include <langinfo.h>
+-int main() {
+-char* cs = nl_langinfo(CODESET);
+-; return 0; }
+-EOF
+-if { (eval echo configure:1285: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+- rm -rf conftest*
+- am_cv_langinfo_codeset=yes
+-else
+- echo "configure: failed program was:" >&5
+- cat conftest.$ac_ext >&5
+- rm -rf conftest*
+- am_cv_langinfo_codeset=no
++ test "${cf_add_cflags}" != "${cf_tst_cflags}" \
++ && test -z "${cf_tst_cflags}" \
++ && cf_fix_cppflags=no
++ ;;
++esac
++done
++
++if test -n "$cf_new_cflags" ; then
++
++ CFLAGS="$CFLAGS $cf_new_cflags"
+ fi
+-rm -f conftest*
+-
++
++if test -n "$cf_new_cppflags" ; then
++
++ CPPFLAGS="$cf_new_cppflags $CPPFLAGS"
+ fi
+
+-echo "$ac_t""$am_cv_langinfo_codeset" 1>&6
+- if test $am_cv_langinfo_codeset = yes; then
+- cat >> confdefs.h <<\EOF
+-#define HAVE_LANGINFO_CODESET 1
+-EOF
++if test -n "$cf_new_extra_cppflags" ; then
++
++ EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
++fi
+
+- fi
+
+
+-### checks for typedefs
+
+-echo $ac_n "checking for size_t in <sys/types.h> or <stdio.h>""... $ac_c" 1>&6
+-echo "configure:1310: checking for size_t in <sys/types.h> or <stdio.h>" >&5
+-if eval "test \"`echo '$''{'cf_cv_type_size_t'+set}'`\" = set"; then
+- echo $ac_n "(cached) $ac_c" 1>&6
+-else
+-
+ cat > conftest.$ac_ext <<EOF
+-#line 1316 "configure"
++#line 1324 "configure"
+ #include "confdefs.h"
+
+-#include <sys/types.h>
+-#ifdef STDC_HEADERS
+-#include <stdlib.h>
+-#include <stddef.h>
++#ifndef CC_HAS_PROTOS
++#if !defined(__STDC__) || (__STDC__ != 1)
++choke me
+ #endif
+-#include <stdio.h>
++#endif
++
+ int main() {
+-size_t x
++
++ int test (int i, double x);
++ struct s1 {int (*f) (int a);};
++ struct s2 {int (*f) (double a);};
+ ; return 0; }
+ EOF
+-if { (eval echo configure:1329: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:1340: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+- cf_cv_type_size_t=yes
++ cf_cv_ansi_cc="$cf_arg"; break
+ else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+- rm -rf conftest*
+- cf_cv_type_size_t=no
+ fi
+ rm -f conftest*
+-
++done
++CFLAGS="$cf_save_CFLAGS"
++CPPFLAGS="$cf_save_CPPFLAGS"
++
+ fi
+
+-echo "$ac_t""$cf_cv_type_size_t" 1>&6
+-test $cf_cv_type_size_t = no && cat >> confdefs.h <<\EOF
+-#define size_t unsigned
+-EOF
++echo "$ac_t""$cf_cv_ansi_cc" 1>&6
+
++if test "$cf_cv_ansi_cc" != "no"; then
++if test ".$cf_cv_ansi_cc" != ".-DCC_HAS_PROTOS"; then
++
++cf_fix_cppflags=no
++cf_new_cflags=
++cf_new_cppflags=
++cf_new_extra_cppflags=
+
+-echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
+-echo "configure:1349: checking for ANSI C header files" >&5
+-if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
+- echo $ac_n "(cached) $ac_c" 1>&6
+-else
+- cat > conftest.$ac_ext <<EOF
+-#line 1354 "configure"
+-#include "confdefs.h"
+-#include <stdlib.h>
+-#include <stdarg.h>
+-#include <string.h>
+-#include <float.h>
+-EOF
+-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+-{ (eval echo configure:1362: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+-if test -z "$ac_err"; then
+- rm -rf conftest*
+- ac_cv_header_stdc=yes
+-else
+- echo "$ac_err" >&5
+- echo "configure: failed program was:" >&5
+- cat conftest.$ac_ext >&5
+- rm -rf conftest*
+- ac_cv_header_stdc=no
++for cf_add_cflags in $cf_cv_ansi_cc
++do
++case $cf_fix_cppflags in
++no)
++ case $cf_add_cflags in #(vi
++ -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
++ case $cf_add_cflags in
++ -D*)
++ cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
++
++ test "${cf_add_cflags}" != "${cf_tst_cflags}" \
++ && test -z "${cf_tst_cflags}" \
++ && cf_fix_cppflags=yes
++
++ if test $cf_fix_cppflags = yes ; then
++ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
++ continue
++ elif test "${cf_tst_cflags}" = "\"'" ; then
++ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
++ continue
++ fi
++ ;;
++ esac
++ case "$CPPFLAGS" in
++ *$cf_add_cflags) #(vi
++ ;;
++ *) #(vi
++ cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
++ ;;
++ esac
++ ;;
++ *)
++ cf_new_cflags="$cf_new_cflags $cf_add_cflags"
++ ;;
++ esac
++ ;;
++yes)
++ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
++
++ cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
++
++ test "${cf_add_cflags}" != "${cf_tst_cflags}" \
++ && test -z "${cf_tst_cflags}" \
++ && cf_fix_cppflags=no
++ ;;
++esac
++done
++
++if test -n "$cf_new_cflags" ; then
++
++ CFLAGS="$CFLAGS $cf_new_cflags"
+ fi
+-rm -f conftest*
+
+-if test $ac_cv_header_stdc = yes; then
+- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+-cat > conftest.$ac_ext <<EOF
+-#line 1379 "configure"
+-#include "confdefs.h"
+-#include <string.h>
+-EOF
+-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+- egrep "memchr" >/dev/null 2>&1; then
+- :
+-else
+- rm -rf conftest*
+- ac_cv_header_stdc=no
++if test -n "$cf_new_cppflags" ; then
++
++ CPPFLAGS="$cf_new_cppflags $CPPFLAGS"
+ fi
+-rm -f conftest*
+
++if test -n "$cf_new_extra_cppflags" ; then
++
++ EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+ fi
+
+-if test $ac_cv_header_stdc = yes; then
+- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+-cat > conftest.$ac_ext <<EOF
+-#line 1397 "configure"
+-#include "confdefs.h"
+-#include <stdlib.h>
+-EOF
+-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+- egrep "free" >/dev/null 2>&1; then
+- :
++
++
++
+ else
+- rm -rf conftest*
+- ac_cv_header_stdc=no
+-fi
+-rm -f conftest*
++ cat >> confdefs.h <<\EOF
++#define CC_HAS_PROTOS 1
++EOF
+
+ fi
++fi
+
+-if test $ac_cv_header_stdc = yes; then
+- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+-if test "$cross_compiling" = yes; then
+- :
++echo $ac_n "checking for working const""... $ac_c" 1>&6
++echo "configure:1439: checking for working const" >&5
++if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
++ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 1418 "configure"
++#line 1444 "configure"
+ #include "confdefs.h"
+-#include <ctype.h>
+-#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+-#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+-int main () { int i; for (i = 0; i < 256; i++)
+-if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
+-exit (0); }
+
++int main() {
++
++/* Ultrix mips cc rejects this. */
++typedef int charset[2]; const charset x;
++/* SunOS 4.1.1 cc rejects this. */
++char const *const *ccp;
++char **p;
++/* NEC SVR4.0.2 mips cc rejects this. */
++struct point {int x, y;};
++static struct point const zero = {0,0};
++/* AIX XL C 1.02.0.0 rejects this.
++ It does not let you subtract one const X* pointer from another in an arm
++ of an if-expression whose if-part is not a constant expression */
++const char *g = "string";
++ccp = &g + (g ? g-g : 0);
++/* HPUX 7.0 cc rejects these. */
++++ccp;
++p = (char**) ccp;
++ccp = (char const *const *) p;
++{ /* SCO 3.2v4 cc rejects this. */
++ char *t;
++ char const *s = 0 ? (char *) 0 : (char const *) 0;
++
++ *t++ = 0;
++}
++{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
++ int x[] = {25, 17};
++ const int *foo = &x[0];
++ ++foo;
++}
++{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
++ typedef const int *iptr;
++ iptr p = 0;
++ ++p;
++}
++{ /* AIX XL C 1.02.0.0 rejects this saying
++ "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
++ struct s { int j; const int *ap[3]; };
++ struct s *b; b->j = 5;
++}
++{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
++ const int foo = 10;
++}
++
++; return 0; }
+ EOF
+-if { (eval echo configure:1429: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+-then
+- :
++if { (eval echo configure:1493: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++ rm -rf conftest*
++ ac_cv_c_const=yes
+ else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+- rm -fr conftest*
+- ac_cv_header_stdc=no
+-fi
+-rm -fr conftest*
+-fi
+-
++ rm -rf conftest*
++ ac_cv_c_const=no
+ fi
++rm -f conftest*
+ fi
+
+-echo "$ac_t""$ac_cv_header_stdc" 1>&6
+-if test $ac_cv_header_stdc = yes; then
++echo "$ac_t""$ac_cv_c_const" 1>&6
++if test $ac_cv_c_const = no; then
+ cat >> confdefs.h <<\EOF
+-#define STDC_HEADERS 1
++#define const
+ EOF
+
+ fi
+
+-echo $ac_n "checking for time_t""... $ac_c" 1>&6
+-echo "configure:1453: checking for time_t" >&5
+-if eval "test \"`echo '$''{'ac_cv_type_time_t'+set}'`\" = set"; then
++echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
++echo "configure:1514: checking for Cygwin environment" >&5
++if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 1458 "configure"
++#line 1519 "configure"
+ #include "confdefs.h"
+-#include <sys/types.h>
+-#if STDC_HEADERS
+-#include <stdlib.h>
+-#include <stddef.h>
++
++int main() {
++
++#ifndef __CYGWIN__
++#define __CYGWIN__ __CYGWIN32__
+ #endif
++return __CYGWIN__;
++; return 0; }
+ EOF
+-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+- egrep "(^|[^a-zA-Z_0-9])time_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
++if { (eval echo configure:1530: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+- ac_cv_type_time_t=yes
++ ac_cv_cygwin=yes
+ else
++ echo "configure: failed program was:" >&5
++ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+- ac_cv_type_time_t=no
++ ac_cv_cygwin=no
+ fi
+ rm -f conftest*
+-
+-fi
+-echo "$ac_t""$ac_cv_type_time_t" 1>&6
+-if test $ac_cv_type_time_t = no; then
+- cat >> confdefs.h <<\EOF
+-#define time_t long
+-EOF
+-
++rm -f conftest*
+ fi
+
+-
+-### checks for library functions
+-for ac_func in \
+- bcopy \
+- gethostname \
+- getlogin \
+- memmove \
+- strerror \
+- strftime \
+- tcgetattr \
+- waitpid \
+-
+-do
+-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+-echo "configure:1499: checking for $ac_func" >&5
+-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
++echo "$ac_t""$ac_cv_cygwin" 1>&6
++CYGWIN=
++test "$ac_cv_cygwin" = yes && CYGWIN=yes
++echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
++echo "configure:1547: checking for mingw32 environment" >&5
++if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 1504 "configure"
++#line 1552 "configure"
+ #include "confdefs.h"
+-/* System header to define __stub macros and hopefully few prototypes,
+- which can conflict with char $ac_func(); below. */
+-#include <assert.h>
+-/* Override any gcc2 internal prototype to avoid an error. */
+-/* We use char because int might match the return type of a gcc2
+- builtin and then its argument prototype would still apply. */
+-char $ac_func();
+
+ int main() {
+-
+-/* The GNU C library defines this for functions which it implements
+- to always fail with ENOSYS. Some functions are actually named
+- something starting with __ and the normal name is an alias. */
+-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+-choke me
+-#else
+-$ac_func();
+-#endif
+-
++return __MINGW32__;
+ ; return 0; }
+ EOF
+-if { (eval echo configure:1527: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:1559: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+- eval "ac_cv_func_$ac_func=yes"
++ ac_cv_mingw32=yes
+ else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+- eval "ac_cv_func_$ac_func=no"
++ ac_cv_mingw32=no
+ fi
+ rm -f conftest*
++rm -f conftest*
+ fi
+
+-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+- echo "$ac_t""yes" 1>&6
+- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+- cat >> confdefs.h <<EOF
+-#define $ac_tr_func 1
+-EOF
+-
++echo "$ac_t""$ac_cv_mingw32" 1>&6
++MINGW32=
++test "$ac_cv_mingw32" = yes && MINGW32=yes
++
++
++case $cf_cv_system_name in
++os2*)
++ CFLAGS="$CFLAGS -Zmt"
++ CPPFLAGS="$CPPFLAGS -D__ST_MT_ERRNO__"
++ CXXFLAGS="$CXXFLAGS -Zmt"
++ # autoconf's macro sets -Zexe and suffix both, which conflict:w
++ LDFLAGS="$LDFLAGS -Zmt -Zcrtdll"
++ ac_cv_exeext=.exe
++ ;;
++esac
++
++
++
++echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
++echo "configure:1591: checking for executable suffix" >&5
++if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
++ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+- echo "$ac_t""no" 1>&6
++ if test "$CYGWIN" = yes || test "$MINGW32" = yes; then
++ ac_cv_exeext=.exe
++else
++ rm -f conftest*
++ echo 'int main () { return 0; }' > conftest.$ac_ext
++ ac_cv_exeext=
++ if { (eval echo configure:1601: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
++ for file in conftest.*; do
++ case $file in
++ *.c | *.o | *.obj) ;;
++ *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
++ esac
++ done
++ else
++ { echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; }
++ fi
++ rm -f conftest*
++ test x"${ac_cv_exeext}" = x && ac_cv_exeext=no
++fi
+ fi
+-done
+
++EXEEXT=""
++test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext}
++echo "$ac_t""${ac_cv_exeext}" 1>&6
++ac_exeext=$EXEEXT
+
+-echo $ac_n "checking for memmove""... $ac_c" 1>&6
+-echo "configure:1553: checking for memmove" >&5
+-if eval "test \"`echo '$''{'ac_cv_func_memmove'+set}'`\" = set"; then
++echo $ac_n "checking for object suffix""... $ac_c" 1>&6
++echo "configure:1622: checking for object suffix" >&5
++if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+- cat > conftest.$ac_ext <<EOF
+-#line 1558 "configure"
+-#include "confdefs.h"
+-/* System header to define __stub macros and hopefully few prototypes,
+- which can conflict with char memmove(); below. */
+-#include <assert.h>
+-/* Override any gcc2 internal prototype to avoid an error. */
+-/* We use char because int might match the return type of a gcc2
+- builtin and then its argument prototype would still apply. */
+-char memmove();
++ rm -f conftest*
++echo 'int i = 1;' > conftest.$ac_ext
++if { (eval echo configure:1628: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++ for ac_file in conftest.*; do
++ case $ac_file in
++ *.c) ;;
++ *) ac_cv_objext=`echo $ac_file | sed -e s/conftest.//` ;;
++ esac
++ done
++else
++ { echo "configure: error: installation or configuration problem; compiler does not work" 1>&2; exit 1; }
++fi
++rm -f conftest*
++fi
++
++echo "$ac_t""$ac_cv_objext" 1>&6
++OBJEXT=$ac_cv_objext
++ac_objext=$ac_cv_objext
+
++
++PROG_EXT="$EXEEXT"
++
++test -n "$PROG_EXT" && cat >> confdefs.h <<EOF
++#define PROG_EXT "$PROG_EXT"
++EOF
++
++
++
++
++cf_XOPEN_SOURCE=500
++cf_POSIX_C_SOURCE=199506L
++
++case $host_os in #(vi
++freebsd*) #(vi
++ # 5.x headers associate
++ # _XOPEN_SOURCE=600 with _POSIX_C_SOURCE=200112L
++ # _XOPEN_SOURCE=500 with _POSIX_C_SOURCE=199506L
++ cf_POSIX_C_SOURCE=200112L
++ cf_XOPEN_SOURCE=600
++ CPPFLAGS="$CPPFLAGS -D_BSD_TYPES -D__BSD_VISIBLE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
++ ;;
++hpux*) #(vi
++ CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE"
++ ;;
++irix[56].*) #(vi
++ CPPFLAGS="$CPPFLAGS -D_SGI_SOURCE"
++ ;;
++linux*|gnu*) #(vi
++
++echo $ac_n "checking if we must define _GNU_SOURCE""... $ac_c" 1>&6
++echo "configure:1676: checking if we must define _GNU_SOURCE" >&5
++if eval "test \"`echo '$''{'cf_cv_gnu_source'+set}'`\" = set"; then
++ echo $ac_n "(cached) $ac_c" 1>&6
++else
++
++cat > conftest.$ac_ext <<EOF
++#line 1682 "configure"
++#include "confdefs.h"
++#include <sys/types.h>
+ int main() {
+
+-/* The GNU C library defines this for functions which it implements
+- to always fail with ENOSYS. Some functions are actually named
+- something starting with __ and the normal name is an alias. */
+-#if defined (__stub_memmove) || defined (__stub___memmove)
+-choke me
+-#else
+-memmove();
++#ifndef _XOPEN_SOURCE
++make an error
+ #endif
++; return 0; }
++EOF
++if { (eval echo configure:1692: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++ rm -rf conftest*
++ cf_cv_gnu_source=no
++else
++ echo "configure: failed program was:" >&5
++ cat conftest.$ac_ext >&5
++ rm -rf conftest*
++ cf_save="$CPPFLAGS"
++ CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
++ cat > conftest.$ac_ext <<EOF
++#line 1702 "configure"
++#include "confdefs.h"
++#include <sys/types.h>
++int main() {
+
++#ifdef _XOPEN_SOURCE
++make an error
++#endif
+ ; return 0; }
+ EOF
+-if { (eval echo configure:1581: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:1712: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+- eval "ac_cv_func_memmove=yes"
++ cf_cv_gnu_source=no
+ else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+- eval "ac_cv_func_memmove=no"
++ cf_cv_gnu_source=yes
+ fi
+ rm -f conftest*
++ CPPFLAGS="$cf_save"
++
+ fi
++rm -f conftest*
+
+-if eval "test \"`echo '$ac_cv_func_'memmove`\" = yes"; then
+- echo "$ac_t""yes" 1>&6
+- :
+-else
+- echo "$ac_t""no" 1>&6
++fi
+
+-echo $ac_n "checking for bcopy""... $ac_c" 1>&6
+-echo "configure:1600: checking for bcopy" >&5
+-if eval "test \"`echo '$''{'ac_cv_func_bcopy'+set}'`\" = set"; then
++echo "$ac_t""$cf_cv_gnu_source" 1>&6
++test "$cf_cv_gnu_source" = yes && CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
++
++ ;;
++mirbsd*) #(vi
++ # setting _XOPEN_SOURCE or _POSIX_SOURCE breaks <arpa/inet.h>
++ ;;
++netbsd*) #(vi
++ # setting _XOPEN_SOURCE breaks IPv6 for lynx on NetBSD 1.6, breaks xterm, is not needed for ncursesw
++ ;;
++openbsd*) #(vi
++ # setting _XOPEN_SOURCE breaks xterm on OpenBSD 2.8, is not needed for ncursesw
++ ;;
++osf[45]*) #(vi
++ CPPFLAGS="$CPPFLAGS -D_OSF_SOURCE"
++ ;;
++sco*) #(vi
++ # setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer
++ ;;
++solaris*) #(vi
++ CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
++ ;;
++*)
++ echo $ac_n "checking if we should define _XOPEN_SOURCE""... $ac_c" 1>&6
++echo "configure:1753: checking if we should define _XOPEN_SOURCE" >&5
++if eval "test \"`echo '$''{'cf_cv_xopen_source'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+- cat > conftest.$ac_ext <<EOF
+-#line 1605 "configure"
++
++ cat > conftest.$ac_ext <<EOF
++#line 1759 "configure"
+ #include "confdefs.h"
+-/* System header to define __stub macros and hopefully few prototypes,
+- which can conflict with char bcopy(); below. */
+-#include <assert.h>
+-/* Override any gcc2 internal prototype to avoid an error. */
+-/* We use char because int might match the return type of a gcc2
+- builtin and then its argument prototype would still apply. */
+-char bcopy();
+-
++#include <sys/types.h>
+ int main() {
+
+-/* The GNU C library defines this for functions which it implements
+- to always fail with ENOSYS. Some functions are actually named
+- something starting with __ and the normal name is an alias. */
+-#if defined (__stub_bcopy) || defined (__stub___bcopy)
+-choke me
+-#else
+-bcopy();
++#ifndef _XOPEN_SOURCE
++make an error
+ #endif
++; return 0; }
++EOF
++if { (eval echo configure:1769: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++ rm -rf conftest*
++ cf_cv_xopen_source=no
++else
++ echo "configure: failed program was:" >&5
++ cat conftest.$ac_ext >&5
++ rm -rf conftest*
++ cf_save="$CPPFLAGS"
++ CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
++ cat > conftest.$ac_ext <<EOF
++#line 1779 "configure"
++#include "confdefs.h"
++#include <sys/types.h>
++int main() {
+
++#ifdef _XOPEN_SOURCE
++make an error
++#endif
+ ; return 0; }
+ EOF
+-if { (eval echo configure:1628: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:1789: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+- eval "ac_cv_func_bcopy=yes"
++ cf_cv_xopen_source=no
+ else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+- eval "ac_cv_func_bcopy=no"
++ cf_cv_xopen_source=$cf_XOPEN_SOURCE
+ fi
+ rm -f conftest*
++ CPPFLAGS="$cf_save"
++
+ fi
++rm -f conftest*
+
+-if eval "test \"`echo '$ac_cv_func_'bcopy`\" = yes"; then
+- echo "$ac_t""yes" 1>&6
+-
+- echo $ac_n "checking if bcopy does overlapping moves""... $ac_c" 1>&6
+-echo "configure:1644: checking if bcopy does overlapping moves" >&5
+-if eval "test \"`echo '$''{'cf_cv_good_bcopy'+set}'`\" = set"; then
++fi
++
++echo "$ac_t""$cf_cv_xopen_source" 1>&6
++test "$cf_cv_xopen_source" != no && CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_cv_xopen_source"
++
++cf_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE
++echo $ac_n "checking if we should define _POSIX_C_SOURCE""... $ac_c" 1>&6
++echo "configure:1811: checking if we should define _POSIX_C_SOURCE" >&5
++if eval "test \"`echo '$''{'cf_cv_posix_c_source'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+
+- if test "$cross_compiling" = yes; then
+- cf_cv_good_bcopy=unknown
+-else
+- cat > conftest.$ac_ext <<EOF
+-#line 1653 "configure"
++
++echo "(line 1817) testing if the symbol is already defined go no further ..." 1>&5
++
++ cat > conftest.$ac_ext <<EOF
++#line 1820 "configure"
+ #include "confdefs.h"
++#include <sys/types.h>
++int main() {
++
++#ifndef _POSIX_C_SOURCE
++make an error
++#endif
++; return 0; }
++EOF
++if { (eval echo configure:1830: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++ rm -rf conftest*
++ cf_cv_posix_c_source=no
++else
++ echo "configure: failed program was:" >&5
++ cat conftest.$ac_ext >&5
++ rm -rf conftest*
++ case .$cf_POSIX_C_SOURCE in
++ .[12]??*)
++ cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
++ ;;
++ .2)
++ cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE -D_POSIX_SOURCE"
++ ;;
++ .*)
++ cf_cv_posix_c_source="-D_POSIX_SOURCE"
++ ;;
++ esac
++
++echo "(line 1849) testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5
++
++ cf_save="$CPPFLAGS"
++ CPPFLAGS="$CPPFLAGS $cf_cv_posix_c_source"
++
++echo "(line 1854) testing if the second compile does not leave our definition intact error ..." 1>&5
+
++ cat > conftest.$ac_ext <<EOF
++#line 1857 "configure"
++#include "confdefs.h"
++#include <sys/types.h>
+ int main() {
+- static char data[] = "abcdefghijklmnopqrstuwwxyz";
+- char temp[40];
+- bcopy(data, temp, sizeof(data));
+- bcopy(temp+10, temp, 15);
+- bcopy(temp+5, temp+15, 10);
+- exit (strcmp(temp, "klmnopqrstuwwxypqrstuwwxyz"));
+-}
+-
++
++#ifndef _POSIX_C_SOURCE
++make an error
++#endif
++; return 0; }
+ EOF
+-if { (eval echo configure:1666: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+-then
+- cf_cv_good_bcopy=yes
++if { (eval echo configure:1867: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++ :
+ else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+- rm -fr conftest*
+- cf_cv_good_bcopy=no
++ rm -rf conftest*
++ cf_cv_posix_c_source=no
+ fi
+-rm -fr conftest*
++rm -f conftest*
++ CPPFLAGS="$cf_save"
++
+ fi
++rm -f conftest*
+
+-
+ fi
+
+-echo "$ac_t""$cf_cv_good_bcopy" 1>&6
+-
+-else
+- echo "$ac_t""no" 1>&6
+-cf_cv_good_bcopy=no
+-fi
+-
+- if test "$cf_cv_good_bcopy" = yes ; then
+- cat >> confdefs.h <<\EOF
+-#define USE_OK_BCOPY 1
+-EOF
+-
+- else
+- cat >> confdefs.h <<\EOF
+-#define USE_MY_MEMMOVE 1
+-EOF
+-
+- fi
+-
+-fi
+-
+-
+-# compute a reasonable value for $TERM to give tgetent(), since we may be
+-# running in 'screen', which sets $TERMCAP to a specific entry that is not
+-# necessarily in /etc/termcap - unsetenv is not portable, so we cannot simply
+-# discard $TERMCAP.
+-cf_TERMVAR=vt100
+-test -n "$TERMCAP" && cf_TERMVAR="$TERM"
+-test -z "$cf_TERMVAR" && cf_TERMVAR=vt100
+-
+-echo $ac_n "checking for full tgetent function""... $ac_c" 1>&6
+-echo "configure:1712: checking for full tgetent function" >&5
+-if eval "test \"`echo '$''{'cf_cv_lib_tgetent'+set}'`\" = set"; then
+- echo $ac_n "(cached) $ac_c" 1>&6
+-else
+-
+-cf_save_LIBS="$LIBS"
+-cf_cv_lib_tgetent=no
+-cf_TERMLIB="termcap termlib ncurses curses"
+-for cf_termlib in '' $cf_TERMLIB ; do
+- LIBS="$cf_save_LIBS"
+- test -n "$cf_termlib" && LIBS="$LIBS -l$cf_termlib"
+- if test "$cross_compiling" = yes; then
+- echo "cross-compiling, cannot verify if a termcap/tgetent is present in $cf_termlib" 1>&5
+-else
+- cat > conftest.$ac_ext <<EOF
+-#line 1727 "configure"
+-#include "confdefs.h"
+-
+-/* terminfo implementations ignore the buffer argument, making it useless for
+- * the xterm application, which uses this information to make a new TERMCAP
+- * environment variable.
+- */
+-int main()
+-{
+- char buffer[1024];
+- buffer[0] = 0;
+- tgetent(buffer, "$cf_TERMVAR");
+- exit(buffer[0] == 0); }
+-EOF
+-if { (eval echo configure:1741: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+-then
+- echo "yes, there is a termcap/tgetent in $cf_termlib" 1>&5
+- if test -n "$cf_termlib" ; then
+- cf_cv_lib_tgetent="-l$cf_termlib"
+- else
+- cf_cv_lib_tgetent=yes
+- fi
+- break
+-else
+- echo "configure: failed program was:" >&5
+- cat conftest.$ac_ext >&5
+- rm -fr conftest*
+- echo "no, there is no termcap/tgetent in $cf_termlib" 1>&5
+-fi
+-rm -fr conftest*
+-fi
+-
+-done
+-LIBS="$cf_save_LIBS"
+-
+-fi
+-
+-echo "$ac_t""$cf_cv_lib_tgetent" 1>&6
+-
+-# If we found a working tgetent(), set LIBS and check for termcap.h.
+-# (LIBS cannot be set inside AC_CACHE_CHECK; the commands there should
+-# not have side effects other than setting the cache variable, because
+-# they are not executed when a cached value exists.)
+-if test "$cf_cv_lib_tgetent" != no ; then
+- test "$cf_cv_lib_tgetent" != yes && LIBS="$LIBS $cf_cv_lib_tgetent"
+- cat >> confdefs.h <<\EOF
+-#define USE_TERMCAP 1
+-EOF
+-
+- cat > conftest.$ac_ext <<EOF
+-#line 1777 "configure"
+-#include "confdefs.h"
+-
+-#include <termcap.h>
+-int main() {
+-
+-#ifdef NCURSES_VERSION
+-make an error
+-#endif
+-; return 0; }
+-EOF
+-if { (eval echo configure:1788: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+- rm -rf conftest*
+- cat >> confdefs.h <<\EOF
+-#define HAVE_TERMCAP_H 1
+-EOF
++echo "$ac_t""$cf_cv_posix_c_source" 1>&6
++test "$cf_cv_posix_c_source" != no && CPPFLAGS="$CPPFLAGS $cf_cv_posix_c_source"
+
+-else
+- echo "configure: failed program was:" >&5
+- cat conftest.$ac_ext >&5
+-fi
+-rm -f conftest*
+-else
+- # If we didn't find a tgetent() that supports the buffer
+- # argument, look again to see whether we can find even
+- # a crippled one. A crippled tgetent() is still useful to
+- # validate values for the TERM environment variable given to
+- # child processes.
+- echo $ac_n "checking for partial tgetent function""... $ac_c" 1>&6
+-echo "configure:1806: checking for partial tgetent function" >&5
+-if eval "test \"`echo '$''{'cf_cv_lib_part_tgetent'+set}'`\" = set"; then
+- echo $ac_n "(cached) $ac_c" 1>&6
+-else
+-
+- cf_cv_lib_part_tgetent=no
+- for cf_termlib in $cf_TERMLIB ; do
+- LIBS="$cf_save_LIBS -l$cf_termlib"
+- cat > conftest.$ac_ext <<EOF
+-#line 1815 "configure"
+-#include "confdefs.h"
++ ;;
++esac
+
+-int main() {
+-tgetent(0, "$cf_TERMVAR")
+-; return 0; }
+-EOF
+-if { (eval echo configure:1822: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+- rm -rf conftest*
+- echo "there is a terminfo/tgetent in $cf_termlib" 1>&5
+- cf_cv_lib_part_tgetent="-l$cf_termlib"
+- break
+-else
+- echo "configure: failed program was:" >&5
+- cat conftest.$ac_ext >&5
+-fi
+-rm -f conftest*
+- done
+- LIBS="$cf_save_LIBS"
+-
+-fi
+
+-echo "$ac_t""$cf_cv_lib_part_tgetent" 1>&6
++### checks for header files
++for ac_hdr in \
++ncurses/term.h \
++stdlib.h \
++termios.h \
++unistd.h \
+
+- if test "$cf_cv_lib_part_tgetent" != no ; then
+- LIBS="$LIBS $cf_cv_lib_part_tgetent"
+- for ac_hdr in termcap.h
+ do
+ ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+ echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+-echo "configure:1845: checking for $ac_hdr" >&5
++echo "configure:1900: checking for $ac_hdr" >&5
+ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 1850 "configure"
++#line 1905 "configure"
+ #include "confdefs.h"
+ #include <$ac_hdr>
+ EOF
+ ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+-{ (eval echo configure:1855: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++{ (eval echo configure:1910: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+ if test -z "$ac_err"; then
+ rm -rf conftest*
+@@ -1877,1188 +1932,1404 @@
+ fi
+ done
+
+-
+- # If this is linking against ncurses, we'll trigger the
+- # ifdef in resize.c that turns the termcap stuff back off.
+- cat >> confdefs.h <<\EOF
+-#define USE_TERMINFO 1
+-EOF
+-
+- fi
+-fi
+-
+-
+-for ac_hdr in lastlog.h paths.h
+-do
+-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+-echo "configure:1896: checking for $ac_hdr" >&5
+-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
++echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
++echo "configure:1937: checking whether time.h and sys/time.h may both be included" >&5
++if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 1901 "configure"
++#line 1942 "configure"
+ #include "confdefs.h"
+-#include <$ac_hdr>
++#include <sys/types.h>
++#include <sys/time.h>
++#include <time.h>
++int main() {
++struct tm *tp;
++; return 0; }
+ EOF
+-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+-{ (eval echo configure:1906: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+-if test -z "$ac_err"; then
++if { (eval echo configure:1951: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+- eval "ac_cv_header_$ac_safe=yes"
++ ac_cv_header_time=yes
+ else
+- echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+- eval "ac_cv_header_$ac_safe=no"
++ ac_cv_header_time=no
+ fi
+ rm -f conftest*
+ fi
+-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+- echo "$ac_t""yes" 1>&6
+- ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+- cat >> confdefs.h <<EOF
+-#define $ac_tr_hdr 1
++
++echo "$ac_t""$ac_cv_header_time" 1>&6
++if test $ac_cv_header_time = yes; then
++ cat >> confdefs.h <<\EOF
++#define TIME_WITH_SYS_TIME 1
+ EOF
+-
+-else
+- echo "$ac_t""no" 1>&6
++
+ fi
+-done
+
+-echo $ac_n "checking for lastlog path""... $ac_c" 1>&6
+-echo "configure:1933: checking for lastlog path" >&5
+-if eval "test \"`echo '$''{'cf_cv_path_lastlog'+set}'`\" = set"; then
++
++ echo $ac_n "checking for nl_langinfo and CODESET""... $ac_c" 1>&6
++echo "configure:1973: checking for nl_langinfo and CODESET" >&5
++if eval "test \"`echo '$''{'am_cv_langinfo_codeset'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+-
+-cat > conftest.$ac_ext <<EOF
+-#line 1939 "configure"
++ cat > conftest.$ac_ext <<EOF
++#line 1978 "configure"
+ #include "confdefs.h"
+-
+-#include <sys/types.h>
+-#ifdef HAVE_LASTLOG_H
+-#include <lastlog.h>
+-#else
+-#ifdef HAVE_PATHS_H
+-#include <paths.h>
+-#endif
+-#endif
++#include <langinfo.h>
+ int main() {
+-char *path = _PATH_LASTLOG
++char* cs = nl_langinfo(CODESET);
+ ; return 0; }
+ EOF
+-if { (eval echo configure:1954: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:1985: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+- cf_cv_path_lastlog="_PATH_LASTLOG"
++ am_cv_langinfo_codeset=yes
+ else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+- if test -f /usr/adm/lastlog ; then
+- cf_cv_path_lastlog=/usr/adm/lastlog
+- else
+- cf_cv_path_lastlog=no
+- fi
++ am_cv_langinfo_codeset=no
+ fi
+ rm -f conftest*
+-
++
+ fi
+
+-echo "$ac_t""$cf_cv_path_lastlog" 1>&6
+-test $cf_cv_path_lastlog != no && cat >> confdefs.h <<\EOF
+-#define USE_LASTLOG 1
++echo "$ac_t""$am_cv_langinfo_codeset" 1>&6
++ if test $am_cv_langinfo_codeset = yes; then
++ cat >> confdefs.h <<\EOF
++#define HAVE_LANGINFO_CODESET 1
+ EOF
+
++ fi
+
+
++### checks for typedefs
+
+-
+-echo $ac_n "checking for utmp implementation""... $ac_c" 1>&6
+-echo "configure:1981: checking for utmp implementation" >&5
+-if eval "test \"`echo '$''{'cf_cv_have_utmp'+set}'`\" = set"; then
++echo $ac_n "checking for size_t in <sys/types.h> or <stdio.h>""... $ac_c" 1>&6
++echo "configure:2010: checking for size_t in <sys/types.h> or <stdio.h>" >&5
++if eval "test \"`echo '$''{'cf_cv_type_size_t'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+
+- cf_cv_have_utmp=no
+-for cf_header in utmpx utmp ; do
+-cf_utmp_includes="
++ cat > conftest.$ac_ext <<EOF
++#line 2016 "configure"
++#include "confdefs.h"
++
+ #include <sys/types.h>
+-#include <${cf_header}.h>
+-#define getutent getutxent
+-#ifdef USE_LASTLOG
+-#include <lastlog.h> /* may conflict with utmpx.h on Linux */
++#ifdef STDC_HEADERS
++#include <stdlib.h>
++#include <stddef.h>
+ #endif
+-"
+- cat > conftest.$ac_ext <<EOF
+-#line 1997 "configure"
+-#include "confdefs.h"
+-$cf_utmp_includes
++#include <stdio.h>
+ int main() {
+-struct $cf_header x;
+- char *name = x.ut_name; /* utmp.h and compatible definitions */
+-
++size_t x
+ ; return 0; }
+ EOF
+-if { (eval echo configure:2006: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:2029: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+- cf_cv_have_utmp=$cf_header
+- break
++ cf_cv_type_size_t=yes
+ else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+-
+- cat > conftest.$ac_ext <<EOF
+-#line 2016 "configure"
+-#include "confdefs.h"
+-$cf_utmp_includes
+-int main() {
+-struct $cf_header x;
+- char *name = x.ut_user; /* utmpx.h must declare this */
++ cf_cv_type_size_t=no
++fi
++rm -f conftest*
+
+-; return 0; }
++fi
++
++echo "$ac_t""$cf_cv_type_size_t" 1>&6
++test $cf_cv_type_size_t = no && cat >> confdefs.h <<\EOF
++#define size_t unsigned
++EOF
++
++
++echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
++echo "configure:2049: checking for ANSI C header files" >&5
++if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
++ echo $ac_n "(cached) $ac_c" 1>&6
++else
++ cat > conftest.$ac_ext <<EOF
++#line 2054 "configure"
++#include "confdefs.h"
++#include <stdlib.h>
++#include <stdarg.h>
++#include <string.h>
++#include <float.h>
+ EOF
+-if { (eval echo configure:2025: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
++{ (eval echo configure:2062: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
++if test -z "$ac_err"; then
+ rm -rf conftest*
+- cf_cv_have_utmp=$cf_header
+- break
+-
++ ac_cv_header_stdc=yes
+ else
++ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
++ rm -rf conftest*
++ ac_cv_header_stdc=no
+ fi
+ rm -f conftest*
++
++if test $ac_cv_header_stdc = yes; then
++ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
++cat > conftest.$ac_ext <<EOF
++#line 2079 "configure"
++#include "confdefs.h"
++#include <string.h>
++EOF
++if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
++ egrep "memchr" >/dev/null 2>&1; then
++ :
++else
++ rm -rf conftest*
++ ac_cv_header_stdc=no
+ fi
+ rm -f conftest*
+-done
+
+ fi
+
+-echo "$ac_t""$cf_cv_have_utmp" 1>&6
+-
+-if test $cf_cv_have_utmp != no ; then
+- cat >> confdefs.h <<\EOF
+-#define HAVE_UTMP 1
++if test $ac_cv_header_stdc = yes; then
++ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
++cat > conftest.$ac_ext <<EOF
++#line 2097 "configure"
++#include "confdefs.h"
++#include <stdlib.h>
+ EOF
++if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
++ egrep "free" >/dev/null 2>&1; then
++ :
++else
++ rm -rf conftest*
++ ac_cv_header_stdc=no
++fi
++rm -f conftest*
+
+- test $cf_cv_have_utmp = utmpx && cat >> confdefs.h <<\EOF
+-#define UTMPX_FOR_UTMP 1
+-EOF
++fi
+
+-
+-if test $cf_cv_have_utmp != no ; then
+-echo $ac_n "checking if utmp.ut_host is declared""... $ac_c" 1>&6
+-echo "configure:2055: checking if utmp.ut_host is declared" >&5
+-if eval "test \"`echo '$''{'cf_cv_have_utmp_ut_host'+set}'`\" = set"; then
+- echo $ac_n "(cached) $ac_c" 1>&6
++if test $ac_cv_header_stdc = yes; then
++ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
++if test "$cross_compiling" = yes; then
++ :
+ else
+-
+- cat > conftest.$ac_ext <<EOF
+-#line 2061 "configure"
++ cat > conftest.$ac_ext <<EOF
++#line 2118 "configure"
+ #include "confdefs.h"
++#include <ctype.h>
++#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
++#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
++#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
++int main () { int i; for (i = 0; i < 256; i++)
++if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
++exit (0); }
+
+-#include <sys/types.h>
+-#include <${cf_cv_have_utmp}.h>
+-int main() {
+-struct $cf_cv_have_utmp x; char *y = &x.ut_host[0]
+-; return 0; }
+ EOF
+-if { (eval echo configure:2070: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+- rm -rf conftest*
+- cf_cv_have_utmp_ut_host=yes
++if { (eval echo configure:2129: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
++then
++ :
+ else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+- rm -rf conftest*
+- cf_cv_have_utmp_ut_host=no
++ rm -fr conftest*
++ ac_cv_header_stdc=no
+ fi
+-rm -f conftest*
+-
++rm -fr conftest*
+ fi
+
+-echo "$ac_t""$cf_cv_have_utmp_ut_host" 1>&6
+-test $cf_cv_have_utmp_ut_host != no && cat >> confdefs.h <<\EOF
+-#define HAVE_UTMP_UT_HOST 1
++fi
++fi
++
++echo "$ac_t""$ac_cv_header_stdc" 1>&6
++if test $ac_cv_header_stdc = yes; then
++ cat >> confdefs.h <<\EOF
++#define STDC_HEADERS 1
+ EOF
+
+ fi
+
+-
+-if test $cf_cv_have_utmp != no ; then
+-echo $ac_n "checking if utmp.ut_name is declared""... $ac_c" 1>&6
+-echo "configure:2093: checking if utmp.ut_name is declared" >&5
+-if eval "test \"`echo '$''{'cf_cv_have_utmp_ut_name'+set}'`\" = set"; then
++echo $ac_n "checking for time_t""... $ac_c" 1>&6
++echo "configure:2153: checking for time_t" >&5
++if eval "test \"`echo '$''{'ac_cv_type_time_t'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+-
+- cf_cv_have_utmp_ut_name=no
+-cf_utmp_includes="
++ cat > conftest.$ac_ext <<EOF
++#line 2158 "configure"
++#include "confdefs.h"
+ #include <sys/types.h>
+-#include <${cf_cv_have_utmp}.h>
+-#define getutent getutxent
+-#ifdef USE_LASTLOG
+-#include <lastlog.h> /* may conflict with utmpx.h on Linux */
++#if STDC_HEADERS
++#include <stdlib.h>
++#include <stddef.h>
+ #endif
+-"
+-for cf_header in ut_name ut_user ; do
+- cat > conftest.$ac_ext <<EOF
+-#line 2109 "configure"
+-#include "confdefs.h"
+-$cf_utmp_includes
+-int main() {
+-struct $cf_cv_have_utmp x;
+- char *name = x.$cf_header;
+-
+-; return 0; }
+ EOF
+-if { (eval echo configure:2118: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
++ egrep "(^|[^a-zA-Z_0-9])time_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
+ rm -rf conftest*
+- cf_cv_have_utmp_ut_name=$cf_header
+- break
++ ac_cv_type_time_t=yes
+ else
+- echo "configure: failed program was:" >&5
+- cat conftest.$ac_ext >&5
++ rm -rf conftest*
++ ac_cv_type_time_t=no
+ fi
+ rm -f conftest*
+-done
+
+ fi
+-
+-echo "$ac_t""$cf_cv_have_utmp_ut_name" 1>&6
+-
+-case $cf_cv_have_utmp_ut_name in #(vi
+-no) #(vi
+- { echo "configure: error: Cannot find declaration for ut.ut_name" 1>&2; exit 1; }
+- ;;
+-ut_user)
+- cat >> confdefs.h <<\EOF
+-#define ut_name ut_user
++echo "$ac_t""$ac_cv_type_time_t" 1>&6
++if test $ac_cv_type_time_t = no; then
++ cat >> confdefs.h <<\EOF
++#define time_t long
+ EOF
+
+- ;;
+-esac
+ fi
+
++
++### checks for library functions
++for ac_func in \
++ bcopy \
++ gethostname \
++ getlogin \
++ memmove \
++ strerror \
++ strftime \
++ tcgetattr \
++ waitpid \
+
+-if test $cf_cv_have_utmp != no ; then
+-echo $ac_n "checking for exit-status in $cf_cv_have_utmp""... $ac_c" 1>&6
+-echo "configure:2149: checking for exit-status in $cf_cv_have_utmp" >&5
+-if eval "test \"`echo '$''{'cf_cv_have_utmp_ut_xstatus'+set}'`\" = set"; then
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:2199: checking for $ac_func" >&5
++if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+-
+-for cf_result in \
+- ut_exit.__e_exit \
+- ut_exit.e_exit \
+- ut_exit.ut_e_exit \
+- ut_exit.ut_exit
+-do
+-cat > conftest.$ac_ext <<EOF
+-#line 2161 "configure"
++ cat > conftest.$ac_ext <<EOF
++#line 2204 "configure"
+ #include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++ which can conflict with char $ac_func(); below. */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error. */
++/* We use char because int might match the return type of a gcc2
++ builtin and then its argument prototype would still apply. */
++char $ac_func();
+
+-#include <sys/types.h>
+-#include <${cf_cv_have_utmp}.h>
+ int main() {
+-struct $cf_cv_have_utmp x; long y = x.$cf_result = 0
++
++/* The GNU C library defines this for functions which it implements
++ to always fail with ENOSYS. Some functions are actually named
++ something starting with __ and the normal name is an alias. */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
+ ; return 0; }
+ EOF
+-if { (eval echo configure:2170: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:2227: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+- cf_cv_have_utmp_ut_xstatus=$cf_result
+- break
++ eval "ac_cv_func_$ac_func=yes"
+ else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+- cf_cv_have_utmp_ut_xstatus=no
++ eval "ac_cv_func_$ac_func=no"
+ fi
+ rm -f conftest*
+-done
+-
+ fi
+
+-echo "$ac_t""$cf_cv_have_utmp_ut_xstatus" 1>&6
+-if test $cf_cv_have_utmp_ut_xstatus != no ; then
+- cat >> confdefs.h <<\EOF
+-#define HAVE_UTMP_UT_XSTATUS 1
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++ echo "$ac_t""yes" 1>&6
++ ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++ cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
+ EOF
+-
+- cat >> confdefs.h <<EOF
+-#define ut_xstatus $cf_cv_have_utmp_ut_xstatus
+-EOF
+-
+-fi
++
++else
++ echo "$ac_t""no" 1>&6
+ fi
++done
+
+-
+-if test $cf_cv_have_utmp != no ; then
+-echo $ac_n "checking if utmp.ut_xtime is declared""... $ac_c" 1>&6
+-echo "configure:2201: checking if utmp.ut_xtime is declared" >&5
+-if eval "test \"`echo '$''{'cf_cv_have_utmp_ut_xtime'+set}'`\" = set"; then
+- echo $ac_n "(cached) $ac_c" 1>&6
+-else
+-
+- cat > conftest.$ac_ext <<EOF
+-#line 2207 "configure"
+-#include "confdefs.h"
+
+-#include <sys/types.h>
+-#include <${cf_cv_have_utmp}.h>
+-int main() {
+-struct $cf_cv_have_utmp x; long y = x.ut_xtime = 0
+-; return 0; }
+-EOF
+-if { (eval echo configure:2216: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+- rm -rf conftest*
+- cf_cv_have_utmp_ut_xtime=yes
++echo $ac_n "checking for memmove""... $ac_c" 1>&6
++echo "configure:2253: checking for memmove" >&5
++if eval "test \"`echo '$''{'ac_cv_func_memmove'+set}'`\" = set"; then
++ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+- echo "configure: failed program was:" >&5
+- cat conftest.$ac_ext >&5
+- rm -rf conftest*
+ cat > conftest.$ac_ext <<EOF
+-#line 2224 "configure"
++#line 2258 "configure"
+ #include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++ which can conflict with char memmove(); below. */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error. */
++/* We use char because int might match the return type of a gcc2
++ builtin and then its argument prototype would still apply. */
++char memmove();
+
+-#include <sys/types.h>
+-#include <${cf_cv_have_utmp}.h>
+ int main() {
+-struct $cf_cv_have_utmp x; long y = x.ut_tv.tv_sec
++
++/* The GNU C library defines this for functions which it implements
++ to always fail with ENOSYS. Some functions are actually named
++ something starting with __ and the normal name is an alias. */
++#if defined (__stub_memmove) || defined (__stub___memmove)
++choke me
++#else
++memmove();
++#endif
++
+ ; return 0; }
+ EOF
+-if { (eval echo configure:2233: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:2281: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+- cf_cv_have_utmp_ut_xtime=define
++ eval "ac_cv_func_memmove=yes"
+ else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+- cf_cv_have_utmp_ut_xtime=no
+-fi
+-rm -f conftest*
+-
++ eval "ac_cv_func_memmove=no"
+ fi
+ rm -f conftest*
+-
+ fi
+
+-echo "$ac_t""$cf_cv_have_utmp_ut_xtime" 1>&6
+-if test $cf_cv_have_utmp_ut_xtime != no ; then
+- cat >> confdefs.h <<\EOF
+-#define HAVE_UTMP_UT_XTIME 1
+-EOF
+-
+- if test $cf_cv_have_utmp_ut_xtime = define ; then
+- cat >> confdefs.h <<\EOF
+-#define ut_xtime ut_tv.tv_sec
+-EOF
+-
+- fi
+-fi
+-fi
++if eval "test \"`echo '$ac_cv_func_'memmove`\" = yes"; then
++ echo "$ac_t""yes" 1>&6
++ :
++else
++ echo "$ac_t""no" 1>&6
+
+-
+-if test $cf_cv_have_utmp != no ; then
+-echo $ac_n "checking if utmp.ut_session is declared""... $ac_c" 1>&6
+-echo "configure:2267: checking if utmp.ut_session is declared" >&5
+-if eval "test \"`echo '$''{'cf_cv_have_utmp_ut_session'+set}'`\" = set"; then
++echo $ac_n "checking for bcopy""... $ac_c" 1>&6
++echo "configure:2300: checking for bcopy" >&5
++if eval "test \"`echo '$''{'ac_cv_func_bcopy'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+-
+- cat > conftest.$ac_ext <<EOF
+-#line 2273 "configure"
++ cat > conftest.$ac_ext <<EOF
++#line 2305 "configure"
+ #include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++ which can conflict with char bcopy(); below. */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error. */
++/* We use char because int might match the return type of a gcc2
++ builtin and then its argument prototype would still apply. */
++char bcopy();
+
+-#include <sys/types.h>
+-#include <${cf_cv_have_utmp}.h>
+ int main() {
+-struct $cf_cv_have_utmp x; long y = x.ut_session
++
++/* The GNU C library defines this for functions which it implements
++ to always fail with ENOSYS. Some functions are actually named
++ something starting with __ and the normal name is an alias. */
++#if defined (__stub_bcopy) || defined (__stub___bcopy)
++choke me
++#else
++bcopy();
++#endif
++
+ ; return 0; }
+ EOF
+-if { (eval echo configure:2282: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:2328: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+- cf_cv_have_utmp_ut_session=yes
++ eval "ac_cv_func_bcopy=yes"
+ else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+- cf_cv_have_utmp_ut_session=no
++ eval "ac_cv_func_bcopy=no"
+ fi
+ rm -f conftest*
+-
+ fi
+
+-echo "$ac_t""$cf_cv_have_utmp_ut_session" 1>&6
+-if test $cf_cv_have_utmp_ut_session != no ; then
+- cat >> confdefs.h <<\EOF
+-#define HAVE_UTMP_UT_SESSION 1
+-EOF
+-
+-fi
+-fi
+-
+-
+-echo $ac_n "checking if $cf_cv_have_utmp is SYSV flavor""... $ac_c" 1>&6
+-echo "configure:2306: checking if $cf_cv_have_utmp is SYSV flavor" >&5
+-if eval "test \"`echo '$''{'cf_cv_sysv_utmp'+set}'`\" = set"; then
++if eval "test \"`echo '$ac_cv_func_'bcopy`\" = yes"; then
++ echo "$ac_t""yes" 1>&6
++
++ echo $ac_n "checking if bcopy does overlapping moves""... $ac_c" 1>&6
++echo "configure:2344: checking if bcopy does overlapping moves" >&5
++if eval "test \"`echo '$''{'cf_cv_good_bcopy'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+
+-test "$cf_cv_have_utmp" = "utmp" && cf_prefix="ut" || cf_prefix="utx"
+-cat > conftest.$ac_ext <<EOF
+-#line 2313 "configure"
++ if test "$cross_compiling" = yes; then
++ cf_cv_good_bcopy=unknown
++else
++ cat > conftest.$ac_ext <<EOF
++#line 2353 "configure"
+ #include "confdefs.h"
+
+-#include <sys/types.h>
+-#include <${cf_cv_have_utmp}.h>
+ int main() {
+-
+-struct $cf_cv_have_utmp x;
+- set${cf_prefix}ent ();
+- get${cf_prefix}id(&x);
+- put${cf_prefix}line(&x);
+- end${cf_prefix}ent();
+-; return 0; }
++ static char data[] = "abcdefghijklmnopqrstuwwxyz";
++ char temp[40];
++ bcopy(data, temp, sizeof(data));
++ bcopy(temp+10, temp, 15);
++ bcopy(temp+5, temp+15, 10);
++ exit (strcmp(temp, "klmnopqrstuwwxypqrstuwwxyz"));
++}
++
+ EOF
+-if { (eval echo configure:2327: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+- rm -rf conftest*
+- cf_cv_sysv_utmp=yes
++if { (eval echo configure:2366: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
++then
++ cf_cv_good_bcopy=yes
+ else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+- rm -rf conftest*
+- cf_cv_sysv_utmp=no
++ rm -fr conftest*
++ cf_cv_good_bcopy=no
+ fi
+-rm -f conftest*
+-
++rm -fr conftest*
+ fi
+
+-echo "$ac_t""$cf_cv_sysv_utmp" 1>&6
+-test $cf_cv_sysv_utmp = yes && cat >> confdefs.h <<\EOF
+-#define USE_SYSV_UTMP 1
+-EOF
+-
++
++fi
+
++echo "$ac_t""$cf_cv_good_bcopy" 1>&6
++
++else
++ echo "$ac_t""no" 1>&6
++cf_cv_good_bcopy=no
+ fi
+
++ if test "$cf_cv_good_bcopy" = yes ; then
++ cat >> confdefs.h <<\EOF
++#define USE_OK_BCOPY 1
++EOF
++
++ else
++ cat >> confdefs.h <<\EOF
++#define USE_MY_MEMMOVE 1
++EOF
+
+-echo $ac_n "checking if you want to link with utempter""... $ac_c" 1>&6
+-echo "configure:2350: checking if you want to link with utempter" >&5
++ fi
+
+-# Check whether --with-utempter or --without-utempter was given.
+-if test "${with_utempter+set}" = set; then
+- withval="$with_utempter"
+- use_utempter=$withval
+-else
+- use_utempter=no
+ fi
+
+-echo "$ac_t""$use_utempter" 1>&6
+
+-if test "$use_utempter" = yes ; then
+-
+-echo $ac_n "checking if we can link with utempter library""... $ac_c" 1>&6
+-echo "configure:2365: checking if we can link with utempter library" >&5
+-if eval "test \"`echo '$''{'cf_cv_have_utempter'+set}'`\" = set"; then
++# compute a reasonable value for $TERM to give tgetent(), since we may be
++# running in 'screen', which sets $TERMCAP to a specific entry that is not
++# necessarily in /etc/termcap - unsetenv is not portable, so we cannot simply
++# discard $TERMCAP.
++cf_TERMVAR=vt100
++test -n "$TERMCAP" && cf_TERMVAR="$TERM"
++test -z "$cf_TERMVAR" && cf_TERMVAR=vt100
++
++echo $ac_n "checking for full tgetent function""... $ac_c" 1>&6
++echo "configure:2412: checking for full tgetent function" >&5
++if eval "test \"`echo '$''{'cf_cv_lib_tgetent'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+
+ cf_save_LIBS="$LIBS"
+-LIBS="-lutempter $LIBS"
+-cat > conftest.$ac_ext <<EOF
+-#line 2373 "configure"
++cf_cv_lib_tgetent=no
++cf_TERMLIB="termcap termlib ncurses curses"
++for cf_termlib in '' $cf_TERMLIB ; do
++ LIBS="$cf_save_LIBS"
++ test -n "$cf_termlib" && LIBS="$LIBS -l$cf_termlib"
++ if test "$cross_compiling" = yes; then
++ echo "cross-compiling, cannot verify if a termcap/tgetent is present in $cf_termlib" 1>&5
++else
++ cat > conftest.$ac_ext <<EOF
++#line 2427 "configure"
+ #include "confdefs.h"
+
+-#include <utempter.h>
+-
+-int main() {
+-
+- addToUtmp("/dev/tty", 0, 1);
+- removeFromUtmp();
+-
+-; return 0; }
++/* terminfo implementations ignore the buffer argument, making it useless for
++ * the xterm application, which uses this information to make a new TERMCAP
++ * environment variable.
++ */
++int main()
++{
++ char buffer[1024];
++ buffer[0] = 0;
++ tgetent(buffer, "$cf_TERMVAR");
++ exit(buffer[0] == 0); }
+ EOF
+-if { (eval echo configure:2385: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+- rm -rf conftest*
+-
+- cf_cv_have_utempter=yes
++if { (eval echo configure:2441: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
++then
++ echo "yes, there is a termcap/tgetent in $cf_termlib" 1>&5
++ if test -n "$cf_termlib" ; then
++ cf_cv_lib_tgetent="-l$cf_termlib"
++ else
++ cf_cv_lib_tgetent=yes
++ fi
++ break
+ else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+- rm -rf conftest*
+-
+- cf_cv_have_utempter=no
++ rm -fr conftest*
++ echo "no, there is no termcap/tgetent in $cf_termlib" 1>&5
+ fi
+-rm -f conftest*
+-LIBS="$cf_save_LIBS"
+-
++rm -fr conftest*
+ fi
+
+-echo "$ac_t""$cf_cv_have_utempter" 1>&6
+-if test "$cf_cv_have_utempter" = yes ; then
+- cat >> confdefs.h <<\EOF
+-#define USE_UTEMPTER 1
+-EOF
++done
++LIBS="$cf_save_LIBS"
+
+- LIBS="-lutempter $LIBS"
+ fi
+
+-fi
++echo "$ac_t""$cf_cv_lib_tgetent" 1>&6
+
+-### checks for external data
++# If we found a working tgetent(), set LIBS and check for termcap.h.
++# (LIBS cannot be set inside AC_CACHE_CHECK; the commands there should
++# not have side effects other than setting the cache variable, because
++# they are not executed when a cached value exists.)
++if test "$cf_cv_lib_tgetent" != no ; then
++ test "$cf_cv_lib_tgetent" != yes && LIBS="$LIBS $cf_cv_lib_tgetent"
++ cat >> confdefs.h <<\EOF
++#define USE_TERMCAP 1
++EOF
+
++ cat > conftest.$ac_ext <<EOF
++#line 2477 "configure"
++#include "confdefs.h"
+
+-echo $ac_n "checking if external errno is declared""... $ac_c" 1>&6
+-echo "configure:2416: checking if external errno is declared" >&5
+-if eval "test \"`echo '$''{'cf_cv_dcl_errno'+set}'`\" = set"; then
++#include <termcap.h>
++int main() {
++
++#ifdef NCURSES_VERSION
++make an error
++#endif
++; return 0; }
++EOF
++if { (eval echo configure:2488: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++ rm -rf conftest*
++ cat >> confdefs.h <<\EOF
++#define HAVE_TERMCAP_H 1
++EOF
++
++else
++ echo "configure: failed program was:" >&5
++ cat conftest.$ac_ext >&5
++fi
++rm -f conftest*
++else
++ # If we didn't find a tgetent() that supports the buffer
++ # argument, look again to see whether we can find even
++ # a crippled one. A crippled tgetent() is still useful to
++ # validate values for the TERM environment variable given to
++ # child processes.
++ echo $ac_n "checking for partial tgetent function""... $ac_c" 1>&6
++echo "configure:2506: checking for partial tgetent function" >&5
++if eval "test \"`echo '$''{'cf_cv_lib_part_tgetent'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+
+- cat > conftest.$ac_ext <<EOF
+-#line 2422 "configure"
++ cf_cv_lib_part_tgetent=no
++ for cf_termlib in $cf_TERMLIB ; do
++ LIBS="$cf_save_LIBS -l$cf_termlib"
++ cat > conftest.$ac_ext <<EOF
++#line 2515 "configure"
+ #include "confdefs.h"
+
+-#ifdef HAVE_STDLIB_H
+-#include <stdlib.h>
+-#endif
+-#include <stdio.h>
+-#include <sys/types.h>
+-#include <errno.h>
+ int main() {
+-long x = (long) errno
++tgetent(0, "$cf_TERMVAR")
+ ; return 0; }
+ EOF
+-if { (eval echo configure:2435: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:2522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+- cf_cv_dcl_errno=yes
++ echo "there is a terminfo/tgetent in $cf_termlib" 1>&5
++ cf_cv_lib_part_tgetent="-l$cf_termlib"
++ break
+ else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+- rm -rf conftest*
+- cf_cv_dcl_errno=no
+ fi
+ rm -f conftest*
+-
++ done
++ LIBS="$cf_save_LIBS"
++
+ fi
+
+-echo "$ac_t""$cf_cv_dcl_errno" 1>&6
++echo "$ac_t""$cf_cv_lib_part_tgetent" 1>&6
+
+-if test "$cf_cv_dcl_errno" = no ; then
+-
+-cf_result=`echo "decl_errno" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
++ if test "$cf_cv_lib_part_tgetent" != no ; then
++ LIBS="$LIBS $cf_cv_lib_part_tgetent"
++ for ac_hdr in termcap.h
++do
++ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
++echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
++echo "configure:2545: checking for $ac_hdr" >&5
++if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
++ echo $ac_n "(cached) $ac_c" 1>&6
++else
++ cat > conftest.$ac_ext <<EOF
++#line 2550 "configure"
++#include "confdefs.h"
++#include <$ac_hdr>
++EOF
++ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
++{ (eval echo configure:2555: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
++if test -z "$ac_err"; then
++ rm -rf conftest*
++ eval "ac_cv_header_$ac_safe=yes"
++else
++ echo "$ac_err" >&5
++ echo "configure: failed program was:" >&5
++ cat conftest.$ac_ext >&5
++ rm -rf conftest*
++ eval "ac_cv_header_$ac_safe=no"
++fi
++rm -f conftest*
++fi
++if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
++ echo "$ac_t""yes" 1>&6
++ ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
++ cat >> confdefs.h <<EOF
++#define $ac_tr_hdr 1
++EOF
++
++else
++ echo "$ac_t""no" 1>&6
++fi
++done
+
+- cat >> confdefs.h <<EOF
+-#define $cf_result 1
++
++ # If this is linking against ncurses, we'll trigger the
++ # ifdef in resize.c that turns the termcap stuff back off.
++ cat >> confdefs.h <<\EOF
++#define USE_TERMINFO 1
+ EOF
+
++ fi
+ fi
+
+-# It's possible (for near-UNIX clones) that the data doesn't exist
+
+-echo $ac_n "checking if external errno exists""... $ac_c" 1>&6
+-echo "configure:2463: checking if external errno exists" >&5
+-if eval "test \"`echo '$''{'cf_cv_have_errno'+set}'`\" = set"; then
++for ac_hdr in lastlog.h paths.h
++do
++ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
++echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
++echo "configure:2596: checking for $ac_hdr" >&5
++if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+-
+- cat > conftest.$ac_ext <<EOF
+-#line 2469 "configure"
++ cat > conftest.$ac_ext <<EOF
++#line 2601 "configure"
+ #include "confdefs.h"
+-
+-#undef errno
+-extern int errno;
+-
+-int main() {
+-errno = 2
+-; return 0; }
++#include <$ac_hdr>
+ EOF
+-if { (eval echo configure:2479: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
++{ (eval echo configure:2606: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
++if test -z "$ac_err"; then
+ rm -rf conftest*
+- cf_cv_have_errno=yes
++ eval "ac_cv_header_$ac_safe=yes"
+ else
++ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+- cf_cv_have_errno=no
++ eval "ac_cv_header_$ac_safe=no"
+ fi
+ rm -f conftest*
+-
+ fi
+-
+-echo "$ac_t""$cf_cv_have_errno" 1>&6
+-
+-if test "$cf_cv_have_errno" = yes ; then
+-
+-cf_result=`echo "have_errno" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+-
+- cat >> confdefs.h <<EOF
+-#define $cf_result 1
++if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
++ echo "$ac_t""yes" 1>&6
++ ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
++ cat >> confdefs.h <<EOF
++#define $ac_tr_hdr 1
+ EOF
+-
++
++else
++ echo "$ac_t""no" 1>&6
+ fi
++done
+
+-
+-
+-
+-
+-echo $ac_n "checking for tty group name""... $ac_c" 1>&6
+-echo "configure:2509: checking for tty group name" >&5
+-if eval "test \"`echo '$''{'cf_cv_tty_group_name'+set}'`\" = set"; then
++echo $ac_n "checking for lastlog path""... $ac_c" 1>&6
++echo "configure:2633: checking for lastlog path" >&5
++if eval "test \"`echo '$''{'cf_cv_path_lastlog'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+
++cat > conftest.$ac_ext <<EOF
++#line 2639 "configure"
++#include "confdefs.h"
+
+-# If we are configuring as root, it is hard to get a clue about the tty group.
+-# But we'll guess based on how our connection is set up - assuming it is done
+-# properly.
+-
+-cf_uid=`id | sed -e 's/^^=*=//' -e 's/(.*$//'`
+-if test "$cf_uid" != 0 ; then
+-cf_cv_tty_group_name=
+-cf_tty_name=`tty`
+-test "$cf_tty_name" = "not a tty" && cf_tty_name=/dev/tty
+-test -z "$cf_tty_name" && cf_tty_name=/dev/tty
+-if test -c "$cf_tty_name"
+-then
+- cf_option="-l -L"
+-
+- # Expect listing to have fields like this:
+- #-rwxrwxrwx 1 user group 34293 Jul 18 16:29 pathname
+- ls $cf_option $cf_tty_name >conftest.out
+- read cf_mode cf_links cf_usr cf_grp cf_size cf_date1 cf_date2 cf_date3 cf_rest <conftest.out
+- if test -z "$cf_rest" ; then
+- cf_option="$cf_option -g"
+- ls $cf_option $cf_tty_name >conftest.out
+- read cf_mode cf_links cf_usr cf_grp cf_size cf_date1 cf_date2 cf_date3 cf_rest <conftest.out
++#include <sys/types.h>
++#ifdef HAVE_LASTLOG_H
++#include <lastlog.h>
++#else
++#ifdef HAVE_PATHS_H
++#include <paths.h>
++#endif
++#endif
++int main() {
++char *path = _PATH_LASTLOG
++; return 0; }
++EOF
++if { (eval echo configure:2654: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++ rm -rf conftest*
++ cf_cv_path_lastlog="_PATH_LASTLOG"
++else
++ echo "configure: failed program was:" >&5
++ cat conftest.$ac_ext >&5
++ rm -rf conftest*
++ if test -f /usr/adm/lastlog ; then
++ cf_cv_path_lastlog=/usr/adm/lastlog
++ else
++ cf_cv_path_lastlog=no
+ fi
+- rm -f conftest.out
+- cf_cv_tty_group_name=$cf_grp
+-fi
+ fi
++rm -f conftest*
+
+-# If we cannot deduce the tty group, fall back on hardcoded cases
+-
+-if test -z "$cf_cv_tty_group_name"
+-then
+-case $host_os in #(vi
+-osf*) #(vi
+- cf_cv_tty_group_name="terminal"
+- ;;
+-*)
+- cf_cv_tty_group_name="unknown"
+- if ( egrep '^tty:' /etc/group 2>/dev/null 1>/dev/null ) then
+- cf_cv_tty_group_name="tty"
+- fi
+- ;;
+-esac
+ fi
+
+-fi
++echo "$ac_t""$cf_cv_path_lastlog" 1>&6
++test $cf_cv_path_lastlog != no && cat >> confdefs.h <<\EOF
++#define USE_LASTLOG 1
++EOF
+
+-echo "$ac_t""$cf_cv_tty_group_name" 1>&6
+
+-cat >> confdefs.h <<EOF
+-#define TTY_GROUP_NAME "$cf_cv_tty_group_name"
+-EOF
+
+
+-# This is only a double-check that the group-name we obtained above really
+-# does apply to the device. We cannot perform this test if we are in batch
+-# mode, or if we are cross-compiling.
+
+-echo $ac_n "checking if we may use $cf_cv_tty_group_name group""... $ac_c" 1>&6
+-echo "configure:2574: checking if we may use $cf_cv_tty_group_name group" >&5
+-if eval "test \"`echo '$''{'cf_cv_tty_group'+set}'`\" = set"; then
++echo $ac_n "checking for utmp implementation""... $ac_c" 1>&6
++echo "configure:2681: checking for utmp implementation" >&5
++if eval "test \"`echo '$''{'cf_cv_have_utmp'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+
+-cf_tty_name=`tty`
+-if test "$cf_tty_name" != "not a tty"
+-then
+-if test "$cross_compiling" = yes; then
+- cf_cv_tty_group=unknown
++ cf_cv_have_utmp=no
++for cf_header in utmpx utmp ; do
++cf_utmp_includes="
++#include <sys/types.h>
++#include <${cf_header}.h>
++#define getutent getutxent
++#ifdef USE_LASTLOG
++#include <lastlog.h> /* may conflict with utmpx.h on Linux */
++#endif
++"
++ cat > conftest.$ac_ext <<EOF
++#line 2697 "configure"
++#include "confdefs.h"
++$cf_utmp_includes
++int main() {
++struct $cf_header x;
++ char *name = x.ut_name; /* utmp.h and compatible definitions */
++
++; return 0; }
++EOF
++if { (eval echo configure:2706: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++ rm -rf conftest*
++ cf_cv_have_utmp=$cf_header
++ break
+ else
+- cat > conftest.$ac_ext <<EOF
+-#line 2586 "configure"
++ echo "configure: failed program was:" >&5
++ cat conftest.$ac_ext >&5
++ rm -rf conftest*
++
++ cat > conftest.$ac_ext <<EOF
++#line 2716 "configure"
+ #include "confdefs.h"
+-
+-#include <unistd.h>
+-#include <sys/types.h>
+-#include <sys/stat.h>
+-#include <grp.h>
+-int main()
+-{
+- struct stat sb;
+- struct group *ttygrp = getgrnam(TTY_GROUP_NAME);
+- char *name = ttyname(0);
+-
+- endgrent();
+- if (ttygrp != 0
+- && name != 0
+- && stat(name, &sb) == 0
+- && sb.st_gid != getgid()
+- && sb.st_gid == ttygrp->gr_gid) {
+- exit(0);
+- }
+- exit(1);
+-}
++$cf_utmp_includes
++int main() {
++struct $cf_header x;
++ char *name = x.ut_user; /* utmpx.h must declare this */
+
++; return 0; }
+ EOF
+-if { (eval echo configure:2611: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+-then
+- cf_cv_tty_group=yes
++if { (eval echo configure:2725: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++ rm -rf conftest*
++ cf_cv_have_utmp=$cf_header
++ break
++
+ else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+- rm -fr conftest*
+- cf_cv_tty_group=no
+ fi
+-rm -fr conftest*
++rm -f conftest*
+ fi
++rm -f conftest*
++done
+
+-elif test "$cross_compiling" = yes; then
+- cf_cv_tty_group=unknown
+-else
+- cf_cv_tty_group=yes
+ fi
+
+-fi
++echo "$ac_t""$cf_cv_have_utmp" 1>&6
+
+-echo "$ac_t""$cf_cv_tty_group" 1>&6
+-test $cf_cv_tty_group = yes && cat >> confdefs.h <<\EOF
+-#define USE_TTY_GROUP 1
++if test $cf_cv_have_utmp != no ; then
++ cat >> confdefs.h <<\EOF
++#define HAVE_UTMP 1
+ EOF
+
++ test $cf_cv_have_utmp = utmpx && cat >> confdefs.h <<\EOF
++#define UTMPX_FOR_UTMP 1
++EOF
+
++
++if test $cf_cv_have_utmp != no ; then
++echo $ac_n "checking if utmp.ut_host is declared""... $ac_c" 1>&6
++echo "configure:2755: checking if utmp.ut_host is declared" >&5
++if eval "test \"`echo '$''{'cf_cv_have_utmp_ut_host'+set}'`\" = set"; then
++ echo $ac_n "(cached) $ac_c" 1>&6
++else
++
++ cat > conftest.$ac_ext <<EOF
++#line 2761 "configure"
++#include "confdefs.h"
+
+-### checks for compiler characteristics
++#include <sys/types.h>
++#include <${cf_cv_have_utmp}.h>
++int main() {
++struct $cf_cv_have_utmp x; char *y = &x.ut_host[0]
++; return 0; }
++EOF
++if { (eval echo configure:2770: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++ rm -rf conftest*
++ cf_cv_have_utmp_ut_host=yes
++else
++ echo "configure: failed program was:" >&5
++ cat conftest.$ac_ext >&5
++ rm -rf conftest*
++ cf_cv_have_utmp_ut_host=no
++fi
++rm -f conftest*
++
++fi
+
+-echo $ac_n "checking for ${CC-cc} option to accept ANSI C""... $ac_c" 1>&6
+-echo "configure:2641: checking for ${CC-cc} option to accept ANSI C" >&5
+-if eval "test \"`echo '$''{'cf_cv_ansi_cc'+set}'`\" = set"; then
++echo "$ac_t""$cf_cv_have_utmp_ut_host" 1>&6
++test $cf_cv_have_utmp_ut_host != no && cat >> confdefs.h <<\EOF
++#define HAVE_UTMP_UT_HOST 1
++EOF
++
++fi
++
++
++if test $cf_cv_have_utmp != no ; then
++echo $ac_n "checking if utmp.ut_name is declared""... $ac_c" 1>&6
++echo "configure:2793: checking if utmp.ut_name is declared" >&5
++if eval "test \"`echo '$''{'cf_cv_have_utmp_ut_name'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+
+-cf_cv_ansi_cc=no
+-cf_save_CFLAGS="$CFLAGS"
+-cf_save_CPPFLAGS="$CPPFLAGS"
+-# Don't try gcc -ansi; that turns off useful extensions and
+-# breaks some systems' header files.
+-# AIX -qlanglvl=ansi
+-# Ultrix and OSF/1 -std1
+-# HP-UX -Aa -D_HPUX_SOURCE
+-# SVR4 -Xc
+-# UnixWare 1.2 (cannot use -Xc, since ANSI/POSIX clashes)
+-for cf_arg in "-DCC_HAS_PROTOS" \
+- "" \
+- -qlanglvl=ansi \
+- -std1 \
+- -Ae \
+- "-Aa -D_HPUX_SOURCE" \
+- -Xc
+-do
++ cf_cv_have_utmp_ut_name=no
++cf_utmp_includes="
++#include <sys/types.h>
++#include <${cf_cv_have_utmp}.h>
++#define getutent getutxent
++#ifdef USE_LASTLOG
++#include <lastlog.h> /* may conflict with utmpx.h on Linux */
++#endif
++"
++for cf_header in ut_name ut_user ; do
++ cat > conftest.$ac_ext <<EOF
++#line 2809 "configure"
++#include "confdefs.h"
++$cf_utmp_includes
++int main() {
++struct $cf_cv_have_utmp x;
++ char *name = x.$cf_header;
+
+-cf_fix_cppflags=no
+-cf_new_cflags=
+-cf_new_cppflags=
+-cf_new_extra_cppflags=
++; return 0; }
++EOF
++if { (eval echo configure:2818: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++ rm -rf conftest*
++ cf_cv_have_utmp_ut_name=$cf_header
++ break
++else
++ echo "configure: failed program was:" >&5
++ cat conftest.$ac_ext >&5
++fi
++rm -f conftest*
++done
+
+-for cf_add_cflags in $cf_arg
+-do
+-case $cf_fix_cppflags in
+-no)
+- case $cf_add_cflags in #(vi
+- -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
+- case $cf_add_cflags in
+- -D*)
+- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
++fi
+
+- test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+- && test -z "${cf_tst_cflags}" \
+- && cf_fix_cppflags=yes
++echo "$ac_t""$cf_cv_have_utmp_ut_name" 1>&6
+
+- if test $cf_fix_cppflags = yes ; then
+- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+- continue
+- elif test "${cf_tst_cflags}" = "\"'" ; then
+- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+- continue
+- fi
+- ;;
+- esac
+- case "$CPPFLAGS" in
+- *$cf_add_cflags) #(vi
+- ;;
+- *) #(vi
+- cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
+- ;;
+- esac
+- ;;
+- *)
+- cf_new_cflags="$cf_new_cflags $cf_add_cflags"
+- ;;
+- esac
++case $cf_cv_have_utmp_ut_name in #(vi
++no) #(vi
++ { echo "configure: error: Cannot find declaration for ut.ut_name" 1>&2; exit 1; }
+ ;;
+-yes)
+- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+-
+- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
++ut_user)
++ cat >> confdefs.h <<\EOF
++#define ut_name ut_user
++EOF
+
+- test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+- && test -z "${cf_tst_cflags}" \
+- && cf_fix_cppflags=no
+ ;;
+ esac
++fi
++
++
++if test $cf_cv_have_utmp != no ; then
++echo $ac_n "checking for exit-status in $cf_cv_have_utmp""... $ac_c" 1>&6
++echo "configure:2849: checking for exit-status in $cf_cv_have_utmp" >&5
++if eval "test \"`echo '$''{'cf_cv_have_utmp_ut_xstatus'+set}'`\" = set"; then
++ echo $ac_n "(cached) $ac_c" 1>&6
++else
++
++for cf_result in \
++ ut_exit.__e_exit \
++ ut_exit.e_exit \
++ ut_exit.ut_e_exit \
++ ut_exit.ut_exit
++do
++cat > conftest.$ac_ext <<EOF
++#line 2861 "configure"
++#include "confdefs.h"
++
++#include <sys/types.h>
++#include <${cf_cv_have_utmp}.h>
++int main() {
++struct $cf_cv_have_utmp x; long y = x.$cf_result = 0
++; return 0; }
++EOF
++if { (eval echo configure:2870: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++ rm -rf conftest*
++ cf_cv_have_utmp_ut_xstatus=$cf_result
++ break
++else
++ echo "configure: failed program was:" >&5
++ cat conftest.$ac_ext >&5
++ rm -rf conftest*
++ cf_cv_have_utmp_ut_xstatus=no
++fi
++rm -f conftest*
+ done
+
+-if test -n "$cf_new_cflags" ; then
++fi
++
++echo "$ac_t""$cf_cv_have_utmp_ut_xstatus" 1>&6
++if test $cf_cv_have_utmp_ut_xstatus != no ; then
++ cat >> confdefs.h <<\EOF
++#define HAVE_UTMP_UT_XSTATUS 1
++EOF
++
++ cat >> confdefs.h <<EOF
++#define ut_xstatus $cf_cv_have_utmp_ut_xstatus
++EOF
++
++fi
++fi
++
+
+- CFLAGS="$CFLAGS $cf_new_cflags"
++if test $cf_cv_have_utmp != no ; then
++echo $ac_n "checking if utmp.ut_xtime is declared""... $ac_c" 1>&6
++echo "configure:2901: checking if utmp.ut_xtime is declared" >&5
++if eval "test \"`echo '$''{'cf_cv_have_utmp_ut_xtime'+set}'`\" = set"; then
++ echo $ac_n "(cached) $ac_c" 1>&6
++else
++
++ cat > conftest.$ac_ext <<EOF
++#line 2907 "configure"
++#include "confdefs.h"
++
++#include <sys/types.h>
++#include <${cf_cv_have_utmp}.h>
++int main() {
++struct $cf_cv_have_utmp x; long y = x.ut_xtime = 0
++; return 0; }
++EOF
++if { (eval echo configure:2916: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++ rm -rf conftest*
++ cf_cv_have_utmp_ut_xtime=yes
++else
++ echo "configure: failed program was:" >&5
++ cat conftest.$ac_ext >&5
++ rm -rf conftest*
++ cat > conftest.$ac_ext <<EOF
++#line 2924 "configure"
++#include "confdefs.h"
++
++#include <sys/types.h>
++#include <${cf_cv_have_utmp}.h>
++int main() {
++struct $cf_cv_have_utmp x; long y = x.ut_tv.tv_sec
++; return 0; }
++EOF
++if { (eval echo configure:2933: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++ rm -rf conftest*
++ cf_cv_have_utmp_ut_xtime=define
++else
++ echo "configure: failed program was:" >&5
++ cat conftest.$ac_ext >&5
++ rm -rf conftest*
++ cf_cv_have_utmp_ut_xtime=no
++fi
++rm -f conftest*
++
++fi
++rm -f conftest*
++
++fi
++
++echo "$ac_t""$cf_cv_have_utmp_ut_xtime" 1>&6
++if test $cf_cv_have_utmp_ut_xtime != no ; then
++ cat >> confdefs.h <<\EOF
++#define HAVE_UTMP_UT_XTIME 1
++EOF
++
++ if test $cf_cv_have_utmp_ut_xtime = define ; then
++ cat >> confdefs.h <<\EOF
++#define ut_xtime ut_tv.tv_sec
++EOF
++
++ fi
++fi
+ fi
+
+-if test -n "$cf_new_cppflags" ; then
+
+- CPPFLAGS="$cf_new_cppflags $CPPFLAGS"
++if test $cf_cv_have_utmp != no ; then
++echo $ac_n "checking if utmp.ut_session is declared""... $ac_c" 1>&6
++echo "configure:2967: checking if utmp.ut_session is declared" >&5
++if eval "test \"`echo '$''{'cf_cv_have_utmp_ut_session'+set}'`\" = set"; then
++ echo $ac_n "(cached) $ac_c" 1>&6
++else
++
++ cat > conftest.$ac_ext <<EOF
++#line 2973 "configure"
++#include "confdefs.h"
++
++#include <sys/types.h>
++#include <${cf_cv_have_utmp}.h>
++int main() {
++struct $cf_cv_have_utmp x; long y = x.ut_session
++; return 0; }
++EOF
++if { (eval echo configure:2982: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++ rm -rf conftest*
++ cf_cv_have_utmp_ut_session=yes
++else
++ echo "configure: failed program was:" >&5
++ cat conftest.$ac_ext >&5
++ rm -rf conftest*
++ cf_cv_have_utmp_ut_session=no
++fi
++rm -f conftest*
++
++fi
++
++echo "$ac_t""$cf_cv_have_utmp_ut_session" 1>&6
++if test $cf_cv_have_utmp_ut_session != no ; then
++ cat >> confdefs.h <<\EOF
++#define HAVE_UTMP_UT_SESSION 1
++EOF
++
++fi
+ fi
+
+-if test -n "$cf_new_extra_cppflags" ; then
+
+- EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+-fi
+-
+-
+-
+-
+- cat > conftest.$ac_ext <<EOF
+-#line 2737 "configure"
++echo $ac_n "checking if $cf_cv_have_utmp is SYSV flavor""... $ac_c" 1>&6
++echo "configure:3006: checking if $cf_cv_have_utmp is SYSV flavor" >&5
++if eval "test \"`echo '$''{'cf_cv_sysv_utmp'+set}'`\" = set"; then
++ echo $ac_n "(cached) $ac_c" 1>&6
++else
++
++test "$cf_cv_have_utmp" = "utmp" && cf_prefix="ut" || cf_prefix="utx"
++cat > conftest.$ac_ext <<EOF
++#line 3013 "configure"
+ #include "confdefs.h"
+
+-#ifndef CC_HAS_PROTOS
+-#if !defined(__STDC__) || (__STDC__ != 1)
+-choke me
+-#endif
+-#endif
+-
++#include <sys/types.h>
++#include <${cf_cv_have_utmp}.h>
+ int main() {
+
+- int test (int i, double x);
+- struct s1 {int (*f) (int a);};
+- struct s2 {int (*f) (double a);};
++struct $cf_cv_have_utmp x;
++ set${cf_prefix}ent ();
++ get${cf_prefix}id(&x);
++ put${cf_prefix}line(&x);
++ end${cf_prefix}ent();
+ ; return 0; }
+ EOF
+-if { (eval echo configure:2753: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:3027: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+- cf_cv_ansi_cc="$cf_arg"; break
++ cf_cv_sysv_utmp=yes
+ else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
++ rm -rf conftest*
++ cf_cv_sysv_utmp=no
+ fi
+ rm -f conftest*
+-done
+-CFLAGS="$cf_save_CFLAGS"
+-CPPFLAGS="$cf_save_CPPFLAGS"
+
+ fi
+
+-echo "$ac_t""$cf_cv_ansi_cc" 1>&6
+-
+-if test "$cf_cv_ansi_cc" != "no"; then
+-if test ".$cf_cv_ansi_cc" != ".-DCC_HAS_PROTOS"; then
+-
+-cf_fix_cppflags=no
+-cf_new_cflags=
+-cf_new_cppflags=
+-cf_new_extra_cppflags=
+-
+-for cf_add_cflags in $cf_cv_ansi_cc
+-do
+-case $cf_fix_cppflags in
+-no)
+- case $cf_add_cflags in #(vi
+- -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
+- case $cf_add_cflags in
+- -D*)
+- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+-
+- test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+- && test -z "${cf_tst_cflags}" \
+- && cf_fix_cppflags=yes
+-
+- if test $cf_fix_cppflags = yes ; then
+- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+- continue
+- elif test "${cf_tst_cflags}" = "\"'" ; then
+- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+- continue
+- fi
+- ;;
+- esac
+- case "$CPPFLAGS" in
+- *$cf_add_cflags) #(vi
+- ;;
+- *) #(vi
+- cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
+- ;;
+- esac
+- ;;
+- *)
+- cf_new_cflags="$cf_new_cflags $cf_add_cflags"
+- ;;
+- esac
+- ;;
+-yes)
+- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+-
+- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+-
+- test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+- && test -z "${cf_tst_cflags}" \
+- && cf_fix_cppflags=no
+- ;;
+-esac
+-done
+-
+-if test -n "$cf_new_cflags" ; then
+-
+- CFLAGS="$CFLAGS $cf_new_cflags"
+-fi
++echo "$ac_t""$cf_cv_sysv_utmp" 1>&6
++test $cf_cv_sysv_utmp = yes && cat >> confdefs.h <<\EOF
++#define USE_SYSV_UTMP 1
++EOF
+
+-if test -n "$cf_new_cppflags" ; then
+-
+- CPPFLAGS="$cf_new_cppflags $CPPFLAGS"
+-fi
+
+-if test -n "$cf_new_extra_cppflags" ; then
+-
+- EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+ fi
+
+
++echo $ac_n "checking if you want to link with utempter""... $ac_c" 1>&6
++echo "configure:3050: checking if you want to link with utempter" >&5
+
+-
++# Check whether --with-utempter or --without-utempter was given.
++if test "${with_utempter+set}" = set; then
++ withval="$with_utempter"
++ use_utempter=$withval
+ else
+- cat >> confdefs.h <<\EOF
+-#define CC_HAS_PROTOS 1
+-EOF
+-
+-fi
++ use_utempter=no
+ fi
+
+-echo $ac_n "checking for working const""... $ac_c" 1>&6
+-echo "configure:2852: checking for working const" >&5
+-if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
++echo "$ac_t""$use_utempter" 1>&6
++
++if test "$use_utempter" = yes ; then
++
++echo $ac_n "checking if we can link with utempter library""... $ac_c" 1>&6
++echo "configure:3065: checking if we can link with utempter library" >&5
++if eval "test \"`echo '$''{'cf_cv_have_utempter'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+- cat > conftest.$ac_ext <<EOF
+-#line 2857 "configure"
++
++cf_save_LIBS="$LIBS"
++LIBS="-lutempter $LIBS"
++cat > conftest.$ac_ext <<EOF
++#line 3073 "configure"
+ #include "confdefs.h"
+
+-int main() {
++#include <utempter.h>
+
+-/* Ultrix mips cc rejects this. */
+-typedef int charset[2]; const charset x;
+-/* SunOS 4.1.1 cc rejects this. */
+-char const *const *ccp;
+-char **p;
+-/* NEC SVR4.0.2 mips cc rejects this. */
+-struct point {int x, y;};
+-static struct point const zero = {0,0};
+-/* AIX XL C 1.02.0.0 rejects this.
+- It does not let you subtract one const X* pointer from another in an arm
+- of an if-expression whose if-part is not a constant expression */
+-const char *g = "string";
+-ccp = &g + (g ? g-g : 0);
+-/* HPUX 7.0 cc rejects these. */
+-++ccp;
+-p = (char**) ccp;
+-ccp = (char const *const *) p;
+-{ /* SCO 3.2v4 cc rejects this. */
+- char *t;
+- char const *s = 0 ? (char *) 0 : (char const *) 0;
++int main() {
+
+- *t++ = 0;
+-}
+-{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
+- int x[] = {25, 17};
+- const int *foo = &x[0];
+- ++foo;
+-}
+-{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+- typedef const int *iptr;
+- iptr p = 0;
+- ++p;
+-}
+-{ /* AIX XL C 1.02.0.0 rejects this saying
+- "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+- struct s { int j; const int *ap[3]; };
+- struct s *b; b->j = 5;
+-}
+-{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+- const int foo = 10;
+-}
++ addToUtmp("/dev/tty", 0, 1);
++ removeFromUtmp();
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:2906: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:3085: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+- ac_cv_c_const=yes
++
++ cf_cv_have_utempter=yes
+ else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+- ac_cv_c_const=no
++
++ cf_cv_have_utempter=no
+ fi
+ rm -f conftest*
++LIBS="$cf_save_LIBS"
++
+ fi
+
+-echo "$ac_t""$ac_cv_c_const" 1>&6
+-if test $ac_cv_c_const = no; then
+- cat >> confdefs.h <<\EOF
+-#define const
++echo "$ac_t""$cf_cv_have_utempter" 1>&6
++if test "$cf_cv_have_utempter" = yes ; then
++ cat >> confdefs.h <<\EOF
++#define USE_UTEMPTER 1
+ EOF
+
++ LIBS="-lutempter $LIBS"
+ fi
+
+-echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
+-echo "configure:2927: checking for Cygwin environment" >&5
+-if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then
++fi
++
++### checks for external data
++
++
++echo $ac_n "checking if external errno is declared""... $ac_c" 1>&6
++echo "configure:3116: checking if external errno is declared" >&5
++if eval "test \"`echo '$''{'cf_cv_dcl_errno'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+- cat > conftest.$ac_ext <<EOF
+-#line 2932 "configure"
++
++ cat > conftest.$ac_ext <<EOF
++#line 3122 "configure"
+ #include "confdefs.h"
+
+-int main() {
+-
+-#ifndef __CYGWIN__
+-#define __CYGWIN__ __CYGWIN32__
++#ifdef HAVE_STDLIB_H
++#include <stdlib.h>
+ #endif
+-return __CYGWIN__;
++#include <stdio.h>
++#include <sys/types.h>
++#include <errno.h>
++int main() {
++long x = (long) errno
+ ; return 0; }
+ EOF
+-if { (eval echo configure:2943: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:3135: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+- ac_cv_cygwin=yes
++ cf_cv_dcl_errno=yes
+ else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+- ac_cv_cygwin=no
++ cf_cv_dcl_errno=no
+ fi
+ rm -f conftest*
+-rm -f conftest*
++
+ fi
+
+-echo "$ac_t""$ac_cv_cygwin" 1>&6
+-CYGWIN=
+-test "$ac_cv_cygwin" = yes && CYGWIN=yes
+-echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
+-echo "configure:2960: checking for mingw32 environment" >&5
+-if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then
++echo "$ac_t""$cf_cv_dcl_errno" 1>&6
++
++if test "$cf_cv_dcl_errno" = no ; then
++
++cf_result=`echo "decl_errno" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
++
++ cat >> confdefs.h <<EOF
++#define $cf_result 1
++EOF
++
++fi
++
++# It's possible (for near-UNIX clones) that the data doesn't exist
++
++echo $ac_n "checking if external errno exists""... $ac_c" 1>&6
++echo "configure:3163: checking if external errno exists" >&5
++if eval "test \"`echo '$''{'cf_cv_have_errno'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+- cat > conftest.$ac_ext <<EOF
+-#line 2965 "configure"
++
++ cat > conftest.$ac_ext <<EOF
++#line 3169 "configure"
+ #include "confdefs.h"
+
++#undef errno
++extern int errno;
++
+ int main() {
+-return __MINGW32__;
++errno = 2
+ ; return 0; }
+ EOF
+-if { (eval echo configure:2972: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:3179: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+- ac_cv_mingw32=yes
++ cf_cv_have_errno=yes
+ else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+- ac_cv_mingw32=no
++ cf_cv_have_errno=no
+ fi
+ rm -f conftest*
+-rm -f conftest*
++
+ fi
+
+-echo "$ac_t""$ac_cv_mingw32" 1>&6
+-MINGW32=
+-test "$ac_cv_mingw32" = yes && MINGW32=yes
++echo "$ac_t""$cf_cv_have_errno" 1>&6
+
++if test "$cf_cv_have_errno" = yes ; then
++
++cf_result=`echo "have_errno" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+
+-case $cf_cv_system_name in
+-os2*)
+- CFLAGS="$CFLAGS -Zmt"
+- CPPFLAGS="$CPPFLAGS -D__ST_MT_ERRNO__"
+- CXXFLAGS="$CXXFLAGS -Zmt"
+- # autoconf's macro sets -Zexe and suffix both, which conflict:w
+- LDFLAGS="$LDFLAGS -Zmt -Zcrtdll"
+- ac_cv_exeext=.exe
+- ;;
+-esac
++ cat >> confdefs.h <<EOF
++#define $cf_result 1
++EOF
++
++fi
+
+
+
+-echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
+-echo "configure:3004: checking for executable suffix" >&5
+-if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
++
++
++echo $ac_n "checking for tty group name""... $ac_c" 1>&6
++echo "configure:3209: checking for tty group name" >&5
++if eval "test \"`echo '$''{'cf_cv_tty_group_name'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+- if test "$CYGWIN" = yes || test "$MINGW32" = yes; then
+- ac_cv_exeext=.exe
+-else
+- rm -f conftest*
+- echo 'int main () { return 0; }' > conftest.$ac_ext
+- ac_cv_exeext=
+- if { (eval echo configure:3014: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+- for file in conftest.*; do
+- case $file in
+- *.c | *.o | *.obj) ;;
+- *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
+- esac
+- done
+- else
+- { echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; }
+- fi
+- rm -f conftest*
+- test x"${ac_cv_exeext}" = x && ac_cv_exeext=no
++
++
++# If we are configuring as root, it is hard to get a clue about the tty group.
++# But we'll guess based on how our connection is set up - assuming it is done
++# properly.
++
++cf_uid=`id | sed -e 's/^^=*=//' -e 's/(.*$//'`
++if test "$cf_uid" != 0 ; then
++cf_cv_tty_group_name=
++cf_tty_name=`tty`
++test "$cf_tty_name" = "not a tty" && cf_tty_name=/dev/tty
++test -z "$cf_tty_name" && cf_tty_name=/dev/tty
++if test -c "$cf_tty_name"
++then
++ cf_option="-l -L"
++
++ # Expect listing to have fields like this:
++ #-rwxrwxrwx 1 user group 34293 Jul 18 16:29 pathname
++ ls $cf_option $cf_tty_name >conftest.out
++ read cf_mode cf_links cf_usr cf_grp cf_size cf_date1 cf_date2 cf_date3 cf_rest <conftest.out
++ if test -z "$cf_rest" ; then
++ cf_option="$cf_option -g"
++ ls $cf_option $cf_tty_name >conftest.out
++ read cf_mode cf_links cf_usr cf_grp cf_size cf_date1 cf_date2 cf_date3 cf_rest <conftest.out
++ fi
++ rm -f conftest.out
++ cf_cv_tty_group_name=$cf_grp
+ fi
+ fi
+
+-EXEEXT=""
+-test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext}
+-echo "$ac_t""${ac_cv_exeext}" 1>&6
+-ac_exeext=$EXEEXT
++# If we cannot deduce the tty group, fall back on hardcoded cases
+
+-echo $ac_n "checking for object suffix""... $ac_c" 1>&6
+-echo "configure:3035: checking for object suffix" >&5
+-if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then
++if test -z "$cf_cv_tty_group_name"
++then
++case $host_os in #(vi
++osf*) #(vi
++ cf_cv_tty_group_name="terminal"
++ ;;
++*)
++ cf_cv_tty_group_name="unknown"
++ if ( egrep '^tty:' /etc/group 2>/dev/null 1>/dev/null ) then
++ cf_cv_tty_group_name="tty"
++ fi
++ ;;
++esac
++fi
++
++fi
++
++echo "$ac_t""$cf_cv_tty_group_name" 1>&6
++
++cat >> confdefs.h <<EOF
++#define TTY_GROUP_NAME "$cf_cv_tty_group_name"
++EOF
++
++
++# This is only a double-check that the group-name we obtained above really
++# does apply to the device. We cannot perform this test if we are in batch
++# mode, or if we are cross-compiling.
++
++echo $ac_n "checking if we may use $cf_cv_tty_group_name group""... $ac_c" 1>&6
++echo "configure:3274: checking if we may use $cf_cv_tty_group_name group" >&5
++if eval "test \"`echo '$''{'cf_cv_tty_group'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+- rm -f conftest*
+-echo 'int i = 1;' > conftest.$ac_ext
+-if { (eval echo configure:3041: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+- for ac_file in conftest.*; do
+- case $ac_file in
+- *.c) ;;
+- *) ac_cv_objext=`echo $ac_file | sed -e s/conftest.//` ;;
+- esac
+- done
++
++cf_tty_name=`tty`
++if test "$cf_tty_name" != "not a tty"
++then
++if test "$cross_compiling" = yes; then
++ cf_cv_tty_group=unknown
+ else
+- { echo "configure: error: installation or configuration problem; compiler does not work" 1>&2; exit 1; }
++ cat > conftest.$ac_ext <<EOF
++#line 3286 "configure"
++#include "confdefs.h"
++
++#include <unistd.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <grp.h>
++int main()
++{
++ struct stat sb;
++ struct group *ttygrp = getgrnam(TTY_GROUP_NAME);
++ char *name = ttyname(0);
++
++ endgrent();
++ if (ttygrp != 0
++ && name != 0
++ && stat(name, &sb) == 0
++ && sb.st_gid != getgid()
++ && sb.st_gid == ttygrp->gr_gid) {
++ exit(0);
++ }
++ exit(1);
++}
++
++EOF
++if { (eval echo configure:3311: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
++then
++ cf_cv_tty_group=yes
++else
++ echo "configure: failed program was:" >&5
++ cat conftest.$ac_ext >&5
++ rm -fr conftest*
++ cf_cv_tty_group=no
+ fi
+-rm -f conftest*
++rm -fr conftest*
+ fi
+
+-echo "$ac_t""$ac_cv_objext" 1>&6
+-OBJEXT=$ac_cv_objext
+-ac_objext=$ac_cv_objext
+-
++elif test "$cross_compiling" = yes; then
++ cf_cv_tty_group=unknown
++else
++ cf_cv_tty_group=yes
++fi
+
+-PROG_EXT="$EXEEXT"
++fi
+
+-test -n "$PROG_EXT" && cat >> confdefs.h <<EOF
+-#define PROG_EXT "$PROG_EXT"
++echo "$ac_t""$cf_cv_tty_group" 1>&6
++test $cf_cv_tty_group = yes && cat >> confdefs.h <<\EOF
++#define USE_TTY_GROUP 1
+ EOF
+
+
+@@ -3066,12 +3337,12 @@
+ ### checks for system services and user specified options
+
+ echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
+-echo "configure:3070: checking for sys/wait.h that is POSIX.1 compatible" >&5
++echo "configure:3341: checking for sys/wait.h that is POSIX.1 compatible" >&5
+ if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 3075 "configure"
++#line 3346 "configure"
+ #include "confdefs.h"
+ #include <sys/types.h>
+ #include <sys/wait.h>
+@@ -3087,7 +3358,7 @@
+ s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
+ ; return 0; }
+ EOF
+-if { (eval echo configure:3091: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:3362: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_header_sys_wait_h=yes
+ else
+@@ -3110,13 +3381,13 @@
+
+
+ echo $ac_n "checking for POSIX wait functions""... $ac_c" 1>&6
+-echo "configure:3114: checking for POSIX wait functions" >&5
++echo "configure:3385: checking for POSIX wait functions" >&5
+ if eval "test \"`echo '$''{'cf_cv_posix_wait'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+
+ cat > conftest.$ac_ext <<EOF
+-#line 3120 "configure"
++#line 3391 "configure"
+ #include "confdefs.h"
+
+ #include <stdlib.h>
+@@ -3134,7 +3405,7 @@
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:3138: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:3409: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ cf_cv_posix_wait=yes
+ else
+@@ -3156,13 +3427,13 @@
+
+
+ echo $ac_n "checking if external sys_nerr is declared""... $ac_c" 1>&6
+-echo "configure:3160: checking if external sys_nerr is declared" >&5
++echo "configure:3431: checking if external sys_nerr is declared" >&5
+ if eval "test \"`echo '$''{'cf_cv_dcl_sys_nerr'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+
+ cat > conftest.$ac_ext <<EOF
+-#line 3166 "configure"
++#line 3437 "configure"
+ #include "confdefs.h"
+
+ #ifdef HAVE_STDLIB_H
+@@ -3175,7 +3446,7 @@
+ long x = (long) sys_nerr
+ ; return 0; }
+ EOF
+-if { (eval echo configure:3179: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:3450: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ cf_cv_dcl_sys_nerr=yes
+ else
+@@ -3203,13 +3474,13 @@
+ # It's possible (for near-UNIX clones) that the data doesn't exist
+
+ echo $ac_n "checking if external sys_nerr exists""... $ac_c" 1>&6
+-echo "configure:3207: checking if external sys_nerr exists" >&5
++echo "configure:3478: checking if external sys_nerr exists" >&5
+ if eval "test \"`echo '$''{'cf_cv_have_sys_nerr'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+
+ cat > conftest.$ac_ext <<EOF
+-#line 3213 "configure"
++#line 3484 "configure"
+ #include "confdefs.h"
+
+ #undef sys_nerr
+@@ -3219,7 +3490,7 @@
+ sys_nerr = 2
+ ; return 0; }
+ EOF
+-if { (eval echo configure:3223: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:3494: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ cf_cv_have_sys_nerr=yes
+ else
+@@ -3248,13 +3519,13 @@
+
+
+ echo $ac_n "checking if external sys_errlist is declared""... $ac_c" 1>&6
+-echo "configure:3252: checking if external sys_errlist is declared" >&5
++echo "configure:3523: checking if external sys_errlist is declared" >&5
+ if eval "test \"`echo '$''{'cf_cv_dcl_sys_errlist'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+
+ cat > conftest.$ac_ext <<EOF
+-#line 3258 "configure"
++#line 3529 "configure"
+ #include "confdefs.h"
+
+ #ifdef HAVE_STDLIB_H
+@@ -3267,7 +3538,7 @@
+ long x = (long) sys_errlist
+ ; return 0; }
+ EOF
+-if { (eval echo configure:3271: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:3542: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ cf_cv_dcl_sys_errlist=yes
+ else
+@@ -3295,13 +3566,13 @@
+ # It's possible (for near-UNIX clones) that the data doesn't exist
+
+ echo $ac_n "checking if external sys_errlist exists""... $ac_c" 1>&6
+-echo "configure:3299: checking if external sys_errlist exists" >&5
++echo "configure:3570: checking if external sys_errlist exists" >&5
+ if eval "test \"`echo '$''{'cf_cv_have_sys_errlist'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+
+ cat > conftest.$ac_ext <<EOF
+-#line 3305 "configure"
++#line 3576 "configure"
+ #include "confdefs.h"
+
+ #undef sys_errlist
+@@ -3311,7 +3582,7 @@
+ sys_errlist = 2
+ ; return 0; }
+ EOF
+-if { (eval echo configure:3315: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:3586: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ cf_cv_have_sys_errlist=yes
+ else
+@@ -3341,14 +3612,14 @@
+
+
+ echo $ac_n "checking if we should define SYSV""... $ac_c" 1>&6
+-echo "configure:3345: checking if we should define SYSV" >&5
++echo "configure:3616: checking if we should define SYSV" >&5
+ if eval "test \"`echo '$''{'cf_cv_sysv'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+
+
+ cat > conftest.$ac_ext <<EOF
+-#line 3352 "configure"
++#line 3623 "configure"
+ #include "confdefs.h"
+
+ #undef SYSV
+@@ -3379,7 +3650,7 @@
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:3383: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:3654: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ cf_cv_sysv=yes
+ else
+@@ -3400,7 +3671,7 @@
+
+
+ echo $ac_n "checking for elf_begin in -lelf""... $ac_c" 1>&6
+-echo "configure:3404: checking for elf_begin in -lelf" >&5
++echo "configure:3675: checking for elf_begin in -lelf" >&5
+ ac_lib_var=`echo elf'_'elf_begin | sed 'y%./+-%__p_%'`
+ if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+@@ -3408,7 +3679,7 @@
+ ac_save_LIBS="$LIBS"
+ LIBS="-lelf $LIBS"
+ cat > conftest.$ac_ext <<EOF
+-#line 3412 "configure"
++#line 3683 "configure"
+ #include "confdefs.h"
+ /* Override any gcc2 internal prototype to avoid an error. */
+ /* We use char because int might match the return type of a gcc2
+@@ -3419,7 +3690,7 @@
+ elf_begin()
+ ; return 0; }
+ EOF
+-if { (eval echo configure:3423: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:3694: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+ else
+@@ -3436,13 +3707,13 @@
+ echo "$ac_t""yes" 1>&6
+
+ echo $ac_n "checking if this is an SVR4 system""... $ac_c" 1>&6
+-echo "configure:3440: checking if this is an SVR4 system" >&5
++echo "configure:3711: checking if this is an SVR4 system" >&5
+ if eval "test \"`echo '$''{'cf_cv_svr4'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+
+ cat > conftest.$ac_ext <<EOF
+-#line 3446 "configure"
++#line 3717 "configure"
+ #include "confdefs.h"
+
+ #include <elf.h>
+@@ -3463,7 +3734,7 @@
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:3467: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:3738: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ cf_cv_svr4=yes
+ else
+@@ -3487,70 +3758,12 @@
+ EOF
+
+
+-
+-echo $ac_n "checking if we must define _GNU_SOURCE""... $ac_c" 1>&6
+-echo "configure:3493: checking if we must define _GNU_SOURCE" >&5
+-if eval "test \"`echo '$''{'cf_cv_gnu_source'+set}'`\" = set"; then
+- echo $ac_n "(cached) $ac_c" 1>&6
+-else
+-
+-cat > conftest.$ac_ext <<EOF
+-#line 3499 "configure"
+-#include "confdefs.h"
+-#include <sys/types.h>
+-int main() {
+-
+-#ifndef _XOPEN_SOURCE
+-make an error
+-#endif
+-; return 0; }
+-EOF
+-if { (eval echo configure:3509: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+- rm -rf conftest*
+- cf_cv_gnu_source=no
+-else
+- echo "configure: failed program was:" >&5
+- cat conftest.$ac_ext >&5
+- rm -rf conftest*
+- cf_save="$CPPFLAGS"
+- CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
+- cat > conftest.$ac_ext <<EOF
+-#line 3519 "configure"
+-#include "confdefs.h"
+-#include <sys/types.h>
+-int main() {
+-
+-#ifdef _XOPEN_SOURCE
+-make an error
+-#endif
+-; return 0; }
+-EOF
+-if { (eval echo configure:3529: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+- rm -rf conftest*
+- cf_cv_gnu_source=no
+-else
+- echo "configure: failed program was:" >&5
+- cat conftest.$ac_ext >&5
+- rm -rf conftest*
+- cf_cv_gnu_source=yes
+-fi
+-rm -f conftest*
+- CPPFLAGS="$cf_save"
+-
+-fi
+-rm -f conftest*
+-
+-fi
+-
+-echo "$ac_t""$cf_cv_gnu_source" 1>&6
+-test "$cf_cv_gnu_source" = yes && CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
+-
+ # If we find X, set shell vars x_includes and x_libraries to the
+ # paths, otherwise set no_x=yes.
+ # Uses ac_ vars as temps to allow command line to override cache and checks.
+ # --without-x overrides everything else, but does not touch the cache.
+ echo $ac_n "checking for X""... $ac_c" 1>&6
+-echo "configure:3554: checking for X" >&5
++echo "configure:3767: checking for X" >&5
+
+
+ # Check whether --with-x or --without-x was given.
+@@ -3613,12 +3826,12 @@
+
+ # First, try using that file with no special directory specified.
+ cat > conftest.$ac_ext <<EOF
+-#line 3617 "configure"
++#line 3830 "configure"
+ #include "confdefs.h"
+ #include <$x_direct_test_include>
+ EOF
+ ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+-{ (eval echo configure:3622: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++{ (eval echo configure:3835: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+ if test -z "$ac_err"; then
+ rm -rf conftest*
+@@ -3687,14 +3900,14 @@
+ ac_save_LIBS="$LIBS"
+ LIBS="-l$x_direct_test_library $LIBS"
+ cat > conftest.$ac_ext <<EOF
+-#line 3691 "configure"
++#line 3904 "configure"
+ #include "confdefs.h"
+
+ int main() {
+ ${x_direct_test_function}()
+ ; return 0; }
+ EOF
+-if { (eval echo configure:3698: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:3911: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ LIBS="$ac_save_LIBS"
+ # We can link X programs with no special library path.
+@@ -3800,17 +4013,17 @@
+ case "`(uname -sr) 2>/dev/null`" in
+ "SunOS 5"*)
+ echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6
+-echo "configure:3804: checking whether -R must be followed by a space" >&5
++echo "configure:4017: checking whether -R must be followed by a space" >&5
+ ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries"
+ cat > conftest.$ac_ext <<EOF
+-#line 3807 "configure"
++#line 4020 "configure"
+ #include "confdefs.h"
+
+ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:3814: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:4027: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ ac_R_nospace=yes
+ else
+@@ -3826,14 +4039,14 @@
+ else
+ LIBS="$ac_xsave_LIBS -R $x_libraries"
+ cat > conftest.$ac_ext <<EOF
+-#line 3830 "configure"
++#line 4043 "configure"
+ #include "confdefs.h"
+
+ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:3837: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:4050: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ ac_R_space=yes
+ else
+@@ -3865,7 +4078,7 @@
+ # libraries were built with DECnet support. And karl@cs.umb.edu says
+ # the Alpha needs dnet_stub (dnet does not exist).
+ echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6
+-echo "configure:3869: checking for dnet_ntoa in -ldnet" >&5
++echo "configure:4082: checking for dnet_ntoa in -ldnet" >&5
+ ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'`
+ if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+@@ -3873,7 +4086,7 @@
+ ac_save_LIBS="$LIBS"
+ LIBS="-ldnet $LIBS"
+ cat > conftest.$ac_ext <<EOF
+-#line 3877 "configure"
++#line 4090 "configure"
+ #include "confdefs.h"
+ /* Override any gcc2 internal prototype to avoid an error. */
+ /* We use char because int might match the return type of a gcc2
+@@ -3884,7 +4097,7 @@
+ dnet_ntoa()
+ ; return 0; }
+ EOF
+-if { (eval echo configure:3888: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:4101: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+ else
+@@ -3906,7 +4119,7 @@
+
+ if test $ac_cv_lib_dnet_dnet_ntoa = no; then
+ echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6
+-echo "configure:3910: checking for dnet_ntoa in -ldnet_stub" >&5
++echo "configure:4123: checking for dnet_ntoa in -ldnet_stub" >&5
+ ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'`
+ if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+@@ -3914,7 +4127,7 @@
+ ac_save_LIBS="$LIBS"
+ LIBS="-ldnet_stub $LIBS"
+ cat > conftest.$ac_ext <<EOF
+-#line 3918 "configure"
++#line 4131 "configure"
+ #include "confdefs.h"
+ /* Override any gcc2 internal prototype to avoid an error. */
+ /* We use char because int might match the return type of a gcc2
+@@ -3925,7 +4138,7 @@
+ dnet_ntoa()
+ ; return 0; }
+ EOF
+-if { (eval echo configure:3929: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:4142: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+ else
+@@ -3954,12 +4167,12 @@
+ # The nsl library prevents programs from opening the X display
+ # on Irix 5.2, according to dickey@clark.net.
+ echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6
+-echo "configure:3958: checking for gethostbyname" >&5
++echo "configure:4171: checking for gethostbyname" >&5
+ if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 3963 "configure"
++#line 4176 "configure"
+ #include "confdefs.h"
+ /* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char gethostbyname(); below. */
+@@ -3982,7 +4195,7 @@
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:3986: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:4199: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_gethostbyname=yes"
+ else
+@@ -4003,7 +4216,7 @@
+
+ if test $ac_cv_func_gethostbyname = no; then
+ echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
+-echo "configure:4007: checking for gethostbyname in -lnsl" >&5
++echo "configure:4220: checking for gethostbyname in -lnsl" >&5
+ ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'`
+ if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+@@ -4011,7 +4224,7 @@
+ ac_save_LIBS="$LIBS"
+ LIBS="-lnsl $LIBS"
+ cat > conftest.$ac_ext <<EOF
+-#line 4015 "configure"
++#line 4228 "configure"
+ #include "confdefs.h"
+ /* Override any gcc2 internal prototype to avoid an error. */
+ /* We use char because int might match the return type of a gcc2
+@@ -4022,7 +4235,7 @@
+ gethostbyname()
+ ; return 0; }
+ EOF
+-if { (eval echo configure:4026: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:4239: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+ else
+@@ -4052,12 +4265,12 @@
+ # -lsocket must be given before -lnsl if both are needed.
+ # We assume that if connect needs -lnsl, so does gethostbyname.
+ echo $ac_n "checking for connect""... $ac_c" 1>&6
+-echo "configure:4056: checking for connect" >&5
++echo "configure:4269: checking for connect" >&5
+ if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 4061 "configure"
++#line 4274 "configure"
+ #include "confdefs.h"
+ /* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char connect(); below. */
+@@ -4080,7 +4293,7 @@
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:4084: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:4297: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_connect=yes"
+ else
+@@ -4101,7 +4314,7 @@
+
+ if test $ac_cv_func_connect = no; then
+ echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6
+-echo "configure:4105: checking for connect in -lsocket" >&5
++echo "configure:4318: checking for connect in -lsocket" >&5
+ ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'`
+ if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+@@ -4109,7 +4322,7 @@
+ ac_save_LIBS="$LIBS"
+ LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
+ cat > conftest.$ac_ext <<EOF
+-#line 4113 "configure"
++#line 4326 "configure"
+ #include "confdefs.h"
+ /* Override any gcc2 internal prototype to avoid an error. */
+ /* We use char because int might match the return type of a gcc2
+@@ -4120,7 +4333,7 @@
+ connect()
+ ; return 0; }
+ EOF
+-if { (eval echo configure:4124: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:4337: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+ else
+@@ -4144,12 +4357,12 @@
+
+ # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX.
+ echo $ac_n "checking for remove""... $ac_c" 1>&6
+-echo "configure:4148: checking for remove" >&5
++echo "configure:4361: checking for remove" >&5
+ if eval "test \"`echo '$''{'ac_cv_func_remove'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 4153 "configure"
++#line 4366 "configure"
+ #include "confdefs.h"
+ /* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char remove(); below. */
+@@ -4172,7 +4385,7 @@
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:4176: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:4389: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_remove=yes"
+ else
+@@ -4193,7 +4406,7 @@
+
+ if test $ac_cv_func_remove = no; then
+ echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
+-echo "configure:4197: checking for remove in -lposix" >&5
++echo "configure:4410: checking for remove in -lposix" >&5
+ ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'`
+ if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+@@ -4201,7 +4414,7 @@
+ ac_save_LIBS="$LIBS"
+ LIBS="-lposix $LIBS"
+ cat > conftest.$ac_ext <<EOF
+-#line 4205 "configure"
++#line 4418 "configure"
+ #include "confdefs.h"
+ /* Override any gcc2 internal prototype to avoid an error. */
+ /* We use char because int might match the return type of a gcc2
+@@ -4212,7 +4425,7 @@
+ remove()
+ ; return 0; }
+ EOF
+-if { (eval echo configure:4216: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:4429: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+ else
+@@ -4236,12 +4449,12 @@
+
+ # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
+ echo $ac_n "checking for shmat""... $ac_c" 1>&6
+-echo "configure:4240: checking for shmat" >&5
++echo "configure:4453: checking for shmat" >&5
+ if eval "test \"`echo '$''{'ac_cv_func_shmat'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 4245 "configure"
++#line 4458 "configure"
+ #include "confdefs.h"
+ /* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char shmat(); below. */
+@@ -4264,7 +4477,7 @@
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:4268: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:4481: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_shmat=yes"
+ else
+@@ -4285,7 +4498,7 @@
+
+ if test $ac_cv_func_shmat = no; then
+ echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
+-echo "configure:4289: checking for shmat in -lipc" >&5
++echo "configure:4502: checking for shmat in -lipc" >&5
+ ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'`
+ if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+@@ -4293,7 +4506,7 @@
+ ac_save_LIBS="$LIBS"
+ LIBS="-lipc $LIBS"
+ cat > conftest.$ac_ext <<EOF
+-#line 4297 "configure"
++#line 4510 "configure"
+ #include "confdefs.h"
+ /* Override any gcc2 internal prototype to avoid an error. */
+ /* We use char because int might match the return type of a gcc2
+@@ -4304,7 +4517,7 @@
+ shmat()
+ ; return 0; }
+ EOF
+-if { (eval echo configure:4308: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:4521: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+ else
+@@ -4337,7 +4550,7 @@
+ # libraries we check for below, so use a different variable.
+ # --interran@uluru.Stanford.EDU, kb@cs.umb.edu.
+ echo $ac_n "checking for IceConnectionNumber in -lICE""... $ac_c" 1>&6
+-echo "configure:4341: checking for IceConnectionNumber in -lICE" >&5
++echo "configure:4554: checking for IceConnectionNumber in -lICE" >&5
+ ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'`
+ if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+@@ -4345,7 +4558,7 @@
+ ac_save_LIBS="$LIBS"
+ LIBS="-lICE $X_EXTRA_LIBS $LIBS"
+ cat > conftest.$ac_ext <<EOF
+-#line 4349 "configure"
++#line 4562 "configure"
+ #include "confdefs.h"
+ /* Override any gcc2 internal prototype to avoid an error. */
+ /* We use char because int might match the return type of a gcc2
+@@ -4356,7 +4569,7 @@
+ IceConnectionNumber()
+ ; return 0; }
+ EOF
+-if { (eval echo configure:4360: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:4573: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+ else
+@@ -4471,14 +4684,14 @@
+
+ if test "$cf_check_cflags" != "$CFLAGS" ; then
+ cat > conftest.$ac_ext <<EOF
+-#line 4475 "configure"
++#line 4688 "configure"
+ #include "confdefs.h"
+ #include <stdio.h>
+ int main() {
+ printf("Hello world");
+ ; return 0; }
+ EOF
+-if { (eval echo configure:4482: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:4695: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ :
+ else
+ echo "configure: failed program was:" >&5
+@@ -4497,12 +4710,12 @@
+
+
+ echo $ac_n "checking for XOpenDisplay""... $ac_c" 1>&6
+-echo "configure:4501: checking for XOpenDisplay" >&5
++echo "configure:4714: checking for XOpenDisplay" >&5
+ if eval "test \"`echo '$''{'ac_cv_func_XOpenDisplay'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 4506 "configure"
++#line 4719 "configure"
+ #include "confdefs.h"
+ /* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char XOpenDisplay(); below. */
+@@ -4525,7 +4738,7 @@
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:4529: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:4742: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_XOpenDisplay=yes"
+ else
+@@ -4544,7 +4757,7 @@
+ echo "$ac_t""no" 1>&6
+
+ echo $ac_n "checking for XOpenDisplay in -lX11""... $ac_c" 1>&6
+-echo "configure:4548: checking for XOpenDisplay in -lX11" >&5
++echo "configure:4761: checking for XOpenDisplay in -lX11" >&5
+ ac_lib_var=`echo X11'_'XOpenDisplay | sed 'y%./+-%__p_%'`
+ if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+@@ -4552,7 +4765,7 @@
+ ac_save_LIBS="$LIBS"
+ LIBS="-lX11 $X_PRE_LIBS $LIBS $X_EXTRA_LIBS $LIBS"
+ cat > conftest.$ac_ext <<EOF
+-#line 4556 "configure"
++#line 4769 "configure"
+ #include "confdefs.h"
+ /* Override any gcc2 internal prototype to avoid an error. */
+ /* We use char because int might match the return type of a gcc2
+@@ -4563,7 +4776,7 @@
+ XOpenDisplay()
+ ; return 0; }
+ EOF
+-if { (eval echo configure:4567: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:4780: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+ else
+@@ -4587,12 +4800,12 @@
+
+
+ echo $ac_n "checking for XtAppInitialize""... $ac_c" 1>&6
+-echo "configure:4591: checking for XtAppInitialize" >&5
++echo "configure:4804: checking for XtAppInitialize" >&5
+ if eval "test \"`echo '$''{'ac_cv_func_XtAppInitialize'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 4596 "configure"
++#line 4809 "configure"
+ #include "confdefs.h"
+ /* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char XtAppInitialize(); below. */
+@@ -4615,7 +4828,7 @@
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:4619: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:4832: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_XtAppInitialize=yes"
+ else
+@@ -4634,7 +4847,7 @@
+ echo "$ac_t""no" 1>&6
+
+ echo $ac_n "checking for XtAppInitialize in -lXt""... $ac_c" 1>&6
+-echo "configure:4638: checking for XtAppInitialize in -lXt" >&5
++echo "configure:4851: checking for XtAppInitialize in -lXt" >&5
+ ac_lib_var=`echo Xt'_'XtAppInitialize | sed 'y%./+-%__p_%'`
+ if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+@@ -4642,7 +4855,7 @@
+ ac_save_LIBS="$LIBS"
+ LIBS="-lXt $X_PRE_LIBS $LIBS $X_EXTRA_LIBS $LIBS"
+ cat > conftest.$ac_ext <<EOF
+-#line 4646 "configure"
++#line 4859 "configure"
+ #include "confdefs.h"
+ /* Override any gcc2 internal prototype to avoid an error. */
+ /* We use char because int might match the return type of a gcc2
+@@ -4653,7 +4866,7 @@
+ XtAppInitialize()
+ ; return 0; }
+ EOF
+-if { (eval echo configure:4657: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:4870: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+ else
+@@ -4696,17 +4909,17 @@
+ do
+ ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+ echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+-echo "configure:4700: checking for $ac_hdr" >&5
++echo "configure:4913: checking for $ac_hdr" >&5
+ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 4705 "configure"
++#line 4918 "configure"
+ #include "confdefs.h"
+ #include <$ac_hdr>
+ EOF
+ ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+-{ (eval echo configure:4710: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++{ (eval echo configure:4923: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+ if test -z "$ac_err"; then
+ rm -rf conftest*
+@@ -4737,7 +4950,7 @@
+ cf_x_athena=${cf_x_athena-Xaw}
+
+ echo $ac_n "checking if you want to link with Xaw 3d library""... $ac_c" 1>&6
+-echo "configure:4741: checking if you want to link with Xaw 3d library" >&5
++echo "configure:4954: checking if you want to link with Xaw 3d library" >&5
+ withval=
+
+ # Check whether --with-Xaw3d or --without-Xaw3d was given.
+@@ -4754,7 +4967,7 @@
+ fi
+
+ echo $ac_n "checking if you want to link with neXT Athena library""... $ac_c" 1>&6
+-echo "configure:4758: checking if you want to link with neXT Athena library" >&5
++echo "configure:4971: checking if you want to link with neXT Athena library" >&5
+ withval=
+
+ # Check whether --with-neXtaw or --without-neXtaw was given.
+@@ -4771,7 +4984,7 @@
+ fi
+
+ echo $ac_n "checking if you want to link with Athena-Plus library""... $ac_c" 1>&6
+-echo "configure:4775: checking if you want to link with Athena-Plus library" >&5
++echo "configure:4988: checking if you want to link with Athena-Plus library" >&5
+ withval=
+
+ # Check whether --with-XawPlus or --without-XawPlus was given.
+@@ -4788,7 +5001,7 @@
+ fi
+
+ echo $ac_n "checking for XextCreateExtension in -lXext""... $ac_c" 1>&6
+-echo "configure:4792: checking for XextCreateExtension in -lXext" >&5
++echo "configure:5005: checking for XextCreateExtension in -lXext" >&5
+ ac_lib_var=`echo Xext'_'XextCreateExtension | sed 'y%./+-%__p_%'`
+ if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+@@ -4796,7 +5009,7 @@
+ ac_save_LIBS="$LIBS"
+ LIBS="-lXext $LIBS"
+ cat > conftest.$ac_ext <<EOF
+-#line 4800 "configure"
++#line 5013 "configure"
+ #include "confdefs.h"
+ /* Override any gcc2 internal prototype to avoid an error. */
+ /* We use char because int might match the return type of a gcc2
+@@ -4807,7 +5020,7 @@
+ XextCreateExtension()
+ ; return 0; }
+ EOF
+-if { (eval echo configure:4811: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:5024: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+ else
+@@ -4846,13 +5059,13 @@
+ if test $cf_path != default ; then
+ CPPFLAGS="-I$cf_path/include $cf_save"
+ echo $ac_n "checking for $cf_test in $cf_path""... $ac_c" 1>&6
+-echo "configure:4850: checking for $cf_test in $cf_path" >&5
++echo "configure:5063: checking for $cf_test in $cf_path" >&5
+ else
+ echo $ac_n "checking for $cf_test""... $ac_c" 1>&6
+-echo "configure:4853: checking for $cf_test" >&5
++echo "configure:5066: checking for $cf_test" >&5
+ fi
+ cat > conftest.$ac_ext <<EOF
+-#line 4856 "configure"
++#line 5069 "configure"
+ #include "confdefs.h"
+
+ #include <X11/Intrinsic.h>
+@@ -4861,7 +5074,7 @@
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:4865: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:5078: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ cf_result=yes
+ else
+@@ -4908,23 +5121,23 @@
+ if test $cf_path != default ; then
+ LIBS="-L$cf_path/lib $cf_lib $LIBS"
+ echo $ac_n "checking for $cf_lib in $cf_path""... $ac_c" 1>&6
+-echo "configure:4912: checking for $cf_lib in $cf_path" >&5
++echo "configure:5125: checking for $cf_lib in $cf_path" >&5
+ else
+ LIBS="$cf_lib $LIBS"
+ echo $ac_n "checking for $cf_test in $cf_lib""... $ac_c" 1>&6
+-echo "configure:4916: checking for $cf_test in $cf_lib" >&5
++echo "configure:5129: checking for $cf_test in $cf_lib" >&5
+ fi
+ cf_SAVE="$LIBS"
+ LIBS="$X_PRE_LIBS $LIBS $X_EXTRA_LIBS"
+ cat > conftest.$ac_ext <<EOF
+-#line 4921 "configure"
++#line 5134 "configure"
+ #include "confdefs.h"
+
+ int main() {
+ $cf_test()
+ ; return 0; }
+ EOF
+-if { (eval echo configure:4928: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:5141: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ cf_result=yes
+ else
+@@ -4961,13 +5174,13 @@
+
+
+ echo $ac_n "checking for declaration of fd_set""... $ac_c" 1>&6
+-echo "configure:4965: checking for declaration of fd_set" >&5
++echo "configure:5178: checking for declaration of fd_set" >&5
+ if eval "test \"`echo '$''{'cf_cv_type_fd_set'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ echo "trying sys/types alone" 1>&5
+ cat > conftest.$ac_ext <<EOF
+-#line 4971 "configure"
++#line 5184 "configure"
+ #include "confdefs.h"
+
+ #include <sys/types.h>
+@@ -4975,7 +5188,7 @@
+ fd_set x
+ ; return 0; }
+ EOF
+-if { (eval echo configure:4979: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:5192: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ cf_cv_type_fd_set=sys/types.h
+ else
+@@ -4984,7 +5197,7 @@
+ rm -rf conftest*
+ echo "trying X11/Xpoll.h" 1>&5
+ cat > conftest.$ac_ext <<EOF
+-#line 4988 "configure"
++#line 5201 "configure"
+ #include "confdefs.h"
+
+ #ifdef HAVE_X11_XPOLL_H
+@@ -4994,7 +5207,7 @@
+ fd_set x
+ ; return 0; }
+ EOF
+-if { (eval echo configure:4998: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:5211: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ cf_cv_type_fd_set=X11/Xpoll.h
+ else
+@@ -5003,7 +5216,7 @@
+ rm -rf conftest*
+ echo "trying sys/select.h" 1>&5
+ cat > conftest.$ac_ext <<EOF
+-#line 5007 "configure"
++#line 5220 "configure"
+ #include "confdefs.h"
+
+ #include <sys/types.h>
+@@ -5012,7 +5225,7 @@
+ fd_set x
+ ; return 0; }
+ EOF
+-if { (eval echo configure:5016: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:5229: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ cf_cv_type_fd_set=sys/select.h
+ else
+@@ -5038,13 +5251,13 @@
+
+
+ echo $ac_n "checking for IRIX 6.5 baud-rate redefinitions""... $ac_c" 1>&6
+-echo "configure:5042: checking for IRIX 6.5 baud-rate redefinitions" >&5
++echo "configure:5255: checking for IRIX 6.5 baud-rate redefinitions" >&5
+ if eval "test \"`echo '$''{'cf_cv_termio_c_ispeed'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+
+ cat > conftest.$ac_ext <<EOF
+-#line 5048 "configure"
++#line 5261 "configure"
+ #include "confdefs.h"
+
+ #include <sys/types.h>
+@@ -5057,7 +5270,7 @@
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:5061: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:5274: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ cf_cv_termio_c_ispeed=yes
+
+@@ -5085,7 +5298,7 @@
+ case $host_os in #(vi
+ netbsd*) # 2004/8/15 - revisit this if/when grantpt is known to work.
+ echo $ac_n "checking for openpty in -lutil""... $ac_c" 1>&6
+-echo "configure:5089: checking for openpty in -lutil" >&5
++echo "configure:5302: checking for openpty in -lutil" >&5
+ ac_lib_var=`echo util'_'openpty | sed 'y%./+-%__p_%'`
+ if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+@@ -5093,7 +5306,7 @@
+ ac_save_LIBS="$LIBS"
+ LIBS="-lutil $LIBS"
+ cat > conftest.$ac_ext <<EOF
+-#line 5097 "configure"
++#line 5310 "configure"
+ #include "confdefs.h"
+ /* Override any gcc2 internal prototype to avoid an error. */
+ /* We use char because int might match the return type of a gcc2
+@@ -5104,7 +5317,7 @@
+ openpty()
+ ; return 0; }
+ EOF
+-if { (eval echo configure:5108: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:5321: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+ else
+@@ -5136,12 +5349,12 @@
+ for ac_func in grantpt
+ do
+ echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+-echo "configure:5140: checking for $ac_func" >&5
++echo "configure:5353: checking for $ac_func" >&5
+ if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 5145 "configure"
++#line 5358 "configure"
+ #include "confdefs.h"
+ /* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+@@ -5164,7 +5377,7 @@
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:5168: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:5381: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+ else
+@@ -5186,7 +5399,7 @@
+ else
+ echo "$ac_t""no" 1>&6
+ echo $ac_n "checking for openpty in -lutil""... $ac_c" 1>&6
+-echo "configure:5190: checking for openpty in -lutil" >&5
++echo "configure:5403: checking for openpty in -lutil" >&5
+ ac_lib_var=`echo util'_'openpty | sed 'y%./+-%__p_%'`
+ if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+@@ -5194,7 +5407,7 @@
+ ac_save_LIBS="$LIBS"
+ LIBS="-lutil $LIBS"
+ cat > conftest.$ac_ext <<EOF
+-#line 5198 "configure"
++#line 5411 "configure"
+ #include "confdefs.h"
+ /* Override any gcc2 internal prototype to avoid an error. */
+ /* We use char because int might match the return type of a gcc2
+@@ -5205,7 +5418,7 @@
+ openpty()
+ ; return 0; }
+ EOF
+-if { (eval echo configure:5209: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:5422: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+ else
+@@ -5241,7 +5454,7 @@
+ # Extract the first word of "xterm", so it can be a program name with args.
+ set dummy xterm; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:5245: checking for $ac_word" >&5
++echo "configure:5458: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_path_XTERM_PATH'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -5276,13 +5489,13 @@
+
+
+ echo $ac_n "checking for XKB Bell extension""... $ac_c" 1>&6
+-echo "configure:5280: checking for XKB Bell extension" >&5
++echo "configure:5493: checking for XKB Bell extension" >&5
+ if eval "test \"`echo '$''{'cf_cv_xkb_bell_ext'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+
+ cat > conftest.$ac_ext <<EOF
+-#line 5286 "configure"
++#line 5499 "configure"
+ #include "confdefs.h"
+
+ #include <X11/XKBlib.h> /* has the prototype */
+@@ -5298,7 +5511,7 @@
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:5302: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:5515: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ cf_cv_xkb_bell_ext=yes
+ else
+@@ -5321,12 +5534,12 @@
+ for ac_func in Xutf8LookupString
+ do
+ echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+-echo "configure:5325: checking for $ac_func" >&5
++echo "configure:5538: checking for $ac_func" >&5
+ if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 5330 "configure"
++#line 5543 "configure"
+ #include "confdefs.h"
+ /* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+@@ -5349,7 +5562,7 @@
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:5353: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:5566: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+ else
+@@ -5380,7 +5593,7 @@
+
+
+ echo $ac_n "checking if we should use imake to help""... $ac_c" 1>&6
+-echo "configure:5384: checking if we should use imake to help" >&5
++echo "configure:5597: checking if we should use imake to help" >&5
+
+ # Check whether --enable-imake or --disable-imake was given.
+ if test "${enable_imake+set}" = set; then
+@@ -5405,7 +5618,7 @@
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:5409: checking for $ac_word" >&5
++echo "configure:5622: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_path_IMAKE'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -5561,6 +5774,16 @@
+ fi
+ fi
+
++# Some imake configurations define PROJECTROOT with an empty value. Remove
++# the empty definition.
++case $IMAKE_CFLAGS in
++*-DPROJECTROOT=/*)
++ ;;
++*)
++ IMAKE_CFLAGS=`echo "$IMAKE_CFLAGS" |sed -e "s,-DPROJECTROOT=[ ], ,"`
++ ;;
++esac
++
+ test -n "$verbose" && echo " IMAKE_CFLAGS $IMAKE_CFLAGS" 1>&6
+
+ test -n "$verbose" && echo " IMAKE_LOADFLAGS $IMAKE_LOADFLAGS" 1>&6
+@@ -5745,7 +5968,7 @@
+
+
+ echo $ac_n "checking for default terminal-id""... $ac_c" 1>&6
+-echo "configure:5749: checking for default terminal-id" >&5
++echo "configure:5972: checking for default terminal-id" >&5
+
+ # Check whether --with-terminal-id or --without-terminal-id was given.
+ if test "${with_terminal_id+set}" = set; then
+@@ -5766,7 +5989,7 @@
+
+
+ echo $ac_n "checking for default terminal-type""... $ac_c" 1>&6
+-echo "configure:5770: checking for default terminal-type" >&5
++echo "configure:5993: checking for default terminal-type" >&5
+
+ # Check whether --with-terminal-type or --without-terminal-type was given.
+ if test "${with_terminal_type+set}" = set; then
+@@ -5783,7 +6006,7 @@
+
+
+ echo $ac_n "checking for private terminfo-directory""... $ac_c" 1>&6
+-echo "configure:5787: checking for private terminfo-directory" >&5
++echo "configure:6010: checking for private terminfo-directory" >&5
+
+ # Check whether --with-own-terminfo or --without-own-terminfo was given.
+ if test "${with_own_terminfo+set}" = set; then
+@@ -5824,7 +6047,7 @@
+
+
+ echo $ac_n "checking if you want active-icons""... $ac_c" 1>&6
+-echo "configure:5828: checking if you want active-icons" >&5
++echo "configure:6051: checking if you want active-icons" >&5
+
+ # Check whether --enable-active-icon or --disable-active-icon was given.
+ if test "${enable_active_icon+set}" = set; then
+@@ -5850,7 +6073,7 @@
+ fi
+
+ echo $ac_n "checking if you want ANSI color""... $ac_c" 1>&6
+-echo "configure:5854: checking if you want ANSI color" >&5
++echo "configure:6077: checking if you want ANSI color" >&5
+
+ # Check whether --enable-ansi-color or --disable-ansi-color was given.
+ if test "${enable_ansi_color+set}" = set; then
+@@ -5876,7 +6099,7 @@
+ if test "$enable_ansi_color" = yes ; then
+
+ echo $ac_n "checking if you want 16 colors like aixterm""... $ac_c" 1>&6
+-echo "configure:5880: checking if you want 16 colors like aixterm" >&5
++echo "configure:6103: checking if you want 16 colors like aixterm" >&5
+
+ # Check whether --enable-16-color or --disable-16-color was given.
+ if test "${enable_16_color+set}" = set; then
+@@ -5900,7 +6123,7 @@
+
+
+ echo $ac_n "checking if you want 256 colors""... $ac_c" 1>&6
+-echo "configure:5904: checking if you want 256 colors" >&5
++echo "configure:6127: checking if you want 256 colors" >&5
+
+ # Check whether --enable-256-color or --disable-256-color was given.
+ if test "${enable_256_color+set}" = set; then
+@@ -5927,7 +6150,7 @@
+
+ else
+ echo $ac_n "checking if you want 88 colors""... $ac_c" 1>&6
+-echo "configure:5931: checking if you want 88 colors" >&5
++echo "configure:6154: checking if you want 88 colors" >&5
+
+ # Check whether --enable-88-color or --disable-88-color was given.
+ if test "${enable_88_color+set}" = set; then
+@@ -5958,7 +6181,7 @@
+ fi
+
+ echo $ac_n "checking if you want blinking cursor""... $ac_c" 1>&6
+-echo "configure:5962: checking if you want blinking cursor" >&5
++echo "configure:6185: checking if you want blinking cursor" >&5
+
+ # Check whether --enable-blink-cursor or --disable-blink-cursor was given.
+ if test "${enable_blink_cursor+set}" = set; then
+@@ -5982,7 +6205,7 @@
+
+
+ echo $ac_n "checking if you want to ignore Linux's broken palette-strings""... $ac_c" 1>&6
+-echo "configure:5986: checking if you want to ignore Linux's broken palette-strings" >&5
++echo "configure:6209: checking if you want to ignore Linux's broken palette-strings" >&5
+
+ case $host_os in #(vi
+ linux*)
+@@ -6021,7 +6244,7 @@
+ fi
+
+ echo $ac_n "checking if you want to allow broken string-terminators""... $ac_c" 1>&6
+-echo "configure:6025: checking if you want to allow broken string-terminators" >&5
++echo "configure:6248: checking if you want to allow broken string-terminators" >&5
+
+ # Check whether --enable-broken-st or --disable-broken-st was given.
+ if test "${enable_broken_st+set}" = set; then
+@@ -6045,7 +6268,7 @@
+
+
+ echo $ac_n "checking if you want printable 128-159""... $ac_c" 1>&6
+-echo "configure:6049: checking if you want printable 128-159" >&5
++echo "configure:6272: checking if you want printable 128-159" >&5
+
+ # Check whether --enable-c1-print or --disable-c1-print was given.
+ if test "${enable_c1_print+set}" = set; then
+@@ -6071,7 +6294,7 @@
+ if test "$enable_ansi_color" = yes ; then
+
+ echo $ac_n "checking if you want bold colors mapped like IBM PC""... $ac_c" 1>&6
+-echo "configure:6075: checking if you want bold colors mapped like IBM PC" >&5
++echo "configure:6298: checking if you want bold colors mapped like IBM PC" >&5
+
+ # Check whether --enable-bold-color or --disable-bold-color was given.
+ if test "${enable_bold_color+set}" = set; then
+@@ -6095,7 +6318,7 @@
+
+
+ echo $ac_n "checking if you want separate color-classes""... $ac_c" 1>&6
+-echo "configure:6099: checking if you want separate color-classes" >&5
++echo "configure:6322: checking if you want separate color-classes" >&5
+
+ # Check whether --enable-color-class or --disable-color-class was given.
+ if test "${enable_color_class+set}" = set; then
+@@ -6119,7 +6342,7 @@
+
+
+ echo $ac_n "checking if you want color-mode enabled by default""... $ac_c" 1>&6
+-echo "configure:6123: checking if you want color-mode enabled by default" >&5
++echo "configure:6346: checking if you want color-mode enabled by default" >&5
+
+ # Check whether --enable-color-mode or --disable-color-mode was given.
+ if test "${enable_color_mode+set}" = set; then
+@@ -6145,7 +6368,7 @@
+ fi
+
+ echo $ac_n "checking if you want support for color highlighting""... $ac_c" 1>&6
+-echo "configure:6149: checking if you want support for color highlighting" >&5
++echo "configure:6372: checking if you want support for color highlighting" >&5
+
+ # Check whether --enable-highlighting or --disable-highlighting was given.
+ if test "${enable_highlighting+set}" = set; then
+@@ -6169,7 +6392,7 @@
+
+
+ echo $ac_n "checking if you want support for doublesize characters""... $ac_c" 1>&6
+-echo "configure:6173: checking if you want support for doublesize characters" >&5
++echo "configure:6396: checking if you want support for doublesize characters" >&5
+
+ # Check whether --enable-doublechars or --disable-doublechars was given.
+ if test "${enable_doublechars+set}" = set; then
+@@ -6193,7 +6416,7 @@
+
+
+ echo $ac_n "checking if you want fallback-support for box characters""... $ac_c" 1>&6
+-echo "configure:6197: checking if you want fallback-support for box characters" >&5
++echo "configure:6420: checking if you want fallback-support for box characters" >&5
+
+ # Check whether --enable-boxchars or --disable-boxchars was given.
+ if test "${enable_boxchars+set}" = set; then
+@@ -6217,7 +6440,7 @@
+
+
+ echo $ac_n "checking if you want to use FreeType library""... $ac_c" 1>&6
+-echo "configure:6221: checking if you want to use FreeType library" >&5
++echo "configure:6444: checking if you want to use FreeType library" >&5
+
+ # Check whether --enable-freetype or --disable-freetype was given.
+ if test "${enable_freetype+set}" = set; then
+@@ -6241,7 +6464,7 @@
+ # Extract the first word of "xft-config", so it can be a program name with args.
+ set dummy xft-config; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:6245: checking for $ac_word" >&5
++echo "configure:6468: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_path_FREETYPE_CONFIG'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -6279,7 +6502,7 @@
+ # Extract the first word of "freetype-config", so it can be a program name with args.
+ set dummy freetype-config; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:6283: checking for $ac_word" >&5
++echo "configure:6506: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_path_FREETYPE_CONFIG'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -6327,7 +6550,7 @@
+ else
+
+ echo $ac_n "checking for X FreeType headers""... $ac_c" 1>&6
+-echo "configure:6331: checking for X FreeType headers" >&5
++echo "configure:6554: checking for X FreeType headers" >&5
+ if eval "test \"`echo '$''{'cf_cv_x_freetype_incs'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -6351,7 +6574,7 @@
+ else
+
+ echo $ac_n "checking for X FreeType libraries""... $ac_c" 1>&6
+-echo "configure:6355: checking for X FreeType libraries" >&5
++echo "configure:6578: checking for X FreeType libraries" >&5
+ if eval "test \"`echo '$''{'cf_cv_x_freetype_libs'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -6366,7 +6589,7 @@
+ CPPFLAGS="$cf_cv_x_freetype_incs $CPPFLAGS"
+
+ cat > conftest.$ac_ext <<EOF
+-#line 6370 "configure"
++#line 6593 "configure"
+ #include "confdefs.h"
+
+ #include <X11/Xlib.h>
+@@ -6378,7 +6601,7 @@
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:6382: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:6605: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ :
+ else
+ echo "configure: failed program was:" >&5
+@@ -6491,7 +6714,7 @@
+ fi
+
+ echo $ac_n "checking if you want support for HP-style function keys""... $ac_c" 1>&6
+-echo "configure:6495: checking if you want support for HP-style function keys" >&5
++echo "configure:6718: checking if you want support for HP-style function keys" >&5
+
+ # Check whether --enable-hp-fkeys or --disable-hp-fkeys was given.
+ if test "${enable_hp_fkeys+set}" = set; then
+@@ -6517,7 +6740,7 @@
+ fi
+
+ echo $ac_n "checking if you want support for SCO-style function keys""... $ac_c" 1>&6
+-echo "configure:6521: checking if you want support for SCO-style function keys" >&5
++echo "configure:6744: checking if you want support for SCO-style function keys" >&5
+
+ # Check whether --enable-sco-fkeys or --disable-sco-fkeys was given.
+ if test "${enable_sco_fkeys+set}" = set; then
+@@ -6543,7 +6766,7 @@
+ fi
+
+ echo $ac_n "checking if you want support for internationalization""... $ac_c" 1>&6
+-echo "configure:6547: checking if you want support for internationalization" >&5
++echo "configure:6770: checking if you want support for internationalization" >&5
+
+ # Check whether --enable-i18n or --disable-i18n was given.
+ if test "${enable_i18n+set}" = set; then
+@@ -6569,7 +6792,7 @@
+ fi
+
+ echo $ac_n "checking if you want support for initial-erase setup""... $ac_c" 1>&6
+-echo "configure:6573: checking if you want support for initial-erase setup" >&5
++echo "configure:6796: checking if you want support for initial-erase setup" >&5
+
+ # Check whether --enable-initial-erase or --disable-initial-erase was given.
+ if test "${enable_initial_erase+set}" = set; then
+@@ -6595,7 +6818,7 @@
+ fi
+
+ echo $ac_n "checking if you want support for input-method""... $ac_c" 1>&6
+-echo "configure:6599: checking if you want support for input-method" >&5
++echo "configure:6822: checking if you want support for input-method" >&5
+
+ # Check whether --enable-input-method or --disable-input-method was given.
+ if test "${enable_input_method+set}" = set; then
+@@ -6615,13 +6838,13 @@
+ echo "$ac_t""$enable_ximp" 1>&6
+
+ echo $ac_n "checking if X libraries support input-method""... $ac_c" 1>&6
+-echo "configure:6619: checking if X libraries support input-method" >&5
++echo "configure:6842: checking if X libraries support input-method" >&5
+ if eval "test \"`echo '$''{'cf_cv_input_method'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+
+ cat > conftest.$ac_ext <<EOF
+-#line 6625 "configure"
++#line 6848 "configure"
+ #include "confdefs.h"
+
+ #include <X11/IntrinsicP.h>
+@@ -6648,7 +6871,7 @@
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:6652: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:6875: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ cf_cv_input_method=yes
+ else
+@@ -6671,7 +6894,7 @@
+ fi
+
+ echo $ac_n "checking if you want support for load-vt-fonts""... $ac_c" 1>&6
+-echo "configure:6675: checking if you want support for load-vt-fonts" >&5
++echo "configure:6898: checking if you want support for load-vt-fonts" >&5
+
+ # Check whether --enable-load-vt-fonts or --disable-load-vt-fonts was given.
+ if test "${enable_load_vt_fonts+set}" = set; then
+@@ -6697,7 +6920,7 @@
+ fi
+
+ echo $ac_n "checking if you want support for logging""... $ac_c" 1>&6
+-echo "configure:6701: checking if you want support for logging" >&5
++echo "configure:6924: checking if you want support for logging" >&5
+
+ # Check whether --enable-logging or --disable-logging was given.
+ if test "${enable_logging+set}" = set; then
+@@ -6721,7 +6944,7 @@
+ EOF
+
+ echo $ac_n "checking if you want to allow logging via a pipe""... $ac_c" 1>&6
+-echo "configure:6725: checking if you want to allow logging via a pipe" >&5
++echo "configure:6948: checking if you want to allow logging via a pipe" >&5
+
+ # Check whether --enable-logfile-exec or --disable-logfile-exec was given.
+ if test "${enable_logfile_exec+set}" = set; then
+@@ -6748,7 +6971,7 @@
+ fi
+
+ echo $ac_n "checking if you want support for iconify/maximize translations""... $ac_c" 1>&6
+-echo "configure:6752: checking if you want support for iconify/maximize translations" >&5
++echo "configure:6975: checking if you want support for iconify/maximize translations" >&5
+
+ # Check whether --enable-maximize or --disable-maximize was given.
+ if test "${enable_maximize+set}" = set; then
+@@ -6772,7 +6995,7 @@
+
+
+ echo $ac_n "checking if you want NumLock to override keyboard tables""... $ac_c" 1>&6
+-echo "configure:6776: checking if you want NumLock to override keyboard tables" >&5
++echo "configure:6999: checking if you want NumLock to override keyboard tables" >&5
+
+ # Check whether --enable-num-lock or --disable-num-lock was given.
+ if test "${enable_num_lock+set}" = set; then
+@@ -6796,7 +7019,7 @@
+
+
+ echo $ac_n "checking if you want support for pty-handshaking""... $ac_c" 1>&6
+-echo "configure:6800: checking if you want support for pty-handshaking" >&5
++echo "configure:7023: checking if you want support for pty-handshaking" >&5
+
+
+ # Check whether --enable-pty-handshake or --disable-pty-handshake was given.
+@@ -6828,7 +7051,7 @@
+ fi
+
+ echo $ac_n "checking if you want support for right-scrollbar""... $ac_c" 1>&6
+-echo "configure:6832: checking if you want support for right-scrollbar" >&5
++echo "configure:7055: checking if you want support for right-scrollbar" >&5
+
+ # Check whether --enable-rightbar or --disable-rightbar was given.
+ if test "${enable_rightbar+set}" = set; then
+@@ -6854,7 +7077,7 @@
+ fi
+
+ echo $ac_n "checking if you want check for redundant name-change""... $ac_c" 1>&6
+-echo "configure:6858: checking if you want check for redundant name-change" >&5
++echo "configure:7081: checking if you want check for redundant name-change" >&5
+
+ # Check whether --enable-samename or --disable-samename was given.
+ if test "${enable_samename+set}" = set; then
+@@ -6878,7 +7101,7 @@
+
+
+ echo $ac_n "checking if you want support for session management""... $ac_c" 1>&6
+-echo "configure:6882: checking if you want support for session management" >&5
++echo "configure:7105: checking if you want support for session management" >&5
+
+ # Check whether --enable-session-mgt or --disable-session-mgt was given.
+ if test "${enable_session_mgt+set}" = set; then
+@@ -6902,7 +7125,7 @@
+
+
+ echo $ac_n "checking if you want to use termcap-query/report""... $ac_c" 1>&6
+-echo "configure:6906: checking if you want to use termcap-query/report" >&5
++echo "configure:7129: checking if you want to use termcap-query/report" >&5
+
+ # Check whether --enable-tcap-query or --disable-tcap-query was given.
+ if test "${enable_tcap_query+set}" = set; then
+@@ -6926,7 +7149,7 @@
+
+
+ echo $ac_n "checking if you want support for tek4014""... $ac_c" 1>&6
+-echo "configure:6930: checking if you want support for tek4014" >&5
++echo "configure:7153: checking if you want support for tek4014" >&5
+
+ # Check whether --enable-tek4014 or --disable-tek4014 was given.
+ if test "${enable_tek4014+set}" = set; then
+@@ -6956,7 +7179,7 @@
+ fi
+
+ echo $ac_n "checking if you want pulldown menus with a toolbar""... $ac_c" 1>&6
+-echo "configure:6960: checking if you want pulldown menus with a toolbar" >&5
++echo "configure:7183: checking if you want pulldown menus with a toolbar" >&5
+
+ # Check whether --enable-toolbar or --disable-toolbar was given.
+ if test "${enable_toolbar+set}" = set; then
+@@ -6982,7 +7205,7 @@
+ fi
+
+ echo $ac_n "checking if you want VT52 emulation""... $ac_c" 1>&6
+-echo "configure:6986: checking if you want VT52 emulation" >&5
++echo "configure:7209: checking if you want VT52 emulation" >&5
+
+ # Check whether --enable-vt52 or --disable-vt52 was given.
+ if test "${enable_vt52+set}" = set; then
+@@ -7005,8 +7228,34 @@
+ EOF
+
+
++echo $ac_n "checking if you want to use mini-luit/Latin9 built-in support""... $ac_c" 1>&6
++echo "configure:7233: checking if you want to use mini-luit/Latin9 built-in support" >&5
++
++# Check whether --enable-mini-luit or --disable-mini-luit was given.
++if test "${enable_mini_luit+set}" = set; then
++ enableval="$enable_mini_luit"
++ test "$enableval" != yes && enableval=no
++ if test "$enableval" != "no" ; then
++ enable_mini_luit=yes
++ else
++ enable_mini_luit=no
++ fi
++else
++ enableval=no
++ enable_mini_luit=no
++
++fi
++
++echo "$ac_t""$enable_mini_luit" 1>&6
++if test "$enable_mini_luit" = yes ; then
++ cat >> confdefs.h <<\EOF
++#define OPT_MINI_LUIT 1
++EOF
++
++fi
++
+ echo $ac_n "checking if you want to use luit""... $ac_c" 1>&6
+-echo "configure:7010: checking if you want to use luit" >&5
++echo "configure:7259: checking if you want to use luit" >&5
+
+ # Check whether --enable-luit or --disable-luit was given.
+ if test "${enable_luit+set}" = set; then
+@@ -7015,11 +7264,11 @@
+ if test "$enableval" != "no" ; then
+ enable_luit=yes
+ else
+- enable_luit=no
++ enable_luit=$enable_mini_luit
+ fi
+ else
+ enableval=no
+- enable_luit=no
++ enable_luit=$enable_mini_luit
+
+ fi
+
+@@ -7032,7 +7281,7 @@
+ fi
+
+ echo $ac_n "checking if you want wide-character support""... $ac_c" 1>&6
+-echo "configure:7036: checking if you want wide-character support" >&5
++echo "configure:7285: checking if you want wide-character support" >&5
+
+ # Check whether --enable-wide-chars or --disable-wide-chars was given.
+ if test "${enable_wide_chars+set}" = set; then
+@@ -7061,7 +7310,7 @@
+ fi
+
+ echo $ac_n "checking if you want dynamic-abbreviation support""... $ac_c" 1>&6
+-echo "configure:7065: checking if you want dynamic-abbreviation support" >&5
++echo "configure:7314: checking if you want dynamic-abbreviation support" >&5
+
+ # Check whether --enable-dec-locator or --disable-dec-locator was given.
+ if test "${enable_dec_locator+set}" = set; then
+@@ -7087,7 +7336,7 @@
+ fi
+
+ echo $ac_n "checking if you want DECterm Locator support""... $ac_c" 1>&6
+-echo "configure:7091: checking if you want DECterm Locator support" >&5
++echo "configure:7340: checking if you want DECterm Locator support" >&5
+
+ # Check whether --enable-dec-locator or --disable-dec-locator was given.
+ if test "${enable_dec_locator+set}" = set; then
+@@ -7113,7 +7362,7 @@
+ fi
+
+ echo $ac_n "checking if you want -ziconbeep option""... $ac_c" 1>&6
+-echo "configure:7117: checking if you want -ziconbeep option" >&5
++echo "configure:7366: checking if you want -ziconbeep option" >&5
+
+ # Check whether --enable-ziconbeep or --disable-ziconbeep was given.
+ if test "${enable_ziconbeep+set}" = set; then
+@@ -7140,7 +7389,7 @@
+
+
+ echo $ac_n "checking if you want debugging traces""... $ac_c" 1>&6
+-echo "configure:7144: checking if you want debugging traces" >&5
++echo "configure:7393: checking if you want debugging traces" >&5
+
+ # Check whether --enable-trace or --disable-trace was given.
+ if test "${enable_trace+set}" = set; then
+@@ -7169,7 +7418,7 @@
+
+
+ echo $ac_n "checking if you want to see long compiling messages""... $ac_c" 1>&6
+-echo "configure:7173: checking if you want to see long compiling messages" >&5
++echo "configure:7422: checking if you want to see long compiling messages" >&5
+
+ # Check whether --enable-echo or --disable-echo was given.
+ if test "${enable_echo+set}" = set; then
+@@ -7213,7 +7462,7 @@
+
+
+ echo $ac_n "checking if you want magic cookie emulation""... $ac_c" 1>&6
+-echo "configure:7217: checking if you want magic cookie emulation" >&5
++echo "configure:7466: checking if you want magic cookie emulation" >&5
+
+ # Check whether --enable-xmc-glitch or --disable-xmc-glitch was given.
+ if test "${enable_xmc_glitch+set}" = set; then
+@@ -7242,7 +7491,7 @@
+
+ if test -n "$GCC" ; then
+ echo $ac_n "checking if you want to turn on gcc warnings""... $ac_c" 1>&6
+-echo "configure:7246: checking if you want to turn on gcc warnings" >&5
++echo "configure:7495: checking if you want to turn on gcc warnings" >&5
+
+ # Check whether --enable-warnings or --disable-warnings was given.
+ if test "${enable_warnings+set}" = set; then
+@@ -7282,9 +7531,9 @@
+ if test "$GCC" = yes
+ then
+ echo "checking for $CC __attribute__ directives" 1>&6
+-echo "configure:7286: checking for $CC __attribute__ directives" >&5
++echo "configure:7535: checking for $CC __attribute__ directives" >&5
+ cat > conftest.$ac_ext <<EOF
+-#line 7288 "configure"
++#line 7537 "configure"
+ #include "confdefs.h"
+ #include "conftest.h"
+ #include "conftest.i"
+@@ -7322,7 +7571,7 @@
+ EOF
+ ;;
+ esac
+- if { (eval echo configure:7326: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++ if { (eval echo configure:7575: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ test -n "$verbose" && echo "$ac_t""... $cf_attribute" 1>&6
+ cat conftest.h >>confdefs.h
+ fi
+@@ -7338,7 +7587,7 @@
+ GCC_VERSION=none
+ if test "$GCC" = yes ; then
+ echo $ac_n "checking version of $CC""... $ac_c" 1>&6
+-echo "configure:7342: checking version of $CC" >&5
++echo "configure:7591: checking version of $CC" >&5
+ GCC_VERSION="`${CC} --version|sed -e '2,$d' -e 's/^[^0-9.]*//' -e 's/[^0-9.].*//'`"
+ test -z "$GCC_VERSION" && GCC_VERSION=unknown
+ echo "$ac_t""$GCC_VERSION" 1>&6
+@@ -7349,11 +7598,11 @@
+ if test "$GCC" = yes
+ then
+ cat > conftest.$ac_ext <<EOF
+-#line 7353 "configure"
++#line 7602 "configure"
+ int main(int argc, char *argv[]) { return (argv[argc-1] == 0) ; }
+ EOF
+ echo "checking for $CC warning options" 1>&6
+-echo "configure:7357: checking for $CC warning options" >&5
++echo "configure:7606: checking for $CC warning options" >&5
+ cf_save_CFLAGS="$CFLAGS"
+ EXTRA_CFLAGS="-W -Wall"
+ cf_warn_CONST=""
+@@ -7369,10 +7618,10 @@
+ Wpointer-arith \
+ Wshadow \
+ Wstrict-prototypes \
+- Wundef $cf_warn_CONST
++ Wundef $cf_warn_CONST
+ do
+ CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
+- if { (eval echo configure:7376: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++ if { (eval echo configure:7625: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ test -n "$verbose" && echo "$ac_t""... -$cf_opt" 1>&6
+ case $cf_opt in #(vi
+ Wcast-qual) #(vi
+@@ -7565,6 +7814,7 @@
+ s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
+ s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
+ s%@INSTALL_DATA@%$INSTALL_DATA%g
++s%@LINT@%$LINT%g
+ s%@EXTRA_CPPFLAGS@%$EXTRA_CPPFLAGS%g
+ s%@EXEEXT@%$EXEEXT%g
+ s%@OBJEXT@%$OBJEXT%g
+Index: xc/programs/xterm/configure.in
+diff -u xc/programs/xterm/configure.in:1.4 xc/programs/xterm/configure.in:1.4.2.1
+--- xc/programs/xterm/configure.in:1.4 Fri Aug 20 18:46:39 2004
++++ xc/programs/xterm/configure.in Wed Jan 12 21:45:10 2005
+@@ -1,6 +1,6 @@
+-dnl $XTermId: configure.in,v 1.170 2004/08/15 21:07:59 tom Exp $
++dnl $XTermId: configure.in,v 1.175 2004/12/01 01:27:46 tom Exp $
+ dnl
+-dnl $XFree86: xc/programs/xterm/configure.in,v 3.66 2004/08/15 21:07:59 dickey Exp $
++dnl $XFree86: xc/programs/xterm/configure.in,v 3.67 2004/12/01 01:27:46 dickey Exp $
+ dnl
+ dnl ---------------------------------------------------------------------------
+ dnl
+@@ -52,11 +52,18 @@
+ AC_PROG_AWK
+ AC_PROG_INSTALL
+ AC_ARG_PROGRAM
++AC_CHECK_PROGS(LINT, tdlint lint alint)
+
+ ### checks for UNIX variants that set C preprocessor variables
+ AC_AIX
+ AC_ISC_POSIX
+
++### checks for compiler characteristics
++CF_ANSI_CC_CHECK
++AC_CONST
++CF_PROG_EXT
++CF_XOPEN_SOURCE
++
+ ### checks for header files
+ AC_CHECK_HEADERS( \
+ ncurses/term.h \
+@@ -101,17 +108,11 @@
+ CF_ERRNO
+ CF_TTY_GROUP
+
+-### checks for compiler characteristics
+-CF_ANSI_CC_CHECK
+-AC_CONST
+-CF_PROG_EXT
+-
+ ### checks for system services and user specified options
+
+ CF_POSIX_WAIT
+ CF_SYSV
+ CF_SVR4
+-CF_GNU_SOURCE
+ CF_X_TOOLKIT
+
+ AC_CHECK_HEADERS( \
+@@ -539,11 +540,21 @@
+ AC_MSG_RESULT($enable_vt52)
+ test "$enable_vt52" = no && AC_DEFINE(OPT_VT52_MODE,0)
+
++AC_MSG_CHECKING(if you want to use mini-luit/Latin9 built-in support)
++CF_ARG_ENABLE(mini-luit,
++ [ --enable-mini-luit enable mini-luit (built-in Latin9 support)],
++ [enable_mini_luit=yes],
++ [enable_mini_luit=no])
++AC_MSG_RESULT($enable_mini_luit)
++if test "$enable_mini_luit" = yes ; then
++ AC_DEFINE(OPT_MINI_LUIT,1)
++fi
++
+ AC_MSG_CHECKING(if you want to use luit)
+ CF_ARG_ENABLE(luit,
+ [ --enable-luit enable luit filter (Unicode translation)],
+ [enable_luit=yes],
+- [enable_luit=no])
++ [enable_luit=$enable_mini_luit])
+ AC_MSG_RESULT($enable_luit)
+ if test "$enable_luit" = yes ; then
+ AC_DEFINE(OPT_LUIT_PROG,1)
+Index: xc/programs/xterm/ctlseqs.ms
+diff -u xc/programs/xterm/ctlseqs.ms:1.1 xc/programs/xterm/ctlseqs.ms:1.1.2.1
+--- xc/programs/xterm/ctlseqs.ms:1.1 Fri Aug 13 12:57:20 2004
++++ xc/programs/xterm/ctlseqs.ms Wed Jan 12 21:45:10 2005
+@@ -1,13 +1,13 @@
+ .\"#! troff -ms $1 -*- Nroff -*-
+ .\" "Xterm Control Sequences" document
+-.\" $XTermId: ctlseqs.ms,v 1.143 2004/07/20 01:16:47 tom Exp $
++.\" $XTermId: ctlseqs.ms,v 1.147 2004/12/01 01:27:44 tom Exp $
+ .\"
+ .\"
+ .\" $Xorg: ctlseqs.ms,v 1.3 2000/08/17 19:42:51 cpqbld Exp $
+ .\"
+ .\"
+ .\"
+-.\" $XFree86: xc/doc/specs/xterm/ctlseqs.ms,v 3.53 2004/07/20 01:16:47 dickey Exp $
++.\" $XFree86: xc/doc/specs/xterm/ctlseqs.ms,v 3.54 2004/12/01 01:27:44 dickey Exp $
+ .\"
+ .\"
+ .\" Copyright 1996-2003,2004 by Thomas E. Dickey
+@@ -161,7 +161,6 @@
+ .[] Us \v'-1p'\s\nsUS\s0\v'1p'
+ .[] XX \v'-1p'\s\nsXX\s0\v'1p'
+ .[] $ $
+-.[] ! !
+ .[] # #
+ .[] % %
+ .[] (( (
+@@ -365,7 +364,7 @@
+ .ds RH VT100 Mode
+ .LP
+ Most of these control sequences are standard VT102 control sequences,
+-but there is support for later DEC VT terminals (i.e., VT220 and VT320),
++but there is support for later DEC VT terminals (i.e., VT220, VT320, VT420),
+ as well as ISO 6429 and \fIaixterm\fP color controls.
+ The only VT102 features not supported is auto-repeat,
+ since the only way X provides for this will affect all windows.
+@@ -749,6 +748,7 @@
+ \*(Ps = \*8 \(-> Auto-repeat Keys (DECARM)
+ \*(Ps = \*9 \(-> Send Mouse X & Y on button press.
+ See the section \fBMouse Tracking\fP.
++ \*(Ps = \*1\*0 \(-> Show toolbar (rxvt)
+ \*(Ps = \*1\*2 \(-> Start Blinking Cursor (att610)
+ \*(Ps = \*1\*8 \(-> Print form feed (DECPFF)
+ \*(Ps = \*1\*9 \(-> Set print extent to full screen (DECPEX)
+@@ -825,6 +825,7 @@
+ \*(Ps = \*7 \(-> No Wraparound Mode (DECAWM)
+ \*(Ps = \*8 \(-> No Auto-repeat Keys (DECARM)
+ \*(Ps = \*9 \(-> Don't Send Mouse X & Y on button press
++ \*(Ps = \*1\*0 \(-> Hide toolbar (rxvt)
+ \*(Ps = \*1\*2 \(-> Stop Blinking Cursor (att610)
+ \*(Ps = \*1\*8 \(-> Don't print form feed (DECPFF)
+ \*(Ps = \*1\*9 \(-> Limit print to scrolling region (DECPEX)
+@@ -962,7 +963,7 @@
+ .br
+ \*(Cs\*?\*5\*0\*s\*n No Locator, if not.
+ .
+-.IP \\*(Cs\\*s\\*!\\*p
++.IP \\*(Cs\\*!\\*p
+ Soft terminal reset (DECSTR)
+ .
+ .IP \\*(Cs\\*(Ps\\*s\\*;\\*(Ps\\*s\\*(c"\\*p
+@@ -991,6 +992,11 @@
+ Restore DEC Private Mode Values. The value of \*(Ps previously saved is
+ restored. \*(Ps values are the same as for DECSET.
+ .
++.IP \\*(Cs\\*(Pt\\*;\\*(Pl\\*;\\*(Pb\\*;\\*(Pr\\*;\\*(Ps\\*$\\*r
++Change Attributes in Rectangular Area (DECCARA).
++ \*(Pt\*;\*(Pl\*;\*(Pb\*;\*(Pr denotes the rectangle.
++ \*(Ps denotes the SGR attributes to change: 0, 1, 4, 5, 7
++.
+ .IP \\*(Cs\\*(cs
+ Save cursor (ANSI.SYS)
+ .
+@@ -1027,9 +1033,21 @@
+ \*(Os\*s\*l\*s\fItitle\fP\*s\*(ST
+ \*(Ps >= \*2\*4 \(-> Resize to \*(Ps lines (DECSLPP)
+ .
++.IP \\*(Cs\\*(Pt\\*;\\*(Pl\\*;\\*(Pb\\*;\\*(Pr\\*;\\*(Ps\\*$\\*t
++Reverse Attributes in Rectangular Area (DECRARA).
++ \*(Pt\*;\*(Pl\*;\*(Pb\*;\*(Pr denotes the rectangle.
++ \*(Ps denotes the attributes to reverse. 1, 4, 5, 7
++.
+ .IP \\*(Cs\\*u
+ Save cursor (ANSI.SYS)
+ .
++.IP \\*(Cs\\*(Pt\\*;\\*(Pl\\*;\\*(Pb\\*;\\*(Pr\\*;\\*(Pp\\*;\\*(Pt\\*;\\*(Pl\\*;\\*(Pp\\*$\\*v
++Copy Rectangular Area (DECCRA)
++ \*(Pt\*;\*(Pl\*;\*(Pb\*;\*(Pr denotes the rectangle.
++ \*(Pp denotes the source page.
++ \*(Pt\*;\*(Pl denotes the target location.
++ \*(Pp denotes the target page.
++.
+ .IP \\*(Cs\\*(Pt\\*s\\*;\\*(Pl\\*s\\*;\\*(Pb\\*s\\*;\\*(Pr\\*s\\*(qu\\*w
+ Enable Filter Rectangle (DECEFR)
+ .br
+@@ -1057,6 +1075,17 @@
+ \*1 \(-> clock multiplier
+ \*0 \(-> STP flags
+ .
++.IP \\*(Cs\\*(Ps\\*s\\*x
++Select Attribute Change Extent (DECSACE).
++ \*(Ps = \*0 \(-> from start to end position, wrapped
++ \*(Ps = \*1 \(-> from start to end position, wrapped
++ \*(Ps = \*2 \(-> rectangle (exact).
++.
++.IP \\*(Cs\\*(Pc\\*;\\*(Pt\\*;\\*(Pl\\*;\\*(Pb\\*;\\*(Pr\\*$\\*x
++Fill Rectangular Area (DECFRA).
++ \*(Pc is the character to use.
++ \*(Pt\*;\*(Pl\*;\*(Pb\*;\*(Pr denotes the rectangle.
++.
+ .IP \\*(Cs\\*(Ps\\*s\\*;\\*(Pu\\*s\\*(qu\\*z
+ Enable Locator Reporting (DECELR)
+ .br
+@@ -1072,6 +1101,10 @@
+ \*(Pu = \*1 \(-> device physical pixels
+ \*(Pu = \*2 \(-> character cells
+ .
++.IP \\*(Cs\\*(Pt\\*;\\*(Pl\\*;\\*(Pb\\*;\\*(Pr\\*$\\*z
++Erase Rectangular Area (DECERA).
++ \*(Pt\*;\*(Pl\*;\*(Pb\*;\*(Pr denotes the rectangle.
++.
+ .IP \\*(Cs\\*(Pm\\*s\\*(qu\\*{
+ Select Locator Events (DECSLE)
+ .br
+@@ -1083,6 +1116,10 @@
+ \*(Ps = \*3 \(-> report button up transitions
+ \*(Ps = \*4 \(-> do not report button up transitions
+ .
++.IP \\*(Cs\\*(Pt\\*;\\*(Pl\\*;\\*(Pb\\*;\\*(Pr\\*$\\*{
++Selective Erase Rectangular Area (DECSERA).
++ \*(Pt\*;\*(Pl\*;\*(Pb\*;\*(Pr denotes the rectangle.
++.
+ .IP \\*(Cs\\*(Ps\\*s\\*(qu\\*|
+ Request Locator Position (DECRQLP)
+ .br
+Index: xc/programs/xterm/cursor.c
+diff -u xc/programs/xterm/cursor.c:1.3 xc/programs/xterm/cursor.c:1.3.2.1
+--- xc/programs/xterm/cursor.c:1.3 Fri Aug 13 12:57:20 2004
++++ xc/programs/xterm/cursor.c Wed Jan 12 21:45:10 2005
+@@ -1,11 +1,13 @@
++/* $XTermId: cursor.c,v 1.32 2004/12/01 01:27:46 tom Exp $ */
++
+ /*
+ * $Xorg: cursor.c,v 1.3 2000/08/17 19:55:08 cpqbld Exp $
+ */
+
+-/* $XFree86: xc/programs/xterm/cursor.c,v 3.15 2002/04/28 19:04:20 dickey Exp $ */
++/* $XFree86: xc/programs/xterm/cursor.c,v 3.16 2004/12/01 01:27:46 dickey Exp $ */
+
+ /*
+- * Copyright 2002 by Thomas E. Dickey
++ * Copyright 2002,2004 by Thomas E. Dickey
+ *
+ * All Rights Reserved
+ *
+@@ -61,55 +63,43 @@
+ #include <data.h>
+
+ /*
+- * Clear the selection if the cursor moves "before" the current position.
+- * Moving "after" is ok.
+- *
+- * That sounds fine - if the cursor really had anything direct relationship to
+- * the selection. For instance, if the cursor moved due to command line
+- * editing, it would be nice to deselect. However, what that means in practice
+- * is that a fullscreen program which scrolls back a line will (because it must
+- * temporarily reposition the cursor) clear the selection.
+- *
+- * However, it has an indirect relationship to the selection - we want to
+- * prevent the application from changing the screen contents under the
+- * highlighted region.
+- */
+-#define _CheckSelection(screen) \
+- if ((screen->cur_row < screen->endHRow) || \
+- (screen->cur_row == screen->endHRow && \
+- screen->cur_col < screen->endHCol)) \
+- DisownSelection(term);
+-
+-/*
+ * Moves the cursor to the specified position, checking for bounds.
+ * (this includes scrolling regions)
+ * The origin is considered to be 0, 0 for this procedure.
+ */
+ void
+-CursorSet(register TScreen * screen, register int row, register int col, unsigned flags)
++CursorSet(TScreen * screen, int row, int col, unsigned flags)
+ {
+- register int maxr;
++ int use_row = row;
++ int max_row;
+
+ col = (col < 0 ? 0 : col);
+ screen->cur_col = (col <= screen->max_col ? col : screen->max_col);
+- maxr = screen->max_row;
++ max_row = screen->max_row;
+ if (flags & ORIGIN) {
+- row += screen->top_marg;
+- maxr = screen->bot_marg;
++ use_row += screen->top_marg;
++ max_row = screen->bot_marg;
+ }
+- row = (row < 0 ? 0 : row);
+- screen->cur_row = (row <= maxr ? row : maxr);
++ use_row = (use_row < 0 ? 0 : use_row);
++ screen->cur_row = (use_row <= max_row ? use_row : max_row);
+ screen->do_wrap = 0;
+- _CheckSelection(screen);
++
++ TRACE(("CursorSet(%d,%d) margins [%d..%d] -> %d,%d %s\n",
++ row, col,
++ screen->top_marg,
++ screen->bot_marg,
++ screen->cur_row,
++ screen->cur_col,
++ (flags & ORIGIN ? "origin" : "normal")));
+ }
+
+ /*
+ * moves the cursor left n, no wrap around
+ */
+ void
+-CursorBack(register TScreen * screen, int n)
++CursorBack(TScreen * screen, int n)
+ {
+- register int i, j, k, rev;
++ int i, j, k, rev;
+
+ if ((rev = (term->flags & (REVERSEWRAP | WRAPAROUND)) ==
+ (REVERSEWRAP | WRAPAROUND)) != 0
+@@ -128,20 +118,18 @@
+ screen->cur_col = 0;
+ }
+ screen->do_wrap = 0;
+- _CheckSelection(screen);
+ }
+
+ /*
+ * moves the cursor forward n, no wraparound
+ */
+ void
+-CursorForward(register TScreen * screen, int n)
++CursorForward(TScreen * screen, int n)
+ {
+ screen->cur_col += n;
+ if (screen->cur_col > CurMaxCol(screen, screen->cur_row))
+ screen->cur_col = CurMaxCol(screen, screen->cur_row);
+ screen->do_wrap = 0;
+- _CheckSelection(screen);
+ }
+
+ /*
+@@ -149,9 +137,9 @@
+ * Won't pass bottom margin or bottom of screen.
+ */
+ void
+-CursorDown(register TScreen * screen, int n)
++CursorDown(TScreen * screen, int n)
+ {
+- register int max;
++ int max;
+
+ max = (screen->cur_row > screen->bot_marg ?
+ screen->max_row : screen->bot_marg);
+@@ -160,7 +148,6 @@
+ if (screen->cur_row > max)
+ screen->cur_row = max;
+ screen->do_wrap = 0;
+- _CheckSelection(screen);
+ }
+
+ /*
+@@ -168,18 +155,18 @@
+ * Won't pass top margin or top of screen.
+ */
+ void
+-CursorUp(register TScreen * screen, int n)
++CursorUp(TScreen * screen, int n)
+ {
+- register int min;
++ int min;
+
+- min = (screen->cur_row < screen->top_marg ?
+- 0 : screen->top_marg);
++ min = ((screen->cur_row < screen->top_marg)
++ ? 0
++ : screen->top_marg);
+
+ screen->cur_row -= n;
+ if (screen->cur_row < min)
+ screen->cur_row = min;
+ screen->do_wrap = 0;
+- _CheckSelection(screen);
+ }
+
+ /*
+@@ -187,9 +174,9 @@
+ * Won't leave scrolling region. No carriage return.
+ */
+ void
+-xtermIndex(register TScreen * screen, register int amount)
++xtermIndex(TScreen * screen, int amount)
+ {
+- register int j;
++ int j;
+
+ /*
+ * indexing when below scrolling region is cursor down.
+@@ -210,7 +197,7 @@
+ * Won't leave scrolling region. No carriage return.
+ */
+ void
+-RevIndex(register TScreen * screen, register int amount)
++RevIndex(TScreen * screen, int amount)
+ {
+ /*
+ * reverse indexing when above scrolling region is cursor up.
+@@ -231,21 +218,20 @@
+ * (Note: xterm doesn't implement SLH, SLL which would affect use of this)
+ */
+ void
+-CarriageReturn(register TScreen * screen)
++CarriageReturn(TScreen * screen)
+ {
+ screen->cur_col = 0;
+ screen->do_wrap = 0;
+- _CheckSelection(screen);
+ }
+
+ /*
+ * Save Cursor and Attributes
+ */
+ void
+-CursorSave(register XtermWidget tw)
++CursorSave(XtermWidget tw)
+ {
+- register TScreen *screen = &tw->screen;
+- register SavedCursor *sc = &screen->sc[screen->alternate != False];
++ TScreen *screen = &tw->screen;
++ SavedCursor *sc = &screen->sc[screen->alternate != False];
+
+ sc->saved = True;
+ sc->row = screen->cur_row;
+@@ -271,10 +257,10 @@
+ * Restore Cursor and Attributes
+ */
+ void
+-CursorRestore(register XtermWidget tw)
++CursorRestore(XtermWidget tw)
+ {
+- register TScreen *screen = &tw->screen;
+- register SavedCursor *sc = &screen->sc[screen->alternate != False];
++ TScreen *screen = &tw->screen;
++ SavedCursor *sc = &screen->sc[screen->alternate != False];
+
+ /* Restore the character sets, unless we never did a save-cursor op.
+ * In that case, we'll reset the character sets.
+Index: xc/programs/xterm/doublechr.c
+diff -u xc/programs/xterm/doublechr.c:1.3 xc/programs/xterm/doublechr.c:1.3.2.1
+--- xc/programs/xterm/doublechr.c:1.3 Fri Aug 13 12:57:20 2004
++++ xc/programs/xterm/doublechr.c Wed Jan 12 21:45:10 2005
+@@ -1,12 +1,12 @@
+-/* $XTermId: doublechr.c,v 1.33 2004/04/18 20:49:43 tom Exp $ */
++/* $XTermId: doublechr.c,v 1.35 2004/12/01 01:27:46 tom Exp $ */
+
+ /*
+- * $XFree86: xc/programs/xterm/doublechr.c,v 3.13 2004/04/18 20:49:43 dickey Exp $
++ * $XFree86: xc/programs/xterm/doublechr.c,v 3.14 2004/12/01 01:27:46 dickey Exp $
+ */
+
+ /************************************************************
+
+-Copyright 1997-2002,2003 by Thomas E. Dickey
++Copyright 1997-2003,2004 by Thomas E. Dickey
+
+ All Rights Reserved
+
+@@ -78,22 +78,21 @@
+
+ /*
+ * ScrnRefresh won't paint blanks for us if we're switching between a
+- * single-size and double-size font.
++ * single-size and double-size font. So we paint our own.
+ */
+ if (CSET_DOUBLE(oldChrSet) != CSET_DOUBLE(newChrSet)) {
+- ClearCurBackground(
+- screen,
+- CursorY(screen, currow),
+- CurCursorX(screen, currow, 0),
+- FontHeight(screen),
+- len * CurFontWidth(screen, currow));
++ ClearCurBackground(screen,
++ CursorY(screen, currow),
++ CurCursorX(screen, currow, 0),
++ FontHeight(screen),
++ len * CurFontWidth(screen, currow));
+ }
+
+ /* FIXME: do VT220 softchars allow double-sizes? */
+ memset(SCRN_BUF_CSETS(screen, currow), newChrSet, len);
+
+ screen->cur_col = 0;
+- ScrnRefresh(screen, currow, 0, 1, len, True);
++ ScrnUpdate(screen, currow, 0, 1, len, True);
+ screen->cur_col = curcol;
+ }
+ #endif
+Index: xc/programs/xterm/fontutils.c
+diff -u xc/programs/xterm/fontutils.c:1.3 xc/programs/xterm/fontutils.c:1.3.2.1
+--- xc/programs/xterm/fontutils.c:1.3 Fri Aug 13 12:57:20 2004
++++ xc/programs/xterm/fontutils.c Wed Jan 12 21:45:10 2005
+@@ -1,7 +1,7 @@
+-/* $XTermId: fontutils.c,v 1.124 2004/07/13 00:41:28 tom Exp $ */
++/* $XTermId: fontutils.c,v 1.131 2004/12/01 01:27:46 tom Exp $ */
+
+ /*
+- * $XFree86: xc/programs/xterm/fontutils.c,v 1.47 2004/07/13 00:41:28 dickey Exp $
++ * $XFree86: xc/programs/xterm/fontutils.c,v 1.48 2004/12/01 01:27:46 dickey Exp $
+ */
+
+ /************************************************************
+@@ -444,7 +444,9 @@
+ return False;
+ }
+ } else {
+- if (char2lower(*pattern++) != char2lower(*match++))
++ int p = char2lower(*pattern++);
++ int m = char2lower(*match++);
++ if (p != m)
+ return False;
+ }
+ }
+@@ -883,7 +885,7 @@
+ for (ch = 1; ch < 32; ch++) {
+ int n = ch;
+ #if OPT_WIDE_CHARS
+- if (screen->utf8_mode) {
++ if (screen->utf8_mode || screen->unicode_font) {
+ n = dec2ucs(ch);
+ if (n == UCS_REPL)
+ continue;
+@@ -1019,7 +1021,7 @@
+ TRACE(("xtermLoadVTFonts(%s, %s)\n", myName, myClass));
+
+ memset(&subresourceRec, 0, sizeof(subresourceRec));
+- XtGetSubresources((Widget) w, (XtPointer) & subresourceRec,
++ XtGetSubresources((Widget) w, (XtPointer) &subresourceRec,
+ myName, myClass,
+ font_resources,
+ (Cardinal) XtNumber(font_resources),
+@@ -1058,7 +1060,7 @@
+ HandleLoadVTFonts(Widget w GCC_UNUSED,
+ XEvent * event GCC_UNUSED,
+ String * params GCC_UNUSED,
+- Cardinal * param_count GCC_UNUSED)
++ Cardinal *param_count GCC_UNUSED)
+ {
+ char buf[80];
+ char *myName = (*param_count > 0) ? params[0] : "";
+@@ -1153,9 +1155,9 @@
+ if (norm == 0 && term->misc.face_name) {
+ XftPattern *pat, *match;
+ XftResult result;
+- int face_size = term->misc.face_size;
++ double face_size = term->misc.face_size;
+
+- TRACE(("xtermComputeFontInfo norm(face %s, size %d)\n",
++ TRACE(("xtermComputeFontInfo norm(face %s, size %f)\n",
+ term->misc.face_name,
+ term->misc.face_size));
+
+@@ -1173,14 +1175,14 @@
+ int num = screen->menu_font_sizes[fontnum];
+ int den = screen->menu_font_sizes[0];
+ face_size = (1.0 * face_size * num) / den;
+- TRACE(("scaled using %d/%d -> %d\n", num, den, face_size));
++ TRACE(("scaled using %d/%d -> %f\n", num, den, face_size));
+ }
+ #endif
+
+ pat = XftNameParse(term->misc.face_name);
+ XftPatternBuild(pat,
+ XFT_FAMILY, XftTypeString, "mono",
+- XFT_SIZE, XftTypeInteger, face_size,
++ XFT_SIZE, XftTypeDouble, face_size,
+ XFT_SPACING, XftTypeInteger, XFT_MONO,
+ (void *) 0);
+ match = XftFontMatch(dpy, DefaultScreen(dpy), pat, &result);
+@@ -1230,14 +1232,14 @@
+
+ wnorm = XftFontOpen(dpy, DefaultScreen(dpy),
+ XFT_FAMILY, XftTypeString, face_name,
+- XFT_SIZE, XftTypeInteger, face_size,
++ XFT_SIZE, XftTypeDouble, face_size,
+ XFT_SPACING, XftTypeInteger, XFT_MONO,
+ XFT_CHAR_WIDTH, XftTypeInteger, char_width,
+ (void *) 0);
+
+ wbold = XftFontOpen(dpy, DefaultScreen(dpy),
+ XFT_FAMILY, XftTypeString, face_name,
+- XFT_SIZE, XftTypeInteger, face_size,
++ XFT_SIZE, XftTypeDouble, face_size,
+ XFT_SPACING, XftTypeInteger, XFT_MONO,
+ XFT_CHAR_WIDTH, XftTypeInteger, char_width,
+ XFT_WEIGHT, XftTypeInteger, XFT_WEIGHT_BOLD,
+@@ -1283,11 +1285,15 @@
+ win->width = width - i;
+ win->height = height - j;
+
+- TRACE(("xtermComputeFontInfo fontsize %dx%d, screensize %dx%d\n",
+- FontHeight(screen),
+- FontWidth(screen),
+- Height(screen),
+- Width(screen)));
++ TRACE(("xtermComputeFontInfo window %dx%d (full %dx%d), fontsize %dx%d (asc %d, dsc %d)\n",
++ win->height,
++ win->width,
++ win->fullheight,
++ win->fullwidth,
++ win->f_height,
++ win->f_width,
++ win->f_ascent,
++ win->f_descent));
+ }
+
+ /* save this information as a side-effect for double-sized characters */
+@@ -1675,6 +1681,65 @@
+
+ XFreeGC(screen->display, gc2);
+ }
++
++#if OPT_RENDERFONT && OPT_WIDE_CHARS
++
++/*
++ * Check if the given character has a glyph known to Xft.
++ *
++ * see xc/lib/Xft/xftglyphs.c
++ */
++Bool
++xtermXftMissing(XftFont * font, int wc)
++{
++ unsigned check = XftCharIndex(term->screen.display, font, wc);
++ Bool result = False;
++
++ if (check == 0) {
++ TRACE(("missingXft %d (%d)\n", wc, ucs2dec(wc)));
++ result = True;
++ }
++ return result;
++}
++
++/*
++ * Check if the character corresponds to one of xterm's internal codes for
++ * line-drawing characters. That is only a subset of the 1-31 codes used for
++ * graphic characters. We want to know specifically about the line-drawing
++ * characters because the fonts used by Xft do not always give useful glyphs
++ * for line-drawing, and there is no reliable way to detect this.
++ */
++Bool
++xtermIsLineDrawing(int wc)
++{
++ Bool result;
++ switch (wc) {
++ case 0x0B: /* lower_right_corner */
++ case 0x0C: /* upper_right_corner */
++ case 0x0D: /* upper_left_corner */
++ case 0x0E: /* lower_left_corner */
++ case 0x0F: /* cross */
++ case 0x10: /* scan_line_1 */
++ case 0x11: /* scan_line_3 */
++ case 0x12: /* scan_line_7 */
++ case 0x13: /* scan_line_9 */
++ case 0x14: /* horizontal_line */
++ case 0x15: /* left_tee */
++ case 0x16: /* right_tee */
++ case 0x17: /* bottom_tee */
++ case 0x18: /* top_tee */
++ case 0x19: /* vertical_line */
++ result = True;
++ TRACE(("xtermIsLineDrawing %d\n", wc));
++ break;
++ default:
++ result = False;
++ break;
++ }
++ return result;
++}
++#endif /* OPT_RENDERFONT && OPT_WIDE_CHARS */
++
+ #endif /* OPT_BOX_CHARS */
+
+ #if OPT_WIDE_CHARS
+@@ -1860,7 +1925,7 @@
+ HandleLargerFont(Widget w GCC_UNUSED,
+ XEvent * event GCC_UNUSED,
+ String * params GCC_UNUSED,
+- Cardinal * param_count GCC_UNUSED)
++ Cardinal *param_count GCC_UNUSED)
+ {
+ if (term->misc.shift_fonts) {
+ TScreen *screen = &term->screen;
+@@ -1880,7 +1945,7 @@
+ HandleSmallerFont(Widget w GCC_UNUSED,
+ XEvent * event GCC_UNUSED,
+ String * params GCC_UNUSED,
+- Cardinal * param_count GCC_UNUSED)
++ Cardinal *param_count GCC_UNUSED)
+ {
+ if (term->misc.shift_fonts) {
+ TScreen *screen = &term->screen;
+@@ -1901,7 +1966,7 @@
+ HandleSetFont(Widget w GCC_UNUSED,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ int fontnum;
+ VTFontNames fonts;
+Index: xc/programs/xterm/fontutils.h
+diff -u xc/programs/xterm/fontutils.h:1.3 xc/programs/xterm/fontutils.h:1.3.2.1
+--- xc/programs/xterm/fontutils.h:1.3 Fri Aug 13 12:57:20 2004
++++ xc/programs/xterm/fontutils.h Wed Jan 12 21:45:10 2005
+@@ -1,10 +1,10 @@
+ /*
+- * $XFree86: xc/programs/xterm/fontutils.h,v 1.12 2003/10/27 01:07:57 dickey Exp $
++ * $XFree86: xc/programs/xterm/fontutils.h,v 1.13 2004/12/01 01:27:46 dickey Exp $
+ */
+
+ /************************************************************
+
+-Copyright 1998-2000,2003 by Thomas E. Dickey
++Copyright 1998-2003,2004 by Thomas E. Dickey
+
+ All Rights Reserved
+
+@@ -68,6 +68,13 @@
+ extern Bool xtermLoadVTFonts(XtermWidget w, char *aName, char *cName);
+ #endif
+
++#define xtermIsDecGraphic(ch) ((ch) > 0 && (ch) < 32)
++
++#if OPT_RENDERFONT && OPT_WIDE_CHARS
++extern Bool xtermIsLineDrawing(int /* wc */);
++extern Bool xtermXftMissing(XftFont * /* font */, int /* wc */);
++#endif
++
+ #if OPT_SHIFT_FONTS
+ extern void HandleSmallerFont PROTO_XT_ACTIONS_ARGS;
+ extern void HandleLargerFont PROTO_XT_ACTIONS_ARGS;
+Index: xc/programs/xterm/input.c
+diff -u xc/programs/xterm/input.c:1.3 xc/programs/xterm/input.c:1.3.2.1
+--- xc/programs/xterm/input.c:1.3 Fri Aug 13 12:57:20 2004
++++ xc/programs/xterm/input.c Wed Jan 12 21:45:10 2005
+@@ -2,7 +2,7 @@
+ * $Xorg: input.c,v 1.3 2000/08/17 19:55:08 cpqbld Exp $
+ */
+
+-/* $XFree86: xc/programs/xterm/input.c,v 3.70 2004/03/04 02:21:55 dickey Exp $ */
++/* $XFree86: xc/programs/xterm/input.c,v 3.71 2004/12/01 01:27:46 dickey Exp $ */
+
+ /*
+ * Copyright 1999-2003,2004 by Thomas E. Dickey
+@@ -255,47 +255,6 @@
+ #define MODIFIER_PARM /*nothing */
+ #endif
+
+-#if OPT_WIDE_CHARS
+-/* Convert a Unicode value c into a UTF-8 sequence in strbuf */
+-int
+-convertFromUTF8(unsigned long c, Char * strbuf)
+-{
+- int nbytes = 0;
+-
+- if (c < 0x80) {
+- strbuf[nbytes++] = c;
+- } else if (c < 0x800) {
+- strbuf[nbytes++] = 0xc0 | (c >> 6);
+- strbuf[nbytes++] = 0x80 | (c & 0x3f);
+- } else if (c < 0x10000) {
+- strbuf[nbytes++] = 0xe0 | (c >> 12);
+- strbuf[nbytes++] = 0x80 | ((c >> 6) & 0x3f);
+- strbuf[nbytes++] = 0x80 | (c & 0x3f);
+- } else if (c < 0x200000) {
+- strbuf[nbytes++] = 0xf0 | (c >> 18);
+- strbuf[nbytes++] = 0x80 | ((c >> 12) & 0x3f);
+- strbuf[nbytes++] = 0x80 | ((c >> 6) & 0x3f);
+- strbuf[nbytes++] = 0x80 | (c & 0x3f);
+- } else if (c < 0x4000000) {
+- strbuf[nbytes++] = 0xf8 | (c >> 24);
+- strbuf[nbytes++] = 0x80 | ((c >> 18) & 0x3f);
+- strbuf[nbytes++] = 0x80 | ((c >> 12) & 0x3f);
+- strbuf[nbytes++] = 0x80 | ((c >> 6) & 0x3f);
+- strbuf[nbytes++] = 0x80 | (c & 0x3f);
+- } else if (c < UCS_LIMIT) {
+- strbuf[nbytes++] = 0xfe | (c >> 30);
+- strbuf[nbytes++] = 0x80 | ((c >> 24) & 0x3f);
+- strbuf[nbytes++] = 0x80 | ((c >> 18) & 0x3f);
+- strbuf[nbytes++] = 0x80 | ((c >> 12) & 0x3f);
+- strbuf[nbytes++] = 0x80 | ((c >> 6) & 0x3f);
+- strbuf[nbytes++] = 0x80 | (c & 0x3f);
+- } else
+- return convertFromUTF8(UCS_REPL, strbuf);
+-
+- return nbytes;
+-}
+-#endif /* OPT_WIDE_CHARS */
+-
+ /*
+ * Determine if we use the \E[3~ sequence for Delete, or the legacy ^?. We
+ * maintain the delete_is_del value as 3 states: unspecified(2), true and
+@@ -1028,7 +987,7 @@
+ Bool result = False;
+
+ XtGetSubresources(w,
+- (XtPointer) & data,
++ (XtPointer) &data,
+ "vt100",
+ "VT100",
+ key_resources,
+@@ -1092,37 +1051,42 @@
+ int min_keycode, max_keycode, keysyms_per_keycode = 0;
+
+ if (keymap != 0) {
++ KeySym *theMap;
+
+ TRACE(("VTInitModifiers\n"));
+
+ XDisplayKeycodes(dpy, &min_keycode, &max_keycode);
+- XGetKeyboardMapping(dpy, min_keycode, (max_keycode - min_keycode + 1),
+- &keysyms_per_keycode);
+-
+- for (i = k = 0, mask = 1; i < 8; i++, mask <<= 1) {
+- for (j = 0; j < keymap->max_keypermod; j++) {
+- KeyCode code = keymap->modifiermap[k];
+- if (code != 0) {
+- KeySym keysym;
+- int l = 0;
+- do {
+- keysym = XKeycodeToKeysym(dpy, code, l);
+- l++;
+- } while (!keysym && l < keysyms_per_keycode);
+- if (keysym == XK_Num_Lock) {
+- SaveMask(num_lock);
+- } else if (keysym == XK_Alt_L) {
+- SaveMask(alt_left);
+- } else if (keysym == XK_Alt_R) {
+- SaveMask(alt_right);
+- } else if (keysym == XK_Meta_L) {
+- SaveMask(meta_left);
+- } else if (keysym == XK_Meta_R) {
+- SaveMask(meta_right);
++ theMap = XGetKeyboardMapping(dpy, min_keycode, (max_keycode -
++ min_keycode + 1),
++ &keysyms_per_keycode);
++
++ if (theMap != 0) {
++ for (i = k = 0, mask = 1; i < 8; i++, mask <<= 1) {
++ for (j = 0; j < keymap->max_keypermod; j++) {
++ KeyCode code = keymap->modifiermap[k];
++ if (code != 0) {
++ KeySym keysym;
++ int l = 0;
++ do {
++ keysym = XKeycodeToKeysym(dpy, code, l);
++ l++;
++ } while (!keysym && l < keysyms_per_keycode);
++ if (keysym == XK_Num_Lock) {
++ SaveMask(num_lock);
++ } else if (keysym == XK_Alt_L) {
++ SaveMask(alt_left);
++ } else if (keysym == XK_Alt_R) {
++ SaveMask(alt_right);
++ } else if (keysym == XK_Meta_L) {
++ SaveMask(meta_left);
++ } else if (keysym == XK_Meta_R) {
++ SaveMask(meta_right);
++ }
+ }
++ k++;
+ }
+- k++;
+ }
++ XFree(theMap);
+ }
+
+ /* Don't disable any mods if "alwaysUseMods" is true. */
+Index: xc/programs/xterm/main.c
+diff -u xc/programs/xterm/main.c:1.4 xc/programs/xterm/main.c:1.4.2.1
+--- xc/programs/xterm/main.c:1.4 Fri Aug 20 18:46:39 2004
++++ xc/programs/xterm/main.c Wed Jan 12 21:45:10 2005
+@@ -1,4 +1,4 @@
+-/* $XTermId: main.c,v 1.396 2004/08/15 21:07:59 tom Exp $ */
++/* $XTermId: main.c,v 1.404 2004/12/01 01:27:47 tom Exp $ */
+
+ #if !defined(lint) && 0
+ static char *rid = "$Xorg: main.c,v 1.7 2001/02/09 02:06:02 xorgcvs Exp $";
+@@ -91,7 +91,7 @@
+
+ ******************************************************************/
+
+-/* $XFree86: xc/programs/xterm/main.c,v 3.185 2004/08/15 21:07:59 dickey Exp $ */
++/* $XFree86: xc/programs/xterm/main.c,v 3.186 2004/12/01 01:27:47 dickey Exp $ */
+
+ /* main.c */
+
+@@ -283,6 +283,10 @@
+
+ #else
+
++#ifdef __INTERIX
++#define setpgrp setpgid
++#endif
++
+ #ifndef linux
+ #ifndef VMS
+ #ifndef USE_POSIX_TERMIOS
+@@ -295,7 +299,9 @@
+ #else
+ #include <sys/resource.h>
+ #endif
++#ifndef __INTERIX
+ #define HAS_BSD_GROUPS
++#endif
+ #endif /* !VMS */
+ #endif /* !linux */
+
+@@ -479,7 +485,10 @@
+ #define VAL_INITIAL_ERASE A2E(8)
+
+ /* choose a nice default value for speed - if we make it too low, users who
+- * mistakenly use $TERM set to vt100 will get padding delays
++ * mistakenly use $TERM set to vt100 will get padding delays. Setting it to a
++ * higher value is not useful since legacy applications (termcap) that care
++ * about padding generally store the code in a short, which does not have
++ * enough bits for the extended values.
+ */
+ #ifdef B38400 /* everyone should define this */
+ #define VAL_LINE_SPEED B38400
+@@ -589,7 +598,7 @@
+ #define TTYMODE(name) { name, sizeof(name)-1, 0, 0 }
+ static int override_tty_modes = 0;
+ /* *INDENT-OFF* */
+-struct _xttymodes {
++static struct _xttymodes {
+ char *name;
+ size_t len;
+ int set;
+@@ -860,8 +869,10 @@
+ {"-sp", "*sunKeyboard", XrmoptionNoArg, (caddr_t) "on"},
+ {"+sp", "*sunKeyboard", XrmoptionNoArg, (caddr_t) "off"},
+ #endif
++#if OPT_TEK4014
+ {"-t", "*tekStartup", XrmoptionNoArg, (caddr_t) "on"},
+ {"+t", "*tekStartup", XrmoptionNoArg, (caddr_t) "off"},
++#endif
+ {"-ti", "*decTerminalID",XrmoptionSepArg, (caddr_t) NULL},
+ {"-tm", "*ttyModes", XrmoptionSepArg, (caddr_t) NULL},
+ {"-tn", "*termName", XrmoptionSepArg, (caddr_t) NULL},
+@@ -1237,7 +1248,7 @@
+ Atom * selection GCC_UNUSED,
+ Atom * target GCC_UNUSED,
+ Atom * type GCC_UNUSED,
+- XtPointer * value GCC_UNUSED,
++ XtPointer *value GCC_UNUSED,
+ unsigned long *length GCC_UNUSED,
+ int *format GCC_UNUSED)
+ {
+@@ -1278,7 +1289,7 @@
+ DeleteWindow(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params GCC_UNUSED,
+- Cardinal * num_params GCC_UNUSED)
++ Cardinal *num_params GCC_UNUSED)
+ {
+ #if OPT_TEK4014
+ if (w == toplevel) {
+@@ -1298,7 +1309,7 @@
+ KeyboardMapping(Widget w GCC_UNUSED,
+ XEvent * event,
+ String * params GCC_UNUSED,
+- Cardinal * num_params GCC_UNUSED)
++ Cardinal *num_params GCC_UNUSED)
+ {
+ switch (event->type) {
+ case MappingNotify:
+@@ -1307,7 +1318,7 @@
+ }
+ }
+
+-XtActionsRec actionProcs[] =
++static XtActionsRec actionProcs[] =
+ {
+ {"DeleteWindow", DeleteWindow},
+ {"KeyboardMapping", KeyboardMapping},
+@@ -1822,7 +1833,7 @@
+ #endif /* OPT_SESSION_MGT */
+ XtSetErrorHandler((XtErrorHandler) 0);
+
+- XtGetApplicationResources(toplevel, (XtPointer) & resource,
++ XtGetApplicationResources(toplevel, (XtPointer) &resource,
+ application_resources,
+ XtNumber(application_resources), NULL, 0);
+ TRACE_XRES();
+@@ -3312,6 +3323,13 @@
+ /* input: nl->nl, don't ignore cr, cr->nl */
+ tio.c_iflag &= ~(INLCR | IGNCR);
+ tio.c_iflag |= ICRNL;
++#if OPT_WIDE_CHARS && defined(linux) && defined(IUTF8)
++#if OPT_LUIT_PROG
++ if (command_to_exec_with_luit == 0)
++#endif
++ if (screen->utf8_mode)
++ tio.c_iflag |= IUTF8;
++#endif
+ /* ouput: cr->cr, nl is not return, no delays, ln->cr/nl */
+ #ifndef USE_POSIX_TERMIOS
+ tio.c_oflag &=
+@@ -4212,7 +4230,8 @@
+ break;
+ default:
+ fprintf(stderr, "%s: unexpected handshake status %d\n",
+- xterm_name, handshake.status);
++ xterm_name,
++ (int) handshake.status);
+ }
+ }
+ /* close our sides of the pipes */
+@@ -4393,6 +4412,32 @@
+ set_owner(ptydev, 0, 0, 0666);
+ #endif
+ }
++#if OPT_TRACE || defined(NO_LEAKS)
++ if (n == 0) {
++ TRACE(("Freeing memory leaks\n"));
++ if (term != 0) {
++ Display *dpy = term->screen.display;
++
++ if (term->screen.sbuf_address) {
++ free(term->screen.sbuf_address);
++ TRACE(("freed screen.sbuf_address\n"));
++ }
++ if (term->screen.allbuf) {
++ free(term->screen.allbuf);
++ TRACE(("freed screen.allbuf\n"));
++ }
++ if (term->screen.xim) {
++ XCloseIM(term->screen.xim);
++ TRACE(("freed screen.xim\n"));
++ }
++ if (toplevel)
++ XtDestroyWidget(toplevel);
++ XtCloseDisplay(dpy);
++ }
++ TRACE((0));
++ }
++#endif
++
+ exit(n);
+ SIGNAL_RETURN;
+ }
+Index: xc/programs/xterm/main.h
+diff -u xc/programs/xterm/main.h:1.3 xc/programs/xterm/main.h:1.3.2.1
+--- xc/programs/xterm/main.h:1.3 Fri Aug 13 12:57:20 2004
++++ xc/programs/xterm/main.h Wed Jan 12 21:45:10 2005
+@@ -1,10 +1,10 @@
+-/* $XTermId: main.h,v 1.25 2004/07/13 00:41:29 tom Exp $ */
++/* $XTermId: main.h,v 1.27 2004/12/01 01:27:47 tom Exp $ */
+
+ /*
+ * $Xorg: main.h,v 1.3 2000/08/17 19:55:09 cpqbld Exp $
+ */
+
+-/* $XFree86: xc/programs/xterm/main.h,v 3.11 2004/07/13 00:41:29 dickey Exp $ */
++/* $XFree86: xc/programs/xterm/main.h,v 3.12 2004/12/01 01:27:47 dickey Exp $ */
+
+ /*
+ * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
+@@ -41,7 +41,7 @@
+ #define DEFBOLDFONT NULL /* no bold font uses overstriking */
+ #define DEFBORDER 2
+ #define DEFFACENAME NULL
+-#define DEFFACESIZE 14
++#define DEFFACESIZE "14.0"
+
+ #if OPT_BLINK_TEXT
+ #define DEFBLINKASBOLD FALSE
+Index: xc/programs/xterm/menu.c
+diff -u xc/programs/xterm/menu.c:1.3 xc/programs/xterm/menu.c:1.3.2.1
+--- xc/programs/xterm/menu.c:1.3 Fri Aug 13 12:57:20 2004
++++ xc/programs/xterm/menu.c Wed Jan 12 21:45:10 2005
+@@ -1,4 +1,4 @@
+-/* $XTermId: menu.c,v 1.145 2004/05/30 23:59:41 tom Exp $ */
++/* $XTermId: menu.c,v 1.150 2004/12/01 01:27:47 tom Exp $ */
+
+ /* $Xorg: menu.c,v 1.4 2001/02/09 02:06:03 xorgcvs Exp $ */
+ /*
+@@ -47,7 +47,7 @@
+ in this Software without prior written authorization from The Open Group.
+
+ */
+-/* $XFree86: xc/programs/xterm/menu.c,v 3.56 2004/06/06 22:15:25 dickey Exp $ */
++/* $XFree86: xc/programs/xterm/menu.c,v 3.57 2004/12/01 01:27:47 dickey Exp $ */
+
+ #include <xterm.h>
+ #include <data.h>
+@@ -216,6 +216,10 @@
+ static void handle_vtshow (Widget gw, Bool allowswitch);
+ #endif
+
++#if OPT_TOOLBAR
++static void do_toolbar PROTO_XT_CALLBACK_ARGS;
++#endif
++
+ #if OPT_WIDE_CHARS
+ static void do_font_utf8_mode PROTO_XT_CALLBACK_ARGS;
+ #endif
+@@ -224,6 +228,9 @@
+ * The order of entries MUST match the values given in menu.h
+ */
+ MenuEntry mainMenuEntries[] = {
++#if OPT_TOOLBAR
++ { "toolbar", do_toolbar, NULL },
++#endif
+ { "securekbd", do_securekbd, NULL },
+ { "allowsends", do_allowsends, NULL },
+ { "redraw", do_redraw, NULL },
+@@ -520,7 +527,7 @@
+ domenu(Widget w GCC_UNUSED,
+ XEvent * event GCC_UNUSED,
+ String * params, /* mainMenu, vtMenu, or tekMenu */
+- Cardinal * param_count) /* 0 or 1 */
++ Cardinal *param_count) /* 0 or 1 */
+ {
+ TScreen *screen = &term->screen;
+ MenuIndex me;
+@@ -548,6 +555,7 @@
+ switch (me) {
+ case mainMenu:
+ if (created) {
++ update_toolbar();
+ update_securekbd();
+ update_allowsends();
+ update_logging();
+@@ -693,7 +701,7 @@
+ HandleCreateMenu(Widget w,
+ XEvent * event,
+ String * params, /* mainMenu, vtMenu, or tekMenu */
+- Cardinal * param_count) /* 0 or 1 */
++ Cardinal *param_count) /* 0 or 1 */
+ {
+ (void) domenu(w, event, params, param_count);
+ }
+@@ -702,7 +710,7 @@
+ HandlePopupMenu(Widget w,
+ XEvent * event,
+ String * params, /* mainMenu, vtMenu, or tekMenu */
+- Cardinal * param_count) /* 0 or 1 */
++ Cardinal *param_count) /* 0 or 1 */
+ {
+ if (domenu(w, event, params, param_count)) {
+ #if OPT_TOOLBAR
+@@ -1556,7 +1564,7 @@
+ HandleAllowSends(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_allowsends, (int) term->screen.allowSendEvents,
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -1566,7 +1574,7 @@
+ HandleSetVisualBell(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_visualbell, (int) term->screen.visualbell,
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -1576,7 +1584,7 @@
+ HandleSetPopOnBell(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_poponbell, (int) term->screen.poponbell,
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -1587,7 +1595,7 @@
+ HandleLogging(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_logging, (int) term->screen.logging,
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -1599,7 +1607,7 @@
+ HandlePrintScreen(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params GCC_UNUSED,
+- Cardinal * param_count GCC_UNUSED)
++ Cardinal *param_count GCC_UNUSED)
+ {
+ do_print(w, (XtPointer) 0, (XtPointer) 0);
+ }
+@@ -1609,7 +1617,7 @@
+ HandlePrintControlMode(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params GCC_UNUSED,
+- Cardinal * param_count GCC_UNUSED)
++ Cardinal *param_count GCC_UNUSED)
+ {
+ do_print_redir(w, (XtPointer) 0, (XtPointer) 0);
+ }
+@@ -1619,7 +1627,7 @@
+ HandleRedraw(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params GCC_UNUSED,
+- Cardinal * param_count GCC_UNUSED)
++ Cardinal *param_count GCC_UNUSED)
+ {
+ do_redraw(w, (XtPointer) 0, (XtPointer) 0);
+ }
+@@ -1629,7 +1637,7 @@
+ HandleSendSignal(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ /* *INDENT-OFF* */
+ static struct sigtab {
+@@ -1674,7 +1682,7 @@
+ HandleQuit(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params GCC_UNUSED,
+- Cardinal * param_count GCC_UNUSED)
++ Cardinal *param_count GCC_UNUSED)
+ {
+ do_quit(w, (XtPointer) 0, (XtPointer) 0);
+ }
+@@ -1683,7 +1691,7 @@
+ Handle8BitControl(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_8bit_control, (int) term->screen.control_eight_bits,
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -1693,7 +1701,7 @@
+ HandleBackarrow(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_backarrow, (int) term->keyboard.flags & MODE_DECBKM,
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -1703,7 +1711,7 @@
+ HandleSunFunctionKeys(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_sun_fkeys, term->keyboard.type == keyboardIsSun,
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -1714,7 +1722,7 @@
+ HandleNumLock(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_num_lock, (int) term->misc.real_NumLock,
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -1724,7 +1732,7 @@
+ HandleMetaEsc(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_meta_esc, (int) term->screen.meta_sends_esc,
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -1735,7 +1743,7 @@
+ HandleDeleteIsDEL(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_delete_del, term->screen.delete_is_del,
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -1745,7 +1753,7 @@
+ HandleOldFunctionKeys(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_old_fkeys, term->keyboard.type == keyboardIsLegacy,
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -1756,7 +1764,7 @@
+ HandleSunKeyboard(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_sun_kbd, term->keyboard.type == keyboardIsVT220,
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -1768,7 +1776,7 @@
+ HandleHpFunctionKeys(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_hp_fkeys, term->keyboard.type == keyboardIsHP,
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -1780,7 +1788,7 @@
+ HandleScoFunctionKeys(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_sco_fkeys, term->keyboard.type == keyboardIsSCO,
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -1791,7 +1799,7 @@
+ HandleScrollbar(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_scrollbar, (int) term->screen.fullVwin.sb_info.width,
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -1801,7 +1809,7 @@
+ HandleJumpscroll(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_jumpscroll, (int) term->screen.jumpscroll,
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -1811,7 +1819,7 @@
+ HandleReverseVideo(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_reversevideo, (int) (term->misc.re_verse0),
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -1821,7 +1829,7 @@
+ HandleAutoWrap(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_autowrap, (int) (term->flags & WRAPAROUND),
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -1831,7 +1839,7 @@
+ HandleReverseWrap(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_reversewrap, (int) (term->flags & REVERSEWRAP),
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -1841,7 +1849,7 @@
+ HandleAutoLineFeed(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_autolinefeed, (int) (term->flags & LINEFEED),
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -1851,7 +1859,7 @@
+ HandleAppCursor(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_appcursor, (int) (term->keyboard.flags & MODE_DECCKM),
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -1861,7 +1869,7 @@
+ HandleAppKeypad(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_appkeypad, (int) (term->keyboard.flags & MODE_DECKPAM),
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -1871,7 +1879,7 @@
+ HandleScrollKey(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_scrollkey, (int) term->screen.scrollkey,
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -1881,7 +1889,7 @@
+ HandleScrollTtyOutput(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_scrollttyoutput, (int) term->screen.scrollttyoutput,
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -1891,7 +1899,7 @@
+ HandleAllow132(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_allow132, (int) term->screen.c132,
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -1901,7 +1909,7 @@
+ HandleCursesEmul(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_cursesemul, (int) term->screen.curses,
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -1911,7 +1919,7 @@
+ HandleMarginBell(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_marginbell, (int) term->screen.marginbell,
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -1922,7 +1930,7 @@
+ HandleCursorBlink(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ /* eventually want to see if sensitive or not */
+ handle_toggle(do_cursorblink, (int) term->screen.cursor_blink,
+@@ -1934,7 +1942,7 @@
+ HandleAltScreen(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ /* eventually want to see if sensitive or not */
+ handle_toggle(do_altscreen, (int) term->screen.alternate,
+@@ -1945,7 +1953,7 @@
+ HandleTiteInhibit(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ /* eventually want to see if sensitive or not */
+ handle_toggle(do_titeInhibit, !((int) term->misc.titeInhibit),
+@@ -1957,7 +1965,7 @@
+ HandleSoftReset(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params GCC_UNUSED,
+- Cardinal * param_count GCC_UNUSED)
++ Cardinal *param_count GCC_UNUSED)
+ {
+ do_softreset(w, (XtPointer) 0, (XtPointer) 0);
+ }
+@@ -1967,7 +1975,7 @@
+ HandleHardReset(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params GCC_UNUSED,
+- Cardinal * param_count GCC_UNUSED)
++ Cardinal *param_count GCC_UNUSED)
+ {
+ do_hardreset(w, (XtPointer) 0, (XtPointer) 0);
+ }
+@@ -1977,7 +1985,7 @@
+ HandleClearSavedLines(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params GCC_UNUSED,
+- Cardinal * param_count GCC_UNUSED)
++ Cardinal *param_count GCC_UNUSED)
+ {
+ do_clearsavedlines(w, (XtPointer) 0, (XtPointer) 0);
+ }
+@@ -1987,7 +1995,7 @@
+ HandleFontDoublesize(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_font_doublesize, (int) term->screen.font_doublesize,
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -1999,7 +2007,7 @@
+ HandleFontBoxChars(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_font_boxchars, (int) term->screen.force_box_chars,
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -2011,7 +2019,7 @@
+ HandleFontLoading(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_font_loadable, (int) term->misc.font_loadable,
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -2023,7 +2031,7 @@
+ HandleRenderFont(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_font_renderfont, term->misc.render_font,
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -2035,7 +2043,7 @@
+ HandleUTF8Mode(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ handle_toggle(do_font_utf8_mode, term->screen.utf8_mode,
+ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+@@ -2047,7 +2055,7 @@
+ HandleSetTerminalType(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ if (*param_count == 1) {
+ switch (params[0][0]) {
+@@ -2073,7 +2081,7 @@
+ HandleVisibility(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ if (*param_count == 2) {
+ switch (params[0][0]) {
+@@ -2102,7 +2110,7 @@
+ HandleSetTekText(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ void (*proc) PROTO_XT_CALLBACK_ARGS = 0;
+
+@@ -2140,7 +2148,7 @@
+ HandleTekPage(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params GCC_UNUSED,
+- Cardinal * param_count GCC_UNUSED)
++ Cardinal *param_count GCC_UNUSED)
+ {
+ do_tekpage(w, (XtPointer) 0, (XtPointer) 0);
+ }
+@@ -2150,7 +2158,7 @@
+ HandleTekReset(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params GCC_UNUSED,
+- Cardinal * param_count GCC_UNUSED)
++ Cardinal *param_count GCC_UNUSED)
+ {
+ do_tekreset(w, (XtPointer) 0, (XtPointer) 0);
+ }
+@@ -2160,7 +2168,7 @@
+ HandleTekCopy(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params GCC_UNUSED,
+- Cardinal * param_count GCC_UNUSED)
++ Cardinal *param_count GCC_UNUSED)
+ {
+ do_tekcopy(w, (XtPointer) 0, (XtPointer) 0);
+ }
+@@ -2217,7 +2225,7 @@
+ }
+
+ static void
+-SetupShell(Widget * menus, MenuList * shell, Widget * menu_tops, int n, int m)
++SetupShell(Widget *menus, MenuList * shell, Widget *menu_tops, int n, int m)
+ {
+ char temp[80];
+ char *external_name = 0;
+@@ -2253,7 +2261,7 @@
+ #endif
+
+ void
+-SetupMenus(Widget shell, Widget * forms, Widget * menus)
++SetupMenus(Widget shell, Widget *forms, Widget *menus)
+ {
+ #if OPT_TOOLBAR
+ int n;
+@@ -2327,8 +2335,100 @@
+ InitPopup(tek_shell[tekMenu].w, menu_names[tekMenu].internal_name, 0);
+ }
+ #endif
++ term->screen.toolbars = True;
++ update_toolbar();
+ }
+-#endif
++
++static TbInfo *
++toolbar_info(Widget w)
++{
++ return ((w == (Widget) term)
++ ? &(WhichVWin(&(term->screen))->tb_info)
++ : &(tekWidget->tek.tb_info));
++}
++
++static void
++hide_toolbar(Widget w)
++{
++ if (w != 0) {
++ TbInfo *info = toolbar_info(w);
++
++ if (info->menu_bar != 0) {
++ if (XtIsRealized(info->menu_bar))
++ XtUnmapWidget(info->menu_bar);
++ }
++ XtVaSetValues(w,
++ XtNfromVert, (Widget) 0,
++ (XtPointer) 0);
++ }
++}
++
++static void
++show_toolbar(Widget w)
++{
++ if (w != 0) {
++ TbInfo *info = toolbar_info(w);
++
++ if (info->menu_bar != 0) {
++ if (XtIsRealized(info->menu_bar))
++ XtMapWidget(info->menu_bar);
++ }
++ XtVaSetValues(w,
++ XtNfromVert, info->menu_bar,
++ (XtPointer) 0);
++ /*
++ * This is needed to make the terminal widget move down below the
++ * toolbar.
++ */
++ XawFormDoLayout(XtParent(w), True);
++ }
++}
++
++void
++ShowToolbar(Boolean enable)
++{
++ if (enable) {
++ show_toolbar((Widget) term);
++ show_toolbar((Widget) tekWidget);
++ } else {
++ hide_toolbar((Widget) term);
++ hide_toolbar((Widget) tekWidget);
++ }
++}
++
++void
++HandleToolbar(Widget w,
++ XEvent * event GCC_UNUSED,
++ String * params GCC_UNUSED,
++ Cardinal *param_count GCC_UNUSED)
++{
++ handle_toggle(do_toolbar, (int) term->screen.toolbars,
++ params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
++}
++
++/* ARGSUSED */
++static void
++do_toolbar(Widget gw GCC_UNUSED,
++ XtPointer closure GCC_UNUSED,
++ XtPointer data GCC_UNUSED)
++{
++ /*
++ * Toggle toolbars for both vt100 and tek windows, since they share the
++ * menu which contains the checkbox indicating whether the toolbar is
++ * active.
++ */
++ ShowToolbar(term->screen.toolbars = !term->screen.toolbars);
++ update_toolbar();
++}
++
++void
++update_toolbar(void)
++{
++ update_menu_item(term->screen.mainMenu,
++ mainMenuEntries[mainMenu_toolbar].widget,
++ term->screen.toolbars);
++}
++#endif /* OPT_TOOLBAR */
+
+ void
+ update_securekbd(void)
+Index: xc/programs/xterm/menu.h
+diff -u xc/programs/xterm/menu.h:1.3 xc/programs/xterm/menu.h:1.3.2.1
+--- xc/programs/xterm/menu.h:1.3 Fri Aug 13 12:57:20 2004
++++ xc/programs/xterm/menu.h Wed Jan 12 21:45:10 2005
+@@ -1,4 +1,4 @@
+-/* $XTermId: menu.h,v 1.82 2004/05/13 00:41:21 tom Exp $ */
++/* $XTermId: menu.h,v 1.86 2004/12/01 01:27:47 tom Exp $ */
+
+ /* $Xorg: menu.h,v 1.4 2001/02/09 02:06:03 xorgcvs Exp $ */
+ /*
+@@ -50,7 +50,7 @@
+ from The Open Group.
+
+ */
+-/* $XFree86: xc/programs/xterm/menu.h,v 3.33 2004/05/13 00:41:21 dickey Exp $ */
++/* $XFree86: xc/programs/xterm/menu.h,v 3.34 2004/12/01 01:27:47 dickey Exp $ */
+
+ #ifndef included_menu_h
+ #define included_menu_h
+@@ -120,6 +120,7 @@
+ extern void HandleTekPage PROTO_XT_ACTIONS_ARGS;
+ extern void HandleTekReset PROTO_XT_ACTIONS_ARGS;
+ extern void HandleTiteInhibit PROTO_XT_ACTIONS_ARGS;
++extern void HandleToolbar PROTO_XT_ACTIONS_ARGS;
+ extern void HandleUTF8Mode PROTO_XT_ACTIONS_ARGS;
+ extern void HandleVisibility PROTO_XT_ACTIONS_ARGS;
+
+@@ -127,7 +128,8 @@
+ extern void SetupMenus (Widget shell, Widget *forms, Widget *menus);
+
+ #if OPT_TOOLBAR
+-extern void SetupToolbar(Widget shell);
++extern void SetupToolbar(Widget);
++extern void ShowToolbar(Boolean);
+ #endif
+
+ /*
+@@ -139,6 +141,9 @@
+ * items in primary menu
+ */
+ typedef enum {
++#if OPT_TOOLBAR
++ mainMenu_toolbar,
++#endif
+ mainMenu_securekbd,
+ mainMenu_allowsends,
+ mainMenu_redraw,
+@@ -298,6 +303,12 @@
+ /*
+ * there should be one of each of the following for each checkable item
+ */
++#if OPT_TOOLBAR
++extern void update_toolbar(void);
++#else
++#define update_toolbar() /* nothing */
++#endif
++
+ extern void update_securekbd(void);
+ extern void update_allowsends(void);
+
+Index: xc/programs/xterm/misc.c
+diff -u xc/programs/xterm/misc.c:1.3 xc/programs/xterm/misc.c:1.3.2.1
+--- xc/programs/xterm/misc.c:1.3 Fri Aug 13 12:57:20 2004
++++ xc/programs/xterm/misc.c Wed Jan 12 21:45:10 2005
+@@ -1,14 +1,14 @@
+-/* $XTermId: misc.c,v 1.231 2004/07/28 00:53:26 tom Exp $ */
++/* $XTermId: misc.c,v 1.235 2004/12/01 01:27:47 tom Exp $ */
+
+ /*
+ * $Xorg: misc.c,v 1.3 2000/08/17 19:55:09 cpqbld Exp $
+ */
+
+-/* $XFree86: xc/programs/xterm/misc.c,v 3.92 2004/07/28 00:53:26 dickey Exp $ */
++/* $XFree86: xc/programs/xterm/misc.c,v 3.93 2004/12/01 01:27:47 dickey Exp $ */
+
+ /*
+ *
+- * Copyright 1999-2002,2003 by Thomas E. Dickey
++ * Copyright 1999-2003,2004 by Thomas E. Dickey
+ *
+ * All Rights Reserved
+ *
+@@ -237,7 +237,7 @@
+ HandleKeyPressed(Widget w GCC_UNUSED,
+ XEvent * event,
+ String * params GCC_UNUSED,
+- Cardinal * nparams GCC_UNUSED)
++ Cardinal *nparams GCC_UNUSED)
+ {
+ register TScreen *screen = &term->screen;
+
+@@ -253,7 +253,7 @@
+ HandleEightBitKeyPressed(Widget w GCC_UNUSED,
+ XEvent * event,
+ String * params GCC_UNUSED,
+- Cardinal * nparams GCC_UNUSED)
++ Cardinal *nparams GCC_UNUSED)
+ {
+ register TScreen *screen = &term->screen;
+
+@@ -269,7 +269,7 @@
+ HandleStringEvent(Widget w GCC_UNUSED,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * nparams)
++ Cardinal *nparams)
+ {
+ register TScreen *screen = &term->screen;
+
+@@ -320,7 +320,7 @@
+ HandleInterpret(Widget w GCC_UNUSED,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * param_count)
++ Cardinal *param_count)
+ {
+ if (*param_count == 1) {
+ char *value = params[0];
+@@ -729,7 +729,7 @@
+ HandleDabbrevExpand(Widget gw,
+ XEvent * event GCC_UNUSED,
+ String * params GCC_UNUSED,
+- Cardinal * nparams GCC_UNUSED)
++ Cardinal *nparams GCC_UNUSED)
+ {
+ XtermWidget w = (XtermWidget) gw;
+ TScreen *screen = &w->screen;
+@@ -744,7 +744,7 @@
+ HandleDeIconify(Widget gw,
+ XEvent * event GCC_UNUSED,
+ String * params GCC_UNUSED,
+- Cardinal * nparams GCC_UNUSED)
++ Cardinal *nparams GCC_UNUSED)
+ {
+ if (IsXtermWidget(gw)) {
+ register TScreen *screen = &((XtermWidget) gw)->screen;
+@@ -757,7 +757,7 @@
+ HandleIconify(Widget gw,
+ XEvent * event GCC_UNUSED,
+ String * params GCC_UNUSED,
+- Cardinal * nparams GCC_UNUSED)
++ Cardinal *nparams GCC_UNUSED)
+ {
+ if (IsXtermWidget(gw)) {
+ register TScreen *screen = &((XtermWidget) gw)->screen;
+@@ -890,7 +890,7 @@
+ HandleMaximize(Widget gw,
+ XEvent * event GCC_UNUSED,
+ String * params GCC_UNUSED,
+- Cardinal * nparams GCC_UNUSED)
++ Cardinal *nparams GCC_UNUSED)
+ {
+ if (IsXtermWidget(gw)) {
+ RequestMaximize((XtermWidget) gw, 1);
+@@ -902,7 +902,7 @@
+ HandleRestoreSize(Widget gw,
+ XEvent * event GCC_UNUSED,
+ String * params GCC_UNUSED,
+- Cardinal * nparams GCC_UNUSED)
++ Cardinal *nparams GCC_UNUSED)
+ {
+ if (IsXtermWidget(gw)) {
+ RequestMaximize((XtermWidget) gw, 0);
+@@ -976,11 +976,12 @@
+
+ #ifdef VMS
+ if ((fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644)) < 0) {
++ int the_error = errno;
+ fprintf(stderr, "%s: cannot open %s: %d:%s\n",
+ xterm_name,
+ path,
+- errno,
+- SysErrorMsg(errno));
++ the_error,
++ SysErrorMsg(the_error));
+ return -1;
+ }
+ chown(path, uid, gid);
+@@ -988,11 +989,12 @@
+ if ((access(path, F_OK) != 0 && (errno != ENOENT))
+ || (!(creat_as(uid, gid, append, path, 0644)))
+ || ((fd = open(path, O_WRONLY | O_APPEND)) < 0)) {
++ int the_error = errno;
+ fprintf(stderr, "%s: cannot open %s: %d:%s\n",
+ xterm_name,
+ path,
+- errno,
+- SysErrorMsg(errno));
++ the_error,
++ SysErrorMsg(the_error));
+ return -1;
+ }
+ #endif
+@@ -1707,6 +1709,190 @@
+ }
+ }
+
++/*
++ * Parse the data for DECUDK (user-defined keys).
++ */
++static void
++parse_decudk(char *cp)
++{
++ while (*cp) {
++ char *base = cp;
++ char *str = (char *) malloc(strlen(cp) + 2);
++ unsigned key = 0;
++ int lo, hi;
++ int len = 0;
++
++ while (isdigit(CharOf(*cp)))
++ key = (key * 10) + (*cp++ - '0');
++ if (*cp == '/') {
++ cp++;
++ while ((hi = udk_value(&cp)) >= 0
++ && (lo = udk_value(&cp)) >= 0) {
++ str[len++] = (hi << 4) | lo;
++ }
++ }
++ if (len > 0 && key < MAX_UDK) {
++ if (user_keys[key].str != 0)
++ free(user_keys[key].str);
++ user_keys[key].str = str;
++ user_keys[key].len = len;
++ } else {
++ free(str);
++ }
++ if (*cp == ';')
++ cp++;
++ if (cp == base) /* badly-formed sequence - bail out */
++ break;
++ }
++}
++
++#if OPT_TRACE
++#define SOFT_WIDE 10
++#define SOFT_HIGH 20
++
++static void
++parse_decdld(ANSI * params, char *string)
++{
++ char DscsName[8];
++ int len;
++ int Pfn = params->a_param[0];
++ int Pcn = params->a_param[1];
++ int Pe = params->a_param[2];
++ int Pcmw = params->a_param[3];
++ int Pw = params->a_param[4];
++ int Pt = params->a_param[5];
++ int Pcmh = params->a_param[6];
++ int Pcss = params->a_param[7];
++
++ int start_char = Pcn + 0x20;
++ int char_wide = ((Pcmw == 0)
++ ? (Pcss ? 6 : 10)
++ : (Pcmw > 4
++ ? Pcmw
++ : (Pcmw + 3)));
++ int char_high = ((Pcmh == 0)
++ ? ((Pcmw >= 2 || Pcmw <= 4)
++ ? 10
++ : 20)
++ : Pcmh);
++ Char ch;
++ Char bits[SOFT_HIGH][SOFT_WIDE];
++ Boolean first = True;
++ Boolean prior = False;
++ int row = 0, col = 0;
++
++ TRACE(("Parsing DECDLD\n"));
++ TRACE((" font number %d\n", Pfn));
++ TRACE((" starting char %d\n", Pcn));
++ TRACE((" erase control %d\n", Pe));
++ TRACE((" char-width %d\n", Pcmw));
++ TRACE((" font-width %d\n", Pw));
++ TRACE((" text/full %d\n", Pt));
++ TRACE((" char-height %d\n", Pcmh));
++ TRACE((" charset-size %d\n", Pcss));
++
++ if (Pfn > 1
++ || Pcn > 95
++ || Pe > 2
++ || Pcmw > 10
++ || Pcmw == 1
++ || Pt > 2
++ || Pcmh > 20
++ || Pcss > 1
++ || char_wide > SOFT_WIDE
++ || char_high > SOFT_HIGH) {
++ TRACE(("DECDLD illegal parameter\n"));
++ return;
++ }
++
++ len = 0;
++ while (*string != '\0') {
++ ch = CharOf(*string++);
++ if (ch >= 0x20 && ch <= 0x2f) {
++ if (len < 2)
++ DscsName[len++] = ch;
++ } else if (ch >= 0x30 && ch <= 0x7e) {
++ DscsName[len++] = ch;
++ break;
++ }
++ }
++ DscsName[len] = 0;
++ TRACE((" Dscs name '%s'\n", DscsName));
++
++ TRACE((" character matrix %dx%d\n", char_high, char_wide));
++ while (*string != '\0') {
++ if (first) {
++ TRACE(("Char %d:\n", start_char));
++ if (prior) {
++ for (row = 0; row < char_high; ++row) {
++ TRACE(("%.*s\n", char_wide, bits[row]));
++ }
++ }
++ prior = False;
++ first = False;
++ for (row = 0; row < char_high; ++row) {
++ for (col = 0; col < char_wide; ++col) {
++ bits[row][col] = '.';
++ }
++ }
++ row = col = 0;
++ }
++ ch = CharOf(*string++);
++ if (ch >= 0x3f && ch <= 0x7e) {
++ int n;
++
++ ch -= 0x3f;
++ for (n = 0; n < 6; ++n) {
++ bits[row + n][col] = (ch & (1 << n)) ? '*' : '.';
++ }
++ col += 1;
++ prior = True;
++ } else if (ch == '/') {
++ row += 6;
++ col = 0;
++ } else if (ch == ';') {
++ first = True;
++ ++start_char;
++ }
++ }
++}
++#else
++#define parse_decdld(p,q) /* nothing */
++#endif
++
++/*
++ * Parse numeric parameters. Normally we use a state machine to simplify
++ * interspersing with control characters, but have the string already.
++ */
++static void
++parse_ansi_params(ANSI * params, char **string)
++{
++ char *cp = *string;
++ short nparam = 0;
++
++ memset(params, 0, sizeof(*params));
++ while (*cp != '\0') {
++ Char ch = CharOf(*cp++);
++
++ if (isdigit(ch)) {
++ if (nparam < NPARAM) {
++ params->a_param[nparam] *= 10;
++ params->a_param[nparam] += (ch - '0');
++ }
++ } else if (ch == ';') {
++ if (++nparam < NPARAM)
++ params->a_nparam = nparam;
++ } else if (ch < 32) {
++ ;
++ } else {
++ /* should be 0x30 to 0x7e */
++ params->a_final = ch;
++ break;
++ }
++ }
++ *string = cp;
++}
++
+ void
+ do_dcs(Char * dcsbuf, size_t dcslen)
+ {
+@@ -1714,7 +1900,7 @@
+ char reply[BUFSIZ];
+ char *cp = (char *) dcsbuf;
+ Bool okay;
+- Bool clear_all;
++ ANSI params;
+
+ TRACE(("do_dcs(%s:%d)\n", (char *) dcsbuf, dcslen));
+
+@@ -1861,62 +2047,16 @@
+ break;
+ #endif
+ default:
+- if (isdigit(CharOf(*cp))) { /* digits are DECUDK, otherwise ignore */
+- clear_all = True;
+-
+- if (*cp == '0') {
+- cp++;
+- } else if (*cp == '1') {
+- cp++;
+- clear_all = False;
+- }
+-
+- if (*cp == ';')
+- cp++;
+- else if (*cp != '|')
+- return;
+-
+- if (*cp == '0') {
+- cp++;
+- } else if (*cp == '1') {
+- cp++;
+- }
+-
+- if (*cp++ != '|')
+- return;
+-
+- if (clear_all)
++ parse_ansi_params(¶ms, &cp);
++ switch (params.a_final) {
++ case '|': /* DECUDK */
++ if (params.a_param[0] == 0)
+ reset_decudk();
+-
+- while (*cp) {
+- char *base = cp;
+- char *str = (char *) malloc(strlen(cp) + 2);
+- unsigned key = 0;
+- int lo, hi;
+- int len = 0;
+-
+- while (isdigit(CharOf(*cp)))
+- key = (key * 10) + (*cp++ - '0');
+- if (*cp == '/') {
+- cp++;
+- while ((hi = udk_value(&cp)) >= 0
+- && (lo = udk_value(&cp)) >= 0) {
+- str[len++] = (hi << 4) | lo;
+- }
+- }
+- if (len > 0 && key < MAX_UDK) {
+- if (user_keys[key].str != 0)
+- free(user_keys[key].str);
+- user_keys[key].str = str;
+- user_keys[key].len = len;
+- } else {
+- free(str);
+- }
+- if (*cp == ';')
+- cp++;
+- if (cp == base) /* badly-formed sequence - bail out */
+- break;
+- }
++ parse_decudk(cp);
++ break;
++ case '{': /* DECDLD */
++ parse_decdld(¶ms, cp);
++ break;
+ }
+ break;
+ }
+@@ -2010,7 +2150,7 @@
+
+ /***====================================================================***/
+
+-ScrnColors *pOldColors = NULL;
++static ScrnColors *pOldColors = NULL;
+
+ static Boolean
+ GetOldColors(XtermWidget pTerm)
+@@ -2435,9 +2575,11 @@
+ int
+ xioerror(Display * dpy)
+ {
++ int the_error = errno;
++
+ (void) fprintf(stderr,
+ "%s: fatal IO error %d (%s) or KillClient on X server \"%s\"\r\n",
+- xterm_name, errno, SysErrorMsg(errno),
++ xterm_name, the_error, SysErrorMsg(the_error),
+ DisplayString(dpy));
+
+ Exit(ERROR_XIOERROR);
+@@ -2621,8 +2763,9 @@
+ static int
+ cmp_options(const void *a, const void *b)
+ {
+- return strcmp(skip_punct(((const OptionHelp *) a)->opt),
+- skip_punct(((const OptionHelp *) b)->opt));
++ const char *s1 = skip_punct(((const OptionHelp *) a)->opt);
++ const char *s2 = skip_punct(((const OptionHelp *) b)->opt);
++ return strcmp(s1, s2);
+ }
+
+ static int
+Index: xc/programs/xterm/os2main.c
+diff -u xc/programs/xterm/os2main.c:1.3 xc/programs/xterm/os2main.c:1.3.2.1
+--- xc/programs/xterm/os2main.c:1.3 Fri Aug 13 12:57:20 2004
++++ xc/programs/xterm/os2main.c Wed Jan 12 21:45:10 2005
+@@ -1,4 +1,4 @@
+-/* $XTermId: os2main.c,v 1.170 2004/07/20 01:14:41 tom Exp $ */
++/* $XTermId: os2main.c,v 1.173 2004/12/01 01:27:47 tom Exp $ */
+
+ /* removed all foreign stuff to get the code more clear (hv)
+ * and did some rewrite for the obscure OS/2 environment
+@@ -7,7 +7,7 @@
+ #ifndef lint
+ static char *rid = "$XConsortium: main.c,v 1.227.1.2 95/06/29 18:13:15 kaleb Exp $";
+ #endif /* lint */
+-/* $XFree86: xc/programs/xterm/os2main.c,v 3.70 2004/07/20 01:14:41 dickey Exp $ */
++/* $XFree86: xc/programs/xterm/os2main.c,v 3.71 2004/12/01 01:27:47 dickey Exp $ */
+
+ /***********************************************************
+
+@@ -196,7 +196,7 @@
+ */
+ static int override_tty_modes = 0;
+ /* *INDENT-OFF* */
+-struct _xttymodes {
++static struct _xttymodes {
+ char *name;
+ size_t len;
+ int set;
+@@ -410,8 +410,10 @@
+ {"-sp", "*sunKeyboard", XrmoptionNoArg, (caddr_t) "on"},
+ {"+sp", "*sunKeyboard", XrmoptionNoArg, (caddr_t) "off"},
+ #endif
++#if OPT_TEK4014
+ {"-t", "*tekStartup", XrmoptionNoArg, (caddr_t) "on"},
+ {"+t", "*tekStartup", XrmoptionNoArg, (caddr_t) "off"},
++#endif
+ {"-ti", "*decTerminalID",XrmoptionSepArg, (caddr_t) NULL},
+ {"-tm", "*ttyModes", XrmoptionSepArg, (caddr_t) NULL},
+ {"-tn", "*termName", XrmoptionSepArg, (caddr_t) NULL},
+@@ -787,7 +789,7 @@
+ Atom * selection GCC_UNUSED,
+ Atom * target GCC_UNUSED,
+ Atom * type GCC_UNUSED,
+- XtPointer * value GCC_UNUSED,
++ XtPointer *value GCC_UNUSED,
+ unsigned long *length GCC_UNUSED,
+ int *format GCC_UNUSED)
+ {
+@@ -827,7 +829,7 @@
+ DeleteWindow(Widget w,
+ XEvent * event GCC_UNUSED,
+ String * params GCC_UNUSED,
+- Cardinal * num_params GCC_UNUSED)
++ Cardinal *num_params GCC_UNUSED)
+ {
+ #if OPT_TEK4014
+ if (w == toplevel) {
+@@ -847,7 +849,7 @@
+ KeyboardMapping(Widget w GCC_UNUSED,
+ XEvent * event,
+ String * params GCC_UNUSED,
+- Cardinal * num_params GCC_UNUSED)
++ Cardinal *num_params GCC_UNUSED)
+ {
+ switch (event->type) {
+ case MappingNotify:
+@@ -856,7 +858,7 @@
+ }
+ }
+
+-XtActionsRec actionProcs[] =
++static XtActionsRec actionProcs[] =
+ {
+ {"DeleteWindow", DeleteWindow},
+ {"KeyboardMapping", KeyboardMapping},
+@@ -962,7 +964,7 @@
+ #endif /* OPT_SESSION_MGT */
+ XtSetErrorHandler((XtErrorHandler) 0);
+
+- XtGetApplicationResources(toplevel, (XtPointer) & resource,
++ XtGetApplicationResources(toplevel, (XtPointer) &resource,
+ application_resources,
+ XtNumber(application_resources), NULL, 0);
+ TRACE_XRES();
+Index: xc/programs/xterm/plink.sh
+diff -u xc/programs/xterm/plink.sh:1.2 xc/programs/xterm/plink.sh:1.2.4.1
+--- xc/programs/xterm/plink.sh:1.2 Fri Apr 23 19:55:07 2004
++++ xc/programs/xterm/plink.sh Wed Jan 12 21:45:10 2005
+@@ -1,5 +1,5 @@
+ #!/bin/sh
+-# $XFree86$
++# $XFree86: xc/programs/xterm/plink.sh,v 3.1 2001/03/13 09:48:43 dickey Exp $
+ #
+ # Reduce the number of dynamic libraries used to link an executable.
+ CMD=
+Index: xc/programs/xterm/precompose.c
+diff -u xc/programs/xterm/precompose.c:1.3 xc/programs/xterm/precompose.c:1.3.2.1
+--- xc/programs/xterm/precompose.c:1.3 Fri Aug 13 12:57:20 2004
++++ xc/programs/xterm/precompose.c Wed Jan 12 21:45:10 2005
+@@ -4,11 +4,12 @@
+ * DO NOT EDIT BY HAND! This is generated by the script
+ * unicode/make-precompose.sh
+ */
+-/* $XFree86: xc/programs/xterm/precompose.c,v 1.2 2000/11/01 01:12:41 dawes Exp $ */
++/* $XTermId: precompose.c,v 1.7 2004/12/01 01:27:47 tom Exp $ */
++/* $XFree86: xc/programs/xterm/precompose.c,v 1.3 2004/12/01 01:27:47 dickey Exp $ */
+
+ #include <precompose.h>
+
+-struct {
++static struct {
+ int replacement;
+ int base;
+ int comb;
+@@ -753,6 +754,19 @@
+ { 0x0F76, 0x0FB2, 0x0F80},
+ { 0x0F78, 0x0FB3, 0x0F80},
+ { 0x1026, 0x1025, 0x102E},
++{ 0x1D15E, 0x1D157, 0x1D165},
++{ 0x1D15F, 0x1D158, 0x1D165},
++{ 0x1D160, 0x1D15F, 0x1D16E},
++{ 0x1D161, 0x1D15F, 0x1D16F},
++{ 0x1D162, 0x1D15F, 0x1D170},
++{ 0x1D163, 0x1D15F, 0x1D171},
++{ 0x1D164, 0x1D15F, 0x1D172},
++{ 0x1D1BB, 0x1D1B9, 0x1D165},
++{ 0x1D1BC, 0x1D1BA, 0x1D165},
++{ 0x1D1BD, 0x1D1BB, 0x1D16E},
++{ 0x1D1BF, 0x1D1BB, 0x1D16F},
++{ 0x1D1BE, 0x1D1BC, 0x1D16E},
++{ 0x1D1C0, 0x1D1BC, 0x1D16F},
+ { 0x1E38, 0x1E36, 0x0304},
+ { 0x1E39, 0x1E37, 0x0304},
+ { 0x1E5C, 0x1E5A, 0x0304},
+@@ -941,6 +955,7 @@
+ { 0x22EB, 0x22B3, 0x0338},
+ { 0x22EC, 0x22B4, 0x0338},
+ { 0x22ED, 0x22B5, 0x0338},
++{ 0x2ADC, 0x2ADD, 0x0338},
+ { 0x3094, 0x3046, 0x3099},
+ { 0x304C, 0x304B, 0x3099},
+ { 0x304E, 0x304D, 0x3099},
+Index: xc/programs/xterm/print.c
+diff -u xc/programs/xterm/print.c:1.3 xc/programs/xterm/print.c:1.3.2.1
+--- xc/programs/xterm/print.c:1.3 Fri Aug 13 12:57:20 2004
++++ xc/programs/xterm/print.c Wed Jan 12 21:45:10 2005
+@@ -1,10 +1,12 @@
++/* $XTermId: print.c,v 1.54 2004/12/01 01:27:47 tom Exp $ */
++
+ /*
+- * $XFree86: xc/programs/xterm/print.c,v 1.19 2002/08/12 00:36:33 dickey Exp $
++ * $XFree86: xc/programs/xterm/print.c,v 1.20 2004/12/01 01:27:47 dickey Exp $
+ */
+
+ /************************************************************
+
+-Copyright 1997-2000,2002 by Thomas E. Dickey
++Copyright 1997-2002,2004 by Thomas E. Dickey
+
+ All Rights Reserved
+
+@@ -55,7 +57,6 @@
+ #define Strcmp(a,b) strcmp((char *)a,(char *)b)
+ #define Strncmp(a,b,c) strncmp((char *)a,(char *)b,c)
+
+-#define SGR_MASK (BOLD|BLINK|UNDERLINE|INVERSE)
+ #ifdef VMS
+ #define VMS_TEMP_PRINT_FILE "sys$scratch:xterm_print.txt"
+ #endif
+Index: xc/programs/xterm/ptyx.h
+diff -u xc/programs/xterm/ptyx.h:1.3 xc/programs/xterm/ptyx.h:1.3.2.1
+--- xc/programs/xterm/ptyx.h:1.3 Fri Aug 13 12:57:20 2004
++++ xc/programs/xterm/ptyx.h Wed Jan 12 21:45:10 2005
+@@ -1,10 +1,10 @@
+-/* $XTermId: ptyx.h,v 1.328 2004/07/28 00:53:26 tom Exp $ */
++/* $XTermId: ptyx.h,v 1.346 2004/12/01 01:27:47 tom Exp $ */
+
+ /*
+ * $Xorg: ptyx.h,v 1.3 2000/08/17 19:55:09 cpqbld Exp $
+ */
+
+-/* $XFree86: xc/programs/xterm/ptyx.h,v 3.119 2004/07/28 00:53:26 dickey Exp $ */
++/* $XFree86: xc/programs/xterm/ptyx.h,v 3.120 2004/12/01 01:27:47 dickey Exp $ */
+
+ /*
+ * Copyright 1999-2003,2004 by Thomas E. Dickey
+@@ -319,11 +319,11 @@
+ } OptionHelp;
+
+ typedef struct {
+- unsigned char a_type;
+- unsigned char a_pintro;
+- unsigned char a_final;
+- unsigned char a_inters;
+- char a_nparam; /* # of parameters */
++ unsigned char a_type; /* CSI, etc., see unparseq() */
++ unsigned char a_pintro; /* private-mode char, if any */
++ unsigned char a_inters; /* special (before final-char) */
++ unsigned char a_final; /* final-char */
++ short a_nparam; /* # of parameters */
+ short a_param[NPARAM]; /* Parameters */
+ } ANSI;
+
+@@ -430,6 +430,10 @@
+ #define OPT_DEC_LOCATOR 0 /* true if xterm supports VT220-style mouse events */
+ #endif
+
++#ifndef OPT_DEC_RECTOPS
++#define OPT_DEC_RECTOPS 0 /* true if xterm is configured for VT420 rectangles */
++#endif
++
+ #ifndef OPT_DEC_SOFTFONT
+ #define OPT_DEC_SOFTFONT 0 /* true if xterm is configured for VT220 softfonts */
+ #endif
+@@ -494,6 +498,10 @@
+ #define OPT_MAXIMIZE 1 /* add actions for iconify ... maximize */
+ #endif
+
++#ifndef OPT_MINI_LUIT
++#define OPT_MINI_LUIT 0 /* true if xterm supports built-in mini-luit */
++#endif
++
+ #ifndef OPT_MOD_FKEYS
+ #define OPT_MOD_FKEYS 1 /* modify cursor- and function-keys in normal mode */
+ #endif
+@@ -675,7 +683,7 @@
+
+ #if OPT_ISO_COLORS
+ #define if_OPT_ISO_COLORS(screen, code) if(screen->colorMode) code
+-#define TERM_COLOR_FLAGS (term->flags & (BG_COLOR))
++#define TERM_COLOR_FLAGS (term->flags & (FG_COLOR|BG_COLOR))
+ #define COLOR_0 0
+ #define COLOR_1 1
+ #define COLOR_2 2
+@@ -913,10 +921,18 @@
+ {RES_NAME(name), RES_CLASS(class), XtRInt, sizeof(int), \
+ RES_OFFSET(offset), XtRImmediate, (XtPointer) dftvalue}
+
++#define Dres(name, class, offset, dftvalue) \
++ {RES_NAME(name), RES_CLASS(class), XtRFloat, sizeof(float), \
++ RES_OFFSET(offset), XtRString, (XtPointer) dftvalue}
++
+ #define Sres(name, class, offset, dftvalue) \
+ {RES_NAME(name), RES_CLASS(class), XtRString, sizeof(char *), \
+ RES_OFFSET(offset), XtRString, (XtPointer) dftvalue}
+
++#define Wres(name, class, offset, dftvalue) \
++ {RES_NAME(name), RES_CLASS(class), XtRWidget, sizeof(Widget), \
++ RES_OFFSET(offset), XtRWidget, (XtPointer) dftvalue}
++
+ /***====================================================================***/
+
+ #define BUF_SIZE 4096
+@@ -1034,6 +1050,13 @@
+ char * fn;
+ } XTermFonts;
+
++typedef struct {
++ int top;
++ int left;
++ int bottom;
++ int right;
++} XTermRect;
++
+ /* indices into save_modes[] */
+ typedef enum {
+ DP_CRS_VISIBLE,
+@@ -1063,6 +1086,9 @@
+ #if OPT_BLINK_CURS
+ DP_CRS_BLINK,
+ #endif
++#if OPT_TOOLBAR
++ DP_TOOLBAR,
++#endif
+ DP_LAST
+ } SaveModes;
+
+@@ -1124,6 +1150,14 @@
+ Pixmap bdpix; /* ...cached border pixmap */
+ } SbInfo;
+
++#if OPT_TOOLBAR
++typedef struct {
++ Widget menu_bar; /* toolbar, if initialized */
++ Dimension menu_height; /* ...and its height */
++} TbInfo;
++#define VT100_TB_INFO(name) screen.fullVwin.tb_info.name
++#endif
++
+ struct _vtwin {
+ Window window; /* X window id */
+ int width; /* width of columns */
+@@ -1140,8 +1174,8 @@
+ GC normalboldGC; /* normal painting, bold font */
+ GC reverseboldGC; /* reverse painting, bold font */
+ #if OPT_TOOLBAR
+- Widget menu_bar; /* toolbar, if initialized */
+- Dimension menu_height; /* ...and its height */
++ Boolean active; /* true if toolbars are used */
++ TbInfo tb_info; /* toolbar information */
+ #endif
+ };
+
+@@ -1188,12 +1222,19 @@
+ int fonts_used; /* count items in double_fonts */
+ XTermFonts double_fonts[NUM_CHRSET];
+ #endif
++#if OPT_DEC_RECTOPS
++ int cur_decsace; /* parameter for DECSACE */
++#endif
+ #if OPT_WIDE_CHARS
+ Boolean wide_chars; /* true when 16-bit chars */
+ Boolean vt100_graphics; /* true to allow vt100-graphics */
+ int utf8_mode; /* use UTF-8 decode/encode: 0-2 */
+- int utf_count; /* state of utf_char */
+- IChar utf_char; /* in-progress character */
++ int latin9_mode; /* poor man's luit, latin9 */
++ int unicode_font; /* font uses unicode encoding */
++ int utf_count; /* state of utf_char */
++ IChar utf_char; /* in-progress character */
++ int last_written_col;
++ int last_written_row;
+ #endif
+ #if OPT_BROKEN_OSC
+ Boolean brokenLinuxOSC; /* true to ignore Linux palette ctls */
+@@ -1253,6 +1294,9 @@
+ struct _vtwin iconVwin;
+ struct _vtwin * whichVwin;
+ #endif /* NO_ACTIVE_ICON */
++#if OPT_TOOLBAR
++ Boolean toolbars; /* true if toolbars are used */
++#endif
+
+ Cursor pointer_cursor; /* pointer cursor in window */
+
+@@ -1451,7 +1495,6 @@
+ String menu_font_names[NMENUFONTS];
+ long menu_font_sizes[NMENUFONTS];
+ int menu_font_number;
+- XIC xic;
+ #if OPT_RENDERFONT
+ XftFont * renderFontNorm[NMENUFONTS];
+ XftFont * renderFontBold[NMENUFONTS];
+@@ -1460,9 +1503,11 @@
+ XftDraw * renderDraw;
+ #endif
+ #if OPT_INPUT_METHOD
++ XIM xim;
+ XFontSet fs; /* fontset for XIM preedit */
+ int fs_ascent; /* ascent of fs */
+ #endif
++ XIC xic; /* this is used even without XIM */
+ #if OPT_DABBREV
+ int dabbrev_working; /* nonzero during dabbrev process */
+ unsigned char dabbrev_erase_char; /* used for deleting inserted completion */
+@@ -1475,8 +1520,7 @@
+ char * initial_font; /* large, 2, 3, small */
+ char * gin_terminator_str; /* ginTerminator resource */
+ #if OPT_TOOLBAR
+- Widget menu_bar; /* toolbar, if initialized */
+- Dimension menu_height; /* ...and its height */
++ TbInfo tb_info; /* toolbar information */
+ #endif
+ } TekPart;
+
+@@ -1604,7 +1648,7 @@
+ #if OPT_RENDERFONT
+ char *face_name;
+ char *face_wide_name;
+- int face_size;
++ float face_size;
+ Boolean render_font;
+ #endif
+ } Misc;
+@@ -1697,7 +1741,7 @@
+ screen. Used to distinguish blanks from
+ empty parts of the screen when selecting */
+
+-#if OPT_BLINK_CURS
++#if OPT_BLINK_TEXT
+ #define BOLDATTR(screen) (BOLD | ((screen)->blink_as_bold ? BLINK : 0))
+ #else
+ #define BOLDATTR(screen) (BOLD | BLINK)
+@@ -1720,6 +1764,9 @@
+ /* mask: user-visible attributes */
+ #define ATTRIBUTES (INVERSE|UNDERLINE|BOLD|BLINK|BG_COLOR|FG_COLOR|INVISIBLE|PROTECTED)
+
++ /* mask for video-attributes only */
++#define SGR_MASK (BOLD|BLINK|UNDERLINE|INVERSE)
++
+ #define WRAPAROUND 0x400 /* true if auto wraparound mode */
+ #define REVERSEWRAP 0x800 /* true if reverse wraparound mode */
+ #define REVERSE_VIDEO 0x1000 /* true if screen white on black */
+@@ -1767,60 +1814,61 @@
+ #define CursorY(screen,row) ((((row) - screen->topline) * FontHeight(screen)) \
+ + screen->border)
+
++/*
++ * These definitions depend on whether xterm supports active-icon.
++ */
+ #ifndef NO_ACTIVE_ICON
+ #define IsIcon(screen) ((screen)->whichVwin == &(screen)->iconVwin)
+-#define VWindow(screen) ((screen)->whichVwin->window)
+-#define VShellWindow XtWindow(SHELL_OF(term))
+-#define TWindow(screen) ((screen)->whichTwin->window)
+-#define TShellWindow XtWindow(SHELL_OF(tekWidget))
+-#define Width(screen) ((screen)->whichVwin->width)
+-#define Height(screen) ((screen)->whichVwin->height)
+-#define FullWidth(screen) ((screen)->whichVwin->fullwidth)
+-#define FullHeight(screen) ((screen)->whichVwin->fullheight)
+-#define FontWidth(screen) ((screen)->whichVwin->f_width)
+-#define FontHeight(screen) ((screen)->whichVwin->f_height)
++#define WhichVWin(screen) ((screen)->whichVwin)
++#define WhichTWin(screen) ((screen)->whichTwin)
++
++#define WhichVFont(screen,name) (IsIcon(screen) ? (screen)->fnt_icon \
++ : (screen)->name)
+ #define FontAscent(screen) (IsIcon(screen) ? (screen)->fnt_icon->ascent \
+- : (screen)->whichVwin->f_ascent)
++ : WhichVWin(screen)->f_ascent)
+ #define FontDescent(screen) (IsIcon(screen) ? (screen)->fnt_icon->descent \
+- : (screen)->whichVwin->f_descent)
+-#define ScrollbarWidth(screen) ((screen)->whichVwin->sb_info.width)
+-#define NormalGC(screen) ((screen)->whichVwin->normalGC)
+-#define ReverseGC(screen) ((screen)->whichVwin->reverseGC)
+-#define NormalBoldGC(screen) ((screen)->whichVwin->normalboldGC)
+-#define ReverseBoldGC(screen) ((screen)->whichVwin->reverseboldGC)
+-#define TWidth(screen) ((screen)->whichTwin->width)
+-#define THeight(screen) ((screen)->whichTwin->height)
+-#define TFullWidth(screen) ((screen)->whichTwin->fullwidth)
+-#define TFullHeight(screen) ((screen)->whichTwin->fullheight)
+-#define TekScale(screen) ((screen)->whichTwin->tekscale)
+-
++ : WhichVWin(screen)->f_descent)
+ #else /* NO_ACTIVE_ICON */
+
+ #define IsIcon(screen) (False)
+-#define VWindow(screen) ((screen)->fullVwin.window)
++#define WhichVWin(screen) (&((screen)->fullVwin))
++#define WhichTWin(screen) (&((screen)->fullTwin))
++
++#define WhichVFont(screen,name) (&(screen)->name)
++#define FontAscent(screen) WhichVWin(screen)->f_ascent
++#define FontDescent(screen) WhichVWin(screen)->f_descent
++
++#endif /* NO_ACTIVE_ICON */
++
++/*
++ * These definitions do not depend on whether xterm supports active-icon.
++ */
++#define VWindow(screen) WhichVWin(screen)->window
+ #define VShellWindow XtWindow(SHELL_OF(term))
+-#define TWindow(screen) ((screen)->fullTwin.window)
++#define TWindow(screen) WhichTWin(screen)->window
+ #define TShellWindow XtWindow(SHELL_OF(tekWidget))
+-#define Width(screen) ((screen)->fullVwin.width)
+-#define Height(screen) ((screen)->fullVwin.height)
+-#define FullWidth(screen) ((screen)->fullVwin.fullwidth)
+-#define FullHeight(screen) ((screen)->fullVwin.fullheight)
+-#define FontWidth(screen) ((screen)->fullVwin.f_width)
+-#define FontHeight(screen) ((screen)->fullVwin.f_height)
+-#define FontAscent(screen) ((screen)->fullVwin.f_ascent)
+-#define FontDescent(screen) ((screen)->fullVwin.f_descent)
+-#define ScrollbarWidth(screen) ((screen)->fullVwin.sb_info.width)
+-#define NormalGC(screen) ((screen)->fullVwin.normalGC)
+-#define ReverseGC(screen) ((screen)->fullVwin.reverseGC)
+-#define NormalBoldGC(screen) ((screen)->fullVwin.normalboldGC)
+-#define ReverseBoldGC(screen) ((screen)->fullVwin.reverseboldGC)
+-#define TWidth(screen) ((screen)->fullTwin.width)
+-#define THeight(screen) ((screen)->fullTwin.height)
+-#define TFullWidth(screen) ((screen)->fullTwin.fullwidth)
+-#define TFullHeight(screen) ((screen)->fullTwin.fullheight)
+-#define TekScale(screen) ((screen)->fullTwin.tekscale)
+
+-#endif /* NO_ACTIVE_ICON */
++#define Width(screen) WhichVWin(screen)->width
++#define Height(screen) WhichVWin(screen)->height
++#define FullWidth(screen) WhichVWin(screen)->fullwidth
++#define FullHeight(screen) WhichVWin(screen)->fullheight
++#define FontWidth(screen) WhichVWin(screen)->f_width
++#define FontHeight(screen) WhichVWin(screen)->f_height
++
++#define NormalFont(screen) WhichVFont(screen, fnt_norm)
++#define BoldFont(screen) WhichVFont(screen, fnt_bold)
++
++#define ScrollbarWidth(screen) WhichVWin(screen)->sb_info.width
++#define NormalGC(screen) WhichVWin(screen)->normalGC
++#define ReverseGC(screen) WhichVWin(screen)->reverseGC
++#define NormalBoldGC(screen) WhichVWin(screen)->normalboldGC
++#define ReverseBoldGC(screen) WhichVWin(screen)->reverseboldGC
++
++#define TWidth(screen) WhichTWin(screen)->width
++#define THeight(screen) WhichTWin(screen)->height
++#define TFullWidth(screen) WhichTWin(screen)->fullwidth
++#define TFullHeight(screen) WhichTWin(screen)->fullheight
++#define TekScale(screen) WhichTWin(screen)->tekscale
+
+ #if OPT_TEK4014
+ #define TEK_LINK_BLOCK_SIZE 1024
+Index: xc/programs/xterm/resize.c
+diff -u xc/programs/xterm/resize.c:1.3 xc/programs/xterm/resize.c:1.3.2.1
+--- xc/programs/xterm/resize.c:1.3 Fri Aug 13 12:57:21 2004
++++ xc/programs/xterm/resize.c Wed Jan 12 21:45:10 2005
+@@ -1,11 +1,13 @@
++/* $XTermId: resize.c,v 1.92 2004/12/01 01:27:47 tom Exp $ */
++
+ /*
+ * $Xorg: resize.c,v 1.3 2000/08/17 19:55:09 cpqbld Exp $
+ */
+
+-/* $XFree86: xc/programs/xterm/resize.c,v 3.57 2004/04/03 22:26:26 dawes Exp $ */
++/* $XFree86: xc/programs/xterm/resize.c,v 3.58 2004/12/01 01:27:47 dickey Exp $ */
+
+ /*
+- * Copyright 2003 by Thomas E. Dickey
++ * Copyright 2003,2004 by Thomas E. Dickey
+ *
+ * All Rights Reserved
+ *
+@@ -115,7 +117,7 @@
+ #define SHELL_C 1
+ #define SHELL_BOURNE 2
+ /* *INDENT-OFF* */
+-struct {
++static struct {
+ char *name;
+ int type;
+ } shell_list[] = {
+@@ -131,58 +133,58 @@
+ };
+ /* *INDENT-ON* */
+
+-char *emuname[EMULATIONS] =
++static char *emuname[EMULATIONS] =
+ {
+ "VT100",
+ "Sun",
+ };
+-char *myname;
+-int shell_type = SHELL_UNKNOWN;
+-char *getsize[EMULATIONS] =
++static char *myname;
++static int shell_type = SHELL_UNKNOWN;
++static char *getsize[EMULATIONS] =
+ {
+ ESCAPE("7") ESCAPE("[r") ESCAPE("[999;999H") ESCAPE("[6n"),
+ ESCAPE("[18t"),
+ };
+ #if defined(USE_STRUCT_TTYSIZE)
+ #elif defined(USE_STRUCT_WINSIZE)
+-char *getwsize[EMULATIONS] =
++static char *getwsize[EMULATIONS] =
+ { /* size in pixels */
+ 0,
+ ESCAPE("[14t"),
+ };
+ #endif /* USE_STRUCT_{TTYSIZE|WINSIZE} */
+-char *restore[EMULATIONS] =
++static char *restore[EMULATIONS] =
+ {
+ ESCAPE("8"),
+ 0,
+ };
+-char *setname = "";
+-char *setsize[EMULATIONS] =
++static char *setname = "";
++static char *setsize[EMULATIONS] =
+ {
+ 0,
+ ESCAPE("[8;%s;%st"),
+ };
+
+ #ifdef USE_ANY_SYSV_TERMIO
+-struct termio tioorig;
++static struct termio tioorig;
+ #elif defined(USE_TERMIOS)
+-struct termios tioorig;
++static struct termios tioorig;
+ #else
+-struct sgttyb sgorig;
++static struct sgttyb sgorig;
+ #endif /* USE_ANY_SYSV_TERMIO/USE_TERMIOS */
+
+-char *size[EMULATIONS] =
++static char *size[EMULATIONS] =
+ {
+ ESCAPE("[%d;%dR"),
+ ESCAPE("[8;%d;%dt"),
+ };
+-char sunname[] = "sunsize";
+-int tty;
+-FILE *ttyfp;
++static char sunname[] = "sunsize";
++static int tty;
++static FILE *ttyfp;
+
+ #if defined(USE_STRUCT_TTYSIZE)
+ #elif defined(USE_STRUCT_WINSIZE)
+-char *wsize[EMULATIONS] =
++static char *wsize[EMULATIONS] =
+ {
+ 0,
+ ESCAPE("[4;%hd;%hdt"),
+@@ -193,7 +195,7 @@
+ static SIGNAL_T resize_timeout(int sig);
+ static int checkdigits(char *str);
+ static void Usage(void);
+-static void readstring(FILE * fp, char *buf, char *str);
++static void readstring(FILE *fp, char *buf, char *str);
+
+ #undef US /* may conflict with curses.h */
+
+@@ -530,7 +532,7 @@
+ }
+
+ static void
+-readstring(register FILE * fp, register char *buf, char *str)
++readstring(register FILE *fp, register char *buf, char *str)
+ {
+ register int last, c;
+ #if !defined(USG) && !defined(__UNIXOS2__)
+Index: xc/programs/xterm/screen.c
+diff -u xc/programs/xterm/screen.c:1.3 xc/programs/xterm/screen.c:1.3.2.1
+--- xc/programs/xterm/screen.c:1.3 Fri Aug 13 12:57:21 2004
++++ xc/programs/xterm/screen.c Wed Jan 12 21:45:10 2005
+@@ -1,3 +1,5 @@
++/* $XTermId: screen.c,v 1.149 2004/12/01 01:27:47 tom Exp $ */
++
+ /*
+ * $Xorg: screen.c,v 1.3 2000/08/17 19:55:09 cpqbld Exp $
+ */
+@@ -54,7 +56,7 @@
+ * SOFTWARE.
+ */
+
+-/* $XFree86: xc/programs/xterm/screen.c,v 3.66 2004/03/04 02:21:56 dickey Exp $ */
++/* $XFree86: xc/programs/xterm/screen.c,v 3.67 2004/12/01 01:27:47 dickey Exp $ */
+
+ /* screen.c */
+
+@@ -71,6 +73,11 @@
+
+ #include <signal.h>
+
++#define getMinRow(screen) ((term->flags & ORIGIN) ? (screen)->top_marg : 0)
++#define getMaxRow(screen) ((term->flags & ORIGIN) ? (screen)->bot_marg : (screen)->max_row)
++#define getMinCol(screen) 0
++#define getMaxCol(screen) ((screen)->max_col)
++
+ /*
+ * Allocates memory for a 2-dimensional array of chars and returns a pointer
+ * thereto. Each line is formed from a set of char arrays, with an index
+@@ -304,8 +311,17 @@
+ }
+ #endif
+
+-int last_written_row = -1;
+-int last_written_col = -1;
++/*
++ * Disown the selection and repaint the area that is highlighted so it is no
++ * longer highlighted.
++ */
++void
++ScrnDisownSelection(TScreen * screen)
++{
++ if (ScrnHaveSelection(screen)) {
++ DisownSelection(term);
++ }
++}
+
+ /*
+ * Writes str into buf at screen's current row and column. Characters are set
+@@ -332,10 +348,10 @@
+ int length = len; /* workaround for compiler bug? */
+ Char *attrs;
+ int avail = screen->max_col - screen->cur_col + 1;
+- Char *col;
++ Char *chars;
+ int wrappedbit;
+ #if OPT_WIDE_CHARS
+- Char starcol, starcol2;
++ Char starcol1, starcol2;
+ Char *comb1l = 0, *comb1h = 0, *comb2l = 0, *comb2h = 0;
+ #endif
+
+@@ -350,7 +366,7 @@
+ if (length <= 0)
+ return;
+
+- col = SCRN_BUF_CHARS(screen, screen->cur_row) + screen->cur_col;
++ chars = SCRN_BUF_CHARS(screen, screen->cur_row) + screen->cur_col;
+ attrs = SCRN_BUF_ATTRS(screen, screen->cur_row) + screen->cur_col;
+
+ if_OPT_WIDE_CHARS(screen, {
+@@ -374,15 +390,15 @@
+ wrappedbit = ScrnTstWrapped(screen, screen->cur_row);
+
+ #if OPT_WIDE_CHARS
+- starcol = *col;
+- starcol2 = col[length - 1];
++ starcol1 = *chars;
++ starcol2 = chars[length - 1];
+ #endif
+
+ /* write blanks if we're writing invisible text */
+ if (flags & INVISIBLE) {
+- memset(col, ' ', length);
++ memset(chars, ' ', length);
+ } else {
+- memcpy(col, str, length); /* This can stand for the present. If it
++ memcpy(chars, str, length); /* This can stand for the present. If it
+ is wrong, we will scribble over it */
+ }
+
+@@ -396,16 +412,16 @@
+ #define ERROR_2 0x00
+ if_OPT_WIDE_CHARS(screen, {
+
+- Char *wc;
++ Char *char2;
+
+ if (real_width != length) {
+- Char *c = col;
+- wc = SCRN_BUF_WIDEC(screen, screen->cur_row);
+- wc += screen->cur_col;
+- if (screen->cur_col && starcol == HIDDEN_LO && *wc == HIDDEN_HI
+- && iswide(c[-1] | (wc[-1] << 8))) {
+- c[-1] = ERROR_1;
+- wc[-1] = ERROR_2;
++ Char *char1 = chars;
++ char2 = SCRN_BUF_WIDEC(screen, screen->cur_row);
++ char2 += screen->cur_col;
++ if (screen->cur_col && starcol1 == HIDDEN_LO && *char2 == HIDDEN_HI
++ && iswide(char1[-1] | (char2[-1] << 8))) {
++ char1[-1] = ERROR_1;
++ char2[-1] = ERROR_2;
+ }
+ /* if we are overwriting the right hand half of a
+ wide character, make the other half vanish */
+@@ -414,32 +430,32 @@
+ if (str2)
+ ch |= *str2 << 8;
+
+- *c = *str;
+- c++;
++ *char1 = *str;
++ char1++;
+ str++;
+
+ if (str2) {
+- *wc = *str2;
++ *char2 = *str2;
+ str2++;
+ } else
+- *wc = 0;
+- wc++;
++ *char2 = 0;
++ char2++;
+ length--;
+
+ if (iswide(ch)) {
+- *c = HIDDEN_LO;
+- *wc = HIDDEN_HI;
+- c++;
+- wc++;
++ *char1 = HIDDEN_LO;
++ *char2 = HIDDEN_HI;
++ char1++;
++ char2++;
+ }
+ }
+
+- if (*c == HIDDEN_LO
+- && *wc == HIDDEN_HI
+- && c[-1] == HIDDEN_LO
+- && wc[-1] == HIDDEN_HI) {
+- *c = ERROR_1;
+- *wc = ERROR_2;
++ if (*char1 == HIDDEN_LO
++ && *char2 == HIDDEN_HI
++ && char1[-1] == HIDDEN_LO
++ && char2[-1] == HIDDEN_HI) {
++ *char1 = ERROR_1;
++ *char2 = ERROR_2;
+ }
+ /* if we are overwriting the left hand half of a
+ wide character, make the other half vanish */
+@@ -447,26 +463,26 @@
+
+ else {
+
+- if ((wc = SCRN_BUF_WIDEC(screen, screen->cur_row)) != 0) {
+- wc += screen->cur_col;
+- if (screen->cur_col && starcol == HIDDEN_LO && *wc == HIDDEN_HI
+- && iswide(col[-1] | (wc[-1] << 8))) {
+- col[-1] = ERROR_1;
+- wc[-1] = ERROR_2;
++ if ((char2 = SCRN_BUF_WIDEC(screen, screen->cur_row)) != 0) {
++ char2 += screen->cur_col;
++ if (screen->cur_col && starcol1 == HIDDEN_LO && *char2 == HIDDEN_HI
++ && iswide(chars[-1] | (char2[-1] << 8))) {
++ chars[-1] = ERROR_1;
++ char2[-1] = ERROR_2;
+ }
+ /* if we are overwriting the right hand half of a
+ wide character, make the other half vanish */
+- if (col[length] == HIDDEN_LO && wc[length] == HIDDEN_HI &&
+- iswide(starcol2 | (wc[length - 1] << 8))) {
+- col[length] = ERROR_1;
+- wc[length] = ERROR_2;
++ if (chars[length] == HIDDEN_LO && char2[length] == HIDDEN_HI &&
++ iswide(starcol2 | (char2[length - 1] << 8))) {
++ chars[length] = ERROR_1;
++ char2[length] = ERROR_2;
+ }
+ /* if we are overwriting the left hand half of a
+ wide character, make the other half vanish */
+ if ((flags & INVISIBLE) || (str2 == 0))
+- memset(wc, 0, length);
++ memset(char2, 0, length);
+ else
+- memcpy(wc, str2, length);
++ memcpy(char2, str2, length);
+ }
+ }
+ });
+@@ -497,8 +513,10 @@
+ else
+ ScrnClrWrapped(screen, screen->cur_row);
+
+- last_written_col = screen->cur_col + real_width - 1;
+- last_written_row = screen->cur_row;
++ if_OPT_WIDE_CHARS(screen, {
++ screen->last_written_col = screen->cur_col + real_width - 1;
++ screen->last_written_row = screen->cur_row;
++ });
+
+ if_OPT_XMC_GLITCH(screen, {
+ Resolve_XMC(screen);
+@@ -515,6 +533,8 @@
+ size_t len = ScrnPointers(screen, n);
+ int last = (n * MAX_PTRS);
+
++ TRACE(("ScrnClearLines(where %d, n %d, size %d)\n", where, n, size));
++
+ /* save n lines at where */
+ memcpy((char *) screen->save_ptr,
+ (char *) &sb[MAX_PTRS * where],
+@@ -829,6 +849,9 @@
+ int wideness = 0;
+ Char *widec = 0;
+ #define WIDEC_PTR(cell) widec ? &widec[cell] : 0
++#define BLANK_CEL(cell) ((chars[cell] == ' ') && (widec == 0 || widec[cell] == 0))
++#else
++#define BLANK_CEL(cell) (chars[cell] == ' ')
+ #endif
+ Char cs = 0;
+ Char *chars;
+@@ -896,14 +919,16 @@
+ maxcol /= 2;
+ }
+ #endif
+- /* row does not intersect selection; don't hilite */
++ /*
++ * If row does not intersect selection; don't hilite blanks.
++ */
+ if (!force) {
+ while (col <= maxcol && (attrs[col] & ~BOLD) == 0 &&
+- (chars[col] & ~040) == 0)
++ BLANK_CEL(col))
+ col++;
+
+ while (col <= maxcol && (attrs[maxcol] & ~BOLD) == 0 &&
+- (chars[maxcol] & ~040) == 0)
++ BLANK_CEL(maxcol))
+ maxcol--;
+ }
+ #if OPT_DEC_CHRSET
+@@ -1175,6 +1200,26 @@
+ }
+
+ /*
++ * Call this wrapper to ScrnRefresh() when the data has changed. If the
++ * refresh region overlaps the selection, we will release the primary selection.
++ */
++void
++ScrnUpdate(TScreen * screen,
++ int toprow,
++ int leftcol,
++ int nrows,
++ int ncols,
++ Bool force) /* ... leading/trailing spaces */
++{
++ if (ScrnHaveSelection(screen)
++ && (toprow <= screen->endHRow)
++ && (toprow + nrows - 1 >= screen->startHRow)) {
++ ScrnDisownSelection(screen);
++ }
++ ScrnRefresh(screen, toprow, leftcol, nrows, ncols, force);
++}
++
++/*
+ * Sets the rows first though last of the buffer of screen to spaces.
+ * Requires first <= last; first, last are rows of screen->buf.
+ */
+@@ -1312,7 +1357,7 @@
+ screen->topline = -screen->savedlines;
+ screen->cur_row += move_down_by;
+ screen->cursor_row += move_down_by;
+- ScrollSelection(screen, move_down_by);
++ ScrollSelection(screen, move_down_by, True);
+
+ if (screen->alternate)
+ SwitchBufPtrs(screen); /* put the pointers back */
+@@ -1418,3 +1463,301 @@
+
+ return False;
+ }
++
++/*
++ * Copy the rectangle boundaries into a struct, providing default values as
++ * needed.
++ */
++void
++xtermParseRect(TScreen * screen, int nparams, int *params, XTermRect * target)
++{
++ memset(target, 0, sizeof(*target));
++ target->top = (nparams > 0) ? params[0] : getMinRow(screen) + 1;
++ target->left = (nparams > 1) ? params[1] : getMinCol(screen) + 1;
++ target->bottom = (nparams > 2) ? params[2] : getMaxRow(screen) + 1;
++ target->right = (nparams > 3) ? params[3] : getMaxCol(screen) + 1;
++ TRACE(("parsed rectangle %d,%d %d,%d\n",
++ target->top,
++ target->left,
++ target->bottom,
++ target->right));
++}
++
++static Bool
++validRect(TScreen * screen, XTermRect * target)
++{
++ TRACE(("comparing against screensize %dx%d\n",
++ getMaxRow(screen) + 1,
++ getMaxCol(screen) + 1));
++ return (target != 0
++ && target->top > getMinRow(screen)
++ && target->left > getMinCol(screen)
++ && target->top <= target->bottom
++ && target->left <= target->right
++ && target->top <= getMaxRow(screen) + 1
++ && target->right <= getMaxCol(screen) + 1);
++}
++
++/*
++ * Fills a rectangle with the given character and video-attributes.
++ */
++void
++ScrnFillRectangle(TScreen * screen, XTermRect * target, Char value, unsigned flags)
++{
++ TRACE(("filling rectangle with '%c'\n", value));
++ if (validRect(screen, target)) {
++ int left = target->left - 1;
++ int size = target->right - left;
++ int row;
++
++ flags &= ATTRIBUTES;
++ flags |= CHARDRAWN;
++ for (row = target->bottom - 1; row >= (target->top - 1); row--) {
++ TRACE(("filling %d [%d..%d]\n", row, left + 1, left + size));
++ memset(SCRN_BUF_ATTRS(screen, row) + left, flags, size);
++ memset(SCRN_BUF_CHARS(screen, row) + left, value, size);
++ if_OPT_WIDE_CHARS(screen, {
++ bzero(SCRN_BUF_WIDEC(screen, row) + left, size);
++ });
++ }
++ ScrnUpdate(screen,
++ target->top - 1,
++ target->left - 1,
++ (target->bottom - target->top) + 1,
++ (target->right - target->left) + 1,
++ False);
++ }
++}
++
++#if OPT_DEC_RECTOPS
++/*
++ * Copies the source rectangle to the target location, including video
++ * attributes.
++ *
++ * This implementation ignores page numbers.
++ *
++ * The reference manual does not indicate if it handles overlapping copy
++ * properly - so we make a local copy of the source rectangle first, then apply
++ * the target from that.
++ */
++void
++ScrnCopyRectangle(TScreen * screen, XTermRect * source, int nparam, int *params)
++{
++ TRACE(("copying rectangle\n"));
++
++ if (validRect(screen, source)) {
++ XTermRect target;
++ xtermParseRect(screen,
++ ((nparam > 3) ? 2 : (nparam - 1)),
++ params + 1,
++ &target);
++ if (validRect(screen, &target)) {
++ int high = (source->bottom - source->top) + 1;
++ int wide = (source->right - source->left) + 1;
++ int size = (high * wide);
++ int row, col, n;
++
++ Char *attrs = malloc(size);
++ Char *chars = malloc(size);
++
++#if OPT_WIDE_CHARS
++ Char *widec = malloc(size);
++ if (widec == 0)
++ return;
++#endif
++ if (attrs == 0
++ || chars == 0)
++ return;
++
++ TRACE(("OK - make copy %dx%d\n", high, wide));
++ target.bottom = target.top + (high - 1);
++ target.right = target.left + (wide - 1);
++
++ for (row = source->top - 1; row < source->bottom; ++row) {
++ for (col = source->left - 1; col < source->right; ++col) {
++ n = ((1 + row - source->top) * wide) + (1 + col - source->left);
++ attrs[n] = SCRN_BUF_ATTRS(screen, row)[col] | CHARDRAWN;
++ chars[n] = SCRN_BUF_CHARS(screen, row)[col];
++ if_OPT_WIDE_CHARS(screen, {
++ widec[n] = SCRN_BUF_WIDEC(screen, row)[col];
++ })
++ }
++ }
++ for (row = target.top - 1; row < target.bottom; ++row) {
++ for (col = target.left - 1; col < target.right; ++col) {
++ if (row >= getMinRow(screen)
++ && row <= getMaxRow(screen)
++ && col >= getMinCol(screen)
++ && col <= getMaxCol(screen)) {
++ n = ((1 + row - target.top) * wide) + (1 + col - target.left);
++ SCRN_BUF_ATTRS(screen, row)[col] = attrs[n];
++ SCRN_BUF_CHARS(screen, row)[col] = chars[n];
++ if_OPT_WIDE_CHARS(screen, {
++ SCRN_BUF_WIDEC(screen, row)[col] = widec[n];
++ })
++ }
++ }
++ }
++ free(attrs);
++ free(chars);
++#if OPT_WIDE_CHARS
++ free(widec);
++#endif
++
++ ScrnUpdate(screen,
++ (target.top - 1),
++ (target.left - 1),
++ (target.bottom - target.top) + 1,
++ ((target.right - target.left) + 1),
++ False);
++ }
++ }
++}
++
++/*
++ * Modifies the video-attributes only - so selection is unaffected.
++ */
++void
++ScrnMarkRectangle(TScreen * screen,
++ XTermRect * target,
++ Bool reverse,
++ int nparam,
++ int *params)
++{
++ Bool exact = (screen->cur_decsace == 2);
++
++ TRACE(("%s %s\n",
++ reverse ? "reversing" : "marking",
++ (exact
++ ? "rectangle"
++ : "region")));
++
++ if (validRect(screen, target)) {
++ int top = target->top - 1;
++ int bottom = target->bottom - 1;
++ int row, col;
++ int n;
++
++ for (row = top; row <= bottom; ++row) {
++ int left = ((exact || (row == top))
++ ? (target->left - 1)
++ : getMinCol(screen));
++ int right = ((exact || (row == bottom))
++ ? (target->right - 1)
++ : getMaxCol(screen));
++
++ TRACE(("marking %d [%d..%d]\n", row, left + 1, right + 1));
++ for (col = left; col <= right; ++col) {
++ unsigned flags = SCRN_BUF_ATTRS(screen, row)[col];
++
++ for (n = 0; n < nparam; ++n) {
++#if OPT_TRACE
++ if (row == top && col == left)
++ TRACE(("attr param[%d] %d\n", n + 1, params[n]));
++#endif
++ if (reverse) {
++ switch (params[n]) {
++ case 1:
++ flags ^= BOLD;
++ break;
++ case 4:
++ flags ^= UNDERLINE;
++ break;
++ case 5:
++ flags ^= BLINK;
++ break;
++ case 7:
++ flags ^= INVERSE;
++ break;
++ }
++ } else {
++ switch (params[n]) {
++ case 0:
++ flags &= ~SGR_MASK;
++ break;
++ case 1:
++ flags |= BOLD;
++ break;
++ case 4:
++ flags |= UNDERLINE;
++ break;
++ case 5:
++ flags |= BLINK;
++ break;
++ case 7:
++ flags |= INVERSE;
++ break;
++ case 22:
++ flags &= ~BOLD;
++ break;
++ case 24:
++ flags &= ~UNDERLINE;
++ break;
++ case 25:
++ flags &= ~BLINK;
++ break;
++ case 27:
++ flags &= ~INVERSE;
++ break;
++ }
++ }
++ }
++#if OPT_TRACE
++ if (row == top && col == left)
++ TRACE(("first mask-change is %#x\n",
++ SCRN_BUF_ATTRS(screen, row)[col] ^ flags));
++#endif
++ SCRN_BUF_ATTRS(screen, row)[col] = flags;
++ }
++ }
++ ScrnRefresh(screen,
++ (target->top - 1),
++ (exact ? (target->left - 1) : getMinCol(screen)),
++ (target->bottom - target->top) + 1,
++ (exact
++ ? ((target->right - target->left) + 1)
++ : (getMaxCol(screen) - getMinCol(screen) + 1)),
++ False);
++ }
++}
++
++/*
++ * Resets characters to space, except where prohibited by DECSCA. Video
++ * attributes are untouched.
++ */
++void
++ScrnWipeRectangle(TScreen * screen,
++ XTermRect * target)
++{
++ TRACE(("wiping rectangle\n"));
++
++ if (validRect(screen, target)) {
++ int top = target->top - 1;
++ int bottom = target->bottom - 1;
++ int row, col;
++
++ for (row = top; row <= bottom; ++row) {
++ int left = (target->left - 1);
++ int right = (target->right - 1);
++
++ TRACE(("wiping %d [%d..%d]\n", row, left + 1, right + 1));
++ for (col = left; col <= right; ++col) {
++ if (!((screen->protected_mode == DEC_PROTECT)
++ && (SCRN_BUF_ATTRS(screen, row)[col] & PROTECTED))) {
++ SCRN_BUF_ATTRS(screen, row)[col] |= CHARDRAWN;
++ SCRN_BUF_CHARS(screen, row)[col] = ' ';
++ if_OPT_WIDE_CHARS(screen, {
++ SCRN_BUF_WIDEC(screen, row)[col] = '\0';
++ })
++ }
++ }
++ }
++ ScrnUpdate(screen,
++ (target->top - 1),
++ (target->left - 1),
++ (target->bottom - target->top) + 1,
++ ((target->right - target->left) + 1),
++ False);
++ }
++}
++#endif /* OPT_DEC_RECTOPS */
+Index: xc/programs/xterm/scrollbar.c
+diff -u xc/programs/xterm/scrollbar.c:1.3 xc/programs/xterm/scrollbar.c:1.3.2.1
+--- xc/programs/xterm/scrollbar.c:1.3 Fri Aug 13 12:57:21 2004
++++ xc/programs/xterm/scrollbar.c Wed Jan 12 21:45:10 2005
+@@ -2,10 +2,10 @@
+ * $Xorg: scrollbar.c,v 1.4 2000/08/17 19:55:09 cpqbld Exp $
+ */
+
+-/* $XFree86: xc/programs/xterm/scrollbar.c,v 3.39 2003/10/20 00:58:55 dickey Exp $ */
++/* $XFree86: xc/programs/xterm/scrollbar.c,v 3.40 2004/12/01 01:27:47 dickey Exp $ */
+
+ /*
+- * Copyright 2000-2002,2003 by Thomas E. Dickey
++ * Copyright 2000-2003,2004 by Thomas E. Dickey
+ *
+ * All Rights Reserved
+ *
+@@ -95,10 +95,10 @@
+ XtGeometryResult geomreqresult;
+ Dimension reqWidth, reqHeight, repWidth, repHeight;
+ #ifndef NO_ACTIVE_ICON
+- struct _vtwin *saveWin = screen->whichVwin;
++ struct _vtwin *saveWin = WhichVWin(screen);
+
+ /* all units here want to be in the normal font units */
+- screen->whichVwin = &screen->fullVwin;
++ WhichVWin(screen) = &screen->fullVwin;
+ #endif /* NO_ACTIVE_ICON */
+
+ /*
+@@ -209,7 +209,7 @@
+ XSetWMNormalHints(screen->display, XtWindow(XtParent(xw)), &sizehints);
+ #endif
+ #ifndef NO_ACTIVE_ICON
+- screen->whichVwin = saveWin;
++ WhichVWin(screen) = saveWin;
+ #endif /* NO_ACTIVE_ICON */
+ }
+
+@@ -343,7 +343,7 @@
+ scrolling_copy_area(screen, scrolltop, scrollheight, -i);
+ screen->topline = top;
+
+- ScrollSelection(screen, i);
++ ScrollSelection(screen, i, True);
+
+ XClearArea(
+ screen->display,
+@@ -621,7 +621,7 @@
+ Widget gw,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * nparams)
++ Cardinal *nparams)
+ {
+ long amount;
+
+@@ -636,7 +636,7 @@
+ Widget gw,
+ XEvent * event GCC_UNUSED,
+ String * params,
+- Cardinal * nparams)
++ Cardinal *nparams)
+ {
+ long amount;
+
+Index: xc/programs/xterm/testxmc.c
+diff -u xc/programs/xterm/testxmc.c:1.3 xc/programs/xterm/testxmc.c:1.3.2.1
+--- xc/programs/xterm/testxmc.c:1.3 Fri Aug 13 12:57:21 2004
++++ xc/programs/xterm/testxmc.c Wed Jan 12 21:45:10 2005
+@@ -1,7 +1,7 @@
+-/* $XTermId: testxmc.c,v 1.23 2004/04/18 20:49:43 tom Exp $ */
++/* $XTermId: testxmc.c,v 1.25 2004/12/01 01:27:47 tom Exp $ */
+
+ /*
+- * $XFree86: xc/programs/xterm/testxmc.c,v 3.10 2004/04/18 20:49:43 dickey Exp $
++ * $XFree86: xc/programs/xterm/testxmc.c,v 3.11 2004/12/01 01:27:47 dickey Exp $
+ */
+
+ /************************************************************
+@@ -220,7 +220,7 @@
+ row, col));
+
+ if (changed) {
+- ScrnRefresh(screen, screen->cur_row, 0, row + 1 - screen->cur_row,
++ ScrnUpdate(screen, screen->cur_row, 0, row + 1 - screen->cur_row,
+ screen->max_col + 1, True);
+ }
+ }
+Index: xc/programs/xterm/trace.c
+diff -u xc/programs/xterm/trace.c:1.3 xc/programs/xterm/trace.c:1.3.2.1
+--- xc/programs/xterm/trace.c:1.3 Fri Aug 13 12:57:21 2004
++++ xc/programs/xterm/trace.c Wed Jan 12 21:45:10 2005
+@@ -1,7 +1,7 @@
+-/* $XTermId: trace.c,v 1.53 2004/07/20 01:14:41 tom Exp $ */
++/* $XTermId: trace.c,v 1.56 2004/12/01 01:27:47 tom Exp $ */
+
+ /*
+- * $XFree86: xc/programs/xterm/trace.c,v 3.20 2004/07/20 01:14:41 dickey Exp $
++ * $XFree86: xc/programs/xterm/trace.c,v 3.21 2004/12/01 01:27:47 dickey Exp $
+ */
+
+ /************************************************************
+@@ -249,6 +249,8 @@
+ TRACE(("... xcelerat %#08lx\n", (long) xcelerat));
+ result = _XtPrintXlations(w, xlations, xcelerat, True);
+ TRACE(("%s\n", result != 0 ? result : "(null)"));
++ if (result)
++ XFree(result);
+ } else {
+ TRACE(("none (widget is null)\n"));
+ }
+@@ -347,7 +349,7 @@
+ static Boolean
+ standard_option(char *opt)
+ {
+- static char *table[] =
++ static const char *table[] =
+ {
+ "+rv",
+ "+synchronous",
+Index: xc/programs/xterm/util.c
+diff -u xc/programs/xterm/util.c:1.3 xc/programs/xterm/util.c:1.3.2.1
+--- xc/programs/xterm/util.c:1.3 Fri Aug 13 12:57:21 2004
++++ xc/programs/xterm/util.c Wed Jan 12 21:45:10 2005
+@@ -1,10 +1,10 @@
+-/* $XTermId: util.c,v 1.196 2004/08/08 22:36:13 tom Exp $ */
++/* $XTermId: util.c,v 1.210 2004/12/01 01:27:47 tom Exp $ */
+
+ /*
+ * $Xorg: util.c,v 1.3 2000/08/17 19:55:10 cpqbld Exp $
+ */
+
+-/* $XFree86: xc/programs/xterm/util.c,v 3.85 2004/08/08 22:36:13 dickey Exp $ */
++/* $XFree86: xc/programs/xterm/util.c,v 3.86 2004/12/01 01:27:47 dickey Exp $ */
+
+ /*
+ * Copyright 1999-2003,2004 by Thomas E. Dickey
+@@ -158,7 +158,7 @@
+ }
+ scrolling_copy_area(screen, scrolltop + screen->scroll_amt,
+ scrollheight, screen->scroll_amt);
+- ScrollSelection(screen, -(screen->scroll_amt));
++ ScrollSelection(screen, -(screen->scroll_amt), False);
+ screen->scroll_amt = 0;
+ screen->refresh_amt = 0;
+ if (refreshheight > 0) {
+@@ -179,9 +179,9 @@
+ int amount = screen->refresh_amt;
+ int row = screen->cur_row;
+
+- if (amount == 0)
++ if (amount == 0) {
+ return (0);
+- if (amount > 0) {
++ } else if (amount > 0) {
+ int bottom;
+
+ if (row == (bottom = screen->bot_marg) - amount) {
+@@ -218,12 +218,17 @@
+ int scrolltop;
+ int scrollheight;
+
++ TRACE(("xtermScroll count=%d\n", amount));
++
+ screen->cursor_busy += 1;
+ screen->cursor_moved = TRUE;
+
+ if (screen->cursor_state)
+ HideCursor();
+
++ if (ScrnAreLinesInSelection(screen, screen->top_marg, screen->bot_marg))
++ ScrnDisownSelection(screen);
++
+ if (amount > i)
+ amount = i;
+
+@@ -241,7 +246,7 @@
+ }
+ refreshheight = 0;
+ } else {
+- ScrollSelection(screen, -(amount));
++ ScrollSelection(screen, -(amount), False);
+ if (amount == i) {
+ ClearScreen(screen);
+ screen->cursor_busy -= 1;
+@@ -328,12 +333,17 @@
+ int scrolltop;
+ int scrollheight;
+
++ TRACE(("RevScroll count=%d\n", amount));
++
+ screen->cursor_busy += 1;
+ screen->cursor_moved = TRUE;
+
+ if (screen->cursor_state)
+ HideCursor();
+
++ if (ScrnAreLinesInSelection(screen, screen->top_marg, screen->bot_marg))
++ ScrnDisownSelection(screen);
++
+ if (amount > i)
+ amount = i;
+
+@@ -400,11 +410,17 @@
+ int scrolltop;
+ int scrollheight;
+
+- if (screen->cur_row < screen->top_marg ||
+- screen->cur_row > screen->bot_marg)
++ if (!ScrnIsLineInMargins(screen, screen->cur_row - screen->topline))
+ return;
++
++ TRACE(("InsertLine count=%d\n", n));
++
+ if (screen->cursor_state)
+ HideCursor();
++
++ if (ScrnAreLinesInSelection(screen, screen->top_marg, screen->bot_marg))
++ ScrnDisownSelection(screen);
++
+ screen->do_wrap = 0;
+ if (n > (i = screen->bot_marg - screen->cur_row + 1))
+ n = i;
+@@ -457,11 +473,17 @@
+ int scrolltop;
+ int scrollheight;
+
+- if (screen->cur_row < screen->top_marg ||
+- screen->cur_row > screen->bot_marg)
++ if (!ScrnIsLineInMargins(screen, screen->cur_row - screen->topline))
+ return;
++
++ TRACE(("DeleteLine count=%d\n", n));
++
+ if (screen->cursor_state)
+ HideCursor();
++
++ if (ScrnAreLinesInSelection(screen, screen->top_marg, screen->bot_marg))
++ ScrnDisownSelection(screen);
++
+ screen->do_wrap = 0;
+ if (n > (i = screen->bot_marg - screen->cur_row + 1))
+ n = i;
+@@ -528,15 +550,23 @@
+ void
+ InsertChar(TScreen * screen, int n)
+ {
+- register int width;
++ int width;
++ int row = screen->cur_row - screen->topline;
+
+ if (screen->cursor_state)
+ HideCursor();
++
++ TRACE(("InsertChar count=%d\n", n));
++
++ if (ScrnHaveSelection(screen)
++ && ScrnIsLineInSelection(screen, row)) {
++ ScrnDisownSelection(screen);
++ }
+ screen->do_wrap = 0;
+ if (n > (width = screen->max_col + 1 - screen->cur_col))
+ n = width;
+
+- if (screen->cur_row - screen->topline <= screen->max_row) {
++ if (row <= screen->max_row) {
+ if (!AddToRefresh(screen)) {
+ int col = screen->max_col + 1 - n;
+ if (screen->scroll_amt)
+@@ -557,12 +587,11 @@
+ col - screen->cur_col,
+ n);
+
+- ClearCurBackground(
+- screen,
+- CursorY(screen, screen->cur_row),
+- CurCursorX(screen, screen->cur_row, screen->cur_col),
+- FontHeight(screen),
+- n * CurFontWidth(screen, screen->cur_row));
++ ClearCurBackground(screen,
++ CursorY(screen, screen->cur_row),
++ CurCursorX(screen, screen->cur_row, screen->cur_col),
++ FontHeight(screen),
++ n * CurFontWidth(screen, screen->cur_row));
+ }
+ }
+ /* adjust screen->buf */
+@@ -576,6 +605,7 @@
+ DeleteChar(TScreen * screen, int n)
+ {
+ int width;
++ int row = screen->cur_row - screen->topline;
+
+ if (screen->cursor_state)
+ HideCursor();
+@@ -583,7 +613,14 @@
+ if (n > (width = screen->max_col + 1 - screen->cur_col))
+ n = width;
+
+- if (screen->cur_row - screen->topline <= screen->max_row) {
++ TRACE(("DeleteChar count=%d\n", n));
++
++ if (ScrnHaveSelection(screen)
++ && ScrnIsLineInSelection(screen, row)) {
++ ScrnDisownSelection(screen);
++ }
++
++ if (row <= screen->max_row) {
+ if (!AddToRefresh(screen)) {
+ int col = screen->max_col + 1 - n;
+ if (screen->scroll_amt)
+@@ -598,12 +635,11 @@
+ col - screen->cur_col,
+ -n);
+
+- ClearCurBackground(
+- screen,
+- CursorY(screen, screen->cur_row),
+- CurCursorX(screen, screen->cur_row, col),
+- FontHeight(screen),
+- n * CurFontWidth(screen, screen->cur_row));
++ ClearCurBackground(screen,
++ CursorY(screen, screen->cur_row),
++ CurCursorX(screen, screen->cur_row, col),
++ FontHeight(screen),
++ n * CurFontWidth(screen, screen->cur_row));
+ }
+ }
+ /* adjust screen->buf */
+@@ -685,6 +721,16 @@
+ int rc = 1;
+ int flags = TERM_COLOR_FLAGS;
+
++ TRACE(("ClearInLine(row=%d, col=%d, len=%d) vs %d..%d\n",
++ row, col, len,
++ screen->startHRow,
++ screen->startHCol));
++
++ if (ScrnHaveSelection(screen)
++ && ScrnIsLineInSelection(screen, row)) {
++ ScrnDisownSelection(screen);
++ }
++
+ /*
+ * If we're clearing to the end of the line, we won't count this as
+ * "drawn" characters. We'll only do cut/paste on "drawn" characters,
+@@ -745,12 +791,11 @@
+ if (!AddToRefresh(screen)) {
+ if (screen->scroll_amt)
+ FlushScroll(screen);
+- ClearCurBackground(
+- screen,
+- CursorY(screen, row),
+- CurCursorX(screen, row, col),
+- FontHeight(screen),
+- len * CurFontWidth(screen, row));
++ ClearCurBackground(screen,
++ CursorY(screen, row),
++ CurCursorX(screen, row, col),
++ FontHeight(screen),
++ len * CurFontWidth(screen, row));
+ }
+ }
+
+@@ -827,6 +872,8 @@
+
+ if (screen->cursor_state)
+ HideCursor();
++
++ ScrnDisownSelection(screen);
+ screen->do_wrap = 0;
+ if ((top = -screen->topline) <= screen->max_row) {
+ if (screen->scroll_amt)
+@@ -1068,10 +1115,13 @@
+ XExposeEvent *reply = (XExposeEvent *) event;
+
+ #ifndef NO_ACTIVE_ICON
+- if (reply->window == screen->iconVwin.window)
+- screen->whichVwin = &screen->iconVwin;
+- else
+- screen->whichVwin = &screen->fullVwin;
++ if (reply->window == screen->iconVwin.window) {
++ WhichVWin(screen) = &screen->iconVwin;
++ TRACE(("HandleExposure - icon\n"));
++ } else {
++ WhichVWin(screen) = &screen->fullVwin;
++ TRACE(("HandleExposure - normal\n"));
++ }
+ #endif /* NO_ACTIVE_ICON */
+
+ /* if not doing CopyArea or if this is a GraphicsExpose, don't translate */
+@@ -1818,15 +1868,25 @@
+
+ /*
+ * If we're reading UTF-8 from the client, we may have a
+- * line-drawing character. Translate it back to our box-code.
++ * line-drawing character. Translate it back to our box-code
++ * if it is really a line-drawing character (since the
++ * fonts used by Xft generally do not have correct glyphs),
++ * or if Xft can tell us that the glyph is really missing.
+ */
+ if_OPT_WIDE_CHARS(screen, {
+- ch = ucs2dec(ch | (text2[last] << 8));
++ int full = (ch | (text2[last] << 8));
++ int part = ucs2dec(full);
++ if (xtermIsDecGraphic(part) &&
++ (xtermIsLineDrawing(part)
++ || xtermXftMissing(font, full)))
++ ch = part;
++ else
++ ch = full;
+ });
+ /*
+- * A value less than 32 has to be one of our box-codes.
++ * If we have one of our box-codes, draw it directly.
+ */
+- if (ch > 0 && ch < 32) {
++ if (xtermIsDecGraphic(ch)) {
+ /* line drawing character time */
+ if (last > first) {
+ xtermXftDrawString(screen, flags,
+@@ -1879,13 +1939,14 @@
+ * If we're asked to display a proportional font, do this with a fixed
+ * pitch. Yes, it's ugly. But we cannot distinguish the use of xterm
+ * as a dumb terminal vs its use as in fullscreen programs such as vi.
++ * Hint: do not try to use a proportional font in the icon.
+ */
+- if (!(flags & CHARBYCHAR) && screen->fnt_prop) {
++ if (!IsIcon(screen) && !(flags & CHARBYCHAR) && screen->fnt_prop) {
+ int adj, width;
+ GC fillGC = gc; /* might be cursorGC */
+ XFontStruct *fs = ((flags & BOLDATTR(screen))
+- ? screen->fnt_bold
+- : screen->fnt_norm);
++ ? BoldFont(screen)
++ : NormalFont(screen));
+
+ #define GC_PAIRS(a,b) \
+ if (gc == a) fillGC = b; \
+@@ -1920,19 +1981,20 @@
+ }
+ #if OPT_BOX_CHARS
+ /* If the font is incomplete, draw some substitutions */
+- if (!(flags & NOTRANSLATION)
++ if (!IsIcon(screen)
++ && !(flags & NOTRANSLATION)
+ && (!screen->fnt_boxes || screen->force_box_chars)) {
+ /* Fill in missing box-characters.
+ Find regions without missing characters, and draw
+ them calling ourselves recursively. Draw missing
+ characters via xtermDrawBoxChar(). */
+ XFontStruct *font = ((flags & BOLD)
+- ? screen->fnt_bold
+- : screen->fnt_norm);
++ ? BoldFont(screen)
++ : NormalFont(screen));
+ Cardinal last, first = 0;
+ for (last = 0; last < len; last++) {
+ unsigned ch = text[last];
+- Boolean isMissing;
++ Bool isMissing;
+ #if OPT_WIDE_CHARS
+ if (text2 != 0)
+ ch |= (text2[last] << 8);
+@@ -1990,14 +2052,15 @@
+ y += FontAscent(screen);
+
+ #if OPT_WIDE_CHARS
+- if (screen->wide_chars) {
++ if (screen->wide_chars || screen->unicode_font) {
+ int ascent_adjust = 0;
+ static XChar2b *sbuf;
+ static Cardinal slen;
+ Cardinal n;
+ int ch = text[0] | (text2[0] << 8);
+- int wideness = ((on_wide || iswide(ch) != 0)
+- && (screen->fnt_dwd != NULL));
++ int wideness = (!IsIcon(screen)
++ && ((on_wide || iswide(ch) != 0)
++ && (screen->fnt_dwd != NULL)));
+ unsigned char *endtext = text + len;
+ if (slen < len) {
+ slen = (len + 1) * 2;
+@@ -2006,6 +2069,32 @@
+ for (n = 0; n < len; n++) {
+ sbuf[n].byte2 = *text;
+ sbuf[n].byte1 = *text2;
++#if OPT_MINI_LUIT
++#define UCS2SBUF(n,value) sbuf[n].byte2 = (value & 0xff);\
++ sbuf[n].byte1 = (value >> 8)
++#define Map2Sbuf(n,from,to) (*text == from) { UCS2SBUF(n,to); }
++ if (screen->latin9_mode && !screen->utf8_mode && *text2 == 0) {
++
++ /* see http://www.cs.tut.fi/~jkorpela/latin9.html */
++ /* *INDENT-OFF* */
++ if Map2Sbuf(n, 0xa4, 0x20ac)
++ else if Map2Sbuf(n, 0xa6, 0x0160)
++ else if Map2Sbuf(n, 0xa8, 0x0161)
++ else if Map2Sbuf(n, 0xb4, 0x017d)
++ else if Map2Sbuf(n, 0xb8, 0x017e)
++ else if Map2Sbuf(n, 0xbc, 0x0152)
++ else if Map2Sbuf(n, 0xbd, 0x0153)
++ else if Map2Sbuf(n, 0xbe, 0x0178)
++ /* *INDENT-ON* */
++
++ }
++ if (screen->unicode_font
++ && *text2 == 0
++ && (*text == 0x7f || *text < 0x20)) {
++ int ni = dec2ucs(*text == 0x7f ? 0 : *text);
++ UCS2SBUF(n, ni);
++ }
++#endif /* OPT_MINI_LUIT */
+ text++;
+ text2++;
+ if (wideness) {
+@@ -2031,17 +2120,19 @@
+ if ((flags & BOLDATTR(screen)) != 0
+ && screen->fnt_dwdb->fid) {
+ XSetFont(screen->display, gc, screen->fnt_dwdb->fid);
+- ascent_adjust = screen->fnt_dwdb->ascent - screen->fnt_norm->ascent;
++ ascent_adjust = (screen->fnt_dwdb->ascent
++ - NormalFont(screen)->ascent);
+ } else {
+ XSetFont(screen->display, gc, screen->fnt_dwd->fid);
+- ascent_adjust = screen->fnt_dwd->ascent - screen->fnt_norm->ascent;
++ ascent_adjust = (screen->fnt_dwd->ascent
++ - NormalFont(screen)->ascent);
+ }
+ /* fix ascent */
+ } else if ((flags & BOLDATTR(screen)) != 0
+- && screen->fnt_bold->fid) {
+- XSetFont(screen->display, gc, screen->fnt_bold->fid);
++ && BoldFont(screen)->fid) {
++ XSetFont(screen->display, gc, BoldFont(screen)->fid);
+ } else {
+- XSetFont(screen->display, gc, screen->fnt_norm->fid);
++ XSetFont(screen->display, gc, NormalFont(screen)->fid);
+ }
+
+ if (flags & NOBACKGROUND)
+@@ -2245,29 +2336,25 @@
+ * Using the "current" SGR background, clear a rectangle.
+ */
+ void
+-ClearCurBackground(
+- TScreen * screen,
+- int top,
+- int left,
+- unsigned height,
+- unsigned width)
+-{
+- XSetWindowBackground(
+- screen->display,
+- VWindow(screen),
+- getXtermBackground(term->flags, term->cur_background));
++ClearCurBackground(TScreen * screen,
++ int top,
++ int left,
++ unsigned height,
++ unsigned width)
++{
++ XSetWindowBackground(screen->display,
++ VWindow(screen),
++ getXtermBackground(term->flags, term->cur_background));
+
+ XClearArea(screen->display, VWindow(screen),
+ left, top, width, height, FALSE);
+
+- XSetWindowBackground(
+- screen->display,
+- VWindow(screen),
+- getXtermBackground(term->flags, MAXCOLORS));
++ XSetWindowBackground(screen->display,
++ VWindow(screen),
++ getXtermBackground(term->flags, MAXCOLORS));
+ }
+ #endif /* OPT_ISO_COLORS */
+
+-#if OPT_WIDE_CHARS
+ /*
+ * Returns a single 8/16-bit number for the given cell
+ */
+@@ -2281,22 +2368,6 @@
+ return ch;
+ }
+
+-unsigned
+-getXtermCellComb1(TScreen * screen, int row, int col)
+-{
+- unsigned ch = SCRN_BUF_COM1L(screen, row)[col];
+- ch |= (SCRN_BUF_COM1H(screen, row)[col] << 8);
+- return ch;
+-}
+-
+-unsigned
+-getXtermCellComb2(TScreen * screen, int row, int col)
+-{
+- unsigned ch = SCRN_BUF_COM2L(screen, row)[col];
+- ch |= (SCRN_BUF_COM2H(screen, row)[col] << 8);
+- return ch;
+-}
+-
+ /*
+ * Sets a single 8/16-bit number for the given cell
+ */
+@@ -2313,6 +2384,23 @@
+ });
+ }
+
++#if OPT_WIDE_CHARS
++unsigned
++getXtermCellComb1(TScreen * screen, int row, int col)
++{
++ unsigned ch = SCRN_BUF_COM1L(screen, row)[col];
++ ch |= (SCRN_BUF_COM1H(screen, row)[col] << 8);
++ return ch;
++}
++
++unsigned
++getXtermCellComb2(TScreen * screen, int row, int col)
++{
++ unsigned ch = SCRN_BUF_COM2L(screen, row)[col];
++ ch |= (SCRN_BUF_COM2H(screen, row)[col] << 8);
++ return ch;
++}
++
+ /*
+ * Add a combining character for the given cell
+ */
+@@ -2446,7 +2534,7 @@
+ visibleKeyboardType(term->keyboard.type)));
+ if (set) {
+ if (wasSet) {
+- fprintf(stderr, "Conflicting keyboard type option (%d/%d)\n",
++ fprintf(stderr, "Conflicting keyboard type option (%u/%u)\n",
+ term->keyboard.type, type);
+ }
+ term->keyboard.type = type;
+Index: xc/programs/xterm/uxterm
+diff -u xc/programs/xterm/uxterm:1.3 xc/programs/xterm/uxterm:1.3.2.1
+--- xc/programs/xterm/uxterm:1.3 Fri Aug 13 12:57:21 2004
++++ xc/programs/xterm/uxterm Wed Jan 12 21:45:10 2005
+@@ -1,9 +1,10 @@
+ #!/bin/sh
+-# $XTermId: uxterm,v 1.15 2004/07/13 00:41:30 tom Exp $
+-# $XFree86: xc/programs/xterm/uxterm,v 1.9 2004/07/13 00:41:30 dickey Exp $
++# $XTermId: uxterm,v 1.18 2004/12/01 01:27:47 tom Exp $
++# $XFree86: xc/programs/xterm/uxterm,v 1.10 2004/12/01 01:27:47 dickey Exp $
+ # wrapper script to setup xterm with UTF-8 locale
+
+ program=xterm
++locale=`(LC_ALL=C LC_CTYPE=C LANG=C locale >/dev/null) 2>&1`
+ found=no
+
+ # Check for -version and -help options, to provide a simple return without
+@@ -46,11 +47,21 @@
+ # user's shell does not reset unknown locale specifiers, but not all shells do.
+ if test $found != yes ; then
+ if test -n "$value" ; then
+- eval ${name}=`echo ${value} |sed -e 's/[.@].*//'`.UTF-8
+- eval export ${name}
++ value=`echo ${value} |sed -e 's/[.@].*//'`.UTF-8
+ else
+- LC_CTYPE=en_US.UTF-8
+- export LC_CTYPE
++ name="LC_CTYPE"
++ value="en_US.UTF-8"
++ fi
++ eval ${name}=${value}
++ eval export ${name}
++ if test -z "$locale" ; then
++ # The 'locale' program tries to do a sanity check.
++ check=`(locale >/dev/null) 2>&1`
++ if test -n "$check" ; then
++ echo "uxterm tried to use locale $value" >&2
++ echo "$check" >&2
++ exit 1
++ fi
+ fi
+ fi
+
+Index: xc/programs/xterm/version.h
+diff -u xc/programs/xterm/version.h:1.4 xc/programs/xterm/version.h:1.4.2.1
+--- xc/programs/xterm/version.h:1.4 Fri Aug 20 18:46:39 2004
++++ xc/programs/xterm/version.h Wed Jan 12 21:45:10 2005
+@@ -1,5 +1,5 @@
+-/* $XTermId: version.h,v 1.233 2004/08/15 21:07:59 tom Exp $ */
+-/* $XFree86: xc/programs/xterm/version.h,v 3.107 2004/08/15 21:07:59 dickey Exp $ */
++/* $XTermId: version.h,v 1.235 2004/12/01 01:27:47 tom Exp $ */
++/* $XFree86: xc/programs/xterm/version.h,v 3.108 2004/12/01 01:27:47 dickey Exp $ */
+
+ /*
+ * These definitions are used to build the string that's printed in response to
+@@ -7,7 +7,7 @@
+ * version of X to which this version of xterm has been built. The number in
+ * parentheses is my patch number (T.Dickey).
+ */
+-#define XTERM_PATCH 196
++#define XTERM_PATCH 197
+
+ #ifndef __vendorversion__
+ #define __vendorversion__ "XTerm"
+Index: xc/programs/xterm/xstrings.c
+diff -u xc/programs/xterm/xstrings.c:1.3 xc/programs/xterm/xstrings.c:1.3.2.1
+--- xc/programs/xterm/xstrings.c:1.3 Fri Aug 13 12:57:21 2004
++++ xc/programs/xterm/xstrings.c Wed Jan 12 21:45:10 2005
+@@ -1,8 +1,10 @@
+-/* $XFree86: xc/programs/xterm/xstrings.c,v 1.7 2003/11/13 01:16:38 dickey Exp $ */
++/* $XTermId: xstrings.c,v 1.20 2004/12/01 01:27:47 tom Exp $ */
++
++/* $XFree86: xc/programs/xterm/xstrings.c,v 1.8 2004/12/01 01:27:47 dickey Exp $ */
+
+ /************************************************************
+
+-Copyright 2000-2002,2003 by Thomas E. Dickey
++Copyright 2000-2003,2004 by Thomas E. Dickey
+
+ All Rights Reserved
+
+@@ -62,7 +64,9 @@
+ return 1;
+
+ while (len-- != 0) {
+- if (toupper(CharOf(*s1)) != toupper(CharOf(*s2)))
++ int c1 = toupper(CharOf(*s1));
++ int c2 = toupper(CharOf(*s2));
++ if (c1 != c2)
+ return 1;
+ s1++, s2++;
+ }
+Index: xc/programs/xterm/xterm.h
+diff -u xc/programs/xterm/xterm.h:1.3 xc/programs/xterm/xterm.h:1.3.2.1
+--- xc/programs/xterm/xterm.h:1.3 Fri Aug 13 12:57:21 2004
++++ xc/programs/xterm/xterm.h Wed Jan 12 21:45:10 2005
+@@ -1,6 +1,6 @@
+-/* $XTermId: xterm.h,v 1.291 2004/07/13 00:41:30 tom Exp $ */
++/* $XTermId: xterm.h,v 1.306 2004/12/01 01:27:47 tom Exp $ */
+
+-/* $XFree86: xc/programs/xterm/xterm.h,v 3.102 2004/07/13 00:41:30 dickey Exp $ */
++/* $XFree86: xc/programs/xterm/xterm.h,v 3.103 2004/12/01 01:27:47 dickey Exp $ */
+
+ /************************************************************
+
+@@ -260,7 +260,7 @@
+ #include <proto.h>
+ #include <ptyx.h>
+
+-#if (XtSpecificationRelease >= 6) && !defined(NO_XPOLL_H)
++#if (XtSpecificationRelease >= 6) && !defined(NO_XPOLL_H) && !defined(sun)
+ #include <X11/Xpoll.h>
+ #define USE_XPOLL_H 1
+ #else
+@@ -405,6 +405,7 @@
+ #define XtNtekInhibit "tekInhibit"
+ #define XtNtekSmall "tekSmall"
+ #define XtNtekStartup "tekStartup"
++#define XtNtoolBar "toolBar"
+ #define XtNtiXtraScroll "tiXtraScroll"
+ #define XtNtiteInhibit "titeInhibit"
+ #define XtNtrimSelection "trimSelection"
+@@ -520,6 +521,7 @@
+ #define XtCTiXtraScroll "TiXtraScroll"
+ #define XtCTiteInhibit "TiteInhibit"
+ #define XtCTrimSelection "TrimSelection"
++#define XtCToolBar "ToolBar"
+ #define XtCUnderLine "UnderLine"
+ #define XtCUtf8 "Utf8"
+ #define XtCVT100Graphics "VT100Graphics"
+@@ -588,7 +590,7 @@
+ extern void HandleStartExtend PROTO_XT_ACTIONS_ARGS;
+ extern void ReadLineButton PROTO_XT_ACTIONS_ARGS;
+ extern void ResizeSelection (TScreen *screen, int rows, int cols);
+-extern void ScrollSelection (TScreen* screen, int amount);
++extern void ScrollSelection (TScreen* screen, int amount, Bool);
+ extern void TrackMouse (int func, int startrow, int startcol, int firstrow, int lastrow);
+ extern void TrackText (int frow, int fcol, int trow, int tcol);
+ extern void ViButton PROTO_XT_ACTIONS_ARGS;
+@@ -672,10 +674,6 @@
+ extern int xtermcapKeycode(char *params, unsigned *state);
+ #endif
+
+-#if OPT_WIDE_CHARS
+-extern int convertFromUTF8(unsigned long c, Char *strbuf);
+-#endif
+-
+ /* main.c */
+ #ifndef __UNIXOS2__
+ #define ENVP_ARG /**/
+@@ -814,9 +812,13 @@
+ extern void ScreenWrite (TScreen *screen, PAIRED_CHARS(Char *str, Char *str2), unsigned flags, unsigned cur_fg_bg, int length);
+ extern void ScrnDeleteChar (TScreen *screen, int n);
+ extern void ScrnDeleteLine (TScreen *screen, ScrnBuf sb, int n, int last, int size, int where);
++extern void ScrnFillRectangle (TScreen *, XTermRect *, Char, unsigned);
+ extern void ScrnInsertChar (TScreen *screen, int n);
+ extern void ScrnInsertLine (TScreen *screen, ScrnBuf sb, int last, int where, int n, int size);
+ extern void ScrnRefresh (TScreen *screen, int toprow, int leftcol, int nrows, int ncols, Bool force);
++extern void ScrnUpdate (TScreen *screen, int toprow, int leftcol, int nrows, int ncols, Bool force);
++extern void ScrnDisownSelection (TScreen *screen);
++extern void xtermParseRect (TScreen *, int, int *, XTermRect *);
+
+ #define ScrnClrFlag(screen, row, flag) \
+ SCRN_BUF_FLAGS(screen, row + screen->topline) = \
+@@ -837,6 +839,29 @@
+ #define ScrnSetWrapped(screen, row) ScrnSetFlag(screen, row, LINEWRAPPED)
+ #define ScrnTstWrapped(screen, row) ScrnTstFlag(screen, row, LINEWRAPPED)
+
++#define ScrnHaveSelection(screen) \
++ ((screen)->startHRow != (screen)->endHRow \
++ || (screen)->startHCol != (screen)->endHCol)
++
++#define ScrnAreLinesInSelection(screen, first, last) \
++ ((last) >= (screen)->startHRow && (first) <= (screen)->endHRow)
++
++#define ScrnIsLineInSelection(screen, line) \
++ ((line) >= (screen)->startHRow && (line) <= (screen)->endHRow)
++
++#define ScrnHaveLineMargins(screen) \
++ ((screen)->top_marg != 0 \
++ || ((screen)->bot_marg != screen->max_row))
++
++#define ScrnIsLineInMargins(screen, line) \
++ ((line) >= (screen)->top_marg && (line) <= (screen)->bot_marg)
++
++#if OPT_DEC_RECTOPS
++extern void ScrnCopyRectangle (TScreen *, XTermRect *, int, int *);
++extern void ScrnMarkRectangle (TScreen *, XTermRect *, Bool, int, int *);
++extern void ScrnWipeRectangle (TScreen *, XTermRect *);
++#endif
++
+ #if OPT_WIDE_CHARS
+ extern void ChangeToWide(TScreen * screen);
+ #endif
+@@ -974,15 +999,13 @@
+ #define curXtermChrSet(row) 0
+ #endif
+
+-#if OPT_WIDE_CHARS
+ extern unsigned getXtermCell (TScreen *screen, int row, int col);
++extern void putXtermCell (TScreen *screen, int row, int col, int ch);
++
++#if OPT_WIDE_CHARS
+ extern unsigned getXtermCellComb1 (TScreen *screen, int row, int col);
+ extern unsigned getXtermCellComb2 (TScreen *screen, int row, int col);
+ extern void addXtermCombining (TScreen *screen, int row, int col, unsigned ch);
+-extern void putXtermCell (TScreen *screen, int row, int col, int ch);
+-#else
+-#define getXtermCell(screen,row,col) SCRN_BUF_CHARS(screen, row)[col]
+-#define putXtermCell(screen,row,col,ch) SCRN_BUF_CHARS(screen, row)[col] = ch
+ #endif
+
+ #if OPT_XMC_GLITCH
+Index: xc/programs/xterm/xterm.log.html
+diff -u xc/programs/xterm/xterm.log.html:1.4 xc/programs/xterm/xterm.log.html:1.4.2.1
+--- xc/programs/xterm/xterm.log.html:1.4 Fri Aug 20 18:46:39 2004
++++ xc/programs/xterm/xterm.log.html Wed Jan 12 21:45:10 2005
+@@ -20,8 +20,8 @@
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF *
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. *
+ *****************************************************************************
+- $XTermId: xterm.log.html,v 1.173 2004/08/15 21:07:59 tom Exp $
+- $XFree86: xc/programs/xterm/xterm.log.html,v 1.130 2004/08/15 21:07:59 dickey Exp $
++ $XTermId: xterm.log.html,v 1.191 2004/12/01 01:27:47 tom Exp $
++ $XFree86: xc/programs/xterm/xterm.log.html,v 1.131 2004/12/01 01:27:47 dickey Exp $
+ -->
+ <HTML>
+ <HEAD>
+@@ -46,6 +46,7 @@
+ is the latest version of this file.
+
+ <UL>
++<LI><A HREF="#xterm_197">Patch #197 - 2004/11/30 - XFree86 4.4.99.19</A>
+ <LI><A HREF="#xterm_196">Patch #196 - 2004/8/15 - XFree86 4.4.99.12</A>
+ <LI><A HREF="#xterm_195">Patch #195 - 2004/8/8 - XFree86 4.4.99.11</A>
+ <LI><A HREF="#xterm_194">Patch #194 - 2004/7/27 - XFree86 4.4.99.11</A>
+@@ -245,6 +246,97 @@
+ <LI><A HREF="#xterm_01">Patch #1 - 1996/1/6</A>
+ </UL>
+
++<H1><A NAME="xterm_197">Patch #197 - 2004/11/30 - XFree86 4.4.99.19</A></H1>
++<ul>
++ <li>modify configure script to remove empty "-DPROJECTROOT=" definition
++ which resulted unusable values for luit's default path.
++
++ <li>update precompose.c based on Unicode 4.0.1
++
++ <li>several minor fixes based on Intel compiler warnings.
++
++ <li>change default translations so a <code>BtnDown</code> which is
++ not recognized is simply ignored rather than emitting a bell.
++ That makes it less obtrusive when the user tries to use a mouse
++ which provides more capabilities than the X mouse driver supports,
++ e.g., one with a horizontal scroll wheel (Debian #265133).
++
++ <li>note in xterm's manpage that <code>translations</code> is not
++ specific to xterm (Debian #278897).
++
++ <li>modify uxterm script to use locale program to verify if the
++ derived locale is installed (Debian #246398).
++
++ <li>correct font handling for active icon when in UTF-8 mode (report
++ by Paolo Liberatore).
++
++ <li>make active-icon and toolbar configurations work together.
++
++ <li>modify the criteria for disowning primary selection. Previously,
++ this happened anytime the cursor was moved before the end of the
++ selection. That would ensure that any insert/delete of char or
++ line, as well as scrolling, would disown the selection. The
++ new criteria change this to checking if the operations would
++ modify the data which is highlighted (Debian #277832).
++
++ <li>reimplement <code>DECALN</code> with functions for vt420 rectangles,
++ fixes selection for this case.
++
++ <li>implement vt420 rectangle operations.
++
++ <li>add parsing, for debug/test of vt220 soft-fonts.
++
++ <li>add menu entry, actions and escape sequence to allow
++ enabling/disabling toolbars at runtime.
++
++ <li>improve rendering for Xft, allow it to draw non-linedrawing
++ characters such as "pi", which were drawn from internal tables
++ with <a href="#xterm_180">patch #180</a>
++ (Freedesktop.org Bugzilla #1260).
++
++ <li>add configure option <code>--enable-mini-luit</code>, ifdef'd the
++ mini-luit feature with <code>OPT_MINI_LUIT</code>.
++
++ <li>add mini-luit feature, which supports Latin9 directly rather than
++ via luit, provided that Unicode fonts are used (Freedesktop.org
++ Bugzilla #1571, request by Stefan Dirsch, patch by Michael
++ Schroeder).
++
++ <li>for Linux, if IUTF8 is defined, e.g., on recent 2.6.x kernels,
++ set the corresponding flag for the slave pty, to enable UTF-8
++ interpretation of backspace in cooked mode (Freedesktop.org
++ Bugzilla #1578, request by Stefan Dirsch).
++
++ <li>modify <code>faceSize</code> resource to use a floating-point
++ internal value (adapted from patch by Sam Stephenson).
++
++ <li>correct handling selection of tabs over cleared space in UTF-8
++ mode. In this special case, xterm represents the whitespace with
++ a null rather than a space character (Debian #276477).
++
++ <li>amend fix for infinite loop from <a href="#xterm_192">patch
++ #192</a> to check if there is wrapped text to output in a following
++ iteration (Debian #273202).
++
++ <li>fixes ifdef'd with <code>__INTERIX</code> to allow building with
++ Interix (Windows Services for UNIX) 3.5 using the xlibs libraries
++ from freedesktop.org (patch by Min Sik Kim).
++
++ <li>amend solution for Debian #252873, #260471 from <a
++ href="#xterm_194">patch #192</a> by making the cursor not
++ explicitly colored if only the foreground color is set, and the
++ cursor is on a blank space (Debian #275473).
++
++ <li>correct logic for send/receive mode (SRM) with regard to control
++ characters.
++
++ <li>fix masking of invisible text in wide-character mode, which did
++ not work for line-drawing characters.
++
++ <li>incorporate CF_XOPEN_SOURCE into configure script, replacing
++ CF_GNU_SOURCE.
++</ul>
++
+ <H1><A NAME="xterm_196">Patch #196 - 2004/8/15 - XFree86 4.4.99.12</A></H1>
+ <ul>
+ <li>add a special case to configure script to ignore NetBSD's
+@@ -637,7 +729,7 @@
+ ways the window can be resized if fixed fonts are used. The
+ relative font sizes are derived from the fixed font sizes.
+
+- <li>add menu items and corresponding actions for switching on/off
++ <li>add menu items and corresponding actions for switching on/off
+ the UTF-8 mode and Xft (TrueType) support.
+
+ <li>add logic to handle switching UTF-8 mode on/off. It worked if
+@@ -823,7 +915,7 @@
+ </ul>
+
+ <li>make height of TrueType fonts match ascent+descent (patch by
+- Keith Packard).
++ Keith Packard).
+
+ <li>correct configure-script check for imake $CFLAGS, which did not
+ check properly if imake was not available.
+@@ -930,10 +1022,10 @@
+ <li>correct/extend some of the keypad description in ctlseqs.ms
+ (report by Henning Makholm).
+
+- <li>correct keypad-mapping table in input.c so <code>XK_KP_Equal</code>
++ <li>correct keypad-mapping table in input.c so <code>XK_KP_Equal</code>
+ works (report by Henning Makholm).
+
+- <li>modified to work with CJK double-width (bi-width/monospace) fonts.
++ <li>modified to work with CJK double-width (bi-width/monospace) fonts.
+ They're similar to Roman Czbora and David Starner's gnuunifonts in
+ that Latin letters and numbers have all the same width which is
+ exactly the half of the width of East Asian characters. (patch by
+@@ -1040,10 +1132,10 @@
+ resources that override colors when a video attribute is
+ set to <code>ColorAttrMode</code>, to make them distinct
+ from <code>ColorMode</code>. This avoids an unexpected
+- rendering of reverse video, for example (report by Paul Fox).
++ rendering of reverse video, for example (report by Paul Fox).
+
+ <li>changed class of <code>veryBoldColors</code> to
+- <code>VeryBoldColors</code>, since
++ <code>VeryBoldColors</code>, since
+ <code>ColorMode</code> is associated with boolean resources.
+
+ <li>add option <code>-k8</code> and resource
+@@ -1074,7 +1166,7 @@
+ <li>modify <code>uxterm</code> script to strip modifiers such as "@euro"
+ from the locale setting before adding ".UTF-8" (Debian #179929).
+
+- <li>modify the remaining places where tek4014 emulation uses
++ <li>modify the remaining places where tek4014 emulation uses
+ <code>XDefineCursor()</code>, to make it work as originally
+ implemented, e.g., when switching back to alpha mode.
+ Added test-screen in vttest to test this feature properly.
+@@ -1083,7 +1175,7 @@
+ <H1><A NAME="xterm_174">Patch #174 - 2003/2/25 - XFree86 4.2.99.903</A></H1>
+ <ul>
+ <li>work-around for XFree86 bug which made <code>XDefineCursor()</code>
+- on a shell-window no longer work. The tek4014 emulation used this.
++ on a shell-window no longer work. The tek4014 emulation used this.
+ Use the next lower window (report by Karl Rudolf Bauchspiess).
+
+ <li>add a resource setting to control whether the extended window
+@@ -1117,7 +1209,7 @@
+
+ <li>merge <code>Error()</code> calls and some <code>exit()</code> calls
+ into <code>SysError()</code>, and change that to add the brief
+- explanation for each error code which is provided in the manpage.
++ explanation for each error code which is provided in the manpage.
+ Change a few <code>SysError()</code>, calls to avoid using code 1, to
+ avoid confusion with exit status from places that do not use
+ <code>SysError()</code>.
+@@ -1253,7 +1345,7 @@
+ <li>add <code>-into</code> option, for embedding xterm in a Tcl/Tk
+ application (patch by George Peter Staplin <georgeps@xmission.com>).
+
+- <li>add simple session management (XSM) client capabilities to xterm.
++ <li>add simple session management (XSM) client capabilities to xterm.
+ So a session manager such as, e.g., xsm, should be able to respawn or
+ kill xterms without the help of an SM proxy (like smproxy), which is
+ a hack and almost always buggy (patch by David Madore).
+@@ -1520,7 +1612,7 @@
+ Nelson Beebe).
+
+ <li>modify xterm manual page and minstall.sh to allow imake rules
+- to define location of app-defaults directory (Debian #87611).
++ to define location of app-defaults directory (Debian #87611).
+
+ <li>review/update list of conflicting preprocesor symbols to remove
+ from $CPPFLAGS at the end of the configure script. In particular,
+Index: xc/programs/xterm/xterm.man
+diff -u xc/programs/xterm/xterm.man:1.3 xc/programs/xterm/xterm.man:1.3.2.1
+--- xc/programs/xterm/xterm.man:1.3 Fri Aug 13 12:57:21 2004
++++ xc/programs/xterm/xterm.man Wed Jan 12 21:45:10 2005
+@@ -1,4 +1,4 @@
+-.\" $XTermId: xterm.man,v 1.279 2004/07/28 00:53:26 tom Exp $
++.\" $XTermId: xterm.man,v 1.288 2004/12/01 01:27:47 tom Exp $
+ .\" $Xorg: xterm.man,v 1.4 2001/02/09 02:06:03 xorgcvs Exp $
+ .\"
+ .\"
+@@ -55,7 +55,7 @@
+ .\" other dealings in this Software without prior written authorization
+ .\" from The Open Group.
+ .\"
+-.\" $XFree86: xc/programs/xterm/xterm.man,v 3.109 2004/07/28 00:53:26 dickey Exp $
++.\" $XFree86: xc/programs/xterm/xterm.man,v 3.110 2004/12/01 01:27:47 dickey Exp $
+ .\"
+ .\" updated by Thomas E. Dickey for XFree86, July 1996 - July 2004.
+ .TH XTERM 1 __vendorversion__
+@@ -201,11 +201,12 @@
+ .SH OPTIONS
+ The \fIxterm\fP terminal emulator
+ accepts all of the standard X Toolkit command line options as well as
+-the following (if the option begins with a
++the following.
++If the option begins with a
+ .RB ` + '
+ instead of a
+ .RB ` - ',
+-the option is restored to its default value).
++the option is restored to its default value.
+ The \fB-version\fP and \fB-help\fP options are interpreted even if \fIxterm\fP cannot
+ open the display, and are useful for testing and configuration scripts:
+ .TP 8
+@@ -797,8 +798,13 @@
+ .BI -tn " name"
+ This option specifies the name of the terminal type to be set in the TERM
+ environment variable.
+-This terminal type must exist in the \fItermcap(5)\fP
+-database and should have \fIli#\fP and \fIco#\fP entries.
++It corresponds to the \fBtermName\fP resource.
++This terminal type must exist in the terminal
++database
++(termcap or terminfo, depending on how \fIxterm\fP is built)
++and should have \fIli#\fP and \fIco#\fP entries.
++If the terminal type is not found, \fIxterm\fP uses the built-in list
++``xterm'', ``vt102'', etc.
+ .TP 8
+ .B -u8
+ This option sets the \fButf8\fP resource.
+@@ -1122,7 +1128,7 @@
+ Allowable keywords include:
+ brk,
+ dsusp,
+-eof,
++eof,
+ eol,
+ eol2,
+ erase,
+@@ -1551,6 +1557,7 @@
+ .B "decTerminalID (\fPclass\fB DecTerminalID)"
+ Specifies the emulation level (100=VT100, 220=VT220, etc.), used to determine
+ the type of response to a DA control sequence.
++Leading non-digit characters are ignored, e.g., "vt100" and "100" are the same.
+ The default is 100.
+ .TP 8
+ .B "deleteIsDEL (\fPclass\fB DeleteIsDEL)"
+@@ -1679,8 +1686,12 @@
+ .B "forceBoxChars (\fPclass\fB ForceBoxChars)"
+ Specifies whether \fIxterm\fP should assume the normal and bold fonts
+ have VT100 line-drawing characters.
+-If ``false'', \fIxterm\fP will check for missing characters in the 1-31
+-cells and make line-drawing characters directly.
++The fixed-pitch fonts used by \fIxterm\fP
++normally have the VT100 line-drawing glyphs in cells 1-31.
++Other fixed-pitch fonts may be more attractive, but lack these glyphs.
++If ``false'', \fIxterm\fP will check for missing glyphs in cells 1-31
++and make line-drawing characters directly.
++If ``true'', \fIxterm\fP uses whatever is in cells 1-31 without checking.
+ The default is ``false.''
+ .TP 8
+ .B "foreground (\fPclass\fB Foreground)"
+@@ -1795,15 +1806,22 @@
+ This is realized
+ by always enabling UTF-8 mode and invoking \fIluit\fR in non-UTF-8
+ locales.
+-.TP 4
++.TP
+ .I medium
+ \fIxterm\fR will follow users'
+ LC_CTYPE locale only for UTF-8, east Asian, and Thai locales,
+ where the encodings were not supported by conventional 8bit mode
+ with changing fonts.
+ For other locales, \fIxterm\fR will use conventional 8bit mode.
+-.TP 4
+-.I no
++.TP
++.I checkfont
++If mini-luit is compiled-in, \fIxterm\fR will check if a Unicode font has
++been specified. If so, it checks if the character encoding for the
++current locale is POSIX, Latin-1 or Latin-9, uses the appropriate
++mapping to support those with the Unicode font.
++For other encodings, \fIxterm\fR assumes that UTF-8 encoding is required.
++.TP
++.I false
+ \fIxterm\fR will use conventional 8bit mode
+ or UTF-8 mode according to \fButf8\fR resource or \fB-u8\fP option.
+ .RE
+@@ -2088,10 +2106,19 @@
+ sequences (also known as private modes) 1047, 1048 and 1049 which have the same
+ effect as the original 47 control sequence.
+ The default for this resource is ``false.''
++.\" -- resource does not work properly (forms/layout issues)
++.\".TP 8
++.\".B "toolBar (\fPclass\fB ToolBar)"
++.\"Specifies whether or not the toolbar should be displayed.
++.\"The default is
++.\"``false.''
+ .TP 8
+ .B "translations (\fPclass\fB Translations)"
+ Specifies the key and button bindings for menus, selections, ``programmed
+ strings,'' etc.
++The \fBtranslations\fP resource,
++which provides much of \fIxterm\fP's configurability,
++is a feature of the X Toolkit Intrinsics library (Xt).
+ See the \fBACTIONS\fP section.
+ .TP 8
+ .B "trimSelection (\fPclass\fB TrimSelection)"
+@@ -2253,6 +2280,9 @@
+ .PP
+ The \fImainMenu\fP has the following entries:
+ .TP 8
++.B "toolbar (\fPclass\fB SmeBSB)"
++This entry invokes the \fBset-toolbar(toggle)\fP action.
++.TP 8
+ .B "securekbd (\fPclass\fB SmeBSB)"
+ This entry invokes the \fBsecure()\fP action.
+ .TP 8
+@@ -2517,8 +2547,7 @@
+ and then hold the button down while moving the cursor to the end of the region
+ and releasing the button.
+ The selected text is highlighted and is saved in the global cut buffer
+-and made the PRIMARY selection when
+-the button is released.
++and made the PRIMARY selection when the button is released.
+ Double-clicking selects by words.
+ Triple-clicking
+ selects by lines.
+@@ -2560,8 +2589,8 @@
+ you can take text from several places in different windows and form a command
+ to the shell, for example, or take output from a program and insert it into
+ your favorite editor.
+-Since the cut buffer is globally shared among different applications,
+-you should regard it as a `file' whose contents you know.
++Since cut buffers are globally shared among different applications,
++you may regard each as a `file' whose contents you know.
+ The terminal emulator and other text programs should be treating it as if it
+ were a text file, i.e., the text is delimited by new lines.
+ .
+@@ -2743,7 +2772,7 @@
+ .TP
+ Quit (quit)
+ Stop processing X events except to support the \fB-hold\fP option,
+-and then send a SIGHUP signal to the
++and then send a SIGHUP signal to the
+ the process group of the process running under
+ .I xterm
+ (usually the shell).
+@@ -2763,7 +2792,7 @@
+ .TP
+ Enable Scrollbar (scrollbar)
+ Enable (or disable) the scrollbar.
+-This corresponds to the
++This corresponds to the
+ .B -sb
+ option and the
+ .B scrollBar
+@@ -2772,7 +2801,7 @@
+ .TP
+ Enable Jump Scroll (jumpscroll)
+ Enable (or disable) jump scrolling.
+-This corresponds to the
++This corresponds to the
+ .B -j
+ option and the
+ .B jumpScroll
+@@ -2781,7 +2810,7 @@
+ .TP
+ Enable Reverse Video (reversevideo)
+ Enable (or disable) reverse-video.
+-This corresponds to the
++This corresponds to the
+ .B -rv
+ option and the
+ .B reverseVideo
+@@ -2790,7 +2819,7 @@
+ .TP
+ Enable Auto Wraparound (autowrap)
+ Enable (or disable) auto-wraparound.
+-This corresponds to the
++This corresponds to the
+ .B -aw
+ option and the
+ .B autoWrap
+@@ -2799,7 +2828,7 @@
+ .TP
+ Enable Reverse Wraparound (reversewrap)
+ Enable (or disable) reverse wraparound.
+-This corresponds to the
++This corresponds to the
+ .B -rw
+ option and the
+ .B reverseWrap
+@@ -2831,7 +2860,7 @@
+ .TP
+ Scroll to Bottom on Key Press (scrollkey)
+ Enable (or disable) scrolling to the bottom of the scrolling region on a keypress.
+-This corresponds to the
++This corresponds to the
+ .B -sk
+ option and the
+ .B scrollKey
+@@ -2840,7 +2869,7 @@
+ .TP
+ Scroll to Bottom on Tty Output (scrollttyoutput)
+ Enable (or disable) scrolling to the bottom of the scrolling region on output to the terminal..
+-This corresponds to the
++This corresponds to the
+ .B -si
+ option and the
+ .B scrollTtyOutput
+@@ -2849,7 +2878,7 @@
+ .TP
+ Allow 80/132 Column Switching (allow132)
+ Enable (or disable) switching between 80 and 132 columns.
+-This corresponds to the
++This corresponds to the
+ .B -132
+ option and the
+ .B c132
+@@ -2858,7 +2887,7 @@
+ .TP
+ Enable Curses Emulation (cursesemul)
+ Enable (or disable) a workaround for the so-called "curses bug".
+-This corresponds to the
++This corresponds to the
+ .B -cu
+ option and the
+ .B curses
+@@ -2867,7 +2896,7 @@
+ .TP
+ Enable Visual Bell (visualbell)
+ Enable (or disable) visible bell (i.e., flashing) instead of an audible bell.
+-This corresponds to the
++This corresponds to the
+ .B -vb
+ option and the
+ .B visualBell
+@@ -2876,7 +2905,7 @@
+ .TP
+ Enable Pop on Bell (poponbell)
+ Enable (or disable) raising of the window when Control-G is received.
+-This corresponds to the
++This corresponds to the
+ .B -pop
+ option and the
+ .B popOnBell
+@@ -2885,7 +2914,7 @@
+ .TP
+ Enable Margin Bell (marginbell)
+ Enable (or disable) a bell when the user types near the right margin.
+-This corresponds to the
++This corresponds to the
+ .B -mb
+ option and the
+ .B marginBell
+@@ -2894,7 +2923,7 @@
+ .TP
+ Enable Blinking Cursor (cursorblink)
+ Enable (or disable) the blinking-cursor feature.
+-This corresponds to the
++This corresponds to the
+ .B -bc
+ option and the
+ .B cursorBlink
+@@ -2908,7 +2937,7 @@
+ .TP
+ Enable Alternate Screen Switching (titeInhibit)
+ Enable (or disable) switching between the normal and alternate screens.
+-This corresponds to the
++This corresponds to the
+ .B titeInhibit
+ resource.
+ There is no corresponding command-line option.
+@@ -2916,7 +2945,7 @@
+ .TP
+ Enable Active Icon (activeicon)
+ Enable (or disable) the active-icon feature.
+-This corresponds to the
++This corresponds to the
+ .B -ai
+ option and the
+ .B activeIcon
+@@ -3040,7 +3069,7 @@
+ Font escape sequence (see the document \fIXterm Control Sequences\fP).
+ .TP
+ Selection (fontsel)
+-This allows you to set the font specified
++This allows you to set the font specified
+ the current selection as a font name (if the PRIMARY selection is owned).
+ .RE
+ .PP
+@@ -3293,11 +3322,13 @@
+ .
+ .SH ACTIONS
+ It is possible to rebind keys (or sequences of keys) to arbitrary strings
+-for input, by changing the translations for the vt100 or tek4014 widgets.
+-Changing the translations for events other than key and button events
+-is not expected, and will cause unpredictable behavior.
++for input, by changing the \fBtranslations\fP resources
++for the vt100 or tek4014 widgets.
++Changing the \fBtranslations\fP resource
++for events other than key and button events is not expected,
++and will cause unpredictable behavior.
+ The following
+-actions are provided for using within the \fIvt100\fP or \fItek4014\fP
++actions are provided for use within the \fIvt100\fP or \fItek4014\fP
+ \fBtranslations\fP resources:
+ .TP 8
+ .B "allow-send-events(\fIon/off/toggle\fP)"
+@@ -3465,8 +3496,8 @@
+ mouse reporting is enabled.
+ .TP 8
+ .B "scroll-forw(\fIcount\fP [,\fIunits\fP [,\fImouse\fP] ])"
+-This action scrolls is similar to \fBscroll-back\fP except that it scrolls
+-the other direction.
++This action is similar to \fBscroll-back\fP except that it scrolls
++in the other direction.
+ .TP 8
+ .B "secure()"
+ This action toggles the \fISecure Keyboard\fP mode described in the
+@@ -3487,8 +3518,7 @@
+ .TP 8
+ .B "select-extend()"
+ This action tracks the pointer and extends the selection.
+-It
+-should only be bound to Motion events.
++It should only be bound to Motion events.
+ .TP 8
+ .B "select-set()"
+ This action stores text that corresponds to the current selection,
+@@ -3643,6 +3673,11 @@
+ This action toggles the \fBtiteInhibit\fP resource,
+ which controls switching between the alternate and current screens.
+ .TP 8
++.\" should toggle "toolBar" resource (see note).
++.B "set-toolbar(\fIon/off/toggle\fP)"
++This action toggles the toolbar feature and is also invoked by
++the \fBtoolbar\fP entry in \fImainMenu\fP.
++.TP 8
+ .B "set-utf8-mode(\fIon/off/toggle\fP)"
+ This action toggles the \fButf8\fP resource and is also invoked by
+ the \fButf8-mode\fP entry in \fIfontMenu\fP.
+@@ -3797,7 +3832,7 @@
+ @Num_Lock Ctrl <Btn5Down>:scroll-forw(1,halfpage,m) \\n\\
+ <Btn5Down>:scroll-forw(5,line,m) \\n\\
+ <BtnUp>:select-end(PRIMARY, CUT_BUFFER0) \\n\\
+- <BtnDown>:bell(0)
++ <BtnDown>:ignore()
+ .fi
+ .ft P
+ .sp
+@@ -3830,6 +3865,32 @@
+ .sp
+ .in -4
+ .PP
++Here is an example which uses shifted select/paste to copy to the clipboard,
++and unshifted select/paste for the primary selection.
++In each case, a (different) cut buffer is
++also a target or source of the select/paste operation.
++It is important to remember however,
++that cut buffers store data in ISO-8859-1 encoding,
++while selections can store data in a variety of formats and encodings.
++While \fIxterm\fP owns the selection, it highlights it.
++When it loses the selection, it removes the corresponding highlight.
++But you can still paste from the corresponding cut buffer.
++.sp
++.in +4
++.nf
++.ta .5i 1.5i
++.nf
++.ft C \" Courier
++*VT100*translations: #override \\n\\
++ ~Shift~Ctrl<Btn2Up>: insert-selection(PRIMARY, CUT_BUFFER0) \\n\\
++ Shift~Ctrl<Btn2Up>: insert-selection(CLIPBOARD, CUT_BUFFER1) \\n\\
++ ~Shift<BtnUp>: select-end(PRIMARY, CUT_BUFFER0) \\n\\
++ Shift<BtnUp>: select-end(CLIPBOARD, CUT_BUFFER1)
++.fi
++.ft P
++.sp
++.in -4
++.PP
+ Below is a sample how of the \fBkeymap()\fP action is used to add special
+ keys for entering commonly-typed works:
+ .sp
+Index: xc/programs/xterm/xterm_io.h
+diff -u xc/programs/xterm/xterm_io.h:1.3 xc/programs/xterm/xterm_io.h:1.3.2.1
+--- xc/programs/xterm/xterm_io.h:1.3 Fri Aug 13 12:57:21 2004
++++ xc/programs/xterm/xterm_io.h Wed Jan 12 21:45:10 2005
+@@ -1,5 +1,5 @@
+ /*
+- * $XFree86: xc/programs/xterm/xterm_io.h,v 1.15 2004/04/03 22:26:26 dawes Exp $
++ * $XFree86: xc/programs/xterm/xterm_io.h,v 1.16 2004/12/01 01:27:47 dickey Exp $
+ */
+
+ /*
+@@ -58,7 +58,7 @@
+ #define USE_SYSV_TERMIO
+ #endif
+
+-#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
++#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__INTERIX)
+ #ifndef USE_POSIX_TERMIOS
+ #define USE_POSIX_TERMIOS
+ #endif
+Index: xc/programs/xterm/xtermcfg.hin
+diff -u xc/programs/xterm/xtermcfg.hin:1.3 xc/programs/xterm/xtermcfg.hin:1.3.2.1
+--- xc/programs/xterm/xtermcfg.hin:1.3 Fri Aug 13 12:57:21 2004
++++ xc/programs/xterm/xtermcfg.hin Wed Jan 12 21:45:10 2005
+@@ -1,7 +1,7 @@
+-/* $XTermId: xtermcfg.hin,v 1.126 2004/05/26 01:19:55 tom Exp $ */
++/* $XTermId: xtermcfg.hin,v 1.128 2004/12/01 01:27:47 tom Exp $ */
+
+ /*
+- * $XFree86: xc/programs/xterm/xtermcfg.hin,v 3.51 2004/05/26 01:19:55 dickey Exp $
++ * $XFree86: xc/programs/xterm/xtermcfg.hin,v 3.52 2004/12/01 01:27:47 dickey Exp $
+ */
+
+ /************************************************************
+@@ -94,6 +94,7 @@
+ #undef OPT_LOAD_VTFONTS /* CF_ARG_ENABLE(load-vt-fonts) */
+ #undef OPT_LUIT_PROG /* CF_ARG_ENABLE(luit) */
+ #undef OPT_MAXIMIZE /* CF_ARG_DISABLE(maximize) */
++#undef OPT_MINI_LUIT /* CF_ARG_ENABLE(mini-luit) */
+ #undef OPT_NUM_LOCK /* CF_ARG_DISABLE(num-lock) */
+ #undef OPT_PC_COLORS /* CF_ARG_DISABLE(pc-color) */
+ #undef OPT_PTY_HANDSHAKE /* CF_ARG_ENABLE(pty-handshake) */
+Index: xc/programs/xterm/unicode/README
+diff -u xc/programs/xterm/unicode/README:1.3 xc/programs/xterm/unicode/README:1.3.2.1
+--- xc/programs/xterm/unicode/README:1.3 Fri Aug 13 12:57:26 2004
++++ xc/programs/xterm/unicode/README Wed Jan 12 21:45:10 2005
+@@ -1,4 +1,5 @@
+--- $XFree86: xc/programs/xterm/unicode/README,v 1.4 2000/11/01 01:12:47 dawes Exp $
++-- $XTermId: README,v 1.10 2004/12/01 01:27:49 tom Exp $
++-- $XFree86: xc/programs/xterm/unicode/README,v 1.5 2004/12/01 01:27:49 dickey Exp $
+ -- Thomas E. Dickey
+
+ These are some scripts and datafiles used for generating tables used in the
+@@ -7,9 +8,9 @@
+ To run the convmap.pl script, you will need a copy of UnicodeData-Latest.txt
+ which is currently available as
+
+- ftp://ftp.unicode.org/Public/UNIDATA/UnicodeData-Latest.txt
++ ftp://ftp.unicode.org/Public/UNIDATA/UnicodeData.txt
+
+-It is a large file (~460kb), so it is not included in this distribution.
++It is a large file (~877kb), so it is not included in this distribution.
+
+ convmap.pl is used to generate ../keysym2ucs.c, e.g.,
+
+Index: xc/programs/xterm/unicode/make-precompose.sh
+diff -u xc/programs/xterm/unicode/make-precompose.sh:1.1.1.2 xc/programs/xterm/unicode/make-precompose.sh:1.1.1.2.6.1
+--- xc/programs/xterm/unicode/make-precompose.sh:1.1.1.2 Tue Nov 25 19:29:23 2003
++++ xc/programs/xterm/unicode/make-precompose.sh Wed Jan 12 21:45:10 2005
+@@ -1,6 +1,7 @@
+ #!/bin/sh
+-cat precompose.c.head
+-cut UnicodeData-Latest.txt -d ";" -f 1,6 | \
++# $XTermId: make-precompose.sh,v 1.4 2004/11/30 21:16:54 tom Exp $
++cat precompose.c.head | sed -e's/@/$/g'
++cut UnicodeData.txt -d ";" -f 1,6 | \
+ grep ";[0-9,A-F]" | grep " " | \
+ sed -e "s/ /, 0x/;s/^/{ 0x/;s/;/, 0x/;s/$/},/" | (sort -k 3 || sort +2)
+ cat precompose.c.tail
+Index: xc/programs/xterm/unicode/precompose.c.head
+diff -u xc/programs/xterm/unicode/precompose.c.head:1.1.1.1 xc/programs/xterm/unicode/precompose.c.head:1.1.1.1.6.1
+--- xc/programs/xterm/unicode/precompose.c.head:1.1.1.1 Fri Nov 14 16:49:24 2003
++++ xc/programs/xterm/unicode/precompose.c.head Wed Jan 12 21:45:10 2005
+@@ -4,10 +4,12 @@
+ * DO NOT EDIT BY HAND! This is generated by the script
+ * unicode/make-precompose.sh
+ */
++/* @XTermId@ */
++/* @XFree86@ */
+
+ #include <precompose.h>
+
+-struct {
++static struct {
+ int replacement;
+ int base;
+ int comb;
+Index: xc/util/memleak/getretmips.c
+diff -u xc/util/memleak/getretmips.c:1.1.1.1 xc/util/memleak/getretmips.c:1.1.1.1.6.1
+--- xc/util/memleak/getretmips.c:1.1.1.1 Fri Nov 14 16:49:24 2003
++++ xc/util/memleak/getretmips.c Mon Dec 13 04:07:51 2004
+@@ -184,12 +184,15 @@
+ }
+ ra = (unsigned long *) sp[rc->raOffset>>2];
+ sp += rc->spAdjust >> 2;
+- *results++ = ((unsigned long) ra) - 8;
+ if (ra[-2] == mainCall)
+ {
+ *results++ = 0;
+ break;
+ }
++ else
++ {
++ *results++ = ((unsigned long) ra) - 8;
++ }
+ max--;
+ }
+ }