]> git.pld-linux.org Git - packages/X11.git/commitdiff
- update ftom 6.8.2 branch
authorArkadiusz Miśkiewicz <arekm@maven.pl>
Sat, 5 Feb 2005 22:06:10 +0000 (22:06 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    X11-6.8.2-20050205.patch -> 1.1

X11-6.8.2-20050205.patch [new file with mode: 0644]

diff --git a/X11-6.8.2-20050205.patch b/X11-6.8.2-20050205.patch
new file mode 100644 (file)
index 0000000..4e3f102
--- /dev/null
@@ -0,0 +1,111064 @@
+Index: xc/ChangeLog
+diff -c xc/ChangeLog:1.365.2.1 xc/ChangeLog:1.365.2.149
+*** xc/ChangeLog:1.365.2.1     Wed Sep 15 15:47:36 2004
+--- xc/ChangeLog       Thu Feb  3 00:32:28 2005
+***************
+*** 1,3 ****
+--- 1,1658 ----
++ 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,6407 ****
+         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 $
+--- 8059,8062 ----
+         so i18n libs from build tree get used instead of installed ones
+         (Egbert Eich).
+  
+! $XdotOrg: xc/ChangeLog,v 1.365.2.149 2005/02/03 00:32:28 gisburn Exp $
+Index: xc/config/cf/Imakefile
+diff -c 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,32 ****
+  xorgsite.def \
+  $(VERSIONDEFFILES) \
+  $(HOSTDEFFILES) \
+! site.def
+  
+  RULEFILES = \
+  Imake.rules \
+--- 26,33 ----
+  xorgsite.def \
+  $(VERSIONDEFFILES) \
+  $(HOSTDEFFILES) \
+! site.def \
+! xorgversion.def  
+  
+  RULEFILES = \
+  Imake.rules \
+Index: xc/config/cf/OpenBSDLib.tmpl
+diff -c 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,181 ****
+  # elif OSMajorVersion > 3 || OSMajorVersion == 3 && OSMinorVersion >= 6
+  
+  # ifndef SharedX11Rev
+! #  define SharedX11Rev 8.0
+  # endif
+  # ifndef SharedXThrStubRev
+  #  define SharedXThrStubRev 8.0
+--- 175,181 ----
+  # elif OSMajorVersion > 3 || OSMajorVersion == 3 && OSMinorVersion >= 6
+  
+  # ifndef SharedX11Rev
+! #  define SharedX11Rev 8.1
+  # endif
+  # ifndef SharedXThrStubRev
+  #  define SharedXThrStubRev 8.0
+***************
+*** 225,246 ****
+  #  endif
+  # endif
+  # ifndef SharedGlxRev
+! #  define SharedGlxRev 3.0
+  # endif
+  # ifndef SharedOSMesaRev
+! #  define SharedOSMesaRev 5.0
+  # endif
+  # ifndef SharedGLwRev
+  #  define SharedGLwRev 3.0
+  # endif
+  # ifndef SharedXrenderRev
+! #  define SharedXrenderRev 3.0
+  # endif
+  # ifndef SharedXrandrRev
+  #  define SharedXrandrRev 4.0
+  # endif
+  # ifndef SharedXcursorRev
+! #  define SharedXcursorRev 2.0
+  # endif
+  # ifndef SharedXfontcacheRev
+  #  define SharedXfontcacheRev 3.0
+--- 225,246 ----
+  #  endif
+  # endif
+  # ifndef SharedGlxRev
+! #  define SharedGlxRev 3.1
+  # endif
+  # ifndef SharedOSMesaRev
+! #  define SharedOSMesaRev 6.0
+  # endif
+  # ifndef SharedGLwRev
+  #  define SharedGLwRev 3.0
+  # endif
+  # ifndef SharedXrenderRev
+! #  define SharedXrenderRev 3.1
+  # endif
+  # ifndef SharedXrandrRev
+  #  define SharedXrandrRev 4.0
+  # endif
+  # ifndef SharedXcursorRev
+! #  define SharedXcursorRev 2.2
+  # endif
+  # ifndef SharedXfontcacheRev
+  #  define SharedXfontcacheRev 3.0
+***************
+*** 273,279 ****
+  #  define SharedXawRev 9.0
+  # endif
+  # ifndef SharedXaw6Rev
+! #  define SharedXaw6Rev 8.0
+  # endif
+  # ifndef SharedXiRev
+  #  define SharedXiRev 8.0
+--- 273,279 ----
+  #  define SharedXawRev 9.0
+  # endif
+  # ifndef SharedXaw6Rev
+! #  define SharedXaw6Rev 8.1
+  # endif
+  # ifndef SharedXiRev
+  #  define SharedXiRev 8.0
+***************
+*** 294,300 ****
+  #  define SharedFSRev 8.0
+  # endif
+  # ifndef SharedFontRev
+! #  define SharedFontRev 3.0
+  # endif
+  # ifndef SharedFontEncRev
+  #  define SharedFontEncRev 3.0
+--- 294,300 ----
+  #  define SharedFSRev 8.0
+  # endif
+  # ifndef SharedFontRev
+! #  define SharedFontRev 4.0
+  # endif
+  # ifndef SharedFontEncRev
+  #  define SharedFontEncRev 3.0
+***************
+*** 303,318 ****
+  #  define SharedXpmRev 6.0
+  # endif
+  # ifndef SharedFreetype2Rev
+! #  define SharedFreetype2Rev 12.0
+  # endif
+  # ifndef SharedExpatRev
+  #  define SharedExpatRev 5.0
+  # endif
+  # ifndef SharedXft1Rev
+! #  define SharedXft1Rev 2.0
+  # endif
+  # ifndef SharedXftRev
+! #  define SharedXftRev 4.0
+  # endif
+  # ifndef SharedFontconfigRev
+  #  define SharedFontconfigRev 2.0
+--- 303,318 ----
+  #  define SharedXpmRev 6.0
+  # endif
+  # ifndef SharedFreetype2Rev
+! #  define SharedFreetype2Rev 13.0
+  # endif
+  # ifndef SharedExpatRev
+  #  define SharedExpatRev 5.0
+  # endif
+  # ifndef SharedXft1Rev
+! #  define SharedXft1Rev 3.0
+  # endif
+  # ifndef SharedXftRev
+! #  define SharedXftRev 5.0
+  # endif
+  # ifndef SharedFontconfigRev
+  #  define SharedFontconfigRev 2.0
+Index: xc/config/cf/X11.tmpl
+diff -c 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 ****
+  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 $Xorg: X11.tmpl,v 1.6 2000/08/17 19:41:46 cpqbld Exp $
+  XCOMM
+  XCOMM
+--- 1,6 ----
+  XCOMM ----------------------------------------------------------------------
+  XCOMM X Window System Build Parameters and Rules
+! 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,479 ****
+  #define BuildCup             YES
+  #endif
+  #ifndef HasPlugin
+! #define HasPlugin            NO
+  #endif
+  #ifndef BuildPlugin
+  #define BuildPlugin          HasPlugin
+--- 473,482 ----
+  #define BuildCup             YES
+  #endif
+  #ifndef HasPlugin
+! /* Browser plugins are shared libraries - only build them if the OS
+!  * supports shared libs.
+!  */
+! #define HasPlugin            HasSharedLibraries
+  #endif
+  #ifndef BuildPlugin
+  #define BuildPlugin          HasPlugin
+***************
+*** 680,685 ****
+--- 683,692 ----
+  #define BuildXevieLibrary    !BuildServersOnly
+  #endif
+  
++ #ifndef BuildRootless
++ #define BuildRootless        NO
++ #endif
++ 
+  #ifndef BuildXterm
+  #define BuildXterm           BuildClients
+  #endif
+***************
+*** 1237,1242 ****
+--- 1244,1257 ----
+  #endif
+  #endif
+  
++ #ifndef RootlessDefines
++ #if BuildRootless
++ #define RootlessDefines -DROOTLESS
++ #else
++ #define RootlessDefines /**/
++ #endif
++ #endif
++ 
+  #ifndef SitePervasiveExtensionDefines
+  #define SitePervasiveExtensionDefines /**/
+  #endif
+***************
+*** 1247,1253 ****
+       XF86BigfontExtensionDefines DPMSDefines \
+       LowMemDefines XprintDefines XineramaDefines \
+       SitePervasiveExtensionDefines RenderDefines RandRDefines \
+!      XfixesDefines XDamageDefines CompositeDefines XevieDefines
+  #endif
+  #ifndef SiteExtensionDefines
+  #define SiteExtensionDefines /**/
+--- 1262,1269 ----
+       XF86BigfontExtensionDefines DPMSDefines \
+       LowMemDefines XprintDefines XineramaDefines \
+       SitePervasiveExtensionDefines RenderDefines RandRDefines \
+!      XfixesDefines XDamageDefines CompositeDefines XevieDefines \
+!      RootlessDefines
+  #endif
+  #ifndef SiteExtensionDefines
+  #define SiteExtensionDefines /**/
+Index: xc/config/cf/cygwin.cf
+diff -c 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 ****
+  /* Cygwin/X vendor strings and version */
+  #ifndef CygxVersionMajor
+! # define CygxVersionMajor    6
+  #endif
+  #ifndef CygxVersionMinor
+! # define CygxVersionMinor    8
+  #endif
+  #ifndef CygxVersionPatch
+! # define CygxVersionPatch    1
+  #endif
+  #ifndef CygxVersionSnap
+! # define CygxVersionSnap     0
+  #endif
+  #ifndef CygxVersionServer
+  # define CygxVersionServer   0
+--- 1,17 ----
+  /* Cygwin/X vendor strings and version */
++ #include  "xorgversion.def"
++ 
+  #ifndef CygxVersionMajor
+! # define CygxVersionMajor    XORG_VERSION_MAJOR
+  #endif
+  #ifndef CygxVersionMinor
+! # define CygxVersionMinor    XORG_VERSION_MINOR
+  #endif
+  #ifndef CygxVersionPatch
+! # define CygxVersionPatch    XORG_VERSION_PATCH
+  #endif
+  #ifndef CygxVersionSnap
+! # define CygxVersionSnap     XORG_VERSION_SNAP
+  #endif
+  #ifndef CygxVersionServer
+  # define CygxVersionServer   0
+***************
+*** 329,334 ****
+--- 331,337 ----
+  # define XWinMultiWindowDefines 
+  #endif /* BuildXWinMultiWindow */
+  #if BuildXWinMultiWindowExtWM
++ # define BuildRootless               YES
+  # define XWinMultiWindowExtWMDefines -DXWIN_MULTIWINDOWEXTWM
+  #else /* BuildXWinMultiWindowExtWM */
+  # define XWinMultiWindowExtWMDefines 
+Index: xc/config/cf/darwin.cf
+diff -c 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 ****
+! XCOMM $XdotOrg: xc/config/cf/darwin.cf,v 1.4 2004/09/02 01:23:45 kem 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> */
+--- 1,4 ----
+! 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,138 ****
+--- 133,139 ----
+  #  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 -c 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 ****
+! XCOMM $XdotOrg: xc/config/cf/sun.cf,v 1.9 2004/08/19 16:28:42 kem Exp $
+  XCOMM platform:  $Xorg: sun.cf,v 1.4 2000/08/17 19:41:48 cpqbld Exp $
+  
+  
+--- 1,4 ----
+! 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,245 ****
+--- 240,248 ----
+  #  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 -c 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 ****
+! XCOMM $XdotOrg: xc/config/cf/xorg.cf,v 1.27.2.2 2004/09/17 15:38:18 kem Exp $
+  /*
+   * This configuration file contains all of the configuration
+   * information for the Xorg based X Servers.
+--- 1,4 ----
+! 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,23 ****
+  /* 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"
+  
+  #if !defined(XorgVersionString) && \
+      defined(XORG_VERSION_MAJOR) && defined(XORG_VERSION_MINOR) && \
+--- 11,17 ----
+  /* Get and set version information. */
+  
+  #include "date.def"
+! #include "xorgversion.def"
+  
+  #if !defined(XorgVersionString) && \
+      defined(XORG_VERSION_MAJOR) && defined(XORG_VERSION_MINOR) && \
+***************
+*** 421,434 ****
+  
+  # ifndef DriDrivers
+  #  ifndef ia64Architecture
+! #   define i386DRIDrivers i810 i915
+  #  else
+  #   define i386DRIDrivers /**/
+  #  endif
+! #  define DriDrivers         gamma i386DRIDrivers mga r128 radeon r200 \
+!                              sis tdfx
+  # endif
+! #endif
+  
+  #if defined(AMD64Architecture)
+  /* vgahw module */
+--- 415,431 ----
+  
+  # ifndef DriDrivers
+  #  ifndef ia64Architecture
+! #   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
+  # endif
+! #endif /* i386Architecture || ia64Architecture */
+  
+  #if defined(AMD64Architecture)
+  /* vgahw module */
+***************
+*** 447,461 ****
+  #  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 \
+                               XF86OSCardDrivers XF86ExtraCardDrivers
+  # endif
+  
+! /* 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
+! 
+  #endif /*AMD64Arcitecture*/
+  
+  /* SPARC and UltraSPARC drivers */
+--- 444,460 ----
+  #  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 i810 \
+                               XF86OSCardDrivers XF86ExtraCardDrivers
+  # endif
+  
+! /* 
+!  * The tdfx driver needs Glide, which is not available for AMD64.  
+!  * SiS is 64-bit unclean as of this writing.
+   */
+! # ifndef DriDrivers
+! #  define DriDrivers         i915 gamma mga r128 radeon r200
+! # endif
+  #endif /*AMD64Arcitecture*/
+  
+  /* SPARC and UltraSPARC drivers */
+***************
+*** 540,546 ****
+                               DevelDrivers \
+                               XF86OSCardDrivers XF86ExtraCardDrivers
+  # endif
+! #endif
+  
+  /* MIPS drivers */
+  
+--- 539,545 ----
+                               DevelDrivers \
+                               XF86OSCardDrivers XF86ExtraCardDrivers
+  # endif
+! #endif /* OpenBSDArchitecture && Sparc64Architecture */
+  
+  /* MIPS drivers */
+  
+***************
+*** 564,570 ****
+                               DevelDrivers newport \
+                               XF86OSCardDrivers XF86ExtraCardDrivers
+  # endif
+! #endif
+  
+  /*
+   * DEC Alpha drivers
+--- 563,569 ----
+                               DevelDrivers newport \
+                               XF86OSCardDrivers XF86ExtraCardDrivers
+  # endif
+! #endif /* MipsArchitecture */
+  
+  /*
+   * DEC Alpha drivers
+***************
+*** 589,599 ****
+                               savage nv cirrus DevelDrivers siliconmotion  \
+                               vga XF86OSCardDrivers XF86ExtraCardDrivers
+  # endif
+! /* SiS is 64-bit unclean as of this writing. */
+  # ifndef DriDrivers
+  #  define DriDrivers         gamma tdfx mga r128 radeon r200
+  # endif
+! #endif
+  
+  /*
+   * Motorola 68k and PowerPC drivers
+--- 588,601 ----
+                               savage nv cirrus DevelDrivers siliconmotion  \
+                               vga XF86OSCardDrivers XF86ExtraCardDrivers
+  # endif
+! /*
+!  *  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 /* AlphaArchitecture */
+  
+  /*
+   * Motorola 68k and PowerPC drivers
+***************
+*** 623,632 ****
+                               DevelDrivers vga \
+                               XF86OSCardDrivers XF86ExtraCardDrivers
+  # endif
+  # ifndef DriDrivers
+! #  define DriDrivers         gamma tdfx mga r128 radeon r200
+  # endif
+! #endif
+  
+  /*
+   * Intel StrongARM and Hewlett-Packard PA-RISC
+--- 625,635 ----
+                               DevelDrivers vga \
+                               XF86OSCardDrivers XF86ExtraCardDrivers
+  # endif
++ /*  The tdfx driver needs Glide, which is not available for PPC. */
+  # ifndef DriDrivers
+! #  define DriDrivers         gamma mga r128 radeon r200
+  # endif
+! #endif  /* PpcArchitecture || Mc68020Architecture */
+  
+  /*
+   * Intel StrongARM and Hewlett-Packard PA-RISC
+***************
+*** 672,681 ****
+  # ifndef XorgServer
+  #  define XorgServer         YES
+  # endif
+- /* Amiga framebuffer module */
+- # ifndef XF86AFB
+- #  define XF86AFB            NO
+- # endif
+  /* 1bpp module */
+  # ifndef XF1Bpp
+  #  define XF1Bpp             NO
+--- 675,680 ----
+***************
+*** 700,709 ****
+  # ifndef XFShadowFB
+  #  define XFShadowFB         YES
+  # endif
+- /* vgahw module */
+- # ifndef XF86VgaHw
+- #  define XF86VgaHw          NO
+- # endif
+  /* fbdevhw module */
+  # ifndef XF86FBDevHw
+  #  define XF86FBDevHw                YES
+--- 699,704 ----
+***************
+*** 728,738 ****
+  # ifndef XF86RAC
+  #  define XF86RAC            YES
+  # endif
+- 
+  /* int10 module */
+  # ifndef XF86Int10
+  #  define XF86Int10          YES
+  # endif
+  
+  # ifndef DevelDrivers
+  #  if XFree86Devel
+--- 723,745 ----
+  # 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,762 ****
+  # ifndef DriDrivers
+  #  define DriDrivers         gamma r128
+  # endif
+! #endif
+  
+  /*
+   * For Mips/Arc platforms, the default is to build all modules which
+--- 763,769 ----
+  # ifndef DriDrivers
+  #  define DriDrivers         gamma r128
+  # endif
+! #endif /* Ppc64Architecture */
+  
+  /*
+   * For Mips/Arc platforms, the default is to build all modules which
+***************
+*** 1550,1556 ****
+  # endif
+  #endif
+  
+! #if  (GccMajorVersion == 3) &&  (GccMinorVersion >= 1)
+  # define GccAliasingArgs      -fno-strict-aliasing
+  #else
+  # define GccAliasingArgs      /* */
+--- 1557,1563 ----
+  # endif
+  #endif
+  
+! #if  ((GccMajorVersion == 3) &&  (GccMinorVersion >= 1)) || (GccMajorVersion > 3)
+  # define GccAliasingArgs      -fno-strict-aliasing
+  #else
+  # define GccAliasingArgs      /* */
+Index: xc/config/cf/xorgsite.def
+diff -c 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,30 ****
+   * 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
+   * files.
+   */
+  /******************************************************************************/
+--- 24,30 ----
+   * The host.def file will never be patched.
+   *
+   * The distributed version of this file MUST contain no uncommented
+!  * definitions.  Default definitions belong in xorg.cf, or <vendor>.cf
+   * files.
+   */
+  /******************************************************************************/
+***************
+*** 71,77 ****
+  /*
+   * Set the default server (ie the one that gets the sym-link to "X")
+   *
+! #define ServerToInstall              XFree86
+   */
+  
+  /*
+--- 71,77 ----
+  /*
+   * Set the default server (ie the one that gets the sym-link to "X")
+   *
+! #define ServerToInstall              Xorg
+   */
+  
+  /*
+Index: xc/config/cf/xorgversion.def
+diff -c /dev/null xc/config/cf/xorgversion.def:1.1.4.5
+*** /dev/null  Sat Feb  5 21:34:44 2005
+--- xc/config/cf/xorgversion.def       Thu Feb  3 00:32:28 2005
+***************
+*** 0 ****
+--- 1,6 ----
++ #define XORG_VERSION_MAJOR  6
++ #define XORG_VERSION_MINOR  8
++ #define XORG_VERSION_PATCH  1
++ #define XORG_VERSION_SNAP   904
++ 
++ #define XORG_DATE "2 February 2005"
+Index: xc/config/cf/xprint_site.def
+diff -c 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,96 ****
+  #define BuildGlxExt                    NO
+  #define BuildXIE                       NO
+  /* X extensions not needed */
+- #define BuildDBE                    NO
+  #define BuildXKB                    NO
+  #define BuildRECORD                 NO
+  #define BuildDPMS                   NO
+--- 90,95 ----
+***************
+*** 136,142 ****
+  #endif /* BuildXprintAppsOnly */
+  
+  /* Set our own XVendorString/XVendorRelease
+!  * (and to avoid that xfree86.cf sets it's own stuff here) */
+  #define XVendorString "xprint.mozdev.org"
+  #define XVendorRelease 100000
+  
+--- 135,141 ----
+  #endif /* BuildXprintAppsOnly */
+  
+  /* Set our own XVendorString/XVendorRelease
+!  * (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 -c 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,104 ****
+          fi
+          ;;
+      "man")
+!         cp "${MYCURRDIR}/${infile}" "${infile}.tmp"
+!         ${docbook2man} "${infile}.tmp"
+          manfile="$(ls -1 ${infile%.*}.__*)"
+  
+          verbose_echo "manfile=${manfile}"
+--- 99,113 ----
+          fi
+          ;;
+      "man")
+!         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 -c 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,158 ****
+--- 153,159 ----
+  .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 -c 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,143 ****
+  Boolean XtPeekEvent(XEvent *\fIevent_return\fP); 
+  .HP
+  Boolean XtPending(void); 
+! .Hp
+  void XtProcessEvent(XtInputMask \fImask\fP); 
+  .HP
+  void XtMainLoop(void); 
+--- 137,143 ----
+  Boolean XtPeekEvent(XEvent *\fIevent_return\fP); 
+  .HP
+  Boolean XtPending(void); 
+! .HP
+  void XtProcessEvent(XtInputMask \fImask\fP); 
+  .HP
+  void XtMainLoop(void); 
+Index: xc/doc/man/general/Imakefile
+diff -c 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,15 ****
+--- 8,23 ----
+  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 -c /dev/null xc/doc/man/general/Xprint.html:1.1.4.1
+*** /dev/null  Sat Feb  5 21:34:44 2005
+--- xc/doc/man/general/Xprint.html     Wed Dec 15 07:38:28 2004
+***************
+*** 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 &#8212; The &quot;X print service&quot; - 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&#8217;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 &quot;X Print Service&quot; 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 &quot;Video&quot; X-Server, and a &quot;Print&quot; 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 &quot;print ddx drivers&quot; instead of
++             &quot;video ddx drivers&quot;.  While a video ddx driver modifies pixels
++             in a video frame buffer, a print ddx driver generates &quot;page
++             description language (PDL)&quot; 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 &quot;print-to-file&quot;).
++           </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 &quot;paged&quot; 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 &quot;print contexts&quot;.
++           </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 &quot;attributes&quot; 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 &quot;content-orientation&quot; can be set to
++             &quot;landscape&quot; or &quot;portrait&quot; (if the printer supports these 
++             values - which can be queried using the Xprint API as well).
++           </p></li><li><p>
++             Since printers can have &quot;built in&quot; 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 &quot;printer metric files&quot; (.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 &quot;C&quot; locale are as follows (see <span class="citerefentry"><span class="refentrytitle">Xprt</span>(7)</span> for more
++       details (including support for non-&quot;C&quot; 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,
++               &quot;mylaser&quot; could be mapped to a &quot;HPDJ1600C&quot;, and all other
++               arbitrary printers could be mapped to a default, such as
++               &quot;HPLJ4SI&quot;.  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, &quot;notification-profile&quot; 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&#8217;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 &quot;Xprt&quot;, and
++             then the toolkit-specific Print Dialog Manager Daemon process
++             (such as CDEnext's &quot;dtpdmd&quot;) 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 &quot;dtpdmd&quot; 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>
++             &quot;X Print Specifier&quot; - 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=&quot;printhub:2 printhub:3 otherdept:0&quot;</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 &quot;C&quot; 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=&quot;`/etc/init.d/xprint get_xpserverlist`&quot;</pre></div><p>Alternatively <tt class="envar">${XPSERVERLIST}</tt> can be set
++          manually. Example:</p><div class="informalexample"><pre class="programlisting">
++              export XPSERVERLIST=&quot;littlecat:80 bitdog:72&quot;</pre></div><p>
++          instructs an application to find an Xprint server at display
++          80 on the machine &quot;littlecat&quot; 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 &quot;ps003&quot; 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 &quot;hplaser19&quot;
++              on the Xprint server at display 
++                &quot;littlecat:80&quot;.</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">&lt;<a href="mailto:roland.mainz@nrubsig.org">roland.mainz@nrubsig.org</a>&gt;</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 -c /dev/null xc/doc/man/general/Xprint.man:1.1.4.1
+*** /dev/null  Sat Feb  5 21:34:44 2005
+--- xc/doc/man/general/Xprint.man      Wed Dec 15 07:38:28 2004
+***************
+*** 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 -c /dev/null xc/doc/man/general/Xprint.sgml:1.1.4.1
+*** /dev/null  Sat Feb  5 21:34:44 2005
+--- xc/doc/man/general/Xprint.sgml     Wed Dec 15 07:38:28 2004
+***************
+*** 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&rsquo;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&rsquo;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 &lt;Xprinters file&gt;] [:dispNum] &amp;</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] &amp;</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 &lt;File&gt; menu and selecting &lt;Print...&gt;.  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 &lt;Setup...&gt;, which
++       will start a dtpdm capable of modifying additional print options.
++       Finally, the user should select &lt;Print&gt;.
++     </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 -c 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,61 ****
+--- 45,66 ----
+  
+  # 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,86 ****
+--- 86,92 ----
+  linux-ppc \
+  linux-ppc-static \
+  linux-solo \
++ linux-solo-x86 \
+  linux-solo-ia64 \
+  linux-sparc \
+  linux-sparc5 \
+***************
+*** 111,119 ****
+  
+  # Rules for making release tarballs
+  
+! DIRECTORY = Mesa-6.1
+! LIB_NAME = MesaLib-6.1
+! DEMO_NAME = MesaDemos-6.1
+  
+  LIB_FILES =  \
+       $(DIRECTORY)/Makefile*                                          \
+--- 117,125 ----
+  
+  # Rules for making release tarballs
+  
+! DIRECTORY = Mesa-6.2.1
+! LIB_NAME = MesaLib-6.2.1
+! DEMO_NAME = MesaDemos-6.2.1
+  
+  LIB_FILES =  \
+       $(DIRECTORY)/Makefile*                                          \
+***************
+*** 121,126 ****
+--- 127,133 ----
+       $(DIRECTORY)/mms-config.                                        \
+       $(DIRECTORY)/Mesa.dsw                                           \
+       $(DIRECTORY)/bin/mklib                                          \
++      $(DIRECTORY)/bin/installmesa                                    \
+       $(DIRECTORY)/configs/[a-z]*                                     \
+       $(DIRECTORY)/docs/*.html                                        \
+       $(DIRECTORY)/docs/COPYING                                       \
+***************
+*** 186,192 ****
+       $(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                \
+--- 193,198 ----
+***************
+*** 249,254 ****
+--- 255,261 ----
+       $(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,279 ****
+--- 281,288 ----
+       $(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,306 ****
+--- 310,335 ----
+       $(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,352 ****
+       @-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
+--- 376,378 ----
+Index: xc/extras/Mesa/Makefile.mgw
+diff -c 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,45 ****
+--- 40,48 ----
+  #                    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,62 ****
+  
+  CPU ?= pentium
+  
+! CFLAGS = -Wall -W -pedantic
+  CFLAGS += -O2 -ffast-math -mcpu=$(CPU)
+  
+  export CFLAGS
+--- 59,71 ----
+  
+  CPU ?= pentium
+  
+! 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 -c 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,9 ****
+  \r
+  ###############################################################################\r
+  \r
+! Project: "array_cache"=.\SRC\MESA\array_cache\array_cache.dsp - Package Owner=<4>\r
+  \r
+  Package=<5>\r
+  {{{\r
+--- 3,9 ----
+  \r
+  ###############################################################################\r
+  \r
+! Project: "array_cache"=".\SRC\MESA\array_cache\array_cache.dsp" - Package Owner=<4>\r
+  \r
+  Package=<5>\r
+  {{{\r
+***************
+*** 15,21 ****
+  \r
+  ###############################################################################\r
+  \r
+! Project: "gdi"=.\src\mesa\drivers\windows\gdi\gdi.dsp - Package Owner=<4>\r
+  \r
+  Package=<5>\r
+  {{{\r
+--- 15,21 ----
+  \r
+  ###############################################################################\r
+  \r
+! Project: "gdi"=".\src\mesa\drivers\windows\gdi\gdi.dsp" - Package Owner=<4>\r
+  \r
+  Package=<5>\r
+  {{{\r
+***************
+*** 51,57 ****
+  \r
+  ###############################################################################\r
+  \r
+! Project: "glapi"=.\SRC\MESA\glapi\glapi.dsp - Package Owner=<4>\r
+  \r
+  Package=<5>\r
+  {{{\r
+--- 51,57 ----
+  \r
+  ###############################################################################\r
+  \r
+! Project: "glapi"=".\SRC\MESA\glapi\glapi.dsp" - Package Owner=<4>\r
+  \r
+  Package=<5>\r
+  {{{\r
+***************
+*** 63,69 ****
+  \r
+  ###############################################################################\r
+  \r
+! Project: "glu"=.\src\glu\sgi\glu.dsp - Package Owner=<4>\r
+  \r
+  Package=<5>\r
+  {{{\r
+--- 63,69 ----
+  \r
+  ###############################################################################\r
+  \r
+! Project: "glu"=".\src\glu\sgi\glu.dsp" - Package Owner=<4>\r
+  \r
+  Package=<5>\r
+  {{{\r
+***************
+*** 78,99 ****
+  \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
+  \r
+  Package=<5>\r
+  {{{\r
+--- 78,84 ----
+  \r
+  ###############################################################################\r
+  \r
+! Project: "main"=".\SRC\MESA\main\main.dsp" - Package Owner=<4>\r
+  \r
+  Package=<5>\r
+  {{{\r
+***************
+*** 105,111 ****
+  \r
+  ###############################################################################\r
+  \r
+! Project: "math"=.\SRC\MESA\math\math.dsp - Package Owner=<4>\r
+  \r
+  Package=<5>\r
+  {{{\r
+--- 90,96 ----
+  \r
+  ###############################################################################\r
+  \r
+! Project: "math"=".\SRC\MESA\math\math.dsp" - Package Owner=<4>\r
+  \r
+  Package=<5>\r
+  {{{\r
+***************
+*** 117,123 ****
+  \r
+  ###############################################################################\r
+  \r
+! Project: "osmesa"=.\SRC\MESA\DRIVERS\osmesa\osmesa.dsp - Package Owner=<4>\r
+  \r
+  Package=<5>\r
+  {{{\r
+--- 102,108 ----
+  \r
+  ###############################################################################\r
+  \r
+! Project: "osmesa"=".\SRC\MESA\DRIVERS\osmesa\osmesa.dsp" - Package Owner=<4>\r
+  \r
+  Package=<5>\r
+  {{{\r
+***************
+*** 132,138 ****
+  \r
+  ###############################################################################\r
+  \r
+! Project: "shader"=.\SRC\MESA\shader\shader.dsp - Package Owner=<4>\r
+  \r
+  Package=<5>\r
+  {{{\r
+--- 117,123 ----
+  \r
+  ###############################################################################\r
+  \r
+! Project: "shader"=".\SRC\MESA\shader\shader.dsp" - Package Owner=<4>\r
+  \r
+  Package=<5>\r
+  {{{\r
+***************
+*** 144,150 ****
+  \r
+  ###############################################################################\r
+  \r
+! Project: "swrast"=.\SRC\MESA\swrast\swrast.dsp - Package Owner=<4>\r
+  \r
+  Package=<5>\r
+  {{{\r
+--- 129,135 ----
+  \r
+  ###############################################################################\r
+  \r
+! Project: "swrast"=".\SRC\MESA\swrast\swrast.dsp" - Package Owner=<4>\r
+  \r
+  Package=<5>\r
+  {{{\r
+***************
+*** 156,162 ****
+  \r
+  ###############################################################################\r
+  \r
+! Project: "swrast_setup"=.\SRC\MESA\swrast_setup\swrast_setup.dsp - Package Owner=<4>\r
+  \r
+  Package=<5>\r
+  {{{\r
+--- 141,147 ----
+  \r
+  ###############################################################################\r
+  \r
+! Project: "swrast_setup"=".\SRC\MESA\swrast_setup\swrast_setup.dsp" - Package Owner=<4>\r
+  \r
+  Package=<5>\r
+  {{{\r
+***************
+*** 168,174 ****
+  \r
+  ###############################################################################\r
+  \r
+! Project: "tnl"=.\SRC\MESA\tnl\tnl.dsp - Package Owner=<4>\r
+  \r
+  Package=<5>\r
+  {{{\r
+--- 153,159 ----
+  \r
+  ###############################################################################\r
+  \r
+! Project: "tnl"=".\SRC\MESA\tnl\tnl.dsp" - Package Owner=<4>\r
+  \r
+  Package=<5>\r
+  {{{\r
+Index: xc/extras/Mesa/bin/mklib
+diff -c 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,121 ****
+--- 116,129 ----
+      '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,378 ****
+              ar -X64 -ruv ${LIBNAME} ${OBJECTS}
+              FINAL_LIBS=${LIBNAME}
+          else
+!             echo "mklib: PROBLEM: AIX64 shared libs not supported!!!"
+          fi
+          ;;
+  
+--- 380,409 ----
+              ar -X64 -ruv ${LIBNAME} ${OBJECTS}
+              FINAL_LIBS=${LIBNAME}
+          else
+!          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 -c 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,28 ****
+  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
+  
+--- 20,28 ----
+  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-64
+diff -c /dev/null xc/extras/Mesa/configs/aix-64:1.1.1.1.2.1
+*** /dev/null  Sat Feb  5 21:34:44 2005
+--- xc/extras/Mesa/configs/aix-64      Wed Dec 15 01:50:55 2004
+***************
+*** 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 -c 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,19 ****
+  
+  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
+  
+--- 13,19 ----
+  
+  MKLIB_OPTIONS = -arch aix-gcc
+  GL_LIB_DEPS = -lX11 -lXext -lm
+! 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 -c 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,52 ****
+  
+       ifdef DEBUG
+               CFLAGS   += -g -O0
+-              CXXFLAGS += -g -O0
+               LDFLAGS += -g
+       else
+               CFLAGS   += -O3
+-              CXXFLAGS += -O3
+       endif
+  
+       GLUT_CFLAGS = -fexceptions
+--- 42,51 ----
+  
+       ifdef DEBUG
+               CFLAGS   += -g -O0
+               LDFLAGS += -g
++              DEFINES += -DDEBUG
+       else
+               CFLAGS   += -O3
+       endif
+  
+       GLUT_CFLAGS = -fexceptions
+***************
+*** 93,100 ****
+  
+  # Library/program dependencies
+  GL_LIB_DEPS = 
+! OSMESA_LIB_DEPS = -L$(LIB_DIR) -lGL
+  GLU_LIB_DEPS =  
+! GLUT_LIB_DEPS = -lgame -L$(LIB_DIR) -lGL
+! APP_LIB_DEPS = -lbe -L$(LIB_DIR) -lGL -lglut
+  
+--- 92,99 ----
+  
+  # Library/program dependencies
+  GL_LIB_DEPS = 
+! OSMESA_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB)
+  GLU_LIB_DEPS =  
+! 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 -c 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,25 ****
+  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
+--- 22,25 ----
+  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 -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 -c 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,24 ****
+  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
+--- 21,24 ----
+  GLU_LIB_DEPS = 
+  GLUT_LIB_DEPS = 
+  GLW_LIB_DEPS = 
+! 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 -c 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,14 ****
+  
+  # Version info
+  MESA_MAJOR=6
+! MESA_MINOR=1
+! MESA_TINY=0
+  
+  # external projects
+  DRM_SOURCE_PATH=$(TOP)/../drm
+--- 7,14 ----
+  
+  # Version info
+  MESA_MAJOR=6
+! MESA_MINOR=2
+! MESA_TINY=1
+  
+  # external projects
+  DRM_SOURCE_PATH=$(TOP)/../drm
+***************
+*** 61,68 ****
+  
+  # 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
+--- 61,68 ----
+  
+  # Library/program dependencies
+  GL_LIB_DEPS = -lX11 -lXext -lm -lpthread
+! 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 -c /dev/null xc/extras/Mesa/configs/freebsd-dri:1.1.1.1.2.1
+*** /dev/null  Sat Feb  5 21:34:44 2005
+--- xc/extras/Mesa/configs/freebsd-dri Wed Dec 15 01:50:55 2004
+***************
+*** 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 -c /dev/null xc/extras/Mesa/configs/freebsd-dri-x86:1.1.1.1.2.1
+*** /dev/null  Sat Feb  5 21:34:44 2005
+--- xc/extras/Mesa/configs/freebsd-dri-x86     Wed Dec 15 01:50:55 2004
+***************
+*** 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 -c 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,30 ****
+  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++
+--- 26,30 ----
+  GLU_LIB_DEPS = 
+  GLUT_LIB_DEPS = 
+  GLW_LIB_DEPS = 
+! 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 -c /dev/null xc/extras/Mesa/configs/hpux11-32:1.1.1.1.2.1
+*** /dev/null  Sat Feb  5 21:34:44 2005
+--- xc/extras/Mesa/configs/hpux11-32   Wed Dec 15 01:50:55 2004
+***************
+*** 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 -c /dev/null xc/extras/Mesa/configs/hpux11-64:1.1.1.1.2.1
+*** /dev/null  Sat Feb  5 21:34:44 2005
+--- xc/extras/Mesa/configs/hpux11-64   Wed Dec 15 01:50:55 2004
+***************
+*** 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 -c 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,18 ****
+  
+  LIB_DIR = $(TOP)/lib64
+  
+! APP_LIB_DEPS = -L$(LIB_DIR) -64 -rpath $(LIB_DIR) -lglut -lGLU -lGL -lX11 -lXmu -lXi -lm
+--- 15,18 ----
+  
+  LIB_DIR = $(TOP)/lib64
+  
+! 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 -c 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,21 ****
+  
+  LIB_DIR = $(TOP)/lib64
+  
+! APP_LIB_DEPS = -L$(LIB_DIR) -64 -lglut -lGLU -lGL -lX11 -lXext -lXmu -lXi -lm
+  
+  GL_LIB_NAME = libGL.a
+  GLU_LIB_NAME = libGLU.a
+--- 15,21 ----
+  
+  LIB_DIR = $(TOP)/lib64
+  
+! 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 -c 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,18 ****
+  
+  LIB_DIR = $(TOP)/lib32
+  
+! APP_LIB_DEPS = -L$(LIB_DIR) -n32 -rpath $(LIB_DIR) -lglut -lGLU -lGL -lX11 -lXmu -lXi -lfpe -lm
+--- 15,18 ----
+  
+  LIB_DIR = $(TOP)/lib32
+  
+! 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 -c 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,21 ****
+  
+  LIB_DIR = $(TOP)/lib32
+  
+! APP_LIB_DEPS = -L$(LIB_DIR) -n32 -glut -lGLU -lGL -lX11 -lXext -lXmu -lXi -lm
+  
+  GL_LIB_NAME = libGL.a
+  GLU_LIB_NAME = libGLU.a
+--- 15,21 ----
+  
+  LIB_DIR = $(TOP)/lib32
+  
+! 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 -c 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,19 ****
+  
+  LIB_DIR = $(TOP)/lib32
+  
+! APP_LIB_DEPS = -L$(LIB_DIR) -32 -rpath $(LIB_DIR) -lglut -lGLU -lGL -lX11 -lXext -lXmu -lXi -lm
+  
+--- 15,19 ----
+  
+  LIB_DIR = $(TOP)/lib32
+  
+! 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 -c 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,21 ****
+  
+  LIB_DIR = $(TOP)/lib32
+  
+! APP_LIB_DEPS = -L$(LIB_DIR) -32 -glut -lGLU -lGL -lX11 -lXext -lXmu -lXi -lm
+  
+  GL_LIB_NAME = libGL.a
+  GLU_LIB_NAME = libGLU.a
+--- 15,21 ----
+  
+  LIB_DIR = $(TOP)/lib32
+  
+! 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 -c 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,22 ****
+  
+  
+  # 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
+--- 14,20 ----
+  
+  
+  # Library/program dependencies
++ # Need to have -L/usr/X11R6/lib in these:
+  GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
+! 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 -c 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,19 ****
+  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
+  
+--- 12,18 ----
+  GLUT_CFLAGS = -fexceptions
+  
+  GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
+! 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 -c 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,28 ****
+  
+  
+  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
+--- 22,27 ----
+  
+  
+  GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
+! 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 -c 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,22 ****
+  
+  GLUT_CFLAGS = -fexceptions
+  
+  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
+--- 14,20 ----
+  
+  GLUT_CFLAGS = -fexceptions
+  
++ # Need to have -L/usr/X11R6/lib in these:
+  GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
+! 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 -c 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,27 ****
+  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 
+! 
+  
+  
+  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
+  
+  
+  # Directories
+--- 9,34 ----
+  CC = gcc
+  CXX = g++
+  
+! 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) -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,37 ****
+  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
+  
+--- 37,44 ----
+  PROGRAM_DIRS = 
+  WINDOW_SYSTEM=dri
+  
+! # 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 -c 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 ****
+  # -*-makefile-*-
+  # Configuration for linux-dri: Linux DRI hardware drivers for XFree86 & others
+  
+! include $(TOP)/configs/default
+  
+  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 
+  
+  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
+- 
+--- 1,12 ----
+  # -*-makefile-*-
+  # Configuration for linux-dri: Linux DRI hardware drivers for XFree86 & others
+  
+! include $(TOP)/configs/linux-dri
+  
+  CONFIG_NAME = linux-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/linux-dri-x86-64
+diff -c 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,26 ****
+  
+  # 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
+  
+  # Directories
+  SRC_DIRS = mesa glu glut/glx glw
+--- 19,26 ----
+  
+  # Library/program dependencies
+  GL_LIB_DEPS = -L/usr/X11R6/lib64 -lX11 -lXext -lm -lpthread -lexpat -ldl
+! 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,36 ****
+  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.  Do i810 & i830 really
+  # need to be included here?
+  #
+! DRI_DIRS = dri_client i810 i830 i915 mach64 mga r128 r200 radeon tdfx unichrome
+  
+--- 28,36 ----
+  PROGRAM_DIRS = 
+  WINDOW_SYSTEM=dri
+  
+! # 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 savage
+  
+Index: xc/extras/Mesa/configs/linux-glide
+diff -c 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,22 ****
+  
+  # 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
+--- 15,20 ----
+  
+  # Library/program dependencies
+  GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -L/usr/local/glide/lib -lglide3x -lm -lpthread
+! 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 -c 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,21 ****
+  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
+  
+  ASM_SOURCES = $(X86_SOURCES) $(X86_API)
+  
+--- 13,20 ----
+  MKLIB_OPTIONS = -arch icc
+  
+  GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
+! 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 -c 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,28 ****
+  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
+  MKLIB_OPTIONS = -arch icc
+  
+  ASM_SOURCES = $(X86_SOURCES) $(X86_API)
+--- 20,27 ----
+  OSMESA_LIB_NAME = libOSMesa.a
+  
+  GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
+! 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 -c 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,19 ****
+  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
+  
+--- 12,18 ----
+  GLUT_CFLAGS = -fexceptions
+  
+  GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
+! 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 -c 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,27 ****
+  
+  
+  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
+--- 21,26 ----
+  
+  
+  GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
+! 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 -c 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,27 ****
+  
+  # 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
+  
+  # Directories
+  SRC_DIRS = mesa glx glu glut/mini
+--- 19,27 ----
+  
+  # Library/program dependencies
+  GL_LIB_DEPS = -lm -lpthread -lexpat -ldl
+! 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 -c 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,25 ****
+  
+  # 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
+  
+  # Directories
+  SRC_DIRS = mesa glx glu glut/mini
+--- 17,24 ----
+  
+  # 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
+Index: xc/extras/Mesa/configs/linux-solo-x86
+diff -c /dev/null xc/extras/Mesa/configs/linux-solo-x86:1.1.1.1.2.1
+*** /dev/null  Sat Feb  5 21:34:44 2005
+--- xc/extras/Mesa/configs/linux-solo-x86      Wed Dec 15 01:50:55 2004
+***************
+*** 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 -c 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,18 ****
+  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
+--- 12,16 ----
+  GLUT_CFLAGS = -fexceptions
+  
+  GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
+! 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 -c 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,19 ****
+  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
+  
+--- 12,17 ----
+  GLUT_CFLAGS = -fexceptions
+  
+  GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
+! 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 -c 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,30 ****
+  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++
+--- 27,30 ----
+  GLU_LIB_DEPS = 
+  GLUT_LIB_DEPS = 
+  GLW_LIB_DEPS = 
+! 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 -c 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,25 ****
+  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
+--- 17,22 ----
+  GLUT_CFLAGS = -fexceptions
+  
+  GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread -L$(TCC_DIR) -ltcc -ldl
+! 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 -c 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,18 ****
+  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
+--- 12,17 ----
+  GLUT_CFLAGS = -fexceptions
+  
+  GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
+! 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 -c 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,26 ****
+  
+  # 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
+--- 19,24 ----
+  
+  # Library/program dependencies
+  GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread
+! 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 -c 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,30 ****
+  
+  # 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
+--- 23,28 ----
+  
+  # Library/program dependencies
+  GL_LIB_DEPS = -L/usr/X11R6/lib64 -lX11 -lXext -lm -lpthread
+! 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 -c 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,40 ****
+  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++
+--- 37,40 ----
+  GLU_LIB_DEPS = 
+  GLUT_LIB_DEPS = 
+  GLW_LIB_DEPS = 
+! 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 -c 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,26 ****
+  
+  # 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
+--- 19,24 ----
+  
+  # Library/program dependencies
+  GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -L/usr/local/glide/lib -lglide3x -lm -lpthread
+! 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 -c 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,37 ****
+  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++
+--- 34,37 ----
+  GLU_LIB_DEPS = 
+  GLUT_LIB_DEPS = 
+  GLW_LIB_DEPS = 
+! 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 -c 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,18 ****
+  
+  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
+  
+--- 12,18 ----
+  
+  GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm
+  OSMESA_LIB_DEPS = -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 -c 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,18 ****
+  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
+! 
+! 
+--- 11,16 ----
+  CXXFLAGS = -O2 -std ansi -ieee
+  
+  GL_LIB_DEPS = -lX11 -lXext -lm -lpthread
+! 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 -c 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,21 ****
+  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
+  
+  GL_LIB_NAME = libGL.a
+  GLU_LIB_NAME = libGLU.a
+--- 13,21 ----
+  MKLIB_OPTIONS = -static
+  
+  GL_LIB_DEPS = -L/usr/openwin/lib -lX11 -lXext -lm -lpthread
+! 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 -c 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,25 ****
+  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
+--- 22,25 ----
+  GLU_LIB_DEPS = 
+  GLUT_LIB_DEPS = 
+  GLW_LIB_DEPS = 
+! 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 -c 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,18 ****
+  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
+--- 12,18 ----
+  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) -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 -c 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,21 ****
+  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
+  
+--- 14,21 ----
+  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) -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 -c 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,19 ****
+  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
+  
+--- 12,19 ----
+  GLUT_CFLAGS = -DSOLARIS_2_4_BUG
+  
+  GL_LIB_DEPS = -L/usr/openwin/lib -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) -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 -c 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,21 ****
+  GLW_LIB_NAME = libGLw.a
+  OSMESA_LIB_NAME = libOSMesa.a
+  
+! APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lXmu -lX11 -lXi -lm
+--- 18,21 ----
+  GLW_LIB_NAME = libGLw.a
+  OSMESA_LIB_NAME = libOSMesa.a
+  
+! 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 -c 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,15 ****
+  
+  
+  
+! Mesa-6.1 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
+     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:
+--- 3,15 ----
+  
+  
+  
+! 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 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,69 ****
+--- 60,72 ----
+       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,99 ****
+  
+  FX_GLIDE_NUM_TMU
+       OS: all
+!      HW: dual-TMU cards (some Voodoo1, Voodoo2, Avenger, Napalm)
+       Desc: force single-TMU
+       Note: (*)
+       Value: "1"
+--- 96,102 ----
+  
+  FX_GLIDE_NUM_TMU
+       OS: all
+!      HW: dual-TMU cards (Voodoo2, Avenger, Napalm)
+       Desc: force single-TMU
+       Note: (*)
+       Value: "1"
+***************
+*** 141,146 ****
+--- 144,154 ----
+       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 -c 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,43 ****
+    - 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:
+  
+  $ make beos
+  
+  When it finishes the Mesa based libGL.so library for
+! BeOS will be in the lib/ directory.
+  
+  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 
+--- 32,53 ----
+    - 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, 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, 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,75 ****
+  
+  To build a DEBUG version, type instead this :
+  
+! $ DEBUG=1 make beos
+  
+  
+  * 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.
+  
+  
+  * GLUT
+  
+! A beta version of GLUT 3.7 port for BeOS can be found at 
+  http://anobject.com/jehamby/Code/Glut-3.7-x86.zip.
+   
+! 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
+  
+! They are special version of GLUT adapted for the BeOS.  I don't
+  believe Mark Kilgard's normal GLUT distribution includes BeOS
+  support.
+  
+--- 60,86 ----
+  
+  To build a DEBUG version, type instead this :
+  
+! $ DEBUG=1 make
+  
+  
+  * Example Programs
+  
+! 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, 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.
+   
+! 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're special versions of GLUT for the BeOS platform.  I don't
+  believe Mark Kilgard's normal GLUT distribution includes BeOS
+  support.
+  
+***************
+*** 87,94 ****
+  
+  * 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.
+--- 98,103 ----
+***************
+*** 99,105 ****
+  
+  * Other contributors to this BeOS port
+  
+! Marcin Konicki                   ahwayakchih <at> neoni <dot> net
+  Francois Revol                  revol <at> free <dot> fr
+  
+  
+--- 108,115 ----
+  
+  * Other contributors to this BeOS port
+  
+! Jake Hamby                      jhamby <at> anobject <dot> com
+! Marcin Konicki                  ahwayakchih <at> neoni <dot> net
+  Francois Revol                  revol <at> free <dot> fr
+  
+  
+***************
+*** 121,124 ****
+  
+  
+  ----------------------------------------------------------------------
+! $Id$
+--- 131,134 ----
+  
+  
+  ----------------------------------------------------------------------
+! $Id$
+Index: xc/extras/Mesa/docs/README.WIN32
+diff -c 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 ****
+  File: docs/README.WIN32
+  
+! Last updated: Sep 18, 2003 - Karl Schultz - kschultz@users.sourceforge.net
+  
+  Quick Start
+  
+--- 1,6 ----
+  File: docs/README.WIN32
+  
+! Last updated: Oct 01, 2004 - Karl Schultz - kschultz@users.sourceforge.net
+  
+  Quick Start
+  
+***************
+*** 14,29 ****
+  workspaces and projects.  Makefiles are no longer shipped or supported, but
+  can be generated from the projects using Visual Studio.
+  
+  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
+  
+  - 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
+--- 14,49 ----
+  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 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,59 ****
+  - 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
+--- 71,76 ----
+Index: xc/extras/Mesa/docs/RELNOTES-6.2
+diff -c /dev/null xc/extras/Mesa/docs/RELNOTES-6.2:1.1.1.1.2.1
+*** /dev/null  Sat Feb  5 21:34:44 2005
+--- xc/extras/Mesa/docs/RELNOTES-6.2   Wed Dec 15 01:50:56 2004
+***************
+*** 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 -c /dev/null xc/extras/Mesa/docs/RELNOTES-6.2.1:1.1.1.1.2.1
+*** /dev/null  Sat Feb  5 21:34:44 2005
+--- xc/extras/Mesa/docs/RELNOTES-6.2.1 Wed Dec 15 01:50:56 2004
+***************
+*** 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 -c 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,1276 ****
+--- 1274,1314 ----
+       - 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 -c 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,15 ****
+  <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:
+  </p>
+  
+  <ul>
+--- 7,26 ----
+  <H1>Bug Database</H1>
+  
+  <p>
+! 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,27 ****
+  </ul>
+  
+  <p>
+! Bug reports will automatically be forwarded to the Mesa developer's list.
+  </p>
+  
+  <p>
+--- 32,39 ----
+  </ul>
+  
+  <p>
+! Bug reports will automatically be forwarded to the Mesa developer's mailing
+! list.
+  </p>
+  
+  <p>
+Index: xc/extras/Mesa/docs/contents.html
+diff -c 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,26 ****
+  
+  <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="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>
+--- 20,26 ----
+  
+  <b>Download / Install</b>
+  <ul>
+! <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 -c 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,39 ****
+  </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.
+  </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.
+  </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
+  branch.
+  
+  Consult <a href="http://www.durak.org/cvswebsites/doc/cvs_5.php3#SEC54"
+--- 15,39 ----
+  </p>
+  
+  <p>
+! 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 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_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 -c 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,162 ****
+  <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>
+--- 156,161 ----
+Index: xc/extras/Mesa/docs/libraries.html
+diff -c 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,42 ****
+  </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="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
+--- 36,42 ----
+  </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://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 -c 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,12 ****
+--- 7,134 ----
+  <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,836 ****
+  
+  
+  <hr>
+! $Id$
+  </body>
+  </html>
+\ No newline at end of file
+--- 953,958 ----
+  
+  
+  <hr>
+! $Id$
+  </body>
+  </html>
+\ No newline at end of file
+Index: xc/extras/Mesa/docs/osmesa.html
+diff -c 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,58 ****
+  <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
+  </pre>
+  
+     For 32-bit channels:
+  <pre>
+!       cd Mesa-5.x/src
+!       make -f Makefile.X11 clean
+!       make -f Makefile.OSMesa16 linux-osmesa32
+  </pre>
+  
+  <p>
+--- 43,56 ----
+  <p>
+     To build Mesa/OSMesa with 16-bit color channels:
+  <pre>
+!       make realclean
+!       make linux-osmesa16
+  </pre>
+  
+     For 32-bit channels:
+  <pre>
+!       make realclean
+!       make linux-osmesa32
+  </pre>
+  
+  <p>
+***************
+*** 60,72 ****
+  </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.
+  </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
+--- 58,69 ----
+  </p>
+  
+  <p>
+! 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 -c 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,16 ****
+--- 11,18 ----
+  </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 -c 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 ****
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.1
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+--- 1,6 ----
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.2
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+Index: xc/extras/Mesa/include/GL/gl_mangle.h
+diff -c 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,35 ****
+--- 30,36 ----
+  /* 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 -c 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,81 ****
+     To avoid the atexit workaround, #define GLUT_DISABLE_ATEXIT_HACK. */
+  
+  /* XXX This is from Win32's <process.h> */
+! # if !defined(_MSC_VER) && !defined(__cdecl)
+     /* Define __cdecl for non-Microsoft compilers. */
+  #  define __cdecl
+  #  define GLUT_DEFINED___CDECL
+--- 75,81 ----
+     To avoid the atexit workaround, #define GLUT_DISABLE_ATEXIT_HACK. */
+  
+  /* XXX This is from Win32's <process.h> */
+! # if !defined(_MSC_VER) && !defined(__MINGW32__) && !defined(__cdecl)
+     /* Define __cdecl for non-Microsoft compilers. */
+  #  define __cdecl
+  #  define GLUT_DEFINED___CDECL
+***************
+*** 108,114 ****
+     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__)
+  #    define GLUTAPIENTRY __stdcall
+  #else
+  #    define GLUTAPIENTRY
+--- 108,114 ----
+     and redifinition of Windows system defs, also removes requirement of
+     pretty much any standard windows header from this file */
+  
+! #if (_MSC_VER >= 800) || defined(__MINGW32__) || defined(_STDCALL_SUPPORTED) || defined(__CYGWIN32__)
+  #    define GLUTAPIENTRY __stdcall
+  #else
+  #    define GLUTAPIENTRY
+***************
+*** 664,670 ****
+  GLUTAPI int GLUTAPIENTRY glutLayerGet(GLenum type);
+  #endif
+  #if (GLUT_API_VERSION >= 5)
+! GLUTAPI void * GLUTAPIENTRY glutGetProcAddress(const char *procName);
+  #endif
+  
+  /* GLUT font sub-API */
+--- 664,671 ----
+  GLUTAPI int GLUTAPIENTRY glutLayerGet(GLenum type);
+  #endif
+  #if (GLUT_API_VERSION >= 5)
+! typedef void (*GLUTproc)();
+! GLUTAPI GLUTproc GLUTAPIENTRY glutGetProcAddress(const char *procName);
+  #endif
+  
+  /* GLUT font sub-API */
+Index: xc/extras/Mesa/include/GL/glx.h
+diff -c 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 ****
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.1
+   * 
+!  * 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"),
+--- 1,8 ----
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.2
+   * 
+!  * 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,52 ****
+  
+  
+  #if defined(USE_MGL_NAMESPACE)
+! #include <GL/glx_mangle.h>
+  #endif
+  
+  
+--- 46,52 ----
+  
+  
+  #if defined(USE_MGL_NAMESPACE)
+! #include "glx_mangle.h"
+  #endif
+  
+  
+Index: xc/extras/Mesa/include/GL/wmesa.h
+diff -c 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,66 ****
+  
+  #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 */
+  #endif
+  
+  /*
+--- 52,68 ----
+  
+  #include "gl\gl.h"
+  
+! #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 -c 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,154 ****
+--- 149,156 ----
+      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,162 ****
+--- 159,165 ----
+  
+  extern GLboolean XF86DRIDestroyDrawable( __DRInativeDisplay *dpy, int screen, 
+      __DRIid drawable);
++ #endif
+  /*@}*/
+  
+  
+Index: xc/extras/Mesa/src/Makefile
+diff -c 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,13 ****
+  SUBDIRS = $(SRC_DIRS)
+  
+  
+! default: $(LIB_DIR) subdirs
+  
+  
+  subdirs:
+--- 7,17 ----
+  SUBDIRS = $(SRC_DIRS)
+  
+  
+! default: message $(LIB_DIR) subdirs
+! 
+! 
+! message:
+!      @echo "Making sources for" $(CONFIG_NAME)
+  
+  
+  subdirs:
+Index: xc/extras/Mesa/src/glx/mini/Makefile
+diff -c 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,24 ****
+         miniglx.c \
+         miniglx_events.c
+  
+! OBJECTS = $(C_SOURCES:.c=.o)
+  
+  INCLUDES = -I. $(INCLUDE_DIRS)
+  
+--- 18,27 ----
+         miniglx.c \
+         miniglx_events.c
+  
+! 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 -c 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,1717 ****
+     GLint redBits = 0, greenBits = 0, blueBits = 0, alphaBits = 0;
+     GLint indexBits = 0, depthBits = 0, stencilBits = 0;
+     GLint numSamples = 0;
+!    int i;
+  
+     /*
+      * XXX in the future, <screen> might be interpreted as a VT
+--- 1711,1717 ----
+     GLint redBits = 0, greenBits = 0, blueBits = 0, alphaBits = 0;
+     GLint indexBits = 0, depthBits = 0, stencilBits = 0;
+     GLint numSamples = 0;
+!    int i=0;
+  
+     /*
+      * XXX in the future, <screen> might be interpreted as a VT
+***************
+*** 1805,1810 ****
+--- 1805,1811 ----
+     (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,2155 ****
+  {
+      GLXDrawable drawable = (GLXDrawable) draw;
+      drm_clip_rect_t * cliprect;
+! 
+      if (drawable == 0) {
+          return GL_FALSE;
+      }
+--- 2150,2157 ----
+  {
+      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,2173 ****
+      cliprect->y1 = drawable->y;
+      cliprect->x2 = drawable->x + drawable->w;
+      cliprect->y2 = drawable->y + drawable->h;
+  
+      *x = drawable->x;
+      *y = drawable->y;
+      *width = drawable->w;
+      *height = drawable->h;
+      *numClipRects = 1;
+      *pClipRects = cliprect;
+!     *backX = 0;
+!     *backY = 0;
+      *numBackClipRects = 0;
+      *pBackClipRects = 0;
+  
+--- 2161,2180 ----
+      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 = drawable->x;
+!     *backY = drawable->y;
+      *numBackClipRects = 0;
+      *pBackClipRects = 0;
+  
+Index: xc/extras/Mesa/src/mesa/Makefile
+diff -c 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,182 ****
+  
+  clean:
+       -rm -f */*.o
+!      -rm -f depend mesa.a
+       -rm -f drivers/*/*.o
+       (cd drivers/dri ; $(MAKE) clean)
+  
+--- 176,182 ----
+  
+  clean:
+       -rm -f */*.o
+!      -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 -c /dev/null xc/extras/Mesa/src/mesa/Makefile.BeOS:1.2.2.1
+*** /dev/null  Sat Feb  5 21:34:44 2005
+--- xc/extras/Mesa/src/mesa/Makefile.BeOS      Wed Dec 15 01:50:57 2004
+***************
+*** 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 -c 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,45 ****
+--- 40,48 ----
+  #                    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,64 ****
+  TOP = ../..
+  GLIDE ?= $(TOP)/glide3
+  LIBDIR = $(TOP)/lib
+! GL_DLL = opengl32.dll
+! GL_IMP = libopengl32.a
+  
+  LDLIBS = -lgdi32
+  
+--- 60,72 ----
+  TOP = ../..
+  GLIDE ?= $(TOP)/glide3
+  LIBDIR = $(TOP)/lib
+! ifeq ($(ICD),1)
+!   GL_DLL = mesa32.dll
+!   GL_IMP = libmesa32.a
+! else
+!   GL_DLL = opengl32.dll
+!   GL_IMP = libopengl32.a
+! endif
+  
+  LDLIBS = -lgdi32
+  
+***************
+*** 66,77 ****
+  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
+  else
+! GL_DEF = drivers/windows/gdi/mesa.def
+  endif
+  
+  AR = ar
+--- 74,90 ----
+  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
+  else
+!   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,109 ****
+--- 113,128 ----
+       $(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,147 ****
+  # [dBorca]
+  # glapi_x86.S needs some adjustments
+  # in order to generate correct entrypoints
+  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 $<
+  
+  # [dBorca]
+  # if we want codegen, we have to stdcall
+--- 157,174 ----
+  # [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 $<
+! 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,165 ****
+--- 188,193 ----
+       -$(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 -c 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,281 ****
+--- 276,282 ----
+     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,310 ****
+--- 306,312 ----
+     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,336 ****
+--- 333,339 ----
+     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,360 ****
+--- 358,364 ----
+     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,372 ****
+--- 371,377 ----
+     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,396 ****
+--- 396,402 ----
+     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,408 ****
+--- 409,415 ----
+     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,432 ****
+--- 434,440 ----
+     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,456 ****
+--- 459,465 ----
+     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 -c /dev/null xc/extras/Mesa/src/mesa/drivers/beos/GLView.h:1.2.2.1
+*** /dev/null  Sat Feb  5 21:34:44 2005
+--- xc/extras/Mesa/src/mesa/drivers/beos/GLView.h      Wed Dec 15 01:50:57 2004
+***************
+*** 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 -c 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,42 ****
+--- 37,43 ----
+       -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,99 ****
+  
+  # Remove .o and backup files
+  clean:
+!      -rm -f *.o */*.o *~ *.o *~ *.so server/*.o $(SYMLINKS) depend
+  
+  include depend
+--- 95,101 ----
+  
+  # Remove .o and backup files
+  clean:
+!      -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 -c 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,69 ****
+--- 64,105 ----
+     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 -c 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,146 ****
+--- 141,166 ----
+      }
+  }
+  
++ /*
++  * 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,234 ****
+  static __DRIdrawable *__driFindDrawable(void *drawHash, __DRIid draw)
+  {
+      int retcode;
+!     __DRIdrawable *pdraw;
+  
+!     retcode = drmHashLookup(drawHash, draw, (void **)&pdraw);
+      if (retcode)
+       return NULL;
+  
+!     return pdraw;
+  }
+  
+  static void __driRemoveDrawable(void *drawHash, __DRIdrawable *pdraw)
+  {
+      int retcode;
+!     __DRIdrawablePrivate *pdp = (__DRIdrawablePrivate *)pdraw->private;
+  
+!     retcode = drmHashLookup(drawHash, pdp->draw, (void **)&pdraw);
+      if (!retcode) { /* Found */
+!      drmHashDelete(drawHash, pdp->draw);
+      }
+  }
+  
+--- 232,264 ----
+  static __DRIdrawable *__driFindDrawable(void *drawHash, __DRIid draw)
+  {
+      int retcode;
+!     union 
+!     {
+!      __DRIdrawable *pdraw;
+!      void *ptr;
+!     } p;
+  
+!     retcode = drmHashLookup(drawHash, draw, &p.ptr);
+      if (retcode)
+       return NULL;
+  
+!     return p.pdraw;
+  }
+  
+  static void __driRemoveDrawable(void *drawHash, __DRIdrawable *pdraw)
+  {
+      int retcode;
+!     union 
+!     {
+!      __DRIdrawablePrivate *pdp;
+!      void *ptr;
+!     } p;
+  
+!     p.pdp = (__DRIdrawablePrivate *)pdraw->private;
+! 
+!     retcode = drmHashLookup(drawHash, p.pdp->draw, &p.ptr);
+      if (!retcode) { /* Found */
+!      drmHashDelete(drawHash, p.pdp->draw);
+      }
+  }
+  
+***************
+*** 286,306 ****
+  static void __driGarbageCollectDrawables(void *drawHash)
+  {
+      __DRIid draw;
+-     __DRIdrawable *pdraw;
+      __DRInativeDisplay *dpy;
+  
+!     if (drmHashFirst(drawHash, &draw, (void **)&pdraw)) {
+       do {
+!          __DRIdrawablePrivate *pdp = (__DRIdrawablePrivate *)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);
+           }
+!      } while (drmHashNext(drawHash, &draw, (void **)&pdraw));
+      }
+  }
+  
+--- 316,340 ----
+  static void __driGarbageCollectDrawables(void *drawHash)
+  {
+      __DRIid draw;
+      __DRInativeDisplay *dpy;
++     union 
++     {
++      __DRIdrawable *pdraw;
++      void *ptr;
++     } p;
+  
+!     if (drmHashFirst(drawHash, &draw, &p.ptr)) {
+       do {
+!          __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, p.pdraw);
+!              (*p.pdraw->destroyDrawable)(dpy, p.pdraw->private);
+!              _mesa_free(p.pdraw);
+           }
+!      } while (drmHashNext(drawHash, &draw, &p.ptr));
+      }
+  }
+  
+***************
+*** 353,359 ****
+       return GL_FALSE;
+      }
+  
+!     pDRIScreen = __glXFindDRIScreen(dpy, scrn);
+      if ( (pDRIScreen == NULL) || (pDRIScreen->private == NULL) ) {
+       /* ERROR!!! */
+       return GL_FALSE;
+--- 387,393 ----
+       return GL_FALSE;
+      }
+  
+!     pDRIScreen = glx_find_dri_screen(dpy, scrn);
+      if ( (pDRIScreen == NULL) || (pDRIScreen->private == NULL) ) {
+       /* ERROR!!! */
+       return GL_FALSE;
+***************
+*** 529,535 ****
+       return GL_FALSE;
+      }
+  
+!     pDRIScreen = __glXFindDRIScreen(dpy, scrn);
+      if ( (pDRIScreen == NULL) || (pDRIScreen->private == NULL) ) {
+       /* ERROR!!! */
+       return GL_FALSE;
+--- 563,569 ----
+       return GL_FALSE;
+      }
+  
+!     pDRIScreen = glx_find_dri_screen(dpy, scrn);
+      if ( (pDRIScreen == NULL) || (pDRIScreen->private == NULL) ) {
+       /* ERROR!!! */
+       return GL_FALSE;
+***************
+*** 563,569 ****
+       return GL_FALSE;
+      }
+  
+!     pDRIScreen = __glXFindDRIScreen(dpy, scrn);
+      modes = (driCompareGLXAPIVersion( 20040317 ) >= 0)
+       ? gc->driContext.mode
+       : findConfigMode( dpy, scrn, gc->vid, pDRIScreen );
+--- 597,603 ----
+       return GL_FALSE;
+      }
+  
+!     pDRIScreen = glx_find_dri_screen(dpy, scrn);
+      modes = (driCompareGLXAPIVersion( 20040317 ) >= 0)
+       ? gc->driContext.mode
+       : findConfigMode( dpy, scrn, gc->vid, pDRIScreen );
+***************
+*** 793,799 ****
+                                 int renderType,
+                                 const int *attrs)
+  {
+!     __DRIscreen * const pDRIScreen = __glXFindDRIScreen(dpy, modes->screen);
+      __DRIscreenPrivate *psp;
+      __DRIdrawablePrivate *pdp;
+  
+--- 827,833 ----
+                                 int renderType,
+                                 const int *attrs)
+  {
+!     __DRIscreen * const pDRIScreen = glx_find_dri_screen(dpy, modes->screen);
+      __DRIscreenPrivate *psp;
+      __DRIdrawablePrivate *pdp;
+  
+***************
+*** 848,854 ****
+       _mesa_free(pdp);
+       return NULL;
+  #else
+!      pdp->getInfo = XF86DRIGetDrawableInfo;
+  #endif /* DRI_NEW_INTERFACE_ONLY */
+      }
+  
+--- 882,888 ----
+       _mesa_free(pdp);
+       return NULL;
+  #else
+!      pdp->getInfo = (PFNGLXGETDRAWABLEINFOPROC) XF86DRIGetDrawableInfo;
+  #endif /* DRI_NEW_INTERFACE_ONLY */
+      }
+  
+***************
+*** 988,994 ****
+      __DRIscreenPrivate *psp;
+      void * const shareCtx = (pshare != NULL) ? pshare->driverPrivate : NULL;
+  
+!     pDRIScreen = __glXFindDRIScreen(dpy, modes->screen);
+      if ( (pDRIScreen == NULL) || (pDRIScreen->private == NULL) ) {
+       /* ERROR!!! */
+       return NULL;
+--- 1022,1028 ----
+      __DRIscreenPrivate *psp;
+      void * const shareCtx = (pshare != NULL) ? pshare->driverPrivate : NULL;
+  
+!     pDRIScreen = glx_find_dri_screen(dpy, modes->screen);
+      if ( (pDRIScreen == NULL) || (pDRIScreen->private == NULL) ) {
+       /* ERROR!!! */
+       return NULL;
+***************
+*** 1033,1048 ****
+      pctx->bindContext3   = driBindContext3;
+      pctx->unbindContext3 = driUnbindContext3;
+  #else
+!     pctx->bindContext    = driBindContext;
+!     pctx->unbindContext  = driUnbindContext;
+      if ( driCompareGLXAPIVersion( 20030606 ) >= 0 ) {
+!         pctx->bindContext2   = driBindContext2;
+!         pctx->unbindContext2 = driUnbindContext2;
+      }
+  
+      if ( driCompareGLXAPIVersion( 20040415 ) >= 0 ) {
+!         pctx->bindContext3   = driBindContext3;
+!         pctx->unbindContext3 = driUnbindContext3;
+      }
+  #endif
+  
+--- 1067,1082 ----
+      pctx->bindContext3   = driBindContext3;
+      pctx->unbindContext3 = driUnbindContext3;
+  #else
+!     pctx->bindContext    = (void *)driBindContext;
+!     pctx->unbindContext  = (void *)driUnbindContext;
+      if ( driCompareGLXAPIVersion( 20030606 ) >= 0 ) {
+!         pctx->bindContext2   = (void *)driBindContext2;
+!         pctx->unbindContext2 = (void *)driUnbindContext2;
+      }
+  
+      if ( driCompareGLXAPIVersion( 20040415 ) >= 0 ) {
+!         pctx->bindContext3   = (void *)driBindContext3;
+!         pctx->unbindContext3 = (void *)driUnbindContext3;
+      }
+  #endif
+  
+***************
+*** 1088,1094 ****
+      __DRIscreen *pDRIScreen;
+      const __GLcontextModes *modes;
+  
+!     pDRIScreen = __glXFindDRIScreen(dpy, vis->screen);
+      if ( (pDRIScreen == NULL) || (pDRIScreen->private == NULL) ) {
+       /* ERROR!!! */
+       return NULL;
+--- 1122,1128 ----
+      __DRIscreen *pDRIScreen;
+      const __GLcontextModes *modes;
+  
+!     pDRIScreen = glx_find_dri_screen(dpy, vis->screen);
+      if ( (pDRIScreen == NULL) || (pDRIScreen->private == NULL) ) {
+       /* ERROR!!! */
+       return NULL;
+***************
+*** 1347,1353 ****
+      int directCapable;
+      __DRIscreenPrivate *psp = NULL;
+      drm_handle_t hSAREA;
+!     drmAddress pSAREA;
+      char *BusID;
+      __GLcontextModes *modes;
+      __GLcontextModes *temp;
+--- 1381,1387 ----
+      int directCapable;
+      __DRIscreenPrivate *psp = NULL;
+      drm_handle_t hSAREA;
+!     drmAddress pSAREA = MAP_FAILED;
+      char *BusID;
+      __GLcontextModes *modes;
+      __GLcontextModes *temp;
+***************
+*** 1360,1367 ****
+      int   status;
+      const char * err_msg;
+      const char * err_extra;
+! 
+! 
+      if (!XF86DRIQueryDirectRenderingCapable(dpy, scrn, &directCapable)
+       || !directCapable) {
+       return NULL;
+--- 1394,1402 ----
+      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 -c 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,565 ****
+--- 558,568 ----
+  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 -c /dev/null xc/extras/Mesa/src/mesa/drivers/dri/common/mmio.h:1.1.1.1.2.1
+*** /dev/null  Sat Feb  5 21:34:44 2005
+--- xc/extras/Mesa/src/mesa/drivers/dri/common/mmio.h  Wed Dec 15 01:50:57 2004
+***************
+*** 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 -c 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,137 ****
+  
+        HW_WRITE_CLIPLOOP()
+           {
+!             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] );
+!                }
+              }
+           }
+        HW_ENDCLIPLOOP();
+--- 123,151 ----
+  
+        HW_WRITE_CLIPLOOP()
+           {
+!             if (mask)
+              {
+!                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,168 ****
+           {
+              GLint i = 0;
+              CLIPSPAN(x,y,n,x1,n1,i);
+!             for (;n1>0;i++,x1++,n1--)
+!                if (mask[i])
+                    WRITE_PIXEL( x1, y, p );
+           }
+        HW_ENDCLIPLOOP();
+        }
+--- 174,190 ----
+           {
+              GLint i = 0;
+              CLIPSPAN(x,y,n,x1,n1,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,197 ****
+  
+        HW_WRITE_CLIPLOOP()
+           {
+!             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 );
+                 }
+           }
+        HW_ENDCLIPLOOP();
+        }
+--- 208,230 ----
+  
+        HW_WRITE_CLIPLOOP()
+           {
+!             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,249 ****
+  
+        HW_READ_CLIPLOOP()
+           {
+!             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 );
+                 }
+           }
+        HW_ENDCLIPLOOP();
+        }
+--- 271,293 ----
+  
+        HW_READ_CLIPLOOP()
+           {
+!             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 -c 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,54 ****
+--- 49,58 ----
+  #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,262 ****
+      string = numStart;
+  
+      /* scale of the first digit */
+!     scale = sign * powf (10.0f, (GLfloat)(pointPos-1 + exponent));
+  
+      /* second pass: parse digits */
+      do {
+--- 260,266 ----
+      string = numStart;
+  
+      /* scale of the first digit */
+!     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 -c 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,276 ****
+--- 273,297 ----
+          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 -c 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,58 ****
+  
+  # Remove .o and backup files
+  clean:
+!      -rm -f *.o */*.o *~ *.so *.a
+  
+  include depend
+--- 53,58 ----
+  
+  # Remove .o and backup files
+  clean:
+!      -rm -f *.o */*.o *~ *.so *.a depend depend.bak
+  
+  include depend
+Index: xc/extras/Mesa/src/mesa/drivers/dri/ffb/ffb_vtxfmt.c
+diff -c 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,173 ****
+  static void ffb_choose_Normal3f(GLfloat x, GLfloat y, GLfloat z)
+  {
+       choose_normals();
+!      glNormal3f(x, y, z);
+  }
+  
+  static void ffb_choose_Normal3fv(const GLfloat *v)
+  {
+       choose_normals();
+!      glNormal3fv(v);
+  }
+  
+  /* Vertex functions: */
+--- 161,173 ----
+  static void ffb_choose_Normal3f(GLfloat x, GLfloat y, GLfloat z)
+  {
+       choose_normals();
+!      GL_CALL(Normal3f)(x, y, z);
+  }
+  
+  static void ffb_choose_Normal3fv(const GLfloat *v)
+  {
+       choose_normals();
+!      GL_CALL(Normal3fv)(v);
+  }
+  
+  /* Vertex functions: */
+***************
+*** 267,279 ****
+        * correctly:
+        */
+       if (fmesa->imm.prim != PRIM_OUTSIDE_BEGIN_END )
+!              glBegin(fmesa->imm.prim);
+  
+       if (ctx->Light.Enabled) {
+!              glColor4fv(ctx->Current.Color); /* Catch ColorMaterial */
+!              glNormal3fv(current->normal);
+       } else {
+!              glColor4fv(current->color);
+       }
+  }
+  
+--- 267,279 ----
+        * correctly:
+        */
+       if (fmesa->imm.prim != PRIM_OUTSIDE_BEGIN_END )
+!              GL_CALL(Begin)(fmesa->imm.prim);
+  
+       if (ctx->Light.Enabled) {
+!              GL_CALL(Color4fv)(ctx->Current.Color);  /* Catch ColorMaterial */
+!              GL_CALL(Normal3fv)(current->normal);
+       } else {
+!              GL_CALL(Color4fv)(current->color);
+       }
+  }
+  
+Index: xc/extras/Mesa/src/mesa/drivers/dri/i810/Makefile
+diff -c 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,21 ****
+          ../common/texmem.c \
+          ../common/vblank.c \
+       ../common/dri_util.c \
+!      ../common/glcontextmodes.c
+  
+  DRIVER_SOURCES = \
+       i810context.c \
+--- 15,22 ----
+          ../common/texmem.c \
+          ../common/vblank.c \
+       ../common/dri_util.c \
+!      ../common/glcontextmodes.c \
+!      ../common/xmlconfig.c
+  
+  DRIVER_SOURCES = \
+       i810context.c \
+Index: xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_context.c
+diff -c 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,91 ****
+   * 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 )
+  {
+! #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 );
+! }
+  
+  
+  static void i830InitDriverFunctions( struct dd_function_table *functions )
+--- 38,49 ----
+   * Mesa's Driver Functions
+   ***************************************/
+  
+! static const char * const card_extensions[] =
+  {
+!    "GL_ARB_texture_env_crossbar",
+!    "GL_NV_blend_square",
+!    NULL
+! };
+  
+  
+  static void i830InitDriverFunctions( struct dd_function_table *functions )
+***************
+*** 93,99 ****
+     intelInitDriverFunctions( functions );
+     i830InitStateFuncs( functions );
+     i830InitTextureFuncs( functions );
+-    functions->GetString = i830GetString;
+  }
+  
+  
+--- 51,56 ----
+***************
+*** 142,148 ****
+                                4,
+                                11, /* max 2D texture size is 2048x2048 */
+                                8,  /* max 3D texture size is 256^3 */
+!                               0,  /* max CUBE. not supported */
+                                11, /* max RECT. supported */
+                                12,
+                                GL_FALSE );
+--- 99,105 ----
+                                4,
+                                11, /* max 2D texture size is 2048x2048 */
+                                8,  /* max 3D texture size is 256^3 */
+!                               10, /* max CUBE texture size is 1024x1024 */
+                                11, /* max RECT. supported */
+                                12,
+                                GL_FALSE );
+***************
+*** 153,158 ****
+--- 110,117 ----
+  
+     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 -c 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,96 ****
+  #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_TEXBLEND_SIZE   12      /* (4 args + op) * 2 + COLOR_FACTOR */
+  
+--- 89,97 ----
+  #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_TEXREG_CUBE       7     /* _3DSTATE_MAP_SUBE */
+! #define I830_TEX_SETUP_SIZE    8
+  
+  #define I830_TEXBLEND_SIZE   12      /* (4 args + op) * 2 + COLOR_FACTOR */
+  
+***************
+*** 169,180 ****
+  
+  /* 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 void 
+  i830EmitTextureBlend( i830ContextPtr i830 );
+--- 170,178 ----
+  
+  /* i830_texblend.c
+   */
+! 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 -c 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,172 ****
+   */
+  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 );
+     i830->meta.TexBlend[0][0] |= TEXOP_LAST_STAGE;
+     i830->meta.emitted &= ~I830_UPLOAD_TEXBLEND(0);
+  }
+--- 163,179 ----
+   */
+  static void set_no_texture( i830ContextPtr i830 )
+  {
+!    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,186 ****
+  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 );
+     i830->meta.TexBlend[0][0] |= TEXOP_LAST_STAGE;
+     i830->meta.emitted &= ~I830_UPLOAD_TEXBLEND(0);
+  
+--- 184,200 ----
+  static void enable_texture_blend_replace( i830ContextPtr i830,
+                                         GLenum format )
+  {
+!    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 -c 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,642 ****
+--- 637,643 ----
+  
+  #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 -c 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,273 ****
+                                       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
+   * could change the LogicOp or Independant Alpha Blend without subsequent
+   * calls to glEnable.
+   */
+  static void i830EvalLogicOpBlendState(GLcontext *ctx)
+  {
+--- 263,277 ----
+                                       ALPHA_REF_VALUE(refInt));
+  }
+  
+! /**
+!  * 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,357 ****
+     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;
+- }
+- 
+- 
+  
+  static int translate_blend_factor( GLenum factor )
+  {
+     switch(factor) {
+--- 314,329 ----
+     i830->state.Ctx[I830_CTXREG_BLENDCOLOR1] = (a<<24) | (r<<16) | (g<<8) | b;
+  }
+  
+  
++ /**
++  * 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,424 ****
+     }
+  }
+  
+! static void i830BlendFuncSeparate(GLcontext *ctx, GLenum sfactorRGB, 
+!                                GLenum dfactorRGB, GLenum sfactorA,
+!                                GLenum dfactorA )
+  {
+     i830ContextPtr i830 = I830_CONTEXT(ctx);
+!    int iab = i830->state.Ctx[I830_CTXREG_IALPHAB];
+!    int s1 = i830->state.Ctx[I830_CTXREG_STATE1];
+  
+-    if (INTEL_DEBUG&DEBUG_DRI)
+-       fprintf(stderr, "%s\n", __FUNCTION__);
+  
+  
+!    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);
+  
+!    if (ctx->Color.BlendEquationRGB == GL_MIN ||
+!        ctx->Color.BlendEquationRGB == GL_MAX) {
+!       sfactorA = sfactorRGB = dfactorA = dfactorRGB = GL_ONE;
+     }
+  
+!    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)); 
+  
+!    if (sfactorA != sfactorRGB || dfactorA != dfactorRGB) 
+        iab |= ENABLE_INDPT_ALPHA_BLEND;
+     else
+        iab |= DISABLE_INDPT_ALPHA_BLEND;
+--- 362,450 ----
+     }
+  }
+  
+! 
+! /**
+!  * 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 funcA;
+!    int funcRGB;
+!    int eqnA;
+!    int eqnRGB;
+!    int iab;
+!    int s1;
+  
+  
++    funcRGB = SRC_BLND_FACT( translate_blend_factor( ctx->Color.BlendSrcRGB ) )
++        | DST_BLND_FACT( translate_blend_factor( ctx->Color.BlendDstRGB ) );
+  
+!    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 ) );
+  
+!    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 = 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 ( (eqnA | funcA) != (eqnRGB | funcRGB) )
+        iab |= ENABLE_INDPT_ALPHA_BLEND;
+     else
+        iab |= DISABLE_INDPT_ALPHA_BLEND;
+***************
+*** 429,434 ****
+--- 455,508 ----
+        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 -c 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,752 ****
+  }
+  
+  
+! GLuint i830SetBlend_GL1_2(i830ContextPtr i830, int blendUnit, 
+!                        GLenum envMode, GLenum format, 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 );
+!       }
+  
+-    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];
+--- 113,147 ----
+  }
+  
+  
+! /**
+!  * 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 )
+  {
+!    const GLuint numColorArgs = combine->_NumArgsRGB;
+!    const GLuint numAlphaArgs = combine->_NumArgsA;
+  
+     GLuint blendop;
+     GLuint ablendop;
+     GLuint args_RGB[3];
+***************
+*** 755,760 ****
+--- 150,172 ----
+     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,772 ****
+      * scale factor, but the ARB version (and the version in OpenGL
+      * 1.3) does.
+      */
+!    switch (texUnit->Combine.ModeRGB) {
+     case GL_DOT3_RGB_EXT:
+!       alpha_shift = texUnit->Combine.ScaleShiftA;
+        rgb_shift = 0;
+        break;
+  
+--- 176,184 ----
+      * scale factor, but the ARB version (and the version in OpenGL
+      * 1.3) does.
+      */
+!    switch (combine->ModeRGB) {
+     case GL_DOT3_RGB_EXT:
+!       alpha_shift = combine->ScaleShiftA;
+        rgb_shift = 0;
+        break;
+  
+***************
+*** 776,788 ****
+        break;
+  
+     default:
+!       rgb_shift = texUnit->Combine.ScaleShiftRGB;
+!       alpha_shift = texUnit->Combine.ScaleShiftA;
+        break;
+     }
+  
+  
+!    switch(texUnit->Combine.ModeRGB) {
+     case GL_REPLACE: 
+        blendop = TEXBLENDOP_ARG1;
+        break;
+--- 188,200 ----
+        break;
+  
+     default:
+!       rgb_shift = combine->ScaleShiftRGB;
+!       alpha_shift = combine->ScaleShiftA;
+        break;
+     }
+  
+  
+!    switch(combine->ModeRGB) {
+     case GL_REPLACE: 
+        blendop = TEXBLENDOP_ARG1;
+        break;
+***************
+*** 818,827 ****
+  
+     /* Handle RGB args */
+     for(i = 0; i < 3; i++) {
+!       switch(texUnit->Combine.SourceRGB[i]) {
+        case GL_TEXTURE: 
+        args_RGB[i] = texel_op;
+        break;
+        case GL_CONSTANT:
+        args_RGB[i] = TEXBLENDARG_FACTOR_N; 
+        need_factor = 1;
+--- 230,245 ----
+  
+     /* Handle RGB args */
+     for(i = 0; i < 3; 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,842 ****
+        return pass_through( state, blendUnit );
+        }
+  
+!       switch(texUnit->Combine.OperandRGB[i]) {
+        case GL_SRC_COLOR: 
+        args_RGB[i] |= 0;
+        break;
+--- 254,260 ----
+        return pass_through( state, blendUnit );
+        }
+  
+!       switch(combine->OperandRGB[i]) {
+        case GL_SRC_COLOR: 
+        args_RGB[i] |= 0;
+        break;
+***************
+*** 863,877 ****
+      * 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 ) {
+        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) {
+        case GL_REPLACE: 
+        ablendop = TEXBLENDOP_ARG1;
+        break;
+--- 281,295 ----
+      * Note - the global factor is set up with alpha == .5, so 
+      * the alpha part of the DOT4 calculation should be zero.
+      */
+!    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(combine->ModeA) {
+        case GL_REPLACE: 
+        ablendop = TEXBLENDOP_ARG1;
+        break;
+***************
+*** 899,908 ****
+  
+        /* Handle A args */
+        for(i = 0; i < 3; i++) {
+!       switch(texUnit->Combine.SourceA[i]) {
+        case GL_TEXTURE: 
+           args_A[i] = texel_op;
+           break;
+        case GL_CONSTANT:
+           args_A[i] = TEXBLENDARG_FACTOR_N; 
+           need_factor = 1;
+--- 317,332 ----
+  
+        /* Handle A args */
+        for(i = 0; i < 3; 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,923 ****
+           return pass_through( state, blendUnit );
+        }
+  
+!       switch(texUnit->Combine.OperandA[i]) {
+        case GL_SRC_ALPHA: 
+           args_A[i] |= 0;
+           break;
+--- 341,347 ----
+           return pass_through( state, blendUnit );
+        }
+  
+!       switch(combine->OperandA[i]) {
+        case GL_SRC_ALPHA: 
+           args_A[i] |= 0;
+           break;
+***************
+*** 941,999 ****
+      */
+  
+  
+!    /* Build color pipeline */
+  
+!    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]);
+  
+  
+     if (need_factor) 
+!       return emit_factor( blendUnit, state, 8, factor );
+     else 
+!       return 8;
+  }
+  
+  
+--- 365,402 ----
+      */
+  
+  
+!    /* Build color & alpha pipelines */
+  
+!    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, used, factor );
+     else 
+!       return used;
+  }
+  
+  
+***************
+*** 1010,1026 ****
+  
+     /* 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 );
+!    }
+  
+     if (last_stage) 
+        tmp[0] |= TEXOP_LAST_STAGE;
+--- 413,421 ----
+  
+     /* Update i830->state.TexBlend
+      */ 
+!    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 -c 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,47 ****
+--- 42,60 ----
+  #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,171 ****
+     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;
+        
+!       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);
+     }
+  
+     t->intel.Pitch = pitch;
+--- 146,217 ----
+     lastLevel = t->intel.base.lastLevel;
+     numLevels = lastLevel - firstLevel + 1;
+  
+  
+     /* All images must be loaded at this pitch.  Count the number of
+      * lines required:
+      */
+!    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;
+        
+!       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,182 ****
+         ((tObj->Image[0][firstLevel]->Width - 1) << TM0S1_WIDTH_SHIFT) |
+         textureFormat);
+     t->Setup[I830_TEXREG_TM0S2] = 
+!       (((pitch / 4) - 1) << TM0S2_PITCH_SHIFT);
+     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;
+--- 222,229 ----
+         ((tObj->Image[0][firstLevel]->Width - 1) << TM0S1_WIDTH_SHIFT) |
+         textureFormat);
+     t->Setup[I830_TEXREG_TM0S2] = 
+!       (((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,221 ****
+--- 263,269 ----
+     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,275 ****
+     mcs &= ~TEXCOORDS_ARE_NORMAL;
+     mcs |= TEXCOORDS_ARE_IN_TEXELUNITS;
+  
+!    if (mcs != i830->state.Tex[unit][I830_TEXREG_MCS]) {
+        I830_STATECHANGE(i830, I830_UPLOAD_TEX(unit));
+        i830->state.Tex[unit][I830_TEXREG_MCS] = mcs;
+     }
+  
+     return GL_TRUE;
+--- 315,325 ----
+     mcs &= ~TEXCOORDS_ARE_NORMAL;
+     mcs |= TEXCOORDS_ARE_IN_TEXELUNITS;
+  
+!    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,298 ****
+     mcs &= ~TEXCOORDS_ARE_IN_TEXELUNITS;
+     mcs |= TEXCOORDS_ARE_NORMAL;
+  
+!    if (mcs != i830->state.Tex[unit][I830_TEXREG_MCS]) {
+        I830_STATECHANGE(i830, I830_UPLOAD_TEX(unit));
+        i830->state.Tex[unit][I830_TEXREG_MCS] = mcs;
+     }
+  
+     return GL_TRUE;
+  }
+  
+   
+  static GLboolean disable_tex( GLcontext *ctx, GLuint unit )
+  {
+     i830ContextPtr i830 = I830_CONTEXT(ctx);
+--- 334,394 ----
+     mcs &= ~TEXCOORDS_ARE_IN_TEXELUNITS;
+     mcs |= TEXCOORDS_ARE_NORMAL;
+  
+!    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,343 ****
+         INTEL_CONTEXT(ctx)->intelScreen->textureSize < 2048 * 1024)
+        return GL_FALSE;
+  
+!    if (texUnit->_ReallyEnabled == TEXTURE_1D_BIT ||
+!        texUnit->_ReallyEnabled == TEXTURE_2D_BIT) {
+        return (enable_tex_common( ctx, unit ) &&
+             enable_tex_2d( ctx, unit ));
+!    }
+!    else if (texUnit->_ReallyEnabled == TEXTURE_RECT_BIT) {      
+        return (enable_tex_common( ctx, unit ) &&
+             enable_tex_rect( ctx, unit ));
+!    }
+!    else if (texUnit->_ReallyEnabled) {
+!       return GL_FALSE;
+!    }
+!    else {
+        return disable_tex( ctx, unit );
+     }
+  }
+  
+--- 420,440 ----
+         INTEL_CONTEXT(ctx)->intelScreen->textureSize < 2048 * 1024)
+        return GL_FALSE;
+  
+!    switch(texUnit->_ReallyEnabled) {
+!    case TEXTURE_1D_BIT:
+!    case TEXTURE_2D_BIT:
+        return (enable_tex_common( ctx, unit ) &&
+             enable_tex_2d( ctx, unit ));
+!    case TEXTURE_RECT_BIT:
+        return (enable_tex_common( ctx, unit ) &&
+             enable_tex_rect( ctx, unit ));
+!    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 -c 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,92 ****
+--- 87,96 ----
+        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,127 ****
+           switch (sz) {
+           case 1: 
+           case 2: 
+-          case 3:             /* XXX: fix for CUBE/VOLUME textures */
+              emit = EMIT_2F; 
+              sz = 2; 
+              mcs |= TEXCOORDTYPE_CARTESIAN; 
+              break;
+           case 4: 
+              emit = EMIT_3F_XYW; 
+              sz = 3;     
+--- 121,135 ----
+           switch (sz) {
+           case 1: 
+           case 2: 
+              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 -c 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,58 ****
+   * 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
+  };
+  
+--- 45,53 ----
+Index: xc/extras/Mesa/src/mesa/drivers/dri/i915/intel_context.c
+diff -c 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,78 ****
+   * Mesa's Driver Functions
+   ***************************************/
+  
+! #define DRIVER_DATE                     "20040528"
+  
+  const GLubyte *intelGetString( GLcontext *ctx, GLenum name )
+  {
+--- 72,78 ----
+   * Mesa's Driver Functions
+   ***************************************/
+  
+! #define DRIVER_DATE                     "20040919"
+  
+  const GLubyte *intelGetString( GLcontext *ctx, GLenum name )
+  {
+***************
+*** 125,182 ****
+  
+  
+  
+! /* Extension strings exported by the intel driver.
+   *
+!  * NOTE: See implementation of 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_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_vertex_program",
+     "GL_EXT_blend_color",
+     "GL_EXT_blend_func_separate",
+     "GL_EXT_blend_minmax",
+     "GL_EXT_blend_subtract",
+     "GL_EXT_fog_coord",
+     "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_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_SGIS_generate_mipmap",
+-    "GL_SGIS_texture_border_clamp",
+-    "GL_SGIS_texture_edge_clamp",
+-    "GL_3DFX_texture_compression_FXT1",
+  
+     NULL
+  };
+--- 125,184 ----
+  
+  
+  
+! /**
+!  * Extension strings exported by the intel driver.
+   *
+!  * \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_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_combine",
+     "GL_EXT_texture_env_dot3",
+     "GL_EXT_texture_filter_anisotropic",
+     "GL_EXT_texture_lod_bias",
+! 
+!    "GL_3DFX_texture_compression_FXT1",
+!    "GL_APPLE_client_storage",
+     "GL_MESA_pack_invert",
+     "GL_MESA_ycbcr_texture",
+     "GL_NV_vertex_program",
+!    "GL_NV_vertex_program1_1",
+     "GL_SGIS_generate_mipmap",
+  
+     NULL
+  };
+Index: xc/extras/Mesa/src/mesa/drivers/dri/mga/mga_xmesa.c
+diff -c 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,64 ****
+--- 59,66 ----
+  #include "utils.h"
+  #include "vblank.h"
+  
++ #include "extensions.h"
++ 
+  #include "GL/internal/dri_interface.h"
+  
+  /* MGA configuration
+***************
+*** 74,81 ****
+          DRI_CONF_TEXTURE_DEPTH(DRI_CONF_TEXTURE_DEPTH_FB)
+          DRI_CONF_COLOR_REDUCTION(DRI_CONF_COLOR_REDUCTION_DITHER)
+      DRI_CONF_SECTION_END
+  DRI_CONF_END;
+! static const GLuint __driNConfigOptions = 3;
+  
+  #ifdef USE_NEW_INTERFACE
+  static PFNGLXCREATECONTEXTMODES create_context_modes = NULL;
+--- 76,87 ----
+          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 = 5;
+  
+  #ifdef USE_NEW_INTERFACE
+  static PFNGLXCREATECONTEXTMODES create_context_modes = NULL;
+***************
+*** 420,425 ****
+--- 426,433 ----
+     &_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,456 ****
+--- 457,466 ----
+  {
+     "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,467 ****
+  #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
+  };
+  
+--- 468,475 ----
+***************
+*** 666,671 ****
+--- 674,689 ----
+        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 -c 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,35 ****
+       r128_tris.c \
+       r128_ioctl.c \
+       r128_span.c \
+!      r128_texmem.c \
+!      r128_vb.c
+  
+  C_SOURCES = \
+       $(COMMON_SOURCES) \
+--- 28,34 ----
+       r128_tris.c \
+       r128_ioctl.c \
+       r128_span.c \
+!      r128_texmem.c
+  
+  C_SOURCES = \
+       $(COMMON_SOURCES) \
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_context.c
+diff -c 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,62 ****
+  #include "r128_span.h"
+  #include "r128_tex.h"
+  #include "r128_tris.h"
+- #include "r128_vb.h"
+  
+  #include "vblank.h"
+  #include "utils.h"
+--- 56,61 ----
+***************
+*** 180,185 ****
+--- 179,185 ----
+     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,249 ****
+     if (sPriv->drmMinor >= 4)
+        _mesa_enable_extension( ctx, "GL_MESA_ycbcr_texture" );
+  
+-    r128InitVB( ctx );
+     r128InitTriFuncs( ctx );
+     r128DDInitStateFuncs( ctx );
+     r128DDInitSpanFuncs( ctx );
+--- 243,248 ----
+***************
+*** 280,287 ****
+        _ac_DestroyContext( rmesa->glCtx );
+        _swrast_DestroyContext( rmesa->glCtx );
+  
+-       r128FreeVB( rmesa->glCtx );
+- 
+        /* free the Mesa context */
+        rmesa->glCtx->DriverCtx = NULL;
+        _mesa_destroy_context(rmesa->glCtx);
+--- 279,284 ----
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_context.h
+diff -c 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,48 ****
+--- 43,49 ----
+  #include "r128_drm.h"
+  
+  #include "mtypes.h"
++ #include "tnl/t_vertex.h"
+  
+  #include "r128_reg.h"
+  
+***************
+*** 81,86 ****
+--- 82,88 ----
+  #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,139 ****
+     GLuint dirty;                     /* Hardware state to be updated */
+     drm_r128_context_regs_t setup;
+  
+     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 */
+--- 124,144 ----
+     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 RenderIndex;
+     GLfloat hw_viewport[16];
+     GLfloat depth_scale;
+  
+     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 -c 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,49 ****
+  #include "r128_context.h"
+  #include "r128_ioctl.h"
+  #include "r128_state.h"
+- #include "r128_vb.h"
+  #include "r128_dd.h"
+  
+  #include "context.h"
+  
+  #include "utils.h"
+  
+! #define DRIVER_DATE  "20030328"
+  
+  
+  /* Return the width and height of the current color buffer.
+--- 36,49 ----
+  #include "r128_context.h"
+  #include "r128_ioctl.h"
+  #include "r128_state.h"
+  #include "r128_dd.h"
++ #include "swrast/swrast.h"
+  
+  #include "context.h"
+  
+  #include "utils.h"
+  
+! #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 -c 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,48 ****
+--- 43,49 ----
+  #include "swrast/swrast.h"
+  
+  #include "vblank.h"
++ #include "mmio.h"
+  
+  #define R128_TIMEOUT        2048
+  #define R128_IDLE_RETRY       32
+***************
+*** 225,236 ****
+  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);
+  
+        if ( rmesa->sarea->last_frame - frame <= R128_MAX_OUTSTANDING ) {
+        break;
+--- 226,236 ----
+  static int r128WaitForFrameCompletion( r128ContextPtr rmesa )
+  {
+     unsigned char *R128MMIO = rmesa->r128Screen->mmio.map;
+     int i;
+     int wait = 0;
+  
+     while ( 1 ) {
+!       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 -c 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,55 ****
+  extern drmBufPtr r128GetBufferLocked( r128ContextPtr rmesa );
+  extern void r128FlushVerticesLocked( r128ContextPtr rmesa );
+  
+! static __inline void *r128AllocDmaLow( r128ContextPtr rmesa, int bytes )
+  {
+     uint32_t *head;
+  
+     if ( !rmesa->vert_buf ) {
+        LOCK_HARDWARE( rmesa );
+--- 47,57 ----
+  extern drmBufPtr r128GetBufferLocked( r128ContextPtr rmesa );
+  extern void r128FlushVerticesLocked( r128ContextPtr rmesa );
+  
+! 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,69 ****
+--- 66,73 ----
+  
+     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 -c 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,110 ****
+        r128UpdatePageFlipping( rmesa );
+        rmesa->lastStamp = dPriv->lastStamp;
+        rmesa->new_state |= R128_NEW_CLIP;
+!       rmesa->SetupNewInputs = ~0;
+     }
+  
+     rmesa->dirty |= R128_UPLOAD_CONTEXT | R128_UPLOAD_CLIPRECTS;
+--- 104,110 ----
+        r128UpdatePageFlipping( rmesa );
+        rmesa->lastStamp = dPriv->lastStamp;
+        rmesa->new_state |= R128_NEW_CLIP;
+!       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 -c 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,44 ****
+  #include "r128_context.h"
+  #include "r128_ioctl.h"
+  #include "r128_tris.h"
+- #include "r128_vb.h"
+  
+  #include "context.h"
+  #include "imports.h"
+--- 38,43 ----
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_state.c
+diff -c 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,44 ****
+  #include "r128_state.h"
+  #include "r128_ioctl.h"
+  #include "r128_tris.h"
+- #include "r128_vb.h"
+  #include "r128_tex.h"
+  
+  #include "context.h"
+--- 38,43 ----
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_tex.c
+diff -c 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,42 ****
+  #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"
+--- 36,41 ----
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_texmem.c
+diff -c 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,42 ****
+  #include "r128_context.h"
+  #include "r128_state.h"
+  #include "r128_ioctl.h"
+- #include "r128_vb.h"
+  #include "r128_tris.h"
+  #include "r128_tex.h"
+  
+--- 36,41 ----
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_texstate.c
+diff -c 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,48 ****
+  #include "r128_context.h"
+  #include "r128_state.h"
+  #include "r128_ioctl.h"
+- #include "r128_vb.h"
+  #include "r128_tris.h"
+  #include "r128_tex.h"
+  
+--- 42,47 ----
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_tris.c
+diff -c 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,53 ****
+  #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] = {
+--- 47,52 ----
+***************
+*** 70,153 ****
+  /***********************************************************************
+   *                    Emit primitives as inline vertices               *
+   ***********************************************************************/
+  
+- #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          *
+--- 69,95 ----
+  /***********************************************************************
+   *                    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
+  
+  
+  /***********************************************************************
+   *          Macros for t_dd_tritmp.h to draw basic primitives          *
+***************
+*** 158,164 ****
+     if (DO_FALLBACK)                          \
+        rmesa->draw_tri( rmesa, a, b, c );     \
+     else                                              \
+!       r128_draw_triangle( rmesa, a, b, c );  \
+  } while (0)
+  
+  #define QUAD( a, b, c, d )                   \
+--- 100,106 ----
+     if (DO_FALLBACK)                          \
+        rmesa->draw_tri( rmesa, a, b, c );     \
+     else                                              \
+!       r128_triangle( rmesa, a, b, c );               \
+  } while (0)
+  
+  #define QUAD( a, b, c, d )                   \
+***************
+*** 167,173 ****
+        rmesa->draw_tri( rmesa, a, b, d );     \
+        rmesa->draw_tri( rmesa, b, c, d );     \
+     } else                                    \
+!       r128_draw_quad( rmesa, a, b, c, d );   \
+  } while (0)
+  
+  #define LINE( v0, v1 )                               \
+--- 109,115 ----
+        rmesa->draw_tri( rmesa, a, b, d );     \
+        rmesa->draw_tri( rmesa, b, c, d );     \
+     } else                                    \
+!       r128_quad( rmesa, a, b, c, d );                \
+  } while (0)
+  
+  #define LINE( v0, v1 )                               \
+***************
+*** 175,181 ****
+     if (DO_FALLBACK)                          \
+        rmesa->draw_line( rmesa, v0, v1 );     \
+     else                                      \
+!       r128_draw_line( rmesa, v0, v1 );       \
+  } while (0)
+  
+  #define POINT( v0 )                          \
+--- 117,123 ----
+     if (DO_FALLBACK)                          \
+        rmesa->draw_line( rmesa, v0, v1 );     \
+     else                                      \
+!       r128_line( rmesa, v0, v1 );            \
+  } while (0)
+  
+  #define POINT( v0 )                          \
+***************
+*** 183,189 ****
+     if (DO_FALLBACK)                          \
+        rmesa->draw_point( rmesa, v0 );                \
+     else                                      \
+!       r128_draw_point( rmesa, v0 );          \
+  } while (0)
+  
+  
+--- 125,131 ----
+     if (DO_FALLBACK)                          \
+        rmesa->draw_point( rmesa, v0 );                \
+     else                                      \
+!       r128_point( rmesa, v0 );                       \
+  } while (0)
+  
+  
+***************
+*** 247,281 ****
+  #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]); \
+     }                                                         \
+  } 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;    \
+     }                                                 \
+  } while (0)
+  
+! /* These don't need LE32_TO_CPU() as they 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 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;
+  
+  /***********************************************************************
+   *                Helpers for rendering unfilled primitives            *
+--- 189,228 ----
+  #define VERT_SET_SPEC( v0, c )                                       \
+  do {                                                         \
+     if (havespec) {                                           \
+!       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) {                                   \
+!       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 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[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->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,408 ****
+  {
+     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] );
+     _swrast_Triangle( ctx, &v[0], &v[1], &v[2] );
+  }
+  
+--- 347,356 ----
+  {
+     GLcontext *ctx = rmesa->glCtx;
+     SWvertex v[3];
+!    _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,421 ****
+  {
+     GLcontext *ctx = rmesa->glCtx;
+     SWvertex v[2];
+!    r128_translate_vertex( ctx, v0, &v[0] );
+!    r128_translate_vertex( ctx, v1, &v[1] );
+     _swrast_Line( ctx, &v[0], &v[1] );
+  }
+  
+--- 362,369 ----
+  {
+     GLcontext *ctx = rmesa->glCtx;
+     SWvertex v[2];
+!    _swsetup_Translate( ctx, v0, &v[0] );
+!    _swsetup_Translate( ctx, v1, &v[1] );
+     _swrast_Line( ctx, &v[0], &v[1] );
+  }
+  
+***************
+*** 426,432 ****
+  {
+     GLcontext *ctx = rmesa->glCtx;
+     SWvertex v[1];
+!    r128_translate_vertex( ctx, v0, &v[0] );
+     _swrast_Point( ctx, &v[0] );
+  }
+  
+--- 374,380 ----
+  {
+     GLcontext *ctx = rmesa->glCtx;
+     SWvertex v[1];
+!    _swsetup_Translate( ctx, v0, &v[0] );
+     _swrast_Point( ctx, &v[0] );
+  }
+  
+***************
+*** 436,451 ****
+  /*               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) )
+  #define RENDER_LINE( v0, v1 ) \
+!    r128_draw_line( rmesa, VERT(v0), VERT(v1) )
+  #define RENDER_TRI( v0, v1, v2 )  \
+!    r128_draw_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) )
+  #define INIT(x) do {                                 \
+     if (0) fprintf(stderr, "%s\n", __FUNCTION__);     \
+     r128RenderPrimitive( ctx, x );                    \
+--- 384,398 ----
+  /*               Render unclipped begin/end objects                   */
+  /**********************************************************************/
+  
+  #define RENDER_POINTS( start, count )                \
+     for ( ; start < count ; start++)          \
+!       r128_point( rmesa, VERT(start) )
+  #define RENDER_LINE( v0, v1 ) \
+!    r128_line( rmesa, VERT(v0), VERT(v1) )
+  #define RENDER_TRI( v0, v1, v2 )  \
+!    r128_triangle( rmesa, VERT(v0), VERT(v1), VERT(v2) )
+  #define RENDER_QUAD( v0, v1, v2, 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,460 ****
+  #define LOCAL_VARS                                           \
+      r128ContextPtr rmesa = R128_CONTEXT(ctx);                \
+      const GLuint vertsize = rmesa->vertex_size;              \
+!     const char *r128verts = (char *)rmesa->verts;            \
+      const GLuint * const elt = TNL_CONTEXT(ctx)->vb.Elts;    \
+      (void) elt;
+  #define RESET_STIPPLE
+--- 401,407 ----
+  #define LOCAL_VARS                                           \
+      r128ContextPtr rmesa = R128_CONTEXT(ctx);                \
+      const GLuint vertsize = rmesa->vertex_size;              \
+!     const char *vertptr = (char *)rmesa->verts;              \
+      const GLuint * const elt = TNL_CONTEXT(ctx)->vb.Elts;    \
+      (void) elt;
+  #define RESET_STIPPLE
+***************
+*** 471,542 ****
+  
+  
+  /**********************************************************************/
+- /*                    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)
+! 
+  
+  static void r128ChooseRenderState(GLcontext *ctx)
+  {
+--- 418,432 ----
+  
+  
+  /**********************************************************************/
+  /*                    Choose render functions                         */
+  /**********************************************************************/
+  
+  #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,553 ****
+     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;
+  
+        if (flags & ANY_RASTER_FLAGS) {
+        if (flags & DD_TRI_LIGHT_TWOSIDE) index |= R128_TWOSIDE_BIT;
+--- 435,443 ----
+     GLuint index = 0;
+  
+     if (flags & (ANY_RASTER_FLAGS|ANY_FALLBACK_FLAGS)) {
+!       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,587 ****
+        TNLcontext *tnl = TNL_CONTEXT(ctx);
+        tnl->Driver.Render.Points = rast_tab[index].points;
+        tnl->Driver.Render.Line = 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;
+        } 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;
+        }
+  
+        rmesa->RenderIndex = index;
+--- 459,476 ----
+        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.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.ClippedPolygon = _tnl_RenderClippedPolygon;
+        }
+  
+        rmesa->RenderIndex = index;
+***************
+*** 600,608 ****
+        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 );
+  
+--- 489,494 ----
+***************
+*** 657,669 ****
+     r128RasterPrimitive( ctx, hw );
+  }
+  
+  
+  static void r128RenderStart( GLcontext *ctx )
+  {
+!    /* Check for projective texturing.  Make sure all texcoord
+!     * pointers point to something.  (fix in mesa?)
+      */
+!    r128CheckTexSizes( ctx );
+  }
+  
+  static void r128RenderFinish( GLcontext *ctx )
+--- 543,662 ----
+     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 )
+  {
+!    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.
+      */
+!    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,706 ****
+        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);
+        }
+     }
+  }
+--- 691,709 ----
+        tnl->Driver.Render.Start = r128RenderStart;
+        tnl->Driver.Render.PrimitiveNotify = r128RenderPrimitive;
+        tnl->Driver.Render.Finish = r128RenderFinish;
+! 
+!       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,734 ****
+     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);
+  
+  /*     r128Fallback( ctx, 0x100000, 1 ); */
+  }
+--- 729,744 ----
+     tnl->Driver.Render.Finish = r128RenderFinish;
+     tnl->Driver.Render.PrimitiveNotify = r128RenderPrimitive;
+     tnl->Driver.Render.ResetLineStipple = _swrast_ResetLineStipple;
+!    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 -c 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 ****
+- /* $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
+--- 0 ----
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_cmdbuf.c
+diff -c 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,170 ****
+  
+  }
+  
+! static void r200_emit_state_list( r200ContextPtr rmesa, 
+!                                  struct r200_state_atom *list )
+  {
+!    struct r200_state_atom *state, *tmp;
+!    char *dest;
+!    int i, size, 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);
+!    }
+  
+!    if (!size)
+!       return;
+  
+!    dest = r200AllocCmdBuf( rmesa, size * 4, __FUNCTION__);
+!    mtu = 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 (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]);
+     for (i = 0; i < 6; ++i)
+!        EMIT_ATOM (pix[i]);
+  
+! #undef EMIT_ATOM
+  
+! }
+  
+  
+  void r200EmitState( r200ContextPtr rmesa )
+  {
+!    struct r200_state_atom *state, *tmp;
+  
+     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__); 
+  
+!       foreach_s( state, tmp, &(rmesa->hw.clean) ) 
+!       move_to_tail(&(rmesa->hw.dirty), state );
+  
+!       rmesa->lost_context = 0;
+     }
+- /*   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 );
+! }
+  
+  
+  
+  /* Fire a section of the retained (indexed_verts) buffer as a regular
+   * primtive.  
+--- 58,196 ----
+  
+  }
+  
+! /* The state atoms will be emitted in the order they appear in the atom list,
+!  * so this step is important.
+!  */
+! void r200SetUpAtomList( r200ContextPtr rmesa )
+  {
+!    int i, mtu;
+  
+!    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.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] );
+  
+     for (i = 0; i < 8; ++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)
+!        insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.ucp[i] );
+! }
+  
+! 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 )
+  {
+!    char *dest;
+!    int mtu;
+!    struct r200_state_atom *atom;
+  
+     if (R200_DEBUG & (DEBUG_STATE|DEBUG_PRIMS))
+        fprintf(stderr, "%s\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;
+  
+!    mtu = rmesa->glCtx->Const.MaxTextureUnits;
+  
+!    /* 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);
+!       }
+!       }
+     }
+  
+!    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 -c 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,68 ****
+  #include "r200_vtxfmt.h"
+  #include "r200_maos.h"
+  
+! #define DRIVER_DATE  "20030328"
+  
+  #include "vblank.h"
+  #include "utils.h"
+--- 62,68 ----
+  #include "r200_vtxfmt.h"
+  #include "r200_maos.h"
+  
+! #define DRIVER_DATE  "20040929"
+  
+  #include "vblank.h"
+  #include "utils.h"
+***************
+*** 143,149 ****
+      "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
+--- 143,148 ----
+***************
+*** 166,171 ****
+--- 165,171 ----
+     &_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,328 ****
+        DRI_CONF_TEXTURE_DEPTH_32 : DRI_CONF_TEXTURE_DEPTH_16;
+  
+     rmesa->swtcl.RenderIndex = ~0;
+!    rmesa->lost_context = 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
+--- 322,328 ----
+        DRI_CONF_TEXTURE_DEPTH_32 : DRI_CONF_TEXTURE_DEPTH_16;
+  
+     rmesa->swtcl.RenderIndex = ~0;
+!    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,411 ****
+--- 400,420 ----
+     _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 -c 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,500 ****
+  
+  
+  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 */
+  
+     /* Hardware state, stored as cmdbuf commands:  
+      *   -- Need to doublebuffer for
+--- 491,498 ----
+  
+  
+  struct r200_hw_state {
+!    /* Head of the linked list of state atoms. */
+!    struct r200_state_atom atomlist;
+  
+     /* Hardware state, stored as cmdbuf commands:  
+      *   -- Need to doublebuffer for
+***************
+*** 530,535 ****
+--- 528,534 ----
+     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,832 ****
+  };
+  
+  
+- 
+- 
+  struct r200_context {
+     GLcontext *glCtx;                 /* Mesa context */
+  
+--- 824,829 ----
+***************
+*** 854,859 ****
+--- 851,860 ----
+     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,881 ****
+--- 877,883 ----
+     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 -c 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,69 ****
+--- 59,99 ----
+  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,149 ****
+     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;
+  
+     return ret;
+  }
+--- 162,168 ----
+     rmesa->store.statenr = 0;
+     rmesa->store.cmd_used = 0;
+     rmesa->dma.nr_released_bufs = 0;
+!    rmesa->save_on_next_emit = 1;
+  
+     return ret;
+  }
+***************
+*** 464,470 ****
+     }
+  
+     UNLOCK_HARDWARE( rmesa );
+!    rmesa->lost_context = 1;
+  
+     rmesa->swap_count++;
+     (*rmesa->get_ust)( & ust );
+--- 483,489 ----
+     }
+  
+     UNLOCK_HARDWARE( rmesa );
+!    rmesa->hw.all_dirty = GL_TRUE;
+  
+     rmesa->swap_count++;
+     (*rmesa->get_ust)( & ust );
+***************
+*** 576,582 ****
+        return;
+     }
+  
+!    R200_FIREVERTICES( rmesa ); 
+  
+     if ( mask & DD_FRONT_LEFT_BIT ) {
+        flags |= RADEON_FRONT;
+--- 595,601 ----
+        return;
+     }
+  
+!    r200Flush( ctx );
+  
+     if ( mask & DD_FRONT_LEFT_BIT ) {
+        flags |= RADEON_FRONT;
+***************
+*** 613,625 ****
+     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.
+--- 632,637 ----
+***************
+*** 722,728 ****
+     }
+  
+     UNLOCK_HARDWARE( rmesa );
+!    rmesa->lost_context = 1;
+  }
+  
+  
+--- 734,740 ----
+     }
+  
+     UNLOCK_HARDWARE( rmesa );
+!    rmesa->hw.all_dirty = GL_TRUE;
+  }
+  
+  
+***************
+*** 763,770 ****
+     if (rmesa->dma.flush)
+        rmesa->dma.flush( rmesa );
+  
+!    if (!is_empty_list(&rmesa->hw.dirty)) 
+!       r200EmitState( rmesa );
+     
+     if (rmesa->store.cmd_used)
+        r200FlushCmdBuf( rmesa, __FUNCTION__ );
+--- 775,781 ----
+     if (rmesa->dma.flush)
+        rmesa->dma.flush( rmesa );
+  
+!    r200EmitState( rmesa );
+     
+     if (rmesa->store.cmd_used)
+        r200FlushCmdBuf( rmesa, __FUNCTION__ );
+***************
+*** 847,853 ****
+  {
+     GET_CURRENT_CONTEXT(ctx);
+     r200ContextPtr rmesa;
+!    int region_offset;
+     drm_radeon_mem_free_t memfree;
+     int ret;
+  
+--- 858,864 ----
+  {
+     GET_CURRENT_CONTEXT(ctx);
+     r200ContextPtr rmesa;
+!    ptrdiff_t region_offset;
+     drm_radeon_mem_free_t memfree;
+     int ret;
+  
+***************
+*** 908,914 ****
+  GLboolean r200IsGartMemory( r200ContextPtr rmesa, const GLvoid *pointer,
+                          GLint size )
+  {
+!    int offset = (char *)pointer - (char *)rmesa->r200Screen->gartTextures.map;
+     int valid = (size >= 0 &&
+               offset >= 0 &&
+               offset + size < rmesa->r200Screen->gartTextures.size);
+--- 919,925 ----
+  GLboolean r200IsGartMemory( r200ContextPtr rmesa, const GLvoid *pointer,
+                          GLint size )
+  {
+!    ptrdiff_t offset = (char *)pointer - (char *)rmesa->r200Screen->gartTextures.map;
+     int valid = (size >= 0 &&
+               offset >= 0 &&
+               offset + size < rmesa->r200Screen->gartTextures.size);
+***************
+*** 922,928 ****
+  
+  GLuint r200GartOffsetFromVirtual( r200ContextPtr rmesa, const GLvoid *pointer )
+  {
+!    int offset = (char *)pointer - (char *)rmesa->r200Screen->gartTextures.map;
+  
+     if (offset < 0 || offset > rmesa->r200Screen->gartTextures.size)
+        return ~0;
+--- 933,939 ----
+  
+  GLuint r200GartOffsetFromVirtual( r200ContextPtr rmesa, const GLvoid *pointer )
+  {
+!    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 -c 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,122 ****
+--- 117,124 ----
+  extern GLuint r200GartOffsetFromVirtual( r200ContextPtr rmesa, 
+                                        const GLvoid *pointer );
+  
++ void r200SetUpAtomList( r200ContextPtr rmesa );
++ 
+  /* ================================================================
+   * Helper macros:
+   */
+***************
+*** 135,141 ****
+  #define R200_STATECHANGE( rmesa, ATOM )                      \
+  do {                                                         \
+     R200_NEWPRIM( rmesa );                                    \
+!    move_to_head( &(rmesa->hw.dirty), &(rmesa->hw.ATOM));     \
+  } while (0)
+  
+  #define R200_DB_STATE( ATOM )                                \
+--- 137,144 ----
+  #define R200_STATECHANGE( rmesa, ATOM )                      \
+  do {                                                         \
+     R200_NEWPRIM( rmesa );                                    \
+!    rmesa->hw.ATOM.dirty = GL_TRUE;                           \
+!    rmesa->hw.is_dirty = GL_TRUE;                             \
+  } while (0)
+  
+  #define R200_DB_STATE( ATOM )                                \
+***************
+*** 149,155 ****
+     if (memcmp(atom->cmd, atom->lastcmd, atom->cmd_size*4)) {
+        int *tmp;
+        R200_NEWPRIM( rmesa );
+!       move_to_head( &(rmesa->hw.dirty), atom );
+        tmp = atom->cmd; 
+        atom->cmd = atom->lastcmd;
+        atom->lastcmd = tmp;
+--- 152,159 ----
+     if (memcmp(atom->cmd, atom->lastcmd, atom->cmd_size*4)) {
+        int *tmp;
+        R200_NEWPRIM( rmesa );
+!       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 -c 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,119 ****
+--- 116,121 ----
+     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 -c 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,82 ****
+      DRI_CONF_SECTION_DEBUG
+          DRI_CONF_NO_RAST(false)
+      DRI_CONF_SECTION_END
+  DRI_CONF_END;
+! static const GLuint __driNConfigOptions = 11;
+  
+  #if 1
+  /* Including xf86PciInfo.h introduces a bunch of errors...
+--- 75,86 ----
+      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 = 13;
+  
+  #if 1
+  /* Including xf86PciInfo.h introduces a bunch of errors...
+***************
+*** 87,93 ****
+  #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_LY     0x4C59
+  #define PCI_CHIP_R200_LZ     0x4C5A
+  #define PCI_CHIP_RV200_QW    0x5157 /* Radeon 7500 - not an R200 at all */
+--- 91,98 ----
+  #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_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,119 ****
+  #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 ? */
+  
+  #endif
+  
+--- 117,130 ----
+  #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 ? 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,242 ****
+--- 248,254 ----
+     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,270 ****
+--- 277,287 ----
+     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 -c 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,201 ****
+                                      GLint x, GLint y )
+  {
+     GLuint pitch = rmesa->r200Screen->frontPitch;
+!    GLuint b = ((y & 0x3FF) >> 4) * ((pitch & 0xFFF) >> 5) + ((x & 0x3FF) >> 5);
+     GLuint a = 
+        (BIT(x,0) << 2) |
+        (BIT(y,0) << 3) |
+--- 195,201 ----
+                                      GLint x, GLint y )
+  {
+     GLuint pitch = rmesa->r200Screen->frontPitch;
+!    GLuint b = ((y & 0x7FF) >> 4) * ((pitch & 0xFFF) >> 5) + ((x & 0x7FF) >> 5);
+     GLuint a = 
+        (BIT(x,0) << 2) |
+        (BIT(y,0) << 3) |
+***************
+*** 214,220 ****
+  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 a = 
+        (BIT(x,0) << 1) |
+        (BIT(y,0) << 2) |
+--- 214,220 ----
+  static GLuint r200_mba_z16( r200ContextPtr rmesa, GLint x, GLint y )
+  {
+     GLuint pitch = rmesa->r200Screen->frontPitch;
+!    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 -c 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,2048 ****
+--- 2043,2052 ----
+        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 -c 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,72 ****
+     fprintf(stderr, msg);
+     fprintf(stderr, ": ");
+  
+!    foreach(l, &(rmesa->hw.dirty)) {
+!       fprintf(stderr, "%s, ", l->name);
+     }
+  
+     fprintf(stderr, "\n");
+--- 65,73 ----
+     fprintf(stderr, msg);
+     fprintf(stderr, ": ");
+  
+!    foreach(l, &rmesa->hw.atomlist) {
+!       if (l->dirty || rmesa->hw.all_dirty)
+!       fprintf(stderr, "%s, ", l->name);
+     }
+  
+     fprintf(stderr, "\n");
+***************
+*** 200,210 ****
+     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 )                                \
+--- 201,206 ----
+***************
+*** 214,221 ****
+        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.max_state_size += SZ * sizeof(int);          \
+     } while (0)
+        
+--- 210,217 ----
+        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;                    \
+!       rmesa->hw.ATOM.dirty = GL_FALSE;                               \
+        rmesa->hw.max_state_size += SZ * sizeof(int);          \
+     } while (0)
+        
+***************
+*** 308,313 ****
+--- 304,310 ----
+     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,776 ****
+  
+     r200LightingSpaceChange( ctx );
+     
+!    rmesa->lost_context = 1;
+  }
+--- 769,773 ----
+  
+     r200LightingSpaceChange( ctx );
+     
+!    rmesa->hw.all_dirty = GL_TRUE;
+  }
+Index: xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_swtcl.c
+diff -c 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,128 ****
+--- 117,133 ----
+     }
+  
+     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,142 ****
+--- 142,163 ----
+        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 -c 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,171 ****
+  
+  static GLushort *r200AllocElts( r200ContextPtr rmesa, GLuint nr ) 
+  {
+!    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 )
+  
+  
+  /* 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)    
+  {
+     r200ContextPtr rmesa = R200_CONTEXT( ctx );
+     r200TclPrimitive( ctx, prim, hwprim );
+--- 140,187 ----
+  
+  static GLushort *r200AllocElts( r200ContextPtr rmesa, GLuint nr ) 
+  {
+!    if (rmesa->dma.flush == r200FlushElts &&
+!        rmesa->store.cmd_used + nr*2 < R200_CMD_BUF_SZ) {
+  
+!       GLushort *dest = (GLushort *)(rmesa->store.cmd_buf +
+!                                  rmesa->store.cmd_used);
+  
+!       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()                                 \
+! 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 r200EmitPrim( GLcontext *ctx, 
+!                        GLenum prim, 
+!                        GLuint hwprim, 
+!                        GLuint start, 
+!                        GLuint count) 
+  {
+     r200ContextPtr rmesa = R200_CONTEXT( ctx );
+     r200TclPrimitive( ctx, prim, hwprim );
+***************
+*** 185,191 ****
+                    count - start );
+  }
+  
+! 
+  
+  /* Try & join small primitives
+   */
+--- 201,209 ----
+                    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,213 ****
+  #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)
+  #else
+! #define EMIT_ELT(dest, offset, x) (dest)[offset] = (GLushort) (x)
+  #endif
+  
+  #define EMIT_TWO_ELTS(dest, offset, x, y)  *(GLuint *)((dest)+offset) = ((y)<<16)|(x);
+--- 223,234 ----
+  #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);  \
+!      (void)rmesa; } while (0)
+  #else
+! #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 -c 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,65 ****
+--- 60,66 ----
+  #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 -c 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,427 ****
+           return &_mesa_texformat_ycbcr_rev;
+  
+     default:
+!       _mesa_problem(ctx, "unexpected texture format in %s", __FUNCTION__);
+        return NULL;
+     }
+  
+--- 421,429 ----
+           return &_mesa_texformat_ycbcr_rev;
+  
+     default:
+!       _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 -c 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,49 ****
+  #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"
+--- 43,48 ----
+***************
+*** 73,82 ****
+        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] );
+        }
+        }
+     }
+--- 72,79 ----
+        for ( i = 0 ; i < rmesa->glCtx->Const.MaxTextureUnits ; i++ ) {
+        if ( t == rmesa->state.texture.unit[i].texobj ) {
+           rmesa->state.texture.unit[i].texobj = NULL;
+!          rmesa->hw.tex[i].dirty = GL_FALSE;
+!          rmesa->hw.cube[i].dirty = GL_FALSE;
+        }
+        }
+     }
+***************
+*** 385,390 ****
+--- 382,395 ----
+     /* 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 -c 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,1005 ****
+                                          R200_TEX_BLEND_0_ENABLE) << unit);
+        rmesa->hw.ctx.cmd[CTX_PP_CNTL] |= R200_TEX_BLEND_0_ENABLE; 
+        
+!       R200_STATECHANGE( rmesa, tcl );
+        rmesa->hw.vtx.cmd[VTX_TCL_OUTPUT_VTXFMT_1] &= ~(7 << (unit * 3));
+        
+        if (rmesa->TclFallback & (R200_TCL_FALLBACK_TEXGEN_0<<unit)) {
+--- 999,1005 ----
+                                          R200_TEX_BLEND_0_ENABLE) << unit);
+        rmesa->hw.ctx.cmd[CTX_PP_CNTL] |= R200_TEX_BLEND_0_ENABLE; 
+        
+!       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,1278 ****
+     r200ContextPtr rmesa = R200_CONTEXT(ctx);
+     GLboolean ok;
+     GLuint dbg;
+-    int i;
+  
+     ok = (r200UpdateTextureUnit( ctx, 0 ) &&
+        r200UpdateTextureUnit( ctx, 1 ) &&
+--- 1272,1277 ----
+***************
+*** 1336,1343 ****
+         * Texture cache LRU hang workaround -------------
+         * not needed for r200 derivatives?
+         */
+-       dbg = 0x0;
+  
+        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)) ||
+--- 1335,1348 ----
+         * Texture cache LRU hang workaround -------------
+         * not needed for r200 derivatives?
+         */
+  
++       /* 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,1368 ****
+           0x04) == 0)))
+        {
+           dbg |= 0x04;
+!       }
+  
+        if (dbg != rmesa->hw.tam.cmd[TAM_DEBUG3]) {
+           R200_STATECHANGE( rmesa, tam );
+--- 1367,1373 ----
+           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 -c 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,127 ****
+--- 122,128 ----
+  
+  /* Color for ubyte (packed) color formats:
+   */
++ #if 0
+  static void r200_Color3ub_ub( GLubyte r, GLubyte g, GLubyte b )
+  {
+     GET_CURRENT_CONTEXT(ctx);
+***************
+*** 161,167 ****
+     r200ContextPtr rmesa = R200_CONTEXT(ctx);
+     *(GLuint *)rmesa->vb.colorptr = LE32_TO_CPU(*(GLuint *)v);
+  }
+! 
+  
+  static void r200_Color3f_ub( GLfloat r, GLfloat g, GLfloat b )
+  {
+--- 162,168 ----
+     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,215 ****
+--- 211,217 ----
+  
+  /* Color for float color+alpha formats:
+   */
++ #if 0
+  static void r200_Color3ub_4f( GLubyte r, GLubyte g, GLubyte b )
+  {
+     GET_CURRENT_CONTEXT(ctx);
+***************
+*** 253,258 ****
+--- 255,261 ----
+     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,307 ****
+--- 305,311 ----
+  
+  /* Color for float color formats:
+   */
++ #if 0
+  static void r200_Color3ub_3f( GLubyte r, GLubyte g, GLubyte b )
+  {
+     GET_CURRENT_CONTEXT(ctx);
+***************
+*** 343,348 ****
+--- 347,353 ----
+     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,395 ****
+--- 395,401 ----
+  
+  /* Secondary Color:
+   */
++ #if 0
+  static void r200_SecondaryColor3ubEXT_ub( GLubyte r, GLubyte g, GLubyte b )
+  {
+     GET_CURRENT_CONTEXT(ctx);
+***************
+*** 411,416 ****
+--- 417,423 ----
+     dest->blue        = v[2];
+     dest->alpha       = 0xff;
+  }
++ #endif /* 0 */
+  
+  static void r200_SecondaryColor3fEXT_ub( GLfloat r, GLfloat g, GLfloat b )
+  {
+***************
+*** 434,439 ****
+--- 441,447 ----
+     dest->alpha = 255;
+  }
+  
++ #if 0
+  static void r200_SecondaryColor3ubEXT_3f( GLubyte r, GLubyte g, GLubyte b )
+  {
+     GET_CURRENT_CONTEXT(ctx);
+***************
+*** 455,460 ****
+--- 463,469 ----
+     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 -c 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,231 ****
+  
+  static void radeonCompatEmitStateLocked( radeonContextPtr rmesa )
+  {
+!    struct radeon_state_atom *state, *tmp;
+  
+     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__); 
+  
+!       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 );
+     }
+  }
+  
+  
+- 
+  static void radeonCompatEmitPrimitiveLocked( radeonContextPtr rmesa,
+                                            GLuint hw_primitive,
+                                            GLuint nverts,
+--- 202,229 ----
+  
+  static void radeonCompatEmitStateLocked( radeonContextPtr rmesa )
+  {
+!    struct radeon_state_atom *atom;
+  
+     if (RADEON_DEBUG & (DEBUG_STATE|DEBUG_PRIMS))
+        fprintf(stderr, "%s\n", __FUNCTION__);
+  
+!    if (!rmesa->hw.is_dirty && !rmesa->hw.all_dirty)
+!       return;
+  
+!    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 -c 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,68 ****
+  #include "radeon_vtxfmt.h"
+  #include "radeon_maos.h"
+  
+! #define DRIVER_DATE  "20030328"
+  
+  #include "vblank.h"
+  #include "utils.h"
+--- 62,68 ----
+  #include "radeon_vtxfmt.h"
+  #include "radeon_maos.h"
+  
+! #define DRIVER_DATE  "20040929"
+  
+  #include "vblank.h"
+  #include "utils.h"
+***************
+*** 306,312 ****
+        DRI_CONF_TEXTURE_DEPTH_32 : DRI_CONF_TEXTURE_DEPTH_16;
+  
+     rmesa->swtcl.RenderIndex = ~0;
+!    rmesa->lost_context = 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
+--- 306,312 ----
+        DRI_CONF_TEXTURE_DEPTH_32 : DRI_CONF_TEXTURE_DEPTH_16;
+  
+     rmesa->swtcl.RenderIndex = ~0;
+!    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 -c 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,411 ****
+  
+  
+  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 */
+  
+     /* 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;
+--- 398,408 ----
+  
+  
+  struct radeon_hw_state {
+!    /* Head of the linked list of state atoms. */
+!    struct radeon_state_atom atomlist;
+  
+     /* Hardware state, stored as cmdbuf commands:  
+      *   -- Need to doublebuffer for
+      *           - eliding noop statechange loops? (except line stipple count)
+      */
+     struct radeon_state_atom ctx;
+***************
+*** 428,433 ****
+--- 425,431 ----
+     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,720 ****
+--- 713,722 ----
+     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,738 ****
+--- 735,741 ----
+     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 -c 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,68 ****
+  
+  
+  static void radeonWaitForIdle( radeonContextPtr rmesa );
+! 
+! /* =============================================================
+!  * Kernel command buffer handling
+!  */
+  
+  static void print_state_atom( struct radeon_state_atom *state )
+  {
+--- 59,66 ----
+  
+  
+  static void radeonWaitForIdle( radeonContextPtr rmesa );
+! static int radeonFlushCmdBufLocked( radeonContextPtr rmesa, 
+!                                  const char * caller );
+  
+  static void print_state_atom( struct radeon_state_atom *state )
+  {
+***************
+*** 76,190 ****
+  
+  }
+  
+! static void radeon_emit_state_list( radeonContextPtr rmesa, 
+!                                  struct radeon_state_atom *list )
+  {
+!    struct radeon_state_atom *state, *tmp;
+!    char *dest;
+!    int i, size, texunits;
+  
+!    /* 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);
+  
+! #undef EMIT_ATOM
+  }
+  
+  
+  void radeonEmitState( radeonContextPtr rmesa )
+  {
+!    struct radeon_state_atom *state, *tmp;
+  
+     if (RADEON_DEBUG & (DEBUG_STATE|DEBUG_PRIMS))
+        fprintf(stderr, "%s\n", __FUNCTION__);
+  
+!    /* Somewhat overkill:
+      */
+!    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) );
+     }
+  
+!    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 );
+!        }
+!      }
+     }
+  
+!    radeon_emit_state_list( rmesa, &rmesa->hw.dirty );
+  }
+  
+- 
+- 
+  /* Fire a section of the retained (indexed_verts) buffer as a regular
+   * primtive.  
+   */
+--- 74,233 ----
+  
+  }
+  
+! static void radeonSaveHwState( radeonContextPtr rmesa )
+  {
+!    struct radeon_state_atom *atom;
+!    char * dest = rmesa->backup_store.cmd_buf;
+  
+!    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;
+  
+!    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 *atom;
+!    char *dest;
+  
+     if (RADEON_DEBUG & (DEBUG_STATE|DEBUG_PRIMS))
+        fprintf(stderr, "%s\n", __FUNCTION__);
+  
+!    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.
+      */
+!    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);
+!       }
+!       }
+     }
+  
+!    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;
+!       }
+!       }
+     }
+  
+!    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,382 ****
+        (component[0]->aos_start + offset * component[0]->aos_stride * 4);
+  #else
+     drm_radeon_cmd_header_t *cmd;
+!    int sz = AOS_BUFSZ;
+     int i;
+     int *tmp;
+  
+--- 419,425 ----
+        (component[0]->aos_start + offset * component[0]->aos_stride * 4);
+  #else
+     drm_radeon_cmd_header_t *cmd;
+!    int sz = AOS_BUFSZ(nr);
+     int i;
+     int *tmp;
+  
+***************
+*** 491,496 ****
+--- 534,542 ----
+     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,561 ****
+     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;
+  
+     return ret;
+  }
+--- 590,596 ----
+     rmesa->store.statenr = 0;
+     rmesa->store.cmd_used = 0;
+     rmesa->dma.nr_released_bufs = 0;
+!    rmesa->save_on_next_emit = 1;
+  
+     return ret;
+  }
+***************
+*** 897,902 ****
+--- 932,938 ----
+     }
+  
+     rmesa->swap_ust = ust;
++    rmesa->hw.all_dirty = GL_TRUE;
+  }
+  
+  void radeonPageFlip( const __DRIdrawablePrivate *dPriv )
+***************
+*** 990,996 ****
+              __FUNCTION__, all, cx, cy, cw, ch );
+     }
+  
+!    RADEON_FIREVERTICES( rmesa ); 
+  
+     if ( mask & DD_FRONT_LEFT_BIT ) {
+        flags |= RADEON_FRONT;
+--- 1026,1039 ----
+              __FUNCTION__, all, cx, cy, cw, ch );
+     }
+  
+!    {
+!       LOCK_HARDWARE( rmesa );
+!       UNLOCK_HARDWARE( rmesa );
+!       if ( dPriv->numClipRects == 0 ) 
+!       return;
+!    }
+!    
+!    radeonFlush( ctx ); 
+  
+     if ( mask & DD_FRONT_LEFT_BIT ) {
+        flags |= RADEON_FRONT;
+***************
+*** 1028,1040 ****
+     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.
+--- 1071,1076 ----
+***************
+*** 1146,1151 ****
+--- 1182,1188 ----
+     }
+  
+     UNLOCK_HARDWARE( rmesa );
++    rmesa->hw.all_dirty = GL_TRUE;
+  }
+  
+  
+***************
+*** 1189,1196 ****
+     if (rmesa->dma.flush)
+        rmesa->dma.flush( rmesa );
+  
+!    if (!is_empty_list(&rmesa->hw.dirty)) 
+!       radeonEmitState( rmesa );
+     
+     if (rmesa->store.cmd_used)
+        radeonFlushCmdBuf( rmesa, __FUNCTION__ );
+--- 1226,1232 ----
+     if (rmesa->dma.flush)
+        rmesa->dma.flush( rmesa );
+  
+!    radeonEmitState( rmesa );
+     
+     if (rmesa->store.cmd_used)
+        radeonFlushCmdBuf( rmesa, __FUNCTION__ );
+Index: xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_ioctl.h
+diff -c 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,108 ****
+--- 103,109 ----
+  extern void radeonWaitForVBlank( radeonContextPtr rmesa );
+  extern void radeonInitIoctlFuncs( GLcontext *ctx );
+  extern void radeonGetAllParams( radeonContextPtr rmesa );
++ extern void radeonSetUpAtomList( radeonContextPtr rmesa );
+  
+  /* radeon_compat.c:
+   */
+***************
+*** 111,117 ****
+                                      GLuint hw_primitive,
+                                      GLuint nrverts );
+  
+- 
+  /* ================================================================
+   * Helper macros:
+   */
+--- 112,117 ----
+***************
+*** 130,136 ****
+  #define RADEON_STATECHANGE( rmesa, ATOM )                    \
+  do {                                                         \
+     RADEON_NEWPRIM( rmesa );                                  \
+!    move_to_head( &(rmesa->hw.dirty), &(rmesa->hw.ATOM));     \
+  } while (0)
+  
+  #define RADEON_DB_STATE( ATOM )                              \
+--- 130,137 ----
+  #define RADEON_STATECHANGE( rmesa, ATOM )                    \
+  do {                                                         \
+     RADEON_NEWPRIM( rmesa );                                  \
+!    rmesa->hw.ATOM.dirty = GL_TRUE;                           \
+!    rmesa->hw.is_dirty = GL_TRUE;                             \
+  } while (0)
+  
+  #define RADEON_DB_STATE( ATOM )                              \
+***************
+*** 144,150 ****
+     if (memcmp(atom->cmd, atom->lastcmd, atom->cmd_size*4)) {
+        int *tmp;
+        RADEON_NEWPRIM( rmesa );
+!       move_to_head( &(rmesa->hw.dirty), atom );
+        tmp = atom->cmd; 
+        atom->cmd = atom->lastcmd;
+        atom->lastcmd = tmp;
+--- 145,152 ----
+     if (memcmp(atom->cmd, atom->lastcmd, atom->cmd_size*4)) {
+        int *tmp;
+        RADEON_NEWPRIM( rmesa );
+!       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 -c 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,127 ****
+--- 124,129 ----
+        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 -c 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,97 ****
+--- 87,100 ----
+  #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,315 ****
+--- 312,320 ----
+     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 -c 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,66 ****
+     fprintf(stderr, msg);
+     fprintf(stderr, ": ");
+  
+!    foreach(l, &(rmesa->hw.dirty)) {
+!       fprintf(stderr, "%s, ", l->name);
+     }
+  
+     fprintf(stderr, "\n");
+--- 59,67 ----
+     fprintf(stderr, msg);
+     fprintf(stderr, ": ");
+  
+!    foreach(l, &rmesa->hw.atomlist) {
+!       if (l->dirty || rmesa->hw.all_dirty)
+!       fprintf(stderr, "%s, ", l->name);
+     }
+  
+     fprintf(stderr, "\n");
+***************
+*** 197,207 ****
+     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 )                               \
+--- 198,203 ----
+***************
+*** 212,218 ****
+        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.max_state_size += SZ * sizeof(int);          \
+     } while (0)
+        
+--- 208,214 ----
+        rmesa->hw.ATOM.name = NM;                                      \
+        rmesa->hw.ATOM.is_tcl = FLAG;                                  \
+        rmesa->hw.ATOM.check = check_##CHK;                            \
+!       rmesa->hw.ATOM.dirty = GL_TRUE;                                \
+        rmesa->hw.max_state_size += SZ * sizeof(int);          \
+     } while (0)
+        
+***************
+*** 256,261 ****
+--- 252,258 ----
+     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,555 ****
+--- 549,554 ----
+     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 -c 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,82 ****
+     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] );
+        }
+     }
+  
+--- 75,81 ----
+     if ( rmesa ) {
+        if ( t == rmesa->state.texture.unit[0].texobj ) {
+           rmesa->state.texture.unit[0].texobj = NULL;
+!       rmesa->hw.tex[0].dirty = GL_FALSE;
+        }
+     }
+  
+Index: xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_swtcl.c
+diff -c 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,572 ****
+  #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)
+  #else
+! #define EMIT_ELT(offset, x) (dest)[offset] = (GLushort) (x)
+  #endif
+  #define EMIT_TWO_ELTS(offset, x, y)  *(GLuint *)(dest+offset) = ((y)<<16)|(x);
+  #define INCR_ELTS( nr ) dest += nr
+--- 564,575 ----
+  #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);     \
+!      (void)rmesa; } while (0)
+  #else
+! #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 -c 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,175 ****
+   * 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, 
+--- 169,175 ----
+   * discrete and there are no intervening state changes.  (Somewhat
+   * duplicates changes to DrawArrays code)
+   */
+! static void radeonEmitPrim( GLcontext *ctx, 
+                      GLenum prim, 
+                      GLuint hwprim, 
+                      GLuint start, 
+***************
+*** 194,200 ****
+                      count - start );
+  }
+  
+! 
+  
+  /* Try & join small primitives
+   */
+--- 194,202 ----
+                      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,222 ****
+  #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)
+  #else
+! #define EMIT_ELT(dest, offset, x) (dest)[offset] = (GLushort) (x)
+  #endif
+  
+  #define EMIT_TWO_ELTS(dest, offset, x, y)  *(GLuint *)(dest+offset) = ((y)<<16)|(x);
+--- 216,227 ----
+  #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);     \
+!      (void)rmesa; } while (0)
+  #else
+! #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 -c 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,47 ****
+  #include "imports.h"
+  #include "context.h"
+  #include "macros.h"
+- #include "simple_list.h"
+  
+  #include "radeon_context.h"
+  #include "radeon_ioctl.h"
+--- 41,46 ----
+***************
+*** 66,73 ****
+        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] );
+        }
+        }
+     }
+--- 65,71 ----
+        for ( i = 0 ; i < rmesa->glCtx->Const.MaxTextureUnits ; i++ ) {
+        if ( t == rmesa->state.texture.unit[i].texobj ) {
+           rmesa->state.texture.unit[i].texobj = NULL;
+!          rmesa->hw.tex[i].dirty = GL_FALSE;
+        }
+        }
+     }
+Index: xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_vtxfmt_c.c
+diff -c 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,123 ****
+  }
+  
+  
+! 
+  /* Color for ubyte (packed) color formats:
+   */
+  static void radeon_Color3ub_ub( GLubyte r, GLubyte g, GLubyte b )
+--- 117,123 ----
+  }
+  
+  
+! #if 0
+  /* Color for ubyte (packed) color formats:
+   */
+  static void radeon_Color3ub_ub( GLubyte r, GLubyte g, GLubyte b )
+***************
+*** 159,165 ****
+     radeonContextPtr rmesa = RADEON_CONTEXT(ctx);
+     *(GLuint *)rmesa->vb.colorptr = LE32_TO_CPU(*(GLuint *)v);
+  }
+! 
+  
+  static void radeon_Color3f_ub( GLfloat r, GLfloat g, GLfloat b )
+  {
+--- 159,165 ----
+     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,213 ****
+--- 208,214 ----
+  
+  /* Color for float color+alpha formats:
+   */
++ #if 0
+  static void radeon_Color3ub_4f( GLubyte r, GLubyte g, GLubyte b )
+  {
+     GET_CURRENT_CONTEXT(ctx);
+***************
+*** 251,256 ****
+--- 252,258 ----
+     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,305 ****
+--- 302,308 ----
+  
+  /* Color for float color formats:
+   */
++ #if 0
+  static void radeon_Color3ub_3f( GLubyte r, GLubyte g, GLubyte b )
+  {
+     GET_CURRENT_CONTEXT(ctx);
+***************
+*** 341,346 ****
+--- 344,350 ----
+     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,393 ****
+--- 392,398 ----
+  
+  /* Secondary Color:
+   */
++ #if 0
+  static void radeon_SecondaryColor3ubEXT_ub( GLubyte r, GLubyte g, GLubyte b )
+  {
+     GET_CURRENT_CONTEXT(ctx);
+***************
+*** 409,414 ****
+--- 414,420 ----
+     dest->blue        = v[2];
+     dest->alpha       = 0xff;
+  }
++ #endif /* 0 */
+  
+  static void radeon_SecondaryColor3fEXT_ub( GLfloat r, GLfloat g, GLfloat b )
+  {
+***************
+*** 432,437 ****
+--- 438,444 ----
+     dest->alpha = 255;
+  }
+  
++ #if 0
+  static void radeon_SecondaryColor3ubEXT_3f( GLubyte r, GLubyte g, GLubyte b )
+  {
+     GET_CURRENT_CONTEXT(ctx);
+***************
+*** 453,458 ****
+--- 460,466 ----
+     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,773 ****
+--- 776,782 ----
+  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,781 ****
+--- 785,791 ----
+       (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,796 ****
+--- 797,808 ----
+       (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 -c /dev/null xc/extras/Mesa/src/mesa/drivers/dri/savage/Makefile:1.1.1.1.2.1
+*** /dev/null  Sat Feb  5 21:34:45 2005
+--- xc/extras/Mesa/src/mesa/drivers/dri/savage/Makefile        Wed Dec 15 01:50:59 2004
+***************
+*** 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 -c 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,39 ****
+--- 34,41 ----
+  
+  #include "simple_list.h"
+  
++ #include "utils.h"
++ 
+  #include "swrast/swrast.h"
+  #include "swrast_setup/swrast_setup.h"
+  #include "tnl/tnl.h"
+***************
+*** 55,60 ****
+--- 57,66 ----
+  
+  #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,118 ****
+    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)
+--- 94,99 ----
+***************
+*** 813,820 ****
+  
+  
+  
+  /*
+!  * This is the bootstrap function for the driver.
+   * The __driCreateScreen name is the symbol that libGL.so fetches.
+   * Return:  pointer to a __DRIscreenPrivate.
+   */
+--- 794,802 ----
+  
+  
+  
++ #ifndef DRI_NEW_INTERFACE_ONLY
+  /*
+!  * 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,830 ****
+--- 807,953 ----
+     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 -c 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,43 ****
+  #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"
+--- 37,42 ----
+***************
+*** 237,243 ****
+      unsigned int texAge[SAVAGE_NR_TEX_HEAPS]; 
+  
+      drm_context_t hHWContext;
+!     drmLock *driHwLock;
+      GLuint driFd;
+  
+      __DRIdrawablePrivate *driDrawable;
+--- 236,242 ----
+      unsigned int texAge[SAVAGE_NR_TEX_HEAPS]; 
+  
+      drm_context_t hHWContext;
+!     drm_hw_lock_t *driHwLock;
+      GLuint driFd;
+  
+      __DRIdrawablePrivate *driDrawable;
+Index: xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_dd.c
+diff -c 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,50 ****
+  
+  #include "utils.h"
+  
+! #define DRIVER_DATE  "20040608"
+  
+  /* Return the width and height of the given buffer.
+   */
+--- 44,50 ----
+  
+  #include "utils.h"
+  
+! #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 -c 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,652 ****
+  #define SiS_S_BOTH_ONE_MINUS_SRC_ALPHA       0x0000000c
+  
+  /*
+!  * REG_3D_DstBlendMode                       (0x8A54 - 0x8A57)
+   */
+  #define MASK_BottomClip                      0x00001FFF
+  #define MASK_TopClip                 0x03FFE000
+  
+  /*
+!  * REG_3D_DstBlendMode                       (0x8A58 - 0x8A5B)
+   */
+  #define MASK_RightClip                       0x00001FFF
+  #define MASK_LeftClip                        0x03FFE000
+--- 640,652 ----
+  #define SiS_S_BOTH_ONE_MINUS_SRC_ALPHA       0x0000000c
+  
+  /*
+!  * REG_3D_ClipTopBottom                      (0x8A54 - 0x8A57)
+   */
+  #define MASK_BottomClip                      0x00001FFF
+  #define MASK_TopClip                 0x03FFE000
+  
+  /*
+!  * 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 -c 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,52 ****
+  const char __driConfigOptions[] =
+  DRI_CONF_BEGIN
+       DRI_CONF_SECTION_DEBUG
+!              DRI_CONF_OPT_BEGIN(agp_disable,bool,true)
+               DRI_CONF_DESC(en,"Disable AGP vertex dispatch")
+               DRI_CONF_OPT_END
+               DRI_CONF_OPT_BEGIN(fallback_force,bool,false)
+--- 46,52 ----
+  const char __driConfigOptions[] =
+  DRI_CONF_BEGIN
+       DRI_CONF_SECTION_DEBUG
+!              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 -c 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,449 ****
+     __GLSiSHardware *prev = &smesa->prev;
+     __GLSiSHardware *current = &smesa->current;
+  
+-    if (!ctx->Color.ColorLogicOpEnabled)
+-       return;
+- 
+     current->hwDstSet &= ~MASK_ROP2;
+     switch (opcode)
+     {
+--- 441,446 ----
+Index: xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_tris.c
+diff -c 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,617 ****
+  
+  #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 _SIS_NEW_RENDER_STATE (ANY_RASTER_FLAGS | ANY_FALLBACK_FLAGS)
+--- 611,617 ----
+  
+  #define POINT_FALLBACK (DD_POINT_SMOOTH)
+  #define LINE_FALLBACK (DD_LINE_STIPPLE|DD_LINE_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,895 ****
+  void
+  sisFlushPrimsLocked(sisContextPtr smesa)
+  {
+!    GLuint *start;
+  
+     sisUpdateHWState(smesa->glCtx);
+  
+--- 889,896 ----
+  void
+  sisFlushPrimsLocked(sisContextPtr smesa)
+  {
+!    if (smesa->vb_cur == smesa->vb_last)
+!       return;
+  
+     sisUpdateHWState(smesa->glCtx);
+  
+***************
+*** 898,904 ****
+        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 |
+        0x50000000);
+        MMIO(REG_3D_ParsingSet, smesa->AGPParseSet);
+        MMIO(REG_3D_AGPCmFire, (GLint)(-1));
+--- 899,905 ----
+        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) |
+        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 -c 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,56 ****
+--- 51,57 ----
+  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 -c 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,80 ****
+--- 75,81 ----
+     _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,89 ****
+  #endif
+  
+     if ( fxMesa->haveTwoTMUs ) {
+-       _mesa_enable_extension( ctx, "GL_EXT_texture_env_add" );
+        _mesa_enable_extension( ctx, "GL_ARB_multitexture" );
+     }
+  
+--- 84,89 ----
+***************
+*** 97,105 ****
+        _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) {
+--- 97,103 ----
+***************
+*** 112,117 ****
+--- 110,116 ----
+  
+     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 -c 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,507 ****
+        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);
+     }
+  }
+  
+--- 501,507 ----
+        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, CLAMP(p->LodBias, -8, 7.75));
+     }
+  }
+  
+Index: xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_tex.c
+diff -c 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,67 ****
+  #include "tdfx_texman.h"
+  
+  
+  void
+! _mesa_halve2x2_teximage2d ( 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;
+     GLubyte *dst = dstImage;
+  
+!    /* no borders! can't halve 1x1! (stride > width * comp) not allowed */
+     if (srcHeight == 1) {
+        for (i = 0; i < dstWidth; i++) {
+           for (k = 0; k < bytesPerPixel; k++) {
+--- 49,104 ----
+  #include "tdfx_texman.h"
+  
+  
++ /* no borders! can't halve 1x1! (stride > width * comp) not allowed */
+  void
+! _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;
+!    GLint dstWidth = srcWidth / 2;
+!    GLint dstHeight = srcHeight / 2;
+!    GLint srcRowStride = srcWidth * bytesPerPixel;
+!    GLubyte *src = (GLubyte *)srcImage;
+     GLubyte *dst = dstImage;
+  
+!    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,101 ****
+--- 133,152 ----
+           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,1369 ****
+                               NULL);
+              mipImage = _mesa_select_tex_image(ctx, texUnit, target, level);
+              mip = TDFX_TEXIMAGE_DATA(mipImage);
+!             _mesa_halve2x2_teximage2d(texelBytes,
+                                        mml->width, mml->height,
+                                        texImage->Data, mipImage->Data);
+              texImage = mipImage;
+--- 1414,1422 ----
+                               NULL);
+              mipImage = _mesa_select_tex_image(ctx, texUnit, target, level);
+              mip = TDFX_TEXIMAGE_DATA(mipImage);
+!             _mesa_halve2x2_teximage2d(ctx,
+!                                       texImage,
+!                                       texelBytes,
+                                        mml->width, mml->height,
+                                        texImage->Data, mipImage->Data);
+              texImage = mipImage;
+***************
+*** 1470,1476 ****
+           ++level;
+           mipImage = _mesa_select_tex_image(ctx, texUnit, target, level);
+           mip = TDFX_TEXIMAGE_DATA(mipImage);
+!          _mesa_halve2x2_teximage2d(texelBytes,
+                                     mml->width, mml->height,
+                                     texImage->Data, mipImage->Data);
+           texImage = mipImage;
+--- 1523,1531 ----
+           ++level;
+           mipImage = _mesa_select_tex_image(ctx, texUnit, target, level);
+           mip = TDFX_TEXIMAGE_DATA(mipImage);
+!          _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 -c 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,305 ****
+--- 300,307 ----
+     } 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 -c 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,35 ****
+--- 30,36 ----
+       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 -c 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,65 ****
+  #include <stdio.h>
+  #include "macros.h"
+  
+! #define DRIVER_DATE  "20020221"
+  
+  #include "utils.h"
+  
+--- 59,65 ----
+  #include <stdio.h>
+  #include "macros.h"
+  
+! #define DRIVER_DATE  "20040923"
+  
+  #include "utils.h"
+  
+***************
+*** 136,141 ****
+--- 136,245 ----
+     }
+  }
+  
++ 
++ /**
++  * 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,246 ****
+       
+      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);
+!      }
+!     }
+      UNLOCK_HARDWARE(vmesa);
+  #ifdef DEBUG
+      if (VIA_DEBUG) fprintf(stderr, "%s - out\n", __FUNCTION__);
+  #endif
+--- 256,266 ----
+       
+      vmesa->driDrawable->w = ctx->DrawBuffer->Width;
+      vmesa->driDrawable->h = ctx->DrawBuffer->Height;
++ 
+      LOCK_HARDWARE(vmesa);
+!     calculate_buffer_parameters( vmesa );
+      UNLOCK_HARDWARE(vmesa);
++ 
+  #ifdef DEBUG
+      if (VIA_DEBUG) fprintf(stderr, "%s - out\n", __FUNCTION__);
+  #endif
+***************
+*** 263,274 ****
+     "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_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",
+     NULL
+  };
+  
+--- 283,294 ----
+     "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_ARB_texture_mirrored_repeat",
+     "GL_EXT_stencil_wrap",
+     "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,445 ****
+--- 460,467 ----
+      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,578 ****
+      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);
+       if (saam && vmesa->viaScreen->drixinerama) {
+           vmesa->xsi = XineramaQueryScreens(vmesa->display, &count);
+           /* Test RightOf or Down */
+--- 589,600 ----
+      if (VIA_DEBUG) fprintf(stderr, "%s - out\n", __FUNCTION__);    
+  #endif
+      {
+  #ifndef USE_XINERAMA
+          vmesa->saam = 0;
+  #else
+!      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,723 ****
+--- 738,747 ----
+  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,1081 ****
+       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) {
+  
+-              /*=* 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");
+  #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;
+!          }
+       }
+          _mesa_make_current2(vmesa->glCtx,
+                              (GLframebuffer *)driDrawPriv->driverPrivate,
+                              (GLframebuffer *)driReadPriv->driverPrivate);
+--- 928,949 ----
+       fprintf(stderr, "driContextPriv = %08x\n", (GLuint)driReadPriv);
+      }        
+  #endif    
+! 
+      if (driContextPriv) {
+          viaContextPtr vmesa = (viaContextPtr)driContextPriv->driverPrivate;
+  
+!      current_mesa = vmesa;
+  
+  #ifdef DEBUG
+!      if (VIA_DEBUG) fprintf(stderr, "viaScreen->bitsPerPixel = %d\n", viaScreen->bitsPerPixel);
+!      if (VIA_DEBUG) fprintf(stderr, "viaMakeCurrent: w = %d\n", vmesa->driDrawable->w);
+  #endif
+  
+!      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 -c 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,84 ****
+  #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
+--- 75,81 ----
+  #define TAG(x) via##x
+  #include "tnl_dd/t_dd_vertex.h"
+  #undef TAG
+! 
+  #define RightOf 1
+  #define LeftOf 2
+  #define Down 4
+***************
+*** 451,456 ****
+--- 448,456 ----
+  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 -c 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,319 ****
+  #ifdef DEBUG    
+          if (VIA_DEBUG) fprintf(stderr, "%s SwapPBuffers\n", __FUNCTION__);    
+  #endif       /*=* [DBG] for pbuffer *=*/
+-      /*viaDoSwapBufferSoftFront(vmesa);*/
+      }
+      else {
+       GLuint scrn = 0;
+--- 313,318 ----
+***************
+*** 1436,1518 ****
+  #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;
+--- 1435,1441 ----
+Index: xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_ioctl.h
+diff -c 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,54 ****
+  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); 
+--- 47,52 ----
+Index: xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_state.c
+diff -c 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,51 ****
+--- 46,52 ----
+  
+  #include "tnl/t_pipeline.h"
+  
++ 
+  static GLuint ROP[16] = {
+      HC_HROP_BLACK,    /* GL_CLEAR           0                        */
+      HC_HROP_DPa,      /* GL_AND             s & d                    */
+***************
+*** 506,518 ****
+      }
+  }
+  
+  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    
+--- 507,558 ----
+      }
+  }
+  
++ /**
++  * 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 *=*/
+! 
+  #ifdef DEBUG
+      if (VIA_DEBUG) fprintf(stderr, "%s - in\n", __FUNCTION__);    
+  #endif    
+***************
+*** 524,533 ****
+       }
+  #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            
+--- 564,589 ----
+       }
+  #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];
+! 
+  #ifdef DEBUG
+           if (VIA_DEBUG) fprintf(stderr, "texUnit0->_ReallyEnabled\n");    
+  #endif            
+***************
+*** 580,3081 ****
+                                        HC_HTXnFLTe_Nearest;
+              }
+  
+!             if (texObj->WrapS == GL_REPEAT)
+!                 vmesa->regHTXnMPMD_0 = HC_HTXnMPMD_Srepeat;
+!             else
+!                 vmesa->regHTXnMPMD_0 = HC_HTXnMPMD_Sclamp;
+  
+-             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;
+!             }
+          }
+       else {
+       /* Should turn Cs off if actually no Cs */
+--- 636,650 ----
+                                        HC_HTXnFLTe_Nearest;
+              }
+  
+!          vmesa->regHTXnMPMD_0 &= ~(HC_HTXnMPMD_SMASK | HC_HTXnMPMD_TMASK);
+!          vmesa->regHTXnMPMD_0 |= get_wrap_mode( texObj->WrapS,
+!                                                 texObj->WrapT );
+  
+  #ifdef DEBUG
+           if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode %x\n",texUnit0->EnvMode);    
+  #endif
+! 
+!          viaTexCombineState( vmesa, texUnit0->_CurrentCombine, 0 );
+          }
+       else {
+       /* Should turn Cs off if actually no Cs */
+***************
+*** 3084,3090 ****
+          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);
+--- 653,658 ----
+***************
+*** 3135,5673 ****
+                   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;
+  
+!      /*=* 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;
+!             }
+          }
+          vmesa->dirty |= VIA_UPLOAD_TEXTURE;
+      }
+      else {
+       if (ctx->Fog.Enabled)
+--- 703,730 ----
+                   break;
+           }
+           
+!          vmesa->regHTXnMPMD_1 &= ~(HC_HTXnMPMD_SMASK | HC_HTXnMPMD_TMASK);
+!          vmesa->regHTXnMPMD_1 |= get_wrap_mode( texObj->WrapS,
+!                                                 texObj->WrapT );
+  
+!          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 -c /dev/null xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_texcombine.c:1.1.1.1.2.1
+*** /dev/null  Sat Feb  5 21:34:45 2005
+--- xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_texcombine.c     Wed Dec 15 01:51:00 2004
+***************
+*** 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 -c 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,61 ****
+  #include "texformat.h"
+  #include "texstore.h"
+  
+! ggi_extid ggiMesaID = -1;
+  static int _ggimesaLibIsUp = 0;
+  static void *_ggimesaConfigHandle;
+! 
+! static char ggimesaconffile[] = GGIMESACONFFILE;
+  
+  int _ggimesaDebugSync = 0;
+  uint32 _ggimesaDebugState = 0;
+  
+- static void gl_ggiUpdateState(GLcontext *ctx, GLuint new_state);
+- static int changed(ggi_visual_t vis, int whatchanged);
+  
+  
+  static int _ggi_error(void)
+  {
+       GGIMESADPRINT_CORE("_ggi_error() called\n");
+--- 43,98 ----
+  #include "texformat.h"
+  #include "texstore.h"
+  
+! /* 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 _ggimesaconfstub[512] = GGIMESACONFDIR;
+! static char *_ggimesaconfdir = _ggimesaconfstub+GGIMESATAGLEN;
+  
+  int _ggimesaDebugSync = 0;
+  uint32 _ggimesaDebugState = 0;
+  
+  
+  
++ /* 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,68 ****
+--- 100,246 ----
+       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,80 ****
+       
+       GGIMESADPRINT_CORE("gl_ggiGetSize() called\n");
+       
+!      *width = LIBGGI_MODE(ggi_ctx->ggi_visual)->visible.x; 
+!      *height = LIBGGI_MODE(ggi_ctx->ggi_visual)->visible.y;
+       printf("returning %d, %d\n", *width, *height);
+  }
+  
+--- 251,258 ----
+       
+       GGIMESADPRINT_CORE("gl_ggiGetSize() called\n");
+       
+!      *width = LIBGGI_VIRTX(ggi_ctx->ggi_visual);
+!      *height = LIBGGI_VIRTY(ggi_ctx->ggi_visual);
+       printf("returning %d, %d\n", *width, *height);
+  }
+  
+***************
+*** 91,99 ****
+  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;
+  }
+--- 269,277 ----
+  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,144 ****
+       
+       GGIMESADPRINT_CORE("gl_ggiClear() called\n");
+  
+!      if (mask & (DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT)) 
+!      {
+               ggiSetGCForeground(ggi_ctx->ggi_visual, ggi_ctx->clearcolor);
+  
+!              if (all)
+!              {
+                       int w, h;
+!                      w = LIBGGI_MODE(ggi_ctx->ggi_visual)->visible.x;
+!                      h = LIBGGI_MODE(ggi_ctx->ggi_visual)->visible.y;
+                       ggiDrawBox(ggi_ctx->ggi_visual, 0, 0, w, h);
+!              }
+!              else
+!              {
+                       ggiDrawBox(ggi_ctx->ggi_visual, x, y, //FLIP(y),
+                                  width, height);
+               }
+--- 304,318 ----
+       
+       GGIMESADPRINT_CORE("gl_ggiClear() called\n");
+  
+!      if (mask & (DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT)) {
+               ggiSetGCForeground(ggi_ctx->ggi_visual, ggi_ctx->clearcolor);
+  
+!              if (all) {
+                       int w, h;
+!                      w = LIBGGI_VIRTX(ggi_ctx->ggi_visual);
+!                      h = LIBGGI_VIRTX(ggi_ctx->ggi_visual);
+                       ggiDrawBox(ggi_ctx->ggi_visual, 0, 0, w, h);
+!              } else {
+                       ggiDrawBox(ggi_ctx->ggi_visual, x, y, //FLIP(y),
+                                  width, height);
+               }
+***************
+*** 156,162 ****
+  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");
+  
+--- 330,336 ----
+  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,194 ****
+  static const GLubyte * gl_ggiGetString(GLcontext *ctx, GLenum name)
+  {
+       GGIMESADPRINT_CORE("gl_ggiGetString() called\n");
+!      
+!      if (name == GL_RENDERER)
+!              return (GLubyte *) "Mesa GGI";
+!      else
+               return NULL;
+  }
+  
+  static void gl_ggiFlush(GLcontext *ctx)
+--- 358,369 ----
+  static const GLubyte * gl_ggiGetString(GLcontext *ctx, GLenum name)
+  {
+       GGIMESADPRINT_CORE("gl_ggiGetString() called\n");
+! 
+!      if (name == GL_RENDERER) {
+!              return (GLubyte *) "Mesa GGI";
+!      } else {
+               return NULL;
++      }
+  }
+  
+  static void gl_ggiFlush(GLcontext *ctx)
+***************
+*** 219,225 ****
+  static void gl_ggiSetupPointers(GLcontext *ctx)
+  {
+       TNLcontext *tnl;
+!   
+       GGIMESADPRINT_CORE("gl_ggiSetupPointers() called\n");
+  
+       /* General information */
+--- 394,400 ----
+  static void gl_ggiSetupPointers(GLcontext *ctx)
+  {
+       TNLcontext *tnl;
+! 
+       GGIMESADPRINT_CORE("gl_ggiSetupPointers() called\n");
+  
+       /* General information */
+***************
+*** 293,305 ****
+       *g = 0;
+       *b = 0;
+  
+!      for(i = 0; i < sizeof(ggi_pixel)*8; ++i){
+               int mask = 1 << i;
+!              if(LIBGGI_PIXFMT(vis)->red_mask & mask)
+                       ++(*r);
+!              if(LIBGGI_PIXFMT(vis)->green_mask & mask)
+                       ++(*g);
+!              if(LIBGGI_PIXFMT(vis)->blue_mask & mask)
+                       ++(*b);
+       }
+  
+--- 468,480 ----
+       *g = 0;
+       *b = 0;
+  
+!      for(i = 0; i < sizeof(ggi_pixel)*8; ++i) {
+               int mask = 1 << i;
+!              if (LIBGGI_PIXFMT(vis)->red_mask & mask)
+                       ++(*r);
+!              if (LIBGGI_PIXFMT(vis)->green_mask & mask)
+                       ++(*g);
+!              if (LIBGGI_PIXFMT(vis)->blue_mask & mask)
+                       ++(*b);
+       }
+  
+***************
+*** 310,393 ****
+       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);
+       if (rc == 0)
+       {
+               int r, g, b, ci;
+--- 485,498 ----
+       printf("rgb (%d, %d, %d) db %d, rgb %d ci %d\n",*r,*g,*b,*db,*rgb,*ci);
+  }
+       
+  
+  int ggiMesaAttach(ggi_visual_t vis)
+  {
+       int rc;
+! 
+       GGIMESADPRINT_CORE("ggiMesaAttach() called\n");
+! 
+!      rc = ggiExtensionAttach(vis, _ggiMesaID);
+       if (rc == 0)
+       {
+               int r, g, b, ci;
+***************
+*** 419,425 ****
+  {
+       GGIMESADPRINT_CORE("ggiMesaDetach() called\n");
+       
+!      return ggiExtensionDetach(vis, ggiMesaID);
+  }
+   
+  int ggiMesaExtendVisual(ggi_visual_t vis, GLboolean alpha_flag,
+--- 524,530 ----
+  {
+       GGIMESADPRINT_CORE("ggiMesaDetach() called\n");
+       
+!      return ggiExtensionDetach(vis, _ggiMesaID);
+  }
+   
+  int ggiMesaExtendVisual(ggi_visual_t vis, GLboolean alpha_flag,
+***************
+*** 531,540 ****
+       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;
+       }
+  }
+  
+--- 636,645 ----
+       if (ctx->gl_ctx->Viewport.Width == 0)
+       {
+               _mesa_Viewport(0, 0,
+!                             LIBGGI_VIRTX(vis),
+!                             LIBGGI_VIRTY(vis));
+!              ctx->gl_ctx->Scissor.Width = LIBGGI_VIRTX(vis);
+!              ctx->gl_ctx->Scissor.Height = LIBGGI_VIRTY(vis);
+       }
+  }
+  
+***************
+*** 579,584 ****
+--- 684,690 ----
+       _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,646 ****
+       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;
+- }
+- 
+--- 694,696 ----
+Index: xc/extras/Mesa/src/mesa/drivers/ggi/default/linear.c
+diff -c 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,45 ****
+                       ((color[GCOMP]>>GS) << B)     |  \
+                       ((color[BCOMP]>>BS)))
+  
+! #define FLIP(coord) (LIBGGI_MODE(ggi_ctx->ggi_visual)->visible.y-(coord) - 1)
+  
+  
+  /**********************************************************************/
+--- 39,45 ----
+                       ((color[GCOMP]>>GS) << B)     |  \
+                       ((color[BCOMP]>>BS)))
+  
+! #define FLIP(coord) (LIBGGI_VIRTY(ggi_ctx->ggi_visual) - (coord) - 1)
+  
+  
+  /**********************************************************************/
+Index: xc/extras/Mesa/src/mesa/drivers/ggi/display/fbdev_mode.c
+diff -c 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,64 ****
+  
+  int GGIMesa_fbdev_getapi(ggi_visual *vis, int num, char *apiname, char *arguments)
+  {
+!      struct fbdev_priv_mesa *priv = GGIMESA_PRIVATE(vis);
+       
+!      strcpy(arguments, "");
+  
+!      switch(num) 
+!      {
+!              case 0:
+!              if (priv->oldpriv->have_accel) 
+!              {
+                       strcpy(apiname, priv->oldpriv->accel);
+                       return 0;
+               }
+--- 50,62 ----
+  
+  int GGIMesa_fbdev_getapi(ggi_visual *vis, int num, char *apiname, char *arguments)
+  {
+!      struct fbdev_priv_mesa *priv = GGIMESA_PRIV(vis);
+       
+!      arguments = '\0';
+  
+!      switch(num) {
+!      case 0:
+!              if (priv->oldpriv->have_accel) {
+                       strcpy(apiname, priv->oldpriv->accel);
+                       return 0;
+               }
+***************
+*** 70,104 ****
+  
+  static int do_setmode(ggi_visual *vis)
+  {
+!      struct fbdev_priv_mesa *priv = GGIMESA_PRIVATE(vis);
+       int err, id;
+!      char libname[256], libargs[256];
+       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 "
+                               "%s (%s) library.\n", libname, libargs);
+                       return GGI_EFATAL;
+               }
+  
+!              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 
+!      {
+               priv->have_accel = 0;
+       }
+       vis->accelactive = 0;
+!      
+       ggiIndicateChange(vis, GGI_CHG_APILIST);
+  
+       GGIMESADPRINT_CORE("display-fbdev-mesa: do_setmode SUCCESS\n");
+--- 68,100 ----
+  
+  static int do_setmode(ggi_visual *vis)
+  {
+!      struct fbdev_priv_mesa *priv = GGIMESA_PRIV(vis);
+       int err, id;
+!      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) {
+!                      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);
+       }
+  
+       if (priv->oldpriv->accel &&
+           _ggiOpenDL(vis, priv->accel, NULL, NULL) != 0) {
+               priv->have_accel = 1;
+!      } 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 -c 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,44 ****
+  #include <fcntl.h>
+  #include <sys/stat.h>
+  
+- #define GGI_SYMNAME_PREFIX  "MesaGGIdl_"
+  
+  #ifdef HAVE_SYS_VT_H
+  #include <sys/vt.h>
+--- 38,43 ----
+***************
+*** 68,136 ****
+  
+  #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)
+  {
+-      struct fbdev_priv_mesa *priv;
+       int err;
+       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;
+       }
+       
+-      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) ||
+--- 67,94 ----
+  
+  #define NUM_ACCELS   (sizeof(accel_strings)/sizeof(accel_info))
+  
+  
+  
+! static int GGIopen(ggi_visual *vis, struct ggi_dlhandle *dlh,
+!                    const char *args, void *argptr, uint32 *dlret)
+  {
+       int err;
++      struct fbdev_priv_mesa *priv;
+       ggifunc_getapi *oldgetapi;
+  
+! 
+       priv->oldpriv = LIBGGI_PRIVATE(vis);  /* Hook back */
+! 
+!      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;
+       }
+       
+       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,150 ****
+               vis->opdisplay->getapi = oldgetapi;
+       }
+  
+       return 0;
+  }
+  
+! int GGIdlcleanup(ggi_visual *vis)
+  {
+       return 0;
+  }
+  
+  #include <ggi/internal/ggidlinit.h>
+--- 97,138 ----
+               vis->opdisplay->getapi = oldgetapi;
+       }
+  
++      *dlret = GGI_DL_EXTENSION;
+       return 0;
+  }
+  
+! 
+! 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 -c 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,81 ****
+       ggi_pixel color;                /* Current color or index*/
+       ggi_pixel clearcolor;
+       
+!      void *private;
+  };
+  
+  #define SHIFT (GGI_COLOR_PRECISION - 8)
+--- 75,81 ----
+       ggi_pixel color;                /* Current color or index*/
+       ggi_pixel clearcolor;
+       
+!      void *priv;
+  };
+  
+  #define SHIFT (GGI_COLOR_PRECISION - 8)
+Index: xc/extras/Mesa/src/mesa/drivers/ggi/include/ggi/mesa/ggimesa_int.h
+diff -c 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,12 ****
+  #include <ggi/internal/internal.h>
+  #include "ggimesa.h"
+  
+- #define GGI_SYMNAME_PREFIX  "MesaGGIdl_"
+  
+! extern ggi_extid ggiMesaID;
+  
+  ggifunc_setmode GGIMesa_setmode;
+  ggifunc_getapi GGIMesa_getapi;
+--- 4,11 ----
+  #include <ggi/internal/internal.h>
+  #include "ggimesa.h"
+  
+  
+! extern ggi_extid _ggiMesaID;
+  
+  ggifunc_setmode GGIMesa_setmode;
+  ggifunc_getapi GGIMesa_getapi;
+***************
+*** 39,45 ****
+       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))
+  
+  #endif /* _GGI_MISC_INT_H */
+--- 38,44 ----
+       void *private;
+  } ggi_mesa_ext_t;
+  
+! #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 -c 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,14 ****
+  #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 MANVERSION              6
+! #define MANREVISION             1
+! #define BUILD_NUMBER            9
+  
+  VS_VERSION_INFO VERSIONINFO
+   FILEVERSION MANVERSION, MANREVISION, 0, BUILD_NUMBER
+--- 5,14 ----
+  #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.2.0.1"
+  #define MANVERSION              6
+! #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 -c 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,366 ****
+   }
+  
+   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. */
+   voodoo = &glbHWConfig.SSTs[glbCurrentBoard];
+  
+   fxMesa = (fxMesaContext)CALLOC_STRUCT(tfxMesaContext);
+--- 356,362 ----
+   }
+  
+   grSstSelect(glbCurrentBoard);
+!  /*grEnable(GR_OPENGL_MODE_EXT);*/ /* [koolsmoky] */
+   voodoo = &glbHWConfig.SSTs[glbCurrentBoard];
+  
+   fxMesa = (fxMesaContext)CALLOC_STRUCT(tfxMesaContext);
+***************
+*** 393,399 ****
+          case GR_SSTTYPE_SST96:
+          case GR_SSTTYPE_Banshee:
+               fxMesa->bgrOrder = GL_TRUE;
+!              fxMesa->snapVertices = GL_TRUE;
+               break;
+          case GR_SSTTYPE_Voodoo2:
+               fxMesa->bgrOrder = GL_TRUE;
+--- 389,395 ----
+          case GR_SSTTYPE_SST96:
+          case GR_SSTTYPE_Banshee:
+               fxMesa->bgrOrder = GL_TRUE;
+!              fxMesa->snapVertices = (getenv("MESA_FX_NOSNAP") == NULL);
+               break;
+          case GR_SSTTYPE_Voodoo2:
+               fxMesa->bgrOrder = GL_TRUE;
+***************
+*** 411,417 ****
+               fxMesa->snapVertices = GL_FALSE;
+               break;
+   }
+!  /* ZZZ TO DO: Add the old SLI/AA settings for Napalm. */
+   switch(voodoo->numChips) {
+   case 4: /* 4 chips */
+     switch(sliaa) {
+--- 407,413 ----
+               fxMesa->snapVertices = GL_FALSE;
+               break;
+   }
+!  /* XXX todo - Add the old SLI/AA settings for Napalm. */
+   switch(voodoo->numChips) {
+   case 4: /* 4 chips */
+     switch(sliaa) {
+***************
+*** 526,533 ****
+       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
+--- 522,527 ----
+***************
+*** 644,650 ****
+                        fxMesa->snapVertices ? "" : "no ");
+     }
+  
+!   sprintf(fxMesa->rendererString, "Mesa %s v0.61 %s%s",
+            grGetString(GR_RENDERER),
+            grGetString(GR_HARDWARE),
+            ((fxMesa->type < GR_SSTTYPE_Voodoo4) && (voodoo->numChips > 1)) ? " SLI" : "");
+--- 638,644 ----
+                        fxMesa->snapVertices ? "" : "no ");
+     }
+  
+!   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 -c 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,185 ****
+                      (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 */
+!    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);
+!       }
+     }
+  
+     /*
+--- 160,173 ----
+                      (int) x, (int) y, (int) width, (int) height );
+     }
+  
+!    /* we can't clear accum buffers nor stereo */
+!    mask &= ~(DD_ACCUM_BIT | DD_FRONT_RIGHT_BIT | DD_BACK_RIGHT_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,208 ****
+         */
+        BEGIN_BOARD_LOCK();
+        if (mask & DD_STENCIL_BIT) {
+!       fxMesa->Glide.grStencilMaskExt(0xff /*fxMesa->unitsState.stencilWriteMask*/);
+        /* set stencil ref value = desired clear value */
+        fxMesa->Glide.grStencilFuncExt(GR_CMP_ALWAYS, clearS, 0xff);
+        fxMesa->Glide.grStencilOpExt(GR_STENCILOP_REPLACE,
+--- 190,196 ----
+         */
+        BEGIN_BOARD_LOCK();
+        if (mask & DD_STENCIL_BIT) {
+!       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,218 ****
+--- 201,209 ----
+        grDisable(GR_STENCIL_MODE_EXT);
+        }
+        END_BOARD_LOCK();
++    } else if (mask & DD_STENCIL_BIT) {
++       softwareMask |= (mask & (DD_STENCIL_BIT));
++       mask &= ~(DD_STENCIL_BIT);
+     }
+  
+     /*
+***************
+*** 228,235 ****
+        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);
+        grRenderBuffer(GR_BUFFER_BACKBUFFER);
+        if (stencil_size > 0) {
+              fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
+--- 219,225 ----
+        switch (mask & ~DD_STENCIL_BIT) {
+        case DD_BACK_LEFT_BIT | DD_DEPTH_BIT:
+        /* back buffer & depth */
+!          grDepthMask(FXTRUE);
+        grRenderBuffer(GR_BUFFER_BACKBUFFER);
+        if (stencil_size > 0) {
+              fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
+***************
+*** 240,248 ****
+              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
+--- 230,235 ----
+***************
+*** 250,258 ****
+         * This is a work-around/
+         */
+        /* clear depth */
+!       grDepthMask(FXTRUE);
+!       grRenderBuffer(GR_BUFFER_BACKBUFFER);
+           fxDisableColor(fxMesa);
+        if (stencil_size > 0)
+              fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
+                                             fxMesa->clearA,
+--- 237,245 ----
+         * This is a work-around/
+         */
+        /* clear depth */
+!          grDepthMask(FXTRUE);
+           fxDisableColor(fxMesa);
++       grRenderBuffer(GR_BUFFER_BACKBUFFER);
+        if (stencil_size > 0)
+              fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
+                                             fxMesa->clearA,
+***************
+*** 261,268 ****
+              grBufferClear(fxMesa->clearC,
+                            fxMesa->clearA,
+                            clearD);
+-       /* clear front */
+        fxSetupColorMask(ctx);
+        grRenderBuffer(GR_BUFFER_FRONTBUFFER);
+        if (stencil_size > 0)
+              fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
+--- 248,256 ----
+              grBufferClear(fxMesa->clearC,
+                            fxMesa->clearA,
+                            clearD);
+        fxSetupColorMask(ctx);
++       grDepthMask(FXFALSE);
++       /* clear front */
+        grRenderBuffer(GR_BUFFER_FRONTBUFFER);
+        if (stencil_size > 0)
+              fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
+***************
+*** 272,280 ****
+              grBufferClear(fxMesa->clearC,
+                            fxMesa->clearA,
+                            clearD);
+-       if (!fxMesa->unitsState.depthTestEnabled) {
+-             grDepthMask(FXFALSE);
+-       }
+        break;
+        case DD_BACK_LEFT_BIT:
+        /* back buffer only */
+--- 260,265 ----
+***************
+*** 288,296 ****
+              grBufferClear(fxMesa->clearC,
+                            fxMesa->clearA,
+                            clearD);
+-       if (fxMesa->unitsState.depthTestEnabled) {
+-             grDepthMask(FXTRUE);
+-       }
+        break;
+        case DD_FRONT_LEFT_BIT:
+        /* front buffer only */
+--- 273,278 ----
+***************
+*** 304,312 ****
+              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 */
+--- 286,291 ----
+***************
+*** 329,343 ****
+              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)
+              fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
+                                             fxMesa->clearA,
+                                             clearD, clearS);
+--- 308,319 ----
+              grBufferClear(fxMesa->clearC,
+                            fxMesa->clearA,
+                            clearD);
+        break;
+        case DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT | DD_DEPTH_BIT:
+!       /* clear back and depth */
+!          grDepthMask(FXTRUE);
+!       grRenderBuffer(GR_BUFFER_BACKBUFFER);
+!          if (stencil_size > 0)
+              fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
+                                             fxMesa->clearA,
+                                             clearD, clearS);
+***************
+*** 345,354 ****
+              grBufferClear(fxMesa->clearC,
+                            fxMesa->clearA,
+                            clearD);
+!       /* clear back and depth */
+!       grDepthMask(FXTRUE);
+!       grRenderBuffer(GR_BUFFER_BACKBUFFER);
+!          if (stencil_size > 0)
+              fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
+                                             fxMesa->clearA,
+                                             clearD, clearS);
+--- 321,330 ----
+              grBufferClear(fxMesa->clearC,
+                            fxMesa->clearA,
+                            clearD);
+!       /* clear front */
+!       grDepthMask(FXFALSE);
+!       grRenderBuffer(GR_BUFFER_FRONTBUFFER);
+!       if (stencil_size > 0)
+              fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
+                                             fxMesa->clearA,
+                                             clearD, clearS);
+***************
+*** 356,370 ****
+              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);
+           fxDisableColor(fxMesa);
+!       grDepthMask(FXTRUE);
+        if (stencil_size > 0)
+              fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
+                                             fxMesa->clearA,
+--- 332,343 ----
+              grBufferClear(fxMesa->clearC,
+                            fxMesa->clearA,
+                            clearD);
+        break;
+        case DD_DEPTH_BIT:
+        /* just the depth buffer */
+!          grDepthMask(FXTRUE);
+           fxDisableColor(fxMesa);
+!       grRenderBuffer(GR_BUFFER_BACKBUFFER);
+        if (stencil_size > 0)
+              fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
+                                             fxMesa->clearA,
+***************
+*** 374,414 ****
+                            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)) {
+              /* XXX need this RenderBuffer call to work around Glide bug */
+-             grRenderBuffer(GR_BUFFER_BACKBUFFER);
+              grDepthMask(FXFALSE);
+              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 (softwareMask)
+        _swrast_Clear( ctx, softwareMask, all, x, y, width, height );
+--- 347,375 ----
+                            fxMesa->clearA,
+                            clearD);
+        fxSetupColorMask(ctx);
+        break;
+        default:
+           /* clear no color buffers or depth buffer but might clear stencil */
+!       if ((stencil_size > 0) && (mask & DD_STENCIL_BIT)) {
+              /* XXX need this RenderBuffer call to work around Glide bug */
+              grDepthMask(FXFALSE);
++             grRenderBuffer(GR_BUFFER_BACKBUFFER);
+              fxDisableColor(fxMesa);
+              fxMesa->Glide.grBufferClearExt(fxMesa->clearC,
+                                             fxMesa->clearA,
+                                             clearD, clearS);
+              fxSetupColorMask(ctx);
+           }
+        }
+     }
+     END_CLIP_LOOP();
+  
+!    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,422 ****
+--- 378,384 ----
+  
+  /* 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,1699 ****
+  }
+  
+  static const struct tnl_pipeline_stage *fx_pipeline[] = {
+!    &_tnl_vertex_transform_stage,     /* TODO: Add the fastpath here */
+     &_tnl_normal_transform_stage,
+     &_tnl_lighting_stage,
+     &_tnl_fog_coordinate_stage,
+--- 1655,1661 ----
+  }
+  
+  static const struct tnl_pipeline_stage *fx_pipeline[] = {
+!    &_tnl_vertex_transform_stage,     /* XXX todo - Add the fastpath here */
+     &_tnl_normal_transform_stage,
+     &_tnl_lighting_stage,
+     &_tnl_fog_coordinate_stage,
+***************
+*** 1893,1927 ****
+     _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");
+  
+     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");
+--- 1855,1866 ----
+     _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->type >= GR_SSTTYPE_Voodoo4) {
+        _mesa_enable_extension(ctx, "GL_ARB_texture_compression");
+        _mesa_enable_extension(ctx, "GL_3DFX_texture_compression_FXT1");
+***************
+*** 1929,1945 ****
+        _mesa_enable_extension(ctx, "GL_S3_s3tc");
+        _mesa_enable_extension(ctx, "GL_NV_blend_square");
+     } else {
+        if (fxMesa->HaveTexus2) {
+           _mesa_enable_extension(ctx, "GL_ARB_texture_compression");
+        }
+! #if FX_TC_NCC
+!       else
+! #endif
+        /* doesn't like texture compression */
+        _mesa_enable_extension(ctx, "GL_SGIS_generate_mipmap");
+     }
+  
+     if (fxMesa->HaveCmbExt) {
+        _mesa_enable_extension(ctx, "GL_EXT_texture_env_combine");
+     }
+  
+--- 1868,1898 ----
+        _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");
+        }
+! #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,2023 ****
+  #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
+         */
+        if (NEED_SECONDARY_COLOR(ctx)) {
+           if ((ctx->Color.BlendEquationRGB != GL_FUNC_ADD) &&
+--- 1969,1975 ----
+  #if 0
+        /* [dBorca]
+         * We fail the spec here, unless certain blending modes:
+!        * 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 -c 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,129 ****
+  
+  #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);
+  
+  #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);
+  
+  #define HW_ENDCLIPLOOP()                                             \
+-      }                                                               \
+      } while (0)
+  
+  
+--- 100,122 ----
+  
+  #define HW_WRITE_CLIPLOOP()                                          \
+      do {                                                             \
+       /* remember, we need to flip the scissor, too */                \
+       /* is it better to do it inside fxDDScissor? */                 \
+!      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 {                                                             \
+       /* remember, we need to flip the scissor, too */                \
+       /* is it better to do it inside fxDDScissor? */                 \
+!      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 -c 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,71 ****
+     GLint dstWidth = srcWidth / 2;
+     GLint dstHeight = srcHeight / 2;
+     GLint srcRowStride = srcWidth * bytesPerPixel;
+!    GLubyte *src = srcImage;
+     GLubyte *dst = dstImage;
+  
+     GLuint bpt = 0;
+!    GLubyte *_s;
+!    GLubyte *_d;
+     GLenum _t;
+  
+     if (texImage->TexFormat->MesaFormat == MESA_FORMAT_RGB565) {
+--- 60,71 ----
+     GLint dstWidth = srcWidth / 2;
+     GLint dstHeight = srcHeight / 2;
+     GLint srcRowStride = srcWidth * bytesPerPixel;
+!    GLubyte *src = (GLubyte *)srcImage;
+     GLubyte *dst = dstImage;
+  
+     GLuint bpt = 0;
+!    GLubyte *_s = NULL;
+!    GLubyte *_d = NULL;
+     GLenum _t;
+  
+     if (texImage->TexFormat->MesaFormat == MESA_FORMAT_RGB565) {
+***************
+*** 615,635 ****
+        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);
+!       }
+!    }
+  }
+  
+  
+--- 615,622 ----
+        fprintf(stderr, "fxDDTexUseGlbPalette(%d)\n", state);
+     }
+  
+!    fxMesa->haveGlobalPaletteTexture = state;
+!    fxMesa->new_state |= FX_NEW_TEXTURING;
+  }
+  
+  
+***************
+*** 1539,1555 ****
+     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);
+!    }
+  }
+  
+  
+--- 1526,1532 ----
+     ti->info.format = mml->glideFormat;
+     texImage->FetchTexelc = fxFetchFunction(texImage->TexFormat->MesaFormat);
+  
+!    fxTexInvalidate(ctx, texObj);
+  }
+  
+  
+***************
+*** 1781,1797 ****
+        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);
+!    }
+  }
+  
+  
+--- 1758,1764 ----
+        assert(!texImage->IsCompressed);
+     }
+  
+!    fxTexInvalidate(ctx, texObj);
+  }
+  
+  
+***************
+*** 1829,1835 ****
+                                           mml->width,
+                                (GLubyte*) texImage->Data);
+  
+!    rows = height / 4; /* [dBorca] hardcoded 4, but works for FXT1/DXTC */
+  
+     for (i = 0; i < rows; i++) {
+        MEMCPY(dest, data, srcRowStride);
+--- 1796,1802 ----
+                                           mml->width,
+                                (GLubyte*) texImage->Data);
+  
+!    rows = height / 4; /* hardcoded 4, but works for FXT1/DXTC */
+  
+     for (i = 0; i < rows; i++) {
+        MEMCPY(dest, data, srcRowStride);
+***************
+*** 1905,1913 ****
+                         GLint width, GLint height,
+                         GLint depth, GLint border)
+  {
+!  /* [dBorca]
+!   * TODO - maybe through fxTexValidate()
+!   */
+   return _mesa_test_proxy_teximage(ctx, target,
+                                    level, internalFormat,
+                                    format, type,
+--- 1872,1878 ----
+                         GLint width, GLint height,
+                         GLint depth, GLint border)
+  {
+!  /* 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 -c 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,719 ****
+--- 714,720 ----
+  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,735 ****
+--- 731,758 ----
+  
+  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 -c 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,132 ****
+--- 126,137 ----
+  
+     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,216 ****
+           config->SSTs[i].type = GR_SSTTYPE_VOODOO;
+        }
+  
+!       grGet(GR_MEMORY_FB, 4, &result); /* ZZZ: differs after grSstWinOpen */
+        config->SSTs[i].fbRam = result / (1024 * 1024);
+  
+        grGet(GR_NUM_TMU, 4, &result);
+--- 215,221 ----
+           config->SSTs[i].type = GR_SSTTYPE_VOODOO;
+        }
+  
+!       grGet(GR_MEMORY_FB, 4, &result);
+        config->SSTs[i].fbRam = result / (1024 * 1024);
+  
+        grGet(GR_NUM_TMU, 4, &result);
+***************
+*** 220,226 ****
+        config->SSTs[i].fbiRev = result;
+  
+        for (j = 0; j < config->SSTs[i].nTexelfx; j++) {
+!       grGet(GR_MEMORY_TMU, 4, &result); /* ZZZ: differs after grSstWinOpen */
+        config->SSTs[i].tmuConfig[j].tmuRam = result / (1024 * 1024);
+        grGet(GR_REVISION_TMU, 4, &result);
+        config->SSTs[i].tmuConfig[j].tmuRev = result;
+--- 225,231 ----
+        config->SSTs[i].fbiRev = result;
+  
+        for (j = 0; j < config->SSTs[i].nTexelfx; j++) {
+!       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 -c 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,44 ****
+  
+  #include "fxg.h"
+  
+! 
+  
+  #define MAX_NUM_SST             4
+  
+--- 38,46 ----
+  
+  #include "fxg.h"
+  
+! #ifndef FX_PACKEDCOLOR
+! #define FX_PACKEDCOLOR 1
+! #endif
+  
+  #define MAX_NUM_SST             4
+  
+***************
+*** 112,117 ****
+--- 114,120 ----
+          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,142 ****
+--- 140,173 ----
+  #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 -c 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,84 ****
+                                           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:
+      * 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.
+--- 76,82 ----
+                                           const GLvoid *srcImage, GLvoid *dstImage );
+     fxMesaContext fxMesa = FX_CONTEXT(ctx);
+     /* [dBorca]
+!     * 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,100 ****
+      *    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! */
+--- 86,91 ----
+***************
+*** 155,161 ****
+     else
+        FX_smallLodLog2(ti->info) = FX_largeLodLog2(ti->info);
+  
+!    /* this is necessary because of fxDDCompressedTexImage2D */
+     if (ti->padded) {
+        struct gl_texture_image *texImage = tObj->Image[0][minl];
+        tfxMipMapLevel *mml = FX_MIPMAP_DATA(texImage);
+--- 146,152 ----
+     else
+        FX_smallLodLog2(ti->info) = FX_largeLodLog2(ti->info);
+  
+!    /* [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,359 ****
+        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) {
+--- 342,348 ----
+***************
+*** 654,663 ****
+              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.
+               */
+              colorComb.Function = GR_COMBINE_FUNCTION_SCALE_OTHER;
+              colorComb.Factor   = GR_COMBINE_FACTOR_ONE;
+--- 643,651 ----
+              colorComb.Factor   = GR_COMBINE_FACTOR_TEXTURE_ALPHA;
+              colorComb.Other    = GR_COMBINE_OTHER_CONSTANT;
+           } else {
+!             /* 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,1787 ****
+     }
+  }
+  
+! static void
+  fxSetupStencil (GLcontext * ctx)
+  {
+     fxMesaContext fxMesa = FX_CONTEXT(ctx);
+--- 1769,1775 ----
+     }
+  }
+  
+! void
+  fxSetupStencil (GLcontext * ctx)
+  {
+     fxMesaContext fxMesa = FX_CONTEXT(ctx);
+Index: xc/extras/Mesa/src/mesa/drivers/glide/fxsetup.h
+diff -c 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,39 ****
+   */
+  
+  /* fxsetup.c - 3Dfx VooDoo rendering mode setup functions */
+! /* [dBorca] Hack alert:
+!  * 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
+--- 32,38 ----
+   */
+  
+  /* fxsetup.c - 3Dfx VooDoo rendering mode setup functions */
+! /* 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,387 ****
+        break;
+      /* COMBINE_EXT */
+      case GL_COMBINE_EXT:
+!       /* [dBorca] Hack alert:
+!        * INCOMPLETE!!!
+!        */
+        if (TDFX_DEBUG & (VERBOSE_DRIVER | VERBOSE_TEXTURE)) {
+  #if 1
+           fprintf(stderr, "COMBINE_EXT: %s + %s\n",
+--- 378,384 ----
+        break;
+      /* COMBINE_EXT */
+      case GL_COMBINE_EXT:
+!       /* XXX todo - INCOMPLETE!!! */
+        if (TDFX_DEBUG & (VERBOSE_DRIVER | VERBOSE_TEXTURE)) {
+  #if 1
+           fprintf(stderr, "COMBINE_EXT: %s + %s\n",
+***************
+*** 1024,1033 ****
+     }
+  
+     if (LODblend) {
+!       /* [dBorca] Hack alert:
+!        * TODO: GR_CMBX_LOD_FRAC
+!        */
+! 
+        fxMesa->tmuSrc = FX_TMU_SPLIT;
+     }
+     else {
+--- 1021,1027 ----
+     }
+  
+     if (LODblend) {
+!       /* XXX todo - GR_CMBX_LOD_FRAC? */
+        fxMesa->tmuSrc = FX_TMU_SPLIT;
+     }
+     else {
+Index: xc/extras/Mesa/src/mesa/drivers/glide/fxtexman.c
+diff -c 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,492 ****
+  
+        /*texmemsize = (int)grTexTextureMemRequired(GR_MIPMAPLEVELMASK_BOTH, &(ti->info));*/
+        ti->tm[FX_TMU1] = fxTMAddObj(fxMesa, tObj, FX_TMU1, texmemsize);
+!       fxMesa->stats.memTexUpload += texmemsize; /* ZZZ: required? */
+  
+        for (i = FX_largeLodValue(ti->info), l = ti->minLevel;
+          i <= FX_smallLodValue(ti->info); i++, l++) {
+--- 486,492 ----
+  
+        /*texmemsize = (int)grTexTextureMemRequired(GR_MIPMAPLEVELMASK_BOTH, &(ti->info));*/
+        ti->tm[FX_TMU1] = fxTMAddObj(fxMesa, tObj, FX_TMU1, texmemsize);
+!       fxMesa->stats.memTexUpload += texmemsize;
+  
+        for (i = FX_largeLodValue(ti->info), l = ti->minLevel;
+          i <= FX_smallLodValue(ti->info); i++, l++) {
+***************
+*** 550,555 ****
+--- 550,556 ----
+     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,574 ****
+     }
+  
+     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);
+  
+--- 559,566 ----
+Index: xc/extras/Mesa/src/mesa/drivers/glide/fxtris.c
+diff -c 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,151 ****
+--- 146,152 ----
+     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,159 ****
+--- 155,170 ----
+     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,233 ****
+--- 238,248 ----
+   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,311 ****
+   /* 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.CoordReplace[ts0]) {
+      _v_[0].tmuvtx[0].sow = 0;
+--- 313,337 ----
+   /* point coverage? */
+   /* we don't care about culling here (see fxSetupCull) */
+  
+!  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,346 ****
+   GrVertex *_v_[3];
+  
+   const GLcontext *ctx = fxMesa->glCtx;
+!  const GLfloat psize = (ctx->_TriangleCaps & DD_POINT_ATTEN) ? v0->psize : ctx->Point.Size;
+  
+   if (ctx->Point.PointSprite) {
+      fx_draw_point_sprite(fxMesa, v0, psize);
+--- 366,374 ----
+   GrVertex *_v_[3];
+  
+   const GLcontext *ctx = fxMesa->glCtx;
+!  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,421 ****
+   GrVertex vtxB, vtxC;
+  
+   const GLcontext *ctx = fxMesa->glCtx;
+!  const GLfloat psize = (ctx->_TriangleCaps & DD_POINT_ATTEN) ? v0->psize : ctx->Point.Size;
+  
+   if (ctx->Point.PointSprite) {
+      fx_draw_point_sprite(fxMesa, v0, psize);
+--- 443,451 ----
+   GrVertex vtxB, vtxC;
+  
+   const GLcontext *ctx = fxMesa->glCtx;
+!  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,504 ****
+--- 529,535 ----
+  #endif
+  
+  
++ #if FX_PACKEDCOLOR
+  #define VERT_SET_RGBA( dst, f )                      \
+  do {                                         \
+     UNCLAMPED_FLOAT_TO_UBYTE(dst->pargb[2], f[0]);\
+***************
+*** 538,543 ****
+--- 569,642 ----
+     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,910 ****
+  {
+     fxMesaContext fxMesa = FX_CONTEXT(ctx);
+     GrVertex *fxVB = fxMesa->verts;
+-    int mode;
+     (void) flags;
+  
+     if (TDFX_DEBUG & VERBOSE_VARRAY) {
+--- 1003,1008 ----
+***************
+*** 913,925 ****
+  
+     INIT(GL_TRIANGLE_STRIP);
+  
+!    /* [dBorca] WTF?!?
+!    if (flags & PRIM_PARITY) 
+!       mode = GR_TRIANGLE_STRIP_CONTINUE;
+!    else*/
+!       mode = GR_TRIANGLE_STRIP;
+  
+!    grDrawVertexArrayContiguous( mode, count-start,
+                                  fxVB + start, sizeof(GrVertex));
+  }
+  
+--- 1011,1019 ----
+  
+     INIT(GL_TRIANGLE_STRIP);
+  
+!    /* no GR_TRIANGLE_STRIP_CONTINUE?!? */
+  
+!    grDrawVertexArrayContiguous( GR_TRIANGLE_STRIP, count-start,
+                                  fxVB + start, sizeof(GrVertex));
+  }
+  
+***************
+*** 1273,1330 ****
+      */
+     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_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 (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;
+!          }
+        }
+     }
+!       
+     fxMesa->new_gl_state = 0;
+  
+     _tnl_run_pipeline( ctx );
+--- 1367,1407 ----
+      */
+     if (new_gl_state & _NEW_PROJECTION)
+        fxMesa->new_state |= FX_NEW_FOG;
+  #endif
+  
+!    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 (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;
+        }
+     }
+! 
+     fxMesa->new_gl_state = 0;
+  
+     _tnl_run_pipeline( ctx );
+***************
+*** 1483,1489 ****
+  
+  /* [dBorca] Hack alert:
+   * doesn't work with blending.
+!  * need to take care of stencil.
+   */
+  GLboolean fxMultipass_ColorSum (GLcontext *ctx, GLuint pass)
+  {
+--- 1560,1566 ----
+  
+  /* [dBorca] Hack alert:
+   * doesn't work with blending.
+!  * XXX todo - need to take care of stencil.
+   */
+  GLboolean fxMultipass_ColorSum (GLcontext *ctx, GLuint pass)
+  {
+***************
+*** 1518,1524 ****
+--- 1595,1605 ----
+                  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,1535 ****
+--- 1610,1620 ----
+               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 -c 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,61 ****
+--- 55,68 ----
+     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,71 ****
+--- 71,88 ----
+     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,704 ****
+     } 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;
+        
+--- 712,717 ----
+Index: xc/extras/Mesa/src/mesa/drivers/glide/fxvbtmp.h
+diff -c 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,150 ****
+--- 145,151 ----
+        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,164 ****
+--- 154,181 ----
+           } 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,267 ****
+--- 270,297 ----
+     }
+  
+     
++ #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 -c 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,354 ****
+       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! */
+          error = !(ctx = fxMesaCreateContext((GLuint) hWnd, GR_RESOLUTION_NONE, GR_REFRESH_NONE, pix[curPFD - 1].mesaAttr));
+       } else {
+          GetClientRect(hWnd, &cliRect);
+--- 348,354 ----
+       SetForegroundWindow(hWnd);
+       Sleep(100); /* a hack for win95 */
+       if (env_check("MESA_GLX_FX", 'w') && !(GetWindowLong (hWnd, GWL_STYLE) & WS_POPUP)) {
+!      /* XXX todo - windowed modes */
+          error = !(ctx = fxMesaCreateContext((GLuint) hWnd, GR_RESOLUTION_NONE, GR_REFRESH_NONE, pix[curPFD - 1].mesaAttr));
+       } else {
+          GetClientRect(hWnd, &cliRect);
+***************
+*** 629,635 ****
+     int i;
+     PROC p = (PROC) _glapi_get_proc_address((const char *) lpszProc);
+  
+!    /* [dBorca] we can't do BlendColor */
+     if (p && strcmp(lpszProc, "glBlendColor") && strcmp(lpszProc, "glBlendColorEXT"))
+        return p;
+  
+--- 629,635 ----
+     int i;
+     PROC p = (PROC) _glapi_get_proc_address((const char *) lpszProc);
+  
+!    /* we can't BlendColor. work around buggy applications */
+     if (p && strcmp(lpszProc, "glBlendColor") && strcmp(lpszProc, "glBlendColorEXT"))
+        return p;
+  
+***************
+*** 860,869 ****
+        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 (!(pfd.dwFlags & PFD_STEREO_DONTCARE)
+         && ((pfd.dwFlags & PFD_STEREO) !=
+             (pix[i].pfd.dwFlags & PFD_STEREO))) continue;
+--- 860,866 ----
+        if (!(pfd.dwFlags & PFD_DOUBLEBUFFER_DONTCARE)
+         && ((pfd.dwFlags & PFD_DOUBLEBUFFER) !=
+             (pix[i].pfd.dwFlags & PFD_DOUBLEBUFFER))) continue;
+! #if 1 /* Doom3 fails here! */
+        if (!(pfd.dwFlags & PFD_STEREO_DONTCARE)
+         && ((pfd.dwFlags & PFD_STEREO) !=
+             (pix[i].pfd.dwFlags & PFD_STEREO))) continue;
+***************
+*** 875,881 ****
+        if (pfd.cAlphaBits > 0 && pix[i].pfd.cAlphaBits == 0)
+        continue;              /* need alpha buffer */
+  
+! #if 0 /* [dBorca] regression bug? */
+        if (pfd.cStencilBits > 0 && pix[i].pfd.cStencilBits == 0)
+        continue;              /* need stencil buffer */
+  #endif
+--- 872,878 ----
+        if (pfd.cAlphaBits > 0 && pix[i].pfd.cAlphaBits == 0)
+        continue;              /* need alpha buffer */
+  
+! #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 -c 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,1295 ****
+  }
+  
+  
+  
+! struct name_address {
+     const char *Name;
+!    GLvoid *Address;
+  };
+  
+! 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 },
+     { NULL, NULL }
+  };
+  
+--- 1273,1297 ----
+  }
+  
+  
++ typedef void (*OSMESAproc)(void);
+  
+! struct name_function
+! {
+     const char *Name;
+!    OSMESAproc Function;
+  };
+  
+! 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,1305 ****
+     int i;
+     for (i = 0; functions[i].Name; i++) {
+        if (_mesa_strcmp(functions[i].Name, funcName) == 0)
+!          return (void *) functions[i].Address;
+     }
+     return (void *) _glapi_get_proc_address(funcName);
+  }
+--- 1301,1307 ----
+     int i;
+     for (i = 0; functions[i].Name; i++) {
+        if (_mesa_strcmp(functions[i].Name, funcName) == 0)
+!          return (void *) functions[i].Function;
+     }
+     return (void *) _glapi_get_proc_address(funcName);
+  }
+Index: xc/extras/Mesa/src/mesa/drivers/windows/gdi/colors.h
+diff -c 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,29 ****
+--- 24,32 ----
+  
+  /*
+   * $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,54 ****
+--- 52,60 ----
+  
+  /*
+   * $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,79 ****
+--- 80,88 ----
+   
+  /*
+   * $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,147 ****
+  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)))
+  #ifdef DDRAW
+  #define BGR16(r,g,b) ((WORD)(((BYTE)(ColorMap16[b]) | ((BYTE)(g&0xfc) << 3)) | (((WORD)(BYTE)(ColorMap16[r])) << 11)))
+  #else
+--- 150,156 ----
+  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))))
+  #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 -c 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 ****
+! /* $Id$ */
+  
+  /*
+  * This library is free software; you can redistribute it and/or
+--- 1,4 ----
+! /* $Id$ */
+  
+  /*
+  * This library is free software; you can redistribute it and/or
+***************
+*** 102,112 ****
+  static MesaWglCtx wgl_ctx[MESAWGL_CTX_MAX_COUNT];
+  
+  static unsigned ctx_count = 0;
+! static unsigned ctx_current = -1;
+  static unsigned curPFD = 0;
+  
+  WGLAPI BOOL GLAPIENTRY wglCopyContext(HGLRC hglrcSrc,HGLRC hglrcDst,UINT mask)
+  {
+      return(FALSE);
+  }
+  
+--- 102,113 ----
+  static MesaWglCtx wgl_ctx[MESAWGL_CTX_MAX_COUNT];
+  
+  static unsigned ctx_count = 0;
+! 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,171 ****
+--- 167,173 ----
+  
+  WGLAPI HGLRC GLAPIENTRY wglCreateLayerContext(HDC hdc,int iLayerPlane)
+  {
++     (void) hdc; (void) iLayerPlane;
+      SetLastError(0);
+      return(NULL);
+  }
+***************
+*** 212,217 ****
+--- 214,220 ----
+  
+  WGLAPI BOOL GLAPIENTRY wglShareLists(HGLRC hglrc1,HGLRC hglrc2)
+  {
++     (void) hglrc1; (void) hglrc2;
+      return(TRUE);
+  }
+  
+***************
+*** 219,225 ****
+  static FIXED FixedFromDouble(double d)
+  {
+     long l = (long) (d * 65536L);
+!    return *(FIXED *)&l;
+  }
+  
+  
+--- 222,228 ----
+  static FIXED FixedFromDouble(double d)
+  {
+     long l = (long) (d * 65536L);
+!    return *(FIXED *) (void *) &l;
+  }
+  
+  
+***************
+*** 258,266 ****
+    SetTextColor(bitDevice, tempColor);
+  
+    // Place chars based on base line
+!   VERIFY(SetTextAlign(bitDevice, TA_BASELINE) >= 0 ? 1 : 0);
+  
+!   for(i = 0; i < numChars; i++) {
+      SIZE size;
+      char curChar;
+      int charWidth,charHeight,bmapWidth,bmapHeight,numBytes,res;
+--- 261,269 ----
+    SetTextColor(bitDevice, tempColor);
+  
+    // Place chars based on base line
+!   VERIFY(SetTextAlign(bitDevice, TA_BASELINE) != GDI_ERROR ? 1 : 0);
+  
+!   for(i = 0; i < (int)numChars; i++) {
+      SIZE size;
+      char curChar;
+      int charWidth,charHeight,bmapWidth,bmapHeight,numBytes,res;
+***************
+*** 285,291 ****
+  
+      // Assign the output bitmap to the device
+      origBmap = SelectObject(bitDevice, bitObject);
+!     VERIFY(origBmap);
+  
+      VERIFY( PatBlt( bitDevice, 0, 0, bmapWidth, bmapHeight,BLACKNESS ) );
+  
+--- 288,294 ----
+  
+      // Assign the output bitmap to the device
+      origBmap = SelectObject(bitDevice, bitObject);
+!     (void) VERIFY(origBmap);
+  
+      VERIFY( PatBlt( bitDevice, 0, 0, bmapWidth, bmapHeight,BLACKNESS ) );
+  
+***************
+*** 344,354 ****
+     MAT2 mat;
+     int  success = TRUE;
+  
+!    if (first<0)
+!       return FALSE;
+!    if (count<0)
+!       return FALSE;
+!    if (listBase<0)
+        return FALSE;
+  
+     font_list = listBase;
+--- 347,353 ----
+     MAT2 mat;
+     int  success = TRUE;
+  
+!    if (count == 0)
+        return FALSE;
+  
+     font_list = listBase;
+***************
+*** 373,379 ****
+     /*
+     ** Otherwise process all desired characters.
+     */
+!    for (i = 0; i < count; i++)
+     {
+         DWORD err;
+         
+--- 372,378 ----
+     /*
+     ** Otherwise process all desired characters.
+     */
+!    for (i = 0; i < (int)count; i++)
+     {
+         DWORD err;
+         
+***************
+*** 432,437 ****
+--- 431,437 ----
+  
+  WGLAPI BOOL GLAPIENTRY wglUseFontBitmapsW(HDC hdc,DWORD first,DWORD count,DWORD listBase)
+  {
++     (void) hdc; (void) first; (void) count; (void) listBase;
+      return FALSE;
+  }
+  
+***************
+*** 440,445 ****
+--- 440,448 ----
+                                    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,454 ****
+--- 452,460 ----
+                                    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,462 ****
+--- 463,469 ----
+                                      int iLayerPlane,UINT nBytes,
+                                      LPLAYERPLANEDESCRIPTOR plpd)
+  {
++     (void) hdc; (void) iPixelFormat; (void) iLayerPlane; (void) nBytes; (void) plpd;
+      SetLastError(0);
+      return(FALSE);
+  }
+***************
+*** 465,470 ****
+--- 472,478 ----
+                                         int iStart,int cEntries,
+                                         CONST COLORREF *pcr)
+  {
++     (void) hdc; (void) iLayerPlane; (void) iStart; (void) cEntries; (void) pcr;
+      SetLastError(0);
+      return(0);
+  }
+***************
+*** 473,490 ****
+--- 481,501 ----
+                                         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,503 ****
+--- 509,515 ----
+                                    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,561 ****
+--- 568,574 ----
+                                      LPPIXELFORMATDESCRIPTOR ppfd)
+  {
+      int              qt_valid_pix;
++     (void) hdc;
+  
+      qt_valid_pix = qt_pix;
+      if(ppfd == NULL)
+***************
+*** 584,589 ****
+--- 597,603 ----
+  
+  WGLAPI int GLAPIENTRY wglGetPixelFormat(HDC hdc)
+  {
++     (void) hdc;
+      if(curPFD == 0)
+      {
+          SetLastError(0);
+***************
+*** 596,601 ****
+--- 610,616 ----
+                                  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,614 ****
+--- 624,630 ----
+  
+  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 -c 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,50 ****
+--- 45,51 ----
+  #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,171 ****
+  #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 );
+--- 166,171 ----
+***************
+*** 347,361 ****
+--- 347,366 ----
+  
+  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,376 ****
+--- 376,382 ----
+   */
+  static void clear_index(GLcontext* ctx, GLuint index)
+  {
++   (void) ctx;
+    Current->clearpixel = index;
+  }
+  
+***************
+*** 382,387 ****
+--- 388,394 ----
+  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,406 ****
+   * Otherwise, we let swrast do it. 
+   */ 
+  
+! static clear(GLcontext* ctx, GLbitfield mask, 
+        GLboolean all, GLint x, GLint y, GLint width, GLint height) 
+  { 
+    const   GLuint *colorMask = (GLuint *) &ctx->Color.ColorMask; 
+--- 407,413 ----
+   * Otherwise, we let swrast do it. 
+   */ 
+  
+! 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,473 ****
+     WORD    wColor; 
+     BYTE    bColor; 
+     LPDWORD lpdw = (LPDWORD)Current->pbPixels; 
+!    LPWORD  lpw = (LPWORD)Current->pbPixels; 
+     LPBYTE  lpb = Current->pbPixels; 
+     int     lines; 
+     /* Double-buffering - clear back buffer */ 
+--- 474,480 ----
+     WORD    wColor; 
+     BYTE    bColor; 
+     LPDWORD lpdw = (LPDWORD)Current->pbPixels; 
+!    /*LPWORD  lpw = (LPWORD)Current->pbPixels; */
+     LPBYTE  lpb = Current->pbPixels; 
+     int     lines; 
+     /* Double-buffering - clear back buffer */ 
+***************
+*** 513,519 ****
+         dwColor = BGR32(GetRValue(Current->clearpixel), 
+           GetGValue(Current->clearpixel), 
+           GetBValue(Current->clearpixel)); 
+!    } 
+  
+     if (nBypp != 3) 
+     { 
+--- 520,528 ----
+         dwColor = BGR32(GetRValue(Current->clearpixel), 
+           GetGValue(Current->clearpixel), 
+           GetBValue(Current->clearpixel)); 
+!    }
+!    else
+!        dwColor = 0;
+  
+     if (nBypp != 3) 
+     { 
+***************
+*** 567,572 ****
+--- 576,582 ----
+  
+  static void enable( GLcontext* ctx, GLenum pname, GLboolean enable )
+  {
++   (void) ctx;
+    if (!Current)
+      return;
+    
+***************
+*** 592,597 ****
+--- 602,608 ----
+  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,609 ****
+  /* Return characteristics of the output buffer. */
+  static void buffer_size( GLframebuffer *buffer, GLuint *width, GLuint *height )
+  {
+!   GET_CURRENT_CONTEXT(ctx);
+    int New_Size;
+    RECT CR;
+    
+    GetClientRect(Current->Window,&CR);
+    
+--- 612,621 ----
+  /* Return characteristics of the output buffer. */
+  static void buffer_size( GLframebuffer *buffer, GLuint *width, GLuint *height )
+  {
+!   /*GET_CURRENT_CONTEXT(ctx);*/
+    int New_Size;
+    RECT CR;
++   (void) buffer;
+    
+    GetClientRect(Current->Window,&CR);
+    
+***************
+*** 649,673 ****
+--- 661,696 ----
+  
+  /* 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,687 ****
+--- 705,711 ----
+  {
+    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,702 ****
+--- 721,727 ----
+  {
+    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,720 ****
+--- 740,746 ----
+  {
+    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,741 ****
+                               const GLubyte rgba[][4], const GLubyte mask[] )
+  {
+    PWMC    pwc = Current;
+    
+    if (pwc->rgb_flag==GL_TRUE)
+      {
+        GLuint i;
+!       HDC DC=DD_GETDC;
+        y=FLIP(y);
+        if (mask) {
+       for (i=0; i<n; i++)
+--- 757,768 ----
+                               const GLubyte rgba[][4], const GLubyte mask[] )
+  {
+    PWMC    pwc = Current;
++   (void) ctx;
+    
+    if (pwc->rgb_flag==GL_TRUE)
+      {
+        GLuint i;
+!       /*HDC DC=DD_GETDC;*/
+        y=FLIP(y);
+        if (mask) {
+       for (i=0; i<n; i++)
+***************
+*** 779,789 ****
+                              const GLubyte rgb[][3], const GLubyte mask[] )
+  {
+    PWMC    pwc = Current;
+!   
+    if (pwc->rgb_flag==GL_TRUE)
+      {
+        GLuint i;
+!       HDC DC=DD_GETDC;
+        y=FLIP(y);
+        if (mask) {
+       for (i=0; i<n; i++)
+--- 806,817 ----
+                              const GLubyte rgb[][3], const GLubyte mask[] )
+  {
+    PWMC    pwc = Current;
+!   (void) ctx;
+! 
+    if (pwc->rgb_flag==GL_TRUE)
+      {
+        GLuint i;
+!       /*HDC DC=DD_GETDC;*/
+        y=FLIP(y);
+        if (mask) {
+       for (i=0; i<n; i++)
+***************
+*** 831,836 ****
+--- 859,865 ----
+  {
+    GLuint i;
+    PWMC pwc = Current;
++   (void) ctx;
+    assert(Current->rgb_flag==GL_TRUE);
+    y=FLIP(y);
+    if(Current->rgb_flag==GL_TRUE)
+***************
+*** 863,868 ****
+--- 892,898 ----
+                                 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,889 ****
+--- 914,920 ----
+                                    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,908 ****
+  {
+    GLuint i;
+    PWMC    pwc = Current;
+!   HDC DC=DD_GETDC;
+    assert(Current->rgb_flag==GL_TRUE);
+    for (i=0; i<n; i++)
+      if (mask[i])
+--- 933,940 ----
+  {
+    GLuint i;
+    PWMC    pwc = Current;
+!   /*HDC DC=DD_GETDC;*/
+!   (void) ctx;
+    assert(Current->rgb_flag==GL_TRUE);
+    for (i=0; i<n; i++)
+      if (mask[i])
+***************
+*** 925,931 ****
+  {
+    GLuint i;
+    PWMC    pwc = Current;
+!   HDC DC=DD_GETDC;
+    assert(Current->rgb_flag==GL_TRUE);
+    for (i=0; i<n; i++)
+      if (mask[i])
+--- 957,964 ----
+  {
+    GLuint i;
+    PWMC    pwc = Current;
+!   /*HDC DC=DD_GETDC;*/
+!   (void) ctx;
+    assert(Current->rgb_flag==GL_TRUE);
+    for (i=0; i<n; i++)
+      if (mask[i])
+***************
+*** 947,952 ****
+--- 980,986 ----
+  {
+    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,966 ****
+--- 995,1001 ----
+                                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,984 ****
+--- 1014,1020 ----
+    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,1005 ****
+--- 1036,1042 ----
+    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,1027 ****
+--- 1059,1065 ----
+  
+  static const GLubyte *get_string(GLcontext *ctx, GLenum name)
+  {
++   (void) ctx;
+    if (name == GL_RENDERER) {
+      return (GLubyte *) "Mesa Windows";
+    }
+***************
+*** 1074,1080 ****
+  
+  static void wmesa_update_state( GLcontext *ctx, GLuint new_state )
+  {
+!   struct swrast_device_driver *swdd = _swrast_GetDeviceDriverReference( ctx );
+    TNLcontext *tnl = TNL_CONTEXT(ctx);
+    
+    /*
+--- 1112,1118 ----
+  
+  static void wmesa_update_state( GLcontext *ctx, GLuint new_state )
+  {
+!   /*struct swrast_device_driver *swdd = _swrast_GetDeviceDriverReference( ctx );*/
+    TNLcontext *tnl = TNL_CONTEXT(ctx);
+    
+    /*
+***************
+*** 1166,1172 ****
+  /*****                  WMesa API Functions                       *****/
+  /**********************************************************************/
+  
+! 
+  
+  #define PAL_SIZE 256
+  static void GetPalette(HPALETTE Pal,RGBQUAD *aRGB)
+--- 1204,1210 ----
+  /*****                  WMesa API Functions                       *****/
+  /**********************************************************************/
+  
+! #if 0 /* unused */
+  
+  #define PAL_SIZE 256
+  static void GetPalette(HPALETTE Pal,RGBQUAD *aRGB)
+***************
+*** 1178,1188 ****
+      WORD Version;
+      WORD NumberOfEntries;
+      PALETTEENTRY aEntries[PAL_SIZE];
+!   } Palette =
+!     {
+!       0x300,
+!       PAL_SIZE
+!     };
+    hdc=GetDC(NULL);
+    if (Pal!=NULL)
+      GetPaletteEntries(Pal,0,PAL_SIZE,Palette.aEntries);
+--- 1216,1224 ----
+      WORD Version;
+      WORD NumberOfEntries;
+      PALETTEENTRY aEntries[PAL_SIZE];
+!   } Palette;
+!   Palette.Version = 0x300;
+!   Palette.NumberOfEntries = PAL_SIZE;
+    hdc=GetDC(NULL);
+    if (Pal!=NULL)
+      GetPaletteEntries(Pal,0,PAL_SIZE,Palette.aEntries);
+***************
+*** 1226,1231 ****
+--- 1262,1268 ----
+      }
+  }
+  
++ #endif /* unused */
+  
+  WMesaContext WMesaCreateContext( HWND hWnd, HPALETTE* Pal,
+                                GLboolean rgb_flag,
+***************
+*** 1236,1241 ****
+--- 1273,1279 ----
+    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,1442 ****
+  
+  void WMesaSwapBuffers( void )
+  {
+!   HDC DC = Current->hDC;
+    GET_CURRENT_CONTEXT(ctx);
+    
+    /* If we're swapping the buffer associated with the current context
+--- 1474,1480 ----
+  
+  void WMesaSwapBuffers( void )
+  {
+! /*  HDC DC = Current->hDC;*/
+    GET_CURRENT_CONTEXT(ctx);
+    
+    /* If we're swapping the buffer associated with the current context
+***************
+*** 1699,1704 ****
+--- 1737,1744 ----
+    DWORD   dwScanWidth;
+    UINT    nBypp = pwc->cColorBits / 8;
+    HDC     hic;
++   (void) hDC;
++   (void) pbmi;
+    
+    dwScanWidth = (((pwc->ScanWidth * nBypp)+ 3) & ~3);
+    
+***************
+*** 1742,1755 ****
+    pwc->hbmDIB = CreateDIBSection(hic,
+                                &(pwc->bmi),
+                                (iUsage ? DIB_PAL_COLORS : DIB_RGB_COLORS),
+!                               &(pwc->pbPixels),
+                                pwc->dib.hFileMap,
+                                0);
+  #else
+    pwc->hbmDIB = CreateDIBSection(hic,
+                                &(pwc->bmi),
+                                (iUsage ? DIB_PAL_COLORS : DIB_RGB_COLORS),
+!                               &(pwc->pbPixels),
+                                0,
+                                0);
+  #endif // USE_MAPPED_FILE
+--- 1782,1795 ----
+    pwc->hbmDIB = CreateDIBSection(hic,
+                                &(pwc->bmi),
+                                (iUsage ? DIB_PAL_COLORS : DIB_RGB_COLORS),
+!                               (void **)&(pwc->pbPixels),
+                                pwc->dib.hFileMap,
+                                0);
+  #else
+    pwc->hbmDIB = CreateDIBSection(hic,
+                                &(pwc->bmi),
+                                (iUsage ? DIB_PAL_COLORS : DIB_RGB_COLORS),
+!                               (void **)&(pwc->pbPixels),
+                                0,
+                                0);
+  #endif // USE_MAPPED_FILE
+***************
+*** 1768,1774 ****
+  BOOL wmFlush(PWMC pwc)
+  {
+    BOOL    bRet = 0;
+!   DWORD   dwErr = 0;
+  #ifdef DDRAW
+    HRESULT             ddrval;
+  #endif
+--- 1808,1814 ----
+  BOOL wmFlush(PWMC pwc)
+  {
+    BOOL    bRet = 0;
+! /*  DWORD   dwErr = 0;*/
+  #ifdef DDRAW
+    HRESULT             ddrval;
+  #endif
+***************
+*** 3182,3189 ****
+--- 3222,3232 ----
+  #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,3282 ****
+--- 3320,3327 ----
+  #endif
+  }
+  
++ #endif /* unused */
++ 
+  /*
+   * Define a new viewport and reallocate auxillary buffers if the size of
+   * the window (color buffer) has changed.
+***************
+*** 3284,3289 ****
+--- 3329,3335 ----
+  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 -c 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,98 ****
+--- 93,99 ----
+  }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 -c 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 ****
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.1
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+--- 1,6 ----
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.2
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+***************
+*** 80,89 ****
+     "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.
+--- 80,85 ----
+***************
+*** 144,150 ****
+  /*
+   * Test if the given XVisualInfo is usable for Mesa rendering.
+   */
+! static GLboolean is_usable_visual( XVisualInfo *vinfo )
+  {
+     switch (vinfo->CLASS) {
+        case StaticGray:
+--- 140,147 ----
+  /*
+   * Test if the given XVisualInfo is usable for Mesa rendering.
+   */
+! static GLboolean
+! is_usable_visual( XVisualInfo *vinfo )
+  {
+     switch (vinfo->CLASS) {
+        case StaticGray:
+***************
+*** 181,187 ****
+   *            >0 = overlay planes
+   *            <0 = underlay planes
+   */
+! static int level_of_visual( Display *dpy, XVisualInfo *vinfo )
+  {
+     Atom overlayVisualsAtom;
+     OverlayInfo *overlay_info = NULL;
+--- 178,185 ----
+   *            >0 = overlay planes
+   *            <0 = underlay planes
+   */
+! static int
+! level_of_visual( Display *dpy, XVisualInfo *vinfo )
+  {
+     Atom overlayVisualsAtom;
+     OverlayInfo *overlay_info = NULL;
+***************
+*** 332,338 ****
+        /* add xmvis to the list */
+        VisualTable[NumVisuals] = xmvis;
+        NumVisuals++;
+!       /* XXX minor hack */
+        xmvis->mesa_visual.numAuxBuffers = numAuxBuffers;
+     }
+     return xmvis;
+--- 330,338 ----
+        /* add xmvis to the list */
+        VisualTable[NumVisuals] = xmvis;
+        NumVisuals++;
+!       /* XXX minor hack, because XMesaCreateVisual doesn't support an
+!        * aux buffers parameter.
+!        */
+        xmvis->mesa_visual.numAuxBuffers = numAuxBuffers;
+     }
+     return xmvis;
+***************
+*** 467,473 ****
+   * Input:  glxvis - the glx_visual
+   * Return:  a pixel value or -1 if no transparent pixel
+   */
+! static int transparent_pixel( XMesaVisual glxvis )
+  {
+     Display *dpy = glxvis->display;
+     XVisualInfo *vinfo = glxvis->visinfo;
+--- 467,474 ----
+   * Input:  glxvis - the glx_visual
+   * Return:  a pixel value or -1 if no transparent pixel
+   */
+! static int
+! transparent_pixel( XMesaVisual glxvis )
+  {
+     Display *dpy = glxvis->display;
+     XVisualInfo *vinfo = glxvis->visinfo;
+***************
+*** 532,539 ****
+  /*
+   * Try to get an X visual which matches the given arguments.
+   */
+! static XVisualInfo *get_visual( Display *dpy, int scr,
+!                              unsigned int depth, int xclass )
+  {
+     XVisualInfo temp, *vis;
+     long mask;
+--- 533,540 ----
+  /*
+   * Try to get an X visual which matches the given arguments.
+   */
+! static XVisualInfo *
+! get_visual( Display *dpy, int scr, unsigned int depth, int xclass )
+  {
+     XVisualInfo temp, *vis;
+     long mask;
+***************
+*** 586,592 ****
+   *         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)
+  {
+     char value[100], type[100];
+     int depth, xclass = -1;
+--- 587,594 ----
+   *         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)
+  {
+     char value[100], type[100];
+     int depth, xclass = -1;
+***************
+*** 631,639 ****
+   *         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 )
+  {
+     XVisualInfo *vis;
+     int xclass, visclass = 0;
+--- 633,641 ----
+   *         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 )
+  {
+     XVisualInfo *vis;
+     int xclass, visclass = 0;
+***************
+*** 801,812 ****
+   *         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 )
+  {
+     Atom overlayVisualsAtom;
+     OverlayInfo *overlay_info;
+--- 803,812 ----
+   *         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 )
+  {
+     Atom overlayVisualsAtom;
+     OverlayInfo *overlay_info;
+***************
+*** 931,938 ****
+  /**********************************************************************/
+  
+  
+! static XMesaVisual choose_visual( Display *dpy, int screen, const int *list,
+!                                   GLboolean rgbModeDefault )
+  {
+     const int *parselist;
+     XVisualInfo *vis;
+--- 931,939 ----
+  /**********************************************************************/
+  
+  
+! static XMesaVisual
+! choose_visual( Display *dpy, int screen, const int *list,
+!                GLboolean rgbModeDefault )
+  {
+     const int *parselist;
+     XVisualInfo *vis;
+***************
+*** 1392,1398 ****
+  }
+  
+  
+- 
+  static Bool
+  Fake_glXMakeCurrent( Display *dpy, GLXDrawable drawable, GLXContext ctx )
+  {
+--- 1393,1398 ----
+***************
+*** 1400,1406 ****
+  }
+  
+  
+- 
+  static GLXPixmap
+  Fake_glXCreateGLXPixmap( Display *dpy, XVisualInfo *visinfo, Pixmap pixmap )
+  {
+--- 1400,1405 ----
+***************
+*** 1463,1469 ****
+  }
+  
+  
+- 
+  static void
+  Fake_glXCopyContext( Display *dpy, GLXContext src, GLXContext dst,
+                       unsigned long mask )
+--- 1462,1467 ----
+***************
+*** 1477,1483 ****
+  }
+  
+  
+- 
+  static Bool
+  Fake_glXQueryExtension( Display *dpy, int *errorb, int *event )
+  {
+--- 1475,1480 ----
+***************
+*** 1512,1518 ****
+  }
+  
+  
+- 
+  static Bool
+  Fake_glXIsDirect( Display *dpy, GLXContext ctx )
+  {
+--- 1509,1514 ----
+***************
+*** 1554,1560 ****
+  }
+  
+  
+- 
+  static Bool
+  Fake_glXQueryVersion( Display *dpy, int *maj, int *min )
+  {
+--- 1550,1555 ----
+***************
+*** 1567,1573 ****
+  }
+  
+  
+- 
+  /*
+   * Query the GLX attributes of the given XVisualInfo.
+   */
+--- 1562,1567 ----
+***************
+*** 2738,2746 ****
+  }
+  
+  
+! 
+  extern struct _glxapi_table *_mesa_GetGLXDispatchTable(void);
+! struct _glxapi_table *_mesa_GetGLXDispatchTable(void)
+  {
+     static struct _glxapi_table glx;
+  
+--- 2732,2750 ----
+  }
+  
+  
+! /* silence warning */
+  extern 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 -c 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 ****
+- 
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  5.1
+   * 
+!  * Copyright (C) 1999-2002  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"),
+--- 1,8 ----
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.2.1
+   * 
+!  * 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,1300 ****
+  void
+  _glxapi_set_no_op_table(struct _glxapi_table *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;
+     }
+  }
+  
+  
+  struct name_address_pair {
+     const char *Name;
+!    GLvoid *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 },
+  
+     /*** GLX_VERSION_1_1 ***/
+!    { "glXGetClientString", (GLvoid *) glXGetClientString },
+!    { "glXQueryExtensionsString", (GLvoid *) glXQueryExtensionsString },
+!    { "glXQueryServerString", (GLvoid *) glXQueryServerString },
+  
+     /*** GLX_VERSION_1_2 ***/
+!    { "glXGetCurrentDisplay", (GLvoid *) 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 },
+  
+     /*** GLX_VERSION_1_4 ***/
+!    { "glXGetProcAddress", (GLvoid *) glXGetProcAddress },
+  
+     /*** GLX_SGI_swap_control ***/
+!    { "glXSwapIntervalSGI", (GLvoid *) glXSwapIntervalSGI },
+  
+     /*** GLX_SGI_video_sync ***/
+!    { "glXGetVideoSyncSGI", (GLvoid *) glXGetVideoSyncSGI },
+!    { "glXWaitVideoSyncSGI", (GLvoid *) glXWaitVideoSyncSGI },
+  
+     /*** GLX_SGI_make_current_read ***/
+!    { "glXMakeCurrentReadSGI", (GLvoid *) glXMakeCurrentReadSGI },
+!    { "glXGetCurrentReadDrawableSGI", (GLvoid *) glXGetCurrentReadDrawableSGI },
+  
+     /*** GLX_SGIX_video_source ***/
+  #if defined(_VL_H)
+!    { "glXCreateGLXVideoSourceSGIX", (GLvoid *) glXCreateGLXVideoSourceSGIX },
+!    { "glXDestroyGLXVideoSourceSGIX", (GLvoid *) glXDestroyGLXVideoSourceSGIX },
+  #endif
+  
+     /*** GLX_EXT_import_context ***/
+!    { "glXFreeContextEXT", (GLvoid *) glXFreeContextEXT },
+!    { "glXGetContextIDEXT", (GLvoid *) glXGetContextIDEXT },
+!    { "glXGetCurrentDisplayEXT", (GLvoid *) glXGetCurrentDisplayEXT },
+!    { "glXImportContextEXT", (GLvoid *) glXImportContextEXT },
+!    { "glXQueryContextInfoEXT", (GLvoid *) glXQueryContextInfoEXT },
+  
+     /*** GLX_SGIX_fbconfig ***/
+!    { "glXGetFBConfigAttribSGIX", (GLvoid *) glXGetFBConfigAttribSGIX },
+!    { "glXChooseFBConfigSGIX", (GLvoid *) glXChooseFBConfigSGIX },
+!    { "glXCreateGLXPixmapWithConfigSGIX", (GLvoid *) glXCreateGLXPixmapWithConfigSGIX },
+!    { "glXCreateContextWithConfigSGIX", (GLvoid *) glXCreateContextWithConfigSGIX },
+!    { "glXGetVisualFromFBConfigSGIX", (GLvoid *) glXGetVisualFromFBConfigSGIX },
+!    { "glXGetFBConfigFromVisualSGIX", (GLvoid *) glXGetFBConfigFromVisualSGIX },
+  
+     /*** GLX_SGIX_pbuffer ***/
+!    { "glXCreateGLXPbufferSGIX", (GLvoid *) glXCreateGLXPbufferSGIX },
+!    { "glXDestroyGLXPbufferSGIX", (GLvoid *) glXDestroyGLXPbufferSGIX },
+!    { "glXQueryGLXPbufferSGIX", (GLvoid *) glXQueryGLXPbufferSGIX },
+!    { "glXSelectEventSGIX", (GLvoid *) glXSelectEventSGIX },
+!    { "glXGetSelectedEventSGIX", (GLvoid *) glXGetSelectedEventSGIX },
+  
+     /*** GLX_SGI_cushion ***/
+!    { "glXCushionSGI", (GLvoid *) glXCushionSGI },
+  
+     /*** GLX_SGIX_video_resize ***/
+!    { "glXBindChannelToWindowSGIX", (GLvoid *) glXBindChannelToWindowSGIX },
+!    { "glXChannelRectSGIX", (GLvoid *) glXChannelRectSGIX },
+!    { "glXQueryChannelRectSGIX", (GLvoid *) glXQueryChannelRectSGIX },
+!    { "glXQueryChannelDeltasSGIX", (GLvoid *) glXQueryChannelDeltasSGIX },
+!    { "glXChannelRectSyncSGIX", (GLvoid *) glXChannelRectSyncSGIX },
+  
+     /*** GLX_SGIX_dmbuffer **/
+  #if defined(_DM_BUFFER_H_)
+!    { "glXAssociateDMPbufferSGIX", (GLvoid *) glXAssociateDMPbufferSGIX },
+  #endif
+  
+     /*** GLX_SGIX_swap_group ***/
+!    { "glXJoinSwapGroupSGIX", (GLvoid *) glXJoinSwapGroupSGIX },
+  
+     /*** GLX_SGIX_swap_barrier ***/
+!    { "glXBindSwapBarrierSGIX", (GLvoid *) glXBindSwapBarrierSGIX },
+!    { "glXQueryMaxSwapBarriersSGIX", (GLvoid *) glXQueryMaxSwapBarriersSGIX },
+  
+     /*** GLX_SUN_get_transparent_index ***/
+!    { "glXGetTransparentIndexSUN", (GLvoid *) glXGetTransparentIndexSUN },
+  
+     /*** GLX_MESA_copy_sub_buffer ***/
+!    { "glXCopySubBufferMESA", (GLvoid *) glXCopySubBufferMESA },
+  
+     /*** GLX_MESA_pixmap_colormap ***/
+!    { "glXCreateGLXPixmapMESA", (GLvoid *) glXCreateGLXPixmapMESA },
+  
+     /*** GLX_MESA_release_buffers ***/
+!    { "glXReleaseBuffersMESA", (GLvoid *) glXReleaseBuffersMESA },
+  
+     /*** GLX_MESA_set_3dfx_mode ***/
+!    { "glXSet3DfxModeMESA", (GLvoid *) glXSet3DfxModeMESA },
+  
+     /*** GLX_ARB_get_proc_address ***/
+!    { "glXGetProcAddressARB", (GLvoid *) glXGetProcAddressARB },
+  
+     /*** GLX_NV_vertex_array_range ***/
+!    { "glXAllocateMemoryNV", (GLvoid *) glXAllocateMemoryNV },
+!    { "glXFreeMemoryNV", (GLvoid *) glXFreeMemoryNV },
+  
+     /*** GLX_MESA_agp_offset ***/
+!    { "glXGetAGPOffsetMESA", (GLvoid *) glXGetAGPOffsetMESA },
+  
+     /*** GLX_ARB_render_texture ***/
+!    { "glXBindTexImageARB", (GLvoid *) glXBindTexImageARB },
+!    { "glXReleaseTexImageARB", (GLvoid *) glXReleaseTexImageARB },
+!    { "glXDrawableAttribARB", (GLvoid *) glXDrawableAttribARB },
+  
+     { NULL, NULL }   /* end of list */
+  };
+--- 1140,1300 ----
+  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;
+     for (i = 0; i < n; i++) {
+!       dispatch[i] = generic_no_op_func;
+     }
+  }
+  
+  
+  struct name_address_pair {
+     const char *Name;
+!    __GLXextFuncPtr Address;
+  };
+  
+  static struct name_address_pair GLX_functions[] = {
+     /*** GLX_VERSION_1_0 ***/
+!    { "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", (__GLXextFuncPtr) glXGetClientString },
+!    { "glXQueryExtensionsString", (__GLXextFuncPtr) glXQueryExtensionsString },
+!    { "glXQueryServerString", (__GLXextFuncPtr) glXQueryServerString },
+  
+     /*** GLX_VERSION_1_2 ***/
+!    { "glXGetCurrentDisplay", (__GLXextFuncPtr) glXGetCurrentDisplay },
+  
+     /*** GLX_VERSION_1_3 ***/
+!    { "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", (__GLXextFuncPtr) glXGetProcAddress },
+  
+     /*** GLX_SGI_swap_control ***/
+!    { "glXSwapIntervalSGI", (__GLXextFuncPtr) glXSwapIntervalSGI },
+  
+     /*** GLX_SGI_video_sync ***/
+!    { "glXGetVideoSyncSGI", (__GLXextFuncPtr) glXGetVideoSyncSGI },
+!    { "glXWaitVideoSyncSGI", (__GLXextFuncPtr) glXWaitVideoSyncSGI },
+  
+     /*** GLX_SGI_make_current_read ***/
+!    { "glXMakeCurrentReadSGI", (__GLXextFuncPtr) glXMakeCurrentReadSGI },
+!    { "glXGetCurrentReadDrawableSGI", (__GLXextFuncPtr) glXGetCurrentReadDrawableSGI },
+  
+     /*** GLX_SGIX_video_source ***/
+  #if defined(_VL_H)
+!    { "glXCreateGLXVideoSourceSGIX", (__GLXextFuncPtr) glXCreateGLXVideoSourceSGIX },
+!    { "glXDestroyGLXVideoSourceSGIX", (__GLXextFuncPtr) glXDestroyGLXVideoSourceSGIX },
+  #endif
+  
+     /*** GLX_EXT_import_context ***/
+!    { "glXFreeContextEXT", (__GLXextFuncPtr) glXFreeContextEXT },
+!    { "glXGetContextIDEXT", (__GLXextFuncPtr) glXGetContextIDEXT },
+!    { "glXGetCurrentDisplayEXT", (__GLXextFuncPtr) glXGetCurrentDisplayEXT },
+!    { "glXImportContextEXT", (__GLXextFuncPtr) glXImportContextEXT },
+!    { "glXQueryContextInfoEXT", (__GLXextFuncPtr) glXQueryContextInfoEXT },
+  
+     /*** GLX_SGIX_fbconfig ***/
+!    { "glXGetFBConfigAttribSGIX", (__GLXextFuncPtr) glXGetFBConfigAttribSGIX },
+!    { "glXChooseFBConfigSGIX", (__GLXextFuncPtr) glXChooseFBConfigSGIX },
+!    { "glXCreateGLXPixmapWithConfigSGIX", (__GLXextFuncPtr) glXCreateGLXPixmapWithConfigSGIX },
+!    { "glXCreateContextWithConfigSGIX", (__GLXextFuncPtr) glXCreateContextWithConfigSGIX },
+!    { "glXGetVisualFromFBConfigSGIX", (__GLXextFuncPtr) glXGetVisualFromFBConfigSGIX },
+!    { "glXGetFBConfigFromVisualSGIX", (__GLXextFuncPtr) glXGetFBConfigFromVisualSGIX },
+  
+     /*** GLX_SGIX_pbuffer ***/
+!    { "glXCreateGLXPbufferSGIX", (__GLXextFuncPtr) glXCreateGLXPbufferSGIX },
+!    { "glXDestroyGLXPbufferSGIX", (__GLXextFuncPtr) glXDestroyGLXPbufferSGIX },
+!    { "glXQueryGLXPbufferSGIX", (__GLXextFuncPtr) glXQueryGLXPbufferSGIX },
+!    { "glXSelectEventSGIX", (__GLXextFuncPtr) glXSelectEventSGIX },
+!    { "glXGetSelectedEventSGIX", (__GLXextFuncPtr) glXGetSelectedEventSGIX },
+  
+     /*** GLX_SGI_cushion ***/
+!    { "glXCushionSGI", (__GLXextFuncPtr) glXCushionSGI },
+  
+     /*** GLX_SGIX_video_resize ***/
+!    { "glXBindChannelToWindowSGIX", (__GLXextFuncPtr) glXBindChannelToWindowSGIX },
+!    { "glXChannelRectSGIX", (__GLXextFuncPtr) glXChannelRectSGIX },
+!    { "glXQueryChannelRectSGIX", (__GLXextFuncPtr) glXQueryChannelRectSGIX },
+!    { "glXQueryChannelDeltasSGIX", (__GLXextFuncPtr) glXQueryChannelDeltasSGIX },
+!    { "glXChannelRectSyncSGIX", (__GLXextFuncPtr) glXChannelRectSyncSGIX },
+  
+     /*** GLX_SGIX_dmbuffer **/
+  #if defined(_DM_BUFFER_H_)
+!    { "glXAssociateDMPbufferSGIX", (__GLXextFuncPtr) glXAssociateDMPbufferSGIX },
+  #endif
+  
+     /*** GLX_SGIX_swap_group ***/
+!    { "glXJoinSwapGroupSGIX", (__GLXextFuncPtr) glXJoinSwapGroupSGIX },
+  
+     /*** GLX_SGIX_swap_barrier ***/
+!    { "glXBindSwapBarrierSGIX", (__GLXextFuncPtr) glXBindSwapBarrierSGIX },
+!    { "glXQueryMaxSwapBarriersSGIX", (__GLXextFuncPtr) glXQueryMaxSwapBarriersSGIX },
+  
+     /*** GLX_SUN_get_transparent_index ***/
+!    { "glXGetTransparentIndexSUN", (__GLXextFuncPtr) glXGetTransparentIndexSUN },
+  
+     /*** GLX_MESA_copy_sub_buffer ***/
+!    { "glXCopySubBufferMESA", (__GLXextFuncPtr) glXCopySubBufferMESA },
+  
+     /*** GLX_MESA_pixmap_colormap ***/
+!    { "glXCreateGLXPixmapMESA", (__GLXextFuncPtr) glXCreateGLXPixmapMESA },
+  
+     /*** GLX_MESA_release_buffers ***/
+!    { "glXReleaseBuffersMESA", (__GLXextFuncPtr) glXReleaseBuffersMESA },
+  
+     /*** GLX_MESA_set_3dfx_mode ***/
+!    { "glXSet3DfxModeMESA", (__GLXextFuncPtr) glXSet3DfxModeMESA },
+  
+     /*** GLX_ARB_get_proc_address ***/
+!    { "glXGetProcAddressARB", (__GLXextFuncPtr) glXGetProcAddressARB },
+  
+     /*** GLX_NV_vertex_array_range ***/
+!    { "glXAllocateMemoryNV", (__GLXextFuncPtr) glXAllocateMemoryNV },
+!    { "glXFreeMemoryNV", (__GLXextFuncPtr) glXFreeMemoryNV },
+  
+     /*** GLX_MESA_agp_offset ***/
+!    { "glXGetAGPOffsetMESA", (__GLXextFuncPtr) glXGetAGPOffsetMESA },
+  
+     /*** GLX_ARB_render_texture ***/
+!    { "glXBindTexImageARB", (__GLXextFuncPtr) glXBindTexImageARB },
+!    { "glXReleaseTexImageARB", (__GLXextFuncPtr) glXReleaseTexImageARB },
+!    { "glXDrawableAttribARB", (__GLXextFuncPtr) glXDrawableAttribARB },
+  
+     { NULL, NULL }   /* end of list */
+  };
+***************
+*** 1304,1310 ****
+  /*
+   * Return address of named glX function, or NULL if not found.
+   */
+! const GLvoid *
+  _glxapi_get_proc_address(const char *funcName)
+  {
+     GLuint i;
+--- 1304,1310 ----
+  /*
+   * Return address of named glX function, or NULL if not found.
+   */
+! __GLXextFuncPtr
+  _glxapi_get_proc_address(const char *funcName)
+  {
+     GLuint i;
+***************
+*** 1321,1337 ****
+   * This function does not get dispatched through the dispatch table
+   * since it's really a "meta" function.
+   */
+! void (*glXGetProcAddressARB(const GLubyte *procName))()
+  {
+!    typedef void (*gl_function)();
+!    gl_function f;
+  
+!    f = (gl_function) _glxapi_get_proc_address((const char *) procName);
+     if (f) {
+        return f;
+     }
+  
+!    f = (gl_function) _glapi_get_proc_address((const char *) procName);
+     return f;
+  }
+  
+--- 1321,1337 ----
+   * This function does not get dispatched through the dispatch table
+   * since it's really a "meta" function.
+   */
+! __GLXextFuncPtr
+! glXGetProcAddressARB(const GLubyte *procName)
+  {
+!    __GLXextFuncPtr f;
+  
+!    f = _glxapi_get_proc_address((const char *) procName);
+     if (f) {
+        return f;
+     }
+  
+!    f = (__GLXextFuncPtr) _glapi_get_proc_address((const char *) procName);
+     return f;
+  }
+  
+Index: xc/extras/Mesa/src/mesa/drivers/x11/glxapi.h
+diff -c 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,235 ****
+  _glxapi_set_no_op_table(struct _glxapi_table *t);
+  
+  
+! extern const GLvoid *
+  _glxapi_get_proc_address(const char *funcName);
+  
+  
+--- 229,235 ----
+  _glxapi_set_no_op_table(struct _glxapi_table *t);
+  
+  
+! extern __GLXextFuncPtr
+  _glxapi_get_proc_address(const char *funcName);
+  
+  
+Index: xc/extras/Mesa/src/mesa/drivers/x11/xm_span.c
+diff -c 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 ****
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  5.1
+   *
+!  * 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"),
+--- 1,8 ----
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.2.1
+   *
+!  * 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,3461 ****
+--- 3456,3504 ----
+  /*****                      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,3479 ****
+--- 3517,3527 ----
+  #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,3538 ****
+                                 x, FLIP(source, y), n, 1, ZPixmap,
+                                 ~0L, (pointer)span->data);
+  #else
+        catch_xgetimage_errors( xmesa->display );
+        span = XGetImage( xmesa->display, source->buffer,
+!                      x, FLIP(source, y), n, 1, AllPlanes, ZPixmap );
+        error = check_xgetimage_errors();
+  #endif
+        if (span && !error) {
+--- 3578,3592 ----
+                                 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, 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 -c 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,1358 ****
+                    USE(smooth_DITHER8_z_triangle);
+                 else
+                    USE(smooth_DITHER_z_triangle);
+-                break;
+              case PF_Lookup:
+                 if (depth == 8)
+                    USE(smooth_LOOKUP8_z_triangle);
+--- 1352,1357 ----
+***************
+*** 1390,1396 ****
+                    USE(flat_DITHER8_z_triangle);
+                 else
+                    USE(flat_DITHER_z_triangle);
+-                break;
+              case PF_Lookup:
+                 if (depth == 8)
+                    USE(flat_LOOKUP8_z_triangle);
+--- 1389,1394 ----
+***************
+*** 1425,1431 ****
+                    USE(smooth_DITHER8_triangle);
+                 else
+                    USE(smooth_DITHER_triangle);
+-                break;
+              case PF_Lookup:
+                 if (depth == 8)
+                    USE(smooth_LOOKUP8_triangle);
+--- 1423,1428 ----
+***************
+*** 1461,1467 ****
+                    USE(flat_DITHER8_triangle);
+                 else
+                    USE(flat_DITHER_triangle);
+-                break;
+              case PF_Lookup:
+                 if (depth == 8)
+                    USE(flat_LOOKUP8_triangle);
+--- 1458,1463 ----
+Index: xc/extras/Mesa/src/mesa/glapi/Makefile
+diff -c /dev/null xc/extras/Mesa/src/mesa/glapi/Makefile:1.1.1.1.2.1
+*** /dev/null  Sat Feb  5 21:34:45 2005
+--- xc/extras/Mesa/src/mesa/glapi/Makefile     Wed Dec 15 01:51:02 2004
+***************
+*** 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 -c 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,3811 ****
+--- 3806,3812 ----
+      <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 -c 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,54 ****
+               print ''
+               print '#define GLOBL_FN(x) .globl x ; .type x,#function'
+               print ''
+!              print '#if defined(__sparc_v9__) && !defined(__linux__)'
+               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\\'
+--- 48,54 ----
+               print ''
+               print '#define GLOBL_FN(x) .globl x ; .type x,#function'
+               print ''
+!              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 -c 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,155 ****
+  #error TABLE_ENTRY must be defined
+  #endif
+  
+! static void * DISPATCH_TABLE_NAME[] = {"""
+               keys = self.functions.keys()
+               keys.sort()
+               for k in keys:
+--- 149,155 ----
+  #error TABLE_ENTRY must be defined
+  #endif
+  
+! static _glapi_proc DISPATCH_TABLE_NAME[] = {"""
+               keys = self.functions.keys()
+               keys.sort()
+               for k in keys:
+***************
+*** 176,182 ****
+   * We list the functions which are not otherwise used.
+   */
+  #ifdef UNUSED_TABLE_NAME
+! static const void * const UNUSED_TABLE_NAME[] = {"""
+  
+               keys = self.functions.keys()
+               keys.sort()
+--- 176,182 ----
+   * We list the functions which are not otherwise used.
+   */
+  #ifdef 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 -c 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,64 ****
+               print ' */'
+               print ''
+               print 'typedef struct {'
+!              print '    int Name_offset;'
+               print '#ifdef NEED_FUNCTION_POINTER'
+!              print '    void * Address;'
+               print '#endif'
+!              print '    unsigned int Offset;'
+               print '} glprocs_table_t;'
+               print ''
+               print '#ifdef NEED_FUNCTION_POINTER'
+!              print '#  define NAME_FUNC_OFFSET(n,f,o) { n , (void *) f , o }'
+               print '#else'
+               print '#  define NAME_FUNC_OFFSET(n,f,o) { n , o }'
+               print '#endif'
+--- 50,64 ----
+               print ' */'
+               print ''
+               print 'typedef struct {'
+!              print '    GLint Name_offset;'
+               print '#ifdef NEED_FUNCTION_POINTER'
+!              print '    _glapi_proc Address;'
+               print '#endif'
+!              print '    GLuint Offset;'
+               print '} glprocs_table_t;'
+               print ''
+               print '#ifdef NEED_FUNCTION_POINTER'
+!              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,138 ****
+  
+                       base_offset += len(self.functions[k].name) + 3
+  
+!              print '    NAME_FUNC_OFFSET( -1, NULL, -1 )'
+               print '};'
+               return
+  
+--- 132,138 ----
+  
+                       base_offset += len(self.functions[k].name) + 3
+  
+!              print '    NAME_FUNC_OFFSET( -1, NULL, 0 )'
+               print '};'
+               return
+  
+Index: xc/extras/Mesa/src/mesa/glapi/gl_x86_asm.py
+diff -c 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,72 ****
+               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 '#else'
+!              print '#define GL_PREFIX(n,n2) GLNAME(CONCAT(gl,n))'
+               print '#endif'
+               print ''
+               print '#define GL_OFFSET(x) CODEPTR(REGOFF(4 * x, EAX))'
+--- 62,78 ----
+               print '#ifndef __WIN32__'
+               print ''        
+               print '#if defined(STDCALL_API)'
+!              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 '# 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 -c 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 ****
+- 
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  4.1
+   *
+!  * Copyright (C) 1999-2002  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"),
+--- 1,8 ----
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.3
+   *
+!  * 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,124 ****
+  
+  #define F NULL
+  
+! #define 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:");  \
+!       warning_func msg;                                                      \
+!    }                                                                 \
+     return 0
+  
+  #define DISPATCH_TABLE_NAME __glapi_noop_table
+! #define UNUSED_TABLE_NAME __usused_noop_functions
+  
+! #define TABLE_ENTRY(name) (void *) NoOp##name
+  
+! static int NoOpUnused(void)
+  {
+     if (warn()) {
+        warning_func(NULL, "GL User Error: calling extension function without a current context\n");
+--- 99,121 ----
+  
+  #define F NULL
+  
+! #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: %s", #func); \
+!    }                                                                       \
+     return 0
+  
+  #define DISPATCH_TABLE_NAME __glapi_noop_table
+! #define UNUSED_TABLE_NAME __unused_noop_functions
+  
+! #define TABLE_ENTRY(name) (_glapi_proc) NoOp##name
+  
+! static GLint NoOpUnused(void)
+  {
+     if (warn()) {
+        warning_func(NULL, "GL User Error: calling extension function without a current context\n");
+***************
+*** 171,181 ****
+  
+  
+  #define DISPATCH_TABLE_NAME __glapi_threadsafe_table
+! #define UNUSED_TABLE_NAME __usused_threadsafe_functions
+  
+! #define TABLE_ENTRY(name) (void *) gl##name
+  
+! static int glUnused(void)
+  {
+     return 0;
+  }
+--- 168,178 ----
+  
+  
+  #define DISPATCH_TABLE_NAME __glapi_threadsafe_table
+! #define UNUSED_TABLE_NAME __unused_threadsafe_functions
+  
+! #define TABLE_ENTRY(name) (_glapi_proc) gl##name
+  
+! static GLint glUnused(void)
+  {
+     return 0;
+  }
+***************
+*** 203,209 ****
+  
+  
+  
+! /* strdup() is actually not a standard ANSI C or POSIX routine.
+   * Irix will not define it if ANSI mode is in effect.
+   */
+  static char *
+--- 200,207 ----
+  
+  
+  
+! /**
+!  * 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,225 ****
+  
+  
+  
+! /*
+   * We should call this periodically from a function such as glXMakeCurrent
+   * in order to test if multiple threads are being used.
+   */
+--- 217,223 ----
+  
+  
+  
+! /**
+   * We should call this periodically from a function such as glXMakeCurrent
+   * in order to test if multiple threads are being used.
+   */
+***************
+*** 248,254 ****
+  
+  
+  
+! /*
+   * 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.
+--- 246,252 ----
+  
+  
+  
+! /**
+   * 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,262 ****
+--- 254,262 ----
+  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,272 ****
+  
+  
+  
+! /*
+   * 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.
+--- 266,272 ----
+  
+  
+  
+! /**
+   * 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,294 ****
+  
+  
+  
+! /*
+   * Set the global or per-thread dispatch table pointer.
+   */
+  void
+--- 288,294 ----
+  
+  
+  
+! /**
+   * Set the global or per-thread dispatch table pointer.
+   */
+  void
+***************
+*** 336,342 ****
+  
+  
+  
+! /*
+   * Return pointer to current dispatch table for calling thread.
+   */
+  struct _glapi_table *
+--- 336,342 ----
+  
+  
+  
+! /**
+   * Return pointer to current dispatch table for calling thread.
+   */
+  struct _glapi_table *
+***************
+*** 452,464 ****
+  }
+  
+  
+- struct name_address_offset {
+-    const char *Name;
+-    GLvoid *Address;
+-    GLuint Offset;
+- };
+- 
+- 
+  #if !defined( USE_X86_ASM )
+  #define NEED_FUNCTION_POINTER
+  #endif
+--- 452,457 ----
+***************
+*** 467,478 ****
+  #include "glprocs.h"
+  
+  
+  static const glprocs_table_t *
+  find_entry( const char * n )
+  {
+!    unsigned   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;
+--- 460,475 ----
+  #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 )
+  {
+!    GLuint 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,489 ****
+     return NULL;
+  }
+  
+! /*
+   * Return dispatch table offset of the named static (built-in) function.
+   * Return -1 if function not found.
+   */
+--- 480,487 ----
+     return NULL;
+  }
+  
+! 
+! /**
+   * Return dispatch table offset of the named static (built-in) function.
+   * Return -1 if function not found.
+   */
+***************
+*** 509,526 ****
+  # endif
+  
+  
+! /*
+   * Return dispatch function address the named static (built-in) function.
+   * Return NULL if function not found.
+   */
+! static const GLvoid *
+  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);
+     }
+     else {
+        return NULL;
+--- 507,524 ----
+  # endif
+  
+  
+! /**
+   * Return dispatch function address the named static (built-in) function.
+   * Return NULL if function not found.
+   */
+! static const _glapi_proc
+  get_static_proc_address(const char *funcName)
+  {
+     const glprocs_table_t * const f = find_entry( funcName );
+  
+     if ( f != NULL ) {
+!       return (_glapi_proc) (gl_dispatch_functions_start 
+!                             + (X86_DISPATCH_FUNCTION_SIZE * f->Offset));
+     }
+     else {
+        return NULL;
+***************
+*** 530,540 ****
+  #else
+  
+  
+! /*
+!  * Return dispatch function address the named static (built-in) function.
+!  * Return NULL if function not found.
+   */
+! static const GLvoid *
+  get_static_proc_address(const char *funcName)
+  {
+     const glprocs_table_t * const f = find_entry( funcName );
+--- 528,538 ----
+  #else
+  
+  
+! /**
+!  * Return pointer to the named static (built-in) function.
+!  * \return  NULL if function not found.
+   */
+! static const _glapi_proc
+  get_static_proc_address(const char *funcName)
+  {
+     const glprocs_table_t * const f = find_entry( funcName );
+***************
+*** 544,555 ****
+  #endif /* USE_X86_ASM */
+  
+  
+  static const char *
+  get_static_proc_name( GLuint offset )
+  {
+!    unsigned   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;
+        }
+--- 542,557 ----
+  #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 )
+  {
+!    GLuint 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,576 ****
+  
+  
+  /*
+!  * The disptach table size (number of entries) is the sizeof 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.
+--- 572,578 ----
+  
+  
+  /*
+!  * 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,583 ****
+--- 580,592 ----
+  #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,596 ****
+  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 *
+  generate_entrypoint(GLuint functionOffset)
+  {
+  #if defined(USE_X86_ASM)
+--- 594,605 ----
+  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 _glapi_proc
+  generate_entrypoint(GLuint functionOffset)
+  {
+  #if defined(USE_X86_ASM)
+***************
+*** 633,642 ****
+        *(unsigned int *)(code + 0x10) = (unsigned int)_glapi_get_dispatch - next_insn;
+        *(unsigned int *)(code + 0x16) = (unsigned int)functionOffset * 4;
+     }
+!    return code;
+  #elif defined(USE_SPARC_ASM)
+  
+! #if defined(__sparc_v9__) && !defined(__linux__)
+     static const unsigned int insn_template[] = {
+          0x05000000,  /* sethi        %uhi(_glapi_Dispatch), %g2      */
+          0x03000000,  /* sethi        %hi(_glapi_Dispatch), %g1       */
+--- 642,651 ----
+        *(unsigned int *)(code + 0x10) = (unsigned int)_glapi_get_dispatch - next_insn;
+        *(unsigned int *)(code + 0x16) = (unsigned int)functionOffset * 4;
+     }
+!    return (_glapi_proc) code;
+  #elif defined(USE_SPARC_ASM)
+  
+! #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,670 ****
+     if (code) {
+        memcpy(code, insn_template, sizeof(insn_template));
+  
+! #if defined(__sparc_v9__) && !defined(__linux__)
+        code[0] |= (glapi_addr >> (32 + 10));
+        code[1] |= ((glapi_addr & 0xffffffff) >> 10);
+        __glapi_sparc_icache_flush(&code[0]);
+--- 673,679 ----
+     if (code) {
+        memcpy(code, insn_template, sizeof(insn_template));
+  
+! #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,700 ****
+        __glapi_sparc_icache_flush(&code[2]);
+  #endif
+     }
+!    return code;
+  #else
+     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)
+  {
+  #if defined(USE_X86_ASM)
+  
+--- 691,710 ----
+        __glapi_sparc_icache_flush(&code[2]);
+  #endif
+     }
+!    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(_glapi_proc entrypoint, GLuint offset)
+  {
+  #if defined(USE_X86_ASM)
+  
+***************
+*** 706,712 ****
+  
+     /* XXX this hasn't been tested! */
+     unsigned int *code = (unsigned int *) entrypoint;
+! #if defined(__sparc_v9__) && !defined(__linux__)
+     code[6] = 0x05000000;  /* sethi   %hi(8 * glapioffset), %g2       */
+     code[7] = 0x8410a000;  /* or              %g2, %lo(8 * glapioffset), %g2  */
+     code[6] |= ((offset * 8) >> 10);
+--- 716,722 ----
+  
+     /* XXX this hasn't been tested! */
+     unsigned int *code = (unsigned int *) entrypoint;
+! #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,728 ****
+     __glapi_sparc_icache_flush(&code[2]);
+  #endif /* __sparc_v9__ && !linux */
+  
+  #endif /* USE_*_ASM */
+  }
+  
+  
+! /*
+   * Add a new extension function entrypoint.
+   * Return: GL_TRUE = success or GL_FALSE = failure
+   */
+--- 728,744 ----
+     __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,738 ****
+     /* trivial rejection test */
+  #ifdef MANGLE
+     if (!funcName || funcName[0] != 'm' || funcName[1] != 'g' || funcName[2] != 'l')
+!       return NULL;
+  #else
+     if (!funcName || funcName[0] != 'g' || funcName[1] != 'l')
+        return GL_FALSE;
+--- 748,754 ----
+     /* trivial rejection test */
+  #ifdef MANGLE
+     if (!funcName || funcName[0] != 'm' || funcName[1] != 'g' || funcName[2] != 'l')
+!       return GL_FALSE;
+  #else
+     if (!funcName || funcName[0] != 'g' || funcName[1] != 'l')
+        return GL_FALSE;
+***************
+*** 778,784 ****
+        return GL_FALSE;
+     }
+     else {
+!       void *entrypoint = generate_entrypoint(offset);
+        if (!entrypoint)
+           return GL_FALSE; /* couldn't generate assembly */
+  
+--- 794,800 ----
+        return GL_FALSE;
+     }
+     else {
+!       _glapi_proc entrypoint = generate_entrypoint(offset);
+        if (!entrypoint)
+           return GL_FALSE; /* couldn't generate assembly */
+  
+***************
+*** 796,802 ****
+  }
+  
+  
+! /*
+   * Return offset of entrypoint for named function within dispatch table.
+   */
+  GLint
+--- 812,818 ----
+  }
+  
+  
+! /**
+   * Return offset of entrypoint for named function within dispatch table.
+   */
+  GLint
+***************
+*** 816,825 ****
+  
+  
+  
+! /*
+!  * Return entrypoint for named function.
+   */
+! const GLvoid *
+  _glapi_get_proc_address(const char *funcName)
+  {
+     GLuint i;
+--- 832,843 ----
+  
+  
+  
+! /**
+!  * 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 _glapi_proc
+  _glapi_get_proc_address(const char *funcName)
+  {
+     GLuint i;
+***************
+*** 841,847 ****
+  
+     /* search static functions */
+     {
+!       const GLvoid *func = get_static_proc_address(funcName);
+        if (func)
+           return func;
+     }
+--- 859,865 ----
+  
+     /* search static functions */
+     {
+!       const _glapi_proc func = get_static_proc_address(funcName);
+        if (func)
+           return func;
+     }
+***************
+*** 853,859 ****
+      * when you try calling a GL function that doesn't really exist.
+      */
+     if (NumExtEntryPoints < MAX_EXTENSION_FUNCS) {
+!       GLvoid *entrypoint = generate_entrypoint(~0);
+        if (!entrypoint)
+           return GL_FALSE;
+  
+--- 871,877 ----
+      * when you try calling a GL function that doesn't really exist.
+      */
+     if (NumExtEntryPoints < MAX_EXTENSION_FUNCS) {
+!       _glapi_proc entrypoint = generate_entrypoint(~0);
+        if (!entrypoint)
+           return GL_FALSE;
+  
+***************
+*** 872,878 ****
+  
+  
+  
+! /*
+   * Return the name of the function at the given dispatch offset.
+   * This is only intended for debugging.
+   */
+--- 890,896 ----
+  
+  
+  
+! /**
+   * Return the name of the function at the given dispatch offset.
+   * This is only intended for debugging.
+   */
+***************
+*** 899,905 ****
+  
+  
+  
+! /*
+   * Return size of dispatch table struct as number of functions (or
+   * slots).
+   */
+--- 917,923 ----
+  
+  
+  
+! /**
+   * Return size of dispatch table struct as number of functions (or
+   * slots).
+   */
+***************
+*** 911,917 ****
+  
+  
+  
+! /*
+   * Get API dispatcher version string.
+   */
+  const char *
+--- 929,935 ----
+  
+  
+  
+! /**
+   * Get API dispatcher version string.
+   */
+  const char *
+***************
+*** 922,928 ****
+  
+  
+  
+! /*
+   * Make sure there are no NULL pointers in the given dispatch table.
+   * Intended for debugging purposes.
+   */
+--- 940,946 ----
+  
+  
+  
+! /**
+   * Make sure there are no NULL pointers in the given dispatch table.
+   * Intended for debugging purposes.
+   */
+***************
+*** 988,994 ****
+        GLuint offset = (secondaryColor3fFunc - (char *) table) / sizeof(void *);
+        assert(secondaryColor3fOffset == _gloffset_SecondaryColor3fEXT);
+        assert(secondaryColor3fOffset == offset);
+!       assert(_glapi_get_proc_address("glSecondaryColor3fEXT") == (void *) &glSecondaryColor3fEXT);
+     }
+     {
+        GLuint pointParameterivOffset = _glapi_get_proc_offset("glPointParameterivNV");
+--- 1006,1012 ----
+        GLuint offset = (secondaryColor3fFunc - (char *) table) / sizeof(void *);
+        assert(secondaryColor3fOffset == _gloffset_SecondaryColor3fEXT);
+        assert(secondaryColor3fOffset == offset);
+!       assert(_glapi_get_proc_address("glSecondaryColor3fEXT") == (_glapi_proc) &glSecondaryColor3fEXT);
+     }
+     {
+        GLuint pointParameterivOffset = _glapi_get_proc_offset("glPointParameterivNV");
+***************
+*** 996,1002 ****
+        GLuint offset = (pointParameterivFunc - (char *) table) / sizeof(void *);
+        assert(pointParameterivOffset == _gloffset_PointParameterivNV);
+        assert(pointParameterivOffset == offset);
+!       assert(_glapi_get_proc_address("glPointParameterivNV") == (void *) &glPointParameterivNV);
+     }
+     {
+        GLuint setFenceOffset = _glapi_get_proc_offset("glSetFenceNV");
+--- 1014,1020 ----
+        GLuint offset = (pointParameterivFunc - (char *) table) / sizeof(void *);
+        assert(pointParameterivOffset == _gloffset_PointParameterivNV);
+        assert(pointParameterivOffset == offset);
+!       assert(_glapi_get_proc_address("glPointParameterivNV") == (_glapi_proc) &glPointParameterivNV);
+     }
+     {
+        GLuint setFenceOffset = _glapi_get_proc_offset("glSetFenceNV");
+***************
+*** 1004,1010 ****
+        GLuint offset = (setFenceFunc - (char *) table) / sizeof(void *);
+        assert(setFenceOffset == _gloffset_SetFenceNV);
+        assert(setFenceOffset == offset);
+!       assert(_glapi_get_proc_address("glSetFenceNV") == (void *) &glSetFenceNV);
+     }
+  #endif
+  }
+--- 1022,1030 ----
+        GLuint offset = (setFenceFunc - (char *) table) / sizeof(void *);
+        assert(setFenceOffset == _gloffset_SetFenceNV);
+        assert(setFenceOffset == offset);
+!       assert(_glapi_get_proc_address("glSetFenceNV") == (_glapi_proc) &glSetFenceNV);
+     }
++ #else
++    (void) table;
+  #endif
+  }
+Index: xc/extras/Mesa/src/mesa/glapi/glapi.h
+diff -c 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 ****
+- 
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  3.5
+   *
+!  * Copyright (C) 1999-2001  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"),
+--- 1,8 ----
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.3
+   *
+!  * 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,29 ****
+--- 23,46 ----
+   */
+  
+  
++ /**
++  * \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,39 ****
+--- 51,58 ----
+  
+  typedef void (*_glapi_warning_func)(void *ctx, const char *str, ...);
+  
++ typedef void (*_glapi_proc)(void); /* generic function pointer */
++ 
+  
+  extern void *_glapi_Context;
+  
+***************
+*** 98,104 ****
+  _glapi_get_proc_offset(const char *funcName);
+  
+  
+! extern const GLvoid *
+  _glapi_get_proc_address(const char *funcName);
+  
+  
+--- 117,123 ----
+  _glapi_get_proc_offset(const char *funcName);
+  
+  
+! extern const _glapi_proc
+  _glapi_get_proc_address(const char *funcName);
+  
+  
+Index: xc/extras/Mesa/src/mesa/glapi/glapioffsets.h
+diff -c 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 ****
+! /* DO NOT EDIT - This file generated automatically by gloffsets.py script */
+  #ifndef _GLAPI_OFFSETS_H_
+  #define _GLAPI_OFFSETS_H_
+  
+--- 1,31 ----
+! /* 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 -c 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 ****
+! /* DO NOT EDIT - This file generated automatically with gltable.py script */
+  #ifndef _GLAPI_TABLE_H_
+  #define _GLAPI_TABLE_H_
+  
+--- 1,31 ----
+! /* 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,711 ****
+     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 */
+     GLboolean (GLAPIENTRYP IsBufferARB)(GLuint buffer); /* 696 */
+!    void * (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 */
+--- 730,738 ----
+     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, GLvoid * data); /* 695 */
+     GLboolean (GLAPIENTRYP IsBufferARB)(GLuint buffer); /* 696 */
+!    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 -c 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 ****
+  
+- /* DO NOT EDIT!  This file is generated by the glapitemp.py script. */
+  
+  /*
+   * This file is a template which generates the OpenGL API entry point
+--- 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.
++  */
+  
+  
+  /*
+   * This file is a template which generates the OpenGL API entry point
+***************
+*** 12,18 ****
+   *                               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:
+   *   #define KEYWORD1
+   *   #define KEYWORD2
+   *   #define NAME(func)  gl##func
+--- 38,44 ----
+   *                               msg is a printf-style debug message.
+   *   RETURN_DISPATCH(func, args, msg) - code to do dispatch with a return value
+   *
+!  * Here is an example which generates the usual OpenGL functions:
+   *   #define KEYWORD1
+   *   #define KEYWORD2
+   *   #define NAME(func)  gl##func
+***************
+*** 107,113 ****
+  
+  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]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(Color3f)(GLfloat red, GLfloat green, GLfloat blue)
+--- 133,139 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(Color3dv)(const GLdouble * v)
+  {
+!    DISPATCH(Color3dv, (v), (F, "glColor3dv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(Color3f)(GLfloat red, GLfloat green, GLfloat blue)
+***************
+*** 117,123 ****
+  
+  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]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(Color3i)(GLint red, GLint green, GLint blue)
+--- 143,149 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(Color3fv)(const GLfloat * v)
+  {
+!    DISPATCH(Color3fv, (v), (F, "glColor3fv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(Color3i)(GLint red, GLint green, GLint blue)
+***************
+*** 187,193 ****
+  
+  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]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(Color4f)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+--- 213,219 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(Color4dv)(const GLdouble * v)
+  {
+!    DISPATCH(Color4dv, (v), (F, "glColor4dv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(Color4f)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+***************
+*** 197,203 ****
+  
+  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]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(Color4i)(GLint red, GLint green, GLint blue, GLint alpha)
+--- 223,229 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(Color4fv)(const GLfloat * v)
+  {
+!    DISPATCH(Color4fv, (v), (F, "glColor4fv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(Color4i)(GLint red, GLint green, GLint blue, GLint alpha)
+***************
+*** 322,328 ****
+  
+  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]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(Normal3f)(GLfloat nx, GLfloat ny, GLfloat nz)
+--- 348,354 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(Normal3dv)(const GLdouble * v)
+  {
+!    DISPATCH(Normal3dv, (v), (F, "glNormal3dv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(Normal3f)(GLfloat nx, GLfloat ny, GLfloat nz)
+***************
+*** 332,338 ****
+  
+  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]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(Normal3i)(GLint nx, GLint ny, GLint nz)
+--- 358,364 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(Normal3fv)(const GLfloat * v)
+  {
+!    DISPATCH(Normal3fv, (v), (F, "glNormal3fv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(Normal3i)(GLint nx, GLint ny, GLint nz)
+***************
+*** 362,368 ****
+  
+  KEYWORD1 void KEYWORD2 NAME(RasterPos2dv)(const GLdouble * v)
+  {
+!    DISPATCH(RasterPos2dv, (v), (F, "glRasterPos2dv(%p /* %g, %g */);\n", (const void *) v, v[0], v[1]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(RasterPos2f)(GLfloat x, GLfloat y)
+--- 388,394 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(RasterPos2dv)(const GLdouble * v)
+  {
+!    DISPATCH(RasterPos2dv, (v), (F, "glRasterPos2dv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(RasterPos2f)(GLfloat x, GLfloat y)
+***************
+*** 372,378 ****
+  
+  KEYWORD1 void KEYWORD2 NAME(RasterPos2fv)(const GLfloat * v)
+  {
+!    DISPATCH(RasterPos2fv, (v), (F, "glRasterPos2fv(%p /* %g, %g */);\n", (const void *) v, v[0], v[1]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(RasterPos2i)(GLint x, GLint y)
+--- 398,404 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(RasterPos2fv)(const GLfloat * v)
+  {
+!    DISPATCH(RasterPos2fv, (v), (F, "glRasterPos2fv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(RasterPos2i)(GLint x, GLint y)
+***************
+*** 402,408 ****
+  
+  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]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(RasterPos3f)(GLfloat x, GLfloat y, GLfloat z)
+--- 428,434 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(RasterPos3dv)(const GLdouble * v)
+  {
+!    DISPATCH(RasterPos3dv, (v), (F, "glRasterPos3dv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(RasterPos3f)(GLfloat x, GLfloat y, GLfloat z)
+***************
+*** 412,418 ****
+  
+  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]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(RasterPos3i)(GLint x, GLint y, GLint z)
+--- 438,444 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(RasterPos3fv)(const GLfloat * v)
+  {
+!    DISPATCH(RasterPos3fv, (v), (F, "glRasterPos3fv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(RasterPos3i)(GLint x, GLint y, GLint z)
+***************
+*** 442,448 ****
+  
+  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]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(RasterPos4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+--- 468,474 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(RasterPos4dv)(const GLdouble * v)
+  {
+!    DISPATCH(RasterPos4dv, (v), (F, "glRasterPos4dv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(RasterPos4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+***************
+*** 452,458 ****
+  
+  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]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(RasterPos4i)(GLint x, GLint y, GLint z, GLint w)
+--- 478,484 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(RasterPos4fv)(const GLfloat * v)
+  {
+!    DISPATCH(RasterPos4fv, (v), (F, "glRasterPos4fv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(RasterPos4i)(GLint x, GLint y, GLint z, GLint w)
+***************
+*** 562,568 ****
+  
+  KEYWORD1 void KEYWORD2 NAME(TexCoord2dv)(const GLdouble * v)
+  {
+!    DISPATCH(TexCoord2dv, (v), (F, "glTexCoord2dv(%p /* %g, %g */);\n", (const void *) v, v[0], v[1]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(TexCoord2f)(GLfloat s, GLfloat t)
+--- 588,594 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(TexCoord2dv)(const GLdouble * v)
+  {
+!    DISPATCH(TexCoord2dv, (v), (F, "glTexCoord2dv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(TexCoord2f)(GLfloat s, GLfloat t)
+***************
+*** 572,578 ****
+  
+  KEYWORD1 void KEYWORD2 NAME(TexCoord2fv)(const GLfloat * v)
+  {
+!    DISPATCH(TexCoord2fv, (v), (F, "glTexCoord2fv(%p /* %g, %g */);\n", (const void *) v, v[0], v[1]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(TexCoord2i)(GLint s, GLint t)
+--- 598,604 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(TexCoord2fv)(const GLfloat * v)
+  {
+!    DISPATCH(TexCoord2fv, (v), (F, "glTexCoord2fv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(TexCoord2i)(GLint s, GLint t)
+***************
+*** 602,608 ****
+  
+  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]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(TexCoord3f)(GLfloat s, GLfloat t, GLfloat r)
+--- 628,634 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(TexCoord3dv)(const GLdouble * v)
+  {
+!    DISPATCH(TexCoord3dv, (v), (F, "glTexCoord3dv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(TexCoord3f)(GLfloat s, GLfloat t, GLfloat r)
+***************
+*** 612,618 ****
+  
+  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]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(TexCoord3i)(GLint s, GLint t, GLint r)
+--- 638,644 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(TexCoord3fv)(const GLfloat * v)
+  {
+!    DISPATCH(TexCoord3fv, (v), (F, "glTexCoord3fv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(TexCoord3i)(GLint s, GLint t, GLint r)
+***************
+*** 642,648 ****
+  
+  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]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(TexCoord4f)(GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+--- 668,674 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(TexCoord4dv)(const GLdouble * v)
+  {
+!    DISPATCH(TexCoord4dv, (v), (F, "glTexCoord4dv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(TexCoord4f)(GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+***************
+*** 652,658 ****
+  
+  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]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(TexCoord4i)(GLint s, GLint t, GLint r, GLint q)
+--- 678,684 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(TexCoord4fv)(const GLfloat * v)
+  {
+!    DISPATCH(TexCoord4fv, (v), (F, "glTexCoord4fv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(TexCoord4i)(GLint s, GLint t, GLint r, GLint q)
+***************
+*** 682,688 ****
+  
+  KEYWORD1 void KEYWORD2 NAME(Vertex2dv)(const GLdouble * v)
+  {
+!    DISPATCH(Vertex2dv, (v), (F, "glVertex2dv(%p /* %g, %g */);\n", (const void *) v, v[0], v[1]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(Vertex2f)(GLfloat x, GLfloat y)
+--- 708,714 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(Vertex2dv)(const GLdouble * v)
+  {
+!    DISPATCH(Vertex2dv, (v), (F, "glVertex2dv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(Vertex2f)(GLfloat x, GLfloat y)
+***************
+*** 692,698 ****
+  
+  KEYWORD1 void KEYWORD2 NAME(Vertex2fv)(const GLfloat * v)
+  {
+!    DISPATCH(Vertex2fv, (v), (F, "glVertex2fv(%p /* %g, %g */);\n", (const void *) v, v[0], v[1]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(Vertex2i)(GLint x, GLint y)
+--- 718,724 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(Vertex2fv)(const GLfloat * v)
+  {
+!    DISPATCH(Vertex2fv, (v), (F, "glVertex2fv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(Vertex2i)(GLint x, GLint y)
+***************
+*** 722,728 ****
+  
+  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]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(Vertex3f)(GLfloat x, GLfloat y, GLfloat z)
+--- 748,754 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(Vertex3dv)(const GLdouble * v)
+  {
+!    DISPATCH(Vertex3dv, (v), (F, "glVertex3dv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(Vertex3f)(GLfloat x, GLfloat y, GLfloat z)
+***************
+*** 732,738 ****
+  
+  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]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(Vertex3i)(GLint x, GLint y, GLint z)
+--- 758,764 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(Vertex3fv)(const GLfloat * v)
+  {
+!    DISPATCH(Vertex3fv, (v), (F, "glVertex3fv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(Vertex3i)(GLint x, GLint y, GLint z)
+***************
+*** 762,768 ****
+  
+  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]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(Vertex4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+--- 788,794 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(Vertex4dv)(const GLdouble * v)
+  {
+!    DISPATCH(Vertex4dv, (v), (F, "glVertex4dv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(Vertex4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+***************
+*** 772,778 ****
+  
+  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]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(Vertex4i)(GLint x, GLint y, GLint z, GLint w)
+--- 798,804 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(Vertex4fv)(const GLfloat * v)
+  {
+!    DISPATCH(Vertex4fv, (v), (F, "glVertex4fv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(Vertex4i)(GLint x, GLint y, GLint z, GLint w)
+***************
+*** 1062,1068 ****
+  
+  KEYWORD1 void KEYWORD2 NAME(Clear)(GLbitfield mask)
+  {
+!    DISPATCH(Clear, (mask), (F, "glClear(%p);\n", (const void *) mask));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(ClearAccum)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+--- 1088,1094 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(Clear)(GLbitfield mask)
+  {
+!    DISPATCH(Clear, (mask), (F, "glClear(%d);\n", mask));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(ClearAccum)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+***************
+*** 1142,1148 ****
+  
+  KEYWORD1 void KEYWORD2 NAME(PushAttrib)(GLbitfield mask)
+  {
+!    DISPATCH(PushAttrib, (mask), (F, "glPushAttrib(%p);\n", (const void *) mask));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(Map1d)(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble * points)
+--- 1168,1174 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(PushAttrib)(GLbitfield 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,1218 ****
+  
+  KEYWORD1 void KEYWORD2 NAME(EvalCoord2dv)(const GLdouble * u)
+  {
+!    DISPATCH(EvalCoord2dv, (u), (F, "glEvalCoord2dv(%p /* %g, %g */);\n", (const void *) u, u[0], u[1]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(EvalCoord2f)(GLfloat u, GLfloat v)
+--- 1238,1244 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(EvalCoord2dv)(const GLdouble * u)
+  {
+!    DISPATCH(EvalCoord2dv, (u), (F, "glEvalCoord2dv(%p);\n", (const void *) u));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(EvalCoord2f)(GLfloat u, GLfloat v)
+***************
+*** 1222,1228 ****
+  
+  KEYWORD1 void KEYWORD2 NAME(EvalCoord2fv)(const GLfloat * u)
+  {
+!    DISPATCH(EvalCoord2fv, (u), (F, "glEvalCoord2fv(%p /* %g, %g */);\n", (const void *) u, u[0], u[1]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(EvalMesh1)(GLenum mode, GLint i1, GLint i2)
+--- 1248,1254 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(EvalCoord2fv)(const GLfloat * u)
+  {
+!    DISPATCH(EvalCoord2fv, (u), (F, "glEvalCoord2fv(%p);\n", (const void *) u));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(EvalMesh1)(GLenum mode, GLint i1, GLint i2)
+***************
+*** 1580,1585 ****
+--- 1606,1616 ----
+     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,1623 ****
+     DISPATCH(EnableClientState, (array), (F, "glEnableClientState(0x%x);\n", array));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetPointerv)(GLenum pname, GLvoid ** params)
+  {
+!    DISPATCH(GetPointerv, (pname, params), (F, "glGetPointerv(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(IndexPointer)(GLenum type, GLsizei stride, const GLvoid * pointer)
+  {
+!    DISPATCH(IndexPointer, (type, stride, pointer), (F, "glIndexPointer(0x%x, %d, %p);\n", type, stride, (const void *) pointer));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(InterleavedArrays)(GLenum format, GLsizei stride, const GLvoid * pointer)
+--- 1641,1659 ----
+     DISPATCH(EnableClientState, (array), (F, "glEnableClientState(0x%x);\n", array));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(IndexPointer)(GLenum type, GLsizei stride, const GLvoid * pointer)
+  {
+!    DISPATCH(IndexPointer, (type, stride, pointer), (F, "glIndexPointer(0x%x, %d, %p);\n", type, stride, (const void *) pointer));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(Indexub)(GLubyte c)
+  {
+!    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,1635 ****
+--- 1666,1676 ----
+     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,1648 ****
+     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)
+  {
+!    DISPATCH(PolygonOffset, (factor, units), (F, "glPolygonOffset(%f, %f);\n", factor, units));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(CopyTexImage1D)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border)
+--- 1681,1689 ----
+     DISPATCH(VertexPointer, (size, type, stride, pointer), (F, "glVertexPointer(%d, 0x%x, %d, %p);\n", size, type, stride, (const void *) pointer));
+  }
+  
+! 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(CopyTexImage1D)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border)
+***************
+*** 1665,1690 ****
+     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));
+--- 1706,1711 ----
+***************
+*** 1695,1700 ****
+--- 1716,1726 ----
+     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,1718 ****
+     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)
+  {
+!    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(PopClientAttrib)(void)
+--- 1731,1744 ----
+     DISPATCH(PrioritizeTextures, (n, textures, priorities), (F, "glPrioritizeTextures(%d, %p, %p);\n", n, (const void *) textures, (const void *) priorities));
+  }
+  
+! 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 void KEYWORD2 NAME(PopClientAttrib)(void)
+***************
+*** 1722,1728 ****
+  
+  KEYWORD1 void KEYWORD2 NAME(PushClientAttrib)(GLbitfield mask)
+  {
+!    DISPATCH(PushClientAttrib, (mask), (F, "glPushClientAttrib(%p);\n", (const void *) mask));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(BlendColor)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+--- 1748,1754 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(PushClientAttrib)(GLbitfield mask)
+  {
+!    DISPATCH(PushClientAttrib, (mask), (F, "glPushClientAttrib(%d);\n", mask));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(BlendColor)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+***************
+*** 1972,1978 ****
+  
+  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]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2fARB)(GLenum target, GLfloat s, GLfloat t)
+--- 1998,2004 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2dvARB)(GLenum target, const GLdouble * v)
+  {
+!    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,1988 ****
+  
+  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]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2iARB)(GLenum target, GLint s, GLint t)
+--- 2008,2014 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2fvARB)(GLenum target, const GLfloat * v)
+  {
+!    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,2018 ****
+  
+  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]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3fARB)(GLenum target, GLfloat s, GLfloat t, GLfloat r)
+--- 2038,2044 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3dvARB)(GLenum target, const GLdouble * v)
+  {
+!    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,2028 ****
+  
+  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]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3iARB)(GLenum target, GLint s, GLint t, GLint r)
+--- 2048,2054 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3fvARB)(GLenum target, const GLfloat * v)
+  {
+!    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,2058 ****
+  
+  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]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4fARB)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+--- 2078,2084 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4dvARB)(GLenum target, const GLdouble * v)
+  {
+!    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,2068 ****
+  
+  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]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4iARB)(GLenum target, GLint s, GLint t, GLint r, GLint q)
+--- 2088,2094 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4fvARB)(GLenum target, const GLfloat * v)
+  {
+!    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,3967 ****
+     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)
+  {
+!    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(CompressedTexImage2DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data)
+  {
+!    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(CompressedTexImage1DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * data)
+  {
+!    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(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(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(CompressedTexSubImage2DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data)
+  {
+!    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));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(CompressedTexSubImage1DARB)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data)
+  {
+!    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(GetCompressedTexImageARB)(GLenum target, GLint level, GLvoid * img)
+  {
+!    DISPATCH(GetCompressedTexImageARB, (target, level, img), (F, "glGetCompressedTexImageARB(0x%x, %d, %p);\n", target, level, (const void *) img));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ActiveTexture)(GLenum texture)
+  {
+!    DISPATCH(ActiveTextureARB, (texture), (F, "glActiveTexture(0x%x);\n", texture));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ClientActiveTexture)(GLenum texture)
+  {
+!    DISPATCH(ClientActiveTextureARB, (texture), (F, "glClientActiveTexture(0x%x);\n", texture));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1d)(GLenum target, GLdouble s)
+  {
+!    DISPATCH(MultiTexCoord1dARB, (target, s), (F, "glMultiTexCoord1d(0x%x, %f);\n", target, s));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1dv)(GLenum target, const GLdouble * v)
+  {
+!    DISPATCH(MultiTexCoord1dvARB, (target, v), (F, "glMultiTexCoord1dv(0x%x, %p);\n", target, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1f)(GLenum target, GLfloat s)
+  {
+!    DISPATCH(MultiTexCoord1fARB, (target, s), (F, "glMultiTexCoord1f(0x%x, %f);\n", target, s));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1fv)(GLenum target, const GLfloat * v)
+  {
+!    DISPATCH(MultiTexCoord1fvARB, (target, v), (F, "glMultiTexCoord1fv(0x%x, %p);\n", target, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1i)(GLenum target, GLint s)
+  {
+!    DISPATCH(MultiTexCoord1iARB, (target, s), (F, "glMultiTexCoord1i(0x%x, %d);\n", target, s));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1iv)(GLenum target, const GLint * v)
+  {
+!    DISPATCH(MultiTexCoord1ivARB, (target, v), (F, "glMultiTexCoord1iv(0x%x, %p);\n", target, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1s)(GLenum target, GLshort s)
+  {
+!    DISPATCH(MultiTexCoord1sARB, (target, s), (F, "glMultiTexCoord1s(0x%x, %d);\n", target, s));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1sv)(GLenum target, const GLshort * v)
+  {
+!    DISPATCH(MultiTexCoord1svARB, (target, v), (F, "glMultiTexCoord1sv(0x%x, %p);\n", target, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2d)(GLenum target, GLdouble s, GLdouble t)
+  {
+!    DISPATCH(MultiTexCoord2dARB, (target, s, t), (F, "glMultiTexCoord2d(0x%x, %f, %f);\n", target, s, t));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2dv)(GLenum target, const GLdouble * v)
+  {
+!    DISPATCH(MultiTexCoord2dvARB, (target, v), (F, "glMultiTexCoord2dv(0x%x, %p /* %g, %g */);\n", target, (const void *) v, v[0], v[1]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2f)(GLenum target, GLfloat s, GLfloat t)
+  {
+!    DISPATCH(MultiTexCoord2fARB, (target, s, t), (F, "glMultiTexCoord2f(0x%x, %f, %f);\n", target, s, t));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2fv)(GLenum target, const GLfloat * v)
+  {
+!    DISPATCH(MultiTexCoord2fvARB, (target, v), (F, "glMultiTexCoord2fv(0x%x, %p /* %g, %g */);\n", target, (const void *) v, v[0], v[1]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2i)(GLenum target, GLint s, GLint t)
+  {
+!    DISPATCH(MultiTexCoord2iARB, (target, s, t), (F, "glMultiTexCoord2i(0x%x, %d, %d);\n", target, s, t));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2iv)(GLenum target, const GLint * v)
+  {
+!    DISPATCH(MultiTexCoord2ivARB, (target, v), (F, "glMultiTexCoord2iv(0x%x, %p);\n", target, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2s)(GLenum target, GLshort s, GLshort t)
+  {
+!    DISPATCH(MultiTexCoord2sARB, (target, s, t), (F, "glMultiTexCoord2s(0x%x, %d, %d);\n", target, s, t));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2sv)(GLenum target, const GLshort * v)
+  {
+!    DISPATCH(MultiTexCoord2svARB, (target, v), (F, "glMultiTexCoord2sv(0x%x, %p);\n", target, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3d)(GLenum target, GLdouble s, GLdouble t, GLdouble r)
+  {
+!    DISPATCH(MultiTexCoord3dARB, (target, s, t, r), (F, "glMultiTexCoord3d(0x%x, %f, %f, %f);\n", target, s, t, r));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3dv)(GLenum target, const GLdouble * v)
+  {
+!    DISPATCH(MultiTexCoord3dvARB, (target, v), (F, "glMultiTexCoord3dv(0x%x, %p /* %g, %g, %g */);\n", target, (const void *) v, v[0], v[1], v[2]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3f)(GLenum target, GLfloat s, GLfloat t, GLfloat r)
+  {
+!    DISPATCH(MultiTexCoord3fARB, (target, s, t, r), (F, "glMultiTexCoord3f(0x%x, %f, %f, %f);\n", target, s, t, r));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3fv)(GLenum target, const GLfloat * v)
+  {
+!    DISPATCH(MultiTexCoord3fvARB, (target, v), (F, "glMultiTexCoord3fv(0x%x, %p /* %g, %g, %g */);\n", target, (const void *) v, v[0], v[1], v[2]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3i)(GLenum target, GLint s, GLint t, GLint r)
+  {
+!    DISPATCH(MultiTexCoord3iARB, (target, s, t, r), (F, "glMultiTexCoord3i(0x%x, %d, %d, %d);\n", target, s, t, r));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3iv)(GLenum target, const GLint * v)
+  {
+!    DISPATCH(MultiTexCoord3ivARB, (target, v), (F, "glMultiTexCoord3iv(0x%x, %p);\n", target, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3s)(GLenum target, GLshort s, GLshort t, GLshort r)
+  {
+!    DISPATCH(MultiTexCoord3sARB, (target, s, t, r), (F, "glMultiTexCoord3s(0x%x, %d, %d, %d);\n", target, s, t, r));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3sv)(GLenum target, const GLshort * v)
+  {
+!    DISPATCH(MultiTexCoord3svARB, (target, v), (F, "glMultiTexCoord3sv(0x%x, %p);\n", target, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4d)(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q)
+  {
+!    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(MultiTexCoord4dv)(GLenum target, const GLdouble * v)
+  {
+!    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]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4f)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+  {
+!    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(MultiTexCoord4fv)(GLenum target, const GLfloat * v)
+  {
+!    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]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4i)(GLenum target, GLint s, GLint t, GLint r, GLint q)
+  {
+!    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(MultiTexCoord4iv)(GLenum target, const GLint * v)
+  {
+!    DISPATCH(MultiTexCoord4ivARB, (target, v), (F, "glMultiTexCoord4iv(0x%x, %p);\n", target, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4s)(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q)
+  {
+!    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(MultiTexCoord4sv)(GLenum target, const GLshort * v)
+  {
+!    DISPATCH(MultiTexCoord4svARB, (target, v), (F, "glMultiTexCoord4sv(0x%x, %p);\n", target, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(LoadTransposeMatrixf)(const GLfloat * m)
+  {
+!    DISPATCH(LoadTransposeMatrixfARB, (m), (F, "glLoadTransposeMatrixf(%p);\n", (const void *) m));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(LoadTransposeMatrixd)(const GLdouble * m)
+  {
+!    DISPATCH(LoadTransposeMatrixdARB, (m), (F, "glLoadTransposeMatrixd(%p);\n", (const void *) m));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultTransposeMatrixf)(const GLfloat * m)
+  {
+!    DISPATCH(MultTransposeMatrixfARB, (m), (F, "glMultTransposeMatrixf(%p);\n", (const void *) m));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultTransposeMatrixd)(const GLdouble * m)
+  {
+!    DISPATCH(MultTransposeMatrixdARB, (m), (F, "glMultTransposeMatrixd(%p);\n", (const void *) m));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SampleCoverage)(GLclampf value, GLboolean invert)
+  {
+!    DISPATCH(SampleCoverageARB, (value, invert), (F, "glSampleCoverage(%f, %d);\n", value, invert));
+  }
+  
+! 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(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(CompressedTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data)
+  {
+!    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(CompressedTexImage1D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * data)
+  {
+!    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(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(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(CompressedTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data)
+  {
+!    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(CompressedTexSubImage1D)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data)
+  {
+!    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(GetCompressedTexImage)(GLenum target, GLint level, GLvoid * img)
+  {
+!    DISPATCH(GetCompressedTexImageARB, (target, level, img), (F, "glGetCompressedTexImage(0x%x, %d, %p);\n", target, level, (const void *) img));
+  }
+  
+! /* 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)
+  {
+!    DISPATCH(BlendColor, (red, green, blue, alpha), (F, "glBlendColorEXT(%f, %f, %f, %f);\n", red, green, blue, alpha));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(PolygonOffsetEXT)(GLfloat factor, GLfloat bias)
+  {
+!    DISPATCH(PolygonOffsetEXT, (factor, bias), (F, "glPolygonOffsetEXT(%f, %f);\n", factor, bias));
+  }
+  
+! 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(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(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(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(GetTexFilterFuncSGIS)(GLenum target, GLenum filter, GLfloat * weights)
+  {
+!    DISPATCH(GetTexFilterFuncSGIS, (target, filter, weights), (F, "glGetTexFilterFuncSGIS(0x%x, 0x%x, %p);\n", target, filter, (const void *) weights));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(TexFilterFuncSGIS)(GLenum target, GLenum filter, GLsizei n, const GLfloat * weights)
+  {
+!    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(TexSubImage1DEXT)(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, "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(TexSubImage2DEXT)(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, "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(CopyTexImage1DEXT)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border)
+  {
+!    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(CopyTexImage2DEXT)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+  {
+!    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(CopyTexSubImage1DEXT)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
+  {
+!    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(CopyTexSubImage2DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+  {
+!    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(CopyTexSubImage3DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+  {
+!    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(GetHistogramEXT)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values)
+  {
+!    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(GetHistogramParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params)
+  {
+!    DISPATCH(GetHistogramParameterfvEXT, (target, pname, params), (F, "glGetHistogramParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetHistogramParameterivEXT)(GLenum target, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetHistogramParameterivEXT, (target, pname, params), (F, "glGetHistogramParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetMinmaxEXT)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values)
+  {
+!    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(GetMinmaxParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params)
+  {
+!    DISPATCH(GetMinmaxParameterfvEXT, (target, pname, params), (F, "glGetMinmaxParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetMinmaxParameterivEXT)(GLenum target, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetMinmaxParameterivEXT, (target, pname, params), (F, "glGetMinmaxParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(HistogramEXT)(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink)
+  {
+!    DISPATCH(Histogram, (target, width, internalformat, sink), (F, "glHistogramEXT(0x%x, %d, 0x%x, %d);\n", target, width, internalformat, sink));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MinmaxEXT)(GLenum target, GLenum internalformat, GLboolean sink)
+  {
+!    DISPATCH(Minmax, (target, internalformat, sink), (F, "glMinmaxEXT(0x%x, 0x%x, %d);\n", target, internalformat, sink));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ResetHistogramEXT)(GLenum target)
+  {
+!    DISPATCH(ResetHistogram, (target), (F, "glResetHistogramEXT(0x%x);\n", target));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ResetMinmaxEXT)(GLenum target)
+  {
+!    DISPATCH(ResetMinmax, (target), (F, "glResetMinmaxEXT(0x%x);\n", target));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ConvolutionFilter1DEXT)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * image)
+  {
+!    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(ConvolutionFilter2DEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * image)
+  {
+!    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(ConvolutionParameterfEXT)(GLenum target, GLenum pname, GLfloat params)
+  {
+!    DISPATCH(ConvolutionParameterf, (target, pname, params), (F, "glConvolutionParameterfEXT(0x%x, 0x%x, %f);\n", target, pname, params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ConvolutionParameterfvEXT)(GLenum target, GLenum pname, const GLfloat * params)
+  {
+!    DISPATCH(ConvolutionParameterfv, (target, pname, params), (F, "glConvolutionParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ConvolutionParameteriEXT)(GLenum target, GLenum pname, GLint params)
+  {
+!    DISPATCH(ConvolutionParameteri, (target, pname, params), (F, "glConvolutionParameteriEXT(0x%x, 0x%x, %d);\n", target, pname, params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ConvolutionParameterivEXT)(GLenum target, GLenum pname, const GLint * params)
+  {
+!    DISPATCH(ConvolutionParameteriv, (target, pname, params), (F, "glConvolutionParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(CopyConvolutionFilter1DEXT)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width)
+  {
+!    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(CopyConvolutionFilter2DEXT)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height)
+  {
+!    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(GetConvolutionFilterEXT)(GLenum target, GLenum format, GLenum type, GLvoid * image)
+  {
+!    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(GetConvolutionParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params)
+  {
+!    DISPATCH(GetConvolutionParameterfvEXT, (target, pname, params), (F, "glGetConvolutionParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetConvolutionParameterivEXT)(GLenum target, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetConvolutionParameterivEXT, (target, pname, params), (F, "glGetConvolutionParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetSeparableFilterEXT)(GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span)
+  {
+!    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(SeparableFilter2DEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * row, const GLvoid * column)
+  {
+!    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(ColorTableSGI)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * table)
+  {
+!    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(ColorTableParameterfvSGI)(GLenum target, GLenum pname, const GLfloat * params)
+  {
+!    DISPATCH(ColorTableParameterfv, (target, pname, params), (F, "glColorTableParameterfvSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ColorTableParameterivSGI)(GLenum target, GLenum pname, const GLint * params)
+  {
+!    DISPATCH(ColorTableParameteriv, (target, pname, params), (F, "glColorTableParameterivSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(CopyColorTableSGI)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width)
+  {
+!    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(GetColorTableSGI)(GLenum target, GLenum format, GLenum type, GLvoid * table)
+  {
+!    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(GetColorTableParameterfvSGI)(GLenum target, GLenum pname, GLfloat * params)
+  {
+!    DISPATCH(GetColorTableParameterfvSGI, (target, pname, params), (F, "glGetColorTableParameterfvSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetColorTableParameterivSGI)(GLenum target, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetColorTableParameterivSGI, (target, pname, params), (F, "glGetColorTableParameterivSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(PixelTexGenSGIX)(GLenum mode)
+  {
+!    DISPATCH(PixelTexGenSGIX, (mode), (F, "glPixelTexGenSGIX(0x%x);\n", mode));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(PixelTexGenParameteriSGIS)(GLenum pname, GLint param)
+  {
+!    DISPATCH(PixelTexGenParameteriSGIS, (pname, param), (F, "glPixelTexGenParameteriSGIS(0x%x, %d);\n", pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(PixelTexGenParameterivSGIS)(GLenum pname, const GLint * params)
+  {
+!    DISPATCH(PixelTexGenParameterivSGIS, (pname, params), (F, "glPixelTexGenParameterivSGIS(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(PixelTexGenParameterfSGIS)(GLenum pname, GLfloat param)
+  {
+!    DISPATCH(PixelTexGenParameterfSGIS, (pname, param), (F, "glPixelTexGenParameterfSGIS(0x%x, %f);\n", pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(PixelTexGenParameterfvSGIS)(GLenum pname, const GLfloat * params)
+  {
+!    DISPATCH(PixelTexGenParameterfvSGIS, (pname, params), (F, "glPixelTexGenParameterfvSGIS(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetPixelTexGenParameterivSGIS)(GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetPixelTexGenParameterivSGIS, (pname, params), (F, "glGetPixelTexGenParameterivSGIS(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetPixelTexGenParameterfvSGIS)(GLenum pname, GLfloat * params)
+  {
+!    DISPATCH(GetPixelTexGenParameterfvSGIS, (pname, params), (F, "glGetPixelTexGenParameterfvSGIS(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! 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(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(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(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 GLboolean KEYWORD2 NAME(AreTexturesResidentEXT)(GLsizei n, const GLuint * textures, GLboolean * residences)
+  {
+!    RETURN_DISPATCH(AreTexturesResidentEXT, (n, textures, residences), (F, "glAreTexturesResidentEXT(%d, %p, %p);\n", n, (const void *) textures, (const void *) residences));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(BindTextureEXT)(GLenum target, GLuint texture)
+  {
+!    DISPATCH(BindTexture, (target, texture), (F, "glBindTextureEXT(0x%x, %d);\n", target, texture));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(DeleteTexturesEXT)(GLsizei n, const GLuint * textures)
+  {
+!    DISPATCH(DeleteTextures, (n, textures), (F, "glDeleteTexturesEXT(%d, %p);\n", n, (const void *) textures));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GenTexturesEXT)(GLsizei n, GLuint * textures)
+  {
+!    DISPATCH(GenTexturesEXT, (n, textures), (F, "glGenTexturesEXT(%d, %p);\n", n, (const void *) textures));
+  }
+  
+! KEYWORD1 GLboolean KEYWORD2 NAME(IsTextureEXT)(GLuint texture)
+  {
+!    RETURN_DISPATCH(IsTextureEXT, (texture), (F, "glIsTextureEXT(%d);\n", texture));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(PrioritizeTexturesEXT)(GLsizei n, const GLuint * textures, const GLclampf * priorities)
+  {
+!    DISPATCH(PrioritizeTextures, (n, textures, priorities), (F, "glPrioritizeTexturesEXT(%d, %p, %p);\n", n, (const void *) textures, (const void *) priorities));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(DetailTexFuncSGIS)(GLenum target, GLsizei n, const GLfloat * points)
+  {
+!    DISPATCH(DetailTexFuncSGIS, (target, n, points), (F, "glDetailTexFuncSGIS(0x%x, %d, %p);\n", target, n, (const void *) points));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetDetailTexFuncSGIS)(GLenum target, GLfloat * points)
+  {
+!    DISPATCH(GetDetailTexFuncSGIS, (target, points), (F, "glGetDetailTexFuncSGIS(0x%x, %p);\n", target, (const void *) points));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SharpenTexFuncSGIS)(GLenum target, GLsizei n, const GLfloat * points)
+  {
+!    DISPATCH(SharpenTexFuncSGIS, (target, n, points), (F, "glSharpenTexFuncSGIS(0x%x, %d, %p);\n", target, n, (const void *) points));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetSharpenTexFuncSGIS)(GLenum target, GLfloat * points)
+  {
+!    DISPATCH(GetSharpenTexFuncSGIS, (target, points), (F, "glGetSharpenTexFuncSGIS(0x%x, %p);\n", target, (const void *) points));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SampleMaskSGIS)(GLclampf value, GLboolean invert)
+  {
+!    DISPATCH(SampleMaskSGIS, (value, invert), (F, "glSampleMaskSGIS(%f, %d);\n", value, invert));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SamplePatternSGIS)(GLenum pattern)
+  {
+!    DISPATCH(SamplePatternSGIS, (pattern), (F, "glSamplePatternSGIS(0x%x);\n", pattern));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ArrayElementEXT)(GLint i)
+  {
+!    DISPATCH(ArrayElement, (i), (F, "glArrayElementEXT(%d);\n", i));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ColorPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer)
+  {
+!    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(DrawArraysEXT)(GLenum mode, GLint first, GLsizei count)
+  {
+!    DISPATCH(DrawArrays, (mode, first, count), (F, "glDrawArraysEXT(0x%x, %d, %d);\n", mode, first, count));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(EdgeFlagPointerEXT)(GLsizei stride, GLsizei count, const GLboolean * pointer)
+  {
+!    DISPATCH(EdgeFlagPointerEXT, (stride, count, pointer), (F, "glEdgeFlagPointerEXT(%d, %d, %p);\n", stride, count, (const void *) pointer));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetPointervEXT)(GLenum pname, GLvoid ** params)
+  {
+!    DISPATCH(GetPointerv, (pname, params), (F, "glGetPointervEXT(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(IndexPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer)
+  {
+!    DISPATCH(IndexPointerEXT, (type, stride, count, pointer), (F, "glIndexPointerEXT(0x%x, %d, %d, %p);\n", type, stride, count, (const void *) pointer));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(NormalPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer)
+  {
+!    DISPATCH(NormalPointerEXT, (type, stride, count, pointer), (F, "glNormalPointerEXT(0x%x, %d, %d, %p);\n", type, stride, count, (const void *) pointer));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(TexCoordPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer)
+  {
+!    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(VertexPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer)
+  {
+!    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(BlendEquationEXT)(GLenum mode)
+  {
+!    DISPATCH(BlendEquation, (mode), (F, "glBlendEquationEXT(0x%x);\n", mode));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SpriteParameterfSGIX)(GLenum pname, GLfloat param)
+  {
+!    DISPATCH(SpriteParameterfSGIX, (pname, param), (F, "glSpriteParameterfSGIX(0x%x, %f);\n", pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SpriteParameterfvSGIX)(GLenum pname, const GLfloat * params)
+  {
+!    DISPATCH(SpriteParameterfvSGIX, (pname, params), (F, "glSpriteParameterfvSGIX(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SpriteParameteriSGIX)(GLenum pname, GLint param)
+  {
+!    DISPATCH(SpriteParameteriSGIX, (pname, param), (F, "glSpriteParameteriSGIX(0x%x, %d);\n", pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SpriteParameterivSGIX)(GLenum pname, const GLint * params)
+  {
+!    DISPATCH(SpriteParameterivSGIX, (pname, params), (F, "glSpriteParameterivSGIX(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(PointParameterfEXT)(GLenum pname, GLfloat param)
+  {
+!    DISPATCH(PointParameterfEXT, (pname, param), (F, "glPointParameterfEXT(0x%x, %f);\n", pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(PointParameterfvEXT)(GLenum pname, const GLfloat * params)
+  {
+!    DISPATCH(PointParameterfvEXT, (pname, params), (F, "glPointParameterfvEXT(0x%x, %p);\n", 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(PointParameterfSGIS)(GLenum pname, GLfloat param)
+  {
+!    DISPATCH(PointParameterfEXT, (pname, param), (F, "glPointParameterfSGIS(0x%x, %f);\n", pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(PointParameterfvSGIS)(GLenum pname, const GLfloat * params)
+  {
+!    DISPATCH(PointParameterfvEXT, (pname, params), (F, "glPointParameterfvSGIS(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! KEYWORD1 GLint KEYWORD2 NAME(GetInstrumentsSGIX)(void)
+  {
+!    RETURN_DISPATCH(GetInstrumentsSGIX, (), (F, "glGetInstrumentsSGIX();\n"));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(InstrumentsBufferSGIX)(GLsizei size, GLint * buffer)
+  {
+!    DISPATCH(InstrumentsBufferSGIX, (size, buffer), (F, "glInstrumentsBufferSGIX(%d, %p);\n", size, (const void *) buffer));
+  }
+  
+! KEYWORD1 GLint KEYWORD2 NAME(PollInstrumentsSGIX)(GLint * marker_p)
+  {
+!    RETURN_DISPATCH(PollInstrumentsSGIX, (marker_p), (F, "glPollInstrumentsSGIX(%p);\n", (const void *) marker_p));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ReadInstrumentsSGIX)(GLint marker)
+  {
+!    DISPATCH(ReadInstrumentsSGIX, (marker), (F, "glReadInstrumentsSGIX(%d);\n", marker));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(StartInstrumentsSGIX)(void)
+  {
+!    DISPATCH(StartInstrumentsSGIX, (), (F, "glStartInstrumentsSGIX();\n"));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(StopInstrumentsSGIX)(GLint marker)
+  {
+!    DISPATCH(StopInstrumentsSGIX, (marker), (F, "glStopInstrumentsSGIX(%d);\n", marker));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FrameZoomSGIX)(GLint factor)
+  {
+!    DISPATCH(FrameZoomSGIX, (factor), (F, "glFrameZoomSGIX(%d);\n", factor));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(TagSampleBufferSGIX)(void)
+  {
+!    DISPATCH(TagSampleBufferSGIX, (), (F, "glTagSampleBufferSGIX();\n"));
+  }
+  
+! /* No dispatch for DeformationMap3dSGIX() */
+! /* No dispatch for DeformationMap3fSGIX() */
+! /* No dispatch for DeformSGIX() */
+! /* No dispatch for LoadIdentityDeformationMapSGIX() */
+! KEYWORD1 void KEYWORD2 NAME(ReferencePlaneSGIX)(const GLdouble * equation)
+  {
+!    DISPATCH(ReferencePlaneSGIX, (equation), (F, "glReferencePlaneSGIX(%p);\n", (const void *) equation));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FlushRasterSGIX)(void)
+  {
+!    DISPATCH(FlushRasterSGIX, (), (F, "glFlushRasterSGIX();\n"));
+  }
+  
+! /* 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)
+  {
+!    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(CopyColorSubTableEXT)(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width)
+  {
+!    DISPATCH(CopyColorSubTable, (target, start, x, y, width), (F, "glCopyColorSubTableEXT(0x%x, %d, %d, %d, %d);\n", target, start, x, y, width));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(HintPGI)(GLenum target, GLint mode)
+  {
+!    DISPATCH(HintPGI, (target, mode), (F, "glHintPGI(0x%x, %d);\n", target, mode));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ColorTableEXT)(GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid * table)
+  {
+!    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(GetColorTableEXT)(GLenum target, GLenum format, GLenum type, GLvoid * data)
+  {
+!    DISPATCH(GetColorTableEXT, (target, format, type, data), (F, "glGetColorTableEXT(0x%x, 0x%x, 0x%x, %p);\n", target, format, type, (const void *) data));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetColorTableParameterivEXT)(GLenum target, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetColorTableParameterivEXT, (target, pname, params), (F, "glGetColorTableParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetColorTableParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params)
+  {
+!    DISPATCH(GetColorTableParameterfvEXT, (target, pname, params), (F, "glGetColorTableParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetListParameterfvSGIX)(GLuint list, GLenum pname, GLfloat * params)
+  {
+!    DISPATCH(GetListParameterfvSGIX, (list, pname, params), (F, "glGetListParameterfvSGIX(%d, 0x%x, %p);\n", list, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetListParameterivSGIX)(GLuint list, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetListParameterivSGIX, (list, pname, params), (F, "glGetListParameterivSGIX(%d, 0x%x, %p);\n", list, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ListParameterfSGIX)(GLuint list, GLenum pname, GLfloat param)
+  {
+!    DISPATCH(ListParameterfSGIX, (list, pname, param), (F, "glListParameterfSGIX(%d, 0x%x, %f);\n", list, pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ListParameterfvSGIX)(GLuint list, GLenum pname, const GLfloat * params)
+  {
+!    DISPATCH(ListParameterfvSGIX, (list, pname, params), (F, "glListParameterfvSGIX(%d, 0x%x, %p);\n", list, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ListParameteriSGIX)(GLuint list, GLenum pname, GLint param)
+  {
+!    DISPATCH(ListParameteriSGIX, (list, pname, param), (F, "glListParameteriSGIX(%d, 0x%x, %d);\n", list, pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ListParameterivSGIX)(GLuint list, GLenum pname, const GLint * params)
+  {
+!    DISPATCH(ListParameterivSGIX, (list, pname, params), (F, "glListParameterivSGIX(%d, 0x%x, %p);\n", list, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(IndexMaterialEXT)(GLenum face, GLenum mode)
+  {
+!    DISPATCH(IndexMaterialEXT, (face, mode), (F, "glIndexMaterialEXT(0x%x, 0x%x);\n", face, mode));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(IndexFuncEXT)(GLenum func, GLclampf ref)
+  {
+!    DISPATCH(IndexFuncEXT, (func, ref), (F, "glIndexFuncEXT(0x%x, %f);\n", func, ref));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(LockArraysEXT)(GLint first, GLsizei count)
+  {
+!    DISPATCH(LockArraysEXT, (first, count), (F, "glLockArraysEXT(%d, %d);\n", first, count));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(UnlockArraysEXT)(void)
+  {
+!    DISPATCH(UnlockArraysEXT, (), (F, "glUnlockArraysEXT();\n"));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(CullParameterdvEXT)(GLenum pname, GLdouble * params)
+  {
+!    DISPATCH(CullParameterdvEXT, (pname, params), (F, "glCullParameterdvEXT(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(CullParameterfvEXT)(GLenum pname, GLfloat * params)
+  {
+!    DISPATCH(CullParameterfvEXT, (pname, params), (F, "glCullParameterfvEXT(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FragmentColorMaterialSGIX)(GLenum face, GLenum mode)
+  {
+!    DISPATCH(FragmentColorMaterialSGIX, (face, mode), (F, "glFragmentColorMaterialSGIX(0x%x, 0x%x);\n", face, mode));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FragmentLightfSGIX)(GLenum light, GLenum pname, GLfloat param)
+  {
+!    DISPATCH(FragmentLightfSGIX, (light, pname, param), (F, "glFragmentLightfSGIX(0x%x, 0x%x, %f);\n", light, pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FragmentLightfvSGIX)(GLenum light, GLenum pname, const GLfloat * params)
+  {
+!    DISPATCH(FragmentLightfvSGIX, (light, pname, params), (F, "glFragmentLightfvSGIX(0x%x, 0x%x, %p);\n", light, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FragmentLightiSGIX)(GLenum light, GLenum pname, GLint param)
+  {
+!    DISPATCH(FragmentLightiSGIX, (light, pname, param), (F, "glFragmentLightiSGIX(0x%x, 0x%x, %d);\n", light, pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FragmentLightivSGIX)(GLenum light, GLenum pname, const GLint * params)
+  {
+!    DISPATCH(FragmentLightivSGIX, (light, pname, params), (F, "glFragmentLightivSGIX(0x%x, 0x%x, %p);\n", light, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FragmentLightModelfSGIX)(GLenum pname, GLfloat param)
+  {
+!    DISPATCH(FragmentLightModelfSGIX, (pname, param), (F, "glFragmentLightModelfSGIX(0x%x, %f);\n", pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FragmentLightModelfvSGIX)(GLenum pname, const GLfloat * params)
+  {
+!    DISPATCH(FragmentLightModelfvSGIX, (pname, params), (F, "glFragmentLightModelfvSGIX(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FragmentLightModeliSGIX)(GLenum pname, GLint param)
+  {
+!    DISPATCH(FragmentLightModeliSGIX, (pname, param), (F, "glFragmentLightModeliSGIX(0x%x, %d);\n", pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FragmentLightModelivSGIX)(GLenum pname, const GLint * params)
+  {
+!    DISPATCH(FragmentLightModelivSGIX, (pname, params), (F, "glFragmentLightModelivSGIX(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FragmentMaterialfSGIX)(GLenum face, GLenum pname, GLfloat param)
+  {
+!    DISPATCH(FragmentMaterialfSGIX, (face, pname, param), (F, "glFragmentMaterialfSGIX(0x%x, 0x%x, %f);\n", face, pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FragmentMaterialfvSGIX)(GLenum face, GLenum pname, const GLfloat * params)
+  {
+!    DISPATCH(FragmentMaterialfvSGIX, (face, pname, params), (F, "glFragmentMaterialfvSGIX(0x%x, 0x%x, %p);\n", face, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FragmentMaterialiSGIX)(GLenum face, GLenum pname, GLint param)
+  {
+!    DISPATCH(FragmentMaterialiSGIX, (face, pname, param), (F, "glFragmentMaterialiSGIX(0x%x, 0x%x, %d);\n", face, pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FragmentMaterialivSGIX)(GLenum face, GLenum pname, const GLint * params)
+  {
+!    DISPATCH(FragmentMaterialivSGIX, (face, pname, params), (F, "glFragmentMaterialivSGIX(0x%x, 0x%x, %p);\n", face, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetFragmentLightfvSGIX)(GLenum light, GLenum pname, GLfloat * params)
+  {
+!    DISPATCH(GetFragmentLightfvSGIX, (light, pname, params), (F, "glGetFragmentLightfvSGIX(0x%x, 0x%x, %p);\n", light, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetFragmentLightivSGIX)(GLenum light, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetFragmentLightivSGIX, (light, pname, params), (F, "glGetFragmentLightivSGIX(0x%x, 0x%x, %p);\n", light, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetFragmentMaterialfvSGIX)(GLenum face, GLenum pname, GLfloat * params)
+  {
+!    DISPATCH(GetFragmentMaterialfvSGIX, (face, pname, params), (F, "glGetFragmentMaterialfvSGIX(0x%x, 0x%x, %p);\n", face, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetFragmentMaterialivSGIX)(GLenum face, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetFragmentMaterialivSGIX, (face, pname, params), (F, "glGetFragmentMaterialivSGIX(0x%x, 0x%x, %p);\n", face, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(LightEnviSGIX)(GLenum pname, GLint param)
+  {
+!    DISPATCH(LightEnviSGIX, (pname, param), (F, "glLightEnviSGIX(0x%x, %d);\n", pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(DrawRangeElementsEXT)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices)
+  {
+!    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));
+  }
+  
+! /* 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)
+  {
+!    DISPATCH(SecondaryColor3bEXT, (red, green, blue), (F, "glSecondaryColor3bEXT(%d, %d, %d);\n", red, green, blue));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3bvEXT)(const GLbyte * v)
+  {
+!    DISPATCH(SecondaryColor3bvEXT, (v), (F, "glSecondaryColor3bvEXT(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3dEXT)(GLdouble red, GLdouble green, GLdouble blue)
+  {
+!    DISPATCH(SecondaryColor3dEXT, (red, green, blue), (F, "glSecondaryColor3dEXT(%f, %f, %f);\n", red, green, blue));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3dvEXT)(const GLdouble * v)
+  {
+!    DISPATCH(SecondaryColor3dvEXT, (v), (F, "glSecondaryColor3dvEXT(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3fEXT)(GLfloat red, GLfloat green, GLfloat blue)
+  {
+!    DISPATCH(SecondaryColor3fEXT, (red, green, blue), (F, "glSecondaryColor3fEXT(%f, %f, %f);\n", red, green, blue));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3fvEXT)(const GLfloat * v)
+  {
+!    DISPATCH(SecondaryColor3fvEXT, (v), (F, "glSecondaryColor3fvEXT(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3iEXT)(GLint red, GLint green, GLint blue)
+  {
+!    DISPATCH(SecondaryColor3iEXT, (red, green, blue), (F, "glSecondaryColor3iEXT(%d, %d, %d);\n", red, green, blue));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3ivEXT)(const GLint * v)
+  {
+!    DISPATCH(SecondaryColor3ivEXT, (v), (F, "glSecondaryColor3ivEXT(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3sEXT)(GLshort red, GLshort green, GLshort blue)
+  {
+!    DISPATCH(SecondaryColor3sEXT, (red, green, blue), (F, "glSecondaryColor3sEXT(%d, %d, %d);\n", red, green, blue));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3svEXT)(const GLshort * v)
+  {
+!    DISPATCH(SecondaryColor3svEXT, (v), (F, "glSecondaryColor3svEXT(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3ubEXT)(GLubyte red, GLubyte green, GLubyte blue)
+  {
+!    DISPATCH(SecondaryColor3ubEXT, (red, green, blue), (F, "glSecondaryColor3ubEXT(%d, %d, %d);\n", red, green, blue));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3ubvEXT)(const GLubyte * v)
+  {
+!    DISPATCH(SecondaryColor3ubvEXT, (v), (F, "glSecondaryColor3ubvEXT(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3uiEXT)(GLuint red, GLuint green, GLuint blue)
+  {
+!    DISPATCH(SecondaryColor3uiEXT, (red, green, blue), (F, "glSecondaryColor3uiEXT(%d, %d, %d);\n", red, green, blue));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3uivEXT)(const GLuint * v)
+  {
+!    DISPATCH(SecondaryColor3uivEXT, (v), (F, "glSecondaryColor3uivEXT(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3usEXT)(GLushort red, GLushort green, GLushort blue)
+  {
+!    DISPATCH(SecondaryColor3usEXT, (red, green, blue), (F, "glSecondaryColor3usEXT(%d, %d, %d);\n", red, green, blue));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3usvEXT)(const GLushort * v)
+  {
+!    DISPATCH(SecondaryColor3usvEXT, (v), (F, "glSecondaryColor3usvEXT(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColorPointerEXT)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer)
+  {
+!    DISPATCH(SecondaryColorPointerEXT, (size, type, stride, pointer), (F, "glSecondaryColorPointerEXT(%d, 0x%x, %d, %p);\n", size, type, stride, (const void *) pointer));
+  }
+  
+! /* No dispatch for TextureNormalEXT() */
+! KEYWORD1 void KEYWORD2 NAME(MultiDrawArraysEXT)(GLenum mode, GLint * first, GLsizei * count, GLsizei primcount)
+  {
+!    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(MultiDrawElementsEXT)(GLenum mode, const GLsizei * count, GLenum type, const GLvoid ** indices, GLsizei primcount)
+  {
+!    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(FogCoordfEXT)(GLfloat coord)
+  {
+!    DISPATCH(FogCoordfEXT, (coord), (F, "glFogCoordfEXT(%f);\n", coord));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FogCoordfvEXT)(const GLfloat * coord)
+  {
+!    DISPATCH(FogCoordfvEXT, (coord), (F, "glFogCoordfvEXT(%p);\n", (const void *) coord));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FogCoorddEXT)(GLdouble coord)
+  {
+!    DISPATCH(FogCoorddEXT, (coord), (F, "glFogCoorddEXT(%f);\n", coord));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FogCoorddvEXT)(const GLdouble * coord)
+  {
+!    DISPATCH(FogCoorddvEXT, (coord), (F, "glFogCoorddvEXT(%p);\n", (const void *) coord));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FogCoordPointerEXT)(GLenum type, GLsizei stride, const GLvoid * pointer)
+  {
+!    DISPATCH(FogCoordPointerEXT, (type, stride, pointer), (F, "glFogCoordPointerEXT(0x%x, %d, %p);\n", type, stride, (const void *) pointer));
+  }
+  
+! /* 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)
+  {
+!    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(BlendFuncSeparateINGR)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
+  {
+!    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(VertexWeightfEXT)(GLfloat weight)
+  {
+!    DISPATCH(VertexWeightfEXT, (weight), (F, "glVertexWeightfEXT(%f);\n", weight));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexWeightfvEXT)(const GLfloat * weight)
+  {
+!    DISPATCH(VertexWeightfvEXT, (weight), (F, "glVertexWeightfvEXT(%p);\n", (const void *) weight));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexWeightPointerEXT)(GLsizei size, GLenum type, GLsizei stride, const GLvoid * pointer)
+  {
+!    DISPATCH(VertexWeightPointerEXT, (size, type, stride, pointer), (F, "glVertexWeightPointerEXT(%d, 0x%x, %d, %p);\n", size, type, stride, (const void *) pointer));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FlushVertexArrayRangeNV)(void)
+  {
+!    DISPATCH(FlushVertexArrayRangeNV, (), (F, "glFlushVertexArrayRangeNV();\n"));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexArrayRangeNV)(GLsizei length, const GLvoid * pointer)
+  {
+!    DISPATCH(VertexArrayRangeNV, (length, pointer), (F, "glVertexArrayRangeNV(%d, %p);\n", length, (const void *) pointer));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(CombinerParameterfvNV)(GLenum pname, const GLfloat * params)
+  {
+!    DISPATCH(CombinerParameterfvNV, (pname, params), (F, "glCombinerParameterfvNV(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(CombinerParameterfNV)(GLenum pname, GLfloat param)
+  {
+!    DISPATCH(CombinerParameterfNV, (pname, param), (F, "glCombinerParameterfNV(0x%x, %f);\n", pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(CombinerParameterivNV)(GLenum pname, const GLint * params)
+  {
+!    DISPATCH(CombinerParameterivNV, (pname, params), (F, "glCombinerParameterivNV(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(CombinerParameteriNV)(GLenum pname, GLint param)
+  {
+!    DISPATCH(CombinerParameteriNV, (pname, param), (F, "glCombinerParameteriNV(0x%x, %d);\n", pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(CombinerInputNV)(GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage)
+  {
+!    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(CombinerOutputNV)(GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum)
+  {
+!    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(FinalCombinerInputNV)(GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage)
+  {
+!    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(GetCombinerInputParameterfvNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat * params)
+  {
+!    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(GetCombinerInputParameterivNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint * params)
+  {
+!    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(GetCombinerOutputParameterfvNV)(GLenum stage, GLenum portion, GLenum pname, GLfloat * 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(GetCombinerOutputParameterivNV)(GLenum stage, GLenum portion, 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));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetFinalCombinerInputParameterfvNV)(GLenum variable, GLenum pname, GLfloat * params)
+  {
+!    DISPATCH(GetFinalCombinerInputParameterfvNV, (variable, pname, params), (F, "glGetFinalCombinerInputParameterfvNV(0x%x, 0x%x, %p);\n", variable, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetFinalCombinerInputParameterivNV)(GLenum variable, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetFinalCombinerInputParameterivNV, (variable, pname, params), (F, "glGetFinalCombinerInputParameterivNV(0x%x, 0x%x, %p);\n", variable, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ResizeBuffersMESA)(void)
+  {
+!    DISPATCH(ResizeBuffersMESA, (), (F, "glResizeBuffersMESA();\n"));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos2dMESA)(GLdouble x, GLdouble y)
+  {
+!    DISPATCH(WindowPos2dMESA, (x, y), (F, "glWindowPos2dMESA(%f, %f);\n", x, y));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos2dvMESA)(const GLdouble * v)
+  {
+!    DISPATCH(WindowPos2dvMESA, (v), (F, "glWindowPos2dvMESA(%p /* %g, %g */);\n", (const void *) v, v[0], v[1]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos2fMESA)(GLfloat x, GLfloat y)
+  {
+!    DISPATCH(WindowPos2fMESA, (x, y), (F, "glWindowPos2fMESA(%f, %f);\n", x, y));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos2fvMESA)(const GLfloat * v)
+  {
+!    DISPATCH(WindowPos2fvMESA, (v), (F, "glWindowPos2fvMESA(%p /* %g, %g */);\n", (const void *) v, v[0], v[1]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos2iMESA)(GLint x, GLint y)
+  {
+!    DISPATCH(WindowPos2iMESA, (x, y), (F, "glWindowPos2iMESA(%d, %d);\n", x, y));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos2ivMESA)(const GLint * v)
+  {
+!    DISPATCH(WindowPos2ivMESA, (v), (F, "glWindowPos2ivMESA(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos2sMESA)(GLshort x, GLshort y)
+  {
+!    DISPATCH(WindowPos2sMESA, (x, y), (F, "glWindowPos2sMESA(%d, %d);\n", x, y));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos2svMESA)(const GLshort * v)
+  {
+!    DISPATCH(WindowPos2svMESA, (v), (F, "glWindowPos2svMESA(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3dMESA)(GLdouble x, GLdouble y, GLdouble z)
+  {
+!    DISPATCH(WindowPos3dMESA, (x, y, z), (F, "glWindowPos3dMESA(%f, %f, %f);\n", x, y, z));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3dvMESA)(const GLdouble * v)
+  {
+!    DISPATCH(WindowPos3dvMESA, (v), (F, "glWindowPos3dvMESA(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3fMESA)(GLfloat x, GLfloat y, GLfloat z)
+  {
+!    DISPATCH(WindowPos3fMESA, (x, y, z), (F, "glWindowPos3fMESA(%f, %f, %f);\n", x, y, z));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3fvMESA)(const GLfloat * v)
+  {
+!    DISPATCH(WindowPos3fvMESA, (v), (F, "glWindowPos3fvMESA(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3iMESA)(GLint x, GLint y, GLint z)
+  {
+!    DISPATCH(WindowPos3iMESA, (x, y, z), (F, "glWindowPos3iMESA(%d, %d, %d);\n", x, y, z));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3ivMESA)(const GLint * v)
+  {
+!    DISPATCH(WindowPos3ivMESA, (v), (F, "glWindowPos3ivMESA(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3sMESA)(GLshort x, GLshort y, GLshort z)
+  {
+!    DISPATCH(WindowPos3sMESA, (x, y, z), (F, "glWindowPos3sMESA(%d, %d, %d);\n", x, y, z));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3svMESA)(const GLshort * v)
+  {
+!    DISPATCH(WindowPos3svMESA, (v), (F, "glWindowPos3svMESA(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos4dMESA)(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+  {
+!    DISPATCH(WindowPos4dMESA, (x, y, z, w), (F, "glWindowPos4dMESA(%f, %f, %f, %f);\n", x, y, z, w));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos4dvMESA)(const GLdouble * v)
+  {
+!    DISPATCH(WindowPos4dvMESA, (v), (F, "glWindowPos4dvMESA(%p /* %g, %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2], v[3]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos4fMESA)(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+  {
+!    DISPATCH(WindowPos4fMESA, (x, y, z, w), (F, "glWindowPos4fMESA(%f, %f, %f, %f);\n", x, y, z, w));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos4fvMESA)(const GLfloat * v)
+  {
+!    DISPATCH(WindowPos4fvMESA, (v), (F, "glWindowPos4fvMESA(%p /* %g, %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2], v[3]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos4iMESA)(GLint x, GLint y, GLint z, GLint w)
+  {
+!    DISPATCH(WindowPos4iMESA, (x, y, z, w), (F, "glWindowPos4iMESA(%d, %d, %d, %d);\n", x, y, z, w));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos4ivMESA)(const GLint * v)
+  {
+!    DISPATCH(WindowPos4ivMESA, (v), (F, "glWindowPos4ivMESA(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos4sMESA)(GLshort x, GLshort y, GLshort z, GLshort w)
+  {
+!    DISPATCH(WindowPos4sMESA, (x, y, z, w), (F, "glWindowPos4sMESA(%d, %d, %d, %d);\n", x, y, z, w));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos4svMESA)(const GLshort * v)
+  {
+!    DISPATCH(WindowPos4svMESA, (v), (F, "glWindowPos4svMESA(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiModeDrawArraysIBM)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride)
+  {
+!    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(MultiModeDrawElementsIBM)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride)
+  {
+!    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));
+  }
+  
+! /* 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)
+  {
+!    DISPATCH(TbufferMask3DFX, (mask), (F, "glTbufferMask3DFX(%d);\n", mask));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SampleMaskEXT)(GLclampf value, GLboolean invert)
+  {
+!    DISPATCH(SampleMaskSGIS, (value, invert), (F, "glSampleMaskEXT(%f, %d);\n", value, invert));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SamplePatternEXT)(GLenum pattern)
+  {
+!    DISPATCH(SamplePatternSGIS, (pattern), (F, "glSamplePatternEXT(0x%x);\n", pattern));
+  }
+  
+! /* 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)
+  {
+!    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 /* %g, %g */);\n", (const void *) p, p[0], p[1]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos2fvARB)(const GLfloat * p)
+  {
+!    DISPATCH(WindowPos2fvMESA, (p), (F, "glWindowPos2fvARB(%p /* %g, %g */);\n", (const void *) p, p[0], p[1]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos2ivARB)(const GLint * p)
+  {
+!    DISPATCH(WindowPos2ivMESA, (p), (F, "glWindowPos2ivARB(%p);\n", (const void *) p));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos2svARB)(const GLshort * p)
+  {
+!    DISPATCH(WindowPos2svMESA, (p), (F, "glWindowPos2svARB(%p);\n", (const void *) p));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3dARB)(GLdouble x, GLdouble y, GLdouble z)
+  {
+!    DISPATCH(WindowPos3dMESA, (x, y, z), (F, "glWindowPos3dARB(%f, %f, %f);\n", x, y, z));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3fARB)(GLfloat x, GLfloat y, GLfloat z)
+  {
+!    DISPATCH(WindowPos3fMESA, (x, y, z), (F, "glWindowPos3fARB(%f, %f, %f);\n", x, y, z));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3iARB)(GLint x, GLint y, GLint z)
+  {
+!    DISPATCH(WindowPos3iMESA, (x, y, z), (F, "glWindowPos3iARB(%d, %d, %d);\n", x, y, z));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3sARB)(GLshort x, GLshort y, GLshort z)
+  {
+!    DISPATCH(WindowPos3sMESA, (x, y, z), (F, "glWindowPos3sARB(%d, %d, %d);\n", x, y, z));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3dvARB)(const GLdouble * p)
+  {
+!    DISPATCH(WindowPos3dvMESA, (p), (F, "glWindowPos3dvARB(%p /* %g, %g, %g */);\n", (const void *) p, p[0], p[1], p[2]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3fvARB)(const GLfloat * p)
+  {
+!    DISPATCH(WindowPos3fvMESA, (p), (F, "glWindowPos3fvARB(%p /* %g, %g, %g */);\n", (const void *) p, p[0], p[1], p[2]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3ivARB)(const GLint * p)
+  {
+!    DISPATCH(WindowPos3ivMESA, (p), (F, "glWindowPos3ivARB(%p);\n", (const void *) p));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3svARB)(const GLshort * p)
+  {
+!    DISPATCH(WindowPos3svMESA, (p), (F, "glWindowPos3svARB(%p);\n", (const void *) p));
+  }
+  
+! KEYWORD1 GLboolean KEYWORD2 NAME(AreProgramsResidentNV)(GLsizei n, const GLuint * ids, GLboolean * residences)
+  {
+!    RETURN_DISPATCH(AreProgramsResidentNV, (n, ids, residences), (F, "glAreProgramsResidentNV(%d, %p, %p);\n", n, (const void *) ids, (const void *) residences));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(BindProgramNV)(GLenum target, GLuint id)
+  {
+!    DISPATCH(BindProgramNV, (target, id), (F, "glBindProgramNV(0x%x, %d);\n", target, id));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(DeleteProgramsNV)(GLsizei n, const GLuint * ids)
+  {
+!    DISPATCH(DeleteProgramsNV, (n, ids), (F, "glDeleteProgramsNV(%d, %p);\n", n, (const void *) ids));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ExecuteProgramNV)(GLenum target, GLuint id, const GLfloat * params)
+  {
+!    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(GetProgramParameterfvNV)(GLenum target, GLuint index, GLenum pname, GLfloat * 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(GetProgramivNV)(GLuint id, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetProgramivNV, (id, pname, params), (F, "glGetProgramivNV(%d, 0x%x, %p);\n", id, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetProgramStringNV)(GLuint id, GLenum pname, GLubyte * program)
+  {
+!    DISPATCH(GetProgramStringNV, (id, pname, program), (F, "glGetProgramStringNV(%d, 0x%x, %p);\n", id, pname, (const void *) program));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetTrackMatrixivNV)(GLenum target, GLuint address, GLenum pname, GLint * params)
+  {
+!    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(GetVertexAttribdvNV)(GLuint index, GLenum pname, GLdouble * params)
+  {
+!    DISPATCH(GetVertexAttribdvNV, (index, pname, params), (F, "glGetVertexAttribdvNV(%d, 0x%x, %p);\n", index, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetVertexAttribfvNV)(GLuint index, GLenum pname, GLfloat * params)
+  {
+!    DISPATCH(GetVertexAttribfvNV, (index, pname, params), (F, "glGetVertexAttribfvNV(%d, 0x%x, %p);\n", index, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetVertexAttribivNV)(GLuint index, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetVertexAttribivNV, (index, pname, params), (F, "glGetVertexAttribivNV(%d, 0x%x, %p);\n", index, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetVertexAttribPointervNV)(GLuint index, GLenum pname, GLvoid ** pointer)
+  {
+!    DISPATCH(GetVertexAttribPointervNV, (index, pname, pointer), (F, "glGetVertexAttribPointervNV(%d, 0x%x, %p);\n", index, pname, (const void *) pointer));
+  }
+  
+! KEYWORD1 GLboolean KEYWORD2 NAME(IsProgramNV)(GLuint id)
+  {
+!    RETURN_DISPATCH(IsProgramNV, (id), (F, "glIsProgramNV(%d);\n", id));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(LoadProgramNV)(GLenum target, GLuint id, GLsizei len, const GLubyte * program)
+  {
+!    DISPATCH(LoadProgramNV, (target, id, len, program), (F, "glLoadProgramNV(0x%x, %d, %d, %p);\n", target, id, len, (const void *) program));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ProgramParameter4dNV)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+  {
+!    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(ProgramParameter4dvNV)(GLenum target, GLuint index, const GLdouble * params)
+  {
+!    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]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ProgramParameter4fNV)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+  {
+!    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(ProgramParameter4fvNV)(GLenum target, GLuint index, const GLfloat * params)
+  {
+!    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]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ProgramParameters4dvNV)(GLenum target, GLuint index, GLuint num, const GLdouble * params)
+  {
+!    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]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ProgramParameters4fvNV)(GLenum target, GLuint index, GLuint num, const GLfloat * params)
+  {
+!    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]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(RequestResidentProgramsNV)(GLsizei n, const GLuint * ids)
+  {
+!    DISPATCH(RequestResidentProgramsNV, (n, ids), (F, "glRequestResidentProgramsNV(%d, %p);\n", n, (const void *) ids));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(TrackMatrixNV)(GLenum target, GLuint address, GLenum matrix, GLenum transform)
+  {
+!    DISPATCH(TrackMatrixNV, (target, address, matrix, transform), (F, "glTrackMatrixNV(0x%x, %d, 0x%x, 0x%x);\n", target, address, matrix, transform));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttribPointerNV)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer)
+  {
+!    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(VertexAttrib1dNV)(GLuint index, GLdouble x)
+  {
+!    DISPATCH(VertexAttrib1dNV, (index, x), (F, "glVertexAttrib1dNV(%d, %f);\n", index, x));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib1dvNV)(GLuint index, const GLdouble * v)
+  {
+!    DISPATCH(VertexAttrib1dvNV, (index, v), (F, "glVertexAttrib1dvNV(%d, %p);\n", index, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib1fNV)(GLuint index, GLfloat x)
+  {
+!    DISPATCH(VertexAttrib1fNV, (index, x), (F, "glVertexAttrib1fNV(%d, %f);\n", index, x));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib1fvNV)(GLuint index, const GLfloat * v)
+  {
+!    DISPATCH(VertexAttrib1fvNV, (index, v), (F, "glVertexAttrib1fvNV(%d, %p);\n", index, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib1sNV)(GLuint index, GLshort x)
+  {
+!    DISPATCH(VertexAttrib1sNV, (index, x), (F, "glVertexAttrib1sNV(%d, %d);\n", index, x));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib1svNV)(GLuint index, const GLshort * v)
+  {
+!    DISPATCH(VertexAttrib1svNV, (index, v), (F, "glVertexAttrib1svNV(%d, %p);\n", index, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib2dNV)(GLuint index, GLdouble x, GLdouble y)
+  {
+!    DISPATCH(VertexAttrib2dNV, (index, x, y), (F, "glVertexAttrib2dNV(%d, %f, %f);\n", index, x, y));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib2dvNV)(GLuint index, const GLdouble * v)
+  {
+!    DISPATCH(VertexAttrib2dvNV, (index, v), (F, "glVertexAttrib2dvNV(%d, %p /* %g, %g */);\n", index, (const void *) v, v[0], v[1]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib2fNV)(GLuint index, GLfloat x, GLfloat y)
+  {
+!    DISPATCH(VertexAttrib2fNV, (index, x, y), (F, "glVertexAttrib2fNV(%d, %f, %f);\n", index, x, y));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib2fvNV)(GLuint index, const GLfloat * v)
+  {
+!    DISPATCH(VertexAttrib2fvNV, (index, v), (F, "glVertexAttrib2fvNV(%d, %p /* %g, %g */);\n", index, (const void *) v, v[0], v[1]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib2sNV)(GLuint index, GLshort x, GLshort y)
+  {
+!    DISPATCH(VertexAttrib2sNV, (index, x, y), (F, "glVertexAttrib2sNV(%d, %d, %d);\n", index, x, y));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib2svNV)(GLuint index, const GLshort * v)
+  {
+!    DISPATCH(VertexAttrib2svNV, (index, v), (F, "glVertexAttrib2svNV(%d, %p);\n", index, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib3dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z)
+  {
+!    DISPATCH(VertexAttrib3dNV, (index, x, y, z), (F, "glVertexAttrib3dNV(%d, %f, %f, %f);\n", index, x, y, z));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib3dvNV)(GLuint index, const GLdouble * v)
+  {
+!    DISPATCH(VertexAttrib3dvNV, (index, v), (F, "glVertexAttrib3dvNV(%d, %p /* %g, %g, %g */);\n", index, (const void *) v, v[0], v[1], v[2]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib3fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z)
+  {
+!    DISPATCH(VertexAttrib3fNV, (index, x, y, z), (F, "glVertexAttrib3fNV(%d, %f, %f, %f);\n", index, x, y, z));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib3fvNV)(GLuint index, const GLfloat * v)
+  {
+!    DISPATCH(VertexAttrib3fvNV, (index, v), (F, "glVertexAttrib3fvNV(%d, %p /* %g, %g, %g */);\n", index, (const void *) v, v[0], v[1], v[2]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib3sNV)(GLuint index, GLshort x, GLshort y, GLshort z)
+  {
+!    DISPATCH(VertexAttrib3sNV, (index, x, y, z), (F, "glVertexAttrib3sNV(%d, %d, %d, %d);\n", index, x, y, z));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib3svNV)(GLuint index, const GLshort * v)
+  {
+!    DISPATCH(VertexAttrib3svNV, (index, v), (F, "glVertexAttrib3svNV(%d, %p);\n", index, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib4dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+  {
+!    DISPATCH(VertexAttrib4dNV, (index, x, y, z, w), (F, "glVertexAttrib4dNV(%d, %f, %f, %f, %f);\n", index, x, y, z, w));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib4dvNV)(GLuint index, const GLdouble * v)
+  {
+!    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]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib4fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+  {
+!    DISPATCH(VertexAttrib4fNV, (index, x, y, z, w), (F, "glVertexAttrib4fNV(%d, %f, %f, %f, %f);\n", index, x, y, z, w));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib4fvNV)(GLuint index, const GLfloat * v)
+  {
+!    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]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib4sNV)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w)
+  {
+!    DISPATCH(VertexAttrib4sNV, (index, x, y, z, w), (F, "glVertexAttrib4sNV(%d, %d, %d, %d, %d);\n", index, x, y, z, w));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib4svNV)(GLuint index, const GLshort * v)
+  {
+!    DISPATCH(VertexAttrib4svNV, (index, v), (F, "glVertexAttrib4svNV(%d, %p);\n", index, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib4ubNV)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w)
+  {
+!    DISPATCH(VertexAttrib4ubNV, (index, x, y, z, w), (F, "glVertexAttrib4ubNV(%d, %d, %d, %d, %d);\n", index, x, y, z, w));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib4ubvNV)(GLuint index, const GLubyte * v)
+  {
+!    DISPATCH(VertexAttrib4ubvNV, (index, v), (F, "glVertexAttrib4ubvNV(%d, %p);\n", index, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttribs1dvNV)(GLuint index, GLsizei n, const GLdouble * v)
+  {
+!    DISPATCH(VertexAttribs1dvNV, (index, n, v), (F, "glVertexAttribs1dvNV(%d, %d, %p);\n", index, n, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttribs1fvNV)(GLuint index, GLsizei n, const GLfloat * v)
+  {
+!    DISPATCH(VertexAttribs1fvNV, (index, n, v), (F, "glVertexAttribs1fvNV(%d, %d, %p);\n", index, n, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttribs1svNV)(GLuint index, GLsizei n, const GLshort * v)
+  {
+!    DISPATCH(VertexAttribs1svNV, (index, n, v), (F, "glVertexAttribs1svNV(%d, %d, %p);\n", index, n, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttribs2dvNV)(GLuint index, GLsizei n, const GLdouble * v)
+  {
+!    DISPATCH(VertexAttribs2dvNV, (index, n, v), (F, "glVertexAttribs2dvNV(%d, %d, %p /* %g, %g */);\n", index, n, (const void *) v, v[0], v[1]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttribs2fvNV)(GLuint index, GLsizei n, const GLfloat * v)
+  {
+!    DISPATCH(VertexAttribs2fvNV, (index, n, v), (F, "glVertexAttribs2fvNV(%d, %d, %p /* %g, %g */);\n", index, n, (const void *) v, v[0], v[1]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttribs2svNV)(GLuint index, GLsizei n, const GLshort * v)
+  {
+!    DISPATCH(VertexAttribs2svNV, (index, n, v), (F, "glVertexAttribs2svNV(%d, %d, %p);\n", index, n, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttribs3dvNV)(GLuint index, GLsizei n, const GLdouble * v)
+  {
+!    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]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttribs3fvNV)(GLuint index, GLsizei n, const GLfloat * v)
+  {
+!    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]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttribs3svNV)(GLuint index, GLsizei n, const GLshort * v)
+  {
+!    DISPATCH(VertexAttribs3svNV, (index, n, v), (F, "glVertexAttribs3svNV(%d, %d, %p);\n", index, n, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttribs4dvNV)(GLuint index, GLsizei n, const GLdouble * v)
+  {
+!    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]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttribs4fvNV)(GLuint index, GLsizei n, const GLfloat * v)
+  {
+!    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]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttribs4svNV)(GLuint index, GLsizei n, const GLshort * v)
+  {
+!    DISPATCH(VertexAttribs4svNV, (index, n, v), (F, "glVertexAttribs4svNV(%d, %d, %p);\n", index, n, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttribs4ubvNV)(GLuint index, GLsizei n, const GLubyte * v)
+  {
+!    DISPATCH(VertexAttribs4ubvNV, (index, n, v), (F, "glVertexAttribs4ubvNV(%d, %d, %p);\n", index, n, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(PointParameteriNV)(GLenum pname, GLint params)
+  {
+!    DISPATCH(PointParameteriNV, (pname, params), (F, "glPointParameteriNV(0x%x, %d);\n", pname, params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(PointParameterivNV)(GLenum pname, const GLint * params)
+  {
+!    DISPATCH(PointParameterivNV, (pname, params), (F, "glPointParameterivNV(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(BlendFuncSeparate)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
+--- 2141,3859 ----
+     DISPATCH(__unused413, (), (F, "gl__unused413();\n"));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(PolygonOffsetEXT)(GLfloat factor, GLfloat bias)
+  {
+!    DISPATCH(PolygonOffsetEXT, (factor, bias), (F, "glPolygonOffsetEXT(%f, %f);\n", factor, bias));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetTexFilterFuncSGIS)(GLenum target, GLenum filter, GLfloat * weights)
+  {
+!    DISPATCH(GetTexFilterFuncSGIS, (target, filter, weights), (F, "glGetTexFilterFuncSGIS(0x%x, 0x%x, %p);\n", target, filter, (const void *) weights));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(TexFilterFuncSGIS)(GLenum target, GLenum filter, GLsizei n, const GLfloat * weights)
+  {
+!    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(GetHistogramEXT)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values)
+  {
+!    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(GetHistogramParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params)
+  {
+!    DISPATCH(GetHistogramParameterfvEXT, (target, pname, params), (F, "glGetHistogramParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetHistogramParameterivEXT)(GLenum target, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetHistogramParameterivEXT, (target, pname, params), (F, "glGetHistogramParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetMinmaxEXT)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values)
+  {
+!    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(GetMinmaxParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params)
+  {
+!    DISPATCH(GetMinmaxParameterfvEXT, (target, pname, params), (F, "glGetMinmaxParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetMinmaxParameterivEXT)(GLenum target, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetMinmaxParameterivEXT, (target, pname, params), (F, "glGetMinmaxParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetConvolutionFilterEXT)(GLenum target, GLenum format, GLenum type, GLvoid * image)
+  {
+!    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(GetConvolutionParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params)
+  {
+!    DISPATCH(GetConvolutionParameterfvEXT, (target, pname, params), (F, "glGetConvolutionParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetConvolutionParameterivEXT)(GLenum target, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetConvolutionParameterivEXT, (target, pname, params), (F, "glGetConvolutionParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetSeparableFilterEXT)(GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span)
+  {
+!    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(GetColorTableSGI)(GLenum target, GLenum format, GLenum type, GLvoid * table)
+  {
+!    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(GetColorTableParameterfvSGI)(GLenum target, GLenum pname, GLfloat * params)
+  {
+!    DISPATCH(GetColorTableParameterfvSGI, (target, pname, params), (F, "glGetColorTableParameterfvSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetColorTableParameterivSGI)(GLenum target, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetColorTableParameterivSGI, (target, pname, params), (F, "glGetColorTableParameterivSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(PixelTexGenSGIX)(GLenum mode)
+  {
+!    DISPATCH(PixelTexGenSGIX, (mode), (F, "glPixelTexGenSGIX(0x%x);\n", mode));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(PixelTexGenParameteriSGIS)(GLenum pname, GLint param)
+  {
+!    DISPATCH(PixelTexGenParameteriSGIS, (pname, param), (F, "glPixelTexGenParameteriSGIS(0x%x, %d);\n", pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(PixelTexGenParameterivSGIS)(GLenum pname, const GLint * params)
+  {
+!    DISPATCH(PixelTexGenParameterivSGIS, (pname, params), (F, "glPixelTexGenParameterivSGIS(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(PixelTexGenParameterfSGIS)(GLenum pname, GLfloat param)
+  {
+!    DISPATCH(PixelTexGenParameterfSGIS, (pname, param), (F, "glPixelTexGenParameterfSGIS(0x%x, %f);\n", pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(PixelTexGenParameterfvSGIS)(GLenum pname, const GLfloat * params)
+  {
+!    DISPATCH(PixelTexGenParameterfvSGIS, (pname, params), (F, "glPixelTexGenParameterfvSGIS(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetPixelTexGenParameterivSGIS)(GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetPixelTexGenParameterivSGIS, (pname, params), (F, "glGetPixelTexGenParameterivSGIS(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetPixelTexGenParameterfvSGIS)(GLenum pname, GLfloat * params)
+  {
+!    DISPATCH(GetPixelTexGenParameterfvSGIS, (pname, params), (F, "glGetPixelTexGenParameterfvSGIS(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! 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(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(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(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 GLboolean KEYWORD2 NAME(AreTexturesResidentEXT)(GLsizei n, const GLuint * textures, GLboolean * residences)
+  {
+!    RETURN_DISPATCH(AreTexturesResidentEXT, (n, textures, residences), (F, "glAreTexturesResidentEXT(%d, %p, %p);\n", n, (const void *) textures, (const void *) residences));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GenTexturesEXT)(GLsizei n, GLuint * textures)
+  {
+!    DISPATCH(GenTexturesEXT, (n, textures), (F, "glGenTexturesEXT(%d, %p);\n", n, (const void *) textures));
+  }
+  
+! KEYWORD1 GLboolean KEYWORD2 NAME(IsTextureEXT)(GLuint texture)
+  {
+!    RETURN_DISPATCH(IsTextureEXT, (texture), (F, "glIsTextureEXT(%d);\n", texture));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(DetailTexFuncSGIS)(GLenum target, GLsizei n, const GLfloat * points)
+  {
+!    DISPATCH(DetailTexFuncSGIS, (target, n, points), (F, "glDetailTexFuncSGIS(0x%x, %d, %p);\n", target, n, (const void *) points));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetDetailTexFuncSGIS)(GLenum target, GLfloat * points)
+  {
+!    DISPATCH(GetDetailTexFuncSGIS, (target, points), (F, "glGetDetailTexFuncSGIS(0x%x, %p);\n", target, (const void *) points));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SharpenTexFuncSGIS)(GLenum target, GLsizei n, const GLfloat * points)
+  {
+!    DISPATCH(SharpenTexFuncSGIS, (target, n, points), (F, "glSharpenTexFuncSGIS(0x%x, %d, %p);\n", target, n, (const void *) points));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetSharpenTexFuncSGIS)(GLenum target, GLfloat * points)
+  {
+!    DISPATCH(GetSharpenTexFuncSGIS, (target, points), (F, "glGetSharpenTexFuncSGIS(0x%x, %p);\n", target, (const void *) points));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SampleMaskSGIS)(GLclampf value, GLboolean invert)
+  {
+!    DISPATCH(SampleMaskSGIS, (value, invert), (F, "glSampleMaskSGIS(%f, %d);\n", value, invert));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SamplePatternSGIS)(GLenum pattern)
+  {
+!    DISPATCH(SamplePatternSGIS, (pattern), (F, "glSamplePatternSGIS(0x%x);\n", pattern));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ColorPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer)
+  {
+!    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(EdgeFlagPointerEXT)(GLsizei stride, GLsizei count, const GLboolean * pointer)
+  {
+!    DISPATCH(EdgeFlagPointerEXT, (stride, count, pointer), (F, "glEdgeFlagPointerEXT(%d, %d, %p);\n", stride, count, (const void *) pointer));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(IndexPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer)
+  {
+!    DISPATCH(IndexPointerEXT, (type, stride, count, pointer), (F, "glIndexPointerEXT(0x%x, %d, %d, %p);\n", type, stride, count, (const void *) pointer));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(NormalPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer)
+  {
+!    DISPATCH(NormalPointerEXT, (type, stride, count, pointer), (F, "glNormalPointerEXT(0x%x, %d, %d, %p);\n", type, stride, count, (const void *) pointer));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(TexCoordPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer)
+  {
+!    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(VertexPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer)
+  {
+!    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(SpriteParameterfSGIX)(GLenum pname, GLfloat param)
+  {
+!    DISPATCH(SpriteParameterfSGIX, (pname, param), (F, "glSpriteParameterfSGIX(0x%x, %f);\n", pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SpriteParameterfvSGIX)(GLenum pname, const GLfloat * params)
+  {
+!    DISPATCH(SpriteParameterfvSGIX, (pname, params), (F, "glSpriteParameterfvSGIX(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SpriteParameteriSGIX)(GLenum pname, GLint param)
+  {
+!    DISPATCH(SpriteParameteriSGIX, (pname, param), (F, "glSpriteParameteriSGIX(0x%x, %d);\n", pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SpriteParameterivSGIX)(GLenum pname, const GLint * params)
+  {
+!    DISPATCH(SpriteParameterivSGIX, (pname, params), (F, "glSpriteParameterivSGIX(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(PointParameterfEXT)(GLenum pname, GLfloat param)
+  {
+!    DISPATCH(PointParameterfEXT, (pname, param), (F, "glPointParameterfEXT(0x%x, %f);\n", pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(PointParameterfvEXT)(GLenum pname, const GLfloat * params)
+  {
+!    DISPATCH(PointParameterfvEXT, (pname, params), (F, "glPointParameterfvEXT(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! KEYWORD1 GLint KEYWORD2 NAME(GetInstrumentsSGIX)(void)
+  {
+!    RETURN_DISPATCH(GetInstrumentsSGIX, (), (F, "glGetInstrumentsSGIX();\n"));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(InstrumentsBufferSGIX)(GLsizei size, GLint * buffer)
+  {
+!    DISPATCH(InstrumentsBufferSGIX, (size, buffer), (F, "glInstrumentsBufferSGIX(%d, %p);\n", size, (const void *) buffer));
+  }
+  
+! KEYWORD1 GLint KEYWORD2 NAME(PollInstrumentsSGIX)(GLint * marker_p)
+  {
+!    RETURN_DISPATCH(PollInstrumentsSGIX, (marker_p), (F, "glPollInstrumentsSGIX(%p);\n", (const void *) marker_p));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ReadInstrumentsSGIX)(GLint marker)
+  {
+!    DISPATCH(ReadInstrumentsSGIX, (marker), (F, "glReadInstrumentsSGIX(%d);\n", marker));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(StartInstrumentsSGIX)(void)
+  {
+!    DISPATCH(StartInstrumentsSGIX, (), (F, "glStartInstrumentsSGIX();\n"));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(StopInstrumentsSGIX)(GLint marker)
+  {
+!    DISPATCH(StopInstrumentsSGIX, (marker), (F, "glStopInstrumentsSGIX(%d);\n", marker));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FrameZoomSGIX)(GLint factor)
+  {
+!    DISPATCH(FrameZoomSGIX, (factor), (F, "glFrameZoomSGIX(%d);\n", factor));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(TagSampleBufferSGIX)(void)
+  {
+!    DISPATCH(TagSampleBufferSGIX, (), (F, "glTagSampleBufferSGIX();\n"));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ReferencePlaneSGIX)(const GLdouble * equation)
+  {
+!    DISPATCH(ReferencePlaneSGIX, (equation), (F, "glReferencePlaneSGIX(%p);\n", (const void *) equation));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FlushRasterSGIX)(void)
+  {
+!    DISPATCH(FlushRasterSGIX, (), (F, "glFlushRasterSGIX();\n"));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetListParameterfvSGIX)(GLuint list, GLenum pname, GLfloat * params)
+  {
+!    DISPATCH(GetListParameterfvSGIX, (list, pname, params), (F, "glGetListParameterfvSGIX(%d, 0x%x, %p);\n", list, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetListParameterivSGIX)(GLuint list, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetListParameterivSGIX, (list, pname, params), (F, "glGetListParameterivSGIX(%d, 0x%x, %p);\n", list, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ListParameterfSGIX)(GLuint list, GLenum pname, GLfloat param)
+  {
+!    DISPATCH(ListParameterfSGIX, (list, pname, param), (F, "glListParameterfSGIX(%d, 0x%x, %f);\n", list, pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ListParameterfvSGIX)(GLuint list, GLenum pname, const GLfloat * params)
+  {
+!    DISPATCH(ListParameterfvSGIX, (list, pname, params), (F, "glListParameterfvSGIX(%d, 0x%x, %p);\n", list, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ListParameteriSGIX)(GLuint list, GLenum pname, GLint param)
+  {
+!    DISPATCH(ListParameteriSGIX, (list, pname, param), (F, "glListParameteriSGIX(%d, 0x%x, %d);\n", list, pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ListParameterivSGIX)(GLuint list, GLenum pname, const GLint * params)
+  {
+!    DISPATCH(ListParameterivSGIX, (list, pname, params), (F, "glListParameterivSGIX(%d, 0x%x, %p);\n", list, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FragmentColorMaterialSGIX)(GLenum face, GLenum mode)
+  {
+!    DISPATCH(FragmentColorMaterialSGIX, (face, mode), (F, "glFragmentColorMaterialSGIX(0x%x, 0x%x);\n", face, mode));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FragmentLightfSGIX)(GLenum light, GLenum pname, GLfloat param)
+  {
+!    DISPATCH(FragmentLightfSGIX, (light, pname, param), (F, "glFragmentLightfSGIX(0x%x, 0x%x, %f);\n", light, pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FragmentLightfvSGIX)(GLenum light, GLenum pname, const GLfloat * params)
+  {
+!    DISPATCH(FragmentLightfvSGIX, (light, pname, params), (F, "glFragmentLightfvSGIX(0x%x, 0x%x, %p);\n", light, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FragmentLightiSGIX)(GLenum light, GLenum pname, GLint param)
+  {
+!    DISPATCH(FragmentLightiSGIX, (light, pname, param), (F, "glFragmentLightiSGIX(0x%x, 0x%x, %d);\n", light, pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FragmentLightivSGIX)(GLenum light, GLenum pname, const GLint * params)
+  {
+!    DISPATCH(FragmentLightivSGIX, (light, pname, params), (F, "glFragmentLightivSGIX(0x%x, 0x%x, %p);\n", light, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FragmentLightModelfSGIX)(GLenum pname, GLfloat param)
+  {
+!    DISPATCH(FragmentLightModelfSGIX, (pname, param), (F, "glFragmentLightModelfSGIX(0x%x, %f);\n", pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FragmentLightModelfvSGIX)(GLenum pname, const GLfloat * params)
+  {
+!    DISPATCH(FragmentLightModelfvSGIX, (pname, params), (F, "glFragmentLightModelfvSGIX(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FragmentLightModeliSGIX)(GLenum pname, GLint param)
+  {
+!    DISPATCH(FragmentLightModeliSGIX, (pname, param), (F, "glFragmentLightModeliSGIX(0x%x, %d);\n", pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FragmentLightModelivSGIX)(GLenum pname, const GLint * params)
+  {
+!    DISPATCH(FragmentLightModelivSGIX, (pname, params), (F, "glFragmentLightModelivSGIX(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FragmentMaterialfSGIX)(GLenum face, GLenum pname, GLfloat param)
+  {
+!    DISPATCH(FragmentMaterialfSGIX, (face, pname, param), (F, "glFragmentMaterialfSGIX(0x%x, 0x%x, %f);\n", face, pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FragmentMaterialfvSGIX)(GLenum face, GLenum pname, const GLfloat * params)
+  {
+!    DISPATCH(FragmentMaterialfvSGIX, (face, pname, params), (F, "glFragmentMaterialfvSGIX(0x%x, 0x%x, %p);\n", face, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FragmentMaterialiSGIX)(GLenum face, GLenum pname, GLint param)
+  {
+!    DISPATCH(FragmentMaterialiSGIX, (face, pname, param), (F, "glFragmentMaterialiSGIX(0x%x, 0x%x, %d);\n", face, pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FragmentMaterialivSGIX)(GLenum face, GLenum pname, const GLint * params)
+  {
+!    DISPATCH(FragmentMaterialivSGIX, (face, pname, params), (F, "glFragmentMaterialivSGIX(0x%x, 0x%x, %p);\n", face, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetFragmentLightfvSGIX)(GLenum light, GLenum pname, GLfloat * params)
+  {
+!    DISPATCH(GetFragmentLightfvSGIX, (light, pname, params), (F, "glGetFragmentLightfvSGIX(0x%x, 0x%x, %p);\n", light, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetFragmentLightivSGIX)(GLenum light, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetFragmentLightivSGIX, (light, pname, params), (F, "glGetFragmentLightivSGIX(0x%x, 0x%x, %p);\n", light, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetFragmentMaterialfvSGIX)(GLenum face, GLenum pname, GLfloat * params)
+  {
+!    DISPATCH(GetFragmentMaterialfvSGIX, (face, pname, params), (F, "glGetFragmentMaterialfvSGIX(0x%x, 0x%x, %p);\n", face, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetFragmentMaterialivSGIX)(GLenum face, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetFragmentMaterialivSGIX, (face, pname, params), (F, "glGetFragmentMaterialivSGIX(0x%x, 0x%x, %p);\n", face, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(LightEnviSGIX)(GLenum pname, GLint param)
+  {
+!    DISPATCH(LightEnviSGIX, (pname, param), (F, "glLightEnviSGIX(0x%x, %d);\n", pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexWeightfEXT)(GLfloat weight)
+  {
+!    DISPATCH(VertexWeightfEXT, (weight), (F, "glVertexWeightfEXT(%f);\n", weight));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexWeightfvEXT)(const GLfloat * weight)
+  {
+!    DISPATCH(VertexWeightfvEXT, (weight), (F, "glVertexWeightfvEXT(%p);\n", (const void *) weight));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexWeightPointerEXT)(GLsizei size, GLenum type, GLsizei stride, const GLvoid * pointer)
+  {
+!    DISPATCH(VertexWeightPointerEXT, (size, type, stride, pointer), (F, "glVertexWeightPointerEXT(%d, 0x%x, %d, %p);\n", size, type, stride, (const void *) pointer));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FlushVertexArrayRangeNV)(void)
+  {
+!    DISPATCH(FlushVertexArrayRangeNV, (), (F, "glFlushVertexArrayRangeNV();\n"));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexArrayRangeNV)(GLsizei length, const GLvoid * pointer)
+  {
+!    DISPATCH(VertexArrayRangeNV, (length, pointer), (F, "glVertexArrayRangeNV(%d, %p);\n", length, (const void *) pointer));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(CombinerParameterfvNV)(GLenum pname, const GLfloat * params)
+  {
+!    DISPATCH(CombinerParameterfvNV, (pname, params), (F, "glCombinerParameterfvNV(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(CombinerParameterfNV)(GLenum pname, GLfloat param)
+  {
+!    DISPATCH(CombinerParameterfNV, (pname, param), (F, "glCombinerParameterfNV(0x%x, %f);\n", pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(CombinerParameterivNV)(GLenum pname, const GLint * params)
+  {
+!    DISPATCH(CombinerParameterivNV, (pname, params), (F, "glCombinerParameterivNV(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(CombinerParameteriNV)(GLenum pname, GLint param)
+  {
+!    DISPATCH(CombinerParameteriNV, (pname, param), (F, "glCombinerParameteriNV(0x%x, %d);\n", pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(CombinerInputNV)(GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage)
+  {
+!    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(CombinerOutputNV)(GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum)
+  {
+!    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(FinalCombinerInputNV)(GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage)
+  {
+!    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(GetCombinerInputParameterfvNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat * params)
+  {
+!    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(GetCombinerInputParameterivNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint * params)
+  {
+!    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(GetCombinerOutputParameterfvNV)(GLenum stage, GLenum portion, GLenum pname, GLfloat * 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(GetCombinerOutputParameterivNV)(GLenum stage, GLenum portion, 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));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetFinalCombinerInputParameterfvNV)(GLenum variable, GLenum pname, GLfloat * params)
+  {
+!    DISPATCH(GetFinalCombinerInputParameterfvNV, (variable, pname, params), (F, "glGetFinalCombinerInputParameterfvNV(0x%x, 0x%x, %p);\n", variable, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetFinalCombinerInputParameterivNV)(GLenum variable, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetFinalCombinerInputParameterivNV, (variable, pname, params), (F, "glGetFinalCombinerInputParameterivNV(0x%x, 0x%x, %p);\n", variable, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ResizeBuffersMESA)(void)
+  {
+!    DISPATCH(ResizeBuffersMESA, (), (F, "glResizeBuffersMESA();\n"));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos2dMESA)(GLdouble x, GLdouble y)
+  {
+!    DISPATCH(WindowPos2dMESA, (x, y), (F, "glWindowPos2dMESA(%f, %f);\n", x, y));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos2dvMESA)(const GLdouble * v)
+  {
+!    DISPATCH(WindowPos2dvMESA, (v), (F, "glWindowPos2dvMESA(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos2fMESA)(GLfloat x, GLfloat y)
+  {
+!    DISPATCH(WindowPos2fMESA, (x, y), (F, "glWindowPos2fMESA(%f, %f);\n", x, y));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos2fvMESA)(const GLfloat * v)
+  {
+!    DISPATCH(WindowPos2fvMESA, (v), (F, "glWindowPos2fvMESA(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos2iMESA)(GLint x, GLint y)
+  {
+!    DISPATCH(WindowPos2iMESA, (x, y), (F, "glWindowPos2iMESA(%d, %d);\n", x, y));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos2ivMESA)(const GLint * v)
+  {
+!    DISPATCH(WindowPos2ivMESA, (v), (F, "glWindowPos2ivMESA(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos2sMESA)(GLshort x, GLshort y)
+  {
+!    DISPATCH(WindowPos2sMESA, (x, y), (F, "glWindowPos2sMESA(%d, %d);\n", x, y));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos2svMESA)(const GLshort * v)
+  {
+!    DISPATCH(WindowPos2svMESA, (v), (F, "glWindowPos2svMESA(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3dMESA)(GLdouble x, GLdouble y, GLdouble z)
+  {
+!    DISPATCH(WindowPos3dMESA, (x, y, z), (F, "glWindowPos3dMESA(%f, %f, %f);\n", x, y, z));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3dvMESA)(const GLdouble * v)
+  {
+!    DISPATCH(WindowPos3dvMESA, (v), (F, "glWindowPos3dvMESA(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3fMESA)(GLfloat x, GLfloat y, GLfloat z)
+  {
+!    DISPATCH(WindowPos3fMESA, (x, y, z), (F, "glWindowPos3fMESA(%f, %f, %f);\n", x, y, z));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3fvMESA)(const GLfloat * v)
+  {
+!    DISPATCH(WindowPos3fvMESA, (v), (F, "glWindowPos3fvMESA(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3iMESA)(GLint x, GLint y, GLint z)
+  {
+!    DISPATCH(WindowPos3iMESA, (x, y, z), (F, "glWindowPos3iMESA(%d, %d, %d);\n", x, y, z));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3ivMESA)(const GLint * v)
+  {
+!    DISPATCH(WindowPos3ivMESA, (v), (F, "glWindowPos3ivMESA(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3sMESA)(GLshort x, GLshort y, GLshort z)
+  {
+!    DISPATCH(WindowPos3sMESA, (x, y, z), (F, "glWindowPos3sMESA(%d, %d, %d);\n", x, y, z));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3svMESA)(const GLshort * v)
+  {
+!    DISPATCH(WindowPos3svMESA, (v), (F, "glWindowPos3svMESA(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos4dMESA)(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+  {
+!    DISPATCH(WindowPos4dMESA, (x, y, z, w), (F, "glWindowPos4dMESA(%f, %f, %f, %f);\n", x, y, z, w));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos4dvMESA)(const GLdouble * v)
+  {
+!    DISPATCH(WindowPos4dvMESA, (v), (F, "glWindowPos4dvMESA(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos4fMESA)(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+  {
+!    DISPATCH(WindowPos4fMESA, (x, y, z, w), (F, "glWindowPos4fMESA(%f, %f, %f, %f);\n", x, y, z, w));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos4fvMESA)(const GLfloat * v)
+  {
+!    DISPATCH(WindowPos4fvMESA, (v), (F, "glWindowPos4fvMESA(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos4iMESA)(GLint x, GLint y, GLint z, GLint w)
+  {
+!    DISPATCH(WindowPos4iMESA, (x, y, z, w), (F, "glWindowPos4iMESA(%d, %d, %d, %d);\n", x, y, z, w));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos4ivMESA)(const GLint * v)
+  {
+!    DISPATCH(WindowPos4ivMESA, (v), (F, "glWindowPos4ivMESA(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos4sMESA)(GLshort x, GLshort y, GLshort z, GLshort w)
+  {
+!    DISPATCH(WindowPos4sMESA, (x, y, z, w), (F, "glWindowPos4sMESA(%d, %d, %d, %d);\n", x, y, z, w));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos4svMESA)(const GLshort * v)
+  {
+!    DISPATCH(WindowPos4svMESA, (v), (F, "glWindowPos4svMESA(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(BlendFuncSeparateEXT)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
+  {
+!    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(IndexMaterialEXT)(GLenum face, GLenum mode)
+  {
+!    DISPATCH(IndexMaterialEXT, (face, mode), (F, "glIndexMaterialEXT(0x%x, 0x%x);\n", face, mode));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(IndexFuncEXT)(GLenum func, GLclampf ref)
+  {
+!    DISPATCH(IndexFuncEXT, (func, ref), (F, "glIndexFuncEXT(0x%x, %f);\n", func, ref));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(LockArraysEXT)(GLint first, GLsizei count)
+  {
+!    DISPATCH(LockArraysEXT, (first, count), (F, "glLockArraysEXT(%d, %d);\n", first, count));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(UnlockArraysEXT)(void)
+  {
+!    DISPATCH(UnlockArraysEXT, (), (F, "glUnlockArraysEXT();\n"));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(CullParameterdvEXT)(GLenum pname, GLdouble * params)
+  {
+!    DISPATCH(CullParameterdvEXT, (pname, params), (F, "glCullParameterdvEXT(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(CullParameterfvEXT)(GLenum pname, GLfloat * params)
+  {
+!    DISPATCH(CullParameterfvEXT, (pname, params), (F, "glCullParameterfvEXT(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(HintPGI)(GLenum target, GLint mode)
+  {
+!    DISPATCH(HintPGI, (target, mode), (F, "glHintPGI(0x%x, %d);\n", target, mode));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FogCoordfEXT)(GLfloat coord)
+  {
+!    DISPATCH(FogCoordfEXT, (coord), (F, "glFogCoordfEXT(%f);\n", coord));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FogCoordfvEXT)(const GLfloat * coord)
+  {
+!    DISPATCH(FogCoordfvEXT, (coord), (F, "glFogCoordfvEXT(%p);\n", (const void *) coord));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FogCoorddEXT)(GLdouble coord)
+  {
+!    DISPATCH(FogCoorddEXT, (coord), (F, "glFogCoorddEXT(%f);\n", coord));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FogCoorddvEXT)(const GLdouble * coord)
+  {
+!    DISPATCH(FogCoorddvEXT, (coord), (F, "glFogCoorddvEXT(%p);\n", (const void *) coord));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FogCoordPointerEXT)(GLenum type, GLsizei stride, const GLvoid * pointer)
+  {
+!    DISPATCH(FogCoordPointerEXT, (type, stride, pointer), (F, "glFogCoordPointerEXT(0x%x, %d, %p);\n", type, stride, (const void *) pointer));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetColorTableEXT)(GLenum target, GLenum format, GLenum type, GLvoid * data)
+  {
+!    DISPATCH(GetColorTableEXT, (target, format, type, data), (F, "glGetColorTableEXT(0x%x, 0x%x, 0x%x, %p);\n", target, format, type, (const void *) data));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetColorTableParameterivEXT)(GLenum target, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetColorTableParameterivEXT, (target, pname, params), (F, "glGetColorTableParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetColorTableParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params)
+  {
+!    DISPATCH(GetColorTableParameterfvEXT, (target, pname, params), (F, "glGetColorTableParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(TbufferMask3DFX)(GLuint mask)
+  {
+!    DISPATCH(TbufferMask3DFX, (mask), (F, "glTbufferMask3DFX(%d);\n", mask));
+  }
+  
+! 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(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(CompressedTexImage2DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data)
+  {
+!    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(CompressedTexImage1DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * data)
+  {
+!    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(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(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(CompressedTexSubImage2DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data)
+  {
+!    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));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(CompressedTexSubImage1DARB)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data)
+  {
+!    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(GetCompressedTexImageARB)(GLenum target, GLint level, GLvoid * img)
+  {
+!    DISPATCH(GetCompressedTexImageARB, (target, level, img), (F, "glGetCompressedTexImageARB(0x%x, %d, %p);\n", target, level, (const void *) img));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3bEXT)(GLbyte red, GLbyte green, GLbyte blue)
+  {
+!    DISPATCH(SecondaryColor3bEXT, (red, green, blue), (F, "glSecondaryColor3bEXT(%d, %d, %d);\n", red, green, blue));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3bvEXT)(const GLbyte * v)
+  {
+!    DISPATCH(SecondaryColor3bvEXT, (v), (F, "glSecondaryColor3bvEXT(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3dEXT)(GLdouble red, GLdouble green, GLdouble blue)
+  {
+!    DISPATCH(SecondaryColor3dEXT, (red, green, blue), (F, "glSecondaryColor3dEXT(%f, %f, %f);\n", red, green, blue));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3dvEXT)(const GLdouble * v)
+  {
+!    DISPATCH(SecondaryColor3dvEXT, (v), (F, "glSecondaryColor3dvEXT(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3fEXT)(GLfloat red, GLfloat green, GLfloat blue)
+  {
+!    DISPATCH(SecondaryColor3fEXT, (red, green, blue), (F, "glSecondaryColor3fEXT(%f, %f, %f);\n", red, green, blue));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3fvEXT)(const GLfloat * v)
+  {
+!    DISPATCH(SecondaryColor3fvEXT, (v), (F, "glSecondaryColor3fvEXT(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3iEXT)(GLint red, GLint green, GLint blue)
+  {
+!    DISPATCH(SecondaryColor3iEXT, (red, green, blue), (F, "glSecondaryColor3iEXT(%d, %d, %d);\n", red, green, blue));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3ivEXT)(const GLint * v)
+  {
+!    DISPATCH(SecondaryColor3ivEXT, (v), (F, "glSecondaryColor3ivEXT(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3sEXT)(GLshort red, GLshort green, GLshort blue)
+  {
+!    DISPATCH(SecondaryColor3sEXT, (red, green, blue), (F, "glSecondaryColor3sEXT(%d, %d, %d);\n", red, green, blue));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3svEXT)(const GLshort * v)
+  {
+!    DISPATCH(SecondaryColor3svEXT, (v), (F, "glSecondaryColor3svEXT(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3ubEXT)(GLubyte red, GLubyte green, GLubyte blue)
+  {
+!    DISPATCH(SecondaryColor3ubEXT, (red, green, blue), (F, "glSecondaryColor3ubEXT(%d, %d, %d);\n", red, green, blue));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3ubvEXT)(const GLubyte * v)
+  {
+!    DISPATCH(SecondaryColor3ubvEXT, (v), (F, "glSecondaryColor3ubvEXT(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3uiEXT)(GLuint red, GLuint green, GLuint blue)
+  {
+!    DISPATCH(SecondaryColor3uiEXT, (red, green, blue), (F, "glSecondaryColor3uiEXT(%d, %d, %d);\n", red, green, blue));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3uivEXT)(const GLuint * v)
+  {
+!    DISPATCH(SecondaryColor3uivEXT, (v), (F, "glSecondaryColor3uivEXT(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3usEXT)(GLushort red, GLushort green, GLushort blue)
+  {
+!    DISPATCH(SecondaryColor3usEXT, (red, green, blue), (F, "glSecondaryColor3usEXT(%d, %d, %d);\n", red, green, blue));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColor3usvEXT)(const GLushort * v)
+  {
+!    DISPATCH(SecondaryColor3usvEXT, (v), (F, "glSecondaryColor3usvEXT(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColorPointerEXT)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer)
+  {
+!    DISPATCH(SecondaryColorPointerEXT, (size, type, stride, pointer), (F, "glSecondaryColorPointerEXT(%d, 0x%x, %d, %p);\n", size, type, stride, (const void *) pointer));
+  }
+  
+! KEYWORD1 GLboolean KEYWORD2 NAME(AreProgramsResidentNV)(GLsizei n, const GLuint * ids, GLboolean * residences)
+  {
+!    RETURN_DISPATCH(AreProgramsResidentNV, (n, ids, residences), (F, "glAreProgramsResidentNV(%d, %p, %p);\n", n, (const void *) ids, (const void *) residences));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(BindProgramNV)(GLenum target, GLuint id)
+  {
+!    DISPATCH(BindProgramNV, (target, id), (F, "glBindProgramNV(0x%x, %d);\n", target, id));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(DeleteProgramsNV)(GLsizei n, const GLuint * ids)
+  {
+!    DISPATCH(DeleteProgramsNV, (n, ids), (F, "glDeleteProgramsNV(%d, %p);\n", n, (const void *) ids));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ExecuteProgramNV)(GLenum target, GLuint id, const GLfloat * params)
+  {
+!    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(GetProgramParameterfvNV)(GLenum target, GLuint index, GLenum pname, GLfloat * 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(GetProgramivNV)(GLuint id, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetProgramivNV, (id, pname, params), (F, "glGetProgramivNV(%d, 0x%x, %p);\n", id, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetProgramStringNV)(GLuint id, GLenum pname, GLubyte * program)
+  {
+!    DISPATCH(GetProgramStringNV, (id, pname, program), (F, "glGetProgramStringNV(%d, 0x%x, %p);\n", id, pname, (const void *) program));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetTrackMatrixivNV)(GLenum target, GLuint address, GLenum pname, GLint * params)
+  {
+!    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(GetVertexAttribdvNV)(GLuint index, GLenum pname, GLdouble * params)
+  {
+!    DISPATCH(GetVertexAttribdvNV, (index, pname, params), (F, "glGetVertexAttribdvNV(%d, 0x%x, %p);\n", index, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetVertexAttribfvNV)(GLuint index, GLenum pname, GLfloat * params)
+  {
+!    DISPATCH(GetVertexAttribfvNV, (index, pname, params), (F, "glGetVertexAttribfvNV(%d, 0x%x, %p);\n", index, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetVertexAttribivNV)(GLuint index, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetVertexAttribivNV, (index, pname, params), (F, "glGetVertexAttribivNV(%d, 0x%x, %p);\n", index, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetVertexAttribPointervNV)(GLuint index, GLenum pname, GLvoid ** pointer)
+  {
+!    DISPATCH(GetVertexAttribPointervNV, (index, pname, pointer), (F, "glGetVertexAttribPointervNV(%d, 0x%x, %p);\n", index, pname, (const void *) pointer));
+  }
+  
+! KEYWORD1 GLboolean KEYWORD2 NAME(IsProgramNV)(GLuint id)
+  {
+!    RETURN_DISPATCH(IsProgramNV, (id), (F, "glIsProgramNV(%d);\n", id));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(LoadProgramNV)(GLenum target, GLuint id, GLsizei len, const GLubyte * program)
+  {
+!    DISPATCH(LoadProgramNV, (target, id, len, program), (F, "glLoadProgramNV(0x%x, %d, %d, %p);\n", target, id, len, (const void *) program));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ProgramParameter4dNV)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+  {
+!    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(ProgramParameter4dvNV)(GLenum target, GLuint index, const GLdouble * params)
+  {
+!    DISPATCH(ProgramParameter4dvNV, (target, index, params), (F, "glProgramParameter4dvNV(0x%x, %d, %p);\n", target, index, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ProgramParameter4fNV)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+  {
+!    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(ProgramParameter4fvNV)(GLenum target, GLuint index, const GLfloat * params)
+  {
+!    DISPATCH(ProgramParameter4fvNV, (target, index, params), (F, "glProgramParameter4fvNV(0x%x, %d, %p);\n", target, index, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ProgramParameters4dvNV)(GLenum target, GLuint index, GLuint num, const GLdouble * 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(ProgramParameters4fvNV)(GLenum target, GLuint index, GLuint num, const GLfloat * params)
+  {
+!    DISPATCH(ProgramParameters4fvNV, (target, index, num, params), (F, "glProgramParameters4fvNV(0x%x, %d, %d, %p);\n", target, index, num, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(RequestResidentProgramsNV)(GLsizei n, const GLuint * ids)
+  {
+!    DISPATCH(RequestResidentProgramsNV, (n, ids), (F, "glRequestResidentProgramsNV(%d, %p);\n", n, (const void *) ids));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(TrackMatrixNV)(GLenum target, GLuint address, GLenum matrix, GLenum transform)
+  {
+!    DISPATCH(TrackMatrixNV, (target, address, matrix, transform), (F, "glTrackMatrixNV(0x%x, %d, 0x%x, 0x%x);\n", target, address, matrix, transform));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttribPointerNV)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer)
+  {
+!    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(VertexAttrib1dNV)(GLuint index, GLdouble x)
+  {
+!    DISPATCH(VertexAttrib1dNV, (index, x), (F, "glVertexAttrib1dNV(%d, %f);\n", index, x));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib1dvNV)(GLuint index, const GLdouble * v)
+  {
+!    DISPATCH(VertexAttrib1dvNV, (index, v), (F, "glVertexAttrib1dvNV(%d, %p);\n", index, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib1fNV)(GLuint index, GLfloat x)
+  {
+!    DISPATCH(VertexAttrib1fNV, (index, x), (F, "glVertexAttrib1fNV(%d, %f);\n", index, x));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib1fvNV)(GLuint index, const GLfloat * v)
+  {
+!    DISPATCH(VertexAttrib1fvNV, (index, v), (F, "glVertexAttrib1fvNV(%d, %p);\n", index, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib1sNV)(GLuint index, GLshort x)
+  {
+!    DISPATCH(VertexAttrib1sNV, (index, x), (F, "glVertexAttrib1sNV(%d, %d);\n", index, x));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib1svNV)(GLuint index, const GLshort * v)
+  {
+!    DISPATCH(VertexAttrib1svNV, (index, v), (F, "glVertexAttrib1svNV(%d, %p);\n", index, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib2dNV)(GLuint index, GLdouble x, GLdouble y)
+  {
+!    DISPATCH(VertexAttrib2dNV, (index, x, y), (F, "glVertexAttrib2dNV(%d, %f, %f);\n", index, x, y));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib2dvNV)(GLuint index, const GLdouble * v)
+  {
+!    DISPATCH(VertexAttrib2dvNV, (index, v), (F, "glVertexAttrib2dvNV(%d, %p);\n", index, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib2fNV)(GLuint index, GLfloat x, GLfloat y)
+  {
+!    DISPATCH(VertexAttrib2fNV, (index, x, y), (F, "glVertexAttrib2fNV(%d, %f, %f);\n", index, x, y));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib2fvNV)(GLuint index, const GLfloat * v)
+  {
+!    DISPATCH(VertexAttrib2fvNV, (index, v), (F, "glVertexAttrib2fvNV(%d, %p);\n", index, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib2sNV)(GLuint index, GLshort x, GLshort y)
+  {
+!    DISPATCH(VertexAttrib2sNV, (index, x, y), (F, "glVertexAttrib2sNV(%d, %d, %d);\n", index, x, y));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib2svNV)(GLuint index, const GLshort * v)
+  {
+!    DISPATCH(VertexAttrib2svNV, (index, v), (F, "glVertexAttrib2svNV(%d, %p);\n", index, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib3dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z)
+  {
+!    DISPATCH(VertexAttrib3dNV, (index, x, y, z), (F, "glVertexAttrib3dNV(%d, %f, %f, %f);\n", index, x, y, z));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib3dvNV)(GLuint index, const GLdouble * v)
+  {
+!    DISPATCH(VertexAttrib3dvNV, (index, v), (F, "glVertexAttrib3dvNV(%d, %p);\n", index, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib3fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z)
+  {
+!    DISPATCH(VertexAttrib3fNV, (index, x, y, z), (F, "glVertexAttrib3fNV(%d, %f, %f, %f);\n", index, x, y, z));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib3fvNV)(GLuint index, const GLfloat * v)
+  {
+!    DISPATCH(VertexAttrib3fvNV, (index, v), (F, "glVertexAttrib3fvNV(%d, %p);\n", index, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib3sNV)(GLuint index, GLshort x, GLshort y, GLshort z)
+  {
+!    DISPATCH(VertexAttrib3sNV, (index, x, y, z), (F, "glVertexAttrib3sNV(%d, %d, %d, %d);\n", index, x, y, z));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib3svNV)(GLuint index, const GLshort * v)
+  {
+!    DISPATCH(VertexAttrib3svNV, (index, v), (F, "glVertexAttrib3svNV(%d, %p);\n", index, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib4dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+  {
+!    DISPATCH(VertexAttrib4dNV, (index, x, y, z, w), (F, "glVertexAttrib4dNV(%d, %f, %f, %f, %f);\n", index, x, y, z, w));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib4dvNV)(GLuint index, const GLdouble * v)
+  {
+!    DISPATCH(VertexAttrib4dvNV, (index, v), (F, "glVertexAttrib4dvNV(%d, %p);\n", index, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib4fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+  {
+!    DISPATCH(VertexAttrib4fNV, (index, x, y, z, w), (F, "glVertexAttrib4fNV(%d, %f, %f, %f, %f);\n", index, x, y, z, w));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib4fvNV)(GLuint index, const GLfloat * v)
+  {
+!    DISPATCH(VertexAttrib4fvNV, (index, v), (F, "glVertexAttrib4fvNV(%d, %p);\n", index, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib4sNV)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w)
+  {
+!    DISPATCH(VertexAttrib4sNV, (index, x, y, z, w), (F, "glVertexAttrib4sNV(%d, %d, %d, %d, %d);\n", index, x, y, z, w));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib4svNV)(GLuint index, const GLshort * v)
+  {
+!    DISPATCH(VertexAttrib4svNV, (index, v), (F, "glVertexAttrib4svNV(%d, %p);\n", index, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib4ubNV)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w)
+  {
+!    DISPATCH(VertexAttrib4ubNV, (index, x, y, z, w), (F, "glVertexAttrib4ubNV(%d, %d, %d, %d, %d);\n", index, x, y, z, w));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib4ubvNV)(GLuint index, const GLubyte * v)
+  {
+!    DISPATCH(VertexAttrib4ubvNV, (index, v), (F, "glVertexAttrib4ubvNV(%d, %p);\n", index, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttribs1dvNV)(GLuint index, GLsizei n, const GLdouble * v)
+  {
+!    DISPATCH(VertexAttribs1dvNV, (index, n, v), (F, "glVertexAttribs1dvNV(%d, %d, %p);\n", index, n, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttribs1fvNV)(GLuint index, GLsizei n, const GLfloat * v)
+  {
+!    DISPATCH(VertexAttribs1fvNV, (index, n, v), (F, "glVertexAttribs1fvNV(%d, %d, %p);\n", index, n, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttribs1svNV)(GLuint index, GLsizei n, const GLshort * v)
+  {
+!    DISPATCH(VertexAttribs1svNV, (index, n, v), (F, "glVertexAttribs1svNV(%d, %d, %p);\n", index, n, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttribs2dvNV)(GLuint index, GLsizei n, const GLdouble * v)
+  {
+!    DISPATCH(VertexAttribs2dvNV, (index, n, v), (F, "glVertexAttribs2dvNV(%d, %d, %p);\n", index, n, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttribs2fvNV)(GLuint index, GLsizei n, const GLfloat * v)
+  {
+!    DISPATCH(VertexAttribs2fvNV, (index, n, v), (F, "glVertexAttribs2fvNV(%d, %d, %p);\n", index, n, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttribs2svNV)(GLuint index, GLsizei n, const GLshort * v)
+  {
+!    DISPATCH(VertexAttribs2svNV, (index, n, v), (F, "glVertexAttribs2svNV(%d, %d, %p);\n", index, n, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttribs3dvNV)(GLuint index, GLsizei n, const GLdouble * v)
+  {
+!    DISPATCH(VertexAttribs3dvNV, (index, n, v), (F, "glVertexAttribs3dvNV(%d, %d, %p);\n", index, n, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttribs3fvNV)(GLuint index, GLsizei n, const GLfloat * v)
+  {
+!    DISPATCH(VertexAttribs3fvNV, (index, n, v), (F, "glVertexAttribs3fvNV(%d, %d, %p);\n", index, n, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttribs3svNV)(GLuint index, GLsizei n, const GLshort * v)
+  {
+!    DISPATCH(VertexAttribs3svNV, (index, n, v), (F, "glVertexAttribs3svNV(%d, %d, %p);\n", index, n, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttribs4dvNV)(GLuint index, GLsizei n, const GLdouble * v)
+  {
+!    DISPATCH(VertexAttribs4dvNV, (index, n, v), (F, "glVertexAttribs4dvNV(%d, %d, %p);\n", index, n, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttribs4fvNV)(GLuint index, GLsizei n, const GLfloat * v)
+  {
+!    DISPATCH(VertexAttribs4fvNV, (index, n, v), (F, "glVertexAttribs4fvNV(%d, %d, %p);\n", index, n, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttribs4svNV)(GLuint index, GLsizei n, const GLshort * v)
+  {
+!    DISPATCH(VertexAttribs4svNV, (index, n, v), (F, "glVertexAttribs4svNV(%d, %d, %p);\n", index, n, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttribs4ubvNV)(GLuint index, GLsizei n, const GLubyte * v)
+  {
+!    DISPATCH(VertexAttribs4ubvNV, (index, n, v), (F, "glVertexAttribs4ubvNV(%d, %d, %p);\n", index, n, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(PointParameteriNV)(GLenum pname, GLint params)
+  {
+!    DISPATCH(PointParameteriNV, (pname, params), (F, "glPointParameteriNV(0x%x, %d);\n", pname, params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(PointParameterivNV)(GLenum pname, const GLint * params)
+  {
+!    DISPATCH(PointParameterivNV, (pname, params), (F, "glPointParameterivNV(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiDrawArraysEXT)(GLenum mode, GLint * first, GLsizei * count, GLsizei primcount)
+  {
+!    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(MultiDrawElementsEXT)(GLenum mode, const GLsizei * count, GLenum type, const GLvoid ** indices, GLsizei primcount)
+  {
+!    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(ActiveStencilFaceEXT)(GLenum face)
+  {
+!    DISPATCH(ActiveStencilFaceEXT, (face), (F, "glActiveStencilFaceEXT(0x%x);\n", face));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(DeleteFencesNV)(GLsizei n, const GLuint * fences)
+  {
+!    DISPATCH(DeleteFencesNV, (n, fences), (F, "glDeleteFencesNV(%d, %p);\n", n, (const void *) fences));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GenFencesNV)(GLsizei n, GLuint * fences)
+  {
+!    DISPATCH(GenFencesNV, (n, fences), (F, "glGenFencesNV(%d, %p);\n", n, (const void *) fences));
+  }
+  
+! KEYWORD1 GLboolean KEYWORD2 NAME(IsFenceNV)(GLuint fence)
+  {
+!    RETURN_DISPATCH(IsFenceNV, (fence), (F, "glIsFenceNV(%d);\n", fence));
+  }
+  
+! KEYWORD1 GLboolean KEYWORD2 NAME(TestFenceNV)(GLuint fence)
+  {
+!    RETURN_DISPATCH(TestFenceNV, (fence), (F, "glTestFenceNV(%d);\n", fence));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetFenceivNV)(GLuint fence, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetFenceivNV, (fence, pname, params), (F, "glGetFenceivNV(%d, 0x%x, %p);\n", fence, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FinishFenceNV)(GLuint fence)
+  {
+!    DISPATCH(FinishFenceNV, (fence), (F, "glFinishFenceNV(%d);\n", fence));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SetFenceNV)(GLuint fence, GLenum condition)
+  {
+!    DISPATCH(SetFenceNV, (fence, condition), (F, "glSetFenceNV(%d, 0x%x);\n", fence, condition));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(VertexAttrib4bvARB)(GLuint index, const GLbyte * v)
+  {
+!    DISPATCH(VertexAttrib4bvARB, (index, v), (F, "glVertexAttrib4bvARB(%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(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));
+  }
+  
+! 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(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);\n", target, index, (const void *) params));
+  }
+  
+! 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);\n", target, index, (const void *) params));
+  }
+  
+! 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);\n", target, index, (const void *) params));
+  }
+  
+! 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);\n", target, index, (const void *) params));
+  }
+  
+! 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(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);\n", id, len, (const void *) name, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ProgramNamedParameter4dvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v)
+  {
+!    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(GetProgramNamedParameterfvNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params)
+  {
+!    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(GetProgramNamedParameterdvNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params)
+  {
+!    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(BindBufferARB)(GLenum target, GLuint buffer)
+  {
+!    DISPATCH(BindBufferARB, (target, buffer), (F, "glBindBufferARB(0x%x, %d);\n", target, buffer));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(BufferDataARB)(GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage)
+  {
+!    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(BufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data)
+  {
+!    DISPATCH(BufferSubDataARB, (target, offset, size, data), (F, "glBufferSubDataARB(0x%x, %d, %d, %p);\n", target, offset, size, (const void *) data));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(DeleteBuffersARB)(GLsizei n, const GLuint * buffer)
+  {
+!    DISPATCH(DeleteBuffersARB, (n, buffer), (F, "glDeleteBuffersARB(%d, %p);\n", n, (const void *) buffer));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GenBuffersARB)(GLsizei n, GLuint * buffer)
+  {
+!    DISPATCH(GenBuffersARB, (n, buffer), (F, "glGenBuffersARB(%d, %p);\n", n, (const void *) buffer));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetBufferParameterivARB)(GLenum target, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetBufferParameterivARB, (target, pname, params), (F, "glGetBufferParameterivARB(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetBufferPointervARB)(GLenum target, GLenum pname, GLvoid ** params)
+  {
+!    DISPATCH(GetBufferPointervARB, (target, pname, params), (F, "glGetBufferPointervARB(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetBufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid * data)
+  {
+!    DISPATCH(GetBufferSubDataARB, (target, offset, size, data), (F, "glGetBufferSubDataARB(0x%x, %d, %d, %p);\n", target, offset, size, (const void *) data));
+  }
+  
+! KEYWORD1 GLboolean KEYWORD2 NAME(IsBufferARB)(GLuint buffer)
+  {
+!    RETURN_DISPATCH(IsBufferARB, (buffer), (F, "glIsBufferARB(%d);\n", buffer));
+  }
+  
+! KEYWORD1 GLvoid * KEYWORD2 NAME(MapBufferARB)(GLenum target, GLenum access)
+  {
+!    RETURN_DISPATCH(MapBufferARB, (target, access), (F, "glMapBufferARB(0x%x, 0x%x);\n", target, access));
+  }
+  
+! KEYWORD1 GLboolean KEYWORD2 NAME(UnmapBufferARB)(GLenum target)
+  {
+!    RETURN_DISPATCH(UnmapBufferARB, (target), (F, "glUnmapBufferARB(0x%x);\n", target));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(DepthBoundsEXT)(GLclampd zmin, GLclampd zmax)
+  {
+!    DISPATCH(DepthBoundsEXT, (zmin, zmax), (F, "glDepthBoundsEXT(%f, %f);\n", zmin, zmax));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GenQueriesARB)(GLsizei n, GLuint * ids)
+  {
+!    DISPATCH(GenQueriesARB, (n, ids), (F, "glGenQueriesARB(%d, %p);\n", n, (const void *) ids));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(DeleteQueriesARB)(GLsizei n, const GLuint * ids)
+  {
+!    DISPATCH(DeleteQueriesARB, (n, ids), (F, "glDeleteQueriesARB(%d, %p);\n", n, (const void *) ids));
+  }
+  
+! KEYWORD1 GLboolean KEYWORD2 NAME(IsQueryARB)(GLuint id)
+  {
+!    RETURN_DISPATCH(IsQueryARB, (id), (F, "glIsQueryARB(%d);\n", id));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(BeginQueryARB)(GLenum target, GLuint id)
+  {
+!    DISPATCH(BeginQueryARB, (target, id), (F, "glBeginQueryARB(0x%x, %d);\n", target, id));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(EndQueryARB)(GLenum target)
+  {
+!    DISPATCH(EndQueryARB, (target), (F, "glEndQueryARB(0x%x);\n", target));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetQueryivARB)(GLenum target, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetQueryivARB, (target, pname, params), (F, "glGetQueryivARB(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetQueryObjectivARB)(GLuint id, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetQueryObjectivARB, (id, pname, params), (F, "glGetQueryObjectivARB(%d, 0x%x, %p);\n", id, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetQueryObjectuivARB)(GLuint id, GLenum pname, GLuint * params)
+  {
+!    DISPATCH(GetQueryObjectuivARB, (id, pname, params), (F, "glGetQueryObjectuivARB(%d, 0x%x, %p);\n", id, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiModeDrawArraysIBM)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride)
+  {
+!    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(MultiModeDrawElementsIBM)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride)
+  {
+!    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(BlendEquationSeparateEXT)(GLenum modeRGB, GLenum modeA)
+  {
+!    DISPATCH(BlendEquationSeparateEXT, (modeRGB, modeA), (F, "glBlendEquationSeparateEXT(0x%x, 0x%x);\n", modeRGB, modeA));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ActiveTexture)(GLenum texture)
+  {
+!    DISPATCH(ActiveTextureARB, (texture), (F, "glActiveTexture(0x%x);\n", texture));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ClientActiveTexture)(GLenum texture)
+  {
+!    DISPATCH(ClientActiveTextureARB, (texture), (F, "glClientActiveTexture(0x%x);\n", texture));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1d)(GLenum target, GLdouble s)
+  {
+!    DISPATCH(MultiTexCoord1dARB, (target, s), (F, "glMultiTexCoord1d(0x%x, %f);\n", target, s));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1dv)(GLenum target, const GLdouble * v)
+  {
+!    DISPATCH(MultiTexCoord1dvARB, (target, v), (F, "glMultiTexCoord1dv(0x%x, %p);\n", target, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1f)(GLenum target, GLfloat s)
+  {
+!    DISPATCH(MultiTexCoord1fARB, (target, s), (F, "glMultiTexCoord1f(0x%x, %f);\n", target, s));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1fv)(GLenum target, const GLfloat * v)
+  {
+!    DISPATCH(MultiTexCoord1fvARB, (target, v), (F, "glMultiTexCoord1fv(0x%x, %p);\n", target, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1i)(GLenum target, GLint s)
+  {
+!    DISPATCH(MultiTexCoord1iARB, (target, s), (F, "glMultiTexCoord1i(0x%x, %d);\n", target, s));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1iv)(GLenum target, const GLint * v)
+  {
+!    DISPATCH(MultiTexCoord1ivARB, (target, v), (F, "glMultiTexCoord1iv(0x%x, %p);\n", target, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1s)(GLenum target, GLshort s)
+  {
+!    DISPATCH(MultiTexCoord1sARB, (target, s), (F, "glMultiTexCoord1s(0x%x, %d);\n", target, s));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1sv)(GLenum target, const GLshort * v)
+  {
+!    DISPATCH(MultiTexCoord1svARB, (target, v), (F, "glMultiTexCoord1sv(0x%x, %p);\n", target, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2d)(GLenum target, GLdouble s, GLdouble t)
+  {
+!    DISPATCH(MultiTexCoord2dARB, (target, s, t), (F, "glMultiTexCoord2d(0x%x, %f, %f);\n", target, s, t));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2dv)(GLenum target, const GLdouble * v)
+  {
+!    DISPATCH(MultiTexCoord2dvARB, (target, v), (F, "glMultiTexCoord2dv(0x%x, %p);\n", target, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2f)(GLenum target, GLfloat s, GLfloat t)
+  {
+!    DISPATCH(MultiTexCoord2fARB, (target, s, t), (F, "glMultiTexCoord2f(0x%x, %f, %f);\n", target, s, t));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2fv)(GLenum target, const GLfloat * v)
+  {
+!    DISPATCH(MultiTexCoord2fvARB, (target, v), (F, "glMultiTexCoord2fv(0x%x, %p);\n", target, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2i)(GLenum target, GLint s, GLint t)
+  {
+!    DISPATCH(MultiTexCoord2iARB, (target, s, t), (F, "glMultiTexCoord2i(0x%x, %d, %d);\n", target, s, t));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2iv)(GLenum target, const GLint * v)
+  {
+!    DISPATCH(MultiTexCoord2ivARB, (target, v), (F, "glMultiTexCoord2iv(0x%x, %p);\n", target, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2s)(GLenum target, GLshort s, GLshort t)
+  {
+!    DISPATCH(MultiTexCoord2sARB, (target, s, t), (F, "glMultiTexCoord2s(0x%x, %d, %d);\n", target, s, t));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2sv)(GLenum target, const GLshort * v)
+  {
+!    DISPATCH(MultiTexCoord2svARB, (target, v), (F, "glMultiTexCoord2sv(0x%x, %p);\n", target, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3d)(GLenum target, GLdouble s, GLdouble t, GLdouble r)
+  {
+!    DISPATCH(MultiTexCoord3dARB, (target, s, t, r), (F, "glMultiTexCoord3d(0x%x, %f, %f, %f);\n", target, s, t, r));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3dv)(GLenum target, const GLdouble * v)
+  {
+!    DISPATCH(MultiTexCoord3dvARB, (target, v), (F, "glMultiTexCoord3dv(0x%x, %p);\n", target, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3f)(GLenum target, GLfloat s, GLfloat t, GLfloat r)
+  {
+!    DISPATCH(MultiTexCoord3fARB, (target, s, t, r), (F, "glMultiTexCoord3f(0x%x, %f, %f, %f);\n", target, s, t, r));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3fv)(GLenum target, const GLfloat * v)
+  {
+!    DISPATCH(MultiTexCoord3fvARB, (target, v), (F, "glMultiTexCoord3fv(0x%x, %p);\n", target, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3i)(GLenum target, GLint s, GLint t, GLint r)
+  {
+!    DISPATCH(MultiTexCoord3iARB, (target, s, t, r), (F, "glMultiTexCoord3i(0x%x, %d, %d, %d);\n", target, s, t, r));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3iv)(GLenum target, const GLint * v)
+  {
+!    DISPATCH(MultiTexCoord3ivARB, (target, v), (F, "glMultiTexCoord3iv(0x%x, %p);\n", target, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3s)(GLenum target, GLshort s, GLshort t, GLshort r)
+  {
+!    DISPATCH(MultiTexCoord3sARB, (target, s, t, r), (F, "glMultiTexCoord3s(0x%x, %d, %d, %d);\n", target, s, t, r));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3sv)(GLenum target, const GLshort * v)
+  {
+!    DISPATCH(MultiTexCoord3svARB, (target, v), (F, "glMultiTexCoord3sv(0x%x, %p);\n", target, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4d)(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q)
+  {
+!    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(MultiTexCoord4dv)(GLenum target, const GLdouble * v)
+  {
+!    DISPATCH(MultiTexCoord4dvARB, (target, v), (F, "glMultiTexCoord4dv(0x%x, %p);\n", target, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4f)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+  {
+!    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(MultiTexCoord4fv)(GLenum target, const GLfloat * v)
+  {
+!    DISPATCH(MultiTexCoord4fvARB, (target, v), (F, "glMultiTexCoord4fv(0x%x, %p);\n", target, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4i)(GLenum target, GLint s, GLint t, GLint r, GLint q)
+  {
+!    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(MultiTexCoord4iv)(GLenum target, const GLint * v)
+  {
+!    DISPATCH(MultiTexCoord4ivARB, (target, v), (F, "glMultiTexCoord4iv(0x%x, %p);\n", target, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4s)(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q)
+  {
+!    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(MultiTexCoord4sv)(GLenum target, const GLshort * v)
+  {
+!    DISPATCH(MultiTexCoord4svARB, (target, v), (F, "glMultiTexCoord4sv(0x%x, %p);\n", target, (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(LoadTransposeMatrixf)(const GLfloat * m)
+  {
+!    DISPATCH(LoadTransposeMatrixfARB, (m), (F, "glLoadTransposeMatrixf(%p);\n", (const void *) m));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(LoadTransposeMatrixd)(const GLdouble * m)
+  {
+!    DISPATCH(LoadTransposeMatrixdARB, (m), (F, "glLoadTransposeMatrixd(%p);\n", (const void *) m));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultTransposeMatrixf)(const GLfloat * m)
+  {
+!    DISPATCH(MultTransposeMatrixfARB, (m), (F, "glMultTransposeMatrixf(%p);\n", (const void *) m));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MultTransposeMatrixd)(const GLdouble * m)
+  {
+!    DISPATCH(MultTransposeMatrixdARB, (m), (F, "glMultTransposeMatrixd(%p);\n", (const void *) m));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SampleCoverage)(GLclampf value, GLboolean invert)
+  {
+!    DISPATCH(SampleCoverageARB, (value, invert), (F, "glSampleCoverage(%f, %d);\n", value, invert));
+  }
+  
+! 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(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(CompressedTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data)
+  {
+!    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(CompressedTexImage1D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * data)
+  {
+!    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(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(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(CompressedTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data)
+  {
+!    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(CompressedTexSubImage1D)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data)
+  {
+!    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(GetCompressedTexImage)(GLenum target, GLint level, GLvoid * img)
+  {
+!    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,4047 ****
+  
+  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]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(SecondaryColor3f)(GLfloat red, GLfloat green, GLfloat blue)
+--- 3933,3939 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(SecondaryColor3dv)(const GLdouble * v)
+  {
+!    DISPATCH(SecondaryColor3dvEXT, (v), (F, "glSecondaryColor3dv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(SecondaryColor3f)(GLfloat red, GLfloat green, GLfloat blue)
+***************
+*** 4051,4057 ****
+  
+  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]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(SecondaryColor3i)(GLint red, GLint green, GLint blue)
+--- 3943,3949 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(SecondaryColor3fv)(const GLfloat * v)
+  {
+!    DISPATCH(SecondaryColor3fvEXT, (v), (F, "glSecondaryColor3fv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(SecondaryColor3i)(GLint red, GLint green, GLint blue)
+***************
+*** 4104,4110 ****
+     DISPATCH(SecondaryColor3usvEXT, (v), (F, "glSecondaryColor3usv(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SecondaryColorPointer)(GLint size, GLenum type, GLsizei stride, const void * pointer)
+  {
+     DISPATCH(SecondaryColorPointerEXT, (size, type, stride, pointer), (F, "glSecondaryColorPointer(%d, 0x%x, %d, %p);\n", size, type, stride, (const void *) pointer));
+  }
+--- 3996,4002 ----
+     DISPATCH(SecondaryColor3usvEXT, (v), (F, "glSecondaryColor3usv(%p);\n", (const void *) v));
+  }
+  
+! 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,4122 ****
+  
+  KEYWORD1 void KEYWORD2 NAME(WindowPos2dv)(const GLdouble * v)
+  {
+!    DISPATCH(WindowPos2dvMESA, (v), (F, "glWindowPos2dv(%p /* %g, %g */);\n", (const void *) v, v[0], v[1]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(WindowPos2f)(GLfloat x, GLfloat y)
+--- 4008,4014 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(WindowPos2dv)(const GLdouble * v)
+  {
+!    DISPATCH(WindowPos2dvMESA, (v), (F, "glWindowPos2dv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(WindowPos2f)(GLfloat x, GLfloat y)
+***************
+*** 4126,4132 ****
+  
+  KEYWORD1 void KEYWORD2 NAME(WindowPos2fv)(const GLfloat * v)
+  {
+!    DISPATCH(WindowPos2fvMESA, (v), (F, "glWindowPos2fv(%p /* %g, %g */);\n", (const void *) v, v[0], v[1]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(WindowPos2i)(GLint x, GLint y)
+--- 4018,4024 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(WindowPos2fv)(const GLfloat * v)
+  {
+!    DISPATCH(WindowPos2fvMESA, (v), (F, "glWindowPos2fv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(WindowPos2i)(GLint x, GLint y)
+***************
+*** 4156,4162 ****
+  
+  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]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(WindowPos3f)(GLfloat x, GLfloat y, GLfloat z)
+--- 4048,4054 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(WindowPos3dv)(const GLdouble * v)
+  {
+!    DISPATCH(WindowPos3dvMESA, (v), (F, "glWindowPos3dv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(WindowPos3f)(GLfloat x, GLfloat y, GLfloat z)
+***************
+*** 4166,4172 ****
+  
+  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]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(WindowPos3i)(GLint x, GLint y, GLint z)
+--- 4058,4064 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(WindowPos3fv)(const GLfloat * v)
+  {
+!    DISPATCH(WindowPos3fvMESA, (v), (F, "glWindowPos3fv(%p);\n", (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(WindowPos3i)(GLint x, GLint y, GLint z)
+***************
+*** 4181,4232 ****
+  
+  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));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3sv)(const GLshort * v)
+  {
+!    DISPATCH(WindowPos3svMESA, (v), (F, "glWindowPos3sv(%p);\n", (const void *) v));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ActiveStencilFaceEXT)(GLenum face)
+  {
+!    DISPATCH(ActiveStencilFaceEXT, (face), (F, "glActiveStencilFaceEXT(0x%x);\n", face));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(DeleteFencesNV)(GLsizei n, const GLuint * fences)
+  {
+!    DISPATCH(DeleteFencesNV, (n, fences), (F, "glDeleteFencesNV(%d, %p);\n", n, (const void *) fences));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GenFencesNV)(GLsizei n, GLuint * fences)
+  {
+!    DISPATCH(GenFencesNV, (n, fences), (F, "glGenFencesNV(%d, %p);\n", n, (const void *) fences));
+  }
+  
+! KEYWORD1 GLboolean KEYWORD2 NAME(IsFenceNV)(GLuint fence)
+  {
+!    RETURN_DISPATCH(IsFenceNV, (fence), (F, "glIsFenceNV(%d);\n", fence));
+  }
+  
+! KEYWORD1 GLboolean KEYWORD2 NAME(TestFenceNV)(GLuint fence)
+  {
+!    RETURN_DISPATCH(TestFenceNV, (fence), (F, "glTestFenceNV(%d);\n", fence));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetFenceivNV)(GLuint fence, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetFenceivNV, (fence, pname, params), (F, "glGetFenceivNV(%d, 0x%x, %p);\n", fence, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(FinishFenceNV)(GLuint fence)
+  {
+!    DISPATCH(FinishFenceNV, (fence), (F, "glFinishFenceNV(%d);\n", fence));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SetFenceNV)(GLuint fence, GLenum condition)
+  {
+!    DISPATCH(SetFenceNV, (fence, condition), (F, "glSetFenceNV(%d, 0x%x);\n", fence, condition));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(VertexAttrib1sARB)(GLuint index, GLshort x)
+--- 4073,4269 ----
+  
+  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));
+! }
+! 
+! 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(WindowPos2svARB)(const GLshort * p)
+  {
+!    DISPATCH(WindowPos2svMESA, (p), (F, "glWindowPos2svARB(%p);\n", (const void *) p));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3dARB)(GLdouble x, GLdouble y, GLdouble z)
+  {
+!    DISPATCH(WindowPos3dMESA, (x, y, z), (F, "glWindowPos3dARB(%f, %f, %f);\n", x, y, z));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3fARB)(GLfloat x, GLfloat y, GLfloat z)
+  {
+!    DISPATCH(WindowPos3fMESA, (x, y, z), (F, "glWindowPos3fARB(%f, %f, %f);\n", x, y, z));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3iARB)(GLint x, GLint y, GLint z)
+  {
+!    DISPATCH(WindowPos3iMESA, (x, y, z), (F, "glWindowPos3iARB(%d, %d, %d);\n", x, y, z));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3sARB)(GLshort x, GLshort y, GLshort z)
+  {
+!    DISPATCH(WindowPos3sMESA, (x, y, z), (F, "glWindowPos3sARB(%d, %d, %d);\n", x, y, z));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3dvARB)(const GLdouble * p)
+  {
+!    DISPATCH(WindowPos3dvMESA, (p), (F, "glWindowPos3dvARB(%p);\n", (const void *) p));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3fvARB)(const GLfloat * p)
+  {
+!    DISPATCH(WindowPos3fvMESA, (p), (F, "glWindowPos3fvARB(%p);\n", (const void *) p));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3ivARB)(const GLint * p)
+  {
+!    DISPATCH(WindowPos3ivMESA, (p), (F, "glWindowPos3ivARB(%p);\n", (const void *) p));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(WindowPos3svARB)(const GLshort * p)
+  {
+!    DISPATCH(WindowPos3svMESA, (p), (F, "glWindowPos3svARB(%p);\n", (const void *) p));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(VertexAttrib1sARB)(GLuint index, GLshort x)
+***************
+*** 4316,4327 ****
+  
+  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]));
+  }
+  
+  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]));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(VertexAttrib3svARB)(GLuint index, const GLshort * v)
+--- 4353,4364 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(VertexAttrib2fvARB)(GLuint index, const GLfloat * v)
+  {
+!    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);\n", index, (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(VertexAttrib3svARB)(GLuint index, const GLshort * v)
+***************
+*** 4331,4347 ****
+  
+  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]));
+  }
+  
+  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));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(VertexAttrib4svARB)(GLuint index, const GLshort * v)
+--- 4368,4379 ----
+  
+  KEYWORD1 void KEYWORD2 NAME(VertexAttrib3fvARB)(GLuint index, const GLfloat * v)
+  {
+!    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);\n", index, (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(VertexAttrib4svARB)(GLuint index, const GLshort * v)
+***************
+*** 4349,4397 ****
+     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]));
+  }
+  
+  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));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(VertexAttrib4NubvARB)(GLuint index, const GLubyte * v)
+--- 4381,4394 ----
+     DISPATCH(VertexAttrib4svNV, (index, v), (F, "glVertexAttrib4svARB(%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);\n", index, (const void *) v));
+  }
+  
+  KEYWORD1 void KEYWORD2 NAME(VertexAttrib4dvARB)(GLuint index, const GLdouble * 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,4434 ****
+     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));
+--- 4396,4401 ----
+***************
+*** 4449,4524 ****
+     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));
+--- 4416,4421 ----
+***************
+*** 4539,4777 ****
+     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)
+  {
+!    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]));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetProgramNamedParameterfvNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params)
+  {
+!    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(GetProgramNamedParameterdvNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params)
+  {
+!    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(BindBufferARB)(GLenum target, GLuint buffer)
+  {
+!    DISPATCH(BindBufferARB, (target, buffer), (F, "glBindBufferARB(0x%x, %d);\n", target, buffer));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(BufferDataARB)(GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage)
+  {
+!    DISPATCH(BufferDataARB, (target, size, data, usage), (F, "glBufferDataARB(0x%x, %p, %p, 0x%x);\n", target, (const void *) size, (const void *) data, usage));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(BufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data)
+  {
+!    DISPATCH(BufferSubDataARB, (target, offset, size, data), (F, "glBufferSubDataARB(0x%x, %p, %p, %p);\n", target, (const void *) offset, (const void *) size, (const void *) data));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(DeleteBuffersARB)(GLsizei n, const GLuint * buffer)
+  {
+!    DISPATCH(DeleteBuffersARB, (n, buffer), (F, "glDeleteBuffersARB(%d, %p);\n", n, (const void *) buffer));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GenBuffersARB)(GLsizei n, GLuint * buffer)
+  {
+!    DISPATCH(GenBuffersARB, (n, buffer), (F, "glGenBuffersARB(%d, %p);\n", n, (const void *) buffer));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetBufferParameterivARB)(GLenum target, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetBufferParameterivARB, (target, pname, params), (F, "glGetBufferParameterivARB(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetBufferPointervARB)(GLenum target, GLenum pname, GLvoid ** params)
+  {
+!    DISPATCH(GetBufferPointervARB, (target, pname, params), (F, "glGetBufferPointervARB(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetBufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, void * data)
+  {
+!    DISPATCH(GetBufferSubDataARB, (target, offset, size, data), (F, "glGetBufferSubDataARB(0x%x, %p, %p, %p);\n", target, (const void *) offset, (const void *) size, (const void *) data));
+  }
+  
+! KEYWORD1 GLboolean KEYWORD2 NAME(IsBufferARB)(GLuint buffer)
+  {
+!    RETURN_DISPATCH(IsBufferARB, (buffer), (F, "glIsBufferARB(%d);\n", buffer));
+  }
+  
+! KEYWORD1 void * KEYWORD2 NAME(MapBufferARB)(GLenum target, GLenum access)
+  {
+!    RETURN_DISPATCH(MapBufferARB, (target, access), (F, "glMapBufferARB(0x%x, 0x%x);\n", target, access));
+  }
+  
+! KEYWORD1 GLboolean KEYWORD2 NAME(UnmapBufferARB)(GLenum target)
+  {
+!    RETURN_DISPATCH(UnmapBufferARB, (target), (F, "glUnmapBufferARB(0x%x);\n", target));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(DepthBoundsEXT)(GLclampd zmin, GLclampd zmax)
+  {
+!    DISPATCH(DepthBoundsEXT, (zmin, zmax), (F, "glDepthBoundsEXT(%f, %f);\n", zmin, zmax));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GenQueriesARB)(GLsizei n, GLuint * ids)
+  {
+!    DISPATCH(GenQueriesARB, (n, ids), (F, "glGenQueriesARB(%d, %p);\n", n, (const void *) ids));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(DeleteQueriesARB)(GLsizei n, const GLuint * ids)
+  {
+!    DISPATCH(DeleteQueriesARB, (n, ids), (F, "glDeleteQueriesARB(%d, %p);\n", n, (const void *) ids));
+  }
+  
+! KEYWORD1 GLboolean KEYWORD2 NAME(IsQueryARB)(GLuint id)
+  {
+!    RETURN_DISPATCH(IsQueryARB, (id), (F, "glIsQueryARB(%d);\n", id));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(BeginQueryARB)(GLenum target, GLuint id)
+  {
+!    DISPATCH(BeginQueryARB, (target, id), (F, "glBeginQueryARB(0x%x, %d);\n", target, id));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(EndQueryARB)(GLenum target)
+  {
+!    DISPATCH(EndQueryARB, (target), (F, "glEndQueryARB(0x%x);\n", target));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetQueryivARB)(GLenum target, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetQueryivARB, (target, pname, params), (F, "glGetQueryivARB(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetQueryObjectivARB)(GLuint id, GLenum pname, GLint * params)
+  {
+!    DISPATCH(GetQueryObjectivARB, (id, pname, params), (F, "glGetQueryObjectivARB(%d, 0x%x, %p);\n", id, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetQueryObjectuivARB)(GLuint id, GLenum pname, GLuint * params)
+  {
+!    DISPATCH(GetQueryObjectuivARB, (id, pname, params), (F, "glGetQueryObjectuivARB(%d, 0x%x, %p);\n", id, pname, (const void *) params));
+  }
+  
+! 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, %p, %p, 0x%x);\n", target, (const void *) 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, %p, %p, %p);\n", target, (const void *) offset, (const void *) 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, void * data)
+  {
+!    DISPATCH(GetBufferSubDataARB, (target, offset, size, data), (F, "glGetBufferSubData(0x%x, %p, %p, %p);\n", target, (const void *) offset, (const void *) size, (const void *) data));
+  }
+  
+! KEYWORD1 GLboolean KEYWORD2 NAME(IsBuffer)(GLuint buffer)
+  {
+!    RETURN_DISPATCH(IsBufferARB, (buffer), (F, "glIsBuffer(%d);\n", buffer));
+  }
+  
+! KEYWORD1 void * 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(BlendEquationSeparateEXT)(GLenum modeRGB, GLenum modeA)
+  {
+!    DISPATCH(BlendEquationSeparateEXT, (modeRGB, modeA), (F, "glBlendEquationSeparateEXT(0x%x, 0x%x);\n", modeRGB, modeA));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(BlendEquationSeparateATI)(GLenum modeRGB, GLenum modeA)
+  {
+!    DISPATCH(BlendEquationSeparateEXT, (modeRGB, modeA), (F, "glBlendEquationSeparateATI(0x%x, 0x%x);\n", modeRGB, modeA));
+  }
+  
+  
+--- 4436,4659 ----
+     DISPATCH(GetVertexAttribPointervNV, (index, pname, params), (F, "glGetVertexAttribPointervARB(%d, 0x%x, %p);\n", index, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(BlendColorEXT)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+  {
+!    DISPATCH(BlendColor, (red, green, blue, alpha), (F, "glBlendColorEXT(%f, %f, %f, %f);\n", red, green, blue, alpha));
+  }
+  
+! 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(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(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(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(TexSubImage1DEXT)(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, "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(TexSubImage2DEXT)(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, "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(CopyTexImage1DEXT)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border)
+  {
+!    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(CopyTexImage2DEXT)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+  {
+!    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(CopyTexSubImage1DEXT)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
+  {
+!    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(CopyTexSubImage2DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+  {
+!    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(CopyTexSubImage3DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+  {
+!    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(HistogramEXT)(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink)
+  {
+!    DISPATCH(Histogram, (target, width, internalformat, sink), (F, "glHistogramEXT(0x%x, %d, 0x%x, %d);\n", target, width, internalformat, sink));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(MinmaxEXT)(GLenum target, GLenum internalformat, GLboolean sink)
+  {
+!    DISPATCH(Minmax, (target, internalformat, sink), (F, "glMinmaxEXT(0x%x, 0x%x, %d);\n", target, internalformat, sink));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ResetHistogramEXT)(GLenum target)
+  {
+!    DISPATCH(ResetHistogram, (target), (F, "glResetHistogramEXT(0x%x);\n", target));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ResetMinmaxEXT)(GLenum target)
+  {
+!    DISPATCH(ResetMinmax, (target), (F, "glResetMinmaxEXT(0x%x);\n", target));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ConvolutionFilter1DEXT)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * image)
+  {
+!    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(ConvolutionFilter2DEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * image)
+  {
+!    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(ConvolutionParameterfEXT)(GLenum target, GLenum pname, GLfloat params)
+  {
+!    DISPATCH(ConvolutionParameterf, (target, pname, params), (F, "glConvolutionParameterfEXT(0x%x, 0x%x, %f);\n", target, pname, params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ConvolutionParameterfvEXT)(GLenum target, GLenum pname, const GLfloat * params)
+  {
+!    DISPATCH(ConvolutionParameterfv, (target, pname, params), (F, "glConvolutionParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ConvolutionParameteriEXT)(GLenum target, GLenum pname, GLint params)
+  {
+!    DISPATCH(ConvolutionParameteri, (target, pname, params), (F, "glConvolutionParameteriEXT(0x%x, 0x%x, %d);\n", target, pname, params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ConvolutionParameterivEXT)(GLenum target, GLenum pname, const GLint * params)
+  {
+!    DISPATCH(ConvolutionParameteriv, (target, pname, params), (F, "glConvolutionParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(CopyConvolutionFilter1DEXT)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width)
+  {
+!    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(CopyConvolutionFilter2DEXT)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height)
+  {
+!    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(SeparableFilter2DEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * row, const GLvoid * column)
+  {
+!    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(ColorTableSGI)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * table)
+  {
+!    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(ColorTableParameterfvSGI)(GLenum target, GLenum pname, const GLfloat * params)
+  {
+!    DISPATCH(ColorTableParameterfv, (target, pname, params), (F, "glColorTableParameterfvSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ColorTableParameterivSGI)(GLenum target, GLenum pname, const GLint * params)
+  {
+!    DISPATCH(ColorTableParameteriv, (target, pname, params), (F, "glColorTableParameterivSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(CopyColorTableSGI)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width)
+  {
+!    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(BindTextureEXT)(GLenum target, GLuint texture)
+  {
+!    DISPATCH(BindTexture, (target, texture), (F, "glBindTextureEXT(0x%x, %d);\n", target, texture));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(DeleteTexturesEXT)(GLsizei n, const GLuint * textures)
+  {
+!    DISPATCH(DeleteTextures, (n, textures), (F, "glDeleteTexturesEXT(%d, %p);\n", n, (const void *) textures));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(PrioritizeTexturesEXT)(GLsizei n, const GLuint * textures, const GLclampf * priorities)
+  {
+!    DISPATCH(PrioritizeTextures, (n, textures, priorities), (F, "glPrioritizeTexturesEXT(%d, %p, %p);\n", n, (const void *) textures, (const void *) priorities));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ArrayElementEXT)(GLint i)
+  {
+!    DISPATCH(ArrayElement, (i), (F, "glArrayElementEXT(%d);\n", i));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(DrawArraysEXT)(GLenum mode, GLint first, GLsizei count)
+  {
+!    DISPATCH(DrawArrays, (mode, first, count), (F, "glDrawArraysEXT(0x%x, %d, %d);\n", mode, first, count));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(GetPointervEXT)(GLenum pname, GLvoid ** params)
+  {
+!    DISPATCH(GetPointerv, (pname, params), (F, "glGetPointervEXT(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(BlendEquationEXT)(GLenum mode)
+  {
+!    DISPATCH(BlendEquation, (mode), (F, "glBlendEquationEXT(0x%x);\n", mode));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ColorSubTableEXT)(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid * data)
+  {
+!    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(CopyColorSubTableEXT)(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width)
+  {
+!    DISPATCH(CopyColorSubTable, (target, start, x, y, width), (F, "glCopyColorSubTableEXT(0x%x, %d, %d, %d, %d);\n", target, start, x, y, width));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(ColorTableEXT)(GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid * table)
+  {
+!    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(DrawRangeElementsEXT)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices)
+  {
+!    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(SampleMaskEXT)(GLclampf value, GLboolean invert)
+  {
+!    DISPATCH(SampleMaskSGIS, (value, invert), (F, "glSampleMaskEXT(%f, %d);\n", value, invert));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(SamplePatternEXT)(GLenum pattern)
+  {
+!    DISPATCH(SamplePatternSGIS, (pattern), (F, "glSamplePatternEXT(0x%x);\n", pattern));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(BlendEquationSeparateATI)(GLenum modeRGB, GLenum modeA)
+  {
+!    DISPATCH(BlendEquationSeparateEXT, (modeRGB, modeA), (F, "glBlendEquationSeparateATI(0x%x, 0x%x);\n", modeRGB, modeA));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(BlendFuncSeparateINGR)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
+  {
+!    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(PointParameterfSGIS)(GLenum pname, GLfloat param)
+  {
+!    DISPATCH(PointParameterfEXT, (pname, param), (F, "glPointParameterfSGIS(0x%x, %f);\n", pname, param));
+  }
+  
+! KEYWORD1 void KEYWORD2 NAME(PointParameterfvSGIS)(GLenum pname, const GLfloat * params)
+  {
+!    DISPATCH(PointParameterfvEXT, (pname, params), (F, "glPointParameterfvSGIS(0x%x, %p);\n", pname, (const void *) params));
+  }
+  
+  
+***************
+*** 4787,4793 ****
+  #error TABLE_ENTRY must be defined
+  #endif
+  
+! void *DISPATCH_TABLE_NAME[] = {
+     TABLE_ENTRY(NewList),
+     TABLE_ENTRY(EndList),
+     TABLE_ENTRY(CallList),
+--- 4669,4675 ----
+  #error TABLE_ENTRY must be defined
+  #endif
+  
+! static _glapi_proc DISPATCH_TABLE_NAME[] = {
+     TABLE_ENTRY(NewList),
+     TABLE_ENTRY(EndList),
+     TABLE_ENTRY(CallList),
+***************
+*** 5608,5617 ****
+  
+  /*
+   * This is just used to silence compiler warnings.
+!  * We list the functions which aren't otherwise used.
+   */
+  #ifdef UNUSED_TABLE_NAME
+! void *UNUSED_TABLE_NAME[] = {
+     TABLE_ENTRY(ActiveTexture),
+     TABLE_ENTRY(ClientActiveTexture),
+     TABLE_ENTRY(MultiTexCoord1d),
+--- 5490,5499 ----
+  
+  /*
+   * This is just used to silence compiler warnings.
+!  * We list the functions which are not otherwise used.
+   */
+  #ifdef UNUSED_TABLE_NAME
+! static _glapi_proc UNUSED_TABLE_NAME[] = {
+     TABLE_ENTRY(ActiveTexture),
+     TABLE_ENTRY(ClientActiveTexture),
+     TABLE_ENTRY(MultiTexCoord1d),
+***************
+*** 5658,5724 ****
+     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),
+--- 5540,5545 ----
+***************
+*** 5764,5769 ****
+--- 5585,5627 ----
+     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,5823 ****
+     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(BlendEquationSeparateATI),
+  };
+  #endif /*UNUSED_TABLE_NAME*/
+  
+--- 5656,5705 ----
+     TABLE_ENTRY(GetVertexAttribfvARB),
+     TABLE_ENTRY(GetVertexAttribivARB),
+     TABLE_ENTRY(GetVertexAttribPointervARB),
+!    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 -c 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,969 ****
+   */
+  
+  typedef struct {
+!     int Name_offset;
+  #ifdef NEED_FUNCTION_POINTER
+!     void * Address;
+  #endif
+!     unsigned int Offset;
+  } glprocs_table_t;
+  
+  #ifdef NEED_FUNCTION_POINTER
+! #  define NAME_FUNC_OFFSET(n,f,o) { n , (void *) 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 glprocs_table_t static_functions[] = {
+      NAME_FUNC_OFFSET(     0, glNewList, _gloffset_NewList ),
+--- 31,969 ----
+   */
+  
+  typedef struct {
+!     GLint Name_offset;
+  #ifdef NEED_FUNCTION_POINTER
+!     _glapi_proc Address;
+  #endif
+!     GLuint Offset;
+  } glprocs_table_t;
+  
+  #ifdef NEED_FUNCTION_POINTER
+! #  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[] =
+!     "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,1889 ****
+      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 )
+  };
+  
+  #undef NAME_FUNC_OFFSET
+--- 1883,1889 ----
+      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, 0 )
+  };
+  
+  #undef NAME_FUNC_OFFSET
+Index: xc/extras/Mesa/src/mesa/glapi/glsparcasm.py
+diff -c 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,115 ****
+       print '.globl gl%s' % (name)
+       print '.type gl%s,#function' % (name)
+       print 'gl%s:' % (name)
+!      print '#if defined(__sparc_v9__) && !defined(__linux__)'
+       print '\tsethi\t%hi(0x00000000), %g2'
+       print '\tsethi\t%hi(0x00000000), %g1'
+       print '\tor\t%g2, %lo(0x00000000), %g2'
+--- 109,115 ----
+       print '.globl gl%s' % (name)
+       print '.type gl%s,#function' % (name)
+       print 'gl%s:' % (name)
+!      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 -c 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 ****
+- 
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  3.5
+   *
+!  * Copyright (C) 1999-2001  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"),
+--- 1,8 ----
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.2.1
+   *
+!  * 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,200 ****
+   * We wrap it again for GL.
+   */
+  #ifdef XTHREADS
+! #include "Xthreads.h"
+  
+  typedef struct {
+     xthread_key_t key;
+--- 193,199 ----
+   * We wrap it again for GL.
+   */
+  #ifdef XTHREADS
+! #include <X11/Xthreads.h>
+  
+  typedef struct {
+     xthread_key_t key;
+Index: xc/extras/Mesa/src/mesa/main/Makefile.BeOS-R5
+diff -c /dev/null xc/extras/Mesa/src/mesa/main/Makefile.BeOS-R5:1.2.2.1
+*** /dev/null  Sat Feb  5 21:34:45 2005
+--- xc/extras/Mesa/src/mesa/main/Makefile.BeOS-R5      Wed Dec 15 01:51:02 2004
+***************
+*** 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 -c 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,142 ****
+   */
+  #define TYPE_IDX(t) ( (t) == GL_DOUBLE ? 7 : (t) & 7 )
+  
+  
+! 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 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 array_func IndexFuncs[8] = {
+     0,
+!    (array_func)glIndexubv,
+!    (array_func)glIndexsv,
+     0,
+!    (array_func)glIndexiv,
+     0,
+!    (array_func)glIndexfv,
+!    (array_func)glIndexdv
+  };
+  
+! static array_func NormalFuncs[8] = {
+!    (array_func)glNormal3bv,
+     0,
+!    (array_func)glNormal3sv,
+     0,
+!    (array_func)glNormal3iv,
+     0,
+!    (array_func)glNormal3fv,
+!    (array_func)glNormal3dv,
+  };
+  
+- 
+  /* Wrapper functions in case glSecondaryColor*EXT doesn't exist */
+  static void GLAPIENTRY SecondaryColor3bvEXT(const GLbyte *c)
+  {
+--- 64,337 ----
+   */
+  #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 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 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 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) Indexubv,
+!    (array_func) Indexsv,
+     0,
+!    (array_func) Indexiv,
+     0,
+!    (array_func) Indexfv,
+!    (array_func) Indexdv,
+  };
+  
+! 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) Normal3sv,
+     0,
+!    (array_func) Normal3iv,
+     0,
+!    (array_func) Normal3fv,
+!    (array_func) Normal3dv,
+  };
+  
+  /* Wrapper functions in case glSecondaryColor*EXT doesn't exist */
+  static void GLAPIENTRY SecondaryColor3bvEXT(const GLbyte *c)
+  {
+***************
+*** 178,184 ****
+     GL_CALL(SecondaryColor3dvEXT)(c);
+  }
+  
+! static array_func SecondaryColorFuncs[8] = {
+     (array_func) SecondaryColor3bvEXT,
+     (array_func) SecondaryColor3ubvEXT,
+     (array_func) SecondaryColor3svEXT,
+--- 373,379 ----
+     GL_CALL(SecondaryColor3dvEXT)(c);
+  }
+  
+! static const array_func SecondaryColorFuncs[8] = {
+     (array_func) SecondaryColor3bvEXT,
+     (array_func) SecondaryColor3ubvEXT,
+     (array_func) SecondaryColor3svEXT,
+***************
+*** 201,207 ****
+     GL_CALL(FogCoorddvEXT)(f);
+  }
+  
+! static array_func FogCoordFuncs[8] = {
+     0,
+     0,
+     0,
+--- 396,402 ----
+     GL_CALL(FogCoorddvEXT)(f);
+  }
+  
+! static const array_func FogCoordFuncs[8] = {
+     0,
+     0,
+     0,
+***************
+*** 212,218 ****
+     (array_func) FogCoorddvEXT
+  };
+  
+- 
+  /**********************************************************************/
+  
+  /* GL_BYTE attributes */
+--- 407,412 ----
+***************
+*** 549,555 ****
+  /*
+   * Array [size][type] of VertexAttrib functions
+   */
+! static attrib_func AttribFuncs[2][4][8] = {
+     {
+        /* non-normalized */
+        {
+--- 743,749 ----
+  /*
+   * Array [size][type] of VertexAttrib functions
+   */
+! static const attrib_func AttribFuncs[2][4][8] = {
+     {
+        /* non-normalized */
+        {
+***************
+*** 646,651 ****
+--- 840,850 ----
+     }
+  };
+  
++ static void GLAPIENTRY EdgeFlagv(const GLboolean *flag)
++ {
++    GL_CALL(EdgeFlagv)(flag);
++ }
++ 
+  /**********************************************************************/
+  
+  
+***************
+*** 693,699 ****
+     }
+     if (ctx->Array.EdgeFlag.Enabled) {
+        aa->array = &ctx->Array.EdgeFlag;
+!       aa->func = (array_func) glEdgeFlagv;
+        aa++;
+     }
+     if (ctx->Array.Normal.Enabled) {
+--- 892,898 ----
+     }
+     if (ctx->Array.EdgeFlag.Enabled) {
+        aa->array = &ctx->Array.EdgeFlag;
+!       aa->func = (array_func) EdgeFlagv;
+        aa++;
+     }
+     if (ctx->Array.Normal.Enabled) {
+Index: xc/extras/Mesa/src/mesa/main/api_loopback.c
+diff -c 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,12 ****
+  
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.1
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+--- 6,12 ----
+  
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.3
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+***************
+*** 1066,1072 ****
+  static void GLAPIENTRY
+  loopback_VertexAttrib3sNV(GLuint index, GLshort x, GLshort y, GLshort z)
+  {
+!    ATTRIB3(index, (GLfloat) x, y, z);
+  }
+  
+  static void GLAPIENTRY
+--- 1066,1072 ----
+  static void GLAPIENTRY
+  loopback_VertexAttrib3sNV(GLuint index, GLshort x, GLshort y, GLshort z)
+  {
+!    ATTRIB3(index, (GLfloat) x, (GLfloat) y, (GLfloat) z);
+  }
+  
+  static void GLAPIENTRY
+***************
+*** 1139,1145 ****
+  static void GLAPIENTRY
+  loopback_VertexAttrib3svNV(GLuint index, const GLshort *v)
+  {
+!    ATTRIB2(index, (GLfloat) v[0], (GLfloat) v[1]);
+  }
+  
+  static void GLAPIENTRY
+--- 1139,1145 ----
+  static void GLAPIENTRY
+  loopback_VertexAttrib3svNV(GLuint index, const GLshort *v)
+  {
+!    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 -c 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,573 ****
+--- 568,574 ----
+   */
+  void GLAPIENTRY _mesa_noop_Begin( GLenum mode )
+  {
++    (void) mode;
+  }
+  
+  
+Index: xc/extras/Mesa/src/mesa/main/attrib.c
+diff -c 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 ****
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.1
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+--- 1,6 ----
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.2
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+***************
+*** 1017,1022 ****
+--- 1017,1024 ----
+                    _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 -c 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 ****
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.1
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+--- 1,6 ----
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.2
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+***************
+*** 113,129 ****
+     }
+  
+     bufObj = buffer_object_get_target( ctx, target, str );
+!    if ( bufObj == NULL ) {
+        return NULL;
+     }
+  
+!    if ( (GLuint)(offset + size) > bufObj->Size ) {
+        _mesa_error(ctx, GL_INVALID_VALUE,
+                 "%s(size + offset > buffer size)", str);
+        return NULL;
+     }
+  
+!    if ( bufObj->Pointer != NULL ) {
+        _mesa_error(ctx, GL_INVALID_OPERATION, "%s", str);
+        return NULL;
+     }
+--- 113,129 ----
+     }
+  
+     bufObj = buffer_object_get_target( ctx, target, str );
+!    if (!bufObj || bufObj->Name == 0) {
+        return NULL;
+     }
+  
+!    if ((GLuint) (offset + size) > bufObj->Size) {
+        _mesa_error(ctx, GL_INVALID_VALUE,
+                 "%s(size + offset > buffer size)", str);
+        return NULL;
+     }
+  
+!    if (bufObj->Pointer) {
+        _mesa_error(ctx, GL_INVALID_OPERATION, "%s", str);
+        return NULL;
+     }
+***************
+*** 142,147 ****
+--- 142,150 ----
+  _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,162 ****
+--- 160,167 ----
+  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,175 ****
+--- 175,182 ----
+  _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,245 ****
+  {
+     void * new_data;
+  
+!    (void) target;
+  
+     new_data = _mesa_realloc( bufObj->Data, bufObj->Size, size );
+!    if ( new_data != NULL ) {
+        bufObj->Data = (GLubyte *) new_data;
+        bufObj->Size = size;
+        bufObj->Usage = usage;
+  
+!       if ( data != NULL ) {
+        _mesa_memcpy( bufObj->Data, data, size );
+        }
+     }
+--- 238,252 ----
+  {
+     void * new_data;
+  
+!    (void) ctx; (void) target;
+  
+     new_data = _mesa_realloc( bufObj->Data, bufObj->Size, size );
+!    if (new_data) {
+        bufObj->Data = (GLubyte *) new_data;
+        bufObj->Size = size;
+        bufObj->Usage = usage;
+  
+!       if (data) {
+        _mesa_memcpy( bufObj->Data, data, size );
+        }
+     }
+***************
+*** 269,276 ****
+                     GLsizeiptrARB size, const GLvoid * data,
+                     struct gl_buffer_object * bufObj )
+  {
+!    if ( (bufObj->Data != NULL)
+!      && ((GLuint)(size + offset) <= bufObj->Size) ) {
+        _mesa_memcpy( (GLubyte *) bufObj->Data + offset, data, size );
+     }
+  }
+--- 276,284 ----
+                     GLsizeiptrARB size, const GLvoid * data,
+                     struct gl_buffer_object * bufObj )
+  {
+!    (void) ctx; (void) target;
+! 
+!    if (bufObj->Data && ((GLuint) (size + offset) <= bufObj->Size)) {
+        _mesa_memcpy( (GLubyte *) bufObj->Data + offset, data, size );
+     }
+  }
+***************
+*** 299,306 ****
+                         GLsizeiptrARB size, GLvoid * data,
+                         struct gl_buffer_object * bufObj )
+  {
+!    if ( (bufObj->Data != NULL)
+!      && ((GLuint)(size + offset) <= bufObj->Size) ) {
+        _mesa_memcpy( data, (GLubyte *) bufObj->Data + offset, size );
+     }
+  }
+--- 307,315 ----
+                         GLsizeiptrARB size, GLvoid * data,
+                         struct gl_buffer_object * bufObj )
+  {
+!    (void) ctx; (void) target;
+! 
+!    if (bufObj->Data && ((GLuint) (size + offset) <= bufObj->Size)) {
+        _mesa_memcpy( data, (GLubyte *) bufObj->Data + offset, size );
+     }
+  }
+***************
+*** 326,331 ****
+--- 335,341 ----
+  _mesa_buffer_map( GLcontext *ctx, GLenum target, GLenum access,
+                 struct gl_buffer_object * bufObj )
+  {
++    (void) ctx; (void) target; (void) access;
+     return bufObj->Data;
+  }
+  
+***************
+*** 371,377 ****
+   * 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
+--- 381,386 ----
+***************
+*** 432,444 ****
+     ASSERT_OUTSIDE_BEGIN_END(ctx);
+  
+     oldBufObj = buffer_object_get_target( ctx, target, "BindBufferARB" );
+!    if ( (oldBufObj != NULL) && (oldBufObj->Name == buffer) )
+        return;   /* rebinding the same buffer object- no change */
+  
+     /*
+      * Get pointer to new buffer object (newBufObj)
+      */
+!    if ( buffer == 0 ) {
+        /* The spec says there's not a buffer object named 0, but we use
+         * one internally because it simplifies things.
+         */
+--- 441,453 ----
+     ASSERT_OUTSIDE_BEGIN_END(ctx);
+  
+     oldBufObj = buffer_object_get_target( ctx, target, "BindBufferARB" );
+!    if (oldBufObj && oldBufObj->Name == buffer)
+        return;   /* rebinding the same buffer object- no change */
+  
+     /*
+      * Get pointer to new buffer object (newBufObj)
+      */
+!    if (buffer == 0) {
+        /* The spec says there's not a buffer object named 0, but we use
+         * one internally because it simplifies things.
+         */
+***************
+*** 479,488 ****
+     }
+  
+     /* Pass BindBuffer call to device driver */
+!    if ( (ctx->Driver.BindBuffer != NULL) && (newBufObj != NULL) )
+        (*ctx->Driver.BindBuffer)( ctx, target, newBufObj );
+  
+!    if ( oldBufObj != NULL ) {
+        oldBufObj->RefCount--;
+        assert(oldBufObj->RefCount >= 0);
+        if (oldBufObj->RefCount == 0) {
+--- 488,497 ----
+     }
+  
+     /* Pass BindBuffer call to device driver */
+!    if (ctx->Driver.BindBuffer && newBufObj)
+        (*ctx->Driver.BindBuffer)( ctx, target, newBufObj );
+  
+!    if (oldBufObj) {
+        oldBufObj->RefCount--;
+        assert(oldBufObj->RefCount >= 0);
+        if (oldBufObj->RefCount == 0) {
+***************
+*** 499,505 ****
+   * Delete a set of buffer objects.
+   * 
+   * \param n      Number of buffer objects to delete.
+!  * \param buffer Array of \c n buffer object IDs.
+   */
+  void GLAPIENTRY
+  _mesa_DeleteBuffersARB(GLsizei n, const GLuint *ids)
+--- 508,514 ----
+   * Delete a set of buffer objects.
+   * 
+   * \param n      Number of buffer objects to delete.
+!  * \param ids    Array of \c n buffer object IDs.
+   */
+  void GLAPIENTRY
+  _mesa_DeleteBuffersARB(GLsizei n, const GLuint *ids)
+***************
+*** 528,568 ****
+--- 537,586 ----
+              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,588 ****
+              }
+  
+              /* decrement refcount and delete if <= 0 */
+!             bufObj->DeletePending = GL_TRUE;
+!             bufObj->RefCount--;
+              if (bufObj->RefCount <= 0) {
+                 /* buffer should not be bound anymore! */
+                 ASSERT(ctx->Array.ArrayBufferObj != bufObj);
+--- 599,609 ----
+              }
+  
+              /* decrement refcount and delete if <= 0 */
+!             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,625 ****
+        return;
+     }
+  
+!    if ( buffer == NULL ) {
+        return;
+     }
+  
+--- 640,646 ----
+        return;
+     }
+  
+!    if (!buffer) {
+        return;
+     }
+  
+***************
+*** 704,710 ****
+     }
+  
+     bufObj = buffer_object_get_target( ctx, target, "BufferDataARB" );
+!    if ( bufObj == NULL ) {
+        _mesa_error(ctx, GL_INVALID_OPERATION, "glBufferDataARB" );
+        return;
+     }
+--- 725,731 ----
+     }
+  
+     bufObj = buffer_object_get_target( ctx, target, "BufferDataARB" );
+!    if (!bufObj || bufObj->Name ==0) {
+        _mesa_error(ctx, GL_INVALID_OPERATION, "glBufferDataARB" );
+        return;
+     }
+***************
+*** 790,808 ****
+     }
+  
+     bufObj = buffer_object_get_target( ctx, target, "MapBufferARB" );
+!    if ( bufObj == NULL ) {
+        _mesa_error(ctx, GL_INVALID_OPERATION, "glMapBufferARB" );
+        return NULL;
+     }
+  
+!    if ( bufObj->Pointer != NULL ) {
+        _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 ) {
+        _mesa_error(ctx, GL_OUT_OF_MEMORY, "glMapBufferARB(access)");
+     }
+  
+--- 811,829 ----
+     }
+  
+     bufObj = buffer_object_get_target( ctx, target, "MapBufferARB" );
+!    if (!bufObj || bufObj->Name == 0) {
+        _mesa_error(ctx, GL_INVALID_OPERATION, "glMapBufferARB" );
+        return 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) {
+        _mesa_error(ctx, GL_OUT_OF_MEMORY, "glMapBufferARB(access)");
+     }
+  
+***************
+*** 821,837 ****
+     ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, GL_FALSE);
+  
+     bufObj = buffer_object_get_target( ctx, target, "UnmapBufferARB" );
+!    if ( bufObj == NULL ) {
+        _mesa_error(ctx, GL_INVALID_OPERATION, "glUnmapBufferARB" );
+        return GL_FALSE;
+     }
+  
+!    if ( bufObj->Pointer == NULL ) {
+        _mesa_error(ctx, GL_INVALID_OPERATION, "glUnmapBufferARB");
+        return GL_FALSE;
+     }
+  
+!    if ( ctx->Driver.UnmapBuffer != NULL ) {
+        status = (*ctx->Driver.UnmapBuffer)( ctx, target, bufObj );
+     }
+  
+--- 842,858 ----
+     ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, GL_FALSE);
+  
+     bufObj = buffer_object_get_target( ctx, target, "UnmapBufferARB" );
+!    if (!bufObj || bufObj->Name == 0) {
+        _mesa_error(ctx, GL_INVALID_OPERATION, "glUnmapBufferARB" );
+        return GL_FALSE;
+     }
+  
+!    if (!bufObj->Pointer) {
+        _mesa_error(ctx, GL_INVALID_OPERATION, "glUnmapBufferARB");
+        return GL_FALSE;
+     }
+  
+!    if (ctx->Driver.UnmapBuffer) {
+        status = (*ctx->Driver.UnmapBuffer)( ctx, target, bufObj );
+     }
+  
+***************
+*** 850,856 ****
+     ASSERT_OUTSIDE_BEGIN_END(ctx);
+  
+     bufObj = buffer_object_get_target( ctx, target, "GetBufferParameterivARB" );
+!    if (!bufObj) {
+        _mesa_error(ctx, GL_INVALID_OPERATION, "GetBufferParameterivARB" );
+        return;
+     }
+--- 871,877 ----
+     ASSERT_OUTSIDE_BEGIN_END(ctx);
+  
+     bufObj = buffer_object_get_target( ctx, target, "GetBufferParameterivARB" );
+!    if (!bufObj || bufObj->Name == 0) {
+        _mesa_error(ctx, GL_INVALID_OPERATION, "GetBufferParameterivARB" );
+        return;
+     }
+***************
+*** 888,894 ****
+     }
+  
+     bufObj = buffer_object_get_target( ctx, target, "GetBufferPointervARB" );
+!    if ( bufObj == NULL ) {
+        _mesa_error(ctx, GL_INVALID_OPERATION, "glGetBufferPointervARB" );
+        return;
+     }
+--- 909,915 ----
+     }
+  
+     bufObj = buffer_object_get_target( ctx, target, "GetBufferPointervARB" );
+!    if (!bufObj || bufObj->Name == 0) {
+        _mesa_error(ctx, GL_INVALID_OPERATION, "glGetBufferPointervARB" );
+        return;
+     }
+Index: xc/extras/Mesa/src/mesa/main/colormac.h
+diff -c 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,225 ****
+--- 221,227 ----
+  #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 -c 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,185 ****
+   * 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 [rgba]Scale - RGBA scale factors
+   * \param [rgba]Bias - RGBA bias factors
+   */
+--- 175,185 ----
+   * 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 [rgba]Scale - RGBA scale factors
+   * \param [rgba]Bias - RGBA bias factors
+   */
+Index: xc/extras/Mesa/src/mesa/main/config.h
+diff -c 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,208 ****
+  #define MAX_PROGRAM_MATRIX_STACK_DEPTH 4
+  /*@}*/
+  
+- /*@}*/
+- 
+  
+  /**
+   * \name Mesa-specific parameters
+--- 201,206 ----
+Index: xc/extras/Mesa/src/mesa/main/context.c
+diff -c 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,47 ****
+  
+  
+  /**
+!  * \mainpage Mesa Core Module
+   *
+!  * \section CoreIntroduction 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.
+   *
+   *
+   * \section AboutDoxygen About Doxygen
+--- 30,52 ----
+  
+  
+  /**
+!  * \mainpage Mesa Main Module
+   *
+!  * \section MainIntroduction Introduction
+   *
+!  * 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,197 ****
+--- 197,203 ----
+  _mesa_loseCurrent(__GLcontext *gc)
+  {
+     /* XXX unbind context from thread */
++    (void) gc;
+     return GL_TRUE;
+  }
+  
+***************
+*** 212,217 ****
+--- 218,224 ----
+  _mesa_makeCurrent(__GLcontext *gc)
+  {
+     /* XXX bind context to thread */
++    (void) gc;
+     return GL_TRUE;
+  }
+  
+***************
+*** 267,272 ****
+--- 274,280 ----
+  GLboolean
+  _mesa_forceCurrent(__GLcontext *gc)
+  {
++    (void) gc;
+     return GL_TRUE;
+  }
+  
+***************
+*** 302,307 ****
+--- 310,316 ----
+  _mesa_notifyDestroy(__GLcontext *gc)
+  {
+     /* Unbind from it. */
++    (void) gc;
+  }
+  
+  /**
+***************
+*** 322,327 ****
+--- 331,337 ----
+  struct __GLdispatchStateRec *
+  _mesa_dispatchExec(__GLcontext *gc)
+  {
++    (void) gc;
+     return NULL;
+  }
+  
+***************
+*** 329,340 ****
+--- 339,352 ----
+  void
+  _mesa_beginDispatchOverride(__GLcontext *gc)
+  {
++    (void) gc;
+  }
+  
+  /** No-op */
+  void
+  _mesa_endDispatchOverride(__GLcontext *gc)
+  {
++    (void) gc;
+  }
+  
+  /**
+***************
+*** 372,377 ****
+--- 384,391 ----
+      exports->dispatchExec = _mesa_dispatchExec;
+      exports->beginDispatchOverride = _mesa_beginDispatchOverride;
+      exports->endDispatchOverride = _mesa_endDispatchOverride;
++ #else
++     (void) exports;
+  #endif
+  }
+  
+***************
+*** 759,764 ****
+--- 773,779 ----
+  one_time_init( GLcontext *ctx )
+  {
+     static GLboolean alreadyCalled = GL_FALSE;
++    (void) ctx;
+     _glthread_LOCK_MUTEX(OneTimeLock);
+     if (!alreadyCalled) {
+        GLuint i;
+***************
+*** 1597,1603 ****
+   * \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
+   * memcpy is not enough due to the existence of internal pointers in their data
+   * structures.
+   */
+--- 1612,1618 ----
+   * \param mask bitwise OR of GL_*_BIT flags
+   *
+   * According to the bits specified in \p mask, copies the corresponding
+!  * 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 -c 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 ****
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.1
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+--- 1,6 ----
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.2
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+***************
+*** 834,840 ****
+     }
+  
+     /* unpack column filter */
+!    _mesa_unpack_color_span_float(ctx, width, GL_RGBA,
+                                   &ctx->Separable2D.Filter[colStart],
+                                   format, type, column, &ctx->Unpack,
+                                   0); /* transferOps */
+--- 834,840 ----
+     }
+  
+     /* unpack column filter */
+!    _mesa_unpack_color_span_float(ctx, height, GL_RGBA,
+                                   &ctx->Separable2D.Filter[colStart],
+                                   format, type, column, &ctx->Unpack,
+                                   0); /* transferOps */
+***************
+*** 844,850 ****
+        const GLfloat *scale = ctx->Pixel.ConvolutionFilterScale[2];
+        const GLfloat *bias = ctx->Pixel.ConvolutionFilterBias[2];
+        GLint i;
+!       for (i = 0; i < width; 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];
+--- 844,850 ----
+        const GLfloat *scale = ctx->Pixel.ConvolutionFilterScale[2];
+        const GLfloat *bias = ctx->Pixel.ConvolutionFilterBias[2];
+        GLint 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 -c 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,185 ****
+--- 180,187 ----
+      */
+     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 -c 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,12 ****
+  # contributed by Jouk Jansen  joukj@hrem.stm.tudelft.nl
+  # Last revision : 18 August 2004
+  
+! first
+       define gl [---.include.gl]
+       define math [-.math]
+  
+! include [---]mms-config.
+  
+  ##### MACROS #####
+  
+--- 2,12 ----
+  # contributed by Jouk Jansen  joukj@hrem.stm.tudelft.nl
+  # Last revision : 18 August 2004
+  
+! .first
+       define gl [---.include.gl]
+       define math [-.math]
+  
+! .include [---]mms-config.
+  
+  ##### MACROS #####
+  
+Index: xc/extras/Mesa/src/mesa/main/dlist.c
+diff -c 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,170 ****
+--- 165,171 ----
+   * 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,7665 ****
+     Node *n;
+     GLboolean done;
+  
+!    if (!glIsList(list)) {
+        _mesa_printf("%u is not a display list ID\n", list);
+        return;
+     }
+--- 7660,7666 ----
+     Node *n;
+     GLboolean done;
+  
+!    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 -c 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 ****
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.1
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+--- 1,6 ----
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.2
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+***************
+*** 65,70 ****
+--- 65,71 ----
+     { 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,331 ****
+  {
+     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;
+  }
+  
+--- 326,331 ----
+Index: xc/extras/Mesa/src/mesa/main/get.c
+diff -c 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,11 ****
+  
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.1
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+--- 5,11 ----
+  
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.2
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+***************
+*** 1390,1395 ****
+--- 1390,1399 ----
+           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,1625 ****
+--- 1624,1637 ----
+           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,2947 ****
+--- 2954,2963 ----
+           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,3175 ****
+--- 3186,3199 ----
+           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,4473 ****
+--- 4492,4501 ----
+           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,4701 ****
+--- 4724,4737 ----
+           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,6037 ****
+--- 6068,6077 ----
+           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,6265 ****
+--- 6300,6313 ----
+           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,6396 ****
+              _mesa_error(ctx, GL_INVALID_ENUM, "glGetPointerv");
+              return;
+           }
+!          *params = (GLvoid *) ctx->FragmentProgram.Callback;
+           break;
+        case GL_FRAGMENT_PROGRAM_CALLBACK_DATA_MESA:
+           if (!ctx->Extensions.MESA_program_debug) {
+--- 6438,6444 ----
+              _mesa_error(ctx, GL_INVALID_ENUM, "glGetPointerv");
+              return;
+           }
+!          *params = *(GLvoid **) &ctx->FragmentProgram.Callback;
+           break;
+        case GL_FRAGMENT_PROGRAM_CALLBACK_DATA_MESA:
+           if (!ctx->Extensions.MESA_program_debug) {
+***************
+*** 6404,6410 ****
+              _mesa_error(ctx, GL_INVALID_ENUM, "glGetPointerv");
+              return;
+           }
+!          *params = (GLvoid *) ctx->VertexProgram.Callback;
+           break;
+        case GL_VERTEX_PROGRAM_CALLBACK_DATA_MESA:
+           if (!ctx->Extensions.MESA_program_debug) {
+--- 6452,6458 ----
+              _mesa_error(ctx, GL_INVALID_ENUM, "glGetPointerv");
+              return;
+           }
+!          *params = *(GLvoid **) &ctx->VertexProgram.Callback;
+           break;
+        case GL_VERTEX_PROGRAM_CALLBACK_DATA_MESA:
+           if (!ctx->Extensions.MESA_program_debug) {
+***************
+*** 6484,6490 ****
+                     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;
+                    }
+--- 6532,6537 ----
+Index: xc/extras/Mesa/src/mesa/main/glheader.h
+diff -c 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,26 ****
+  
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.1
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+--- 20,26 ----
+  
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.2
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+***************
+*** 85,100 ****
+  #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 */
+  #  endif
+  #  if defined(_MSC_VER) && defined(BUILD_GL32) /* tag specify we're building mesa as a DLL */
+  #    define GLAPI __declspec(dllexport)
+--- 85,102 ----
+  #endif
+  
+  #if !defined(OPENSTEP) && (defined(__WIN32__) && !defined(__CYGWIN__)) && !defined(BUILD_FOR_SNAP)
+! #  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,234 ****
+  #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 */
+  #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 */
+  #ifndef GL_ARB_texture_float
+  #define GL_ARB_texture_float 1
+  #define GL_TEXTURE_RED_TYPE_ARB             0x9000
+--- 213,226 ----
+  #include <GL/internal/glcore.h>
+  
+  
+! /* 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 - 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,258 ****
+--- 245,256 ----
+  #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 -c 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,3783 ****
+--- 3778,3785 ----
+                           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 -c 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,38 ****
+  
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.1
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+--- 32,38 ----
+  
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.2.1
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+***************
+*** 58,63 ****
+--- 58,64 ----
+  
+  #include "imports.h"
+  #include "context.h"
++ #include "version.h"
+  
+  
+  #define MAXSTRING 4000  /* for vsnprintf() */
+***************
+*** 536,542 ****
+  GLhalfARB
+  _mesa_float_to_half(float val)
+  {
+!    const int flt = *((int *) &val);
+     const int flt_m = flt & 0x7fffff;
+     const int flt_e = (flt >> 23) & 0xff;
+     const int flt_s = (flt >> 31) & 0x1;
+--- 537,543 ----
+  GLhalfARB
+  _mesa_float_to_half(float 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,668 ****
+     }
+  
+     flt = (flt_s << 31) | (flt_e << 23) | flt_m;
+!    result = *((float *) &flt);
+     return result;
+  }
+  
+--- 663,669 ----
+     }
+  
+     flt = (flt_s << 31) | (flt_e << 23) | flt_m;
+!    result = *((float *) (void *) &flt);
+     return result;
+  }
+  
+***************
+*** 905,915 ****
+     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");
+  #else
+!    fprintf(stderr, "Mesa implementation error: %s\n", str);
+!    fprintf(stderr, "Please report to the Mesa bug database at www.mesa3d.org\n" );
+  #endif
+  }
+  
+--- 906,916 ----
+     va_end( args );
+  
+  #if defined(XFree86LOADER) && defined(IN_MODULE)
+!    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 %s implementation error: %s\n", MESA_VERSION_STRING, str);
+!    fprintf(stderr, "Please report at bugzilla.freedesktop.org\n");
+  #endif
+  }
+  
+***************
+*** 1004,1009 ****
+--- 1005,1011 ----
+  {
+     char s[MAXSTRING];
+     va_list args;
++    (void) ctx;
+     va_start(args, fmtString);
+     vsnprintf(s, MAXSTRING, fmtString, args);
+     va_end(args);
+***************
+*** 1094,1099 ****
+--- 1096,1102 ----
+  {
+     int r;
+     va_list args;
++    (void) gc;
+     va_start( args, fmt );  
+     r = vsprintf( str, fmt, args );
+     va_end( args );
+***************
+*** 1104,1109 ****
+--- 1107,1113 ----
+  static void * CAPI
+  default_fopen(__GLcontext *gc, const char *path, const char *mode)
+  {
++    (void) gc;
+     return fopen(path, mode);
+  }
+  
+***************
+*** 1111,1116 ****
+--- 1115,1121 ----
+  static int CAPI
+  default_fclose(__GLcontext *gc, void *stream)
+  {
++    (void) gc;
+     return fclose((FILE *) stream);
+  }
+  
+***************
+*** 1120,1125 ****
+--- 1125,1131 ----
+  {
+     int r;
+     va_list args;
++    (void) gc;
+     va_start( args, fmt );  
+     r = vfprintf( (FILE *) stream, fmt, args );
+     va_end( args );
+***************
+*** 1132,1137 ****
+--- 1138,1144 ----
+  static __GLdrawablePrivate *
+  default_GetDrawablePrivate(__GLcontext *gc)
+  {
++    (void) gc;
+     return NULL;
+  }
+  
+Index: xc/extras/Mesa/src/mesa/main/imports.h
+diff -c 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 ****
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.1
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+--- 1,6 ----
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.2
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+***************
+*** 224,230 ****
+   ***/
+  #if defined(__i386__) || defined(__386__) || defined(__sparc__) || \
+      defined(__s390x__) || defined(__powerpc__) || \
+!     defined(__AMD64__) || defined(__amd64__) || \
+      defined(ia64) || defined(__ia64__) || \
+      defined(__hppa__) || defined(hpux) || \
+      defined(__mips) || defined(_MIPS_ARCH) || \
+--- 224,230 ----
+   ***/
+  #if defined(__i386__) || defined(__386__) || defined(__sparc__) || \
+      defined(__s390x__) || defined(__powerpc__) || \
+!     defined(__amd64__) || \
+      defined(ia64) || defined(__ia64__) || \
+      defined(__hppa__) || defined(hpux) || \
+      defined(__mips) || defined(_MIPS_ARCH) || \
+***************
+*** 378,384 ****
+     return r;
+  }
+  #define IROUND(x)  iround(x)
+! #elif defined(USE_X86_ASM) && defined(__GNUC__) && defined(__i386__)
+  static INLINE int iround(float f)
+  {
+     int r;
+--- 378,385 ----
+     return r;
+  }
+  #define IROUND(x)  iround(x)
+! #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,562 ****
+   ***/
+  #if defined(USE_IEEE) && !defined(DEBUG)
+  #define COPY_FLOAT( dst, src )                                       \
+!      ((fi_type *) &(dst))->i = ((fi_type *) &(src))->i
+  #else
+  #define COPY_FLOAT( dst, src )               (dst) = (src)
+  #endif
+--- 557,563 ----
+   ***/
+  #if defined(USE_IEEE) && !defined(DEBUG)
+  #define COPY_FLOAT( dst, src )                                       \
+!      ((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 -c 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,1134 ****
+--- 1129,1135 ----
+  {
+     const GLuint oldneedeyecoords = ctx->_NeedEyeCoords;
+  
++    (void) new_state;
+     ctx->_NeedEyeCoords = 0;
+  
+     if (ctx->_ForceEyeCoords ||
+Index: xc/extras/Mesa/src/mesa/main/macros.h
+diff -c 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,660 ****
+  #define LEN_SQUARED_2FV( V ) ((V)[0]*(V)[0]+(V)[1]*(V)[1])
+  
+  
+- /*@}*/
+- 
+- 
+  #endif
+--- 654,657 ----
+Index: xc/extras/Mesa/src/mesa/main/mtypes.h
+diff -c 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,895 ****
+--- 890,896 ----
+     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,1151 ****
+--- 1147,1153 ----
+  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,1581 ****
+  struct program
+  {
+     GLuint Id;
+!    GLubyte *String;    /* Null-terminated program text */
+!    GLenum Target;
+!    GLenum Format;      /* String encoding format */
+     GLint RefCount;
+     GLboolean Resident;
+     GLfloat LocalParams[MAX_PROGRAM_LOCAL_PARAMS][4];
+     GLuint NumInstructions;  /* GL_ARB_vertex/fragment_program */
+--- 1574,1584 ----
+  struct program
+  {
+     GLuint Id;
+!    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 -c 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,796 ****
+--- 791,798 ----
+                            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 -c 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,13 ****
+  
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  5.1
+   *
+!  * 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"),
+--- 5,13 ----
+  
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.2
+   *
+!  * 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,234 ****
+--- 229,253 ----
+              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,271 ****
+--- 285,291 ----
+     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 -c 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 ****
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.1
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+--- 1,6 ----
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.2
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+***************
+*** 104,110 ****
+  static int
+  generic_noop(void)
+  {
+!    _mesa_problem(NULL, "User called no-op dispatch function (not part of Mesa subset?)");
+     return 0;
+  }
+  
+--- 104,110 ----
+  static int
+  generic_noop(void)
+  {
+!    _mesa_problem(NULL, "User called no-op dispatch function (an unsupported extension function?)");
+     return 0;
+  }
+  
+***************
+*** 119,128 ****
+  void
+  _mesa_init_no_op_table(struct _glapi_table *table, GLuint tableSize)
+  {
+     GLuint i;
+!    void **dispatch = (void **) table;
+     for (i = 0; i < tableSize; i++) {
+!       dispatch[i] = (void *) generic_noop;
+     }
+  }
+  
+--- 119,129 ----
+  void
+  _mesa_init_no_op_table(struct _glapi_table *table, GLuint tableSize)
+  {
++    typedef void (*func_ptr_t)(void);
+     GLuint i;
+!    func_ptr_t *dispatch = (func_ptr_t *) table;
+     for (i = 0; i < tableSize; i++) {
+!       dispatch[i] = (func_ptr_t)generic_noop;
+     }
+  }
+  
+Index: xc/extras/Mesa/src/mesa/main/texcompress.c
+diff -c 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,118 ****
+--- 113,119 ----
+     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 -c 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,62 ****
+--- 57,63 ----
+  void
+  _mesa_init_texture_fxt1( GLcontext *ctx )
+  {
++    (void) ctx;
+  }
+  
+  
+***************
+*** 76,81 ****
+--- 77,83 ----
+     ASSERT(dstXoffset % 8 == 0);
+     ASSERT(dstYoffset % 4 == 0);
+     ASSERT(dstZoffset     == 0);
++    (void) dstZoffset; (void) dstImageStride;
+  
+     if (srcFormat != GL_RGB ||
+         srcType != CHAN_TYPE ||
+***************
+*** 131,136 ****
+--- 133,139 ----
+     ASSERT(dstXoffset % 8 == 0);
+     ASSERT(dstYoffset % 4 == 0);
+     ASSERT(dstZoffset     == 0);
++    (void) dstZoffset; (void) dstImageStride;
+  
+     if (srcFormat != GL_RGBA ||
+         srcType != CHAN_TYPE ||
+***************
+*** 174,179 ****
+--- 177,183 ----
+  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,189 ****
+--- 188,194 ----
+  {
+     /* 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,201 ****
+--- 201,207 ----
+  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,212 ****
+--- 213,219 ----
+  {
+     /* 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,296 ****
+  
+  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;
+  
+  #else  /* !__GNUC__ */
+  
+--- 295,303 ----
+  
+  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
+  
+  #else  /* !__GNUC__ */
+  
+***************
+*** 1284,1290 ****
+        }
+  
+        /* funky encoding for LSB of green */
+!       if (((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];
+--- 1291,1297 ----
+        }
+  
+        /* funky encoding for LSB of green */
+!       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,1345 ****
+        }
+  
+        /* funky encoding for LSB of green */
+!       if (((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];
+--- 1346,1352 ----
+        }
+  
+        /* funky encoding for LSB of green */
+!       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,1393 ****
+        }
+     }
+  
+!    /* block looks like this:
+      * 00, 01, 02, 03, 08, 09, 0a, 0b
+      * 10, 11, 12, 13, 18, 19, 1a, 1b
+      * 04, 05, 06, 07, 0c, 0d, 0e, 0f
+--- 1394,1400 ----
+        }
+     }
+  
+!    /* 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,1432 ****
+--- 1434,1442 ----
+     } 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,1443 ****
+--- 1448,1456 ----
+     } else {
+        fxt1_quantize_MIXED0(cc, input);
+     }
++    (void)fxt1_quantize_ALPHA0;
++    (void)fxt1_quantize_HI;
++    (void)fxt1_quantize_CHROMA;
+  #endif
+  }
+  
+***************
+*** 1455,1460 ****
+--- 1468,1475 ----
+     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 -c 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,50 ****
+--- 45,51 ----
+  _mesa_init_texture_s3tc( GLcontext *ctx )
+  {
+     /* called during context initialization */
++    (void) ctx;
+  }
+  
+  
+***************
+*** 64,69 ****
+--- 65,71 ----
+     ASSERT(dstXoffset % 4 == 0);
+     ASSERT(dstYoffset % 4 == 0);
+     ASSERT(dstZoffset % 4 == 0);
++    (void) dstZoffset; (void) dstImageStride;
+  
+     if (srcFormat != GL_RGB ||
+         srcType != CHAN_TYPE ||
+***************
+*** 121,126 ****
+--- 123,129 ----
+     ASSERT(dstXoffset % 4 == 0);
+     ASSERT(dstYoffset % 4 == 0);
+     ASSERT(dstZoffset % 4 == 0);
++    (void) dstZoffset; (void) dstImageStride;
+  
+     if (srcFormat != GL_RGBA ||
+         srcType != CHAN_TYPE ||
+***************
+*** 176,181 ****
+--- 179,185 ----
+     ASSERT(dstXoffset % 4 == 0);
+     ASSERT(dstYoffset % 4 == 0);
+     ASSERT(dstZoffset % 4 == 0);
++    (void) dstZoffset; (void) dstImageStride;
+  
+     if (srcFormat != GL_RGBA ||
+         srcType != CHAN_TYPE ||
+***************
+*** 230,235 ****
+--- 234,240 ----
+     ASSERT(dstXoffset % 4 == 0);
+     ASSERT(dstYoffset % 4 == 0);
+     ASSERT(dstZoffset % 4 == 0);
++    (void) dstZoffset; (void) dstImageStride;
+  
+     if (srcFormat != GL_RGBA ||
+         srcType != CHAN_TYPE ||
+***************
+*** 272,277 ****
+--- 277,283 ----
+  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,298 ****
+--- 299,305 ----
+  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,319 ****
+--- 321,327 ----
+  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,340 ****
+--- 343,349 ----
+  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 -c 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,68 ****
+--- 63,69 ----
+  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,78 ****
+--- 74,80 ----
+  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 -c 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 ****
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.1
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+--- 1,6 ----
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.2
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+***************
+*** 44,77 ****
+  #if DIM == 1
+  
+  #define CHAN_SRC( t, i, j, k, sz )                                   \
+!      ((GLchan *)(t)->Data + (i) * (sz))
+  #define UBYTE_SRC( t, i, j, k, sz )                                  \
+!      ((GLubyte *)(t)->Data + (i) * (sz))
+  #define USHORT_SRC( t, i, j, k )                                     \
+!      ((GLushort *)(t)->Data + (i))
+  #define UINT_SRC( t, i, j, k )                                               \
+!      ((GLuint *)(t)->Data + (i))
+  #define FLOAT_SRC( t, i, j, k, sz )                                  \
+!      ((GLfloat *)(t)->Data + (i) * (sz))
+  #define HALF_SRC( t, i, j, k, sz )                                   \
+!      ((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))
+  #define UBYTE_SRC( t, i, j, k, sz )                                  \
+!      ((GLubyte *)(t)->Data + ((t)->RowStride * (j) + (i)) * (sz))
+  #define USHORT_SRC( t, i, j, k )                                     \
+!      ((GLushort *)(t)->Data + ((t)->RowStride * (j) + (i)))
+  #define UINT_SRC( t, i, j, k )                                               \
+!      ((GLuint *)(t)->Data + ((t)->RowStride * (j) + (i)))
+  #define FLOAT_SRC( t, i, j, k, sz )                                  \
+!      ((GLfloat *)(t)->Data + ((t)->RowStride * (j) + (i)) * (sz))
+  #define HALF_SRC( t, i, j, k, sz )                                   \
+!      ((GLhalfARB *)(t)->Data + ((t)->RowStride * (j) + (i)) * (sz))
+  
+  #define FETCH(x) fetch_texel_2d_##x
+  
+--- 44,89 ----
+  #if DIM == 1
+  
+  #define CHAN_SRC( t, i, j, k, sz )                                   \
+!      ((void) (j), (void) (k),                                        \
+!       ((GLchan *)(t)->Data + (i) * (sz)))
+  #define UBYTE_SRC( t, i, j, k, sz )                                  \
+!      ((void) (j), (void) (k),                                        \
+!       ((GLubyte *)(t)->Data + (i) * (sz)))
+  #define USHORT_SRC( t, i, j, k )                                     \
+!      ((void) (j), (void) (k),                                        \
+!       ((GLushort *)(t)->Data + (i)))
+  #define UINT_SRC( t, i, j, k )                                               \
+!      ((void) (j), (void) (k),                                        \
+!       ((GLuint *)(t)->Data + (i)))
+  #define FLOAT_SRC( t, i, j, k, sz )                                  \
+!      ((void) (j), (void) (k),                                        \
+!       ((GLfloat *)(t)->Data + (i) * (sz)))
+  #define HALF_SRC( t, i, j, k, 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 )                                   \
+!      ((void) (k),                                                    \
+!       ((GLchan *)(t)->Data + ((t)->RowStride * (j) + (i)) * (sz)))
+  #define UBYTE_SRC( t, i, j, k, sz )                                  \
+!      ((void) (k),                                                    \
+!       ((GLubyte *)(t)->Data + ((t)->RowStride * (j) + (i)) * (sz)))
+  #define USHORT_SRC( t, i, j, k )                                     \
+!      ((void) (k),                                                    \
+!       ((GLushort *)(t)->Data + ((t)->RowStride * (j) + (i))))
+  #define UINT_SRC( t, i, j, k )                                               \
+!      ((void) (k),                                                    \
+!       ((GLuint *)(t)->Data + ((t)->RowStride * (j) + (i))))
+  #define FLOAT_SRC( t, i, j, k, sz )                                  \
+!      ((void) (k),                                                    \
+!       ((GLfloat *)(t)->Data + ((t)->RowStride * (j) + (i)) * (sz)))
+  #define HALF_SRC( t, i, j, k, sz )                                   \
+!      ((void) (k),                                                    \
+!       ((GLhalfARB *)(t)->Data + ((t)->RowStride * (j) + (i)) * (sz)))
+  
+  #define FETCH(x) fetch_texel_2d_##x
+  
+***************
+*** 1011,1019 ****
+                       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;
+     GET_CURRENT_CONTEXT(ctx);
+  
+     if (ctx->Texture.SharedPalette) {
+--- 1023,1031 ----
+                       GLint i, GLint j, GLint k, GLchan *texel )
+  {
+     const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 );
+     const struct gl_color_table *palette;
+     const GLchan *table;
++    GLuint index;
+     GET_CURRENT_CONTEXT(ctx);
+  
+     if (ctx->Texture.SharedPalette) {
+***************
+*** 1027,1032 ****
+--- 1039,1047 ----
+     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 -c 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,335 ****
+--- 330,338 ----
+  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,486 ****
+--- 484,490 ----
+  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,891 ****
+     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 */
+     }
+--- 885,893 ----
+***************
+*** 1978,1983 ****
+--- 1980,1988 ----
+        return;
+     }
+  
++    /*
++     * XXX Move this code into a new driver fall-back function
++     */
+     {
+        const GLint width = texImage->Width;
+        const GLint height = texImage->Height;
+***************
+*** 2395,2401 ****
+     texImage = _mesa_select_tex_image(ctx, texUnit, target, level);
+     assert(texImage);
+  
+!    if (width == 0 || !pixels)
+        return;  /* no-op, not an error */
+  
+     /* If we have a border, xoffset=-1 is legal.  Bias by border width */
+--- 2400,2406 ----
+     texImage = _mesa_select_tex_image(ctx, texUnit, target, level);
+     assert(texImage);
+  
+!    if (width == 0)
+        return;  /* no-op, not an error */
+  
+     /* If we have a border, xoffset=-1 is legal.  Bias by border width */
+***************
+*** 2442,2448 ****
+     texImage = _mesa_select_tex_image(ctx, texUnit, target, level);
+     assert(texImage);
+  
+!    if (width == 0 || height == 0 || !pixels)
+        return;  /* no-op, not an error */
+  
+     /* If we have a border, xoffset=-1 is legal.  Bias by border width */
+--- 2447,2453 ----
+     texImage = _mesa_select_tex_image(ctx, texUnit, target, level);
+     assert(texImage);
+  
+!    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,2490 ****
+     texImage = _mesa_select_tex_image(ctx, texUnit, target, level);
+     assert(texImage);
+  
+!    if (width == 0 || height == 0 || height == 0 || !pixels)
+        return;  /* no-op, not an error */
+  
+     /* If we have a border, xoffset=-1 is legal.  Bias by border width */
+--- 2489,2495 ----
+     texImage = _mesa_select_tex_image(ctx, texUnit, target, level);
+     assert(texImage);
+  
+!    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,2799 ****
+--- 2799,2807 ----
+     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,2851 ****
+--- 2854,2860 ----
+                                    GLenum format, GLsizei imageSize)
+  {
+     GLint expectedSize, maxLevels = 0, maxTextureSize;
++    (void) zoffset;
+  
+     if (dimensions == 1) {
+        /* 1D compressed textures not allowed */
+***************
+*** 3193,3199 ****
+        return;
+     }
+        
+!    if (width == 0 || !data)
+        return;  /* no-op, not an error */
+  
+     if (ctx->Driver.CompressedTexSubImage1D) {
+--- 3202,3208 ----
+        return;
+     }
+        
+!    if (width == 0)
+        return;  /* no-op, not an error */
+  
+     if (ctx->Driver.CompressedTexSubImage1D) {
+***************
+*** 3244,3250 ****
+        return;
+     }
+        
+!    if (width == 0 || height == 0 || !data)
+        return;  /* no-op, not an error */
+  
+     if (ctx->Driver.CompressedTexSubImage2D) {
+--- 3253,3259 ----
+        return;
+     }
+        
+!    if (width == 0 || height == 0)
+        return;  /* no-op, not an error */
+  
+     if (ctx->Driver.CompressedTexSubImage2D) {
+***************
+*** 3295,3301 ****
+        return;
+     }
+        
+!    if (width == 0 || height == 0 || depth == 0 || !data)
+        return;  /* no-op, not an error */
+  
+     if (ctx->Driver.CompressedTexSubImage3D) {
+--- 3304,3310 ----
+        return;
+     }
+        
+!    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 -c 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,11 ****
+  
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.1
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+--- 5,11 ----
+  
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.2
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+***************
+*** 64,69 ****
+--- 64,70 ----
+  _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,77 ****
+  
+  
+  /**
+!  * Initialize a texture object to default values.
+   * \param obj  the texture object
+   * \param name  the texture name
+   * \param target  the texture target
+--- 72,78 ----
+  
+  
+  /**
+!  * Initialize a new texture object to default values.
+   * \param obj  the texture object
+   * \param name  the texture name
+   * \param target  the texture target
+***************
+*** 87,95 ****
+            target == GL_TEXTURE_CUBE_MAP_ARB ||
+            target == GL_TEXTURE_RECTANGLE_NV);
+  
+     /* init the non-zero fields */
+     _glthread_INIT_MUTEX(obj->Mutex);
+-    _mesa_bzero(obj, sizeof(*obj));
+     obj->RefCount = 1;
+     obj->Name = name;
+     obj->Target = target;
+--- 88,96 ----
+            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);
+     obj->RefCount = 1;
+     obj->Name = name;
+     obj->Target = target;
+***************
+*** 137,144 ****
+  
+     (void) ctx;
+  
+-    assert(texObj);
+- 
+     _mesa_free_colortable_data(&texObj->Palette);
+  
+     /* free the texture images */
+--- 138,143 ----
+***************
+*** 702,713 ****
+              }
+              ctx->NewState |= _NEW_TEXTURE;
+  
+!             /* Decrement reference count and delete if zero */
+!             delObj->RefCount--;
+!             ASSERT(delObj->RefCount >= 0);
+  
+              if (delObj->RefCount == 0) {
+!                ASSERT(delObj->Name != 0);
+                 _mesa_remove_texture_object(ctx, delObj);
+                 ASSERT(ctx->Driver.DeleteTexture);
+                 (*ctx->Driver.DeleteTexture)(ctx, delObj);
+--- 701,716 ----
+              }
+              ctx->NewState |= _NEW_TEXTURE;
+  
+!             /* 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); /* Never delete default tex objects */
+                 _mesa_remove_texture_object(ctx, delObj);
+                 ASSERT(ctx->Driver.DeleteTexture);
+                 (*ctx->Driver.DeleteTexture)(ctx, delObj);
+***************
+*** 717,722 ****
+--- 720,726 ----
+     }
+  }
+  
++ 
+  /**
+   * Bind a named texture to a texturing target.
+   * 
+***************
+*** 746,751 ****
+--- 750,758 ----
+        _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,781 ****
+--- 783,792 ----
+     }
+  
+     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,889 ****
+     if (ctx->Driver.BindTexture)
+        (*ctx->Driver.BindTexture)( ctx, target, newTexObj );
+  
+     oldTexObj->RefCount--;
+!    assert(oldTexObj->RefCount >= 0);
+     if (oldTexObj->RefCount == 0) {
+!       assert(oldTexObj->Name != 0);
+        _mesa_remove_texture_object(ctx, oldTexObj);
+        ASSERT(ctx->Driver.DeleteTexture);
+        (*ctx->Driver.DeleteTexture)( ctx, oldTexObj );
+     }
+  }
+  
+  /**
+   * Set texture priorities.
+   * 
+--- 885,905 ----
+     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);
+     if (oldTexObj->RefCount == 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 -c 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,706 ****
+--- 701,707 ----
+  GLboolean
+  _mesa_texstore_depth_component_float32(STORE_PARAMS)
+  {
++    (void) dims;
+     ASSERT(dstFormat == &_mesa_texformat_depth_component_float32);
+     ASSERT(dstFormat->TexelBytes == sizeof(GLfloat));
+  
+***************
+*** 744,749 ****
+--- 745,751 ----
+  GLboolean
+  _mesa_texstore_depth_component16(STORE_PARAMS)
+  {
++    (void) dims;
+     ASSERT(dstFormat == &_mesa_texformat_depth_component16);
+     ASSERT(dstFormat->TexelBytes == sizeof(GLushort));
+  
+***************
+*** 1103,1109 ****
+                                                   srcWidth, srcHeight, srcDepth,
+                                                   srcFormat, srcType, srcAddr,
+                                                   srcPacking);
+!       const GLchan *src = (const GLubyte *) tempImage;
+        GLubyte *dstImage = (GLubyte *) dstAddr
+                          + dstZoffset * dstImageStride
+                          + dstYoffset * dstRowStride
+--- 1105,1111 ----
+                                                   srcWidth, srcHeight, srcDepth,
+                                                   srcFormat, srcType, srcAddr,
+                                                   srcPacking);
+!       const GLchan *src = (const GLchan *) tempImage;
+        GLubyte *dstImage = (GLubyte *) dstAddr
+                          + dstZoffset * dstImageStride
+                          + dstYoffset * dstRowStride
+***************
+*** 1207,1213 ****
+                                                   srcWidth, srcHeight, srcDepth,
+                                                   srcFormat, srcType, srcAddr,
+                                                   srcPacking);
+!       const GLchan *src = (const GLubyte *) tempImage;
+        GLubyte *dstImage = (GLubyte *) dstAddr
+                          + dstZoffset * dstImageStride
+                          + dstYoffset * dstRowStride
+--- 1209,1215 ----
+                                                   srcWidth, srcHeight, srcDepth,
+                                                   srcFormat, srcType, srcAddr,
+                                                   srcPacking);
+!       const GLchan *src = (const GLchan *) tempImage;
+        GLubyte *dstImage = (GLubyte *) dstAddr
+                          + dstZoffset * dstImageStride
+                          + dstYoffset * dstRowStride
+***************
+*** 1553,1558 ****
+--- 1555,1561 ----
+  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,1604 ****
+--- 1602,1608 ----
+  {
+     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,1857 ****
+--- 1856,1862 ----
+  {
+     GLint postConvWidth = width;
+     GLint sizeInBytes;
++    (void) border;
+  
+     if (ctx->_ImageTransferState & IMAGE_CONVOLUTION_BIT) {
+        _mesa_adjust_image_for_convolution(ctx, 1, &postConvWidth, NULL);
+***************
+*** 1925,1930 ****
+--- 1930,1936 ----
+  {
+     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,2009 ****
+--- 2010,2016 ----
+                         struct gl_texture_image *texImage)
+  {
+     GLint texelBytes, sizeInBytes;
++    (void) border;
+  
+     /* choose the texture format */
+     assert(ctx->Driver.ChooseTextureFormat);
+***************
+*** 2228,2233 ****
+--- 2235,2247 ----
+                                    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,2248 ****
+--- 2257,2264 ----
+                                    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,2304 ****
+--- 2315,2328 ----
+                                    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,2321 ****
+--- 2340,2352 ----
+                                       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,2341 ****
+--- 2367,2373 ----
+     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,2394 ****
+--- 2421,2434 ----
+                                  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 -c 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,65 ****
+--- 60,66 ----
+  #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 -c 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 ****
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.1
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+--- 1,6 ----
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.2.1
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+***************
+*** 29,37 ****
+  
+  /* Mesa version */
+  #define MESA_MAJOR 6
+! #define MESA_MINOR 1
+! #define MESA_PATCH 0
+! #define MESA_VERSION_STRING "6.1"
+  
+  /* To make version comparison easy */
+  #define MESA_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
+--- 29,37 ----
+  
+  /* Mesa version */
+  #define MESA_MAJOR 6
+! #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 -c 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,54 ****
+--- 49,55 ----
+  {                                                                    \
+     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,62 ****
+     /* 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);                      \
+     tnl->SwapCount++;                                                 \
+                                                                       \
+     if ( 0 )                                                          \
+--- 57,63 ----
+     /* Save the swapped function's dispatch entry so it can be */     \
+     /* restored later. */                                             \
+     tnl->Swapped[tnl->SwapCount][0] = (void *)&(ctx->Exec->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 -c 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 ****
+- 
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  5.1
+   *
+!  * 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"),
+--- 1,8 ----
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.2
+   *
+!  * 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,134 ****
+--- 128,134 ----
+     GLubyte tmpAndMask = *andMask;
+     GLubyte tmpOrMask = *orMask;
+     GLuint i;
++    (void) proj_vec;
+     STRIDE_LOOP {
+        const GLfloat cx = from[0];
+        const GLfloat cy = from[1];
+***************
+*** 176,185 ****
+     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;
+     STRIDE_LOOP {
+        const GLfloat cx = from[0], cy = from[1], cz = from[2];
+        GLubyte mask = 0;
+--- 176,185 ----
+     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,218 ****
+     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;
+     STRIDE_LOOP {
+        const GLfloat cx = from[0], cy = from[1];
+        GLubyte mask = 0;
+--- 209,218 ----
+     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 -c 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 ****
+- /**
+-  * \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
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+--- 1,6 ----
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.2
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+***************
+*** 33,38 ****
+--- 23,39 ----
+   */
+  
+  
++ /**
++  * \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,1148 ****
+        mat->type = MATRIX_2D_NO_ROT;
+  
+        if ((mask & MASK_NO_2D_SCALE) != MASK_NO_2D_SCALE)
+!       mat->flags = MAT_FLAG_GENERAL_SCALE;
+     }
+     else if ((mask & MASK_2D) == (GLuint) MASK_2D) {
+        GLfloat mm = DOT2(m, m);
+--- 1143,1149 ----
+        mat->type = MATRIX_2D_NO_ROT;
+  
+        if ((mask & MASK_NO_2D_SCALE) != MASK_NO_2D_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 -c 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 ****
+- /**
+-  * \file math/m_matrix.h
+-  * Defines basic structures for matrix-handling.
+-  */
+- 
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  3.5
+   *
+!  * Copyright (C) 1999-2001  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"),
+--- 1,8 ----
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.2
+   *
+!  * 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,33 ****
+--- 23,33 ----
+   */
+  
+  
++ /**
++  * \file math/m_matrix.h
++  * Defines basic structures for matrix-handling.
++  */
++ 
+  #ifndef _M_MATRIX_H
+  #define _M_MATRIX_H
+  
+***************
+*** 36,42 ****
+  /**
+   * \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.
+   */
+  /*@{*/
+  #define MAT_SX 0
+--- 36,42 ----
+  /**
+   * \name Symbolic names to some of the entries in the matrix
+   *
+!  * These are handy for the viewport mapping, which is expressed as a matrix.
+   */
+  /*@{*/
+  #define MAT_SX 0
+***************
+*** 47,75 ****
+  #define MAT_TZ 14
+  /*@}*/
+  
+  /**
+   * \defgroup MatFlags MAT_FLAG_XXX-flags
+   *
+!  * Bitmasks to indicate different kinds of 4x4 matrices in
+!  * GLmatrix::flags
+   */
+  /*@{*/
+! 
+! #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 */
+  
+  /** angle preserving matrix flags mask */
+  #define MAT_FLAGS_ANGLE_PRESERVING (MAT_FLAG_ROTATION | \
+--- 47,76 ----
+  #define MAT_TZ 14
+  /*@}*/
+  
++ 
+  /**
+   * \defgroup MatFlags MAT_FLAG_XXX-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 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,144 ****
+  
+  /**
+   * Different kinds of 4x4 transformation matrices.
+   */
+  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.
+   */
+  typedef struct {
+!    GLfloat *m;               /**< matrix, 16-byte aligned */
+!    GLfloat *inv;     /**< optional inverse, 16-byte aligned */
+     GLuint flags;        /**< possible values determined by (of \link
+!                         MatFlags MAT_FLAG_* flags\endlink) */
+     enum GLmatrixtype type;
+  } GLmatrix;
+  
+--- 121,147 ----
+  
+  /**
+   * 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 type to represent 4x4 transformation matrices.
+   */
+  typedef struct {
+!    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)
+!                          */
+     enum GLmatrixtype type;
+  } GLmatrix;
+  
+Index: xc/extras/Mesa/src/mesa/math/m_xform_tmp.h
+diff -c 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,111 ****
+--- 106,112 ----
+     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,276 ****
+--- 272,278 ----
+     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,446 ****
+--- 443,449 ----
+     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,613 ****
+--- 611,617 ----
+     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,749 ****
+     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];
+  
+  /* Similar functions could be called several times, with more highly
+   * optimized routines overwriting the arrays.  This only occurs during
+--- 744,753 ----
+     to_vec->count = from_vec->count;
+  }
+  
+! 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 -c 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,191 ****
+--- 186,192 ----
+  {
+     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 -c 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,47 ****
+--- 42,51 ----
+  #include "arbprogparse.h"
+  #include "grammar_mesa.h"
+  
++ #if !defined(__GNUC__) && !defined(__extension__)
++ # define __extension__
++ #endif
++ 
+  /* TODO:
+   *    Fragment Program Stuff:
+   *    -----------------------------------------------------
+***************
+*** 129,135 ****
+  /**
+   * This is the text describing the rules to parse the grammar
+   */
+! static char arb_grammar_text[] =
+  #include "arbprogram_syn.h"
+  ;
+  
+--- 133,139 ----
+  /**
+   * This is the text describing the rules to parse the grammar
+   */
+! __extension__ static char arb_grammar_text[] =
+  #include "arbprogram_syn.h"
+  ;
+  
+***************
+*** 591,596 ****
+--- 595,601 ----
+  {
+     GLubyte *i = *inst;
+     struct var_cache *va = NULL;
++    (void) Program;
+  
+     *inst += _mesa_strlen ((char *) i) + 1;
+  
+***************
+*** 614,620 ****
+  parse_string_without_adding (GLubyte ** inst, struct arb_program *Program)
+  {
+     GLubyte *i = *inst;
+! 
+     *inst += _mesa_strlen ((char *) i) + 1;
+  
+     return (char *) i;
+--- 619,626 ----
+  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,793 ****
+--- 794,800 ----
+  parse_color_type (GLcontext * ctx, GLubyte ** inst, struct arb_program *Program,
+                    GLint * color)
+  {
++    (void) ctx; (void) Program;
+     *color = *(*inst)++ != COLOR_PRIMARY;
+     return 0;
+  }
+***************
+*** 828,834 ****
+  {
+     GLint i = parse_integer (inst, Program);
+  
+!    if ((i < 0) || (i >= ctx->Const.MaxTextureUnits)) {
+        _mesa_set_program_error (ctx, Program->Position,
+                                 "Invalid texture unit index");
+        _mesa_error (ctx, GL_INVALID_OPERATION, "Invalid texture unit index");
+--- 835,841 ----
+  {
+     GLint i = parse_integer (inst, Program);
+  
+!    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,1896 ****
+  
+     /* Test array length here! */
+     if (specified_length) {
+!       if (specified_length != 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,
+--- 1897,1903 ----
+  
+     /* Test array length here! */
+     if (specified_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,2287 ****
+--- 2289,2295 ----
+  {
+     struct var_cache *dst;
+     GLuint result;
++    (void) Index;
+  
+     dst = parse_string (inst, vc_head, Program, &result);
+     Program->Position = parse_position (inst);
+***************
+*** 2492,2498 ****
+                       offset = parse_integer (inst, Program);
+  
+                       if ((offset < 0)
+!                          || (offset >= src->param_binding_length)) {
+                          _mesa_set_program_error (ctx, Program->Position,
+                                                   "Index out of range");
+                          _mesa_error (ctx, GL_INVALID_OPERATION,
+--- 2500,2506 ----
+                       offset = parse_integer (inst, Program);
+  
+                       if ((offset < 0)
+!                          || (offset >= (int)src->param_binding_length)) {
+                          _mesa_set_program_error (ctx, Program->Position,
+                                                   "Index out of range");
+                          _mesa_error (ctx, GL_INVALID_OPERATION,
+***************
+*** 3686,3692 ****
+  }
+  
+  /* XXX temporary */
+! static char core_grammar_text[] =
+  #include "grammar_syn.h"
+  ;
+  
+--- 3694,3700 ----
+  }
+  
+  /* XXX temporary */
+! __extension__ static char core_grammar_text[] =
+  #include "grammar_syn.h"
+  ;
+  
+***************
+*** 3706,3712 ****
+  
+  static int extension_is_supported (const GLubyte *ext)
+  {
+!    const GLubyte *extensions = glGetString (GL_EXTENSIONS);
+     const GLubyte *end = extensions + _mesa_strlen ((const char *) extensions);
+     const GLint ext_len = _mesa_strlen ((const char *) ext);
+  
+--- 3714,3720 ----
+  
+  static int extension_is_supported (const GLubyte *ext)
+  {
+!    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,3759 ****
+--- 3762,3770 ----
+     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,3832 ****
+--- 3838,3845 ----
+         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,3877 ****
+        if (0) {
+           int line, col;
+           char *s;
+!          printf("Program: %s\n", 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);
+--- 3884,3890 ----
+        if (0) {
+           int line, col;
+           char *s;
+!          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 -c 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,268 ****
+        }
+        ASSIGN_4V(ctx->FragmentProgram.Parameters[index], x, y, z, w);
+     }
+!    if (target == GL_VERTEX_PROGRAM_ARB
+         && ctx->Extensions.ARB_vertex_program) {
+        if (index >= ctx->Const.MaxVertexProgramEnvParams) {
+           _mesa_error(ctx, GL_INVALID_VALUE, "glProgramEnvParameter(index)");
+--- 262,268 ----
+        }
+        ASSIGN_4V(ctx->FragmentProgram.Parameters[index], x, y, z, w);
+     }
+!    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,328 ****
+        }
+        COPY_4V(params, ctx->FragmentProgram.Parameters[index]);
+     }
+!    if (target == GL_VERTEX_PROGRAM_ARB
+         && ctx->Extensions.ARB_vertex_program) {
+        if (index >= ctx->Const.MaxVertexProgramEnvParams) {
+           _mesa_error(ctx, GL_INVALID_VALUE, "glGetProgramEnvParameter(index)");
+--- 322,328 ----
+        }
+        COPY_4V(params, ctx->FragmentProgram.Parameters[index]);
+     }
+!    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 -c 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,180 ****
+--- 175,181 ----
+  {
+     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 -c 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,290 ****
+  
+  static byte *unknown = (byte *) "???";
+  
+! static void clear_last_error ()
+  {
+      /* 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);
+      else
+          error_param = NULL;
+  
+--- 277,290 ----
+  
+  static byte *unknown = (byte *) "???";
+  
+! 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 **) (void *) &error_param);
+      else
+          error_param = NULL;
+  
+***************
+*** 297,303 ****
+      /* error message can only be set only once */
+      if (error_message != NULL)
+      {
+!         mem_free ((void **) &param);
+          return;
+      }
+  
+--- 297,303 ----
+      /* error message can only be set only once */
+      if (error_message != NULL)
+      {
+!         mem_free ((void **) (void *) &param);
+          return;
+      }
+  
+***************
+*** 768,774 ****
+  /*
+      returns unique grammar id
+  */
+! static grammar next_valid_grammar_id ()
+  {
+      static grammar id = 0;
+  
+--- 768,774 ----
+  /*
+      returns unique grammar id
+  */
+! static grammar next_valid_grammar_id (void)
+  {
+      static grammar id = 0;
+  
+***************
+*** 1230,1236 ****
+      {
+          if (string_grow (&p, &len, *t++))
+          {
+!             mem_free ((void **) &p);
+              return 1;
+          }
+      }
+--- 1230,1236 ----
+      {
+          if (string_grow (&p, &len, *t++))
+          {
+!             mem_free ((void **) (void *) &p);
+              return 1;
+          }
+      }
+***************
+*** 1379,1385 ****
+  
+          if (string_grow (&p, &len, c))
+          {
+!             mem_free ((void **) &p);
+              return 1;
+          }
+      }
+--- 1379,1385 ----
+  
+          if (string_grow (&p, &len, c))
+          {
+!             mem_free ((void **) (void *) &p);
+              return 1;
+          }
+      }
+***************
+*** 1424,1430 ****
+          }
+  
+          m->data = (byte) c[0];
+!         mem_free ((void **) &c);
+      }
+      else
+      {
+--- 1424,1430 ----
+          }
+  
+          m->data = (byte) c[0];
+!         mem_free ((void **) (void *) &c);
+      }
+      else
+      {
+***************
+*** 1502,1512 ****
+  
+      if (!str_equal ((byte *) "error", temp))
+      {
+!         mem_free ((void **) &temp);
+          return 0;
+      }
+  
+!     mem_free ((void **) &temp);
+  
+      error_create (er);
+      if (*er == NULL)
+--- 1502,1512 ----
+  
+      if (!str_equal ((byte *) "error", temp))
+      {
+!         mem_free ((void **) (void *) &temp);
+          return 0;
+      }
+  
+!     mem_free ((void **) (void *) &temp);
+  
+      error_create (er);
+      if (*er == NULL)
+***************
+*** 1532,1543 ****
+  
+          if (map_str_find (&maps, temp, &(**er).m_text))
+          {
+!             mem_free ((void **) &temp);
+              error_destroy (er);
+              return 1;
+          }
+  
+!         mem_free ((void **) &temp);
+      }
+  
+      /* try to extract "token" from "...$token$..." */
+--- 1532,1543 ----
+  
+          if (map_str_find (&maps, temp, &(**er).m_text))
+          {
+!             mem_free ((void **) (void *) &temp);
+              error_destroy (er);
+              return 1;
+          }
+  
+!         mem_free ((void **) (void *) &temp);
+      }
+  
+      /* try to extract "token" from "...$token$..." */
+***************
+*** 1558,1564 ****
+              {
+                  if (string_grow (&processed, &len, '$'))
+                  {
+!                     mem_free ((void **) &processed);
+                      error_destroy (er);
+                      return 1;
+                  }
+--- 1558,1564 ----
+              {
+                  if (string_grow (&processed, &len, '$'))
+                  {
+!                     mem_free ((void **) (void *) &processed);
+                      error_destroy (er);
+                      return 1;
+                  }
+***************
+*** 1569,1575 ****
+              {
+                  if (string_grow (&processed, &len, (**er).m_text[i]))
+                  {
+!                     mem_free ((void **) &processed);
+                      error_destroy (er);
+                      return 1;
+                  }
+--- 1569,1575 ----
+              {
+                  if (string_grow (&processed, &len, (**er).m_text[i]))
+                  {
+!                     mem_free ((void **) (void *) &processed);
+                      error_destroy (er);
+                      return 1;
+                  }
+***************
+*** 1580,1586 ****
+              {
+                  if (string_grow (&processed, &len, '$'))
+                  {
+!                     mem_free ((void **) &processed);
+                      error_destroy (er);
+                      return 1;
+                  }
+--- 1580,1586 ----
+              {
+                  if (string_grow (&processed, &len, '$'))
+                  {
+!                     mem_free ((void **) (void *) &processed);
+                      error_destroy (er);
+                      return 1;
+                  }
+***************
+*** 1591,1597 ****
+  
+                      if (string_grow (&(**er).m_token_name, &tlen, '\0'))
+                      {
+!                         mem_free ((void **) &processed);
+                          error_destroy (er);
+                          return 1;
+                      }
+--- 1591,1597 ----
+  
+                      if (string_grow (&(**er).m_token_name, &tlen, '\0'))
+                      {
+!                         mem_free ((void **) (void *) &processed);
+                          error_destroy (er);
+                          return 1;
+                      }
+***************
+*** 1603,1609 ****
+                      {
+                          if (string_grow (&(**er).m_token_name, &tlen, (**er).m_text[i]))
+                          {
+!                             mem_free ((void **) &processed);
+                              error_destroy (er);
+                              return 1;
+                          }
+--- 1603,1609 ----
+                      {
+                          if (string_grow (&(**er).m_token_name, &tlen, (**er).m_text[i]))
+                          {
+!                             mem_free ((void **) (void *) &processed);
+                              error_destroy (er);
+                              return 1;
+                          }
+***************
+*** 1652,1662 ****
+          dest = ed_regbyte;
+      else
+      {
+!         mem_free ((void **) &temp);
+          return 0;
+      }
+  
+!     mem_free ((void **) &temp);
+  
+      emit_create (&e);
+      if (e == NULL)
+--- 1652,1662 ----
+          dest = ed_regbyte;
+      else
+      {
+!         mem_free ((void **) (void *) &temp);
+          return 0;
+      }
+  
+!     mem_free ((void **) (void *) &temp);
+  
+      emit_create (&e);
+      if (e == NULL)
+***************
+*** 1706,1712 ****
+          }
+          e->m_byte = (byte) temp[0];
+  
+!         mem_free ((void **) &temp);
+  
+          e->m_emit_type = et_byte;
+      }
+--- 1706,1712 ----
+          }
+          e->m_byte = (byte) temp[0];
+  
+!         mem_free ((void **) (void *) &temp);
+  
+          e->m_emit_type = et_byte;
+      }
+***************
+*** 1720,1731 ****
+  
+          if (map_byte_find (&mapb, temp, &e->m_byte))
+          {
+!             mem_free ((void **) &temp);
+              emit_destroy (&e);
+              return 1;
+          }
+  
+!         mem_free ((void **) &temp);
+  
+          e->m_emit_type = et_byte;
+      }
+--- 1720,1731 ----
+  
+          if (map_byte_find (&mapb, temp, &e->m_byte))
+          {
+!             mem_free ((void **) (void *) &temp);
+              emit_destroy (&e);
+              return 1;
+          }
+  
+!         mem_free ((void **) (void *) &temp);
+  
+          e->m_emit_type = et_byte;
+      }
+***************
+*** 1819,1825 ****
+              t = u;
+          }
+  
+!         mem_free ((void **) &keyword);
+      }
+  
+      if (*t == '\'')
+--- 1819,1825 ----
+              t = u;
+          }
+  
+!         mem_free ((void **) (void *) &keyword);
+      }
+  
+      if (*t == '\'')
+***************
+*** 1843,1849 ****
+  
+              if (get_string (&t, &temp2))
+              {
+!                 mem_free ((void **) &temp);
+                  spec_destroy (&s);
+                  return 1;
+              }
+--- 1843,1849 ----
+  
+              if (get_string (&t, &temp2))
+              {
+!                 mem_free ((void **) (void *) &temp);
+                  spec_destroy (&s);
+                  return 1;
+              }
+***************
+*** 1853,1859 ****
+              s->m_byte[0] = *temp;
+              s->m_byte[1] = *temp2;
+  
+!             mem_free ((void **) &temp2);
+          }
+          else
+          {
+--- 1853,1859 ----
+              s->m_byte[0] = *temp;
+              s->m_byte[1] = *temp2;
+  
+!             mem_free ((void **) (void *) &temp2);
+          }
+          else
+          {
+***************
+*** 1861,1867 ****
+              *s->m_byte = *temp;
+          }
+  
+!         mem_free ((void **) &temp);
+      }
+      else if (*t == '"')
+      {
+--- 1861,1867 ----
+              *s->m_byte = *temp;
+          }
+  
+!         mem_free ((void **) (void *) &temp);
+      }
+      else if (*t == '"')
+      {
+***************
+*** 1908,1914 ****
+          {
+              if (get_identifier (&t, &s->m_string))
+              {
+!                 mem_free ((void **) &keyword);
+                  spec_destroy (&s);
+                  return 1;
+              }
+--- 1908,1914 ----
+          {
+              if (get_identifier (&t, &s->m_string))
+              {
+!                 mem_free ((void **) (void *) &keyword);
+                  spec_destroy (&s);
+                  return 1;
+              }
+***************
+*** 1917,1923 ****
+              s->m_spec_type = st_identifier_loop;
+          }
+  
+!         mem_free ((void **) &keyword);
+      }
+      else
+      {
+--- 1917,1923 ----
+              s->m_spec_type = st_identifier_loop;
+          }
+  
+!         mem_free ((void **) (void *) &keyword);
+      }
+      else
+      {
+***************
+*** 1993,1999 ****
+                  r->m_oper = op_or;
+          }
+  
+!         mem_free ((void **) &op);
+  
+          if (get_spec (&t, &sp, maps, mapb))
+          {
+--- 1993,1999 ----
+                  r->m_oper = op_or;
+          }
+  
+!         mem_free ((void **) (void *) &op);
+  
+          if (get_spec (&t, &sp, maps, mapb))
+          {
+***************
+*** 2550,2556 ****
+          {
+              map_byte *ma = NULL;
+  
+!             mem_free ((void **) &symbol);
+  
+              if (get_emtcode (&text, &ma))
+              {
+--- 2550,2556 ----
+          {
+              map_byte *ma = NULL;
+  
+!             mem_free ((void **) (void *) &symbol);
+  
+              if (get_emtcode (&text, &ma))
+              {
+***************
+*** 2565,2571 ****
+          {
+              map_byte *ma = NULL;
+  
+!             mem_free ((void **) &symbol);
+  
+              if (get_regbyte (&text, &ma))
+              {
+--- 2565,2571 ----
+          {
+              map_byte *ma = NULL;
+  
+!             mem_free ((void **) (void *) &symbol);
+  
+              if (get_regbyte (&text, &ma))
+              {
+***************
+*** 2580,2586 ****
+          {
+              map_str *ma = NULL;
+  
+!             mem_free ((void **) &symbol);
+  
+              if (get_errtext (&text, &ma))
+              {
+--- 2580,2586 ----
+          {
+              map_str *ma = NULL;
+  
+!             mem_free ((void **) (void *) &symbol);
+  
+              if (get_errtext (&text, &ma))
+              {
+***************
+*** 2593,2599 ****
+          /* .string */
+          else if (is_dot && str_equal (symbol, (byte *) "string"))
+          {
+!             mem_free ((void **) &symbol);
+  
+              if (g->di->m_string != NULL)
+              {
+--- 2593,2599 ----
+          /* .string */
+          else if (is_dot && str_equal (symbol, (byte *) "string"))
+          {
+!             mem_free ((void **) (void *) &symbol);
+  
+              if (g->di->m_string != NULL)
+              {
+***************
+*** 2760,2766 ****
+      *text = '\0';
+  
+  #define APPEND_CHARACTER(x) if (dots_made == 0) {\
+!                                 if (len < size - 1) {\
+                                      text[len++] = (x); text[len] = '\0';\
+                                  } else {\
+                                      int i;\
+--- 2760,2766 ----
+      *text = '\0';
+  
+  #define APPEND_CHARACTER(x) if (dots_made == 0) {\
+!                                 if (len < (int)size - 1) {\
+                                      text[len++] = (x); text[len] = '\0';\
+                                  } else {\
+                                      int i;\
+Index: xc/extras/Mesa/src/mesa/shader/nvfragprog.h
+diff -c 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,67 ****
+--- 62,68 ----
+  
+  /* 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 -c 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,171 ****
+        }
+  
+        prog = (struct program *) _mesa_HashLookup(ctx->Shared->Programs, ids[i]);
+- 
+        if (!prog) {
+           _mesa_error(ctx, GL_INVALID_VALUE, "glRequestResidentProgramsNV(id)");
+           return;
+        }
+  
+        prog->Resident = GL_TRUE;
+     }
+  }
+--- 160,171 ----
+        }
+  
+        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,535 ****
+          target == GL_VERTEX_STATE_PROGRAM_NV)
+         && ctx->Extensions.NV_vertex_program) {
+        struct vertex_program *vprog = (struct vertex_program *) prog;
+!       if (!vprog) {
+           vprog = (struct vertex_program *)
+              ctx->Driver.NewProgram(ctx, target, id);
+           if (!vprog) {
+--- 529,535 ----
+          target == GL_VERTEX_STATE_PROGRAM_NV)
+         && ctx->Extensions.NV_vertex_program) {
+        struct vertex_program *vprog = (struct vertex_program *) prog;
+!       if (!vprog || prog == &_mesa_DummyProgram) {
+           vprog = (struct vertex_program *)
+              ctx->Driver.NewProgram(ctx, target, id);
+           if (!vprog) {
+***************
+*** 543,549 ****
+     else if (target == GL_FRAGMENT_PROGRAM_NV
+              && ctx->Extensions.NV_fragment_program) {
+        struct fragment_program *fprog = (struct fragment_program *) prog;
+!       if (!fprog) {
+           fprog = (struct fragment_program *)
+              ctx->Driver.NewProgram(ctx, target, id);
+           if (!fprog) {
+--- 543,549 ----
+     else if (target == GL_FRAGMENT_PROGRAM_NV
+              && ctx->Extensions.NV_fragment_program) {
+        struct fragment_program *fprog = (struct fragment_program *) prog;
+!       if (!fprog || prog == &_mesa_DummyProgram) {
+           fprog = (struct fragment_program *)
+              ctx->Driver.NewProgram(ctx, target, id);
+           if (!fprog) {
+***************
+*** 776,782 ****
+     }
+  
+     if (len <= 0) {
+!       _mesa_error(ctx, GL_INVALID_VALUE, "glProgramNamedParameterNV");
+        return;
+     }
+  
+--- 776,782 ----
+     }
+  
+     if (len <= 0) {
+!       _mesa_error(ctx, GL_INVALID_VALUE, "glProgramNamedParameterNV(len)");
+        return;
+     }
+  
+***************
+*** 790,796 ****
+        return;
+     }
+  
+!    _mesa_error(ctx, GL_INVALID_VALUE, "glProgramNamedParameterNV");
+  }
+  
+  
+--- 790,796 ----
+        return;
+     }
+  
+!    _mesa_error(ctx, GL_INVALID_VALUE, "glProgramNamedParameterNV(name)");
+  }
+  
+  
+Index: xc/extras/Mesa/src/mesa/shader/nvvertexec.c
+diff -c 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,365 ****
+   * 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 )
+  #elif defined(VMS)
+  #define SET_POS_INFINITY(x)  x = __MAXFLOAT
+  #define SET_NEG_INFINITY(x)  x = -__MAXFLOAT
+--- 358,365 ----
+   * Set x to positive or negative infinity.
+   */
+  #if defined(USE_IEEE) || defined(_WIN32)
+! #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,374 ****
+  #define SET_NEG_INFINITY(x)  x = (GLfloat) -HUGE_VAL
+  #endif
+  
+! #define SET_FLOAT_BITS(x, bits) ((fi_type *) &(x))->i = bits
+  
+  
+  /**
+--- 368,374 ----
+  #define SET_NEG_INFINITY(x)  x = (GLfloat) -HUGE_VAL
+  #endif
+  
+! #define SET_FLOAT_BITS(x, bits) ((fi_type *) (void *) &(x))->i = bits
+  
+  
+  /**
+***************
+*** 467,473 ****
+                    GLint ii = (GLint) floor_t0;
+                    ii = (ii < 23) + 0x3f800000;
+                    SET_FLOAT_BITS(q[0], ii);
+!                   q[0] = *((GLfloat *) &ii);
+  #else
+                    q[0] = (GLfloat) pow(2.0, floor_t0);
+  #endif
+--- 467,473 ----
+                    GLint ii = (GLint) floor_t0;
+                    ii = (ii < 23) + 0x3f800000;
+                    SET_FLOAT_BITS(q[0], 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 -c 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,1028 ****
+--- 1023,1029 ----
+  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 -c 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 ****
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.1
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+--- 1,6 ----
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.2
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+***************
+*** 46,51 ****
+--- 46,57 ----
+  /**********************************************************************/
+  
+  
++ /* 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,172 ****
+  }
+  
+  
+! static struct program * _mesa_init_program_struct( GLcontext *ctx, 
+!                                                 struct program *prog,
+!                                                 GLenum target, GLuint id)
+  {
+     if (prog) {
+        prog->Id = id;
+        prog->Target = target;
+--- 169,182 ----
+  }
+  
+  
+! /**
+!  * 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,185 ****
+     return prog;
+  }
+  
+! 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,199 ----
+     return prog;
+  }
+  
+! 
+! /**
+!  * 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,195 ****
+        return NULL;
+  }
+  
+! 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 );
+--- 201,213 ----
+        return NULL;
+  }
+  
+! 
+! /**
+!  * 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,228 ****
+     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;
+--- 235,244 ----
+***************
+*** 239,244 ****
+--- 255,261 ----
+  void
+  _mesa_delete_program(GLcontext *ctx, struct program *prog)
+  {
++    (void) ctx;
+     ASSERT(prog);
+  
+     if (prog->String)
+***************
+*** 524,531 ****
+              _mesa_problem(ctx, "Invalid material state in fetch_state");
+              return;
+           }
+!       };
+!       return;
+     case STATE_LIGHT:
+        {
+           /* state[1] is the light number */
+--- 541,547 ----
+              _mesa_problem(ctx, "Invalid material state in fetch_state");
+              return;
+           }
+!       }
+     case STATE_LIGHT:
+        {
+           /* state[1] is the light number */
+***************
+*** 573,579 ****
+              return;
+           }
+        }
+-       return;
+     case STATE_LIGHTMODEL_AMBIENT:
+        COPY_4V(value, ctx->Light.Model.Ambient);
+        return;
+--- 589,594 ----
+***************
+*** 633,639 ****
+                 return;
+           }
+        }
+-       return;
+     case STATE_TEXGEN:
+        {
+           /* state[1] is the texture unit */
+--- 648,653 ----
+***************
+*** 669,675 ****
+              return;
+           }
+        }
+-       return;
+     case STATE_TEXENV_COLOR:
+        {              
+           /* state[1] is the texture unit */
+--- 683,688 ----
+***************
+*** 864,878 ****
+          && 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)
+           return;
+!       /* decrement refcount on previously bound vertex program */
+!       if (ctx->VertexProgram.Current) {
+!          ctx->VertexProgram.Current->Base.RefCount--;
+           /* and delete if refcount goes below one */
+!          if (ctx->VertexProgram.Current->Base.RefCount <= 0) {
+!             ctx->Driver.DeleteProgram(ctx, &(ctx->VertexProgram.Current->Base));
+              _mesa_HashRemove(ctx->Shared->Programs, id);
+           }
+        }
+--- 877,895 ----
+          && ctx->Extensions.NV_vertex_program) ||
+         (target == GL_VERTEX_PROGRAM_ARB
+          && ctx->Extensions.ARB_vertex_program)) {
+!       /*** Vertex program binding ***/
+!       struct vertex_program *curProg = ctx->VertexProgram.Current;
+!       if (curProg->Base.Id == id) {
+!          /* binding same program - no change */
+           return;
+!       }
+!       if (curProg->Base.Id != 0) {
+!          /* decrement refcount on previously bound vertex program */
+!          curProg->Base.RefCount--;
+           /* and delete if refcount goes below one */
+!          if (curProg->Base.RefCount <= 0) {
+!             ASSERT(curProg->Base.DeletePending);
+!             ctx->Driver.DeleteProgram(ctx, &(curProg->Base));
+              _mesa_HashRemove(ctx->Shared->Programs, id);
+           }
+        }
+***************
+*** 881,895 ****
+               && 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)
+           return;
+!       /* decrement refcount on previously bound fragment program */
+!       if (ctx->FragmentProgram.Current) {
+!          ctx->FragmentProgram.Current->Base.RefCount--;
+           /* and delete if refcount goes below one */
+!          if (ctx->FragmentProgram.Current->Base.RefCount <= 0) {
+!             ctx->Driver.DeleteProgram(ctx, &(ctx->FragmentProgram.Current->Base));
+              _mesa_HashRemove(ctx->Shared->Programs, id);
+           }
+        }
+--- 898,916 ----
+               && ctx->Extensions.NV_fragment_program) ||
+              (target == GL_FRAGMENT_PROGRAM_ARB
+               && ctx->Extensions.ARB_fragment_program)) {
+!       /*** Fragment program binding ***/
+!       struct fragment_program *curProg = ctx->FragmentProgram.Current;
+!       if (curProg->Base.Id == id) {
+!          /* binding same program - no change */
+           return;
+!       }
+!       if (curProg->Base.Id != 0) {
+!          /* decrement refcount on previously bound fragment program */
+!          curProg->Base.RefCount--;
+           /* and delete if refcount goes below one */
+!          if (curProg->Base.RefCount <= 0) {
+!             ASSERT(curProg->Base.DeletePending);
+!             ctx->Driver.DeleteProgram(ctx, &(curProg->Base));
+              _mesa_HashRemove(ctx->Shared->Programs, id);
+           }
+        }
+***************
+*** 903,909 ****
+      * That's supposed to be caught in glBegin.
+      */
+     if (id == 0) {
+!       /* default program */
+        prog = NULL;
+        if (target == GL_VERTEX_PROGRAM_NV || target == GL_VERTEX_PROGRAM_ARB)
+           prog = ctx->Shared->DefaultVertexProgram;
+--- 924,930 ----
+      * That's supposed to be caught in glBegin.
+      */
+     if (id == 0) {
+!       /* Bind default program */
+        prog = NULL;
+        if (target == GL_VERTEX_PROGRAM_NV || target == GL_VERTEX_PROGRAM_ARB)
+           prog = ctx->Shared->DefaultVertexProgram;
+***************
+*** 911,929 ****
+           prog = ctx->Shared->DefaultFragmentProgram;
+     }
+     else {
+        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 {
+           /* allocate a new program now */
+           prog = ctx->Driver.NewProgram(ctx, target, id);
+           if (!prog) {
+--- 932,940 ----
+           prog = ctx->Shared->DefaultFragmentProgram;
+     }
+     else {
++       /* Bind user program */
+        prog = (struct program *) _mesa_HashLookup(ctx->Shared->Programs, id);
+!       if (!prog || prog == &_mesa_DummyProgram) {
+           /* allocate a new program now */
+           prog = ctx->Driver.NewProgram(ctx, target, id);
+           if (!prog) {
+***************
+*** 932,937 ****
+--- 943,953 ----
+           }
+           _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,947 ****
+--- 958,967 ----
+        ctx->FragmentProgram.Current = (struct fragment_program *) prog;
+     }
+  
++    /* Never null pointers */
++    ASSERT(ctx->VertexProgram.Current);
++    ASSERT(ctx->FragmentProgram.Current);
++ 
+     if (prog)
+        prog->RefCount++;
+  
+***************
+*** 971,977 ****
+        if (ids[i] != 0) {
+           struct program *prog = (struct program *)
+              _mesa_HashLookup(ctx->Shared->Programs, ids[i]);
+!          if (prog) {
+              if (prog->Target == GL_VERTEX_PROGRAM_NV ||
+                  prog->Target == GL_VERTEX_STATE_PROGRAM_NV) {
+                 if (ctx->VertexProgram.Current &&
+--- 991,1001 ----
+        if (ids[i] != 0) {
+           struct program *prog = (struct program *)
+              _mesa_HashLookup(ctx->Shared->Programs, ids[i]);
+!          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,1009 ****
+                 _mesa_problem(ctx, "bad target in glDeleteProgramsNV");
+                 return;
+              }
+!             prog->RefCount--;
+              if (prog->RefCount <= 0) {
+                 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]);
+        }
+     }
+  }
+--- 1016,1031 ----
+                 _mesa_problem(ctx, "bad target in glDeleteProgramsNV");
+                 return;
+              }
+!             /* 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);
+              }
+           }
+        }
+     }
+  }
+***************
+*** 1032,1039 ****
+  
+     first = _mesa_HashFindFreeKeyBlock(ctx->Shared->Programs, n);
+  
+     for (i = 0; i < (GLuint) n; i++) {
+!       _mesa_HashInsert(ctx->Shared->Programs, first + i, 0);
+     }
+  
+     /* Return the program names */
+--- 1054,1062 ----
+  
+     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, &_mesa_DummyProgram);
+     }
+  
+     /* Return the program names */
+***************
+*** 1044,1050 ****
+  
+  
+  /**
+!  * Determine if id names a program.
+   * \note Not compiled into display lists.
+   * \note Called from both glIsProgramNV and glIsProgramARB.
+   * \param id is the program identifier
+--- 1067,1073 ----
+  
+  
+  /**
+!  * 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 -c 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 ****
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  5.1
+   *
+!  * 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"),
+--- 1,8 ----
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.2
+   *
+!  * 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,34 ****
+--- 29,42 ----
+   */
+  
+  
++ /**
++  * \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,49 ****
+--- 52,60 ----
+  #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 -c 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,8 ****
+   * Clip testing in SPARC assembly
+   */
+  
+! #if defined(__sparc_v9__) && !defined(__linux__)
+  #define LDPTR                ldx
+  #define V4F_DATA     0x00
+  #define V4F_START    0x08
+--- 2,8 ----
+   * Clip testing in SPARC assembly
+   */
+  
+! #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 -c 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,30 ****
+  .globl glNewList
+  .type glNewList,#function
+  glNewList:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 24,30 ----
+  .globl glNewList
+  .type glNewList,#function
+  glNewList:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 45,51 ****
+  .globl glEndList
+  .type glEndList,#function
+  glEndList:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 45,51 ----
+  .globl glEndList
+  .type glEndList,#function
+  glEndList:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 66,72 ****
+  .globl glCallList
+  .type glCallList,#function
+  glCallList:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 66,72 ----
+  .globl glCallList
+  .type glCallList,#function
+  glCallList:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 87,93 ****
+  .globl glCallLists
+  .type glCallLists,#function
+  glCallLists:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 87,93 ----
+  .globl glCallLists
+  .type glCallLists,#function
+  glCallLists:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 108,114 ****
+  .globl glDeleteLists
+  .type glDeleteLists,#function
+  glDeleteLists:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 108,114 ----
+  .globl glDeleteLists
+  .type glDeleteLists,#function
+  glDeleteLists:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 129,135 ****
+  .globl glGenLists
+  .type glGenLists,#function
+  glGenLists:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 129,135 ----
+  .globl glGenLists
+  .type glGenLists,#function
+  glGenLists:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 150,156 ****
+  .globl glListBase
+  .type glListBase,#function
+  glListBase:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 150,156 ----
+  .globl glListBase
+  .type glListBase,#function
+  glListBase:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 171,177 ****
+  .globl glBegin
+  .type glBegin,#function
+  glBegin:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 171,177 ----
+  .globl glBegin
+  .type glBegin,#function
+  glBegin:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 192,198 ****
+  .globl glBitmap
+  .type glBitmap,#function
+  glBitmap:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 192,198 ----
+  .globl glBitmap
+  .type glBitmap,#function
+  glBitmap:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 213,219 ****
+  .globl glColor3b
+  .type glColor3b,#function
+  glColor3b:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 213,219 ----
+  .globl glColor3b
+  .type glColor3b,#function
+  glColor3b:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 234,240 ****
+  .globl glColor3bv
+  .type glColor3bv,#function
+  glColor3bv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 234,240 ----
+  .globl glColor3bv
+  .type glColor3bv,#function
+  glColor3bv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 255,261 ****
+  .globl glColor3d
+  .type glColor3d,#function
+  glColor3d:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 255,261 ----
+  .globl glColor3d
+  .type glColor3d,#function
+  glColor3d:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 276,282 ****
+  .globl glColor3dv
+  .type glColor3dv,#function
+  glColor3dv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 276,282 ----
+  .globl glColor3dv
+  .type glColor3dv,#function
+  glColor3dv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 297,303 ****
+  .globl glColor3f
+  .type glColor3f,#function
+  glColor3f:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 297,303 ----
+  .globl glColor3f
+  .type glColor3f,#function
+  glColor3f:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 318,324 ****
+  .globl glColor3fv
+  .type glColor3fv,#function
+  glColor3fv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 318,324 ----
+  .globl glColor3fv
+  .type glColor3fv,#function
+  glColor3fv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 339,345 ****
+  .globl glColor3i
+  .type glColor3i,#function
+  glColor3i:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 339,345 ----
+  .globl glColor3i
+  .type glColor3i,#function
+  glColor3i:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 360,366 ****
+  .globl glColor3iv
+  .type glColor3iv,#function
+  glColor3iv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 360,366 ----
+  .globl glColor3iv
+  .type glColor3iv,#function
+  glColor3iv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 381,387 ****
+  .globl glColor3s
+  .type glColor3s,#function
+  glColor3s:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 381,387 ----
+  .globl glColor3s
+  .type glColor3s,#function
+  glColor3s:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 402,408 ****
+  .globl glColor3sv
+  .type glColor3sv,#function
+  glColor3sv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 402,408 ----
+  .globl glColor3sv
+  .type glColor3sv,#function
+  glColor3sv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 423,429 ****
+  .globl glColor3ub
+  .type glColor3ub,#function
+  glColor3ub:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 423,429 ----
+  .globl glColor3ub
+  .type glColor3ub,#function
+  glColor3ub:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 444,450 ****
+  .globl glColor3ubv
+  .type glColor3ubv,#function
+  glColor3ubv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 444,450 ----
+  .globl glColor3ubv
+  .type glColor3ubv,#function
+  glColor3ubv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 465,471 ****
+  .globl glColor3ui
+  .type glColor3ui,#function
+  glColor3ui:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 465,471 ----
+  .globl glColor3ui
+  .type glColor3ui,#function
+  glColor3ui:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 486,492 ****
+  .globl glColor3uiv
+  .type glColor3uiv,#function
+  glColor3uiv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 486,492 ----
+  .globl glColor3uiv
+  .type glColor3uiv,#function
+  glColor3uiv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 507,513 ****
+  .globl glColor3us
+  .type glColor3us,#function
+  glColor3us:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 507,513 ----
+  .globl glColor3us
+  .type glColor3us,#function
+  glColor3us:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 528,534 ****
+  .globl glColor3usv
+  .type glColor3usv,#function
+  glColor3usv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 528,534 ----
+  .globl glColor3usv
+  .type glColor3usv,#function
+  glColor3usv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 549,555 ****
+  .globl glColor4b
+  .type glColor4b,#function
+  glColor4b:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 549,555 ----
+  .globl glColor4b
+  .type glColor4b,#function
+  glColor4b:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 570,576 ****
+  .globl glColor4bv
+  .type glColor4bv,#function
+  glColor4bv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 570,576 ----
+  .globl glColor4bv
+  .type glColor4bv,#function
+  glColor4bv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 591,597 ****
+  .globl glColor4d
+  .type glColor4d,#function
+  glColor4d:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 591,597 ----
+  .globl glColor4d
+  .type glColor4d,#function
+  glColor4d:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 612,618 ****
+  .globl glColor4dv
+  .type glColor4dv,#function
+  glColor4dv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 612,618 ----
+  .globl glColor4dv
+  .type glColor4dv,#function
+  glColor4dv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 633,639 ****
+  .globl glColor4f
+  .type glColor4f,#function
+  glColor4f:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 633,639 ----
+  .globl glColor4f
+  .type glColor4f,#function
+  glColor4f:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 654,660 ****
+  .globl glColor4fv
+  .type glColor4fv,#function
+  glColor4fv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 654,660 ----
+  .globl glColor4fv
+  .type glColor4fv,#function
+  glColor4fv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 675,681 ****
+  .globl glColor4i
+  .type glColor4i,#function
+  glColor4i:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 675,681 ----
+  .globl glColor4i
+  .type glColor4i,#function
+  glColor4i:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 696,702 ****
+  .globl glColor4iv
+  .type glColor4iv,#function
+  glColor4iv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 696,702 ----
+  .globl glColor4iv
+  .type glColor4iv,#function
+  glColor4iv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 717,723 ****
+  .globl glColor4s
+  .type glColor4s,#function
+  glColor4s:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 717,723 ----
+  .globl glColor4s
+  .type glColor4s,#function
+  glColor4s:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 738,744 ****
+  .globl glColor4sv
+  .type glColor4sv,#function
+  glColor4sv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 738,744 ----
+  .globl glColor4sv
+  .type glColor4sv,#function
+  glColor4sv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 759,765 ****
+  .globl glColor4ub
+  .type glColor4ub,#function
+  glColor4ub:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 759,765 ----
+  .globl glColor4ub
+  .type glColor4ub,#function
+  glColor4ub:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 780,786 ****
+  .globl glColor4ubv
+  .type glColor4ubv,#function
+  glColor4ubv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 780,786 ----
+  .globl glColor4ubv
+  .type glColor4ubv,#function
+  glColor4ubv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 801,807 ****
+  .globl glColor4ui
+  .type glColor4ui,#function
+  glColor4ui:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 801,807 ----
+  .globl glColor4ui
+  .type glColor4ui,#function
+  glColor4ui:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 822,828 ****
+  .globl glColor4uiv
+  .type glColor4uiv,#function
+  glColor4uiv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 822,828 ----
+  .globl glColor4uiv
+  .type glColor4uiv,#function
+  glColor4uiv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 843,849 ****
+  .globl glColor4us
+  .type glColor4us,#function
+  glColor4us:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 843,849 ----
+  .globl glColor4us
+  .type glColor4us,#function
+  glColor4us:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 864,870 ****
+  .globl glColor4usv
+  .type glColor4usv,#function
+  glColor4usv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 864,870 ----
+  .globl glColor4usv
+  .type glColor4usv,#function
+  glColor4usv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 885,891 ****
+  .globl glEdgeFlag
+  .type glEdgeFlag,#function
+  glEdgeFlag:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 885,891 ----
+  .globl glEdgeFlag
+  .type glEdgeFlag,#function
+  glEdgeFlag:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 906,912 ****
+  .globl glEdgeFlagv
+  .type glEdgeFlagv,#function
+  glEdgeFlagv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 906,912 ----
+  .globl glEdgeFlagv
+  .type glEdgeFlagv,#function
+  glEdgeFlagv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 927,933 ****
+  .globl glEnd
+  .type glEnd,#function
+  glEnd:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 927,933 ----
+  .globl glEnd
+  .type glEnd,#function
+  glEnd:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 948,954 ****
+  .globl glIndexd
+  .type glIndexd,#function
+  glIndexd:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 948,954 ----
+  .globl glIndexd
+  .type glIndexd,#function
+  glIndexd:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 969,975 ****
+  .globl glIndexdv
+  .type glIndexdv,#function
+  glIndexdv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 969,975 ----
+  .globl glIndexdv
+  .type glIndexdv,#function
+  glIndexdv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 990,996 ****
+  .globl glIndexf
+  .type glIndexf,#function
+  glIndexf:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 990,996 ----
+  .globl glIndexf
+  .type glIndexf,#function
+  glIndexf:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1011,1017 ****
+  .globl glIndexfv
+  .type glIndexfv,#function
+  glIndexfv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1011,1017 ----
+  .globl glIndexfv
+  .type glIndexfv,#function
+  glIndexfv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1032,1038 ****
+  .globl glIndexi
+  .type glIndexi,#function
+  glIndexi:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1032,1038 ----
+  .globl glIndexi
+  .type glIndexi,#function
+  glIndexi:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1053,1059 ****
+  .globl glIndexiv
+  .type glIndexiv,#function
+  glIndexiv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1053,1059 ----
+  .globl glIndexiv
+  .type glIndexiv,#function
+  glIndexiv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1074,1080 ****
+  .globl glIndexs
+  .type glIndexs,#function
+  glIndexs:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1074,1080 ----
+  .globl glIndexs
+  .type glIndexs,#function
+  glIndexs:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1095,1101 ****
+  .globl glIndexsv
+  .type glIndexsv,#function
+  glIndexsv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1095,1101 ----
+  .globl glIndexsv
+  .type glIndexsv,#function
+  glIndexsv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1116,1122 ****
+  .globl glNormal3b
+  .type glNormal3b,#function
+  glNormal3b:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1116,1122 ----
+  .globl glNormal3b
+  .type glNormal3b,#function
+  glNormal3b:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1137,1143 ****
+  .globl glNormal3bv
+  .type glNormal3bv,#function
+  glNormal3bv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1137,1143 ----
+  .globl glNormal3bv
+  .type glNormal3bv,#function
+  glNormal3bv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1158,1164 ****
+  .globl glNormal3d
+  .type glNormal3d,#function
+  glNormal3d:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1158,1164 ----
+  .globl glNormal3d
+  .type glNormal3d,#function
+  glNormal3d:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1179,1185 ****
+  .globl glNormal3dv
+  .type glNormal3dv,#function
+  glNormal3dv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1179,1185 ----
+  .globl glNormal3dv
+  .type glNormal3dv,#function
+  glNormal3dv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1200,1206 ****
+  .globl glNormal3f
+  .type glNormal3f,#function
+  glNormal3f:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1200,1206 ----
+  .globl glNormal3f
+  .type glNormal3f,#function
+  glNormal3f:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1221,1227 ****
+  .globl glNormal3fv
+  .type glNormal3fv,#function
+  glNormal3fv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1221,1227 ----
+  .globl glNormal3fv
+  .type glNormal3fv,#function
+  glNormal3fv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1242,1248 ****
+  .globl glNormal3i
+  .type glNormal3i,#function
+  glNormal3i:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1242,1248 ----
+  .globl glNormal3i
+  .type glNormal3i,#function
+  glNormal3i:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1263,1269 ****
+  .globl glNormal3iv
+  .type glNormal3iv,#function
+  glNormal3iv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1263,1269 ----
+  .globl glNormal3iv
+  .type glNormal3iv,#function
+  glNormal3iv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1284,1290 ****
+  .globl glNormal3s
+  .type glNormal3s,#function
+  glNormal3s:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1284,1290 ----
+  .globl glNormal3s
+  .type glNormal3s,#function
+  glNormal3s:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1305,1311 ****
+  .globl glNormal3sv
+  .type glNormal3sv,#function
+  glNormal3sv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1305,1311 ----
+  .globl glNormal3sv
+  .type glNormal3sv,#function
+  glNormal3sv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1326,1332 ****
+  .globl glRasterPos2d
+  .type glRasterPos2d,#function
+  glRasterPos2d:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1326,1332 ----
+  .globl glRasterPos2d
+  .type glRasterPos2d,#function
+  glRasterPos2d:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1347,1353 ****
+  .globl glRasterPos2dv
+  .type glRasterPos2dv,#function
+  glRasterPos2dv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1347,1353 ----
+  .globl glRasterPos2dv
+  .type glRasterPos2dv,#function
+  glRasterPos2dv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1368,1374 ****
+  .globl glRasterPos2f
+  .type glRasterPos2f,#function
+  glRasterPos2f:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1368,1374 ----
+  .globl glRasterPos2f
+  .type glRasterPos2f,#function
+  glRasterPos2f:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1389,1395 ****
+  .globl glRasterPos2fv
+  .type glRasterPos2fv,#function
+  glRasterPos2fv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1389,1395 ----
+  .globl glRasterPos2fv
+  .type glRasterPos2fv,#function
+  glRasterPos2fv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1410,1416 ****
+  .globl glRasterPos2i
+  .type glRasterPos2i,#function
+  glRasterPos2i:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1410,1416 ----
+  .globl glRasterPos2i
+  .type glRasterPos2i,#function
+  glRasterPos2i:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1431,1437 ****
+  .globl glRasterPos2iv
+  .type glRasterPos2iv,#function
+  glRasterPos2iv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1431,1437 ----
+  .globl glRasterPos2iv
+  .type glRasterPos2iv,#function
+  glRasterPos2iv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1452,1458 ****
+  .globl glRasterPos2s
+  .type glRasterPos2s,#function
+  glRasterPos2s:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1452,1458 ----
+  .globl glRasterPos2s
+  .type glRasterPos2s,#function
+  glRasterPos2s:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1473,1479 ****
+  .globl glRasterPos2sv
+  .type glRasterPos2sv,#function
+  glRasterPos2sv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1473,1479 ----
+  .globl glRasterPos2sv
+  .type glRasterPos2sv,#function
+  glRasterPos2sv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1494,1500 ****
+  .globl glRasterPos3d
+  .type glRasterPos3d,#function
+  glRasterPos3d:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1494,1500 ----
+  .globl glRasterPos3d
+  .type glRasterPos3d,#function
+  glRasterPos3d:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1515,1521 ****
+  .globl glRasterPos3dv
+  .type glRasterPos3dv,#function
+  glRasterPos3dv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1515,1521 ----
+  .globl glRasterPos3dv
+  .type glRasterPos3dv,#function
+  glRasterPos3dv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1536,1542 ****
+  .globl glRasterPos3f
+  .type glRasterPos3f,#function
+  glRasterPos3f:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1536,1542 ----
+  .globl glRasterPos3f
+  .type glRasterPos3f,#function
+  glRasterPos3f:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1557,1563 ****
+  .globl glRasterPos3fv
+  .type glRasterPos3fv,#function
+  glRasterPos3fv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1557,1563 ----
+  .globl glRasterPos3fv
+  .type glRasterPos3fv,#function
+  glRasterPos3fv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1578,1584 ****
+  .globl glRasterPos3i
+  .type glRasterPos3i,#function
+  glRasterPos3i:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1578,1584 ----
+  .globl glRasterPos3i
+  .type glRasterPos3i,#function
+  glRasterPos3i:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1599,1605 ****
+  .globl glRasterPos3iv
+  .type glRasterPos3iv,#function
+  glRasterPos3iv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1599,1605 ----
+  .globl glRasterPos3iv
+  .type glRasterPos3iv,#function
+  glRasterPos3iv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1620,1626 ****
+  .globl glRasterPos3s
+  .type glRasterPos3s,#function
+  glRasterPos3s:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1620,1626 ----
+  .globl glRasterPos3s
+  .type glRasterPos3s,#function
+  glRasterPos3s:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1641,1647 ****
+  .globl glRasterPos3sv
+  .type glRasterPos3sv,#function
+  glRasterPos3sv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1641,1647 ----
+  .globl glRasterPos3sv
+  .type glRasterPos3sv,#function
+  glRasterPos3sv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1662,1668 ****
+  .globl glRasterPos4d
+  .type glRasterPos4d,#function
+  glRasterPos4d:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1662,1668 ----
+  .globl glRasterPos4d
+  .type glRasterPos4d,#function
+  glRasterPos4d:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1683,1689 ****
+  .globl glRasterPos4dv
+  .type glRasterPos4dv,#function
+  glRasterPos4dv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1683,1689 ----
+  .globl glRasterPos4dv
+  .type glRasterPos4dv,#function
+  glRasterPos4dv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1704,1710 ****
+  .globl glRasterPos4f
+  .type glRasterPos4f,#function
+  glRasterPos4f:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1704,1710 ----
+  .globl glRasterPos4f
+  .type glRasterPos4f,#function
+  glRasterPos4f:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1725,1731 ****
+  .globl glRasterPos4fv
+  .type glRasterPos4fv,#function
+  glRasterPos4fv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1725,1731 ----
+  .globl glRasterPos4fv
+  .type glRasterPos4fv,#function
+  glRasterPos4fv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1746,1752 ****
+  .globl glRasterPos4i
+  .type glRasterPos4i,#function
+  glRasterPos4i:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1746,1752 ----
+  .globl glRasterPos4i
+  .type glRasterPos4i,#function
+  glRasterPos4i:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1767,1773 ****
+  .globl glRasterPos4iv
+  .type glRasterPos4iv,#function
+  glRasterPos4iv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1767,1773 ----
+  .globl glRasterPos4iv
+  .type glRasterPos4iv,#function
+  glRasterPos4iv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1788,1794 ****
+  .globl glRasterPos4s
+  .type glRasterPos4s,#function
+  glRasterPos4s:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1788,1794 ----
+  .globl glRasterPos4s
+  .type glRasterPos4s,#function
+  glRasterPos4s:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1809,1815 ****
+  .globl glRasterPos4sv
+  .type glRasterPos4sv,#function
+  glRasterPos4sv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1809,1815 ----
+  .globl glRasterPos4sv
+  .type glRasterPos4sv,#function
+  glRasterPos4sv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1830,1836 ****
+  .globl glRectd
+  .type glRectd,#function
+  glRectd:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1830,1836 ----
+  .globl glRectd
+  .type glRectd,#function
+  glRectd:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1851,1857 ****
+  .globl glRectdv
+  .type glRectdv,#function
+  glRectdv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1851,1857 ----
+  .globl glRectdv
+  .type glRectdv,#function
+  glRectdv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1872,1878 ****
+  .globl glRectf
+  .type glRectf,#function
+  glRectf:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1872,1878 ----
+  .globl glRectf
+  .type glRectf,#function
+  glRectf:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1893,1899 ****
+  .globl glRectfv
+  .type glRectfv,#function
+  glRectfv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1893,1899 ----
+  .globl glRectfv
+  .type glRectfv,#function
+  glRectfv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1914,1920 ****
+  .globl glRecti
+  .type glRecti,#function
+  glRecti:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1914,1920 ----
+  .globl glRecti
+  .type glRecti,#function
+  glRecti:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1935,1941 ****
+  .globl glRectiv
+  .type glRectiv,#function
+  glRectiv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1935,1941 ----
+  .globl glRectiv
+  .type glRectiv,#function
+  glRectiv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1956,1962 ****
+  .globl glRects
+  .type glRects,#function
+  glRects:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1956,1962 ----
+  .globl glRects
+  .type glRects,#function
+  glRects:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1977,1983 ****
+  .globl glRectsv
+  .type glRectsv,#function
+  glRectsv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1977,1983 ----
+  .globl glRectsv
+  .type glRectsv,#function
+  glRectsv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 1998,2004 ****
+  .globl glTexCoord1d
+  .type glTexCoord1d,#function
+  glTexCoord1d:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 1998,2004 ----
+  .globl glTexCoord1d
+  .type glTexCoord1d,#function
+  glTexCoord1d:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2019,2025 ****
+  .globl glTexCoord1dv
+  .type glTexCoord1dv,#function
+  glTexCoord1dv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2019,2025 ----
+  .globl glTexCoord1dv
+  .type glTexCoord1dv,#function
+  glTexCoord1dv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2040,2046 ****
+  .globl glTexCoord1f
+  .type glTexCoord1f,#function
+  glTexCoord1f:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2040,2046 ----
+  .globl glTexCoord1f
+  .type glTexCoord1f,#function
+  glTexCoord1f:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2061,2067 ****
+  .globl glTexCoord1fv
+  .type glTexCoord1fv,#function
+  glTexCoord1fv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2061,2067 ----
+  .globl glTexCoord1fv
+  .type glTexCoord1fv,#function
+  glTexCoord1fv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2082,2088 ****
+  .globl glTexCoord1i
+  .type glTexCoord1i,#function
+  glTexCoord1i:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2082,2088 ----
+  .globl glTexCoord1i
+  .type glTexCoord1i,#function
+  glTexCoord1i:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2103,2109 ****
+  .globl glTexCoord1iv
+  .type glTexCoord1iv,#function
+  glTexCoord1iv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2103,2109 ----
+  .globl glTexCoord1iv
+  .type glTexCoord1iv,#function
+  glTexCoord1iv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2124,2130 ****
+  .globl glTexCoord1s
+  .type glTexCoord1s,#function
+  glTexCoord1s:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2124,2130 ----
+  .globl glTexCoord1s
+  .type glTexCoord1s,#function
+  glTexCoord1s:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2145,2151 ****
+  .globl glTexCoord1sv
+  .type glTexCoord1sv,#function
+  glTexCoord1sv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2145,2151 ----
+  .globl glTexCoord1sv
+  .type glTexCoord1sv,#function
+  glTexCoord1sv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2166,2172 ****
+  .globl glTexCoord2d
+  .type glTexCoord2d,#function
+  glTexCoord2d:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2166,2172 ----
+  .globl glTexCoord2d
+  .type glTexCoord2d,#function
+  glTexCoord2d:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2187,2193 ****
+  .globl glTexCoord2dv
+  .type glTexCoord2dv,#function
+  glTexCoord2dv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2187,2193 ----
+  .globl glTexCoord2dv
+  .type glTexCoord2dv,#function
+  glTexCoord2dv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2208,2214 ****
+  .globl glTexCoord2f
+  .type glTexCoord2f,#function
+  glTexCoord2f:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2208,2214 ----
+  .globl glTexCoord2f
+  .type glTexCoord2f,#function
+  glTexCoord2f:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2229,2235 ****
+  .globl glTexCoord2fv
+  .type glTexCoord2fv,#function
+  glTexCoord2fv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2229,2235 ----
+  .globl glTexCoord2fv
+  .type glTexCoord2fv,#function
+  glTexCoord2fv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2250,2256 ****
+  .globl glTexCoord2i
+  .type glTexCoord2i,#function
+  glTexCoord2i:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2250,2256 ----
+  .globl glTexCoord2i
+  .type glTexCoord2i,#function
+  glTexCoord2i:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2271,2277 ****
+  .globl glTexCoord2iv
+  .type glTexCoord2iv,#function
+  glTexCoord2iv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2271,2277 ----
+  .globl glTexCoord2iv
+  .type glTexCoord2iv,#function
+  glTexCoord2iv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2292,2298 ****
+  .globl glTexCoord2s
+  .type glTexCoord2s,#function
+  glTexCoord2s:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2292,2298 ----
+  .globl glTexCoord2s
+  .type glTexCoord2s,#function
+  glTexCoord2s:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2313,2319 ****
+  .globl glTexCoord2sv
+  .type glTexCoord2sv,#function
+  glTexCoord2sv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2313,2319 ----
+  .globl glTexCoord2sv
+  .type glTexCoord2sv,#function
+  glTexCoord2sv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2334,2340 ****
+  .globl glTexCoord3d
+  .type glTexCoord3d,#function
+  glTexCoord3d:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2334,2340 ----
+  .globl glTexCoord3d
+  .type glTexCoord3d,#function
+  glTexCoord3d:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2355,2361 ****
+  .globl glTexCoord3dv
+  .type glTexCoord3dv,#function
+  glTexCoord3dv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2355,2361 ----
+  .globl glTexCoord3dv
+  .type glTexCoord3dv,#function
+  glTexCoord3dv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2376,2382 ****
+  .globl glTexCoord3f
+  .type glTexCoord3f,#function
+  glTexCoord3f:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2376,2382 ----
+  .globl glTexCoord3f
+  .type glTexCoord3f,#function
+  glTexCoord3f:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2397,2403 ****
+  .globl glTexCoord3fv
+  .type glTexCoord3fv,#function
+  glTexCoord3fv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2397,2403 ----
+  .globl glTexCoord3fv
+  .type glTexCoord3fv,#function
+  glTexCoord3fv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2418,2424 ****
+  .globl glTexCoord3i
+  .type glTexCoord3i,#function
+  glTexCoord3i:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2418,2424 ----
+  .globl glTexCoord3i
+  .type glTexCoord3i,#function
+  glTexCoord3i:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2439,2445 ****
+  .globl glTexCoord3iv
+  .type glTexCoord3iv,#function
+  glTexCoord3iv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2439,2445 ----
+  .globl glTexCoord3iv
+  .type glTexCoord3iv,#function
+  glTexCoord3iv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2460,2466 ****
+  .globl glTexCoord3s
+  .type glTexCoord3s,#function
+  glTexCoord3s:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2460,2466 ----
+  .globl glTexCoord3s
+  .type glTexCoord3s,#function
+  glTexCoord3s:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2481,2487 ****
+  .globl glTexCoord3sv
+  .type glTexCoord3sv,#function
+  glTexCoord3sv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2481,2487 ----
+  .globl glTexCoord3sv
+  .type glTexCoord3sv,#function
+  glTexCoord3sv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2502,2508 ****
+  .globl glTexCoord4d
+  .type glTexCoord4d,#function
+  glTexCoord4d:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2502,2508 ----
+  .globl glTexCoord4d
+  .type glTexCoord4d,#function
+  glTexCoord4d:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2523,2529 ****
+  .globl glTexCoord4dv
+  .type glTexCoord4dv,#function
+  glTexCoord4dv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2523,2529 ----
+  .globl glTexCoord4dv
+  .type glTexCoord4dv,#function
+  glTexCoord4dv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2544,2550 ****
+  .globl glTexCoord4f
+  .type glTexCoord4f,#function
+  glTexCoord4f:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2544,2550 ----
+  .globl glTexCoord4f
+  .type glTexCoord4f,#function
+  glTexCoord4f:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2565,2571 ****
+  .globl glTexCoord4fv
+  .type glTexCoord4fv,#function
+  glTexCoord4fv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2565,2571 ----
+  .globl glTexCoord4fv
+  .type glTexCoord4fv,#function
+  glTexCoord4fv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2586,2592 ****
+  .globl glTexCoord4i
+  .type glTexCoord4i,#function
+  glTexCoord4i:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2586,2592 ----
+  .globl glTexCoord4i
+  .type glTexCoord4i,#function
+  glTexCoord4i:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2607,2613 ****
+  .globl glTexCoord4iv
+  .type glTexCoord4iv,#function
+  glTexCoord4iv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2607,2613 ----
+  .globl glTexCoord4iv
+  .type glTexCoord4iv,#function
+  glTexCoord4iv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2628,2634 ****
+  .globl glTexCoord4s
+  .type glTexCoord4s,#function
+  glTexCoord4s:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2628,2634 ----
+  .globl glTexCoord4s
+  .type glTexCoord4s,#function
+  glTexCoord4s:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2649,2655 ****
+  .globl glTexCoord4sv
+  .type glTexCoord4sv,#function
+  glTexCoord4sv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2649,2655 ----
+  .globl glTexCoord4sv
+  .type glTexCoord4sv,#function
+  glTexCoord4sv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2670,2676 ****
+  .globl glVertex2d
+  .type glVertex2d,#function
+  glVertex2d:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2670,2676 ----
+  .globl glVertex2d
+  .type glVertex2d,#function
+  glVertex2d:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2691,2697 ****
+  .globl glVertex2dv
+  .type glVertex2dv,#function
+  glVertex2dv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2691,2697 ----
+  .globl glVertex2dv
+  .type glVertex2dv,#function
+  glVertex2dv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2712,2718 ****
+  .globl glVertex2f
+  .type glVertex2f,#function
+  glVertex2f:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2712,2718 ----
+  .globl glVertex2f
+  .type glVertex2f,#function
+  glVertex2f:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2733,2739 ****
+  .globl glVertex2fv
+  .type glVertex2fv,#function
+  glVertex2fv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2733,2739 ----
+  .globl glVertex2fv
+  .type glVertex2fv,#function
+  glVertex2fv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2754,2760 ****
+  .globl glVertex2i
+  .type glVertex2i,#function
+  glVertex2i:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2754,2760 ----
+  .globl glVertex2i
+  .type glVertex2i,#function
+  glVertex2i:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2775,2781 ****
+  .globl glVertex2iv
+  .type glVertex2iv,#function
+  glVertex2iv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2775,2781 ----
+  .globl glVertex2iv
+  .type glVertex2iv,#function
+  glVertex2iv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2796,2802 ****
+  .globl glVertex2s
+  .type glVertex2s,#function
+  glVertex2s:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2796,2802 ----
+  .globl glVertex2s
+  .type glVertex2s,#function
+  glVertex2s:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2817,2823 ****
+  .globl glVertex2sv
+  .type glVertex2sv,#function
+  glVertex2sv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2817,2823 ----
+  .globl glVertex2sv
+  .type glVertex2sv,#function
+  glVertex2sv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2838,2844 ****
+  .globl glVertex3d
+  .type glVertex3d,#function
+  glVertex3d:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2838,2844 ----
+  .globl glVertex3d
+  .type glVertex3d,#function
+  glVertex3d:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2859,2865 ****
+  .globl glVertex3dv
+  .type glVertex3dv,#function
+  glVertex3dv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2859,2865 ----
+  .globl glVertex3dv
+  .type glVertex3dv,#function
+  glVertex3dv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2880,2886 ****
+  .globl glVertex3f
+  .type glVertex3f,#function
+  glVertex3f:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2880,2886 ----
+  .globl glVertex3f
+  .type glVertex3f,#function
+  glVertex3f:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2901,2907 ****
+  .globl glVertex3fv
+  .type glVertex3fv,#function
+  glVertex3fv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2901,2907 ----
+  .globl glVertex3fv
+  .type glVertex3fv,#function
+  glVertex3fv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2922,2928 ****
+  .globl glVertex3i
+  .type glVertex3i,#function
+  glVertex3i:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2922,2928 ----
+  .globl glVertex3i
+  .type glVertex3i,#function
+  glVertex3i:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2943,2949 ****
+  .globl glVertex3iv
+  .type glVertex3iv,#function
+  glVertex3iv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2943,2949 ----
+  .globl glVertex3iv
+  .type glVertex3iv,#function
+  glVertex3iv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2964,2970 ****
+  .globl glVertex3s
+  .type glVertex3s,#function
+  glVertex3s:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2964,2970 ----
+  .globl glVertex3s
+  .type glVertex3s,#function
+  glVertex3s:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 2985,2991 ****
+  .globl glVertex3sv
+  .type glVertex3sv,#function
+  glVertex3sv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 2985,2991 ----
+  .globl glVertex3sv
+  .type glVertex3sv,#function
+  glVertex3sv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3006,3012 ****
+  .globl glVertex4d
+  .type glVertex4d,#function
+  glVertex4d:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3006,3012 ----
+  .globl glVertex4d
+  .type glVertex4d,#function
+  glVertex4d:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3027,3033 ****
+  .globl glVertex4dv
+  .type glVertex4dv,#function
+  glVertex4dv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3027,3033 ----
+  .globl glVertex4dv
+  .type glVertex4dv,#function
+  glVertex4dv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3048,3054 ****
+  .globl glVertex4f
+  .type glVertex4f,#function
+  glVertex4f:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3048,3054 ----
+  .globl glVertex4f
+  .type glVertex4f,#function
+  glVertex4f:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3069,3075 ****
+  .globl glVertex4fv
+  .type glVertex4fv,#function
+  glVertex4fv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3069,3075 ----
+  .globl glVertex4fv
+  .type glVertex4fv,#function
+  glVertex4fv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3090,3096 ****
+  .globl glVertex4i
+  .type glVertex4i,#function
+  glVertex4i:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3090,3096 ----
+  .globl glVertex4i
+  .type glVertex4i,#function
+  glVertex4i:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3111,3117 ****
+  .globl glVertex4iv
+  .type glVertex4iv,#function
+  glVertex4iv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3111,3117 ----
+  .globl glVertex4iv
+  .type glVertex4iv,#function
+  glVertex4iv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3132,3138 ****
+  .globl glVertex4s
+  .type glVertex4s,#function
+  glVertex4s:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3132,3138 ----
+  .globl glVertex4s
+  .type glVertex4s,#function
+  glVertex4s:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3153,3159 ****
+  .globl glVertex4sv
+  .type glVertex4sv,#function
+  glVertex4sv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3153,3159 ----
+  .globl glVertex4sv
+  .type glVertex4sv,#function
+  glVertex4sv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3174,3180 ****
+  .globl glClipPlane
+  .type glClipPlane,#function
+  glClipPlane:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3174,3180 ----
+  .globl glClipPlane
+  .type glClipPlane,#function
+  glClipPlane:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3195,3201 ****
+  .globl glColorMaterial
+  .type glColorMaterial,#function
+  glColorMaterial:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3195,3201 ----
+  .globl glColorMaterial
+  .type glColorMaterial,#function
+  glColorMaterial:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3216,3222 ****
+  .globl glCullFace
+  .type glCullFace,#function
+  glCullFace:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3216,3222 ----
+  .globl glCullFace
+  .type glCullFace,#function
+  glCullFace:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3237,3243 ****
+  .globl glFogf
+  .type glFogf,#function
+  glFogf:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3237,3243 ----
+  .globl glFogf
+  .type glFogf,#function
+  glFogf:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3258,3264 ****
+  .globl glFogfv
+  .type glFogfv,#function
+  glFogfv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3258,3264 ----
+  .globl glFogfv
+  .type glFogfv,#function
+  glFogfv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3279,3285 ****
+  .globl glFogi
+  .type glFogi,#function
+  glFogi:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3279,3285 ----
+  .globl glFogi
+  .type glFogi,#function
+  glFogi:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3300,3306 ****
+  .globl glFogiv
+  .type glFogiv,#function
+  glFogiv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3300,3306 ----
+  .globl glFogiv
+  .type glFogiv,#function
+  glFogiv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3321,3327 ****
+  .globl glFrontFace
+  .type glFrontFace,#function
+  glFrontFace:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3321,3327 ----
+  .globl glFrontFace
+  .type glFrontFace,#function
+  glFrontFace:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3342,3348 ****
+  .globl glHint
+  .type glHint,#function
+  glHint:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3342,3348 ----
+  .globl glHint
+  .type glHint,#function
+  glHint:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3363,3369 ****
+  .globl glLightf
+  .type glLightf,#function
+  glLightf:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3363,3369 ----
+  .globl glLightf
+  .type glLightf,#function
+  glLightf:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3384,3390 ****
+  .globl glLightfv
+  .type glLightfv,#function
+  glLightfv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3384,3390 ----
+  .globl glLightfv
+  .type glLightfv,#function
+  glLightfv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3405,3411 ****
+  .globl glLighti
+  .type glLighti,#function
+  glLighti:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3405,3411 ----
+  .globl glLighti
+  .type glLighti,#function
+  glLighti:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3426,3432 ****
+  .globl glLightiv
+  .type glLightiv,#function
+  glLightiv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3426,3432 ----
+  .globl glLightiv
+  .type glLightiv,#function
+  glLightiv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3447,3453 ****
+  .globl glLightModelf
+  .type glLightModelf,#function
+  glLightModelf:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3447,3453 ----
+  .globl glLightModelf
+  .type glLightModelf,#function
+  glLightModelf:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3468,3474 ****
+  .globl glLightModelfv
+  .type glLightModelfv,#function
+  glLightModelfv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3468,3474 ----
+  .globl glLightModelfv
+  .type glLightModelfv,#function
+  glLightModelfv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3489,3495 ****
+  .globl glLightModeli
+  .type glLightModeli,#function
+  glLightModeli:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3489,3495 ----
+  .globl glLightModeli
+  .type glLightModeli,#function
+  glLightModeli:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3510,3516 ****
+  .globl glLightModeliv
+  .type glLightModeliv,#function
+  glLightModeliv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3510,3516 ----
+  .globl glLightModeliv
+  .type glLightModeliv,#function
+  glLightModeliv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3531,3537 ****
+  .globl glLineStipple
+  .type glLineStipple,#function
+  glLineStipple:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3531,3537 ----
+  .globl glLineStipple
+  .type glLineStipple,#function
+  glLineStipple:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3552,3558 ****
+  .globl glLineWidth
+  .type glLineWidth,#function
+  glLineWidth:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3552,3558 ----
+  .globl glLineWidth
+  .type glLineWidth,#function
+  glLineWidth:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3573,3579 ****
+  .globl glMaterialf
+  .type glMaterialf,#function
+  glMaterialf:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3573,3579 ----
+  .globl glMaterialf
+  .type glMaterialf,#function
+  glMaterialf:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3594,3600 ****
+  .globl glMaterialfv
+  .type glMaterialfv,#function
+  glMaterialfv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3594,3600 ----
+  .globl glMaterialfv
+  .type glMaterialfv,#function
+  glMaterialfv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3615,3621 ****
+  .globl glMateriali
+  .type glMateriali,#function
+  glMateriali:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3615,3621 ----
+  .globl glMateriali
+  .type glMateriali,#function
+  glMateriali:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3636,3642 ****
+  .globl glMaterialiv
+  .type glMaterialiv,#function
+  glMaterialiv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3636,3642 ----
+  .globl glMaterialiv
+  .type glMaterialiv,#function
+  glMaterialiv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3657,3663 ****
+  .globl glPointSize
+  .type glPointSize,#function
+  glPointSize:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3657,3663 ----
+  .globl glPointSize
+  .type glPointSize,#function
+  glPointSize:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3678,3684 ****
+  .globl glPolygonMode
+  .type glPolygonMode,#function
+  glPolygonMode:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3678,3684 ----
+  .globl glPolygonMode
+  .type glPolygonMode,#function
+  glPolygonMode:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3699,3705 ****
+  .globl glPolygonStipple
+  .type glPolygonStipple,#function
+  glPolygonStipple:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3699,3705 ----
+  .globl glPolygonStipple
+  .type glPolygonStipple,#function
+  glPolygonStipple:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3720,3726 ****
+  .globl glScissor
+  .type glScissor,#function
+  glScissor:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3720,3726 ----
+  .globl glScissor
+  .type glScissor,#function
+  glScissor:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3741,3747 ****
+  .globl glShadeModel
+  .type glShadeModel,#function
+  glShadeModel:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3741,3747 ----
+  .globl glShadeModel
+  .type glShadeModel,#function
+  glShadeModel:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3762,3768 ****
+  .globl glTexParameterf
+  .type glTexParameterf,#function
+  glTexParameterf:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3762,3768 ----
+  .globl glTexParameterf
+  .type glTexParameterf,#function
+  glTexParameterf:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3783,3789 ****
+  .globl glTexParameterfv
+  .type glTexParameterfv,#function
+  glTexParameterfv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3783,3789 ----
+  .globl glTexParameterfv
+  .type glTexParameterfv,#function
+  glTexParameterfv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3804,3810 ****
+  .globl glTexParameteri
+  .type glTexParameteri,#function
+  glTexParameteri:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3804,3810 ----
+  .globl glTexParameteri
+  .type glTexParameteri,#function
+  glTexParameteri:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3825,3831 ****
+  .globl glTexParameteriv
+  .type glTexParameteriv,#function
+  glTexParameteriv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3825,3831 ----
+  .globl glTexParameteriv
+  .type glTexParameteriv,#function
+  glTexParameteriv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3846,3852 ****
+  .globl glTexImage1D
+  .type glTexImage1D,#function
+  glTexImage1D:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3846,3852 ----
+  .globl glTexImage1D
+  .type glTexImage1D,#function
+  glTexImage1D:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3867,3873 ****
+  .globl glTexImage2D
+  .type glTexImage2D,#function
+  glTexImage2D:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3867,3873 ----
+  .globl glTexImage2D
+  .type glTexImage2D,#function
+  glTexImage2D:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3888,3894 ****
+  .globl glTexEnvf
+  .type glTexEnvf,#function
+  glTexEnvf:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3888,3894 ----
+  .globl glTexEnvf
+  .type glTexEnvf,#function
+  glTexEnvf:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3909,3915 ****
+  .globl glTexEnvfv
+  .type glTexEnvfv,#function
+  glTexEnvfv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3909,3915 ----
+  .globl glTexEnvfv
+  .type glTexEnvfv,#function
+  glTexEnvfv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3930,3936 ****
+  .globl glTexEnvi
+  .type glTexEnvi,#function
+  glTexEnvi:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3930,3936 ----
+  .globl glTexEnvi
+  .type glTexEnvi,#function
+  glTexEnvi:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3951,3957 ****
+  .globl glTexEnviv
+  .type glTexEnviv,#function
+  glTexEnviv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3951,3957 ----
+  .globl glTexEnviv
+  .type glTexEnviv,#function
+  glTexEnviv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3972,3978 ****
+  .globl glTexGend
+  .type glTexGend,#function
+  glTexGend:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3972,3978 ----
+  .globl glTexGend
+  .type glTexGend,#function
+  glTexGend:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 3993,3999 ****
+  .globl glTexGendv
+  .type glTexGendv,#function
+  glTexGendv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 3993,3999 ----
+  .globl glTexGendv
+  .type glTexGendv,#function
+  glTexGendv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4014,4020 ****
+  .globl glTexGenf
+  .type glTexGenf,#function
+  glTexGenf:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4014,4020 ----
+  .globl glTexGenf
+  .type glTexGenf,#function
+  glTexGenf:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4035,4041 ****
+  .globl glTexGenfv
+  .type glTexGenfv,#function
+  glTexGenfv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4035,4041 ----
+  .globl glTexGenfv
+  .type glTexGenfv,#function
+  glTexGenfv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4056,4062 ****
+  .globl glTexGeni
+  .type glTexGeni,#function
+  glTexGeni:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4056,4062 ----
+  .globl glTexGeni
+  .type glTexGeni,#function
+  glTexGeni:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4077,4083 ****
+  .globl glTexGeniv
+  .type glTexGeniv,#function
+  glTexGeniv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4077,4083 ----
+  .globl glTexGeniv
+  .type glTexGeniv,#function
+  glTexGeniv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4098,4104 ****
+  .globl glFeedbackBuffer
+  .type glFeedbackBuffer,#function
+  glFeedbackBuffer:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4098,4104 ----
+  .globl glFeedbackBuffer
+  .type glFeedbackBuffer,#function
+  glFeedbackBuffer:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4119,4125 ****
+  .globl glSelectBuffer
+  .type glSelectBuffer,#function
+  glSelectBuffer:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4119,4125 ----
+  .globl glSelectBuffer
+  .type glSelectBuffer,#function
+  glSelectBuffer:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4140,4146 ****
+  .globl glRenderMode
+  .type glRenderMode,#function
+  glRenderMode:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4140,4146 ----
+  .globl glRenderMode
+  .type glRenderMode,#function
+  glRenderMode:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4161,4167 ****
+  .globl glInitNames
+  .type glInitNames,#function
+  glInitNames:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4161,4167 ----
+  .globl glInitNames
+  .type glInitNames,#function
+  glInitNames:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4182,4188 ****
+  .globl glLoadName
+  .type glLoadName,#function
+  glLoadName:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4182,4188 ----
+  .globl glLoadName
+  .type glLoadName,#function
+  glLoadName:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4203,4209 ****
+  .globl glPassThrough
+  .type glPassThrough,#function
+  glPassThrough:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4203,4209 ----
+  .globl glPassThrough
+  .type glPassThrough,#function
+  glPassThrough:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4224,4230 ****
+  .globl glPopName
+  .type glPopName,#function
+  glPopName:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4224,4230 ----
+  .globl glPopName
+  .type glPopName,#function
+  glPopName:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4245,4251 ****
+  .globl glPushName
+  .type glPushName,#function
+  glPushName:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4245,4251 ----
+  .globl glPushName
+  .type glPushName,#function
+  glPushName:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4266,4272 ****
+  .globl glDrawBuffer
+  .type glDrawBuffer,#function
+  glDrawBuffer:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4266,4272 ----
+  .globl glDrawBuffer
+  .type glDrawBuffer,#function
+  glDrawBuffer:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4287,4293 ****
+  .globl glClear
+  .type glClear,#function
+  glClear:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4287,4293 ----
+  .globl glClear
+  .type glClear,#function
+  glClear:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4308,4314 ****
+  .globl glClearAccum
+  .type glClearAccum,#function
+  glClearAccum:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4308,4314 ----
+  .globl glClearAccum
+  .type glClearAccum,#function
+  glClearAccum:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4329,4335 ****
+  .globl glClearIndex
+  .type glClearIndex,#function
+  glClearIndex:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4329,4335 ----
+  .globl glClearIndex
+  .type glClearIndex,#function
+  glClearIndex:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4350,4356 ****
+  .globl glClearColor
+  .type glClearColor,#function
+  glClearColor:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4350,4356 ----
+  .globl glClearColor
+  .type glClearColor,#function
+  glClearColor:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4371,4377 ****
+  .globl glClearStencil
+  .type glClearStencil,#function
+  glClearStencil:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4371,4377 ----
+  .globl glClearStencil
+  .type glClearStencil,#function
+  glClearStencil:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4392,4398 ****
+  .globl glClearDepth
+  .type glClearDepth,#function
+  glClearDepth:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4392,4398 ----
+  .globl glClearDepth
+  .type glClearDepth,#function
+  glClearDepth:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4413,4419 ****
+  .globl glStencilMask
+  .type glStencilMask,#function
+  glStencilMask:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4413,4419 ----
+  .globl glStencilMask
+  .type glStencilMask,#function
+  glStencilMask:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4434,4440 ****
+  .globl glColorMask
+  .type glColorMask,#function
+  glColorMask:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4434,4440 ----
+  .globl glColorMask
+  .type glColorMask,#function
+  glColorMask:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4455,4461 ****
+  .globl glDepthMask
+  .type glDepthMask,#function
+  glDepthMask:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4455,4461 ----
+  .globl glDepthMask
+  .type glDepthMask,#function
+  glDepthMask:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4476,4482 ****
+  .globl glIndexMask
+  .type glIndexMask,#function
+  glIndexMask:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4476,4482 ----
+  .globl glIndexMask
+  .type glIndexMask,#function
+  glIndexMask:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4497,4503 ****
+  .globl glAccum
+  .type glAccum,#function
+  glAccum:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4497,4503 ----
+  .globl glAccum
+  .type glAccum,#function
+  glAccum:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4518,4524 ****
+  .globl glDisable
+  .type glDisable,#function
+  glDisable:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4518,4524 ----
+  .globl glDisable
+  .type glDisable,#function
+  glDisable:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4539,4545 ****
+  .globl glEnable
+  .type glEnable,#function
+  glEnable:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4539,4545 ----
+  .globl glEnable
+  .type glEnable,#function
+  glEnable:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4560,4566 ****
+  .globl glFinish
+  .type glFinish,#function
+  glFinish:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4560,4566 ----
+  .globl glFinish
+  .type glFinish,#function
+  glFinish:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4581,4587 ****
+  .globl glFlush
+  .type glFlush,#function
+  glFlush:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4581,4587 ----
+  .globl glFlush
+  .type glFlush,#function
+  glFlush:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4602,4608 ****
+  .globl glPopAttrib
+  .type glPopAttrib,#function
+  glPopAttrib:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4602,4608 ----
+  .globl glPopAttrib
+  .type glPopAttrib,#function
+  glPopAttrib:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4623,4629 ****
+  .globl glPushAttrib
+  .type glPushAttrib,#function
+  glPushAttrib:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4623,4629 ----
+  .globl glPushAttrib
+  .type glPushAttrib,#function
+  glPushAttrib:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4644,4650 ****
+  .globl glMap1d
+  .type glMap1d,#function
+  glMap1d:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4644,4650 ----
+  .globl glMap1d
+  .type glMap1d,#function
+  glMap1d:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4665,4671 ****
+  .globl glMap1f
+  .type glMap1f,#function
+  glMap1f:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4665,4671 ----
+  .globl glMap1f
+  .type glMap1f,#function
+  glMap1f:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4686,4692 ****
+  .globl glMap2d
+  .type glMap2d,#function
+  glMap2d:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4686,4692 ----
+  .globl glMap2d
+  .type glMap2d,#function
+  glMap2d:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4707,4713 ****
+  .globl glMap2f
+  .type glMap2f,#function
+  glMap2f:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4707,4713 ----
+  .globl glMap2f
+  .type glMap2f,#function
+  glMap2f:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4728,4734 ****
+  .globl glMapGrid1d
+  .type glMapGrid1d,#function
+  glMapGrid1d:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4728,4734 ----
+  .globl glMapGrid1d
+  .type glMapGrid1d,#function
+  glMapGrid1d:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4749,4755 ****
+  .globl glMapGrid1f
+  .type glMapGrid1f,#function
+  glMapGrid1f:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4749,4755 ----
+  .globl glMapGrid1f
+  .type glMapGrid1f,#function
+  glMapGrid1f:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4770,4776 ****
+  .globl glMapGrid2d
+  .type glMapGrid2d,#function
+  glMapGrid2d:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4770,4776 ----
+  .globl glMapGrid2d
+  .type glMapGrid2d,#function
+  glMapGrid2d:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4791,4797 ****
+  .globl glMapGrid2f
+  .type glMapGrid2f,#function
+  glMapGrid2f:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4791,4797 ----
+  .globl glMapGrid2f
+  .type glMapGrid2f,#function
+  glMapGrid2f:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4812,4818 ****
+  .globl glEvalCoord1d
+  .type glEvalCoord1d,#function
+  glEvalCoord1d:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4812,4818 ----
+  .globl glEvalCoord1d
+  .type glEvalCoord1d,#function
+  glEvalCoord1d:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4833,4839 ****
+  .globl glEvalCoord1dv
+  .type glEvalCoord1dv,#function
+  glEvalCoord1dv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4833,4839 ----
+  .globl glEvalCoord1dv
+  .type glEvalCoord1dv,#function
+  glEvalCoord1dv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4854,4860 ****
+  .globl glEvalCoord1f
+  .type glEvalCoord1f,#function
+  glEvalCoord1f:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4854,4860 ----
+  .globl glEvalCoord1f
+  .type glEvalCoord1f,#function
+  glEvalCoord1f:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4875,4881 ****
+  .globl glEvalCoord1fv
+  .type glEvalCoord1fv,#function
+  glEvalCoord1fv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4875,4881 ----
+  .globl glEvalCoord1fv
+  .type glEvalCoord1fv,#function
+  glEvalCoord1fv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4896,4902 ****
+  .globl glEvalCoord2d
+  .type glEvalCoord2d,#function
+  glEvalCoord2d:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4896,4902 ----
+  .globl glEvalCoord2d
+  .type glEvalCoord2d,#function
+  glEvalCoord2d:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4917,4923 ****
+  .globl glEvalCoord2dv
+  .type glEvalCoord2dv,#function
+  glEvalCoord2dv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4917,4923 ----
+  .globl glEvalCoord2dv
+  .type glEvalCoord2dv,#function
+  glEvalCoord2dv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4938,4944 ****
+  .globl glEvalCoord2f
+  .type glEvalCoord2f,#function
+  glEvalCoord2f:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4938,4944 ----
+  .globl glEvalCoord2f
+  .type glEvalCoord2f,#function
+  glEvalCoord2f:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4959,4965 ****
+  .globl glEvalCoord2fv
+  .type glEvalCoord2fv,#function
+  glEvalCoord2fv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4959,4965 ----
+  .globl glEvalCoord2fv
+  .type glEvalCoord2fv,#function
+  glEvalCoord2fv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 4980,4986 ****
+  .globl glEvalMesh1
+  .type glEvalMesh1,#function
+  glEvalMesh1:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 4980,4986 ----
+  .globl glEvalMesh1
+  .type glEvalMesh1,#function
+  glEvalMesh1:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5001,5007 ****
+  .globl glEvalPoint1
+  .type glEvalPoint1,#function
+  glEvalPoint1:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5001,5007 ----
+  .globl glEvalPoint1
+  .type glEvalPoint1,#function
+  glEvalPoint1:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5022,5028 ****
+  .globl glEvalMesh2
+  .type glEvalMesh2,#function
+  glEvalMesh2:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5022,5028 ----
+  .globl glEvalMesh2
+  .type glEvalMesh2,#function
+  glEvalMesh2:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5043,5049 ****
+  .globl glEvalPoint2
+  .type glEvalPoint2,#function
+  glEvalPoint2:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5043,5049 ----
+  .globl glEvalPoint2
+  .type glEvalPoint2,#function
+  glEvalPoint2:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5064,5070 ****
+  .globl glAlphaFunc
+  .type glAlphaFunc,#function
+  glAlphaFunc:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5064,5070 ----
+  .globl glAlphaFunc
+  .type glAlphaFunc,#function
+  glAlphaFunc:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5085,5091 ****
+  .globl glBlendFunc
+  .type glBlendFunc,#function
+  glBlendFunc:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5085,5091 ----
+  .globl glBlendFunc
+  .type glBlendFunc,#function
+  glBlendFunc:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5106,5112 ****
+  .globl glLogicOp
+  .type glLogicOp,#function
+  glLogicOp:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5106,5112 ----
+  .globl glLogicOp
+  .type glLogicOp,#function
+  glLogicOp:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5127,5133 ****
+  .globl glStencilFunc
+  .type glStencilFunc,#function
+  glStencilFunc:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5127,5133 ----
+  .globl glStencilFunc
+  .type glStencilFunc,#function
+  glStencilFunc:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5148,5154 ****
+  .globl glStencilOp
+  .type glStencilOp,#function
+  glStencilOp:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5148,5154 ----
+  .globl glStencilOp
+  .type glStencilOp,#function
+  glStencilOp:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5169,5175 ****
+  .globl glDepthFunc
+  .type glDepthFunc,#function
+  glDepthFunc:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5169,5175 ----
+  .globl glDepthFunc
+  .type glDepthFunc,#function
+  glDepthFunc:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5190,5196 ****
+  .globl glPixelZoom
+  .type glPixelZoom,#function
+  glPixelZoom:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5190,5196 ----
+  .globl glPixelZoom
+  .type glPixelZoom,#function
+  glPixelZoom:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5211,5217 ****
+  .globl glPixelTransferf
+  .type glPixelTransferf,#function
+  glPixelTransferf:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5211,5217 ----
+  .globl glPixelTransferf
+  .type glPixelTransferf,#function
+  glPixelTransferf:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5232,5238 ****
+  .globl glPixelTransferi
+  .type glPixelTransferi,#function
+  glPixelTransferi:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5232,5238 ----
+  .globl glPixelTransferi
+  .type glPixelTransferi,#function
+  glPixelTransferi:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5253,5259 ****
+  .globl glPixelStoref
+  .type glPixelStoref,#function
+  glPixelStoref:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5253,5259 ----
+  .globl glPixelStoref
+  .type glPixelStoref,#function
+  glPixelStoref:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5274,5280 ****
+  .globl glPixelStorei
+  .type glPixelStorei,#function
+  glPixelStorei:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5274,5280 ----
+  .globl glPixelStorei
+  .type glPixelStorei,#function
+  glPixelStorei:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5295,5301 ****
+  .globl glPixelMapfv
+  .type glPixelMapfv,#function
+  glPixelMapfv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5295,5301 ----
+  .globl glPixelMapfv
+  .type glPixelMapfv,#function
+  glPixelMapfv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5316,5322 ****
+  .globl glPixelMapuiv
+  .type glPixelMapuiv,#function
+  glPixelMapuiv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5316,5322 ----
+  .globl glPixelMapuiv
+  .type glPixelMapuiv,#function
+  glPixelMapuiv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5337,5343 ****
+  .globl glPixelMapusv
+  .type glPixelMapusv,#function
+  glPixelMapusv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5337,5343 ----
+  .globl glPixelMapusv
+  .type glPixelMapusv,#function
+  glPixelMapusv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5358,5364 ****
+  .globl glReadBuffer
+  .type glReadBuffer,#function
+  glReadBuffer:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5358,5364 ----
+  .globl glReadBuffer
+  .type glReadBuffer,#function
+  glReadBuffer:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5379,5385 ****
+  .globl glCopyPixels
+  .type glCopyPixels,#function
+  glCopyPixels:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5379,5385 ----
+  .globl glCopyPixels
+  .type glCopyPixels,#function
+  glCopyPixels:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5400,5406 ****
+  .globl glReadPixels
+  .type glReadPixels,#function
+  glReadPixels:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5400,5406 ----
+  .globl glReadPixels
+  .type glReadPixels,#function
+  glReadPixels:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5421,5427 ****
+  .globl glDrawPixels
+  .type glDrawPixels,#function
+  glDrawPixels:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5421,5427 ----
+  .globl glDrawPixels
+  .type glDrawPixels,#function
+  glDrawPixels:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5442,5448 ****
+  .globl glGetBooleanv
+  .type glGetBooleanv,#function
+  glGetBooleanv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5442,5448 ----
+  .globl glGetBooleanv
+  .type glGetBooleanv,#function
+  glGetBooleanv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5463,5469 ****
+  .globl glGetClipPlane
+  .type glGetClipPlane,#function
+  glGetClipPlane:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5463,5469 ----
+  .globl glGetClipPlane
+  .type glGetClipPlane,#function
+  glGetClipPlane:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5484,5490 ****
+  .globl glGetDoublev
+  .type glGetDoublev,#function
+  glGetDoublev:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5484,5490 ----
+  .globl glGetDoublev
+  .type glGetDoublev,#function
+  glGetDoublev:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5505,5511 ****
+  .globl glGetError
+  .type glGetError,#function
+  glGetError:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5505,5511 ----
+  .globl glGetError
+  .type glGetError,#function
+  glGetError:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5526,5532 ****
+  .globl glGetFloatv
+  .type glGetFloatv,#function
+  glGetFloatv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5526,5532 ----
+  .globl glGetFloatv
+  .type glGetFloatv,#function
+  glGetFloatv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5547,5553 ****
+  .globl glGetIntegerv
+  .type glGetIntegerv,#function
+  glGetIntegerv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5547,5553 ----
+  .globl glGetIntegerv
+  .type glGetIntegerv,#function
+  glGetIntegerv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5568,5574 ****
+  .globl glGetLightfv
+  .type glGetLightfv,#function
+  glGetLightfv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5568,5574 ----
+  .globl glGetLightfv
+  .type glGetLightfv,#function
+  glGetLightfv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5589,5595 ****
+  .globl glGetLightiv
+  .type glGetLightiv,#function
+  glGetLightiv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5589,5595 ----
+  .globl glGetLightiv
+  .type glGetLightiv,#function
+  glGetLightiv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5610,5616 ****
+  .globl glGetMapdv
+  .type glGetMapdv,#function
+  glGetMapdv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5610,5616 ----
+  .globl glGetMapdv
+  .type glGetMapdv,#function
+  glGetMapdv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5631,5637 ****
+  .globl glGetMapfv
+  .type glGetMapfv,#function
+  glGetMapfv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5631,5637 ----
+  .globl glGetMapfv
+  .type glGetMapfv,#function
+  glGetMapfv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5652,5658 ****
+  .globl glGetMapiv
+  .type glGetMapiv,#function
+  glGetMapiv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5652,5658 ----
+  .globl glGetMapiv
+  .type glGetMapiv,#function
+  glGetMapiv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5673,5679 ****
+  .globl glGetMaterialfv
+  .type glGetMaterialfv,#function
+  glGetMaterialfv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5673,5679 ----
+  .globl glGetMaterialfv
+  .type glGetMaterialfv,#function
+  glGetMaterialfv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5694,5700 ****
+  .globl glGetMaterialiv
+  .type glGetMaterialiv,#function
+  glGetMaterialiv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5694,5700 ----
+  .globl glGetMaterialiv
+  .type glGetMaterialiv,#function
+  glGetMaterialiv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5715,5721 ****
+  .globl glGetPixelMapfv
+  .type glGetPixelMapfv,#function
+  glGetPixelMapfv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5715,5721 ----
+  .globl glGetPixelMapfv
+  .type glGetPixelMapfv,#function
+  glGetPixelMapfv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5736,5742 ****
+  .globl glGetPixelMapuiv
+  .type glGetPixelMapuiv,#function
+  glGetPixelMapuiv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5736,5742 ----
+  .globl glGetPixelMapuiv
+  .type glGetPixelMapuiv,#function
+  glGetPixelMapuiv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5757,5763 ****
+  .globl glGetPixelMapusv
+  .type glGetPixelMapusv,#function
+  glGetPixelMapusv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5757,5763 ----
+  .globl glGetPixelMapusv
+  .type glGetPixelMapusv,#function
+  glGetPixelMapusv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5778,5784 ****
+  .globl glGetPolygonStipple
+  .type glGetPolygonStipple,#function
+  glGetPolygonStipple:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5778,5784 ----
+  .globl glGetPolygonStipple
+  .type glGetPolygonStipple,#function
+  glGetPolygonStipple:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5799,5805 ****
+  .globl glGetString
+  .type glGetString,#function
+  glGetString:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5799,5805 ----
+  .globl glGetString
+  .type glGetString,#function
+  glGetString:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5820,5826 ****
+  .globl glGetTexEnvfv
+  .type glGetTexEnvfv,#function
+  glGetTexEnvfv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5820,5826 ----
+  .globl glGetTexEnvfv
+  .type glGetTexEnvfv,#function
+  glGetTexEnvfv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5841,5847 ****
+  .globl glGetTexEnviv
+  .type glGetTexEnviv,#function
+  glGetTexEnviv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5841,5847 ----
+  .globl glGetTexEnviv
+  .type glGetTexEnviv,#function
+  glGetTexEnviv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5862,5868 ****
+  .globl glGetTexGendv
+  .type glGetTexGendv,#function
+  glGetTexGendv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5862,5868 ----
+  .globl glGetTexGendv
+  .type glGetTexGendv,#function
+  glGetTexGendv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5883,5889 ****
+  .globl glGetTexGenfv
+  .type glGetTexGenfv,#function
+  glGetTexGenfv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5883,5889 ----
+  .globl glGetTexGenfv
+  .type glGetTexGenfv,#function
+  glGetTexGenfv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5904,5910 ****
+  .globl glGetTexGeniv
+  .type glGetTexGeniv,#function
+  glGetTexGeniv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5904,5910 ----
+  .globl glGetTexGeniv
+  .type glGetTexGeniv,#function
+  glGetTexGeniv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5925,5931 ****
+  .globl glGetTexImage
+  .type glGetTexImage,#function
+  glGetTexImage:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5925,5931 ----
+  .globl glGetTexImage
+  .type glGetTexImage,#function
+  glGetTexImage:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5946,5952 ****
+  .globl glGetTexParameterfv
+  .type glGetTexParameterfv,#function
+  glGetTexParameterfv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5946,5952 ----
+  .globl glGetTexParameterfv
+  .type glGetTexParameterfv,#function
+  glGetTexParameterfv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5967,5973 ****
+  .globl glGetTexParameteriv
+  .type glGetTexParameteriv,#function
+  glGetTexParameteriv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5967,5973 ----
+  .globl glGetTexParameteriv
+  .type glGetTexParameteriv,#function
+  glGetTexParameteriv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 5988,5994 ****
+  .globl glGetTexLevelParameterfv
+  .type glGetTexLevelParameterfv,#function
+  glGetTexLevelParameterfv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 5988,5994 ----
+  .globl glGetTexLevelParameterfv
+  .type glGetTexLevelParameterfv,#function
+  glGetTexLevelParameterfv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6009,6015 ****
+  .globl glGetTexLevelParameteriv
+  .type glGetTexLevelParameteriv,#function
+  glGetTexLevelParameteriv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6009,6015 ----
+  .globl glGetTexLevelParameteriv
+  .type glGetTexLevelParameteriv,#function
+  glGetTexLevelParameteriv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6030,6036 ****
+  .globl glIsEnabled
+  .type glIsEnabled,#function
+  glIsEnabled:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6030,6036 ----
+  .globl glIsEnabled
+  .type glIsEnabled,#function
+  glIsEnabled:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6051,6057 ****
+  .globl glIsList
+  .type glIsList,#function
+  glIsList:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6051,6057 ----
+  .globl glIsList
+  .type glIsList,#function
+  glIsList:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6072,6078 ****
+  .globl glDepthRange
+  .type glDepthRange,#function
+  glDepthRange:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6072,6078 ----
+  .globl glDepthRange
+  .type glDepthRange,#function
+  glDepthRange:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6093,6099 ****
+  .globl glFrustum
+  .type glFrustum,#function
+  glFrustum:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6093,6099 ----
+  .globl glFrustum
+  .type glFrustum,#function
+  glFrustum:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6114,6120 ****
+  .globl glLoadIdentity
+  .type glLoadIdentity,#function
+  glLoadIdentity:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6114,6120 ----
+  .globl glLoadIdentity
+  .type glLoadIdentity,#function
+  glLoadIdentity:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6135,6141 ****
+  .globl glLoadMatrixf
+  .type glLoadMatrixf,#function
+  glLoadMatrixf:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6135,6141 ----
+  .globl glLoadMatrixf
+  .type glLoadMatrixf,#function
+  glLoadMatrixf:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6156,6162 ****
+  .globl glLoadMatrixd
+  .type glLoadMatrixd,#function
+  glLoadMatrixd:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6156,6162 ----
+  .globl glLoadMatrixd
+  .type glLoadMatrixd,#function
+  glLoadMatrixd:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6177,6183 ****
+  .globl glMatrixMode
+  .type glMatrixMode,#function
+  glMatrixMode:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6177,6183 ----
+  .globl glMatrixMode
+  .type glMatrixMode,#function
+  glMatrixMode:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6198,6204 ****
+  .globl glMultMatrixf
+  .type glMultMatrixf,#function
+  glMultMatrixf:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6198,6204 ----
+  .globl glMultMatrixf
+  .type glMultMatrixf,#function
+  glMultMatrixf:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6219,6225 ****
+  .globl glMultMatrixd
+  .type glMultMatrixd,#function
+  glMultMatrixd:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6219,6225 ----
+  .globl glMultMatrixd
+  .type glMultMatrixd,#function
+  glMultMatrixd:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6240,6246 ****
+  .globl glOrtho
+  .type glOrtho,#function
+  glOrtho:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6240,6246 ----
+  .globl glOrtho
+  .type glOrtho,#function
+  glOrtho:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6261,6267 ****
+  .globl glPopMatrix
+  .type glPopMatrix,#function
+  glPopMatrix:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6261,6267 ----
+  .globl glPopMatrix
+  .type glPopMatrix,#function
+  glPopMatrix:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6282,6288 ****
+  .globl glPushMatrix
+  .type glPushMatrix,#function
+  glPushMatrix:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6282,6288 ----
+  .globl glPushMatrix
+  .type glPushMatrix,#function
+  glPushMatrix:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6303,6309 ****
+  .globl glRotated
+  .type glRotated,#function
+  glRotated:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6303,6309 ----
+  .globl glRotated
+  .type glRotated,#function
+  glRotated:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6324,6330 ****
+  .globl glRotatef
+  .type glRotatef,#function
+  glRotatef:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6324,6330 ----
+  .globl glRotatef
+  .type glRotatef,#function
+  glRotatef:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6345,6351 ****
+  .globl glScaled
+  .type glScaled,#function
+  glScaled:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6345,6351 ----
+  .globl glScaled
+  .type glScaled,#function
+  glScaled:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6366,6372 ****
+  .globl glScalef
+  .type glScalef,#function
+  glScalef:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6366,6372 ----
+  .globl glScalef
+  .type glScalef,#function
+  glScalef:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6387,6393 ****
+  .globl glTranslated
+  .type glTranslated,#function
+  glTranslated:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6387,6393 ----
+  .globl glTranslated
+  .type glTranslated,#function
+  glTranslated:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6408,6414 ****
+  .globl glTranslatef
+  .type glTranslatef,#function
+  glTranslatef:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6408,6414 ----
+  .globl glTranslatef
+  .type glTranslatef,#function
+  glTranslatef:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6429,6435 ****
+  .globl glViewport
+  .type glViewport,#function
+  glViewport:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6429,6435 ----
+  .globl glViewport
+  .type glViewport,#function
+  glViewport:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6450,6456 ****
+  .globl glArrayElement
+  .type glArrayElement,#function
+  glArrayElement:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6450,6456 ----
+  .globl glArrayElement
+  .type glArrayElement,#function
+  glArrayElement:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6471,6477 ****
+  .globl glColorPointer
+  .type glColorPointer,#function
+  glColorPointer:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6471,6477 ----
+  .globl glColorPointer
+  .type glColorPointer,#function
+  glColorPointer:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6492,6498 ****
+  .globl glDisableClientState
+  .type glDisableClientState,#function
+  glDisableClientState:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6492,6498 ----
+  .globl glDisableClientState
+  .type glDisableClientState,#function
+  glDisableClientState:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6513,6519 ****
+  .globl glDrawArrays
+  .type glDrawArrays,#function
+  glDrawArrays:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6513,6519 ----
+  .globl glDrawArrays
+  .type glDrawArrays,#function
+  glDrawArrays:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6534,6540 ****
+  .globl glDrawElements
+  .type glDrawElements,#function
+  glDrawElements:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6534,6540 ----
+  .globl glDrawElements
+  .type glDrawElements,#function
+  glDrawElements:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6555,6561 ****
+  .globl glEdgeFlagPointer
+  .type glEdgeFlagPointer,#function
+  glEdgeFlagPointer:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6555,6561 ----
+  .globl glEdgeFlagPointer
+  .type glEdgeFlagPointer,#function
+  glEdgeFlagPointer:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6576,6582 ****
+  .globl glEnableClientState
+  .type glEnableClientState,#function
+  glEnableClientState:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6576,6582 ----
+  .globl glEnableClientState
+  .type glEnableClientState,#function
+  glEnableClientState:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6597,6603 ****
+  .globl glGetPointerv
+  .type glGetPointerv,#function
+  glGetPointerv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6597,6603 ----
+  .globl glGetPointerv
+  .type glGetPointerv,#function
+  glGetPointerv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6618,6624 ****
+  .globl glIndexPointer
+  .type glIndexPointer,#function
+  glIndexPointer:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6618,6624 ----
+  .globl glIndexPointer
+  .type glIndexPointer,#function
+  glIndexPointer:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6639,6645 ****
+  .globl glInterleavedArrays
+  .type glInterleavedArrays,#function
+  glInterleavedArrays:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6639,6645 ----
+  .globl glInterleavedArrays
+  .type glInterleavedArrays,#function
+  glInterleavedArrays:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6660,6666 ****
+  .globl glNormalPointer
+  .type glNormalPointer,#function
+  glNormalPointer:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6660,6666 ----
+  .globl glNormalPointer
+  .type glNormalPointer,#function
+  glNormalPointer:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6681,6687 ****
+  .globl glTexCoordPointer
+  .type glTexCoordPointer,#function
+  glTexCoordPointer:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6681,6687 ----
+  .globl glTexCoordPointer
+  .type glTexCoordPointer,#function
+  glTexCoordPointer:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6702,6708 ****
+  .globl glVertexPointer
+  .type glVertexPointer,#function
+  glVertexPointer:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6702,6708 ----
+  .globl glVertexPointer
+  .type glVertexPointer,#function
+  glVertexPointer:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6723,6729 ****
+  .globl glPolygonOffset
+  .type glPolygonOffset,#function
+  glPolygonOffset:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6723,6729 ----
+  .globl glPolygonOffset
+  .type glPolygonOffset,#function
+  glPolygonOffset:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6744,6750 ****
+  .globl glCopyTexImage1D
+  .type glCopyTexImage1D,#function
+  glCopyTexImage1D:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6744,6750 ----
+  .globl glCopyTexImage1D
+  .type glCopyTexImage1D,#function
+  glCopyTexImage1D:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6765,6771 ****
+  .globl glCopyTexImage2D
+  .type glCopyTexImage2D,#function
+  glCopyTexImage2D:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6765,6771 ----
+  .globl glCopyTexImage2D
+  .type glCopyTexImage2D,#function
+  glCopyTexImage2D:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6786,6792 ****
+  .globl glCopyTexSubImage1D
+  .type glCopyTexSubImage1D,#function
+  glCopyTexSubImage1D:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6786,6792 ----
+  .globl glCopyTexSubImage1D
+  .type glCopyTexSubImage1D,#function
+  glCopyTexSubImage1D:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6807,6813 ****
+  .globl glCopyTexSubImage2D
+  .type glCopyTexSubImage2D,#function
+  glCopyTexSubImage2D:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6807,6813 ----
+  .globl glCopyTexSubImage2D
+  .type glCopyTexSubImage2D,#function
+  glCopyTexSubImage2D:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6828,6834 ****
+  .globl glTexSubImage1D
+  .type glTexSubImage1D,#function
+  glTexSubImage1D:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6828,6834 ----
+  .globl glTexSubImage1D
+  .type glTexSubImage1D,#function
+  glTexSubImage1D:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6849,6855 ****
+  .globl glTexSubImage2D
+  .type glTexSubImage2D,#function
+  glTexSubImage2D:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6849,6855 ----
+  .globl glTexSubImage2D
+  .type glTexSubImage2D,#function
+  glTexSubImage2D:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6870,6876 ****
+  .globl glAreTexturesResident
+  .type glAreTexturesResident,#function
+  glAreTexturesResident:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6870,6876 ----
+  .globl glAreTexturesResident
+  .type glAreTexturesResident,#function
+  glAreTexturesResident:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6891,6897 ****
+  .globl glBindTexture
+  .type glBindTexture,#function
+  glBindTexture:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6891,6897 ----
+  .globl glBindTexture
+  .type glBindTexture,#function
+  glBindTexture:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6912,6918 ****
+  .globl glDeleteTextures
+  .type glDeleteTextures,#function
+  glDeleteTextures:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6912,6918 ----
+  .globl glDeleteTextures
+  .type glDeleteTextures,#function
+  glDeleteTextures:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6933,6939 ****
+  .globl glGenTextures
+  .type glGenTextures,#function
+  glGenTextures:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6933,6939 ----
+  .globl glGenTextures
+  .type glGenTextures,#function
+  glGenTextures:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6954,6960 ****
+  .globl glIsTexture
+  .type glIsTexture,#function
+  glIsTexture:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6954,6960 ----
+  .globl glIsTexture
+  .type glIsTexture,#function
+  glIsTexture:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6975,6981 ****
+  .globl glPrioritizeTextures
+  .type glPrioritizeTextures,#function
+  glPrioritizeTextures:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6975,6981 ----
+  .globl glPrioritizeTextures
+  .type glPrioritizeTextures,#function
+  glPrioritizeTextures:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 6996,7002 ****
+  .globl glIndexub
+  .type glIndexub,#function
+  glIndexub:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 6996,7002 ----
+  .globl glIndexub
+  .type glIndexub,#function
+  glIndexub:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7017,7023 ****
+  .globl glIndexubv
+  .type glIndexubv,#function
+  glIndexubv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7017,7023 ----
+  .globl glIndexubv
+  .type glIndexubv,#function
+  glIndexubv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7038,7044 ****
+  .globl glPopClientAttrib
+  .type glPopClientAttrib,#function
+  glPopClientAttrib:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7038,7044 ----
+  .globl glPopClientAttrib
+  .type glPopClientAttrib,#function
+  glPopClientAttrib:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7059,7065 ****
+  .globl glPushClientAttrib
+  .type glPushClientAttrib,#function
+  glPushClientAttrib:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7059,7065 ----
+  .globl glPushClientAttrib
+  .type glPushClientAttrib,#function
+  glPushClientAttrib:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7080,7086 ****
+  .globl glBlendColor
+  .type glBlendColor,#function
+  glBlendColor:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7080,7086 ----
+  .globl glBlendColor
+  .type glBlendColor,#function
+  glBlendColor:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7101,7107 ****
+  .globl glBlendEquation
+  .type glBlendEquation,#function
+  glBlendEquation:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7101,7107 ----
+  .globl glBlendEquation
+  .type glBlendEquation,#function
+  glBlendEquation:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7122,7128 ****
+  .globl glDrawRangeElements
+  .type glDrawRangeElements,#function
+  glDrawRangeElements:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7122,7128 ----
+  .globl glDrawRangeElements
+  .type glDrawRangeElements,#function
+  glDrawRangeElements:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7143,7149 ****
+  .globl glColorTable
+  .type glColorTable,#function
+  glColorTable:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7143,7149 ----
+  .globl glColorTable
+  .type glColorTable,#function
+  glColorTable:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7164,7170 ****
+  .globl glColorTableParameterfv
+  .type glColorTableParameterfv,#function
+  glColorTableParameterfv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7164,7170 ----
+  .globl glColorTableParameterfv
+  .type glColorTableParameterfv,#function
+  glColorTableParameterfv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7185,7191 ****
+  .globl glColorTableParameteriv
+  .type glColorTableParameteriv,#function
+  glColorTableParameteriv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7185,7191 ----
+  .globl glColorTableParameteriv
+  .type glColorTableParameteriv,#function
+  glColorTableParameteriv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7206,7212 ****
+  .globl glCopyColorTable
+  .type glCopyColorTable,#function
+  glCopyColorTable:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7206,7212 ----
+  .globl glCopyColorTable
+  .type glCopyColorTable,#function
+  glCopyColorTable:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7227,7233 ****
+  .globl glGetColorTable
+  .type glGetColorTable,#function
+  glGetColorTable:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7227,7233 ----
+  .globl glGetColorTable
+  .type glGetColorTable,#function
+  glGetColorTable:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7248,7254 ****
+  .globl glGetColorTableParameterfv
+  .type glGetColorTableParameterfv,#function
+  glGetColorTableParameterfv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7248,7254 ----
+  .globl glGetColorTableParameterfv
+  .type glGetColorTableParameterfv,#function
+  glGetColorTableParameterfv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7269,7275 ****
+  .globl glGetColorTableParameteriv
+  .type glGetColorTableParameteriv,#function
+  glGetColorTableParameteriv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7269,7275 ----
+  .globl glGetColorTableParameteriv
+  .type glGetColorTableParameteriv,#function
+  glGetColorTableParameteriv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7290,7296 ****
+  .globl glColorSubTable
+  .type glColorSubTable,#function
+  glColorSubTable:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7290,7296 ----
+  .globl glColorSubTable
+  .type glColorSubTable,#function
+  glColorSubTable:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7311,7317 ****
+  .globl glCopyColorSubTable
+  .type glCopyColorSubTable,#function
+  glCopyColorSubTable:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7311,7317 ----
+  .globl glCopyColorSubTable
+  .type glCopyColorSubTable,#function
+  glCopyColorSubTable:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7332,7338 ****
+  .globl glConvolutionFilter1D
+  .type glConvolutionFilter1D,#function
+  glConvolutionFilter1D:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7332,7338 ----
+  .globl glConvolutionFilter1D
+  .type glConvolutionFilter1D,#function
+  glConvolutionFilter1D:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7353,7359 ****
+  .globl glConvolutionFilter2D
+  .type glConvolutionFilter2D,#function
+  glConvolutionFilter2D:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7353,7359 ----
+  .globl glConvolutionFilter2D
+  .type glConvolutionFilter2D,#function
+  glConvolutionFilter2D:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7374,7380 ****
+  .globl glConvolutionParameterf
+  .type glConvolutionParameterf,#function
+  glConvolutionParameterf:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7374,7380 ----
+  .globl glConvolutionParameterf
+  .type glConvolutionParameterf,#function
+  glConvolutionParameterf:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7395,7401 ****
+  .globl glConvolutionParameterfv
+  .type glConvolutionParameterfv,#function
+  glConvolutionParameterfv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7395,7401 ----
+  .globl glConvolutionParameterfv
+  .type glConvolutionParameterfv,#function
+  glConvolutionParameterfv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7416,7422 ****
+  .globl glConvolutionParameteri
+  .type glConvolutionParameteri,#function
+  glConvolutionParameteri:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7416,7422 ----
+  .globl glConvolutionParameteri
+  .type glConvolutionParameteri,#function
+  glConvolutionParameteri:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7437,7443 ****
+  .globl glConvolutionParameteriv
+  .type glConvolutionParameteriv,#function
+  glConvolutionParameteriv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7437,7443 ----
+  .globl glConvolutionParameteriv
+  .type glConvolutionParameteriv,#function
+  glConvolutionParameteriv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7458,7464 ****
+  .globl glCopyConvolutionFilter1D
+  .type glCopyConvolutionFilter1D,#function
+  glCopyConvolutionFilter1D:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7458,7464 ----
+  .globl glCopyConvolutionFilter1D
+  .type glCopyConvolutionFilter1D,#function
+  glCopyConvolutionFilter1D:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7479,7485 ****
+  .globl glCopyConvolutionFilter2D
+  .type glCopyConvolutionFilter2D,#function
+  glCopyConvolutionFilter2D:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7479,7485 ----
+  .globl glCopyConvolutionFilter2D
+  .type glCopyConvolutionFilter2D,#function
+  glCopyConvolutionFilter2D:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7500,7506 ****
+  .globl glGetConvolutionFilter
+  .type glGetConvolutionFilter,#function
+  glGetConvolutionFilter:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7500,7506 ----
+  .globl glGetConvolutionFilter
+  .type glGetConvolutionFilter,#function
+  glGetConvolutionFilter:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7521,7527 ****
+  .globl glGetConvolutionParameterfv
+  .type glGetConvolutionParameterfv,#function
+  glGetConvolutionParameterfv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7521,7527 ----
+  .globl glGetConvolutionParameterfv
+  .type glGetConvolutionParameterfv,#function
+  glGetConvolutionParameterfv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7542,7548 ****
+  .globl glGetConvolutionParameteriv
+  .type glGetConvolutionParameteriv,#function
+  glGetConvolutionParameteriv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7542,7548 ----
+  .globl glGetConvolutionParameteriv
+  .type glGetConvolutionParameteriv,#function
+  glGetConvolutionParameteriv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7563,7569 ****
+  .globl glGetSeparableFilter
+  .type glGetSeparableFilter,#function
+  glGetSeparableFilter:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7563,7569 ----
+  .globl glGetSeparableFilter
+  .type glGetSeparableFilter,#function
+  glGetSeparableFilter:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7584,7590 ****
+  .globl glSeparableFilter2D
+  .type glSeparableFilter2D,#function
+  glSeparableFilter2D:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7584,7590 ----
+  .globl glSeparableFilter2D
+  .type glSeparableFilter2D,#function
+  glSeparableFilter2D:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7605,7611 ****
+  .globl glGetHistogram
+  .type glGetHistogram,#function
+  glGetHistogram:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7605,7611 ----
+  .globl glGetHistogram
+  .type glGetHistogram,#function
+  glGetHistogram:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7626,7632 ****
+  .globl glGetHistogramParameterfv
+  .type glGetHistogramParameterfv,#function
+  glGetHistogramParameterfv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7626,7632 ----
+  .globl glGetHistogramParameterfv
+  .type glGetHistogramParameterfv,#function
+  glGetHistogramParameterfv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7647,7653 ****
+  .globl glGetHistogramParameteriv
+  .type glGetHistogramParameteriv,#function
+  glGetHistogramParameteriv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7647,7653 ----
+  .globl glGetHistogramParameteriv
+  .type glGetHistogramParameteriv,#function
+  glGetHistogramParameteriv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7668,7674 ****
+  .globl glGetMinmax
+  .type glGetMinmax,#function
+  glGetMinmax:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7668,7674 ----
+  .globl glGetMinmax
+  .type glGetMinmax,#function
+  glGetMinmax:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7689,7695 ****
+  .globl glGetMinmaxParameterfv
+  .type glGetMinmaxParameterfv,#function
+  glGetMinmaxParameterfv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7689,7695 ----
+  .globl glGetMinmaxParameterfv
+  .type glGetMinmaxParameterfv,#function
+  glGetMinmaxParameterfv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7710,7716 ****
+  .globl glGetMinmaxParameteriv
+  .type glGetMinmaxParameteriv,#function
+  glGetMinmaxParameteriv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7710,7716 ----
+  .globl glGetMinmaxParameteriv
+  .type glGetMinmaxParameteriv,#function
+  glGetMinmaxParameteriv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7731,7737 ****
+  .globl glHistogram
+  .type glHistogram,#function
+  glHistogram:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7731,7737 ----
+  .globl glHistogram
+  .type glHistogram,#function
+  glHistogram:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7752,7758 ****
+  .globl glMinmax
+  .type glMinmax,#function
+  glMinmax:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7752,7758 ----
+  .globl glMinmax
+  .type glMinmax,#function
+  glMinmax:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7773,7779 ****
+  .globl glResetHistogram
+  .type glResetHistogram,#function
+  glResetHistogram:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7773,7779 ----
+  .globl glResetHistogram
+  .type glResetHistogram,#function
+  glResetHistogram:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7794,7800 ****
+  .globl glResetMinmax
+  .type glResetMinmax,#function
+  glResetMinmax:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7794,7800 ----
+  .globl glResetMinmax
+  .type glResetMinmax,#function
+  glResetMinmax:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7815,7821 ****
+  .globl glTexImage3D
+  .type glTexImage3D,#function
+  glTexImage3D:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7815,7821 ----
+  .globl glTexImage3D
+  .type glTexImage3D,#function
+  glTexImage3D:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7836,7842 ****
+  .globl glTexSubImage3D
+  .type glTexSubImage3D,#function
+  glTexSubImage3D:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7836,7842 ----
+  .globl glTexSubImage3D
+  .type glTexSubImage3D,#function
+  glTexSubImage3D:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7857,7863 ****
+  .globl glCopyTexSubImage3D
+  .type glCopyTexSubImage3D,#function
+  glCopyTexSubImage3D:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7857,7863 ----
+  .globl glCopyTexSubImage3D
+  .type glCopyTexSubImage3D,#function
+  glCopyTexSubImage3D:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7878,7884 ****
+  .globl glActiveTextureARB
+  .type glActiveTextureARB,#function
+  glActiveTextureARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7878,7884 ----
+  .globl glActiveTextureARB
+  .type glActiveTextureARB,#function
+  glActiveTextureARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7899,7905 ****
+  .globl glClientActiveTextureARB
+  .type glClientActiveTextureARB,#function
+  glClientActiveTextureARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7899,7905 ----
+  .globl glClientActiveTextureARB
+  .type glClientActiveTextureARB,#function
+  glClientActiveTextureARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7920,7926 ****
+  .globl glMultiTexCoord1dARB
+  .type glMultiTexCoord1dARB,#function
+  glMultiTexCoord1dARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7920,7926 ----
+  .globl glMultiTexCoord1dARB
+  .type glMultiTexCoord1dARB,#function
+  glMultiTexCoord1dARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7941,7947 ****
+  .globl glMultiTexCoord1dvARB
+  .type glMultiTexCoord1dvARB,#function
+  glMultiTexCoord1dvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7941,7947 ----
+  .globl glMultiTexCoord1dvARB
+  .type glMultiTexCoord1dvARB,#function
+  glMultiTexCoord1dvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7962,7968 ****
+  .globl glMultiTexCoord1fARB
+  .type glMultiTexCoord1fARB,#function
+  glMultiTexCoord1fARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7962,7968 ----
+  .globl glMultiTexCoord1fARB
+  .type glMultiTexCoord1fARB,#function
+  glMultiTexCoord1fARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 7983,7989 ****
+  .globl glMultiTexCoord1fvARB
+  .type glMultiTexCoord1fvARB,#function
+  glMultiTexCoord1fvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 7983,7989 ----
+  .globl glMultiTexCoord1fvARB
+  .type glMultiTexCoord1fvARB,#function
+  glMultiTexCoord1fvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8004,8010 ****
+  .globl glMultiTexCoord1iARB
+  .type glMultiTexCoord1iARB,#function
+  glMultiTexCoord1iARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8004,8010 ----
+  .globl glMultiTexCoord1iARB
+  .type glMultiTexCoord1iARB,#function
+  glMultiTexCoord1iARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8025,8031 ****
+  .globl glMultiTexCoord1ivARB
+  .type glMultiTexCoord1ivARB,#function
+  glMultiTexCoord1ivARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8025,8031 ----
+  .globl glMultiTexCoord1ivARB
+  .type glMultiTexCoord1ivARB,#function
+  glMultiTexCoord1ivARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8046,8052 ****
+  .globl glMultiTexCoord1sARB
+  .type glMultiTexCoord1sARB,#function
+  glMultiTexCoord1sARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8046,8052 ----
+  .globl glMultiTexCoord1sARB
+  .type glMultiTexCoord1sARB,#function
+  glMultiTexCoord1sARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8067,8073 ****
+  .globl glMultiTexCoord1svARB
+  .type glMultiTexCoord1svARB,#function
+  glMultiTexCoord1svARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8067,8073 ----
+  .globl glMultiTexCoord1svARB
+  .type glMultiTexCoord1svARB,#function
+  glMultiTexCoord1svARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8088,8094 ****
+  .globl glMultiTexCoord2dARB
+  .type glMultiTexCoord2dARB,#function
+  glMultiTexCoord2dARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8088,8094 ----
+  .globl glMultiTexCoord2dARB
+  .type glMultiTexCoord2dARB,#function
+  glMultiTexCoord2dARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8109,8115 ****
+  .globl glMultiTexCoord2dvARB
+  .type glMultiTexCoord2dvARB,#function
+  glMultiTexCoord2dvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8109,8115 ----
+  .globl glMultiTexCoord2dvARB
+  .type glMultiTexCoord2dvARB,#function
+  glMultiTexCoord2dvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8130,8136 ****
+  .globl glMultiTexCoord2fARB
+  .type glMultiTexCoord2fARB,#function
+  glMultiTexCoord2fARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8130,8136 ----
+  .globl glMultiTexCoord2fARB
+  .type glMultiTexCoord2fARB,#function
+  glMultiTexCoord2fARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8151,8157 ****
+  .globl glMultiTexCoord2fvARB
+  .type glMultiTexCoord2fvARB,#function
+  glMultiTexCoord2fvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8151,8157 ----
+  .globl glMultiTexCoord2fvARB
+  .type glMultiTexCoord2fvARB,#function
+  glMultiTexCoord2fvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8172,8178 ****
+  .globl glMultiTexCoord2iARB
+  .type glMultiTexCoord2iARB,#function
+  glMultiTexCoord2iARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8172,8178 ----
+  .globl glMultiTexCoord2iARB
+  .type glMultiTexCoord2iARB,#function
+  glMultiTexCoord2iARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8193,8199 ****
+  .globl glMultiTexCoord2ivARB
+  .type glMultiTexCoord2ivARB,#function
+  glMultiTexCoord2ivARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8193,8199 ----
+  .globl glMultiTexCoord2ivARB
+  .type glMultiTexCoord2ivARB,#function
+  glMultiTexCoord2ivARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8214,8220 ****
+  .globl glMultiTexCoord2sARB
+  .type glMultiTexCoord2sARB,#function
+  glMultiTexCoord2sARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8214,8220 ----
+  .globl glMultiTexCoord2sARB
+  .type glMultiTexCoord2sARB,#function
+  glMultiTexCoord2sARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8235,8241 ****
+  .globl glMultiTexCoord2svARB
+  .type glMultiTexCoord2svARB,#function
+  glMultiTexCoord2svARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8235,8241 ----
+  .globl glMultiTexCoord2svARB
+  .type glMultiTexCoord2svARB,#function
+  glMultiTexCoord2svARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8256,8262 ****
+  .globl glMultiTexCoord3dARB
+  .type glMultiTexCoord3dARB,#function
+  glMultiTexCoord3dARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8256,8262 ----
+  .globl glMultiTexCoord3dARB
+  .type glMultiTexCoord3dARB,#function
+  glMultiTexCoord3dARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8277,8283 ****
+  .globl glMultiTexCoord3dvARB
+  .type glMultiTexCoord3dvARB,#function
+  glMultiTexCoord3dvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8277,8283 ----
+  .globl glMultiTexCoord3dvARB
+  .type glMultiTexCoord3dvARB,#function
+  glMultiTexCoord3dvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8298,8304 ****
+  .globl glMultiTexCoord3fARB
+  .type glMultiTexCoord3fARB,#function
+  glMultiTexCoord3fARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8298,8304 ----
+  .globl glMultiTexCoord3fARB
+  .type glMultiTexCoord3fARB,#function
+  glMultiTexCoord3fARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8319,8325 ****
+  .globl glMultiTexCoord3fvARB
+  .type glMultiTexCoord3fvARB,#function
+  glMultiTexCoord3fvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8319,8325 ----
+  .globl glMultiTexCoord3fvARB
+  .type glMultiTexCoord3fvARB,#function
+  glMultiTexCoord3fvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8340,8346 ****
+  .globl glMultiTexCoord3iARB
+  .type glMultiTexCoord3iARB,#function
+  glMultiTexCoord3iARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8340,8346 ----
+  .globl glMultiTexCoord3iARB
+  .type glMultiTexCoord3iARB,#function
+  glMultiTexCoord3iARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8361,8367 ****
+  .globl glMultiTexCoord3ivARB
+  .type glMultiTexCoord3ivARB,#function
+  glMultiTexCoord3ivARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8361,8367 ----
+  .globl glMultiTexCoord3ivARB
+  .type glMultiTexCoord3ivARB,#function
+  glMultiTexCoord3ivARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8382,8388 ****
+  .globl glMultiTexCoord3sARB
+  .type glMultiTexCoord3sARB,#function
+  glMultiTexCoord3sARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8382,8388 ----
+  .globl glMultiTexCoord3sARB
+  .type glMultiTexCoord3sARB,#function
+  glMultiTexCoord3sARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8403,8409 ****
+  .globl glMultiTexCoord3svARB
+  .type glMultiTexCoord3svARB,#function
+  glMultiTexCoord3svARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8403,8409 ----
+  .globl glMultiTexCoord3svARB
+  .type glMultiTexCoord3svARB,#function
+  glMultiTexCoord3svARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8424,8430 ****
+  .globl glMultiTexCoord4dARB
+  .type glMultiTexCoord4dARB,#function
+  glMultiTexCoord4dARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8424,8430 ----
+  .globl glMultiTexCoord4dARB
+  .type glMultiTexCoord4dARB,#function
+  glMultiTexCoord4dARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8445,8451 ****
+  .globl glMultiTexCoord4dvARB
+  .type glMultiTexCoord4dvARB,#function
+  glMultiTexCoord4dvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8445,8451 ----
+  .globl glMultiTexCoord4dvARB
+  .type glMultiTexCoord4dvARB,#function
+  glMultiTexCoord4dvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8466,8472 ****
+  .globl glMultiTexCoord4fARB
+  .type glMultiTexCoord4fARB,#function
+  glMultiTexCoord4fARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8466,8472 ----
+  .globl glMultiTexCoord4fARB
+  .type glMultiTexCoord4fARB,#function
+  glMultiTexCoord4fARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8487,8493 ****
+  .globl glMultiTexCoord4fvARB
+  .type glMultiTexCoord4fvARB,#function
+  glMultiTexCoord4fvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8487,8493 ----
+  .globl glMultiTexCoord4fvARB
+  .type glMultiTexCoord4fvARB,#function
+  glMultiTexCoord4fvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8508,8514 ****
+  .globl glMultiTexCoord4iARB
+  .type glMultiTexCoord4iARB,#function
+  glMultiTexCoord4iARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8508,8514 ----
+  .globl glMultiTexCoord4iARB
+  .type glMultiTexCoord4iARB,#function
+  glMultiTexCoord4iARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8529,8535 ****
+  .globl glMultiTexCoord4ivARB
+  .type glMultiTexCoord4ivARB,#function
+  glMultiTexCoord4ivARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8529,8535 ----
+  .globl glMultiTexCoord4ivARB
+  .type glMultiTexCoord4ivARB,#function
+  glMultiTexCoord4ivARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8550,8556 ****
+  .globl glMultiTexCoord4sARB
+  .type glMultiTexCoord4sARB,#function
+  glMultiTexCoord4sARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8550,8556 ----
+  .globl glMultiTexCoord4sARB
+  .type glMultiTexCoord4sARB,#function
+  glMultiTexCoord4sARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8571,8577 ****
+  .globl glMultiTexCoord4svARB
+  .type glMultiTexCoord4svARB,#function
+  glMultiTexCoord4svARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8571,8577 ----
+  .globl glMultiTexCoord4svARB
+  .type glMultiTexCoord4svARB,#function
+  glMultiTexCoord4svARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8592,8598 ****
+  .globl glLoadTransposeMatrixfARB
+  .type glLoadTransposeMatrixfARB,#function
+  glLoadTransposeMatrixfARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8592,8598 ----
+  .globl glLoadTransposeMatrixfARB
+  .type glLoadTransposeMatrixfARB,#function
+  glLoadTransposeMatrixfARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8613,8619 ****
+  .globl glLoadTransposeMatrixdARB
+  .type glLoadTransposeMatrixdARB,#function
+  glLoadTransposeMatrixdARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8613,8619 ----
+  .globl glLoadTransposeMatrixdARB
+  .type glLoadTransposeMatrixdARB,#function
+  glLoadTransposeMatrixdARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8634,8640 ****
+  .globl glMultTransposeMatrixfARB
+  .type glMultTransposeMatrixfARB,#function
+  glMultTransposeMatrixfARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8634,8640 ----
+  .globl glMultTransposeMatrixfARB
+  .type glMultTransposeMatrixfARB,#function
+  glMultTransposeMatrixfARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8655,8661 ****
+  .globl glMultTransposeMatrixdARB
+  .type glMultTransposeMatrixdARB,#function
+  glMultTransposeMatrixdARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8655,8661 ----
+  .globl glMultTransposeMatrixdARB
+  .type glMultTransposeMatrixdARB,#function
+  glMultTransposeMatrixdARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8676,8682 ****
+  .globl glSampleCoverageARB
+  .type glSampleCoverageARB,#function
+  glSampleCoverageARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8676,8682 ----
+  .globl glSampleCoverageARB
+  .type glSampleCoverageARB,#function
+  glSampleCoverageARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8697,8703 ****
+  .globl gl__unused413
+  .type gl__unused413,#function
+  gl__unused413:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8697,8703 ----
+  .globl gl__unused413
+  .type gl__unused413,#function
+  gl__unused413:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8718,8724 ****
+  .globl glCompressedTexImage3DARB
+  .type glCompressedTexImage3DARB,#function
+  glCompressedTexImage3DARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8718,8724 ----
+  .globl glCompressedTexImage3DARB
+  .type glCompressedTexImage3DARB,#function
+  glCompressedTexImage3DARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8739,8745 ****
+  .globl glCompressedTexImage2DARB
+  .type glCompressedTexImage2DARB,#function
+  glCompressedTexImage2DARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8739,8745 ----
+  .globl glCompressedTexImage2DARB
+  .type glCompressedTexImage2DARB,#function
+  glCompressedTexImage2DARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8760,8766 ****
+  .globl glCompressedTexImage1DARB
+  .type glCompressedTexImage1DARB,#function
+  glCompressedTexImage1DARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8760,8766 ----
+  .globl glCompressedTexImage1DARB
+  .type glCompressedTexImage1DARB,#function
+  glCompressedTexImage1DARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8781,8787 ****
+  .globl glCompressedTexSubImage3DARB
+  .type glCompressedTexSubImage3DARB,#function
+  glCompressedTexSubImage3DARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8781,8787 ----
+  .globl glCompressedTexSubImage3DARB
+  .type glCompressedTexSubImage3DARB,#function
+  glCompressedTexSubImage3DARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8802,8808 ****
+  .globl glCompressedTexSubImage2DARB
+  .type glCompressedTexSubImage2DARB,#function
+  glCompressedTexSubImage2DARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8802,8808 ----
+  .globl glCompressedTexSubImage2DARB
+  .type glCompressedTexSubImage2DARB,#function
+  glCompressedTexSubImage2DARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8823,8829 ****
+  .globl glCompressedTexSubImage1DARB
+  .type glCompressedTexSubImage1DARB,#function
+  glCompressedTexSubImage1DARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8823,8829 ----
+  .globl glCompressedTexSubImage1DARB
+  .type glCompressedTexSubImage1DARB,#function
+  glCompressedTexSubImage1DARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8844,8850 ****
+  .globl glGetCompressedTexImageARB
+  .type glGetCompressedTexImageARB,#function
+  glGetCompressedTexImageARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8844,8850 ----
+  .globl glGetCompressedTexImageARB
+  .type glGetCompressedTexImageARB,#function
+  glGetCompressedTexImageARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8865,8871 ****
+  .globl glActiveTexture
+  .type glActiveTexture,#function
+  glActiveTexture:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8865,8871 ----
+  .globl glActiveTexture
+  .type glActiveTexture,#function
+  glActiveTexture:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8886,8892 ****
+  .globl glClientActiveTexture
+  .type glClientActiveTexture,#function
+  glClientActiveTexture:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8886,8892 ----
+  .globl glClientActiveTexture
+  .type glClientActiveTexture,#function
+  glClientActiveTexture:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8907,8913 ****
+  .globl glMultiTexCoord1d
+  .type glMultiTexCoord1d,#function
+  glMultiTexCoord1d:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8907,8913 ----
+  .globl glMultiTexCoord1d
+  .type glMultiTexCoord1d,#function
+  glMultiTexCoord1d:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8928,8934 ****
+  .globl glMultiTexCoord1dv
+  .type glMultiTexCoord1dv,#function
+  glMultiTexCoord1dv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8928,8934 ----
+  .globl glMultiTexCoord1dv
+  .type glMultiTexCoord1dv,#function
+  glMultiTexCoord1dv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8949,8955 ****
+  .globl glMultiTexCoord1f
+  .type glMultiTexCoord1f,#function
+  glMultiTexCoord1f:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8949,8955 ----
+  .globl glMultiTexCoord1f
+  .type glMultiTexCoord1f,#function
+  glMultiTexCoord1f:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8970,8976 ****
+  .globl glMultiTexCoord1fv
+  .type glMultiTexCoord1fv,#function
+  glMultiTexCoord1fv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8970,8976 ----
+  .globl glMultiTexCoord1fv
+  .type glMultiTexCoord1fv,#function
+  glMultiTexCoord1fv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 8991,8997 ****
+  .globl glMultiTexCoord1i
+  .type glMultiTexCoord1i,#function
+  glMultiTexCoord1i:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 8991,8997 ----
+  .globl glMultiTexCoord1i
+  .type glMultiTexCoord1i,#function
+  glMultiTexCoord1i:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9012,9018 ****
+  .globl glMultiTexCoord1iv
+  .type glMultiTexCoord1iv,#function
+  glMultiTexCoord1iv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9012,9018 ----
+  .globl glMultiTexCoord1iv
+  .type glMultiTexCoord1iv,#function
+  glMultiTexCoord1iv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9033,9039 ****
+  .globl glMultiTexCoord1s
+  .type glMultiTexCoord1s,#function
+  glMultiTexCoord1s:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9033,9039 ----
+  .globl glMultiTexCoord1s
+  .type glMultiTexCoord1s,#function
+  glMultiTexCoord1s:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9054,9060 ****
+  .globl glMultiTexCoord1sv
+  .type glMultiTexCoord1sv,#function
+  glMultiTexCoord1sv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9054,9060 ----
+  .globl glMultiTexCoord1sv
+  .type glMultiTexCoord1sv,#function
+  glMultiTexCoord1sv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9075,9081 ****
+  .globl glMultiTexCoord2d
+  .type glMultiTexCoord2d,#function
+  glMultiTexCoord2d:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9075,9081 ----
+  .globl glMultiTexCoord2d
+  .type glMultiTexCoord2d,#function
+  glMultiTexCoord2d:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9096,9102 ****
+  .globl glMultiTexCoord2dv
+  .type glMultiTexCoord2dv,#function
+  glMultiTexCoord2dv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9096,9102 ----
+  .globl glMultiTexCoord2dv
+  .type glMultiTexCoord2dv,#function
+  glMultiTexCoord2dv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9117,9123 ****
+  .globl glMultiTexCoord2f
+  .type glMultiTexCoord2f,#function
+  glMultiTexCoord2f:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9117,9123 ----
+  .globl glMultiTexCoord2f
+  .type glMultiTexCoord2f,#function
+  glMultiTexCoord2f:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9138,9144 ****
+  .globl glMultiTexCoord2fv
+  .type glMultiTexCoord2fv,#function
+  glMultiTexCoord2fv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9138,9144 ----
+  .globl glMultiTexCoord2fv
+  .type glMultiTexCoord2fv,#function
+  glMultiTexCoord2fv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9159,9165 ****
+  .globl glMultiTexCoord2i
+  .type glMultiTexCoord2i,#function
+  glMultiTexCoord2i:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9159,9165 ----
+  .globl glMultiTexCoord2i
+  .type glMultiTexCoord2i,#function
+  glMultiTexCoord2i:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9180,9186 ****
+  .globl glMultiTexCoord2iv
+  .type glMultiTexCoord2iv,#function
+  glMultiTexCoord2iv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9180,9186 ----
+  .globl glMultiTexCoord2iv
+  .type glMultiTexCoord2iv,#function
+  glMultiTexCoord2iv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9201,9207 ****
+  .globl glMultiTexCoord2s
+  .type glMultiTexCoord2s,#function
+  glMultiTexCoord2s:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9201,9207 ----
+  .globl glMultiTexCoord2s
+  .type glMultiTexCoord2s,#function
+  glMultiTexCoord2s:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9222,9228 ****
+  .globl glMultiTexCoord2sv
+  .type glMultiTexCoord2sv,#function
+  glMultiTexCoord2sv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9222,9228 ----
+  .globl glMultiTexCoord2sv
+  .type glMultiTexCoord2sv,#function
+  glMultiTexCoord2sv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9243,9249 ****
+  .globl glMultiTexCoord3d
+  .type glMultiTexCoord3d,#function
+  glMultiTexCoord3d:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9243,9249 ----
+  .globl glMultiTexCoord3d
+  .type glMultiTexCoord3d,#function
+  glMultiTexCoord3d:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9264,9270 ****
+  .globl glMultiTexCoord3dv
+  .type glMultiTexCoord3dv,#function
+  glMultiTexCoord3dv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9264,9270 ----
+  .globl glMultiTexCoord3dv
+  .type glMultiTexCoord3dv,#function
+  glMultiTexCoord3dv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9285,9291 ****
+  .globl glMultiTexCoord3f
+  .type glMultiTexCoord3f,#function
+  glMultiTexCoord3f:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9285,9291 ----
+  .globl glMultiTexCoord3f
+  .type glMultiTexCoord3f,#function
+  glMultiTexCoord3f:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9306,9312 ****
+  .globl glMultiTexCoord3fv
+  .type glMultiTexCoord3fv,#function
+  glMultiTexCoord3fv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9306,9312 ----
+  .globl glMultiTexCoord3fv
+  .type glMultiTexCoord3fv,#function
+  glMultiTexCoord3fv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9327,9333 ****
+  .globl glMultiTexCoord3i
+  .type glMultiTexCoord3i,#function
+  glMultiTexCoord3i:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9327,9333 ----
+  .globl glMultiTexCoord3i
+  .type glMultiTexCoord3i,#function
+  glMultiTexCoord3i:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9348,9354 ****
+  .globl glMultiTexCoord3iv
+  .type glMultiTexCoord3iv,#function
+  glMultiTexCoord3iv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9348,9354 ----
+  .globl glMultiTexCoord3iv
+  .type glMultiTexCoord3iv,#function
+  glMultiTexCoord3iv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9369,9375 ****
+  .globl glMultiTexCoord3s
+  .type glMultiTexCoord3s,#function
+  glMultiTexCoord3s:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9369,9375 ----
+  .globl glMultiTexCoord3s
+  .type glMultiTexCoord3s,#function
+  glMultiTexCoord3s:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9390,9396 ****
+  .globl glMultiTexCoord3sv
+  .type glMultiTexCoord3sv,#function
+  glMultiTexCoord3sv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9390,9396 ----
+  .globl glMultiTexCoord3sv
+  .type glMultiTexCoord3sv,#function
+  glMultiTexCoord3sv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9411,9417 ****
+  .globl glMultiTexCoord4d
+  .type glMultiTexCoord4d,#function
+  glMultiTexCoord4d:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9411,9417 ----
+  .globl glMultiTexCoord4d
+  .type glMultiTexCoord4d,#function
+  glMultiTexCoord4d:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9432,9438 ****
+  .globl glMultiTexCoord4dv
+  .type glMultiTexCoord4dv,#function
+  glMultiTexCoord4dv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9432,9438 ----
+  .globl glMultiTexCoord4dv
+  .type glMultiTexCoord4dv,#function
+  glMultiTexCoord4dv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9453,9459 ****
+  .globl glMultiTexCoord4f
+  .type glMultiTexCoord4f,#function
+  glMultiTexCoord4f:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9453,9459 ----
+  .globl glMultiTexCoord4f
+  .type glMultiTexCoord4f,#function
+  glMultiTexCoord4f:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9474,9480 ****
+  .globl glMultiTexCoord4fv
+  .type glMultiTexCoord4fv,#function
+  glMultiTexCoord4fv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9474,9480 ----
+  .globl glMultiTexCoord4fv
+  .type glMultiTexCoord4fv,#function
+  glMultiTexCoord4fv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9495,9501 ****
+  .globl glMultiTexCoord4i
+  .type glMultiTexCoord4i,#function
+  glMultiTexCoord4i:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9495,9501 ----
+  .globl glMultiTexCoord4i
+  .type glMultiTexCoord4i,#function
+  glMultiTexCoord4i:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9516,9522 ****
+  .globl glMultiTexCoord4iv
+  .type glMultiTexCoord4iv,#function
+  glMultiTexCoord4iv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9516,9522 ----
+  .globl glMultiTexCoord4iv
+  .type glMultiTexCoord4iv,#function
+  glMultiTexCoord4iv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9537,9543 ****
+  .globl glMultiTexCoord4s
+  .type glMultiTexCoord4s,#function
+  glMultiTexCoord4s:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9537,9543 ----
+  .globl glMultiTexCoord4s
+  .type glMultiTexCoord4s,#function
+  glMultiTexCoord4s:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9558,9564 ****
+  .globl glMultiTexCoord4sv
+  .type glMultiTexCoord4sv,#function
+  glMultiTexCoord4sv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9558,9564 ----
+  .globl glMultiTexCoord4sv
+  .type glMultiTexCoord4sv,#function
+  glMultiTexCoord4sv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9579,9585 ****
+  .globl glLoadTransposeMatrixf
+  .type glLoadTransposeMatrixf,#function
+  glLoadTransposeMatrixf:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9579,9585 ----
+  .globl glLoadTransposeMatrixf
+  .type glLoadTransposeMatrixf,#function
+  glLoadTransposeMatrixf:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9600,9606 ****
+  .globl glLoadTransposeMatrixd
+  .type glLoadTransposeMatrixd,#function
+  glLoadTransposeMatrixd:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9600,9606 ----
+  .globl glLoadTransposeMatrixd
+  .type glLoadTransposeMatrixd,#function
+  glLoadTransposeMatrixd:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9621,9627 ****
+  .globl glMultTransposeMatrixf
+  .type glMultTransposeMatrixf,#function
+  glMultTransposeMatrixf:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9621,9627 ----
+  .globl glMultTransposeMatrixf
+  .type glMultTransposeMatrixf,#function
+  glMultTransposeMatrixf:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9642,9648 ****
+  .globl glMultTransposeMatrixd
+  .type glMultTransposeMatrixd,#function
+  glMultTransposeMatrixd:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9642,9648 ----
+  .globl glMultTransposeMatrixd
+  .type glMultTransposeMatrixd,#function
+  glMultTransposeMatrixd:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9663,9669 ****
+  .globl glSampleCoverage
+  .type glSampleCoverage,#function
+  glSampleCoverage:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9663,9669 ----
+  .globl glSampleCoverage
+  .type glSampleCoverage,#function
+  glSampleCoverage:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9684,9690 ****
+  .globl glCompressedTexImage3D
+  .type glCompressedTexImage3D,#function
+  glCompressedTexImage3D:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9684,9690 ----
+  .globl glCompressedTexImage3D
+  .type glCompressedTexImage3D,#function
+  glCompressedTexImage3D:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9705,9711 ****
+  .globl glCompressedTexImage2D
+  .type glCompressedTexImage2D,#function
+  glCompressedTexImage2D:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9705,9711 ----
+  .globl glCompressedTexImage2D
+  .type glCompressedTexImage2D,#function
+  glCompressedTexImage2D:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9726,9732 ****
+  .globl glCompressedTexImage1D
+  .type glCompressedTexImage1D,#function
+  glCompressedTexImage1D:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9726,9732 ----
+  .globl glCompressedTexImage1D
+  .type glCompressedTexImage1D,#function
+  glCompressedTexImage1D:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9747,9753 ****
+  .globl glCompressedTexSubImage3D
+  .type glCompressedTexSubImage3D,#function
+  glCompressedTexSubImage3D:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9747,9753 ----
+  .globl glCompressedTexSubImage3D
+  .type glCompressedTexSubImage3D,#function
+  glCompressedTexSubImage3D:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9768,9774 ****
+  .globl glCompressedTexSubImage2D
+  .type glCompressedTexSubImage2D,#function
+  glCompressedTexSubImage2D:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9768,9774 ----
+  .globl glCompressedTexSubImage2D
+  .type glCompressedTexSubImage2D,#function
+  glCompressedTexSubImage2D:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9789,9795 ****
+  .globl glCompressedTexSubImage1D
+  .type glCompressedTexSubImage1D,#function
+  glCompressedTexSubImage1D:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9789,9795 ----
+  .globl glCompressedTexSubImage1D
+  .type glCompressedTexSubImage1D,#function
+  glCompressedTexSubImage1D:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9810,9816 ****
+  .globl glGetCompressedTexImage
+  .type glGetCompressedTexImage,#function
+  glGetCompressedTexImage:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9810,9816 ----
+  .globl glGetCompressedTexImage
+  .type glGetCompressedTexImage,#function
+  glGetCompressedTexImage:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9831,9837 ****
+  .globl glBlendColorEXT
+  .type glBlendColorEXT,#function
+  glBlendColorEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9831,9837 ----
+  .globl glBlendColorEXT
+  .type glBlendColorEXT,#function
+  glBlendColorEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9852,9858 ****
+  .globl glPolygonOffsetEXT
+  .type glPolygonOffsetEXT,#function
+  glPolygonOffsetEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9852,9858 ----
+  .globl glPolygonOffsetEXT
+  .type glPolygonOffsetEXT,#function
+  glPolygonOffsetEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9873,9879 ****
+  .globl glTexImage3DEXT
+  .type glTexImage3DEXT,#function
+  glTexImage3DEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9873,9879 ----
+  .globl glTexImage3DEXT
+  .type glTexImage3DEXT,#function
+  glTexImage3DEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9894,9900 ****
+  .globl glTexSubImage3DEXT
+  .type glTexSubImage3DEXT,#function
+  glTexSubImage3DEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9894,9900 ----
+  .globl glTexSubImage3DEXT
+  .type glTexSubImage3DEXT,#function
+  glTexSubImage3DEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9915,9921 ****
+  .globl glGetTexFilterFuncSGIS
+  .type glGetTexFilterFuncSGIS,#function
+  glGetTexFilterFuncSGIS:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9915,9921 ----
+  .globl glGetTexFilterFuncSGIS
+  .type glGetTexFilterFuncSGIS,#function
+  glGetTexFilterFuncSGIS:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9936,9942 ****
+  .globl glTexFilterFuncSGIS
+  .type glTexFilterFuncSGIS,#function
+  glTexFilterFuncSGIS:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9936,9942 ----
+  .globl glTexFilterFuncSGIS
+  .type glTexFilterFuncSGIS,#function
+  glTexFilterFuncSGIS:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9957,9963 ****
+  .globl glTexSubImage1DEXT
+  .type glTexSubImage1DEXT,#function
+  glTexSubImage1DEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9957,9963 ----
+  .globl glTexSubImage1DEXT
+  .type glTexSubImage1DEXT,#function
+  glTexSubImage1DEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9978,9984 ****
+  .globl glTexSubImage2DEXT
+  .type glTexSubImage2DEXT,#function
+  glTexSubImage2DEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9978,9984 ----
+  .globl glTexSubImage2DEXT
+  .type glTexSubImage2DEXT,#function
+  glTexSubImage2DEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 9999,10005 ****
+  .globl glCopyTexImage1DEXT
+  .type glCopyTexImage1DEXT,#function
+  glCopyTexImage1DEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 9999,10005 ----
+  .globl glCopyTexImage1DEXT
+  .type glCopyTexImage1DEXT,#function
+  glCopyTexImage1DEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10020,10026 ****
+  .globl glCopyTexImage2DEXT
+  .type glCopyTexImage2DEXT,#function
+  glCopyTexImage2DEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10020,10026 ----
+  .globl glCopyTexImage2DEXT
+  .type glCopyTexImage2DEXT,#function
+  glCopyTexImage2DEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10041,10047 ****
+  .globl glCopyTexSubImage1DEXT
+  .type glCopyTexSubImage1DEXT,#function
+  glCopyTexSubImage1DEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10041,10047 ----
+  .globl glCopyTexSubImage1DEXT
+  .type glCopyTexSubImage1DEXT,#function
+  glCopyTexSubImage1DEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10062,10068 ****
+  .globl glCopyTexSubImage2DEXT
+  .type glCopyTexSubImage2DEXT,#function
+  glCopyTexSubImage2DEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10062,10068 ----
+  .globl glCopyTexSubImage2DEXT
+  .type glCopyTexSubImage2DEXT,#function
+  glCopyTexSubImage2DEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10083,10089 ****
+  .globl glCopyTexSubImage3DEXT
+  .type glCopyTexSubImage3DEXT,#function
+  glCopyTexSubImage3DEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10083,10089 ----
+  .globl glCopyTexSubImage3DEXT
+  .type glCopyTexSubImage3DEXT,#function
+  glCopyTexSubImage3DEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10104,10110 ****
+  .globl glGetHistogramEXT
+  .type glGetHistogramEXT,#function
+  glGetHistogramEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10104,10110 ----
+  .globl glGetHistogramEXT
+  .type glGetHistogramEXT,#function
+  glGetHistogramEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10125,10131 ****
+  .globl glGetHistogramParameterfvEXT
+  .type glGetHistogramParameterfvEXT,#function
+  glGetHistogramParameterfvEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10125,10131 ----
+  .globl glGetHistogramParameterfvEXT
+  .type glGetHistogramParameterfvEXT,#function
+  glGetHistogramParameterfvEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10146,10152 ****
+  .globl glGetHistogramParameterivEXT
+  .type glGetHistogramParameterivEXT,#function
+  glGetHistogramParameterivEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10146,10152 ----
+  .globl glGetHistogramParameterivEXT
+  .type glGetHistogramParameterivEXT,#function
+  glGetHistogramParameterivEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10167,10173 ****
+  .globl glGetMinmaxEXT
+  .type glGetMinmaxEXT,#function
+  glGetMinmaxEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10167,10173 ----
+  .globl glGetMinmaxEXT
+  .type glGetMinmaxEXT,#function
+  glGetMinmaxEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10188,10194 ****
+  .globl glGetMinmaxParameterfvEXT
+  .type glGetMinmaxParameterfvEXT,#function
+  glGetMinmaxParameterfvEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10188,10194 ----
+  .globl glGetMinmaxParameterfvEXT
+  .type glGetMinmaxParameterfvEXT,#function
+  glGetMinmaxParameterfvEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10209,10215 ****
+  .globl glGetMinmaxParameterivEXT
+  .type glGetMinmaxParameterivEXT,#function
+  glGetMinmaxParameterivEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10209,10215 ----
+  .globl glGetMinmaxParameterivEXT
+  .type glGetMinmaxParameterivEXT,#function
+  glGetMinmaxParameterivEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10230,10236 ****
+  .globl glHistogramEXT
+  .type glHistogramEXT,#function
+  glHistogramEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10230,10236 ----
+  .globl glHistogramEXT
+  .type glHistogramEXT,#function
+  glHistogramEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10251,10257 ****
+  .globl glMinmaxEXT
+  .type glMinmaxEXT,#function
+  glMinmaxEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10251,10257 ----
+  .globl glMinmaxEXT
+  .type glMinmaxEXT,#function
+  glMinmaxEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10272,10278 ****
+  .globl glResetHistogramEXT
+  .type glResetHistogramEXT,#function
+  glResetHistogramEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10272,10278 ----
+  .globl glResetHistogramEXT
+  .type glResetHistogramEXT,#function
+  glResetHistogramEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10293,10299 ****
+  .globl glResetMinmaxEXT
+  .type glResetMinmaxEXT,#function
+  glResetMinmaxEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10293,10299 ----
+  .globl glResetMinmaxEXT
+  .type glResetMinmaxEXT,#function
+  glResetMinmaxEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10314,10320 ****
+  .globl glConvolutionFilter1DEXT
+  .type glConvolutionFilter1DEXT,#function
+  glConvolutionFilter1DEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10314,10320 ----
+  .globl glConvolutionFilter1DEXT
+  .type glConvolutionFilter1DEXT,#function
+  glConvolutionFilter1DEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10335,10341 ****
+  .globl glConvolutionFilter2DEXT
+  .type glConvolutionFilter2DEXT,#function
+  glConvolutionFilter2DEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10335,10341 ----
+  .globl glConvolutionFilter2DEXT
+  .type glConvolutionFilter2DEXT,#function
+  glConvolutionFilter2DEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10356,10362 ****
+  .globl glConvolutionParameterfEXT
+  .type glConvolutionParameterfEXT,#function
+  glConvolutionParameterfEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10356,10362 ----
+  .globl glConvolutionParameterfEXT
+  .type glConvolutionParameterfEXT,#function
+  glConvolutionParameterfEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10377,10383 ****
+  .globl glConvolutionParameterfvEXT
+  .type glConvolutionParameterfvEXT,#function
+  glConvolutionParameterfvEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10377,10383 ----
+  .globl glConvolutionParameterfvEXT
+  .type glConvolutionParameterfvEXT,#function
+  glConvolutionParameterfvEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10398,10404 ****
+  .globl glConvolutionParameteriEXT
+  .type glConvolutionParameteriEXT,#function
+  glConvolutionParameteriEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10398,10404 ----
+  .globl glConvolutionParameteriEXT
+  .type glConvolutionParameteriEXT,#function
+  glConvolutionParameteriEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10419,10425 ****
+  .globl glConvolutionParameterivEXT
+  .type glConvolutionParameterivEXT,#function
+  glConvolutionParameterivEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10419,10425 ----
+  .globl glConvolutionParameterivEXT
+  .type glConvolutionParameterivEXT,#function
+  glConvolutionParameterivEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10440,10446 ****
+  .globl glCopyConvolutionFilter1DEXT
+  .type glCopyConvolutionFilter1DEXT,#function
+  glCopyConvolutionFilter1DEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10440,10446 ----
+  .globl glCopyConvolutionFilter1DEXT
+  .type glCopyConvolutionFilter1DEXT,#function
+  glCopyConvolutionFilter1DEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10461,10467 ****
+  .globl glCopyConvolutionFilter2DEXT
+  .type glCopyConvolutionFilter2DEXT,#function
+  glCopyConvolutionFilter2DEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10461,10467 ----
+  .globl glCopyConvolutionFilter2DEXT
+  .type glCopyConvolutionFilter2DEXT,#function
+  glCopyConvolutionFilter2DEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10482,10488 ****
+  .globl glGetConvolutionFilterEXT
+  .type glGetConvolutionFilterEXT,#function
+  glGetConvolutionFilterEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10482,10488 ----
+  .globl glGetConvolutionFilterEXT
+  .type glGetConvolutionFilterEXT,#function
+  glGetConvolutionFilterEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10503,10509 ****
+  .globl glGetConvolutionParameterfvEXT
+  .type glGetConvolutionParameterfvEXT,#function
+  glGetConvolutionParameterfvEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10503,10509 ----
+  .globl glGetConvolutionParameterfvEXT
+  .type glGetConvolutionParameterfvEXT,#function
+  glGetConvolutionParameterfvEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10524,10530 ****
+  .globl glGetConvolutionParameterivEXT
+  .type glGetConvolutionParameterivEXT,#function
+  glGetConvolutionParameterivEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10524,10530 ----
+  .globl glGetConvolutionParameterivEXT
+  .type glGetConvolutionParameterivEXT,#function
+  glGetConvolutionParameterivEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10545,10551 ****
+  .globl glGetSeparableFilterEXT
+  .type glGetSeparableFilterEXT,#function
+  glGetSeparableFilterEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10545,10551 ----
+  .globl glGetSeparableFilterEXT
+  .type glGetSeparableFilterEXT,#function
+  glGetSeparableFilterEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10566,10572 ****
+  .globl glSeparableFilter2DEXT
+  .type glSeparableFilter2DEXT,#function
+  glSeparableFilter2DEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10566,10572 ----
+  .globl glSeparableFilter2DEXT
+  .type glSeparableFilter2DEXT,#function
+  glSeparableFilter2DEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10587,10593 ****
+  .globl glColorTableSGI
+  .type glColorTableSGI,#function
+  glColorTableSGI:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10587,10593 ----
+  .globl glColorTableSGI
+  .type glColorTableSGI,#function
+  glColorTableSGI:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10608,10614 ****
+  .globl glColorTableParameterfvSGI
+  .type glColorTableParameterfvSGI,#function
+  glColorTableParameterfvSGI:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10608,10614 ----
+  .globl glColorTableParameterfvSGI
+  .type glColorTableParameterfvSGI,#function
+  glColorTableParameterfvSGI:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10629,10635 ****
+  .globl glColorTableParameterivSGI
+  .type glColorTableParameterivSGI,#function
+  glColorTableParameterivSGI:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10629,10635 ----
+  .globl glColorTableParameterivSGI
+  .type glColorTableParameterivSGI,#function
+  glColorTableParameterivSGI:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10650,10656 ****
+  .globl glCopyColorTableSGI
+  .type glCopyColorTableSGI,#function
+  glCopyColorTableSGI:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10650,10656 ----
+  .globl glCopyColorTableSGI
+  .type glCopyColorTableSGI,#function
+  glCopyColorTableSGI:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10671,10677 ****
+  .globl glGetColorTableSGI
+  .type glGetColorTableSGI,#function
+  glGetColorTableSGI:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10671,10677 ----
+  .globl glGetColorTableSGI
+  .type glGetColorTableSGI,#function
+  glGetColorTableSGI:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10692,10698 ****
+  .globl glGetColorTableParameterfvSGI
+  .type glGetColorTableParameterfvSGI,#function
+  glGetColorTableParameterfvSGI:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10692,10698 ----
+  .globl glGetColorTableParameterfvSGI
+  .type glGetColorTableParameterfvSGI,#function
+  glGetColorTableParameterfvSGI:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10713,10719 ****
+  .globl glGetColorTableParameterivSGI
+  .type glGetColorTableParameterivSGI,#function
+  glGetColorTableParameterivSGI:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10713,10719 ----
+  .globl glGetColorTableParameterivSGI
+  .type glGetColorTableParameterivSGI,#function
+  glGetColorTableParameterivSGI:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10734,10740 ****
+  .globl glPixelTexGenSGIX
+  .type glPixelTexGenSGIX,#function
+  glPixelTexGenSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10734,10740 ----
+  .globl glPixelTexGenSGIX
+  .type glPixelTexGenSGIX,#function
+  glPixelTexGenSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10755,10761 ****
+  .globl glPixelTexGenParameteriSGIS
+  .type glPixelTexGenParameteriSGIS,#function
+  glPixelTexGenParameteriSGIS:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10755,10761 ----
+  .globl glPixelTexGenParameteriSGIS
+  .type glPixelTexGenParameteriSGIS,#function
+  glPixelTexGenParameteriSGIS:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10776,10782 ****
+  .globl glPixelTexGenParameterivSGIS
+  .type glPixelTexGenParameterivSGIS,#function
+  glPixelTexGenParameterivSGIS:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10776,10782 ----
+  .globl glPixelTexGenParameterivSGIS
+  .type glPixelTexGenParameterivSGIS,#function
+  glPixelTexGenParameterivSGIS:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10797,10803 ****
+  .globl glPixelTexGenParameterfSGIS
+  .type glPixelTexGenParameterfSGIS,#function
+  glPixelTexGenParameterfSGIS:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10797,10803 ----
+  .globl glPixelTexGenParameterfSGIS
+  .type glPixelTexGenParameterfSGIS,#function
+  glPixelTexGenParameterfSGIS:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10818,10824 ****
+  .globl glPixelTexGenParameterfvSGIS
+  .type glPixelTexGenParameterfvSGIS,#function
+  glPixelTexGenParameterfvSGIS:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10818,10824 ----
+  .globl glPixelTexGenParameterfvSGIS
+  .type glPixelTexGenParameterfvSGIS,#function
+  glPixelTexGenParameterfvSGIS:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10839,10845 ****
+  .globl glGetPixelTexGenParameterivSGIS
+  .type glGetPixelTexGenParameterivSGIS,#function
+  glGetPixelTexGenParameterivSGIS:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10839,10845 ----
+  .globl glGetPixelTexGenParameterivSGIS
+  .type glGetPixelTexGenParameterivSGIS,#function
+  glGetPixelTexGenParameterivSGIS:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10860,10866 ****
+  .globl glGetPixelTexGenParameterfvSGIS
+  .type glGetPixelTexGenParameterfvSGIS,#function
+  glGetPixelTexGenParameterfvSGIS:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10860,10866 ----
+  .globl glGetPixelTexGenParameterfvSGIS
+  .type glGetPixelTexGenParameterfvSGIS,#function
+  glGetPixelTexGenParameterfvSGIS:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10881,10887 ****
+  .globl glTexImage4DSGIS
+  .type glTexImage4DSGIS,#function
+  glTexImage4DSGIS:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10881,10887 ----
+  .globl glTexImage4DSGIS
+  .type glTexImage4DSGIS,#function
+  glTexImage4DSGIS:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10902,10908 ****
+  .globl glTexSubImage4DSGIS
+  .type glTexSubImage4DSGIS,#function
+  glTexSubImage4DSGIS:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10902,10908 ----
+  .globl glTexSubImage4DSGIS
+  .type glTexSubImage4DSGIS,#function
+  glTexSubImage4DSGIS:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10923,10929 ****
+  .globl glAreTexturesResidentEXT
+  .type glAreTexturesResidentEXT,#function
+  glAreTexturesResidentEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10923,10929 ----
+  .globl glAreTexturesResidentEXT
+  .type glAreTexturesResidentEXT,#function
+  glAreTexturesResidentEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10944,10950 ****
+  .globl glBindTextureEXT
+  .type glBindTextureEXT,#function
+  glBindTextureEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10944,10950 ----
+  .globl glBindTextureEXT
+  .type glBindTextureEXT,#function
+  glBindTextureEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10965,10971 ****
+  .globl glDeleteTexturesEXT
+  .type glDeleteTexturesEXT,#function
+  glDeleteTexturesEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10965,10971 ----
+  .globl glDeleteTexturesEXT
+  .type glDeleteTexturesEXT,#function
+  glDeleteTexturesEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 10986,10992 ****
+  .globl glGenTexturesEXT
+  .type glGenTexturesEXT,#function
+  glGenTexturesEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 10986,10992 ----
+  .globl glGenTexturesEXT
+  .type glGenTexturesEXT,#function
+  glGenTexturesEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11007,11013 ****
+  .globl glIsTextureEXT
+  .type glIsTextureEXT,#function
+  glIsTextureEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11007,11013 ----
+  .globl glIsTextureEXT
+  .type glIsTextureEXT,#function
+  glIsTextureEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11028,11034 ****
+  .globl glPrioritizeTexturesEXT
+  .type glPrioritizeTexturesEXT,#function
+  glPrioritizeTexturesEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11028,11034 ----
+  .globl glPrioritizeTexturesEXT
+  .type glPrioritizeTexturesEXT,#function
+  glPrioritizeTexturesEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11049,11055 ****
+  .globl glDetailTexFuncSGIS
+  .type glDetailTexFuncSGIS,#function
+  glDetailTexFuncSGIS:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11049,11055 ----
+  .globl glDetailTexFuncSGIS
+  .type glDetailTexFuncSGIS,#function
+  glDetailTexFuncSGIS:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11070,11076 ****
+  .globl glGetDetailTexFuncSGIS
+  .type glGetDetailTexFuncSGIS,#function
+  glGetDetailTexFuncSGIS:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11070,11076 ----
+  .globl glGetDetailTexFuncSGIS
+  .type glGetDetailTexFuncSGIS,#function
+  glGetDetailTexFuncSGIS:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11091,11097 ****
+  .globl glSharpenTexFuncSGIS
+  .type glSharpenTexFuncSGIS,#function
+  glSharpenTexFuncSGIS:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11091,11097 ----
+  .globl glSharpenTexFuncSGIS
+  .type glSharpenTexFuncSGIS,#function
+  glSharpenTexFuncSGIS:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11112,11118 ****
+  .globl glGetSharpenTexFuncSGIS
+  .type glGetSharpenTexFuncSGIS,#function
+  glGetSharpenTexFuncSGIS:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11112,11118 ----
+  .globl glGetSharpenTexFuncSGIS
+  .type glGetSharpenTexFuncSGIS,#function
+  glGetSharpenTexFuncSGIS:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11133,11139 ****
+  .globl glSampleMaskSGIS
+  .type glSampleMaskSGIS,#function
+  glSampleMaskSGIS:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11133,11139 ----
+  .globl glSampleMaskSGIS
+  .type glSampleMaskSGIS,#function
+  glSampleMaskSGIS:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11154,11160 ****
+  .globl glSamplePatternSGIS
+  .type glSamplePatternSGIS,#function
+  glSamplePatternSGIS:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11154,11160 ----
+  .globl glSamplePatternSGIS
+  .type glSamplePatternSGIS,#function
+  glSamplePatternSGIS:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11175,11181 ****
+  .globl glArrayElementEXT
+  .type glArrayElementEXT,#function
+  glArrayElementEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11175,11181 ----
+  .globl glArrayElementEXT
+  .type glArrayElementEXT,#function
+  glArrayElementEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11196,11202 ****
+  .globl glColorPointerEXT
+  .type glColorPointerEXT,#function
+  glColorPointerEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11196,11202 ----
+  .globl glColorPointerEXT
+  .type glColorPointerEXT,#function
+  glColorPointerEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11217,11223 ****
+  .globl glDrawArraysEXT
+  .type glDrawArraysEXT,#function
+  glDrawArraysEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11217,11223 ----
+  .globl glDrawArraysEXT
+  .type glDrawArraysEXT,#function
+  glDrawArraysEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11238,11244 ****
+  .globl glEdgeFlagPointerEXT
+  .type glEdgeFlagPointerEXT,#function
+  glEdgeFlagPointerEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11238,11244 ----
+  .globl glEdgeFlagPointerEXT
+  .type glEdgeFlagPointerEXT,#function
+  glEdgeFlagPointerEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11259,11265 ****
+  .globl glGetPointervEXT
+  .type glGetPointervEXT,#function
+  glGetPointervEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11259,11265 ----
+  .globl glGetPointervEXT
+  .type glGetPointervEXT,#function
+  glGetPointervEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11280,11286 ****
+  .globl glIndexPointerEXT
+  .type glIndexPointerEXT,#function
+  glIndexPointerEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11280,11286 ----
+  .globl glIndexPointerEXT
+  .type glIndexPointerEXT,#function
+  glIndexPointerEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11301,11307 ****
+  .globl glNormalPointerEXT
+  .type glNormalPointerEXT,#function
+  glNormalPointerEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11301,11307 ----
+  .globl glNormalPointerEXT
+  .type glNormalPointerEXT,#function
+  glNormalPointerEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11322,11328 ****
+  .globl glTexCoordPointerEXT
+  .type glTexCoordPointerEXT,#function
+  glTexCoordPointerEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11322,11328 ----
+  .globl glTexCoordPointerEXT
+  .type glTexCoordPointerEXT,#function
+  glTexCoordPointerEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11343,11349 ****
+  .globl glVertexPointerEXT
+  .type glVertexPointerEXT,#function
+  glVertexPointerEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11343,11349 ----
+  .globl glVertexPointerEXT
+  .type glVertexPointerEXT,#function
+  glVertexPointerEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11364,11370 ****
+  .globl glBlendEquationEXT
+  .type glBlendEquationEXT,#function
+  glBlendEquationEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11364,11370 ----
+  .globl glBlendEquationEXT
+  .type glBlendEquationEXT,#function
+  glBlendEquationEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11385,11391 ****
+  .globl glSpriteParameterfSGIX
+  .type glSpriteParameterfSGIX,#function
+  glSpriteParameterfSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11385,11391 ----
+  .globl glSpriteParameterfSGIX
+  .type glSpriteParameterfSGIX,#function
+  glSpriteParameterfSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11406,11412 ****
+  .globl glSpriteParameterfvSGIX
+  .type glSpriteParameterfvSGIX,#function
+  glSpriteParameterfvSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11406,11412 ----
+  .globl glSpriteParameterfvSGIX
+  .type glSpriteParameterfvSGIX,#function
+  glSpriteParameterfvSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11427,11433 ****
+  .globl glSpriteParameteriSGIX
+  .type glSpriteParameteriSGIX,#function
+  glSpriteParameteriSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11427,11433 ----
+  .globl glSpriteParameteriSGIX
+  .type glSpriteParameteriSGIX,#function
+  glSpriteParameteriSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11448,11454 ****
+  .globl glSpriteParameterivSGIX
+  .type glSpriteParameterivSGIX,#function
+  glSpriteParameterivSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11448,11454 ----
+  .globl glSpriteParameterivSGIX
+  .type glSpriteParameterivSGIX,#function
+  glSpriteParameterivSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11469,11475 ****
+  .globl glPointParameterfEXT
+  .type glPointParameterfEXT,#function
+  glPointParameterfEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11469,11475 ----
+  .globl glPointParameterfEXT
+  .type glPointParameterfEXT,#function
+  glPointParameterfEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11490,11496 ****
+  .globl glPointParameterfvEXT
+  .type glPointParameterfvEXT,#function
+  glPointParameterfvEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11490,11496 ----
+  .globl glPointParameterfvEXT
+  .type glPointParameterfvEXT,#function
+  glPointParameterfvEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11511,11517 ****
+  .globl glPointParameterfARB
+  .type glPointParameterfARB,#function
+  glPointParameterfARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11511,11517 ----
+  .globl glPointParameterfARB
+  .type glPointParameterfARB,#function
+  glPointParameterfARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11532,11538 ****
+  .globl glPointParameterfvARB
+  .type glPointParameterfvARB,#function
+  glPointParameterfvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11532,11538 ----
+  .globl glPointParameterfvARB
+  .type glPointParameterfvARB,#function
+  glPointParameterfvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11553,11559 ****
+  .globl glPointParameterfSGIS
+  .type glPointParameterfSGIS,#function
+  glPointParameterfSGIS:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11553,11559 ----
+  .globl glPointParameterfSGIS
+  .type glPointParameterfSGIS,#function
+  glPointParameterfSGIS:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11574,11580 ****
+  .globl glPointParameterfvSGIS
+  .type glPointParameterfvSGIS,#function
+  glPointParameterfvSGIS:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11574,11580 ----
+  .globl glPointParameterfvSGIS
+  .type glPointParameterfvSGIS,#function
+  glPointParameterfvSGIS:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11595,11601 ****
+  .globl glGetInstrumentsSGIX
+  .type glGetInstrumentsSGIX,#function
+  glGetInstrumentsSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11595,11601 ----
+  .globl glGetInstrumentsSGIX
+  .type glGetInstrumentsSGIX,#function
+  glGetInstrumentsSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11616,11622 ****
+  .globl glInstrumentsBufferSGIX
+  .type glInstrumentsBufferSGIX,#function
+  glInstrumentsBufferSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11616,11622 ----
+  .globl glInstrumentsBufferSGIX
+  .type glInstrumentsBufferSGIX,#function
+  glInstrumentsBufferSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11637,11643 ****
+  .globl glPollInstrumentsSGIX
+  .type glPollInstrumentsSGIX,#function
+  glPollInstrumentsSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11637,11643 ----
+  .globl glPollInstrumentsSGIX
+  .type glPollInstrumentsSGIX,#function
+  glPollInstrumentsSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11658,11664 ****
+  .globl glReadInstrumentsSGIX
+  .type glReadInstrumentsSGIX,#function
+  glReadInstrumentsSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11658,11664 ----
+  .globl glReadInstrumentsSGIX
+  .type glReadInstrumentsSGIX,#function
+  glReadInstrumentsSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11679,11685 ****
+  .globl glStartInstrumentsSGIX
+  .type glStartInstrumentsSGIX,#function
+  glStartInstrumentsSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11679,11685 ----
+  .globl glStartInstrumentsSGIX
+  .type glStartInstrumentsSGIX,#function
+  glStartInstrumentsSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11700,11706 ****
+  .globl glStopInstrumentsSGIX
+  .type glStopInstrumentsSGIX,#function
+  glStopInstrumentsSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11700,11706 ----
+  .globl glStopInstrumentsSGIX
+  .type glStopInstrumentsSGIX,#function
+  glStopInstrumentsSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11721,11727 ****
+  .globl glFrameZoomSGIX
+  .type glFrameZoomSGIX,#function
+  glFrameZoomSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11721,11727 ----
+  .globl glFrameZoomSGIX
+  .type glFrameZoomSGIX,#function
+  glFrameZoomSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11742,11748 ****
+  .globl glTagSampleBufferSGIX
+  .type glTagSampleBufferSGIX,#function
+  glTagSampleBufferSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11742,11748 ----
+  .globl glTagSampleBufferSGIX
+  .type glTagSampleBufferSGIX,#function
+  glTagSampleBufferSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11763,11769 ****
+  .globl glReferencePlaneSGIX
+  .type glReferencePlaneSGIX,#function
+  glReferencePlaneSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11763,11769 ----
+  .globl glReferencePlaneSGIX
+  .type glReferencePlaneSGIX,#function
+  glReferencePlaneSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11784,11790 ****
+  .globl glFlushRasterSGIX
+  .type glFlushRasterSGIX,#function
+  glFlushRasterSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11784,11790 ----
+  .globl glFlushRasterSGIX
+  .type glFlushRasterSGIX,#function
+  glFlushRasterSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11805,11811 ****
+  .globl glColorSubTableEXT
+  .type glColorSubTableEXT,#function
+  glColorSubTableEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11805,11811 ----
+  .globl glColorSubTableEXT
+  .type glColorSubTableEXT,#function
+  glColorSubTableEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11826,11832 ****
+  .globl glCopyColorSubTableEXT
+  .type glCopyColorSubTableEXT,#function
+  glCopyColorSubTableEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11826,11832 ----
+  .globl glCopyColorSubTableEXT
+  .type glCopyColorSubTableEXT,#function
+  glCopyColorSubTableEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11847,11853 ****
+  .globl glHintPGI
+  .type glHintPGI,#function
+  glHintPGI:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11847,11853 ----
+  .globl glHintPGI
+  .type glHintPGI,#function
+  glHintPGI:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11868,11874 ****
+  .globl glColorTableEXT
+  .type glColorTableEXT,#function
+  glColorTableEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11868,11874 ----
+  .globl glColorTableEXT
+  .type glColorTableEXT,#function
+  glColorTableEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11889,11895 ****
+  .globl glGetColorTableEXT
+  .type glGetColorTableEXT,#function
+  glGetColorTableEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11889,11895 ----
+  .globl glGetColorTableEXT
+  .type glGetColorTableEXT,#function
+  glGetColorTableEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11910,11916 ****
+  .globl glGetColorTableParameterivEXT
+  .type glGetColorTableParameterivEXT,#function
+  glGetColorTableParameterivEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11910,11916 ----
+  .globl glGetColorTableParameterivEXT
+  .type glGetColorTableParameterivEXT,#function
+  glGetColorTableParameterivEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11931,11937 ****
+  .globl glGetColorTableParameterfvEXT
+  .type glGetColorTableParameterfvEXT,#function
+  glGetColorTableParameterfvEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11931,11937 ----
+  .globl glGetColorTableParameterfvEXT
+  .type glGetColorTableParameterfvEXT,#function
+  glGetColorTableParameterfvEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11952,11958 ****
+  .globl glGetListParameterfvSGIX
+  .type glGetListParameterfvSGIX,#function
+  glGetListParameterfvSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11952,11958 ----
+  .globl glGetListParameterfvSGIX
+  .type glGetListParameterfvSGIX,#function
+  glGetListParameterfvSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11973,11979 ****
+  .globl glGetListParameterivSGIX
+  .type glGetListParameterivSGIX,#function
+  glGetListParameterivSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11973,11979 ----
+  .globl glGetListParameterivSGIX
+  .type glGetListParameterivSGIX,#function
+  glGetListParameterivSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 11994,12000 ****
+  .globl glListParameterfSGIX
+  .type glListParameterfSGIX,#function
+  glListParameterfSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 11994,12000 ----
+  .globl glListParameterfSGIX
+  .type glListParameterfSGIX,#function
+  glListParameterfSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12015,12021 ****
+  .globl glListParameterfvSGIX
+  .type glListParameterfvSGIX,#function
+  glListParameterfvSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12015,12021 ----
+  .globl glListParameterfvSGIX
+  .type glListParameterfvSGIX,#function
+  glListParameterfvSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12036,12042 ****
+  .globl glListParameteriSGIX
+  .type glListParameteriSGIX,#function
+  glListParameteriSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12036,12042 ----
+  .globl glListParameteriSGIX
+  .type glListParameteriSGIX,#function
+  glListParameteriSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12057,12063 ****
+  .globl glListParameterivSGIX
+  .type glListParameterivSGIX,#function
+  glListParameterivSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12057,12063 ----
+  .globl glListParameterivSGIX
+  .type glListParameterivSGIX,#function
+  glListParameterivSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12078,12084 ****
+  .globl glIndexMaterialEXT
+  .type glIndexMaterialEXT,#function
+  glIndexMaterialEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12078,12084 ----
+  .globl glIndexMaterialEXT
+  .type glIndexMaterialEXT,#function
+  glIndexMaterialEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12099,12105 ****
+  .globl glIndexFuncEXT
+  .type glIndexFuncEXT,#function
+  glIndexFuncEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12099,12105 ----
+  .globl glIndexFuncEXT
+  .type glIndexFuncEXT,#function
+  glIndexFuncEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12120,12126 ****
+  .globl glLockArraysEXT
+  .type glLockArraysEXT,#function
+  glLockArraysEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12120,12126 ----
+  .globl glLockArraysEXT
+  .type glLockArraysEXT,#function
+  glLockArraysEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12141,12147 ****
+  .globl glUnlockArraysEXT
+  .type glUnlockArraysEXT,#function
+  glUnlockArraysEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12141,12147 ----
+  .globl glUnlockArraysEXT
+  .type glUnlockArraysEXT,#function
+  glUnlockArraysEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12162,12168 ****
+  .globl glCullParameterdvEXT
+  .type glCullParameterdvEXT,#function
+  glCullParameterdvEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12162,12168 ----
+  .globl glCullParameterdvEXT
+  .type glCullParameterdvEXT,#function
+  glCullParameterdvEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12183,12189 ****
+  .globl glCullParameterfvEXT
+  .type glCullParameterfvEXT,#function
+  glCullParameterfvEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12183,12189 ----
+  .globl glCullParameterfvEXT
+  .type glCullParameterfvEXT,#function
+  glCullParameterfvEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12204,12210 ****
+  .globl glFragmentColorMaterialSGIX
+  .type glFragmentColorMaterialSGIX,#function
+  glFragmentColorMaterialSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12204,12210 ----
+  .globl glFragmentColorMaterialSGIX
+  .type glFragmentColorMaterialSGIX,#function
+  glFragmentColorMaterialSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12225,12231 ****
+  .globl glFragmentLightfSGIX
+  .type glFragmentLightfSGIX,#function
+  glFragmentLightfSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12225,12231 ----
+  .globl glFragmentLightfSGIX
+  .type glFragmentLightfSGIX,#function
+  glFragmentLightfSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12246,12252 ****
+  .globl glFragmentLightfvSGIX
+  .type glFragmentLightfvSGIX,#function
+  glFragmentLightfvSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12246,12252 ----
+  .globl glFragmentLightfvSGIX
+  .type glFragmentLightfvSGIX,#function
+  glFragmentLightfvSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12267,12273 ****
+  .globl glFragmentLightiSGIX
+  .type glFragmentLightiSGIX,#function
+  glFragmentLightiSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12267,12273 ----
+  .globl glFragmentLightiSGIX
+  .type glFragmentLightiSGIX,#function
+  glFragmentLightiSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12288,12294 ****
+  .globl glFragmentLightivSGIX
+  .type glFragmentLightivSGIX,#function
+  glFragmentLightivSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12288,12294 ----
+  .globl glFragmentLightivSGIX
+  .type glFragmentLightivSGIX,#function
+  glFragmentLightivSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12309,12315 ****
+  .globl glFragmentLightModelfSGIX
+  .type glFragmentLightModelfSGIX,#function
+  glFragmentLightModelfSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12309,12315 ----
+  .globl glFragmentLightModelfSGIX
+  .type glFragmentLightModelfSGIX,#function
+  glFragmentLightModelfSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12330,12336 ****
+  .globl glFragmentLightModelfvSGIX
+  .type glFragmentLightModelfvSGIX,#function
+  glFragmentLightModelfvSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12330,12336 ----
+  .globl glFragmentLightModelfvSGIX
+  .type glFragmentLightModelfvSGIX,#function
+  glFragmentLightModelfvSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12351,12357 ****
+  .globl glFragmentLightModeliSGIX
+  .type glFragmentLightModeliSGIX,#function
+  glFragmentLightModeliSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12351,12357 ----
+  .globl glFragmentLightModeliSGIX
+  .type glFragmentLightModeliSGIX,#function
+  glFragmentLightModeliSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12372,12378 ****
+  .globl glFragmentLightModelivSGIX
+  .type glFragmentLightModelivSGIX,#function
+  glFragmentLightModelivSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12372,12378 ----
+  .globl glFragmentLightModelivSGIX
+  .type glFragmentLightModelivSGIX,#function
+  glFragmentLightModelivSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12393,12399 ****
+  .globl glFragmentMaterialfSGIX
+  .type glFragmentMaterialfSGIX,#function
+  glFragmentMaterialfSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12393,12399 ----
+  .globl glFragmentMaterialfSGIX
+  .type glFragmentMaterialfSGIX,#function
+  glFragmentMaterialfSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12414,12420 ****
+  .globl glFragmentMaterialfvSGIX
+  .type glFragmentMaterialfvSGIX,#function
+  glFragmentMaterialfvSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12414,12420 ----
+  .globl glFragmentMaterialfvSGIX
+  .type glFragmentMaterialfvSGIX,#function
+  glFragmentMaterialfvSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12435,12441 ****
+  .globl glFragmentMaterialiSGIX
+  .type glFragmentMaterialiSGIX,#function
+  glFragmentMaterialiSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12435,12441 ----
+  .globl glFragmentMaterialiSGIX
+  .type glFragmentMaterialiSGIX,#function
+  glFragmentMaterialiSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12456,12462 ****
+  .globl glFragmentMaterialivSGIX
+  .type glFragmentMaterialivSGIX,#function
+  glFragmentMaterialivSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12456,12462 ----
+  .globl glFragmentMaterialivSGIX
+  .type glFragmentMaterialivSGIX,#function
+  glFragmentMaterialivSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12477,12483 ****
+  .globl glGetFragmentLightfvSGIX
+  .type glGetFragmentLightfvSGIX,#function
+  glGetFragmentLightfvSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12477,12483 ----
+  .globl glGetFragmentLightfvSGIX
+  .type glGetFragmentLightfvSGIX,#function
+  glGetFragmentLightfvSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12498,12504 ****
+  .globl glGetFragmentLightivSGIX
+  .type glGetFragmentLightivSGIX,#function
+  glGetFragmentLightivSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12498,12504 ----
+  .globl glGetFragmentLightivSGIX
+  .type glGetFragmentLightivSGIX,#function
+  glGetFragmentLightivSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12519,12525 ****
+  .globl glGetFragmentMaterialfvSGIX
+  .type glGetFragmentMaterialfvSGIX,#function
+  glGetFragmentMaterialfvSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12519,12525 ----
+  .globl glGetFragmentMaterialfvSGIX
+  .type glGetFragmentMaterialfvSGIX,#function
+  glGetFragmentMaterialfvSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12540,12546 ****
+  .globl glGetFragmentMaterialivSGIX
+  .type glGetFragmentMaterialivSGIX,#function
+  glGetFragmentMaterialivSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12540,12546 ----
+  .globl glGetFragmentMaterialivSGIX
+  .type glGetFragmentMaterialivSGIX,#function
+  glGetFragmentMaterialivSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12561,12567 ****
+  .globl glLightEnviSGIX
+  .type glLightEnviSGIX,#function
+  glLightEnviSGIX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12561,12567 ----
+  .globl glLightEnviSGIX
+  .type glLightEnviSGIX,#function
+  glLightEnviSGIX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12582,12588 ****
+  .globl glDrawRangeElementsEXT
+  .type glDrawRangeElementsEXT,#function
+  glDrawRangeElementsEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12582,12588 ----
+  .globl glDrawRangeElementsEXT
+  .type glDrawRangeElementsEXT,#function
+  glDrawRangeElementsEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12603,12609 ****
+  .globl glSecondaryColor3bEXT
+  .type glSecondaryColor3bEXT,#function
+  glSecondaryColor3bEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12603,12609 ----
+  .globl glSecondaryColor3bEXT
+  .type glSecondaryColor3bEXT,#function
+  glSecondaryColor3bEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12624,12630 ****
+  .globl glSecondaryColor3bvEXT
+  .type glSecondaryColor3bvEXT,#function
+  glSecondaryColor3bvEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12624,12630 ----
+  .globl glSecondaryColor3bvEXT
+  .type glSecondaryColor3bvEXT,#function
+  glSecondaryColor3bvEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12645,12651 ****
+  .globl glSecondaryColor3dEXT
+  .type glSecondaryColor3dEXT,#function
+  glSecondaryColor3dEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12645,12651 ----
+  .globl glSecondaryColor3dEXT
+  .type glSecondaryColor3dEXT,#function
+  glSecondaryColor3dEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12666,12672 ****
+  .globl glSecondaryColor3dvEXT
+  .type glSecondaryColor3dvEXT,#function
+  glSecondaryColor3dvEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12666,12672 ----
+  .globl glSecondaryColor3dvEXT
+  .type glSecondaryColor3dvEXT,#function
+  glSecondaryColor3dvEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12687,12693 ****
+  .globl glSecondaryColor3fEXT
+  .type glSecondaryColor3fEXT,#function
+  glSecondaryColor3fEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12687,12693 ----
+  .globl glSecondaryColor3fEXT
+  .type glSecondaryColor3fEXT,#function
+  glSecondaryColor3fEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12708,12714 ****
+  .globl glSecondaryColor3fvEXT
+  .type glSecondaryColor3fvEXT,#function
+  glSecondaryColor3fvEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12708,12714 ----
+  .globl glSecondaryColor3fvEXT
+  .type glSecondaryColor3fvEXT,#function
+  glSecondaryColor3fvEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12729,12735 ****
+  .globl glSecondaryColor3iEXT
+  .type glSecondaryColor3iEXT,#function
+  glSecondaryColor3iEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12729,12735 ----
+  .globl glSecondaryColor3iEXT
+  .type glSecondaryColor3iEXT,#function
+  glSecondaryColor3iEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12750,12756 ****
+  .globl glSecondaryColor3ivEXT
+  .type glSecondaryColor3ivEXT,#function
+  glSecondaryColor3ivEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12750,12756 ----
+  .globl glSecondaryColor3ivEXT
+  .type glSecondaryColor3ivEXT,#function
+  glSecondaryColor3ivEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12771,12777 ****
+  .globl glSecondaryColor3sEXT
+  .type glSecondaryColor3sEXT,#function
+  glSecondaryColor3sEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12771,12777 ----
+  .globl glSecondaryColor3sEXT
+  .type glSecondaryColor3sEXT,#function
+  glSecondaryColor3sEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12792,12798 ****
+  .globl glSecondaryColor3svEXT
+  .type glSecondaryColor3svEXT,#function
+  glSecondaryColor3svEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12792,12798 ----
+  .globl glSecondaryColor3svEXT
+  .type glSecondaryColor3svEXT,#function
+  glSecondaryColor3svEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12813,12819 ****
+  .globl glSecondaryColor3ubEXT
+  .type glSecondaryColor3ubEXT,#function
+  glSecondaryColor3ubEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12813,12819 ----
+  .globl glSecondaryColor3ubEXT
+  .type glSecondaryColor3ubEXT,#function
+  glSecondaryColor3ubEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12834,12840 ****
+  .globl glSecondaryColor3ubvEXT
+  .type glSecondaryColor3ubvEXT,#function
+  glSecondaryColor3ubvEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12834,12840 ----
+  .globl glSecondaryColor3ubvEXT
+  .type glSecondaryColor3ubvEXT,#function
+  glSecondaryColor3ubvEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12855,12861 ****
+  .globl glSecondaryColor3uiEXT
+  .type glSecondaryColor3uiEXT,#function
+  glSecondaryColor3uiEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12855,12861 ----
+  .globl glSecondaryColor3uiEXT
+  .type glSecondaryColor3uiEXT,#function
+  glSecondaryColor3uiEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12876,12882 ****
+  .globl glSecondaryColor3uivEXT
+  .type glSecondaryColor3uivEXT,#function
+  glSecondaryColor3uivEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12876,12882 ----
+  .globl glSecondaryColor3uivEXT
+  .type glSecondaryColor3uivEXT,#function
+  glSecondaryColor3uivEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12897,12903 ****
+  .globl glSecondaryColor3usEXT
+  .type glSecondaryColor3usEXT,#function
+  glSecondaryColor3usEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12897,12903 ----
+  .globl glSecondaryColor3usEXT
+  .type glSecondaryColor3usEXT,#function
+  glSecondaryColor3usEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12918,12924 ****
+  .globl glSecondaryColor3usvEXT
+  .type glSecondaryColor3usvEXT,#function
+  glSecondaryColor3usvEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12918,12924 ----
+  .globl glSecondaryColor3usvEXT
+  .type glSecondaryColor3usvEXT,#function
+  glSecondaryColor3usvEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12939,12945 ****
+  .globl glSecondaryColorPointerEXT
+  .type glSecondaryColorPointerEXT,#function
+  glSecondaryColorPointerEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12939,12945 ----
+  .globl glSecondaryColorPointerEXT
+  .type glSecondaryColorPointerEXT,#function
+  glSecondaryColorPointerEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12960,12966 ****
+  .globl glMultiDrawArraysEXT
+  .type glMultiDrawArraysEXT,#function
+  glMultiDrawArraysEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12960,12966 ----
+  .globl glMultiDrawArraysEXT
+  .type glMultiDrawArraysEXT,#function
+  glMultiDrawArraysEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 12981,12987 ****
+  .globl glMultiDrawElementsEXT
+  .type glMultiDrawElementsEXT,#function
+  glMultiDrawElementsEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 12981,12987 ----
+  .globl glMultiDrawElementsEXT
+  .type glMultiDrawElementsEXT,#function
+  glMultiDrawElementsEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13002,13008 ****
+  .globl glFogCoordfEXT
+  .type glFogCoordfEXT,#function
+  glFogCoordfEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13002,13008 ----
+  .globl glFogCoordfEXT
+  .type glFogCoordfEXT,#function
+  glFogCoordfEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13023,13029 ****
+  .globl glFogCoordfvEXT
+  .type glFogCoordfvEXT,#function
+  glFogCoordfvEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13023,13029 ----
+  .globl glFogCoordfvEXT
+  .type glFogCoordfvEXT,#function
+  glFogCoordfvEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13044,13050 ****
+  .globl glFogCoorddEXT
+  .type glFogCoorddEXT,#function
+  glFogCoorddEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13044,13050 ----
+  .globl glFogCoorddEXT
+  .type glFogCoorddEXT,#function
+  glFogCoorddEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13065,13071 ****
+  .globl glFogCoorddvEXT
+  .type glFogCoorddvEXT,#function
+  glFogCoorddvEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13065,13071 ----
+  .globl glFogCoorddvEXT
+  .type glFogCoorddvEXT,#function
+  glFogCoorddvEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13086,13092 ****
+  .globl glFogCoordPointerEXT
+  .type glFogCoordPointerEXT,#function
+  glFogCoordPointerEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13086,13092 ----
+  .globl glFogCoordPointerEXT
+  .type glFogCoordPointerEXT,#function
+  glFogCoordPointerEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13107,13113 ****
+  .globl glBlendFuncSeparateEXT
+  .type glBlendFuncSeparateEXT,#function
+  glBlendFuncSeparateEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13107,13113 ----
+  .globl glBlendFuncSeparateEXT
+  .type glBlendFuncSeparateEXT,#function
+  glBlendFuncSeparateEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13128,13134 ****
+  .globl glBlendFuncSeparateINGR
+  .type glBlendFuncSeparateINGR,#function
+  glBlendFuncSeparateINGR:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13128,13134 ----
+  .globl glBlendFuncSeparateINGR
+  .type glBlendFuncSeparateINGR,#function
+  glBlendFuncSeparateINGR:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13149,13155 ****
+  .globl glVertexWeightfEXT
+  .type glVertexWeightfEXT,#function
+  glVertexWeightfEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13149,13155 ----
+  .globl glVertexWeightfEXT
+  .type glVertexWeightfEXT,#function
+  glVertexWeightfEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13170,13176 ****
+  .globl glVertexWeightfvEXT
+  .type glVertexWeightfvEXT,#function
+  glVertexWeightfvEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13170,13176 ----
+  .globl glVertexWeightfvEXT
+  .type glVertexWeightfvEXT,#function
+  glVertexWeightfvEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13191,13197 ****
+  .globl glVertexWeightPointerEXT
+  .type glVertexWeightPointerEXT,#function
+  glVertexWeightPointerEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13191,13197 ----
+  .globl glVertexWeightPointerEXT
+  .type glVertexWeightPointerEXT,#function
+  glVertexWeightPointerEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13212,13218 ****
+  .globl glFlushVertexArrayRangeNV
+  .type glFlushVertexArrayRangeNV,#function
+  glFlushVertexArrayRangeNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13212,13218 ----
+  .globl glFlushVertexArrayRangeNV
+  .type glFlushVertexArrayRangeNV,#function
+  glFlushVertexArrayRangeNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13233,13239 ****
+  .globl glVertexArrayRangeNV
+  .type glVertexArrayRangeNV,#function
+  glVertexArrayRangeNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13233,13239 ----
+  .globl glVertexArrayRangeNV
+  .type glVertexArrayRangeNV,#function
+  glVertexArrayRangeNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13254,13260 ****
+  .globl glCombinerParameterfvNV
+  .type glCombinerParameterfvNV,#function
+  glCombinerParameterfvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13254,13260 ----
+  .globl glCombinerParameterfvNV
+  .type glCombinerParameterfvNV,#function
+  glCombinerParameterfvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13275,13281 ****
+  .globl glCombinerParameterfNV
+  .type glCombinerParameterfNV,#function
+  glCombinerParameterfNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13275,13281 ----
+  .globl glCombinerParameterfNV
+  .type glCombinerParameterfNV,#function
+  glCombinerParameterfNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13296,13302 ****
+  .globl glCombinerParameterivNV
+  .type glCombinerParameterivNV,#function
+  glCombinerParameterivNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13296,13302 ----
+  .globl glCombinerParameterivNV
+  .type glCombinerParameterivNV,#function
+  glCombinerParameterivNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13317,13323 ****
+  .globl glCombinerParameteriNV
+  .type glCombinerParameteriNV,#function
+  glCombinerParameteriNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13317,13323 ----
+  .globl glCombinerParameteriNV
+  .type glCombinerParameteriNV,#function
+  glCombinerParameteriNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13338,13344 ****
+  .globl glCombinerInputNV
+  .type glCombinerInputNV,#function
+  glCombinerInputNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13338,13344 ----
+  .globl glCombinerInputNV
+  .type glCombinerInputNV,#function
+  glCombinerInputNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13359,13365 ****
+  .globl glCombinerOutputNV
+  .type glCombinerOutputNV,#function
+  glCombinerOutputNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13359,13365 ----
+  .globl glCombinerOutputNV
+  .type glCombinerOutputNV,#function
+  glCombinerOutputNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13380,13386 ****
+  .globl glFinalCombinerInputNV
+  .type glFinalCombinerInputNV,#function
+  glFinalCombinerInputNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13380,13386 ----
+  .globl glFinalCombinerInputNV
+  .type glFinalCombinerInputNV,#function
+  glFinalCombinerInputNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13401,13407 ****
+  .globl glGetCombinerInputParameterfvNV
+  .type glGetCombinerInputParameterfvNV,#function
+  glGetCombinerInputParameterfvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13401,13407 ----
+  .globl glGetCombinerInputParameterfvNV
+  .type glGetCombinerInputParameterfvNV,#function
+  glGetCombinerInputParameterfvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13422,13428 ****
+  .globl glGetCombinerInputParameterivNV
+  .type glGetCombinerInputParameterivNV,#function
+  glGetCombinerInputParameterivNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13422,13428 ----
+  .globl glGetCombinerInputParameterivNV
+  .type glGetCombinerInputParameterivNV,#function
+  glGetCombinerInputParameterivNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13443,13449 ****
+  .globl glGetCombinerOutputParameterfvNV
+  .type glGetCombinerOutputParameterfvNV,#function
+  glGetCombinerOutputParameterfvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13443,13449 ----
+  .globl glGetCombinerOutputParameterfvNV
+  .type glGetCombinerOutputParameterfvNV,#function
+  glGetCombinerOutputParameterfvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13464,13470 ****
+  .globl glGetCombinerOutputParameterivNV
+  .type glGetCombinerOutputParameterivNV,#function
+  glGetCombinerOutputParameterivNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13464,13470 ----
+  .globl glGetCombinerOutputParameterivNV
+  .type glGetCombinerOutputParameterivNV,#function
+  glGetCombinerOutputParameterivNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13485,13491 ****
+  .globl glGetFinalCombinerInputParameterfvNV
+  .type glGetFinalCombinerInputParameterfvNV,#function
+  glGetFinalCombinerInputParameterfvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13485,13491 ----
+  .globl glGetFinalCombinerInputParameterfvNV
+  .type glGetFinalCombinerInputParameterfvNV,#function
+  glGetFinalCombinerInputParameterfvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13506,13512 ****
+  .globl glGetFinalCombinerInputParameterivNV
+  .type glGetFinalCombinerInputParameterivNV,#function
+  glGetFinalCombinerInputParameterivNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13506,13512 ----
+  .globl glGetFinalCombinerInputParameterivNV
+  .type glGetFinalCombinerInputParameterivNV,#function
+  glGetFinalCombinerInputParameterivNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13527,13533 ****
+  .globl glResizeBuffersMESA
+  .type glResizeBuffersMESA,#function
+  glResizeBuffersMESA:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13527,13533 ----
+  .globl glResizeBuffersMESA
+  .type glResizeBuffersMESA,#function
+  glResizeBuffersMESA:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13548,13554 ****
+  .globl glWindowPos2dMESA
+  .type glWindowPos2dMESA,#function
+  glWindowPos2dMESA:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13548,13554 ----
+  .globl glWindowPos2dMESA
+  .type glWindowPos2dMESA,#function
+  glWindowPos2dMESA:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13569,13575 ****
+  .globl glWindowPos2dvMESA
+  .type glWindowPos2dvMESA,#function
+  glWindowPos2dvMESA:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13569,13575 ----
+  .globl glWindowPos2dvMESA
+  .type glWindowPos2dvMESA,#function
+  glWindowPos2dvMESA:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13590,13596 ****
+  .globl glWindowPos2fMESA
+  .type glWindowPos2fMESA,#function
+  glWindowPos2fMESA:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13590,13596 ----
+  .globl glWindowPos2fMESA
+  .type glWindowPos2fMESA,#function
+  glWindowPos2fMESA:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13611,13617 ****
+  .globl glWindowPos2fvMESA
+  .type glWindowPos2fvMESA,#function
+  glWindowPos2fvMESA:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13611,13617 ----
+  .globl glWindowPos2fvMESA
+  .type glWindowPos2fvMESA,#function
+  glWindowPos2fvMESA:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13632,13638 ****
+  .globl glWindowPos2iMESA
+  .type glWindowPos2iMESA,#function
+  glWindowPos2iMESA:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13632,13638 ----
+  .globl glWindowPos2iMESA
+  .type glWindowPos2iMESA,#function
+  glWindowPos2iMESA:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13653,13659 ****
+  .globl glWindowPos2ivMESA
+  .type glWindowPos2ivMESA,#function
+  glWindowPos2ivMESA:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13653,13659 ----
+  .globl glWindowPos2ivMESA
+  .type glWindowPos2ivMESA,#function
+  glWindowPos2ivMESA:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13674,13680 ****
+  .globl glWindowPos2sMESA
+  .type glWindowPos2sMESA,#function
+  glWindowPos2sMESA:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13674,13680 ----
+  .globl glWindowPos2sMESA
+  .type glWindowPos2sMESA,#function
+  glWindowPos2sMESA:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13695,13701 ****
+  .globl glWindowPos2svMESA
+  .type glWindowPos2svMESA,#function
+  glWindowPos2svMESA:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13695,13701 ----
+  .globl glWindowPos2svMESA
+  .type glWindowPos2svMESA,#function
+  glWindowPos2svMESA:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13716,13722 ****
+  .globl glWindowPos3dMESA
+  .type glWindowPos3dMESA,#function
+  glWindowPos3dMESA:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13716,13722 ----
+  .globl glWindowPos3dMESA
+  .type glWindowPos3dMESA,#function
+  glWindowPos3dMESA:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13737,13743 ****
+  .globl glWindowPos3dvMESA
+  .type glWindowPos3dvMESA,#function
+  glWindowPos3dvMESA:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13737,13743 ----
+  .globl glWindowPos3dvMESA
+  .type glWindowPos3dvMESA,#function
+  glWindowPos3dvMESA:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13758,13764 ****
+  .globl glWindowPos3fMESA
+  .type glWindowPos3fMESA,#function
+  glWindowPos3fMESA:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13758,13764 ----
+  .globl glWindowPos3fMESA
+  .type glWindowPos3fMESA,#function
+  glWindowPos3fMESA:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13779,13785 ****
+  .globl glWindowPos3fvMESA
+  .type glWindowPos3fvMESA,#function
+  glWindowPos3fvMESA:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13779,13785 ----
+  .globl glWindowPos3fvMESA
+  .type glWindowPos3fvMESA,#function
+  glWindowPos3fvMESA:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13800,13806 ****
+  .globl glWindowPos3iMESA
+  .type glWindowPos3iMESA,#function
+  glWindowPos3iMESA:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13800,13806 ----
+  .globl glWindowPos3iMESA
+  .type glWindowPos3iMESA,#function
+  glWindowPos3iMESA:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13821,13827 ****
+  .globl glWindowPos3ivMESA
+  .type glWindowPos3ivMESA,#function
+  glWindowPos3ivMESA:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13821,13827 ----
+  .globl glWindowPos3ivMESA
+  .type glWindowPos3ivMESA,#function
+  glWindowPos3ivMESA:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13842,13848 ****
+  .globl glWindowPos3sMESA
+  .type glWindowPos3sMESA,#function
+  glWindowPos3sMESA:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13842,13848 ----
+  .globl glWindowPos3sMESA
+  .type glWindowPos3sMESA,#function
+  glWindowPos3sMESA:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13863,13869 ****
+  .globl glWindowPos3svMESA
+  .type glWindowPos3svMESA,#function
+  glWindowPos3svMESA:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13863,13869 ----
+  .globl glWindowPos3svMESA
+  .type glWindowPos3svMESA,#function
+  glWindowPos3svMESA:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13884,13890 ****
+  .globl glWindowPos4dMESA
+  .type glWindowPos4dMESA,#function
+  glWindowPos4dMESA:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13884,13890 ----
+  .globl glWindowPos4dMESA
+  .type glWindowPos4dMESA,#function
+  glWindowPos4dMESA:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13905,13911 ****
+  .globl glWindowPos4dvMESA
+  .type glWindowPos4dvMESA,#function
+  glWindowPos4dvMESA:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13905,13911 ----
+  .globl glWindowPos4dvMESA
+  .type glWindowPos4dvMESA,#function
+  glWindowPos4dvMESA:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13926,13932 ****
+  .globl glWindowPos4fMESA
+  .type glWindowPos4fMESA,#function
+  glWindowPos4fMESA:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13926,13932 ----
+  .globl glWindowPos4fMESA
+  .type glWindowPos4fMESA,#function
+  glWindowPos4fMESA:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13947,13953 ****
+  .globl glWindowPos4fvMESA
+  .type glWindowPos4fvMESA,#function
+  glWindowPos4fvMESA:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13947,13953 ----
+  .globl glWindowPos4fvMESA
+  .type glWindowPos4fvMESA,#function
+  glWindowPos4fvMESA:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13968,13974 ****
+  .globl glWindowPos4iMESA
+  .type glWindowPos4iMESA,#function
+  glWindowPos4iMESA:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13968,13974 ----
+  .globl glWindowPos4iMESA
+  .type glWindowPos4iMESA,#function
+  glWindowPos4iMESA:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 13989,13995 ****
+  .globl glWindowPos4ivMESA
+  .type glWindowPos4ivMESA,#function
+  glWindowPos4ivMESA:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 13989,13995 ----
+  .globl glWindowPos4ivMESA
+  .type glWindowPos4ivMESA,#function
+  glWindowPos4ivMESA:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14010,14016 ****
+  .globl glWindowPos4sMESA
+  .type glWindowPos4sMESA,#function
+  glWindowPos4sMESA:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14010,14016 ----
+  .globl glWindowPos4sMESA
+  .type glWindowPos4sMESA,#function
+  glWindowPos4sMESA:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14031,14037 ****
+  .globl glWindowPos4svMESA
+  .type glWindowPos4svMESA,#function
+  glWindowPos4svMESA:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14031,14037 ----
+  .globl glWindowPos4svMESA
+  .type glWindowPos4svMESA,#function
+  glWindowPos4svMESA:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14052,14058 ****
+  .globl glMultiModeDrawArraysIBM
+  .type glMultiModeDrawArraysIBM,#function
+  glMultiModeDrawArraysIBM:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14052,14058 ----
+  .globl glMultiModeDrawArraysIBM
+  .type glMultiModeDrawArraysIBM,#function
+  glMultiModeDrawArraysIBM:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14073,14079 ****
+  .globl glMultiModeDrawElementsIBM
+  .type glMultiModeDrawElementsIBM,#function
+  glMultiModeDrawElementsIBM:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14073,14079 ----
+  .globl glMultiModeDrawElementsIBM
+  .type glMultiModeDrawElementsIBM,#function
+  glMultiModeDrawElementsIBM:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14094,14100 ****
+  .globl glTbufferMask3DFX
+  .type glTbufferMask3DFX,#function
+  glTbufferMask3DFX:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14094,14100 ----
+  .globl glTbufferMask3DFX
+  .type glTbufferMask3DFX,#function
+  glTbufferMask3DFX:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14115,14121 ****
+  .globl glSampleMaskEXT
+  .type glSampleMaskEXT,#function
+  glSampleMaskEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14115,14121 ----
+  .globl glSampleMaskEXT
+  .type glSampleMaskEXT,#function
+  glSampleMaskEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14136,14142 ****
+  .globl glSamplePatternEXT
+  .type glSamplePatternEXT,#function
+  glSamplePatternEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14136,14142 ----
+  .globl glSamplePatternEXT
+  .type glSamplePatternEXT,#function
+  glSamplePatternEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14157,14163 ****
+  .globl glWindowPos2dARB
+  .type glWindowPos2dARB,#function
+  glWindowPos2dARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14157,14163 ----
+  .globl glWindowPos2dARB
+  .type glWindowPos2dARB,#function
+  glWindowPos2dARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14178,14184 ****
+  .globl glWindowPos2fARB
+  .type glWindowPos2fARB,#function
+  glWindowPos2fARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14178,14184 ----
+  .globl glWindowPos2fARB
+  .type glWindowPos2fARB,#function
+  glWindowPos2fARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14199,14205 ****
+  .globl glWindowPos2iARB
+  .type glWindowPos2iARB,#function
+  glWindowPos2iARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14199,14205 ----
+  .globl glWindowPos2iARB
+  .type glWindowPos2iARB,#function
+  glWindowPos2iARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14220,14226 ****
+  .globl glWindowPos2sARB
+  .type glWindowPos2sARB,#function
+  glWindowPos2sARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14220,14226 ----
+  .globl glWindowPos2sARB
+  .type glWindowPos2sARB,#function
+  glWindowPos2sARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14241,14247 ****
+  .globl glWindowPos2dvARB
+  .type glWindowPos2dvARB,#function
+  glWindowPos2dvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14241,14247 ----
+  .globl glWindowPos2dvARB
+  .type glWindowPos2dvARB,#function
+  glWindowPos2dvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14262,14268 ****
+  .globl glWindowPos2fvARB
+  .type glWindowPos2fvARB,#function
+  glWindowPos2fvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14262,14268 ----
+  .globl glWindowPos2fvARB
+  .type glWindowPos2fvARB,#function
+  glWindowPos2fvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14283,14289 ****
+  .globl glWindowPos2ivARB
+  .type glWindowPos2ivARB,#function
+  glWindowPos2ivARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14283,14289 ----
+  .globl glWindowPos2ivARB
+  .type glWindowPos2ivARB,#function
+  glWindowPos2ivARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14304,14310 ****
+  .globl glWindowPos2svARB
+  .type glWindowPos2svARB,#function
+  glWindowPos2svARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14304,14310 ----
+  .globl glWindowPos2svARB
+  .type glWindowPos2svARB,#function
+  glWindowPos2svARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14325,14331 ****
+  .globl glWindowPos3dARB
+  .type glWindowPos3dARB,#function
+  glWindowPos3dARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14325,14331 ----
+  .globl glWindowPos3dARB
+  .type glWindowPos3dARB,#function
+  glWindowPos3dARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14346,14352 ****
+  .globl glWindowPos3fARB
+  .type glWindowPos3fARB,#function
+  glWindowPos3fARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14346,14352 ----
+  .globl glWindowPos3fARB
+  .type glWindowPos3fARB,#function
+  glWindowPos3fARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14367,14373 ****
+  .globl glWindowPos3iARB
+  .type glWindowPos3iARB,#function
+  glWindowPos3iARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14367,14373 ----
+  .globl glWindowPos3iARB
+  .type glWindowPos3iARB,#function
+  glWindowPos3iARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14388,14394 ****
+  .globl glWindowPos3sARB
+  .type glWindowPos3sARB,#function
+  glWindowPos3sARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14388,14394 ----
+  .globl glWindowPos3sARB
+  .type glWindowPos3sARB,#function
+  glWindowPos3sARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14409,14415 ****
+  .globl glWindowPos3dvARB
+  .type glWindowPos3dvARB,#function
+  glWindowPos3dvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14409,14415 ----
+  .globl glWindowPos3dvARB
+  .type glWindowPos3dvARB,#function
+  glWindowPos3dvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14430,14436 ****
+  .globl glWindowPos3fvARB
+  .type glWindowPos3fvARB,#function
+  glWindowPos3fvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14430,14436 ----
+  .globl glWindowPos3fvARB
+  .type glWindowPos3fvARB,#function
+  glWindowPos3fvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14451,14457 ****
+  .globl glWindowPos3ivARB
+  .type glWindowPos3ivARB,#function
+  glWindowPos3ivARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14451,14457 ----
+  .globl glWindowPos3ivARB
+  .type glWindowPos3ivARB,#function
+  glWindowPos3ivARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14472,14478 ****
+  .globl glWindowPos3svARB
+  .type glWindowPos3svARB,#function
+  glWindowPos3svARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14472,14478 ----
+  .globl glWindowPos3svARB
+  .type glWindowPos3svARB,#function
+  glWindowPos3svARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14493,14499 ****
+  .globl glAreProgramsResidentNV
+  .type glAreProgramsResidentNV,#function
+  glAreProgramsResidentNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14493,14499 ----
+  .globl glAreProgramsResidentNV
+  .type glAreProgramsResidentNV,#function
+  glAreProgramsResidentNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14514,14520 ****
+  .globl glBindProgramNV
+  .type glBindProgramNV,#function
+  glBindProgramNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14514,14520 ----
+  .globl glBindProgramNV
+  .type glBindProgramNV,#function
+  glBindProgramNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14535,14541 ****
+  .globl glDeleteProgramsNV
+  .type glDeleteProgramsNV,#function
+  glDeleteProgramsNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14535,14541 ----
+  .globl glDeleteProgramsNV
+  .type glDeleteProgramsNV,#function
+  glDeleteProgramsNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14556,14562 ****
+  .globl glExecuteProgramNV
+  .type glExecuteProgramNV,#function
+  glExecuteProgramNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14556,14562 ----
+  .globl glExecuteProgramNV
+  .type glExecuteProgramNV,#function
+  glExecuteProgramNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14577,14583 ****
+  .globl glGenProgramsNV
+  .type glGenProgramsNV,#function
+  glGenProgramsNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14577,14583 ----
+  .globl glGenProgramsNV
+  .type glGenProgramsNV,#function
+  glGenProgramsNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14598,14604 ****
+  .globl glGetProgramParameterdvNV
+  .type glGetProgramParameterdvNV,#function
+  glGetProgramParameterdvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14598,14604 ----
+  .globl glGetProgramParameterdvNV
+  .type glGetProgramParameterdvNV,#function
+  glGetProgramParameterdvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14619,14625 ****
+  .globl glGetProgramParameterfvNV
+  .type glGetProgramParameterfvNV,#function
+  glGetProgramParameterfvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14619,14625 ----
+  .globl glGetProgramParameterfvNV
+  .type glGetProgramParameterfvNV,#function
+  glGetProgramParameterfvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14640,14646 ****
+  .globl glGetProgramivNV
+  .type glGetProgramivNV,#function
+  glGetProgramivNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14640,14646 ----
+  .globl glGetProgramivNV
+  .type glGetProgramivNV,#function
+  glGetProgramivNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14661,14667 ****
+  .globl glGetProgramStringNV
+  .type glGetProgramStringNV,#function
+  glGetProgramStringNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14661,14667 ----
+  .globl glGetProgramStringNV
+  .type glGetProgramStringNV,#function
+  glGetProgramStringNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14682,14688 ****
+  .globl glGetTrackMatrixivNV
+  .type glGetTrackMatrixivNV,#function
+  glGetTrackMatrixivNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14682,14688 ----
+  .globl glGetTrackMatrixivNV
+  .type glGetTrackMatrixivNV,#function
+  glGetTrackMatrixivNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14703,14709 ****
+  .globl glGetVertexAttribdvNV
+  .type glGetVertexAttribdvNV,#function
+  glGetVertexAttribdvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14703,14709 ----
+  .globl glGetVertexAttribdvNV
+  .type glGetVertexAttribdvNV,#function
+  glGetVertexAttribdvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14724,14730 ****
+  .globl glGetVertexAttribfvNV
+  .type glGetVertexAttribfvNV,#function
+  glGetVertexAttribfvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14724,14730 ----
+  .globl glGetVertexAttribfvNV
+  .type glGetVertexAttribfvNV,#function
+  glGetVertexAttribfvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14745,14751 ****
+  .globl glGetVertexAttribivNV
+  .type glGetVertexAttribivNV,#function
+  glGetVertexAttribivNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14745,14751 ----
+  .globl glGetVertexAttribivNV
+  .type glGetVertexAttribivNV,#function
+  glGetVertexAttribivNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14766,14772 ****
+  .globl glGetVertexAttribPointervNV
+  .type glGetVertexAttribPointervNV,#function
+  glGetVertexAttribPointervNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14766,14772 ----
+  .globl glGetVertexAttribPointervNV
+  .type glGetVertexAttribPointervNV,#function
+  glGetVertexAttribPointervNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14787,14793 ****
+  .globl glIsProgramNV
+  .type glIsProgramNV,#function
+  glIsProgramNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14787,14793 ----
+  .globl glIsProgramNV
+  .type glIsProgramNV,#function
+  glIsProgramNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14808,14814 ****
+  .globl glLoadProgramNV
+  .type glLoadProgramNV,#function
+  glLoadProgramNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14808,14814 ----
+  .globl glLoadProgramNV
+  .type glLoadProgramNV,#function
+  glLoadProgramNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14829,14835 ****
+  .globl glProgramParameter4dNV
+  .type glProgramParameter4dNV,#function
+  glProgramParameter4dNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14829,14835 ----
+  .globl glProgramParameter4dNV
+  .type glProgramParameter4dNV,#function
+  glProgramParameter4dNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14850,14856 ****
+  .globl glProgramParameter4dvNV
+  .type glProgramParameter4dvNV,#function
+  glProgramParameter4dvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14850,14856 ----
+  .globl glProgramParameter4dvNV
+  .type glProgramParameter4dvNV,#function
+  glProgramParameter4dvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14871,14877 ****
+  .globl glProgramParameter4fNV
+  .type glProgramParameter4fNV,#function
+  glProgramParameter4fNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14871,14877 ----
+  .globl glProgramParameter4fNV
+  .type glProgramParameter4fNV,#function
+  glProgramParameter4fNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14892,14898 ****
+  .globl glProgramParameter4fvNV
+  .type glProgramParameter4fvNV,#function
+  glProgramParameter4fvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14892,14898 ----
+  .globl glProgramParameter4fvNV
+  .type glProgramParameter4fvNV,#function
+  glProgramParameter4fvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14913,14919 ****
+  .globl glProgramParameters4dvNV
+  .type glProgramParameters4dvNV,#function
+  glProgramParameters4dvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14913,14919 ----
+  .globl glProgramParameters4dvNV
+  .type glProgramParameters4dvNV,#function
+  glProgramParameters4dvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14934,14940 ****
+  .globl glProgramParameters4fvNV
+  .type glProgramParameters4fvNV,#function
+  glProgramParameters4fvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14934,14940 ----
+  .globl glProgramParameters4fvNV
+  .type glProgramParameters4fvNV,#function
+  glProgramParameters4fvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14955,14961 ****
+  .globl glRequestResidentProgramsNV
+  .type glRequestResidentProgramsNV,#function
+  glRequestResidentProgramsNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14955,14961 ----
+  .globl glRequestResidentProgramsNV
+  .type glRequestResidentProgramsNV,#function
+  glRequestResidentProgramsNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14976,14982 ****
+  .globl glTrackMatrixNV
+  .type glTrackMatrixNV,#function
+  glTrackMatrixNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14976,14982 ----
+  .globl glTrackMatrixNV
+  .type glTrackMatrixNV,#function
+  glTrackMatrixNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 14997,15003 ****
+  .globl glVertexAttribPointerNV
+  .type glVertexAttribPointerNV,#function
+  glVertexAttribPointerNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 14997,15003 ----
+  .globl glVertexAttribPointerNV
+  .type glVertexAttribPointerNV,#function
+  glVertexAttribPointerNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15018,15024 ****
+  .globl glVertexAttrib1dNV
+  .type glVertexAttrib1dNV,#function
+  glVertexAttrib1dNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15018,15024 ----
+  .globl glVertexAttrib1dNV
+  .type glVertexAttrib1dNV,#function
+  glVertexAttrib1dNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15039,15045 ****
+  .globl glVertexAttrib1dvNV
+  .type glVertexAttrib1dvNV,#function
+  glVertexAttrib1dvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15039,15045 ----
+  .globl glVertexAttrib1dvNV
+  .type glVertexAttrib1dvNV,#function
+  glVertexAttrib1dvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15060,15066 ****
+  .globl glVertexAttrib1fNV
+  .type glVertexAttrib1fNV,#function
+  glVertexAttrib1fNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15060,15066 ----
+  .globl glVertexAttrib1fNV
+  .type glVertexAttrib1fNV,#function
+  glVertexAttrib1fNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15081,15087 ****
+  .globl glVertexAttrib1fvNV
+  .type glVertexAttrib1fvNV,#function
+  glVertexAttrib1fvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15081,15087 ----
+  .globl glVertexAttrib1fvNV
+  .type glVertexAttrib1fvNV,#function
+  glVertexAttrib1fvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15102,15108 ****
+  .globl glVertexAttrib1sNV
+  .type glVertexAttrib1sNV,#function
+  glVertexAttrib1sNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15102,15108 ----
+  .globl glVertexAttrib1sNV
+  .type glVertexAttrib1sNV,#function
+  glVertexAttrib1sNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15123,15129 ****
+  .globl glVertexAttrib1svNV
+  .type glVertexAttrib1svNV,#function
+  glVertexAttrib1svNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15123,15129 ----
+  .globl glVertexAttrib1svNV
+  .type glVertexAttrib1svNV,#function
+  glVertexAttrib1svNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15144,15150 ****
+  .globl glVertexAttrib2dNV
+  .type glVertexAttrib2dNV,#function
+  glVertexAttrib2dNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15144,15150 ----
+  .globl glVertexAttrib2dNV
+  .type glVertexAttrib2dNV,#function
+  glVertexAttrib2dNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15165,15171 ****
+  .globl glVertexAttrib2dvNV
+  .type glVertexAttrib2dvNV,#function
+  glVertexAttrib2dvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15165,15171 ----
+  .globl glVertexAttrib2dvNV
+  .type glVertexAttrib2dvNV,#function
+  glVertexAttrib2dvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15186,15192 ****
+  .globl glVertexAttrib2fNV
+  .type glVertexAttrib2fNV,#function
+  glVertexAttrib2fNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15186,15192 ----
+  .globl glVertexAttrib2fNV
+  .type glVertexAttrib2fNV,#function
+  glVertexAttrib2fNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15207,15213 ****
+  .globl glVertexAttrib2fvNV
+  .type glVertexAttrib2fvNV,#function
+  glVertexAttrib2fvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15207,15213 ----
+  .globl glVertexAttrib2fvNV
+  .type glVertexAttrib2fvNV,#function
+  glVertexAttrib2fvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15228,15234 ****
+  .globl glVertexAttrib2sNV
+  .type glVertexAttrib2sNV,#function
+  glVertexAttrib2sNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15228,15234 ----
+  .globl glVertexAttrib2sNV
+  .type glVertexAttrib2sNV,#function
+  glVertexAttrib2sNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15249,15255 ****
+  .globl glVertexAttrib2svNV
+  .type glVertexAttrib2svNV,#function
+  glVertexAttrib2svNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15249,15255 ----
+  .globl glVertexAttrib2svNV
+  .type glVertexAttrib2svNV,#function
+  glVertexAttrib2svNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15270,15276 ****
+  .globl glVertexAttrib3dNV
+  .type glVertexAttrib3dNV,#function
+  glVertexAttrib3dNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15270,15276 ----
+  .globl glVertexAttrib3dNV
+  .type glVertexAttrib3dNV,#function
+  glVertexAttrib3dNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15291,15297 ****
+  .globl glVertexAttrib3dvNV
+  .type glVertexAttrib3dvNV,#function
+  glVertexAttrib3dvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15291,15297 ----
+  .globl glVertexAttrib3dvNV
+  .type glVertexAttrib3dvNV,#function
+  glVertexAttrib3dvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15312,15318 ****
+  .globl glVertexAttrib3fNV
+  .type glVertexAttrib3fNV,#function
+  glVertexAttrib3fNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15312,15318 ----
+  .globl glVertexAttrib3fNV
+  .type glVertexAttrib3fNV,#function
+  glVertexAttrib3fNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15333,15339 ****
+  .globl glVertexAttrib3fvNV
+  .type glVertexAttrib3fvNV,#function
+  glVertexAttrib3fvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15333,15339 ----
+  .globl glVertexAttrib3fvNV
+  .type glVertexAttrib3fvNV,#function
+  glVertexAttrib3fvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15354,15360 ****
+  .globl glVertexAttrib3sNV
+  .type glVertexAttrib3sNV,#function
+  glVertexAttrib3sNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15354,15360 ----
+  .globl glVertexAttrib3sNV
+  .type glVertexAttrib3sNV,#function
+  glVertexAttrib3sNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15375,15381 ****
+  .globl glVertexAttrib3svNV
+  .type glVertexAttrib3svNV,#function
+  glVertexAttrib3svNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15375,15381 ----
+  .globl glVertexAttrib3svNV
+  .type glVertexAttrib3svNV,#function
+  glVertexAttrib3svNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15396,15402 ****
+  .globl glVertexAttrib4dNV
+  .type glVertexAttrib4dNV,#function
+  glVertexAttrib4dNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15396,15402 ----
+  .globl glVertexAttrib4dNV
+  .type glVertexAttrib4dNV,#function
+  glVertexAttrib4dNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15417,15423 ****
+  .globl glVertexAttrib4dvNV
+  .type glVertexAttrib4dvNV,#function
+  glVertexAttrib4dvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15417,15423 ----
+  .globl glVertexAttrib4dvNV
+  .type glVertexAttrib4dvNV,#function
+  glVertexAttrib4dvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15438,15444 ****
+  .globl glVertexAttrib4fNV
+  .type glVertexAttrib4fNV,#function
+  glVertexAttrib4fNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15438,15444 ----
+  .globl glVertexAttrib4fNV
+  .type glVertexAttrib4fNV,#function
+  glVertexAttrib4fNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15459,15465 ****
+  .globl glVertexAttrib4fvNV
+  .type glVertexAttrib4fvNV,#function
+  glVertexAttrib4fvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15459,15465 ----
+  .globl glVertexAttrib4fvNV
+  .type glVertexAttrib4fvNV,#function
+  glVertexAttrib4fvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15480,15486 ****
+  .globl glVertexAttrib4sNV
+  .type glVertexAttrib4sNV,#function
+  glVertexAttrib4sNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15480,15486 ----
+  .globl glVertexAttrib4sNV
+  .type glVertexAttrib4sNV,#function
+  glVertexAttrib4sNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15501,15507 ****
+  .globl glVertexAttrib4svNV
+  .type glVertexAttrib4svNV,#function
+  glVertexAttrib4svNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15501,15507 ----
+  .globl glVertexAttrib4svNV
+  .type glVertexAttrib4svNV,#function
+  glVertexAttrib4svNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15522,15528 ****
+  .globl glVertexAttrib4ubNV
+  .type glVertexAttrib4ubNV,#function
+  glVertexAttrib4ubNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15522,15528 ----
+  .globl glVertexAttrib4ubNV
+  .type glVertexAttrib4ubNV,#function
+  glVertexAttrib4ubNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15543,15549 ****
+  .globl glVertexAttrib4ubvNV
+  .type glVertexAttrib4ubvNV,#function
+  glVertexAttrib4ubvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15543,15549 ----
+  .globl glVertexAttrib4ubvNV
+  .type glVertexAttrib4ubvNV,#function
+  glVertexAttrib4ubvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15564,15570 ****
+  .globl glVertexAttribs1dvNV
+  .type glVertexAttribs1dvNV,#function
+  glVertexAttribs1dvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15564,15570 ----
+  .globl glVertexAttribs1dvNV
+  .type glVertexAttribs1dvNV,#function
+  glVertexAttribs1dvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15585,15591 ****
+  .globl glVertexAttribs1fvNV
+  .type glVertexAttribs1fvNV,#function
+  glVertexAttribs1fvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15585,15591 ----
+  .globl glVertexAttribs1fvNV
+  .type glVertexAttribs1fvNV,#function
+  glVertexAttribs1fvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15606,15612 ****
+  .globl glVertexAttribs1svNV
+  .type glVertexAttribs1svNV,#function
+  glVertexAttribs1svNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15606,15612 ----
+  .globl glVertexAttribs1svNV
+  .type glVertexAttribs1svNV,#function
+  glVertexAttribs1svNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15627,15633 ****
+  .globl glVertexAttribs2dvNV
+  .type glVertexAttribs2dvNV,#function
+  glVertexAttribs2dvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15627,15633 ----
+  .globl glVertexAttribs2dvNV
+  .type glVertexAttribs2dvNV,#function
+  glVertexAttribs2dvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15648,15654 ****
+  .globl glVertexAttribs2fvNV
+  .type glVertexAttribs2fvNV,#function
+  glVertexAttribs2fvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15648,15654 ----
+  .globl glVertexAttribs2fvNV
+  .type glVertexAttribs2fvNV,#function
+  glVertexAttribs2fvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15669,15675 ****
+  .globl glVertexAttribs2svNV
+  .type glVertexAttribs2svNV,#function
+  glVertexAttribs2svNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15669,15675 ----
+  .globl glVertexAttribs2svNV
+  .type glVertexAttribs2svNV,#function
+  glVertexAttribs2svNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15690,15696 ****
+  .globl glVertexAttribs3dvNV
+  .type glVertexAttribs3dvNV,#function
+  glVertexAttribs3dvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15690,15696 ----
+  .globl glVertexAttribs3dvNV
+  .type glVertexAttribs3dvNV,#function
+  glVertexAttribs3dvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15711,15717 ****
+  .globl glVertexAttribs3fvNV
+  .type glVertexAttribs3fvNV,#function
+  glVertexAttribs3fvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15711,15717 ----
+  .globl glVertexAttribs3fvNV
+  .type glVertexAttribs3fvNV,#function
+  glVertexAttribs3fvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15732,15738 ****
+  .globl glVertexAttribs3svNV
+  .type glVertexAttribs3svNV,#function
+  glVertexAttribs3svNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15732,15738 ----
+  .globl glVertexAttribs3svNV
+  .type glVertexAttribs3svNV,#function
+  glVertexAttribs3svNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15753,15759 ****
+  .globl glVertexAttribs4dvNV
+  .type glVertexAttribs4dvNV,#function
+  glVertexAttribs4dvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15753,15759 ----
+  .globl glVertexAttribs4dvNV
+  .type glVertexAttribs4dvNV,#function
+  glVertexAttribs4dvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15774,15780 ****
+  .globl glVertexAttribs4fvNV
+  .type glVertexAttribs4fvNV,#function
+  glVertexAttribs4fvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15774,15780 ----
+  .globl glVertexAttribs4fvNV
+  .type glVertexAttribs4fvNV,#function
+  glVertexAttribs4fvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15795,15801 ****
+  .globl glVertexAttribs4svNV
+  .type glVertexAttribs4svNV,#function
+  glVertexAttribs4svNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15795,15801 ----
+  .globl glVertexAttribs4svNV
+  .type glVertexAttribs4svNV,#function
+  glVertexAttribs4svNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15816,15822 ****
+  .globl glVertexAttribs4ubvNV
+  .type glVertexAttribs4ubvNV,#function
+  glVertexAttribs4ubvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15816,15822 ----
+  .globl glVertexAttribs4ubvNV
+  .type glVertexAttribs4ubvNV,#function
+  glVertexAttribs4ubvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15837,15843 ****
+  .globl glPointParameteriNV
+  .type glPointParameteriNV,#function
+  glPointParameteriNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15837,15843 ----
+  .globl glPointParameteriNV
+  .type glPointParameteriNV,#function
+  glPointParameteriNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15858,15864 ****
+  .globl glPointParameterivNV
+  .type glPointParameterivNV,#function
+  glPointParameterivNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15858,15864 ----
+  .globl glPointParameterivNV
+  .type glPointParameterivNV,#function
+  glPointParameterivNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15879,15885 ****
+  .globl glBlendFuncSeparate
+  .type glBlendFuncSeparate,#function
+  glBlendFuncSeparate:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15879,15885 ----
+  .globl glBlendFuncSeparate
+  .type glBlendFuncSeparate,#function
+  glBlendFuncSeparate:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15900,15906 ****
+  .globl glFogCoordf
+  .type glFogCoordf,#function
+  glFogCoordf:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15900,15906 ----
+  .globl glFogCoordf
+  .type glFogCoordf,#function
+  glFogCoordf:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15921,15927 ****
+  .globl glFogCoordfv
+  .type glFogCoordfv,#function
+  glFogCoordfv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15921,15927 ----
+  .globl glFogCoordfv
+  .type glFogCoordfv,#function
+  glFogCoordfv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15942,15948 ****
+  .globl glFogCoordd
+  .type glFogCoordd,#function
+  glFogCoordd:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15942,15948 ----
+  .globl glFogCoordd
+  .type glFogCoordd,#function
+  glFogCoordd:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15963,15969 ****
+  .globl glFogCoorddv
+  .type glFogCoorddv,#function
+  glFogCoorddv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15963,15969 ----
+  .globl glFogCoorddv
+  .type glFogCoorddv,#function
+  glFogCoorddv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 15984,15990 ****
+  .globl glFogCoordPointer
+  .type glFogCoordPointer,#function
+  glFogCoordPointer:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 15984,15990 ----
+  .globl glFogCoordPointer
+  .type glFogCoordPointer,#function
+  glFogCoordPointer:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16005,16011 ****
+  .globl glMultiDrawArrays
+  .type glMultiDrawArrays,#function
+  glMultiDrawArrays:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16005,16011 ----
+  .globl glMultiDrawArrays
+  .type glMultiDrawArrays,#function
+  glMultiDrawArrays:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16026,16032 ****
+  .globl glMultiDrawElements
+  .type glMultiDrawElements,#function
+  glMultiDrawElements:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16026,16032 ----
+  .globl glMultiDrawElements
+  .type glMultiDrawElements,#function
+  glMultiDrawElements:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16047,16053 ****
+  .globl glPointParameterf
+  .type glPointParameterf,#function
+  glPointParameterf:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16047,16053 ----
+  .globl glPointParameterf
+  .type glPointParameterf,#function
+  glPointParameterf:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16068,16074 ****
+  .globl glPointParameterfv
+  .type glPointParameterfv,#function
+  glPointParameterfv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16068,16074 ----
+  .globl glPointParameterfv
+  .type glPointParameterfv,#function
+  glPointParameterfv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16089,16095 ****
+  .globl glPointParameteri
+  .type glPointParameteri,#function
+  glPointParameteri:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16089,16095 ----
+  .globl glPointParameteri
+  .type glPointParameteri,#function
+  glPointParameteri:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16110,16116 ****
+  .globl glPointParameteriv
+  .type glPointParameteriv,#function
+  glPointParameteriv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16110,16116 ----
+  .globl glPointParameteriv
+  .type glPointParameteriv,#function
+  glPointParameteriv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16131,16137 ****
+  .globl glSecondaryColor3b
+  .type glSecondaryColor3b,#function
+  glSecondaryColor3b:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16131,16137 ----
+  .globl glSecondaryColor3b
+  .type glSecondaryColor3b,#function
+  glSecondaryColor3b:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16152,16158 ****
+  .globl glSecondaryColor3bv
+  .type glSecondaryColor3bv,#function
+  glSecondaryColor3bv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16152,16158 ----
+  .globl glSecondaryColor3bv
+  .type glSecondaryColor3bv,#function
+  glSecondaryColor3bv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16173,16179 ****
+  .globl glSecondaryColor3d
+  .type glSecondaryColor3d,#function
+  glSecondaryColor3d:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16173,16179 ----
+  .globl glSecondaryColor3d
+  .type glSecondaryColor3d,#function
+  glSecondaryColor3d:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16194,16200 ****
+  .globl glSecondaryColor3dv
+  .type glSecondaryColor3dv,#function
+  glSecondaryColor3dv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16194,16200 ----
+  .globl glSecondaryColor3dv
+  .type glSecondaryColor3dv,#function
+  glSecondaryColor3dv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16215,16221 ****
+  .globl glSecondaryColor3f
+  .type glSecondaryColor3f,#function
+  glSecondaryColor3f:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16215,16221 ----
+  .globl glSecondaryColor3f
+  .type glSecondaryColor3f,#function
+  glSecondaryColor3f:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16236,16242 ****
+  .globl glSecondaryColor3fv
+  .type glSecondaryColor3fv,#function
+  glSecondaryColor3fv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16236,16242 ----
+  .globl glSecondaryColor3fv
+  .type glSecondaryColor3fv,#function
+  glSecondaryColor3fv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16257,16263 ****
+  .globl glSecondaryColor3i
+  .type glSecondaryColor3i,#function
+  glSecondaryColor3i:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16257,16263 ----
+  .globl glSecondaryColor3i
+  .type glSecondaryColor3i,#function
+  glSecondaryColor3i:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16278,16284 ****
+  .globl glSecondaryColor3iv
+  .type glSecondaryColor3iv,#function
+  glSecondaryColor3iv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16278,16284 ----
+  .globl glSecondaryColor3iv
+  .type glSecondaryColor3iv,#function
+  glSecondaryColor3iv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16299,16305 ****
+  .globl glSecondaryColor3s
+  .type glSecondaryColor3s,#function
+  glSecondaryColor3s:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16299,16305 ----
+  .globl glSecondaryColor3s
+  .type glSecondaryColor3s,#function
+  glSecondaryColor3s:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16320,16326 ****
+  .globl glSecondaryColor3sv
+  .type glSecondaryColor3sv,#function
+  glSecondaryColor3sv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16320,16326 ----
+  .globl glSecondaryColor3sv
+  .type glSecondaryColor3sv,#function
+  glSecondaryColor3sv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16341,16347 ****
+  .globl glSecondaryColor3ub
+  .type glSecondaryColor3ub,#function
+  glSecondaryColor3ub:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16341,16347 ----
+  .globl glSecondaryColor3ub
+  .type glSecondaryColor3ub,#function
+  glSecondaryColor3ub:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16362,16368 ****
+  .globl glSecondaryColor3ubv
+  .type glSecondaryColor3ubv,#function
+  glSecondaryColor3ubv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16362,16368 ----
+  .globl glSecondaryColor3ubv
+  .type glSecondaryColor3ubv,#function
+  glSecondaryColor3ubv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16383,16389 ****
+  .globl glSecondaryColor3ui
+  .type glSecondaryColor3ui,#function
+  glSecondaryColor3ui:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16383,16389 ----
+  .globl glSecondaryColor3ui
+  .type glSecondaryColor3ui,#function
+  glSecondaryColor3ui:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16404,16410 ****
+  .globl glSecondaryColor3uiv
+  .type glSecondaryColor3uiv,#function
+  glSecondaryColor3uiv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16404,16410 ----
+  .globl glSecondaryColor3uiv
+  .type glSecondaryColor3uiv,#function
+  glSecondaryColor3uiv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16425,16431 ****
+  .globl glSecondaryColor3us
+  .type glSecondaryColor3us,#function
+  glSecondaryColor3us:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16425,16431 ----
+  .globl glSecondaryColor3us
+  .type glSecondaryColor3us,#function
+  glSecondaryColor3us:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16446,16452 ****
+  .globl glSecondaryColor3usv
+  .type glSecondaryColor3usv,#function
+  glSecondaryColor3usv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16446,16452 ----
+  .globl glSecondaryColor3usv
+  .type glSecondaryColor3usv,#function
+  glSecondaryColor3usv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16467,16473 ****
+  .globl glSecondaryColorPointer
+  .type glSecondaryColorPointer,#function
+  glSecondaryColorPointer:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16467,16473 ----
+  .globl glSecondaryColorPointer
+  .type glSecondaryColorPointer,#function
+  glSecondaryColorPointer:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16488,16494 ****
+  .globl glWindowPos2d
+  .type glWindowPos2d,#function
+  glWindowPos2d:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16488,16494 ----
+  .globl glWindowPos2d
+  .type glWindowPos2d,#function
+  glWindowPos2d:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16509,16515 ****
+  .globl glWindowPos2dv
+  .type glWindowPos2dv,#function
+  glWindowPos2dv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16509,16515 ----
+  .globl glWindowPos2dv
+  .type glWindowPos2dv,#function
+  glWindowPos2dv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16530,16536 ****
+  .globl glWindowPos2f
+  .type glWindowPos2f,#function
+  glWindowPos2f:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16530,16536 ----
+  .globl glWindowPos2f
+  .type glWindowPos2f,#function
+  glWindowPos2f:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16551,16557 ****
+  .globl glWindowPos2fv
+  .type glWindowPos2fv,#function
+  glWindowPos2fv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16551,16557 ----
+  .globl glWindowPos2fv
+  .type glWindowPos2fv,#function
+  glWindowPos2fv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16572,16578 ****
+  .globl glWindowPos2i
+  .type glWindowPos2i,#function
+  glWindowPos2i:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16572,16578 ----
+  .globl glWindowPos2i
+  .type glWindowPos2i,#function
+  glWindowPos2i:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16593,16599 ****
+  .globl glWindowPos2iv
+  .type glWindowPos2iv,#function
+  glWindowPos2iv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16593,16599 ----
+  .globl glWindowPos2iv
+  .type glWindowPos2iv,#function
+  glWindowPos2iv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16614,16620 ****
+  .globl glWindowPos2s
+  .type glWindowPos2s,#function
+  glWindowPos2s:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16614,16620 ----
+  .globl glWindowPos2s
+  .type glWindowPos2s,#function
+  glWindowPos2s:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16635,16641 ****
+  .globl glWindowPos2sv
+  .type glWindowPos2sv,#function
+  glWindowPos2sv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16635,16641 ----
+  .globl glWindowPos2sv
+  .type glWindowPos2sv,#function
+  glWindowPos2sv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16656,16662 ****
+  .globl glWindowPos3d
+  .type glWindowPos3d,#function
+  glWindowPos3d:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16656,16662 ----
+  .globl glWindowPos3d
+  .type glWindowPos3d,#function
+  glWindowPos3d:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16677,16683 ****
+  .globl glWindowPos3dv
+  .type glWindowPos3dv,#function
+  glWindowPos3dv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16677,16683 ----
+  .globl glWindowPos3dv
+  .type glWindowPos3dv,#function
+  glWindowPos3dv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16698,16704 ****
+  .globl glWindowPos3f
+  .type glWindowPos3f,#function
+  glWindowPos3f:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16698,16704 ----
+  .globl glWindowPos3f
+  .type glWindowPos3f,#function
+  glWindowPos3f:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16719,16725 ****
+  .globl glWindowPos3fv
+  .type glWindowPos3fv,#function
+  glWindowPos3fv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16719,16725 ----
+  .globl glWindowPos3fv
+  .type glWindowPos3fv,#function
+  glWindowPos3fv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16740,16746 ****
+  .globl glWindowPos3i
+  .type glWindowPos3i,#function
+  glWindowPos3i:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16740,16746 ----
+  .globl glWindowPos3i
+  .type glWindowPos3i,#function
+  glWindowPos3i:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16761,16767 ****
+  .globl glWindowPos3iv
+  .type glWindowPos3iv,#function
+  glWindowPos3iv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16761,16767 ----
+  .globl glWindowPos3iv
+  .type glWindowPos3iv,#function
+  glWindowPos3iv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16782,16788 ****
+  .globl glWindowPos3s
+  .type glWindowPos3s,#function
+  glWindowPos3s:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16782,16788 ----
+  .globl glWindowPos3s
+  .type glWindowPos3s,#function
+  glWindowPos3s:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16803,16809 ****
+  .globl glWindowPos3sv
+  .type glWindowPos3sv,#function
+  glWindowPos3sv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16803,16809 ----
+  .globl glWindowPos3sv
+  .type glWindowPos3sv,#function
+  glWindowPos3sv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16824,16830 ****
+  .globl glActiveStencilFaceEXT
+  .type glActiveStencilFaceEXT,#function
+  glActiveStencilFaceEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16824,16830 ----
+  .globl glActiveStencilFaceEXT
+  .type glActiveStencilFaceEXT,#function
+  glActiveStencilFaceEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16845,16851 ****
+  .globl glDeleteFencesNV
+  .type glDeleteFencesNV,#function
+  glDeleteFencesNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16845,16851 ----
+  .globl glDeleteFencesNV
+  .type glDeleteFencesNV,#function
+  glDeleteFencesNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16866,16872 ****
+  .globl glGenFencesNV
+  .type glGenFencesNV,#function
+  glGenFencesNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16866,16872 ----
+  .globl glGenFencesNV
+  .type glGenFencesNV,#function
+  glGenFencesNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16887,16893 ****
+  .globl glIsFenceNV
+  .type glIsFenceNV,#function
+  glIsFenceNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16887,16893 ----
+  .globl glIsFenceNV
+  .type glIsFenceNV,#function
+  glIsFenceNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16908,16914 ****
+  .globl glTestFenceNV
+  .type glTestFenceNV,#function
+  glTestFenceNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16908,16914 ----
+  .globl glTestFenceNV
+  .type glTestFenceNV,#function
+  glTestFenceNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16929,16935 ****
+  .globl glGetFenceivNV
+  .type glGetFenceivNV,#function
+  glGetFenceivNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16929,16935 ----
+  .globl glGetFenceivNV
+  .type glGetFenceivNV,#function
+  glGetFenceivNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16950,16956 ****
+  .globl glFinishFenceNV
+  .type glFinishFenceNV,#function
+  glFinishFenceNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16950,16956 ----
+  .globl glFinishFenceNV
+  .type glFinishFenceNV,#function
+  glFinishFenceNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16971,16977 ****
+  .globl glSetFenceNV
+  .type glSetFenceNV,#function
+  glSetFenceNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16971,16977 ----
+  .globl glSetFenceNV
+  .type glSetFenceNV,#function
+  glSetFenceNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 16992,16998 ****
+  .globl glVertexAttrib1sARB
+  .type glVertexAttrib1sARB,#function
+  glVertexAttrib1sARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 16992,16998 ----
+  .globl glVertexAttrib1sARB
+  .type glVertexAttrib1sARB,#function
+  glVertexAttrib1sARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17013,17019 ****
+  .globl glVertexAttrib1fARB
+  .type glVertexAttrib1fARB,#function
+  glVertexAttrib1fARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17013,17019 ----
+  .globl glVertexAttrib1fARB
+  .type glVertexAttrib1fARB,#function
+  glVertexAttrib1fARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17034,17040 ****
+  .globl glVertexAttrib1dARB
+  .type glVertexAttrib1dARB,#function
+  glVertexAttrib1dARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17034,17040 ----
+  .globl glVertexAttrib1dARB
+  .type glVertexAttrib1dARB,#function
+  glVertexAttrib1dARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17055,17061 ****
+  .globl glVertexAttrib2sARB
+  .type glVertexAttrib2sARB,#function
+  glVertexAttrib2sARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17055,17061 ----
+  .globl glVertexAttrib2sARB
+  .type glVertexAttrib2sARB,#function
+  glVertexAttrib2sARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17076,17082 ****
+  .globl glVertexAttrib2fARB
+  .type glVertexAttrib2fARB,#function
+  glVertexAttrib2fARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17076,17082 ----
+  .globl glVertexAttrib2fARB
+  .type glVertexAttrib2fARB,#function
+  glVertexAttrib2fARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17097,17103 ****
+  .globl glVertexAttrib2dARB
+  .type glVertexAttrib2dARB,#function
+  glVertexAttrib2dARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17097,17103 ----
+  .globl glVertexAttrib2dARB
+  .type glVertexAttrib2dARB,#function
+  glVertexAttrib2dARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17118,17124 ****
+  .globl glVertexAttrib3sARB
+  .type glVertexAttrib3sARB,#function
+  glVertexAttrib3sARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17118,17124 ----
+  .globl glVertexAttrib3sARB
+  .type glVertexAttrib3sARB,#function
+  glVertexAttrib3sARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17139,17145 ****
+  .globl glVertexAttrib3fARB
+  .type glVertexAttrib3fARB,#function
+  glVertexAttrib3fARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17139,17145 ----
+  .globl glVertexAttrib3fARB
+  .type glVertexAttrib3fARB,#function
+  glVertexAttrib3fARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17160,17166 ****
+  .globl glVertexAttrib3dARB
+  .type glVertexAttrib3dARB,#function
+  glVertexAttrib3dARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17160,17166 ----
+  .globl glVertexAttrib3dARB
+  .type glVertexAttrib3dARB,#function
+  glVertexAttrib3dARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17181,17187 ****
+  .globl glVertexAttrib4sARB
+  .type glVertexAttrib4sARB,#function
+  glVertexAttrib4sARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17181,17187 ----
+  .globl glVertexAttrib4sARB
+  .type glVertexAttrib4sARB,#function
+  glVertexAttrib4sARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17202,17208 ****
+  .globl glVertexAttrib4fARB
+  .type glVertexAttrib4fARB,#function
+  glVertexAttrib4fARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17202,17208 ----
+  .globl glVertexAttrib4fARB
+  .type glVertexAttrib4fARB,#function
+  glVertexAttrib4fARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17223,17229 ****
+  .globl glVertexAttrib4dARB
+  .type glVertexAttrib4dARB,#function
+  glVertexAttrib4dARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17223,17229 ----
+  .globl glVertexAttrib4dARB
+  .type glVertexAttrib4dARB,#function
+  glVertexAttrib4dARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17244,17250 ****
+  .globl glVertexAttrib4NubARB
+  .type glVertexAttrib4NubARB,#function
+  glVertexAttrib4NubARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17244,17250 ----
+  .globl glVertexAttrib4NubARB
+  .type glVertexAttrib4NubARB,#function
+  glVertexAttrib4NubARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17265,17271 ****
+  .globl glVertexAttrib1svARB
+  .type glVertexAttrib1svARB,#function
+  glVertexAttrib1svARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17265,17271 ----
+  .globl glVertexAttrib1svARB
+  .type glVertexAttrib1svARB,#function
+  glVertexAttrib1svARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17286,17292 ****
+  .globl glVertexAttrib1fvARB
+  .type glVertexAttrib1fvARB,#function
+  glVertexAttrib1fvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17286,17292 ----
+  .globl glVertexAttrib1fvARB
+  .type glVertexAttrib1fvARB,#function
+  glVertexAttrib1fvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17307,17313 ****
+  .globl glVertexAttrib1dvARB
+  .type glVertexAttrib1dvARB,#function
+  glVertexAttrib1dvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17307,17313 ----
+  .globl glVertexAttrib1dvARB
+  .type glVertexAttrib1dvARB,#function
+  glVertexAttrib1dvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17328,17334 ****
+  .globl glVertexAttrib2svARB
+  .type glVertexAttrib2svARB,#function
+  glVertexAttrib2svARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17328,17334 ----
+  .globl glVertexAttrib2svARB
+  .type glVertexAttrib2svARB,#function
+  glVertexAttrib2svARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17349,17355 ****
+  .globl glVertexAttrib2fvARB
+  .type glVertexAttrib2fvARB,#function
+  glVertexAttrib2fvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17349,17355 ----
+  .globl glVertexAttrib2fvARB
+  .type glVertexAttrib2fvARB,#function
+  glVertexAttrib2fvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17370,17376 ****
+  .globl glVertexAttrib2dvARB
+  .type glVertexAttrib2dvARB,#function
+  glVertexAttrib2dvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17370,17376 ----
+  .globl glVertexAttrib2dvARB
+  .type glVertexAttrib2dvARB,#function
+  glVertexAttrib2dvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17391,17397 ****
+  .globl glVertexAttrib3svARB
+  .type glVertexAttrib3svARB,#function
+  glVertexAttrib3svARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17391,17397 ----
+  .globl glVertexAttrib3svARB
+  .type glVertexAttrib3svARB,#function
+  glVertexAttrib3svARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17412,17418 ****
+  .globl glVertexAttrib3fvARB
+  .type glVertexAttrib3fvARB,#function
+  glVertexAttrib3fvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17412,17418 ----
+  .globl glVertexAttrib3fvARB
+  .type glVertexAttrib3fvARB,#function
+  glVertexAttrib3fvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17433,17439 ****
+  .globl glVertexAttrib3dvARB
+  .type glVertexAttrib3dvARB,#function
+  glVertexAttrib3dvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17433,17439 ----
+  .globl glVertexAttrib3dvARB
+  .type glVertexAttrib3dvARB,#function
+  glVertexAttrib3dvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17454,17460 ****
+  .globl glVertexAttrib4bvARB
+  .type glVertexAttrib4bvARB,#function
+  glVertexAttrib4bvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17454,17460 ----
+  .globl glVertexAttrib4bvARB
+  .type glVertexAttrib4bvARB,#function
+  glVertexAttrib4bvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17475,17481 ****
+  .globl glVertexAttrib4svARB
+  .type glVertexAttrib4svARB,#function
+  glVertexAttrib4svARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17475,17481 ----
+  .globl glVertexAttrib4svARB
+  .type glVertexAttrib4svARB,#function
+  glVertexAttrib4svARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17496,17502 ****
+  .globl glVertexAttrib4ivARB
+  .type glVertexAttrib4ivARB,#function
+  glVertexAttrib4ivARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17496,17502 ----
+  .globl glVertexAttrib4ivARB
+  .type glVertexAttrib4ivARB,#function
+  glVertexAttrib4ivARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17517,17523 ****
+  .globl glVertexAttrib4ubvARB
+  .type glVertexAttrib4ubvARB,#function
+  glVertexAttrib4ubvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17517,17523 ----
+  .globl glVertexAttrib4ubvARB
+  .type glVertexAttrib4ubvARB,#function
+  glVertexAttrib4ubvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17538,17544 ****
+  .globl glVertexAttrib4usvARB
+  .type glVertexAttrib4usvARB,#function
+  glVertexAttrib4usvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17538,17544 ----
+  .globl glVertexAttrib4usvARB
+  .type glVertexAttrib4usvARB,#function
+  glVertexAttrib4usvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17559,17565 ****
+  .globl glVertexAttrib4uivARB
+  .type glVertexAttrib4uivARB,#function
+  glVertexAttrib4uivARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17559,17565 ----
+  .globl glVertexAttrib4uivARB
+  .type glVertexAttrib4uivARB,#function
+  glVertexAttrib4uivARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17580,17586 ****
+  .globl glVertexAttrib4fvARB
+  .type glVertexAttrib4fvARB,#function
+  glVertexAttrib4fvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17580,17586 ----
+  .globl glVertexAttrib4fvARB
+  .type glVertexAttrib4fvARB,#function
+  glVertexAttrib4fvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17601,17607 ****
+  .globl glVertexAttrib4dvARB
+  .type glVertexAttrib4dvARB,#function
+  glVertexAttrib4dvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17601,17607 ----
+  .globl glVertexAttrib4dvARB
+  .type glVertexAttrib4dvARB,#function
+  glVertexAttrib4dvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17622,17628 ****
+  .globl glVertexAttrib4NbvARB
+  .type glVertexAttrib4NbvARB,#function
+  glVertexAttrib4NbvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17622,17628 ----
+  .globl glVertexAttrib4NbvARB
+  .type glVertexAttrib4NbvARB,#function
+  glVertexAttrib4NbvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17643,17649 ****
+  .globl glVertexAttrib4NsvARB
+  .type glVertexAttrib4NsvARB,#function
+  glVertexAttrib4NsvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17643,17649 ----
+  .globl glVertexAttrib4NsvARB
+  .type glVertexAttrib4NsvARB,#function
+  glVertexAttrib4NsvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17664,17670 ****
+  .globl glVertexAttrib4NivARB
+  .type glVertexAttrib4NivARB,#function
+  glVertexAttrib4NivARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17664,17670 ----
+  .globl glVertexAttrib4NivARB
+  .type glVertexAttrib4NivARB,#function
+  glVertexAttrib4NivARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17685,17691 ****
+  .globl glVertexAttrib4NubvARB
+  .type glVertexAttrib4NubvARB,#function
+  glVertexAttrib4NubvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17685,17691 ----
+  .globl glVertexAttrib4NubvARB
+  .type glVertexAttrib4NubvARB,#function
+  glVertexAttrib4NubvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17706,17712 ****
+  .globl glVertexAttrib4NusvARB
+  .type glVertexAttrib4NusvARB,#function
+  glVertexAttrib4NusvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17706,17712 ----
+  .globl glVertexAttrib4NusvARB
+  .type glVertexAttrib4NusvARB,#function
+  glVertexAttrib4NusvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17727,17733 ****
+  .globl glVertexAttrib4NuivARB
+  .type glVertexAttrib4NuivARB,#function
+  glVertexAttrib4NuivARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17727,17733 ----
+  .globl glVertexAttrib4NuivARB
+  .type glVertexAttrib4NuivARB,#function
+  glVertexAttrib4NuivARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17748,17754 ****
+  .globl glVertexAttribPointerARB
+  .type glVertexAttribPointerARB,#function
+  glVertexAttribPointerARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17748,17754 ----
+  .globl glVertexAttribPointerARB
+  .type glVertexAttribPointerARB,#function
+  glVertexAttribPointerARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17769,17775 ****
+  .globl glEnableVertexAttribArrayARB
+  .type glEnableVertexAttribArrayARB,#function
+  glEnableVertexAttribArrayARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17769,17775 ----
+  .globl glEnableVertexAttribArrayARB
+  .type glEnableVertexAttribArrayARB,#function
+  glEnableVertexAttribArrayARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17790,17796 ****
+  .globl glDisableVertexAttribArrayARB
+  .type glDisableVertexAttribArrayARB,#function
+  glDisableVertexAttribArrayARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17790,17796 ----
+  .globl glDisableVertexAttribArrayARB
+  .type glDisableVertexAttribArrayARB,#function
+  glDisableVertexAttribArrayARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17811,17817 ****
+  .globl glProgramStringARB
+  .type glProgramStringARB,#function
+  glProgramStringARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17811,17817 ----
+  .globl glProgramStringARB
+  .type glProgramStringARB,#function
+  glProgramStringARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17832,17838 ****
+  .globl glBindProgramARB
+  .type glBindProgramARB,#function
+  glBindProgramARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17832,17838 ----
+  .globl glBindProgramARB
+  .type glBindProgramARB,#function
+  glBindProgramARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17853,17859 ****
+  .globl glDeleteProgramsARB
+  .type glDeleteProgramsARB,#function
+  glDeleteProgramsARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17853,17859 ----
+  .globl glDeleteProgramsARB
+  .type glDeleteProgramsARB,#function
+  glDeleteProgramsARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17874,17880 ****
+  .globl glGenProgramsARB
+  .type glGenProgramsARB,#function
+  glGenProgramsARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17874,17880 ----
+  .globl glGenProgramsARB
+  .type glGenProgramsARB,#function
+  glGenProgramsARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17895,17901 ****
+  .globl glIsProgramARB
+  .type glIsProgramARB,#function
+  glIsProgramARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17895,17901 ----
+  .globl glIsProgramARB
+  .type glIsProgramARB,#function
+  glIsProgramARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17916,17922 ****
+  .globl glProgramEnvParameter4dARB
+  .type glProgramEnvParameter4dARB,#function
+  glProgramEnvParameter4dARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17916,17922 ----
+  .globl glProgramEnvParameter4dARB
+  .type glProgramEnvParameter4dARB,#function
+  glProgramEnvParameter4dARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17937,17943 ****
+  .globl glProgramEnvParameter4dvARB
+  .type glProgramEnvParameter4dvARB,#function
+  glProgramEnvParameter4dvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17937,17943 ----
+  .globl glProgramEnvParameter4dvARB
+  .type glProgramEnvParameter4dvARB,#function
+  glProgramEnvParameter4dvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17958,17964 ****
+  .globl glProgramEnvParameter4fARB
+  .type glProgramEnvParameter4fARB,#function
+  glProgramEnvParameter4fARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17958,17964 ----
+  .globl glProgramEnvParameter4fARB
+  .type glProgramEnvParameter4fARB,#function
+  glProgramEnvParameter4fARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 17979,17985 ****
+  .globl glProgramEnvParameter4fvARB
+  .type glProgramEnvParameter4fvARB,#function
+  glProgramEnvParameter4fvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 17979,17985 ----
+  .globl glProgramEnvParameter4fvARB
+  .type glProgramEnvParameter4fvARB,#function
+  glProgramEnvParameter4fvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18000,18006 ****
+  .globl glProgramLocalParameter4dARB
+  .type glProgramLocalParameter4dARB,#function
+  glProgramLocalParameter4dARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18000,18006 ----
+  .globl glProgramLocalParameter4dARB
+  .type glProgramLocalParameter4dARB,#function
+  glProgramLocalParameter4dARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18021,18027 ****
+  .globl glProgramLocalParameter4dvARB
+  .type glProgramLocalParameter4dvARB,#function
+  glProgramLocalParameter4dvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18021,18027 ----
+  .globl glProgramLocalParameter4dvARB
+  .type glProgramLocalParameter4dvARB,#function
+  glProgramLocalParameter4dvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18042,18048 ****
+  .globl glProgramLocalParameter4fARB
+  .type glProgramLocalParameter4fARB,#function
+  glProgramLocalParameter4fARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18042,18048 ----
+  .globl glProgramLocalParameter4fARB
+  .type glProgramLocalParameter4fARB,#function
+  glProgramLocalParameter4fARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18063,18069 ****
+  .globl glProgramLocalParameter4fvARB
+  .type glProgramLocalParameter4fvARB,#function
+  glProgramLocalParameter4fvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18063,18069 ----
+  .globl glProgramLocalParameter4fvARB
+  .type glProgramLocalParameter4fvARB,#function
+  glProgramLocalParameter4fvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18084,18090 ****
+  .globl glGetProgramEnvParameterdvARB
+  .type glGetProgramEnvParameterdvARB,#function
+  glGetProgramEnvParameterdvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18084,18090 ----
+  .globl glGetProgramEnvParameterdvARB
+  .type glGetProgramEnvParameterdvARB,#function
+  glGetProgramEnvParameterdvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18105,18111 ****
+  .globl glGetProgramEnvParameterfvARB
+  .type glGetProgramEnvParameterfvARB,#function
+  glGetProgramEnvParameterfvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18105,18111 ----
+  .globl glGetProgramEnvParameterfvARB
+  .type glGetProgramEnvParameterfvARB,#function
+  glGetProgramEnvParameterfvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18126,18132 ****
+  .globl glGetProgramLocalParameterdvARB
+  .type glGetProgramLocalParameterdvARB,#function
+  glGetProgramLocalParameterdvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18126,18132 ----
+  .globl glGetProgramLocalParameterdvARB
+  .type glGetProgramLocalParameterdvARB,#function
+  glGetProgramLocalParameterdvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18147,18153 ****
+  .globl glGetProgramLocalParameterfvARB
+  .type glGetProgramLocalParameterfvARB,#function
+  glGetProgramLocalParameterfvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18147,18153 ----
+  .globl glGetProgramLocalParameterfvARB
+  .type glGetProgramLocalParameterfvARB,#function
+  glGetProgramLocalParameterfvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18168,18174 ****
+  .globl glGetProgramivARB
+  .type glGetProgramivARB,#function
+  glGetProgramivARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18168,18174 ----
+  .globl glGetProgramivARB
+  .type glGetProgramivARB,#function
+  glGetProgramivARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18189,18195 ****
+  .globl glGetProgramStringARB
+  .type glGetProgramStringARB,#function
+  glGetProgramStringARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18189,18195 ----
+  .globl glGetProgramStringARB
+  .type glGetProgramStringARB,#function
+  glGetProgramStringARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18210,18216 ****
+  .globl glGetVertexAttribdvARB
+  .type glGetVertexAttribdvARB,#function
+  glGetVertexAttribdvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18210,18216 ----
+  .globl glGetVertexAttribdvARB
+  .type glGetVertexAttribdvARB,#function
+  glGetVertexAttribdvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18231,18237 ****
+  .globl glGetVertexAttribfvARB
+  .type glGetVertexAttribfvARB,#function
+  glGetVertexAttribfvARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18231,18237 ----
+  .globl glGetVertexAttribfvARB
+  .type glGetVertexAttribfvARB,#function
+  glGetVertexAttribfvARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18252,18258 ****
+  .globl glGetVertexAttribivARB
+  .type glGetVertexAttribivARB,#function
+  glGetVertexAttribivARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18252,18258 ----
+  .globl glGetVertexAttribivARB
+  .type glGetVertexAttribivARB,#function
+  glGetVertexAttribivARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18273,18279 ****
+  .globl glGetVertexAttribPointervARB
+  .type glGetVertexAttribPointervARB,#function
+  glGetVertexAttribPointervARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18273,18279 ----
+  .globl glGetVertexAttribPointervARB
+  .type glGetVertexAttribPointervARB,#function
+  glGetVertexAttribPointervARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18294,18300 ****
+  .globl glProgramNamedParameter4fNV
+  .type glProgramNamedParameter4fNV,#function
+  glProgramNamedParameter4fNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18294,18300 ----
+  .globl glProgramNamedParameter4fNV
+  .type glProgramNamedParameter4fNV,#function
+  glProgramNamedParameter4fNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18315,18321 ****
+  .globl glProgramNamedParameter4dNV
+  .type glProgramNamedParameter4dNV,#function
+  glProgramNamedParameter4dNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18315,18321 ----
+  .globl glProgramNamedParameter4dNV
+  .type glProgramNamedParameter4dNV,#function
+  glProgramNamedParameter4dNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18336,18342 ****
+  .globl glProgramNamedParameter4fvNV
+  .type glProgramNamedParameter4fvNV,#function
+  glProgramNamedParameter4fvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18336,18342 ----
+  .globl glProgramNamedParameter4fvNV
+  .type glProgramNamedParameter4fvNV,#function
+  glProgramNamedParameter4fvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18357,18363 ****
+  .globl glProgramNamedParameter4dvNV
+  .type glProgramNamedParameter4dvNV,#function
+  glProgramNamedParameter4dvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18357,18363 ----
+  .globl glProgramNamedParameter4dvNV
+  .type glProgramNamedParameter4dvNV,#function
+  glProgramNamedParameter4dvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18378,18384 ****
+  .globl glGetProgramNamedParameterfvNV
+  .type glGetProgramNamedParameterfvNV,#function
+  glGetProgramNamedParameterfvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18378,18384 ----
+  .globl glGetProgramNamedParameterfvNV
+  .type glGetProgramNamedParameterfvNV,#function
+  glGetProgramNamedParameterfvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18399,18405 ****
+  .globl glGetProgramNamedParameterdvNV
+  .type glGetProgramNamedParameterdvNV,#function
+  glGetProgramNamedParameterdvNV:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18399,18405 ----
+  .globl glGetProgramNamedParameterdvNV
+  .type glGetProgramNamedParameterdvNV,#function
+  glGetProgramNamedParameterdvNV:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18420,18426 ****
+  .globl glBindBufferARB
+  .type glBindBufferARB,#function
+  glBindBufferARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18420,18426 ----
+  .globl glBindBufferARB
+  .type glBindBufferARB,#function
+  glBindBufferARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18441,18447 ****
+  .globl glBufferDataARB
+  .type glBufferDataARB,#function
+  glBufferDataARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18441,18447 ----
+  .globl glBufferDataARB
+  .type glBufferDataARB,#function
+  glBufferDataARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18462,18468 ****
+  .globl glBufferSubDataARB
+  .type glBufferSubDataARB,#function
+  glBufferSubDataARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18462,18468 ----
+  .globl glBufferSubDataARB
+  .type glBufferSubDataARB,#function
+  glBufferSubDataARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18483,18489 ****
+  .globl glDeleteBuffersARB
+  .type glDeleteBuffersARB,#function
+  glDeleteBuffersARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18483,18489 ----
+  .globl glDeleteBuffersARB
+  .type glDeleteBuffersARB,#function
+  glDeleteBuffersARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18504,18510 ****
+  .globl glGenBuffersARB
+  .type glGenBuffersARB,#function
+  glGenBuffersARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18504,18510 ----
+  .globl glGenBuffersARB
+  .type glGenBuffersARB,#function
+  glGenBuffersARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18525,18531 ****
+  .globl glGetBufferParameterivARB
+  .type glGetBufferParameterivARB,#function
+  glGetBufferParameterivARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18525,18531 ----
+  .globl glGetBufferParameterivARB
+  .type glGetBufferParameterivARB,#function
+  glGetBufferParameterivARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18546,18552 ****
+  .globl glGetBufferPointervARB
+  .type glGetBufferPointervARB,#function
+  glGetBufferPointervARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18546,18552 ----
+  .globl glGetBufferPointervARB
+  .type glGetBufferPointervARB,#function
+  glGetBufferPointervARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18567,18573 ****
+  .globl glGetBufferSubDataARB
+  .type glGetBufferSubDataARB,#function
+  glGetBufferSubDataARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18567,18573 ----
+  .globl glGetBufferSubDataARB
+  .type glGetBufferSubDataARB,#function
+  glGetBufferSubDataARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18588,18594 ****
+  .globl glIsBufferARB
+  .type glIsBufferARB,#function
+  glIsBufferARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18588,18594 ----
+  .globl glIsBufferARB
+  .type glIsBufferARB,#function
+  glIsBufferARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18609,18615 ****
+  .globl glMapBufferARB
+  .type glMapBufferARB,#function
+  glMapBufferARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18609,18615 ----
+  .globl glMapBufferARB
+  .type glMapBufferARB,#function
+  glMapBufferARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18630,18636 ****
+  .globl glUnmapBufferARB
+  .type glUnmapBufferARB,#function
+  glUnmapBufferARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18630,18636 ----
+  .globl glUnmapBufferARB
+  .type glUnmapBufferARB,#function
+  glUnmapBufferARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18651,18657 ****
+  .globl glDepthBoundsEXT
+  .type glDepthBoundsEXT,#function
+  glDepthBoundsEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18651,18657 ----
+  .globl glDepthBoundsEXT
+  .type glDepthBoundsEXT,#function
+  glDepthBoundsEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18672,18678 ****
+  .globl glGenQueriesARB
+  .type glGenQueriesARB,#function
+  glGenQueriesARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18672,18678 ----
+  .globl glGenQueriesARB
+  .type glGenQueriesARB,#function
+  glGenQueriesARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18693,18699 ****
+  .globl glDeleteQueriesARB
+  .type glDeleteQueriesARB,#function
+  glDeleteQueriesARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18693,18699 ----
+  .globl glDeleteQueriesARB
+  .type glDeleteQueriesARB,#function
+  glDeleteQueriesARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18714,18720 ****
+  .globl glIsQueryARB
+  .type glIsQueryARB,#function
+  glIsQueryARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18714,18720 ----
+  .globl glIsQueryARB
+  .type glIsQueryARB,#function
+  glIsQueryARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18735,18741 ****
+  .globl glBeginQueryARB
+  .type glBeginQueryARB,#function
+  glBeginQueryARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18735,18741 ----
+  .globl glBeginQueryARB
+  .type glBeginQueryARB,#function
+  glBeginQueryARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18756,18762 ****
+  .globl glEndQueryARB
+  .type glEndQueryARB,#function
+  glEndQueryARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18756,18762 ----
+  .globl glEndQueryARB
+  .type glEndQueryARB,#function
+  glEndQueryARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18777,18783 ****
+  .globl glGetQueryivARB
+  .type glGetQueryivARB,#function
+  glGetQueryivARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18777,18783 ----
+  .globl glGetQueryivARB
+  .type glGetQueryivARB,#function
+  glGetQueryivARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18798,18804 ****
+  .globl glGetQueryObjectivARB
+  .type glGetQueryObjectivARB,#function
+  glGetQueryObjectivARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18798,18804 ----
+  .globl glGetQueryObjectivARB
+  .type glGetQueryObjectivARB,#function
+  glGetQueryObjectivARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18819,18825 ****
+  .globl glGetQueryObjectuivARB
+  .type glGetQueryObjectuivARB,#function
+  glGetQueryObjectuivARB:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18819,18825 ----
+  .globl glGetQueryObjectuivARB
+  .type glGetQueryObjectuivARB,#function
+  glGetQueryObjectuivARB:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18840,18846 ****
+  .globl glBindBuffer
+  .type glBindBuffer,#function
+  glBindBuffer:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18840,18846 ----
+  .globl glBindBuffer
+  .type glBindBuffer,#function
+  glBindBuffer:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18861,18867 ****
+  .globl glBufferData
+  .type glBufferData,#function
+  glBufferData:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18861,18867 ----
+  .globl glBufferData
+  .type glBufferData,#function
+  glBufferData:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18882,18888 ****
+  .globl glBufferSubData
+  .type glBufferSubData,#function
+  glBufferSubData:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18882,18888 ----
+  .globl glBufferSubData
+  .type glBufferSubData,#function
+  glBufferSubData:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18903,18909 ****
+  .globl glDeleteBuffers
+  .type glDeleteBuffers,#function
+  glDeleteBuffers:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18903,18909 ----
+  .globl glDeleteBuffers
+  .type glDeleteBuffers,#function
+  glDeleteBuffers:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18924,18930 ****
+  .globl glGenBuffers
+  .type glGenBuffers,#function
+  glGenBuffers:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18924,18930 ----
+  .globl glGenBuffers
+  .type glGenBuffers,#function
+  glGenBuffers:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18945,18951 ****
+  .globl glGetBufferParameteriv
+  .type glGetBufferParameteriv,#function
+  glGetBufferParameteriv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18945,18951 ----
+  .globl glGetBufferParameteriv
+  .type glGetBufferParameteriv,#function
+  glGetBufferParameteriv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18966,18972 ****
+  .globl glGetBufferPointerv
+  .type glGetBufferPointerv,#function
+  glGetBufferPointerv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18966,18972 ----
+  .globl glGetBufferPointerv
+  .type glGetBufferPointerv,#function
+  glGetBufferPointerv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 18987,18993 ****
+  .globl glGetBufferSubData
+  .type glGetBufferSubData,#function
+  glGetBufferSubData:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 18987,18993 ----
+  .globl glGetBufferSubData
+  .type glGetBufferSubData,#function
+  glGetBufferSubData:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 19008,19014 ****
+  .globl glIsBuffer
+  .type glIsBuffer,#function
+  glIsBuffer:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 19008,19014 ----
+  .globl glIsBuffer
+  .type glIsBuffer,#function
+  glIsBuffer:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 19029,19035 ****
+  .globl glMapBuffer
+  .type glMapBuffer,#function
+  glMapBuffer:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 19029,19035 ----
+  .globl glMapBuffer
+  .type glMapBuffer,#function
+  glMapBuffer:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 19050,19056 ****
+  .globl glUnmapBuffer
+  .type glUnmapBuffer,#function
+  glUnmapBuffer:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 19050,19056 ----
+  .globl glUnmapBuffer
+  .type glUnmapBuffer,#function
+  glUnmapBuffer:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 19071,19077 ****
+  .globl glGenQueries
+  .type glGenQueries,#function
+  glGenQueries:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 19071,19077 ----
+  .globl glGenQueries
+  .type glGenQueries,#function
+  glGenQueries:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 19092,19098 ****
+  .globl glDeleteQueries
+  .type glDeleteQueries,#function
+  glDeleteQueries:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 19092,19098 ----
+  .globl glDeleteQueries
+  .type glDeleteQueries,#function
+  glDeleteQueries:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 19113,19119 ****
+  .globl glIsQuery
+  .type glIsQuery,#function
+  glIsQuery:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 19113,19119 ----
+  .globl glIsQuery
+  .type glIsQuery,#function
+  glIsQuery:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 19134,19140 ****
+  .globl glBeginQuery
+  .type glBeginQuery,#function
+  glBeginQuery:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 19134,19140 ----
+  .globl glBeginQuery
+  .type glBeginQuery,#function
+  glBeginQuery:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 19155,19161 ****
+  .globl glEndQuery
+  .type glEndQuery,#function
+  glEndQuery:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 19155,19161 ----
+  .globl glEndQuery
+  .type glEndQuery,#function
+  glEndQuery:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 19176,19182 ****
+  .globl glGetQueryiv
+  .type glGetQueryiv,#function
+  glGetQueryiv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 19176,19182 ----
+  .globl glGetQueryiv
+  .type glGetQueryiv,#function
+  glGetQueryiv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 19197,19203 ****
+  .globl glGetQueryObjectiv
+  .type glGetQueryObjectiv,#function
+  glGetQueryObjectiv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 19197,19203 ----
+  .globl glGetQueryObjectiv
+  .type glGetQueryObjectiv,#function
+  glGetQueryObjectiv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 19218,19224 ****
+  .globl glGetQueryObjectuiv
+  .type glGetQueryObjectuiv,#function
+  glGetQueryObjectuiv:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 19218,19224 ----
+  .globl glGetQueryObjectuiv
+  .type glGetQueryObjectuiv,#function
+  glGetQueryObjectuiv:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 19239,19245 ****
+  .globl glBlendEquationSeparateEXT
+  .type glBlendEquationSeparateEXT,#function
+  glBlendEquationSeparateEXT:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 19239,19245 ----
+  .globl glBlendEquationSeparateEXT
+  .type glBlendEquationSeparateEXT,#function
+  glBlendEquationSeparateEXT:
+! #if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+***************
+*** 19260,19266 ****
+  .globl glBlendEquationSeparateATI
+  .type glBlendEquationSeparateATI,#function
+  glBlendEquationSeparateATI:
+! #if defined(__sparc_v9__) && !defined(__linux__)
+       sethi   %hi(0x00000000), %g2
+       sethi   %hi(0x00000000), %g1
+       or      %g2, %lo(0x00000000), %g2
+--- 19260,19266 ----
+  .globl glBlendEquationSeparateATI
+  .type glBlendEquationSeparateATI,#function
+  glBlendEquationSeparateATI:
+! #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 -c 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 ****
+! /* $Id$ */
+  
+  #include "sparc_matrix.h"
+  
+--- 1,4 ----
+! /* $Id$ */
+  
+  #include "sparc_matrix.h"
+  
+***************
+*** 10,16 ****
+  
+       .text
+  
+! #if defined(__sparc_v9__) && !defined(__linux__)
+  #define STACK_VAR_OFF        (2047 + (8 * 16))
+  #else
+  #define STACK_VAR_OFF        (4 * 16)
+--- 10,16 ----
+  
+       .text
+  
+! #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 -c 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 ****
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  5.1
+   * 
+   * Copyright (C) 1999-2003  Brian Paul   All Rights Reserved.
+   * 
+--- 1,6 ----
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.3
+   * 
+   * Copyright (C) 1999-2003  Brian Paul   All Rights Reserved.
+   * 
+***************
+*** 27,38 ****
+   */
+  
+  
+  #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"
+--- 27,39 ----
+   */
+  
+  
++ #include "sparc.h"
++ 
+  #ifdef USE_SPARC_ASM
+  
+  #include "context.h"
+  #include "math/m_xform.h"
+  #include "tnl/t_context.h"
+  
+  #ifdef DEBUG
+  #include "math/m_debug.h"
+***************
+*** 68,74 ****
+        _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)
+--- 69,74 ----
+***************
+*** 101,111 ****
+  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)
+--- 101,110 ----
+  extern void _mesa_sparc_normalize_normals(NORM_ARGS);
+  extern void _mesa_sparc_rescale_normals(NORM_ARGS);
+  
+! 
+  
+  void _mesa_init_all_sparc_transform_asm(void)
+  {
+     ASSIGN_XFORM_GROUP(sparc, 1)
+     ASSIGN_XFORM_GROUP(sparc, 2)
+     ASSIGN_XFORM_GROUP(sparc, 3)
+***************
+*** 143,150 ****
+     _math_test_all_cliptest_functions("sparc");
+     _math_test_all_normal_transform_functions("sparc");
+  #endif
+- 
+- #endif
+  }
+  
+  extern unsigned int _mesa_sparc_glapi_begin;
+--- 142,147 ----
+***************
+*** 165,171 ****
+       disp_addr = (unsigned long) &_glapi_Dispatch;
+  
+       while (insn_ptr < end_ptr) {
+! #if defined(__sparc_v9__) && !defined(__linux__)
+               insn_ptr[0] |= (disp_addr >> (32 + 10));
+               insn_ptr[1] |= ((disp_addr & 0xffffffff) >> 10);
+               __glapi_sparc_icache_flush(&insn_ptr[0]);
+--- 162,168 ----
+       disp_addr = (unsigned long) &_glapi_Dispatch;
+  
+       while (insn_ptr < end_ptr) {
+! #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 -c 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,11 ****
+  #ifndef _SPARC_MATRIX_H
+  #define _SPARC_MATRIX_H
+  
+! #if defined(__sparc_v9__) && !defined(__linux__)
+  #define LDPTR                ldx
+  #define MAT_M                0x00
+  #define MAT_INV              0x08
+--- 5,11 ----
+  #ifndef _SPARC_MATRIX_H
+  #define _SPARC_MATRIX_H
+  
+! #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 -c 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,193 ****
+     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;
+--- 178,189 ----
+Index: xc/extras/Mesa/src/mesa/swrast/s_auxbuffer.c
+diff -c 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,98 ****
+--- 93,99 ----
+  _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 -c 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,181 ****
+--- 176,182 ----
+              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,259 ****
+--- 255,261 ----
+  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 -c 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,214 ****
+     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 */
+     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;
+        }
+     }
+  }
+  
+  
+--- 196,217 ----
+     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, and if so, which fog mode */
+     swrast->_FogEnabled = GL_FALSE;
+!    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,408 ****
+--- 406,412 ----
+  static void
+  _swrast_sleep( GLcontext *ctx, GLuint new_state )
+  {
++    (void) ctx; (void) new_state;
+  }
+  
+  
+***************
+*** 479,485 ****
+        if (swrast->NewState & _SWRAST_NEW_TEXTURE_ENV_MODE)
+        _swrast_update_texture_env( ctx );
+  
+!       if (swrast->NewState & _NEW_FOG)
+           _swrast_update_fog_state( ctx );
+  
+        if (swrast->NewState & _NEW_PROGRAM)
+--- 483,489 ----
+        if (swrast->NewState & _SWRAST_NEW_TEXTURE_ENV_MODE)
+        _swrast_update_texture_env( ctx );
+  
+!       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 -c 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,34 ****
+--- 29,45 ----
+   * \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,280 ****
+--- 286,292 ----
+     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 -c 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 ****
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.1
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+--- 1,6 ----
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.2
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+***************
+*** 175,182 ****
+        return;
+     }
+  
+-    dest = tmpImage;
+- 
+     if (changeBuffer) {
+        /* choose the read buffer */
+        _swrast_use_read_buffer(ctx);
+--- 175,180 ----
+***************
+*** 191,196 ****
+--- 189,195 ----
+                               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 -c 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,1677 ****
+  void
+  _swrast_clear_depth_buffer( GLcontext *ctx )
+  {
+     if (ctx->Visual.depthBits == 0
+-        || !ctx->DrawBuffer->DepthBuffer
+         || !ctx->Depth.Mask) {
+        /* no depth buffer, or writing to it is disabled */
+        return;
+     }
+  
+     /* The loops in this function have been written so the IRIX 5.3
+      * C compiler can unroll them.  Hopefully other compilers can too!
+      */
+--- 1665,1697 ----
+  void
+  _swrast_clear_depth_buffer( GLcontext *ctx )
+  {
++    SWcontext *swrast = SWRAST_CONTEXT(ctx);
++ 
+     if (ctx->Visual.depthBits == 0
+         || !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 -c 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 ****
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.1
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+--- 1,6 ----
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.2
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+***************
+*** 521,532 ****
+        const GLint spanEnd = (width - skipPixels > MAX_WIDTH)
+                            ? MAX_WIDTH : (width - skipPixels);
+        ASSERT(spanEnd <= MAX_WIDTH);
+!       for (row = 0; row < height; row++, span.y++) {
+           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,
+                                   span.array->index, type, source, unpack,
+                                   ctx->_ImageTransferState);
+  
+--- 521,532 ----
+        const GLint spanEnd = (width - skipPixels > MAX_WIDTH)
+                            ? MAX_WIDTH : (width - skipPixels);
+        ASSERT(spanEnd <= MAX_WIDTH);
+!       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, spanEnd, GL_UNSIGNED_INT,
+                                   span.array->index, type, source, unpack,
+                                   ctx->_ImageTransferState);
+  
+***************
+*** 659,675 ****
+         && 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++) {
+           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];
+           _swrast_write_rgba_span(ctx, &span);
+        }
+     }
+--- 659,675 ----
+         && ctx->Visual.rgbMode
+         && width <= MAX_WIDTH) {
+        /* Special case: directly write 16-bit depth values */
+!       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,691 ****
+              && 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++) {
+           const GLuint *zSrc = (const GLuint *)
+              _mesa_image_address(unpack, pixels, width, height,
+                                  GL_DEPTH_COMPONENT, type, 0, row, 0);
+--- 681,688 ----
+              && width <= MAX_WIDTH) {
+        /* Special case: shift 32-bit values down to ctx->Visual.depthBits */
+        const GLint shift = 32 - ctx->Visual.depthBits;
+!       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,702 ****
+--- 694,702 ----
+              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 -c 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 ****
+- 
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  4.1
+   *
+!  * Copyright (C) 1999-2002  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"),
+--- 1,8 ----
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.3
+   *
+!  * 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,41 ****
+  #include "s_span.h"
+  
+  
+- 
+- 
+  /**
+   * Used to convert current raster distance to a fog factor in [0,1].
+   */
+--- 33,38 ----
+***************
+*** 99,105 ****
+        /* 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) {
+        case GL_LINEAR:
+           {
+              const GLfloat fogEnd = ctx->Fog.End;
+--- 96,102 ----
+        /* The span's fog values are fog coordinates, now compute blend factors
+         * and blend the fragment colors with the fog color.
+         */
+!       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 -c 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,303 ****
+     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;
+     };
+     
+     emit(p, "[%d]", GET_UREG_NR(arg));
+--- 297,303 ----
+     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, "local_param"); break;
+     };
+     
+     emit(p, "[%d]", GET_UREG_NR(arg));
+Index: xc/extras/Mesa/src/mesa/swrast/s_lines.c
+diff -c 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,264 ****
+     else if (swrast->Line == multitextured_line)
+        _mesa_printf("multitextured_line\n");
+     else
+!       _mesa_printf("Driver func %p\n", (void *) swrast->Line);
+  }
+  #endif
+  
+--- 258,264 ----
+     else if (swrast->Line == multitextured_line)
+        _mesa_printf("multitextured_line\n");
+     else
+!       _mesa_printf("Driver func %p\n", (void (*)()) swrast->Line);
+  }
+  #endif
+  
+Index: xc/extras/Mesa/src/mesa/swrast/s_linetemp.h
+diff -c 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,430 ****
+--- 425,432 ----
+     RENDER_SPAN( span );
+  #endif
+  
++    (void)span;
++ 
+  }
+  
+  
+Index: xc/extras/Mesa/src/mesa/swrast/s_pointtemp.h
+diff -c 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 ****
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.1
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+--- 1,6 ----
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.2
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+***************
+*** 220,225 ****
+--- 220,240 ----
+        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,298 ****
+                 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;
+                       span->array->texcoords[u][count][0] = s;
+                       span->array->texcoords[u][count][1] = t;
+                       span->array->texcoords[u][count][3] = 1.0F;
+--- 307,317 ----
+                 if (ctx->Texture.Unit[u]._ReallyEnabled) {
+                    if (ctx->Point.CoordReplace[u]) {
+                       GLfloat s = 0.5F + (x + 0.5F - vert->win[0]) / 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 -c 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 ****
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.1
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+--- 1,6 ----
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.2.1
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+***************
+*** 86,92 ****
+                                   GL_COLOR_INDEX, type, 0, i, 0);
+  
+        _mesa_pack_index_span(ctx, readWidth, type, dest, index,
+!                             &ctx->Pack, ctx->_ImageTransferState);
+     }
+  
+     _swrast_use_draw_buffer(ctx);
+--- 86,92 ----
+                                   GL_COLOR_INDEX, type, 0, i, 0);
+  
+        _mesa_pack_index_span(ctx, readWidth, type, dest, index,
+!                             packing, ctx->_ImageTransferState);
+     }
+  
+     _swrast_use_draw_buffer(ctx);
+***************
+*** 163,169 ****
+                                      GL_DEPTH_COMPONENT, type, 0, j, 0);
+  
+           _mesa_pack_depth_span(ctx, readWidth, (GLdepth *) dest, type,
+!                                depth, &ctx->Pack);
+        }
+     }
+  }
+--- 163,169 ----
+                                      GL_DEPTH_COMPONENT, type, 0, j, 0);
+  
+           _mesa_pack_depth_span(ctx, readWidth, (GLdepth *) dest, type,
+!                                depth, packing);
+        }
+     }
+  }
+***************
+*** 209,215 ****
+        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);
+     }
+  }
+  
+--- 209,215 ----
+        dest = _mesa_image_address(packing, pixels, width, height,
+                                   GL_STENCIL_INDEX, type, 0, j, 0);
+  
+!       _mesa_pack_stencil_span(ctx, readWidth, type, dest, stencil, packing);
+     }
+  }
+  
+***************
+*** 498,513 ****
+  _swrast_ReadPixels( GLcontext *ctx,
+                   GLint x, GLint y, GLsizei width, GLsizei height,
+                   GLenum format, GLenum type,
+!                  const struct gl_pixelstore_attrib *pack,
+                   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,
+                                          format, type, (GLvoid *) pixels);
+  
+     if (!pixels) {
+--- 498,512 ----
+  _swrast_ReadPixels( GLcontext *ctx,
+                   GLint x, GLint y, GLsizei width, GLsizei height,
+                   GLenum format, GLenum type,
+!                  const struct gl_pixelstore_attrib *packing,
+                   GLvoid *pixels )
+  {
+     SWcontext *swrast = SWRAST_CONTEXT(ctx);
+  
+     if (swrast->NewState)
+        _swrast_validate_derived( ctx );
+  
+!    pixels = _swrast_validate_pbo_access(packing, width, height, 1,
+                                          format, type, (GLvoid *) pixels);
+  
+     if (!pixels) {
+***************
+*** 519,531 ****
+  
+     switch (format) {
+        case GL_COLOR_INDEX:
+!          read_index_pixels(ctx, x, y, width, height, type, pixels, &ctx->Pack);
+        break;
+        case GL_STENCIL_INDEX:
+!       read_stencil_pixels(ctx, x,y, width,height, type, pixels, &ctx->Pack);
+           break;
+        case GL_DEPTH_COMPONENT:
+!       read_depth_pixels(ctx, x, y, width, height, type, pixels, &ctx->Pack);
+        break;
+        case GL_RED:
+        case GL_GREEN:
+--- 518,530 ----
+  
+     switch (format) {
+        case GL_COLOR_INDEX:
+!          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, packing);
+           break;
+        case GL_DEPTH_COMPONENT:
+!       read_depth_pixels(ctx, x, y, width, height, type, pixels, packing);
+        break;
+        case GL_RED:
+        case GL_GREEN:
+***************
+*** 539,545 ****
+        case GL_BGRA:
+        case GL_ABGR_EXT:
+           read_rgba_pixels(ctx, x, y, width, height,
+!                           format, type, pixels, &ctx->Pack);
+        break;
+        default:
+        _mesa_error( ctx, GL_INVALID_ENUM, "glReadPixels(format)" );
+--- 538,544 ----
+        case GL_BGRA:
+        case GL_ABGR_EXT:
+           read_rgba_pixels(ctx, x, y, width, height,
+!                           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 -c 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 ****
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.1
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+--- 1,6 ----
+  /*
+   * Mesa 3-D graphics library
+!  * Version:  6.3
+   *
+   * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+   *
+***************
+*** 151,156 ****
+--- 151,157 ----
+     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,216 ****
+--- 212,218 ----
+     const GLuint n = span->end;
+     GLuint *indexes = span->array->index;
+     GLuint i;
++    (void) ctx;
+     ASSERT((span->interpMask & SPAN_INDEX)  &&
+         !(span->arrayMask & SPAN_INDEX));
+  
+***************
+*** 236,241 ****
+--- 238,244 ----
+  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,1484 ****
+  
+     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);
+        }
+-       ASSERT(span->arrayMask & SPAN_SPEC);
+-       add_colors( span->end, span->array->rgba, span->array->spec );
+     }
+  
+     /* Fog */
+--- 1473,1489 ----
+  
+     ASSERT(span->arrayMask & SPAN_RGBA);
+  
+!    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 );
+        }
+     }
+  
+     /* Fog */
+Index: xc/extras/Mesa/src/mesa/swrast/s_spantemp.h
+diff -c 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,52 ****
+--- 47,53 ----
+   *   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 -c 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,184 ****
+--- 179,188 ----
+                        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 -c 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,461 ****
+--- 456,462 ----
+  {
+     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,491 ****
+--- 487,493 ----
+     GLint i0, i1;
+     GLfloat u;
+     GLuint useBorderColor;
++    (void) ctx;
+  
+     COMPUTE_LINEAR_TEXEL_LOCATIONS(tObj->WrapS, texcoord[0], u, width, i0, i1);
+  
+***************
+*** 657,662 ****
+--- 659,665 ----
+  {
+     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,678 ****
+--- 676,682 ----
+  {
+     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,779 ****
+--- 778,784 ----
+     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,814 ****
+--- 814,820 ----
+     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,923 ****
+     const GLint height = img->Height2;
+     GLint i0, j0, i1, j1;
+     GLfloat u, v;
+! 
+     ASSERT(tObj->WrapS == GL_REPEAT);
+     ASSERT(tObj->WrapT == GL_REPEAT);
+     ASSERT(img->Border == 0);
+--- 923,931 ----
+     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,1122 ****
+--- 1125,1131 ----
+  {
+     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,1138 ****
+--- 1142,1148 ----
+  {
+     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,1166 ****
+--- 1171,1178 ----
+     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,1206 ****
+--- 1213,1220 ----
+     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,1371 ****
+--- 1380,1386 ----
+     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,1405 ****
+--- 1415,1421 ----
+     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,1656 ****
+--- 1667,1673 ----
+  {
+     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,1672 ****
+--- 1684,1690 ----
+  {
+     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,1841 ****
+--- 1854,1860 ----
+                      GLchan rgba[][4])
+  {
+     GLuint i;
++    (void) texUnit;
+     (void) lambda;
+     for (i = 0; i < n; i++) {
+        const struct gl_texture_image **images;
+***************
+*** 1854,1859 ****
+--- 1873,1879 ----
+                  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,1877 ****
+--- 1892,1898 ----
+                                     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,1896 ****
+--- 1912,1918 ----
+                                    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,1915 ****
+--- 1932,1938 ----
+                                    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,1947 ****
+--- 1965,1971 ----
+                                   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,2058 ****
+--- 2077,2083 ----
+     const GLint height_minus_1 = img->Height - 1;
+     GLuint i;
+  
++    (void) ctx;
+     (void) texUnit;
+     (void) lambda;
+  
+***************
+*** 2108,2113 ****
+--- 2133,2139 ----
+     const GLint height_minus_1 = img->Height - 1;
+     GLuint i;
+  
++    (void) ctx;
+     (void) texUnit;
+     (void) lambda;
+  
+***************
+*** 2129,2184 ****
+  
+        /* 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);
+           i0 = IFLOOR(fcol);
+           i1 = i0 + 1;
+        }
+        else if (tObj->WrapS == GL_CLAMP_TO_EDGE) {
+           fcol = CLAMP(texcoords[i][0], 0.5F, width - 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 */
+           fcol = CLAMP(texcoords[i][0], -0.5F, width + 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);
+           j0 = IFLOOR(frow);
+           j1 = j0 + 1;
+        }
+        else if (tObj->WrapT == GL_CLAMP_TO_EDGE) {
+           frow = CLAMP(texcoords[i][1], 0.5F, height - 0.5F);
+           j0 = IFLOOR(frow);
+           j1 = j0 + 1;
+           if (j1 > height_minus_1)
+              j1 = height_minus_1;
+        }
+!       else { /* GL_CLAMP_TO_BORDER */
+! #if 0
+           frow = CLAMP(texcoords[i][1], -0.5F, height + 0.5F);
+           j0 = IFLOOR(frow);
+           j1 = j0 + 1;
+- #else
+-          frow = texcoords[i][1];
+-          j0 = IFLOOR(frow);
+-          j1 = j0 + 1;
+- #endif
+        }
+  
+        /* compute integer rows/columns */
+--- 2155,2201 ----
+  
+        /* NOTE: we DO NOT use [0, 1] texture coordinates! */
+        if (tObj->WrapS == GL_CLAMP) {
+!          /* 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 {
+!          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;
+        }
++ 
+        if (tObj->WrapT == GL_CLAMP) {
+!          /* 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 {
+!          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;
+        }
+  
+        /* compute integer rows/columns */
+***************
+*** 2284,2289 ****
+--- 2301,2307 ----
+     GLenum function;
+     GLchan result;
+  
++    (void) lambda;
+     (void) unit;
+  
+     ASSERT(tObj->Image[0][tObj->BaseLevel]->Format == GL_DEPTH_COMPONENT);
+***************
+*** 2709,2715 ****
+              ASSERT(t->MinFilter == GL_NEAREST);
+              return &sample_nearest_1d;
+           }
+-          break;
+        case GL_TEXTURE_2D:
+           if (format == GL_DEPTH_COMPONENT) {
+              return &sample_depth_texture;
+--- 2727,2732 ----
+***************
+*** 2741,2747 ****
+                 return &sample_nearest_2d;
+              }
+           }
+-          break;
+        case GL_TEXTURE_3D:
+           if (needLambda) {
+              return &sample_lambda_3d;
+--- 2758,2763 ----
+***************
+*** 2753,2759 ****
+              ASSERT(t->MinFilter == GL_NEAREST);
+              return &sample_nearest_3d;
+           }
+-          break;
+        case GL_TEXTURE_CUBE_MAP:
+           if (needLambda) {
+              return &sample_lambda_cube;
+--- 2769,2774 ----
+***************
+*** 2765,2771 ****
+              ASSERT(t->MinFilter == GL_NEAREST);
+              return &sample_nearest_cube;
+           }
+-          break;
+        case GL_TEXTURE_RECTANGLE_NV:
+           if (needLambda) {
+              return &sample_lambda_rect;
+--- 2780,2785 ----
+***************
+*** 2777,2783 ****
+              ASSERT(t->MinFilter == GL_NEAREST);
+              return &sample_nearest_rect;
+           }
+-          break;
+        default:
+           _mesa_problem(ctx,
+                         "invalid target in _swrast_choose_texture_sample_func");
+--- 2791,2796 ----
+***************
+*** 3494,3499 ****
+--- 3507,3513 ----
+     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 -c 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,933 ****
+        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]) {                                     \
+              ctx->OcclusionResult = GL_TRUE;                          \
+              ctx->Occlusion.PassedCounter++;                          \
+           }                                                           \
+--- 927,933 ----
+        const GLuint *zRow = (const GLuint *)                          \
+           _swrast_zbuffer_address(ctx, span.x, span.y);                       \
+        for (i = 0; i < span.end; i++) {                                       \
+!          if ((GLuint)span.z < zRow[i]) {                             \
+              ctx->OcclusionResult = GL_TRUE;                          \
+              ctx->Occlusion.PassedCounter++;                          \
+           }                                                           \
+Index: xc/extras/Mesa/src/mesa/swrast/swrast.h
+diff -c 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,408 ****
+--- 403,415 ----
+      * 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 -c 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,13 ****
+  # contributed by Jouk Jansen  joukj@hrem.stm.tudelft.nl
+  # Last revision : 18 August 2004
+  
+! first
+       define gl [---.include.gl]
+       define math [-.math]
+       define array_cache [-.array_cache]
+  
+! include [---]mms-config.
+  
+  ##### MACROS #####
+  
+--- 2,13 ----
+  # contributed by Jouk Jansen  joukj@hrem.stm.tudelft.nl
+  # Last revision : 18 August 2004
+  
+! .first
+       define gl [---.include.gl]
+       define math [-.math]
+       define array_cache [-.array_cache]
+  
+! .include [---]mms-config.
+  
+  ##### MACROS #####
+  
+Index: xc/extras/Mesa/src/mesa/tnl/t_array_api.c
+diff -c 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,441 ****
+--- 438,442 ----
+   */
+  void _tnl_array_destroy( GLcontext *ctx )
+  {
++    (void) ctx;
+  }
+Index: xc/extras/Mesa/src/mesa/tnl/t_array_import.c
+diff -c 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,206 ****
+--- 201,207 ----
+     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 -c 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,56 ****
+--- 51,57 ----
+                 GLframebuffer *drawBuffer,
+                 GLframebuffer *readBuffer )
+  {
++    (void) ctx; (void) drawBuffer; (void) readBuffer;
+  }
+  
+  
+Index: xc/extras/Mesa/src/mesa/tnl/t_save_api.c
+diff -c 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,184 ****
+--- 179,185 ----
+  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,192 ****
+--- 188,194 ----
+  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,1246 ****
+--- 1243,1249 ----
+                              const GLvoid *indices)
+  {
+     GET_CURRENT_CONTEXT(ctx);
++    (void) mode; (void) count; (void) type; (void) indices;
+     _mesa_compile_error( ctx, GL_INVALID_OPERATION, "glDrawElements" );
+  }
+  
+***************
+*** 1251,1274 ****
+--- 1254,1281 ----
+                                   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,1287 ****
+--- 1283,1296 ----
+                                 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,1472 ****
+--- 1476,1483 ----
+  {
+     TNLcontext *tnl = TNL_CONTEXT(ctx);
+  
++    (void) list; (void) mode;
++ 
+     if (!tnl->save.prim_store)
+        tnl->save.prim_store = alloc_prim_store( ctx );
+  
+***************
+*** 1481,1501 ****
+--- 1492,1516 ----
+  
+  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,1517 ****
+--- 1527,1533 ----
+  {
+     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,1600 ****
+--- 1613,1617 ----
+   */
+  void _tnl_save_destroy( GLcontext *ctx )
+  {
++    (void) ctx;
+  }
+Index: xc/extras/Mesa/src/mesa/tnl/t_save_loopback.c
+diff -c 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,174 ****
+--- 164,176 ----
+  
+  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,200 ****
+     GLuint k;
+  
+     if (prim->mode & PRIM_BEGIN) {
+!       glBegin( prim->mode & PRIM_MODE_MASK );
+     }
+     else {
+        assert(i == 0);
+--- 196,202 ----
+     GLuint k;
+  
+     if (prim->mode & PRIM_BEGIN) {
+!       GL_CALL(Begin)( prim->mode & PRIM_MODE_MASK );
+     }
+     else {
+        assert(i == 0);
+***************
+*** 219,225 ****
+     }
+  
+     if (prim->mode & PRIM_END) {
+!       glEnd();
+     }
+     else {
+        assert (i == list->prim_count-1);
+--- 221,227 ----
+     }
+  
+     if (prim->mode & PRIM_END) {
+!       GL_CALL(End)();
+     }
+     else {
+        assert (i == list->prim_count-1);
+Index: xc/extras/Mesa/src/mesa/tnl/t_vb_lighttmp.h
+diff -c 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,260 ****
+     const GLfloat *normal = (GLfloat *)VB->NormalPtr->data;
+  
+     GLfloat (*Fcolor)[4] = (GLfloat (*)[4]) store->LitColor[0].data;
+     GLfloat (*Bcolor)[4] = (GLfloat (*)[4]) store->LitColor[1].data;
+!    GLfloat (*color[2])[4];
+  
+     const GLuint nr = VB->Count;
+  
+--- 253,261 ----
+     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;
+! #endif
+  
+     const GLuint nr = VB->Count;
+  
+***************
+*** 265,273 ****
+     (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];
+  
+--- 266,271 ----
+Index: xc/extras/Mesa/src/mesa/tnl/t_vb_render.c
+diff -c 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,358 ****
+--- 353,359 ----
+  
+  static void dtr( struct tnl_pipeline_stage *stage )
+  {
++    (void) stage;
+  }
+  
+  
+Index: xc/extras/Mesa/src/mesa/tnl/t_vertex.c
+diff -c 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,165 ****
+--- 160,166 ----
+  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,175 ****
+--- 171,177 ----
+  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,185 ****
+--- 182,188 ----
+  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,195 ****
+--- 193,199 ----
+  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,205 ****
+--- 204,210 ----
+  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,219 ****
+--- 213,226 ----
+  
+  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,228 ****
+--- 230,236 ----
+  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,237 ****
+--- 240,246 ----
+  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,247 ****
+--- 251,257 ----
+  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,255 ****
+--- 260,266 ----
+  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,264 ****
+  static void insert_1f_1( const struct tnl_clipspace_attr *a, GLubyte *v, const GLfloat *in )
+  {
+     GLfloat *out = (GLfloat *)(v);
+!    
+     out[0] = in[0];
+  }
+  
+--- 269,276 ----
+  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,271 ****
+--- 278,284 ----
+                                 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,281 ****
+--- 289,295 ----
+                                 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,291 ****
+--- 300,306 ----
+                                 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,301 ****
+--- 311,317 ----
+                                 const GLfloat *in )
+  {
+     GLchan *c = (GLchan *)v;
++    (void) a;
+     UNCLAMPED_FLOAT_TO_CHAN(c[0], in[0]); 
+     c[1] = 0;
+     c[2] = 0;
+***************
+*** 305,310 ****
+--- 321,327 ----
+  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,319 ****
+--- 331,337 ----
+  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,328 ****
+--- 341,347 ----
+  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,337 ****
+--- 351,357 ----
+  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,346 ****
+--- 361,367 ----
+  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,355 ****
+--- 371,377 ----
+  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,364 ****
+--- 381,387 ----
+  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,382 ****
+--- 391,487 ----
+  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,390 ****
+--- 490,496 ----
+  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,398 ****
+--- 499,505 ----
+  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,406 ****
+--- 508,514 ----
+  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,414 ****
+--- 517,523 ----
+  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,422 ****
+--- 526,532 ----
+  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,431 ****
+--- 536,542 ----
+  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,486 ****
+--- 592,598 ----
+  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,496 ****
+--- 603,609 ----
+  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,507 ****
+--- 615,621 ----
+  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,518 ****
+--- 627,633 ----
+  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,528 ****
+--- 638,644 ----
+  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,539 ****
+--- 650,656 ----
+                                const GLubyte *v )
+  {
+     GLchan *c = (GLchan *)v;
++    (void) a;
+  
+     out[0] = CHAN_TO_FLOAT(c[0]);
+     out[1] = CHAN_TO_FLOAT(c[1]);
+***************
+*** 544,549 ****
+--- 661,667 ----
+  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,567 ****
+--- 671,707 ----
+  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,576 ****
+--- 711,717 ----
+  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,584 ****
+--- 720,726 ----
+  
+  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,671 ****
+--- 808,825 ----
+         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,736 ****
+--- 885,891 ----
+     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 -c 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,58 ****
+--- 53,60 ----
+     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 -c 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,252 ****
+  
+  static GLboolean print_attr_footer( struct tnl_clipspace_codegen *p )
+  {
+!    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   
+     return 0;
+  }
+  
+--- 228,239 ----
+  
+  static GLboolean print_attr_footer( struct tnl_clipspace_codegen *p )
+  {
+!    return emit(p, "      }\n");
+  }
+  
+  static tnl_emit_func print_store_func( struct tnl_clipspace_codegen *p ) 
+  {
+!    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 -c 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,166 ****
+--- 161,167 ----
+  
+  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 -c 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,350 ****
+--- 345,351 ----
+        ctx->Driver.NeedFlush |= FLUSH_UPDATE_CURRENT;
+  }
+  
++ #ifdef USE_X86_ASM
+  
+  static struct _tnl_dynfn *lookup( struct _tnl_dynfn *l, GLuint key )
+  {
+***************
+*** 382,392 ****
+     }
+  
+     if (dfn) 
+!       return (tnl_attrfv_func) dfn->code;
+     else
+        return 0;
+  }
+  
+  /* Helper function for 'CHOOSE' macro.  Do what's necessary when an
+   * entrypoint is called for the first time.
+   */
+--- 383,395 ----
+     }
+  
+     if (dfn) 
+!       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,829 ****
+--- 827,833 ----
+  void _tnl_FlushVertices( GLcontext *ctx, GLuint flags )
+  {
+     TNLcontext *tnl = TNL_CONTEXT(ctx);
++    (void) flags;
+  
+     if (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END)
+        return;
+***************
+*** 860,865 ****
+--- 864,870 ----
+  
+  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 -c 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,173 ****
+                               map->Order);
+  
+        if (tnl->vtx.eval.map1[0].sz == 4) 
+!       glVertex4fv( vertex );
+        else
+!       glVertex3fv( vertex ); 
+     }
+  }
+  
+--- 165,173 ----
+                               map->Order);
+  
+        if (tnl->vtx.eval.map1[0].sz == 4) 
+!       GL_CALL(Vertex4fv)( vertex );
+        else
+!       GL_CALL(Vertex3fv)( vertex ); 
+     }
+  }
+  
+***************
+*** 244,252 ****
+        }
+  
+        if (tnl->vtx.attrsz[0] == 4) 
+!       glVertex4fv( vertex );
+        else
+!       glVertex3fv( vertex ); 
+     }
+  }
+  
+--- 244,252 ----
+        }
+  
+        if (tnl->vtx.attrsz[0] == 4) 
+!       GL_CALL(Vertex4fv)( vertex );
+        else
+!       GL_CALL(Vertex3fv)( vertex ); 
+     }
+  }
+  
+Index: xc/extras/Mesa/src/mesa/tnl/t_vtx_x86_gcc.S
+diff -c 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,45 ****
+   *   Daniel Borca <dborca@yahoo.com>
+   */
+  
+! #if defined (__DJGPP__) || defined (__MINGW32__)
+  #define GLOBL( x )   \
+  .globl _##x;         \
+  _##x:
+! #else  /* !defined (__DJGPP__) && !defined (__MINGW32__) */
+  #define GLOBL( x )   \
+  .globl x;            \
+  x:
+! #endif /* !defined (__DJGPP__) && !defined (__MINGW32__) */
+  
+  
+  #if !defined (STDCALL_API)
+--- 31,45 ----
+   *   Daniel Borca <dborca@yahoo.com>
+   */
+  
+! #if defined (__DJGPP__) || defined (__MINGW32__) || defined (__CYGWIN__)
+  #define GLOBL( x )   \
+  .globl _##x;         \
+  _##x:
+! #else  /* !defined (__DJGPP__) && !defined (__MINGW32__) && !defined (__CYGWIN__) */
+  #define GLOBL( x )   \
+  .globl x;            \
+  x:
+! #endif /* !defined (__DJGPP__) && !defined (__MINGW32__) && !defined (__CYGWIN__) */
+  
+  
+  #if !defined (STDCALL_API)
+Index: xc/extras/Mesa/src/mesa/tnl_dd/t_dd_triemit.h
+diff -c 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,21 ****
+--- 16,28 ----
+                               "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 -c 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,16 ****
+--- 11,17 ----
+       -I$(TOP)/include \
+       -I.. \
+       -I../main \
++      -I../math \
+       -I../glapi \
+       -I../tnl
+  
+Index: xc/extras/Mesa/src/mesa/x86/glapi_x86.S
+diff -c 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,42 ****
+  #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))
+  #else
+! #define GL_PREFIX(n,n2) GLNAME(CONCAT(gl,n))
+  #endif
+  
+  #define GL_OFFSET(x) CODEPTR(REGOFF(4 * x, EAX))
+--- 32,48 ----
+  #ifndef __WIN32__
+  
+  #if defined(STDCALL_API)
+! # 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
+! # 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 -c 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,44 ****
+  *  Developed by Arnaud Le Hors                                                *
+  \*****************************************************************************/
+  
+  #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));
+  
+  /*
+   * Create a colortable compatible with the old style colortable
+--- 32,46 ----
+  *  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, unsigned int ncolors));
+  
+  /*
+   * Create a colortable compatible with the old style colortable
+***************
+*** 50,58 ****
+      XpmColor ***oldct;
+  {
+      XpmColor **colorTable, **color;
+!     int a;
+  
+!     if (ncolors >= SIZE_MAX / sizeof(XpmColor *)) 
+       return XpmNoMemory;
+  
+      colorTable = (XpmColor **) XpmMalloc(ncolors * sizeof(XpmColor *));
+--- 52,60 ----
+      XpmColor ***oldct;
+  {
+      XpmColor **colorTable, **color;
+!     unsigned int a;
+  
+!     if (ncolors >= UINT_MAX / sizeof(XpmColor *)) 
+       return XpmNoMemory;
+  
+      colorTable = (XpmColor **) XpmMalloc(ncolors * sizeof(XpmColor *));
+***************
+*** 69,77 ****
+  static void
+  FreeOldColorTable(colorTable, ncolors)
+      XpmColor **colorTable;
+!     int ncolors;
+  {
+!     int a, b;
+      XpmColor **color;
+      char **sptr;
+  
+--- 71,79 ----
+  static void
+  FreeOldColorTable(colorTable, ncolors)
+      XpmColor **colorTable;
+!     unsigned int ncolors;
+  {
+!     unsigned int a, b;
+      XpmColor **color;
+      char **sptr;
+  
+***************
+*** 122,128 ****
+      XpmExtension *ext;
+      char **sptr;
+  
+!     if (extensions) {
+       for (i = 0, ext = extensions; i < nextensions; i++, ext++) {
+           if (ext->name)
+               XpmFree(ext->name);
+--- 124,130 ----
+      XpmExtension *ext;
+      char **sptr;
+  
+!     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 -c 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,36 ****
+--- 31,39 ----
+  *                                                                             *
+  *  Developed by Arnaud Le Hors                                                *
+  \*****************************************************************************/
++ 
++ /* October 2004, source code review by Thomas Biege <thomas@suse.de> */
++ 
+  /* $XFree86$ */
+  
+  #include "XpmI.h"
+***************
+*** 39,53 ****
+                        unsigned int *used_size, XpmColor *colors,
+                        unsigned int ncolors, unsigned int cpp));
+  
+! LFUNC(WritePixels, void, (char *dataptr, 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,
+                             XpmExtension *ext, unsigned int num));
+  
+! LFUNC(ExtensionsSize, int, (XpmExtension *ext, unsigned int num));
+  LFUNC(CommentsSize, int, (XpmInfo *info));
+  
+  int
+--- 42,58 ----
+                        unsigned int *used_size, XpmColor *colors,
+                        unsigned int ncolors, unsigned int cpp));
+  
+! 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 data_size,
+!                            unsigned int *used_size,
+                             XpmExtension *ext, unsigned int num));
+  
+! LFUNC(ExtensionsSize, unsigned int, (XpmExtension *ext, unsigned int num));
+  LFUNC(CommentsSize, int, (XpmInfo *info));
+  
+  int
+***************
+*** 90,99 ****
+  
+  #undef RETURN
+  #define RETURN(status) \
+  { \
+        ErrorStatus = status; \
+        goto error; \
+! }
+  
+  int
+  XpmCreateBufferFromXpmImage(buffer_return, image, info)
+--- 95,105 ----
+  
+  #undef RETURN
+  #define RETURN(status) \
++ do \
+  { \
+        ErrorStatus = status; \
+        goto error; \
+! }while(0)
+  
+  int
+  XpmCreateBufferFromXpmImage(buffer_return, image, info)
+***************
+*** 107,113 ****
+      unsigned int cmts, extensions, ext_size = 0;
+      unsigned int l, cmt_size = 0;
+      char *ptr = NULL, *p;
+!     unsigned int ptr_size, used_size;
+  
+      *buffer_return = NULL;
+  
+--- 113,119 ----
+      unsigned int cmts, extensions, ext_size = 0;
+      unsigned int l, cmt_size = 0;
+      char *ptr = NULL, *p;
+!     unsigned int ptr_size, used_size, tmp;
+  
+      *buffer_return = NULL;
+  
+***************
+*** 129,135 ****
+  #ifdef VOID_SPRINTF
+      used_size = strlen(buf);
+  #endif
+!     ptr_size = used_size + ext_size + cmt_size + 1;
+      ptr = (char *) XpmMalloc(ptr_size);
+      if (!ptr)
+       return XpmNoMemory;
+--- 135,147 ----
+  #ifdef VOID_SPRINTF
+      used_size = strlen(buf);
+  #endif
+!     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,146 ****
+  #ifndef VOID_SPRINTF
+       used_size +=
+  #endif
+!      sprintf(ptr + used_size, "/*%s*/\n", info->hints_cmt);
+  #ifdef VOID_SPRINTF
+       used_size += strlen(info->hints_cmt) + 5;
+  #endif
+--- 152,158 ----
+  #ifndef VOID_SPRINTF
+       used_size +=
+  #endif
+!      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,164 ****
+  #ifndef VOID_SPRINTF
+       l +=
+  #endif
+!      sprintf(buf + l, " %d %d", info->x_hotspot, info->y_hotspot);
+  #ifdef VOID_SPRINTF
+       l = strlen(buf);
+  #endif
+--- 170,176 ----
+  #ifndef VOID_SPRINTF
+       l +=
+  #endif
+!      snprintf(buf + l, sizeof(buf)-l, " %d %d", info->x_hotspot, info->y_hotspot);
+  #ifdef VOID_SPRINTF
+       l = strlen(buf);
+  #endif
+***************
+*** 180,185 ****
+--- 192,199 ----
+      l = strlen(buf);
+  #endif
+      ptr_size += l;
++     if(ptr_size <= l)
++         RETURN(XpmNoMemory);
+      p = (char *) XpmRealloc(ptr, ptr_size);
+      if (!p)
+       RETURN(XpmNoMemory);
+***************
+*** 192,198 ****
+  #ifndef VOID_SPRINTF
+       used_size +=
+  #endif
+!      sprintf(ptr + used_size, "/*%s*/\n", info->colors_cmt);
+  #ifdef VOID_SPRINTF
+       used_size += strlen(info->colors_cmt) + 5;
+  #endif
+--- 206,212 ----
+  #ifndef VOID_SPRINTF
+       used_size +=
+  #endif
+!      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,214 ****
+       * 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;
+  
+      p = (char *) XpmRealloc(ptr, ptr_size);
+      if (!p)
+--- 222,233 ----
+       * 4 = 1 (for '"') + 3 (for '",\n')
+       * 1 = - 2 (because the last line does not end with ',\n') + 3 (for '};\n')
+       */
+!      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,236 ****
+  #ifndef VOID_SPRINTF
+       used_size +=
+  #endif
+!      sprintf(ptr + 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,
+               image->cpp, image->data, image->colorTable);
+  
+      /* print extensions */
+      if (extensions)
+!      WriteExtensions(ptr + used_size, &used_size,
+                       info->extensions, info->nextensions);
+  
+      /* close the array */
+--- 239,255 ----
+  #ifndef VOID_SPRINTF
+       used_size +=
+  #endif
+!      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, ptr_size - used_size, &used_size, image->width, image->height,
+               image->cpp, image->data, image->colorTable);
+  
+      /* print extensions */
+      if (extensions)
+!      WriteExtensions(ptr + used_size, ptr_size-used_size, &used_size,
+                       info->extensions, info->nextensions);
+  
+      /* close the array */
+***************
+*** 247,252 ****
+--- 266,272 ----
+      return (ErrorStatus);
+  }
+  
++ 
+  static int
+  WriteColors(dataptr, data_size, used_size, colors, ncolors, cpp)
+      char **dataptr;
+***************
+*** 256,262 ****
+      unsigned int ncolors;
+      unsigned int cpp;
+  {
+!     char buf[BUFSIZ];
+      unsigned int a, key, l;
+      char *s, *s2;
+      char **defaults;
+--- 276,282 ----
+      unsigned int ncolors;
+      unsigned int cpp;
+  {
+!     char buf[BUFSIZ] = {0};
+      unsigned int a, key, l;
+      char *s, *s2;
+      char **defaults;
+***************
+*** 266,271 ****
+--- 286,293 ----
+  
+       defaults = (char **) colors;
+       s = buf + 1;
++      if(cpp > (sizeof(buf) - (s-buf)))
++              return(XpmNoMemory);
+       strncpy(s, *defaults++, cpp);
+       s += cpp;
+  
+***************
+*** 274,287 ****
+  #ifndef VOID_SPRINTF
+               s +=
+  #endif
+!              sprintf(s, "\t%s %s", xpmColorKeys[key - 1], s2);
+  #ifdef VOID_SPRINTF
+               s += strlen(s);
+  #endif
+           }
+       }
+       strcpy(s, "\",\n");
+       l = s + 3 - buf;
+       s = (char *) XpmRealloc(*dataptr, *data_size + l);
+       if (!s)
+           return (XpmNoMemory);
+--- 296,319 ----
+  #ifndef VOID_SPRINTF
+               s +=
+  #endif
+!              /* 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,301 ****
+  }
+  
+  static void
+! WritePixels(dataptr, used_size, width, height, cpp, pixels, colors)
+      char *dataptr;
+      unsigned int *used_size;
+      unsigned int width;
+      unsigned int height;
+--- 326,334 ----
+  }
+  
+  static void
+! 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,332 ****
+      char *s = dataptr;
+      unsigned int x, y, h;
+  
+      h = height - 1;
+      for (y = 0; y < h; y++) {
+       *s++ = '"';
+       for (x = 0; x < width; x++, pixels++) {
+!          strncpy(s, colors[*pixels].string, cpp);
+           s += cpp;
+       }
+       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);
+       s += cpp;
+      }
+      *s++ = '"';
+      *used_size += s - dataptr;
+  }
+  
+! static int
+  ExtensionsSize(ext, num)
+      XpmExtension *ext;
+      unsigned int num;
+--- 339,374 ----
+      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++) {
+!          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++) {
+!      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 unsigned int
+  ExtensionsSize(ext, num)
+      XpmExtension *ext;
+      unsigned int num;
+***************
+*** 335,355 ****
+      char **line;
+  
+      size = 0;
+      for (x = 0; x < num; x++, ext++) {
+       /* 11 = 10 (for ',\n"XPMEXT ') + 1 (for '"') */
+       size += strlen(ext->name) + 11;
+!      a = ext->nlines;
+       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"' */
+      return size + 13;
+  }
+  
+  static void
+! WriteExtensions(dataptr, used_size, ext, num)
+      char *dataptr;
+      unsigned int *used_size;
+      XpmExtension *ext;
+      unsigned int num;
+--- 377,402 ----
+      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; /* 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, data_size, used_size, ext, num)
+      char *dataptr;
++     unsigned int data_size;
+      unsigned int *used_size;
+      XpmExtension *ext;
+      unsigned int num;
+***************
+*** 362,368 ****
+  #ifndef VOID_SPRINTF
+       s +=
+  #endif
+!      sprintf(s, ",\n\"XPMEXT %s\"", ext->name);
+  #ifdef VOID_SPRINTF
+       s += strlen(ext->name) + 11;
+  #endif
+--- 409,415 ----
+  #ifndef VOID_SPRINTF
+       s +=
+  #endif
+!      snprintf(s, data_size - (s-dataptr), ",\n\"XPMEXT %s\"", ext->name);
+  #ifdef VOID_SPRINTF
+       s += strlen(ext->name) + 11;
+  #endif
+***************
+*** 371,383 ****
+  #ifndef VOID_SPRINTF
+           s +=
+  #endif
+!          sprintf(s, ",\n\"%s\"", *line);
+  #ifdef VOID_SPRINTF
+           s += strlen(*line) + 4;
+  #endif
+       }
+      }
+!     strcpy(s, ",\n\"XPMENDEXT\"");
+      *used_size += s - dataptr + 13;
+  }
+  
+--- 418,430 ----
+  #ifndef VOID_SPRINTF
+           s +=
+  #endif
+!          snprintf(s, data_size - (s-dataptr), ",\n\"%s\"", *line);
+  #ifdef VOID_SPRINTF
+           s += strlen(*line) + 4;
+  #endif
+       }
+      }
+!     strncpy(s, ",\n\"XPMENDEXT\"", data_size - (s-dataptr)-1);
+      *used_size += s - dataptr + 13;
+  }
+  
+***************
+*** 388,393 ****
+--- 435,441 ----
+      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 -c 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,45 ****
+  \*****************************************************************************/
+  /* $XFree86$ */
+  
+  #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,
+                          unsigned int height, unsigned int cpp,
+                          unsigned int *pixels, XpmColor *colors));
+  
+--- 33,48 ----
+  \*****************************************************************************/
+  /* $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 data_size,
+!                         unsigned int width,
+                          unsigned int height, unsigned int cpp,
+                          unsigned int *pixels, XpmColor *colors));
+  
+***************
+*** 47,53 ****
+                             unsigned int *ext_size,
+                             unsigned int *ext_nlines));
+  
+! LFUNC(CreateExtensions, void, (char **dataptr, unsigned int offset,
+                              XpmExtension *ext, unsigned int num,
+                              unsigned int ext_nlines));
+  
+--- 50,57 ----
+                             unsigned int *ext_size,
+                             unsigned int *ext_nlines));
+  
+! LFUNC(CreateExtensions, void, (char **dataptr, unsigned int data_size,
+!                             unsigned int offset,
+                              XpmExtension *ext, unsigned int num,
+                              unsigned int ext_nlines));
+  
+***************
+*** 88,97 ****
+  
+  #undef RETURN
+  #define RETURN(status) \
+  { \
+        ErrorStatus = status; \
+        goto exit; \
+! }
+  
+  int
+  XpmCreateDataFromXpmImage(data_return, image, info)
+--- 92,102 ----
+  
+  #undef RETURN
+  #define RETURN(status) \
++ do \
+  { \
+        ErrorStatus = status; \
+        goto exit; \
+! } while(0)
+  
+  int
+  XpmCreateDataFromXpmImage(data_return, image, info)
+***************
+*** 122,132 ****
+       * 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_size = sizeof(char *) * header_nlines;
+!     if (header_size >= SIZE_MAX / sizeof(char *))
+       return (XpmNoMemory);
+!     header = (char **) XpmCalloc(header_size, sizeof(char *));
+      if (!header)
+       return (XpmNoMemory);
+  
+--- 127,143 ----
+       * 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; /* 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 >= UINT_MAX / sizeof(char *))
+       return (XpmNoMemory);
+!     header = (char **) XpmCalloc(header_size, sizeof(char *)); /* can we trust image->ncolors */
+      if (!header)
+       return (XpmNoMemory);
+  
+***************
+*** 170,177 ****
+  
+      /* 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;
+  
+      data = (char **) XpmMalloc(data_size);
+      if (!data)
+--- 181,202 ----
+  
+      /* now we know the size needed, alloc the data and copy the header lines */
+      offset = image->width * image->cpp + 1;
+! 
+!     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,186 ****
+  
+      data_nlines = header_nlines + image->height + ext_nlines;
+      *data = (char *) (data + data_nlines);
+      n = image->ncolors;
+!     for (l = 0, sptr = data, sptr2 = header; l <= n; l++, sptr++, sptr2++) {
+       strcpy(*sptr, *sptr2);
+       *(sptr + 1) = *sptr + strlen(*sptr2) + 1;
+      }
+--- 204,213 ----
+  
+      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 && sptr && sptr2; l++, sptr++, sptr2++) {
+       strcpy(*sptr, *sptr2);
+       *(sptr + 1) = *sptr + strlen(*sptr2) + 1;
+      }
+***************
+*** 189,200 ****
+      data[header_nlines] = (char *) data + header_size
+       + (image->height + ext_nlines) * sizeof(char *);
+  
+!     CreatePixels(data + header_nlines, image->width, image->height,
+                image->cpp, image->data, image->colorTable);
+  
+      /* print extensions */
+      if (extensions)
+!      CreateExtensions(data + header_nlines + image->height - 1, offset,
+                        info->extensions, info->nextensions,
+                        ext_nlines);
+  
+--- 216,228 ----
+      data[header_nlines] = (char *) data + header_size
+       + (image->height + ext_nlines) * sizeof(char *);
+  
+!     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,
+!                       data_size - header_nlines - image->height + 1, offset,
+                        info->extensions, info->nextensions,
+                        ext_nlines);
+  
+***************
+*** 225,247 ****
+      char *s, *s2;
+      char **defaults;
+  
+      for (a = 0; a < ncolors; a++, colors++, dataptr++) {
+  
+       defaults = (char **) colors;
+       strncpy(buf, *defaults++, cpp);
+       s = buf + cpp;
+  
+       for (key = 1; key <= NKEYS; key++, defaults++) {
+           if ((s2 = *defaults)) {
+  #ifndef VOID_SPRINTF
+               s +=
+  #endif
+!              sprintf(s, "\t%s %s", xpmColorKeys[key - 1], s2);
+  #ifdef VOID_SPRINTF
+               s += strlen(s);
+  #endif
+           }
+       }
+       l = s - buf + 1;
+       s = (char *) XpmMalloc(l);
+       if (!s)
+--- 253,286 ----
+      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
+!              /* 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,260 ****
+  }
+  
+  static void
+! CreatePixels(dataptr, width, height, cpp, pixels, colors)
+      char **dataptr;
+      unsigned int width;
+      unsigned int height;
+      unsigned int cpp;
+--- 292,300 ----
+  }
+  
+  static void
+! 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,284 ****
+      char *s;
+      unsigned int x, y, h, offset;
+  
+      h = height - 1;
+      offset = width * cpp + 1;
+      for (y = 0; y < h; y++, dataptr++) {
+       s = *dataptr;
+       for (x = 0; x < width; x++, pixels++) {
+!          strncpy(s, colors[*pixels].string, cpp);
+           s += cpp;
+       }
+       *s = '\0';
+       *(dataptr + 1) = *dataptr + offset;
+      }
+      /* duplicate some code to avoid a test in the loop */
+      s = *dataptr;
+      for (x = 0; x < width; x++, pixels++) {
+!      strncpy(s, colors[*pixels].string, cpp);
+       s += cpp;
+      }
+      *s = '\0';
+--- 304,341 ----
+      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++) {
+!          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++) {
+!      if(cpp > data_size - (s - *dataptr))
+!              return;
+!      strncpy(s, colors[*pixels].string, cpp); /* why should we trust *pixel? */
+       s += cpp;
+      }
+      *s = '\0';
+***************
+*** 311,318 ****
+  }
+  
+  static void
+! CreateExtensions(dataptr, offset, ext, num, ext_nlines)
+      char **dataptr;
+      unsigned int offset;
+      XpmExtension *ext;
+      unsigned int num;
+--- 368,376 ----
+  }
+  
+  static void
+! CreateExtensions(dataptr, data_size, offset, ext, num, ext_nlines)
+      char **dataptr;
++     unsigned int data_size;
+      unsigned int offset;
+      XpmExtension *ext;
+      unsigned int num;
+***************
+*** 325,336 ****
+      dataptr++;
+      a = 0;
+      for (x = 0; x < num; x++, ext++) {
+!      sprintf(*dataptr, "XPMEXT %s", ext->name);
+       a++;
+       if (a < ext_nlines)
+           *(dataptr + 1) = *dataptr + strlen(ext->name) + 8;
+       dataptr++;
+!      b = ext->nlines;
+       for (y = 0, line = ext->lines; y < b; y++, line++) {
+           strcpy(*dataptr, *line);
+           a++;
+--- 383,394 ----
+      dataptr++;
+      a = 0;
+      for (x = 0; x < num; x++, ext++) {
+!      snprintf(*dataptr, data_size, "XPMEXT %s", ext->name);
+       a++;
+       if (a < ext_nlines)
+           *(dataptr + 1) = *dataptr + strlen(ext->name) + 8;
+       dataptr++;
+!      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 -c 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,42 ****
+--- 37,44 ----
+   * 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,64 ****
+      char *filename;
+      char **buffer_return;
+  {
+!     int fd, fcheck, len;
+      char *ptr;
+      struct stat stats;
+      FILE *fp;
+--- 60,67 ----
+      char *filename;
+      char **buffer_return;
+  {
+!     int fd, fcheck;
+!     off_t len;
+      char *ptr;
+      struct stat stats;
+      FILE *fp;
+***************
+*** 82,88 ****
+       close(fd);
+       return XpmOpenFailed;
+      }
+!     len = (int) stats.st_size;
+      ptr = (char *) XpmMalloc(len + 1);
+      if (!ptr) {
+       fclose(fp);
+--- 85,91 ----
+       close(fd);
+       return XpmOpenFailed;
+      }
+!     len = stats.st_size;
+      ptr = (char *) XpmMalloc(len + 1);
+      if (!ptr) {
+       fclose(fp);
+Index: xc/extras/Xpm/lib/RdFToI.c
+diff -c 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,48 ****
+  \*****************************************************************************/
+  /* $XFree86$ */
+  
+  #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
+  #endif
+  
+  LFUNC(OpenReadFile, int, (char *filename, xpmData *mdata));
+--- 33,46 ----
+  \*****************************************************************************/
+  /* $XFree86$ */
+  
++ /* October 2004, source code review by Thomas Biege <thomas@suse.de> */
++ 
+  #include "XpmI.h"
+! #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,125 ****
+--- 118,184 ----
+  }
+  #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,199 ****
+      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)))
+               return (XpmNoMemory);
+! 
+!          sprintf(compressfile, "%s.Z", filename);
+!          if (!stat(compressfile, &status)) {
+!              sprintf(buf, "uncompress -c \"%s\"", compressfile);
+!              if (!(mdata->stream.file = popen(buf, "r"))) {
+                   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
+               }
+           }
+           XpmFree(compressfile);
+- # endif
+       }
+  #endif
+      }
+      mdata->CommentLength = 0;
+  #ifdef CXPMPROG
+--- 187,248 ----
+      char *filename;
+      xpmData *mdata;
+  {
+      if (!filename) {
+       mdata->stream.file = (stdin);
+       mdata->type = XPMFILE;
+      } else {
+!      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);
+!          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;
+               }
+           }
+           XpmFree(compressfile);
+       }
+  #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,224 ****
+  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
+!     }
+  }
+--- 259,264 ----
+  xpmDataClose(mdata)
+      xpmData *mdata;
+  {
+!     if (mdata->stream.file != (stdin))
+!      fclose(mdata->stream.file);
+  }
+Index: xc/extras/Xpm/lib/WrFFrBuf.c
+diff -c 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,37 ****
+--- 32,39 ----
+  *  Developed by Arnaud Le Hors                                                *
+  \*****************************************************************************/
+  
++ /* October 2004, source code review by Thomas Biege <thomas@suse.de> */
++ 
+  #include "XpmI.h"
+  
+  int
+***************
+*** 49,55 ****
+      fcheck = fwrite(buffer, len, 1, fp);
+      fclose(fp);
+      if (fcheck != 1)
+!      return XpmOpenFailed;
+  
+      return XpmSuccess;
+  }
+--- 51,57 ----
+      fcheck = fwrite(buffer, len, 1, fp);
+      fclose(fp);
+      if (fcheck != 1)
+!      return XpmOpenFailed; /* maybe use a better return value */
+  
+      return XpmSuccess;
+  }
+Index: xc/extras/Xpm/lib/WrFFrI.c
+diff -c 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,47 ****
+   */
+  
+  #include "XpmI.h"
+! #if !defined(NO_ZPIPE) && defined(WIN32)
+! # define popen _popen
+! # define pclose _pclose
+  #endif
+  
+  /* MS Windows define a function called WriteFile @#%#&!!! */
+--- 39,51 ----
+   */
+  
+  #include "XpmI.h"
+! 
+! #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,104 ****
+      XpmInfo *info;
+  {
+      xpmData mdata;
+!     char *name, *dot, *s, new_name[BUFSIZ];
+      int ErrorStatus;
+  
+      /* open file to write */
+--- 102,108 ----
+      XpmInfo *info;
+  {
+      xpmData mdata;
+!     char *name, *dot, *s, new_name[BUFSIZ] = {0};
+      int ErrorStatus;
+  
+      /* open file to write */
+***************
+*** 121,127 ****
+  #endif
+       /* let's try to make a valid C syntax name */
+       if (index(name, '.')) {
+!          strcpy(new_name, name);
+           /* change '.' to '_' */
+           name = s = new_name;
+           while ((dot = index(s, '.'))) {
+--- 125,132 ----
+  #endif
+       /* let's try to make a valid C syntax name */
+       if (index(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,254 ****
+      unsigned int x, y, h;
+  
+      h = height - 1;
+!     if (cpp != 0 && width >= (SIZE_MAX - 3)/cpp) 
+       return XpmNoMemory;    
+      p = buf = (char *) XpmMalloc(width * cpp + 3);
+      if (!buf)
+--- 253,259 ----
+      unsigned int x, y, h;
+  
+      h = height - 1;
+!     if (cpp != 0 && width >= (UINT_MAX - 3)/cpp) 
+       return XpmNoMemory;    
+      p = buf = (char *) XpmMalloc(width * cpp + 3);
+      if (!buf)
+***************
+*** 297,302 ****
+--- 302,315 ----
+      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,342 ****
+      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);
+       if (len > 2 && !strcmp(".Z", filename + (len - 2))) {
+!          sprintf(buf, "compress > \"%s\"", filename);
+!          if (!(mdata->stream.file = popen(buf, "w")))
+!              return (XpmOpenFailed);
+! 
+           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->type = XPMPIPE;
+!      } else {
+  #endif
+!          if (!(mdata->stream.file = fopen(filename, "w")))
+!              return (XpmOpenFailed);
+! 
+           mdata->type = XPMFILE;
+- #ifndef NO_ZPIPE
+       }
+! #endif
+      }
+      return (XpmSuccess);
+  }
+--- 318,349 ----
+      char *filename;
+      xpmData *mdata;
+  {
+      if (!filename) {
+       mdata->stream.file = (stdout);
+       mdata->type = XPMFILE;
+      } else {
+  #ifndef NO_ZPIPE
+!      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))) {
+!          mdata->stream.file = xpmPipeThrough(fd, "compress", NULL, "w");
+           mdata->type = XPMPIPE;
+       } else if (len > 3 && !strcmp(".gz", filename + (len - 3))) {
+!          mdata->stream.file = xpmPipeThrough(fd, "gzip", "-q", "w");
+           mdata->type = XPMPIPE;
+!      } else
+  #endif
+!      {
+!          mdata->stream.file = fdopen(fd, "w");
+           mdata->type = XPMFILE;
+       }
+!      if (!mdata->stream.file)
+!          return (XpmOpenFailed);
+      }
+      return (XpmSuccess);
+  }
+***************
+*** 348,362 ****
+  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
+!     }
+  }
+--- 355,361 ----
+  xpmDataClose(mdata)
+      xpmData *mdata;
+  {
+!     if (mdata->stream.file != (stdout))
+!      fclose(mdata->stream.file);
+  }
++ 
+Index: xc/extras/Xpm/lib/XpmI.h
+diff -c 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,56 ****
+--- 49,58 ----
+   * 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 -c 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 ****
+! /* $XdotOrg: xc/extras/Xpm/lib/create.c,v 1.2.4.1 2004/09/15 15:47:39 daniel Exp $ */
+  /*
+   * Copyright (C) 1989-95 GROUPE BULL
+   *
+--- 1,4 ----
+! /* $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,50 ****
+--- 45,52 ----
+   * 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,592 ****
+            */
+       } else {
+  #endif
+!          int i;
+  
+  #ifndef AMIGA
+           ncols = visual->map_entries;
+--- 588,594 ----
+            */
+       } else {
+  #endif
+!          unsigned int i;
+  
+  #ifndef AMIGA
+           ncols = visual->map_entries;
+***************
+*** 746,757 ****
+  
+  
+  /* function call in case of error */
+  #undef RETURN
+  #define RETURN(status) \
+  { \
+        ErrorStatus = status; \
+        goto error; \
+! }
+  
+  int
+  XpmCreateImageFromXpmImage(display, image,
+--- 748,761 ----
+  
+  
+  /* function call in case of error */
++ 
+  #undef RETURN
+  #define RETURN(status) \
++ do \
+  { \
+        ErrorStatus = status; \
+        goto error; \
+! } while(0)
+  
+  int
+  XpmCreateImageFromXpmImage(display, image,
+***************
+*** 817,823 ****
+  
+      ErrorStatus = XpmSuccess;
+  
+!     if (image->ncolors >= SIZE_MAX / sizeof(Pixel)) 
+       return (XpmNoMemory);
+  
+      /* malloc pixels index tables */
+--- 821,827 ----
+  
+      ErrorStatus = XpmSuccess;
+  
+!     if (image->ncolors >= UINT_MAX / sizeof(Pixel)) 
+       return (XpmNoMemory);
+  
+      /* malloc pixels index tables */
+***************
+*** 992,1000 ****
+       return (XpmNoMemory);
+  
+  #if !defined(FOR_MSW) && !defined(AMIGA)
+!     if (height != 0 && (*image_return)->bytes_per_line >= SIZE_MAX / height)
+       return XpmNoMemory;
+      /* now that bytes_per_line must have been set properly alloc data */
+      (*image_return)->data =
+       (char *) XpmMalloc((*image_return)->bytes_per_line * height);
+  
+--- 996,1008 ----
+       return (XpmNoMemory);
+  
+  #if !defined(FOR_MSW) && !defined(AMIGA)
+!     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,1029 ****
+  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));
+  
+  static unsigned char Const _reverse_byte[0x100] = {
+      0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
+--- 1031,1037 ----
+  LFUNC(_putbits, void, (register char *src, int dstoffset,
+                      register int numbits, register char *dst));
+  
+! 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,1074 ****
+  static int
+  _XReverse_Bytes(bpt, nb)
+      register unsigned char *bpt;
+!     register int nb;
+  {
+      do {
+       *bpt = _reverse_byte[*bpt];
+       bpt++;
+!     } while (--nb > 0);
+      return 0;
+  }
+  
+--- 1071,1082 ----
+  static int
+  _XReverse_Bytes(bpt, nb)
+      register unsigned char *bpt;
+!     register unsigned int nb;
+  {
+      do {
+       *bpt = _reverse_byte[*bpt];
+       bpt++;
+!     } while (--nb > 0); /* is nb user-controled? */
+      return 0;
+  }
+  
+***************
+*** 1207,1213 ****
+      register char *src;
+      register char *dst;
+      register unsigned int *iptr;
+!     register int x, y, i;
+      register char *data;
+      Pixel pixel, px;
+      int nbytes, depth, ibu, ibpp;
+--- 1215,1221 ----
+      register char *src;
+      register char *dst;
+      register unsigned int *iptr;
+!     register unsigned int x, y, i;
+      register char *data;
+      Pixel pixel, px;
+      int nbytes, depth, ibu, ibpp;
+***************
+*** 1217,1224 ****
+      depth = image->depth;
+      if (depth == 1) {
+       ibu = image->bitmap_unit;
+!      for (y = 0; y < height; y++)
+!          for (x = 0; x < width; x++, iptr++) {
+               pixel = pixels[*iptr];
+               for (i = 0, px = pixel; i < sizeof(unsigned long);
+                    i++, px >>= 8)
+--- 1225,1232 ----
+      depth = image->depth;
+      if (depth == 1) {
+       ibu = image->bitmap_unit;
+!      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,1304 ****
+  {
+      unsigned char *data;
+      unsigned int *iptr;
+!     int y;
+      Pixel pixel;
+  
+  #ifdef WITHOUT_SPEEDUPS
+  
+!     int x;
+      unsigned char *addr;
+  
+      data = (unsigned char *) image->data;
+--- 1301,1312 ----
+  {
+      unsigned char *data;
+      unsigned int *iptr;
+!     unsigned int y;
+      Pixel pixel;
+  
+  #ifdef WITHOUT_SPEEDUPS
+  
+!     unsigned int x;
+      unsigned char *addr;
+  
+      data = (unsigned char *) image->data;
+***************
+*** 1335,1341 ****
+  
+  #else  /* WITHOUT_SPEEDUPS */
+  
+!     int bpl = image->bytes_per_line;
+      unsigned char *data_ptr, *max_data;
+  
+      data = (unsigned char *) image->data;
+--- 1343,1349 ----
+  
+  #else  /* WITHOUT_SPEEDUPS */
+  
+!     unsigned int bpl = image->bytes_per_line;
+      unsigned char *data_ptr, *max_data;
+  
+      data = (unsigned char *) image->data;
+***************
+*** 1403,1413 ****
+  {
+      unsigned char *data;
+      unsigned int *iptr;
+!     int y;
+  
+  #ifdef WITHOUT_SPEEDUPS
+  
+!     int x;
+      unsigned char *addr;
+  
+      data = (unsigned char *) image->data;
+--- 1411,1421 ----
+  {
+      unsigned char *data;
+      unsigned int *iptr;
+!     unsigned int y;
+  
+  #ifdef WITHOUT_SPEEDUPS
+  
+!     unsigned int x;
+      unsigned char *addr;
+  
+      data = (unsigned char *) image->data;
+***************
+*** 1431,1437 ****
+  
+      Pixel pixel;
+  
+!     int bpl = image->bytes_per_line;
+      unsigned char *data_ptr, *max_data;
+  
+      data = (unsigned char *) image->data;
+--- 1439,1445 ----
+  
+      Pixel pixel;
+  
+!     unsigned int bpl = image->bytes_per_line;
+      unsigned char *data_ptr, *max_data;
+  
+      data = (unsigned char *) image->data;
+***************
+*** 1484,1494 ****
+  {
+      char *data;
+      unsigned int *iptr;
+!     int y;
+  
+  #ifdef WITHOUT_SPEEDUPS
+  
+!     int x;
+  
+      data = image->data;
+      iptr = pixelindex;
+--- 1492,1502 ----
+  {
+      char *data;
+      unsigned int *iptr;
+!     unsigned int y;
+  
+  #ifdef WITHOUT_SPEEDUPS
+  
+!     unsigned int x;
+  
+      data = image->data;
+      iptr = pixelindex;
+***************
+*** 1498,1504 ****
+  
+  #else  /* WITHOUT_SPEEDUPS */
+  
+!     int bpl = image->bytes_per_line;
+      char *data_ptr, *max_data;
+  
+      data = image->data;
+--- 1506,1512 ----
+  
+  #else  /* WITHOUT_SPEEDUPS */
+  
+!     unsigned int bpl = image->bytes_per_line;
+      char *data_ptr, *max_data;
+  
+      data = image->data;
+***************
+*** 1533,1544 ****
+       PutImagePixels(image, width, height, pixelindex, pixels);
+      else {
+       unsigned int *iptr;
+!      int y;
+       char *data;
+  
+  #ifdef WITHOUT_SPEEDUPS
+  
+!      int x;
+  
+       data = image->data;
+       iptr = pixelindex;
+--- 1541,1552 ----
+       PutImagePixels(image, width, height, pixelindex, pixels);
+      else {
+       unsigned int *iptr;
+!      unsigned int y;
+       char *data;
+  
+  #ifdef WITHOUT_SPEEDUPS
+  
+!      unsigned int x;
+  
+       data = image->data;
+       iptr = pixelindex;
+***************
+*** 1761,1766 ****
+--- 1769,1777 ----
+      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,1797 ****
+      register char *dst;
+      register int i;
+      Pixel px;
+!     int nbytes, ibpp;
+  
+      ibpp = ximage->bits_per_pixel;
+      if (ximage->depth == 4)
+--- 1802,1811 ----
+      register char *dst;
+      register int i;
+      Pixel px;
+!     unsigned int nbytes, ibpp;
+! 
+!     if(x < 0 || y < 0)
+!      return 0;
+  
+      ibpp = ximage->bits_per_pixel;
+      if (ximage->depth == 4)
+***************
+*** 1825,1830 ****
+--- 1839,1847 ----
+  {
+      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,1845 ****
+--- 1857,1865 ----
+  {
+      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,1862 ****
+--- 1877,1885 ----
+  {
+      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,1879 ****
+--- 1897,1905 ----
+  {
+      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,1894 ****
+--- 1915,1923 ----
+  {
+      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,1907 ****
+--- 1931,1939 ----
+      int y;
+      unsigned long pixel;
+  {
++     if(x < 0 || y < 0)
++      return 0;
++ 
+      ximage->data[ZINDEX8(x, y, ximage)] = pixel;
+      return 1;
+  }
+***************
+*** 1913,1918 ****
+--- 1945,1953 ----
+      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,1932 ****
+--- 1962,1970 ----
+      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,2068 ****
+       xpmGetCmt(data, &colors_cmt);
+  
+      /* malloc pixels index tables */
+!     if (ncolors >= SIZE_MAX / sizeof(Pixel)) 
+!      return XpmNoMemory;
+  
+      image_pixels = (Pixel *) XpmMalloc(sizeof(Pixel) * ncolors);
+      if (!image_pixels)
+--- 2099,2106 ----
+       xpmGetCmt(data, &colors_cmt);
+  
+      /* malloc pixels index tables */
+!     if (ncolors >= UINT_MAX / sizeof(Pixel)) 
+!      RETURN(XpmNoMemory);
+  
+      image_pixels = (Pixel *) XpmMalloc(sizeof(Pixel) * ncolors);
+      if (!image_pixels)
+***************
+*** 2174,2180 ****
+       * free the hastable
+       */
+      if (ErrorStatus != XpmSuccess)
+!      RETURN(ErrorStatus)
+      else if (USE_HASHTABLE)
+       xpmHashTableFree(&hashtable);
+  
+--- 2212,2218 ----
+       * free the hastable
+       */
+      if (ErrorStatus != XpmSuccess)
+!      RETURN(ErrorStatus);
+      else if (USE_HASHTABLE)
+       xpmHashTableFree(&hashtable);
+  
+***************
+*** 2366,2376 ****
+  
+           /* array of pointers malloced by need */
+           unsigned short *cidx[256];
+!          int char1;
+  
+           bzero((char *)cidx, 256 * sizeof(unsigned short *)); /* init */
+           for (a = 0; a < ncolors; a++) {
+!              char1 = colorTable[a].string[0];
+               if (cidx[char1] == NULL) { /* get new memory */
+                   cidx[char1] = (unsigned short *)
+                       XpmCalloc(256, sizeof(unsigned short));
+--- 2404,2414 ----
+  
+           /* array of pointers malloced by need */
+           unsigned short *cidx[256];
+!          unsigned int char1;
+  
+           bzero((char *)cidx, 256 * sizeof(unsigned short *)); /* init */
+           for (a = 0; a < ncolors; a++) {
+!              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 -c 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,38 ****
+--- 33,40 ----
+  \*****************************************************************************/
+  /* $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,268 ****
+       }
+       Ungetc(data, c, file);
+      }
+!     return (n);
+  }
+  
+  /*
+--- 264,270 ----
+       }
+       Ungetc(data, c, file);
+      }
+!     return (n); /* this returns bytes read + 1 */
+  }
+  
+  /*
+***************
+*** 375,382 ****
+  {
+      if (!data->type)
+       *cmt = NULL;
+!     else if (data->CommentLength != 0 && data->CommentLength < SIZE_MAX - 1) {
+!      *cmt = (char *) XpmMalloc(data->CommentLength + 1);
+       strncpy(*cmt, data->Comment, data->CommentLength);
+       (*cmt)[data->CommentLength] = '\0';
+       data->CommentLength = 0;
+--- 377,385 ----
+  {
+      if (!data->type)
+       *cmt = NULL;
+!     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,406 ****
+  xpmParseHeader(data)
+      xpmData *data;
+  {
+!     char buf[BUFSIZ];
+      int l, n = 0;
+  
+      if (data->type) {
+--- 403,409 ----
+  xpmParseHeader(data)
+      xpmData *data;
+  {
+!     char buf[BUFSIZ+1] = {0};
+      int l, n = 0;
+  
+      if (data->type) {
+Index: xc/extras/Xpm/lib/hashtab.c
+diff -c 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,150 ****
+      unsigned int size = table->size;
+      xpmHashAtom *t, *p;
+      int i;
+!     int oldSize = size;
+  
+      t = atomTable;
+      HASH_TABLE_GROWS
+       table->size = size;
+      table->limit = size / 3;
+!     if (size >= SIZE_MAX / sizeof(*atomTable)) 
+       return (XpmNoMemory);
+      atomTable = (xpmHashAtom *) XpmMalloc(size * sizeof(*atomTable));
+      if (!atomTable)
+--- 138,150 ----
+      unsigned int size = table->size;
+      xpmHashAtom *t, *p;
+      int i;
+!     unsigned int oldSize = size;
+  
+      t = atomTable;
+      HASH_TABLE_GROWS
+       table->size = size;
+      table->limit = size / 3;
+!     if (size >= UINT_MAX / sizeof(*atomTable)) 
+       return (XpmNoMemory);
+      atomTable = (xpmHashAtom *) XpmMalloc(size * sizeof(*atomTable));
+      if (!atomTable)
+***************
+*** 206,212 ****
+      table->size = INITIAL_HASH_SIZE;
+      table->limit = table->size / 3;
+      table->used = 0;
+!     if (table->size >= SIZE_MAX / sizeof(*atomTable))
+       return (XpmNoMemory);
+      atomTable = (xpmHashAtom *) XpmMalloc(table->size * sizeof(*atomTable));
+      if (!atomTable)
+--- 206,212 ----
+      table->size = INITIAL_HASH_SIZE;
+      table->limit = table->size / 3;
+      table->used = 0;
+!     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 -c 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,50 ****
+      char *s1;
+  {
+      char *s2;
+!     int l = strlen(s1) + 1;
+  
+      if (s2 = (char *) XpmMalloc(l))
+       strcpy(s2, s1);
+--- 44,50 ----
+      char *s1;
+  {
+      char *s2;
+!     size_t l = strlen(s1) + 1;
+  
+      if (s2 = (char *) XpmMalloc(l))
+       strcpy(s2, s1);
+Index: xc/extras/Xpm/lib/parse.c
+diff -c 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 ****
+! /* $XdotOrg: xc/extras/Xpm/lib/parse.c,v 1.2.4.1 2004/09/15 15:47:39 daniel Exp $ */
+  /*
+   * Copyright (C) 1989-95 GROUPE BULL
+   *
+--- 1,4 ----
+! /* $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,66 ****
+   * HeDu (hedu@cul-ipn.uni-kiel.de) 4/94
+   */
+  
+  #include "XpmI.h"
+  #include <ctype.h>
+  #include <string.h>
+  
+  #ifdef HAS_STRLCAT
+! # define STRLCAT(dst, src, dstsize) { \
+       if (strlcat(dst, src, dstsize) >= (dstsize)) \
+!          return (XpmFileInvalid); }
+! # define STRLCPY(dst, src, dstsize) { \
+       if (strlcpy(dst, src, dstsize) >= (dstsize)) \
+!          return (XpmFileInvalid); }
+  #else
+! # define STRLCAT(dst, src, dstsize) { \
+       if ((strlen(dst) + strlen(src)) < (dstsize)) \
+           strcat(dst, src); \
+!      else return (XpmFileInvalid); }
+! # define STRLCPY(dst, src, dstsize) { \
+       if (strlen(src) < (dstsize)) \
+           strcpy(dst, src); \
+!      else return (XpmFileInvalid); }
+  #endif
+  
+  LFUNC(ParsePixels, int, (xpmData *data, unsigned int width,
+--- 41,68 ----
+   * 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) do { \
+       if (strlcat(dst, src, dstsize) >= (dstsize)) \
+!          return (XpmFileInvalid); } while(0)
+! # define STRLCPY(dst, src, dstsize) do { \
+       if (strlcpy(dst, src, dstsize) >= (dstsize)) \
+!          return (XpmFileInvalid); } while(0)
+  #else
+! # define STRLCAT(dst, src, dstsize) do { \
+       if ((strlen(dst) + strlen(src)) < (dstsize)) \
+           strcat(dst, src); \
+!      else return (XpmFileInvalid); } while(0)
+! # define STRLCPY(dst, src, dstsize) do { \
+       if (strlen(src) < (dstsize)) \
+           strcpy(dst, src); \
+!      else return (XpmFileInvalid); } while(0)
+  #endif
+  
+  LFUNC(ParsePixels, int, (xpmData *data, unsigned int width,
+***************
+*** 205,211 ****
+      char **defaults;
+      int ErrorStatus;
+  
+!     if (ncolors >= SIZE_MAX / sizeof(XpmColor))
+       return (XpmNoMemory);
+      colorTable = (XpmColor *) XpmCalloc(ncolors, sizeof(XpmColor));
+      if (!colorTable)
+--- 207,213 ----
+      char **defaults;
+      int ErrorStatus;
+  
+!     if (ncolors >= UINT_MAX / sizeof(XpmColor))
+       return (XpmNoMemory);
+      colorTable = (XpmColor *) XpmCalloc(ncolors, sizeof(XpmColor));
+      if (!colorTable)
+***************
+*** 218,224 ****
+           /*
+            * read pixel value
+            */
+!          if (cpp >= SIZE_MAX - 1) {
+               xpmFreeColorTable(colorTable, ncolors);
+               return (XpmNoMemory);
+           }
+--- 220,226 ----
+           /*
+            * read pixel value
+            */
+!          if (cpp >= UINT_MAX - 1) {
+               xpmFreeColorTable(colorTable, ncolors);
+               return (XpmNoMemory);
+           }
+***************
+*** 277,285 ****
+                       return (XpmFileInvalid);
+                   }
+                   if (!lastwaskey)
+!                      STRLCAT(curbuf, " ", sizeof(curbuf)); /* append space */
+                   buf[l] = '\0';
+!                  STRLCAT(curbuf, buf, sizeof(curbuf));/* append buf */
+                   lastwaskey = 0;
+               }
+           }
+--- 279,287 ----
+                       return (XpmFileInvalid);
+                   }
+                   if (!lastwaskey)
+!                      STRLCAT(curbuf, " ", sizeof(curbuf));/* append space */
+                   buf[l] = '\0';
+!                  STRLCAT(curbuf, buf, sizeof(curbuf)); /* append buf */
+                   lastwaskey = 0;
+               }
+           }
+***************
+*** 287,293 ****
+               xpmFreeColorTable(colorTable, ncolors);
+               return (XpmFileInvalid);
+           }
+!          len = strlen(curbuf) + 1;
+           s = defaults[curkey] = (char *) XpmMalloc(len);
+           if (!s) {
+               xpmFreeColorTable(colorTable, ncolors);
+--- 289,295 ----
+               xpmFreeColorTable(colorTable, ncolors);
+               return (XpmFileInvalid);
+           }
+!          len = strlen(curbuf) + 1; /* integer overflow just theoretically possible */
+           s = defaults[curkey] = (char *) XpmMalloc(len);
+           if (!s) {
+               xpmFreeColorTable(colorTable, ncolors);
+***************
+*** 306,312 ****
+           /*
+            * read pixel value
+            */
+!          if (cpp >= SIZE_MAX - 1) {
+               xpmFreeColorTable(colorTable, ncolors);
+               return (XpmNoMemory);
+           }
+--- 308,314 ----
+           /*
+            * read pixel value
+            */
+!          if (cpp >= UINT_MAX - 1) {
+               xpmFreeColorTable(colorTable, ncolors);
+               return (XpmNoMemory);
+           }
+***************
+*** 351,357 ****
+           memcpy(s, curbuf, len);
+           color->c_color = s;
+           *curbuf = '\0';             /* reset curbuf */
+!          if (a < ncolors - 1)
+               xpmNextString(data);    /* get to the next string */
+       }
+      }
+--- 353,359 ----
+           memcpy(s, curbuf, len);
+           color->c_color = s;
+           *curbuf = '\0';             /* reset curbuf */
+!          if (a < ncolors - 1)        /* can we trust ncolors -> leave data's bounds */
+               xpmNextString(data);    /* get to the next string */
+       }
+      }
+***************
+*** 370,380 ****
+      xpmHashTable *hashtable;
+      unsigned int **pixels;
+  {
+!     unsigned int *iptr, *iptr2;
+      unsigned int a, x, y;
+  
+!     if ((height > 0 && width >= SIZE_MAX / height) ||
+!      width * height >= SIZE_MAX / sizeof(unsigned int)) 
+       return XpmNoMemory;
+  #ifndef FOR_MSW
+      iptr2 = (unsigned int *) XpmMalloc(sizeof(unsigned int) * width * height);
+--- 372,382 ----
+      xpmHashTable *hashtable;
+      unsigned int **pixels;
+  {
+!     unsigned int *iptr, *iptr2 = NULL; /* found by Egbert Eich */
+      unsigned int a, x, y;
+  
+!     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,406 ****
+       {
+           unsigned short colidx[256];
+  
+!          if (ncolors > 256)
+               return (XpmFileInvalid);
+  
+           bzero((char *)colidx, 256 * sizeof(short));
+           for (a = 0; a < ncolors; a++)
+--- 401,410 ----
+       {
+           unsigned short colidx[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,442 ****
+       {
+  
+  /* free all allocated pointers at all exits */
+! #define FREE_CIDX {int f; for (f = 0; f < 256; f++) \
+! if (cidx[f]) XpmFree(cidx[f]);}
+  
+           /* array of pointers malloced by need */
+           unsigned short *cidx[256];
+!          int char1;
+  
+           bzero((char *)cidx, 256 * sizeof(unsigned short *)); /* init */
+           for (a = 0; a < ncolors; a++) {
+!              char1 = colorTable[a].string[0];
+               if (cidx[char1] == NULL) { /* get new memory */
+                   cidx[char1] = (unsigned short *)
+                       XpmCalloc(256, sizeof(unsigned short));
+--- 431,450 ----
+       {
+  
+  /* free all allocated pointers at all exits */
+! #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];
+!          unsigned int char1;
+  
+           bzero((char *)cidx, 256 * sizeof(unsigned short *)); /* init */
+           for (a = 0; a < ncolors; a++) {
+!              char1 = (unsigned char) colorTable[a].string[0];
+               if (cidx[char1] == NULL) { /* get new memory */
+                   cidx[char1] = (unsigned short *)
+                       XpmCalloc(256, sizeof(unsigned short));
+***************
+*** 480,487 ****
+           char *s;
+           char buf[BUFSIZ];
+  
+!          if (cpp >= sizeof(buf))
+               return (XpmFileInvalid);
+  
+           buf[cpp] = '\0';
+           if (USE_HASHTABLE) {
+--- 488,497 ----
+           char *s;
+           char buf[BUFSIZ];
+  
+!          if (cpp >= sizeof(buf)) {
+!              XpmFree(iptr2); /* found by Egbert Eich */
+               return (XpmFileInvalid);
++          }
+  
+           buf[cpp] = '\0';
+           if (USE_HASHTABLE) {
+***************
+*** 491,497 ****
+                   xpmNextString(data);
+                   for (x = 0; x < width; x++, iptr++) {
+                       for (a = 0, s = buf; a < cpp; a++, s++)
+!                          *s = xpmGetC(data);
+                       slot = xpmHashSlot(hashtable, buf);
+                       if (!*slot) {   /* no color matches */
+                           XpmFree(iptr2);
+--- 501,507 ----
+                   xpmNextString(data);
+                   for (x = 0; x < width; x++, iptr++) {
+                       for (a = 0, s = buf; a < cpp; a++, s++)
+!                          *s = xpmGetC(data); /* int assigned to char, not a problem here */
+                       slot = xpmHashSlot(hashtable, buf);
+                       if (!*slot) {   /* no color matches */
+                           XpmFree(iptr2);
+***************
+*** 505,511 ****
+                   xpmNextString(data);
+                   for (x = 0; x < width; x++, iptr++) {
+                       for (a = 0, s = buf; a < cpp; a++, s++)
+!                          *s = xpmGetC(data);
+                       for (a = 0; a < ncolors; a++)
+                           if (!strcmp(colorTable[a].string, buf))
+                               break;
+--- 515,521 ----
+                   xpmNextString(data);
+                   for (x = 0; x < width; x++, iptr++) {
+                       for (a = 0, s = buf; a < cpp; a++, s++)
+!                          *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,566 ****
+      while (!notstart && notend) {
+       /* there starts an extension */
+       ext = (XpmExtension *)
+!          XpmRealloc(exts, (num + 1) * sizeof(XpmExtension));
+       if (!ext) {
+           XpmFree(string);
+           XpmFreeExtensions(exts, num);
+--- 570,576 ----
+      while (!notstart && notend) {
+       /* there starts an extension */
+       ext = (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,603 ****
+       while ((notstart = strncmp("XPMEXT", string, 6))
+              && (notend = strncmp("XPMENDEXT", string, 9))) {
+           sp = (char **)
+!              XpmRealloc(ext->lines, (nlines + 1) * sizeof(char *));
+           if (!sp) {
+               XpmFree(string);
+               ext->nlines = nlines;
+--- 607,613 ----
+       while ((notstart = strncmp("XPMEXT", string, 6))
+              && (notend = strncmp("XPMENDEXT", string, 9))) {
+           sp = (char **)
+!              XpmRealloc(ext->lines, (nlines + 1) * sizeof(char *)); /* can we iterate enough for a wrapping? */
+           if (!sp) {
+               XpmFree(string);
+               ext->nlines = nlines;
+***************
+*** 637,645 ****
+  /* function call in case of error */
+  #undef RETURN
+  #define RETURN(status) \
+! { \
+        goto error; \
+! }
+  
+  /*
+   * This function parses an Xpm file or data and store the found informations
+--- 647,655 ----
+  /* 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 -c 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,48 ****
+--- 43,50 ----
+   * 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,181 ****
+  /* function call in case of error */
+  #undef RETURN
+  #define RETURN(status) \
+! { \
+        ErrorStatus = status; \
+        goto error; \
+! }
+  
+  /*
+   * This function scans the given image and stores the found informations in
+--- 174,183 ----
+  /* 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,247 ****
+      else
+       cpp = 0;
+  
+!     if ((height > 0 && width >= SIZE_MAX / height) ||
+!      width * height >= SIZE_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)) 
+       RETURN(XpmNoMemory);
+  
+      pmap.pixels = (Pixel *) XpmMalloc(sizeof(Pixel) * pmap.size);
+--- 235,249 ----
+      else
+       cpp = 0;
+  
+!     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 >= UINT_MAX / sizeof(Pixel)) 
+       RETURN(XpmNoMemory);
+  
+      pmap.pixels = (Pixel *) XpmMalloc(sizeof(Pixel) * pmap.size);
+***************
+*** 308,314 ****
+       * get rgb values and a string of char, and possibly a name for each
+       * color
+       */
+!     if (pmap.ncolors >= SIZE_MAX / sizeof(XpmColor))
+       RETURN(XpmNoMemory);
+      colorTable = (XpmColor *) XpmCalloc(pmap.ncolors, sizeof(XpmColor));
+      if (!colorTable)
+--- 310,316 ----
+       * get rgb values and a string of char, and possibly a name for each
+       * color
+       */
+!     if (pmap.ncolors >= UINT_MAX / sizeof(XpmColor))
+       RETURN(XpmNoMemory);
+      colorTable = (XpmColor *) XpmCalloc(pmap.ncolors, sizeof(XpmColor));
+      if (!colorTable)
+***************
+*** 368,374 ****
+  
+      /* first get a character string */
+      a = 0;
+!     if (cpp >= SIZE_MAX - 1)
+       return (XpmNoMemory);
+      if (!(s = color->string = (char *) XpmMalloc(cpp + 1)))
+       return (XpmNoMemory);
+--- 370,376 ----
+  
+      /* first get a character string */
+      a = 0;
+!     if (cpp >= UINT_MAX - 1)
+       return (XpmNoMemory);
+      if (!(s = color->string = (char *) XpmMalloc(cpp + 1)))
+       return (XpmNoMemory);
+***************
+*** 461,467 ****
+      }
+  
+      /* first get character strings and rgb values */
+!     if (ncolors >= SIZE_MAX / sizeof(XColor) || cpp >= SIZE_MAX - 1)
+       return (XpmNoMemory);
+      xcolors = (XColor *) XpmMalloc(sizeof(XColor) * ncolors);
+      if (!xcolors)
+--- 463,469 ----
+      }
+  
+      /* first get character strings and rgb values */
+!     if (ncolors >= UINT_MAX / sizeof(XColor) || cpp >= UINT_MAX - 1)
+       return (XpmNoMemory);
+      xcolors = (XColor *) XpmMalloc(sizeof(XColor) * ncolors);
+      if (!xcolors)
+***************
+*** 619,625 ****
+      char *dst;
+      unsigned int *iptr;
+      char *data;
+!     int x, y, i;
+      int bits, depth, ibu, ibpp, offset;
+      unsigned long lbt;
+      Pixel pixel, px;
+--- 621,627 ----
+      char *dst;
+      unsigned int *iptr;
+      char *data;
+!     unsigned int x, y, i;
+      int bits, depth, ibu, ibpp, offset;
+      unsigned long lbt;
+      Pixel pixel, px;
+***************
+*** 721,727 ****
+      unsigned char *addr;
+      unsigned char *data;
+      unsigned int *iptr;
+!     int x, y;
+      unsigned long lbt;
+      Pixel pixel;
+      int depth;
+--- 723,729 ----
+      unsigned char *addr;
+      unsigned char *data;
+      unsigned int *iptr;
+!     unsigned int x, y;
+      unsigned long lbt;
+      Pixel pixel;
+      int depth;
+***************
+*** 786,792 ****
+      unsigned char *addr;
+      unsigned char *data;
+      unsigned int *iptr;
+!     int x, y;
+      unsigned long lbt;
+      Pixel pixel;
+      int depth;
+--- 788,794 ----
+      unsigned char *addr;
+      unsigned char *data;
+      unsigned int *iptr;
+!     unsigned int x, y;
+      unsigned long lbt;
+      Pixel pixel;
+      int depth;
+***************
+*** 831,837 ****
+  {
+      unsigned int *iptr;
+      unsigned char *data;
+!     int x, y;
+      unsigned long lbt;
+      Pixel pixel;
+      int depth;
+--- 833,839 ----
+  {
+      unsigned int *iptr;
+      unsigned char *data;
+!     unsigned int x, y;
+      unsigned long lbt;
+      Pixel pixel;
+      int depth;
+***************
+*** 864,870 ****
+      storeFuncPtr storeFunc;
+  {
+      unsigned int *iptr;
+!     int x, y;
+      char *data;
+      Pixel pixel;
+      int xoff, yoff, offset, bpl;
+--- 866,872 ----
+      storeFuncPtr storeFunc;
+  {
+      unsigned int *iptr;
+!     unsigned int x, y;
+      char *data;
+      Pixel pixel;
+      int xoff, yoff, offset, bpl;
+***************
+*** 900,910 ****
+  # else /* AMIGA */
+  
+  #define CLEAN_UP(status) \
+! {\
+      if (pixels) XpmFree (pixels);\
+      if (tmp_img) FreeXImage (tmp_img);\
+      return (status);\
+! }
+  
+  static int
+  AGetImagePixels (
+--- 902,912 ----
+  # 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,931 ****
+      
+      tmp_img = AllocXImage ((((width+15)>>4)<<4), 1, image->rp->BitMap->Depth);
+      if (tmp_img == NULL)
+!      CLEAN_UP (XpmNoMemory)
+      
+      iptr = pmap->pixelindex;
+      for (y = 0; y < height; ++y)
+--- 927,933 ----
+      
+      tmp_img = AllocXImage ((((width+15)>>4)<<4), 1, image->rp->BitMap->Depth);
+      if (tmp_img == NULL)
+!      CLEAN_UP (XpmNoMemory);
+      
+      iptr = pmap->pixelindex;
+      for (y = 0; y < height; ++y)
+***************
+*** 934,944 ****
+       for (x = 0; x < width; ++x, ++iptr)
+       {
+           if ((*storeFunc) (pixels[x], pmap, iptr))
+!              CLEAN_UP (XpmNoMemory)
+       }
+      }
+      
+!     CLEAN_UP (XpmSuccess)
+  }
+  
+  #undef CLEAN_UP
+--- 936,946 ----
+       for (x = 0; x < width; ++x, ++iptr)
+       {
+           if ((*storeFunc) (pixels[x], pmap, iptr))
+!              CLEAN_UP (XpmNoMemory);
+       }
+      }
+      
+!     CLEAN_UP (XpmSuccess);
+  }
+  
+  #undef CLEAN_UP
+Index: xc/extras/Xpm/lib/xpm.h
+diff -c 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,292 ****
+   * functions declarations
+   */
+  
+! #ifdef __cplusplus
+! extern "C" {
+! #endif
+  
+  /* FOR_MSW, all ..Pixmap.. are excluded, only the ..XImage.. are used */
+  /* Same for Amiga! */
+--- 284,290 ----
+   * functions declarations
+   */
+  
+! _XFUNCPROTOBEGIN
+  
+  /* FOR_MSW, all ..Pixmap.. are excluded, only the ..XImage.. are used */
+  /* Same for Amiga! */
+***************
+*** 440,449 ****
+  
+      FUNC(XpmFree, void, (void *ptr));
+  
+! #ifdef __cplusplus
+! } /* for C++ V2.0 */
+! #endif
+! 
+  
+  /* backward compatibility */
+  
+--- 438,444 ----
+  
+      FUNC(XpmFree, void, (void *ptr));
+  
+! _XFUNCPROTOEND
+  
+  /* backward compatibility */
+  
+Index: xc/fonts/bdf/100dpi/Imakefile
+diff -c 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,18 ****
+  
+  OBJS1 = $(UCSOBJS1) $(DERIVEDOBJS1) $(PREDERIVEDOBJS1)
+  OBJS2 = $(UCSOBJS2) $(DERIVEDOBJS2) $(PREDERIVEDOBJS2) $(MISCOBJS)
+  
+! OBJS = $(OBJS1) $(OBJS2)
+  
+  FONTINSTDIR = $(FONTDIR)/100dpi
+  
+--- 11,20 ----
+  
+  OBJS1 = $(UCSOBJS1) $(DERIVEDOBJS1) $(PREDERIVEDOBJS1)
+  OBJS2 = $(UCSOBJS2) $(DERIVEDOBJS2) $(PREDERIVEDOBJS2) $(MISCOBJS)
++ OBJS3 = $(DERIVEDOBJS3)
++ OBJS4 = $(DERIVEDOBJS4)
+  
+! OBJS = $(OBJS1) $(OBJS2) $(OBJS3) $(OBJS4)
+  
+  FONTINSTDIR = $(FONTDIR)/100dpi
+  
+***************
+*** 21,26 ****
+--- 23,30 ----
+  #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 -c 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,18 ****
+  
+  OBJS1 = $(UCSOBJS1) $(DERIVEDOBJS1) $(PREDERIVEDOBJS1)
+  OBJS2 = $(UCSOBJS2) $(DERIVEDOBJS2) $(PREDERIVEDOBJS2) $(MISCOBJS)
+  
+! OBJS = $(OBJS1) $(OBJS2)
+  
+  FONTINSTDIR = $(FONTDIR)/75dpi
+  
+--- 11,20 ----
+  
+  OBJS1 = $(UCSOBJS1) $(DERIVEDOBJS1) $(PREDERIVEDOBJS1)
+  OBJS2 = $(UCSOBJS2) $(DERIVEDOBJS2) $(PREDERIVEDOBJS2) $(MISCOBJS)
++ OBJS3 = $(DERIVEDOBJS3)
++ OBJS4 = $(DERIVEDOBJS4)
+  
+! OBJS = $(OBJS1) $(OBJS2) $(OBJS3) $(OBJS4)
+  
+  FONTINSTDIR = $(FONTDIR)/75dpi
+  
+***************
+*** 21,26 ****
+--- 23,30 ----
+  #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 -c 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 ****
+! XCOMM $XdotOrg: xc/fonts/encodings/Imakefile,v 1.2 2004/04/23 18:43:02 eich Exp $
+  XCOMM $XFree86: xc/fonts/encodings/Imakefile,v 1.10 2003/06/26 10:19:41 eich Exp $
+  
+  #define IHaveSubdirs
+--- 1,4 ----
+! 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,15 ****
+--- 10,16 ----
+       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 -c /dev/null xc/fonts/encodings/ascii-0.enc:1.1.4.1
+*** /dev/null  Sat Feb  5 21:34:46 2005
+--- xc/fonts/encodings/ascii-0.enc     Mon Dec 13 13:50:44 2004
+***************
+*** 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 -c 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 ****
+  /*
+!  * $XdotOrg: xc/include/Xos.h,v 1.2 2004/04/23 18:43:05 eich Exp $
+   * $Xorg: Xos.h,v 1.6 2001/02/09 02:03:22 xorgcvs Exp $
+   * 
+   * 
+--- 1,5 ----
+  /*
+!  * $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,282 ****
+  #endif
+  
+  #if defined(ISC) || defined(__UNIXOS2__) || \
+!     (defined(linux) && !defined(__GLIBC__)) || \
+      (defined(__QNX__) && !defined(UNIXCONN))
+  /*
+   *   Some OS's may not have this
+--- 276,282 ----
+  #endif
+  
+  #if defined(ISC) || defined(__UNIXOS2__) || \
+!     (defined(__linux__) && !defined(__GLIBC__)) || \
+      (defined(__QNX__) && !defined(UNIXCONN))
+  /*
+   *   Some OS's may not have this
+Index: xc/include/Xthreads.h
+diff -c 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,273 ****
+  #define xthread_clear_id(id) id = _X_no_thread_id
+  #define xthread_equal(id1,id2) pthread_equal(id1, id2)
+  #endif /* _DECTHREADS_ */
+! #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)
+--- 267,273 ----
+  #define xthread_clear_id(id) id = _X_no_thread_id
+  #define xthread_equal(id1,id2) pthread_equal(id1, id2)
+  #endif /* _DECTHREADS_ */
+! #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 -c 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 ****
+! XCOMM $XdotOrg: xc/include/extensions/Imakefile,v 1.10 2004/08/09 22:37:21 kem Exp $
+  XCOMM $Xorg: Imakefile,v 1.3 2000/08/18 04:05:44 coskrey Exp $
+  
+  
+--- 1,4 ----
+! 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,52 ****
+  XFIXESHEADERS = xfixeswire.h xfixesproto.h
+  #endif
+  #if BuildDamage || BuildDamageLibrary
+! DAMAGEHEADERS = damage.h damagewire.h damageproto.h
+  #endif
+  #if BuildComposite || BuildCompositeLibrary
+  COMPOSITEHEADERS = composite.h compositeproto.h
+--- 46,52 ----
+  XFIXESHEADERS = xfixeswire.h xfixesproto.h
+  #endif
+  #if BuildDamage || BuildDamageLibrary
+! DAMAGEHEADERS = damagewire.h damageproto.h
+  #endif
+  #if BuildComposite || BuildCompositeLibrary
+  COMPOSITEHEADERS = composite.h compositeproto.h
+Index: xc/include/extensions/Xinerama.h
+diff -c 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 ****
+! /* $XdotOrg: xc/include/extensions/Xinerama.h,v 1.2 2004/04/23 18:43:06 eich Exp $ */
+  /*
+  
+  Copyright 2003  The Open Group
+--- 1,4 ----
+! /* $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,34 ****
+--- 29,36 ----
+  #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 -c 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     Sat Feb  5 21:34:46 2005
+***************
+*** 1,108 ****
+- /*
+-  * $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_ */
+--- 0 ----
+Index: xc/include/extensions/dpms.h
+diff -c 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,33 ****
+--- 28,36 ----
+  ******************************************************************/
+  /* $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,51 ****
+--- 49,56 ----
+  #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,60 ****
+  extern Status DPMSDisable(Display *);
+  extern Status DPMSForceLevel(Display *, CARD16);
+  extern Status DPMSInfo(Display *, CARD16 *, BOOL *);
+- #endif
+  
+  
+--- 60,67 ----
+  extern Status DPMSDisable(Display *);
+  extern Status DPMSForceLevel(Display *, CARD16);
+  extern Status DPMSInfo(Display *, CARD16 *, BOOL *);
+  
++ _XFUNCPROTOEND
++ #endif /* !DPMS_SERVER */
++ #endif /* !_X11_EXTENSIONS_DPMS_H */
+  
+Index: xc/lib/GL/glx/glxcmds.c
+diff -c 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,1510 ****
+--- 1505,1512 ----
+      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 -c 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,736 ****
+      __DRIscreenPrivate *psp = NULL;
+  #ifndef GLX_USE_APPLEGL
+      drm_handle_t hSAREA;
+!     drmAddress pSAREA;
+      char *BusID;
+      __DRIversion   ddx_version;
+      __DRIversion   dri_version;
+--- 730,736 ----
+      __DRIscreenPrivate *psp = NULL;
+  #ifndef GLX_USE_APPLEGL
+      drm_handle_t hSAREA;
+!     drmAddress pSAREA = MAP_FAILED;
+      char *BusID;
+      __DRIversion   ddx_version;
+      __DRIversion   dri_version;
+***************
+*** 742,748 ****
+      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;
+--- 742,747 ----
+***************
+*** 751,756 ****
+--- 750,758 ----
+      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 -c 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,31 ****
+--- 26,36 ----
+  #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 -c 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,55 ****
+               $(MESADRVR128BUILDDIR)r128_tex.c \
+               $(MESADRVR128BUILDDIR)r128_texmem.c \
+               $(MESADRVR128BUILDDIR)r128_texstate.c \
+!              $(MESADRVR128BUILDDIR)r128_tris.c \
+!              $(MESADRVR128BUILDDIR)r128_vb.c
+  
+       R128OBJS = $(MESADRVR128BUILDDIR)r128_context.o \
+               $(MESADRVR128BUILDDIR)r128_dd.o \
+--- 48,54 ----
+               $(MESADRVR128BUILDDIR)r128_tex.c \
+               $(MESADRVR128BUILDDIR)r128_texmem.c \
+               $(MESADRVR128BUILDDIR)r128_texstate.c \
+!              $(MESADRVR128BUILDDIR)r128_tris.c
+  
+       R128OBJS = $(MESADRVR128BUILDDIR)r128_context.o \
+               $(MESADRVR128BUILDDIR)r128_dd.o \
+***************
+*** 61,68 ****
+               $(MESADRVR128BUILDDIR)r128_tex.o \
+               $(MESADRVR128BUILDDIR)r128_texmem.o \
+               $(MESADRVR128BUILDDIR)r128_texstate.o \
+!              $(MESADRVR128BUILDDIR)r128_tris.o \
+!              $(MESADRVR128BUILDDIR)r128_vb.o
+  
+       R128UOBJS = $(MESADRVR128BUILDDIR)unshared/r128_context.o \
+               $(MESADRVR128BUILDDIR)unshared/r128_dd.o \
+--- 60,66 ----
+               $(MESADRVR128BUILDDIR)r128_tex.o \
+               $(MESADRVR128BUILDDIR)r128_texmem.o \
+               $(MESADRVR128BUILDDIR)r128_texstate.o \
+!              $(MESADRVR128BUILDDIR)r128_tris.o
+  
+       R128UOBJS = $(MESADRVR128BUILDDIR)unshared/r128_context.o \
+               $(MESADRVR128BUILDDIR)unshared/r128_dd.o \
+***************
+*** 74,81 ****
+               $(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
+  
+       R128DOBJS = $(MESADRVR128BUILDDIR)debugger/r128_context.o \
+               $(MESADRVR128BUILDDIR)debugger/r128_dd.o \
+--- 72,78 ----
+               $(MESADRVR128BUILDDIR)unshared/r128_tex.o \
+               $(MESADRVR128BUILDDIR)unshared/r128_texmem.o \
+               $(MESADRVR128BUILDDIR)unshared/r128_texstate.o \
+!              $(MESADRVR128BUILDDIR)unshared/r128_tris.o
+  
+       R128DOBJS = $(MESADRVR128BUILDDIR)debugger/r128_context.o \
+               $(MESADRVR128BUILDDIR)debugger/r128_dd.o \
+***************
+*** 87,94 ****
+               $(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
+  
+       R128POBJS = $(MESADRVR128BUILDDIR)profiled/r128_context.o \
+               $(MESADRVR128BUILDDIR)profiled/r128_dd.o \
+--- 84,90 ----
+               $(MESADRVR128BUILDDIR)debugger/r128_tex.o \
+               $(MESADRVR128BUILDDIR)debugger/r128_texmem.o \
+               $(MESADRVR128BUILDDIR)debugger/r128_texstate.o \
+!              $(MESADRVR128BUILDDIR)debugger/r128_tris.o
+  
+       R128POBJS = $(MESADRVR128BUILDDIR)profiled/r128_context.o \
+               $(MESADRVR128BUILDDIR)profiled/r128_dd.o \
+***************
+*** 100,107 ****
+               $(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
+  
+  #ifdef NeedToLinkMesaSrc
+  LinkSourceFile(r128_context.c, $(MESADRVSRCDIR)/r128)
+--- 96,102 ----
+               $(MESADRVR128BUILDDIR)profiled/r128_tex.o \
+               $(MESADRVR128BUILDDIR)profiled/r128_texmem.o \
+               $(MESADRVR128BUILDDIR)profiled/r128_texstate.o \
+!              $(MESADRVR128BUILDDIR)profiled/r128_tris.o
+  
+  #ifdef NeedToLinkMesaSrc
+  LinkSourceFile(r128_context.c, $(MESADRVSRCDIR)/r128)
+***************
+*** 125,130 ****
+  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
+--- 120,123 ----
+Index: xc/lib/GL/mesa/drivers/osmesa/Imakefile
+diff -c 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,13 ****
+--- 8,18 ----
+  #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 -c 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,31 ****
+--- 26,36 ----
+  #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 -c 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,31 ****
+--- 26,35 ----
+  #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 -c 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 ****
+  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 $
+  
+  /*
+   * Need both shared and unshared Mesa objects in the following cases:
+--- 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.2.1 2004/12/13 04:12:55 gisburn Exp $
+  
+  /*
+   * Need both shared and unshared Mesa objects in the following cases:
+***************
+*** 25,30 ****
+--- 25,34 ----
+  #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 -c 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,31 ****
+--- 26,35 ----
+  #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 -c 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,31 ****
+--- 26,36 ----
+  #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 -c 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,31 ****
+--- 26,35 ----
+  #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 -c 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,31 ****
+--- 26,35 ----
+  #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 -c 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,369 ****
+  
+       if (xkbi->flags&XkbMapPending)
+            changes= xkbi->changes;
+!      else bzero(&changes,sizeof(XkbChangesRec));
+       XkbNoteMapChanges(&changes,event,XKB_XLIB_MAP_MASK);
+       LockDisplay(dpy);
+       if ((rtrn=XkbGetMapChanges(dpy,xkbi->desc,&changes))!=Success) {
+--- 363,369 ----
+  
+       if (xkbi->flags&XkbMapPending)
+            changes= xkbi->changes;
+!      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 -c 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,3352 ****
+      int flags;
+  {
+      char buf[MAX_PATH];
+!     char* bufp;
+      int ret = -1;
+      UINT olderror = SetErrorMode (SEM_FAILCRITICALERRORS);
+  
+--- 3346,3352 ----
+      int flags;
+  {
+      char buf[MAX_PATH];
+!     char* bufp = NULL;
+      int ret = -1;
+      UINT olderror = SetErrorMode (SEM_FAILCRITICALERRORS);
+  
+***************
+*** 3365,3371 ****
+      _Xconst char* mode;
+  {
+      char buf[MAX_PATH];
+!     char* bufp;
+      void* ret = NULL;
+      UINT olderror = SetErrorMode (SEM_FAILCRITICALERRORS);
+  
+--- 3365,3371 ----
+      _Xconst char* mode;
+  {
+      char buf[MAX_PATH];
+!     char* bufp = NULL;
+      void* ret = NULL;
+      UINT olderror = SetErrorMode (SEM_FAILCRITICALERRORS);
+  
+Index: xc/lib/X11/imInsClbk.c
+diff -c 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,261 ****
+                   _XUnregisterFilter( display, RootWindow(display, 0),
+                                       _XimFilterPropertyNotify,
+                                       (XPointer)NULL );
+-                  XSelectInput( display, RootWindow(display, 0),
+-                                NoEventMask );
+               }
+               else
+                   picb->next = icb->next;
+--- 254,259 ----
+Index: xc/lib/Xaw/AsciiSink.c
+diff -c 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,1711 ****
+--- 1706,1713 ----
+  
+      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 -c 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,532 ****
+--- 527,534 ----
+      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,729 ****
+      if (curlw->label.encoding != newlw->label.encoding)
+       was_resized = True;
+  
+!     if (curlw->label.fontset != newlw->label.fontset &&
+!         curlw->simple.international)
+       was_resized = True;
+  
+      if (curlw->label.label != newlw->label.label) {
+--- 724,731 ----
+      if (curlw->label.encoding != newlw->label.encoding)
+       was_resized = True;
+  
+!     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 -c 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,476 ****
+--- 471,480 ----
+  {
+      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 -c 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,723 ****
+--- 718,725 ----
+  
+      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 -c 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,271 ****
+--- 266,273 ----
+  {
+      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 -c 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,248 ****
+--- 243,252 ----
+      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 -c 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,815 ****
+           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);
+           height = SetVendorShellHeight(ve, height);
+       }
+       if (p->flg & CIFg) {
+--- 808,817 ----
+           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++;
+!          if (p->font_set) {
+!              height = maxAscentOfFontSet(p->font_set)
+!                  + maxDescentOfFontSet(p->font_set);
+!          }
+           height = SetVendorShellHeight(ve, height);
+       }
+       if (p->flg & CIFg) {
+***************
+*** 938,944 ****
+      XPointer         ic_a[20], pe_a[20], st_a[20];
+      int                      ic_cnt = 0, pe_cnt = 0, st_cnt = 0;
+      XawTextMargin    *margin;
+!     int                      height;
+  
+      if ((ve->im.xim == NULL) || ((p = GetIcTableShared(w, ve)) == NULL) ||
+       (p->xic == NULL)) return;
+--- 940,946 ----
+      XPointer         ic_a[20], pe_a[20], st_a[20];
+      int                      ic_cnt = 0, pe_cnt = 0, st_cnt = 0;
+      XawTextMargin    *margin;
+!     int                      height = 0;
+  
+      if ((ve->im.xim == NULL) || ((p = GetIcTableShared(w, ve)) == NULL) ||
+       (p->xic == NULL)) return;
+***************
+*** 965,972 ****
+           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);
+           height = SetVendorShellHeight(ve, height);
+       }
+       if (p->flg & CIFg) {
+--- 967,976 ----
+           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++;
+!          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 -c 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,57 ****
+  STRLCATDEF = -DHAS_STRLCAT
+  #endif
+  
+  #if defined(Win32Architecture)
+  ZPIPEDEF = -DNO_ZPIPE
+  #endif
+  
+  DEFINES = $(STRDUPDEF) $(STRCASECMPDEF) $(SPRINTFDEF) $(STRLCATDEF) \
+!              $(ZPIPEDEF) $(ZFILEDEF)
+  
+  HEADERS = xpm.h
+  
+--- 46,65 ----
+  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) \
+!              $(SNPRINTFDEF) $(ZPIPEDEF) $(ZFILEDEF)
+  
+  HEADERS = xpm.h
+  
+***************
+*** 59,71 ****
+        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
+  
+    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
+  
+           XPMDIR = $(TOP)/extras/Xpm
+        XPMLIBDIR = $(TOP)/extras/Xpm/lib
+--- 67,81 ----
+        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 \
+!       $(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 \
+!       $(SNPRINTFOBJS)
+  
+           XPMDIR = $(TOP)/extras/Xpm
+        XPMLIBDIR = $(TOP)/extras/Xpm/lib
+***************
+*** 105,108 ****
+--- 115,122 ----
+  LinkSourceFile(WrFFrBuf.c,$(XPMLIBDIR))
+  LinkSourceFile(xpm.h,$(XPMLIBDIR))
+  
++ #if !HasSnprintf
++ LinkSourceFile(snprintf.c,$(LIBSRC)/misc)
++ #endif
++ 
+  DependTarget()
+Index: xc/lib/dmx/dmx.c
+diff -c 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,430 ****
+      if (length) {
+          char *buffer       = Xmalloc(paddedLength);
+          memset(buffer, 0, paddedLength);
+!         strcpy(buffer, displayName);
+          Data32(dpy, buffer, paddedLength);
+          Xfree(buffer);
+      }
+--- 424,430 ----
+      if (length) {
+          char *buffer       = Xmalloc(paddedLength);
+          memset(buffer, 0, paddedLength);
+!         memcpy(buffer, displayName, length);
+          Data32(dpy, buffer, paddedLength);
+          Xfree(buffer);
+      }
+***************
+*** 730,736 ****
+      if (length) {
+          char *buffer       = Xmalloc(paddedLength);
+          memset(buffer, 0, paddedLength);
+!         strcpy(buffer, attr->name);
+          Data32(dpy, buffer, paddedLength);
+          Xfree(buffer);
+      }
+--- 730,736 ----
+      if (length) {
+          char *buffer       = Xmalloc(paddedLength);
+          memset(buffer, 0, paddedLength);
+!         memcpy(buffer, attr->name, paddedLength);
+          Data32(dpy, buffer, paddedLength);
+          Xfree(buffer);
+      }
+Index: xc/lib/font/util/Imakefile
+diff -c 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,33 ****
+         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)
+--- 19,24 ----
+Index: xc/lib/font/util/utilbitmap.c
+diff -c 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,34 ****
+  */
+  /* $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
+   */
+--- 27,32 ----
+***************
+*** 184,188 ****
+      return dstWidthBytes * height;
+  }
+  
+- #endif /* !USE_INTERNAL_FREETYPE */
+  
+--- 182,185 ----
+Index: xc/nls/compose.dir
+diff -c 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,332 ****
+  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
+  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
+--- 326,332 ----
+  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
+! 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 -c 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 ****
+! XCOMM        $XdotOrg: xc/nls/locale.dir,v 1.2 2004/04/23 18:44:33 eich 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
+--- 1,4 ----
+! 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,361 ****
+  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
+  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
+--- 355,361 ----
+  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
+! 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 -c 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 ****
+  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 $
+  
+  
+  
+--- 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.4.1 2005/01/25 02:03:01 gisburn Exp $
+  
+  
+  
+***************
+*** 56,61 ****
+--- 56,62 ----
+  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 -c /dev/null xc/nls/Compose/pt_BR.UTF-8:1.1.2.2
+*** /dev/null  Sat Feb  5 21:34:47 2005
+--- xc/nls/Compose/pt_BR.UTF-8 Tue Feb  1 03:17:00 2005
+***************
+*** 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 -c 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 ****
+  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 $
+  
+  
+  
+--- 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.4.1 2005/01/25 02:03:01 gisburn Exp $
+  
+  
+  
+***************
+*** 70,75 ****
+--- 70,76 ----
+  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 -c /dev/null xc/nls/XI18N_OBJS/pt_BR.UTF-8:1.1.2.1
+*** /dev/null  Sat Feb  5 21:34:47 2005
+--- xc/nls/XI18N_OBJS/pt_BR.UTF-8      Tue Jan 25 02:03:01 2005
+***************
+*** 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 -c 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 ****
+  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 $
+  
+  
+  
+--- 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.4.1 2005/01/25 02:03:01 gisburn Exp $
+  
+  
+  
+***************
+*** 70,75 ****
+--- 70,76 ----
+  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 -c 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,30 ****
+  
+  object_name          generic
+  
+! XCOMM        fs0 class
+  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    {
+--- 11,19 ----
+  
+  object_name          generic
+  
+! XCOMM        fs0 class (7 bit ASCII)
+  fs0  {
+       charset {
+               name    ISO8859-1:GL
+       }
+       font    {
+***************
+*** 32,39 ****
+               vertical_rotate all
+       }
+  }
+! XCOMM        fs2 class (ISO8859 families)
+! fs2  {
+       charset {
+               name    ISO8859-1:GR
+       }
+--- 21,28 ----
+               vertical_rotate all
+       }
+  }
+! XCOMM        fs1 class (ISO8859 families)
+! fs1  {
+       charset {
+               name    ISO8859-1:GR
+       }
+***************
+*** 41,48 ****
+               primary ISO8859-1:GR
+       }
+  }
+! XCOMM        fs3 class (Kanji)
+! fs3  {
+       charset {
+               name    JISX0208.1983-0:GL
+       }
+--- 30,37 ----
+               primary ISO8859-1:GR
+       }
+  }
+! XCOMM        fs2 class (Kanji)
+! fs2  {
+       charset {
+               name    JISX0208.1983-0:GL
+       }
+***************
+*** 50,57 ****
+               primary JISX0208.1983-0:GL
+       }
+  }
+! XCOMM   fs4 class (Korean Character)
+! fs4  {
+       charset {
+               name    KSC5601.1987-0:GL
+       }
+--- 39,46 ----
+               primary JISX0208.1983-0:GL
+       }
+  }
+! XCOMM   fs3 class (Korean Character)
+! fs3  {
+       charset {
+               name    KSC5601.1987-0:GL
+       }
+***************
+*** 59,66 ****
+               primary KSC5601.1987-0:GL
+       }
+  }
+! XCOMM   fs5 class (Chinese Han Character)
+! fs5  {
+       charset {
+               name    GB2312.1980-0:GL
+       }
+--- 48,55 ----
+               primary KSC5601.1987-0:GL
+       }
+  }
+! XCOMM   fs4 class (Chinese Han Character)
+! fs4  {
+       charset {
+               name    GB2312.1980-0:GL
+       }
+***************
+*** 68,75 ****
+               primary GB2312.1980-0:GL
+       }
+  }
+! XCOMM        fs6 class (Half Kana)
+! fs6  {
+       charset {
+               name    JISX0201.1976-0:GR
+       }
+--- 57,64 ----
+               primary GB2312.1980-0:GL
+       }
+  }
+! XCOMM        fs5 class (Half Kana)
+! fs5  {
+       charset {
+               name    JISX0201.1976-0:GR
+       }
+***************
+*** 78,83 ****
+--- 67,82 ----
+               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 -c /dev/null xc/nls/XLC_LOCALE/pt_BR.UTF-8:1.1.2.2
+*** /dev/null  Sat Feb  5 21:34:47 2005
+--- xc/nls/XLC_LOCALE/pt_BR.UTF-8      Tue Feb  1 03:17:00 2005
+***************
+*** 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 -c 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,62 ****
+      XVINFOSRCDIR = xvinfo
+  #endif
+       XHOSTSRCDIR = xhost
+! #if BuildPlugin
+         XRXSRCDIR = xrx
+  #endif
+         XSMSRCDIR = xsm
+--- 56,62 ----
+      XVINFOSRCDIR = xvinfo
+  #endif
+       XHOSTSRCDIR = xhost
+! #if BuildPlugin && BuildXaw
+         XRXSRCDIR = xrx
+  #endif
+         XSMSRCDIR = xsm
+Index: xc/programs/Xserver/Imakefile
+diff -c 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 ****
+! XCOMM $XdotOrg: xc/programs/Xserver/Imakefile,v 1.19 2004/09/01 00:59:17 kem Exp $
+  XCOMM $Xorg: Imakefile,v 1.4 2001/03/14 18:42:02 pookie Exp $
+  /*
+   * Server Master Makefile
+--- 1,4 ----
+! 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,1025 ****
+  XWINOBJS = $(XWINDDXDIR)/stubs.o $(XWINDDXDIR)/XWin.res
+  XWINLIBS = PreFbLibs $(XWINLIB) FbPostFbLibs $(XWINLIB) $(XWINLAYERLIB) \
+             $(SHADOW) $(XWINPARSERLIB) $(ROOTLESSLIB)
+! XWINSYSLIBS = $(FONTLIBS) $(LDPRELIBS) $(XONLYLIB) $(SYSLIBS) -lgdi32
+  
+  EXTRA_LDOPTIONS = -e _mainCRTStartup
+  
+--- 1019,1026 ----
+  XWINOBJS = $(XWINDDXDIR)/stubs.o $(XWINDDXDIR)/XWin.res
+  XWINLIBS = PreFbLibs $(XWINLIB) FbPostFbLibs $(XWINLIB) $(XWINLAYERLIB) \
+             $(SHADOW) $(XWINPARSERLIB) $(ROOTLESSLIB)
+! XWINSYSLIBS = $(FONTLIBS) $(LDPRELIBS) $(XONLYLIB) $(SYSLIBS) -lgdi32 \
+!            -lbinmode
+  
+  EXTRA_LDOPTIONS = -e _mainCRTStartup
+  
+Index: xc/programs/Xserver/GL/dri/dri.c
+diff -c 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,76 ****
+--- 71,78 ----
+  extern Bool noPanoramiXExtension;
+  #endif
+  
++ extern Bool noXFree86DRIExtension;
++ 
+  static int DRIScreenPrivIndex = -1;
+  static int DRIWindowPrivIndex = -1;
+  static unsigned long DRIGeneration = 0;
+***************
+*** 129,134 ****
+--- 131,143 ----
+       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 -c 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 ****
+! /* $XdotOrg: xc/programs/Xserver/Xext/saver.c,v 1.2 2004/04/23 18:44:41 eich Exp $ */
+  /*
+   * $XConsortium: saver.c,v 1.12 94/04/17 20:59:36 dpw Exp $
+   *
+--- 1,4 ----
+! /* $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,216 ****
+  
+  #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 New(t)       ((t *) xalloc (sizeof (t)))
+  
+--- 210,216 ----
+  
+  #define GetScreenPrivate(s) ((ScreenSaverScreenPrivatePtr)(s)->devPrivates[ScreenPrivateIndex].ptr)
+  #define SetScreenPrivate(s,v) ((s)->devPrivates[ScreenPrivateIndex].ptr = (pointer) v);
+! #define SetupScreen(s)       ScreenSaverScreenPrivatePtr pPriv = (s ? GetScreenPrivate(s) : NULL)
+  
+  #define New(t)       ((t *) xalloc (sizeof (t)))
+  
+***************
+*** 1185,1190 ****
+--- 1185,1191 ----
+      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 -c 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,110 ****
+  
+  static unsigned int pagesize;
+  
+  #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__CYGWIN__)
+  
+  #include <sys/signal.h>
+  
+- static Bool badSysCall = FALSE;
+- 
+  static void
+  SigSysHandler(
+       int signo)
+--- 99,110 ----
+  
+  static unsigned int pagesize;
+  
++ static Bool badSysCall = FALSE;
++ 
+  #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__CYGWIN__)
+  
+  #include <sys/signal.h>
+  
+  static void
+  SigSysHandler(
+       int signo)
+***************
+*** 471,483 ****
+  
+      if (nCharInfos > 0) {
+  #ifdef HAS_SHM
+!      pDesc = (ShmDescPtr) FontGetPrivate(pFont, FontShmdescIndex);
+       if (pDesc) {
+           pCI = (xCharInfo *) pDesc->attach_addr;
+           if (stuff_flags & XF86Bigfont_FLAGS_Shm)
+               shmid = pDesc->shmid;
+       } else {
+!          if (stuff_flags & XF86Bigfont_FLAGS_Shm)
+               pDesc = shmalloc(nCharInfos * sizeof(xCharInfo)
+                                + sizeof(CARD32));
+           if (pDesc) {
+--- 471,486 ----
+  
+      if (nCharInfos > 0) {
+  #ifdef HAS_SHM
+!      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 && !badSysCall)
+               pDesc = shmalloc(nCharInfos * sizeof(xCharInfo)
+                                + sizeof(CARD32));
+           if (pDesc) {
+***************
+*** 522,528 ****
+               }
+           }
+  #ifdef HAS_SHM
+!          if (pDesc) {
+               *(CARD32 *)(pCI + nCharInfos) = signature;
+               if (!FontSetPrivate(pFont, FontShmdescIndex, pDesc)) {
+                   shmdealloc(pDesc);
+--- 525,531 ----
+               }
+           }
+  #ifdef HAS_SHM
+!          if (pDesc && !badSysCall) {
+               *(CARD32 *)(pCI + nCharInfos) = signature;
+               if (!FontSetPrivate(pFont, FontShmdescIndex, pDesc)) {
+                   shmdealloc(pDesc);
+Index: xc/programs/Xserver/Xext/xf86vmode.c
+diff -c 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,35 ****
+  from Kaleb S. KEITHLEY
+  
+  */
+! /* $XdotOrg: xc/programs/Xserver/Xext/xf86vmode.c,v 1.2 2004/04/23 18:44:41 eich 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 */
+  
+--- 29,35 ----
+  from Kaleb S. KEITHLEY
+  
+  */
+! /* $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,57 ****
+--- 52,59 ----
+  #include "xf86_ansic.h"
+  #endif
+  
++ #define DEFAULT_XF86VIDMODE_VERBOSITY        3
++ 
+  static int VidModeErrorBase;
+  static int VidModeGeneration = 0;
+  static int VidModeClientPrivateIndex;
+***************
+*** 468,474 ****
+      rep.vtotal = VidModeGetModeValue(mode, VIDMODE_V_TOTAL);
+      rep.flags = VidModeGetModeValue(mode, VIDMODE_FLAGS);
+  
+!     if (xf86GetVerbosity() > 1) {
+       ErrorF("GetModeLine - scrn: %d clock: %ld\n",
+              stuff->screen, (unsigned long)rep.dotclock);
+       ErrorF("GetModeLine - hdsp: %d hbeg: %d hend: %d httl: %d\n",
+--- 470,476 ----
+      rep.vtotal = VidModeGetModeValue(mode, VIDMODE_V_TOTAL);
+      rep.flags = VidModeGetModeValue(mode, VIDMODE_FLAGS);
+  
+!     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,682 ****
+       stuff->after_vtotal = oldstuff->after_vtotal;
+       stuff->after_flags = oldstuff->after_flags;
+      }
+!     if (xf86GetVerbosity() > 1) {
+       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",
+--- 678,684 ----
+       stuff->after_vtotal = oldstuff->after_vtotal;
+       stuff->after_flags = oldstuff->after_flags;
+      }
+!     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,793 ****
+      
+      VidModeAddModeline(stuff->screen, mode);
+      
+!     if (xf86GetVerbosity() > 1)
+       ErrorF("AddModeLine - Succeeded\n");
+      return client->noClientException;
+  }
+--- 789,795 ----
+      
+      VidModeAddModeline(stuff->screen, mode);
+      
+!     if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY)
+       ErrorF("AddModeLine - Succeeded\n");
+      return client->noClientException;
+  }
+***************
+*** 824,830 ****
+       stuff->flags = oldstuff->flags;
+       stuff->privsize = oldstuff->privsize;
+      }
+!     if (xf86GetVerbosity() > 1) {
+       ErrorF("DeleteModeLine - scrn: %d clock: %ld\n",
+               (int)stuff->screen, (unsigned long)stuff->dotclock);
+       ErrorF("                 hdsp: %d hbeg: %d hend: %d httl: %d\n",
+--- 826,832 ----
+       stuff->flags = oldstuff->flags;
+       stuff->privsize = oldstuff->privsize;
+      }
+!     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,849 ****
+       len = client->req_len - (sizeof(xXF86VidModeDeleteModeLineReq) >> 2);
+      }
+      if (len != stuff->privsize) {
+!      if (xf86GetVerbosity() > 1) {
+           ErrorF("req_len = %ld, sizeof(Req) = %d, privsize = %ld, "
+                  "len = %d, length = %d\n",
+                   (unsigned long)client->req_len,
+--- 845,851 ----
+       len = client->req_len - (sizeof(xXF86VidModeDeleteModeLineReq) >> 2);
+      }
+      if (len != stuff->privsize) {
+!      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,865 ****
+      if (!VidModeGetCurrentModeline(stuff->screen, &mode, &dotClock))
+       return BadValue;
+  
+!     if (xf86GetVerbosity() > 1) {
+       ErrorF("Checking against clock: %d (%d)\n",
+               VidModeGetModeValue(mode, VIDMODE_CLOCK), dotClock);
+       ErrorF("                 hdsp: %d hbeg: %d hend: %d httl: %d\n",
+--- 861,867 ----
+      if (!VidModeGetCurrentModeline(stuff->screen, &mode, &dotClock))
+       return BadValue;
+  
+!     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,888 ****
+       return BadValue;
+  
+       do {
+!      if (xf86GetVerbosity() > 1) {
+           ErrorF("Checking against clock: %d (%d)\n",
+                VidModeGetModeValue(mode, VIDMODE_CLOCK), dotClock);
+           ErrorF("                 hdsp: %d hbeg: %d hend: %d httl: %d\n",
+--- 884,890 ----
+       return BadValue;
+  
+       do {
+!      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,906 ****
+       if ((VidModeGetDotClock(stuff->screen, stuff->dotclock) == dotClock) &&
+               MODEMATCH(mode, stuff)) {
+           VidModeDeleteModeline(stuff->screen, mode);
+!          if (xf86GetVerbosity())
+               ErrorF("DeleteModeLine - Succeeded\n");
+           return(client->noClientException);
+       }
+--- 902,908 ----
+       if ((VidModeGetDotClock(stuff->screen, stuff->dotclock) == dotClock) &&
+               MODEMATCH(mode, stuff)) {
+           VidModeDeleteModeline(stuff->screen, mode);
+!          if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY)
+               ErrorF("DeleteModeLine - Succeeded\n");
+           return(client->noClientException);
+       }
+***************
+*** 940,946 ****
+       stuff->flags = oldstuff->flags;
+       stuff->privsize = oldstuff->privsize;
+      }
+!     if (xf86GetVerbosity() > 1) {
+       ErrorF("ModModeLine - scrn: %d hdsp: %d hbeg: %d hend: %d httl: %d\n",
+               (int)stuff->screen, stuff->hdisplay, stuff->hsyncstart,
+               stuff->hsyncend, stuff->htotal);
+--- 942,948 ----
+       stuff->flags = oldstuff->flags;
+       stuff->privsize = oldstuff->privsize;
+      }
+!     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,1034 ****
+      VidModeSetCrtcForMode(stuff->screen, mode);
+      VidModeSwitchMode(stuff->screen, mode);
+  
+!     if (xf86GetVerbosity() > 1)
+       ErrorF("ModModeLine - Succeeded\n");
+      return(client->noClientException);
+  }
+--- 1030,1036 ----
+      VidModeSetCrtcForMode(stuff->screen, mode);
+      VidModeSwitchMode(stuff->screen, mode);
+  
+!     if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY)
+       ErrorF("ModModeLine - Succeeded\n");
+      return(client->noClientException);
+  }
+***************
+*** 1066,1072 ****
+       stuff->flags = oldstuff->flags;
+       stuff->privsize = oldstuff->privsize;
+      }
+!     if (xf86GetVerbosity() > 1) {
+       ErrorF("ValidateModeLine - scrn: %d clock: %ld\n",
+               (int)stuff->screen, (unsigned long)stuff->dotclock);
+       ErrorF("                   hdsp: %d hbeg: %d hend: %d httl: %d\n",
+--- 1068,1074 ----
+       stuff->flags = oldstuff->flags;
+       stuff->privsize = oldstuff->privsize;
+      }
+!     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,1152 ****
+       swapl(&rep.status, n);
+      }
+      WriteToClient(client, sizeof(xXF86VidModeValidateModeLineReply), (char *)&rep);
+!     if (xf86GetVerbosity() > 1)
+       ErrorF("ValidateModeLine - Succeeded (status = %d)\n", status);
+      return(client->noClientException);
+  }
+--- 1148,1154 ----
+       swapl(&rep.status, n);
+      }
+      WriteToClient(client, sizeof(xXF86VidModeValidateModeLineReply), (char *)&rep);
+!     if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY)
+       ErrorF("ValidateModeLine - Succeeded (status = %d)\n", status);
+      return(client->noClientException);
+  }
+***************
+*** 1200,1206 ****
+       stuff->flags = oldstuff->flags;
+       stuff->privsize = oldstuff->privsize;
+      }
+!     if (xf86GetVerbosity() > 1) {
+       ErrorF("SwitchToMode - scrn: %d clock: %ld\n",
+               (int)stuff->screen, (unsigned long)stuff->dotclock);
+       ErrorF("               hdsp: %d hbeg: %d hend: %d httl: %d\n",
+--- 1202,1208 ----
+       stuff->flags = oldstuff->flags;
+       stuff->privsize = oldstuff->privsize;
+      }
+!     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,1241 ****
+       return BadValue;
+  
+      do {
+!      if (xf86GetVerbosity() > 1) {
+           ErrorF("Checking against clock: %d (%d)\n",
+                VidModeGetModeValue(mode, VIDMODE_CLOCK), dotClock);
+           ErrorF("                 hdsp: %d hbeg: %d hend: %d httl: %d\n",
+--- 1237,1243 ----
+       return BadValue;
+  
+      do {
+!      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,1262 ****
+           if (!VidModeSwitchMode(stuff->screen, mode))
+               return BadValue;
+  
+!          if (xf86GetVerbosity() > 1)
+               ErrorF("SwitchToMode - Succeeded\n");
+           return(client->noClientException);
+       }
+--- 1258,1264 ----
+           if (!VidModeSwitchMode(stuff->screen, mode))
+               return BadValue;
+  
+!          if (xf86GetVerbosity() > DEFAULT_XF86VIDMODE_VERBOSITY)
+               ErrorF("SwitchToMode - Succeeded\n");
+           return(client->noClientException);
+       }
+Index: xc/programs/Xserver/XpConfig/Imakefile
+diff -c 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,476 ****
+          pt.ISO8859-15 \
+          pt_BR \
+          pt_BR.ISO8859-1 \
+!         pt_BR.UTF-8 \
+          pt_BR.iso88591 \
+          pt_BR.utf8 \
+          pt_PT \
+          pt_PT.ISO8859-1 \
+          pt_PT.ISO8859-15 \
+--- 468,481 ----
+          pt.ISO8859-15 \
+          pt_BR \
+          pt_BR.ISO8859-1 \
+!         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 -c 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,138 ****
+  
+  DependTarget()
+  
+! MANDIR = $(MISCMANDIR)
+! MANSUFFIX = $(MISCMANSUFFIX)
+! InstallManPage(Xprint,$(MANDIR))
+  
+  #ifdef HasDocBookTools
+! all:: Xprint.man Xprint.html
+  
+! ConvertDocBookToManPage(Xprint.sgml, Xprint.man)
+! ConvertDocBookToHTML(Xprint.sgml, Xprint.html)
+  #endif /* HasDocBookTools */
+--- 126,136 ----
+  
+  DependTarget()
+  
+! InstallManPage(Xprt,$(MANDIR))
+  
+  #ifdef HasDocBookTools
+! all:: Xprt.man Xprt.html
+  
+! ConvertDocBookToManPage(Xprt.sgml, Xprt.man)
+! ConvertDocBookToHTML(Xprt.sgml, Xprt.html)
+  #endif /* HasDocBookTools */
+Index: xc/programs/Xserver/Xprint/Init.c
+diff -c 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,168 ****
+--- 163,169 ----
+  PixmapFormatRec      PSPixmapFormats[] = {
+      {  1,  1, BITMAP_SCANLINE_PAD },
+      {  8,  8, BITMAP_SCANLINE_PAD },
++     { 12, 16, BITMAP_SCANLINE_PAD },
+      { 24, 32, BITMAP_SCANLINE_PAD }
+  };
+  
+***************
+*** 1217,1225 ****
+   * 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 
+   * 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
+   * 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.
+--- 1218,1226 ----
+   * 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-modes document/page attribute to 
+   * see if xp-list-glyph-fonts has been left out of the mode list. Only
+!  * 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,1247 ****
+       * Check the page attributes, and if it's not defined there, then
+       * check the document attributes.
+       */
+!     mode = XpGetOneAttribute(pContext, XPPageAttr, "xp-listfonts-mode");
+      if(!mode || !strlen(mode))
+      {
+!         mode = XpGetOneAttribute(pContext, XPDocAttr, "xp-listfonts-mode");
+          if(!mode || !strlen(mode))
+           return TRUE;
+      }
+--- 1239,1248 ----
+       * 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))
+           return TRUE;
+      }
+***************
+*** 1251,1264 ****
+  
+      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.
+   */
+  Bool
+  XpClientIsPrintClient(
+--- 1252,1272 ----
+  
+      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 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,1276 ****
+--- 1274,1301 ----
+      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 -c 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,2119 ****
+  {
+      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;
+      }
+  }
+  
+  /*
+--- 2104,2119 ----
+  {
+      switch(notify)
+      {
+!        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 -c 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,170 ****
+      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
+--- 141,146 ----
+Index: xc/programs/Xserver/Xprint/Xprint.html
+diff -c 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     Sat Feb  5 21:34:48 2005
+***************
+*** 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 &#8212; The &quot;X print service&quot; - 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&#8217;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 &quot;X Print Service&quot; 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 &quot;Video&quot; X-Server, and a &quot;Print&quot; 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 &quot;print ddx drivers&quot; instead of
+-             &quot;video ddx drivers&quot;.  While a video ddx driver modifies pixels
+-             in a video frame buffer, a print ddx driver generates &quot;page
+-             description language (PDL)&quot; 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 &quot;print-to-file&quot;).
+-           </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 &quot;paged&quot; 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 &quot;print contexts&quot;.
+-           </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 &quot;attributes&quot; 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 &quot;content-orientation&quot; can be set to
+-             &quot;landscape&quot; or &quot;portrait&quot; (if the printer supports these 
+-             values - which can be queried using the Xprint API as well).
+-           </p></li><li><p>
+-             Since printers can have &quot;built in&quot; 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 &quot;printer metric files&quot; (.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 &quot;C&quot; locale are as follows (see <span class="citerefentry"><span class="refentrytitle">Xprt</span>(1x)</span> for more
+-       details (including support for non-&quot;C&quot; 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,
+-               &quot;mylaser&quot; could be mapped to a &quot;HPDJ1600C&quot;, and all other
+-               arbitrary printers could be mapped to a default, such as
+-               &quot;HPLJ4SI&quot;.  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, &quot;notification-profile&quot; 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&#8217;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 &quot;Xprt&quot;, and
+-             then the toolkit-specific Print Dialog Manager Daemon process
+-             (such as CDEnext's &quot;dtpdmd&quot;) 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 &quot;dtpdmd&quot; 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>
+-             &quot;X Print Specifier&quot; - 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=&quot;printhub:2 printhub:3 otherdept:0&quot;</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 &quot;C&quot; 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=&quot;`/etc/init.d/xprint get_xpserverlist`&quot;</pre></div><p>Alternatively <tt class="envar">${XPSERVERLIST}</tt> can be set
+-          manually. Example:</p><div class="informalexample"><pre class="programlisting">
+-              export XPSERVERLIST=&quot;littlecat:80 bitdog:72&quot;</pre></div><p>
+-          instructs an application to find an Xprint server at display
+-          80 on the machine &quot;littlecat&quot; 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 &quot;ps003&quot; 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 &quot;hplaser19&quot;
+-              on the Xprint server at display 
+-                &quot;littlecat:80&quot;.</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">&lt;<a href="mailto:roland.mainz@nrubsig.org">roland.mainz@nrubsig.org</a>&gt;</tt> based on the original X11R6.6
+-       <tt class="filename">xc/programs/Xserver/XpConfig/README</tt>.
+-     </p></div></div></body></html>
+--- 0 ----
+Index: xc/programs/Xserver/Xprint/Xprint.man
+diff -c 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      Sat Feb  5 21:34:48 2005
+***************
+*** 1,415 ****
+- .\" 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.
+--- 0 ----
+Index: xc/programs/Xserver/Xprint/Xprint.sgml
+diff -c 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     Sat Feb  5 21:34:48 2005
+***************
+*** 1,627 ****
+- <!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&rsquo;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&rsquo;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 &lt;Xprinters file&gt;] [:dispNum] &amp;</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] &amp;</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 &lt;File&gt; menu and selecting &lt;Print...&gt;.  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 &lt;Setup...&gt;, which
+-       will start a dtpdm capable of modifying additional print options.
+-       Finally, the user should select &lt;Print&gt;.
+-     </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>
+- 
+--- 0 ----
+Index: xc/programs/Xserver/Xprint/Xprt.html
+diff -c /dev/null xc/programs/Xserver/Xprint/Xprt.html:1.2.2.1
+*** /dev/null  Sat Feb  5 21:34:48 2005
+--- xc/programs/Xserver/Xprint/Xprt.html       Wed Dec 15 07:38:29 2004
+***************
+*** 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 &#8212; 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
++       &quot;display&quot; 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 &quot;C&quot; 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,
++             &quot;mylaser&quot; could be mapped to a &quot;HPDJ1600C&quot;, and all other
++             arbitrary printers could be mapped to a default, such as
++             &quot;HPLJ4SI&quot;.  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, &quot;notification-profile&quot; 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">&lt;<a href="mailto:dparsons@debian.org">dparsons@debian.org</a>&gt;</tt> and
++       Roland Mainz <tt class="email">&lt;<a href="mailto:roland.mainz@nrubsig.org">roland.mainz@nrubsig.org</a>&gt;</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 -c /dev/null xc/programs/Xserver/Xprint/Xprt.man:1.1.4.1
+*** /dev/null  Sat Feb  5 21:34:48 2005
+--- xc/programs/Xserver/Xprint/Xprt.man        Wed Dec 15 07:38:29 2004
+***************
+*** 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 -c /dev/null xc/programs/Xserver/Xprint/Xprt.sgml:1.1.4.1
+*** /dev/null  Sat Feb  5 21:34:48 2005
+--- xc/programs/Xserver/Xprint/Xprt.sgml       Wed Dec 15 07:38:29 2004
+***************
+*** 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 -c 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,822 ****
+      char *s, c;
+  
+      if (*type != XrmQString)
+!      return;
+  
+      for (firstNameSeen = False; *quarks; bindings++, quarks++) {
+          if (*bindings == XrmBindLoosely) {
+--- 816,822 ----
+      char *s, c;
+  
+      if (*type != XrmQString)
+!      return False;
+  
+      for (firstNameSeen = False; *quarks; bindings++, quarks++) {
+          if (*bindings == XrmBindLoosely) {
+***************
+*** 1084,1117 ****
+  }
+  
+  /*
+-  * 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.
+--- 1084,1089 ----
+***************
+*** 1515,1520 ****
+--- 1487,1494 ----
+  
+      FreeVector(vector);
+      xfree(cmdNam);
++     
++     return Success;
+  }
+  
+  /*
+Index: xc/programs/Xserver/Xprint/attributes.h
+diff -c 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,116 ****
+  char *ReplaceFileString(char *string,
+                          char *inFileName,
+                          char *outFileName);
+- void ExecCommand(char *pCommand,
+-                 char **argVector);
+  int TransferBytes(FILE *pSrcFile,
+                   FILE *pDstFile,
+                   int numBytes);
+--- 109,114 ----
+Index: xc/programs/Xserver/Xprint/spooler.c
+diff -c 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,131 ****
+      "| sort -u` " \
+    "| nawk -F: ' NF == 2 { name=$1 } " \
+               " NF == 1 { sub(\"^.*description\\( - undefined|=\\)\",\"\"); " \
+!                         " printf \"%sxp-printerattr.descriptor=%s\\n\",  name, $1 } '"
+  
+  #define LIST_QUEUES_OTHER \
+    "LANG=C lpstat -v | " \
+--- 125,131 ----
+      "| sort -u` " \
+    "| nawk -F: ' NF == 2 { name=$1 } " \
+               " NF == 1 { sub(\"^.*description\\( - undefined|=\\)\",\"\"); " \
+!                         " 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 -c 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,254 ****
+                tok="${val#*=}"
+            done
+        done
+!     ) | tr "," "[\n]" | fontpath2fontlist
+  }
+  
+  get_fontlist_from_all_xfs_configs()
+--- 248,254 ----
+                tok="${val#*=}"
+            done
+        done
+!     ) | tr "," "\n" | fontpath2fontlist
+  }
+  
+  get_fontlist_from_all_xfs_configs()
+***************
+*** 832,838 ****
+                          echo ${display}
+                      fi
+                    )
+!               done | tr "[\n]" " "
+            )
+          # Only produce output if we have some entries...
+          [ "${xpserverlist}" != "" ] && echo "${xpserverlist}"
+--- 832,838 ----
+                          echo ${display}
+                      fi
+                    )
+!               done | tr "\n" " "
+            )
+          # Only produce output if we have some entries...
+          [ "${xpserverlist}" != "" ] && echo "${xpserverlist}"
+Index: xc/programs/Xserver/Xprint/pcl/PclInit.c
+diff -c 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,340 ****
+   */
+  
+  static char DOC_ATT_SUPP[]="document-attributes-supported";
+! static char DOC_ATT_VAL[]="document-format";
+  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";
+  
+  static int
+  PclInitContext(XpContextPtr pCon)
+--- 329,340 ----
+   */
+  
+  static char DOC_ATT_SUPP[]="document-attributes-supported";
+! 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 xp-listfonts-modes";
+  
+  static int
+  PclInitContext(XpContextPtr pCon)
+***************
+*** 427,433 ****
+      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 ) ) 
+         == (char *)NULL )
+        return BadAlloc;
+      sprintf( attrStr, "*%s:\t%s %s %s", DOC_ATT_SUPP, server,
+--- 427,433 ----
+      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) + 8 ) ) 
+         == (char *)NULL )
+        return BadAlloc;
+      sprintf( attrStr, "*%s:\t%s %s %s", DOC_ATT_SUPP, server,
+***************
+*** 440,446 ****
+       */
+      server = XpGetOneAttribute( pCon, XPServerAttr, JOB_ATT_SUPP );
+      if( ( attrStr = (char *)xalloc(strlen(server) + strlen(JOB_ATT_SUPP)
+!                                 + strlen(JOB_ATT_VAL) + 4 ) ) 
+         == (char *)NULL )
+        return BadAlloc;
+      sprintf( attrStr, "*%s:\t%s %s", JOB_ATT_SUPP, server, JOB_ATT_VAL );
+--- 440,446 ----
+       */
+      server = XpGetOneAttribute( pCon, XPServerAttr, JOB_ATT_SUPP );
+      if( ( attrStr = (char *)xalloc(strlen(server) + strlen(JOB_ATT_SUPP)
+!                                 + strlen(JOB_ATT_VAL) + 8 ) ) 
+         == (char *)NULL )
+        return BadAlloc;
+      sprintf( attrStr, "*%s:\t%s %s", JOB_ATT_SUPP, server, JOB_ATT_VAL );
+***************
+*** 452,458 ****
+       */
+      server = XpGetOneAttribute( pCon, XPServerAttr, PAGE_ATT_SUPP );
+      if( ( attrStr = (char *)xalloc(strlen(server) + strlen(PAGE_ATT_SUPP)
+!                                 + strlen(PAGE_ATT_VAL) + 4 ) ) 
+         == (char *)NULL )
+        return BadAlloc;
+      sprintf( attrStr, "*%s:\t%s %s", PAGE_ATT_SUPP, server, PAGE_ATT_VAL );
+--- 452,458 ----
+       */
+      server = XpGetOneAttribute( pCon, XPServerAttr, PAGE_ATT_SUPP );
+      if( ( attrStr = (char *)xalloc(strlen(server) + strlen(PAGE_ATT_SUPP)
+!                                 + 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 -c 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,356 ****
+  
+  extern Bool InitializePsDriver(int ndx, ScreenPtr pScreen, int argc,
+      char **argv);
+- static Bool         PsDestroyContext(XpContextPtr pCon);
+  extern XpContextPtr PsGetContextFromWindow(WindowPtr win);
+  
+  /*
+--- 350,355 ----
+***************
+*** 374,382 ****
+   */
+  
+  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);
+--- 373,378 ----
+***************
+*** 556,562 ****
+  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 void PsSetFillColor(DrawablePtr pDrawable, GCPtr pGC, PsOutPtr psOut,
+                             ColormapPtr cMap);
+  
+--- 552,558 ----
+  extern void PsStoreColors(ColormapPtr pColor, int ndef, xColorItem *pdefs);
+  extern void PsResolveColor(unsigned short *pRed, unsigned short *pGreen,
+                             unsigned short *pBlue, VisualPtr pVisual);
+! extern PsOutColor PsGetPixelColor(ColormapPtr cMap, int pixval);
+  extern void PsSetFillColor(DrawablePtr pDrawable, GCPtr pGC, PsOutPtr psOut,
+                             ColormapPtr cMap);
+  
+***************
+*** 566,571 ****
+--- 562,568 ----
+  
+  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 -c 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,136 ****
+--- 131,143 ----
+      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,179 ****
+--- 181,214 ----
+        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,190 ****
+          char *pt = &pImage[rowsiz*r];
+          for( c=0 ; c<w ; c++,pt++ )
+          {
+!           int   val = PsGetPixelColor(cMap, (int)(*pt)&0xFF);
+!           char *ipt = (char *)&val;
+            if( swap )
+            {
+              char tmp[4];
+--- 218,226 ----
+          char *pt = &pImage[rowsiz*r];
+          for( c=0 ; c<w ; c++,pt++ )
+          {
+!           PsOutColor clr = PsGetPixelColor(cMap, (int)(*pt)&0xFF);
+!           int        val = PSOUTCOLOR_TO_RGB24BIT(clr);
+!           char      *ipt = (char *)&val;
+            if( swap )
+            {
+              char tmp[4];
+***************
+*** 296,301 ****
+--- 332,345 ----
+  
+        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,344 ****
+--- 383,414 ----
+          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,355 ****
+            char *pt = &pImage[rowsiz*r];
+            for( c=0 ; c<w ; c++,pt++ )
+            {
+!             int   val = PsGetPixelColor(cMap, (int)(*pt)&0xFF);
+!             char *ipt = (char *)&val;
+              if( swap )
+              {
+                char tmp[4];
+--- 418,428 ----
+            char *pt = &pImage[rowsiz*r];
+            for( c=0 ; c<w ; c++,pt++ )
+            {
+!             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 -c 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,80 ****
+--- 75,82 ----
+  ********************************************************************/
+  
+  #include "Ps.h"
++ #include "mi.h"
++ #include "micmap.h"
+  #include "gcstruct.h"
+  #include "windowstr.h"
+  #include "colormapst.h"
+***************
+*** 82,130 ****
+  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;
+  }
+  
+  void
+  PsDestroyColormap(ColormapPtr pColor)
+  {
+  }
+  
+  void
+  PsInstallColormap(ColormapPtr pColor)
+  {
+  }
+  
+  void
+  PsUninstallColormap(ColormapPtr pColor)
+  {
+  }
+  
+  int
+--- 84,108 ----
+  Bool
+  PsCreateColormap(ColormapPtr pColor)
+  {
+!   return miInitializeColormap(pColor);
+  }
+  
+  void
+  PsDestroyColormap(ColormapPtr pColor)
+  {
++   /* NO-OP */
+  }
+  
+  void
+  PsInstallColormap(ColormapPtr pColor)
+  {
++   miInstallColormap(pColor);
+  }
+  
+  void
+  PsUninstallColormap(ColormapPtr pColor)
+  {
++   miUninstallColormap(pColor);
+  }
+  
+  int
+***************
+*** 132,138 ****
+    ScreenPtr pScreen,
+    XID      *pCmapList)
+  {
+!   return 0;
+  }
+  
+  void
+--- 110,116 ----
+    ScreenPtr pScreen,
+    XID      *pCmapList)
+  {
+!   return miListInstalledColormaps(pScreen, pCmapList);
+  }
+  
+  void
+***************
+*** 160,177 ****
+    unsigned short *pBlue,
+    VisualPtr       pVisual)
+  {
+  }
+  
+! int
+  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);
+  }
+  
+  void
+--- 138,208 ----
+    unsigned short *pBlue,
+    VisualPtr       pVisual)
+  {
++   miResolveColor(pRed, pGreen, pBlue, pVisual);
+  }
+  
+! PsOutColor
+  PsGetPixelColor(ColormapPtr cMap, int pixval)
+  {
+!   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 -c 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,385 ****
+--- 380,395 ----
+  {
+      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 -c 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,126 ****
+  #endif
+    char            **printerNames;
+    int               numPrinters;
+!   int               nVisuals;
+!   int               nDepths;
+    VisualPtr         visuals;
+    DepthPtr          depths;
+    VisualID          defaultVisual;
+--- 119,136 ----
+  #endif
+    char            **printerNames;
+    int               numPrinters;
+!   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,222 ****
+      /* 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;
+  
+    /* Defaul visual is 8bit PseudoColor */
+    defaultVisual = visuals[1].vid;
+--- 189,368 ----
+      /* Will BitmapToRegion make any difference at all? */
+    pScreen->BitmapToRegion         = mfbPixmapToRegion;
+  
+!   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,234 ****
+  
+      GlxWrapInitVisuals(&proc);
+      /* GlxInitVisuals ignores the last three arguments. */
+!     proc(&visuals, &depths, &nVisuals, &nDepths,
+           &rootDepth, &defaultVisual, 0, 0, 0);
+    }
+  #endif /* GLXEXT */
+--- 374,380 ----
+  
+      GlxWrapInitVisuals(&proc);
+      /* GlxInitVisuals ignores the last three arguments. */
+!     proc(&visuals, &depths, &nv, &nd,
+           &rootDepth, &defaultVisual, 0, 0, 0);
+    }
+  #endif /* GLXEXT */
+***************
+*** 237,244 ****
+                 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);
+  
+    if( cfbCreateDefColormap(pScreen)==FALSE ) return FALSE;
+  
+--- 383,390 ----
+                 pScreen->width, pScreen->height,
+                 (int) (pScreen->width / (pScreen->mmWidth / 25.40)), 
+                 (int) (pScreen->height / (pScreen->mmHeight / 25.40)),
+!                0, rootDepth, nd,
+!                depths, defaultVisual, nv, visuals);
+  
+    if( cfbCreateDefColormap(pScreen)==FALSE ) return FALSE;
+  
+***************
+*** 282,293 ****
+   */
+  
+  static char DOC_ATT_SUPP[]="document-attributes-supported";
+! static char DOC_ATT_VAL[]="document-format";
+  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";
+  
+  static int
+  PsInitContext(pCon)
+--- 428,439 ----
+   */
+  
+  static char DOC_ATT_SUPP[]="document-attributes-supported";
+! 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 xp-listfonts-modes";
+  
+  static int
+  PsInitContext(pCon)
+***************
+*** 346,352 ****
+    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) 
+    {
+        return BadAlloc;
+    }
+--- 492,498 ----
+    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) + 8)) == NULL) 
+    {
+        return BadAlloc;
+    }
+***************
+*** 360,366 ****
+     */
+    server = XpGetOneAttribute( pCon, XPServerAttr, JOB_ATT_SUPP );
+    if ((attrStr = (char *) xalloc(strlen(server) + strlen(JOB_ATT_SUPP) +
+!                               strlen(JOB_ATT_VAL) + 4)) == NULL)
+    {
+        return BadAlloc;
+    }
+--- 506,512 ----
+     */
+    server = XpGetOneAttribute( pCon, XPServerAttr, JOB_ATT_SUPP );
+    if ((attrStr = (char *) xalloc(strlen(server) + strlen(JOB_ATT_SUPP) +
+!                               strlen(JOB_ATT_VAL) + 8)) == NULL)
+    {
+        return BadAlloc;
+    }
+***************
+*** 373,379 ****
+     */
+    server = XpGetOneAttribute( pCon, XPServerAttr, PAGE_ATT_SUPP );
+    if ((attrStr = (char *) xalloc(strlen(server) + strlen(PAGE_ATT_SUPP) +
+!                               strlen(PAGE_ATT_VAL) + 4)) == NULL)
+    {
+        return BadAlloc;
+    }
+--- 519,525 ----
+     */
+    server = XpGetOneAttribute( pCon, XPServerAttr, PAGE_ATT_SUPP );
+    if ((attrStr = (char *) xalloc(strlen(server) + strlen(PAGE_ATT_SUPP) +
+!                               strlen(PAGE_ATT_VAL) + 8)) == NULL)
+    {
+        return BadAlloc;
+    }
+Index: xc/programs/Xserver/Xprint/ps/PsPixmap.c
+diff -c 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,98 ****
+  {
+    PixmapPtr pPixmap;
+  
+!   pPixmap = (PixmapPtr)xalloc(sizeof(PixmapRec));
+    if( !pPixmap)  return NullPixmap;
+    pPixmap->drawable.type         = DRAWABLE_PIXMAP;
+    pPixmap->drawable.class        = 0;
+--- 92,98 ----
+  {
+    PixmapPtr pPixmap;
+  
+!   pPixmap = (PixmapPtr)xcalloc(1, sizeof(PixmapRec));
+    if( !pPixmap)  return NullPixmap;
+    pPixmap->drawable.type         = DRAWABLE_PIXMAP;
+    pPixmap->drawable.class        = 0;
+***************
+*** 108,127 ****
+    pPixmap->devKind               = 0;
+    pPixmap->refcnt                = 1;
+  
+!   pPixmap->devPrivate.ptr = (PsPixmapPrivPtr)xalloc(sizeof(PsPixmapPrivRec));
+    if( !pPixmap->devPrivate.ptr )
+      { xfree(pPixmap); return NullPixmap; }
+-   memset(pPixmap->devPrivate.ptr, 0, sizeof(PsPixmapPrivRec));
+    return pPixmap;
+  }
+  
+! Bool
+! PsDestroyPixmap(PixmapPtr pPixmap)
+  {
+    PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pPixmap->devPrivate.ptr;
+    DisplayListPtr  disp = priv->dispList;
+  
+-   if( --pPixmap->refcnt ) return TRUE;
+    while( disp )
+    {
+      int            i;
+--- 108,128 ----
+    pPixmap->devKind               = 0;
+    pPixmap->refcnt                = 1;
+  
+!   pPixmap->devPrivate.ptr = (PsPixmapPrivPtr)xcalloc(1, sizeof(PsPixmapPrivRec));
+    if( !pPixmap->devPrivate.ptr )
+      { xfree(pPixmap); return NullPixmap; }
+    return 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;
+  
+    while( disp )
+    {
+      int            i;
+***************
+*** 178,183 ****
+--- 179,198 ----
+      }
+      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,202 ****
+    {
+      if( disp->nelms>=DPY_BLOCKSIZE && disp->next ) continue;
+      if( disp->nelms<DPY_BLOCKSIZE ) return(disp);
+!     disp->next = (DisplayListPtr)xalloc(sizeof(DisplayListRec));
+      disp->next->next  = (DisplayListPtr)0;
+      disp->next->nelms = 0;
+    }
+!   disp = (DisplayListPtr)xalloc(sizeof(DisplayListRec));
+    disp->next     = (DisplayListPtr)0;
+    disp->nelms    = 0;
+    priv->dispList = disp;
+--- 207,217 ----
+    {
+      if( disp->nelms>=DPY_BLOCKSIZE && disp->next ) continue;
+      if( disp->nelms<DPY_BLOCKSIZE ) return(disp);
+!     disp->next = (DisplayListPtr)xcalloc(1, sizeof(DisplayListRec));
+      disp->next->next  = (DisplayListPtr)0;
+      disp->next->nelms = 0;
+    }
+!   disp = (DisplayListPtr)xcalloc(1, sizeof(DisplayListRec));
+    disp->next     = (DisplayListPtr)0;
+    disp->nelms    = 0;
+    priv->dispList = disp;
+***************
+*** 480,485 ****
+--- 495,501 ----
+  
+      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,504 ****
+  
+    if( (*nElms) )
+    {
+!     elms = (PsElmPtr)xalloc((*nElms)*sizeof(PsElmRec));
+      if( elms )
+      {
+        disp = priv->dispList;
+--- 514,520 ----
+  
+    if( (*nElms) )
+    {
+!     elms = (PsElmPtr)xcalloc(1, (*nElms)*sizeof(PsElmRec));
+      if( elms )
+      {
+        disp = priv->dispList;
+***************
+*** 568,574 ****
+    int      i;
+    PsElmPtr newElms;
+  
+!   newElms = (PsElmPtr)xalloc(nElms*sizeof(PsElmRec));
+    if( !newElms ) return(newElms);
+    for( i=0 ; i<nElms ; i++ )
+    {
+--- 584,590 ----
+    int      i;
+    PsElmPtr newElms;
+  
+!   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 -c 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,208 ****
+--- 203,233 ----
+      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 -c 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,438 ****
+  }
+  
+  static void
+! S_Color(PsOutPtr self, int clr)
+  {
+    int   ir, ig, ib;
+!   ir = clr>>16; ig = (clr>>8)&0xFF; ib = clr&0xFF;
+    if( ir==ig && ig==ib )
+!     { S_OutNum(self, (float)ir/255.); 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_OutTok(self, "sc", 1);
+    }
+  }
+--- 422,440 ----
+  }
+  
+  static void
+! S_Color(PsOutPtr self, PsOutColor clr)
+  {
+    int   ir, ig, ib;
+!   ir = PSOUTCOLOR_TO_REDBITS(clr);
+!   ig = PSOUTCOLOR_TO_GREENBITS(clr);
+!   ib = PSOUTCOLOR_TO_BLUEBITS(clr);
+    if( ir==ig && ig==ib )
+!     { S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ir)); S_OutTok(self, "g", 1); }
+    else
+    {
+!     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,642 ****
+  /*
+   *  Initialize the structure
+   */
+!   psout->CurColor    = 0xFFFFFFFF;
+    psout->LineWidth   = 1;
+    psout->LineCap     = PsCButt;
+    psout->LineJoin    = PsJMiter;
+--- 638,644 ----
+  /*
+   *  Initialize the structure
+   */
+!   psout->CurColor    = PSOUTCOLOR_NOCOLOR;
+    psout->LineWidth   = 1;
+    psout->LineCap     = PsCButt;
+    psout->LineJoin    = PsJMiter;
+***************
+*** 723,729 ****
+  PsOut_DirtyAttributes(PsOutPtr self)
+  {
+    int  i;
+!   self->CurColor    = 0xFFFFFFFF;
+    self->LineWidth   = -1;
+    self->LineCap     = (PsCapEnum)-1;
+    self->LineJoin    = (PsJoinEnum)-1;
+--- 725,731 ----
+  PsOut_DirtyAttributes(PsOutPtr self)
+  {
+    int  i;
+!   self->CurColor    = PSOUTCOLOR_NOCOLOR;
+    self->LineWidth   = -1;
+    self->LineCap     = (PsCapEnum)-1;
+    self->LineJoin    = (PsJoinEnum)-1;
+***************
+*** 911,917 ****
+  }
+  
+  void
+! PsOut_Color(PsOutPtr self, int clr)
+  {
+    if( clr==self->CurColor || self->InTile>=PsStip ) return;
+    self->CurColor = clr;
+--- 913,919 ----
+  }
+  
+  void
+! PsOut_Color(PsOutPtr self, PsOutColor clr)
+  {
+    if( clr==self->CurColor || self->InTile>=PsStip ) return;
+    self->CurColor = clr;
+***************
+*** 926,932 ****
+  
+  void
+  PsOut_LineAttrs(PsOutPtr self, int wd, PsCapEnum cap, PsJoinEnum join,
+!                 int nDsh, int *dsh, int dshOff, int bclr)
+  {
+    int         i;
+    int         same = 1;
+--- 928,934 ----
+  
+  void
+  PsOut_LineAttrs(PsOutPtr self, int wd, PsCapEnum cap, PsJoinEnum join,
+!                 int nDsh, int *dsh, int dshOff, PsOutColor bclr)
+  {
+    int         i;
+    int         same = 1;
+***************
+*** 973,979 ****
+      S_OutTok(self, "ds", 1);
+    }
+  
+!   if( nDsh ) self->LineBClr = bclr; else bclr = -1;
+  }
+  
+  void
+--- 975,984 ----
+      S_OutTok(self, "ds", 1);
+    }
+  
+!   if( nDsh )
+!     self->LineBClr = bclr;
+!   else
+!     bclr = PSOUTCOLOR_NOCOLOR;
+  }
+  
+  void
+***************
+*** 1094,1100 ****
+      if( i==0 ) S_OutTok(self, "m", 0);
+      else       S_OutTok(self, "l", 0);
+    }
+!   if( self->LineBClr>=0 )
+    {
+      S_OutTok(self, "gs", 0);
+      S_Color(self, self->LineBClr);
+--- 1099,1105 ----
+      if( i==0 ) S_OutTok(self, "m", 0);
+      else       S_OutTok(self, "l", 0);
+    }
+!   if( self->LineBClr != PSOUTCOLOR_NOCOLOR )
+    {
+      S_OutTok(self, "gs", 0);
+      S_Color(self, self->LineBClr);
+***************
+*** 1133,1139 ****
+    S_OutNum(self, (float)w);
+    S_OutNum(self, (float)h);
+    S_OutTok(self, "R", 0);
+!   if( self->LineBClr>=0 )
+    {
+      S_OutTok(self, "gs", 0);
+      S_Color(self, self->LineBClr);
+--- 1138,1144 ----
+    S_OutNum(self, (float)w);
+    S_OutNum(self, (float)h);
+    S_OutTok(self, "R", 0);
+!   if( self->LineBClr != PSOUTCOLOR_NOCOLOR )
+    {
+      S_OutTok(self, "gs", 0);
+      S_Color(self, self->LineBClr);
+***************
+*** 1159,1165 ****
+    S_OutNum(self, ang1+ang2);
+    if( ang2<0 ) S_OutTok(self, "An", 0);
+    else         S_OutTok(self, "Ac", 0);
+!   if( self->LineBClr>=0 )
+    {
+      S_OutTok(self, "gs", 0);
+      S_Color(self, self->LineBClr);
+--- 1164,1170 ----
+    S_OutNum(self, ang1+ang2);
+    if( ang2<0 ) S_OutTok(self, "An", 0);
+    else         S_OutTok(self, "Ac", 0);
+!   if( self->LineBClr != PSOUTCOLOR_NOCOLOR )
+    {
+      S_OutTok(self, "gs", 0);
+      S_Color(self, self->LineBClr);
+***************
+*** 1169,1175 ****
+  }
+  
+  void
+! PsOut_Text(PsOutPtr self, int x, int y, char *text, int textl, int bclr)
+  {
+    int  xo = self->XOff;
+    int  yo = self->YOff;
+--- 1174,1180 ----
+  }
+  
+  void
+! PsOut_Text(PsOutPtr self, int x, int y, char *text, int textl, PsOutColor bclr)
+  {
+    int  xo = self->XOff;
+    int  yo = self->YOff;
+***************
+*** 1179,1199 ****
+    S_OutStr(self, text, textl);
+    S_OutNum(self, (float)x);
+    S_OutNum(self, (float)y);
+!   if( bclr<0 ) 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.);
+      S_OutTok(self, "Tb", 1);
+    }
+  }
+  
+  void
+! PsOut_Text16(PsOutPtr self, int x, int y, unsigned short *text, int textl, int bclr)
+  {
+    int  xo = self->XOff;
+    int  yo = self->YOff;
+--- 1184,1206 ----
+    S_OutStr(self, text, textl);
+    S_OutNum(self, (float)x);
+    S_OutNum(self, (float)y);
+!   if( bclr == PSOUTCOLOR_NOCOLOR )
+!     S_OutTok(self, "T", 1);
+    else
+    {
+!     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, PsOutColor bclr)
+  {
+    int  xo = self->XOff;
+    int  yo = self->YOff;
+***************
+*** 1203,1224 ****
+    S_OutStr16(self, text, textl);
+    S_OutNum(self, (float)x);
+    S_OutNum(self, (float)y);
+!   if( bclr<0 ) 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.);
+      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)
+  {
+    char cacheID[10];
+    int xo = self->XOff;
+--- 1210,1232 ----
+    S_OutStr16(self, text, textl);
+    S_OutNum(self, (float)x);
+    S_OutNum(self, (float)y);
+!   if( bclr == PSOUTCOLOR_NOCOLOR )
+!     S_OutTok(self, "T", 1);
+    else
+    {
+!     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, PsOutColor bclr, PsOutColor fclr)
+  {
+    char cacheID[10];
+    int xo = self->XOff;
+***************
+*** 1231,1252 ****
+    S_OutNum(self, (float)x);
+    S_OutNum(self, (float)y);
+  
+!   if( fclr==0xFFFFFF )
+    {
+!     int   ir, ig, ib;
+!     ir = bclr>>16; ig = (bclr>>8)&0xFF; ib = bclr&0xFF;
+      if( ir==ig && ig==ib )
+!       S_OutNum(self, (float)ir/255.);
+      else
+        S_OutNum(self, (float)0);
+        self->RevImage = 1;
+      }
+    else
+    {
+!     int   ir, ig, ib;
+!     ir = fclr>>16; ig = (fclr>>8)&0xFF; ib = fclr&0xFF;
+      if( ir==ig && ig==ib )
+!       S_OutNum(self, (float)ir/255.);
+      else
+        S_OutNum(self, (float)0);
+    }
+--- 1239,1264 ----
+    S_OutNum(self, (float)x);
+    S_OutNum(self, (float)y);
+  
+!   if( fclr==PSOUTCOLOR_WHITE )
+    {
+!     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, PSOUTCOLOR_BITS_TO_PSFLOAT(ir));
+      else
+        S_OutNum(self, (float)0);
+        self->RevImage = 1;
+      }
+    else
+    {
+!     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, PSOUTCOLOR_BITS_TO_PSFLOAT(ir));
+      else
+        S_OutNum(self, (float)0);
+    }
+***************
+*** 1272,1281 ****
+  #endif
+  
+  void
+! PsOut_BeginImage(PsOutPtr self, int bclr, int fclr, int x, int y,
+                   int w, int h, int sw, int sh, int format)
+  {
+!   int savClr = self->CurColor;
+    int xo = self->XOff;
+    int yo = self->YOff;
+  
+--- 1284,1293 ----
+  #endif
+  
+  void
+! PsOut_BeginImage(PsOutPtr self, PsOutColor bclr, PsOutColor fclr, int x, int y,
+                   int w, int h, int sw, int sh, int format)
+  {
+!   PsOutColor savClr = self->CurColor;
+    int xo = self->XOff;
+    int yo = self->YOff;
+  
+***************
+*** 1291,1297 ****
+      S_OutTok(self, "<", 0);
+      self->ImageFormat = format;
+      self->RevImage = 0;
+!     if( self->InTile==PsTile && format==1 && fclr==0xFFFFFF )
+        self->RevImage = 1;
+      return;
+    }
+--- 1303,1309 ----
+      S_OutTok(self, "<", 0);
+      self->ImageFormat = format;
+      self->RevImage = 0;
+!     if( self->InTile==PsTile && format==1 && fclr==PSOUTCOLOR_WHITE )
+        self->RevImage = 1;
+      return;
+    }
+***************
+*** 1300,1306 ****
+    if( format==1 )
+    {
+      S_OutTok(self, "gs", 0);
+!     if( fclr==0xFFFFFF )
+      {
+        PsOut_Color(self, fclr);
+        PsOut_FillRect(self, x, y, sw, sh);
+--- 1312,1318 ----
+    if( format==1 )
+    {
+      S_OutTok(self, "gs", 0);
+!     if( fclr==PSOUTCOLOR_WHITE )
+      {
+        PsOut_Color(self, fclr);
+        PsOut_FillRect(self, x, y, sw, sh);
+***************
+*** 1332,1341 ****
+  }
+  
+  void
+! PsOut_BeginImageIM(PsOutPtr self, int bclr, int fclr, int x, int y,
+                   int w, int h, int sw, int sh, int format)
+  {
+!   int savClr = self->CurColor;
+    int xo = self->XOff;
+    int yo = self->YOff;
+  
+--- 1344,1353 ----
+  }
+  
+  void
+! PsOut_BeginImageIM(PsOutPtr self, PsOutColor bclr, PsOutColor fclr, int x, int y,
+                   int w, int h, int sw, int sh, int format)
+  {
+!   PsOutColor savClr = self->CurColor;
+    int xo = self->XOff;
+    int yo = self->YOff;
+  
+***************
+*** 1351,1357 ****
+      S_OutTok(self, "<", 0);
+      self->ImageFormat = format;
+      self->RevImage = 0;
+!     if( self->InTile==PsTile && format==1 && fclr==0xFFFFFF )
+        self->RevImage = 1;
+      return;
+    }
+--- 1363,1369 ----
+      S_OutTok(self, "<", 0);
+      self->ImageFormat = format;
+      self->RevImage = 0;
+!     if( self->InTile==PsTile && format==1 && fclr==PSOUTCOLOR_WHITE )
+        self->RevImage = 1;
+      return;
+    }
+***************
+*** 1363,1369 ****
+  #ifdef BM_CACHE
+      S_OutTok(self, "g", 1);
+  #else
+!     if( fclr==0xFFFFFF )
+      {
+        PsOut_Color(self, bclr);
+        self->RevImage = 1;
+--- 1375,1381 ----
+  #ifdef BM_CACHE
+      S_OutTok(self, "g", 1);
+  #else
+!     if( fclr==PSOUTCOLOR_WHITE )
+      {
+        PsOut_Color(self, bclr);
+        self->RevImage = 1;
+***************
+*** 1411,1417 ****
+      S_OutTok(self, ">", 1);
+      if( self->ImageFormat==1 && self->InTile==PsTile )
+      {
+!       if( self->ImgFClr==0xFFFFFF )
+        {
+          PsOut_Color(self, self->ImgFClr);
+          PsOut_FillRect(self, self->ImgX, self->ImgY, self->SclW, self->SclH);
+--- 1423,1429 ----
+      S_OutTok(self, ">", 1);
+      if( self->ImageFormat==1 && self->InTile==PsTile )
+      {
+!       if( self->ImgFClr==PSOUTCOLOR_WHITE )
+        {
+          PsOut_Color(self, self->ImgFClr);
+          PsOut_FillRect(self, self->ImgX, self->ImgY, self->SclW, self->SclH);
+***************
+*** 1436,1449 ****
+      self->RevImage    = 0;
+      return;
+    }
+! 
+  #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)
+    {
+--- 1448,1463 ----
+      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;
+  #ifdef BM_CACHE
+    if(self->start_image)
+    {
+***************
+*** 1509,1515 ****
+  
+  int
+  PsOut_BeginPattern(PsOutPtr self, void *tag, int w, int h, PsFillEnum type,
+!                    int bclr, int fclr)
+  {
+    int   i;
+    char  key[64];
+--- 1523,1529 ----
+  
+  int
+  PsOut_BeginPattern(PsOutPtr self, void *tag, int w, int h, PsFillEnum type,
+!                    PsOutColor bclr, PsOutColor fclr)
+  {
+    int   i;
+    char  key[64];
+***************
+*** 1585,1591 ****
+      case PsOpStip: key[0] = 'o'; break; }
+    S_OutTok(self, key, 0);
+    S_OutTok(self, "spt", 1);
+!   self->CurColor = 0xFFFFFFFF;
+  }
+  
+  void
+--- 1599,1605 ----
+      case PsOpStip: key[0] = 'o'; break; }
+    S_OutTok(self, key, 0);
+    S_OutTok(self, "spt", 1);
+!   self->CurColor = PSOUTCOLOR_NOCOLOR;
+  }
+  
+  void
+Index: xc/programs/Xserver/Xprint/ps/psout.h
+diff -c 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,158 ****
+--- 153,182 ----
+    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,181 ****
+  {
+    FILE       *Fp;
+    char        Buf[16384];
+!   int         CurColor;
+    int         LineWidth;
+    PsCapEnum   LineCap;
+    PsJoinEnum  LineJoin;
+    int         NDashes;
+    int        *Dashes;
+    int         DashOffset;
+!   int         LineBClr;
+    PsRuleEnum  FillRule;
+    char       *FontName;
+    int         FontSize;
+--- 192,205 ----
+  {
+    FILE       *Fp;
+    char        Buf[16384];
+!   PsOutColor  CurColor;
+    int         LineWidth;
+    PsCapEnum   LineCap;
+    PsJoinEnum  LineJoin;
+    int         NDashes;
+    int        *Dashes;
+    int         DashOffset;
+!   PsOutColor  LineBClr;
+    PsRuleEnum  FillRule;
+    char       *FontName;
+    int         FontSize;
+***************
+*** 193,200 ****
+  
+    PsFillEnum  InTile;
+    int         ImgSkip;
+!   int         ImgBClr;
+!   int         ImgFClr;
+    int         ImgX;
+    int         ImgY;
+    int         ImgW;
+--- 217,224 ----
+  
+    PsFillEnum  InTile;
+    int         ImgSkip;
+!   PsOutColor  ImgBClr;
+!   PsOutColor  ImgFClr;
+    int         ImgX;
+    int         ImgY;
+    int         ImgW;
+***************
+*** 230,240 ****
+  
+  extern void PsOut_Clip(PsOutPtr self, int clpTyp, PsClipPtr clpinf);
+  
+! extern void PsOut_Color(PsOutPtr self, int 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);
+  extern void PsOut_TextAttrs(PsOutPtr self, char *fnam, int siz, int iso);
+  extern void PsOut_TextAttrsMtx(PsOutPtr self, char *fnam, float *mtx, int iso);
+  
+--- 254,264 ----
+  
+  extern void PsOut_Clip(PsOutPtr self, int clpTyp, PsClipPtr clpinf);
+  
+! 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,
+!                             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,261 ****
+                            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);
+  
+! extern void PsOut_BeginImage(PsOutPtr self, int bclr, int  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,
+                                 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);
+--- 274,285 ----
+                            float ang1, float ang2);
+  
+  extern void PsOut_Text(PsOutPtr self, int x, int y, char *text, int textl,
+!                        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, PsOutColor bclr, PsOutColor fclr, int x, int y,
+                               int w, int h, int sw, int sh, int format);
+! 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,271 ****
+  extern void PsOut_EndFrame(PsOutPtr self);
+  
+  extern int  PsOut_BeginPattern(PsOutPtr self, void *tag, int w, int h,
+!                                PsFillEnum type, int bclr, int fclr);
+  extern void PsOut_EndPattern(PsOutPtr self);
+  extern void PsOut_SetPattern(PsOutPtr self, void *tag, PsFillEnum type);
+  
+--- 289,295 ----
+  extern void PsOut_EndFrame(PsOutPtr self);
+  
+  extern int  PsOut_BeginPattern(PsOutPtr self, void *tag, int w, int h,
+!                                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 -c 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,79 ****
+  
+  #ifdef DarwinArchitecture
+  #if DarwinQuartzSupport
+!     QUARTZ_DEFINES = -DDARWIN_WITH_QUARTZ -DROOTLESS
+  #endif
+  #endif
+  
+--- 73,79 ----
+  
+  #ifdef DarwinArchitecture
+  #if DarwinQuartzSupport
+!     QUARTZ_DEFINES = -DDARWIN_WITH_QUARTZ
+  #endif
+  #endif
+  
+Index: xc/programs/Xserver/dix/dispatch.c
+diff -c 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 ****
+! /* $XdotOrg: xc/programs/Xserver/dix/dispatch.c,v 1.5 2004/07/31 01:48:27 anholt Exp $ */
+  /* $Xorg: dispatch.c,v 1.5 2001/02/09 02:04:40 xorgcvs Exp $ */
+  /************************************************************
+  
+--- 1,4 ----
+! /* $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,368 ****
+      register int     nready;
+      register HWEventQueuePtr* icheck = checkForInput;
+  #ifdef SMART_SCHEDULE
+!     int                      start_tick;
+  #endif
+  
+      nextFreeClientID = 1;
+--- 362,368 ----
+      register int     nready;
+      register HWEventQueuePtr* icheck = checkForInput;
+  #ifdef SMART_SCHEDULE
+!     long                     start_tick;
+  #endif
+  
+      nextFreeClientID = 1;
+Index: xc/programs/Xserver/dix/main.c
+diff -c 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 ****
+! /* $XdotOrg: xc/programs/Xserver/dix/main.c,v 1.3 2004/06/30 20:06:53 kem Exp $ */
+  /* $XFree86: xc/programs/Xserver/dix/main.c,v 3.43 2003/10/30 21:21:02 herrb Exp $ */
+  /***********************************************************
+  
+--- 1,4 ----
+! /* $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,695 ****
+      if (i == MAXSCREENS)
+       return -1;
+  
+!     pScreen = (ScreenPtr) xalloc(sizeof(ScreenRec));
+      if (!pScreen)
+       return -1;
+  
+--- 689,695 ----
+      if (i == MAXSCREENS)
+       return -1;
+  
+!     pScreen = (ScreenPtr) xcalloc(1, sizeof(ScreenRec));
+      if (!pScreen)
+       return -1;
+  
+Index: xc/programs/Xserver/fb/fb.h
+diff -c 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,28 ****
+   * PERFORMANCE OF THIS SOFTWARE.
+   */
+  
+! /* $XdotOrg: xc/programs/Xserver/fb/fb.h,v 1.6 2004/08/11 21:14:17 kem Exp $ */
+  
+  #ifndef _FB_H_
+  #define _FB_H_
+--- 22,28 ----
+   * PERFORMANCE OF THIS SOFTWARE.
+   */
+  
+! /* $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,653 ****
+       ((WindowPtr) (pWin))->devPrivates[fbGetWinPrivateIndex()].ptr)
+  #endif
+  
+! #if defined(__DARWIN__)||defined(__CYGWIN__)
+  #define __fbPixOriginX(pPix) ((pPix)->drawable.x)
+  #define __fbPixOriginY(pPix) ((pPix)->drawable.y)
+  #else
+--- 647,653 ----
+       ((WindowPtr) (pWin))->devPrivates[fbGetWinPrivateIndex()].ptr)
+  #endif
+  
+! #ifdef ROOTLESS
+  #define __fbPixOriginX(pPix) ((pPix)->drawable.x)
+  #define __fbPixOriginY(pPix) ((pPix)->drawable.y)
+  #else
+Index: xc/programs/Xserver/fb/fbwindow.c
+diff -c 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 ****
+! /* $XdotOrg: xc/programs/Xserver/fb/fbwindow.c,v 1.4 2004/08/13 08:16:14 keithp Exp $ */
+  /*
+   * Id: fbwindow.c,v 1.1 1999/11/02 03:54:45 keithp Exp $
+   *
+--- 1,4 ----
+! /* $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,133 ****
+  {
+      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;
+--- 122,130 ----
+  {
+      RegionRec        rgnDst;
+      int              dx, dy;
+! 
+      PixmapPtr        pPixmap = fbGetWindowPixmap (pWin);
+      DrawablePtr      pDrawable = &pPixmap->drawable;
+  
+      dx = ptOldOrg.x - pWin->drawable.x;
+      dy = ptOldOrg.y - pWin->drawable.y;
+Index: xc/programs/Xserver/hw/xfree86/common/compiler.h
+diff -c 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,1082 ****
+  
+  extern volatile unsigned char *ioBase;
+  
+! #    define eieio()          __asm__ __volatile__ ("eieio" ::: "memory")
+  
+  static __inline__ unsigned char
+  xf86ReadMmio8(__volatile__ void *base, const unsigned long offset)
+--- 1076,1087 ----
+  
+  extern volatile unsigned char *ioBase;
+  
+! #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 -c 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,749 ****
+  
+      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:
+           case DS_RANGES:
+               ptr->mon_hsync[ptr->mon_n_hsync].lo =
+                   ConfiguredMonitor->det_mon[i].section.ranges.min_h;
+--- 731,743 ----
+  
+      for (i=0;i<4;i++) {
+       switch (ConfiguredMonitor->det_mon[i].type) {
+           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_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 -c 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,55 ****
+   */
+  
+  /* $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 $ */
+  
+  /* [JCH-96/01/21] Extended std reverse map to four buttons. */
+  
+--- 49,55 ----
+   */
+  
+  /* $XConsortium: xf86Events.c /main/46 1996/10/25 11:36:30 kaleb $ */
+! /* $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,1339 ****
+--- 1334,1343 ----
+      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,1365 ****
+      }
+  #endif /* !__UNIXOS2__ */
+      xf86EnterServerState(SETUP);
+!     for (i = 0; i < xf86NumScreens; i++) {
+! #ifdef DPMSExtension
+!      if (xf86Screens[i]->DPMSSet)
+!          xf86Screens[i]->DPMSSet(xf86Screens[i],DPMSModeOn,0);
+! #endif
+       xf86Screens[i]->LeaveVT(i, 0);
+!     }
+      for (ih = InputHandlers; ih; ih = ih->next)
+        xf86DisableInputHandler(ih);
+      xf86AccessLeave();      /* We need this here, otherwise */
+--- 1357,1365 ----
+      }
+  #endif /* !__UNIXOS2__ */
+      xf86EnterServerState(SETUP);
+!     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 -c 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,101 ****
+--- 96,102 ----
+  #ifdef DPMSExtension
+  #define DPMS_SERVER
+  #include "extensions/dpms.h"
++ #include "dpmsproc.h"
+  #endif
+  
+  
+***************
+*** 1244,1250 ****
+    /*
+     * try to deinitialize all input devices
+     */
+!   if (xf86Info.pKeyboard)
+      (xf86Info.kbdProc)(xf86Info.pKeyboard, DEVICE_CLOSE);
+  
+    /*
+--- 1245,1251 ----
+    /*
+     * try to deinitialize all input devices
+     */
+!   if (xf86Info.kbdProc && xf86Info.pKeyboard)
+      (xf86Info.kbdProc)(xf86Info.pKeyboard, DEVICE_CLOSE);
+  
+    /*
+***************
+*** 1254,1259 ****
+--- 1255,1264 ----
+    /* 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,1274 ****
+              * screen explicitely.
+              */
+             xf86EnableAccess(xf86Screens[i]);
+- #ifdef DPMSExtension
+-            if (xf86Screens[i]->DPMSSet)
+-                xf86Screens[i]->DPMSSet(xf86Screens[i],DPMSModeOn,0);
+- #endif
+             (xf86Screens[i]->LeaveVT)(i, 0);
+         }
+    }
+--- 1270,1275 ----
+***************
+*** 1763,1770 ****
+  #endif
+  
+  #if XORG_VERSION_SNAP >= 900
+!   ErrorF(" (%d.%d.0 RC %d)", XORG_VERSION_MAJOR, XORG_VERSION_MINOR + 1,
+!                              XORG_VERSION_SNAP - 900);
+  #endif
+  
+  #ifdef XORG_CUSTOM_VERSION
+--- 1764,1785 ----
+  #endif
+  
+  #if 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 -c 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,941 ****
+                   /* 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;
+                       }
+                   }
+                   else if (dx || dy) {
+--- 932,946 ----
+                   /* modeled from xf86Events.c */
+                   if (device->ptrfeed->ctrl.threshold) {
+                       if ((abs(dx) + abs(dy)) >= device->ptrfeed->ctrl.threshold) {
+!                          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 -c 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,112 ****
+  
+  #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) ? \
+--- 104,109 ----
+***************
+*** 307,313 ****
+                       mem64 = TRUE;
+  #if defined(LONG64) || defined(WORD64)
+                         info->memBase[0] |= 
+!                          (memType)PCIGETMEMORY64HIGH(pcrp->pci_base1) << 32;
+  #else
+                       if (pcrp->pci_base1)
+                           info->memBase[0] = 0;
+--- 304,310 ----
+                       mem64 = TRUE;
+  #if defined(LONG64) || defined(WORD64)
+                         info->memBase[0] |= 
+!                          (memType)PCIGETMEMORY64HIGH(pcrp->pci_base0) << 32;
+  #else
+                       if (pcrp->pci_base1)
+                           info->memBase[0] = 0;
+***************
+*** 327,333 ****
+                       mem64 = TRUE;
+  #if defined(LONG64) || defined(WORD64)
+                         info->memBase[1] |= 
+!                          (memType)PCIGETMEMORY64HIGH(pcrp->pci_base2) << 32;
+  #else
+                       if (pcrp->pci_base2)
+                         info->memBase[1] = 0;
+--- 324,330 ----
+                       mem64 = TRUE;
+  #if defined(LONG64) || defined(WORD64)
+                         info->memBase[1] |= 
+!                          (memType)PCIGETMEMORY64HIGH(pcrp->pci_base1) << 32;
+  #else
+                       if (pcrp->pci_base2)
+                         info->memBase[1] = 0;
+***************
+*** 348,354 ****
+                       mem64 = TRUE;
+  #if defined(LONG64) || defined(WORD64)
+                       info->memBase[2] |= 
+!                          (memType)PCIGETMEMORY64HIGH(pcrp->pci_base3) << 32;
+  #else
+                       if (pcrp->pci_base3)
+                         info->memBase[2] = 0;
+--- 345,351 ----
+                       mem64 = TRUE;
+  #if defined(LONG64) || defined(WORD64)
+                       info->memBase[2] |= 
+!                          (memType)PCIGETMEMORY64HIGH(pcrp->pci_base2) << 32;
+  #else
+                       if (pcrp->pci_base3)
+                         info->memBase[2] = 0;
+***************
+*** 369,375 ****
+                       mem64 = TRUE;
+  #if defined(LONG64) || defined(WORD64)
+                         info->memBase[3] |= 
+!                          (memType)PCIGETMEMORY64HIGH(pcrp->pci_base4) << 32;
+  #else
+                       if (pcrp->pci_base4)
+                         info->memBase[3] = 0;
+--- 366,372 ----
+                       mem64 = TRUE;
+  #if defined(LONG64) || defined(WORD64)
+                         info->memBase[3] |= 
+!                          (memType)PCIGETMEMORY64HIGH(pcrp->pci_base3) << 32;
+  #else
+                       if (pcrp->pci_base4)
+                         info->memBase[3] = 0;
+***************
+*** 390,396 ****
+                       mem64 = TRUE;
+  #if defined(LONG64) || defined(WORD64)
+                         info->memBase[4] |= 
+!                          (memType)PCIGETMEMORY64HIGH(pcrp->pci_base5) << 32;
+  #else
+                       if (pcrp->pci_base5)
+                         info->memBase[4] = 0;
+--- 387,393 ----
+                       mem64 = TRUE;
+  #if defined(LONG64) || defined(WORD64)
+                         info->memBase[4] |= 
+!                          (memType)PCIGETMEMORY64HIGH(pcrp->pci_base4) << 32;
+  #else
+                       if (pcrp->pci_base5)
+                         info->memBase[4] = 0;
+***************
+*** 1649,1655 ****
+           m = xf86JoinResLists(m,tmp);
+           tmp = m;
+           while (tmp) {
+!              tmp->block_end = MIN(tmp->block_end,PCI_MEM32_LENGTH_MAX);
+               tmp = tmp->next;
+           }
+       } else if ((pbp->primary == pvp->bus) &&
+--- 1646,1652 ----
+           m = xf86JoinResLists(m,tmp);
+           tmp = m;
+           while (tmp) {
+!              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 -c 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,17 ****
+   */
+  
+  #ifndef _EDID_H_
+! #define _EDID_H_ 1
+  
+  #include "vdif.h"
+  
+--- 11,17 ----
+   */
+  
+  #ifndef _EDID_H_
+! #define _EDID_H_ 
+  
+  #include "vdif.h"
+  
+***************
+*** 126,132 ****
+  #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 GAMMA _GAMMA(GET(D_GAMMA))
+  #define HSIZE_MAX GET(D_HSIZE)
+  #define VSIZE_MAX GET(D_VSIZE)
+--- 126,134 ----
+  #define SETUP _SETUP(GET(D_INPUT))
+  #define _SYNC(x) (x  & 0x0F)
+  #define SYNC _SYNC(GET(D_INPUT))
+! #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,177 ****
+  #define T_MANU GET(E_TMANU)
+  
+  /* extract information from estabished timing section */
+  #define _HSIZE1(x) ((x[0] + 31) * 8)
+  #define HSIZE1 _HSIZE1(c)
+  #define RATIO(x) ((x[1] & 0xC0) >> 6)
+  #define RATIO1_1 0
+  #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; \
+    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 _REFRESH_R(x) (x[1] & 0x3F) + 60
+  #define REFRESH_R  _REFRESH_R(c)
+  #define _ID_LOW(x) x[0]
+--- 160,187 ----
+  #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,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,v)
+  #define _REFRESH_R(x) (x[1] & 0x3F) + 60
+  #define REFRESH_R  _REFRESH_R(c)
+  #define _ID_LOW(x) x[0]
+***************
+*** 183,189 ****
+  #define NEXT_STD_TIMING _NEXT_STD_TIMING(c)
+  
+  
+! /* 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
+--- 193,199 ----
+  #define NEXT_STD_TIMING _NEXT_STD_TIMING(c)
+  
+  
+! /* 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,221 ****
+  #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 _STEREO(c)
+  #define _SYNC_T(x) ((x[17] & 0x18) >> 4)
+  #define SYNC_T _SYNC_T(c)
+  #define _MISC(x) ((x[17] & 0x06) >> 2)
+--- 224,233 ----
+  #define V_BORDER _V_BORDER(c)
+  #define _INTERLACED(x) ((x[17] & 0x80) >> 7)
+  #define INTERLACED _INTERLACED(c)
+! #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,241 ****
+--- 248,265 ----
+  #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,260 ****
+--- 279,285 ----
+  #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,269 ****
+--- 289,297 ----
+  /* 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,304 ****
+  /* 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)
+  
+  typedef unsigned int Uint;
+  typedef unsigned char Uchar;
+--- 325,336 ----
+  /* detailed timing misc */
+  #define IS_INTERLACED(x)  (x) 
+  #define IS_STEREO(x)  (x) 
+! #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,326 ****
+--- 353,359 ----
+    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,373 ****
+--- 401,407 ----
+    unsigned int stereo:2;
+    unsigned int sync:2;
+    unsigned int misc:2;
++   unsigned int stereo_1:1;
+  };
+  
+  #define DT 0
+***************
+*** 377,382 ****
+--- 411,417 ----
+  #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,389 ****
+--- 419,429 ----
+    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 -c 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,28 ****
+  
+  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_established_timing_section(Uchar*, struct established_timings *);
+! static void get_std_timing_section(Uchar*, struct std_timings *);
+  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_monitor_ranges(Uchar *, struct monitor_ranges *);
+  static void get_whitepoint_section(Uchar *, struct whitePoints *);
+  static void get_detailed_timing_section(Uchar*, struct       detailed_timings *);
+  
+  xf86MonPtr
+  xf86InterpretEDID(int scrnIndex, Uchar *block)
+--- 13,33 ----
+  
+  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 *,
+!                              struct edid_version *);
+  static void get_established_timing_section(Uchar*, struct established_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 *,
+!                                 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,47 ****
+      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);
+      get_established_timing_section(SECTION(ESTABLISHED_TIMING_SECTION,block),
+                                  &m->timings1);
+!     get_std_timing_section(SECTION(STD_TIMING_SECTION,block),m->timings2);
+      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);
+  }
+  
+  static void
+--- 38,61 ----
+      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);
+!     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,
+!                         &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,77 ****
+  }
+  
+  static void 
+! get_display_section(Uchar *c, struct disp_features *r)
+  {
+      r->input_type = INPUT_TYPE;
+!     r->input_voltage = INPUT_VOLTAGE;
+!     r->input_setup = SETUP;
+!     r->input_sync = SYNC;
+      r->hsize = HSIZE_MAX;
+      r->vsize = VSIZE_MAX;
+      r->gamma = GAMMA;
+--- 80,95 ----
+  }
+  
+  static void 
+! get_display_section(Uchar *c, struct disp_features *r,
+!                  struct edid_version *v)
+  {
+      r->input_type = INPUT_TYPE;
+!     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,111 ****
+  }
+  
+  static void
+! get_std_timing_section(Uchar *c, struct std_timings *r)
+  {
+      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;
+       NEXT_STD_TIMING;
+      }
+  }
+--- 115,134 ----
+  }
+  
+  static void
+! get_std_timing_section(Uchar *c, struct std_timings *r,
+!                     struct edid_version *v)
+  {
+      int i;
+  
+      for (i=0;i<STD_TIMINGS;i++){
+!      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,149 ****
+       break;
+        case ADD_STD_TIMINGS:
+       det_mon[i].type = DS_STD_TIMINGS;
+!      get_dst_timing_section(c,det_mon[i].section.std_t);
+       break;
+        }
+      } else { 
+        det_mon[i].type = DT;
+--- 165,175 ----
+       break;
+        case ADD_STD_TIMINGS:
+       det_mon[i].type = DS_STD_TIMINGS;
+!      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,171 ****
+  }
+  
+  static void
+! get_dst_timing_section(Uchar *c, struct std_timings *t)
+  {
+    int j;
+      c = c + 5;
+--- 191,198 ----
+  }
+  
+  static void
+! get_dst_timing_section(Uchar *c, struct std_timings *t,
+!                     struct edid_version *v)
+  {
+    int j;
+      c = c + 5;
+***************
+*** 188,193 ****
+--- 215,228 ----
+      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,228 ****
+--- 256,276 ----
+    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 -c 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,18 ****
+    
+  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_established_timings(int scrnIndex,
+                                     struct established_timings *);
+  static void print_std_timings(int scrnIndex, struct std_timings *);
+--- 12,19 ----
+    
+  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 *,
+!                        struct edid_version *);
+  static void print_established_timings(int scrnIndex,
+                                     struct established_timings *);
+  static void print_std_timings(int scrnIndex, struct std_timings *);
+***************
+*** 21,39 ****
+  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_whitepoint(int scrnIndex, struct disp_features *);
+!   
+  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_established_timings(m->scrnIndex,&m->timings1);
+      print_std_timings(m->scrnIndex,m->timings2);
+      print_detailed_monitor_section(m->scrnIndex,m->det_mon);
+      return m;
+  }
+    
+--- 22,44 ----
+  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 *,
+!                              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, &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,59 ****
+  }
+    
+  static void
+! print_display(int scrnIndex, struct disp_features *disp)
+  {
+      print_input_features(scrnIndex,disp);
+      xf86DrvMsg(scrnIndex,X_INFO,"Max H-Image Size [cm]: ");
+--- 58,65 ----
+  }
+    
+  static void
+! 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,81 ****
+        else
+       xf86ErrorF("V-Size may change\n");
+      xf86DrvMsg(scrnIndex,X_INFO,"Gamma: %.2f\n", disp->gamma);
+!     print_dpms_features(scrnIndex,disp);
+      print_whitepoint(scrnIndex,disp);
+  }
+    
+  static void 
+  print_input_features(int scrnIndex, struct disp_features *c)
+  {
+!     if (DIGITAL(c->input_type))
+       xf86DrvMsg(scrnIndex,X_INFO,"Digital Display Input\n");
+!     else {
+       xf86DrvMsg(scrnIndex,X_INFO,"Analog Display Input,  ");
+       xf86ErrorF("Input Voltage Level: ");
+       switch (c->input_voltage){
+--- 72,89 ----
+        else
+       xf86ErrorF("V-Size may change\n");
+      xf86DrvMsg(scrnIndex,X_INFO,"Gamma: %.2f\n", disp->gamma);
+!     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)) {
+       xf86DrvMsg(scrnIndex,X_INFO,"Digital Display Input\n");
+!      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,117 ****
+  }
+    
+  static void 
+! print_dpms_features(int scrnIndex, struct disp_features *c)
+  {
+       if (c->dpms) {
+        xf86DrvMsg(scrnIndex,X_INFO,"DPMS capabilities:");
+--- 119,126 ----
+  }
+    
+  static void 
+! print_dpms_features(int scrnIndex, struct disp_features *c,
+!                  struct edid_version *v)
+  {
+       if (c->dpms) {
+        xf86DrvMsg(scrnIndex,X_INFO,"DPMS capabilities:");
+***************
+*** 140,145 ****
+--- 149,158 ----
+      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,240 ****
+           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");
+           break;
+       case DS_STD_TIMINGS:
+           for (j = 0; j<5; j++) 
+--- 247,261 ----
+           if (m[i].section.ranges.max_clock != 0)
+               xf86ErrorF(" PixClock max %i MHz\n",m[i].section.ranges.max_clock);
+           else
+!              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,257 ****
+--- 273,281 ----
+                              m[i].section.wp[j].white_y,
+                              m[i].section.wp[j].white_gamma);
+           break;
++      case DS_DUMMY:
++      default:
++          break;
+       }
+      }
+  }
+***************
+*** 278,286 ****
+       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");
+       }
+      }
+  }
+--- 302,333 ----
+       xf86ErrorF("v_border: %i\n",t->v_border);
+       if (IS_STEREO(t->stereo)) {
+           xf86DrvMsg(scrnIndex,X_INFO,"Stereo: ");
+!          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/sgml/BUILD.sgml
+diff -c 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,285 ****
+--- 280,291 ----
+  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=&lt;install_target_dir&gt;
++ make install.man DESTDIR=&lt;install_target_dir&gt;
++ </tt></quote>
+  
+  <p>
+  Cross compiling is supported if the appropriate config files for your
+Index: xc/programs/Xserver/hw/xfree86/drivers/ati/Imakefile
+diff -c 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,94 ****
+   * Currently, ATIAvoidNonPCI needs to be set to YES for those platforms that do
+   * not tolerate PCI master aborts.
+   */
+  #if defined(i386Architecture) || \
+-     defined(ia64Architecture) || \
+      defined(AMD64Architecture) || \
+      defined(AlphaArchitecture)
+  # ifndef ATIAvoidCPIO
+--- 87,102 ----
+   * 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(AMD64Architecture) || \
+      defined(AlphaArchitecture)
+  # ifndef ATIAvoidCPIO
+***************
+*** 149,155 ****
+  
+  #endif
+  
+! DEFINES = $(CPIODEFINES) $(DGADEFINES) $(NONPCIDEFINES) $(DRIDEFINES)
+  
+  SRCS1 = ati.c atiadapter.c atibus.c atichip.c atiident.c atioption.c \
+       atiprobe.c atividmem.c $(CPIOSRCS1) $(MODSRCS1) \
+--- 157,164 ----
+  
+  #endif
+  
+! 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 -c 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,1928 ****
+                     VBlankEnd += 0x0100U;
+  
+                  pATI->LCDHBlankWidth = HBlankEnd - HBlankStart;
+!                 pATI->LCDHSyncStart = HSyncStart - HBlankStart - 1;
+                  pATI->LCDHSyncWidth = HSyncEnd - HSyncStart;
+  
+                  pATI->LCDVBlankWidth = VBlankEnd - VBlankStart;
+!                 pATI->LCDVSyncStart = VSyncStart - VBlankStart - 1;
+                  pATI->LCDVSyncWidth = VSyncEnd - VSyncStart;
+  
+                  HDisplay = HTotal + 5 - pATI->LCDHBlankWidth;
+--- 1918,1928 ----
+                     VBlankEnd += 0x0100U;
+  
+                  pATI->LCDHBlankWidth = HBlankEnd - HBlankStart;
+!                 pATI->LCDHSyncStart = HSyncStart - HBlankStart;
+                  pATI->LCDHSyncWidth = HSyncEnd - HSyncStart;
+  
+                  pATI->LCDVBlankWidth = VBlankEnd - VBlankStart;
+!                 pATI->LCDVSyncStart = VSyncStart - VBlankStart;
+                  pATI->LCDVSyncWidth = VSyncEnd - VSyncStart;
+  
+                  HDisplay = HTotal + 5 - pATI->LCDHBlankWidth;
+Index: xc/programs/Xserver/hw/xfree86/drivers/ati/atiprobe.c
+diff -c 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,1248 ****
+--- 1243,1252 ----
+              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,1280 ****
+--- 1279,1288 ----
+                  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,1315 ****
+              ATIClaimSparseIOBases(ProbeFlags, Mach64SparseIOBases[i], 4,
+                  DetectedMach64);
+          }
+- 
+  #endif /* AVOID_NON_PCI */
+  
+      }
+--- 1317,1322 ----
+***************
+*** 1539,1545 ****
+                                  ATIFindVGA(pVideo, &pVGA, &pATI, p8514,
+                                      ProbeFlags);
+                          }
+- 
+                          xf86SetPciVideo(NULL, NONE);
+                          break;
+                  }
+--- 1546,1551 ----
+***************
+*** 1554,1559 ****
+--- 1560,1568 ----
+                      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 -c 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,191 ****
+--- 185,195 ----
+              (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,332 ****
+--- 331,341 ----
+          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 -c 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,253 ****
+          i = 0;
+          do {
+              ret = drmCommandNone(info->drmFD, DRM_R128_CCE_IDLE);
+!         } while ( ret && errno == EBUSY && i++ < R128_IDLE_RETRY );
+  
+       if (ret && ret != -EBUSY) {
+           xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+                      "%s: CCE idle %d\n", __FUNCTION__, ret);
+       }
+  
+       if (ret == 0) return;
+  
+       xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+                  "Idle timed out, resetting engine...\n");
+       R128EngineReset(pScrn);
+  
+       /* Always restart the engine when doing CCE 2D acceleration */
+--- 237,259 ----
+          i = 0;
+          do {
+              ret = drmCommandNone(info->drmFD, DRM_R128_CCE_IDLE);
+!         } 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 -c 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,1302 ****
+--- 1297,1303 ----
+      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 -c 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,1646 ****
+                                  NULL,        /* linePitches */
+                                  8 * 64,      /* minPitch */
+                                  8 * 1024,    /* maxPitch */
+!                                 8 * 64,      /* pitchInc */
+                                  128,         /* minHeight */
+                                  2048,        /* maxHeight */
+                                  pScrn->display->virtualX,
+--- 1640,1650 ----
+                                  NULL,        /* linePitches */
+                                  8 * 64,      /* minPitch */
+                                  8 * 1024,    /* maxPitch */
+! /*
+!  * 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 -c 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,598 ****
+  
+     pScreen = screenInfo.screens[pScrn->scrnIndex];
+  
+!    new_linear = xf86AllocateOffscreenLinear(pScreen, size, 16,
+                                               NULL, NULL, NULL);
+  
+     if(!new_linear) {
+       int max_size;
+  
+!      xf86QueryLargestOffscreenLinear(pScreen, &max_size, 16,
+                                               PRIORITY_EXTREME);
+  
+       if(max_size < size)
+          return NULL;
+  
+       xf86PurgeUnlockedOffscreenAreas(pScreen);
+!      new_linear = xf86AllocateOffscreenLinear(pScreen, size, 16,
+                                               NULL, NULL, NULL);
+     }
+  
+--- 579,598 ----
+  
+     pScreen = screenInfo.screens[pScrn->scrnIndex];
+  
+!    new_linear = xf86AllocateOffscreenLinear(pScreen, size, 8,
+                                               NULL, NULL, NULL);
+  
+     if(!new_linear) {
+       int max_size;
+  
+!      xf86QueryLargestOffscreenLinear(pScreen, &max_size, 8,
+                                               PRIORITY_EXTREME);
+  
+       if(max_size < size)
+          return NULL;
+  
+       xf86PurgeUnlockedOffscreenAreas(pScreen);
+!      new_linear = xf86AllocateOffscreenLinear(pScreen, size, 8,
+                                               NULL, NULL, NULL);
+     }
+  
+Index: xc/programs/Xserver/hw/xfree86/drivers/ati/radeon.h
+diff -c 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,560 ****
+--- 555,561 ----
+      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 -c 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,210 ****
+           return FALSE;
+       }
+      } else {
+       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 */
+  
+               /* 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 */
+--- 198,225 ----
+           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) & 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,230 ****
+                   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);
+           }
+       } else {
+           xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "No Connector Info Table found!\n");
+--- 237,243 ----
+                   pRADEONEnt->PortInfo[tmp1].TMDSType == TMDS_INT)
+                   pRADEONEnt->PortInfo[tmp1].TMDSType = TMDS_UNKNOWN;
+               
+!              connector_found += (tmp1 + 1);
+           }
+       } else {
+           xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "No Connector Info Table found!\n");
+***************
+*** 232,245 ****
+       }
+  
+       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");
+!            }
+           }
+!        } 
+       }
+  
+  #if 0
+--- 245,298 ----
+       }
+  
+       if (info->IsMobility) {
+!          /* 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 -c 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,370 ****
+--- 365,371 ----
+      "xf86InitInt10",
+      "xf86FreeInt10",
+      "xf86int10Addr",
++     "xf86ExecX86int10",
+      NULL
+  };
+  
+***************
+*** 1311,1317 ****
+       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;
+      } else {
+       info->PanelXRes = ((INREG(RADEON_CRTC_H_TOTAL_DISP)>>16) + 1) * 8;
+      }
+--- 1312,1318 ----
+       info->PanelYRes = (INREG(RADEON_CRTC_V_TOTAL_DISP)>>16) + 1;
+      }
+      if (fp_horz_stretch & RADEON_HORZ_STRETCH_ENABLE) {
+!      info->PanelXRes = ((fp_horz_stretch>>16) + 1) * 8;
+      } else {
+       info->PanelXRes = ((INREG(RADEON_CRTC_H_TOTAL_DISP)>>16) + 1) * 8;
+      }
+***************
+*** 1712,1717 ****
+--- 1713,1725 ----
+               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,1775 ****
+  
+      }
+  
+!     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((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");
+!              }
+           }
+- 
+-          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;
+       }
+  
+       /* Primary Head (DVI or Laptop Int. panel)*/
+       /* A ddc capable display connected on DVI port */
+       if (pRADEONEnt->PortInfo[0].MonType == MT_UNKNOWN) {
+--- 1752,1796 ----
+  
+      }
+  
+!     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");
+           }
+       }
+  
++      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,2590 ****
+       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) {
+  
+               info->PanelXRes  = d_timings->h_active;
+               info->PanelYRes  = d_timings->v_active;
+--- 2604,2613 ----
+       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->DotClock) continue; /* Timings already inited */
+  
+               info->PanelXRes  = d_timings->h_active;
+               info->PanelYRes  = d_timings->v_active;
+***************
+*** 3157,3164 ****
+               new->next       = NULL;
+               new->prev       = last;
+  
+!              last->next = new;
+               last = new;
+           }
+       }
+      }
+--- 3180,3188 ----
+               new->next       = NULL;
+               new->prev       = last;
+  
+!              if (last) last->next = new;
+               last = new;
++              if (!first) first = new;
+           }
+       }
+      }
+***************
+*** 4471,4480 ****
+  
+      RADEONSave(pScrn);
+  
+!     if (xf86ReturnOptValBool(info->Options, OPTION_DYNAMIC_CLOCKS, FALSE)) {
+!      RADEONSetDynamicClock(pScrn, 1);
+!     } else {
+!      RADEONSetDynamicClock(pScrn, 0);
+      }
+  
+      if (info->FBDev) {
+--- 4495,4506 ----
+  
+      RADEONSave(pScrn);
+  
+!     if ((!info->IsSecondary) && info->IsMobility) {
+!         if (xf86ReturnOptValBool(info->Options, OPTION_DYNAMIC_CLOCKS, FALSE)) {
+!          RADEONSetDynamicClock(pScrn, 1);
+!         } else {
+!          RADEONSetDynamicClock(pScrn, 0);
+!         }
+      }
+  
+      if (info->FBDev) {
+***************
+*** 7133,7138 ****
+--- 7159,7165 ----
+       RADEONDoAdjustFrame(pScrn, x, y, FALSE);
+      }
+  
++     RADEONSetFBLocation (pScrn);
+  #ifdef XF86DRI
+       if (info->CPStarted) DRIUnlock(pScrn->pScreen);
+  #endif
+***************
+*** 7145,7153 ****
+--- 7172,7193 ----
+  {
+      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,7163 ****
+--- 7198,7205 ----
+      } 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 -c 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,809 ****
+  #       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_MDGPIO_A_REG                 0x01ac
+  #define RADEON_MDGPIO_EN_REG                0x01b0
+  #define RADEON_MDGPIO_MASK                  0x0198
+--- 803,809 ----
+  #       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 << 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 -c 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,12 ****
+--- 7,17 ----
+  #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,426 ****
+--- 426,433 ----
+      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,446 ****
+      dst_pitch = (width * tex_bytepp + 31) & ~31;
+      size = dst_pitch * height;
+  
+!     if (!AllocateLinear(pScrn, size))
+       return FALSE;
+  
+      if (flags & XAA_RENDER_REPEAT) {
+--- 447,454 ----
+      dst_pitch = (width * tex_bytepp + 31) & ~31;
+      size = dst_pitch * height;
+  
+!     /* Allocate off-screen space for texture pre-rendering as well */
+!     if (!AllocateLinear(pScrn, size + offscreensize))
+       return FALSE;
+  
+      if (flags & XAA_RENDER_REPEAT) {
+***************
+*** 451,457 ****
+       txformat |= RADEON_TXFORMAT_NON_POWER2;
+      }
+  
+!     offset = info->RenderTex->offset * pScrn->bitsPerPixel / 8;
+  
+      /* Upload texture to card.  Should use ImageWrite to avoid syncing. */
+      i = height;
+--- 459,465 ----
+       txformat |= RADEON_TXFORMAT_NON_POWER2;
+      }
+  
+!     offset = info->RenderTex->offset * pScrn->bitsPerPixel / 8 + offscreensize;
+  
+      /* Upload texture to card.  Should use ImageWrite to avoid syncing. */
+      i = height;
+***************
+*** 481,486 ****
+--- 489,495 ----
+                                       RADEON_CLAMP_S_WRAP |
+                                       RADEON_CLAMP_T_WRAP);
+      FINISH_ACCEL();
++     info->RenderTexValidR100 = FALSE;
+  
+      return TRUE;
+  }
+***************
+*** 608,613 ****
+--- 617,711 ----
+  
+      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,701 ****
+--- 794,800 ----
+      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 -c 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,210 ****
+--- 205,221 ----
+  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 -c 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,179 ****
+  #define BEGIN_LP_RING(n)                                             \
+     unsigned int outring, ringmask;                                   \
+     volatile unsigned char *virt;                                     \
+!    unsigned int needed;                                                      \
+     if ((n) & 1)                                                              \
+        ErrorF("BEGIN_LP_RING called with odd argument: %d\n", n);     \
+     if ((n) > 2 && (I810_DEBUG&DEBUG_ALWAYS_SYNC))                    \
+--- 173,179 ----
+  #define BEGIN_LP_RING(n)                                             \
+     unsigned int outring, ringmask;                                   \
+     volatile unsigned char *virt;                                     \
+!    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,212 ****
+  #define BEGIN_LP_RING(n)                                             \
+     unsigned int outring, ringmask;                                   \
+     volatile unsigned char *virt;                                     \
+!    unsigned 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,212 ----
+  #define BEGIN_LP_RING(n)                                             \
+     unsigned int outring, ringmask;                                   \
+     volatile unsigned char *virt;                                     \
+!    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 -c 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,178 ****
+     unsigned long OverlayPhysical;
+     unsigned long OverlayStart;
+     int colorKey;
+!    int surfaceAllocation[I810_TOTAL_SURFACES];
+     int numSurfaces;
+  
+     DGAModePtr DGAModes;
+--- 172,178 ----
+     unsigned long OverlayPhysical;
+     unsigned long OverlayStart;
+     int colorKey;
+!    unsigned int surfaceAllocation[I810_TOTAL_SURFACES];
+     int numSurfaces;
+  
+     DGAModePtr DGAModes;
+***************
+*** 295,303 ****
+  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 I810AllocHigh(I810MemRange * result, I810MemRange * pool,
+!                       int size);
+  extern Bool I810AllocateFront(ScrnInfoPtr pScrn);
+  
+  extern int I810AllocateGARTMemory(ScrnInfoPtr pScrn);
+--- 295,304 ----
+  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 I810AllocHigh(I810MemRange * result, I810MemRange * pool,
+!                      int size);
+  extern Bool I810AllocateFront(ScrnInfoPtr pScrn);
+  
+  extern int I810AllocateGARTMemory(ScrnInfoPtr pScrn);
+Index: xc/programs/Xserver/hw/xfree86/drivers/i810/i810_accel.c
+diff -c 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,265 ****
+  #ifdef XF86DRI
+     /* VT switching tries to do this.  
+      */
+!    if (!pI810->LockHeld && pI810->directRenderingEnabled) {
+        return;
+     }
+  #endif
+--- 259,265 ----
+  #ifdef XF86DRI
+     /* VT switching tries to do this.  
+      */
+!    if ((!pI810->LockHeld && pI810->directRenderingEnabled) || !pScrn->vtSema) {
+        return;
+     }
+  #endif
+Index: xc/programs/Xserver/hw/xfree86/drivers/i810/i810_dri.c
+diff -c 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,296 ****
+     unsigned long dcacheHandle;
+     int sysmem_size = 0;
+     int back_size = 0;
+!    int pitch_idx = 0;
+     int bufs;
+     int width = pScrn->displayWidth * pI810->cpp;
+     int i;
+--- 290,296 ----
+     unsigned long dcacheHandle;
+     int sysmem_size = 0;
+     int back_size = 0;
+!    unsigned int pitch_idx = 0;
+     int bufs;
+     int width = pScrn->displayWidth * pI810->cpp;
+     int i;
+***************
+*** 1497,1502 ****
+--- 1497,1507 ----
+           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 -c 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,1137 ****
+     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;
+  }
+  
+--- 1124,1129 ----
+***************
+*** 1159,1165 ****
+  I810MapMem(ScrnInfoPtr pScrn)
+  {
+     I810Ptr pI810 = I810PTR(pScrn);
+!    unsigned i;
+  
+     for (i = 2; i < pI810->FbMapSize; i <<= 1) ;
+     pI810->FbMapSize = i;
+--- 1151,1157 ----
+  I810MapMem(ScrnInfoPtr pScrn)
+  {
+     I810Ptr pI810 = I810PTR(pScrn);
+!    long i;
+  
+     for (i = 2; i < pI810->FbMapSize; i <<= 1) ;
+     pI810->FbMapSize = i;
+***************
+*** 2074,2079 ****
+--- 2066,2078 ----
+     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 -c 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,61 ****
+  int
+  I810AllocLow(I810MemRange * result, I810MemRange * pool, int size)
+  {
+!    if (size > pool->Size)
+        return 0;
+  
+     pool->Size -= size;
+--- 55,61 ----
+  int
+  I810AllocLow(I810MemRange * result, I810MemRange * pool, int size)
+  {
+!    if (size > (long)pool->Size)
+        return 0;
+  
+     pool->Size -= size;
+***************
+*** 69,75 ****
+  int
+  I810AllocHigh(I810MemRange * result, I810MemRange * pool, int size)
+  {
+!    if (size > pool->Size)
+        return 0;
+  
+     pool->Size -= size;
+--- 69,75 ----
+  int
+  I810AllocHigh(I810MemRange * result, I810MemRange * pool, int size)
+  {
+!    if (size > (long)pool->Size)
+        return 0;
+  
+     pool->Size -= size;
+Index: xc/programs/Xserver/hw/xfree86/drivers/i810/i810_reg.h
+diff -c 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,469 ****
+  #define I830_HEAD_MASK      0x001FFFFC
+  
+  #define RING_START     0x08
+! #define START_ADDR          0x00FFFFF8
+  #define I830_RING_START_MASK 0xFFFFF000
+  
+  #define RING_LEN       0x0C
+! #define RING_NR_PAGES       0x000FF000 
+  #define I830_RING_NR_PAGES   0x001FF000
+  #define RING_REPORT_MASK    0x00000006
+  #define RING_REPORT_64K     0x00000002
+--- 459,469 ----
+  #define I830_HEAD_MASK      0x001FFFFC
+  
+  #define RING_START     0x08
+! #define START_ADDR          0x03FFFFF8
+  #define I830_RING_START_MASK 0xFFFFF000
+  
+  #define RING_LEN       0x0C
+! #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 -c 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,196 ****
+     int CacheLines;
+  
+     /* These are set in PreInit and never changed. */
+!    unsigned long FbMapSize;
+!    unsigned long TotalVideoRam;
+     I830MemRange StolenMemory;                /* pre-allocated memory */
+!    unsigned 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;
+  
+     /* Regions allocated either from the above pools, or from agpgart. */
+     /* for single and dual head configurations */
+--- 180,196 ----
+     int CacheLines;
+  
+     /* These are set in PreInit and never changed. */
+!    long FbMapSize;
+!    long TotalVideoRam;
+     I830MemRange StolenMemory;                /* pre-allocated memory */
+!    long BIOSMemorySize;                      /* min stolen pool size */
+     int BIOSMemSizeLoc;
+  
+     /* These change according to what has been allocated. */
+     long FreeMemory;
+     I830MemRange MemoryAperture;
+     I830MemPool StolenPool;
+!    long allocatedMemory;
+  
+     /* Regions allocated either from the above pools, or from agpgart. */
+     /* for single and dual head configurations */
+***************
+*** 348,354 ****
+     int xoffset;
+     int yoffset;
+  
+!    int SaveGeneration;
+     Bool vbeRestoreWorkaround;
+     Bool displayInfo;
+     Bool devicePresence;
+--- 348,354 ----
+     int xoffset;
+     int yoffset;
+  
+!    unsigned int SaveGeneration;
+     Bool vbeRestoreWorkaround;
+     Bool displayInfo;
+     Bool devicePresence;
+***************
+*** 415,421 ****
+  extern Bool I830BindGARTMemory(ScrnInfoPtr pScrn);
+  extern Bool I830UnbindGARTMemory(ScrnInfoPtr pScrn);
+  extern unsigned long I830AllocVidMem(ScrnInfoPtr pScrn, I830MemRange *result,
+!                                   I830MemPool *pool, unsigned long size,
+                                    unsigned long alignment, int flags);
+  
+  extern void I830PrintAllRegisters(I830RegPtr i830Reg);
+--- 415,421 ----
+  extern Bool I830BindGARTMemory(ScrnInfoPtr pScrn);
+  extern Bool I830UnbindGARTMemory(ScrnInfoPtr pScrn);
+  extern unsigned long I830AllocVidMem(ScrnInfoPtr pScrn, I830MemRange *result,
+!                                   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 -c 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,599 ****
+--- 594,600 ----
+     I830Ptr pI830 = I830PTR(pScrn);
+     vbeInfoPtr pVbe = pI830->pVbe;
+     CARD32 temp;
++ 
+  #ifdef I915G_WORKAROUND
+     int getmode;
+     int mode;
+***************
+*** 1018,1024 ****
+  I830MapMem(ScrnInfoPtr pScrn)
+  {
+     I830Ptr pI830 = I830PTR(pScrn);
+!    unsigned i;
+  
+     for (i = 2; i < pI830->FbMapSize; i <<= 1) ;
+     pI830->FbMapSize = i;
+--- 1019,1025 ----
+  I830MapMem(ScrnInfoPtr pScrn)
+  {
+     I830Ptr pI830 = I830PTR(pScrn);
+!    long i;
+  
+     for (i = 2; i < pI830->FbMapSize; i <<= 1) ;
+     pI830->FbMapSize = i;
+***************
+*** 2898,2904 ****
+     OUTREG(LP_RING + RING_TAIL, 0);
+     OUTREG(LP_RING + RING_HEAD, 0);
+  
+!    if ((pI830->LpRing->mem.Start & I830_RING_START_MASK) !=
+         pI830->LpRing->mem.Start) {
+        xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+                "I830SetRingRegs: Ring buffer start (%lx) violates its "
+--- 2899,2905 ----
+     OUTREG(LP_RING + RING_TAIL, 0);
+     OUTREG(LP_RING + RING_HEAD, 0);
+  
+!    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,3447 ****
+           I830Ptr pI8301 = I830PTR(pI830->entityPrivate->pScrn_1);
+  
+           temp = INREG(stridereg);
+!          if (temp / pI8301->cpp != 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);
+--- 3442,3448 ----
+           I830Ptr pI8301 = I830PTR(pI830->entityPrivate->pScrn_1);
+  
+           temp = INREG(stridereg);
+!          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,3465 ****
+              sizereg = pI830->pipe ? DSPASIZE : DSPBSIZE;
+  
+              temp = INREG(stridereg);
+!             if (temp / pI8302->cpp != 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);
+--- 3460,3466 ----
+              sizereg = pI830->pipe ? DSPASIZE : DSPBSIZE;
+  
+              temp = INREG(stridereg);
+!             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,3484 ****
+           I830Ptr pI8302 = I830PTR(pI830->entityPrivate->pScrn_2);
+  
+           temp = INREG(stridereg);
+!          if (temp / pI8301->cpp != 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);
+--- 3479,3485 ----
+           I830Ptr pI8302 = I830PTR(pI830->entityPrivate->pScrn_2);
+  
+           temp = INREG(stridereg);
+!          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,3500 ****
+           sizereg = !pI830->pipe ? DSPASIZE : DSPBSIZE;
+  
+           temp = INREG(stridereg);
+!          if (temp / pI8302->cpp != 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);
+--- 3495,3501 ----
+           sizereg = !pI830->pipe ? DSPASIZE : DSPBSIZE;
+  
+           temp = INREG(stridereg);
+!          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,3521 ****
+           continue;
+  
+           temp = INREG(stridereg);
+!          if (temp / pI830->cpp != pScrn->displayWidth) {
+           xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+                   "Correcting plane %c stride (%d -> %d)\n", PIPE_NAME(i),
+                   (int)(temp / pI830->cpp), pScrn->displayWidth);
+--- 3516,3522 ----
+           continue;
+  
+           temp = INREG(stridereg);
+!          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,4359 ****
+--- 4355,4363 ----
+        SaveHWOperatingState(pScrn);
+  #endif
+  
++    ResetState(pScrn, TRUE);
++    RestoreHWState(pScrn);
++ 
+     if (IsPrimary(pScrn)) {
+        if (!SetDisplayDevices(pScrn, pI830->savedDevices)) {
+           xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+***************
+*** 4365,4372 ****
+        }
+     }
+  
+-    ResetState(pScrn, TRUE);
+-    RestoreHWState(pScrn);
+     RestoreBIOSMemSize(pScrn);
+     if (IsPrimary(pScrn))
+        I830UnbindGARTMemory(pScrn);
+--- 4369,4374 ----
+***************
+*** 4506,4512 ****
+     ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+     I830Ptr pI830 = I830PTR(pScrn);
+     Bool on = xf86IsUnblank(mode);
+!    CARD32 temp, ctrl, base, i;
+  
+     DPRINTF(PFX, "I830BIOSSaveScreen: %d, on is %s\n", mode, BOOLTOSTRING(on));
+  
+--- 4508,4515 ----
+     ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+     I830Ptr pI830 = I830PTR(pScrn);
+     Bool on = xf86IsUnblank(mode);
+!    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 -c 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,72 ****
+   */
+  static unsigned long
+  AllocFromPool(ScrnInfoPtr pScrn, I830MemRange *result, I830MemPool *pool,
+!            unsigned long size, unsigned long alignment, int flags)
+  {
+     I830Ptr pI830 = I830PTR(pScrn);
+!    unsigned long needed, start, end;
+     Bool dryrun = ((flags & ALLOCATE_DRY_RUN) != 0);
+  
+     if (!result || !pool || !size)
+--- 63,72 ----
+   */
+  static unsigned long
+  AllocFromPool(ScrnInfoPtr pScrn, I830MemRange *result, I830MemPool *pool,
+!            long size, unsigned long alignment, int flags)
+  {
+     I830Ptr pI830 = I830PTR(pScrn);
+!    long needed, start, end;
+     Bool dryrun = ((flags & ALLOCATE_DRY_RUN) != 0);
+  
+     if (!result || !pool || !size)
+***************
+*** 94,100 ****
+        }
+     }
+     if (needed > pool->Free.Size) {
+!       unsigned long extra;
+        /* See if the pool can be grown. */
+        if (pI830->StolenOnly && !dryrun)
+        return 0;
+--- 94,100 ----
+        }
+     }
+     if (needed > pool->Free.Size) {
+!       long extra;
+        /* See if the pool can be grown. */
+        if (pI830->StolenOnly && !dryrun)
+        return 0;
+***************
+*** 107,113 ****
+           return 0;
+        }
+  
+!       if (!dryrun && (extra > pI830->MemoryAperture.Size))
+        return 0;
+  
+        pool->Free.Size += extra;
+--- 107,113 ----
+           return 0;
+        }
+  
+!       if (!dryrun && ((long)extra > pI830->MemoryAperture.Size))
+        return 0;
+  
+        pool->Free.Size += extra;
+***************
+*** 136,142 ****
+  }
+  
+  static unsigned long
+! AllocFromAGP(ScrnInfoPtr pScrn, I830MemRange *result, unsigned long size,
+            unsigned long alignment, int flags)
+  {
+     I830Ptr pI830 = I830PTR(pScrn);
+--- 136,142 ----
+  }
+  
+  static unsigned long
+! AllocFromAGP(ScrnInfoPtr pScrn, I830MemRange *result, long size,
+            unsigned long alignment, int flags)
+  {
+     I830Ptr pI830 = I830PTR(pScrn);
+***************
+*** 212,218 ****
+  
+  unsigned long
+  I830AllocVidMem(ScrnInfoPtr pScrn, I830MemRange *result, I830MemPool *pool,
+!              unsigned long size, unsigned long alignment, int flags)
+  {
+     I830Ptr pI830 = I830PTR(pScrn);
+     Bool dryrun = ((flags & ALLOCATE_DRY_RUN) != 0);
+--- 212,218 ----
+  
+  unsigned long
+  I830AllocVidMem(ScrnInfoPtr pScrn, I830MemRange *result, I830MemPool *pool,
+!              long size, unsigned long alignment, int flags)
+  {
+     I830Ptr pI830 = I830PTR(pScrn);
+     Bool dryrun = ((flags & ALLOCATE_DRY_RUN) != 0);
+***************
+*** 392,398 ****
+  I830Allocate2DMemory(ScrnInfoPtr pScrn, const int flags)
+  {
+     I830Ptr pI830 = I830PTR(pScrn);
+!    unsigned long size, alloced;
+     Bool dryrun = ((flags & ALLOCATE_DRY_RUN) != 0);
+     int verbosity = dryrun ? 4 : 1;
+     const char *s = dryrun ? "[dryrun] " : "";
+--- 392,398 ----
+  I830Allocate2DMemory(ScrnInfoPtr pScrn, const int flags)
+  {
+     I830Ptr pI830 = I830PTR(pScrn);
+!    long size, alloced;
+     Bool dryrun = ((flags & ALLOCATE_DRY_RUN) != 0);
+     int verbosity = dryrun ? 4 : 1;
+     const char *s = dryrun ? "[dryrun] " : "";
+***************
+*** 610,618 ****
+        return FALSE;
+        }
+     } else {
+!       unsigned long lineSize;
+!       unsigned long extra = 0;
+!       unsigned long maxFb = 0;
+  
+        /*
+         * XXX Need to "free" up any 3D allocations if the DRI ended up
+--- 610,618 ----
+        return FALSE;
+        }
+     } else {
+!       long lineSize;
+!       long extra = 0;
+!       long maxFb = 0;
+  
+        /*
+         * XXX Need to "free" up any 3D allocations if the DRI ended up
+***************
+*** 857,863 ****
+  I830GetExcessMemoryAllocations(ScrnInfoPtr pScrn)
+  {
+     I830Ptr pI830 = I830PTR(pScrn);
+!    unsigned long allocated;
+  
+     allocated = pI830->StolenPool.Total.Size + pI830->allocatedMemory;
+     if (allocated > pI830->TotalVideoRam)
+--- 857,863 ----
+  I830GetExcessMemoryAllocations(ScrnInfoPtr pScrn)
+  {
+     I830Ptr pI830 = I830PTR(pScrn);
+!    long allocated;
+  
+     allocated = pI830->StolenPool.Total.Size + pI830->allocatedMemory;
+     if (allocated > pI830->TotalVideoRam)
+***************
+*** 1367,1373 ****
+     I830Ptr pI830 = I830PTR(pScrn);
+     int pitch, ntiles, i;
+     static int nextTile = 0;
+!    static int tileGeneration = -1;
+  
+  #if 0
+     /* Hack to "improve" the alignment of the front buffer.
+--- 1367,1373 ----
+     I830Ptr pI830 = I830PTR(pScrn);
+     int pitch, ntiles, i;
+     static int nextTile = 0;
+!    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 -c 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,638 ****
+     pPriv->gamma0 = 0x080808;
+  
+     /* gotta uninit this someplace */
+!    REGION_INIT(pScreen, &pPriv->clip, NullBox, 0);
+  
+     pI830->adaptor = adapt;
+  
+--- 632,638 ----
+     pPriv->gamma0 = 0x080808;
+  
+     /* gotta uninit this someplace */
+!    REGION_NULL(pScreen, &pPriv->clip);
+  
+     pI830->adaptor = adapt;
+  
+Index: xc/programs/Xserver/hw/xfree86/drivers/nsc/nsc_gx1_video.c
+diff -c 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,284 ****
+     GeodePtr pGeode;
+  
+     ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
+  
+     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) {
+              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);
+     }
+  }
+  
+  /* client libraries expect an encoding */
+--- 240,281 ----
+     GeodePtr pGeode;
+  
+     ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
++     XF86VideoAdaptorPtr *adaptors, *newAdaptors = NULL;
++    XF86VideoAdaptorPtr newAdaptor = NULL;
++    
++    int num_adaptors;
+  
+     pGeode = GEODEPTR(pScreenInfo);
+  
+!    
+!    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);
+  }
+  
+  /* client libraries expect an encoding */
+***************
+*** 413,429 ****
+  void
+  GX1ResetVideo(ScrnInfoPtr pScrn)
+  {
+!    GeodePtr pGeode = GEODEPTR(pScrn);
+  
+!    if (!pGeode->NoAccel) {
+!       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));
+!    }
+  }
+  
+  /*----------------------------------------------------------------------------
+--- 410,424 ----
+  void
+  GX1ResetVideo(ScrnInfoPtr pScrn)
+  {
+!     GeodePtr pGeode = GEODEPTR(pScrn);
+  
+!     GeodePortPrivPtr pPriv = pGeode->adaptor->pPortPrivates[0].ptr;
+  
+!     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,543 ****
+     DEBUGMSG(0, (0, X_NONE, "StopVideo\n"));
+     REGION_EMPTY(pScrn->pScreen, &pPriv->clip);
+  
+!    GX1AccelSync(pScrn);
+     if (exit) {
+        if (pPriv->videoStatus & CLIENT_VIDEO_ON) {
+        GFX(set_video_enable(0));
+--- 532,538 ----
+     DEBUGMSG(0, (0, X_NONE, "StopVideo\n"));
+     REGION_EMPTY(pScrn->pScreen, &pPriv->clip);
+  
+!    if (!pGeode->NoAccel) GX1AccelSync(pScrn);
+     if (exit) {
+        if (pPriv->videoStatus & CLIENT_VIDEO_ON) {
+        GFX(set_video_enable(0));
+***************
+*** 580,587 ****
+                   Atom attribute, INT32 value, pointer data)
+  {
+     GeodePortPrivPtr pPriv = (GeodePortPrivPtr) data;
+  
+!    GX1AccelSync(pScrn);
+     if (attribute == xvColorKey) {
+        pPriv->colorKey = value;
+        GX1SetColorkey(pScrn, pPriv);
+--- 575,583 ----
+                   Atom attribute, INT32 value, pointer data)
+  {
+     GeodePortPrivPtr pPriv = (GeodePortPrivPtr) data;
++    GeodePtr pGeode = GEODEPTR(pScrn);
+  
+!    if (!pGeode->NoAccel) GX1AccelSync(pScrn);
+     if (attribute == xvColorKey) {
+        pPriv->colorKey = value;
+        GX1SetColorkey(pScrn, pPriv);
+***************
+*** 1002,1008 ****
+     GeodePtr pGeode = GEODEPTR(pScrn);
+  
+     /*    DisplayModePtr mode = pScrn->currentMode; */
+!    GX1AccelSync(pScrn);
+  
+     GFX(set_video_enable(1));
+  
+--- 998,1004 ----
+     GeodePtr pGeode = GEODEPTR(pScrn);
+  
+     /*    DisplayModePtr mode = pScrn->currentMode; */
+!    if (!pGeode->NoAccel) GX1AccelSync(pScrn);
+  
+     GFX(set_video_enable(1));
+  
+***************
+*** 1353,1359 ****
+     (*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask);
+     pScreen->BlockHandler = GX1BlockHandler;
+  
+!    GX1AccelSync(pScrn);
+     if (pPriv->videoStatus & TIMER_MASK) {
+        UpdateCurrentTime();
+        if (pPriv->videoStatus & OFF_TIMER) {
+--- 1349,1355 ----
+     (*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask);
+     pScreen->BlockHandler = GX1BlockHandler;
+  
+!    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 -c 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,278 ****
+  void
+  GX2InitVideo(ScreenPtr pScreen)
+  {
+!    GeodePtr pGeode;
+!    ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
+  
+!    pGeode = GEODEPTR(pScreenInfo);
+  
+!    if (!pGeode->NoAccel) {
+!       ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+!       XF86VideoAdaptorPtr *adaptors, *newAdaptors = NULL;
+!       XF86VideoAdaptorPtr newAdaptor = NULL;
+  
+!       int num_adaptors;
+  
+!       newAdaptor = GX2SetupImageVideo(pScreen);
+!       GX2InitOffscreenImages(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) {
+!             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);
+!    }
+  }
+  
+  /* client libraries expect an encoding */
+--- 233,274 ----
+  void
+  GX2InitVideo(ScreenPtr pScreen)
+  {
+!     GeodePtr pGeode;
+!     ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
+!     XF86VideoAdaptorPtr *adaptors, *newAdaptors = NULL;
+!     XF86VideoAdaptorPtr newAdaptor = NULL;
+  
+!     int num_adaptors;
+  
+!     pGeode = GEODEPTR(pScreenInfo);
+  
+!     newAdaptor = GX2SetupImageVideo(pScreen);
+!     GX2InitOffscreenImages(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);
+  }
+  
+  /* client libraries expect an encoding */
+***************
+*** 416,431 ****
+  void
+  GX2ResetVideo(ScrnInfoPtr pScrn)
+  {
+!    GeodePtr pGeode = GEODEPTR(pScrn);
+  
+!    if (!pGeode->NoAccel) {
+!       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));
+!    }
+  }
+  
+  /*----------------------------------------------------------------------------
+--- 412,425 ----
+  void
+  GX2ResetVideo(ScrnInfoPtr pScrn)
+  {
+!     GeodePtr pGeode = GEODEPTR(pScrn);
+  
+!     GeodePortPrivPtr pPriv = pGeode->adaptor->pPortPrivates[0].ptr;
+  
+!     if (!pGeode->NoAccel) GX2AccelSync(pScrn);
+!     GFX(set_video_palette(NULL));
+!     GX2SetColorkey(pScrn, pPriv);
+!     GFX(set_video_filter(pPriv->filter, pPriv->filter));
+  }
+  
+  /*----------------------------------------------------------------------------
+***************
+*** 537,543 ****
+  
+     REGION_EMPTY(pScrn->pScreen, &pPriv->clip);
+  
+!    GX2AccelSync(pScrn);
+     if (exit) {
+        if (pPriv->videoStatus & CLIENT_VIDEO_ON) {
+        GFX(set_video_enable(0));
+--- 531,537 ----
+  
+     REGION_EMPTY(pScrn->pScreen, &pPriv->clip);
+  
+!    if (!pGeode->NoAccel) GX2AccelSync(pScrn);
+     if (exit) {
+        if (pPriv->videoStatus & CLIENT_VIDEO_ON) {
+        GFX(set_video_enable(0));
+***************
+*** 580,587 ****
+                   Atom attribute, INT32 value, pointer data)
+  {
+     GeodePortPrivPtr pPriv = (GeodePortPrivPtr) data;
+  
+!    GX2AccelSync(pScrn);
+     if (attribute == xvColorKey) {
+        pPriv->colorKey = value;
+        GX2SetColorkey(pScrn, pPriv);
+--- 574,582 ----
+                   Atom attribute, INT32 value, pointer data)
+  {
+     GeodePortPrivPtr pPriv = (GeodePortPrivPtr) data;
++    GeodePtr pGeode = GEODEPTR(pScrn);
+  
+!    if (!pGeode->NoAccel) GX2AccelSync(pScrn);
+     if (attribute == xvColorKey) {
+        pPriv->colorKey = value;
+        GX2SetColorkey(pScrn, pPriv);
+***************
+*** 941,947 ****
+  {
+     GeodePtr pGeode = GEODEPTR(pScrn);
+  
+!    GX2AccelSync(pScrn);
+  
+     GFX(set_video_enable(1));
+  
+--- 936,942 ----
+  {
+     GeodePtr pGeode = GEODEPTR(pScrn);
+  
+!    if (!pGeode->NoAccel) GX2AccelSync(pScrn);
+  
+     GFX(set_video_enable(1));
+  
+***************
+*** 1298,1304 ****
+     (*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask);
+     pScreen->BlockHandler = GX2BlockHandler;
+  
+!    GX2AccelSync(pScrn);
+     if (pPriv->videoStatus & TIMER_MASK) {
+        UpdateCurrentTime();
+        if (pPriv->videoStatus & OFF_TIMER) {
+--- 1293,1299 ----
+     (*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask);
+     pScreen->BlockHandler = GX2BlockHandler;
+  
+!    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 -c 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 ****
+! .\" $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv.man,v 1.22 2003/10/18 01:14:26 mvojkovi Exp $ 
+  .\" shorthand for double quote that works everywhere.
+  .ds q \N'34'
+  .TH NV __drivermansuffix__ __vendorversion__
+--- 1,4 ----
+! .\" $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,57 ****
+  NV17, NV18, NV25, NV28
+  .TP 22
+  .B GeForce FX, QUADRO FX
+! NV30, NV31, NV34, NV35, NV36, NV38
+  .SH CONFIGURATION DETAILS
+  Please refer to __xconfigfile__(__filemansuffix__) for general configuration
+  details.  This section only covers configuration details specific to this
+--- 51,57 ----
+  NV17, NV18, NV25, NV28
+  .TP 22
+  .B GeForce FX, QUADRO FX
+! 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,107 ****
+--- 102,112 ----
+  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,120 ****
+--- 123,159 ----
+  .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 -c 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,43 ****
+  |*                                                                           *|
+   \***************************************************************************/
+  
+! /* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_cursor.c,v 1.11 2002/11/26 23:41:58 mvojkovi Exp $ */
+  
+  #include "nv_include.h"
+  
+--- 37,43 ----
+  |*                                                                           *|
+   \***************************************************************************/
+  
+! /* $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,266 ****
+      NVPtr pNv = NVPTR(pScrn);
+      CARD32 *image = pCurs->bits->argb;
+      CARD32 *dst = (CARD32*)pNv->CURSOR;
+      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;
+! 
+         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 
+  #endif
+!     {
+         for(y = 0; y < h; y++) {
+!           for(x = 0; x < w; x++) 
+                *dst++ = *image++;
+            for(; x < 64; x++)
+                *dst++ = 0;
+--- 239,275 ----
+      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((pNv->Chipset & 0x0ff0) == 0x0110) {  /* premultiply */
+         for(y = 0; y < h; y++) {
+            for(x = 0; x < w; x++) {
+!              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++)
+                *dst++ = *image++;
+            for(; x < 64; x++)
+                *dst++ = 0;
+***************
+*** 299,307 ****
+      infoPtr->UseHWCursor = NVUseHWCursor;
+  
+  #ifdef ARGB_CURSOR
+!     if(pNv->alphaCursor &&
+!        (((pNv->Chipset & 0x0ff0) != 0x0110) || !pNv->FPDither))
+!     {
+         infoPtr->UseHWCursorARGB = NVUseHWCursorARGB;
+         infoPtr->LoadCursorARGB = NVLoadCursorARGB;
+      }
+--- 308,314 ----
+      infoPtr->UseHWCursor = NVUseHWCursor;
+  
+  #ifdef ARGB_CURSOR
+!     if(pNv->alphaCursor) {
+         infoPtr->UseHWCursorARGB = NVUseHWCursorARGB;
+         infoPtr->LoadCursorARGB = NVLoadCursorARGB;
+      }
+Index: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_dac.c
+diff -c 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,46 ****
+  |*                                                                           *|
+   \***************************************************************************/
+  
+! /* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_dac.c,v 1.37 2003/09/08 20:00:27 mvojkovi Exp $ */
+  
+  #include "nv_include.h"
+  
+  Bool
+  NVDACInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
+  {
+--- 37,74 ----
+  |*                                                                           *|
+   \***************************************************************************/
+  
+! /* $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,64 ****
+      int vertBlankStart  =  mode->CrtcVDisplay      - 1;
+      int vertBlankEnd    =  mode->CrtcVTotal        - 1;
+     
+- 
+      NVPtr pNv = NVPTR(pScrn);
+      NVRegPtr nvReg = &pNv->ModeReg;
+      NVFBLayout *pLayout = &pNv->CurrentLayout;
+--- 86,91 ----
+***************
+*** 186,191 ****
+--- 213,220 ----
+         {
+             nvReg->scale |= (1 << 8) ;
+         }
++        nvReg->crtcSync = pNv->PRAMDAC[0x0828/4];
++        nvReg->crtcSync += NVDACPanelTweaks(pNv, nvReg);
+      }
+  
+      nvReg->vpll = nvReg->pll;
+***************
+*** 193,198 ****
+--- 222,230 ----
+      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,243 ****
+      if(mode->Flags & V_DBLSCAN)
+         nvReg->cursorConfig |= (1 << 4);
+      if(pNv->alphaCursor) {
+!         nvReg->cursorConfig |= 0x04011000;
+          nvReg->general |= (1 << 29);
+  
+          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[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;
+  
+      return (TRUE);
+  }
+--- 247,275 ----
+      if(mode->Flags & V_DBLSCAN)
+         nvReg->cursorConfig |= (1 << 4);
+      if(pNv->alphaCursor) {
+!         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->dither = pNv->PRAMDAC[0x083C/4] & ~1;
+             if(pNv->FPDither)
+                nvReg->dither |= 1;
+!         } 
+!     }
+  
+      nvReg->timingH = 0;
+      nvReg->timingV = 0;
++     nvReg->displayV = mode->CrtcVDisplay;
+  
+      return (TRUE);
+  }
+***************
+*** 250,257 ****
+      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;
+--- 282,287 ----
+***************
+*** 274,281 ****
+      saveFonts = FALSE;
+  #endif
+  
+-     NVLockUnlock(pNv, 0);
+- 
+      vgaHWSave(pScrn, vgaReg, VGA_SR_CMAP | VGA_SR_MODE | 
+                               (saveFonts? VGA_SR_FONTS : 0));
+      NVUnloadStateExt(pNv, nvReg);
+--- 304,309 ----
+Index: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_dma.h
+diff -c 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,44 ****
+  |*                                                                           *|
+   \***************************************************************************/
+  
+! /* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_dma.h,v 1.1 2003/07/31 20:24:29 mvojkovi Exp $ */
+  
+  #define SURFACE_FORMAT                                              0x00000300
+  #define SURFACE_FORMAT_DEPTH8                                       0x00000001
+--- 38,44 ----
+  |*                                                                           *|
+   \***************************************************************************/
+  
+! /* $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,153 ****
+--- 145,159 ----
+  #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 -c 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 ****
+! /* $XdotOrg: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_driver.c,v 1.5 2004/08/16 09:13:14 ajax Exp $ */
+  /* $XConsortium: nv_driver.c /main/3 1996/10/28 05:13:37 kaleb $ */
+  /*
+   * Copyright 1996-1997  David J. McKay
+--- 1,4 ----
+! /* $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,31 ****
+  /* 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 $ */
+  
+  #include "nv_include.h"
+  
+--- 25,31 ----
+  /* 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.130 2004/12/09 00:21:04 mvojkovi Exp $ */
+  
+  #include "nv_include.h"
+  
+***************
+*** 113,130 ****
+    { 0x10DE0175, "GeForce4 420 Go" },
+    { 0x10DE0176, "GeForce4 420 Go 32M" },
+    { 0x10DE0177, "GeForce4 460 Go" },
+  #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" },
+    { 0x10DE0181, "GeForce4 MX 440 with AGP8X" },
+    { 0x10DE0182, "GeForce4 MX 440SE with AGP8X" },
+    { 0x10DE0183, "GeForce4 MX 420 with AGP8X" },
+    { 0x10DE0186, "GeForce4 448 Go" },
+    { 0x10DE0187, "GeForce4 488 Go" },
+    { 0x10DE0188, "Quadro4 580 XGL" },
+--- 113,131 ----
+    { 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
+    { 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,138 ****
+--- 134,141 ----
+  #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,179 ****
+--- 177,184 ----
+    { 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,195 ****
+    { 0x10DE0329, "0x0329" },
+  #endif
+    { 0x10DE032A, "Quadro NVS 280 PCI" },
+!   { 0x10DE032B, "Quadro FX 500" },
+!   { 0x10DE032C, "GeForce FX Go5300" },
+    { 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" },
+    { 0x10DE0338, "Quadro FX 3000" },
+    { 0x10DE0341, "GeForce FX 5700 Ultra" },
+    { 0x10DE0342, "GeForce FX 5700" },
+--- 186,201 ----
+    { 0x10DE0329, "0x0329" },
+  #endif
+    { 0x10DE032A, "Quadro NVS 280 PCI" },
+!   { 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" },
+!   { 0x10DE033F, "Quadro FX 700" },
+!   { 0x10DE0334, "GeForce FX 5900ZT" },
+    { 0x10DE0338, "Quadro FX 3000" },
+    { 0x10DE0341, "GeForce FX 5700 Ultra" },
+    { 0x10DE0342, "GeForce FX 5700" },
+***************
+*** 203,208 ****
+--- 209,250 ----
+    { 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,356 ****
+      OPTION_VIDEO_KEY,
+      OPTION_FLAT_PANEL,
+      OPTION_FP_DITHER,
+!     OPTION_CRTC_NUMBER
+  } NVOpts;
+  
+  
+--- 392,400 ----
+      OPTION_VIDEO_KEY,
+      OPTION_FLAT_PANEL,
+      OPTION_FP_DITHER,
+!     OPTION_CRTC_NUMBER,
+!     OPTION_FP_SCALE,
+!     OPTION_FP_TWEAK
+  } NVOpts;
+  
+  
+***************
+*** 365,370 ****
+--- 409,416 ----
+      { 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,499 ****
+--- 540,575 ----
+  
+  #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,529 ****
+             ((*ppPci)->vendor == PCI_VENDOR_NVIDIA)) 
+          {
+              SymTabRec *nvchips = NVKnownChipsets;
+!             int token = ((*ppPci)->vendor << 16) | (*ppPci)->chipType;
+  
+              while(nvchips->name) {
+                 if(token == nvchips->token)
+--- 599,609 ----
+             ((*ppPci)->vendor == PCI_VENDOR_NVIDIA)) 
+          {
+              SymTabRec *nvchips = NVKnownChipsets;
+!             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,541 ****
+              }
+  
+              if(nvchips->name) { /* found one */
+!                NVChipsets[numUsed].token = nvchips->token;
+                 NVChipsets[numUsed].name = nvchips->name;
+!                NVPciChipsets[numUsed].numChipset = nvchips->token;
+!                NVPciChipsets[numUsed].PCIid = nvchips->token;
+                 NVPciChipsets[numUsed].resList = RES_SHARED_VGA;
+                 numUsed++;
+              } else if ((*ppPci)->vendor == PCI_VENDOR_NVIDIA) {
+--- 612,621 ----
+              }
+  
+              if(nvchips->name) { /* found one */
+!                NVChipsets[numUsed].token = pciid;
+                 NVChipsets[numUsed].name = nvchips->name;
+!                NVPciChipsets[numUsed].numChipset = pciid; 
+!                NVPciChipsets[numUsed].PCIid = pciid;
+                 NVPciChipsets[numUsed].resList = RES_SHARED_VGA;
+                 numUsed++;
+              } else if ((*ppPci)->vendor == PCI_VENDOR_NVIDIA) {
+***************
+*** 551,560 ****
+                 case 0x0320:
+                 case 0x0330:
+                 case 0x0340:
+!                    NVChipsets[numUsed].token = token;
+                     NVChipsets[numUsed].name = "Unknown NVIDIA chip";
+!                    NVPciChipsets[numUsed].numChipset = token;
+!                    NVPciChipsets[numUsed].PCIid = token;
+                     NVPciChipsets[numUsed].resList = RES_SHARED_VGA;
+                     numUsed++;
+                     break;
+--- 631,649 ----
+                 case 0x0320:
+                 case 0x0330:
+                 case 0x0340:
+!                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 = pciid;
+!                    NVPciChipsets[numUsed].PCIid = pciid;
+                     NVPciChipsets[numUsed].resList = RES_SHARED_VGA;
+                     numUsed++;
+                     break;
+***************
+*** 768,773 ****
+--- 857,873 ----
+  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,897 ****
+--- 987,1002 ----
+      } 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,1031 ****
+--- 1131,1142 ----
+      }
+      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,1120 ****
+--- 1226,1239 ----
+          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,1189 ****
+       return FALSE;
+      }
+  
+!     pNv->alphaCursor = ((pNv->Chipset & 0x0ff0) >= 0x0110);
+! 
+!     pNv->Architecture = (pNv->Chipset & 0x0f00) >> 4;
+  
+!     if(pNv->Architecture < NV_ARCH_10)
+!         pNv->Architecture = NV_ARCH_04;
+  
+      NVCommonSetup(pScrn);
+  
+--- 1297,1342 ----
+       return FALSE;
+      }
+  
+!     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;
+!     }
+  
+!     pNv->alphaCursor = (pNv->Architecture >= NV_ARCH_10) &&
+!                        ((pNv->Chipset & 0x0ff0) != 0x0100);
+  
+      NVCommonSetup(pScrn);
+  
+***************
+*** 1225,1241 ****
+      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->interlaceAllowed = TRUE;
+!     } else {
+!         /* No NV2x chips support interlaced modes and the only
+!            NV1x chips that do are NV10 and NV15 */
+         clockRanges->interlaceAllowed = FALSE;
+      }
+-     clockRanges->doubleScanAllowed = TRUE;
+  
+      if(pNv->FlatPanel == 1) {
+         clockRanges->interlaceAllowed = FALSE;
+--- 1378,1394 ----
+      clockRanges->minClock = pNv->MinVClockFreqKHz;
+      clockRanges->maxClock = pNv->MaxVClockFreqKHz;
+      clockRanges->clockIndex = -1;            /* programmable */
+!     clockRanges->doubleScanAllowed = TRUE;
+!     if((pNv->Architecture == NV_ARCH_20) ||
+!          ((pNv->Architecture == NV_ARCH_10) && 
+!            ((pNv->Chipset & 0x0ff0) != 0x0100) &&
+!            ((pNv->Chipset & 0x0ff0) != 0x0150)))
+      {
+!        /* HW is broken */
+         clockRanges->interlaceAllowed = FALSE;
++     } else {
++        clockRanges->interlaceAllowed = TRUE;
+      }
+  
+      if(pNv->FlatPanel == 1) {
+         clockRanges->interlaceAllowed = FALSE;
+***************
+*** 1488,1509 ****
+      NVPtr pNv = NVPTR(pScrn);
+      NVRegPtr nvReg = &pNv->SavedReg;
+  
+      if(pNv->twoHeads) {
+          VGA_WR08(pNv->PCIO, 0x03D4, 0x44);
+!         VGA_WR08(pNv->PCIO, 0x03D5, nvReg->crtcOwner);
+          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);
+      vgaHWProtect(pScrn, FALSE);
+  }
+  
+  static void NVBacklightEnable(NVPtr pNv,  Bool on)
+  {
+      /* This is done differently on each laptop.  Here we
+         define the ones we know for sure. */
+  
+--- 1641,1668 ----
+      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, pNv->CRTCnumber * 0x3);
+          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,1529 ****
+--- 1683,1694 ----
+        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,1538 ****
+--- 1698,1705 ----
+  
+    if (!pScrn->vtSema) return;
+  
++   vgaHWDPMSSet(pScrn, PowerManagementMode, flags);
++ 
+    switch (PowerManagementMode) {
+    case DPMSModeStandby:  /* HSync: Off, VSync: On */
+    case DPMSModeSuspend:  /* HSync: On, VSync: Off */
+***************
+*** 1544,1550 ****
+    default:
+      break;
+    }
+-   vgaHWDPMSSet(pScrn, PowerManagementMode, flags);
+  }
+  
+  
+--- 1711,1716 ----
+***************
+*** 1646,1652 ****
+       * 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
+       * are not appropriate.  In this driver, we fixup the visuals after.
+       */
+  
+--- 1812,1818 ----
+       * 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 fb uses
+       * are not appropriate.  In this driver, we fixup the visuals after.
+       */
+  
+***************
+*** 1830,1835 ****
+--- 1996,2008 ----
+      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 -c 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,42 ****
+  |*     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 $ */
+  
+  #include "nv_local.h"
+  #include "compiler.h"
+--- 36,42 ----
+  |*     those rights set forth herein.                                        *|
+  |*                                                                           *|
+   \***************************************************************************/
+! /* $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,76 ****
+--- 71,82 ----
+                                   (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,137 ****
+--- 138,163 ----
+  {
+      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,207 ****
+--- 228,237 ----
+         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,529 ****
+          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;
+--- 539,544 ----
+***************
+*** 622,627 ****
+--- 637,664 ----
+      }
+  }
+  
++ 
++ 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,643 ****
+  {
+      nv10_fifo_info fifo_data;
+      nv10_sim_state sim_data;
+!     unsigned int M, N, P, pll, MClk, NVClk;
+!     unsigned int uMClkPostDiv, memctrl;
+  
+!     uMClkPostDiv = (pciReadLong(pciTag(0, 0, 3), 0x6C) >> 8) & 0xf;
+!     if(!uMClkPostDiv) uMClkPostDiv = 4; 
+!     MClk = 400000 / uMClkPostDiv;
+  
+      pll = pNv->PRAMDAC0[0x0500/4];
+      M = (pll >> 0)  & 0xFF; N = (pll >> 8)  & 0xFF; P = (pll >> 16) & 0x0F;
+--- 669,685 ----
+  {
+      nv10_fifo_info fifo_data;
+      nv10_sim_state sim_data;
+!     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;
+!     } 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,848 ****
+                                           &(state->arbitration0),
+                                           &(state->arbitration1),
+                                            pNv);
+!             } else {
+                  nv10UpdateArbitrationSettings(VClk, 
+                                            pixelDepth * 8, 
+                                           &(state->arbitration0),
+                                           &(state->arbitration1),
+                                            pNv);
+              }
+              state->cursor0  = 0x80 | (pNv->CursorStart >> 17);
+              state->cursor1  = (pNv->CursorStart >> 11) << 2;
+--- 879,894 ----
+                                           &(state->arbitration0),
+                                           &(state->arbitration1),
+                                            pNv);
+!             } 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,979 ****
+          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 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) {
+--- 947,1113 ----
+          pNv->PFB[0x02B4/4] = pNv->FbMapSize - 1;
+      }
+  
+!     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[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;
+  
+! #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,990 ****
+--- 1119,1125 ----
+         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,998 ****
+--- 1128,1134 ----
+         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,1007 ****
+--- 1138,1145 ----
+         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,1024 ****
+             pNv->PGRAPH[0x688/4] = pNv->FbMapSize - 1;
+  
+             pNv->PGRAPH[0x0810/4] = 0x00000000;
+         } else {
+!            if(pNv->Architecture >= NV_ARCH_30) {
+                pNv->PGRAPH[0x0084/4] = 0x40108700;
+                pNv->PGRAPH[0x0890/4] = 0x00140000;
+                pNv->PGRAPH[0x008C/4] = 0xf00e0431;
+--- 1155,1209 ----
+             pNv->PGRAPH[0x688/4] = pNv->FbMapSize - 1;
+  
+             pNv->PGRAPH[0x0810/4] = 0x00000000;
++            pNv->PGRAPH[0x0608/4] = 0xFFFFFFFF;
+         } else {
+!            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,1073 ****
+             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;
+  
+             pNv->PGRAPH[0x0B20/4] = 0x00000000;
+         }
+      }
+      pNv->PGRAPH[0x053C/4] = 0;
+--- 1240,1283 ----
+             for(i = 0; i < 32; i++)
+               pNv->PGRAPH[(0x0900/4) + i] = pNv->PFB[(0x0240/4) + i];
+  
+!            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,1088 ****
+      pNv->PFIFO[0x0141] = 0x00000001;
+      pNv->PFIFO[0x0480] = 0x00000000;
+      pNv->PFIFO[0x0494] = 0x00000000;
+!     pNv->PFIFO[0x0481] = 0x00000100;
+      pNv->PFIFO[0x0490] = 0x00000000;
+      pNv->PFIFO[0x0491] = 0x00000000;
+!     pNv->PFIFO[0x048B] = 0x00001209;
+      pNv->PFIFO[0x0400] = 0x00000000;
+      pNv->PFIFO[0x0414] = 0x00000000;
+      pNv->PFIFO[0x0084] = 0x03000100;
+--- 1289,1304 ----
+      pNv->PFIFO[0x0141] = 0x00000001;
+      pNv->PFIFO[0x0480] = 0x00000000;
+      pNv->PFIFO[0x0494] = 0x00000000;
+!     if(pNv->Architecture >= NV_ARCH_40)
+!        pNv->PFIFO[0x0481] = 0x00010000;
+!     else
+!        pNv->PFIFO[0x0481] = 0x00000100;
+      pNv->PFIFO[0x0490] = 0x00000000;
+      pNv->PFIFO[0x0491] = 0x00000000;
+!     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,1133 ****
+          pNv->PMC[0x1588/4] = 0;
+  
+          pNv->PCRTC[0x0810/4] = state->cursorConfig;
+      
+          if(pNv->FlatPanel) {
+             if((pNv->Chipset & 0x0ff0) == 0x0110) {
+                 pNv->PRAMDAC[0x0528/4] = state->dither;
+             } else 
+!            if((pNv->Chipset & 0x0ff0) >= 0x0170) {
+                 pNv->PRAMDAC[0x083C/4] = state->dither;
+             }
+      
+--- 1338,1351 ----
+          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->twoHeads) {
+                 pNv->PRAMDAC[0x083C/4] = state->dither;
+             }
+      
+***************
+*** 1153,1162 ****
+--- 1371,1386 ----
+      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,1182 ****
+--- 1401,1407 ----
+         }
+      } else {
+         pNv->PRAMDAC[0x0848/4] = state->scale;
++        pNv->PRAMDAC[0x0828/4] = state->crtcSync;
+      }
+      pNv->PRAMDAC[0x0600/4] = state->general;
+  
+***************
+*** 1202,1211 ****
+--- 1427,1442 ----
+      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,1246 ****
+          if((pNv->Chipset & 0x0ff0) == 0x0110) {
+             state->dither = pNv->PRAMDAC[0x0528/4];
+          } else 
+!         if((pNv->Chipset & 0x0ff0) >= 0x0170) {
+              state->dither = pNv->PRAMDAC[0x083C/4];
+          }
+  
+--- 1471,1477 ----
+          if((pNv->Chipset & 0x0ff0) == 0x0110) {
+             state->dither = pNv->PRAMDAC[0x0528/4];
+          } else 
+!         if(pNv->twoHeads) {
+              state->dither = pNv->PRAMDAC[0x083C/4];
+          }
+  
+***************
+*** 1251,1256 ****
+--- 1482,1491 ----
+             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 -c 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 ****
+! /* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_proto.h,v 1.9 2003/05/04 01:20:52 mvojkovi Exp $ */
+  
+  #ifndef __NV_PROTO_H__
+  #define __NV_PROTO_H__
+--- 1,4 ----
+! /* $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,42 ****
+--- 37,43 ----
+  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 -c 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,43 ****
+  |*                                                                           *|
+   \***************************************************************************/
+  
+! /* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_setup.c,v 1.39 2003/11/07 23:56:28 mvojkovi Exp $ */
+  
+  #include "nv_include.h"
+  
+--- 37,43 ----
+  |*                                                                           *|
+   \***************************************************************************/
+  
+! /* $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,301 ****
+      }
+  #endif
+  
+!     if((pNv->Chipset & 0xffff) == 0x01a0) {
+          int amt = pciReadLong(pciTag(0, 0, 1), 0x7C);
+          pNv->RamAmountKBytes = (((amt >> 6) & 31) + 1) * 1024;
+!     } else if((pNv->Chipset & 0xffff) == 0x01f0) {
+          int amt = pciReadLong(pciTag(0, 0, 1), 0x84);
+          pNv->RamAmountKBytes = (((amt >> 4) & 127) + 1) * 1024;
+      } else {
+--- 292,301 ----
+      }
+  #endif
+  
+!     if(implementation == 0x01a0) {
+          int amt = pciReadLong(pciTag(0, 0, 1), 0x7C);
+          pNv->RamAmountKBytes = (((amt >> 6) & 31) + 1) * 1024;
+!     } else if(implementation == 0x01f0) {
+          int amt = pciReadLong(pciTag(0, 0, 1), 0x84);
+          pNv->RamAmountKBytes = (((amt >> 4) & 127) + 1) * 1024;
+      } else {
+***************
+*** 304,313 ****
+  
+      pNv->CrystalFreqKHz = (pNv->PEXTDEV[0x0000/4] & (1 << 6)) ? 14318 : 13500;
+      
+!     if((implementation == 0x0170) ||
+!        (implementation == 0x0180) ||
+!        (implementation == 0x01F0) ||
+!        (implementation >= 0x0250))
+      {
+         if(pNv->PEXTDEV[0x0000/4] & (1 << 22))
+             pNv->CrystalFreqKHz = 27000;
+--- 304,310 ----
+  
+      pNv->CrystalFreqKHz = (pNv->PEXTDEV[0x0000/4] & (1 << 6)) ? 14318 : 13500;
+      
+!     if(pNv->twoHeads && (implementation != 0x0110))
+      {
+         if(pNv->PEXTDEV[0x0000/4] & (1 << 22))
+             pNv->CrystalFreqKHz = 27000;
+***************
+*** 381,395 ****
+      pNv->PDIO0    = (U008*)pNv->REGS + 0x00681000;
+      pNv->PVIO     = (U008*)pNv->REGS + 0x000C0000;
+  
+!     pNv->twoHeads =  (implementation >= 0x0110) &&
+                       (implementation != 0x0150) &&
+                       (implementation != 0x01A0) &&
+                       (implementation != 0x0200);
+  
+!     pNv->fpScaler = (pNv->twoHeads && (implementation != 0x0110));
+  
+      pNv->twoStagePLL = (implementation == 0x0310) ||
+!                        (implementation == 0x0340);
+  
+      /* look for known laptop chips */
+      switch(pNv->Chipset & 0xffff) {
+--- 378,399 ----
+      pNv->PDIO0    = (U008*)pNv->REGS + 0x00681000;
+      pNv->PVIO     = (U008*)pNv->REGS + 0x000C0000;
+  
+!     pNv->twoHeads =  (pNv->Architecture >= NV_ARCH_10) &&
+!                      (implementation != 0x0100) &&
+                       (implementation != 0x0150) &&
+                       (implementation != 0x01A0) &&
+                       (implementation != 0x0200);
+  
+!     pNv->fpScaler = (pNv->FpScale && pNv->twoHeads && (implementation!=0x0110));
+  
+      pNv->twoStagePLL = (implementation == 0x0310) ||
+!                        (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,409 ****
+      case 0x017D:
+      case 0x0186:
+      case 0x0187:
+!     case 0x0189:
+      case 0x0286:
+      case 0x028C:
+      case 0x0316:
+--- 407,413 ----
+      case 0x017D:
+      case 0x0186:
+      case 0x0187:
+!     case 0x018D:
+      case 0x0286:
+      case 0x028C:
+      case 0x0316:
+***************
+*** 425,430 ****
+--- 429,441 ----
+      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,664 ****
+--- 670,676 ----
+      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,672 ****
+      if(monitorA)
+        xf86SetDDCproperties(pScrn, monitorA);
+  
+!     if(!pNv->FlatPanel || (pScrn->depth != 24))
+          pNv->FPDither = FALSE;
+  }
+  
+--- 678,684 ----
+      if(monitorA)
+        xf86SetDDCproperties(pScrn, monitorA);
+  
+!     if(!pNv->FlatPanel || (pScrn->depth != 24) || !pNv->twoHeads)
+          pNv->FPDither = FALSE;
+  }
+  
+Index: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_type.h
+diff -c 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 ****
+! /* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_type.h,v 1.44 2003/09/08 20:00:27 mvojkovi Exp $ */
+  
+  #ifndef __NV_STRUCT_H__
+  #define __NV_STRUCT_H__
+--- 1,4 ----
+! /* $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,18 ****
+--- 13,19 ----
+  #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,48 ****
+--- 44,50 ----
+      U032 scale;
+      U032 dither;
+      U032 extra;
++     U032 fifo;
+      U032 pixel;
+      U032 horiz;
+      U032 arbitration0;
+***************
+*** 65,70 ****
+--- 67,74 ----
+      U032 cursor2;
+      U032 timingH;
+      U032 timingV;
++     U032 displayV;
++     U032 crtcSync;
+  } RIVA_HW_STATE, *NVRegPtr;
+  
+  
+***************
+*** 90,95 ****
+--- 94,100 ----
+      CARD32              ScratchBufferStart;
+      Bool                NoAccel;
+      Bool                HWCursor;
++     Bool                FpScale;
+      Bool                ShadowFB;
+      unsigned char *     ShadowPtr;
+      int                 ShadowPitch;
+***************
+*** 153,158 ****
+--- 158,166 ----
+      Bool                fpScaler;
+      int                 fpWidth;
+      int                 fpHeight;
++     CARD32              fpSyncs;
++     Bool                usePanelTweak;
++     int                 PanelTweak;
+  
+      CARD32              dmaPut;
+      CARD32              dmaCurrent;
+***************
+*** 161,166 ****
+--- 169,176 ----
+      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 -c 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 ****
+! /* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_video.c,v 1.20tsi Exp $ */
+  
+  #include "xf86.h"
+  #include "xf86_OSproc.h"
+--- 1,4 ----
+! /* $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,51 ****
+--- 46,52 ----
+     Bool              grabbedByV4L;
+     Bool         iturbt_709;
+     Bool         blitter;
++    Bool         SyncToVBlank;
+     FBLinearPtr  linear;
+     int pitch;
+     int offset;
+***************
+*** 95,101 ****
+  
+  static Atom xvBrightness, xvContrast, xvColorKey, xvSaturation, 
+              xvHue, xvAutopaintColorKey, xvSetDefaults, xvDoubleBuffer,
+!             xvITURBT709;
+  
+  /* client libraries expect an encoding */
+  static XF86VideoEncodingRec DummyEncoding =
+--- 96,102 ----
+  
+  static Atom xvBrightness, xvContrast, xvColorKey, xvSaturation, 
+              xvHue, xvAutopaintColorKey, xvSetDefaults, xvDoubleBuffer,
+!             xvITURBT709, xvSyncToVBlank;
+  
+  /* client libraries expect an encoding */
+  static XF86VideoEncodingRec DummyEncoding =
+***************
+*** 114,122 ****
+     {15, DirectColor}, {16, DirectColor}, {24, DirectColor}
+  };
+  
+! #define NUM_ATTRIBUTES 9
+! 
+! XF86AttributeRec NVAttributes[NUM_ATTRIBUTES] =
+  {
+     {XvSettable | XvGettable, 0, 1, "XV_DOUBLE_BUFFER"},
+     {XvSettable | XvGettable, 0, (1 << 24) - 1, "XV_COLORKEY"},
+--- 115,122 ----
+     {15, DirectColor}, {16, DirectColor}, {24, DirectColor}
+  };
+  
+! #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,134 ****
+--- 129,142 ----
+     {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,291 ****
+      NVPtr            pNv   = NVPTR(pScrn);
+      int              num_adaptors;
+  
+!     if((pScrn->bitsPerPixel != 8) && (pNv->Architecture >= NV_ARCH_10)) {
+       overlayAdaptor = NVSetupOverlayVideo(pScreen);
+    
+       if(overlayAdaptor)
+--- 293,302 ----
+      NVPtr            pNv   = NVPTR(pScrn);
+      int              num_adaptors;
+  
+!     if((pScrn->bitsPerPixel != 8) && (pNv->Architecture >= NV_ARCH_10) &&
+!          ((pNv->Architecture <= NV_ARCH_30) || 
+!             ((pNv->Chipset & 0xfff0) == 0x0040)))
+!     {
+       overlayAdaptor = NVSetupOverlayVideo(pScreen);
+    
+       if(overlayAdaptor)
+***************
+*** 358,365 ****
+      for(i = 0; i < NUM_BLIT_PORTS; i++)
+         adapt->pPortPrivates[i].ptr = (pointer)(pPriv);
+  
+!     adapt->pAttributes          = NULL;
+!     adapt->nAttributes          = 0;
+      adapt->pImages              = NVImages;
+      adapt->nImages              = NUM_IMAGES_ALL;
+      adapt->PutVideo             = NULL;
+--- 369,381 ----
+      for(i = 0; i < NUM_BLIT_PORTS; i++)
+         adapt->pPortPrivates[i].ptr = (pointer)(pPriv);
+  
+!     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,385 ****
+--- 393,404 ----
+      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,416 ****
+      adapt->pPortPrivates        = (DevUnion*)(&adapt[1]);
+      pPriv                       = (NVPortPrivPtr)(&adapt->pPortPrivates[1]);
+      adapt->pPortPrivates[0].ptr = (pointer)(pPriv);
+!     adapt->pAttributes          = NVAttributes;
+!     adapt->nAttributes          = NUM_ATTRIBUTES;
+      adapt->pImages              = NVImages;
+      adapt->nImages              = NUM_IMAGES_YUV;
+      adapt->PutVideo             = NULL;
+--- 428,435 ----
+      adapt->pPortPrivates        = (DevUnion*)(&adapt[1]);
+      pPriv                       = (NVPortPrivPtr)(&adapt->pPortPrivates[1]);
+      adapt->pPortPrivates[0].ptr = (pointer)(pPriv);
+!     adapt->pAttributes          = NVOverlayAttributes;
+!     adapt->nAttributes          = NUM_OVERLAY_ATTRIBUTES;
+      adapt->pImages              = NVImages;
+      adapt->nImages              = NUM_IMAGES_YUV;
+      adapt->PutVideo             = NULL;
+***************
+*** 571,578 ****
+          NVDmaNext (pNv, SURFACE_FORMAT_DEPTH15);
+      }
+  
+!     NVDmaStart(pNv, STRETCH_BLIT_FORMAT, 1);
+!     NVDmaNext (pNv, format);
+  
+      while(nbox--) {
+         NVDmaStart(pNv, RECT_SOLID_COLOR, 1);
+--- 590,608 ----
+          NVDmaNext (pNv, SURFACE_FORMAT_DEPTH15);
+      }
+  
+!     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,763 ****
+      pointer     data
+  )
+  {
+!     return BadMatch;
+  }
+  
+  static int NVGetBlitPortAttribute
+--- 787,806 ----
+      pointer     data
+  )
+  {
+!     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,774 ****
+      pointer      data
+  )
+  {
+!     return BadMatch;
+  }
+  
+  
+--- 811,824 ----
+      pointer      data
+  )
+  {
+!     NVPortPrivPtr pPriv = (NVPortPrivPtr)data;
+! 
+!     if(attribute == xvSyncToVBlank)
+!        *value = (pPriv->SyncToVBlank) ? 1 : 0;
+!     else
+!        return BadMatch;
+! 
+!     return Success;
+  }
+  
+  
+***************
+*** 1434,1441 ****
+     NVGetSurfaceAttribute,
+     NVSetSurfaceAttribute,
+     2046, 2046,
+!    NUM_ATTRIBUTES - 1,
+!    &NVAttributes[1]
+    },
+   {
+     &NVImages[2],
+--- 1484,1491 ----
+     NVGetSurfaceAttribute,
+     NVSetSurfaceAttribute,
+     2046, 2046,
+!    NUM_OVERLAY_ATTRIBUTES - 1,
+!    &NVOverlayAttributes[1]
+    },
+   {
+     &NVImages[2],
+***************
+*** 1447,1454 ****
+     NVGetSurfaceAttribute,
+     NVSetSurfaceAttribute,
+     2046, 2046,
+!    NUM_ATTRIBUTES - 1,
+!    &NVAttributes[1]
+    },
+  };
+  
+--- 1497,1504 ----
+     NVGetSurfaceAttribute,
+     NVSetSurfaceAttribute,
+     2046, 2046,
+!    NUM_OVERLAY_ATTRIBUTES - 1,
+!    &NVOverlayAttributes[1]
+    },
+  };
+  
+Index: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_xaa.c
+diff -c 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,43 ****
+  |*                                                                           *|
+   \***************************************************************************/
+  
+! /* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_xaa.c,v 1.33 2003/09/21 00:17:34 mvojkovi Exp $ */
+  
+  #include "nv_include.h"
+  #include "xaalocal.h"
+--- 37,43 ----
+  |*                                                                           *|
+   \***************************************************************************/
+  
+! /* $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,156 ****
+--- 151,169 ----
+      }
+  }
+  
++ 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 -c 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 ****
+  /* $XFree86$ */
+! /* $XdotOrg: xc/programs/Xserver/hw/xfree86/drivers/sis/init301.c,v 1.13 2004/08/20 18:57:06 kem Exp $ */
+  /*
+   * Mode initializing code (CRT2 section)
+   * for SiS 300/305/540/630/730 and
+--- 1,5 ----
+  /* $XFree86$ */
+! /* $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,3509 ****
+          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_HT        = ROMAddr[romptr+5] | ((ROMAddr[romptr+6] & 0x0f) << 8);
+!            SiS_Pr->SiS_VT        = ROMAddr[romptr+7] | ((ROMAddr[romptr+6] & 0xf0) << 4);
+          if(SiS_Pr->SiS_VGAHT) gotit = TRUE;
+          else {
+             SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
+--- 3501,3509 ----
+          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] << 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] << 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 -c 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 ****
+  /* $XFree86$ */
+! /* $XdotOrg: xc/programs/Xserver/hw/xfree86/drivers/sis/sis.h,v 1.18 2004/08/20 18:57:06 kem Exp $ */
+  /*
+   * Main global data and definitions
+   *
+--- 1,5 ----
+  /* $XFree86$ */
+! /* $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,478 ****
+  
+  /* 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__))
+  #define SIS_USE_BIOS_SCRATCH
+  #endif
+  
+--- 472,478 ----
+  
+  /* 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__) || defined(__amd64__))
+  #define SIS_USE_BIOS_SCRATCH
+  #endif
+  
+Index: xc/programs/Xserver/hw/xfree86/input/keyboard/kbd.c
+diff -c 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 ****
+! /* $XdotOrg: xc/programs/Xserver/hw/xfree86/input/keyboard/kbd.c,v 1.6 2004/08/31 01:36:13 kem Exp $ */
+  /* $XFree86: xc/programs/Xserver/hw/xfree86/input/keyboard/kbd.c,v 1.8 2003/11/03 05:11:47 tsi Exp $ */
+  
+  /*
+--- 1,4 ----
+! /* $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,18 ****
+   * 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 $ */
+    
+  #define NEED_EVENTS
+  #include "X.h"
+--- 12,18 ----
+   * 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.2.1 2004/12/16 03:38:45 gisburn Exp $ */
+    
+  #define NEED_EVENTS
+  #include "X.h"
+***************
+*** 135,141 ****
+      "Protocol",              "standard",
+      "AutoRepeat",    "500 30",
+      "XkbRules",              __XKBDEFRULES__,
+!     "XkbModel",              "pc101",
+      "XkbLayout",     "us",
+      "Panix106",              "off",
+      "CustomKeycodes",        "off",
+--- 135,141 ----
+      "Protocol",              "standard",
+      "AutoRepeat",    "500 30",
+      "XkbRules",              __XKBDEFRULES__,
+!     "XkbModel",              "pc105",
+      "XkbLayout",     "us",
+      "Panix106",              "off",
+      "CustomKeycodes",        "off",
+***************
+*** 372,377 ****
+--- 372,378 ----
+    }
+  #endif
+    pKbd->SetLeds(pInfo, pKbd->leds);
++   pKbd->autoRepeat = ctrl->autoRepeat;
+  
+    return (Success);
+  }
+***************
+*** 720,733 ****
+    /*
+     * check for an autorepeat-event
+     */
+!   if (down) {
+        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 (UsePrefix) {
+--- 721,734 ----
+    /*
+     * check for an autorepeat-event
+     */
+!   if (down && KeyPressed(keycode)) {
+        int num = keycode >> 3;
+        int bit = 1 << (keycode & 7);
+! 
+!       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 -c 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 ****
+! /* $XdotOrg: xc/programs/Xserver/hw/xfree86/loader/dixsym.c,v 1.5 2004/08/19 04:08:40 kem Exp $ */
+  /* $XFree86: xc/programs/Xserver/hw/xfree86/loader/dixsym.c,v 1.63 2003/12/03
+   * 17:11:29 tsi Exp $ */
+  
+--- 1,4 ----
+! /* $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,339 ****
+--- 325,446 ----
+      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,392 ****
+      /* xkb/xkbInit.c */
+      SYMFUNC(XkbInitKeyboardDeviceStruct)
+      SYMFUNC(XkbSetRulesDflts)
+-     SYMVAR(noXkbExtension)
+  #endif
+  
+  #ifdef XINPUT
+--- 493,498 ----
+Index: xc/programs/Xserver/hw/xfree86/loader/elfloader.c
+diff -c 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 ****
+! /* $XdotOrg: xc/programs/Xserver/hw/xfree86/loader/elfloader.c,v 1.2 2004/04/23 19:54:06 eich Exp $ */
+  /* $XFree86: xc/programs/Xserver/hw/xfree86/loader/elfloader.c,v 1.61tsi Exp $ */
+  
+  /*
+--- 1,4 ----
+! /* $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,928 ****
+           ErrorF("ELFCreateGOT() Unable to reallocate memory!!!!\n");
+           return FALSE;
+       }
+! #   if defined(linux) || defined(__OpenBSD__)
+       {
+           unsigned long page_size = getpagesize();
+           unsigned long round;
+--- 922,928 ----
+           ErrorF("ELFCreateGOT() Unable to reallocate memory!!!!\n");
+           return FALSE;
+       }
+! #   if defined(linux) || defined(__OpenBSD__) || defined(sun)
+       {
+           unsigned long page_size = getpagesize();
+           unsigned long round;
+***************
+*** 1097,1103 ****
+       ErrorF("ELFCreatePLT() Unable to allocate memory!!!!\n");
+       return;
+      }
+! #   if defined(linux) || defined(__OpenBSD__)
+      {
+       unsigned long page_size = getpagesize();
+       unsigned long round;
+--- 1097,1103 ----
+       ErrorF("ELFCreatePLT() Unable to allocate memory!!!!\n");
+       return;
+      }
+! #   if defined(linux) || defined(__OpenBSD__) || defined(sun)
+      {
+       unsigned long page_size = getpagesize();
+       unsigned long round;
+***************
+*** 2775,2781 ****
+       elffile->lsection[j].size = SecSize(i);
+       elffile->lsection[j].flags = flags;
+       switch (SecType(i)) {
+! #if defined(linux) || defined(__OpenBSD__)
+       case SHT_PROGBITS:
+           {
+               unsigned long page_size = getpagesize();
+--- 2775,2781 ----
+       elffile->lsection[j].size = SecSize(i);
+       elffile->lsection[j].flags = flags;
+       switch (SecType(i)) {
+! #if defined(linux) || defined(__OpenBSD__) || defined(sun)
+       case SHT_PROGBITS:
+           {
+               unsigned long page_size = getpagesize();
+***************
+*** 2979,2985 ****
+       ErrorF("Unable to allocate ELF sections\n");
+       return NULL;
+      }
+! #  if defined(linux) || defined(__OpenBSD__)
+      {
+       unsigned long page_size = getpagesize();
+       unsigned long round;
+--- 2979,2985 ----
+       ErrorF("Unable to allocate ELF sections\n");
+       return NULL;
+      }
+! #  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 -c 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 ****
+! /* $XdotOrg: xc/programs/Xserver/hw/xfree86/loader/extsym.c,v 1.4 2004/08/09 03:40:50 krh Exp $ */
+  /* $XFree86: xc/programs/Xserver/hw/xfree86/loader/extsym.c,v 1.9 2003/10/15 16:29:03 dawes Exp $ */
+  
+  /*
+--- 1,4 ----
+! /* $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,72 ****
+  #ifdef PANORAMIX
+      SYMFUNC(XineramaRegisterConnectionBlockCallback)
+      SYMFUNC(XineramaDeleteResource)
+-     SYMVAR(noPanoramiXExtension)
+      SYMVAR(PanoramiXNumScreens)
+      SYMVAR(panoramiXdataPtr)
+      SYMVAR(PanoramiXVisualTable)
+--- 66,71 ----
+Index: xc/programs/Xserver/hw/xfree86/os-support/bsd/bsd_KbdMap.c
+diff -c 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,687 ****
+  };
+  
+  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 */
+       /* 0x05 */ KEY_F1,
+       /* 0x06 */ KEY_F2,
+       /* 0x07 */ KEY_F10,
+--- 677,687 ----
+  };
+  
+  static CARD8 wsSunMap[] = {
+!      /* 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,709 ****
+       /* 0x14 */ KEY_Up,
+       /* 0x15 */ KEY_Pause,
+       /* 0x16 */ KEY_Print,
+!      /* 0x17 */ KEY_NOTUSED,         /* props */
+       /* 0x18 */ KEY_Left,
+!      /* 0x19 */ KEY_ScrollLock,
+!      /* 0x1a */ KEY_NOTUSED,         /* undo */
+       /* 0x1b */ KEY_Down,
+       /* 0x1c */ KEY_Right,
+       /* 0x1d */ KEY_Escape,
+--- 700,709 ----
+       /* 0x14 */ KEY_Up,
+       /* 0x15 */ KEY_Pause,
+       /* 0x16 */ KEY_Print,
+!      /* 0x17 */ KEY_ScrollLock,
+       /* 0x18 */ KEY_Left,
+!      /* 0x19 */ KEY_L3,              /* props */
+!      /* 0x1a */ KEY_L4,              /* undo */
+       /* 0x1b */ KEY_Down,
+       /* 0x1c */ KEY_Right,
+       /* 0x1d */ KEY_Escape,
+***************
+*** 722,734 ****
+       /* 0x2a */ KEY_Tilde,
+       /* 0x2b */ KEY_BackSpace,
+       /* 0x2c */ KEY_Insert,
+!      /* 0x2d */ KEY_KP_Equal,
+       /* 0x2e */ KEY_KP_Divide,
+       /* 0x2f */ KEY_KP_Multiply,
+       /* 0x30 */ KEY_NOTUSED,
+!      /* 0x31 */ KEY_NOTUSED,         /* front */
+       /* 0x32 */ KEY_KP_Decimal,
+!      /* 0x33 */ KEY_NOTUSED,         /* copy */
+       /* 0x34 */ KEY_Home,
+       /* 0x35 */ KEY_Tab,
+       /* 0x36 */ KEY_Q,
+--- 722,734 ----
+       /* 0x2a */ KEY_Tilde,
+       /* 0x2b */ KEY_BackSpace,
+       /* 0x2c */ KEY_Insert,
+!      /* 0x2d */ KEY_Mute,            /* Audio Mute */
+       /* 0x2e */ KEY_KP_Divide,
+       /* 0x2f */ KEY_KP_Multiply,
+       /* 0x30 */ KEY_NOTUSED,
+!      /* 0x31 */ KEY_L5,              /* front */
+       /* 0x32 */ KEY_KP_Decimal,
+!      /* 0x33 */ KEY_L6,              /* copy */
+       /* 0x34 */ KEY_Home,
+       /* 0x35 */ KEY_Tab,
+       /* 0x36 */ KEY_Q,
+***************
+*** 744,756 ****
+       /* 0x40 */ KEY_LBrace,
+       /* 0x41 */ KEY_RBrace,
+       /* 0x42 */ KEY_Delete,
+!      /* 0x43 */ KEY_NOTUSED,         /* 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 */
+       /* 0x4a */ KEY_End,
+       /* 0x4b */ KEY_NOTUSED,
+       /* 0x4c */ KEY_LCtrl,
+--- 744,756 ----
+       /* 0x40 */ KEY_LBrace,
+       /* 0x41 */ KEY_RBrace,
+       /* 0x42 */ KEY_Delete,
+!      /* 0x43 */ KEY_Menu,            /* compose */
+       /* 0x44 */ KEY_KP_7,
+       /* 0x45 */ KEY_KP_8,
+       /* 0x46 */ KEY_KP_9,
+       /* 0x47 */ KEY_KP_Minus,
+!      /* 0x48 */ KEY_L7,              /* open */
+!      /* 0x49 */ KEY_L8,              /* paste */
+       /* 0x4a */ KEY_End,
+       /* 0x4b */ KEY_NOTUSED,
+       /* 0x4c */ KEY_LCtrl,
+***************
+*** 772,780 ****
+       /* 0x5c */ KEY_KP_5,
+       /* 0x5d */ KEY_KP_6,
+       /* 0x5e */ KEY_KP_0,
+!      /* 0x5f */ KEY_NOTUSED,         /* find */
+       /* 0x60 */ KEY_PgUp,
+!      /* 0x61 */ KEY_NOTUSED,         /* cut */
+       /* 0x62 */ KEY_NumLock,
+       /* 0x63 */ KEY_ShiftL,
+       /* 0x64 */ KEY_Z,
+--- 772,780 ----
+       /* 0x5c */ KEY_KP_5,
+       /* 0x5d */ KEY_KP_6,
+       /* 0x5e */ KEY_KP_0,
+!      /* 0x5f */ KEY_L9,              /* find */
+       /* 0x60 */ KEY_PgUp,
+!      /* 0x61 */ KEY_L10,             /* cut */
+       /* 0x62 */ KEY_NumLock,
+       /* 0x63 */ KEY_ShiftL,
+       /* 0x64 */ KEY_Z,
+***************
+*** 801,807 ****
+       /* 0x79 */ KEY_Space,
+       /* 0x7a */ KEY_RMeta,
+       /* 0x7b */ KEY_PgDown,
+!      /* 0x7c */ KEY_NOTUSED,
+       /* 0x7d */ KEY_KP_Plus,
+       /* 0x7e */ KEY_NOTUSED,
+       /* 0x7f */ KEY_NOTUSED
+--- 801,807 ----
+       /* 0x79 */ KEY_Space,
+       /* 0x7a */ KEY_RMeta,
+       /* 0x7b */ KEY_PgDown,
+!      /* 0x7c */ KEY_Less,            /* < > on some keyboards */
+       /* 0x7d */ KEY_KP_Plus,
+       /* 0x7e */ KEY_NOTUSED,
+       /* 0x7f */ KEY_NOTUSED
+***************
+*** 1044,1052 ****
+--- 1044,1054 ----
+        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,1066 ****
+--- 1063,1071 ----
+                      break;
+  #endif
+  #ifdef WSKBD_TYPE_SUN
++ #ifdef WSKBD_TYPE_SUN5
++             case WSKBD_TYPE_SUN5:
++ #endif
+              case WSKBD_TYPE_SUN:
+                      pKbd->scancodeMap = &wsSun;
+                      break;
+***************
+*** 1068,1073 ****
+--- 1073,1081 ----
+              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 -c 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,149 ****
+  KbdOn(InputInfoPtr pInfo, int what)
+  {
+      KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+! #if defined(SYSCONS_SUPPORT) || defined(PCCONS_SUPPORT) || defined(PCVT_SUPPORT)
+      BsdKbdPrivPtr priv = (BsdKbdPrivPtr) pKbd->private;
+      struct termios nTty;
+  #endif
+--- 143,149 ----
+  KbdOn(InputInfoPtr pInfo, int what)
+  {
+      KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+! #if defined(SYSCONS_SUPPORT) || defined(PCCONS_SUPPORT) || defined(PCVT_SUPPORT) || defined(WSCONS_SUPPORT)
+      BsdKbdPrivPtr priv = (BsdKbdPrivPtr) pKbd->private;
+      struct termios nTty;
+  #endif
+***************
+*** 154,160 ****
+      if (pKbd->isConsole) {
+          switch (pKbd->consType) {
+  
+! #if defined(SYSCONS_SUPPORT) || defined(PCCONS_SUPPORT) || defined(PCVT_SUPPORT)
+           case SYSCONS:
+           case PCCONS:
+           case PCVT:
+--- 154,160 ----
+      if (pKbd->isConsole) {
+          switch (pKbd->consType) {
+  
+! #if defined(SYSCONS_SUPPORT) || defined(PCCONS_SUPPORT) || defined(PCVT_SUPPORT) || defined(WSCONS_SUPPORT)
+           case SYSCONS:
+           case PCCONS:
+           case PCVT:
+***************
+*** 170,176 ****
+                nTty.c_cc[VMIN] = 1;
+                cfsetispeed(&nTty, 9600);
+                cfsetospeed(&nTty, 9600);
+!               tcsetattr(pInfo->fd, TCSANOW, &nTty);
+                   break; 
+  #endif 
+          }
+--- 170,179 ----
+                nTty.c_cc[VMIN] = 1;
+                cfsetispeed(&nTty, 9600);
+                cfsetospeed(&nTty, 9600);
+!               if (tcsetattr(pInfo->fd, TCSANOW, &nTty) < 0) {
+!                       xf86Msg(X_ERROR, "KbdOn: tcsetattr: %s\n",
+!                           strerror(errno));
+!               }
+                   break; 
+  #endif 
+          }
+***************
+*** 197,203 ****
+                                   "or use for example:\n\n"
+                                   "Option \"Protocol\" \"wskbd\"\n"
+                                   "Option \"Device\" \"/dev/wskbd0\"\n"
+!                                  "\nin your XF86Config(5) file\n");
+                }
+                break;
+  #endif
+--- 200,206 ----
+                                   "or use for example:\n\n"
+                                   "Option \"Protocol\" \"wskbd\"\n"
+                                   "Option \"Device\" \"/dev/wskbd0\"\n"
+!                                  "\nin your xorg.conf(5) file\n");
+                }
+                break;
+  #endif
+***************
+*** 232,238 ****
+              case WSCONS:
+                   option = WSKBD_TRANSLATED;
+                   ioctl(xf86Info.consoleFd, WSKBDIO_SETMODE, &option);
+!                  tcsetattr(xf86Info.consoleFd, TCSANOW, &(priv->kbdtty));
+                break;
+  #endif
+          }
+--- 235,241 ----
+              case WSCONS:
+                   option = WSKBD_TRANSLATED;
+                   ioctl(xf86Info.consoleFd, WSKBDIO_SETMODE, &option);
+!                  tcsetattr(pInfo->fd, TCSANOW, &(priv->kbdtty));
+                break;
+  #endif
+          }
+***************
+*** 292,298 ****
+  
+    if ((ModifierSet(ControlMask | AltMask)) ||
+        (ModifierSet(ControlMask | AltLangMask))) {
+!       if (VTSwitchEnabled && !xf86Info.vtSysreq) {
+           switch (key) {
+               case KEY_F1:
+               case KEY_F2:
+--- 295,301 ----
+  
+    if ((ModifierSet(ControlMask | AltMask)) ||
+        (ModifierSet(ControlMask | AltLangMask))) {
+!       if (VTSwitchEnabled && !xf86Info.vtSysreq && !xf86Info.dontVTSwitch) {
+           switch (key) {
+               case KEY_F1:
+               case KEY_F2:
+***************
+*** 318,324 ****
+        }
+      }
+  #ifdef USE_VT_SYSREQ
+!     if (VTSwitchEnabled && xf86Info.vtSysreq) {
+          switch (key) {
+              case KEY_F1:
+              case KEY_F2:
+--- 321,327 ----
+        }
+      }
+  #ifdef USE_VT_SYSREQ
+!     if (VTSwitchEnabled && xf86Info.vtSysreq && !xf86Info.dontVTSwitch) {
+          switch (key) {
+              case KEY_F1:
+              case KEY_F2:
+***************
+*** 380,401 ****
+  }
+  
+  #ifdef WSCONS_SUPPORT
+  static void
+  WSReadInput(InputInfoPtr pInfo)
+  {
+      KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+      struct wscons_event events[64];
+!     int 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);
+!      }
+  }
+- #endif
+  
+- #ifdef WSCONS_SUPPORT
+  static void
+  printWsType(char *type, char *devname)
+  {
+--- 383,412 ----
+  }
+  
+  #ifdef WSCONS_SUPPORT
++ 
+  static void
+  WSReadInput(InputInfoPtr pInfo)
+  {
+      KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+      struct wscons_event events[64];
+!     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++) {
+!          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 */
+!     }
+  }
+  
+  static void
+  printWsType(char *type, char *devname)
+  {
+***************
+*** 448,462 ****
+             pKbd->consType = xf86Info.consType;
+         }
+      } else {
+!        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;
+         xfree(s);
+      }
+  
+--- 459,472 ----
+             pKbd->consType = xf86Info.consType;
+         }
+      } else {
+!      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;
+!        pKbd->consType = xf86Info.consType;
+         xfree(s);
+      }
+  
+***************
+*** 495,500 ****
+--- 505,515 ----
+                 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,538 ****
+      }
+      return TRUE;
+  }
+- 
+--- 550,552 ----
+Index: xc/programs/Xserver/hw/xfree86/os-support/bus/460gxPCI.c
+diff -c 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,232 ****
+   * the chipset scan is to be stopped, or FALSE if the scan is to move on to the
+   * next chipset.
+   */
+  Bool
+! xf86PreScan460GX(void)
+  {
+      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;
+      }
+  
+      /* Get CBN (Chipset bus number) */
+      if (!(cbn_460gx = (unsigned int)pciReadByte(tag, CBN))) {
+       /* Sanity check failed */
+       cbn_460gx = -1;
+!      return TRUE;
+      }
+  
+      if (pciNumBuses <= cbn_460gx)
+--- 201,246 ----
+   * the chipset scan is to be stopped, or FALSE if the scan is to move on to the
+   * next chipset.
+   */
++ 
+  Bool
+! xorgProbe460GX(scanpciWrapperOpt flags)
+  {
+      pciBusInfo_t *pBusInfo;
+      PCITAG tag;
+  
+      /* 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)) {
+!      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;
+      }
+  
+      if (pciNumBuses <= cbn_460gx)
+***************
+*** 242,248 ****
+      if (pciReadLong(tag, PCI_ID_REG) != DEVID(VENDOR_INTEL, CHIP_460GX_SAC)) {
+       /* Sanity check failed */
+       cbn_460gx = -1;
+!      return TRUE;
+      }
+  
+      /*
+--- 256,262 ----
+      if (pciReadLong(tag, PCI_ID_REG) != DEVID(VENDOR_INTEL, CHIP_460GX_SAC)) {
+       /* Sanity check failed */
+       cbn_460gx = -1;
+!      return;
+      }
+  
+      /*
+***************
+*** 257,263 ****
+           DEVID(VENDOR_INTEL, CHIP_460GX_SAC)) {
+           /* Sanity check failed */
+           cbn_460gx = -1;
+!          return TRUE;
+       }
+  
+       if (devno == 0x10)
+--- 271,277 ----
+           DEVID(VENDOR_INTEL, CHIP_460GX_SAC)) {
+           /* Sanity check failed */
+           cbn_460gx = -1;
+!          return;
+       }
+  
+       if (devno == 0x10)
+***************
+*** 278,284 ****
+           if (cbdevs_460gx & (1 << devno)) {
+               /* Sanity check failed */
+               cbn_460gx = -1;
+!              return TRUE;
+           }
+  
+           /*
+--- 292,298 ----
+           if (cbdevs_460gx & (1 << devno)) {
+               /* Sanity check failed */
+               cbn_460gx = -1;
+!              return;
+           }
+  
+           /*
+***************
+*** 294,300 ****
+           if (cbdevs_460gx & (1 << devno)) {
+               /* Sanity check failed */
+               cbn_460gx = -1;
+!              return TRUE;
+           }
+  
+           /*
+--- 308,314 ----
+           if (cbdevs_460gx & (1 << devno)) {
+               /* Sanity check failed */
+               cbn_460gx = -1;
+!              return;
+           }
+  
+           /*
+***************
+*** 310,316 ****
+               break;
+           /* Sanity check failed */
+           cbn_460gx = -1;
+!          return TRUE;
+       }
+      }
+  
+--- 324,330 ----
+               break;
+           /* Sanity check failed */
+           cbn_460gx = -1;
+!          return;
+       }
+      }
+  
+***************
+*** 337,343 ****
+       break;
+      }
+  
+!     return TRUE;
+  }
+  
+  /* This does some 460GX-related processing after the PCI bus scan */
+--- 351,357 ----
+       break;
+      }
+  
+!     return;
+  }
+  
+  /* This does some 460GX-related processing after the PCI bus scan */
+***************
+*** 423,429 ****
+               if (pPCI->funcnum > 0)
+                   break;
+  
+!              if ((pBusInfo = pciBusInfo[busno_460gx[i]]))
+                   break;
+  
+               /* Fix bus linkage */
+--- 437,443 ----
+               if (pPCI->funcnum > 0)
+                   break;
+  
+!              if ((pBusInfo == pciBusInfo[busno_460gx[i]]))
+                   break;
+  
+               /* Fix bus linkage */
+Index: xc/programs/Xserver/hw/xfree86/os-support/bus/460gxPCI.h
+diff -c 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,36 ****
+  #define PCI_460GX_H 1
+  
+  #include <X11/Xdefs.h>
+  
+! Bool xf86PreScan460GX(void);
+  void xf86PostScan460GX(void);
+  
+  #endif
+--- 29,38 ----
+  #define PCI_460GX_H 1
+  
+  #include <X11/Xdefs.h>
++ #include <Pci.h>
+  
+! Bool xorgProbe460GX(scanpciWrapperOpt flags);
+! void xf86PreScan460GX(void);
+  void xf86PostScan460GX(void);
+  
+  #endif
+Index: xc/programs/Xserver/hw/xfree86/os-support/bus/Imakefile
+diff -c 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,133 ****
+  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
+  #endif
+  
+  SRCS = Pci.c $(PCIDRVRSRC) $(SBUSDRVSRC) $(PCIARCHSRC)
+--- 126,133 ----
+  PCIARCHOBJ = sparcPci.o
+  # endif
+  #elif defined(ia64Architecture)
+! 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 -c 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,963 ****
+      pciBusInfo_t *busp;
+      int          idx = 0, i;
+      PCITAG       tag;
+  
+!     if (pci_devp[0])
+       return pci_devp;
+  
+      pciInit();
+  
+  #ifdef XF86SCANPCI_WRAPPER
+--- 954,966 ----
+      pciBusInfo_t *busp;
+      int          idx = 0, i;
+      PCITAG       tag;
++     static Bool  done = FALSE;
+  
+!     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 -c 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,50 ****
+  #include "Pci.h"
+  
+  Bool
+! xf86PreScanE8870(void)
+  {
+      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;
+  
+      /* XXX Fill me in... */
+!     return TRUE;
+  }
+  
+  void
+--- 34,56 ----
+  #include "Pci.h"
+  
+  Bool
+! 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 TRUE;
+! 
+!     return FALSE;
+! }
+  
++ void
++ xf86PreScanE8870(void)
++ {
+      /* XXX Fill me in... */
+!     return;
+  }
+  
+  void
+Index: xc/programs/Xserver/hw/xfree86/os-support/bus/e8870PCI.h
+diff -c 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,36 ****
+  #define PCI_E8870_H 1
+  
+  #include <X11/Xdefs.h>
+  
+! Bool xf86PreScanE8870(void);
+  void xf86PostScanE8870(void);
+  
+  #endif
+--- 29,38 ----
+  #define PCI_E8870_H 1
+  
+  #include <X11/Xdefs.h>
++ #include <Pci.h>
+  
+! Bool xorgProbeE8870(scanpciWrapperOpt flags);
+! void xf86PreScanE8870(void);
+  void xf86PostScanE8870(void);
+  
+  #endif
+Index: xc/programs/Xserver/hw/xfree86/os-support/bus/ia64Pci.c
+diff -c 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    Sat Feb  5 21:34:49 2005
+***************
+*** 1,61 ****
+- /* $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
+-     }
+- 
+- }
+--- 0 ----
+Index: xc/programs/Xserver/hw/xfree86/os-support/bus/ix86Pci.c
+diff -c 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,279 ****
+      switch (xf86Info.pciFlags) {
+  
+       case PCIOsConfig:
+! #if ARCH_PCI_OS_INIT
+           return;
+  #endif
+           
+--- 273,279 ----
+      switch (xf86Info.pciFlags) {
+  
+       case PCIOsConfig:
+! #ifdef ARCH_PCI_OS_INIT
+           return;
+  #endif
+           
+Index: xc/programs/Xserver/hw/xfree86/os-support/bus/linuxPci.c
+diff -c 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,126 ****
+               if (fd != -1)
+                       close(fd);
+               if (bus < 256) {
+!                      if (stat("/proc/bus/pci/00", &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/0000:%04x/%02x.%1x",
+                                       bus, dev, func);
+                       else
+--- 113,128 ----
+               if (fd != -1)
+                       close(fd);
+               if (bus < 256) {
+!                      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 {
+!                      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 -c 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,32 ****
+--- 27,33 ----
+  
+  #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 -c 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,477 ****
+      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
+  xf86PreScanZX1(void)
+  {
+      resRange range;
+--- 465,471 ----
+      NULL,            /* bridge -- dynamically set */
+  };
+  
+! void
+  xf86PreScanZX1(void)
+  {
+      resRange range;
+***************
+*** 491,497 ****
+       mapSize = MIO_SIZE;
+  
+      if (!(pZX1mio = xf86MapVidMem(-1, VIDMEM_MMIO, MIO_BASE, mapSize)))
+!      return FALSE;
+  
+      /* Look for ZX1's SBA and IOC */ /* XXX What about Dino? */
+      if ((MIO_LONG(MIO_FUNCTION0 + PCI_ID_REG) !=
+--- 485,491 ----
+       mapSize = MIO_SIZE;
+  
+      if (!(pZX1mio = xf86MapVidMem(-1, VIDMEM_MMIO, MIO_BASE, mapSize)))
+!      return;
+  
+      /* Look for ZX1's SBA and IOC */ /* XXX What about Dino? */
+      if ((MIO_LONG(MIO_FUNCTION0 + PCI_ID_REG) !=
+***************
+*** 500,506 ****
+        DEVID(VENDOR_HP, CHIP_ZX1_IOC))) {
+       xf86UnMapVidMem(-1, pZX1mio, mapSize);
+       pZX1mio = NULL;
+!      return FALSE;
+      }
+  
+      /* Map rope configuration space */
+--- 494,500 ----
+        DEVID(VENDOR_HP, CHIP_ZX1_IOC))) {
+       xf86UnMapVidMem(-1, pZX1mio, mapSize);
+       pZX1mio = NULL;
+!      return;
+      }
+  
+      /* Map rope configuration space */
+***************
+*** 510,516 ****
+       !(pZX1ioa = xf86MapVidMem(-1, VIDMEM_MMIO, ioaaddr, IOA_SIZE))) {
+       xf86UnMapVidMem(-1, pZX1mio, mapSize);
+       pZX1mio = NULL;
+!      return TRUE;
+      }
+  
+      for (i = 0;  i < 8;  i++) {
+--- 504,510 ----
+       !(pZX1ioa = xf86MapVidMem(-1, VIDMEM_MMIO, ioaaddr, IOA_SIZE))) {
+       xf86UnMapVidMem(-1, pZX1mio, mapSize);
+       pZX1mio = NULL;
+!      return;
+      }
+  
+      for (i = 0;  i < 8;  i++) {
+***************
+*** 924,930 ****
+  
+      nRange = 0;
+  
+!     return TRUE;
+  }
+  
+  /* This is called to finalise the results of a PCI bus scan */
+--- 918,924 ----
+  
+      nRange = 0;
+  
+!     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 -c 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,36 ****
+  
+  #include <X11/Xdefs.h>
+  
+! Bool xf86PreScanZX1(void);
+  void xf86PostScanZX1(void);
+  
+  #endif
+--- 30,36 ----
+  
+  #include <X11/Xdefs.h>
+  
+! void xf86PreScanZX1(void);
+  void xf86PostScanZX1(void);
+  
+  #endif
+Index: xc/programs/Xserver/hw/xfree86/os-support/linux/Imakefile
+diff -c 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,64 ****
+  #endif
+  
+  #if defined(AlphaArchitecture)
+! AXP_SRC=lnx_ev56.c xf86Axp.c lnx_axp.c
+! AXP_OBJ=lnx_ev56.o xf86Axp.o lnx_axp.o
+  #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*/
+  
+  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*/
+  
+  INCLUDES = -I$(XF86COMSRC) -I$(XF86OSSRC) -I. -I$(SERVERSRC)/include \
+             -I$(XINCLUDESRC) -I$(EXTINCSRC) -I$(XF86OSSRC)/shared \
+!         -I$(DRMSRCDIR)/shared
+  
+  RESDEFINES = -DUSESTDRES
+  
+! DEFINES = $(MTRRDEFINES) $(RESDEFINES) -DHAVE_SYSV_IPC
+  
+  #if defined(AlphaArchitecture)
+  SpecialObjectRule(lnx_ev56.o, lnx_ev56.c, -mcpu=ev56)
+--- 38,69 ----
+  #endif
+  
+  #if defined(AlphaArchitecture)
+! 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) \
+!        $(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) \
+!        $(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$(XF86OSSRC)/bus -I$(DRMSRCDIR)/shared
+  
+  RESDEFINES = -DUSESTDRES
+  
+! DEFINES = $(MTRRDEFINES) $(RESDEFINES) $(PLATFORM_DEFINES) -DHAVE_SYSV_IPC
+  
+  #if defined(AlphaArchitecture)
+  SpecialObjectRule(lnx_ev56.o, lnx_ev56.c, -mcpu=ev56)
+***************
+*** 114,119 ****
+--- 119,127 ----
+  #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 -c /dev/null xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_ia64.c:1.1
+*** /dev/null  Sat Feb  5 21:34:49 2005
+--- xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_ia64.c Wed Sep 15 09:23:59 2004
+***************
+*** 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 -c 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,119 ****
+--- 114,121 ----
+  #endif /* KDKBDREP */
+  }
+  
++ #undef rate
++ 
+  static int
+  KIOCSRATE_ioctl_ok(int rate, int delay) {
+  #ifdef KIOCSRATE
+***************
+*** 141,148 ****
+  #endif /* KIOCSRATE */
+  }
+  
+- #undef rate
+- 
+  void xf86SetKbdRepeat(char rad)
+  {
+  #ifdef __sparc__
+--- 143,148 ----
+Index: xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_kbd.c
+diff -c 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,147 ****
+--- 142,149 ----
+  #endif /* KDKBDREP */
+  }
+  
++ #undef rate
++ 
+  static int
+  KIOCSRATE_ioctl_ok(int rate, int delay) {
+  #ifdef KIOCSRATE
+***************
+*** 169,176 ****
+  #endif /* KIOCSRATE */
+  }
+  
+- #undef rate
+- 
+  static void
+  SetKbdRepeat(InputInfoPtr pInfo, char rad)
+  {
+--- 171,176 ----
+***************
+*** 356,362 ****
+  
+    if ((ModifierSet(ControlMask | AltMask)) ||
+        (ModifierSet(ControlMask | AltLangMask))) {
+!       if (VTSwitchEnabled && !xf86Info.vtSysreq) {
+            switch (key) {
+               case KEY_F1:
+               case KEY_F2:
+--- 356,362 ----
+  
+    if ((ModifierSet(ControlMask | AltMask)) ||
+        (ModifierSet(ControlMask | AltLangMask))) {
+!       if (VTSwitchEnabled && !xf86Info.vtSysreq && !xf86Info.dontVTSwitch) {
+            switch (key) {
+               case KEY_F1:
+               case KEY_F2:
+***************
+*** 382,388 ****
+        }
+    }
+  #ifdef USE_VT_SYSREQ
+!     if (VTSwitchEnabled && xf86Info.vtSysreq) {
+          switch (key) {
+              case KEY_F1:
+              case KEY_F2:
+--- 382,388 ----
+        }
+    }
+  #ifdef USE_VT_SYSREQ
+!     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 -c /dev/null xc/programs/Xserver/hw/xfree86/os-support/shared/ia64Pci.c:1.1
+*** /dev/null  Sat Feb  5 21:34:49 2005
+--- xc/programs/Xserver/hw/xfree86/os-support/shared/ia64Pci.c Wed Sep 15 09:23:59 2004
+***************
+*** 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 -c /dev/null xc/programs/Xserver/hw/xfree86/os-support/shared/ia64Pci.h:1.1.4.1
+*** /dev/null  Sat Feb  5 21:34:49 2005
+--- xc/programs/Xserver/hw/xfree86/os-support/shared/ia64Pci.h Wed Dec 15 16:03:15 2004
+***************
+*** 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 -c 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 ****
+  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
+  XCOMM Copyright 2001 The XFree86 Project, Inc.  All Rights Reserved.
+  XCOMM
+--- 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.4.2 2005/01/13 01:18:47 gisburn Exp $
+  XCOMM
+  XCOMM Copyright 2001 The XFree86 Project, Inc.  All Rights Reserved.
+  XCOMM
+***************
+*** 32,47 ****
+  
+  #include <Server.tmpl>
+  
+! #if !HasGcc && defined(i386Architecture)
+! #if HasSunC
+! PROWORKS_INOUT_SRC = solaris-ia32.S
+! PROWORKS_INOUT_OBJ = solaris-ia32.o
+  
+! includes:: ia32.il
+  
+! CppFileTarget(ia32.il,solaris-ia32.S,-DINLINE_ASM,NullParameter)
+! ObjectFromAsmSource(solaris-ia32,NullParameter)
+! #else
+  PROWORKS_INOUT_SRC = sun_inout.s
+  PROWORKS_INOUT_OBJ = sun_inout.o
+  #endif
+--- 32,60 ----
+  
+  #include <Server.tmpl>
+  
+! #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
+  
+! CppFileTarget($(PROWORKS_ASM_ARCH).il,solaris-$(PROWORKS_ASM_ARCH).S,-DINLINE_ASM,NullParameter)
+  
+! $(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,68 ****
+--- 76,85 ----
+  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,80 ****
+          -I$(SERVERSRC)/mi -I$(SERVERSRC)/include -I$(SERVERSRC)/Xext \
+          -I$(XINCLUDESRC) -I$(EXTINCSRC)
+  
+! DEFINES = -DUSESTDRES
+  
+  SubdirLibraryRule($(OBJS))
+  NormalLibraryObjectRule()
+--- 91,97 ----
+          -I$(SERVERSRC)/mi -I$(SERVERSRC)/include -I$(SERVERSRC)/Xext \
+          -I$(XINCLUDESRC) -I$(EXTINCSRC)
+  
+! DEFINES = -DUSESTDRES $(VENDOR_DEFINES) $(SYSVIPCDEFINES)
+  
+  SubdirLibraryRule($(OBJS))
+  NormalLibraryObjectRule()
+Index: xc/programs/Xserver/hw/xfree86/os-support/sunos/solaris-sparcv8plus.S
+diff -c /dev/null xc/programs/Xserver/hw/xfree86/os-support/sunos/solaris-sparcv8plus.S:1.1.6.1
+*** /dev/null  Sat Feb  5 21:34:49 2005
+--- xc/programs/Xserver/hw/xfree86/os-support/sunos/solaris-sparcv8plus.S      Thu Jan 13 01:18:47 2005
+***************
+*** 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 -c 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,31 ****
+  
+  /* #include "render.h" */
+  
+! #if 0
+  #define COND(pDraw) \
+          ((pDraw)->depth \
+                        != (xaaWrapperGetScrPriv(((DrawablePtr)(pDraw))->pScreen))->depth)
+! #endif
+  #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);
+--- 16,29 ----
+  
+  /* #include "render.h" */
+  
+! #if 1
+  #define COND(pDraw) \
+          ((pDraw)->depth \
+                        != (xaaWrapperGetScrPriv(((DrawablePtr)(pDraw))->pScreen))->depth)
+! #else
+  #define COND(pDraw) 1
+  #endif
++ 
+  static Bool xaaWrapperCreateGC(GCPtr pGC);
+  static void xaaWrapperValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDraw);
+  static void xaaWrapperDestroyGC(GCPtr pGC);
+***************
+*** 36,88 ****
+  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,
+--- 34,40 ----
+  static void xaaWrapperCopyClip(GCPtr pgcDst, GCPtr pgcSrc);
+  static void xaaWrapperDestroyClip(GCPtr pGC);
+  
+! 
+  static void
+  xaaWrapperComposite (CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst,
+            INT16 xSrc, INT16 ySrc, INT16 xMask, INT16 yMask,
+***************
+*** 145,169 ****
+      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; \
+  }
+! #endif
+  
+  typedef struct _xaaWrapperGCPriv {
+      GCOps   *ops;
+--- 97,123 ----
+      real->mem = func; \
+  }
+  
+  #define unwrap(priv,real,mem) {\
+      real->mem = 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; \
+  }
+! 
+! #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,221 ****
+      xaaWrapperScrPriv(pWin->drawable.pScreen);
+      Bool ret;
+      
+!     unwrap (pScrPriv, pWin->drawable.pScreen, CreateWindow);
+!     if (COND(&pWin->drawable))
+!      pWin->drawable.pScreen->CreateWindow
+!          = pScrPriv->wrapCreateWindow;
+      ret = pWin->drawable.pScreen->CreateWindow(pWin);
+!     wrap(pScrPriv, pWin->drawable.pScreen, CreateWindow, xaaWrapperCreateWindow);
+  
+      return ret;
+  }
+--- 164,174 ----
+      xaaWrapperScrPriv(pWin->drawable.pScreen);
+      Bool ret;
+      
+!     cond_unwrap(pScrPriv, &pWin->drawable, pWin->drawable.pScreen,
+!              CreateWindow, wrapCreateWindow);
+      ret = pWin->drawable.pScreen->CreateWindow(pWin);
+!     cond_wrap(pScrPriv, &pWin->drawable, pWin->drawable.pScreen, CreateWindow,
+!            wrapCreateWindow, xaaWrapperCreateWindow);
+  
+      return ret;
+  }
+***************
+*** 244,254 ****
+  {
+      xaaWrapperScrPriv(pWin->drawable.pScreen);
+  
+!     unwrap (pScrPriv, pWin->drawable.pScreen, WindowExposures);
+!     if (COND(&pWin->drawable))
+!      pWin->drawable.pScreen->WindowExposures = pScrPriv->wrapWindowExposures;
+      pWin->drawable.pScreen->WindowExposures(pWin, prgn, other_exposed);
+!     wrap(pScrPriv, pWin->drawable.pScreen, WindowExposures, xaaWrapperWindowExposures);
+  }
+  
+  static void
+--- 197,207 ----
+  {
+      xaaWrapperScrPriv(pWin->drawable.pScreen);
+  
+!     cond_unwrap(pScrPriv, &pWin->drawable, pWin->drawable.pScreen,
+!              WindowExposures, wrapWindowExposures);
+      pWin->drawable.pScreen->WindowExposures(pWin, prgn, other_exposed);
+!     cond_wrap(pScrPriv, &pWin->drawable, pWin->drawable.pScreen,
+!            WindowExposures, wrapWindowExposures, xaaWrapperWindowExposures);
+  }
+  
+  static void
+***************
+*** 258,286 ****
+  
+      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);
+!          }
+           pWin->drawable.pScreen->PaintWindowBorder (pWin, pRegion, what);
+!          wrap(pScrPriv, pWin->drawable.pScreen, PaintWindowBorder,
+!               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);
+!          }
+           pWin->drawable.pScreen->PaintWindowBackground (pWin, pRegion, what);
+!          wrap(pScrPriv, pWin->drawable.pScreen, PaintWindowBackground,
+!               xaaWrapperPaintWindow);
+           break;
+      }
+- 
+  }
+  
+  static Bool
+--- 211,234 ----
+  
+      switch (what) {
+       case PW_BORDER:
+!          cond_unwrap(pScrPriv, &pWin->drawable, pWin->drawable.pScreen,
+!                      PaintWindowBorder, wrapPaintWindowBorder);
+! 
+           pWin->drawable.pScreen->PaintWindowBorder (pWin, pRegion, what);
+!          cond_wrap(pScrPriv, &pWin->drawable, pWin->drawable.pScreen,
+!                    PaintWindowBorder, wrapPaintWindowBorder,
+!                    xaaWrapperPaintWindow);
+           break;
+       case PW_BACKGROUND:
+!          cond_unwrap(pScrPriv, &pWin->drawable, pWin->drawable.pScreen,
+!                      PaintWindowBackground, wrapPaintWindowBackground);
+! 
+           pWin->drawable.pScreen->PaintWindowBackground (pWin, pRegion, what);
+!          cond_wrap(pScrPriv, &pWin->drawable, pWin->drawable.pScreen,
+!                    PaintWindowBackground, wrapPaintWindowBackground,
+!                    xaaWrapperPaintWindow);
+           break;
+      }
+  }
+  
+  static Bool
+***************
+*** 378,388 ****
+      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);
+--- 326,332 ----
+***************
+*** 435,459 ****
+      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); \
+--- 379,384 ----
+***************
+*** 463,485 ****
+      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)
+  {
+--- 388,393 ----
+***************
+*** 572,881 ****
+      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,
+--- 480,485 ----
+Index: xc/programs/Xserver/hw/xfree86/xf86cfg/interface.c
+diff -c 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,306 ****
+      
+      startedx = startx();
+      if (XF86Config_path == NULL)
+!      XF86Config_path = XtNewString(__XCONFIGFILE__"-4");
+      if (XkbConfig_path == NULL) {
+       XmuSnprintf(XkbConfig_path_static, sizeof(XkbConfig_path_static),
+                   "%s/%s%s", XFree86Dir, XkbConfigDir, XkbConfigFile);
+--- 300,306 ----
+      
+      startedx = startx();
+      if (XF86Config_path == NULL)
+!      XF86Config_path = XtNewString(__XCONFIGFILE__);
+      if (XkbConfig_path == NULL) {
+       XmuSnprintf(XkbConfig_path_static, sizeof(XkbConfig_path_static),
+                   "%s/%s%s", XFree86Dir, XkbConfigDir, XkbConfigFile);
+***************
+*** 536,544 ****
+  # endif
+  #else
+  # ifdef XF86CONFIGDIR
+!      XF86Config_path = XtNewString(XF86CONFIGDIR "/"__XCONFIGFILE__"-4");
+  # else
+!      XF86Config_path = XtNewString("/etc/X11/"__XCONFIGFILE__"-4");
+  # endif
+  #endif
+      }
+--- 536,544 ----
+  # endif
+  #else
+  # ifdef XF86CONFIGDIR
+!      XF86Config_path = XtNewString(XF86CONFIGDIR "/"__XCONFIGFILE__);
+  # else
+!      XF86Config_path = XtNewString("/etc/X11/"__XCONFIGFILE__);
+  # endif
+  #endif
+      }
+Index: xc/programs/Xserver/hw/xfree86/xf86cfg/loader.h
+diff -c 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,81 ****
+      unsigned long       num;
+      char *              str;
+      double              realnum;
+!     Bool             bool;
+      OptFrequency     freq;
+  } ValueUnion;
+  
+--- 75,81 ----
+      unsigned long       num;
+      char *              str;
+      double              realnum;
+!     Bool             xbool;
+      OptFrequency     freq;
+  } ValueUnion;
+  
+Index: xc/programs/Xserver/hw/xfree86/xf86config/xorgconfig.c
+diff -c 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,100 ****
+   *  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 $ */
+  
+  #include <stdlib.h>
+  #include <stdio.h>
+--- 94,100 ----
+   *  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.2.3 2005/02/02 03:38:05 gisburn Exp $ */
+  
+  #include <stdlib.h>
+  #include <stdio.h>
+***************
+*** 225,231 ****
+  #endif
+  int config_xkbdisable = 0;
+  char *config_xkbrules;
+! char *config_xkbmodel = "pc101";
+  char *config_xkblayout = "us";
+  char *config_xkbvariant = (char *) 0;
+  char *config_xkboptions = (char *) 0;
+--- 225,231 ----
+  #endif
+  int config_xkbdisable = 0;
+  char *config_xkbrules;
+! char *config_xkbmodel = "pc105";
+  char *config_xkblayout = "us";
+  char *config_xkbvariant = (char *) 0;
+  char *config_xkboptions = (char *) 0;
+***************
+*** 679,685 ****
+  static char *xkbmodeltext = 
+  "Please select one of the following keyboard types that is the better\n"
+  "description of your keyboard. If nothing really matches,\n"
+! "choose 1 (Generic 101-key PC)\n\n";
+  
+  static char *xkblayouttext = 
+  "Please select the layout corresponding to your keyboard\n";
+--- 679,685 ----
+  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 \"Generic 104-key PC\"\n\n";
+  
+  static char *xkblayouttext = 
+  "Please select the layout corresponding to your keyboard\n";
+***************
+*** 2076,2082 ****
+  "# To customise the XKB settings to suit your keyboard, modify the\n"
+  "# lines below (which are the defaults).  For example, for a non-U.S.\n"
+  "# keyboard, you will probably want to use:\n"
+! "#    Option \"XkbModel\"    \"pc102\"\n"
+  "# If you have a US Microsoft Natural keyboard, you can use:\n"
+  "#    Option \"XkbModel\"    \"microsoft\"\n"
+  "#\n"
+--- 2076,2082 ----
+  "# 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\"    \"pc105\"\n"
+  "# If you have a US Microsoft Natural keyboard, you can use:\n"
+  "#    Option \"XkbModel\"    \"microsoft\"\n"
+  "#\n"
+***************
+*** 2093,2099 ****
+  "\n"
+  "# These are the default XKB settings for "__XSERVERNAME__"\n"
+  "#    Option \"XkbRules\"    \""__XKBDEFRULES__"\"\n"
+! "#    Option \"XkbModel\"    \"pc101\"\n"
+  "#    Option \"XkbLayout\"   \"us\"\n"
+  "#    Option \"XkbVariant\"  \"\"\n"
+  "#    Option \"XkbOptions\"  \"\"\n"
+--- 2093,2099 ----
+  "\n"
+  "# These are the default XKB settings for "__XSERVERNAME__"\n"
+  "#    Option \"XkbRules\"    \""__XKBDEFRULES__"\"\n"
+! "#    Option \"XkbModel\"    \"pc105\"\n"
+  "#    Option \"XkbLayout\"   \"us\"\n"
+  "#    Option \"XkbVariant\"  \"\"\n"
+  "#    Option \"XkbOptions\"  \"\"\n"
+Index: xc/programs/Xserver/hw/xwin/ChangeLog
+diff -c 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,24 ****
+       fUseUnicode, because it don't mean wheather Windows support
+       Unicode or not.
+       
+! 2004-07-31  Alexander Gottwald  <ago@freedesktop.org>
+  
+       * win.h:
+       adjust prototype for winInitCmapPrivates to match Egberts change.       
+  
+! 2004-07-30  Egbert Eich  <eich@freedesktop.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>
+  
+       * winconfig.c: Add entry for irish layout (ie)
+       * InitOutput.c, winerror.c, winglobals.c: rename g_fUseMsg to 
+--- 137,154 ----
+       fUseUnicode, because it don't mean wheather Windows support
+       Unicode or not.
+       
+! 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 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 at freedesktop dot org>
+  
+       * winconfig.c: Add entry for irish layout (ie)
+       * InitOutput.c, winerror.c, winglobals.c: rename g_fUseMsg to 
+***************
+*** 27,64 ****
+       -silent-dup-error to allow silent termination if another instance of
+       XWin was found running
+  
+! 2004-06-27  Alexander Gottwald  <ago@freedesktop.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>
+  
+       * InitOutput.c: Check for textmode mounted /tmp and print a warning
+  
+! 2004-06-15  Harold Hunt  <huntharo@msu.edu>
+  
+       * windialogs.c: Fix path to locally installed changelog for the About 
+       dialog box.
+  
+! 2004-05-27  Alexander Gottwald  <ago@freedesktop.org>
+  
+       * winpriv.c: Create win32 window if not already created
+       * winmultiwindowwindow.c: Export winCreateWindowWindow
+  
+! 2004-05-27  Alexander Gottwald  <ago@freedesktop.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>
+       
+       * 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>
+  
+       * win.h, winmultiwindowicons.c (winXIconToHICON): Takes iconsize
+       as parameter 
+--- 157,194 ----
+       -silent-dup-error to allow silent termination if another instance of
+       XWin was found running
+  
+! 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 at freedesktop dot org>
+  
+       * InitOutput.c: Check for textmode mounted /tmp and print a warning
+  
+! 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 at freedesktop dot org>
+  
+       * winpriv.c: Create win32 window if not already created
+       * winmultiwindowwindow.c: Export winCreateWindowWindow
+  
+! 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 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 at freedesktop dot org>
+  
+       * win.h, winmultiwindowicons.c (winXIconToHICON): Takes iconsize
+       as parameter 
+***************
+*** 83,96 ****
+         winwin32rootless.c (winMWExtWMDestroyFrame): Use winDestroyIcon
+       to free the icon without destroying the global icon.  
+         
+! 2004-05-17  Alexander Gottwald  <ago@freedesktop.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>
+      
+       * winclipboard.h: Add extern prototypes for winDebug, winErrorFVerb
+       copied from winmsg.h.
+--- 213,226 ----
+         winwin32rootless.c (winMWExtWMDestroyFrame): Use winDestroyIcon
+       to free the icon without destroying the global icon.  
+         
+! 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 at intuit dot com>
+      
+       * winclipboard.h: Add extern prototypes for winDebug, winErrorFVerb
+       copied from winmsg.h.
+Index: xc/programs/Xserver/hw/xwin/Imakefile
+diff -c 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,269 ****
+  VENDOR_DEFINES = $(VENDOR_STRING) $(VENDOR_CONTACT) $(VERSION_STRING)
+  
+  DEFINES = $(OS_DEFINES) $(SHMDEF) $(MMAPDEF) \
+!      -DPROJECTROOT="\"$(PROJECTROOT)\""
+  
+  LinkSourceFile(stubs.c,$(SERVERSRC)/Xi)
+  SpecialCObjectRule(stubs,$(ICONFIGFILES),$(EXT_DEFINES))
+--- 263,269 ----
+  VENDOR_DEFINES = $(VENDOR_STRING) $(VENDOR_CONTACT) $(VERSION_STRING)
+  
+  DEFINES = $(OS_DEFINES) $(SHMDEF) $(MMAPDEF) \
+!      -DPROJECTROOT="\"$(PROJECTROOT)\"" -DETCX11DIR="\"$(ETCX11DIR)\""
+  
+  LinkSourceFile(stubs.c,$(SERVERSRC)/Xi)
+  SpecialCObjectRule(stubs,$(ICONFIGFILES),$(EXT_DEFINES))
+Index: xc/programs/Xserver/hw/xwin/InitOutput.c
+diff -c 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,38 ****
+  
+  #include "win.h"
+  #include "winmsg.h"
+- #ifdef XWIN_XF86CONFIG
+  #include "winconfig.h"
+- #endif
+  #include "winprefs.h"
+  #include "X11/Xlocale.h"
+  #include <mntent.h>
+--- 30,36 ----
+***************
+*** 437,445 ****
+         "\tSpecify an optional refresh rate to use in fullscreen mode\n"
+         "\twith a DirectDraw engine.\n");
+  
+!   ErrorF ("-screen scr_num [width height]\n"
+         "\tEnable screen scr_num and optionally specify a width and\n"
+!        "\theight for that screen.\n");
+  
+    ErrorF ("-lesspointer\n"
+         "\tHide the windows mouse pointer when it is over an inactive\n"
+--- 435,449 ----
+         "\tSpecify an optional refresh rate to use in fullscreen mode\n"
+         "\twith a DirectDraw engine.\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 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,640 ****
+--- 639,645 ----
+    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 -c 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,43 ****
+  
+  /* About */
+  ABOUT_BOX DIALOG DISCARDABLE  32, 32, 240, 105
+! STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE | WS_TABSTOP | DS_CENTER
+  CAPTION "About Cygwin/X"
+  FONT 8, "MS Sans Serif"
+  BEGIN
+--- 37,43 ----
+  
+  /* About */
+  ABOUT_BOX DIALOG DISCARDABLE  32, 32, 240, 105
+! STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE | WS_TABSTOP | DS_CENTERMOUSE
+  CAPTION "About Cygwin/X"
+  FONT 8, "MS Sans Serif"
+  BEGIN
+***************
+*** 59,65 ****
+  /* Depth change */
+  
+  DEPTH_CHANGE_BOX DIALOG DISCARDABLE  32, 32, 180, 100
+! STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE | DS_CENTER
+  FONT 8, "MS Sans Serif"
+  CAPTION "Cygwin/X"
+  BEGIN
+--- 59,65 ----
+  /* Depth change */
+  
+  DEPTH_CHANGE_BOX DIALOG DISCARDABLE  32, 32, 180, 100
+! STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE | DS_CENTERMOUSE
+  FONT 8, "MS Sans Serif"
+  CAPTION "Cygwin/X"
+  BEGIN
+***************
+*** 73,79 ****
+  /* Exit */
+  
+  EXIT_DIALOG DIALOG DISCARDABLE       32, 32, 180, 78
+! STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE | WS_TABSTOP | DS_CENTER
+  FONT 8, "MS Sans Serif"
+  CAPTION "Cygwin/X - Exit?"
+  BEGIN
+--- 73,79 ----
+  /* Exit */
+  
+  EXIT_DIALOG DIALOG DISCARDABLE       32, 32, 180, 78
+! STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE | WS_TABSTOP | DS_CENTERMOUSE
+  FONT 8, "MS Sans Serif"
+  CAPTION "Cygwin/X - Exit?"
+  BEGIN
+***************
+*** 94,99 ****
+--- 94,100 ----
+       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 -c 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,53 ****
+--- 48,64 ----
+  #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,389 ****
+--- 395,405 ----
+    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,419 ****
+--- 430,438 ----
+  #ifdef XWIN_MULTIWINDOW
+    Bool                       fMultiWindow;
+  #endif
++ #if defined(XWIN_MULTIWINDOW) || defined(XWIN_MULTIWINDOWEXTWM)
++   Bool                       fMultiMonitorOverride;
++ #endif
+    Bool                  fMultipleMonitors;
+    Bool                       fLessPointer;
+    Bool                       fScrollbars;
+***************
+*** 497,502 ****
+--- 516,522 ----
+    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 -c 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,436 ****
+                pErr->error_code,
+                pszErrorMsg,
+                sizeof (pszErrorMsg));
+!   ErrorF ("winClipboardErrorHandler - ERROR: \n\t%s\n", pszErrorMsg);
+! 
+    return 0;
+  }
+  
+--- 429,440 ----
+                pErr->error_code,
+                pszErrorMsg,
+                sizeof (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 -c 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,49 ****
+--- 44,50 ----
+   */
+  
+  extern Bool          g_fUseUnicode;
++ extern Bool          g_fUnicodeSupport;
+  extern void          *g_pClipboardDisplay;
+  extern Window                g_iClipboardWindow;
+  extern Atom          g_atomLastOwnedSelection;
+***************
+*** 445,451 ****
+       if (message == WM_RENDERALLFORMATS)
+         fConvertToUnicode = FALSE;
+       else
+!        fConvertToUnicode = g_fUseUnicode && (CF_UNICODETEXT == wParam);
+  
+       /* Request the selection contents */
+       iReturn = XConvertSelection (pDisplay,
+--- 446,452 ----
+       if (message == WM_RENDERALLFORMATS)
+         fConvertToUnicode = FALSE;
+       else
+!        fConvertToUnicode = g_fUnicodeSupport && (CF_UNICODETEXT == wParam);
+  
+       /* Request the selection contents */
+       iReturn = XConvertSelection (pDisplay,
+***************
+*** 521,530 ****
+       if (WIN_XEVENTS_NOTIFY != iReturn)
+         {
+           /* Paste no data, to satisfy required call to SetClipboardData */
+!          if (fConvertToUnicode)
+             SetClipboardData (CF_UNICODETEXT, NULL);
+!          else
+!            SetClipboardData (CF_TEXT, NULL);
+         }
+  
+       /* Special handling for WM_RENDERALLFORMATS */
+--- 522,530 ----
+       if (WIN_XEVENTS_NOTIFY != iReturn)
+         {
+           /* Paste no data, to satisfy required call to SetClipboardData */
+!          if (g_fUnicodeSupport)
+             SetClipboardData (CF_UNICODETEXT, NULL);
+!          SetClipboardData (CF_TEXT, NULL);
+         }
+  
+       /* Special handling for WM_RENDERALLFORMATS */
+Index: xc/programs/Xserver/hw/xwin/winclipboardxevents.c
+diff -c 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,142 ****
+             iReturn = XChangeProperty (pDisplay,
+                                        event.xselectionrequest.requestor,
+                                        event.xselectionrequest.property,
+!                                       event.xselectionrequest.target,
+!                                       sizeof (atomTargetArr[0]),
+                                        PropModeReplace,
+                                        (unsigned char *) atomTargetArr,
+                                        (sizeof (atomTargetArr)
+--- 135,142 ----
+             iReturn = XChangeProperty (pDisplay,
+                                        event.xselectionrequest.requestor,
+                                        event.xselectionrequest.property,
+!                                       XA_ATOM,
+!                                       32,
+                                        PropModeReplace,
+                                        (unsigned char *) atomTargetArr,
+                                        (sizeof (atomTargetArr)
+Index: xc/programs/Xserver/hw/xwin/winconfig.c
+diff -c 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,252 ****
+--- 247,253 ----
+      {  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,735 ****
+--- 731,857 ----
+  
+    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 -c 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,147 ****
+--- 142,149 ----
+    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,198 ****
+--- 195,212 ----
+    /* 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,263 ****
+               + 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
+      {
+--- 254,259 ----
+***************
+*** 289,308 ****
+        /* We cannot have scrollbars if we do not have a window border */
+        pScreenInfo->fScrollbars = FALSE;
+      }
+    
+!   /* 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;
+    
+  #if CYGDEBUG
+!   winDebug ("winCreateBoundingWindowWindowed - Adjusted width: %d "\
+!        "height: %d\n",
+!        iWidth, iHeight);
+  #endif
+  
+    /* Set display and screen-specific tooltip text */
+    if (g_pszQueryHost != NULL)
+--- 285,314 ----
+        /* 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 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);
+  #endif
++     }
+  
+    /* Set display and screen-specific tooltip text */
+    if (g_pszQueryHost != NULL)
+***************
+*** 322,329 ****
+                           WINDOW_CLASS,       /* Class name */
+                           szTitle,            /* Window name */
+                           dwWindowStyle,
+!                          rcWorkArea.left,    /* Horizontal position */
+!                          rcWorkArea.top,     /* Vertical position */
+                           iWidth,             /* Right edge */
+                           iHeight,            /* Bottom edge */
+                           (HWND) NULL,        /* No parent or owner window */
+--- 328,335 ----
+                           WINDOW_CLASS,       /* Class name */
+                           szTitle,            /* Window name */
+                           dwWindowStyle,
+!                          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 -c 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,148 ****
+    /* 88 */   0,              0,              0,
+    /* 89 */   0,              0,              0,
+    /* 90 */   0,              0,              0,
+!   /* 91 */   0,              0,              0,
+!   /* 92 */   0,              0,              0,
+!   /* 93 */   0,              0,              0,
+    /* 94 */   0,              0,              0,
+    /* 95 */   0,              0,              0,
+    /* 96 */   0,              0,              0,
+--- 140,148 ----
+    /* 88 */   0,              0,              0,
+    /* 89 */   0,              0,              0,
+    /* 90 */   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 -c 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,70 ****
+--- 65,71 ----
+  {
+    BOOL                       fPassKeystroke = FALSE;
+    PKBDLLHOOKSTRUCT   p = (PKBDLLHOOKSTRUCT) lParam;
++   HWND                       hwnd = GetActiveWindow(); 
+  
+    /* Pass keystrokes on to our main message loop */
+    if (iCode == HC_ACTION)
+***************
+*** 79,87 ****
+       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;
+       }
+--- 80,86 ----
+***************
+*** 107,113 ****
+        lParamKey = lParamKey | (0x80000000 & ((p->flags & LLKHF_UP) << 24));
+  
+        /* Send message to our main window that has the keyboard focus */
+!       PostMessage (g_hwndKeyboardFocus,
+                  (UINT) wParam,
+                  (WPARAM) p->vkCode,
+                  lParamKey);
+--- 106,112 ----
+        lParamKey = lParamKey | (0x80000000 & ((p->flags & LLKHF_UP) << 24));
+  
+        /* Send message to our main window that has the keyboard focus */
+!       PostMessage (hwnd,
+                  (UINT) wParam,
+                  (WPARAM) p->vkCode,
+                  lParamKey);
+Index: xc/programs/Xserver/hw/xwin/winmessages.h
+diff -c 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,531 ****
+       "WM_MBUTTONUP",
+       "WM_MBUTTONDBLCLK",
+       "WM_MOUSEWHEEL",
+!      "523",
+!      "524",
+!      "525",
+       "526",
+       "527",
+       "WM_PARENTNOTIFY",
+--- 523,531 ----
+       "WM_MBUTTONUP",
+       "WM_MBUTTONDBLCLK",
+       "WM_MOUSEWHEEL",
+!      "WM_XBUTTONDOWN",
+!      "WM_XBUTTONUP",
+!      "WM_XBUTTONDBLCLK",
+       "526",
+       "527",
+       "WM_PARENTNOTIFY",
+Index: xc/programs/Xserver/hw/xwin/winmouse.c
+diff -c 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,86 ****
+  int
+  winMouseProc (DeviceIntPtr pDeviceInt, int iState)
+  {
+!   CARD8                      map[6];
+    DevicePtr          pDevice = (DevicePtr) pDeviceInt;
+  
+    switch (iState)
+      {
+      case DEVICE_INIT:
+!       map[1] = 1;
+!       map[2] = 2;
+!       map[3] = 3;
+!       map[4] = 4;
+!       map[5] = 5;
+        InitPointerDeviceStruct (pDevice,
+                              map,
+!                             5, /* Buttons 4 and 5 are mouse wheel events */
+                              miPointerGetMotionEvents,
+                              winMouseCtrl,
+                              miPointerGetMotionBufferSize ());
+  
+  #if defined(XFree86Server) && defined(XINPUT)
+        g_winMouseButtonMap = pDeviceInt->button->map;
+--- 64,107 ----
+  int
+  winMouseProc (DeviceIntPtr pDeviceInt, int iState)
+  {
+!   int                        lngMouseButtons, i;
+!   int                        lngWheelEvents = 2;
+!   CARD8                      *map;
+    DevicePtr          pDevice = (DevicePtr) pDeviceInt;
+  
+    switch (iState)
+      {
+      case DEVICE_INIT:
+!       /* 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,
+!                             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 -c 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,181 ****
+         && prop->format == 8
+         && prop->data)
+       {
+!        len_role= strlen ((char *) prop->data);
+  
+         (*res_role) = malloc (len_role + 1);
+  
+--- 175,181 ----
+         && prop->format == 8
+         && prop->data)
+       {
+!        len_role= prop->size;
+  
+         (*res_role) = malloc (len_role + 1);
+  
+***************
+*** 185,191 ****
+             return 0; 
+           }
+  
+!        strcpy ((*res_role), prop->data);
+  
+         return 1;
+       }
+--- 185,192 ----
+             return 0; 
+           }
+  
+!        strncpy ((*res_role), prop->data, len_role);
+!        (*res_role)[len_role] = 0;
+  
+         return 1;
+       }
+***************
+*** 299,305 ****
+         && prop->type == XA_STRING
+         && prop->data)
+       {
+!        len_name = strlen ((char *) prop->data);
+  
+         (*wmName) = malloc (len_name + 1);
+         
+--- 300,306 ----
+         && prop->type == XA_STRING
+         && prop->data)
+       {
+!        len_name = prop->size;
+  
+         (*wmName) = malloc (len_name + 1);
+         
+***************
+*** 309,316 ****
+             return 0;
+           }
+  
+!        /* Add one to len_name to allow copying of trailing 0 */
+!        strncpy ((*wmName), prop->data, len_name+1);
+  
+         return 1;
+       }
+--- 310,317 ----
+             return 0;
+           }
+  
+!        strncpy ((*wmName), prop->data, len_name);
+!        (*wmName)[len_name] = 0;
+  
+         return 1;
+       }
+Index: xc/programs/Xserver/hw/xwin/winmultiwindowwindow.c
+diff -c 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,400 ****
+     * Calling winReorderWindowsMultiWindow here means our window manager
+     * (i.e. Windows Explorer) has initiative to determine Z order.
+     */
+!   winReorderWindowsMultiWindow ();
+  #else
+    /* Bail out if no window privates or window handle is invalid */
+    if (!pWinPriv || !pWinPriv->hWnd)
+--- 394,401 ----
+     * Calling winReorderWindowsMultiWindow here means our window manager
+     * (i.e. Windows Explorer) has initiative to determine Z order.
+     */
+!   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 -c 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,48 ****
+--- 43,49 ----
+  #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,186 ****
+  static Bool                     g_shutdown = FALSE;
+  static Bool                  redirectError = FALSE;
+  
+- 
+  /*
+   * PushMessage - Push a message onto the queue
+   */
+--- 181,186 ----
+***************
+*** 405,411 ****
+        /* */
+        if (xtpName.value)
+       {
+!        *ppName = strdup ((char*)xtpName.value);
+         XFree (xtpName.value);
+       }
+  
+--- 405,414 ----
+        /* */
+        if (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,1189 ****
+--- 1187,1202 ----
+    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 -c 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,633 ****
+--- 628,643 ----
+       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 -c 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,57 ****
+--- 52,106 ----
+  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,76 ****
+  void
+  winInitializeDefaultScreens (void);
+  
+- 
+  /*
+   * Process arguments on the command line
+   */
+--- 119,124 ----
+***************
+*** 112,117 ****
+--- 160,166 ----
+        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,133 ****
+--- 177,185 ----
+  #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,253 ****
+      {
+        int            iArgsProcessed = 1;
+        int            nScreenNum;
+!       int            iWidth, iHeight;
+  
+  #if CYGDEBUG
+        winDebug ("ddxProcessArgument - screen - argc: %d i: %d\n",
+--- 299,306 ----
+      {
+        int            iArgsProcessed = 1;
+        int            nScreenNum;
+!       int            iWidth, iHeight, iX, iY;
+!       int            iMonitor;
+  
+  #if CYGDEBUG
+        winDebug ("ddxProcessArgument - screen - argc: %d i: %d\n",
+***************
+*** 272,279 ****
+         return 0;
+          }
+  
+        /* Look for 'WxD' or 'W D' */
+!       if (i + 2 < argc
+         && 2 == sscanf (argv[i + 2], "%dx%d",
+                         (int *) &iWidth,
+                         (int *) &iHeight))
+--- 325,365 ----
+         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' */
+!       else if (i + 2 < argc
+         && 2 == sscanf (argv[i + 2], "%dx%d",
+                         (int *) &iWidth,
+                         (int *) &iHeight))
+***************
+*** 285,290 ****
+--- 371,440 ----
+         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,304 ****
+--- 449,466 ----
+         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,410 ****
+--- 561,576 ----
+         /* 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,462 ****
+--- 617,632 ----
+         /* 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,489 ****
+--- 648,663 ----
+         /* 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,516 ****
+--- 679,694 ----
+         /* 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,543 ****
+--- 710,725 ----
+         /* 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,571 ****
+--- 742,755 ----
+         /* 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,579 ****
+--- 758,793 ----
+      }
+  
+    /*
++    * 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,1256 ****
+--- 1468,1491 ----
+    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 -c 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,53 ****
+--- 48,54 ----
+  #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 -c 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,151 ****
+                                      &ddsd,
+                                      &pScreenPriv->pddsPrimary4,
+                                      NULL);
+    if (FAILED (ddrval))
+      {
+!       ErrorF ("winCreatePrimarySurfaceShadowDDNL - Could not create primary "
+!            "surface: %08x\n",
+!            (unsigned int) ddrval);
+        return FALSE;
+      }
+    
+--- 141,161 ----
+                                      &ddsd,
+                                      &pScreenPriv->pddsPrimary4,
+                                      NULL);
++   pScreenPriv->fRetryCreateSurface = FALSE;
+    if (FAILED (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,1060 ****
+--- 1065,1081 ----
+    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 -c 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,657 ****
+--- 652,669 ----
+        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 -c 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,878 ****
+--- 873,900 ----
+       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,996 ****
+         * 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)
+       break;
+  
+  #ifdef XKB
+--- 1012,1018 ----
+         * 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) && !g_fKeyboardHookLL)
+       break;
+  
+  #ifdef XKB
+***************
+*** 1031,1037 ****
+         * 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)
+       break;
+  
+        /* Ignore the fake Ctrl_L that follows an AltGr release */
+--- 1053,1059 ----
+         * 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) && !g_fKeyboardHookLL)
+       break;
+  
+        /* Ignore the fake Ctrl_L that follows an AltGr release */
+***************
+*** 1139,1144 ****
+--- 1161,1169 ----
+         /* 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 -c 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 ****
+! /* $XdotOrg: xc/programs/Xserver/include/globals.h,v 1.4 2004/07/31 09:14:06 kem Exp $ */
+  /* $XFree86: xc/programs/Xserver/include/globals.h,v 1.3 1999/09/25 14:38:21 dawes Exp $ */
+  
+  #ifndef _XSERV_GLOBAL_H_
+--- 1,4 ----
+! /* $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,64 ****
+  #endif
+  
+  #ifdef PANORAMIX
+- extern Bool noPanoramiXExtension;
+  extern Bool PanoramiXMapped;
+  extern Bool PanoramiXVisibilityNotifySent;
+  extern Bool PanoramiXWindowExposureSent;
+  extern Bool PanoramiXOneExposeRequest;
+  #endif
+  
+  #ifdef RENDER
+  extern Bool noRenderExtension;
+  #endif
+  
+  #ifdef XEVIE
+  extern Bool noXevieExtension;
+  #endif
+  
+! #ifdef COMPOSITE
+! extern Bool noCompositeExtension;
+  #endif
+  
+! #endif /* _XSERV_GLOBAL_H_ */
+--- 42,204 ----
+  #endif
+  
+  #ifdef PANORAMIX
+  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 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_ */
+Index: xc/programs/Xserver/mi/micmap.c
+diff -c 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,64 ****
+  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);
+  }
+  
+  void
+--- 55,65 ----
+  int
+  miListInstalledColormaps(ScreenPtr pScreen, Colormap *pmaps)
+  {
+!     if (miInstalledMaps[pScreen->myNum]) {
+!      *pmaps = miInstalledMaps[pScreen->myNum]->mid;
+!      return (1);
+!     }
+!     return 0;
+  }
+  
+  void
+Index: xc/programs/Xserver/mi/miinitext.c
+diff -c 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 ****
+! /* $XdotOrg: xc/programs/Xserver/mi/miinitext.c,v 1.12 2004/08/12 08:45:33 anholt Exp $ */
+  /* $XFree86: xc/programs/Xserver/mi/miinitext.c,v 3.67 2003/01/12 02:44:27 dawes Exp $ */
+  /***********************************************************
+  
+--- 1,4 ----
+! /* $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,80 ****
+  #undef SCREENSAVER
+  #undef XIDLE
+  #undef XRECORD
+- #undef DBE
+  #undef XF86VIDMODE
+  #undef XF86MISC
+  #undef XFreeXDGA
+--- 74,79 ----
+***************
+*** 88,108 ****
+  #undef XEVIE
+  #endif /* PRINT_ONLY_SERVER */
+  
+! #ifdef PANORAMIX
+! extern Bool noPanoramiXExtension;
+! #endif
+  extern Bool noTestExtensions;
+! #ifdef XKB
+! extern Bool noXkbExtension;
+  #endif
+  #ifdef RENDER
+  extern Bool noRenderExtension;
+  #endif
+  #ifdef XEVIE
+  extern Bool noXevieExtension;
+  #endif
+! #ifdef COMPOSITE
+! extern Bool noCompositeExtension;
+  #endif
+  
+  #ifndef XFree86LOADER
+--- 87,209 ----
+  #undef XEVIE
+  #endif /* PRINT_ONLY_SERVER */
+  
+! 
+  extern Bool noTestExtensions;
+! 
+! #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 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,319 ****
+  
+  static ExtensionToggle ExtensionToggleList[] =
+  {
+!     { "XTEST", &noTestExtensions },
+! #ifdef PANORAMIX
+!     { "XINERAMA", &noPanoramiXExtension },
+  #endif
+  #ifdef RENDER
+      { "RENDER", &noRenderExtension },
+  #endif
+! #ifdef XKB
+!     { "XKEYBOARD", &noXkbExtension },
+  #endif
+  #ifdef XEVIE
+      { "XEVIE", &noXevieExtension },
+  #endif
+! #ifdef COMPOSITE
+!     { "Composite", &noCompositeExtension },
+  #endif
+      { NULL, NULL }
+  };
+--- 400,517 ----
+  
+  static ExtensionToggle ExtensionToggleList[] =
+  {
+!     /* 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 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 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,490 ****
+  # endif
+  #endif
+  #ifdef BEZIER
+!     BezierExtensionInit();
+  #endif
+  #ifdef XTESTEXT1
+      if (!noTestExtensions) XTestExtension1Init();
+  #endif
+  #ifdef SHAPE
+!     ShapeExtensionInit();
+  #endif
+  #ifdef MITSHM
+!     ShmExtensionInit();
+  #endif
+  #ifdef EVI
+!     EVIExtensionInit();
+  #endif
+  #ifdef PEXEXT
+!     PexExtensionInit();
+  #endif
+  #ifdef MULTIBUFFER
+!     MultibufferExtensionInit();
+  #endif
+  #if defined(XINPUT) && !defined(NO_HW_ONLY_EXTS)
+!     XInputExtensionInit();
+  #endif
+  #ifdef XTEST
+      if (!noTestExtensions) XTestExtensionInit();
+  #endif
+  #ifdef BIGREQS
+!     BigReqExtensionInit();
+  #endif
+  #ifdef MITMISC
+!     MITMiscExtensionInit();
+  #endif
+  #ifdef XIDLE
+!     XIdleExtensionInit();
+  #endif
+  #ifdef XTRAP
+      if (!noTestExtensions) DEC_XTRAPInit();
+  #endif
+  #if defined(SCREENSAVER) && !defined(PRINT_ONLY_SERVER)
+!     ScreenSaverExtensionInit ();
+  #endif
+  #ifdef XV
+!     XvExtensionInit();
+!     XvMCExtensionInit();
+  #endif
+  #ifdef XIE
+!     XieInit();
+  #endif
+  #ifdef XSYNC
+!     SyncExtensionInit();
+  #endif
+  #if defined(XKB) && !defined(PRINT_ONLY_SERVER) && !defined(NO_HW_ONLY_EXTS)
+      if (!noXkbExtension) XkbExtensionInit();
+  #endif
+  #ifdef XCMISC
+!     XCMiscExtensionInit();
+  #endif
+  #ifdef XRECORD
+      if (!noTestExtensions) RecordExtensionInit(); 
+  #endif
+  #ifdef LBX
+!     LbxExtensionInit();
+  #endif
+  #ifdef DBE
+!     DbeExtensionInit();
+  #endif
+  #ifdef XAPPGROUP
+!     XagExtensionInit();
+  #endif
+  #ifdef XCSECURITY
+!     SecurityExtensionInit();
+  #endif
+  #ifdef XPRINT
+!     XpExtensionInit();
+  #endif
+  #ifdef TOGCUP
+!     XcupExtensionInit();
+  #endif
+  #if defined(DPMSExtension) && !defined(NO_HW_ONLY_EXTS)
+!     DPMSExtensionInit();
+  #endif
+  #ifdef FONTCACHE
+!     FontCacheExtensionInit();
+  #endif
+  #ifdef XF86BIGFONT
+!     XFree86BigfontExtensionInit();
+  #endif
+  #if !defined(PRINT_ONLY_SERVER) && !defined(NO_HW_ONLY_EXTS)
+  #if defined(XF86VIDMODE)
+!     XFree86VidModeExtensionInit();
+  #endif
+  #if defined(XF86MISC)
+!     XFree86MiscExtensionInit();
+  #endif
+  #if defined(XFreeXDGA)
+!     XFree86DGAExtensionInit();
+  #endif
+  #ifdef XF86DRI
+!     XFree86DRIExtensionInit();
+  #endif
+  #endif
+  #ifdef GLXEXT
+  #ifndef __DARWIN__
+!     GlxExtensionInit();
+  #else
+!     DarwinGlxExtensionInit();
+  #endif
+  #endif
+  #ifdef DPSEXT
+  #ifndef XPRINT
+!     DPSExtensionInit();
+  #endif
+  #endif
+  #ifdef XFIXES
+      /* must be before Render to layer DisplayCursor correctly */
+!     XFixesExtensionInit();
+  #endif
+  #ifdef RENDER
+      if (!noRenderExtension) RenderExtensionInit();
+  #endif
+  #ifdef RANDR
+!     RRExtensionInit();
+  #endif
+  #ifdef RES
+!     ResExtensionInit();
+  #endif
+  #ifdef DMXEXT
+!     DMXExtensionInit();
+  #endif
+  #ifdef XEVIE
+      if (!noXevieExtension) XevieExtensionInit();
+--- 555,690 ----
+  # endif
+  #endif
+  #ifdef BEZIER
+!     if (!noBezierExtension) BezierExtensionInit();
+  #endif
+  #ifdef XTESTEXT1
+      if (!noTestExtensions) XTestExtension1Init();
+  #endif
+  #ifdef SHAPE
+!     if (!noShapeExtension) ShapeExtensionInit();
+  #endif
+  #ifdef MITSHM
+!     if (!noMITShmExtension) ShmExtensionInit();
+  #endif
+  #ifdef EVI
+!     if (!noEVIExtension) EVIExtensionInit();
+  #endif
+  #ifdef PEXEXT
+!     if (!noPexExtension) PexExtensionInit();
+  #endif
+  #ifdef MULTIBUFFER
+!     if (!noMultibufferExtension) MultibufferExtensionInit();
+  #endif
+  #if defined(XINPUT) && !defined(NO_HW_ONLY_EXTS)
+!     if (!noXInputExtension) XInputExtensionInit();
+  #endif
+  #ifdef XTEST
+      if (!noTestExtensions) XTestExtensionInit();
+  #endif
+  #ifdef BIGREQS
+!     if (!noBigReqExtension) BigReqExtensionInit();
+  #endif
+  #ifdef MITMISC
+!     if (!noMITMiscExtension) MITMiscExtensionInit();
+  #endif
+  #ifdef XIDLE
+!     if (!noXIdleExtension) XIdleExtensionInit();
+  #endif
+  #ifdef XTRAP
+      if (!noTestExtensions) DEC_XTRAPInit();
+  #endif
+  #if defined(SCREENSAVER) && !defined(PRINT_ONLY_SERVER)
+!     if (!noScreenSaverExtension) ScreenSaverExtensionInit ();
+  #endif
+  #ifdef XV
+!     if (!noXvExtension) {
+!       XvExtensionInit();
+!       XvMCExtensionInit();
+!     }
+  #endif
+  #ifdef XIE
+!     if (!noXie) XieInit();
+  #endif
+  #ifdef XSYNC
+!     if (!noSyncExtension) SyncExtensionInit();
+  #endif
+  #if defined(XKB) && !defined(PRINT_ONLY_SERVER) && !defined(NO_HW_ONLY_EXTS)
+      if (!noXkbExtension) XkbExtensionInit();
+  #endif
+  #ifdef XCMISC
+!     if (!noXCMiscExtension) XCMiscExtensionInit();
+  #endif
+  #ifdef XRECORD
+      if (!noTestExtensions) RecordExtensionInit(); 
+  #endif
+  #ifdef LBX
+!     if (!noLbxExtension) LbxExtensionInit();
+  #endif
+  #ifdef DBE
+!     if (!noDbeExtension) DbeExtensionInit();
+  #endif
+  #ifdef XAPPGROUP
+!     if (!noXagExtension) XagExtensionInit();
+  #endif
+  #ifdef XCSECURITY
+!     if (!noSecurityExtension) SecurityExtensionInit();
+  #endif
+  #ifdef XPRINT
+!     XpExtensionInit(); /* server-specific extension, cannot be disabled */
+  #endif
+  #ifdef TOGCUP
+!     if (!noXcupExtension) XcupExtensionInit();
+  #endif
+  #if defined(DPMSExtension) && !defined(NO_HW_ONLY_EXTS)
+!     if (!noDPMSExtension) DPMSExtensionInit();
+  #endif
+  #ifdef FONTCACHE
+!     if (!noFontCacheExtension) FontCacheExtensionInit();
+  #endif
+  #ifdef XF86BIGFONT
+!     if (!noXFree86BigfontExtension) XFree86BigfontExtensionInit();
+  #endif
+  #if !defined(PRINT_ONLY_SERVER) && !defined(NO_HW_ONLY_EXTS)
+  #if defined(XF86VIDMODE)
+!     if (!noXFree86VidModeExtension) XFree86VidModeExtensionInit();
+  #endif
+  #if defined(XF86MISC)
+!     if (!noXFree86MiscExtension) XFree86MiscExtensionInit();
+  #endif
+  #if defined(XFreeXDGA)
+!     if (!noXFree86DGAExtension) XFree86DGAExtensionInit();
+  #endif
+  #ifdef XF86DRI
+!     if (!noXFree86DRIExtension) XFree86DRIExtensionInit();
+  #endif
+  #endif
+  #ifdef GLXEXT
+  #ifndef __DARWIN__
+!     if (!noGlxExtension) GlxExtensionInit();
+  #else
+!     if (!noGlxExtension) DarwinGlxExtensionInit();
+  #endif
+  #endif
+  #ifdef DPSEXT
+  #ifndef XPRINT
+!     if (!noDPSExtension) DPSExtensionInit();
+  #endif
+  #endif
+  #ifdef XFIXES
+      /* must be before Render to layer DisplayCursor correctly */
+!     if (!noXFixesExtension) XFixesExtensionInit();
+  #endif
+  #ifdef RENDER
+      if (!noRenderExtension) RenderExtensionInit();
+  #endif
+  #ifdef RANDR
+!     if (!noRRExtension) RRExtensionInit();
+  #endif
+  #ifdef RES
+!     if (!noResExtension) ResExtensionInit();
+  #endif
+  #ifdef DMXEXT
+!     DMXExtensionInit(); /* server-specific extension, cannot be disabled */
+  #endif
+  #ifdef XEVIE
+      if (!noXevieExtension) XevieExtensionInit();
+***************
+*** 493,499 ****
+      if (!noCompositeExtension) CompositeExtensionInit();
+  #endif
+  #ifdef DAMAGE
+!     DamageExtensionInit();
+  #endif
+  }
+  
+--- 693,699 ----
+      if (!noCompositeExtension) CompositeExtensionInit();
+  #endif
+  #ifdef DAMAGE
+!     if (!noDamageExtension) DamageExtensionInit();
+  #endif
+  }
+  
+***************
+*** 511,606 ****
+  }
+  
+  #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 },
+  #endif
+  #ifdef XTESTEXT1
+      { XTestExtension1Init, "XTEST1", &noTestExtensions, NULL, NULL },
+  #endif
+  #ifdef MITSHM
+!     { ShmExtensionInit, SHMNAME, NULL, NULL, NULL },
+  #endif
+  #ifdef XINPUT
+!     { XInputExtensionInit, "XInputExtension", NULL, NULL, NULL },
+  #endif
+  #ifdef XTEST
+      { XTestExtensionInit, XTestExtensionName, &noTestExtensions, NULL, NULL },
+  #endif
+  #ifdef XIDLE
+!     { XIdleExtensionInit, "XIDLE", NULL, NULL, NULL },
+  #endif
+  #ifdef XKB
+      { XkbExtensionInit, XkbName, &noXkbExtension, NULL, NULL },
+  #endif
+  #ifdef LBX
+!     { LbxExtensionInit, LBXNAME, NULL, NULL, NULL },
+  #endif
+  #ifdef XAPPGROUP
+!     { XagExtensionInit, XAGNAME, NULL, NULL, NULL },
+  #endif
+  #ifdef XCSECURITY
+!     { SecurityExtensionInit, SECURITY_EXTENSION_NAME, NULL, NULL, NULL },
+  #endif
+  #ifdef XPRINT
+      { XpExtensionInit, XP_PRINTNAME, NULL, NULL, NULL },
+--- 711,747 ----
+  }
+  
+  #else /* XFree86LOADER */
+  /* List of built-in (statically linked) extensions */
+  static ExtensionModule staticExtensions[] = {
+  #ifdef BEZIER
+!     { BezierExtensionInit, "BEZIER", &noBezierExtension, NULL, NULL },
+  #endif
+  #ifdef XTESTEXT1
+      { XTestExtension1Init, "XTEST1", &noTestExtensions, NULL, NULL },
+  #endif
+  #ifdef MITSHM
+!     { ShmExtensionInit, SHMNAME, &noMITShmExtension, NULL, NULL },
+  #endif
+  #ifdef XINPUT
+!     { XInputExtensionInit, "XInputExtension", &noXInputExtension, NULL, NULL },
+  #endif
+  #ifdef XTEST
+      { XTestExtensionInit, XTestExtensionName, &noTestExtensions, NULL, NULL },
+  #endif
+  #ifdef XIDLE
+!     { XIdleExtensionInit, "XIDLE", &noXIdleExtension, NULL, NULL },
+  #endif
+  #ifdef XKB
+      { XkbExtensionInit, XkbName, &noXkbExtension, NULL, NULL },
+  #endif
+  #ifdef LBX
+!     { LbxExtensionInit, LBXNAME, &noLbxExtension, NULL, NULL },
+  #endif
+  #ifdef XAPPGROUP
+!     { XagExtensionInit, XAGNAME, &noXagExtension, NULL, NULL },
+  #endif
+  #ifdef XCSECURITY
+!     { SecurityExtensionInit, SECURITY_EXTENSION_NAME, &noSecurityExtension, NULL, NULL },
+  #endif
+  #ifdef XPRINT
+      { XpExtensionInit, XP_PRINTNAME, NULL, NULL, NULL },
+***************
+*** 610,631 ****
+  #endif
+  #ifdef XFIXES
+      /* must be before Render to layer DisplayCursor correctly */
+!     { XFixesExtensionInit, "XFIXES", NULL, NULL, NULL },
+  #endif
+  #ifdef XF86BIGFONT
+!     { XFree86BigfontExtensionInit, XF86BIGFONTNAME, NULL, NULL, NULL },
+  #endif
+  #ifdef RENDER
+      { RenderExtensionInit, "RENDER", &noRenderExtension, NULL, NULL },
+  #endif
+  #ifdef RANDR
+!     { RRExtensionInit, "RANDR", NULL, NULL, NULL },
+  #endif
+  #ifdef COMPOSITE
+      { CompositeExtensionInit, "COMPOSITE", &noCompositeExtension, NULL },
+  #endif
+  #ifdef DAMAGE
+!     { DamageExtensionInit, "DAMAGE", NULL, NULL },
+  #endif
+  #ifdef XEVIE
+      { XevieExtensionInit, "XEVIE", &noXevieExtension, NULL },
+--- 751,772 ----
+  #endif
+  #ifdef XFIXES
+      /* must be before Render to layer DisplayCursor correctly */
+!     { XFixesExtensionInit, "XFIXES", &noXFixesExtension, NULL, NULL },
+  #endif
+  #ifdef XF86BIGFONT
+!     { XFree86BigfontExtensionInit, XF86BIGFONTNAME, &noXFree86BigfontExtension, NULL, NULL },
+  #endif
+  #ifdef RENDER
+      { RenderExtensionInit, "RENDER", &noRenderExtension, NULL, NULL },
+  #endif
+  #ifdef RANDR
+!     { RRExtensionInit, "RANDR", &noRRExtension, NULL, NULL },
+  #endif
+  #ifdef COMPOSITE
+      { CompositeExtensionInit, "COMPOSITE", &noCompositeExtension, NULL },
+  #endif
+  #ifdef DAMAGE
+!     { DamageExtensionInit, "DAMAGE", &noDamageExtension, NULL },
+  #endif
+  #ifdef XEVIE
+      { XevieExtensionInit, "XEVIE", &noXevieExtension, NULL },
+Index: xc/programs/Xserver/miext/damage/Imakefile
+diff -c 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,15 ****
+  #endif
+  #endif
+  
+! #if (defined(XWinServer) && XWinServer && BuildXWinMultiWindowExtWM) || \
+!     (defined(XDarwinServer) && XDarwinServer && DarwinQuartzSupport)
+  DEFINES = -DROOTLESS_WORKAROUND
+  #endif
+  
+--- 8,14 ----
+  #endif
+  #endif
+  
+! #if BuildRootless
+  DEFINES = -DROOTLESS_WORKAROUND
+  #endif
+  
+Index: xc/programs/Xserver/miext/damage/damage.c
+diff -c 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,1355 ****
+      DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+  
+      if (checkGCDamage (pDrawable, pGC))
+!      damageText (pDrawable, pGC, x, y, (unsigned long) count, chars,
+                   Linear8Bit, TT_POLY8);
+      else
+       x = (*pGC->ops->PolyText8)(pDrawable, pGC, x, y, count, chars);
+--- 1349,1355 ----
+      DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+  
+      if (checkGCDamage (pDrawable, pGC))
+!      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,1374 ****
+      DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+  
+      if (checkGCDamage (pDrawable, pGC))
+!      damageText (pDrawable, pGC, x, y, (unsigned long) count, (char *) chars,
+                   FONTLASTROW(pGC->font) == 0 ? Linear16Bit : TwoD16Bit,
+                   TT_POLY16);
+      else
+--- 1368,1374 ----
+      DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+  
+      if (checkGCDamage (pDrawable, pGC))
+!      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 -c 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,679 ****
+      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);
+!     }
+  }
+  #endif
+--- 663,673 ----
+      if (!DPMSEnabled)
+          return;
+  
+!     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 -c 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 ****
+! /* $XdotOrg: xc/programs/Xserver/os/utils.c,v 1.6 2004/08/11 22:27:50 kem Exp $ */
+  /* $Xorg: utils.c,v 1.5 2001/02/09 02:05:24 xorgcvs Exp $ */
+  /*
+  
+--- 1,4 ----
+! /* $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,126 ****
+--- 119,244 ----
+  
+  #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,151 ****
+  #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;
+--- 246,259 ----
+***************
+*** 553,559 ****
+      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");
+  #ifdef PANORAMIX
+      ErrorF("+xinerama              Enable XINERAMA extension\n");
+      ErrorF("-xinerama              Disable XINERAMA extension\n");
+--- 661,667 ----
+      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");
+  #ifdef PANORAMIX
+      ErrorF("+xinerama              Enable XINERAMA extension\n");
+      ErrorF("-xinerama              Disable XINERAMA extension\n");
+***************
+*** 900,910 ****
+           defaultBackingStore = WhenMapped;
+          else if ( strcmp( argv[i], "-maxbigreqsize") == 0) {
+               if(++i < argc) {
+!                  int reqSizeArg = atoi(argv[i]);
+  
+                   /* Request size > 128MB does not make much sense... */
+!                  if( reqSizeArg > 0 && reqSizeArg < 128 ) {
+!                      maxBigRequestSize = (reqSizeArg * 1048576) - 1;
+                   }
+                   else
+                   {
+--- 1008,1018 ----
+           defaultBackingStore = WhenMapped;
+          else if ( strcmp( argv[i], "-maxbigreqsize") == 0) {
+               if(++i < argc) {
+!                  long reqSizeArg = atol(argv[i]);
+  
+                   /* Request size > 128MB does not make much sense... */
+!                  if( reqSizeArg > 0L && reqSizeArg < 128L ) {
+!                      maxBigRequestSize = (reqSizeArg * 1048576L) - 1L;
+                   }
+                   else
+                   {
+Index: xc/programs/mkfontscale/mkfontscale.c
+diff -c 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,25 ****
+    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 $ */
+  /* $XFree86: xc/programs/mkfontscale/mkfontscale.c,v 1.21 2003/12/10 02:58:07 dawes Exp $ */
+  
+  #include <stdio.h>
+--- 19,25 ----
+    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.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,69 ****
+  #endif
+  
+  char *encodings_array[] =
+!     { "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",
+--- 63,70 ----
+  #endif
+  
+  char *encodings_array[] =
+!     { "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 -c 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 ****
+! /* $XdotOrg: xc/programs/xdm/resource.c,v 1.2 2004/04/23 19:54:42 eich Exp $ */
+  /* $Xorg: resource.c,v 1.4 2001/02/09 02:05:40 xorgcvs Exp $ */
+  /*
+  
+--- 1,4 ----
+! /* $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,243 ****
+  #if !defined(ARC4_RANDOM)
+  { "randomFile",      "RandomFile",   DM_STRING,      &randomFile,
+                               DEF_RANDOM_FILE} ,
+! { "prgndSocket", "PrngdSocket", DM_STRING,   &prngdSocket, 
+                               DEF_PRNGD_SOCKET},
+  { "prngdPort", "PrngdPort",  DM_INT,         (char **) &prngdPort,
+                               DEF_PRNGD_PORT},
+--- 237,243 ----
+  #if !defined(ARC4_RANDOM)
+  { "randomFile",      "RandomFile",   DM_STRING,      &randomFile,
+                               DEF_RANDOM_FILE} ,
+! { "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 -c 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,52 ****
+  #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
+--- 46,51 ----
+Index: xc/programs/xkbcomp/rules/Imakefile
+diff -c 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 ****
+  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 $
+  
+      DATAFILES = README sgi xorg sun
+      LISTFILES = sgi.lst xorg.lst xorg-it.lst sun.lst xorg.xml
+--- 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.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,13 ****
+--- 10,15 ----
+  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 -c 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,22 ****
+  // 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.
+  
+  // Acer
+  
+--- 16,22 ----
+  // 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: xorg, xorg.lst and xorg.xml.
+  
+  // Acer
+  
+Index: xc/programs/xkbcomp/symbols/macintosh/us
+diff -c 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,152 ****
+--- 147,153 ----
+  
+      include "compose(rwin)"
+      include "apple(extended)"
++     include "srvr_ctrl(xfree86)"
+  
+  // *** FIXME
+  //    key <LSGT> {   [ quoteleft,    asciitilde      ]       };
+Index: xc/programs/xlsfonts/Imakefile
+diff -c 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 ****
+  XCOMM $Xorg: Imakefile,v 1.3 2000/08/17 19:54:53 cpqbld Exp $
+  
+  
+  
+- XCOMM $XFree86$
+  
+          DEPLIBS = $(DEPXONLYLIB)
+! LOCAL_LIBRARIES = $(XONLYLIB)
+             SRCS = xlsfonts.c dsimple.c
+             OBJS = xlsfonts.o dsimple.o
+  
+  ComplexProgramTarget(xlsfonts)
+--- 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 */
+  
+  
+          DEPLIBS = $(DEPXONLYLIB)
+! 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 -c 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,46 ****
+--- 41,49 ----
+   * Written by Mark Lillibridge.   Last updated 7/1/87
+   */
+  
++ #ifdef BUILD_PRINTSUPPORT
++ #include <X11/XprintUtil/xprintutil.h>
++ #endif /* BUILD_PRINTSUPPORT */
+  #include "dsimple.h"
+  
+  /*
+***************
+*** 55,63 ****
+  
+  
+  /* This stuff is defined in the calling program by just_display.h */
+! char *program_name = "unknown_program";
+! Display *dpy;
+! int screen;
+  
+  static void _bitmap_error(int, char *);
+  
+--- 58,70 ----
+  
+  
+  /* This stuff is defined in the calling program by just_display.h */
+! 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,136 ****
+--- 138,180 ----
+  }
+  
+  
++ #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,170 ****
+  int *argc;      /* MODIFIED */
+  char **argv;    /* MODIFIED */
+  {
+!      dpy = Open_Display (Get_Display_Name(argc, argv));
+!      screen = DefaultScreen(dpy);
+  }
+  
+  
+--- 207,266 ----
+  int *argc;      /* MODIFIED */
+  char **argv;    /* MODIFIED */
+  {
+!         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,521 ****
+       vfprintf(stderr, msg, args);
+       va_end(args);
+       fprintf(stderr, "\n");
+!      exit(1);
+  }
+--- 613,618 ----
+       vfprintf(stderr, msg, args);
+       va_end(args);
+       fprintf(stderr, "\n");
+!         Close_Display();
+!      exit(EXIT_FAILURE);
+  }
+Index: xc/programs/xlsfonts/dsimple.h
+diff -c 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,49 ****
+--- 39,61 ----
+   * 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,60 ****
+--- 65,76 ----
+  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 -c 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,437 ****
+  #include <X11/Xos.h>
+  #include <stdio.h>
+  #include <stdlib.h>
+  #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 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;
+  typedef struct {
+!      char            *name;
+!      XFontStruct     *info;
+  } FontList;
+- FontList     *font_list;
+  
+  
+! static void get_list(char *);
+  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;
+  }
+  
+  
+  
+  /* ARGSUSED */
+! static int IgnoreError(disp, event)
+!     Display *disp;
+!     XErrorEvent *event;
+  {
+      return 0;
+  }
+--- 31,605 ----
+  #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 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
+  
+! 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;
+! #ifdef BUILD_PRINTSUPPORT
+!   char           *listfonts_modes;
+! #endif /* BUILD_PRINTSUPPORT */
+  } FontList;
+  
++ static FontList *font_list = NULL;
+  
+! /* 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 **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(Display *disp, XErrorEvent *event)
+  {
+      return 0;
+  }
+***************
+*** 446,453 ****
+  
+  #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); }
+  
+  
+  static char* stringValued [] = { /* values are atoms */
+--- 614,621 ----
+  
+  #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); }
+  
+  
+  static char* stringValued [] = { /* values are atoms */
+***************
+*** 474,480 ****
+--- 642,655 ----
+      "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,495 ****
+       NULL
+      };
+  
+! static void PrintProperty (prop)
+!     XFontProp *prop;
+  {
+      char *atom, *value;
+      char nosuch[40];
+--- 663,670 ----
+       NULL
+      };
+  
+! static
+! void PrintProperty(XFontProp *prop)
+  {
+      char *atom, *value;
+      char nosuch[40];
+***************
+*** 498,506 ****
+  
+      atom = XGetAtomName(dpy, prop->name);
+      if (!atom) {
+!      atom = nosuch;
+!      nosuch[0] = '\0';
+!      (void)sprintf (atom, "No such atom = %ld", prop->name);
+      }
+      printf ("      %s", atom);
+  
+--- 673,681 ----
+  
+      atom = XGetAtomName(dpy, prop->name);
+      if (!atom) {
+!         atom = nosuch;
+!         nosuch[0] = '\0';
+!         (void)sprintf (atom, "No such atom = %ld", prop->name);
+      }
+      printf ("      %s", atom);
+  
+***************
+*** 510,529 ****
+      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 (atom != nosuch) XFree (atom);
+      XSetErrorHandler (oldhandler);
+--- 685,704 ----
+      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 (atom != nosuch) XFree (atom);
+      XSetErrorHandler (oldhandler);
+***************
+*** 531,538 ****
+  
+  
+  static void
+! ComputeFontType (fs)
+!     XFontStruct *fs;
+  {
+      int i;
+      Bool char_cell = True;
+--- 706,712 ----
+  
+  
+  static void
+! ComputeFontType(XFontStruct *fs)
+  {
+      int i;
+      Bool char_cell = True;
+***************
+*** 542,607 ****
+  
+      printf ("  font type:\t\t");
+      if (fs->min_bounds.width != fs->max_bounds.width) {
+!      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;
+!          }
+!      }
+      }
+  
+      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";
+!              }
+!          }
+!      }
+      }
+  
+      printf ("%s", char_cell ? "Character Cell" : "Monospaced");
+      if (reason) printf (" (%s)", reason);
+      printf ("\n");
+!      
+      return;
+  }
+  
+  
+  static void
+! print_character_metrics (info)
+!     register XFontStruct *info;
+  {
+      register XCharStruct *pc = info->per_char;
+      register int i, j;
+--- 716,780 ----
+  
+      printf ("  font type:\t\t");
+      if (fs->min_bounds.width != fs->max_bounds.width) {
+!         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;
+!             }
+!         }
+      }
+  
+      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";
+!                 }
+!             }
+!         }
+      }
+  
+      printf ("%s", char_cell ? "Character Cell" : "Monospaced");
+      if (reason) printf (" (%s)", reason);
+      printf ("\n");
+!         
+      return;
+  }
+  
+  
+  static void
+! print_character_metrics(register XFontStruct *info)
+  {
+      register XCharStruct *pc = info->per_char;
+      register int i, j;
+***************
+*** 610,658 ****
+      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;
+      }
+  }
+  
+! 
+! void
+! do_query_font (dpy, name)
+!     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;
+      }
+      printf ("name:  %s\n", name ? name : "(nil)");
+      printf ("  direction:\t\t%s\n", ((info->direction == FontLeftToRight)
+!                                   ? "left to right" : "right to left"));
+      printf ("  indexing:\t\t%s\n", 
+!          ((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);
+      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);
+      printf ("  all chars exist:\t%s\n",
+!      (info->all_chars_exist) ? "yes" : "no");
+      printf ("  default char:\t\t0x%04x (%d)\n",
+!          info->default_char, info->default_char);
+      printf ("  ascent:\t\t%d\n", info->ascent);
+      printf ("  descent:\t\t%d\n", info->descent);
+      ComputeFontType (info);
+--- 783,828 ----
+      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;
+      }
+  }
+  
+! 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;
+      }
+      printf ("name:  %s\n", name ? name : "(nil)");
+      printf ("  direction:\t\t%s\n", ((info->direction == FontLeftToRight)
+!                                      ? "left to right" : "right to left"));
+      printf ("  indexing:\t\t%s\n", 
+!             ((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);
+      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);
+      printf ("  all chars exist:\t%s\n",
+!         (info->all_chars_exist) ? "yes" : "no");
+      printf ("  default char:\t\t0x%04x (%d)\n",
+!             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,670 ****
+      PrintBounds ("min", &info->min_bounds);
+      PrintBounds ("max", &info->max_bounds);
+      if (info->per_char && long_list >= L_VERYLONG) 
+!       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]);
+      printf ("\n");
+  
+      XFreeFontInfo (NULL, info, 1);
+  }
+--- 830,842 ----
+      PrintBounds ("min", &info->min_bounds);
+      PrintBounds ("max", &info->max_bounds);
+      if (info->per_char && long_list >= L_VERYLONG) 
+!         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]);
+      printf ("\n");
+  
+      XFreeFontInfo (NULL, info, 1);
+  }
++ 
++ 
+Index: xc/programs/xlsfonts/xlsfonts.man
+diff -c 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 ****
+! .\" $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__
+  .SH NAME
+  xlsfonts \- server font list displayer for X
+  .SH SYNOPSIS
+! .B xlsfonts
+! [\-options ...] [\-fn pattern]
+  .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.
+  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
+  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
+  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
+  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"
+  .SH ENVIRONMENT
+! .TP 8
+! .B DISPLAY
+! to get the default host and display to use.
+  .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.
+  .SH AUTHOR
+! Mark Lillibridge, MIT Project Athena; Jim Fulton, MIT X Consortium;
+! Phil Karlton, SGI
+--- 1,175 ----
+! .\" -*- coding: us-ascii -*-
+! .TH xlsfonts __appmansuffix__ "8 October 2004"  
+  .SH NAME
+  xlsfonts \- server font list displayer for X
+  .SH SYNOPSIS
+! .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
+! 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
+! .TP 
+! \fB\-display \fIhost:dpy\fB\fR 
+  This option specifies the X server to contact.
+! .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 
+! \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.
+  .SH "SEE ALSO"
+! \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 
+! \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.
+  .SH AUTHOR
+! 
+! Mark Lillibridge
+! .PP
+! Jim Fulton
+! .PP
+! Phil Karlton
+! .PP
+! Roland Mainz
+! 
+Index: xc/programs/xlsfonts/xlsfonts.sgml
+diff -c /dev/null xc/programs/xlsfonts/xlsfonts.sgml:1.2.4.2
+*** /dev/null  Sat Feb  5 21:34:55 2005
+--- xc/programs/xlsfonts/xlsfonts.sgml Wed Dec 15 07:17:48 2004
+***************
+*** 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 -c 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,299 ****
+--- 294,303 ----
+      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 -c 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,174 ****
+--- 169,178 ----
+      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,220 ****
+        strcpy(path,manpath);
+      }
+  
+!     sprintf(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);
+  #else
+!     sprintf(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);
+        PopupWarning(man_globals, error_buf);
+      }
+  
+--- 209,225 ----
+        strcpy(path,manpath);
+      }
+  
+!     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. */
+!     snprintf(cmdbuf, sizeof(cmdbuf), APROPOS_FORMAT, search_string, mantmp);
+  #else
+!     snprintf(cmdbuf, sizeof(cmdbuf), APROPOS_FORMAT, path, search_string, mantmp);
+  #endif
+  
+      if(system(cmdbuf) != 0) {        /* execute search. */
+!      snprintf(error_buf, sizeof(error_buf), "Something went wrong trying to run %s\n",cmdbuf);
+        PopupWarning(man_globals, error_buf);
+      }
+  
+***************
+*** 232,238 ****
+  
+      unlink(mantmp);
+  
+!     sprintf(string_buf,"%s: nothing appropriate", search_string);
+  
+      /*
+       * Check first LOOKLINES lines for "nothing appropriate".
+--- 237,243 ----
+  
+      unlink(mantmp);
+  
+!     snprintf(string_buf, sizeof(string_buf), "%s: nothing appropriate", search_string);
+  
+      /*
+       * Check first LOOKLINES lines for "nothing appropriate".
+***************
+*** 263,276 ****
+        return(NULL);
+      }
+    
+!     strcpy(man_globals->manpage_title,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);
+        ChangeLabel(man_globals->label, string_buf);
+        if (man_globals->label == NULL)
+       PopupWarning(man_globals, string_buf);
+--- 268,282 ----
+        return(NULL);
+      }
+    
+!     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) {
+!       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 -c 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,94 ****
+      int i;
+      char *cp;
+  
+!     len = strlen (buffer);
+! 
+      for (i = 0; i < len; i++) {              /* look for blank lines */
+       register char c = buffer[i];
+       if (!(isspace(c) || c == '\n')) break;
+--- 87,98 ----
+      int i;
+      char *cp;
+  
+!     /* 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 -c 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,56 ****
+--- 51,66 ----
+      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,252 ****
+             case 's':
+             case 'l':
+             case 'c': {
+!                char cmd[80];         /* big enough to hold line */
+                 didAnything = True;
+                 if (++i >= argc) usage ();
+                 (void) sprintf (cmd, "remove %s = %s",
+                                 ((arg[1] == 's') ? "shift" :
+                                  ((arg[1] == 'l') ? "lock" :
+--- 254,263 ----
+             case 's':
+             case 'l':
+             case 'c': {
+!                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,274 ****
+             case '3':
+             case '4':
+             case '5': {
+!                char cmd[80];         /* big enough to hold line */
+                 didAnything = True;
+                 if (++i >= argc) usage ();
+! 
+                 (void) sprintf (cmd, "add mod%c = %s", arg[1], argv[i]);
+                 process_line (cmd);
+                 continue;
+--- 276,285 ----
+             case '3':
+             case '4':
+             case '5': {
+!                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,289 ****
+             case 's':
+             case 'l':
+             case 'c': {
+!                char cmd[80];         /* big enough to hold line */
+                 didAnything = True;
+                 if (++i >= argc) usage ();
+                 (void) sprintf (cmd, "add %s = %s",
+                                 ((arg[1] == 's') ? "shift" :
+                                  ((arg[1] == 'l') ? "lock" :
+--- 292,301 ----
+             case 's':
+             case 'l':
+             case 'c': {
+!                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 -c 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,58 ****
+--- 56,60 ----
+  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 -c 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,310 ****
+--- 305,314 ----
+      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 -c 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 ****
+! .\" 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" "" ""
+  .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
+  \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__)
+--- 1,23 ----
+! .\" -*- coding: us-ascii -*-
+! .TH xmore __appmansuffix__ "1 February 2005"  
+  .SH NAME
+  xmore \- plain text display program for the X Window System
+  .SH SYNOPSIS
+! .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"
+! \fBX11\fR(__miscmansuffix__), \fBxman\fR(__appmansuffix__)
+Index: xc/programs/xmore/xmore.sgml
+diff -c 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 ****
+! <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.2//EN" '/usr/share/sgml/docbook_4.2/docbook.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__,
+  __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"
+  assuming that env vars like MANSUFFIX etc. have been set to the matching
+  manual volume numbers.
+    -->
+--- 1,14 ----
+! <!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/__misc
+! mansuffix__/${MISCMANSUFFIX}/g"
+  assuming that env vars like MANSUFFIX etc. have been set to the matching
+  manual volume numbers.
+    -->
+***************
+*** 15,21 ****
+  <refentry>
+    <refmeta>
+      <refentrytitle>xmore</refentrytitle>
+!     <manvolnum>__mansuffix__</manvolnum>
+    </refmeta>
+    <refnamediv>
+      <refname>xmore</refname>
+--- 16,22 ----
+  <refentry>
+    <refmeta>
+      <refentrytitle>xmore</refentrytitle>
+!     <manvolnum>__appmansuffix__</manvolnum>
+    </refmeta>
+    <refnamediv>
+      <refname>xmore</refname>
+***************
+*** 72,78 ****
+          
+          <!-- Xprint general references -->
+          <member><citerefentry><refentrytitle>X11</refentrytitle><manvolnum>__miscmansuffix__</manvolnum></citerefentry></member>
+!         <member><citerefentry><refentrytitle>xman</refentrytitle><manvolnum>__mansuffix__</manvolnum></citerefentry></member>
+        </simplelist>
+      </para>
+    </refsect1>
+--- 73,79 ----
+          
+          <!-- Xprint general references -->
+          <member><citerefentry><refentrytitle>X11</refentrytitle><manvolnum>__miscmansuffix__</manvolnum></citerefentry></member>
+!         <member><citerefentry><refentrytitle>xman</refentrytitle><manvolnum>__appmansuffix__</manvolnum></citerefentry></member>
+        </simplelist>
+      </para>
+    </refsect1>
+Index: xc/programs/xphelloworld/xpawhelloworld/xpawhelloworld.c
+diff -c 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,307 ****
+--- 302,311 ----
+      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 -c 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 ****
+! <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 &#8212; 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
+        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 &quot;hello world from X11 print system&quot;.</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,
+             identifying the available Xprint servers.
+                See <span class="citerefentry"><span class="refentrytitle">Xprint</span>(7)</span>
+             for more details.
+--- 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="id2589918"></a><div class="titlepage"><div></div><div></div></div><div class="refnamediv"><h2>Name</h2><p>xphelloworld &#8212; 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="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 &quot;hello world from X11 print system&quot;.</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 -c 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 ****
+! .\" 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" "" ""
+  .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
+  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
+  printer to use
+! .TP
+! \fB-printargs \fIarg\fB=\fIvalue\fB [,...] \fR
+  Args:
+! .RS
+! .TP
+  \fBtofile=\fIfilename\fB\fR
+! .TP
+  \fBpapersize=\fIpaper name\fB\fR
+! .TP
+  \fBorientation=\fIorientation\fB\fR
+! .TP
+  \fBresolution=\fIDPI\fB\fR
+! .TP
+  \fBplex=\fIplex\fB\fR
+! .TP
+  \fBtitle=\fIstring\fB\fR
+  .RE
+! .TP
+! \fB-text \fItext\fB \fR
+  Sample text to print. Default is "hello world from X11 print system".
+! .TP
+! \fB-v \fR
+  verbose output
+! .TP
+! \fB-h \fR
+  print usage
+! .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${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>).
+  .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/>)
+--- 1,63 ----
+! .\" -*- coding: us-ascii -*-
+! .TH xphelloworld __appmansuffix__ "8 October 2004"  
+  .SH NAME
+  xphelloworld \- sends a test page to an Xprint printer
+  .SH SYNOPSIS
+! .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 
+  printer to use
+! .TP 
+! \fB\-printargs \fIarg\fB=\fIvalue\fB [,...]\fR 
+  Args:
+! .RS 
+! .TP 
+  \fBtofile=\fIfilename\fB\fR
+! .TP 
+  \fBpapersize=\fIpaper name\fB\fR
+! .TP 
+  \fBorientation=\fIorientation\fB\fR
+! .TP 
+  \fBresolution=\fIDPI\fB\fR
+! .TP 
+  \fBplex=\fIplex\fB\fR
+! .TP 
+  \fBtitle=\fIstring\fB\fR
+  .RE
+! 
+! .TP 
+! \fB\-text \fItext\fB\fR 
+  Sample text to print. Default is "hello world from X11 print system".
+! .TP 
+! \fB\-v\fR 
+  verbose output
+! .TP 
+! \fB\-h\fR 
+  print usage
+! .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"
+  
+! 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).
+  .SH "SEE ALSO"
+! \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 -c 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 ****
+! <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.2//EN" '/usr/share/sgml/docbook_4.2/docbook.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__,
+  __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"
+  assuming that env vars like MANSUFFIX etc. have been set to the matching
+  manual volume numbers.
+    -->
+--- 1,13 ----
+! <!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.
+    -->
+***************
+*** 15,21 ****
+  <refentry>
+    <refmeta>
+      <refentrytitle>xphelloworld</refentrytitle>
+!     <manvolnum>__mansuffix__</manvolnum>
+    </refmeta>
+    <refnamediv>
+      <refname>xphelloworld</refname>
+--- 15,21 ----
+  <refentry>
+    <refmeta>
+      <refentrytitle>xphelloworld</refentrytitle>
+!     <manvolnum>__appmansuffix__</manvolnum>
+    </refmeta>
+    <refnamediv>
+      <refname>xphelloworld</refname>
+***************
+*** 159,174 ****
+          <!-- 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>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>
+--- 159,174 ----
+          <!-- 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>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/xphelloworld/xpsimplehelloworld/xpsimplehelloworld.html
+diff -c 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 ****
+! <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 &#8212; &quot;Hello World&quot;-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
+        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
+--- 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="id2589918"></a><div class="titlepage"><div></div><div></div></div><div class="refnamediv"><h2>Name</h2><p>xpsimplehelloworld &#8212; &quot;Hello World&quot;-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,16 ****
+        <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,
+             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>
+        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>
+--- 7,16 ----
+        <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="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="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="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 -c 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 ****
+! .\" 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" "" ""
+  .SH NAME
+! 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
+  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
+--- 1,17 ----
+! .\" -*- coding: us-ascii -*-
+! .TH xpsimplehelloworld __appmansuffix__ "8 October 2004"  
+  .SH NAME
+! xpsimplehelloworld \- "Hello World"-like Xprint sample utility based on plain X11 rendering calls
+  .SH SYNOPSIS
+! .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,46 ****
+  \fBXmPrintShell\fR(__libmansuffix__)
+  or
+  \fBXawPrintShell\fR(__libmansuffix__))).
+! .SH "OPTIONS"
+! .TP
+! \fB-printer \fIprinternname\fB \fR
+  printer to use
+! .TP
+! \fB-v \fR
+  verbose output
+! .TP
+! \fB-h \fR
+  print usage
+! .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>).
+  .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/>)
+--- 20,43 ----
+  \fBXmPrintShell\fR(__libmansuffix__)
+  or
+  \fBXawPrintShell\fR(__libmansuffix__))).
+! .SH OPTIONS
+! .TP 
+! \fB\-printer \fIprinternname\fB\fR 
+  printer to use
+! .TP 
+! \fB\-v\fR 
+  verbose output
+! .TP 
+! \fB\-h\fR 
+  print usage
+! .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"
+! A full list of bugs can be obtained from the Xprint.org bug database (http://xprint.mozdev.org/xprint_bugs.html).
+  .SH "SEE ALSO"
+! \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 -c 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 ****
+! <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.2//EN" '/usr/share/sgml/docbook_4.2/docbook.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__,
+  __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"
+  assuming that env vars like MANSUFFIX etc. have been set to the matching
+  manual volume numbers.
+    -->
+--- 1,13 ----
+! <!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.
+    -->
+***************
+*** 15,21 ****
+  <refentry>
+    <refmeta>
+      <refentrytitle>xpsimplehelloworld</refentrytitle>
+!     <manvolnum>__mansuffix__</manvolnum>
+    </refmeta>
+    <refnamediv>
+      <refname>xpsimplehelloworld</refname>
+--- 15,21 ----
+  <refentry>
+    <refmeta>
+      <refentrytitle>xpsimplehelloworld</refentrytitle>
+!     <manvolnum>__appmansuffix__</manvolnum>
+    </refmeta>
+    <refnamediv>
+      <refname>xpsimplehelloworld</refname>
+***************
+*** 113,128 ****
+          <!-- 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>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>
+--- 113,128 ----
+          <!-- 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>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/xphelloworld/xpxmhelloworld/xpxmhelloworld.html
+diff -c 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 ****
+! <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 &#8212; &quot;Hello World&quot;-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
+        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,
+             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>
+--- 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="id2589918"></a><div class="titlepage"><div></div><div></div></div><div class="refnamediv"><h2>Name</h2><p>xpxmhelloworld &#8212; &quot;Hello World&quot;-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="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="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 -c 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 ****
+! .\" 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" "" ""
+  .SH NAME
+! 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
+  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
+  Print (default is to display on the video Xserver)
+! .TP
+! \fB-printer \fIprinternname\fB \fR
+  printer to use
+! .TP
+! \fB-v \fR
+  verbose output
+! .TP
+! \fB-h \fR
+  print usage
+! .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>).
+  .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/>)
+--- 1,43 ----
+! .\" -*- coding: us-ascii -*-
+! .TH xpxmhelloworld __appmansuffix__ "8 October 2004"  
+  .SH NAME
+! xpxmhelloworld \- "Hello World"-like Xprint sample utility based on the Motif2 toolkit
+  .SH SYNOPSIS
+! .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 
+  Print (default is to display on the video Xserver)
+! .TP 
+! \fB\-printer \fIprinternname\fB\fR 
+  printer to use
+! .TP 
+! \fB\-v\fR 
+  verbose output
+! .TP 
+! \fB\-h\fR 
+  print usage
+! .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"
+! A full list of bugs can be obtained from the Xprint.org bug database (http://xprint.mozdev.org/xprint_bugs.html).
+  .SH "SEE ALSO"
+! 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 -c 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 ****
+! <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.2//EN" '/usr/share/sgml/docbook_4.2/docbook.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__,
+  __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"
+  assuming that env vars like MANSUFFIX etc. have been set to the matching
+  manual volume numbers.
+    -->
+--- 1,13 ----
+! <!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.
+    -->
+***************
+*** 15,21 ****
+  <refentry>
+    <refmeta>
+      <refentrytitle>xpxmhelloworld</refentrytitle>
+!     <manvolnum>__mansuffix__</manvolnum>
+    </refmeta>
+    <refnamediv>
+      <refname>xpxmhelloworld</refname>
+--- 15,21 ----
+  <refentry>
+    <refmeta>
+      <refentrytitle>xpxmhelloworld</refentrytitle>
+!     <manvolnum>__appmansuffix__</manvolnum>
+    </refmeta>
+    <refnamediv>
+      <refname>xpxmhelloworld</refname>
+***************
+*** 121,136 ****
+          <!-- 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>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>
+--- 121,136 ----
+          <!-- 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>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/xphelloworld/xpxthelloworld/xpxthelloworld.html
+diff -c 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 ****
+! <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 &#8212; &quot;Hello World&quot;-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
+        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
+--- 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="id2589918"></a><div class="titlepage"><div></div><div></div></div><div class="refnamediv"><h2>Name</h2><p>xpxthelloworld &#8212; &quot;Hello World&quot;-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,15 ****
+        <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,
+             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>
+        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>
+--- 6,15 ----
+        <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="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="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"><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 -c 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 ****
+! .\" 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" "" ""
+  .SH NAME
+! 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
+  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
+--- 1,17 ----
+! .\" -*- coding: us-ascii -*-
+! .TH xpxthelloworld __appmansuffix__ "8 October 2004"  
+  .SH NAME
+! xpxthelloworld \- "Hello World"-like Xprint sample utility based on the Xt toolkit
+  .SH SYNOPSIS
+! .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,48 ****
+  \fBXmPrintShell\fR(__libmansuffix__)
+  or
+  \fBXawPrintShell\fR(__libmansuffix__)).
+! .SH "OPTIONS"
+! .TP
+! \fB-print \fR
+  Print (default is to display on the video Xserver)
+! .TP
+! \fB-printer \fIprinternname\fB \fR
+  printer to use
+! .TP
+! \fB-v \fR
+  verbose output
+! .TP
+! \fB-h \fR
+  print usage
+! .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>).
+  .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/>)
+--- 19,45 ----
+  \fBXmPrintShell\fR(__libmansuffix__)
+  or
+  \fBXawPrintShell\fR(__libmansuffix__)).
+! .SH OPTIONS
+! .TP 
+! \fB\-print\fR 
+  Print (default is to display on the video Xserver)
+! .TP 
+! \fB\-printer \fIprinternname\fB\fR 
+  printer to use
+! .TP 
+! \fB\-v\fR 
+  verbose output
+! .TP 
+! \fB\-h\fR 
+  print usage
+! .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"
+! A full list of bugs can be obtained from the Xprint.org bug database (http://xprint.mozdev.org/xprint_bugs.html).
+  .SH "SEE ALSO"
+! \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 -c 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 ****
+! <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.2//EN" '/usr/share/sgml/docbook_4.2/docbook.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__,
+  __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"
+  assuming that env vars like MANSUFFIX etc. have been set to the matching
+  manual volume numbers.
+    -->
+--- 1,13 ----
+! <!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.
+    -->
+***************
+*** 15,21 ****
+  <refentry>
+    <refmeta>
+      <refentrytitle>xpxthelloworld</refentrytitle>
+!     <manvolnum>__mansuffix__</manvolnum>
+    </refmeta>
+    <refnamediv>
+      <refname>xpxthelloworld</refname>
+--- 15,21 ----
+  <refentry>
+    <refmeta>
+      <refentrytitle>xpxthelloworld</refentrytitle>
+!     <manvolnum>__appmansuffix__</manvolnum>
+    </refmeta>
+    <refnamediv>
+      <refname>xpxthelloworld</refname>
+***************
+*** 121,136 ****
+          <!-- 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>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>
+--- 121,136 ----
+          <!-- 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>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/xplsprinters/xplsprinters.html
+diff -c 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 ****
+! <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 &#8212; 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
+        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,
+           identifying the available Xprint servers.
+              See <span class="citerefentry"><span class="refentrytitle">Xprint</span>(7)</span>
+           for more details.
+--- 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="id2589918"></a><div class="titlepage"><div></div><div></div></div><div class="refnamediv"><h2>Name</h2><p>xplsprinters &#8212; 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="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,30 ****
+          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>
+--- 27,33 ----
+          orientation=landscape
+          default_plex=
+          plex=simplex
+! </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 -c 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 ****
+! .\" 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" "" ""
+  .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
+  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
+  printer to use
+! .TP
+! \fB-dump \fR
+  dump all available printer attributes
+! .TP
+! \fB-h | -? \fR
+  print usage
+! .TP
+! \fB-d \fR
+  print description for each printer
+! .TP
+! \fB-l \fR
+  list detailed printer attribute information
+! .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)"
+  .PP
+- 
+  .nf
+  % \fBxplsprinters\fR
+  .fi
+--- 1,46 ----
+! .\" -*- coding: us-ascii -*-
+! .TH xplsprinters __appmansuffix__ "8 October 2004"  
+  .SH NAME
+  xplsprinters \- shows a list of Xprint printers and it's attributes
+  .SH SYNOPSIS
+! .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 
+  printer to use
+! .TP 
+! \fB\-dump\fR 
+  dump all available printer attributes
+! .TP 
+! \fB\-h | \-?\fR 
+  print usage
+! .TP 
+! \fB\-d\fR 
+  print description for each printer
+! .TP 
+! \fB\-l\fR 
+  list detailed printer attribute information
+! .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
+! \fBList all available "X Print Specifiers" (printer names)\fR
+  .PP
+  .nf
+  % \fBxplsprinters\fR
+  .fi
+***************
+*** 56,79 ****
+  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
+  
+  .nf
+! % \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
+          resolution=300
+          default_orientation=
+          orientation=portrait
+--- 54,79 ----
+  printer: xp_ps_spooldir_tmp_Xprintjobs@meridian:19
+  printer: xp_pdf_spooldir_tmp_Xprintjobs@meridian:19
+  .fi
+  
++ .PP
++ \fBGet information about the supported attributes of printer "ps002":\fR
++ .PP
+  .nf
+! % \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
+          resolution=300
+          default_orientation=
+          orientation=portrait
+***************
+*** 81,86 ****
+          default_plex=
+          plex=simplex
+  .fi
+  .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/>)
+--- 81,89 ----
+          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"
+! \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 -c 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 ****
+! <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.2//EN" '/usr/share/sgml/docbook_4.2/docbook.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__,
+  __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"
+  assuming that env vars like MANSUFFIX etc. have been set to the matching
+  manual volume numbers.
+    -->
+--- 1,13 ----
+! <!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.
+    -->
+***************
+*** 15,21 ****
+  <refentry>
+    <refmeta>
+      <refentrytitle>xplsprinters</refentrytitle>
+!     <manvolnum>__mansuffix__</manvolnum>
+    </refmeta>
+  
+    <refnamediv>
+--- 15,21 ----
+  <refentry>
+    <refmeta>
+      <refentrytitle>xplsprinters</refentrytitle>
+!     <manvolnum>__appmansuffix__</manvolnum>
+    </refmeta>
+  
+    <refnamediv>
+***************
+*** 151,156 ****
+--- 151,164 ----
+    </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,176 ****
+          <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>
+--- 169,185 ----
+          <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>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 -c 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 ****
+! .\" 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" "" ""
+  .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
+  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
+  generate verbose output
+! .TP
+! \fB-h | -? \fR
+  print usage
+! .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"
+  .PP
+- 
+  .nf
+! % \fBxprehashprinterlist -v\fR
+  .fi
+  .PP
+  would print:
+--- 1,39 ----
+! .\" -*- coding: us-ascii -*-
+! .TH xprehashprinterlist __appmansuffix__ "8 October 2004"  
+  .SH NAME
+  xprehashprinterlist \- Recomputes the list of available printers.
+  .SH SYNOPSIS
+! .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 
+  generate verbose output
+! .TP 
+! \fB\-h | \-?\fR 
+  print usage
+! .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
+! \fBUpdate the list of available printers\fR
+  .PP
+  .nf
+! % \fBxprehashprinterlist \-v\fR
+  .fi
+  .PP
+  would print:
+***************
+*** 43,53 ****
+  .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
+  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/>)
+--- 41,50 ----
+  .nf
+  Rehashing printer list on server 'meridian:34'
+  .fi
+! 
+! .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"
+! \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 -c 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 ****
+! <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.2//EN" '/usr/share/sgml/docbook_4.2/docbook.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__,
+  __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"
+  assuming that env vars like MANSUFFIX etc. have been set to the matching
+  manual volume numbers.
+    -->
+--- 1,13 ----
+! <!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.
+    -->
+***************
+*** 15,21 ****
+  <refentry>
+    <refmeta>
+      <refentrytitle>xprehashprinterlist</refentrytitle>
+!     <manvolnum>__mansuffix__</manvolnum>
+    </refmeta>
+  
+    <refnamediv>
+--- 15,21 ----
+  <refentry>
+    <refmeta>
+      <refentrytitle>xprehashprinterlist</refentrytitle>
+!     <manvolnum>__appmansuffix__</manvolnum>
+    </refmeta>
+  
+    <refnamediv>
+***************
+*** 116,132 ****
+          <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>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>
+          <!-- 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>
+--- 116,132 ----
+          <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>__appmansuffix__</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 -c 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 ****
+  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 $XFree86$
+- 
+- #ifdef deprecated
+  #define IHaveSubdirs
+  #define PassCDebugFlags CDEBUGFLAGS="$(CDEBUGFLAGS)"
+  
+! #if BuildPlugin && !defined(VendorHasX11R6_3libXext)
+! LIBXPLUGINDIR = libxplugin
+! #endif
+! 
+!       SUBDIRS = $(LIBXPLUGINDIR) plugin
+  
+  MakeSubdirs($(SUBDIRS))
+  DependSubdirs($(SUBDIRS))
+- #endif
+--- 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.2.1 2005/01/24 05:01:54 gisburn Exp $
+  
+  #define IHaveSubdirs
+  #define PassCDebugFlags CDEBUGFLAGS="$(CDEBUGFLAGS)"
+  
+!       SUBDIRS = helper plugin xnest-plugin
+  
+  MakeSubdirs($(SUBDIRS))
+  DependSubdirs($(SUBDIRS))
+Index: xc/programs/xrx/helper/helper.c
+diff -c 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,529 ****
+--- 526,531 ----
+  
+      /* then wait for it... */
+      XtAppMainLoop(app_context);
++ 
++     return EXIT_SUCCESS;
+  }
+Index: xc/programs/xrx/plugin/Imakefile
+diff -c 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 ****
+! 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 $
+  
+  #if HasSharedLibraries
+  
+--- 1,4 ----
+! XCOMM $Xorg: Imakefile,v 1.5 2005/09/160 00:51:17 gisburn Exp $
+  
+  #if HasSharedLibraries
+  
+***************
+*** 14,20 ****
+  #define LibName xrx
+  #define SoRev SOXRXREV
+  
+! SharedLibReferences(xrx,xrx,$(RXSRC),SOXRXREV,6.3)
+  
+            RXSRC = ../rx
+      RX_INCLUDES = -I$(RXSRC)
+--- 9,15 ----
+  #define LibName xrx
+  #define SoRev SOXRXREV
+  
+! SharedLibReferences(xrx,xrx,$(RXSRC),SOXRXREV,6.8)
+  
+            RXSRC = ../rx
+      RX_INCLUDES = -I$(RXSRC)
+***************
+*** 23,95 ****
+   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 */
+! 
+   PLUGIN_DEFINES = -DXP_UNIX
+  PLUGIN_INCLUDES = -I./include
+  
+--- 18,24 ----
+   SOCKET_DEFINES = -DBSD44SOCKETS
+  #endif
+  
+! XCOMM -DPLUGIN_TRACE can be added to the following definition to debug
+   PLUGIN_DEFINES = -DXP_UNIX
+  PLUGIN_INCLUDES = -I./include
+  
+***************
+*** 107,162 ****
+             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)
+  
+  #include <Library.tmpl>
+  
+--- 36,42 ----
+             OBJS = Main.o SetWin.o PProcess.o NewNDest.o Global.o stubs.o \
+               $(PARAMS_OBJS) $(XMISC_OBJS)
+  
+!    REQUIREDLIBS = $(LDPRELIB) XawClientLibs $(XTOOLONLYLIB) $(XPLIB) $(XLIB)
+  
+  #include <Library.tmpl>
+  
+***************
+*** 171,180 ****
+  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 */
+--- 51,54 ----
+Index: xc/programs/xrx/plugin/Main.c
+diff -c 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,62 ****
+   *
+   */
+  
+! #include <ctype.h>
+! #include <stdlib.h>
+  #include "RxPlugin.h"
+! #include "X11/StringDefs.h"
+  
+  
+  /***********************************************************************
+   * Utility functions to deal with list of arguments
+--- 52,71 ----
+   *
+   */
+  
+! 
+  #include "RxPlugin.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,393 ****
+      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)
+--- 389,394 ----
+***************
+*** 415,449 ****
+       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++;
+      if (state == LOADING) {
+       /* create a label */
+       This->status_widget =
+--- 416,427 ----
+       XrmPutStringResource (&db, "*Rx_Start.labelString", "Start");
+       XrmPutStringResource (&db, "RxPlugin_BeenHere", "YES");
+      }
+  
+      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,470 ****
+--- 443,471 ----
+      } 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 -c 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,691 ****
+--- 686,692 ----
+  RxpTeardown (PluginInstance* This)
+  {
+      if (This->toplevel_widget != NULL) {
++ #if 0 /* this crashes mozilla/firefox  */
+       /* ConfigureNotify on top level */
+       XtRemoveRawEventHandler (This->toplevel_widget,
+                                StructureNotifyMask,
+***************
+*** 697,702 ****
+--- 698,704 ----
+                                True,
+                                RxpWmDelWinHandler,
+                                (XtPointer) This);
++ #endif
+  #if 0
+       XmRemoveWMProtocolCallback (This->toplevel_widget,
+                                   RxGlobal.wm_delete_window,
+Index: xc/programs/xrx/plugin/include/npapi.h
+diff -c 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,51 ****
+--- 40,54 ----
+  #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 -c 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 ****
+! XCOMM $Xorg: Imakefile,v 1.3 2000/08/17 19:55:03 cpqbld Exp $
+  
+  XCOMM This isn't an option we must build a shared lib
+  #define DoSharedLib YES
+--- 1,4 ----
+! 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,13 ****
+  #define LibName xrxnest
+  #define SoRev SOXRXREV
+  
+! SharedLibReferences(xrxnest,xrxnest,$(RXSRC),SOXRXREV,6.3)
+  
+            RXSRC = ../rx
+      RX_INCLUDES = -I$(RXSRC)
+--- 7,13 ----
+  #define LibName xrxnest
+  #define SoRev SOXRXREV
+  
+! SharedLibReferences(xrxnest,xrxnest,$(RXSRC),SOXRXREV,6.8)
+  
+            RXSRC = ../rx
+      RX_INCLUDES = -I$(RXSRC)
+***************
+*** 17,47 ****
+  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
+--- 17,22 ----
+***************
+*** 57,62 ****
+--- 32,39 ----
+  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 -c 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,65 ****
+  void
+  RxpDestroy(PluginInstance *This)
+  {
+      /* kill child process */
+!     kill(This->child_pid, SIGKILL);
+      RxpFreeXnestDisplayNumber(This->display_num);
+  }
+--- 59,72 ----
+  void
+  RxpDestroy(PluginInstance *This)
+  {
++     int status;
++     
+      /* kill child process */
+!     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 -c 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,71 ****
+  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
+--- 65,70 ----
+***************
+*** 74,80 ****
+      if (This->dont_reparent == RxFalse) {
+       XUnmapWindow(XtDisplay(widget), This->window);
+       XReparentWindow(XtDisplay(widget), This->window,
+!                      RootWindowOfScreen(XtScreen(widget)), 0, 0);
+       This->dont_reparent = RxTrue;
+      } else
+       This->dont_reparent = RxFalse;
+--- 73,79 ----
+      if (This->dont_reparent == RxFalse) {
+       XUnmapWindow(XtDisplay(widget), This->window);
+       XReparentWindow(XtDisplay(widget), This->window,
+!                      XRootWindowOfScreen(XtScreen(widget)), 0, 0);
+       This->dont_reparent = RxTrue;
+      } else
+       This->dont_reparent = RxFalse;
+***************
+*** 177,196 ****
+  #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);
+               /* exec Xnest */
+!              execvp("Xnest", argv);
+               perror("Xnest");
+               return NPERR_GENERIC_ERROR;
+           } else {                    /* parent process */
+--- 176,198 ----
+  #endif
+           pid = fork();
+           if (pid == 0) {             /* child process */
+!                 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", xnest_argv);
+               perror("Xnest");
+               return NPERR_GENERIC_ERROR;
+           } else {                    /* parent process */
+Index: xc/programs/xrx/xnest-plugin/XnestDis.c
+diff -c 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,52 ****
+  /* $XFree86$ */
+  
+  #include "RxPlugin.h"
+  
+  /***********************************************************************
+   * Utility functions and global variable to manage display numbers
+   ***********************************************************************/
+  
+! /* maximum numbers of concurrent instances */
+! #define MAX_PLUGINS 10
+  
+! /* start from 5 to avoid possible conflict with multi-display X server */
+! #define XNEST_OFFSET 5
+  
+  /* global allowing to know which display numbers are in use */
+! static int16 xnest_display_numbers[MAX_PLUGINS];
+  
+  void
+  RxpInitXnestDisplayNumbers()
+  {
+!     memset(xnest_display_numbers, 0, sizeof(int16) * MAX_PLUGINS);
+  }
+  
+  /* function returning first display number available */
+--- 29,81 ----
+  /* $XFree86$ */
+  
+  #include "RxPlugin.h"
++ #include <sys/stat.h>
+  
+  /***********************************************************************
+   * Utility functions and global variable to manage display numbers
+   ***********************************************************************/
+  
+! /* maximum numbers of concurrent instances (per machine) */
+! #define MAX_PLUGINS 128
+  
+! /* 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 char xnest_display_numbers[MAX_PLUGINS];
+  
+  void
+  RxpInitXnestDisplayNumbers()
+  {
+!     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,61 ****
+  {
+      int i;
+      for (i = 0; i < MAX_PLUGINS; i++)
+!      if (xnest_display_numbers[i] == 0) {
+           xnest_display_numbers[i] = 1;
+           return i + XNEST_OFFSET;
+       }
+--- 84,91 ----
+  {
+      int i;
+      for (i = 0; i < MAX_PLUGINS; i++)
+!      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 -c 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,27 ****
+  #if BuildXprintLib && BuildXprintClients
+      DEPXPRINTLIBS = $(DEPXPRINTLIB)
+         XPRINTLIBS = $(XPLIB)
+!     XPRINTDEFINES = -DINCLUDE_XPRINT_SUPPORT
+  #endif
+  
+          DEFINES = ExtensionDefines DPMSDefines \
+                 FontCacheExtensionDefines \
+!                XkbDefines
+          DEPLIBS = $(DEPXMUULIB) $(DEPXLIB) $(DEPXF86LIBS) $(DEPFONTLIBS)
+  LOCAL_LIBRARIES = $(XMUULIB) $(XF86LIBS) $(FONTLIBS) $(XPRINTLIBS) $(XLIB)
+  
+--- 16,27 ----
+  #if BuildXprintLib && BuildXprintClients
+      DEPXPRINTLIBS = $(DEPXPRINTLIB)
+         XPRINTLIBS = $(XPLIB)
+!     XPRINTDEFINES = -DBUILD_PRINTSUPPORT
+  #endif
+  
+          DEFINES = ExtensionDefines DPMSDefines \
+                 FontCacheExtensionDefines \
+!                XkbDefines $(XPRINTDEFINES)
+          DEPLIBS = $(DEPXMUULIB) $(DEPXLIB) $(DEPXF86LIBS) $(DEPFONTLIBS)
+  LOCAL_LIBRARIES = $(XMUULIB) $(XF86LIBS) $(FONTLIBS) $(XPRINTLIBS) $(XLIB)
+  
+Index: xc/programs/xset/xset.c
+diff -c 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,94 ****
+  static Status set_font_cache(Display *, long, long, long);
+  static void query_cache_status(Display *dpy);
+  #endif
+! #ifdef INCLUDE_XPRINT_SUPPORT
+  #include <X11/extensions/Print.h>
+  #endif
+  
+--- 88,94 ----
+  static Status set_font_cache(Display *, long, long, long);
+  static void query_cache_status(Display *dpy);
+  #endif
+! #ifdef BUILD_PRINTSUPPORT
+  #include <X11/extensions/Print.h>
+  #endif
+  
+***************
+*** 206,212 ****
+  if (dpy == NULL) {
+    fprintf(stderr, "%s:  unable to open display \"%s\"\n",
+         argv[0], XDisplayName (disp));
+!   exit(1);
+  }
+  XSetErrorHandler (local_xerror);
+  for (i = 1; i < argc; ) {
+--- 206,212 ----
+  if (dpy == NULL) {
+    fprintf(stderr, "%s:  unable to open display \"%s\"\n",
+         argv[0], XDisplayName (disp));
+!   exit(EXIT_FAILURE);
+  }
+  XSetErrorHandler (local_xerror);
+  for (i = 1; i < argc; ) {
+***************
+*** 356,362 ****
+        }
+    }
+  #endif
+! #ifdef INCLUDE_XPRINT_SUPPORT
+    else if (strcmp(arg, "rehashprinterlist") == 0) { /* rehash list of printers */
+        short dummy;
+        if (XpQueryVersion(dpy, &dummy, &dummy)) {
+--- 356,362 ----
+        }
+    }
+  #endif
+! #ifdef BUILD_PRINTSUPPORT
+    else if (strcmp(arg, "rehashprinterlist") == 0) { /* rehash list of printers */
+        short dummy;
+        if (XpQueryVersion(dpy, &dummy, &dummy)) {
+***************
+*** 517,536 ****
+             {
+                 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);
+             }
+             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);
+             }
+             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);
+             }
+             DPMSEnable(dpy);
+             DPMSSetTimeouts(dpy, standby_timeout, suspend_timeout, off_timeout);
+--- 517,536 ----
+             {
+                 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(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(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(EXIT_FAILURE);
+             }
+             DPMSEnable(dpy);
+             DPMSSetTimeouts(dpy, standby_timeout, suspend_timeout, off_timeout);
+***************
+*** 948,954 ****
+           fprintf (stderr, 
+                    "%s: internal error, only parsed %d of %d directories.\n",
+                    progName, i, ndirs);
+!          exit (1);
+       }
+      }
+           
+--- 948,954 ----
+           fprintf (stderr, 
+                    "%s: internal error, only parsed %d of %d directories.\n",
+                    progName, i, ndirs);
+!          exit (EXIT_FAILURE);
+       }
+      }
+           
+***************
+*** 1513,1519 ****
+      fprintf (stderr, "    Show font cache statistics:\n");
+      fprintf (stderr, "\t fc s\n");
+  #endif
+! #ifdef INCLUDE_XPRINT_SUPPORT
+      fprintf (stderr, "    To control Xprint features:\n");
+      fprintf (stderr, "\t rehashprinterlist      Recomputes the list of available printers\n");
+  #endif
+--- 1513,1519 ----
+      fprintf (stderr, "    Show font cache statistics:\n");
+      fprintf (stderr, "\t fc s\n");
+  #endif
+! #ifdef BUILD_PRINTSUPPORT
+      fprintf (stderr, "    To control Xprint features:\n");
+      fprintf (stderr, "\t rehashprinterlist      Recomputes the list of available printers\n");
+  #endif
+***************
+*** 1546,1559 ****
+      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);
+  }
+  
+  static void
+  error(char *message)
+  {
+      fprintf( stderr, "%s: %s\n", progName, message );
+!     exit( 1 );
+  }
+  
+  
+--- 1546,1559 ----
+      fprintf (stderr, "\t s expose             s noexpose\n");
+      fprintf (stderr, "\t s activate           s reset\n");
+      fprintf (stderr, "    For status information:  q\n");
+!     exit(EXIT_SUCCESS);
+  }
+  
+  static void
+  error(char *message)
+  {
+      fprintf( stderr, "%s: %s\n", progName, message );
+!     exit(EXIT_FAILURE);
+  }
+  
+  
+Index: xc/programs/xterm/INSTALL
+diff -c 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 ****
+! -- $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 $
+  -- Thomas E. Dickey
+  
+  Xterm is normally built as part of the X Window System source tree, using
+--- 1,5 ----
+! -- $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,292 ****
+--- 287,299 ----
+  
+       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 -c 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 ****
+! MANIFEST for xterm, version xterm-196
+  --------------------------------------------------------------------------------
+  MANIFEST                        this file
+  256colres.h                     resource-definitions for 256-color mode
+--- 1,4 ----
+! MANIFEST for xterm, version xterm-197
+  --------------------------------------------------------------------------------
+  MANIFEST                        this file
+  256colres.h                     resource-definitions for 256-color mode
+Index: xc/programs/xterm/Makefile.in
+diff -c 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 ****
+! ## $XTermId: Makefile.in,v 1.111 2004/07/13 00:41:24 tom Exp $
+  ##
+! ## $XFree86: xc/programs/xterm/Makefile.in,v 3.48 2004/07/13 00:41:24 dickey Exp $ ##
+  ##
+  ## Copyright 2002-2003,2004 by Thomas E. Dickey
+  ##
+--- 1,6 ----
+! ## $XTermId: Makefile.in,v 1.113 2004/12/01 01:27:46 tom 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,74 ****
+  #### End of system configuration section. ####
+  
+  RM              = rm -f
+! LINT         = lint
+  
+  DESTDIR              =
+  BINDIR               = $(DESTDIR)$(bindir)
+--- 68,74 ----
+  #### End of system configuration section. ####
+  
+  RM              = rm -f
+! LINT         = @LINT@
+  
+  DESTDIR              =
+  BINDIR               = $(DESTDIR)$(bindir)
+Index: xc/programs/xterm/Tekproc.c
+diff -c 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 ****
+! /* $XTermId: Tekproc.c,v 1.105 2004/06/06 22:15:25 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 $ */
+  
+  /*
+  
+--- 1,11 ----
+! /* $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.50 2004/12/01 01:27:46 dickey Exp $ */
+  
+  /*
+  
+***************
+*** 232,237 ****
+--- 232,240 ----
+      { "tek-page",            HandleTekPage },
+      { "tek-reset",           HandleTekReset },
+      { "tek-copy",            HandleTekCopy },
++ #if OPT_TOOLBAR
++     { "set-toolbar",         HandleToolbar },
++ #endif
+  };
+  /* *INDENT-ON* */
+  
+***************
+*** 264,273 ****
+      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),
+  #endif
+  };
+  
+--- 267,274 ----
+      Sres("initialFont", "InitialFont", tek.initial_font, "large"),
+      Sres("ginTerminator", "GinTerminator", tek.gin_terminator_str, GIN_TERM_NONE_STR),
+  #if OPT_TOOLBAR
+!     Wres(XtNmenuBar, XtCMenuBar, tek.tb_info.menu_bar, 0),
+!     Ires(XtNmenuHeight, XtCMenuHeight, tek.tb_info.menu_height, 25),
+  #endif
+  };
+  
+***************
+*** 285,291 ****
+  static void TekInitialize(Widget request,
+                         Widget wnew,
+                         ArgList args,
+!                        Cardinal * num_args);
+  static void TekPage(void);
+  static void TekRealize(Widget gw,
+                      XtValueMask * valuemaskp,
+--- 286,292 ----
+  static void TekInitialize(Widget request,
+                         Widget wnew,
+                         ArgList args,
+!                        Cardinal *num_args);
+  static void TekPage(void);
+  static void TekRealize(Widget gw,
+                      XtValueMask * valuemaskp,
+***************
+*** 318,324 ****
+       TekExpose,              /* expose                       */
+       NULL,                   /* set_values                   */
+       NULL,                   /* set_values_hook              */
+!      NULL,                   /* set_values_almost            */
+       NULL,                   /* get_values_hook              */
+       NULL,                   /* accept_focus                 */
+       XtVersion,              /* version                      */
+--- 319,325 ----
+       TekExpose,              /* expose                       */
+       NULL,                   /* set_values                   */
+       NULL,                   /* set_values_hook              */
+!      XtInheritSetValuesAlmost,       /* set_values_almost    */
+       NULL,                   /* get_values_hook              */
+       NULL,                   /* accept_focus                 */
+       XtVersion,              /* version                      */
+***************
+*** 1280,1286 ****
+  TekInitialize(Widget request GCC_UNUSED,
+             Widget wnew GCC_UNUSED,
+             ArgList args GCC_UNUSED,
+!            Cardinal * num_args GCC_UNUSED)
+  {
+      Widget tekparent = SHELL_OF(wnew);
+  
+--- 1281,1287 ----
+  TekInitialize(Widget request GCC_UNUSED,
+             Widget wnew GCC_UNUSED,
+             ArgList args GCC_UNUSED,
+!            Cardinal *num_args GCC_UNUSED)
+  {
+      Widget tekparent = SHELL_OF(wnew);
+  
+***************
+*** 1749,1756 ****
+  
+      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 + '`');
+       write(tekcopyfd, initbuf, 4);
+       Tp = &Tek0;
+       do {
+--- 1750,1757 ----
+  
+      if ((tekcopyfd = open_userfile(screen->uid, screen->gid, buf, False)) >= 0) {
+       sprintf(initbuf, "%c%c%c%c",
+!              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 -c 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 ****
+! /* $XTermId: VTPrsTbl.c,v 1.36 2004/05/13 00:41:20 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 $ */
+  /*
+   *
+   * Copyright 1999-2000,2004 by Thomas E. Dickey
+--- 1,10 ----
+! /* $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.27 2004/12/01 01:27:46 dickey Exp $ */
+  /*
+   *
+   * Copyright 1999-2000,2004 by Thomas E. Dickey
+***************
+*** 771,784 ****
+  CASE_CSI_QUOTE_STATE,
+  CASE_CSI_IGNORE,
+  /*   $               %               &               '       */
+! CASE_CSI_IGNORE,
+  CASE_CSI_IGNORE,
+  CASE_CSI_IGNORE,
+  CASE_CSI_TICK_STATE,
+  /*   (               )               *               +       */
+  CASE_CSI_IGNORE,
+  CASE_CSI_IGNORE,
+! CASE_CSI_IGNORE,
+  CASE_CSI_IGNORE,
+  /*   ,               -               .               /       */
+  CASE_CSI_IGNORE,
+--- 771,784 ----
+  CASE_CSI_QUOTE_STATE,
+  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_STAR_STATE,
+  CASE_CSI_IGNORE,
+  /*   ,               -               .               /       */
+  CASE_CSI_IGNORE,
+***************
+*** 2021,2026 ****
+--- 2021,2676 ----
+  };
+  #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 -c 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 ****
+  #
+  # $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 
+  # 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 $
+  #
+  
+  CASE_GROUND_STATE
+--- 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
+  # 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.15 2004/12/01 01:27:46 dickey Exp $
+  #
+  
+  CASE_GROUND_STATE
+***************
+*** 130,132 ****
+--- 131,142 ----
+  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 -c 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 ****
+  /*
+   *   $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 $ */
+  /*
+!  * Copyright 2002 by Thomas E. Dickey
+   *
+   *                         All Rights Reserved
+   *
+--- 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.20 2004/12/01 01:27:46 dickey Exp $ */
+  /*
+!  * Copyright 2002-2003,2004 by Thomas E. Dickey
+   *
+   *                         All Rights Reserved
+   *
+***************
+*** 63,82 ****
+  /*
+   * PARSE_T has to be large enough to handle the number of cases enumerated here.
+   */
+! typedef char PARSE_T;
+  
+  extern Const PARSE_T ansi_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[];
+--- 65,81 ----
+  /*
+   * PARSE_T has to be large enough to handle the number of cases enumerated here.
+   */
+! 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[];
+  extern Const PARSE_T csi_table[];
+  extern Const PARSE_T dec2_table[];
+  extern Const PARSE_T dec3_table[];
+  extern Const PARSE_T dec_table[];
+  extern Const PARSE_T eigtable[];
+  extern Const PARSE_T esc_sp_table[];
+  extern Const PARSE_T esc_table[];
+***************
+*** 84,89 ****
+--- 83,97 ----
+  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,231 ****
+--- 235,248 ----
+  #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 -c 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,10 ****
+  !
+  !
+  !
+! ! $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 $
+  
+  *saveLines: 1024
+  
+--- 3,10 ----
+  !
+  !
+  !
+! ! $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,22 ****
+--- 17,23 ----
+  *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 -c 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 ****
+! dnl $XTermId: aclocal.m4,v 1.173 2004/07/13 00:41:24 tom Exp $
+  dnl
+! dnl $XFree86: xc/programs/xterm/aclocal.m4,v 3.53 2004/07/13 00:41:24 dickey Exp $
+  dnl
+  dnl ---------------------------------------------------------------------------
+  dnl
+--- 1,6 ----
+! 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.54 2004/12/01 01:27:46 dickey Exp $
+  dnl
+  dnl ---------------------------------------------------------------------------
+  dnl
+***************
+*** 585,591 ****
+  fi
+  ])dnl
+  dnl ---------------------------------------------------------------------------
+! dnl CF_GCC_WARNINGS version: 15 updated: 2003/07/05 18:42:30
+  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:
+--- 585,591 ----
+  fi
+  ])dnl
+  dnl ---------------------------------------------------------------------------
+! 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,602 ****
+--- 597,609 ----
+  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,628 ****
+               Wpointer-arith \
+               Wshadow \
+               Wstrict-prototypes \
+!              Wundef $cf_warn_CONST
+       do
+               CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
+               if AC_TRY_EVAL(ac_compile); then
+--- 629,635 ----
+               Wpointer-arith \
+               Wshadow \
+               Wstrict-prototypes \
+!              Wundef $cf_warn_CONST $1
+       do
+               CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
+               if AC_TRY_EVAL(ac_compile); then
+***************
+*** 685,691 ****
+  [AC_DIVERT_HELP([$1])dnl
+  ])dnl
+  dnl ---------------------------------------------------------------------------
+! dnl CF_IMAKE_CFLAGS version: 22 updated: 2004/04/25 20:55: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
+--- 692,698 ----
+  [AC_DIVERT_HELP([$1])dnl
+  ])dnl
+  dnl ---------------------------------------------------------------------------
+! 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,820 ****
+--- 822,837 ----
+  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,885 ****
+--- 897,960 ----
+  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,1526 ****
+  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 ---------------
+  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.
+  AC_DEFUN([CF_XOPEN_SOURCE],[
+  case $host_os in #(vi
+  freebsd*) #(vi
+!      CPPFLAGS="$CPPFLAGS -D_BSD_TYPES -D__BSD_VISIBLE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600"
+       ;;
+  hpux*) #(vi
+       CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE"
+       ;;
+! irix6.*) #(vi
+       CPPFLAGS="$CPPFLAGS -D_SGI_SOURCE"
+       ;;
+  linux*|gnu*) #(vi
+--- 1583,1614 ----
+  test "$cf_cv_xkb_bell_ext" = yes && AC_DEFINE(HAVE_XKB_BELL_EXT)
+  ])
+  dnl ---------------------------------------------------------------------------
+! 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
+!      # 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
+***************
+*** 1552,1588 ****
+  #endif],
+       [cf_cv_xopen_source=no],
+       [cf_save="$CPPFLAGS"
+!       CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
+        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])
+       CPPFLAGS="$cf_save"
+       ])
+  ])
+! test "$cf_cv_xopen_source" = yes && CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE"
+       ;;
+  esac
+  ])
+--- 1640,1657 ----
+  #endif],
+       [cf_cv_xopen_source=no],
+       [cf_save="$CPPFLAGS"
+!       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=$cf_XOPEN_SOURCE])
+       CPPFLAGS="$cf_save"
+       ])
+  ])
+! 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 -c 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 ****
+! /* $XTermId: button.c,v 1.160 2004/07/20 01:14:41 tom Exp $ */
+  
+  /* $Xorg: button.c,v 1.3 2000/08/17 19:55:08 cpqbld Exp $ */
+  /*
+--- 1,4 ----
+! /* $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,58 ****
+   * 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 $ */
+  
+  /*
+  button.c     Handles button events in the terminal emulator.
+--- 52,58 ----
+   * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+   * SOFTWARE.
+   */
+! /* $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,183 ****
+  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);
+  
+  Boolean
+  SendMousePosition(Widget w, XEvent * event)
+--- 177,183 ----
+  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);
+  
+  Boolean
+  SendMousePosition(Widget w, XEvent * event)
+***************
+*** 825,831 ****
+  DiredButton(Widget w GCC_UNUSED,
+           XEvent * event,     /* must be XButtonEvent */
+           String * params GCC_UNUSED,         /* selections */
+!          Cardinal * num_params GCC_UNUSED)
+  {
+      TScreen *screen = &term->screen;
+      Char Line[6];
+--- 825,831 ----
+  DiredButton(Widget w GCC_UNUSED,
+           XEvent * event,     /* must be XButtonEvent */
+           String * params GCC_UNUSED,         /* selections */
+!          Cardinal *num_params GCC_UNUSED)
+  {
+      TScreen *screen = &term->screen;
+      Char Line[6];
+***************
+*** 848,854 ****
+  ReadLineButton(Widget w GCC_UNUSED,
+              XEvent * event,  /* must be XButtonEvent */
+              String * params GCC_UNUSED,      /* selections */
+!             Cardinal * num_params GCC_UNUSED)
+  {
+      TScreen *screen = &term->screen;
+      Char Line[6];
+--- 848,854 ----
+  ReadLineButton(Widget w GCC_UNUSED,
+              XEvent * event,  /* must be XButtonEvent */
+              String * params GCC_UNUSED,      /* selections */
+!             Cardinal *num_params GCC_UNUSED)
+  {
+      TScreen *screen = &term->screen;
+      Char Line[6];
+***************
+*** 908,914 ****
+  ViButton(Widget w GCC_UNUSED,
+        XEvent * event,        /* must be XButtonEvent */
+        String * params GCC_UNUSED,    /* selections */
+!       Cardinal * num_params GCC_UNUSED)
+  {
+      TScreen *screen = &term->screen;
+      int pty = screen->respond;
+--- 908,914 ----
+  ViButton(Widget w GCC_UNUSED,
+        XEvent * event,        /* must be XButtonEvent */
+        String * params GCC_UNUSED,    /* selections */
+!       Cardinal *num_params GCC_UNUSED)
+  {
+      TScreen *screen = &term->screen;
+      int pty = screen->respond;
+***************
+*** 943,949 ****
+  HandleSelectExtend(Widget w,
+                  XEvent * event,      /* must be XMotionEvent */
+                  String * params GCC_UNUSED,
+!                 Cardinal * num_params GCC_UNUSED)
+  {
+      TScreen *screen;
+      int row, col;
+--- 943,949 ----
+  HandleSelectExtend(Widget w,
+                  XEvent * event,      /* must be XMotionEvent */
+                  String * params GCC_UNUSED,
+!                 Cardinal *num_params GCC_UNUSED)
+  {
+      TScreen *screen;
+      int row, col;
+***************
+*** 967,974 ****
+      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);
+       break;
+      }
+  }
+--- 967,975 ----
+      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) {
+!          (void) SendMousePosition(w, event);
+!      }
+       break;
+      }
+  }
+***************
+*** 977,983 ****
+  do_select_end(Widget w,
+             XEvent * event,   /* must be XButtonEvent */
+             String * params,  /* selections */
+!            Cardinal * num_params,
+             Bool use_cursor_loc)
+  {
+  #if OPT_READLINE
+--- 978,984 ----
+  do_select_end(Widget w,
+             XEvent * event,   /* must be XButtonEvent */
+             String * params,  /* selections */
+!            Cardinal *num_params,
+             Bool use_cursor_loc)
+  {
+  #if OPT_READLINE
+***************
+*** 985,992 ****
+      TScreen *screen = &term->screen;
+  #endif
+  
+!     if (!IsXtermWidget(w))
+       return;
+  
+      ((XtermWidget) w)->screen.selection_time = event->xbutton.time;
+      switch (eventMode) {
+--- 986,994 ----
+      TScreen *screen = &term->screen;
+  #endif
+  
+!     if (!IsXtermWidget(w)) {
+       return;
++     }
+  
+      ((XtermWidget) w)->screen.selection_time = event->xbutton.time;
+      switch (eventMode) {
+***************
+*** 1018,1024 ****
+  HandleSelectEnd(Widget w,
+               XEvent * event, /* must be XButtonEvent */
+               String * params,        /* selections */
+!              Cardinal * num_params)
+  {
+      do_select_end(w, event, params, num_params, False);
+  }
+--- 1020,1026 ----
+  HandleSelectEnd(Widget w,
+               XEvent * event, /* must be XButtonEvent */
+               String * params,        /* selections */
+!              Cardinal *num_params)
+  {
+      do_select_end(w, event, params, num_params, False);
+  }
+***************
+*** 1027,1033 ****
+  HandleKeyboardSelectEnd(Widget w,
+                       XEvent * event,         /* must be XButtonEvent */
+                       String * params,        /* selections */
+!                      Cardinal * num_params)
+  {
+      do_select_end(w, event, params, num_params, True);
+  }
+--- 1029,1035 ----
+  HandleKeyboardSelectEnd(Widget w,
+                       XEvent * event,         /* must be XButtonEvent */
+                       String * params,        /* selections */
+!                      Cardinal *num_params)
+  {
+      do_select_end(w, event, params, num_params, True);
+  }
+***************
+*** 1142,1163 ****
+      return eightBitSelectionTargets;
+  }
+  
+! 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;
+! 
+!     XmuInternStrings(XtDisplay(w), params, (Cardinal) 1, &selection);
+!     switch (selection) {
+      case XA_CUT_BUFFER0:
+       cutbuffer = 0;
+       break;
+--- 1144,1158 ----
+      return eightBitSelectionTargets;
+  }
+  
+! /*
+!  * 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)
+  {
+      int cutbuffer;
+!     switch (code) {
+      case XA_CUT_BUFFER0:
+       cutbuffer = 0;
+       break;
+***************
+*** 1184,1190 ****
+--- 1179,1215 ----
+       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,1198 ****
+       unsigned long nbytes;
+       int fmt8 = 8;
+       Atom type = XA_STRING;
+!      char *line = XFetchBuffer(XtDisplay(w), &inbytes, cutbuffer);
+       nbytes = (unsigned long) inbytes;
+       if (nbytes > 0)
+           SelectionReceived(w, NULL, &selection, &type, (XtPointer) line,
+--- 1217,1226 ----
+       unsigned long nbytes;
+       int fmt8 = 8;
+       Atom type = XA_STRING;
+!      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,1231 ****
+           }
+  
+           if (num_params) {
+               list = XtNew(struct _SelectionList);
+!              list->params = params;
+!              list->count = num_params;
+!              list->targets = targets;
+!              list->time = ev_time;
+!          } else
+               list = NULL;
+  
+           XtGetSelectionValue(w, selection,
+                               target,
+--- 1247,1263 ----
+           }
+  
+           if (num_params) {
++              /* 'list' is freed in SelectionReceived */
+               list = XtNew(struct _SelectionList);
+!              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,1250 ****
+  
+      name = XGetAtomName(dpy, type);
+  
+!     Trace("Getting %s (%ld)\n", XGetAtomName(dpy, type), (long int) type);
+      for (cp = line; cp < line + len; cp++)
+       Trace("%c\n", *cp);
+  }
+--- 1276,1282 ----
+  
+      name = XGetAtomName(dpy, type);
+  
+!     Trace("Getting %s (%ld)\n", name, (long int) type);
+      for (cp = line; cp < line + len; cp++)
+       Trace("%c\n", *cp);
+  }
+***************
+*** 1446,1452 ****
+  HandleInsertSelection(Widget w,
+                     XEvent * event,   /* assumed to be XButtonEvent* */
+                     String * params,  /* selections in precedence order */
+!                    Cardinal * num_params)
+  {
+  #if OPT_READLINE
+      int ldelta;
+--- 1478,1484 ----
+  HandleInsertSelection(Widget w,
+                     XEvent * event,   /* assumed to be XButtonEvent* */
+                     String * params,  /* selections in precedence order */
+!                    Cardinal *num_params)
+  {
+  #if OPT_READLINE
+      int ldelta;
+***************
+*** 1513,1519 ****
+  HandleSelectStart(Widget w,
+                 XEvent * event,       /* must be XButtonEvent* */
+                 String * params GCC_UNUSED,
+!                Cardinal * num_params GCC_UNUSED)
+  {
+      TScreen *screen;
+      int startrow, startcol;
+--- 1545,1551 ----
+  HandleSelectStart(Widget w,
+                 XEvent * event,       /* must be XButtonEvent* */
+                 String * params GCC_UNUSED,
+!                Cardinal *num_params GCC_UNUSED)
+  {
+      TScreen *screen;
+      int startrow, startcol;
+***************
+*** 1538,1544 ****
+  HandleKeyboardSelectStart(Widget w,
+                         XEvent * event,       /* must be XButtonEvent* */
+                         String * params GCC_UNUSED,
+!                        Cardinal * num_params GCC_UNUSED)
+  {
+      TScreen *screen;
+  
+--- 1570,1576 ----
+  HandleKeyboardSelectStart(Widget w,
+                         XEvent * event,       /* must be XButtonEvent* */
+                         String * params GCC_UNUSED,
+!                        Cardinal *num_params GCC_UNUSED)
+  {
+      TScreen *screen;
+  
+***************
+*** 1619,1625 ****
+       endECol = startcol;
+      }
+      ComputeSelect(startERow, startECol, endERow, endECol, False);
+- 
+  }
+  
+  static void
+--- 1651,1656 ----
+***************
+*** 1678,1684 ****
+  HandleSelectSet(Widget w,
+               XEvent * event,
+               String * params,
+!              Cardinal * num_params)
+  {
+      SelectSet(w, event, params, *num_params);
+  }
+--- 1709,1715 ----
+  HandleSelectSet(Widget w,
+               XEvent * event,
+               String * params,
+!              Cardinal *num_params)
+  {
+      SelectSet(w, event, params, *num_params);
+  }
+***************
+*** 1690,1701 ****
+         String * params,
+         Cardinal num_params)
+  {
+      /* Only do select stuff if non-null select */
+      if (startSRow != endSRow || startSCol != endSCol) {
+       SaltTextAway(startSRow, startSCol, endSRow, endSCol,
+                    params, num_params);
+!     } else
+       DisownSelection(term);
+  }
+  
+  #define Abs(x)               ((x) < 0 ? -(x) : (x))
+--- 1721,1734 ----
+         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 {
+       DisownSelection(term);
++     }
+  }
+  
+  #define Abs(x)               ((x) < 0 ? -(x) : (x))
+***************
+*** 1705,1711 ****
+  do_start_extend(Widget w,
+               XEvent * event, /* must be XButtonEvent* */
+               String * params GCC_UNUSED,
+!              Cardinal * num_params GCC_UNUSED,
+               Bool use_cursor_loc)
+  {
+      TScreen *screen;
+--- 1738,1744 ----
+  do_start_extend(Widget w,
+               XEvent * event, /* must be XButtonEvent* */
+               String * params GCC_UNUSED,
+!              Cardinal *num_params GCC_UNUSED,
+               Bool use_cursor_loc)
+  {
+      TScreen *screen;
+***************
+*** 1815,1821 ****
+  HandleStartExtend(Widget w,
+                 XEvent * event,       /* must be XButtonEvent* */
+                 String * params,      /* unused */
+!                Cardinal * num_params)        /* unused */
+  {
+      do_start_extend(w, event, params, num_params, False);
+  }
+--- 1848,1854 ----
+  HandleStartExtend(Widget w,
+                 XEvent * event,       /* must be XButtonEvent* */
+                 String * params,      /* unused */
+!                Cardinal *num_params)         /* unused */
+  {
+      do_start_extend(w, event, params, num_params, False);
+  }
+***************
+*** 1824,1836 ****
+  HandleKeyboardStartExtend(Widget w,
+                         XEvent * event,       /* must be XButtonEvent* */
+                         String * params,      /* unused */
+!                        Cardinal * num_params)        /* unused */
+  {
+      do_start_extend(w, event, params, num_params, True);
+  }
+  
+  void
+! ScrollSelection(TScreen * screen, int amount)
+  {
+      int minrow = -screen->savedlines - screen->topline;
+      int maxrow = screen->max_row - screen->topline;
+--- 1857,1869 ----
+  HandleKeyboardStartExtend(Widget w,
+                         XEvent * event,       /* must be XButtonEvent* */
+                         String * params,      /* unused */
+!                        Cardinal *num_params)         /* unused */
+  {
+      do_start_extend(w, event, params, num_params, True);
+  }
+  
+  void
+! ScrollSelection(TScreen * screen, int amount, Bool always)
+  {
+      int minrow = -screen->savedlines - screen->topline;
+      int maxrow = screen->max_row - screen->topline;
+***************
+*** 1854,1861 ****
+  
+      scroll_update_one(rawRow, rawCol);
+  
+!     scroll_update_one(screen->startHRow, screen->startHCol);
+!     scroll_update_one(screen->endHRow, screen->endHCol);
+  
+      screen->startHCoord = Coordinate(screen->startHRow, screen->startHCol);
+      screen->endHCoord = Coordinate(screen->endHRow, screen->endHCol);
+--- 1887,1915 ----
+  
+      scroll_update_one(rawRow, rawCol);
+  
+!     /*
+!      * 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,2236 ****
+      }
+  
+      /* check boundaries */
+!     ScrollSelection(screen, 0);
+  
+      TrackText(startSRow, startSCol, endSRow, endSCol);
+      return;
+--- 2284,2290 ----
+      }
+  
+      /* check boundaries */
+!     ScrollSelection(screen, 0, False);
+  
+      TrackText(startSRow, startSCol, endSRow, endSCol);
+      return;
+***************
+*** 2297,2302 ****
+--- 2351,2358 ----
+      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,2410 ****
+      }
+      *lp = '\0';                      /* make sure we have end marked */
+  
+!     TRACE(("Salted TEXT:%.*s\n", lp - line, line));
+      screen->selection_length = (lp - line);
+      _OwnSelection(term, params, num_params);
+  }
+  
+  static Boolean
+  _ConvertSelectionHelper(Widget w,
+!                      Atom * type, XtPointer * value,
+                       unsigned long *length, int *format,
+                       int (*conversion_function) (Display *,
+                                                   char **, int,
+--- 2453,2466 ----
+      }
+      *lp = '\0';                      /* make sure we have end marked */
+  
+!     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,
+                       unsigned long *length, int *format,
+                       int (*conversion_function) (Display *,
+                                                   char **, int,
+***************
+*** 2437,2443 ****
+                Atom * selection,
+                Atom * target,
+                Atom * type,
+!               XtPointer * value,
+                unsigned long *length,
+                int *format)
+  {
+--- 2493,2499 ----
+                Atom * selection,
+                Atom * target,
+                Atom * type,
+!               XtPointer *value,
+                unsigned long *length,
+                int *format)
+  {
+***************
+*** 2563,2571 ****
+      } 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 {
+           long temp = screen->selection_length;
+           memcpy((char *) *value, ((char *) &temp) + sizeof(long) - 4, 4);
+       }
+--- 2619,2627 ----
+      } 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 {
+           long temp = screen->selection_length;
+           memcpy((char *) *value, ((char *) &temp) + sizeof(long) - 4, 4);
+       }
+***************
+*** 2599,2613 ****
+        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:
+           *atomP = (Atom) 0;
+       }
+      }
+--- 2655,2661 ----
+        i < screen->selection_count; i++, atomP++) {
+       if (*selection == *atomP)
+           *atomP = (Atom) 0;
+!      if (CutBuffer(*atomP) >= 0) {
+           *atomP = (Atom) 0;
+       }
+      }
+***************
+*** 2658,2692 ****
+      }
+      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;
+!      }
+       if (cutbuffer >= 0) {
+           if (termw->screen.selection_length >
+               4 * XMaxRequestSize(XtDisplay((Widget) termw)) - 32) {
+--- 2706,2712 ----
+      }
+      XmuInternStrings(XtDisplay((Widget) termw), selections, count, atoms);
+      for (i = 0; i < count; i++) {
+!      int cutbuffer = CutBuffer(atoms[i]);
+       if (cutbuffer >= 0) {
+           if (termw->screen.selection_length >
+               4 * XMaxRequestSize(XtDisplay((Widget) termw)) - 32) {
+***************
+*** 2721,2770 ****
+       TrackText(0, 0, 0, 0);
+  }
+  
+  void
+  DisownSelection(XtermWidget termw)
+  {
+!     Atom *atoms = termw->screen.selection_atoms;
+!     Cardinal count = termw->screen.selection_count;
+      Cardinal i;
+  
+      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)
+           XtDisownSelection((Widget) termw, atoms[i],
+!                            termw->screen.selection_time);
+      }
+-     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 */
+--- 2741,2792 ----
+       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)
+  {
+!     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 = CutBuffer(atoms[i]);
+!      if (cutbuffer < 0) {
+           XtDisownSelection((Widget) termw, atoms[i],
+!                            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);
+      }
+  }
+  
+  /* returns number of chars in line from scol to ecol out */
+***************
+*** 2832,2838 ****
+       }
+       previous = c;
+       if (screen->utf8_mode) {
+!          lp = convertToUTF8(lp, c);
+           if (c_1) {
+               lp = convertToUTF8(lp, c_1);
+               if (c_2)
+--- 2854,2860 ----
+       }
+       previous = c;
+       if (screen->utf8_mode) {
+!          lp = convertToUTF8(lp, (c != 0) ? c : ' ');
+           if (c_1) {
+               lp = convertToUTF8(lp, c_1);
+               if (c_2)
+***************
+*** 2981,2987 ****
+  HandleGINInput(Widget w GCC_UNUSED,
+              XEvent * event GCC_UNUSED,
+              String * param_list,
+!             Cardinal * nparamsp)
+  {
+      if (term->screen.TekGIN && *nparamsp == 1) {
+       int c = param_list[0][0];
+--- 3003,3009 ----
+  HandleGINInput(Widget w GCC_UNUSED,
+              XEvent * event GCC_UNUSED,
+              String * param_list,
+!             Cardinal *nparamsp)
+  {
+      if (term->screen.TekGIN && *nparamsp == 1) {
+       int c = param_list[0][0];
+***************
+*** 3010,3016 ****
+  HandleSecure(Widget w GCC_UNUSED,
+            XEvent * event,    /* unused */
+            String * params GCC_UNUSED,        /* [0] = volume */
+!           Cardinal * param_count GCC_UNUSED)         /* 0 or 1 */
+  {
+      Time ev_time = CurrentTime;
+  
+--- 3032,3038 ----
+  HandleSecure(Widget w GCC_UNUSED,
+            XEvent * event,    /* unused */
+            String * params GCC_UNUSED,        /* [0] = volume */
+!           Cardinal *param_count GCC_UNUSED)  /* 0 or 1 */
+  {
+      Time ev_time = CurrentTime;
+  
+Index: xc/programs/xterm/charclass.c
+diff -c 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,33 ****
+   * 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 $ */
+  
+  #include <xterm.h>
+  #include <charclass.h>
+  
+  #if OPT_WIDE_CHARS
+  
+! struct classentry {
+      int class;
+      int first;
+      int last;
+--- 20,33 ----
+   * but merging in new intervals is significantly more hassle and
+   * not worth the effort here.
+   */
+! /* $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
+  
+! static struct classentry {
+      int class;
+      int first;
+      int last;
+Index: xc/programs/xterm/charproc.c
+diff -c 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 ****
+! /* $XTermId: charproc.c,v 1.498 2004/08/08 22:36:13 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 $ */
+  
+  /*
+  
+--- 1,10 ----
+! /* $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.166 2004/12/01 01:27:46 dickey Exp $ */
+  
+  /*
+  
+***************
+*** 146,153 ****
+  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 ansi_modes(XtermWidget termw,
+                      void (*func) (unsigned *p, unsigned mask));
+  static void bitclr(unsigned *p, unsigned mask);
+--- 146,154 ----
+  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 ansi_modes(XtermWidget termw,
+                      void (*func) (unsigned *p, unsigned mask));
+  static void bitclr(unsigned *p, unsigned mask);
+***************
+*** 181,191 ****
+  static ANSI reply;
+  static int param[NPARAM];
+  
+- #ifdef UNUSED
+- static unsigned long ctotal;
+- static unsigned long ntotal;
+- #endif
+- 
+  static jmp_buf vtjmpbuf;
+  
+  /* event handlers */
+--- 182,187 ----
+***************
+*** 270,276 ****
+         @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) \
+  ";                           /* PROCURA added "Meta <Btn2Down>:clear-saved-lines()" */
+  /* *INDENT-OFF* */
+  static XtActionsRec actionsList[] = {
+--- 266,272 ----
+         @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>:ignore() \
+  ";                           /* PROCURA added "Meta <Btn2Down>:clear-saved-lines()" */
+  /* *INDENT-OFF* */
+  static XtActionsRec actionsList[] = {
+***************
+*** 387,392 ****
+--- 383,391 ----
+      { "tek-reset",           HandleTekReset },
+      { "tek-copy",            HandleTekCopy },
+  #endif
++ #if OPT_TOOLBAR
++     { "set-toolbar",         HandleToolbar },
++ #endif
+  #if OPT_WIDE_CHARS
+      { "set-utf8-mode",               HandleUTF8Mode },
+  #endif
+***************
+*** 504,509 ****
+--- 503,511 ----
+  
+  #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,625 ****
+  #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),
+  #endif
+  
+  #if OPT_WIDE_CHARS
+--- 618,626 ----
+  #endif
+  
+  #if OPT_TOOLBAR
+!     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,658 ****
+  #endif
+  
+  #if OPT_RENDERFONT
+!     Ires(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),
+--- 653,659 ----
+  #endif
+  
+  #if OPT_RENDERFONT
+!     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,671 ****
+  };
+  
+  static Boolean VTSetValues(Widget cur, Widget request, Widget new_arg,
+!                         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);
+  static void VTRealize(Widget w, XtValueMask * valuemask,
+                     XSetWindowAttributes * values);
+  static void VTResize(Widget w);
+--- 661,672 ----
+  };
+  
+  static Boolean VTSetValues(Widget cur, Widget request, Widget new_arg,
+!                         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);
+  static void VTRealize(Widget w, XtValueMask * valuemask,
+                     XSetWindowAttributes * values);
+  static void VTResize(Widget w);
+***************
+*** 709,715 ****
+       VTExpose,               /* expose                       */
+       VTSetValues,            /* set_values                   */
+       NULL,                   /* set_values_hook              */
+!      NULL,                   /* set_values_almost            */
+       NULL,                   /* get_values_hook              */
+       NULL,                   /* accept_focus                 */
+       XtVersion,              /* version                      */
+--- 710,716 ----
+       VTExpose,               /* expose                       */
+       VTSetValues,            /* set_values                   */
+       NULL,                   /* set_values_hook              */
+!      XtInheritSetValuesAlmost,       /* set_values_almost    */
+       NULL,                   /* get_values_hook              */
+       NULL,                   /* accept_focus                 */
+       XtVersion,              /* version                      */
+***************
+*** 791,797 ****
+      register TScreen *screen = &term->screen;
+      Pixel fg;
+  
+-     /* FIXME HideCursor(); */
+      if (color >= 0) {
+       term->flags |= FG_COLOR;
+      } else {
+--- 792,797 ----
+***************
+*** 1008,1017 ****
+           print_used = 0;                                     \
+       }                                                       \
+  
+! extern int last_written_col, last_written_row;
+  
+  static void
+! VTparse(void)
+  {
+      /* Buffer for processing printable text */
+      static IChar *print_area;
+--- 1008,1033 ----
+           print_used = 0;                                     \
+       }                                                       \
+  
+! 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
+! doparsing(unsigned c, struct ParseState *sp)
+  {
+      /* Buffer for processing printable text */
+      static IChar *print_area;
+***************
+*** 1021,1066 ****
+      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 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();
+  
+  #if OPT_WIDE_CHARS
+       if (screen->wide_chars
+           && my_wcwidth(c) == 0) {
+--- 1037,1053 ----
+      static Char *string_area;
+      static size_t string_size, string_used;
+  
+      TScreen *screen = &term->screen;
+!     int row;
+!     int col;
+!     int top;
+!     int bot;
+!     int count;
+      int laststate;
+!     int thischar = -1;
+!     XTermRect myRect;
+  
++     do {
+  #if OPT_WIDE_CHARS
+       if (screen->wide_chars
+           && my_wcwidth(c) == 0) {
+***************
+*** 1068,1087 ****
+  
+           WriteNow();
+  
+!          prev = getXtermCell(screen, last_written_row, last_written_col);
+           precomposed = do_precomposition(prev, c);
+  
+           if (precomposed != -1) {
+!              putXtermCell(screen, last_written_row, last_written_col, precomposed);
+           } else {
+               addXtermCombining(screen,
+!                                last_written_row,
+!                                last_written_col, c);
+           }
+           if (!screen->scroll_amt)
+!              ScrnRefresh(screen,
+!                          last_written_row,
+!                          last_written_col, 1, 1, 1);
+           continue;
+       }
+  #endif
+--- 1055,1078 ----
+  
+           WriteNow();
+  
+!          prev = getXtermCell(screen,
+!                              screen->last_written_row,
+!                              screen->last_written_col);
+           precomposed = do_precomposition(prev, c);
+  
+           if (precomposed != -1) {
+!              putXtermCell(screen,
+!                           screen->last_written_row,
+!                           screen->last_written_col, precomposed);
+           } else {
+               addXtermCombining(screen,
+!                                screen->last_written_row,
+!                                screen->last_written_col, c);
+           }
+           if (!screen->scroll_amt)
+!              ScrnUpdate(screen,
+!                         screen->last_written_row,
+!                         screen->last_written_col, 1, 1, 1);
+           continue;
+       }
+  #endif
+***************
+*** 1098,1114 ****
+        * that denotes the type of sequence.
+        */
+  #if OPT_VT52_MODE
+!      if (vt52_cup) {
+!          param[nparam++] = (c & 0x7f) - 32;
+           if (nparam < 2)
+               continue;
+!          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;
+           param[0] = 0;
+           param[1] = 0;
+           continue;
+--- 1089,1106 ----
+        * that denotes the type of sequence.
+        */
+  #if OPT_VT52_MODE
+!      if (sp->vt52_cup) {
+!          if (nparam < NPARAM)
+!              param[nparam++] = (c & 0x7f) - 32;
+           if (nparam < 2)
+               continue;
+!          sp->vt52_cup = FALSE;
+           if ((row = param[0]) < 0)
+               row = 0;
+           if ((col = param[1]) < 0)
+               col = 0;
+           CursorSet(screen, row, col, term->flags);
+!          sp->parsestate = vt52_table;
+           param[0] = 0;
+           param[1] = 0;
+           continue;
+***************
+*** 1120,1142 ****
+        * wide characters, we handle them by treating them the same as
+        * printing characters.
+        */
+!      laststate = nextstate;
+  #if OPT_WIDE_CHARS
+       if (c > 255) {
+!          if (parsestate == groundtable) {
+!              nextstate = CASE_PRINT;
+!          } else if (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;
+           }
+       } else
+  #endif
+!          nextstate = parsestate[E2A(c)];
+  
+  #if OPT_BROKEN_OSC
+       /*
+--- 1112,1134 ----
+        * wide characters, we handle them by treating them the same as
+        * printing characters.
+        */
+!      laststate = sp->nextstate;
+  #if OPT_WIDE_CHARS
+       if (c > 255) {
+!          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 {
+!              sp->nextstate = CASE_GROUND_STATE;
+           }
+       } else
+  #endif
+!          sp->nextstate = sp->parsestate[E2A(c)];
+  
+  #if OPT_BROKEN_OSC
+       /*
+***************
+*** 1147,1153 ****
+        * in emulating bad code.
+        */
+       if (screen->brokenLinuxOSC
+!          && parsestate == sos_table) {
+           if (string_used) {
+               switch (string_area[0]) {
+               case 'P':
+--- 1139,1145 ----
+        * in emulating bad code.
+        */
+       if (screen->brokenLinuxOSC
+!          && sp->parsestate == sos_table) {
+           if (string_used) {
+               switch (string_area[0]) {
+               case 'P':
+***************
+*** 1155,1162 ****
+                       break;
+                   /* FALLTHRU */
+               case 'R':
+!                  parsestate = groundtable;
+!                  nextstate = parsestate[E2A(c)];
+                   TRACE(("Reset to ground state (brokenLinuxOSC)\n"));
+                   break;
+               }
+--- 1147,1154 ----
+                       break;
+                   /* FALLTHRU */
+               case 'R':
+!                  sp->parsestate = sp->groundtable;
+!                  sp->nextstate = sp->parsestate[E2A(c)];
+                   TRACE(("Reset to ground state (brokenLinuxOSC)\n"));
+                   break;
+               }
+***************
+*** 1172,1178 ****
+        * and emulate the old behavior.
+        */
+       if (screen->brokenStringTerm
+!          && parsestate == sos_table
+           && c < 32) {
+           switch (c) {
+           case 5:             /* FALLTHRU */
+--- 1164,1170 ----
+        * and emulate the old behavior.
+        */
+       if (screen->brokenStringTerm
+!          && sp->parsestate == sos_table
+           && c < 32) {
+           switch (c) {
+           case 5:             /* FALLTHRU */
+***************
+*** 1185,1192 ****
+           case 14:            /* FALLTHRU */
+           case 15:            /* FALLTHRU */
+           case 24:
+!              parsestate = groundtable;
+!              nextstate = parsestate[E2A(c)];
+               TRACE(("Reset to ground state (brokenStringTerm)\n"));
+               break;
+           }
+--- 1177,1184 ----
+           case 14:            /* FALLTHRU */
+           case 15:            /* FALLTHRU */
+           case 24:
+!              sp->parsestate = sp->groundtable;
+!              sp->nextstate = sp->parsestate[E2A(c)];
+               TRACE(("Reset to ground state (brokenStringTerm)\n"));
+               break;
+           }
+***************
+*** 1201,1209 ****
+        */
+       if (screen->c1_printable
+           && (c >= 128 && c < 160)) {
+!          nextstate = (parsestate == esc_table
+!                       ? CASE_ESC_IGNORE
+!                       : parsestate[E2A(160)]);
+       }
+  #endif
+  
+--- 1193,1201 ----
+        */
+       if (screen->c1_printable
+           && (c >= 128 && c < 160)) {
+!          sp->nextstate = (sp->parsestate == esc_table
+!                           ? CASE_ESC_IGNORE
+!                           : sp->parsestate[E2A(160)]);
+       }
+  #endif
+  
+***************
+*** 1221,1234 ****
+  #endif
+           if (screen->wide_chars
+               && (c >= 128 && c < 160)) {
+!              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) {
+           WriteNow();
+       }
+  #endif
+--- 1213,1226 ----
+  #endif
+           if (screen->wide_chars
+               && (c >= 128 && c < 160)) {
+!              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) != sp->last_was_wide) {
+           WriteNow();
+       }
+  #endif
+***************
+*** 1237,1247 ****
+        * Accumulate string for printable text.  This may be 8/16-bit
+        * characters.
+        */
+!      if (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",
+                       new_length);
+               continue;
+           }
+--- 1229,1239 ----
+        * Accumulate string for printable text.  This may be 8/16-bit
+        * characters.
+        */
+!      if (sp->nextstate == CASE_PRINT) {
+           SafeAlloc(IChar, print_area, print_used, print_size);
+           if (new_string == 0) {
+               fprintf(stderr,
+!                      "Cannot allocate %u bytes for printable text\n",
+                       new_length);
+               continue;
+           }
+***************
+*** 1256,1271 ****
+  #endif
+           print_area = new_string;
+           print_size = new_length;
+!          print_area[print_used++] = lastchar = thischar = c;
+  #if OPT_WIDE_CHARS
+!          last_was_wide = iswide(c);
+  #endif
+           if (morePtyData(screen, &VTbuffer)) {
+               continue;
+           }
+       }
+  
+!      if (nextstate == CASE_PRINT
+           || (laststate == CASE_PRINT && print_used)) {
+           WriteNow();
+       }
+--- 1248,1263 ----
+  #endif
+           print_area = new_string;
+           print_size = new_length;
+!          print_area[print_used++] = sp->lastchar = thischar = c;
+  #if OPT_WIDE_CHARS
+!          sp->last_was_wide = iswide(c);
+  #endif
+           if (morePtyData(screen, &VTbuffer)) {
+               continue;
+           }
+       }
+  
+!      if (sp->nextstate == CASE_PRINT
+           || (laststate == CASE_PRINT && print_used)) {
+           WriteNow();
+       }
+***************
+*** 1274,1285 ****
+        * Accumulate string for APC, DCS, PM, OSC, SOS controls
+        * This should always be 8-bit characters.
+        */
+!      if (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);
+               continue;
+           }
+  #if OPT_WIDE_CHARS
+--- 1266,1277 ----
+        * Accumulate string for APC, DCS, PM, OSC, SOS controls
+        * This should always be 8-bit characters.
+        */
+!      if (sp->parsestate == sos_table) {
+           SafeAlloc(Char, string_area, string_used, string_size);
+           if (new_string == 0) {
+               fprintf(stderr,
+!                      "Cannot allocate %u bytes for string mode %d\n",
+!                      new_length, sp->string_mode);
+               continue;
+           }
+  #if OPT_WIDE_CHARS
+***************
+*** 1289,1334 ****
+            * string.
+            */
+           if ((c & 0xffff) > 255) {
+!              nextstate = CASE_PRINT;
+               c = '?';
+           }
+  #endif
+           string_area = new_string;
+           string_size = new_length;
+           string_area[string_used++] = c;
+!      } else if (parsestate != esc_table) {
+           /* if we were accumulating, we're not any more */
+!          string_mode = 0;
+           string_used = 0;
+       }
+  
+!      TRACE(("parse %04X -> %d\n", c, nextstate));
+  
+!      switch (nextstate) {
+       case CASE_PRINT:
+!          /* printable characters (see above) */
+           break;
+  
+       case CASE_GROUND_STATE:
+!          /* exit ignore mode */
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_IGNORE:
+!          /* Ignore character */
+           break;
+  
+       case CASE_ENQ:
+           for (count = 0; screen->answer_back[count] != 0; count++)
+               unparseputc(screen->answer_back[count], screen->respond);
+           break;
+  
+       case CASE_BELL:
+!          if (string_mode == OSC) {
+               if (string_used)
+                   string_area[--string_used] = '\0';
+               do_osc(string_area, string_used, c);
+!              parsestate = groundtable;
+           } else {
+               /* bell */
+               Bell(XkbBI_TerminalBell, 0);
+--- 1281,1328 ----
+            * string.
+            */
+           if ((c & 0xffff) > 255) {
+!              sp->nextstate = CASE_PRINT;
+               c = '?';
+           }
+  #endif
+           string_area = new_string;
+           string_size = new_length;
+           string_area[string_used++] = c;
+!      } else if (sp->parsestate != esc_table) {
+           /* if we were accumulating, we're not any more */
+!          sp->string_mode = 0;
+           string_used = 0;
+       }
+  
+!      TRACE(("parse %04X -> %d\n", c, sp->nextstate));
+  
+!      switch (sp->nextstate) {
+       case CASE_PRINT:
+!          TRACE(("CASE_PRINT - printable characters\n"));
+           break;
+  
+       case CASE_GROUND_STATE:
+!          TRACE(("CASE_GROUND_STATE - exit ignore mode\n"));
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_IGNORE:
+!          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:
+!          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);
+!              sp->parsestate = sp->groundtable;
+           } else {
+               /* bell */
+               Bell(XkbBI_TerminalBell, 0);
+***************
+*** 1336,1367 ****
+           break;
+  
+       case CASE_BS:
+!          /* backspace */
+           CursorBack(screen, 1);
+           break;
+  
+       case CASE_CR:
+!          /* carriage return */
+           CarriageReturn(screen);
+           break;
+  
+       case CASE_ESC:
+-          /* escape */
+           if_OPT_VT52_MODE(screen, {
+!              parsestate = vt52_esc_table;
+               break;
+           });
+!          parsestate = esc_table;
+           break;
+  
+  #if OPT_VT52_MODE
+       case CASE_VT52_CUP:
+!          vt52_cup = TRUE;
+           nparam = 0;
+           break;
+  
+       case CASE_VT52_IGNORE:
+!          parsestate = vt52_ignore_table;
+           break;
+  #endif
+  
+--- 1330,1362 ----
+           break;
+  
+       case CASE_BS:
+!          TRACE(("CASE_BS - backspace\n"));
+           CursorBack(screen, 1);
+           break;
+  
+       case CASE_CR:
+!          /* CR */
+           CarriageReturn(screen);
+           break;
+  
+       case CASE_ESC:
+           if_OPT_VT52_MODE(screen, {
+!              sp->parsestate = vt52_esc_table;
+               break;
+           });
+!          sp->parsestate = esc_table;
+           break;
+  
+  #if OPT_VT52_MODE
+       case CASE_VT52_CUP:
+!          TRACE(("CASE_VT52_CUP - VT52 cursor addressing\n"));
+!          sp->vt52_cup = TRUE;
+           nparam = 0;
+           break;
+  
+       case CASE_VT52_IGNORE:
+!          TRACE(("CASE_VT52_IGNORE - VT52 ignore-character\n"));
+!          sp->parsestate = vt52_ignore_table;
+           break;
+  #endif
+  
+***************
+*** 1382,1388 ****
+               count = 1;
+           while ((count-- > 0)
+                  && (TabToPrevStop())) ;
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_CHT:
+--- 1377,1383 ----
+               count = 1;
+           while ((count-- > 0)
+                  && (TabToPrevStop())) ;
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_CHT:
+***************
+*** 1391,1397 ****
+               count = 1;
+           while ((count-- > 0)
+                  && (TabToNextStop())) ;
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_TAB:
+--- 1386,1392 ----
+               count = 1;
+           while ((count-- > 0)
+                  && (TabToNextStop())) ;
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_TAB:
+***************
+*** 1402,1465 ****
+       case CASE_SI:
+           screen->curgl = 0;
+           if_OPT_VT52_MODE(screen, {
+!              parsestate = groundtable;
+           });
+           break;
+  
+       case CASE_SO:
+           screen->curgl = 1;
+           if_OPT_VT52_MODE(screen, {
+!              parsestate = groundtable;
+           });
+           break;
+  
+       case CASE_DECDHL:
+           xterm_DECDHL(c == '3');
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_DECSWL:
+           xterm_DECSWL();
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_DECDWL:
+           xterm_DECDWL();
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_SCR_STATE:
+           /* enter scr state */
+!          parsestate = scrtable;
+           break;
+  
+       case CASE_SCS0_STATE:
+           /* enter scs state 0 */
+!          scstype = 0;
+!          parsestate = scstable;
+           break;
+  
+       case CASE_SCS1_STATE:
+           /* enter scs state 1 */
+!          scstype = 1;
+!          parsestate = scstable;
+           break;
+  
+       case CASE_SCS2_STATE:
+           /* enter scs state 2 */
+!          scstype = 2;
+!          parsestate = scstable;
+           break;
+  
+       case CASE_SCS3_STATE:
+           /* enter scs state 3 */
+!          scstype = 3;
+!          parsestate = scstable;
+           break;
+  
+       case CASE_ESC_IGNORE:
+           /* unknown escape sequence */
+!          parsestate = eigtable;
+           break;
+  
+       case CASE_ESC_DIGIT:
+--- 1397,1460 ----
+       case CASE_SI:
+           screen->curgl = 0;
+           if_OPT_VT52_MODE(screen, {
+!              sp->parsestate = sp->groundtable;
+           });
+           break;
+  
+       case CASE_SO:
+           screen->curgl = 1;
+           if_OPT_VT52_MODE(screen, {
+!              sp->parsestate = sp->groundtable;
+           });
+           break;
+  
+       case CASE_DECDHL:
+           xterm_DECDHL(c == '3');
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_DECSWL:
+           xterm_DECSWL();
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_DECDWL:
+           xterm_DECDWL();
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_SCR_STATE:
+           /* enter scr state */
+!          sp->parsestate = scrtable;
+           break;
+  
+       case CASE_SCS0_STATE:
+           /* enter scs state 0 */
+!          sp->scstype = 0;
+!          sp->parsestate = scstable;
+           break;
+  
+       case CASE_SCS1_STATE:
+           /* enter scs state 1 */
+!          sp->scstype = 1;
+!          sp->parsestate = scstable;
+           break;
+  
+       case CASE_SCS2_STATE:
+           /* enter scs state 2 */
+!          sp->scstype = 2;
+!          sp->parsestate = scstable;
+           break;
+  
+       case CASE_SCS3_STATE:
+           /* enter scs state 3 */
+!          sp->scstype = 3;
+!          sp->parsestate = scstable;
+           break;
+  
+       case CASE_ESC_IGNORE:
+           /* unknown escape sequence */
+!          sp->parsestate = eigtable;
+           break;
+  
+       case CASE_ESC_DIGIT:
+***************
+*** 1469,1543 ****
+           param[nparam - 1] = 10 * row + (c - '0');
+           if (param[nparam - 1] > 65535)
+               param[nparam - 1] = 65535;
+!          if (parsestate == csi_table)
+!              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;
+           break;
+  
+       case CASE_DEC_STATE:
+           /* enter dec mode */
+!          parsestate = dec_table;
+           break;
+  
+       case CASE_DEC2_STATE:
+           /* enter dec2 mode */
+!          parsestate = dec2_table;
+           break;
+  
+       case CASE_DEC3_STATE:
+           /* enter dec3 mode */
+!          parsestate = dec3_table;
+           break;
+  
+       case CASE_ICH:
+!          /* ICH */
+           if ((row = param[0]) < 1)
+               row = 1;
+           InsertChar(screen, row);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_CUU:
+!          /* CUU */
+           if ((row = param[0]) < 1)
+               row = 1;
+           CursorUp(screen, row);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_CUD:
+!          /* CUD */
+           if ((row = param[0]) < 1)
+               row = 1;
+           CursorDown(screen, row);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_CUF:
+!          /* CUF */
+           if ((col = param[0]) < 1)
+               col = 1;
+           CursorForward(screen, col);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_CUB:
+!          /* CUB */
+           if ((col = param[0]) < 1)
+               col = 1;
+           CursorBack(screen, col);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_CUP:
+!          /* CUP | HVP */
+           if_OPT_XMC_GLITCH(screen, {
+               Jump_XMC(screen);
+           });
+--- 1464,1538 ----
+           param[nparam - 1] = 10 * row + (c - '0');
+           if (param[nparam - 1] > 65535)
+               param[nparam - 1] = 65535;
+!          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 (sp->parsestate == csi_table)
+!              sp->parsestate = csi2_table;
+           break;
+  
+       case CASE_DEC_STATE:
+           /* enter dec mode */
+!          sp->parsestate = dec_table;
+           break;
+  
+       case CASE_DEC2_STATE:
+           /* enter dec2 mode */
+!          sp->parsestate = dec2_table;
+           break;
+  
+       case CASE_DEC3_STATE:
+           /* enter dec3 mode */
+!          sp->parsestate = dec3_table;
+           break;
+  
+       case CASE_ICH:
+!          TRACE(("CASE_ICH - insert char\n"));
+           if ((row = param[0]) < 1)
+               row = 1;
+           InsertChar(screen, row);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_CUU:
+!          TRACE(("CASE_CUU - cursor up\n"));
+           if ((row = param[0]) < 1)
+               row = 1;
+           CursorUp(screen, row);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_CUD:
+!          TRACE(("CASE_CUD - cursor down\n"));
+           if ((row = param[0]) < 1)
+               row = 1;
+           CursorDown(screen, row);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_CUF:
+!          TRACE(("CASE_CUF - cursor forward\n"));
+           if ((col = param[0]) < 1)
+               col = 1;
+           CursorForward(screen, col);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_CUB:
+!          TRACE(("CASE_CUB - cursor backward\n"));
+           if ((col = param[0]) < 1)
+               col = 1;
+           CursorBack(screen, col);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_CUP:
+!          TRACE(("CASE_CUP - cursor position\n"));
+           if_OPT_XMC_GLITCH(screen, {
+               Jump_XMC(screen);
+           });
+***************
+*** 1546,1623 ****
+           if (nparam < 2 || (col = param[1]) < 1)
+               col = 1;
+           CursorSet(screen, row - 1, col - 1, term->flags);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_VPA:
+           if ((row = param[0]) < 1)
+               row = 1;
+           CursorSet(screen, row - 1, screen->cur_col, term->flags);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_HPA:
+!          /* HPA | CHA */
+           if ((col = param[0]) < 1)
+               col = 1;
+           CursorSet(screen, screen->cur_row, col - 1, term->flags);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_HP_BUGGY_LL:
+           /* 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;
+           break;
+  
+       case CASE_ED:
+!          /* ED */
+           do_erase_display(screen, param[0], OFF_PROTECT);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_EL:
+!          /* EL */
+           do_erase_line(screen, param[0], OFF_PROTECT);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_ECH:
+           /* ECH */
+           ClearRight(screen, param[0] < 1 ? 1 : param[0]);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_IL:
+!          /* IL */
+           if ((row = param[0]) < 1)
+               row = 1;
+           InsertLine(screen, row);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_DL:
+!          /* DL */
+           if ((row = param[0]) < 1)
+               row = 1;
+           DeleteLine(screen, row);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_DCH:
+!          /* DCH */
+           if ((row = param[0]) < 1)
+               row = 1;
+           DeleteChar(screen, row);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_TRACK_MOUSE:
+           if (screen->send_mouse_pos == VT200_HIGHLIGHT_MOUSE
+               || nparam > 1) {
+               /* Track mouse as long as in window and between
+                * specified rows
+                */
+--- 1541,1622 ----
+           if (nparam < 2 || (col = param[1]) < 1)
+               col = 1;
+           CursorSet(screen, row - 1, col - 1, term->flags);
+!          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);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_HPA:
+!          TRACE(("CASE_HPA - horizontal position\n"));
+           if ((col = param[0]) < 1)
+               col = 1;
+           CursorSet(screen, screen->cur_row, col - 1, term->flags);
+!          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);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_ED:
+!          TRACE(("CASE_ED - erase display\n"));
+           do_erase_display(screen, param[0], OFF_PROTECT);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_EL:
+!          TRACE(("CASE_EL - erase line\n"));
+           do_erase_line(screen, param[0], OFF_PROTECT);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_ECH:
++          TRACE(("CASE_ECH - erase char\n"));
+           /* ECH */
+           ClearRight(screen, param[0] < 1 ? 1 : param[0]);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_IL:
+!          TRACE(("CASE_IL - insert line\n"));
+           if ((row = param[0]) < 1)
+               row = 1;
+           InsertLine(screen, row);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_DL:
+!          TRACE(("CASE_DL - delete line\n"));
+           if ((row = param[0]) < 1)
+               row = 1;
+           DeleteLine(screen, row);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_DCH:
+!          TRACE(("CASE_DCH - delete char\n"));
+           if ((row = param[0]) < 1)
+               row = 1;
+           DeleteChar(screen, row);
+!          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,1651 ****
+                          param[2] - 1, param[1] - 1,
+                          param[3] - 1, param[4] - 2);
+           } else {
+               /* SD */
+               if ((count = param[0]) < 1)
+                   count = 1;
+               RevScroll(screen, count);
+               do_xevents();
+           }
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_DECID:
+           if_OPT_VT52_MODE(screen, {
+               unparseputc(ESC, screen->respond);
+               unparseputc('/', screen->respond);
+               unparseputc('Z', screen->respond);
+!              parsestate = groundtable;
+               break;
+           });
+!          param[0] = -1;      /* Default ID parameter */
+           /* FALLTHRU */
+       case CASE_DA1:
+!          /* DA1 */
+           if (param[0] <= 1) {        /* less than means DEFAULT */
+               count = 0;
+               reply.a_type = CSI;
+--- 1624,1652 ----
+                          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();
+           }
+!          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);
+!              sp->parsestate = sp->groundtable;
+               break;
+           });
+!          param[0] = DEFAULT; /* Default ID parameter */
+           /* FALLTHRU */
+       case CASE_DA1:
+!          TRACE(("CASE_DA1\n"));
+           if (param[0] <= 1) {        /* less than means DEFAULT */
+               count = 0;
+               reply.a_type = CSI;
+***************
+*** 1695,1705 ****
+               reply.a_final = 'c';
+               unparseseq(&reply, screen->respond);
+           }
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_DA2:
+!          /* DA2 */
+           if (param[0] <= 0) {        /* less than means DEFAULT */
+               count = 0;
+               reply.a_type = CSI;
+--- 1696,1706 ----
+               reply.a_final = 'c';
+               unparseseq(&reply, screen->respond);
+           }
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_DA2:
+!          TRACE(("CASE_DA2\n"));
+           if (param[0] <= 0) {        /* less than means DEFAULT */
+               count = 0;
+               reply.a_type = CSI;
+***************
+*** 1716,1726 ****
+               reply.a_final = 'c';
+               unparseseq(&reply, screen->respond);
+           }
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_DECRPTUI:
+!          /* DECRPTUI */
+           if ((screen->terminal_id >= 400)
+               && (param[0] <= 0)) {   /* less than means DEFAULT */
+               unparseputc1(DCS, screen->respond);
+--- 1717,1727 ----
+               reply.a_final = 'c';
+               unparseseq(&reply, screen->respond);
+           }
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_DECRPTUI:
+!          TRACE(("CASE_DECRPTUI\n"));
+           if ((screen->terminal_id >= 400)
+               && (param[0] <= 0)) {   /* less than means DEFAULT */
+               unparseputc1(DCS, screen->respond);
+***************
+*** 1729,1760 ****
+               unparseputc('0', screen->respond);
+               unparseputc1(ST, screen->respond);
+           }
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_TBC:
+!          /* TBC */
+           if ((row = param[0]) <= 0)  /* less than means default */
+               TabClear(term->tabs, screen->cur_col);
+           else if (row == 3)
+               TabZonk(term->tabs);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_SET:
+!          /* SET */
+           ansi_modes(term, bitset);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_RST:
+!          /* RST */
+           ansi_modes(term, bitclr);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_SGR:
+-          /* SGR */
+           for (row = 0; row < nparam; ++row) {
+               if_OPT_XMC_GLITCH(screen, {
+                   Mark_XMC(screen, param[row]);
+--- 1730,1760 ----
+               unparseputc('0', screen->respond);
+               unparseputc1(ST, screen->respond);
+           }
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_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);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_SET:
+!          TRACE(("CASE_SET - set mode\n"));
+           ansi_modes(term, bitset);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_RST:
+!          TRACE(("CASE_RST - reset mode\n"));
+           ansi_modes(term, bitclr);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_SGR:
+           for (row = 0; row < nparam; ++row) {
+               if_OPT_XMC_GLITCH(screen, {
+                   Mark_XMC(screen, param[row]);
+***************
+*** 1942,1959 ****
+                   break;
+               }
+           }
+!          parsestate = groundtable;
+           break;
+  
+           /* DSR (except for the '?') is a superset of CPR */
+       case CASE_DSR:
+!          private_function = True;
+  
+           /* FALLTHRU */
+       case CASE_CPR:
+           count = 0;
+           reply.a_type = CSI;
+!          reply.a_pintro = private_function ? '?' : 0;
+           reply.a_inters = 0;
+           reply.a_final = 'n';
+  
+--- 1942,1960 ----
+                   break;
+               }
+           }
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+           /* DSR (except for the '?') is a superset of CPR */
+       case CASE_DSR:
+!          sp->private_function = True;
+  
+           /* FALLTHRU */
+       case CASE_CPR:
++          TRACE(("CASE_CPR - cursor position\n"));
+           count = 0;
+           reply.a_type = CSI;
+!          reply.a_pintro = sp->private_function ? '?' : 0;
+           reply.a_inters = 0;
+           reply.a_final = 'n';
+  
+***************
+*** 1999,2031 ****
+           if ((reply.a_nparam = count) != 0)
+               unparseseq(&reply, screen->respond);
+  
+!          parsestate = groundtable;
+!          private_function = False;
+           break;
+  
+       case CASE_MC:
+           xtermMediaControl(param[0], FALSE);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_DEC_MC:
+           xtermMediaControl(param[0], TRUE);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_HP_MEM_LOCK:
+       case CASE_HP_MEM_UNLOCK:
+           if (screen->scroll_amt)
+               FlushScroll(screen);
+!          if (parsestate[c] == CASE_HP_MEM_LOCK)
+               screen->top_marg = screen->cur_row;
+           else
+               screen->top_marg = 0;
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_DECSTBM:
+!          /* DECSTBM - set scrolling region */
+           if ((top = param[0]) < 1)
+               top = 1;
+           if (nparam < 2 || (bot = param[1]) == DEFAULT
+--- 2000,2037 ----
+           if ((reply.a_nparam = count) != 0)
+               unparseseq(&reply, screen->respond);
+  
+!          sp->parsestate = sp->groundtable;
+!          sp->private_function = False;
+           break;
+  
+       case CASE_MC:
++          TRACE(("CASE_MC - media control\n"));
+           xtermMediaControl(param[0], FALSE);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_DEC_MC:
++          TRACE(("CASE_DEC_MC - DEC media control\n"));
+           xtermMediaControl(param[0], TRUE);
+!          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 (sp->parsestate[c] == CASE_HP_MEM_LOCK)
+               screen->top_marg = screen->cur_row;
+           else
+               screen->top_marg = 0;
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_DECSTBM:
+!          TRACE(("CASE_DECSTBM - set scrolling region\n"));
+           if ((top = param[0]) < 1)
+               top = 1;
+           if (nparam < 2 || (bot = param[1]) == DEFAULT
+***************
+*** 2039,2049 ****
+               screen->bot_marg = bot - 1;
+               CursorSet(screen, 0, 0, term->flags);
+           }
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_DECREQTPARM:
+!          /* DECREQTPARM */
+           if (screen->terminal_id < 200) {    /* VT102 */
+               if ((row = param[0]) == DEFAULT)
+                   row = 0;
+--- 2045,2055 ----
+               screen->bot_marg = bot - 1;
+               CursorSet(screen, 0, 0, term->flags);
+           }
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_DECREQTPARM:
+!          TRACE(("CASE_DECREQTPARM\n"));
+           if (screen->terminal_id < 200) {    /* VT102 */
+               if ((row = param[0]) == DEFAULT)
+                   row = 0;
+***************
+*** 2063,2069 ****
+                   unparseseq(&reply, screen->respond);
+               }
+           }
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_DECSET:
+--- 2069,2075 ----
+                   unparseseq(&reply, screen->respond);
+               }
+           }
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_DECSET:
+***************
+*** 2072,2078 ****
+           if (screen->vtXX_level != 0)
+  #endif
+               dpmodes(term, bitset);
+!          parsestate = groundtable;
+  #if OPT_TEK4014
+           if (screen->TekEmu)
+               return;
+--- 2078,2084 ----
+           if (screen->vtXX_level != 0)
+  #endif
+               dpmodes(term, bitset);
+!          sp->parsestate = sp->groundtable;
+  #if OPT_TEK4014
+           if (screen->TekEmu)
+               return;
+***************
+*** 2084,2153 ****
+           dpmodes(term, bitclr);
+  #if OPT_VT52_MODE
+           if (screen->vtXX_level == 0)
+!              groundtable = vt52_table;
+           else if (screen->terminal_id >= 100)
+!              groundtable = ansi_table;
+  #endif
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_DECALN:
+!          /* DECALN */
+           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;
+           break;
+  
+       case CASE_GSETS:
+!          TRACE(("CASE_GSETS(%d) = '%c'\n", scstype, c));
+           if (screen->vtXX_level != 0)
+!              screen->gsets[scstype] = c;
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_DECSC:
+!          /* DECSC */
+           CursorSave(term);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_DECRC:
+!          /* DECRC */
+           CursorRestore(term);
+           if_OPT_ISO_COLORS(screen, {
+               setExtendedFG();
+           });
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_DECKPAM:
+!          /* DECKPAM */
+           term->keyboard.flags |= MODE_DECKPAM;
+           update_appkeypad();
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_DECKPNM:
+!          /* DECKPNM */
+           term->keyboard.flags &= ~MODE_DECKPAM;
+           update_appkeypad();
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_CSI_QUOTE_STATE:
+!          parsestate = csi_quo_table;
+           break;
+  
+  #if OPT_VT52_MODE
+--- 2090,2152 ----
+           dpmodes(term, bitclr);
+  #if OPT_VT52_MODE
+           if (screen->vtXX_level == 0)
+!              sp->groundtable = vt52_table;
+           else if (screen->terminal_id >= 100)
+!              sp->groundtable = ansi_table;
+  #endif
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_DECALN:
+!          TRACE(("CASE_DECALN - alignment test\n"));
+           if (screen->cursor_state)
+               HideCursor();
+!          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", sp->scstype, c));
+           if (screen->vtXX_level != 0)
+!              screen->gsets[sp->scstype] = c;
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_DECSC:
+!          TRACE(("CASE_DECSC - save cursor\n"));
+           CursorSave(term);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_DECRC:
+!          TRACE(("CASE_DECRC - restore cursor\n"));
+           CursorRestore(term);
+           if_OPT_ISO_COLORS(screen, {
+               setExtendedFG();
+           });
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_DECKPAM:
+!          TRACE(("CASE_DECKPAM\n"));
+           term->keyboard.flags |= MODE_DECKPAM;
+           update_appkeypad();
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_DECKPNM:
+!          TRACE(("CASE_DECKPNM\n"));
+           term->keyboard.flags &= ~MODE_DECKPAM;
+           update_appkeypad();
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_CSI_QUOTE_STATE:
+!          sp->parsestate = csi_quo_table;
+           break;
+  
+  #if OPT_VT52_MODE
+***************
+*** 2157,2164 ****
+                  screen->vtXX_level));
+           if (screen->terminal_id >= 100
+               && screen->vtXX_level == 0) {
+!              groundtable =
+!                  parsestate = ansi_table;
+               screen->vtXX_level = screen->vt52_save_level;
+               screen->curgl = screen->vt52_save_curgl;
+               screen->curgr = screen->vt52_save_curgr;
+--- 2156,2163 ----
+                  screen->vtXX_level));
+           if (screen->terminal_id >= 100
+               && screen->vtXX_level == 0) {
+!              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,2189 ****
+       case CASE_ANSI_LEVEL_1:
+           TRACE(("CASE_ANSI_LEVEL_1\n"));
+           set_ansi_conformance(screen, 1);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_ANSI_LEVEL_2:
+           TRACE(("CASE_ANSI_LEVEL_2\n"));
+           set_ansi_conformance(screen, 2);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_ANSI_LEVEL_3:
+           TRACE(("CASE_ANSI_LEVEL_3\n"));
+           set_ansi_conformance(screen, 3);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_DECSCL:
+--- 2170,2188 ----
+       case CASE_ANSI_LEVEL_1:
+           TRACE(("CASE_ANSI_LEVEL_1\n"));
+           set_ansi_conformance(screen, 1);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_ANSI_LEVEL_2:
+           TRACE(("CASE_ANSI_LEVEL_2\n"));
+           set_ansi_conformance(screen, 2);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_ANSI_LEVEL_3:
+           TRACE(("CASE_ANSI_LEVEL_3\n"));
+           set_ansi_conformance(screen, 3);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_DECSCL:
+***************
+*** 2203,2237 ****
+                       show_8bit_control(True);
+               }
+           }
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_DECSCA:
+           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;
+           break;
+  
+       case CASE_DECSED:
+!          /* DECSED */
+           do_erase_display(screen, param[0], DEC_PROTECT);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_DECSEL:
+!          /* DECSEL */
+           do_erase_line(screen, param[0], DEC_PROTECT);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_ST:
+           if (!string_used)
+               break;
+           string_area[--string_used] = '\0';
+!          switch (string_mode) {
+           case APC:
+               /* ignored */
+               break;
+--- 2202,2238 ----
+                       show_8bit_control(True);
+               }
+           }
+!          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;
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_DECSED:
+!          TRACE(("CASE_DECSED\n"));
+           do_erase_display(screen, param[0], DEC_PROTECT);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_DECSEL:
+!          TRACE(("CASE_DECSEL\n"));
+           do_erase_line(screen, param[0], DEC_PROTECT);
+!          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 (sp->string_mode) {
+           case APC:
+               /* ignored */
+               break;
+***************
+*** 2248,2375 ****
+               /* ignored */
+               break;
+           }
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_SOS:
+!          TRACE(("begin SOS: Start of String\n"));
+!          string_mode = SOS;
+!          parsestate = sos_table;
+           break;
+  
+       case CASE_PM:
+!          TRACE(("begin PM: Privacy Message\n"));
+!          string_mode = PM;
+!          parsestate = sos_table;
+           break;
+  
+       case CASE_DCS:
+!          TRACE(("begin DCS: Device Control String\n"));
+!          string_mode = DCS;
+!          parsestate = sos_table;
+           break;
+  
+       case CASE_APC:
+!          TRACE(("begin APC: Application Program Command\n"));
+!          string_mode = APC;
+!          parsestate = sos_table;
+           break;
+  
+       case CASE_SPA:
+           screen->protected_mode = ISO_PROTECT;
+           term->flags |= PROTECTED;
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_EPA:
+           term->flags &= ~PROTECTED;
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_SU:
+!          /* SU */
+           if ((count = param[0]) < 1)
+               count = 1;
+           xtermScroll(screen, count);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_IND:
+!          /* IND */
+           xtermIndex(screen, 1);
+           do_xevents();
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_CPL:
+!          /* cursor prev line */
+           CursorPrevLine(screen, param[0]);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_CNL:
+!          /* cursor next line */
+           CursorNextLine(screen, param[0]);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_NEL:
+!          /* NEL */
+           xtermIndex(screen, 1);
+           CarriageReturn(screen);
+           do_xevents();
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_HTS:
+!          /* HTS */
+           TabSet(term->tabs, screen->cur_col);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_RI:
+!          /* RI */
+           RevIndex(screen, 1);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_SS2:
+!          /* SS2 */
+           screen->curss = 2;
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_SS3:
+!          /* SS3 */
+           screen->curss = 3;
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_CSI_STATE:
+           /* enter csi state */
+           nparam = 1;
+           param[0] = DEFAULT;
+!          parsestate = csi_table;
+           break;
+  
+       case CASE_ESC_SP_STATE:
+           /* esc space */
+!          parsestate = esc_sp_table;
+           break;
+  
+       case CASE_CSI_EX_STATE:
+           /* csi exclamation */
+!          parsestate = csi_ex_table;
+           break;
+  
+  #if OPT_DEC_LOCATOR
+       case CASE_CSI_TICK_STATE:
+           /* csi tick (') */
+!          parsestate = csi_tick_table;
+           break;
+  
+       case CASE_DECEFR:
+!          TRACE(("DECEFR - Enable Filter Rectangle\n"));
+           if (screen->send_mouse_pos == DEC_LOCATOR) {
+               MotionOff(screen, term);
+               if ((screen->loc_filter_top = param[0]) < 1)
+--- 2249,2378 ----
+               /* ignored */
+               break;
+           }
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_SOS:
+!          TRACE(("CASE_SOS: Start of String\n"));
+!          sp->string_mode = SOS;
+!          sp->parsestate = sos_table;
+           break;
+  
+       case CASE_PM:
+!          TRACE(("CASE_PM: Privacy Message\n"));
+!          sp->string_mode = PM;
+!          sp->parsestate = sos_table;
+           break;
+  
+       case CASE_DCS:
+!          TRACE(("CASE_DCS: Device Control String\n"));
+!          sp->string_mode = DCS;
+!          sp->parsestate = sos_table;
+           break;
+  
+       case CASE_APC:
+!          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;
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_EPA:
++          TRACE(("CASE_EPA - end protected area\n"));
+           term->flags &= ~PROTECTED;
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_SU:
+!          TRACE(("CASE_SU - scroll up\n"));
+           if ((count = param[0]) < 1)
+               count = 1;
+           xtermScroll(screen, count);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_IND:
+!          TRACE(("CASE_IND - index\n"));
+           xtermIndex(screen, 1);
+           do_xevents();
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_CPL:
+!          TRACE(("CASE_CPL - cursor prev line\n"));
+           CursorPrevLine(screen, param[0]);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_CNL:
+!          TRACE(("CASE_NPL - cursor next line\n"));
+           CursorNextLine(screen, param[0]);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_NEL:
+!          TRACE(("CASE_NEL\n"));
+           xtermIndex(screen, 1);
+           CarriageReturn(screen);
+           do_xevents();
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_HTS:
+!          TRACE(("CASE_HTS - horizontal tab set\n"));
+           TabSet(term->tabs, screen->cur_col);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_RI:
+!          TRACE(("CASE_RI - reverse index\n"));
+           RevIndex(screen, 1);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_SS2:
+!          TRACE(("CASE_SS2\n"));
+           screen->curss = 2;
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_SS3:
+!          TRACE(("CASE_SS3\n"));
+           screen->curss = 3;
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_CSI_STATE:
+           /* enter csi state */
+           nparam = 1;
+           param[0] = DEFAULT;
+!          sp->parsestate = csi_table;
+           break;
+  
+       case CASE_ESC_SP_STATE:
+           /* esc space */
+!          sp->parsestate = esc_sp_table;
+           break;
+  
+       case CASE_CSI_EX_STATE:
+           /* csi exclamation */
+!          sp->parsestate = csi_ex_table;
+           break;
+  
+  #if OPT_DEC_LOCATOR
+       case CASE_CSI_TICK_STATE:
+           /* csi tick (') */
+!          sp->parsestate = csi_tick_table;
+           break;
+  
+       case CASE_DECEFR:
+!          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,2388 ****
+                   screen->loc_filter_right = LOC_FILTER_POS;
+               InitLocatorFilter(term);
+           }
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_DECELR:
+--- 2385,2391 ----
+                   screen->loc_filter_right = LOC_FILTER_POS;
+               InitLocatorFilter(term);
+           }
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_DECELR:
+***************
+*** 2405,2411 ****
+               }
+               screen->loc_filter = FALSE;
+           }
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_DECSLE:
+--- 2408,2414 ----
+               }
+               screen->loc_filter = FALSE;
+           }
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_DECSLE:
+***************
+*** 2432,2438 ****
+                   break;
+               }
+           }
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_DECRQLP:
+--- 2435,2441 ----
+                   break;
+               }
+           }
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_DECRQLP:
+***************
+*** 2441,2546 ****
+               /* Issue DECLRP Locator Position Report */
+               GetLocatorPosition(term);
+           }
+!          parsestate = groundtable;
+           break;
+  #endif /* OPT_DEC_LOCATOR */
+  
+       case CASE_S7C1T:
+           show_8bit_control(False);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_S8C1T:
+  #if OPT_VT52_MODE
+           if (screen->vtXX_level <= 1)
+               break;
+  #endif
+           show_8bit_control(True);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_OSC:
+!          TRACE(("begin OSC: Operating System Command\n"));
+!          parsestate = sos_table;
+!          string_mode = OSC;
+           break;
+  
+       case CASE_RIS:
+!          /* RIS */
+           VTReset(TRUE, TRUE);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_DECSTR:
+!          /* DECSTR */
+           VTReset(FALSE, FALSE);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_REP:
+!          /* REP */
+!          if (lastchar >= 0 &&
+!              groundtable[E2A(lastchar)] == CASE_PRINT) {
+               IChar repeated[2];
+               count = (param[0] < 1) ? 1 : param[0];
+!              repeated[0] = lastchar;
+               while (count-- > 0) {
+                   dotext(screen,
+                          screen->gsets[(int) (screen->curgl)],
+                          repeated, 1);
+               }
+           }
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_LS2:
+!          /* LS2 */
+           screen->curgl = 2;
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_LS3:
+!          /* LS3 */
+           screen->curgl = 3;
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_LS3R:
+!          /* LS3R */
+           screen->curgr = 3;
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_LS2R:
+!          /* LS2R */
+           screen->curgr = 2;
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_LS1R:
+!          /* LS1R */
+           screen->curgr = 1;
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_XTERM_SAVE:
+           savemodes(term);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_XTERM_RESTORE:
+           restoremodes(term);
+!          parsestate = groundtable;
+           break;
+  
+       case CASE_XTERM_WINOPS:
+           if (screen->allowWindowOps)
+               window_ops(term);
+!          parsestate = groundtable;
+           break;
+  #if OPT_WIDE_CHARS
+       case CASE_ESC_PERCENT:
+!          parsestate = esc_pct_table;
+           break;
+  
+       case CASE_UTF8:
+--- 2444,2625 ----
+               /* Issue DECLRP Locator Position Report */
+               GetLocatorPosition(term);
+           }
+!          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);
+!          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);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_OSC:
+!          TRACE(("CASE_OSC: Operating System Command\n"));
+!          sp->parsestate = sos_table;
+!          sp->string_mode = OSC;
+           break;
+  
+       case CASE_RIS:
+!          TRACE(("CASE_RIS\n"));
+           VTReset(TRUE, TRUE);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_DECSTR:
+!          TRACE(("CASE_DECSTR\n"));
+           VTReset(FALSE, FALSE);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_REP:
+!          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] = sp->lastchar;
+               while (count-- > 0) {
+                   dotext(screen,
+                          screen->gsets[(int) (screen->curgl)],
+                          repeated, 1);
+               }
+           }
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_LS2:
+!          TRACE(("CASE_LS2\n"));
+           screen->curgl = 2;
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_LS3:
+!          TRACE(("CASE_LS3\n"));
+           screen->curgl = 3;
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_LS3R:
+!          TRACE(("CASE_LS3R\n"));
+           screen->curgr = 3;
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_LS2R:
+!          TRACE(("CASE_LS2R\n"));
+           screen->curgr = 2;
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_LS1R:
+!          TRACE(("CASE_LS1R\n"));
+           screen->curgr = 1;
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_XTERM_SAVE:
+           savemodes(term);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_XTERM_RESTORE:
+           restoremodes(term);
+!          sp->parsestate = sp->groundtable;
+           break;
+  
+       case CASE_XTERM_WINOPS:
++          TRACE(("CASE_XTERM_WINOPS\n"));
+           if (screen->allowWindowOps)
+               window_ops(term);
+!          sp->parsestate = sp->groundtable;
+           break;
+  #if OPT_WIDE_CHARS
+       case CASE_ESC_PERCENT:
+!          sp->parsestate = esc_pct_table;
+           break;
+  
+       case CASE_UTF8:
+***************
+*** 2564,2579 ****
+                      ? "UTF-8 mode set from command-line"
+                      : "wideChars resource was not set"));
+           }
+!          parsestate = groundtable;
+           break;
+  #endif
+  
+       case CASE_CSI_IGNORE:
+!          parsestate = cigtable;
+           break;
+       }
+!      if (parsestate == groundtable)
+!          lastchar = thischar;
+      }
+  }
+  
+--- 2643,2681 ----
+                      ? "UTF-8 mode set from command-line"
+                      : "wideChars resource was not set"));
+           }
+!          sp->parsestate = sp->groundtable;
+           break;
+  #endif
+  
+       case CASE_CSI_IGNORE:
+!          sp->parsestate = cigtable;
+           break;
+       }
+!      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,3058 ****
+      });
+  
+  #if OPT_WIDE_CHARS
+!     for (offset = 0; offset < len && chars_chomped > 0; offset += chars_chomped) {
+       int width_available = screen->max_col - screen->cur_col + 1;
+!      int width_here = 0, need_wrap = 0;
+       chars_chomped = 0;
+  
+       if (screen->do_wrap && (term->flags & WRAPAROUND)) {
+--- 3152,3163 ----
+      });
+  
+  #if OPT_WIDE_CHARS
+!     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;
+!      int need_wrap = 0;
+       chars_chomped = 0;
+  
+       if (screen->do_wrap && (term->flags & WRAPAROUND)) {
+***************
+*** 3082,3094 ****
+           else
+               width_here -= my_wcwidth(buf[chars_chomped + offset]);
+           need_wrap = 1;
+!      }
+! 
+!      if (width_here == width_available) {
+           need_wrap = 1;
+!      }
+! 
+!      if (chars_chomped != (len - offset)) {
+           need_wrap = 1;
+       }
+  
+--- 3187,3195 ----
+           else
+               width_here -= my_wcwidth(buf[chars_chomped + offset]);
+           need_wrap = 1;
+!      } else if (width_here == width_available) {
+           need_wrap = 1;
+!      } else if (chars_chomped != (len - offset)) {
+           need_wrap = 1;
+       }
+  
+***************
+*** 3100,3106 ****
+        * rewriting all of the memory-management for the screen
+        * buffers (perhaps this is simpler).
+        */
+!      {
+           static unsigned limit;
+           static Char *hibyte, *lobyte;
+           Boolean both = False;
+--- 3201,3207 ----
+        * 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,3226 ****
+--- 3322,3332 ----
+          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,3245 ****
+               memset(str, ' ', len);
+               if_OPT_WIDE_CHARS(screen, {
+                   if (str2 != 0)
+!                      memset(str2, ' ', len);
+               });
+           }
+  
+--- 3345,3351 ----
+               memset(str, ' ', len);
+               if_OPT_WIDE_CHARS(screen, {
+                   if (str2 != 0)
+!                      memset(str2, 0, len);
+               });
+           }
+  
+***************
+*** 3257,3275 ****
+                         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
+--- 3363,3371 ----
+                         PAIRED_CHARS(str, str2), len, 0);
+  
+           resetXtermGC(screen, flags, False);
+       }
+      }
++ 
+      ScreenWrite(screen, PAIRED_CHARS(str, str2), flags, fg_bg, len);
+      CursorForward(screen, visual_width(PAIRED_CHARS(str, str2), len));
+  #if OPT_ZICONBEEP
+***************
+*** 3347,3362 ****
+       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,
+                             (XtPointer) 0);
+!              TRACE(("...menu_height %d\n", Vwin->menu_height));
+           }
+       }
+  #endif
+--- 3443,3454 ----
+       TRACE(("HandleStructNotify(ConfigureNotify)\n"));
+  #if OPT_TOOLBAR
+       if (term->screen.Vshow) {
+!          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->tb_info.menu_height));
+           }
+       }
+  #endif
+***************
+*** 3517,3522 ****
+--- 3609,3619 ----
+           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,3743 ****
+--- 3835,3841 ----
+      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,3770 ****
+--- 3863,3873 ----
+       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,3853 ****
+--- 3951,3957 ----
+      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,3904 ****
+--- 4003,4014 ----
+       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,4050 ****
+--- 4155,4161 ----
+      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,4260 ****
+       || c == APC
+       || c == SS3) {
+       if (ap->a_pintro != 0)
+!          unparseputc((char) 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);
+       }
+       unparseputc((char) ap->a_final, fd);
+      }
+--- 4355,4372 ----
+       || c == APC
+       || c == SS3) {
+       if (ap->a_pintro != 0)
+!          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);
+       }
+!      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,4282 ****
+  void
+  unparseputc(int c, int fd)
+  {
+-     register TScreen *screen = &term->screen;
+      IChar buf[2];
+!     register int i = 1;
+  
+  #if OPT_TCAP_QUERY
+      /*
+--- 4386,4393 ----
+  void
+  unparseputc(int c, int fd)
+  {
+      IChar buf[2];
+!     int i = 1;
+  
+  #if OPT_TCAP_QUERY
+      /*
+***************
+*** 4285,4291 ****
+       * printable ASCII (counting tab, carriage return, etc).  For now,
+       * just use hexadecimal for the whole thing.
+       */
+!     if (screen->tc_query >= 0) {
+       char tmp[3];
+       sprintf(tmp, "%02X", c & 0xFF);
+       buf[0] = tmp[0];
+--- 4396,4402 ----
+       * printable ASCII (counting tab, carriage return, etc).  For now,
+       * just use hexadecimal for the whole thing.
+       */
+!     if (term->screen.tc_query >= 0) {
+       char tmp[3];
+       sprintf(tmp, "%02X", c & 0xFF);
+       buf[0] = tmp[0];
+***************
+*** 4305,4311 ****
+  
+      /* 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);
+      }
+  }
+  
+--- 4416,4422 ----
+  
+      /* If send/receive mode is reset, we echo characters locally */
+      if ((term->keyboard.flags & MODE_SRM) == 0) {
+!      doparsing(c, &myState);
+      }
+  }
+  
+***************
+*** 4362,4368 ****
+  
+      rows = screen->max_row + 1;
+      SwitchBufPtrs(screen);
+-     TrackText(0, 0, 0, 0);   /* remove any highlighting */
+  
+      if ((top = -screen->topline) < rows) {
+       if (screen->scroll_amt)
+--- 4473,4478 ----
+***************
+*** 4378,4384 ****
+                      (unsigned) (rows - top) * FontHeight(screen),
+                      FALSE);
+      }
+!     ScrnRefresh(screen, 0, 0, rows, screen->max_col + 1, False);
+  }
+  
+  /* swap buffer line pointers between alt and regular screens */
+--- 4488,4494 ----
+                      (unsigned) (rows - top) * FontHeight(screen),
+                      FALSE);
+      }
+!     ScrnUpdate(screen, 0, 0, rows, screen->max_col + 1, False);
+  }
+  
+  /* swap buffer line pointers between alt and regular screens */
+***************
+*** 4650,4659 ****
+--- 4760,4778 ----
+                  (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,4671 ****
+--- 4785,4791 ----
+               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,4724 ****
+--- 4839,4847 ----
+  {
+      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,4739 ****
+           if ((locale = getenv("LANG")) == 0 || *locale == '\0')
+               locale = "";
+  #ifdef HAVE_LANGINFO_CODESET
+!     is_utf8 = (strcmp(nl_langinfo(CODESET), "UTF-8") == 0);
+  #else
+      is_utf8 = (strstr(locale, "UTF-8") != NULL);
+  #endif
+      TRACE(("... is_utf8 = %s\n", BtoS(is_utf8)));
+  
+  #if OPT_LUIT_PROG
+      request->misc.callfilter = 0;
+      request->misc.use_encoding = 0;
+--- 4851,4865 ----
+           if ((locale = getenv("LANG")) == 0 || *locale == '\0')
+               locale = "";
+  #ifdef HAVE_LANGINFO_CODESET
+!     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,4751 ****
+      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) {
+       /* when true ... fully obeying LC_CTYPE locale */
+       request->misc.callfilter = is_utf8 ? 0 : 1;
+       request->screen.utf8_mode = 2;
+--- 4867,4912 ----
+      TRACE(("... setup for luit:\n"));
+      TRACE(("... request misc.locale_str = \"%s\"\n", request->misc.locale_str));
+  
+! #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,4811 ****
+  VTInitialize(Widget wrequest,
+            Widget new_arg,
+            ArgList args GCC_UNUSED,
+!           Cardinal * num_args GCC_UNUSED)
+  {
+      XtermWidget request = (XtermWidget) wrequest;
+      XtermWidget wnew = (XtermWidget) new_arg;
+--- 4966,4972 ----
+  VTInitialize(Widget wrequest,
+            Widget new_arg,
+            ArgList args GCC_UNUSED,
+!           Cardinal *num_args GCC_UNUSED)
+  {
+      XtermWidget request = (XtermWidget) wrequest;
+      XtermWidget wnew = (XtermWidget) new_arg;
+***************
+*** 4918,4923 ****
+--- 5079,5087 ----
+      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,5003 ****
+--- 5162,5170 ----
+      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,5115 ****
+--- 5277,5284 ----
+           || visInfoPtr->depth <= 1) {
+           TRACE(("disabling color since screen is monochrome\n"));
+           color_ok = False;
++      } else {
++          XFree(visInfoPtr);
+       }
+      }
+  
+***************
+*** 5167,5173 ****
+  #endif
+  
+  #if OPT_RENDERFONT
+!     init_Ires(misc.face_size);
+      init_Sres(misc.face_name);
+      init_Sres(misc.face_wide_name);
+      init_Bres(misc.render_font);
+--- 5336,5342 ----
+  #endif
+  
+  #if OPT_RENDERFONT
+!     init_Dres(misc.face_size);
+      init_Sres(misc.face_name);
+      init_Sres(misc.face_wide_name);
+      init_Bres(misc.render_font);
+***************
+*** 5195,5200 ****
+--- 5364,5380 ----
+      }
+      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,5234 ****
+  
+  #if HANDLE_STRUCT_NOTIFY
+  #if OPT_TOOLBAR
+!     wnew->screen.fullVwin.menu_bar = request->screen.fullVwin.menu_bar;
+!     init_Ires(screen.fullVwin.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.
+--- 5407,5414 ----
+  
+  #if HANDLE_STRUCT_NOTIFY
+  #if OPT_TOOLBAR
+!     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,5460 ****
+  #ifndef NO_ACTIVE_ICON
+      if (term->misc.active_icon && screen->fnt_icon) {
+       int iconX = 0, iconY = 0;
+!      Widget shell = XtParent(term);
+       unsigned long mask;
+       XGCValues xgcv;
+  
+       XtVaGetValues(shell, XtNiconX, &iconX, XtNiconY, &iconY, (XtPointer) 0);
+       xtermComputeFontInfo(screen, &(screen->iconVwin), screen->fnt_icon, 0);
+  
+--- 5631,5641 ----
+  #ifndef NO_ACTIVE_ICON
+      if (term->misc.active_icon && screen->fnt_icon) {
+       int iconX = 0, iconY = 0;
+!      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,5505 ****
+--- 5680,5697 ----
+       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,5592 ****
+  {
+      unsigned i, j;
+      char *p, *s, *t, *ns, *end, buf[32];
+-     XIM xim = (XIM) NULL;
+      XIMStyles *xim_styles;
+      XIMStyle input_style = 0;
+      Boolean found;
+--- 5778,5783 ----
+***************
+*** 5613,5619 ****
+  
+      if (!term->misc.input_method || !*term->misc.input_method) {
+       if ((p = XSetLocaleModifiers("")) != NULL && *p)
+!          xim = XOpenIM(XtDisplay(term), NULL, NULL, NULL);
+      } else {
+       s = term->misc.input_method;
+       i = 5 + strlen(s);
+--- 5804,5810 ----
+  
+      if (!term->misc.input_method || !*term->misc.input_method) {
+       if ((p = XSetLocaleModifiers("")) != NULL && *p)
+!          term->screen.xim = XOpenIM(XtDisplay(term), NULL, NULL, NULL);
+      } else {
+       s = term->misc.input_method;
+       i = 5 + strlen(s);
+***************
+*** 5636,5642 ****
+               strncat(t, s, end - s);
+  
+               if ((p = XSetLocaleModifiers(t)) != 0 && *p
+!                  && (xim = XOpenIM(XtDisplay(term), NULL, NULL, NULL)) != 0)
+                   break;
+  
+           }
+--- 5827,5836 ----
+               strncat(t, s, end - s);
+  
+               if ((p = XSetLocaleModifiers(t)) != 0 && *p
+!                  && (term->screen.xim = XOpenIM(XtDisplay(term),
+!                                                 NULL,
+!                                                 NULL,
+!                                                 NULL)) != 0)
+                   break;
+  
+           }
+***************
+*** 5645,5664 ****
+       MyStackFree(t, buf);
+      }
+  
+!     if (xim == NULL && (p = XSetLocaleModifiers("@im=none")) != NULL && *p)
+!      xim = XOpenIM(XtDisplay(term), NULL, NULL, NULL);
+  
+!     if (!xim) {
+       fprintf(stderr, "Failed to open input method\n");
+       return;
+      }
+      TRACE(("VTInitI18N opened input method\n"));
+  
+!     if (XGetIMValues(xim, XNQueryInputStyle, &xim_styles, NULL)
+       || !xim_styles
+       || !xim_styles->count_styles) {
+       fprintf(stderr, "input method doesn't support any style\n");
+!      XCloseIM(xim);
+       term->misc.cannot_im = True;
+       return;
+      }
+--- 5839,5861 ----
+       MyStackFree(t, buf);
+      }
+  
+!     if (term->screen.xim == NULL
+!      && (p = XSetLocaleModifiers("@im=none")) != NULL
+!      && *p) {
+!      term->screen.xim = XOpenIM(XtDisplay(term), NULL, NULL, NULL);
+!     }
+  
+!     if (!term->screen.xim) {
+       fprintf(stderr, "Failed to open input method\n");
+       return;
+      }
+      TRACE(("VTInitI18N opened input method\n"));
+  
+!     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(term->screen.xim);
+       term->misc.cannot_im = True;
+       return;
+      }
+***************
+*** 5702,5708 ****
+       fprintf(stderr,
+               "input method doesn't support my preedit type (%s)\n",
+               term->misc.preedit_type);
+!      XCloseIM(xim);
+       term->misc.cannot_im = True;
+       return;
+      }
+--- 5899,5905 ----
+       fprintf(stderr,
+               "input method doesn't support my preedit type (%s)\n",
+               term->misc.preedit_type);
+!      XCloseIM(term->screen.xim);
+       term->misc.cannot_im = True;
+       return;
+      }
+***************
+*** 5714,5720 ****
+      if (input_style == (XIMPreeditArea | XIMStatusArea)) {
+       fprintf(stderr,
+               "This program doesn't support the 'OffTheSpot' preedit type\n");
+!      XCloseIM(xim);
+       term->misc.cannot_im = True;
+       return;
+      }
+--- 5911,5917 ----
+      if (input_style == (XIMPreeditArea | XIMStatusArea)) {
+       fprintf(stderr,
+               "This program doesn't support the 'OffTheSpot' preedit type\n");
+!      XCloseIM(term->screen.xim);
+       term->misc.cannot_im = True;
+       return;
+      }
+***************
+*** 5753,5759 ****
+       if (term->screen.fs == NULL) {
+           fprintf(stderr, "Preparation of default font set "
+                   "\"%s\" for XIM failed.\n", DEFXIMFONT);
+!          XCloseIM(xim);
+           term->misc.cannot_im = True;
+           return;
+       }
+--- 5950,5956 ----
+       if (term->screen.fs == NULL) {
+           fprintf(stderr, "Preparation of default font set "
+                   "\"%s\" for XIM failed.\n", DEFXIMFONT);
+!          XCloseIM(term->screen.xim);
+           term->misc.cannot_im = True;
+           return;
+       }
+***************
+*** 5767,5780 ****
+                                    XNSpotLocation, &spot,
+                                    XNFontSet, term->screen.fs,
+                                    NULL);
+!      term->screen.xic = XCreateIC(xim,
+                                    XNInputStyle, input_style,
+                                    XNClientWindow, XtWindow(term),
+                                    XNFocusWindow, XtWindow(term),
+                                    XNPreeditAttributes, p_list,
+                                    NULL);
+      } else {
+!      term->screen.xic = XCreateIC(xim, XNInputStyle, input_style,
+                                    XNClientWindow, XtWindow(term),
+                                    XNFocusWindow, XtWindow(term),
+                                    NULL);
+--- 5964,5977 ----
+                                    XNSpotLocation, &spot,
+                                    XNFontSet, term->screen.fs,
+                                    NULL);
+!      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(term->screen.xim, XNInputStyle, input_style,
+                                    XNClientWindow, XtWindow(term),
+                                    XNFocusWindow, XtWindow(term),
+                                    NULL);
+***************
+*** 5782,5788 ****
+  
+      if (!term->screen.xic) {
+       fprintf(stderr, "Failed to create input context\n");
+!      XCloseIM(xim);
+      }
+  #if defined(USE_XIM_INSTANTIATE_CB)
+      else {
+--- 5979,5985 ----
+  
+      if (!term->screen.xic) {
+       fprintf(stderr, "Failed to create input context\n");
+!      XCloseIM(term->screen.xim);
+      }
+  #if defined(USE_XIM_INSTANTIATE_CB)
+      else {
+***************
+*** 5790,5796 ****
+  
+       destroy_cb.callback = xim_destroy_cb;
+       destroy_cb.client_data = NULL;
+!      if (XSetIMValues(xim, XNDestroyCallback, &destroy_cb, NULL))
+           fprintf(stderr, "Could not set destroy callback to IM\n");
+      }
+  #endif
+--- 5987,5993 ----
+  
+       destroy_cb.callback = xim_destroy_cb;
+       destroy_cb.client_data = NULL;
+!      if (XSetIMValues(term->screen.xim, XNDestroyCallback, &destroy_cb, NULL))
+           fprintf(stderr, "Could not set destroy callback to IM\n");
+      }
+  #endif
+***************
+*** 5820,5826 ****
+           Widget request GCC_UNUSED,
+           Widget wnew,
+           ArgList args GCC_UNUSED,
+!          Cardinal * num_args GCC_UNUSED)
+  {
+      XtermWidget curvt = (XtermWidget) cur;
+      XtermWidget newvt = (XtermWidget) wnew;
+--- 6017,6023 ----
+           Widget request GCC_UNUSED,
+           Widget wnew,
+           ArgList args GCC_UNUSED,
+!          Cardinal *num_args GCC_UNUSED)
+  {
+      XtermWidget curvt = (XtermWidget) cur;
+      XtermWidget newvt = (XtermWidget) wnew;
+***************
+*** 5875,5880 ****
+--- 6072,6085 ----
+  
+  #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,5967 ****
+--- 6167,6186 ----
+      }
+  
+      /*
++      * 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,5986 ****
+      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))
+       in_selection = False;
+      else
+       in_selection = True;
+--- 6194,6200 ----
+      fg_pix = getXtermForeground(flags, extract_fg(fg_bg, flags));
+      bg_pix = getXtermBackground(flags, extract_bg(fg_bg, flags));
+  
+!     if (OutsideSelection(screen, screen->cur_row, screen->cur_col))
+       in_selection = False;
+      else
+       in_selection = True;
+***************
+*** 6160,6171 ****
+       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))
+       in_selection = False;
+      else
+       in_selection = True;
+--- 6374,6380 ----
+       fg_bg = SCRN_BUF_COLOR(screen, screen->cursor_row)[cursor_col];
+      });
+  
+!     if (OutsideSelection(screen, screen->cursor_row, screen->cursor_col))
+       in_selection = False;
+      else
+       in_selection = True;
+***************
+*** 6554,6560 ****
+  HandleKeymapChange(Widget w,
+                  XEvent * event GCC_UNUSED,
+                  String * params,
+!                 Cardinal * param_count)
+  {
+      static XtTranslations keymap, original;
+      static XtResource key_resources[] =
+--- 6763,6769 ----
+  HandleKeymapChange(Widget w,
+                  XEvent * event GCC_UNUSED,
+                  String * params,
+!                 Cardinal *param_count)
+  {
+      static XtTranslations keymap, original;
+      static XtResource key_resources[] =
+***************
+*** 6591,6597 ****
+      (void) strcpy(pmapClass, pmapName);
+      if (islower(CharOf(pmapClass[0])))
+       pmapClass[0] = toupper(CharOf(pmapClass[0]));
+!     XtGetSubresources(w, (XtPointer) & keymap, pmapName, pmapClass,
+                     key_resources, (Cardinal) 1, NULL, (Cardinal) 0);
+      if (keymap != NULL)
+       XtOverrideTranslations(w, keymap);
+--- 6800,6806 ----
+      (void) strcpy(pmapClass, pmapName);
+      if (islower(CharOf(pmapClass[0])))
+       pmapClass[0] = toupper(CharOf(pmapClass[0]));
+!     XtGetSubresources(w, (XtPointer) &keymap, pmapName, pmapClass,
+                     key_resources, (Cardinal) 1, NULL, (Cardinal) 0);
+      if (keymap != NULL)
+       XtOverrideTranslations(w, keymap);
+***************
+*** 6605,6611 ****
+  HandleBell(Widget w GCC_UNUSED,
+          XEvent * event GCC_UNUSED,
+          String * params,     /* [0] = volume */
+!         Cardinal * param_count)      /* 0 or 1 */
+  {
+      int percent = (*param_count) ? atoi(params[0]) : 0;
+  
+--- 6814,6820 ----
+  HandleBell(Widget w GCC_UNUSED,
+          XEvent * event GCC_UNUSED,
+          String * params,     /* [0] = volume */
+!         Cardinal *param_count)       /* 0 or 1 */
+  {
+      int percent = (*param_count) ? atoi(params[0]) : 0;
+  
+***************
+*** 6617,6623 ****
+  HandleVisualBell(Widget w GCC_UNUSED,
+                XEvent * event GCC_UNUSED,
+                String * params GCC_UNUSED,
+!               Cardinal * param_count GCC_UNUSED)
+  {
+      VisualBell();
+  }
+--- 6826,6832 ----
+  HandleVisualBell(Widget w GCC_UNUSED,
+                XEvent * event GCC_UNUSED,
+                String * params GCC_UNUSED,
+!               Cardinal *param_count GCC_UNUSED)
+  {
+      VisualBell();
+  }
+***************
+*** 6627,6633 ****
+  HandleIgnore(Widget w,
+            XEvent * event,
+            String * params GCC_UNUSED,
+!           Cardinal * param_count GCC_UNUSED)
+  {
+      /* do nothing, but check for funny escape sequences */
+      (void) SendMousePosition(w, event);
+--- 6836,6842 ----
+  HandleIgnore(Widget w,
+            XEvent * event,
+            String * params 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 -c 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,245 ****
+    --disable-tek4014       disable tek4014 emulation
+    --enable-toolbar        compile-in toolbar for pulldown menus
+    --disable-vt52          disable VT52 emulation
+    --enable-luit           enable luit filter (Unicode translation)
+    --enable-wide-chars     enable wide-character support
+-   --enable-dabbrev        enable dynamic-abbreviation support
+  EOF
+  cat <<\EOF
+    --enable-dec-locator    enable DECterm Locator support
+    --disable-ziconbeep     disable -ziconbeep option
+  Testing/development Options:
+--- 235,246 ----
+    --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
+  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,620 ****
+  fi
+  
+  echo $ac_n "checking host system type""... $ac_c" 1>&6
+! echo "configure:618: checking host system type" >&5
+  
+  host_alias=$host
+  case "$host_alias" in
+--- 615,621 ----
+  fi
+  
+  echo $ac_n "checking host system type""... $ac_c" 1>&6
+! echo "configure:619: checking host system type" >&5
+  
+  host_alias=$host
+  case "$host_alias" in
+***************
+*** 675,681 ****
+  # 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
+  if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+    echo $ac_n "(cached) $ac_c" 1>&6
+  else
+--- 676,682 ----
+  # 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: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,711 ****
+    # 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
+  if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+    echo $ac_n "(cached) $ac_c" 1>&6
+  else
+--- 706,712 ----
+    # 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: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,762 ****
+        # 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
+  if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+    echo $ac_n "(cached) $ac_c" 1>&6
+  else
+--- 757,763 ----
+        # 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: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,794 ****
+  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
+  
+  ac_ext=c
+  # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+--- 789,795 ----
+  fi
+  
+  echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
+! 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,810 ****
+  
+  cat > conftest.$ac_ext << EOF
+  
+! #line 803 "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
+    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
+--- 800,811 ----
+  
+  cat > conftest.$ac_ext << EOF
+  
+! #line 804 "configure"
+  #include "confdefs.h"
+  
+  main(){return(0);}
+  EOF
+! 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,841 ****
+    { 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 "$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
+  if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
+    echo $ac_n "(cached) $ac_c" 1>&6
+  else
+--- 831,842 ----
+    { 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: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: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,850 ****
+    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
+    ac_cv_prog_gcc=yes
+  else
+    ac_cv_prog_gcc=no
+--- 845,851 ----
+    yes;
+  #endif
+  EOF
+! 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,869 ****
+  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
+  if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
+    echo $ac_n "(cached) $ac_c" 1>&6
+  else
+--- 864,870 ----
+  ac_save_CFLAGS="$CFLAGS"
+  CFLAGS=
+  echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+! 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,901 ****
+  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
+  # On Suns, sometimes $CPP names a directory.
+  if test -n "$CPP" && test -d "$CPP"; then
+    CPP=
+--- 896,902 ----
+  fi
+  
+  echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
+! 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,922 ****
+    # 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"
+  #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; }
+  ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+  if test -z "$ac_err"; then
+    :
+--- 911,923 ----
+    # On the NeXT, cc -E runs the code through the compiler's parser,
+    # not just through cpp.
+    cat > conftest.$ac_ext <<EOF
+! #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: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,939 ****
+    rm -rf conftest*
+    CPP="${CC-cc} -E -traditional-cpp"
+    cat > conftest.$ac_ext <<EOF
+! #line 931 "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; }
+  ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+  if test -z "$ac_err"; then
+    :
+--- 928,940 ----
+    rm -rf conftest*
+    CPP="${CC-cc} -E -traditional-cpp"
+    cat > conftest.$ac_ext <<EOF
+! #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: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,956 ****
+    rm -rf conftest*
+    CPP="${CC-cc} -nologo -E"
+    cat > conftest.$ac_ext <<EOF
+! #line 948 "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; }
+  ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+  if test -z "$ac_err"; then
+    :
+--- 945,957 ----
+    rm -rf conftest*
+    CPP="${CC-cc} -nologo -E"
+    cat > conftest.$ac_ext <<EOF
+! #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: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,988 ****
+  
+  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
+  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"
+  #include "confdefs.h"
+  #include <sgtty.h>
+  Autoconf TIOCGETP
+--- 977,989 ----
+  
+  if test $ac_cv_prog_gcc = yes; then
+      echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6
+! 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 987 "configure"
+  #include "confdefs.h"
+  #include <sgtty.h>
+  Autoconf TIOCGETP
+***************
+*** 1000,1006 ****
+  
+    if test $ac_cv_prog_gcc_traditional = no; then
+      cat > conftest.$ac_ext <<EOF
+! #line 1004 "configure"
+  #include "confdefs.h"
+  #include <termio.h>
+  Autoconf TCGETA
+--- 1001,1007 ----
+  
+    if test $ac_cv_prog_gcc_traditional = no; then
+      cat > conftest.$ac_ext <<EOF
+! #line 1005 "configure"
+  #include "confdefs.h"
+  #include <termio.h>
+  Autoconf TCGETA
+***************
+*** 1026,1032 ****
+  # 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
+  if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then
+    echo $ac_n "(cached) $ac_c" 1>&6
+  else
+--- 1027,1033 ----
+  # 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: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,1073 ****
+  # 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
+  if test -z "$INSTALL"; then
+  if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+    echo $ac_n "(cached) $ac_c" 1>&6
+--- 1068,1074 ----
+  # 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: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,1149 ****
+  # sed with no file args requires a program.
+  test "$program_transform_name" = "" && program_transform_name="s,x,x,"
+  
+  
+  ###  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
+  cat > conftest.$ac_ext <<EOF
+! #line 1147 "configure"
+  #include "confdefs.h"
+  #ifdef _AIX
+    yes
+--- 1139,1184 ----
+  # 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:1180: checking for AIX" >&5
+  cat > conftest.$ac_ext <<EOF
+! #line 1182 "configure"
+  #include "confdefs.h"
+  #ifdef _AIX
+    yes
+***************
+*** 1165,1171 ****
+  
+  
+  echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6
+! echo "configure:1169: 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
+--- 1200,1206 ----
+  
+  
+  echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6
+! 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,1857 ****
+  fi
+  
+  
+! ###  checks for header files
+! for ac_hdr in \
+! ncurses/term.h \
+! stdlib.h \
+! termios.h \
+! unistd.h \
+  
+! 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 "(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
+  
+! 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
+  
+! 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
+  
+! fi
+  
+  
+!   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
+  fi
+! rm -f conftest*
+!     
+  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
+  
+-   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"
+  #include "confdefs.h"
+  
+! #include <sys/types.h>
+! #ifdef STDC_HEADERS
+! #include <stdlib.h>
+! #include <stddef.h>
+  #endif
+! #include <stdio.h>
+  int main() {
+! size_t x
+  ; return 0; }
+  EOF
+! if { (eval echo configure:1329: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+    rm -rf conftest*
+!   cf_cv_type_size_t=yes
+  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*
+!      
+  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: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
+  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
+  fi
+- rm -f conftest*
+  
+  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*
+  
+  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
+!   :
+  else
+    cat > conftest.$ac_ext <<EOF
+! #line 1418 "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); }
+  
+  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
+!   :
+  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
+! 
+  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
+  
+! 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 "(cached) $ac_c" 1>&6
+  else
+    cat > conftest.$ac_ext <<EOF
+! #line 1458 "configure"
+  #include "confdefs.h"
+! #include <sys/types.h>
+! #if STDC_HEADERS
+! #include <stdlib.h>
+! #include <stddef.h>
+  #endif
+  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
+    rm -rf conftest*
+!   ac_cv_type_time_t=yes
+  else
+    rm -rf conftest*
+!   ac_cv_type_time_t=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
+! 
+  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_n "(cached) $ac_c" 1>&6
+  else
+    cat > conftest.$ac_ext <<EOF
+! #line 1504 "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 0; }
+  EOF
+! if { (eval echo configure:1527: \"$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
+    echo "configure: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+    rm -rf conftest*
+!   eval "ac_cv_func_$ac_func=no"
+  fi
+  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
+!  
+  else
+!   echo "$ac_t""no" 1>&6
+  fi
+- done
+  
+  
+! 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 "(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();
+  
+  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();
+  #endif
+  
+  ; return 0; }
+  EOF
+! if { (eval echo configure:1581: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+    rm -rf conftest*
+!   eval "ac_cv_func_memmove=yes"
+  else
+    echo "configure: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+    rm -rf conftest*
+!   eval "ac_cv_func_memmove=no"
+  fi
+  rm -f conftest*
+  fi
+  
+! if eval "test \"`echo '$ac_cv_func_'memmove`\" = yes"; then
+!   echo "$ac_t""yes" 1>&6
+!   :
+! else
+!   echo "$ac_t""no" 1>&6
+  
+! 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_n "(cached) $ac_c" 1>&6
+  else
+!   cat > conftest.$ac_ext <<EOF
+! #line 1605 "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();
+! 
+  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();
+  #endif
+  
+  ; return 0; }
+  EOF
+! if { (eval echo configure:1628: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+    rm -rf conftest*
+!   eval "ac_cv_func_bcopy=yes"
+  else
+    echo "configure: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+    rm -rf conftest*
+!   eval "ac_cv_func_bcopy=no"
+  fi
+  rm -f conftest*
+  fi
+  
+! 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
+    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"
+  #include "confdefs.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"));
+! }
+!              
+  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
+  else
+    echo "configure: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+!   rm -fr conftest*
+!   cf_cv_good_bcopy=no
+  fi
+! rm -fr conftest*
+  fi
+  
+-              
+  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
+  
+! 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"
+  
+- 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
+  
+-      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
+  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"
+  #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; }
+  ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+  if test -z "$ac_err"; then
+    rm -rf conftest*
+--- 1221,1912 ----
+  fi
+  
+  
+! ###  checks for compiler characteristics
+  
+! 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
+!   
+! 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=
+  
+! 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[^=]*='\''\"[^"]*//'`
+  
+!                      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
+! 
+! 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
+  
+  
+  
+  
+       cat > conftest.$ac_ext <<EOF
+! #line 1324 "configure"
+  #include "confdefs.h"
+  
+! #ifndef CC_HAS_PROTOS
+! #if !defined(__STDC__) || (__STDC__ != 1)
+! choke me
+  #endif
+! #endif
+! 
+  int main() {
+! 
+!      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:1340: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+    rm -rf conftest*
+!   cf_cv_ansi_cc="$cf_arg"; break
+  else
+    echo "configure: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  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
+  
+! 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
+  
+! 
+! 
+! 
+  else
+!      cat >> confdefs.h <<\EOF
+! #define CC_HAS_PROTOS 1
+! EOF
+  
+  fi
++ fi
+  
+! 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 1444 "configure"
+  #include "confdefs.h"
+  
++ 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: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 -rf conftest*
+!   ac_cv_c_const=no
+  fi
++ rm -f conftest*
+  fi
+  
+! echo "$ac_t""$ac_cv_c_const" 1>&6
+! if test $ac_cv_c_const = no; then
+    cat >> confdefs.h <<\EOF
+! #define const 
+  EOF
+  
+  fi
+  
+! 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 1519 "configure"
+  #include "confdefs.h"
+! 
+! int main() {
+! 
+! #ifndef __CYGWIN__
+! #define __CYGWIN__ __CYGWIN32__
+  #endif
++ return __CYGWIN__;
++ ; return 0; }
+  EOF
+! if { (eval echo configure:1530: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+    rm -rf conftest*
+!   ac_cv_cygwin=yes
+  else
++   echo "configure: failed program was:" >&5
++   cat conftest.$ac_ext >&5
+    rm -rf conftest*
+!   ac_cv_cygwin=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: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 1552 "configure"
+  #include "confdefs.h"
+  
+  int main() {
+! return __MINGW32__;
+  ; return 0; }
+  EOF
+! if { (eval echo configure:1559: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+    rm -rf conftest*
+!   ac_cv_mingw32=yes
+  else
+    echo "configure: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+    rm -rf conftest*
+!   ac_cv_mingw32=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
+! 
+! 
+! 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
+!   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
+  
++ 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 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
+!   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() {
+  
+! #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:1712: \"$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"
+! 
+!      ;;
+! 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 1759 "configure"
+  #include "confdefs.h"
+! #include <sys/types.h>
+  int main() {
+  
+! #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:1789: \"$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_cv_xopen_source=$cf_XOPEN_SOURCE
+  fi
+  rm -f conftest*
++      CPPFLAGS="$cf_save"
++      
+  fi
++ rm -f conftest*
+  
+! 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
+    
+!      
+! 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() {
+! 
+! #ifndef _POSIX_C_SOURCE
+! make an error
+! #endif
+! ; return 0; }
+  EOF
+! 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 -rf conftest*
+!   cf_cv_posix_c_source=no
+  fi
+! rm -f conftest*
+!      CPPFLAGS="$cf_save"
+!      
+  fi
++ rm -f conftest*
+  
+  fi
+  
+! echo "$ac_t""$cf_cv_posix_c_source" 1>&6
+! test "$cf_cv_posix_c_source" != no && CPPFLAGS="$CPPFLAGS $cf_cv_posix_c_source"
+  
+!      ;;
+! esac
+  
+  
+! ###  checks for header files
+! for ac_hdr in \
+! ncurses/term.h \
+! stdlib.h \
+! termios.h \
+! unistd.h \
+  
+  do
+  ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+  echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+! 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 1905 "configure"
+  #include "confdefs.h"
+  #include <$ac_hdr>
+  EOF
+  ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+! { (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,3064 ****
+  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 "(cached) $ac_c" 1>&6
+  else
+    cat > conftest.$ac_ext <<EOF
+! #line 1901 "configure"
+  #include "confdefs.h"
+! #include <$ac_hdr>
+  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
+    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
+  
+! 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 "(cached) $ac_c" 1>&6
+  else
+!   
+! cat > conftest.$ac_ext <<EOF
+! #line 1939 "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
+  int main() {
+! char *path = _PATH_LASTLOG
+  ; return 0; }
+  EOF
+! if { (eval echo configure:1954: \"$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
+  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
+  EOF
+  
+  
+  
+  
+! 
+! 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 "(cached) $ac_c" 1>&6
+  else
+    
+!      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 1997 "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:2006: \"$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 -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 */
+       
+! ; return 0; }
+  EOF
+! if { (eval echo configure:2025: \"$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
+  fi
+  rm -f conftest*
+  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
+  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: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
+  else
+!   
+!      cat > conftest.$ac_ext <<EOF
+! #line 2061 "configure"
+  #include "confdefs.h"
+  
+- #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
+  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_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: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 "(cached) $ac_c" 1>&6
+  else
+!   
+!      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 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
+    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
+  
+  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
+  EOF
+  
+-      ;;
+- 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:2149: 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 2161 "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:2170: \"$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
+- 
+  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
+  
+-      
+- 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
+  else
+-   echo "configure: failed program was:" >&5
+-   cat conftest.$ac_ext >&5
+-   rm -rf conftest*
+    cat > conftest.$ac_ext <<EOF
+! #line 2224 "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:2233: \"$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 $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 "(cached) $ac_c" 1>&6
+  else
+!   
+!      cat > conftest.$ac_ext <<EOF
+! #line 2273 "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:2282: \"$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
+! 
+!      
+! 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
+    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"
+  #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; }
+  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
+  else
+    echo "configure: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+!   rm -rf conftest*
+!   cf_cv_sysv_utmp=no
+  fi
+! rm -f 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_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
+  
+- # 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
+    echo $ac_n "(cached) $ac_c" 1>&6
+  else
+    
+  cf_save_LIBS="$LIBS"
+! LIBS="-lutempter $LIBS"
+! cat > conftest.$ac_ext <<EOF
+! #line 2373 "configure"
+  #include "confdefs.h"
+  
+! #include <utempter.h>
+! 
+! int main() {
+! 
+!      addToUtmp("/dev/tty", 0, 1);
+!      removeFromUtmp();
+! 
+! ; return 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
+  else
+    echo "configure: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+!   rm -rf conftest*
+!   
+!      cf_cv_have_utempter=no
+  fi
+! rm -f conftest*
+! LIBS="$cf_save_LIBS"
+! 
+  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
+  
+-      LIBS="-lutempter $LIBS"
+  fi
+  
+! fi
+  
+! ###  checks for external data
+  
+  
+! 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
+    echo $ac_n "(cached) $ac_c" 1>&6
+  else
+    
+!     cat > conftest.$ac_ext <<EOF
+! #line 2422 "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
+  ; return 0; }
+  EOF
+! if { (eval echo configure:2435: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+    rm -rf conftest*
+!   cf_cv_dcl_errno=yes
+  else
+    echo "configure: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+-   rm -rf conftest*
+-   cf_cv_dcl_errno=no
+  fi
+  rm -f conftest*
+! 
+  fi
+  
+! 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:2463: 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 2469 "configure"
+  #include "confdefs.h"
+! 
+! #undef errno
+! extern int errno;
+! 
+! int main() {
+! errno = 2
+! ; return 0; }
+  EOF
+! if { (eval echo configure:2479: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+    rm -rf conftest*
+!   cf_cv_have_errno=yes
+  else
+    echo "configure: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+    rm -rf conftest*
+!   cf_cv_have_errno=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
+  EOF
+! 
+  fi
+  
+! 
+! 
+! 
+! 
+! 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 "(cached) $ac_c" 1>&6
+  else
+    
+  
+! # 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
+  
+- # 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_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 "(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
+  else
+!   cat > conftest.$ac_ext <<EOF
+! #line 2586 "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: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
+  else
+    echo "configure: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+-   rm -fr conftest*
+-   cf_cv_tty_group=no
+  fi
+! rm -fr conftest*
+  fi
+  
+- elif test "$cross_compiling" = yes; then
+-      cf_cv_tty_group=unknown
+- else
+-      cf_cv_tty_group=yes
+  fi
+  
+! fi
+  
+! 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
+  
+  
+  
+! ###  checks for compiler characteristics
+  
+! 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_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_fix_cppflags=no
+! cf_new_cflags=
+! cf_new_cppflags=
+! cf_new_extra_cppflags=
+  
+! 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[^=]*='\''\"[^"]*//'`
+  
+!                      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
+  
+- 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
+! 
+! 
+! 
+! 
+!      cat > conftest.$ac_ext <<EOF
+! #line 2737 "configure"
+  #include "confdefs.h"
+  
+! #ifndef CC_HAS_PROTOS
+! #if !defined(__STDC__) || (__STDC__ != 1)
+! choke me
+! #endif
+! #endif
+! 
+  int main() {
+  
+!      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:2753: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+    rm -rf conftest*
+!   cf_cv_ansi_cc="$cf_arg"; break
+  else
+    echo "configure: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  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
+  
+- 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
+  
+  
+  
+! 
+  else
+!      cat >> confdefs.h <<\EOF
+! #define CC_HAS_PROTOS 1
+! EOF
+! 
+! fi
+  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_n "(cached) $ac_c" 1>&6
+  else
+!   cat > conftest.$ac_ext <<EOF
+! #line 2857 "configure"
+  #include "confdefs.h"
+  
+! 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:2906: \"$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 -rf conftest*
+!   ac_cv_c_const=no
+  fi
+  rm -f conftest*
+  fi
+  
+! echo "$ac_t""$ac_cv_c_const" 1>&6
+! if test $ac_cv_c_const = no; then
+!   cat >> confdefs.h <<\EOF
+! #define const 
+  EOF
+  
+  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
+    echo $ac_n "(cached) $ac_c" 1>&6
+  else
+!   cat > conftest.$ac_ext <<EOF
+! #line 2932 "configure"
+  #include "confdefs.h"
+  
+! int main() {
+! 
+! #ifndef __CYGWIN__
+! #define __CYGWIN__ __CYGWIN32__
+  #endif
+! return __CYGWIN__;
+  ; return 0; }
+  EOF
+! if { (eval echo configure:2943: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+    rm -rf conftest*
+!   ac_cv_cygwin=yes
+  else
+    echo "configure: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+    rm -rf conftest*
+!   ac_cv_cygwin=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_n "(cached) $ac_c" 1>&6
+  else
+!   cat > conftest.$ac_ext <<EOF
+! #line 2965 "configure"
+  #include "confdefs.h"
+  
+  int main() {
+! return __MINGW32__;
+  ; return 0; }
+  EOF
+! if { (eval echo configure:2972: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+    rm -rf conftest*
+!   ac_cv_mingw32=yes
+  else
+    echo "configure: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+    rm -rf conftest*
+!   ac_cv_mingw32=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
+  
+  
+! 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:3004: checking for executable suffix" >&5
+! if eval "test \"`echo '$''{'ac_cv_exeext'+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
+  fi
+  fi
+  
+! 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 object suffix""... $ac_c" 1>&6
+! echo "configure:3035: checking for object suffix" >&5
+! if eval "test \"`echo '$''{'ac_cv_objext'+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
+  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
+  
+  
+--- 1932,3335 ----
+  fi
+  done
+  
+! 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 1942 "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:1951: \"$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
+! 
+! 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
+! 
+  fi
+  
+! 
+!   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 1978 "configure"
+  #include "confdefs.h"
+! #include <langinfo.h>
+  int main() {
+! char* cs = nl_langinfo(CODESET);
+  ; return 0; }
+  EOF
+! if { (eval echo configure:1985: \"$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
+  fi
+  rm -f conftest*
+!     
+  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
+  
++   fi
+  
+  
++ ###  checks for typedefs
+  
+! 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
+    
+!      cat > conftest.$ac_ext <<EOF
+! #line 2016 "configure"
+! #include "confdefs.h"
+! 
+  #include <sys/types.h>
+! #ifdef STDC_HEADERS
+! #include <stdlib.h>
+! #include <stddef.h>
+  #endif
+! #include <stdio.h>
+  int main() {
+! size_t x
+  ; return 0; }
+  EOF
+! if { (eval echo configure:2029: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+    rm -rf conftest*
+!   cf_cv_type_size_t=yes
+  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*
+       
+! 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
+! 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*
+!   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*
+  
+  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 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*
+  
+! 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
+!   :
+  else
+!   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); }
+  
+  EOF
+! 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 -fr conftest*
+!   ac_cv_header_stdc=no
+  fi
+! rm -fr conftest*
+  fi
+  
+! 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
+  
+! 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
+!   cat > conftest.$ac_ext <<EOF
+! #line 2158 "configure"
+! #include "confdefs.h"
+  #include <sys/types.h>
+! #if STDC_HEADERS
+! #include <stdlib.h>
+! #include <stddef.h>
+  #endif
+  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
+    rm -rf conftest*
+!   ac_cv_type_time_t=yes
+  else
+!   rm -rf conftest*
+!   ac_cv_type_time_t=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
+  
+  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: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
+!   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();
+  
+  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 0; }
+  EOF
+! if { (eval echo configure:2227: \"$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
+    echo "configure: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+    rm -rf conftest*
+!   eval "ac_cv_func_$ac_func=no"
+  fi
+  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
+!  
+! else
+!   echo "$ac_t""no" 1>&6
+  fi
++ done
+  
+  
+! 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
+    cat > conftest.$ac_ext <<EOF
+! #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();
+  
+  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();
+! #endif
+! 
+  ; return 0; }
+  EOF
+! if { (eval echo configure:2281: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+    rm -rf conftest*
+!   eval "ac_cv_func_memmove=yes"
+  else
+    echo "configure: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+    rm -rf conftest*
+!   eval "ac_cv_func_memmove=no"
+  fi
+  rm -f conftest*
+  fi
+  
+! if eval "test \"`echo '$ac_cv_func_'memmove`\" = yes"; then
+!   echo "$ac_t""yes" 1>&6
+!   :
+! else
+!   echo "$ac_t""no" 1>&6
+  
+! 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 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();
+  
+  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();
+! #endif
+! 
+  ; return 0; }
+  EOF
+! if { (eval echo configure:2328: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+    rm -rf conftest*
+!   eval "ac_cv_func_bcopy=yes"
+  else
+    echo "configure: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+    rm -rf conftest*
+!   eval "ac_cv_func_bcopy=no"
+  fi
+  rm -f conftest*
+  fi
+  
+! 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
+    
+!              if test "$cross_compiling" = yes; then
+!   cf_cv_good_bcopy=unknown
+! else
+!   cat > conftest.$ac_ext <<EOF
+! #line 2353 "configure"
+  #include "confdefs.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"));
+! }
+!              
+  EOF
+! 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 -fr conftest*
+!   cf_cv_good_bcopy=no
+  fi
+! rm -fr conftest*
+  fi
+  
+!              
+! 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: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"
+! 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"
+  
+! /* 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: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 -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 2477 "configure"
++ #include "confdefs.h"
+  
+! #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
+    
+!      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"
+  
+  int main() {
+! tgetent(0, "$cf_TERMVAR")
+  ; return 0; }
+  EOF
+! if { (eval echo configure:2522: \"$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
+  
+!      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
+  
+! 
+!                 # 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: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 2601 "configure"
+  #include "confdefs.h"
+! #include <$ac_hdr>
+  EOF
+! 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*
+!   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
+  
+! 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"
+  
+! #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
+  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
+! EOF
+  
+  
+  
+  
+  
+! 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_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
+!   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"
+! $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: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
+  fi
+! rm -f conftest*
+  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
+  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"
+  
+! #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_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_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;
+       
+! ; 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
+  
+! 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
+! EOF
+  
+       ;;
+  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
+  
+! 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
+! 
+       
+! 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 $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
+  
+       
+! 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"
+  
+! #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; }
+  EOF
+! 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_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*
+  
+  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_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
+!   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: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
+!   
+! cf_save_LIBS="$LIBS"
+! LIBS="-lutempter $LIBS"
+! cat > conftest.$ac_ext <<EOF
+! #line 3073 "configure"
+  #include "confdefs.h"
+  
+! #include <utempter.h>
+  
+! int main() {
+  
+!      addToUtmp("/dev/tty", 0, 1);
+!      removeFromUtmp();
+  
+  ; return 0; }
+  EOF
+! if { (eval echo configure:3085: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+    rm -rf conftest*
+!   
+!      cf_cv_have_utempter=yes
+  else
+    echo "configure: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+    rm -rf conftest*
+!   
+!      cf_cv_have_utempter=no
+  fi
+  rm -f conftest*
++ LIBS="$cf_save_LIBS"
++ 
+  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
+  
++      LIBS="-lutempter $LIBS"
+  fi
+  
+! 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 3122 "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
+  ; return 0; }
+  EOF
+! if { (eval echo configure:3135: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+    rm -rf conftest*
+!   cf_cv_dcl_errno=yes
+  else
+    echo "configure: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+    rm -rf conftest*
+!   cf_cv_dcl_errno=no
+  fi
+  rm -f conftest*
+! 
+  fi
+  
+! 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 3169 "configure"
+  #include "confdefs.h"
+  
++ #undef errno
++ extern int errno;
++ 
+  int main() {
+! errno = 2
+  ; return 0; }
+  EOF
+! if { (eval echo configure:3179: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+    rm -rf conftest*
+!   cf_cv_have_errno=yes
+  else
+    echo "configure: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+    rm -rf conftest*
+!   cf_cv_have_errno=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
+! EOF
+! 
+! fi
+  
+  
+  
+! 
+! 
+! 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 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
+  
+! # 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_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
+!   
+! 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
+!   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 -fr conftest*
+  fi
+  
+! elif test "$cross_compiling" = yes; then
+!      cf_cv_tty_group=unknown
+! else
+!      cf_cv_tty_group=yes
+! fi
+  
+! fi
+  
+! 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,3077 ****
+  ###  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
+  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"
+  #include "confdefs.h"
+  #include <sys/types.h>
+  #include <sys/wait.h>
+--- 3337,3348 ----
+  ###  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: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 3346 "configure"
+  #include "confdefs.h"
+  #include <sys/types.h>
+  #include <sys/wait.h>
+***************
+*** 3087,3093 ****
+  s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
+  ; return 0; }
+  EOF
+! if { (eval echo configure:3091: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+    rm -rf conftest*
+    ac_cv_header_sys_wait_h=yes
+  else
+--- 3358,3364 ----
+  s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
+  ; return 0; }
+  EOF
+! 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,3122 ****
+  
+  
+  echo $ac_n "checking for POSIX wait functions""... $ac_c" 1>&6
+! echo "configure:3114: 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"
+  #include "confdefs.h"
+  
+  #include <stdlib.h>
+--- 3381,3393 ----
+  
+  
+  echo $ac_n "checking for POSIX wait functions""... $ac_c" 1>&6
+! 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 3391 "configure"
+  #include "confdefs.h"
+  
+  #include <stdlib.h>
+***************
+*** 3134,3140 ****
+  
+  ; return 0; }
+  EOF
+! if { (eval echo configure:3138: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+    rm -rf conftest*
+    cf_cv_posix_wait=yes
+  else
+--- 3405,3411 ----
+  
+  ; return 0; }
+  EOF
+! 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,3168 ****
+  
+      
+  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
+  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"
+  #include "confdefs.h"
+  
+  #ifdef HAVE_STDLIB_H
+--- 3427,3439 ----
+  
+      
+  echo $ac_n "checking if external sys_nerr is declared""... $ac_c" 1>&6
+! 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 3437 "configure"
+  #include "confdefs.h"
+  
+  #ifdef HAVE_STDLIB_H
+***************
+*** 3175,3181 ****
+  long x = (long) sys_nerr
+  ; return 0; }
+  EOF
+! if { (eval echo configure:3179: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+    rm -rf conftest*
+    cf_cv_dcl_sys_nerr=yes
+  else
+--- 3446,3452 ----
+  long x = (long) sys_nerr
+  ; return 0; }
+  EOF
+! 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,3215 ****
+  # 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
+  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"
+  #include "confdefs.h"
+  
+  #undef sys_nerr
+--- 3474,3486 ----
+  # 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: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 3484 "configure"
+  #include "confdefs.h"
+  
+  #undef sys_nerr
+***************
+*** 3219,3225 ****
+  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
+    rm -rf conftest*
+    cf_cv_have_sys_nerr=yes
+  else
+--- 3490,3496 ----
+  sys_nerr = 2
+  ; return 0; }
+  EOF
+! 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,3260 ****
+  
+      
+  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
+  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"
+  #include "confdefs.h"
+  
+  #ifdef HAVE_STDLIB_H
+--- 3519,3531 ----
+  
+      
+  echo $ac_n "checking if external sys_errlist is declared""... $ac_c" 1>&6
+! 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 3529 "configure"
+  #include "confdefs.h"
+  
+  #ifdef HAVE_STDLIB_H
+***************
+*** 3267,3273 ****
+  long x = (long) sys_errlist
+  ; return 0; }
+  EOF
+! if { (eval echo configure:3271: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+    rm -rf conftest*
+    cf_cv_dcl_sys_errlist=yes
+  else
+--- 3538,3544 ----
+  long x = (long) sys_errlist
+  ; return 0; }
+  EOF
+! 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,3307 ****
+  # 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
+  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"
+  #include "confdefs.h"
+  
+  #undef sys_errlist
+--- 3566,3578 ----
+  # 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: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 3576 "configure"
+  #include "confdefs.h"
+  
+  #undef sys_errlist
+***************
+*** 3311,3317 ****
+  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
+    rm -rf conftest*
+    cf_cv_have_sys_errlist=yes
+  else
+--- 3582,3588 ----
+  sys_errlist = 2
+  ; return 0; }
+  EOF
+! 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,3354 ****
+  
+  
+  echo $ac_n "checking if we should define SYSV""... $ac_c" 1>&6
+! echo "configure:3345: 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"
+  #include "confdefs.h"
+  
+  #undef  SYSV
+--- 3612,3625 ----
+  
+  
+  echo $ac_n "checking if we should define SYSV""... $ac_c" 1>&6
+! 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 3623 "configure"
+  #include "confdefs.h"
+  
+  #undef  SYSV
+***************
+*** 3379,3385 ****
+  
+  ; return 0; }
+  EOF
+! if { (eval echo configure:3383: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+    rm -rf conftest*
+    cf_cv_sysv=yes
+  else
+--- 3650,3656 ----
+  
+  ; return 0; }
+  EOF
+! if { (eval echo configure:3654: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+    rm -rf conftest*
+    cf_cv_sysv=yes
+  else
+***************
+*** 3400,3406 ****
+  
+  
+  echo $ac_n "checking for elf_begin in -lelf""... $ac_c" 1>&6
+! echo "configure:3404: 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
+--- 3671,3677 ----
+  
+  
+  echo $ac_n "checking for elf_begin in -lelf""... $ac_c" 1>&6
+! 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,3414 ****
+    ac_save_LIBS="$LIBS"
+  LIBS="-lelf  $LIBS"
+  cat > conftest.$ac_ext <<EOF
+! #line 3412 "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
+--- 3679,3685 ----
+    ac_save_LIBS="$LIBS"
+  LIBS="-lelf  $LIBS"
+  cat > conftest.$ac_ext <<EOF
+! #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,3425 ****
+  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
+    rm -rf conftest*
+    eval "ac_cv_lib_$ac_lib_var=yes"
+  else
+--- 3690,3696 ----
+  elf_begin()
+  ; return 0; }
+  EOF
+! 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,3448 ****
+    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
+  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"
+  #include "confdefs.h"
+  
+  #include <elf.h>
+--- 3707,3719 ----
+    echo "$ac_t""yes" 1>&6
+    
+  echo $ac_n "checking if this is an SVR4 system""... $ac_c" 1>&6
+! 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 3717 "configure"
+  #include "confdefs.h"
+  
+  #include <elf.h>
+***************
+*** 3463,3469 ****
+  
+  ; return 0; }
+  EOF
+! if { (eval echo configure:3467: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+    rm -rf conftest*
+    cf_cv_svr4=yes
+  else
+--- 3734,3740 ----
+  
+  ; return 0; }
+  EOF
+! if { (eval echo configure:3738: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+    rm -rf conftest*
+    cf_cv_svr4=yes
+  else
+***************
+*** 3487,3556 ****
+  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
+  
+  
+  # Check whether --with-x or --without-x was given.
+--- 3758,3769 ----
+  EOF
+  
+  
+  # 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:3767: checking for X" >&5
+  
+  
+  # Check whether --with-x or --without-x was given.
+***************
+*** 3613,3624 ****
+  
+    # First, try using that file with no special directory specified.
+  cat > conftest.$ac_ext <<EOF
+! #line 3617 "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; }
+  ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+  if test -z "$ac_err"; then
+    rm -rf conftest*
+--- 3826,3837 ----
+  
+    # First, try using that file with no special directory specified.
+  cat > conftest.$ac_ext <<EOF
+! #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: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,3700 ****
+    ac_save_LIBS="$LIBS"
+    LIBS="-l$x_direct_test_library $LIBS"
+  cat > conftest.$ac_ext <<EOF
+! #line 3691 "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
+    rm -rf conftest*
+    LIBS="$ac_save_LIBS"
+  # We can link X programs with no special library path.
+--- 3900,3913 ----
+    ac_save_LIBS="$LIBS"
+    LIBS="-l$x_direct_test_library $LIBS"
+  cat > conftest.$ac_ext <<EOF
+! #line 3904 "configure"
+  #include "confdefs.h"
+  
+  int main() {
+  ${x_direct_test_function}()
+  ; return 0; }
+  EOF
+! 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,3816 ****
+      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
+        ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries"
+        cat > conftest.$ac_ext <<EOF
+! #line 3807 "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
+    rm -rf conftest*
+    ac_R_nospace=yes
+  else
+--- 4013,4029 ----
+      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: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 4020 "configure"
+  #include "confdefs.h"
+  
+  int main() {
+  
+  ; return 0; }
+  EOF
+! 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,3839 ****
+        else
+       LIBS="$ac_xsave_LIBS -R $x_libraries"
+       cat > conftest.$ac_ext <<EOF
+! #line 3830 "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
+    rm -rf conftest*
+    ac_R_space=yes
+  else
+--- 4039,4052 ----
+        else
+       LIBS="$ac_xsave_LIBS -R $x_libraries"
+       cat > conftest.$ac_ext <<EOF
+! #line 4043 "configure"
+  #include "confdefs.h"
+  
+  int main() {
+  
+  ; return 0; }
+  EOF
+! 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,3871 ****
+      # 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
+  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
+--- 4078,4084 ----
+      # 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: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,3879 ****
+    ac_save_LIBS="$LIBS"
+  LIBS="-ldnet  $LIBS"
+  cat > conftest.$ac_ext <<EOF
+! #line 3877 "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
+--- 4086,4092 ----
+    ac_save_LIBS="$LIBS"
+  LIBS="-ldnet  $LIBS"
+  cat > conftest.$ac_ext <<EOF
+! #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,3890 ****
+  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
+    rm -rf conftest*
+    eval "ac_cv_lib_$ac_lib_var=yes"
+  else
+--- 4097,4103 ----
+  dnet_ntoa()
+  ; return 0; }
+  EOF
+! 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,3912 ****
+  
+      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
+  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
+--- 4119,4125 ----
+  
+      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: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,3920 ****
+    ac_save_LIBS="$LIBS"
+  LIBS="-ldnet_stub  $LIBS"
+  cat > conftest.$ac_ext <<EOF
+! #line 3918 "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
+--- 4127,4133 ----
+    ac_save_LIBS="$LIBS"
+  LIBS="-ldnet_stub  $LIBS"
+  cat > conftest.$ac_ext <<EOF
+! #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,3931 ****
+  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
+    rm -rf conftest*
+    eval "ac_cv_lib_$ac_lib_var=yes"
+  else
+--- 4138,4144 ----
+  dnet_ntoa()
+  ; return 0; }
+  EOF
+! 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,3965 ****
+      # 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
+  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"
+  #include "confdefs.h"
+  /* System header to define __stub macros and hopefully few prototypes,
+      which can conflict with char gethostbyname(); below.  */
+--- 4167,4178 ----
+      # 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: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 4176 "configure"
+  #include "confdefs.h"
+  /* System header to define __stub macros and hopefully few prototypes,
+      which can conflict with char gethostbyname(); below.  */
+***************
+*** 3982,3988 ****
+  
+  ; return 0; }
+  EOF
+! if { (eval echo configure:3986: \"$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
+--- 4195,4201 ----
+  
+  ; return 0; }
+  EOF
+! 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,4009 ****
+  
+      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
+  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
+--- 4216,4222 ----
+  
+      if test $ac_cv_func_gethostbyname = no; then
+        echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
+! 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,4017 ****
+    ac_save_LIBS="$LIBS"
+  LIBS="-lnsl  $LIBS"
+  cat > conftest.$ac_ext <<EOF
+! #line 4015 "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
+--- 4224,4230 ----
+    ac_save_LIBS="$LIBS"
+  LIBS="-lnsl  $LIBS"
+  cat > conftest.$ac_ext <<EOF
+! #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,4028 ****
+  gethostbyname()
+  ; return 0; }
+  EOF
+! if { (eval echo configure:4026: \"$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
+--- 4235,4241 ----
+  gethostbyname()
+  ; return 0; }
+  EOF
+! 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,4063 ****
+      # -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
+  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"
+  #include "confdefs.h"
+  /* System header to define __stub macros and hopefully few prototypes,
+      which can conflict with char connect(); below.  */
+--- 4265,4276 ----
+      # -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: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 4274 "configure"
+  #include "confdefs.h"
+  /* System header to define __stub macros and hopefully few prototypes,
+      which can conflict with char connect(); below.  */
+***************
+*** 4080,4086 ****
+  
+  ; return 0; }
+  EOF
+! if { (eval echo configure:4084: \"$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
+--- 4293,4299 ----
+  
+  ; return 0; }
+  EOF
+! 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,4107 ****
+  
+      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
+  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
+--- 4314,4320 ----
+  
+      if test $ac_cv_func_connect = no; then
+        echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6
+! 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,4115 ****
+    ac_save_LIBS="$LIBS"
+  LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
+  cat > conftest.$ac_ext <<EOF
+! #line 4113 "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
+--- 4322,4328 ----
+    ac_save_LIBS="$LIBS"
+  LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
+  cat > conftest.$ac_ext <<EOF
+! #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,4126 ****
+  connect()
+  ; return 0; }
+  EOF
+! if { (eval echo configure:4124: \"$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
+--- 4333,4339 ----
+  connect()
+  ; return 0; }
+  EOF
+! 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,4155 ****
+  
+      # 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
+  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"
+  #include "confdefs.h"
+  /* System header to define __stub macros and hopefully few prototypes,
+      which can conflict with char remove(); below.  */
+--- 4357,4368 ----
+  
+      # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX.
+      echo $ac_n "checking for remove""... $ac_c" 1>&6
+! 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 4366 "configure"
+  #include "confdefs.h"
+  /* System header to define __stub macros and hopefully few prototypes,
+      which can conflict with char remove(); below.  */
+***************
+*** 4172,4178 ****
+  
+  ; return 0; }
+  EOF
+! if { (eval echo configure:4176: \"$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
+--- 4385,4391 ----
+  
+  ; return 0; }
+  EOF
+! 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,4199 ****
+  
+      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
+  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
+--- 4406,4412 ----
+  
+      if test $ac_cv_func_remove = no; then
+        echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
+! 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,4207 ****
+    ac_save_LIBS="$LIBS"
+  LIBS="-lposix  $LIBS"
+  cat > conftest.$ac_ext <<EOF
+! #line 4205 "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
+--- 4414,4420 ----
+    ac_save_LIBS="$LIBS"
+  LIBS="-lposix  $LIBS"
+  cat > conftest.$ac_ext <<EOF
+! #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,4218 ****
+  remove()
+  ; return 0; }
+  EOF
+! if { (eval echo configure:4216: \"$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
+--- 4425,4431 ----
+  remove()
+  ; return 0; }
+  EOF
+! 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,4247 ****
+  
+      # 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
+  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"
+  #include "confdefs.h"
+  /* System header to define __stub macros and hopefully few prototypes,
+      which can conflict with char shmat(); below.  */
+--- 4449,4460 ----
+  
+      # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
+      echo $ac_n "checking for shmat""... $ac_c" 1>&6
+! 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 4458 "configure"
+  #include "confdefs.h"
+  /* System header to define __stub macros and hopefully few prototypes,
+      which can conflict with char shmat(); below.  */
+***************
+*** 4264,4270 ****
+  
+  ; return 0; }
+  EOF
+! if { (eval echo configure:4268: \"$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
+--- 4477,4483 ----
+  
+  ; return 0; }
+  EOF
+! 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,4291 ****
+  
+      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
+  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
+--- 4498,4504 ----
+  
+      if test $ac_cv_func_shmat = no; then
+        echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
+! 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,4299 ****
+    ac_save_LIBS="$LIBS"
+  LIBS="-lipc  $LIBS"
+  cat > conftest.$ac_ext <<EOF
+! #line 4297 "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
+--- 4506,4512 ----
+    ac_save_LIBS="$LIBS"
+  LIBS="-lipc  $LIBS"
+  cat > conftest.$ac_ext <<EOF
+! #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,4310 ****
+  shmat()
+  ; return 0; }
+  EOF
+! if { (eval echo configure:4308: \"$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
+--- 4517,4523 ----
+  shmat()
+  ; return 0; }
+  EOF
+! 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,4343 ****
+    # 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
+  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
+--- 4550,4556 ----
+    # 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: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,4351 ****
+    ac_save_LIBS="$LIBS"
+  LIBS="-lICE $X_EXTRA_LIBS $LIBS"
+  cat > conftest.$ac_ext <<EOF
+! #line 4349 "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
+--- 4558,4564 ----
+    ac_save_LIBS="$LIBS"
+  LIBS="-lICE $X_EXTRA_LIBS $LIBS"
+  cat > conftest.$ac_ext <<EOF
+! #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,4362 ****
+  IceConnectionNumber()
+  ; return 0; }
+  EOF
+! if { (eval echo configure:4360: \"$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
+--- 4569,4575 ----
+  IceConnectionNumber()
+  ; return 0; }
+  EOF
+! 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,4484 ****
+  
+  if test "$cf_check_cflags" != "$CFLAGS" ; then
+  cat > conftest.$ac_ext <<EOF
+! #line 4475 "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
+    :
+  else
+    echo "configure: failed program was:" >&5
+--- 4684,4697 ----
+  
+  if test "$cf_check_cflags" != "$CFLAGS" ; then
+  cat > conftest.$ac_ext <<EOF
+! #line 4688 "configure"
+  #include "confdefs.h"
+  #include <stdio.h>
+  int main() {
+  printf("Hello world");
+  ; return 0; }
+  EOF
+! 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,4508 ****
+  
+  
+  echo $ac_n "checking for XOpenDisplay""... $ac_c" 1>&6
+! echo "configure:4501: 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"
+  #include "confdefs.h"
+  /* System header to define __stub macros and hopefully few prototypes,
+      which can conflict with char XOpenDisplay(); below.  */
+--- 4710,4721 ----
+  
+  
+  echo $ac_n "checking for XOpenDisplay""... $ac_c" 1>&6
+! 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 4719 "configure"
+  #include "confdefs.h"
+  /* System header to define __stub macros and hopefully few prototypes,
+      which can conflict with char XOpenDisplay(); below.  */
+***************
+*** 4525,4531 ****
+  
+  ; return 0; }
+  EOF
+! if { (eval echo configure:4529: \"$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
+--- 4738,4744 ----
+  
+  ; return 0; }
+  EOF
+! 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,4550 ****
+    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
+  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
+--- 4757,4763 ----
+    echo "$ac_t""no" 1>&6
+  
+  echo $ac_n "checking for XOpenDisplay in -lX11""... $ac_c" 1>&6
+! 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,4558 ****
+    ac_save_LIBS="$LIBS"
+  LIBS="-lX11 $X_PRE_LIBS $LIBS $X_EXTRA_LIBS $LIBS"
+  cat > conftest.$ac_ext <<EOF
+! #line 4556 "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
+--- 4765,4771 ----
+    ac_save_LIBS="$LIBS"
+  LIBS="-lX11 $X_PRE_LIBS $LIBS $X_EXTRA_LIBS $LIBS"
+  cat > conftest.$ac_ext <<EOF
+! #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,4569 ****
+  XOpenDisplay()
+  ; return 0; }
+  EOF
+! if { (eval echo configure:4567: \"$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
+--- 4776,4782 ----
+  XOpenDisplay()
+  ; return 0; }
+  EOF
+! 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,4598 ****
+  
+  
+  echo $ac_n "checking for XtAppInitialize""... $ac_c" 1>&6
+! echo "configure:4591: 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"
+  #include "confdefs.h"
+  /* System header to define __stub macros and hopefully few prototypes,
+      which can conflict with char XtAppInitialize(); below.  */
+--- 4800,4811 ----
+  
+  
+  echo $ac_n "checking for XtAppInitialize""... $ac_c" 1>&6
+! 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 4809 "configure"
+  #include "confdefs.h"
+  /* System header to define __stub macros and hopefully few prototypes,
+      which can conflict with char XtAppInitialize(); below.  */
+***************
+*** 4615,4621 ****
+  
+  ; return 0; }
+  EOF
+! if { (eval echo configure:4619: \"$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
+--- 4828,4834 ----
+  
+  ; return 0; }
+  EOF
+! 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,4640 ****
+    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
+  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
+--- 4847,4853 ----
+    echo "$ac_t""no" 1>&6
+  
+  echo $ac_n "checking for XtAppInitialize in -lXt""... $ac_c" 1>&6
+! 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,4648 ****
+    ac_save_LIBS="$LIBS"
+  LIBS="-lXt $X_PRE_LIBS $LIBS $X_EXTRA_LIBS $LIBS"
+  cat > conftest.$ac_ext <<EOF
+! #line 4646 "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
+--- 4855,4861 ----
+    ac_save_LIBS="$LIBS"
+  LIBS="-lXt $X_PRE_LIBS $LIBS $X_EXTRA_LIBS $LIBS"
+  cat > conftest.$ac_ext <<EOF
+! #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,4659 ****
+  XtAppInitialize()
+  ; return 0; }
+  EOF
+! if { (eval echo configure:4657: \"$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
+--- 4866,4872 ----
+  XtAppInitialize()
+  ; return 0; }
+  EOF
+! 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,4712 ****
+  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
+  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"
+  #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; }
+  ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+  if test -z "$ac_err"; then
+    rm -rf conftest*
+--- 4909,4925 ----
+  do
+  ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+  echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+! 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 4918 "configure"
+  #include "confdefs.h"
+  #include <$ac_hdr>
+  EOF
+  ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+! { (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,4743 ****
+  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
+  withval=
+  
+  # Check whether --with-Xaw3d or --without-Xaw3d was given.
+--- 4950,4956 ----
+  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:4954: checking if you want to link with Xaw 3d library" >&5
+  withval=
+  
+  # Check whether --with-Xaw3d or --without-Xaw3d was given.
+***************
+*** 4754,4760 ****
+  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
+  withval=
+  
+  # Check whether --with-neXtaw or --without-neXtaw was given.
+--- 4967,4973 ----
+  fi
+  
+  echo $ac_n "checking if you want to link with neXT Athena library""... $ac_c" 1>&6
+! 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,4777 ****
+  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
+  withval=
+  
+  # Check whether --with-XawPlus or --without-XawPlus was given.
+--- 4984,4990 ----
+  fi
+  
+  echo $ac_n "checking if you want to link with Athena-Plus library""... $ac_c" 1>&6
+! 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,4794 ****
+  fi
+  
+  echo $ac_n "checking for XextCreateExtension in -lXext""... $ac_c" 1>&6
+! echo "configure:4792: 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
+--- 5001,5007 ----
+  fi
+  
+  echo $ac_n "checking for XextCreateExtension in -lXext""... $ac_c" 1>&6
+! 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,4802 ****
+    ac_save_LIBS="$LIBS"
+  LIBS="-lXext  $LIBS"
+  cat > conftest.$ac_ext <<EOF
+! #line 4800 "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
+--- 5009,5015 ----
+    ac_save_LIBS="$LIBS"
+  LIBS="-lXext  $LIBS"
+  cat > conftest.$ac_ext <<EOF
+! #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,4813 ****
+  XextCreateExtension()
+  ; return 0; }
+  EOF
+! if { (eval echo configure:4811: \"$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
+--- 5020,5026 ----
+  XextCreateExtension()
+  ; return 0; }
+  EOF
+! 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,4858 ****
+               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
+               else
+                       echo $ac_n "checking for $cf_test""... $ac_c" 1>&6
+! echo "configure:4853: checking for $cf_test" >&5
+               fi
+               cat > conftest.$ac_ext <<EOF
+! #line 4856 "configure"
+  #include "confdefs.h"
+  
+  #include <X11/Intrinsic.h>
+--- 5059,5071 ----
+               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:5063: checking for $cf_test in $cf_path" >&5
+               else
+                       echo $ac_n "checking for $cf_test""... $ac_c" 1>&6
+! echo "configure:5066: checking for $cf_test" >&5
+               fi
+               cat > conftest.$ac_ext <<EOF
+! #line 5069 "configure"
+  #include "confdefs.h"
+  
+  #include <X11/Intrinsic.h>
+***************
+*** 4861,4867 ****
+  
+  ; return 0; }
+  EOF
+! if { (eval echo configure:4865: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+    rm -rf conftest*
+    cf_result=yes
+  else
+--- 5074,5080 ----
+  
+  ; return 0; }
+  EOF
+! if { (eval echo configure:5078: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+    rm -rf conftest*
+    cf_result=yes
+  else
+***************
+*** 4908,4930 ****
+                       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
+                       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
+                       fi
+                       cf_SAVE="$LIBS"
+                       LIBS="$X_PRE_LIBS $LIBS $X_EXTRA_LIBS"
+                       cat > conftest.$ac_ext <<EOF
+! #line 4921 "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
+    rm -rf conftest*
+    cf_result=yes
+  else
+--- 5121,5143 ----
+                       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: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: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 5134 "configure"
+  #include "confdefs.h"
+  
+  int main() {
+  $cf_test()
+  ; return 0; }
+  EOF
+! 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,4973 ****
+  
+  
+  echo $ac_n "checking for declaration of fd_set""... $ac_c" 1>&6
+! echo "configure:4965: 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"
+  #include "confdefs.h"
+  
+  #include <sys/types.h>
+--- 5174,5186 ----
+  
+  
+  echo $ac_n "checking for declaration of fd_set""... $ac_c" 1>&6
+! 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 5184 "configure"
+  #include "confdefs.h"
+  
+  #include <sys/types.h>
+***************
+*** 4975,4981 ****
+  fd_set x
+  ; return 0; }
+  EOF
+! if { (eval echo configure:4979: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+    rm -rf conftest*
+    cf_cv_type_fd_set=sys/types.h
+  else
+--- 5188,5194 ----
+  fd_set x
+  ; return 0; }
+  EOF
+! 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,4990 ****
+    rm -rf conftest*
+    echo "trying X11/Xpoll.h" 1>&5
+  cat > conftest.$ac_ext <<EOF
+! #line 4988 "configure"
+  #include "confdefs.h"
+  
+  #ifdef HAVE_X11_XPOLL_H
+--- 5197,5203 ----
+    rm -rf conftest*
+    echo "trying X11/Xpoll.h" 1>&5
+  cat > conftest.$ac_ext <<EOF
+! #line 5201 "configure"
+  #include "confdefs.h"
+  
+  #ifdef HAVE_X11_XPOLL_H
+***************
+*** 4994,5000 ****
+  fd_set x
+  ; return 0; }
+  EOF
+! if { (eval echo configure:4998: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+    rm -rf conftest*
+    cf_cv_type_fd_set=X11/Xpoll.h
+  else
+--- 5207,5213 ----
+  fd_set x
+  ; return 0; }
+  EOF
+! 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,5009 ****
+    rm -rf conftest*
+    echo "trying sys/select.h" 1>&5
+  cat > conftest.$ac_ext <<EOF
+! #line 5007 "configure"
+  #include "confdefs.h"
+  
+  #include <sys/types.h>
+--- 5216,5222 ----
+    rm -rf conftest*
+    echo "trying sys/select.h" 1>&5
+  cat > conftest.$ac_ext <<EOF
+! #line 5220 "configure"
+  #include "confdefs.h"
+  
+  #include <sys/types.h>
+***************
+*** 5012,5018 ****
+  fd_set x
+  ; return 0; }
+  EOF
+! if { (eval echo configure:5016: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+    rm -rf conftest*
+    cf_cv_type_fd_set=sys/select.h
+  else
+--- 5225,5231 ----
+  fd_set x
+  ; return 0; }
+  EOF
+! 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,5050 ****
+  
+  
+  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
+  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"
+  #include "confdefs.h"
+  
+  #include <sys/types.h>
+--- 5251,5263 ----
+  
+  
+  echo $ac_n "checking for IRIX 6.5 baud-rate redefinitions""... $ac_c" 1>&6
+! 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 5261 "configure"
+  #include "confdefs.h"
+  
+  #include <sys/types.h>
+***************
+*** 5057,5063 ****
+  
+  ; return 0; }
+  EOF
+! if { (eval echo configure:5061: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+    rm -rf conftest*
+    cf_cv_termio_c_ispeed=yes
+  
+--- 5270,5276 ----
+  
+  ; return 0; }
+  EOF
+! 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,5091 ****
+  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
+  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
+--- 5298,5304 ----
+  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: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,5099 ****
+    ac_save_LIBS="$LIBS"
+  LIBS="-lutil  $LIBS"
+  cat > conftest.$ac_ext <<EOF
+! #line 5097 "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
+--- 5306,5312 ----
+    ac_save_LIBS="$LIBS"
+  LIBS="-lutil  $LIBS"
+  cat > conftest.$ac_ext <<EOF
+! #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,5110 ****
+  openpty()
+  ; return 0; }
+  EOF
+! if { (eval echo configure:5108: \"$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
+--- 5317,5323 ----
+  openpty()
+  ; return 0; }
+  EOF
+! 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,5147 ****
+       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
+  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"
+  #include "confdefs.h"
+  /* System header to define __stub macros and hopefully few prototypes,
+      which can conflict with char $ac_func(); below.  */
+--- 5349,5360 ----
+       for ac_func in grantpt
+  do
+  echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+! 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 5358 "configure"
+  #include "confdefs.h"
+  /* System header to define __stub macros and hopefully few prototypes,
+      which can conflict with char $ac_func(); below.  */
+***************
+*** 5164,5170 ****
+  
+  ; return 0; }
+  EOF
+! if { (eval echo configure:5168: \"$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
+--- 5377,5383 ----
+  
+  ; return 0; }
+  EOF
+! 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,5192 ****
+  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
+  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
+--- 5399,5405 ----
+  else
+    echo "$ac_t""no" 1>&6
+  echo $ac_n "checking for openpty in -lutil""... $ac_c" 1>&6
+! 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,5200 ****
+    ac_save_LIBS="$LIBS"
+  LIBS="-lutil  $LIBS"
+  cat > conftest.$ac_ext <<EOF
+! #line 5198 "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
+--- 5407,5413 ----
+    ac_save_LIBS="$LIBS"
+  LIBS="-lutil  $LIBS"
+  cat > conftest.$ac_ext <<EOF
+! #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,5211 ****
+  openpty()
+  ; return 0; }
+  EOF
+! if { (eval echo configure:5209: \"$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
+--- 5418,5424 ----
+  openpty()
+  ; return 0; }
+  EOF
+! 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,5247 ****
+  # 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
+  if eval "test \"`echo '$''{'ac_cv_path_XTERM_PATH'+set}'`\" = set"; then
+    echo $ac_n "(cached) $ac_c" 1>&6
+  else
+--- 5454,5460 ----
+  # 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: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,5288 ****
+  
+  
+  echo $ac_n "checking for XKB Bell extension""... $ac_c" 1>&6
+! echo "configure:5280: 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"
+  #include "confdefs.h"
+  
+  #include <X11/XKBlib.h>              /* has the prototype */
+--- 5489,5501 ----
+  
+  
+  echo $ac_n "checking for XKB Bell extension""... $ac_c" 1>&6
+! 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 5499 "configure"
+  #include "confdefs.h"
+  
+  #include <X11/XKBlib.h>              /* has the prototype */
+***************
+*** 5298,5304 ****
+  
+  ; return 0; }
+  EOF
+! if { (eval echo configure:5302: \"$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
+--- 5511,5517 ----
+  
+  ; return 0; }
+  EOF
+! 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,5332 ****
+  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
+  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"
+  #include "confdefs.h"
+  /* System header to define __stub macros and hopefully few prototypes,
+      which can conflict with char $ac_func(); below.  */
+--- 5534,5545 ----
+  for ac_func in Xutf8LookupString
+  do
+  echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+! 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 5543 "configure"
+  #include "confdefs.h"
+  /* System header to define __stub macros and hopefully few prototypes,
+      which can conflict with char $ac_func(); below.  */
+***************
+*** 5349,5355 ****
+  
+  ; return 0; }
+  EOF
+! if { (eval echo configure:5353: \"$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
+--- 5562,5568 ----
+  
+  ; return 0; }
+  EOF
+! 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,5386 ****
+  
+  
+  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
+  
+  # Check whether --enable-imake or --disable-imake was given.
+  if test "${enable_imake+set}" = set; then
+--- 5593,5599 ----
+  
+  
+  echo $ac_n "checking if we should use imake to help""... $ac_c" 1>&6
+! 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,5411 ****
+  # 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
+  if eval "test \"`echo '$''{'ac_cv_path_IMAKE'+set}'`\" = set"; then
+    echo $ac_n "(cached) $ac_c" 1>&6
+  else
+--- 5618,5624 ----
+  # 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: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,5566 ****
+--- 5774,5789 ----
+  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,5751 ****
+  
+  
+  echo $ac_n "checking for default terminal-id""... $ac_c" 1>&6
+! echo "configure:5749: 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
+--- 5968,5974 ----
+  
+  
+  echo $ac_n "checking for default terminal-id""... $ac_c" 1>&6
+! 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,5772 ****
+  
+  
+  echo $ac_n "checking for default terminal-type""... $ac_c" 1>&6
+! echo "configure:5770: 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
+--- 5989,5995 ----
+  
+  
+  echo $ac_n "checking for default terminal-type""... $ac_c" 1>&6
+! 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,5789 ****
+  
+  
+  echo $ac_n "checking for private terminfo-directory""... $ac_c" 1>&6
+! echo "configure:5787: 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
+--- 6006,6012 ----
+  
+  
+  echo $ac_n "checking for private terminfo-directory""... $ac_c" 1>&6
+! 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,5830 ****
+  
+  
+  echo $ac_n "checking if you want active-icons""... $ac_c" 1>&6
+! echo "configure:5828: 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
+--- 6047,6053 ----
+  
+  
+  echo $ac_n "checking if you want active-icons""... $ac_c" 1>&6
+! 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,5856 ****
+  fi
+  
+  echo $ac_n "checking if you want ANSI color""... $ac_c" 1>&6
+! echo "configure:5854: 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
+--- 6073,6079 ----
+  fi
+  
+  echo $ac_n "checking if you want ANSI color""... $ac_c" 1>&6
+! 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,5882 ****
+  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
+       
+  # Check whether --enable-16-color or --disable-16-color was given.
+  if test "${enable_16_color+set}" = set; then
+--- 6099,6105 ----
+  if test "$enable_ansi_color" = yes ; then
+  
+       echo $ac_n "checking if you want 16 colors like aixterm""... $ac_c" 1>&6
+! 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,5906 ****
+  
+  
+       echo $ac_n "checking if you want 256 colors""... $ac_c" 1>&6
+! echo "configure:5904: 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
+--- 6123,6129 ----
+  
+  
+       echo $ac_n "checking if you want 256 colors""... $ac_c" 1>&6
+! 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,5933 ****
+  
+       else
+       echo $ac_n "checking if you want 88 colors""... $ac_c" 1>&6
+! echo "configure:5931: 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
+--- 6150,6156 ----
+  
+       else
+       echo $ac_n "checking if you want 88 colors""... $ac_c" 1>&6
+! 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,5964 ****
+  fi
+  
+  echo $ac_n "checking if you want blinking cursor""... $ac_c" 1>&6
+! echo "configure:5962: 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
+--- 6181,6187 ----
+  fi
+  
+  echo $ac_n "checking if you want blinking cursor""... $ac_c" 1>&6
+! 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,5988 ****
+  
+  
+  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
+  
+  case $host_os in #(vi
+  linux*)
+--- 6205,6211 ----
+  
+  
+  echo $ac_n "checking if you want to ignore Linux's broken palette-strings""... $ac_c" 1>&6
+! echo "configure:6209: checking if you want to ignore Linux's broken palette-strings" >&5
+  
+  case $host_os in #(vi
+  linux*)
+***************
+*** 6021,6027 ****
+  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
+  
+  # Check whether --enable-broken-st or --disable-broken-st was given.
+  if test "${enable_broken_st+set}" = set; then
+--- 6244,6250 ----
+  fi
+  
+  echo $ac_n "checking if you want to allow broken string-terminators""... $ac_c" 1>&6
+! 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,6051 ****
+  
+  
+  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
+  
+  # Check whether --enable-c1-print or --disable-c1-print was given.
+  if test "${enable_c1_print+set}" = set; then
+--- 6268,6274 ----
+  
+  
+  echo $ac_n "checking if you want printable 128-159""... $ac_c" 1>&6
+! 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,6077 ****
+  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
+       
+  # Check whether --enable-bold-color or --disable-bold-color was given.
+  if test "${enable_bold_color+set}" = set; then
+--- 6294,6300 ----
+  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: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,6101 ****
+  
+  
+       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
+       
+  # Check whether --enable-color-class or --disable-color-class was given.
+  if test "${enable_color_class+set}" = set; then
+--- 6318,6324 ----
+  
+  
+       echo $ac_n "checking if you want separate color-classes""... $ac_c" 1>&6
+! 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,6125 ****
+  
+  
+       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
+       
+  # Check whether --enable-color-mode or --disable-color-mode was given.
+  if test "${enable_color_mode+set}" = set; then
+--- 6342,6348 ----
+  
+  
+       echo $ac_n "checking if you want color-mode enabled by default""... $ac_c" 1>&6
+! 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,6151 ****
+  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
+  
+  # Check whether --enable-highlighting or --disable-highlighting was given.
+  if test "${enable_highlighting+set}" = set; then
+--- 6368,6374 ----
+  fi
+  
+  echo $ac_n "checking if you want support for color highlighting""... $ac_c" 1>&6
+! 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,6175 ****
+  
+  
+  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
+  
+  # Check whether --enable-doublechars or --disable-doublechars was given.
+  if test "${enable_doublechars+set}" = set; then
+--- 6392,6398 ----
+  
+  
+  echo $ac_n "checking if you want support for doublesize characters""... $ac_c" 1>&6
+! 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,6199 ****
+  
+  
+  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
+  
+  # Check whether --enable-boxchars or --disable-boxchars was given.
+  if test "${enable_boxchars+set}" = set; then
+--- 6416,6422 ----
+  
+  
+  echo $ac_n "checking if you want fallback-support for box characters""... $ac_c" 1>&6
+! 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,6223 ****
+  
+  
+  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
+  
+  # Check whether --enable-freetype or --disable-freetype was given.
+  if test "${enable_freetype+set}" = set; then
+--- 6440,6446 ----
+  
+  
+  echo $ac_n "checking if you want to use FreeType library""... $ac_c" 1>&6
+! 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,6247 ****
+  # 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
+  if eval "test \"`echo '$''{'ac_cv_path_FREETYPE_CONFIG'+set}'`\" = set"; then
+    echo $ac_n "(cached) $ac_c" 1>&6
+  else
+--- 6464,6470 ----
+  # 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: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,6285 ****
+       # 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
+  if eval "test \"`echo '$''{'ac_cv_path_FREETYPE_CONFIG'+set}'`\" = set"; then
+    echo $ac_n "(cached) $ac_c" 1>&6
+  else
+--- 6502,6508 ----
+       # 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: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,6333 ****
+  else
+    
+  echo $ac_n "checking for X FreeType headers""... $ac_c" 1>&6
+! echo "configure:6331: 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
+--- 6550,6556 ----
+  else
+    
+  echo $ac_n "checking for X FreeType headers""... $ac_c" 1>&6
+! 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,6357 ****
+  else
+    
+  echo $ac_n "checking for X FreeType libraries""... $ac_c" 1>&6
+! echo "configure:6355: 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
+--- 6574,6580 ----
+  else
+    
+  echo $ac_n "checking for X FreeType libraries""... $ac_c" 1>&6
+! 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,6372 ****
+  CPPFLAGS="$cf_cv_x_freetype_incs $CPPFLAGS"
+  
+  cat > conftest.$ac_ext <<EOF
+! #line 6370 "configure"
+  #include "confdefs.h"
+  
+  #include <X11/Xlib.h>
+--- 6589,6595 ----
+  CPPFLAGS="$cf_cv_x_freetype_incs $CPPFLAGS"
+  
+  cat > conftest.$ac_ext <<EOF
+! #line 6593 "configure"
+  #include "confdefs.h"
+  
+  #include <X11/Xlib.h>
+***************
+*** 6378,6384 ****
+       
+  ; return 0; }
+  EOF
+! if { (eval echo configure:6382: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+    :
+  else
+    echo "configure: failed program was:" >&5
+--- 6601,6607 ----
+       
+  ; return 0; }
+  EOF
+! 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,6497 ****
+  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
+  
+  # Check whether --enable-hp-fkeys or --disable-hp-fkeys was given.
+  if test "${enable_hp_fkeys+set}" = set; then
+--- 6714,6720 ----
+  fi
+  
+  echo $ac_n "checking if you want support for HP-style function keys""... $ac_c" 1>&6
+! 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,6523 ****
+  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
+  
+  # Check whether --enable-sco-fkeys or --disable-sco-fkeys was given.
+  if test "${enable_sco_fkeys+set}" = set; then
+--- 6740,6746 ----
+  fi
+  
+  echo $ac_n "checking if you want support for SCO-style function keys""... $ac_c" 1>&6
+! 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,6549 ****
+  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
+  
+  # Check whether --enable-i18n or --disable-i18n was given.
+  if test "${enable_i18n+set}" = set; then
+--- 6766,6772 ----
+  fi
+  
+  echo $ac_n "checking if you want support for internationalization""... $ac_c" 1>&6
+! 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,6575 ****
+  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
+  
+  # Check whether --enable-initial-erase or --disable-initial-erase was given.
+  if test "${enable_initial_erase+set}" = set; then
+--- 6792,6798 ----
+  fi
+  
+  echo $ac_n "checking if you want support for initial-erase setup""... $ac_c" 1>&6
+! 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,6601 ****
+  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
+  
+  # Check whether --enable-input-method or --disable-input-method was given.
+  if test "${enable_input_method+set}" = set; then
+--- 6818,6824 ----
+  fi
+  
+  echo $ac_n "checking if you want support for input-method""... $ac_c" 1>&6
+! 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,6627 ****
+  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
+  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"
+  #include "confdefs.h"
+  
+  #include <X11/IntrinsicP.h>
+--- 6838,6850 ----
+  echo "$ac_t""$enable_ximp" 1>&6
+  
+  echo $ac_n "checking if X libraries support input-method""... $ac_c" 1>&6
+! 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 6848 "configure"
+  #include "confdefs.h"
+  
+  #include <X11/IntrinsicP.h>
+***************
+*** 6648,6654 ****
+  
+  ; return 0; }
+  EOF
+! if { (eval echo configure:6652: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+    rm -rf conftest*
+    cf_cv_input_method=yes
+  else
+--- 6871,6877 ----
+  
+  ; return 0; }
+  EOF
+! 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,6677 ****
+  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
+  
+  # Check whether --enable-load-vt-fonts or --disable-load-vt-fonts was given.
+  if test "${enable_load_vt_fonts+set}" = set; then
+--- 6894,6900 ----
+  fi
+  
+  echo $ac_n "checking if you want support for load-vt-fonts""... $ac_c" 1>&6
+! 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,6703 ****
+  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
+  
+  # Check whether --enable-logging or --disable-logging was given.
+  if test "${enable_logging+set}" = set; then
+--- 6920,6926 ----
+  fi
+  
+  echo $ac_n "checking if you want support for logging""... $ac_c" 1>&6
+! 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,6727 ****
+  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
+       
+  # Check whether --enable-logfile-exec or --disable-logfile-exec was given.
+  if test "${enable_logfile_exec+set}" = set; then
+--- 6944,6950 ----
+  EOF
+  
+       echo $ac_n "checking if you want to allow logging via a pipe""... $ac_c" 1>&6
+! 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,6754 ****
+  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
+  
+  # Check whether --enable-maximize or --disable-maximize was given.
+  if test "${enable_maximize+set}" = set; then
+--- 6971,6977 ----
+  fi
+  
+  echo $ac_n "checking if you want support for iconify/maximize translations""... $ac_c" 1>&6
+! 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,6778 ****
+  
+  
+  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
+  
+  # Check whether --enable-num-lock or --disable-num-lock was given.
+  if test "${enable_num_lock+set}" = set; then
+--- 6995,7001 ----
+  
+  
+  echo $ac_n "checking if you want NumLock to override keyboard tables""... $ac_c" 1>&6
+! 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,6802 ****
+  
+  
+  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
+  
+  
+  # Check whether --enable-pty-handshake or --disable-pty-handshake was given.
+--- 7019,7025 ----
+  
+  
+  echo $ac_n "checking if you want support for pty-handshaking""... $ac_c" 1>&6
+! echo "configure:7023: checking if you want support for pty-handshaking" >&5
+  
+  
+  # Check whether --enable-pty-handshake or --disable-pty-handshake was given.
+***************
+*** 6828,6834 ****
+  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
+  
+  # Check whether --enable-rightbar or --disable-rightbar was given.
+  if test "${enable_rightbar+set}" = set; then
+--- 7051,7057 ----
+  fi
+  
+  echo $ac_n "checking if you want support for right-scrollbar""... $ac_c" 1>&6
+! 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,6860 ****
+  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
+  
+  # Check whether --enable-samename or --disable-samename was given.
+  if test "${enable_samename+set}" = set; then
+--- 7077,7083 ----
+  fi
+  
+  echo $ac_n "checking if you want check for redundant name-change""... $ac_c" 1>&6
+! 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,6884 ****
+  
+  
+  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
+  
+  # Check whether --enable-session-mgt or --disable-session-mgt was given.
+  if test "${enable_session_mgt+set}" = set; then
+--- 7101,7107 ----
+  
+  
+  echo $ac_n "checking if you want support for session management""... $ac_c" 1>&6
+! 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,6908 ****
+  
+  
+  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
+  
+  # Check whether --enable-tcap-query or --disable-tcap-query was given.
+  if test "${enable_tcap_query+set}" = set; then
+--- 7125,7131 ----
+  
+  
+  echo $ac_n "checking if you want to use termcap-query/report""... $ac_c" 1>&6
+! 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,6932 ****
+  
+  
+  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
+  
+  # Check whether --enable-tek4014 or --disable-tek4014 was given.
+  if test "${enable_tek4014+set}" = set; then
+--- 7149,7155 ----
+  
+  
+  echo $ac_n "checking if you want support for tek4014""... $ac_c" 1>&6
+! 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,6962 ****
+  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
+  
+  # Check whether --enable-toolbar or --disable-toolbar was given.
+  if test "${enable_toolbar+set}" = set; then
+--- 7179,7185 ----
+  fi
+  
+  echo $ac_n "checking if you want pulldown menus with a toolbar""... $ac_c" 1>&6
+! 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,6988 ****
+  fi
+  
+  echo $ac_n "checking if you want VT52 emulation""... $ac_c" 1>&6
+! echo "configure:6986: checking if you want VT52 emulation" >&5
+  
+  # Check whether --enable-vt52 or --disable-vt52 was given.
+  if test "${enable_vt52+set}" = set; then
+--- 7205,7211 ----
+  fi
+  
+  echo $ac_n "checking if you want VT52 emulation""... $ac_c" 1>&6
+! 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,7012 ****
+  EOF
+  
+  
+  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
+  
+  # Check whether --enable-luit or --disable-luit was given.
+  if test "${enable_luit+set}" = set; then
+--- 7228,7261 ----
+  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: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,7025 ****
+    if test "$enableval" != "no" ; then
+      enable_luit=yes 
+    else
+!     enable_luit=no
+    fi
+  else
+    enableval=no 
+!   enable_luit=no
+    
+  fi
+  
+--- 7264,7274 ----
+    if test "$enableval" != "no" ; then
+      enable_luit=yes 
+    else
+!     enable_luit=$enable_mini_luit
+    fi
+  else
+    enableval=no 
+!   enable_luit=$enable_mini_luit
+    
+  fi
+  
+***************
+*** 7032,7038 ****
+  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
+  
+  # Check whether --enable-wide-chars or --disable-wide-chars was given.
+  if test "${enable_wide_chars+set}" = set; then
+--- 7281,7287 ----
+  fi
+  
+  echo $ac_n "checking if you want wide-character support""... $ac_c" 1>&6
+! 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,7067 ****
+  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
+  
+  # Check whether --enable-dec-locator or --disable-dec-locator was given.
+  if test "${enable_dec_locator+set}" = set; then
+--- 7310,7316 ----
+  fi
+  
+  echo $ac_n "checking if you want dynamic-abbreviation support""... $ac_c" 1>&6
+! 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,7093 ****
+  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
+  
+  # Check whether --enable-dec-locator or --disable-dec-locator was given.
+  if test "${enable_dec_locator+set}" = set; then
+--- 7336,7342 ----
+  fi
+  
+  echo $ac_n "checking if you want DECterm Locator support""... $ac_c" 1>&6
+! 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,7119 ****
+  fi
+  
+  echo $ac_n "checking if you want -ziconbeep option""... $ac_c" 1>&6
+! echo "configure:7117: checking if you want -ziconbeep option" >&5
+  
+  # Check whether --enable-ziconbeep or --disable-ziconbeep was given.
+  if test "${enable_ziconbeep+set}" = set; then
+--- 7362,7368 ----
+  fi
+  
+  echo $ac_n "checking if you want -ziconbeep option""... $ac_c" 1>&6
+! 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,7146 ****
+  
+  
+  echo $ac_n "checking if you want debugging traces""... $ac_c" 1>&6
+! echo "configure:7144: checking if you want debugging traces" >&5
+  
+  # Check whether --enable-trace or --disable-trace was given.
+  if test "${enable_trace+set}" = set; then
+--- 7389,7395 ----
+  
+  
+  echo $ac_n "checking if you want debugging traces""... $ac_c" 1>&6
+! 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,7175 ****
+  
+  
+  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
+  
+  # Check whether --enable-echo or --disable-echo was given.
+  if test "${enable_echo+set}" = set; then
+--- 7418,7424 ----
+  
+  
+  echo $ac_n "checking if you want to see long compiling messages""... $ac_c" 1>&6
+! 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,7219 ****
+  
+  
+  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
+  
+  # Check whether --enable-xmc-glitch or --disable-xmc-glitch was given.
+  if test "${enable_xmc_glitch+set}" = set; then
+--- 7462,7468 ----
+  
+  
+  echo $ac_n "checking if you want magic cookie emulation""... $ac_c" 1>&6
+! 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,7248 ****
+  
+  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
+  
+  # Check whether --enable-warnings or --disable-warnings was given.
+  if test "${enable_warnings+set}" = set; then
+--- 7491,7497 ----
+  
+  if test -n "$GCC" ; then
+  echo $ac_n "checking if you want to turn on gcc warnings""... $ac_c" 1>&6
+! 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,7290 ****
+  if test "$GCC" = yes
+  then
+       echo "checking for $CC __attribute__ directives" 1>&6
+! echo "configure:7286: checking for $CC __attribute__ directives" >&5
+  cat > conftest.$ac_ext <<EOF
+! #line 7288 "configure"
+  #include "confdefs.h"
+  #include "conftest.h"
+  #include "conftest.i"
+--- 7531,7539 ----
+  if test "$GCC" = yes
+  then
+       echo "checking for $CC __attribute__ directives" 1>&6
+! echo "configure:7535: checking for $CC __attribute__ directives" >&5
+  cat > conftest.$ac_ext <<EOF
+! #line 7537 "configure"
+  #include "confdefs.h"
+  #include "conftest.h"
+  #include "conftest.i"
+***************
+*** 7322,7328 ****
+  EOF
+                       ;;
+               esac
+!              if { (eval echo configure:7326: \"$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
+--- 7571,7577 ----
+  EOF
+                       ;;
+               esac
+!              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,7344 ****
+  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
+       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
+--- 7587,7593 ----
+  GCC_VERSION=none
+  if test "$GCC" = yes ; then
+       echo $ac_n "checking version of $CC""... $ac_c" 1>&6
+! 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,7359 ****
+  if test "$GCC" = yes
+  then
+       cat > conftest.$ac_ext <<EOF
+! #line 7353 "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
+       cf_save_CFLAGS="$CFLAGS"
+       EXTRA_CFLAGS="-W -Wall"
+       cf_warn_CONST=""
+--- 7598,7608 ----
+  if test "$GCC" = yes
+  then
+       cat > conftest.$ac_ext <<EOF
+! #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:7606: checking for $CC warning options" >&5
+       cf_save_CFLAGS="$CFLAGS"
+       EXTRA_CFLAGS="-W -Wall"
+       cf_warn_CONST=""
+***************
+*** 7369,7378 ****
+               Wpointer-arith \
+               Wshadow \
+               Wstrict-prototypes \
+!              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
+                       test -n "$verbose" && echo "$ac_t""... -$cf_opt" 1>&6
+                       case $cf_opt in #(vi
+                       Wcast-qual) #(vi
+--- 7618,7627 ----
+               Wpointer-arith \
+               Wshadow \
+               Wstrict-prototypes \
+!              Wundef $cf_warn_CONST 
+       do
+               CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
+!              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,7570 ****
+--- 7814,7820 ----
+  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 -c 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 ****
+! dnl $XTermId: configure.in,v 1.170 2004/08/15 21:07:59 tom Exp $
+  dnl
+! dnl $XFree86: xc/programs/xterm/configure.in,v 3.66 2004/08/15 21:07:59 dickey Exp $
+  dnl
+  dnl ---------------------------------------------------------------------------
+  dnl
+--- 1,6 ----
+! 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.67 2004/12/01 01:27:46 dickey Exp $
+  dnl
+  dnl ---------------------------------------------------------------------------
+  dnl
+***************
+*** 52,62 ****
+--- 52,69 ----
+  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,117 ****
+  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( \
+--- 108,118 ----
+***************
+*** 539,549 ****
+  AC_MSG_RESULT($enable_vt52)
+  test "$enable_vt52" = no && AC_DEFINE(OPT_VT52_MODE,0)
+  
+  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])
+  AC_MSG_RESULT($enable_luit)
+  if test "$enable_luit" = yes ; then
+       AC_DEFINE(OPT_LUIT_PROG,1)
+--- 540,560 ----
+  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=$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 -c 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 ****
+  .\"#! troff -ms $1           -*- Nroff -*-
+  .\" "Xterm Control Sequences" document
+! .\" $XTermId: ctlseqs.ms,v 1.143 2004/07/20 01:16:47 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 $
+  .\"
+  .\"
+  .\" Copyright 1996-2003,2004 by Thomas E. Dickey
+--- 1,13 ----
+  .\"#! troff -ms $1           -*- Nroff -*-
+  .\" "Xterm Control Sequences" document
+! .\" $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.54 2004/12/01 01:27:44 dickey Exp $
+  .\"
+  .\"
+  .\" Copyright 1996-2003,2004 by Thomas E. Dickey
+***************
+*** 161,167 ****
+  .[] Us \v'-1p'\s\nsUS\s0\v'1p'
+  .[] XX \v'-1p'\s\nsXX\s0\v'1p'
+  .[] $ $
+- .[] ! !
+  .[] # #
+  .[] % %
+  .[] (( (
+--- 161,166 ----
+***************
+*** 365,371 ****
+  .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),
+  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.
+--- 364,370 ----
+  .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, 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,754 ****
+--- 748,754 ----
+    \*(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,830 ****
+--- 825,831 ----
+    \*(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,968 ****
+  .br
+  \*(Cs\*?\*5\*0\*s\*n No Locator, if not.
+  .
+! .IP \\*(Cs\\*s\\*!\\*p
+  Soft terminal reset (DECSTR)
+  .
+  .IP \\*(Cs\\*(Ps\\*s\\*;\\*(Ps\\*s\\*(c"\\*p
+--- 963,969 ----
+  .br
+  \*(Cs\*?\*5\*0\*s\*n No Locator, if not.
+  .
+! .IP \\*(Cs\\*!\\*p
+  Soft terminal reset (DECSTR)
+  .
+  .IP \\*(Cs\\*(Ps\\*s\\*;\\*(Ps\\*s\\*(c"\\*p
+***************
+*** 991,996 ****
+--- 992,1002 ----
+  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,1035 ****
+--- 1033,1053 ----
+  \*(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,1062 ****
+--- 1075,1091 ----
+    \*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,1077 ****
+--- 1101,1110 ----
+    \*(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,1088 ****
+--- 1116,1125 ----
+    \*(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 -c 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 ****
+  /*
+   *   $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 $ */
+  
+  /*
+!  * Copyright 2002 by Thomas E. Dickey
+   * 
+   *                         All Rights Reserved
+   * 
+--- 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.16 2004/12/01 01:27:46 dickey Exp $ */
+  
+  /*
+!  * Copyright 2002,2004 by Thomas E. Dickey
+   * 
+   *                         All Rights Reserved
+   * 
+***************
+*** 61,115 ****
+  #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)
+  {
+!     register int maxr;
+  
+      col = (col < 0 ? 0 : col);
+      screen->cur_col = (col <= screen->max_col ? col : screen->max_col);
+!     maxr = screen->max_row;
+      if (flags & ORIGIN) {
+!      row += screen->top_marg;
+!      maxr = screen->bot_marg;
+      }
+!     row = (row < 0 ? 0 : row);
+!     screen->cur_row = (row <= maxr ? row : maxr);
+      screen->do_wrap = 0;
+!     _CheckSelection(screen);
+  }
+  
+  /*
+   * moves the cursor left n, no wrap around
+   */
+  void
+! CursorBack(register TScreen * screen, int n)
+  {
+!     register int i, j, k, rev;
+  
+      if ((rev = (term->flags & (REVERSEWRAP | WRAPAROUND)) ==
+        (REVERSEWRAP | WRAPAROUND)) != 0
+--- 63,105 ----
+  #include <data.h>
+  
+  /*
+   * 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(TScreen * screen, int row, int col, unsigned flags)
+  {
+!     int use_row = row;
+!     int max_row;
+  
+      col = (col < 0 ? 0 : col);
+      screen->cur_col = (col <= screen->max_col ? col : screen->max_col);
+!     max_row = screen->max_row;
+      if (flags & ORIGIN) {
+!      use_row += screen->top_marg;
+!      max_row = screen->bot_marg;
+      }
+!     use_row = (use_row < 0 ? 0 : use_row);
+!     screen->cur_row = (use_row <= max_row ? use_row : max_row);
+      screen->do_wrap = 0;
+! 
+!     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(TScreen * screen, int n)
+  {
+!     int i, j, k, rev;
+  
+      if ((rev = (term->flags & (REVERSEWRAP | WRAPAROUND)) ==
+        (REVERSEWRAP | WRAPAROUND)) != 0
+***************
+*** 128,147 ****
+           screen->cur_col = 0;
+      }
+      screen->do_wrap = 0;
+-     _CheckSelection(screen);
+  }
+  
+  /*
+   * moves the cursor forward n, no wraparound
+   */
+  void
+! CursorForward(register 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);
+  }
+  
+  /*
+--- 118,135 ----
+           screen->cur_col = 0;
+      }
+      screen->do_wrap = 0;
+  }
+  
+  /*
+   * moves the cursor forward n, no wraparound
+   */
+  void
+! 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;
+  }
+  
+  /*
+***************
+*** 149,157 ****
+   * Won't pass bottom margin or bottom of screen.
+   */
+  void
+! CursorDown(register TScreen * screen, int n)
+  {
+!     register int max;
+  
+      max = (screen->cur_row > screen->bot_marg ?
+          screen->max_row : screen->bot_marg);
+--- 137,145 ----
+   * Won't pass bottom margin or bottom of screen.
+   */
+  void
+! CursorDown(TScreen * screen, int n)
+  {
+!     int max;
+  
+      max = (screen->cur_row > screen->bot_marg ?
+          screen->max_row : screen->bot_marg);
+***************
+*** 160,166 ****
+      if (screen->cur_row > max)
+       screen->cur_row = max;
+      screen->do_wrap = 0;
+-     _CheckSelection(screen);
+  }
+  
+  /*
+--- 148,153 ----
+***************
+*** 168,185 ****
+   * Won't pass top margin or top of screen.
+   */
+  void
+! CursorUp(register TScreen * screen, int n)
+  {
+!     register int min;
+  
+!     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);
+  }
+  
+  /*
+--- 155,172 ----
+   * Won't pass top margin or top of screen.
+   */
+  void
+! CursorUp(TScreen * screen, int n)
+  {
+!     int min;
+  
+!     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;
+  }
+  
+  /*
+***************
+*** 187,195 ****
+   * Won't leave scrolling region. No carriage return.
+   */
+  void
+! xtermIndex(register TScreen * screen, register int amount)
+  {
+!     register int j;
+  
+      /*
+       * indexing when below scrolling region is cursor down.
+--- 174,182 ----
+   * Won't leave scrolling region. No carriage return.
+   */
+  void
+! xtermIndex(TScreen * screen, int amount)
+  {
+!     int j;
+  
+      /*
+       * indexing when below scrolling region is cursor down.
+***************
+*** 210,216 ****
+   * Won't leave scrolling region. No carriage return.
+   */
+  void
+! RevIndex(register TScreen * screen, register int amount)
+  {
+      /*
+       * reverse indexing when above scrolling region is cursor up.
+--- 197,203 ----
+   * Won't leave scrolling region. No carriage return.
+   */
+  void
+! RevIndex(TScreen * screen, int amount)
+  {
+      /*
+       * reverse indexing when above scrolling region is cursor up.
+***************
+*** 231,251 ****
+   * (Note: xterm doesn't implement SLH, SLL which would affect use of this)
+   */
+  void
+! CarriageReturn(register TScreen * screen)
+  {
+      screen->cur_col = 0;
+      screen->do_wrap = 0;
+-     _CheckSelection(screen);
+  }
+  
+  /*
+   * Save Cursor and Attributes
+   */
+  void
+! CursorSave(register XtermWidget tw)
+  {
+!     register TScreen *screen = &tw->screen;
+!     register SavedCursor *sc = &screen->sc[screen->alternate != False];
+  
+      sc->saved = True;
+      sc->row = screen->cur_row;
+--- 218,237 ----
+   * (Note: xterm doesn't implement SLH, SLL which would affect use of this)
+   */
+  void
+! CarriageReturn(TScreen * screen)
+  {
+      screen->cur_col = 0;
+      screen->do_wrap = 0;
+  }
+  
+  /*
+   * Save Cursor and Attributes
+   */
+  void
+! CursorSave(XtermWidget tw)
+  {
+!     TScreen *screen = &tw->screen;
+!     SavedCursor *sc = &screen->sc[screen->alternate != False];
+  
+      sc->saved = True;
+      sc->row = screen->cur_row;
+***************
+*** 271,280 ****
+   * Restore Cursor and Attributes
+   */
+  void
+! CursorRestore(register XtermWidget tw)
+  {
+!     register TScreen *screen = &tw->screen;
+!     register 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.
+--- 257,266 ----
+   * Restore Cursor and Attributes
+   */
+  void
+! CursorRestore(XtermWidget tw)
+  {
+!     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 -c 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 ****
+! /* $XTermId: doublechr.c,v 1.33 2004/04/18 20:49:43 tom Exp $ */
+  
+  /*
+!  * $XFree86: xc/programs/xterm/doublechr.c,v 3.13 2004/04/18 20:49:43 dickey Exp $
+   */
+  
+  /************************************************************
+  
+! Copyright 1997-2002,2003 by Thomas E. Dickey
+  
+                          All Rights Reserved
+  
+--- 1,12 ----
+! /* $XTermId: doublechr.c,v 1.35 2004/12/01 01:27:46 tom Exp $ */
+  
+  /*
+!  * $XFree86: xc/programs/xterm/doublechr.c,v 3.14 2004/12/01 01:27:46 dickey Exp $
+   */
+  
+  /************************************************************
+  
+! Copyright 1997-2003,2004 by Thomas E. Dickey
+  
+                          All Rights Reserved
+  
+***************
+*** 78,99 ****
+  
+      /*
+       * ScrnRefresh won't paint blanks for us if we're switching between a
+!      * single-size and double-size font.
+       */
+      if (CSET_DOUBLE(oldChrSet) != CSET_DOUBLE(newChrSet)) {
+!      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);
+      screen->cur_col = curcol;
+  }
+  #endif
+--- 78,98 ----
+  
+      /*
+       * ScrnRefresh won't paint blanks for us if we're switching between a
+!      * 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));
+      }
+  
+      /* FIXME: do VT220 softchars allow double-sizes? */
+      memset(SCRN_BUF_CSETS(screen, currow), newChrSet, len);
+  
+      screen->cur_col = 0;
+!     ScrnUpdate(screen, currow, 0, 1, len, True);
+      screen->cur_col = curcol;
+  }
+  #endif
+Index: xc/programs/xterm/fontutils.c
+diff -c 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 ****
+! /* $XTermId: fontutils.c,v 1.124 2004/07/13 00:41:28 tom Exp $ */
+  
+  /*
+!  * $XFree86: xc/programs/xterm/fontutils.c,v 1.47 2004/07/13 00:41:28 dickey Exp $
+   */
+  
+  /************************************************************
+--- 1,7 ----
+! /* $XTermId: fontutils.c,v 1.131 2004/12/01 01:27:46 tom Exp $ */
+  
+  /*
+!  * $XFree86: xc/programs/xterm/fontutils.c,v 1.48 2004/12/01 01:27:46 dickey Exp $
+   */
+  
+  /************************************************************
+***************
+*** 444,450 ****
+               return False;
+           }
+       } else {
+!          if (char2lower(*pattern++) != char2lower(*match++))
+               return False;
+       }
+      }
+--- 444,452 ----
+               return False;
+           }
+       } else {
+!          int p = char2lower(*pattern++);
+!          int m = char2lower(*match++);
+!          if (p != m)
+               return False;
+       }
+      }
+***************
+*** 883,889 ****
+       for (ch = 1; ch < 32; ch++) {
+           int n = ch;
+  #if OPT_WIDE_CHARS
+!          if (screen->utf8_mode) {
+               n = dec2ucs(ch);
+               if (n == UCS_REPL)
+                   continue;
+--- 885,891 ----
+       for (ch = 1; ch < 32; ch++) {
+           int n = ch;
+  #if OPT_WIDE_CHARS
+!          if (screen->utf8_mode || screen->unicode_font) {
+               n = dec2ucs(ch);
+               if (n == UCS_REPL)
+                   continue;
+***************
+*** 1019,1025 ****
+       TRACE(("xtermLoadVTFonts(%s, %s)\n", myName, myClass));
+  
+       memset(&subresourceRec, 0, sizeof(subresourceRec));
+!      XtGetSubresources((Widget) w, (XtPointer) & subresourceRec,
+                         myName, myClass,
+                         font_resources,
+                         (Cardinal) XtNumber(font_resources),
+--- 1021,1027 ----
+       TRACE(("xtermLoadVTFonts(%s, %s)\n", myName, myClass));
+  
+       memset(&subresourceRec, 0, sizeof(subresourceRec));
+!      XtGetSubresources((Widget) w, (XtPointer) &subresourceRec,
+                         myName, myClass,
+                         font_resources,
+                         (Cardinal) XtNumber(font_resources),
+***************
+*** 1058,1064 ****
+  HandleLoadVTFonts(Widget w GCC_UNUSED,
+                 XEvent * event GCC_UNUSED,
+                 String * params GCC_UNUSED,
+!                Cardinal * param_count GCC_UNUSED)
+  {
+      char buf[80];
+      char *myName = (*param_count > 0) ? params[0] : "";
+--- 1060,1066 ----
+  HandleLoadVTFonts(Widget w GCC_UNUSED,
+                 XEvent * event GCC_UNUSED,
+                 String * params GCC_UNUSED,
+!                Cardinal *param_count GCC_UNUSED)
+  {
+      char buf[80];
+      char *myName = (*param_count > 0) ? params[0] : "";
+***************
+*** 1153,1161 ****
+       if (norm == 0 && term->misc.face_name) {
+           XftPattern *pat, *match;
+           XftResult result;
+!          int face_size = term->misc.face_size;
+  
+!          TRACE(("xtermComputeFontInfo norm(face %s, size %d)\n",
+                  term->misc.face_name,
+                  term->misc.face_size));
+  
+--- 1155,1163 ----
+       if (norm == 0 && term->misc.face_name) {
+           XftPattern *pat, *match;
+           XftResult result;
+!          double face_size = term->misc.face_size;
+  
+!          TRACE(("xtermComputeFontInfo norm(face %s, size %f)\n",
+                  term->misc.face_name,
+                  term->misc.face_size));
+  
+***************
+*** 1173,1186 ****
+               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));
+           }
+  #endif
+  
+           pat = XftNameParse(term->misc.face_name);
+           XftPatternBuild(pat,
+                           XFT_FAMILY, XftTypeString, "mono",
+!                          XFT_SIZE, XftTypeInteger, face_size,
+                           XFT_SPACING, XftTypeInteger, XFT_MONO,
+                           (void *) 0);
+           match = XftFontMatch(dpy, DefaultScreen(dpy), pat, &result);
+--- 1175,1188 ----
+               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 -> %f\n", num, den, face_size));
+           }
+  #endif
+  
+           pat = XftNameParse(term->misc.face_name);
+           XftPatternBuild(pat,
+                           XFT_FAMILY, XftTypeString, "mono",
+!                          XFT_SIZE, XftTypeDouble, face_size,
+                           XFT_SPACING, XftTypeInteger, XFT_MONO,
+                           (void *) 0);
+           match = XftFontMatch(dpy, DefaultScreen(dpy), pat, &result);
+***************
+*** 1230,1243 ****
+  
+               wnorm = XftFontOpen(dpy, DefaultScreen(dpy),
+                                   XFT_FAMILY, XftTypeString, face_name,
+!                                  XFT_SIZE, XftTypeInteger, 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_SPACING, XftTypeInteger, XFT_MONO,
+                                   XFT_CHAR_WIDTH, XftTypeInteger, char_width,
+                                   XFT_WEIGHT, XftTypeInteger, XFT_WEIGHT_BOLD,
+--- 1232,1245 ----
+  
+               wnorm = XftFontOpen(dpy, DefaultScreen(dpy),
+                                   XFT_FAMILY, XftTypeString, face_name,
+!                                  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, XftTypeDouble, face_size,
+                                   XFT_SPACING, XftTypeInteger, XFT_MONO,
+                                   XFT_CHAR_WIDTH, XftTypeInteger, char_width,
+                                   XFT_WEIGHT, XftTypeInteger, XFT_WEIGHT_BOLD,
+***************
+*** 1283,1293 ****
+      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)));
+  }
+  
+  /* save this information as a side-effect for double-sized characters */
+--- 1285,1299 ----
+      win->width = width - i;
+      win->height = height - j;
+  
+!     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,1680 ****
+--- 1681,1745 ----
+  
+      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,1866 ****
+  HandleLargerFont(Widget w GCC_UNUSED,
+                XEvent * event GCC_UNUSED,
+                String * params GCC_UNUSED,
+!               Cardinal * param_count GCC_UNUSED)
+  {
+      if (term->misc.shift_fonts) {
+       TScreen *screen = &term->screen;
+--- 1925,1931 ----
+  HandleLargerFont(Widget w GCC_UNUSED,
+                XEvent * event GCC_UNUSED,
+                String * params GCC_UNUSED,
+!               Cardinal *param_count GCC_UNUSED)
+  {
+      if (term->misc.shift_fonts) {
+       TScreen *screen = &term->screen;
+***************
+*** 1880,1886 ****
+  HandleSmallerFont(Widget w GCC_UNUSED,
+                 XEvent * event GCC_UNUSED,
+                 String * params GCC_UNUSED,
+!                Cardinal * param_count GCC_UNUSED)
+  {
+      if (term->misc.shift_fonts) {
+       TScreen *screen = &term->screen;
+--- 1945,1951 ----
+  HandleSmallerFont(Widget w GCC_UNUSED,
+                 XEvent * event GCC_UNUSED,
+                 String * params GCC_UNUSED,
+!                Cardinal *param_count GCC_UNUSED)
+  {
+      if (term->misc.shift_fonts) {
+       TScreen *screen = &term->screen;
+***************
+*** 1901,1907 ****
+  HandleSetFont(Widget w GCC_UNUSED,
+             XEvent * event GCC_UNUSED,
+             String * params,
+!            Cardinal * param_count)
+  {
+      int fontnum;
+      VTFontNames fonts;
+--- 1966,1972 ----
+  HandleSetFont(Widget w GCC_UNUSED,
+             XEvent * event GCC_UNUSED,
+             String * params,
+!            Cardinal *param_count)
+  {
+      int fontnum;
+      VTFontNames fonts;
+Index: xc/programs/xterm/fontutils.h
+diff -c 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 ****
+  /*
+!  * $XFree86: xc/programs/xterm/fontutils.h,v 1.12 2003/10/27 01:07:57 dickey Exp $
+   */
+  
+  /************************************************************
+  
+! Copyright 1998-2000,2003 by Thomas E. Dickey
+  
+                          All Rights Reserved
+  
+--- 1,10 ----
+  /*
+!  * $XFree86: xc/programs/xterm/fontutils.h,v 1.13 2004/12/01 01:27:46 dickey Exp $
+   */
+  
+  /************************************************************
+  
+! Copyright 1998-2003,2004 by Thomas E. Dickey
+  
+                          All Rights Reserved
+  
+***************
+*** 68,73 ****
+--- 68,80 ----
+  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 -c 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,8 ****
+   *   $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 $ */
+  
+  /*
+   * Copyright 1999-2003,2004 by Thomas E. Dickey
+--- 2,8 ----
+   *   $Xorg: input.c,v 1.3 2000/08/17 19:55:08 cpqbld 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,301 ****
+  #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
+--- 255,260 ----
+***************
+*** 1028,1034 ****
+      Bool result = False;
+  
+      XtGetSubresources(w,
+!                    (XtPointer) & data,
+                     "vt100",
+                     "VT100",
+                     key_resources,
+--- 987,993 ----
+      Bool result = False;
+  
+      XtGetSubresources(w,
+!                    (XtPointer) &data,
+                     "vt100",
+                     "VT100",
+                     key_resources,
+***************
+*** 1092,1128 ****
+      int min_keycode, max_keycode, keysyms_per_keycode = 0;
+  
+      if (keymap != 0) {
+  
+       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);
+                   }
+               }
+-              k++;
+           }
+       }
+  
+       /* Don't disable any mods if "alwaysUseMods" is true. */
+--- 1051,1092 ----
+      int min_keycode, max_keycode, keysyms_per_keycode = 0;
+  
+      if (keymap != 0) {
++      KeySym *theMap;
+  
+       TRACE(("VTInitModifiers\n"));
+  
+       XDisplayKeycodes(dpy, &min_keycode, &max_keycode);
+!      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++;
+               }
+           }
++          XFree(theMap);
+       }
+  
+       /* Don't disable any mods if "alwaysUseMods" is true. */
+Index: xc/programs/xterm/main.c
+diff -c 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 ****
+! /* $XTermId: main.c,v 1.396 2004/08/15 21:07:59 tom Exp $ */
+  
+  #if !defined(lint) && 0
+  static char *rid = "$Xorg: main.c,v 1.7 2001/02/09 02:06:02 xorgcvs Exp $";
+--- 1,4 ----
+! /* $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,97 ****
+  
+  ******************************************************************/
+  
+! /* $XFree86: xc/programs/xterm/main.c,v 3.185 2004/08/15 21:07:59 dickey Exp $ */
+  
+  /* main.c */
+  
+--- 91,97 ----
+  
+  ******************************************************************/
+  
+! /* $XFree86: xc/programs/xterm/main.c,v 3.186 2004/12/01 01:27:47 dickey Exp $ */
+  
+  /* main.c */
+  
+***************
+*** 283,288 ****
+--- 283,292 ----
+  
+  #else
+  
++ #ifdef __INTERIX
++ #define setpgrp setpgid
++ #endif
++ 
+  #ifndef linux
+  #ifndef VMS
+  #ifndef USE_POSIX_TERMIOS
+***************
+*** 295,301 ****
+--- 299,307 ----
+  #else
+  #include <sys/resource.h>
+  #endif
++ #ifndef __INTERIX
+  #define HAS_BSD_GROUPS
++ #endif
+  #endif /* !VMS */
+  #endif /* !linux */
+  
+***************
+*** 479,485 ****
+  #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
+   */
+  #ifdef B38400                        /* everyone should define this */
+  #define VAL_LINE_SPEED B38400
+--- 485,494 ----
+  #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.  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,595 ****
+  #define TTYMODE(name) { name, sizeof(name)-1, 0, 0 }
+  static int override_tty_modes = 0;
+  /* *INDENT-OFF* */
+! struct _xttymodes {
+      char *name;
+      size_t len;
+      int set;
+--- 598,604 ----
+  #define TTYMODE(name) { name, sizeof(name)-1, 0, 0 }
+  static int override_tty_modes = 0;
+  /* *INDENT-OFF* */
+! static struct _xttymodes {
+      char *name;
+      size_t len;
+      int set;
+***************
+*** 860,867 ****
+--- 869,878 ----
+  {"-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,1243 ****
+                       Atom * selection GCC_UNUSED,
+                       Atom * target GCC_UNUSED,
+                       Atom * type GCC_UNUSED,
+!                      XtPointer * value GCC_UNUSED,
+                       unsigned long *length GCC_UNUSED,
+                       int *format GCC_UNUSED)
+  {
+--- 1248,1254 ----
+                       Atom * selection GCC_UNUSED,
+                       Atom * target GCC_UNUSED,
+                       Atom * type GCC_UNUSED,
+!                      XtPointer *value GCC_UNUSED,
+                       unsigned long *length GCC_UNUSED,
+                       int *format GCC_UNUSED)
+  {
+***************
+*** 1278,1284 ****
+  DeleteWindow(Widget w,
+            XEvent * event GCC_UNUSED,
+            String * params GCC_UNUSED,
+!           Cardinal * num_params GCC_UNUSED)
+  {
+  #if OPT_TEK4014
+      if (w == toplevel) {
+--- 1289,1295 ----
+  DeleteWindow(Widget w,
+            XEvent * event GCC_UNUSED,
+            String * params GCC_UNUSED,
+!           Cardinal *num_params GCC_UNUSED)
+  {
+  #if OPT_TEK4014
+      if (w == toplevel) {
+***************
+*** 1298,1304 ****
+  KeyboardMapping(Widget w GCC_UNUSED,
+               XEvent * event,
+               String * params GCC_UNUSED,
+!              Cardinal * num_params GCC_UNUSED)
+  {
+      switch (event->type) {
+      case MappingNotify:
+--- 1309,1315 ----
+  KeyboardMapping(Widget w GCC_UNUSED,
+               XEvent * event,
+               String * params GCC_UNUSED,
+!              Cardinal *num_params GCC_UNUSED)
+  {
+      switch (event->type) {
+      case MappingNotify:
+***************
+*** 1307,1313 ****
+      }
+  }
+  
+! XtActionsRec actionProcs[] =
+  {
+      {"DeleteWindow", DeleteWindow},
+      {"KeyboardMapping", KeyboardMapping},
+--- 1318,1324 ----
+      }
+  }
+  
+! static XtActionsRec actionProcs[] =
+  {
+      {"DeleteWindow", DeleteWindow},
+      {"KeyboardMapping", KeyboardMapping},
+***************
+*** 1822,1828 ****
+  #endif /* OPT_SESSION_MGT */
+       XtSetErrorHandler((XtErrorHandler) 0);
+  
+!      XtGetApplicationResources(toplevel, (XtPointer) & resource,
+                                 application_resources,
+                                 XtNumber(application_resources), NULL, 0);
+       TRACE_XRES();
+--- 1833,1839 ----
+  #endif /* OPT_SESSION_MGT */
+       XtSetErrorHandler((XtErrorHandler) 0);
+  
+!      XtGetApplicationResources(toplevel, (XtPointer) &resource,
+                                 application_resources,
+                                 XtNumber(application_resources), NULL, 0);
+       TRACE_XRES();
+***************
+*** 3312,3317 ****
+--- 3323,3335 ----
+               /* 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,4218 ****
+                   break;
+               default:
+                   fprintf(stderr, "%s: unexpected handshake status %d\n",
+!                          xterm_name, handshake.status);
+               }
+           }
+           /* close our sides of the pipes */
+--- 4230,4237 ----
+                   break;
+               default:
+                   fprintf(stderr, "%s: unexpected handshake status %d\n",
+!                          xterm_name,
+!                          (int) handshake.status);
+               }
+           }
+           /* close our sides of the pipes */
+***************
+*** 4393,4398 ****
+--- 4412,4443 ----
+       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 -c 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 ****
+! /* $XTermId: main.h,v 1.25 2004/07/13 00:41:29 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 $ */
+  
+  /*
+   * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
+--- 1,10 ----
+! /* $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.12 2004/12/01 01:27:47 dickey Exp $ */
+  
+  /*
+   * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
+***************
+*** 41,47 ****
+  #define DEFBOLDFONT          NULL    /* no bold font uses overstriking */
+  #define DEFBORDER            2
+  #define DEFFACENAME          NULL
+! #define DEFFACESIZE          14
+  
+  #if OPT_BLINK_TEXT
+  #define DEFBLINKASBOLD               FALSE
+--- 41,47 ----
+  #define DEFBOLDFONT          NULL    /* no bold font uses overstriking */
+  #define DEFBORDER            2
+  #define DEFFACENAME          NULL
+! #define DEFFACESIZE          "14.0"
+  
+  #if OPT_BLINK_TEXT
+  #define DEFBLINKASBOLD               FALSE
+Index: xc/programs/xterm/menu.c
+diff -c 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 ****
+! /* $XTermId: menu.c,v 1.145 2004/05/30 23:59:41 tom Exp $ */
+  
+  /* $Xorg: menu.c,v 1.4 2001/02/09 02:06:03 xorgcvs Exp $ */
+  /*
+--- 1,4 ----
+! /* $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,53 ****
+  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 $ */
+  
+  #include <xterm.h>
+  #include <data.h>
+--- 47,53 ----
+  in this Software without prior written authorization from The Open Group.
+  
+  */
+! /* $XFree86: xc/programs/xterm/menu.c,v 3.57 2004/12/01 01:27:47 dickey Exp $ */
+  
+  #include <xterm.h>
+  #include <data.h>
+***************
+*** 216,221 ****
+--- 216,225 ----
+  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,229 ****
+--- 228,236 ----
+   * 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,526 ****
+  domenu(Widget w GCC_UNUSED,
+         XEvent * event GCC_UNUSED,
+         String * params,              /* mainMenu, vtMenu, or tekMenu */
+!        Cardinal * param_count)       /* 0 or 1 */
+  {
+      TScreen *screen = &term->screen;
+      MenuIndex me;
+--- 527,533 ----
+  domenu(Widget w GCC_UNUSED,
+         XEvent * event GCC_UNUSED,
+         String * params,              /* mainMenu, vtMenu, or tekMenu */
+!        Cardinal *param_count)        /* 0 or 1 */
+  {
+      TScreen *screen = &term->screen;
+      MenuIndex me;
+***************
+*** 548,553 ****
+--- 555,561 ----
+      switch (me) {
+      case mainMenu:
+       if (created) {
++          update_toolbar();
+           update_securekbd();
+           update_allowsends();
+           update_logging();
+***************
+*** 693,699 ****
+  HandleCreateMenu(Widget w,
+                XEvent * event,
+                String * params,       /* mainMenu, vtMenu, or tekMenu */
+!               Cardinal * param_count)        /* 0 or 1 */
+  {
+      (void) domenu(w, event, params, param_count);
+  }
+--- 701,707 ----
+  HandleCreateMenu(Widget w,
+                XEvent * event,
+                String * params,       /* mainMenu, vtMenu, or tekMenu */
+!               Cardinal *param_count)         /* 0 or 1 */
+  {
+      (void) domenu(w, event, params, param_count);
+  }
+***************
+*** 702,708 ****
+  HandlePopupMenu(Widget w,
+               XEvent * event,
+               String * params,        /* mainMenu, vtMenu, or tekMenu */
+!              Cardinal * param_count)         /* 0 or 1 */
+  {
+      if (domenu(w, event, params, param_count)) {
+  #if OPT_TOOLBAR
+--- 710,716 ----
+  HandlePopupMenu(Widget w,
+               XEvent * event,
+               String * params,        /* mainMenu, vtMenu, or tekMenu */
+!              Cardinal *param_count)  /* 0 or 1 */
+  {
+      if (domenu(w, event, params, param_count)) {
+  #if OPT_TOOLBAR
+***************
+*** 1556,1562 ****
+  HandleAllowSends(Widget w,
+                XEvent * event GCC_UNUSED,
+                String * params,
+!               Cardinal * param_count)
+  {
+      handle_toggle(do_allowsends, (int) term->screen.allowSendEvents,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 1564,1570 ----
+  HandleAllowSends(Widget w,
+                XEvent * event GCC_UNUSED,
+                String * params,
+!               Cardinal *param_count)
+  {
+      handle_toggle(do_allowsends, (int) term->screen.allowSendEvents,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 1566,1572 ****
+  HandleSetVisualBell(Widget w,
+                   XEvent * event GCC_UNUSED,
+                   String * params,
+!                  Cardinal * param_count)
+  {
+      handle_toggle(do_visualbell, (int) term->screen.visualbell,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 1574,1580 ----
+  HandleSetVisualBell(Widget w,
+                   XEvent * event GCC_UNUSED,
+                   String * params,
+!                  Cardinal *param_count)
+  {
+      handle_toggle(do_visualbell, (int) term->screen.visualbell,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 1576,1582 ****
+  HandleSetPopOnBell(Widget w,
+                  XEvent * event GCC_UNUSED,
+                  String * params,
+!                 Cardinal * param_count)
+  {
+      handle_toggle(do_poponbell, (int) term->screen.poponbell,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 1584,1590 ----
+  HandleSetPopOnBell(Widget w,
+                  XEvent * event GCC_UNUSED,
+                  String * params,
+!                 Cardinal *param_count)
+  {
+      handle_toggle(do_poponbell, (int) term->screen.poponbell,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 1587,1593 ****
+  HandleLogging(Widget w,
+             XEvent * event GCC_UNUSED,
+             String * params,
+!            Cardinal * param_count)
+  {
+      handle_toggle(do_logging, (int) term->screen.logging,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 1595,1601 ----
+  HandleLogging(Widget w,
+             XEvent * event GCC_UNUSED,
+             String * params,
+!            Cardinal *param_count)
+  {
+      handle_toggle(do_logging, (int) term->screen.logging,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 1599,1605 ****
+  HandlePrintScreen(Widget w,
+                 XEvent * event GCC_UNUSED,
+                 String * params GCC_UNUSED,
+!                Cardinal * param_count GCC_UNUSED)
+  {
+      do_print(w, (XtPointer) 0, (XtPointer) 0);
+  }
+--- 1607,1613 ----
+  HandlePrintScreen(Widget w,
+                 XEvent * event GCC_UNUSED,
+                 String * params GCC_UNUSED,
+!                Cardinal *param_count GCC_UNUSED)
+  {
+      do_print(w, (XtPointer) 0, (XtPointer) 0);
+  }
+***************
+*** 1609,1615 ****
+  HandlePrintControlMode(Widget w,
+                      XEvent * event GCC_UNUSED,
+                      String * params GCC_UNUSED,
+!                     Cardinal * param_count GCC_UNUSED)
+  {
+      do_print_redir(w, (XtPointer) 0, (XtPointer) 0);
+  }
+--- 1617,1623 ----
+  HandlePrintControlMode(Widget w,
+                      XEvent * event GCC_UNUSED,
+                      String * params GCC_UNUSED,
+!                     Cardinal *param_count GCC_UNUSED)
+  {
+      do_print_redir(w, (XtPointer) 0, (XtPointer) 0);
+  }
+***************
+*** 1619,1625 ****
+  HandleRedraw(Widget w,
+            XEvent * event GCC_UNUSED,
+            String * params GCC_UNUSED,
+!           Cardinal * param_count GCC_UNUSED)
+  {
+      do_redraw(w, (XtPointer) 0, (XtPointer) 0);
+  }
+--- 1627,1633 ----
+  HandleRedraw(Widget w,
+            XEvent * event GCC_UNUSED,
+            String * params GCC_UNUSED,
+!           Cardinal *param_count GCC_UNUSED)
+  {
+      do_redraw(w, (XtPointer) 0, (XtPointer) 0);
+  }
+***************
+*** 1629,1635 ****
+  HandleSendSignal(Widget w,
+                XEvent * event GCC_UNUSED,
+                String * params,
+!               Cardinal * param_count)
+  {
+      /* *INDENT-OFF* */
+      static struct sigtab {
+--- 1637,1643 ----
+  HandleSendSignal(Widget w,
+                XEvent * event GCC_UNUSED,
+                String * params,
+!               Cardinal *param_count)
+  {
+      /* *INDENT-OFF* */
+      static struct sigtab {
+***************
+*** 1674,1680 ****
+  HandleQuit(Widget w,
+          XEvent * event GCC_UNUSED,
+          String * params GCC_UNUSED,
+!         Cardinal * param_count GCC_UNUSED)
+  {
+      do_quit(w, (XtPointer) 0, (XtPointer) 0);
+  }
+--- 1682,1688 ----
+  HandleQuit(Widget w,
+          XEvent * event GCC_UNUSED,
+          String * params GCC_UNUSED,
+!         Cardinal *param_count GCC_UNUSED)
+  {
+      do_quit(w, (XtPointer) 0, (XtPointer) 0);
+  }
+***************
+*** 1683,1689 ****
+  Handle8BitControl(Widget w,
+                 XEvent * event GCC_UNUSED,
+                 String * params,
+!                Cardinal * param_count)
+  {
+      handle_toggle(do_8bit_control, (int) term->screen.control_eight_bits,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 1691,1697 ----
+  Handle8BitControl(Widget w,
+                 XEvent * event GCC_UNUSED,
+                 String * params,
+!                Cardinal *param_count)
+  {
+      handle_toggle(do_8bit_control, (int) term->screen.control_eight_bits,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 1693,1699 ****
+  HandleBackarrow(Widget w,
+               XEvent * event GCC_UNUSED,
+               String * params,
+!              Cardinal * param_count)
+  {
+      handle_toggle(do_backarrow, (int) term->keyboard.flags & MODE_DECBKM,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 1701,1707 ----
+  HandleBackarrow(Widget w,
+               XEvent * event GCC_UNUSED,
+               String * params,
+!              Cardinal *param_count)
+  {
+      handle_toggle(do_backarrow, (int) term->keyboard.flags & MODE_DECBKM,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 1703,1709 ****
+  HandleSunFunctionKeys(Widget w,
+                     XEvent * event GCC_UNUSED,
+                     String * params,
+!                    Cardinal * param_count)
+  {
+      handle_toggle(do_sun_fkeys, term->keyboard.type == keyboardIsSun,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 1711,1717 ----
+  HandleSunFunctionKeys(Widget w,
+                     XEvent * event GCC_UNUSED,
+                     String * params,
+!                    Cardinal *param_count)
+  {
+      handle_toggle(do_sun_fkeys, term->keyboard.type == keyboardIsSun,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 1714,1720 ****
+  HandleNumLock(Widget w,
+             XEvent * event GCC_UNUSED,
+             String * params,
+!            Cardinal * param_count)
+  {
+      handle_toggle(do_num_lock, (int) term->misc.real_NumLock,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 1722,1728 ----
+  HandleNumLock(Widget w,
+             XEvent * event GCC_UNUSED,
+             String * params,
+!            Cardinal *param_count)
+  {
+      handle_toggle(do_num_lock, (int) term->misc.real_NumLock,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 1724,1730 ****
+  HandleMetaEsc(Widget w,
+             XEvent * event GCC_UNUSED,
+             String * params,
+!            Cardinal * param_count)
+  {
+      handle_toggle(do_meta_esc, (int) term->screen.meta_sends_esc,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 1732,1738 ----
+  HandleMetaEsc(Widget w,
+             XEvent * event GCC_UNUSED,
+             String * params,
+!            Cardinal *param_count)
+  {
+      handle_toggle(do_meta_esc, (int) term->screen.meta_sends_esc,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 1735,1741 ****
+  HandleDeleteIsDEL(Widget w,
+                 XEvent * event GCC_UNUSED,
+                 String * params,
+!                Cardinal * param_count)
+  {
+      handle_toggle(do_delete_del, term->screen.delete_is_del,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 1743,1749 ----
+  HandleDeleteIsDEL(Widget w,
+                 XEvent * event GCC_UNUSED,
+                 String * params,
+!                Cardinal *param_count)
+  {
+      handle_toggle(do_delete_del, term->screen.delete_is_del,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 1745,1751 ****
+  HandleOldFunctionKeys(Widget w,
+                     XEvent * event GCC_UNUSED,
+                     String * params,
+!                    Cardinal * param_count)
+  {
+      handle_toggle(do_old_fkeys, term->keyboard.type == keyboardIsLegacy,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 1753,1759 ----
+  HandleOldFunctionKeys(Widget w,
+                     XEvent * event GCC_UNUSED,
+                     String * params,
+!                    Cardinal *param_count)
+  {
+      handle_toggle(do_old_fkeys, term->keyboard.type == keyboardIsLegacy,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 1756,1762 ****
+  HandleSunKeyboard(Widget w,
+                 XEvent * event GCC_UNUSED,
+                 String * params,
+!                Cardinal * param_count)
+  {
+      handle_toggle(do_sun_kbd, term->keyboard.type == keyboardIsVT220,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 1764,1770 ----
+  HandleSunKeyboard(Widget w,
+                 XEvent * event GCC_UNUSED,
+                 String * params,
+!                Cardinal *param_count)
+  {
+      handle_toggle(do_sun_kbd, term->keyboard.type == keyboardIsVT220,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 1768,1774 ****
+  HandleHpFunctionKeys(Widget w,
+                    XEvent * event GCC_UNUSED,
+                    String * params,
+!                   Cardinal * param_count)
+  {
+      handle_toggle(do_hp_fkeys, term->keyboard.type == keyboardIsHP,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 1776,1782 ----
+  HandleHpFunctionKeys(Widget w,
+                    XEvent * event GCC_UNUSED,
+                    String * params,
+!                   Cardinal *param_count)
+  {
+      handle_toggle(do_hp_fkeys, term->keyboard.type == keyboardIsHP,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 1780,1786 ****
+  HandleScoFunctionKeys(Widget w,
+                     XEvent * event GCC_UNUSED,
+                     String * params,
+!                    Cardinal * param_count)
+  {
+      handle_toggle(do_sco_fkeys, term->keyboard.type == keyboardIsSCO,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 1788,1794 ----
+  HandleScoFunctionKeys(Widget w,
+                     XEvent * event GCC_UNUSED,
+                     String * params,
+!                    Cardinal *param_count)
+  {
+      handle_toggle(do_sco_fkeys, term->keyboard.type == keyboardIsSCO,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 1791,1797 ****
+  HandleScrollbar(Widget w,
+               XEvent * event GCC_UNUSED,
+               String * params,
+!              Cardinal * param_count)
+  {
+      handle_toggle(do_scrollbar, (int) term->screen.fullVwin.sb_info.width,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 1799,1805 ----
+  HandleScrollbar(Widget w,
+               XEvent * event GCC_UNUSED,
+               String * params,
+!              Cardinal *param_count)
+  {
+      handle_toggle(do_scrollbar, (int) term->screen.fullVwin.sb_info.width,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 1801,1807 ****
+  HandleJumpscroll(Widget w,
+                XEvent * event GCC_UNUSED,
+                String * params,
+!               Cardinal * param_count)
+  {
+      handle_toggle(do_jumpscroll, (int) term->screen.jumpscroll,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 1809,1815 ----
+  HandleJumpscroll(Widget w,
+                XEvent * event GCC_UNUSED,
+                String * params,
+!               Cardinal *param_count)
+  {
+      handle_toggle(do_jumpscroll, (int) term->screen.jumpscroll,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 1811,1817 ****
+  HandleReverseVideo(Widget w,
+                  XEvent * event GCC_UNUSED,
+                  String * params,
+!                 Cardinal * param_count)
+  {
+      handle_toggle(do_reversevideo, (int) (term->misc.re_verse0),
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 1819,1825 ----
+  HandleReverseVideo(Widget w,
+                  XEvent * event GCC_UNUSED,
+                  String * params,
+!                 Cardinal *param_count)
+  {
+      handle_toggle(do_reversevideo, (int) (term->misc.re_verse0),
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 1821,1827 ****
+  HandleAutoWrap(Widget w,
+              XEvent * event GCC_UNUSED,
+              String * params,
+!             Cardinal * param_count)
+  {
+      handle_toggle(do_autowrap, (int) (term->flags & WRAPAROUND),
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 1829,1835 ----
+  HandleAutoWrap(Widget w,
+              XEvent * event GCC_UNUSED,
+              String * params,
+!             Cardinal *param_count)
+  {
+      handle_toggle(do_autowrap, (int) (term->flags & WRAPAROUND),
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 1831,1837 ****
+  HandleReverseWrap(Widget w,
+                 XEvent * event GCC_UNUSED,
+                 String * params,
+!                Cardinal * param_count)
+  {
+      handle_toggle(do_reversewrap, (int) (term->flags & REVERSEWRAP),
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 1839,1845 ----
+  HandleReverseWrap(Widget w,
+                 XEvent * event GCC_UNUSED,
+                 String * params,
+!                Cardinal *param_count)
+  {
+      handle_toggle(do_reversewrap, (int) (term->flags & REVERSEWRAP),
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 1841,1847 ****
+  HandleAutoLineFeed(Widget w,
+                  XEvent * event GCC_UNUSED,
+                  String * params,
+!                 Cardinal * param_count)
+  {
+      handle_toggle(do_autolinefeed, (int) (term->flags & LINEFEED),
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 1849,1855 ----
+  HandleAutoLineFeed(Widget w,
+                  XEvent * event GCC_UNUSED,
+                  String * params,
+!                 Cardinal *param_count)
+  {
+      handle_toggle(do_autolinefeed, (int) (term->flags & LINEFEED),
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 1851,1857 ****
+  HandleAppCursor(Widget w,
+               XEvent * event GCC_UNUSED,
+               String * params,
+!              Cardinal * param_count)
+  {
+      handle_toggle(do_appcursor, (int) (term->keyboard.flags & MODE_DECCKM),
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 1859,1865 ----
+  HandleAppCursor(Widget w,
+               XEvent * event GCC_UNUSED,
+               String * params,
+!              Cardinal *param_count)
+  {
+      handle_toggle(do_appcursor, (int) (term->keyboard.flags & MODE_DECCKM),
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 1861,1867 ****
+  HandleAppKeypad(Widget w,
+               XEvent * event GCC_UNUSED,
+               String * params,
+!              Cardinal * param_count)
+  {
+      handle_toggle(do_appkeypad, (int) (term->keyboard.flags & MODE_DECKPAM),
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 1869,1875 ----
+  HandleAppKeypad(Widget w,
+               XEvent * event GCC_UNUSED,
+               String * params,
+!              Cardinal *param_count)
+  {
+      handle_toggle(do_appkeypad, (int) (term->keyboard.flags & MODE_DECKPAM),
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 1871,1877 ****
+  HandleScrollKey(Widget w,
+               XEvent * event GCC_UNUSED,
+               String * params,
+!              Cardinal * param_count)
+  {
+      handle_toggle(do_scrollkey, (int) term->screen.scrollkey,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 1879,1885 ----
+  HandleScrollKey(Widget w,
+               XEvent * event GCC_UNUSED,
+               String * params,
+!              Cardinal *param_count)
+  {
+      handle_toggle(do_scrollkey, (int) term->screen.scrollkey,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 1881,1887 ****
+  HandleScrollTtyOutput(Widget w,
+                     XEvent * event GCC_UNUSED,
+                     String * params,
+!                    Cardinal * param_count)
+  {
+      handle_toggle(do_scrollttyoutput, (int) term->screen.scrollttyoutput,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 1889,1895 ----
+  HandleScrollTtyOutput(Widget w,
+                     XEvent * event GCC_UNUSED,
+                     String * params,
+!                    Cardinal *param_count)
+  {
+      handle_toggle(do_scrollttyoutput, (int) term->screen.scrollttyoutput,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 1891,1897 ****
+  HandleAllow132(Widget w,
+              XEvent * event GCC_UNUSED,
+              String * params,
+!             Cardinal * param_count)
+  {
+      handle_toggle(do_allow132, (int) term->screen.c132,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 1899,1905 ----
+  HandleAllow132(Widget w,
+              XEvent * event GCC_UNUSED,
+              String * params,
+!             Cardinal *param_count)
+  {
+      handle_toggle(do_allow132, (int) term->screen.c132,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 1901,1907 ****
+  HandleCursesEmul(Widget w,
+                XEvent * event GCC_UNUSED,
+                String * params,
+!               Cardinal * param_count)
+  {
+      handle_toggle(do_cursesemul, (int) term->screen.curses,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 1909,1915 ----
+  HandleCursesEmul(Widget w,
+                XEvent * event GCC_UNUSED,
+                String * params,
+!               Cardinal *param_count)
+  {
+      handle_toggle(do_cursesemul, (int) term->screen.curses,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 1911,1917 ****
+  HandleMarginBell(Widget w,
+                XEvent * event GCC_UNUSED,
+                String * params,
+!               Cardinal * param_count)
+  {
+      handle_toggle(do_marginbell, (int) term->screen.marginbell,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 1919,1925 ----
+  HandleMarginBell(Widget w,
+                XEvent * event GCC_UNUSED,
+                String * params,
+!               Cardinal *param_count)
+  {
+      handle_toggle(do_marginbell, (int) term->screen.marginbell,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 1922,1928 ****
+  HandleCursorBlink(Widget w,
+                 XEvent * event GCC_UNUSED,
+                 String * params,
+!                Cardinal * param_count)
+  {
+      /* eventually want to see if sensitive or not */
+      handle_toggle(do_cursorblink, (int) term->screen.cursor_blink,
+--- 1930,1936 ----
+  HandleCursorBlink(Widget w,
+                 XEvent * event GCC_UNUSED,
+                 String * params,
+!                Cardinal *param_count)
+  {
+      /* eventually want to see if sensitive or not */
+      handle_toggle(do_cursorblink, (int) term->screen.cursor_blink,
+***************
+*** 1934,1940 ****
+  HandleAltScreen(Widget w,
+               XEvent * event GCC_UNUSED,
+               String * params,
+!              Cardinal * param_count)
+  {
+      /* eventually want to see if sensitive or not */
+      handle_toggle(do_altscreen, (int) term->screen.alternate,
+--- 1942,1948 ----
+  HandleAltScreen(Widget w,
+               XEvent * event GCC_UNUSED,
+               String * params,
+!              Cardinal *param_count)
+  {
+      /* eventually want to see if sensitive or not */
+      handle_toggle(do_altscreen, (int) term->screen.alternate,
+***************
+*** 1945,1951 ****
+  HandleTiteInhibit(Widget w,
+                 XEvent * event GCC_UNUSED,
+                 String * params,
+!                Cardinal * param_count)
+  {
+      /* eventually want to see if sensitive or not */
+      handle_toggle(do_titeInhibit, !((int) term->misc.titeInhibit),
+--- 1953,1959 ----
+  HandleTiteInhibit(Widget w,
+                 XEvent * event GCC_UNUSED,
+                 String * params,
+!                Cardinal *param_count)
+  {
+      /* eventually want to see if sensitive or not */
+      handle_toggle(do_titeInhibit, !((int) term->misc.titeInhibit),
+***************
+*** 1957,1963 ****
+  HandleSoftReset(Widget w,
+               XEvent * event GCC_UNUSED,
+               String * params GCC_UNUSED,
+!              Cardinal * param_count GCC_UNUSED)
+  {
+      do_softreset(w, (XtPointer) 0, (XtPointer) 0);
+  }
+--- 1965,1971 ----
+  HandleSoftReset(Widget w,
+               XEvent * event GCC_UNUSED,
+               String * params GCC_UNUSED,
+!              Cardinal *param_count GCC_UNUSED)
+  {
+      do_softreset(w, (XtPointer) 0, (XtPointer) 0);
+  }
+***************
+*** 1967,1973 ****
+  HandleHardReset(Widget w,
+               XEvent * event GCC_UNUSED,
+               String * params GCC_UNUSED,
+!              Cardinal * param_count GCC_UNUSED)
+  {
+      do_hardreset(w, (XtPointer) 0, (XtPointer) 0);
+  }
+--- 1975,1981 ----
+  HandleHardReset(Widget w,
+               XEvent * event GCC_UNUSED,
+               String * params GCC_UNUSED,
+!              Cardinal *param_count GCC_UNUSED)
+  {
+      do_hardreset(w, (XtPointer) 0, (XtPointer) 0);
+  }
+***************
+*** 1977,1983 ****
+  HandleClearSavedLines(Widget w,
+                     XEvent * event GCC_UNUSED,
+                     String * params GCC_UNUSED,
+!                    Cardinal * param_count GCC_UNUSED)
+  {
+      do_clearsavedlines(w, (XtPointer) 0, (XtPointer) 0);
+  }
+--- 1985,1991 ----
+  HandleClearSavedLines(Widget w,
+                     XEvent * event GCC_UNUSED,
+                     String * params GCC_UNUSED,
+!                    Cardinal *param_count GCC_UNUSED)
+  {
+      do_clearsavedlines(w, (XtPointer) 0, (XtPointer) 0);
+  }
+***************
+*** 1987,1993 ****
+  HandleFontDoublesize(Widget w,
+                    XEvent * event GCC_UNUSED,
+                    String * params,
+!                   Cardinal * param_count)
+  {
+      handle_toggle(do_font_doublesize, (int) term->screen.font_doublesize,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 1995,2001 ----
+  HandleFontDoublesize(Widget w,
+                    XEvent * event GCC_UNUSED,
+                    String * params,
+!                   Cardinal *param_count)
+  {
+      handle_toggle(do_font_doublesize, (int) term->screen.font_doublesize,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 1999,2005 ****
+  HandleFontBoxChars(Widget w,
+                  XEvent * event GCC_UNUSED,
+                  String * params,
+!                 Cardinal * param_count)
+  {
+      handle_toggle(do_font_boxchars, (int) term->screen.force_box_chars,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 2007,2013 ----
+  HandleFontBoxChars(Widget w,
+                  XEvent * event GCC_UNUSED,
+                  String * params,
+!                 Cardinal *param_count)
+  {
+      handle_toggle(do_font_boxchars, (int) term->screen.force_box_chars,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 2011,2017 ****
+  HandleFontLoading(Widget w,
+                 XEvent * event GCC_UNUSED,
+                 String * params,
+!                Cardinal * param_count)
+  {
+      handle_toggle(do_font_loadable, (int) term->misc.font_loadable,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 2019,2025 ----
+  HandleFontLoading(Widget w,
+                 XEvent * event GCC_UNUSED,
+                 String * params,
+!                Cardinal *param_count)
+  {
+      handle_toggle(do_font_loadable, (int) term->misc.font_loadable,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 2023,2029 ****
+  HandleRenderFont(Widget w,
+                XEvent * event GCC_UNUSED,
+                String * params,
+!               Cardinal * param_count)
+  {
+      handle_toggle(do_font_renderfont, term->misc.render_font,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 2031,2037 ----
+  HandleRenderFont(Widget w,
+                XEvent * event GCC_UNUSED,
+                String * params,
+!               Cardinal *param_count)
+  {
+      handle_toggle(do_font_renderfont, term->misc.render_font,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 2035,2041 ****
+  HandleUTF8Mode(Widget w,
+              XEvent * event GCC_UNUSED,
+              String * params,
+!             Cardinal * param_count)
+  {
+      handle_toggle(do_font_utf8_mode, term->screen.utf8_mode,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+--- 2043,2049 ----
+  HandleUTF8Mode(Widget w,
+              XEvent * event GCC_UNUSED,
+              String * params,
+!             Cardinal *param_count)
+  {
+      handle_toggle(do_font_utf8_mode, term->screen.utf8_mode,
+                 params, *param_count, w, (XtPointer) 0, (XtPointer) 0);
+***************
+*** 2047,2053 ****
+  HandleSetTerminalType(Widget w,
+                     XEvent * event GCC_UNUSED,
+                     String * params,
+!                    Cardinal * param_count)
+  {
+      if (*param_count == 1) {
+       switch (params[0][0]) {
+--- 2055,2061 ----
+  HandleSetTerminalType(Widget w,
+                     XEvent * event GCC_UNUSED,
+                     String * params,
+!                    Cardinal *param_count)
+  {
+      if (*param_count == 1) {
+       switch (params[0][0]) {
+***************
+*** 2073,2079 ****
+  HandleVisibility(Widget w,
+                XEvent * event GCC_UNUSED,
+                String * params,
+!               Cardinal * param_count)
+  {
+      if (*param_count == 2) {
+       switch (params[0][0]) {
+--- 2081,2087 ----
+  HandleVisibility(Widget w,
+                XEvent * event GCC_UNUSED,
+                String * params,
+!               Cardinal *param_count)
+  {
+      if (*param_count == 2) {
+       switch (params[0][0]) {
+***************
+*** 2102,2108 ****
+  HandleSetTekText(Widget w,
+                XEvent * event GCC_UNUSED,
+                String * params,
+!               Cardinal * param_count)
+  {
+      void (*proc) PROTO_XT_CALLBACK_ARGS = 0;
+  
+--- 2110,2116 ----
+  HandleSetTekText(Widget w,
+                XEvent * event GCC_UNUSED,
+                String * params,
+!               Cardinal *param_count)
+  {
+      void (*proc) PROTO_XT_CALLBACK_ARGS = 0;
+  
+***************
+*** 2140,2146 ****
+  HandleTekPage(Widget w,
+             XEvent * event GCC_UNUSED,
+             String * params GCC_UNUSED,
+!            Cardinal * param_count GCC_UNUSED)
+  {
+      do_tekpage(w, (XtPointer) 0, (XtPointer) 0);
+  }
+--- 2148,2154 ----
+  HandleTekPage(Widget w,
+             XEvent * event GCC_UNUSED,
+             String * params GCC_UNUSED,
+!            Cardinal *param_count GCC_UNUSED)
+  {
+      do_tekpage(w, (XtPointer) 0, (XtPointer) 0);
+  }
+***************
+*** 2150,2156 ****
+  HandleTekReset(Widget w,
+              XEvent * event GCC_UNUSED,
+              String * params GCC_UNUSED,
+!             Cardinal * param_count GCC_UNUSED)
+  {
+      do_tekreset(w, (XtPointer) 0, (XtPointer) 0);
+  }
+--- 2158,2164 ----
+  HandleTekReset(Widget w,
+              XEvent * event GCC_UNUSED,
+              String * params GCC_UNUSED,
+!             Cardinal *param_count GCC_UNUSED)
+  {
+      do_tekreset(w, (XtPointer) 0, (XtPointer) 0);
+  }
+***************
+*** 2160,2166 ****
+  HandleTekCopy(Widget w,
+             XEvent * event GCC_UNUSED,
+             String * params GCC_UNUSED,
+!            Cardinal * param_count GCC_UNUSED)
+  {
+      do_tekcopy(w, (XtPointer) 0, (XtPointer) 0);
+  }
+--- 2168,2174 ----
+  HandleTekCopy(Widget w,
+             XEvent * event GCC_UNUSED,
+             String * params GCC_UNUSED,
+!            Cardinal *param_count GCC_UNUSED)
+  {
+      do_tekcopy(w, (XtPointer) 0, (XtPointer) 0);
+  }
+***************
+*** 2217,2223 ****
+  }
+  
+  static void
+! SetupShell(Widget * menus, MenuList * shell, Widget * menu_tops, int n, int m)
+  {
+      char temp[80];
+      char *external_name = 0;
+--- 2225,2231 ----
+  }
+  
+  static void
+! SetupShell(Widget *menus, MenuList * shell, Widget *menu_tops, int n, int m)
+  {
+      char temp[80];
+      char *external_name = 0;
+***************
+*** 2253,2259 ****
+  #endif
+  
+  void
+! SetupMenus(Widget shell, Widget * forms, Widget * menus)
+  {
+  #if OPT_TOOLBAR
+      int n;
+--- 2261,2267 ----
+  #endif
+  
+  void
+! SetupMenus(Widget shell, Widget *forms, Widget *menus)
+  {
+  #if OPT_TOOLBAR
+      int n;
+***************
+*** 2327,2334 ****
+       InitPopup(tek_shell[tekMenu].w, menu_names[tekMenu].internal_name, 0);
+      }
+  #endif
+  }
+! #endif
+  
+  void
+  update_securekbd(void)
+--- 2335,2434 ----
+       InitPopup(tek_shell[tekMenu].w, menu_names[tekMenu].internal_name, 0);
+      }
+  #endif
++     term->screen.toolbars = True;
++     update_toolbar();
+  }
+! 
+! 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 -c 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 ****
+! /* $XTermId: menu.h,v 1.82 2004/05/13 00:41:21 tom Exp $ */
+  
+  /* $Xorg: menu.h,v 1.4 2001/02/09 02:06:03 xorgcvs Exp $ */
+  /*
+--- 1,4 ----
+! /* $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,56 ****
+  from The Open Group.
+  
+  */
+! /* $XFree86: xc/programs/xterm/menu.h,v 3.33 2004/05/13 00:41:21 dickey Exp $ */
+  
+  #ifndef included_menu_h
+  #define included_menu_h
+--- 50,56 ----
+  from The Open Group.
+  
+  */
+! /* $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,125 ****
+--- 120,126 ----
+  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,133 ****
+  extern void SetupMenus (Widget shell, Widget *forms, Widget *menus);
+  
+  #if OPT_TOOLBAR
+! extern void SetupToolbar(Widget shell);
+  #endif
+  
+  /*
+--- 128,135 ----
+  extern void SetupMenus (Widget shell, Widget *forms, Widget *menus);
+  
+  #if OPT_TOOLBAR
+! extern void SetupToolbar(Widget);
+! extern void ShowToolbar(Boolean);
+  #endif
+  
+  /*
+***************
+*** 139,144 ****
+--- 141,149 ----
+   * items in primary menu
+   */
+  typedef enum {
++ #if OPT_TOOLBAR
++     mainMenu_toolbar,
++ #endif
+      mainMenu_securekbd,
+      mainMenu_allowsends,
+      mainMenu_redraw,
+***************
+*** 298,303 ****
+--- 303,314 ----
+  /*
+   * 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 -c 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 ****
+! /* $XTermId: misc.c,v 1.231 2004/07/28 00:53:26 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 $ */
+  
+  /*
+   *
+!  * Copyright 1999-2002,2003 by Thomas E. Dickey
+   *
+   *                        All Rights Reserved
+   *
+--- 1,14 ----
+! /* $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.93 2004/12/01 01:27:47 dickey Exp $ */
+  
+  /*
+   *
+!  * Copyright 1999-2003,2004 by Thomas E. Dickey
+   *
+   *                        All Rights Reserved
+   *
+***************
+*** 237,243 ****
+  HandleKeyPressed(Widget w GCC_UNUSED,
+                XEvent * event,
+                String * params GCC_UNUSED,
+!               Cardinal * nparams GCC_UNUSED)
+  {
+      register TScreen *screen = &term->screen;
+  
+--- 237,243 ----
+  HandleKeyPressed(Widget w GCC_UNUSED,
+                XEvent * event,
+                String * params GCC_UNUSED,
+!               Cardinal *nparams GCC_UNUSED)
+  {
+      register TScreen *screen = &term->screen;
+  
+***************
+*** 253,259 ****
+  HandleEightBitKeyPressed(Widget w GCC_UNUSED,
+                        XEvent * event,
+                        String * params GCC_UNUSED,
+!                       Cardinal * nparams GCC_UNUSED)
+  {
+      register TScreen *screen = &term->screen;
+  
+--- 253,259 ----
+  HandleEightBitKeyPressed(Widget w GCC_UNUSED,
+                        XEvent * event,
+                        String * params GCC_UNUSED,
+!                       Cardinal *nparams GCC_UNUSED)
+  {
+      register TScreen *screen = &term->screen;
+  
+***************
+*** 269,275 ****
+  HandleStringEvent(Widget w GCC_UNUSED,
+                 XEvent * event GCC_UNUSED,
+                 String * params,
+!                Cardinal * nparams)
+  {
+      register TScreen *screen = &term->screen;
+  
+--- 269,275 ----
+  HandleStringEvent(Widget w GCC_UNUSED,
+                 XEvent * event GCC_UNUSED,
+                 String * params,
+!                Cardinal *nparams)
+  {
+      register TScreen *screen = &term->screen;
+  
+***************
+*** 320,326 ****
+  HandleInterpret(Widget w GCC_UNUSED,
+               XEvent * event GCC_UNUSED,
+               String * params,
+!              Cardinal * param_count)
+  {
+      if (*param_count == 1) {
+       char *value = params[0];
+--- 320,326 ----
+  HandleInterpret(Widget w GCC_UNUSED,
+               XEvent * event GCC_UNUSED,
+               String * params,
+!              Cardinal *param_count)
+  {
+      if (*param_count == 1) {
+       char *value = params[0];
+***************
+*** 729,735 ****
+  HandleDabbrevExpand(Widget gw,
+                   XEvent * event GCC_UNUSED,
+                   String * params GCC_UNUSED,
+!                  Cardinal * nparams GCC_UNUSED)
+  {
+      XtermWidget w = (XtermWidget) gw;
+      TScreen *screen = &w->screen;
+--- 729,735 ----
+  HandleDabbrevExpand(Widget gw,
+                   XEvent * event GCC_UNUSED,
+                   String * params GCC_UNUSED,
+!                  Cardinal *nparams GCC_UNUSED)
+  {
+      XtermWidget w = (XtermWidget) gw;
+      TScreen *screen = &w->screen;
+***************
+*** 744,750 ****
+  HandleDeIconify(Widget gw,
+               XEvent * event GCC_UNUSED,
+               String * params GCC_UNUSED,
+!              Cardinal * nparams GCC_UNUSED)
+  {
+      if (IsXtermWidget(gw)) {
+       register TScreen *screen = &((XtermWidget) gw)->screen;
+--- 744,750 ----
+  HandleDeIconify(Widget gw,
+               XEvent * event GCC_UNUSED,
+               String * params GCC_UNUSED,
+!              Cardinal *nparams GCC_UNUSED)
+  {
+      if (IsXtermWidget(gw)) {
+       register TScreen *screen = &((XtermWidget) gw)->screen;
+***************
+*** 757,763 ****
+  HandleIconify(Widget gw,
+             XEvent * event GCC_UNUSED,
+             String * params GCC_UNUSED,
+!            Cardinal * nparams GCC_UNUSED)
+  {
+      if (IsXtermWidget(gw)) {
+       register TScreen *screen = &((XtermWidget) gw)->screen;
+--- 757,763 ----
+  HandleIconify(Widget gw,
+             XEvent * event GCC_UNUSED,
+             String * params GCC_UNUSED,
+!            Cardinal *nparams GCC_UNUSED)
+  {
+      if (IsXtermWidget(gw)) {
+       register TScreen *screen = &((XtermWidget) gw)->screen;
+***************
+*** 890,896 ****
+  HandleMaximize(Widget gw,
+              XEvent * event GCC_UNUSED,
+              String * params GCC_UNUSED,
+!             Cardinal * nparams GCC_UNUSED)
+  {
+      if (IsXtermWidget(gw)) {
+       RequestMaximize((XtermWidget) gw, 1);
+--- 890,896 ----
+  HandleMaximize(Widget gw,
+              XEvent * event GCC_UNUSED,
+              String * params GCC_UNUSED,
+!             Cardinal *nparams GCC_UNUSED)
+  {
+      if (IsXtermWidget(gw)) {
+       RequestMaximize((XtermWidget) gw, 1);
+***************
+*** 902,908 ****
+  HandleRestoreSize(Widget gw,
+                 XEvent * event GCC_UNUSED,
+                 String * params GCC_UNUSED,
+!                Cardinal * nparams GCC_UNUSED)
+  {
+      if (IsXtermWidget(gw)) {
+       RequestMaximize((XtermWidget) gw, 0);
+--- 902,908 ----
+  HandleRestoreSize(Widget gw,
+                 XEvent * event GCC_UNUSED,
+                 String * params GCC_UNUSED,
+!                Cardinal *nparams GCC_UNUSED)
+  {
+      if (IsXtermWidget(gw)) {
+       RequestMaximize((XtermWidget) gw, 0);
+***************
+*** 976,986 ****
+  
+  #ifdef VMS
+      if ((fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644)) < 0) {
+       fprintf(stderr, "%s: cannot open %s: %d:%s\n",
+               xterm_name,
+               path,
+!              errno,
+!              SysErrorMsg(errno));
+       return -1;
+      }
+      chown(path, uid, gid);
+--- 976,987 ----
+  
+  #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,
+!              the_error,
+!              SysErrorMsg(the_error));
+       return -1;
+      }
+      chown(path, uid, gid);
+***************
+*** 988,998 ****
+      if ((access(path, F_OK) != 0 && (errno != ENOENT))
+       || (!(creat_as(uid, gid, append, path, 0644)))
+       || ((fd = open(path, O_WRONLY | O_APPEND)) < 0)) {
+       fprintf(stderr, "%s: cannot open %s: %d:%s\n",
+               xterm_name,
+               path,
+!              errno,
+!              SysErrorMsg(errno));
+       return -1;
+      }
+  #endif
+--- 989,1000 ----
+      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,
+!              the_error,
+!              SysErrorMsg(the_error));
+       return -1;
+      }
+  #endif
+***************
+*** 1707,1712 ****
+--- 1709,1898 ----
+      }
+  }
+  
++ /*
++  * 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,1720 ****
+      char reply[BUFSIZ];
+      char *cp = (char *) dcsbuf;
+      Bool okay;
+!     Bool clear_all;
+  
+      TRACE(("do_dcs(%s:%d)\n", (char *) dcsbuf, dcslen));
+  
+--- 1900,1906 ----
+      char reply[BUFSIZ];
+      char *cp = (char *) dcsbuf;
+      Bool okay;
+!     ANSI params;
+  
+      TRACE(("do_dcs(%s:%d)\n", (char *) dcsbuf, dcslen));
+  
+***************
+*** 1861,1922 ****
+       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)
+               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;
+!          }
+       }
+       break;
+      }
+--- 2047,2062 ----
+       break;
+  #endif
+      default:
+!      parse_ansi_params(&params, &cp);
+!      switch (params.a_final) {
+!      case '|':               /* DECUDK */
+!          if (params.a_param[0] == 0)
+               reset_decudk();
+!          parse_decudk(cp);
+!          break;
+!      case '{':               /* DECDLD */
+!          parse_decdld(&params, cp);
+!          break;
+       }
+       break;
+      }
+***************
+*** 2010,2016 ****
+  
+  /***====================================================================***/
+  
+! ScrnColors *pOldColors = NULL;
+  
+  static Boolean
+  GetOldColors(XtermWidget pTerm)
+--- 2150,2156 ----
+  
+  /***====================================================================***/
+  
+! static ScrnColors *pOldColors = NULL;
+  
+  static Boolean
+  GetOldColors(XtermWidget pTerm)
+***************
+*** 2435,2443 ****
+  int
+  xioerror(Display * dpy)
+  {
+      (void) fprintf(stderr,
+                  "%s:  fatal IO error %d (%s) or KillClient on X server \"%s\"\r\n",
+!                 xterm_name, errno, SysErrorMsg(errno),
+                  DisplayString(dpy));
+  
+      Exit(ERROR_XIOERROR);
+--- 2575,2585 ----
+  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, the_error, SysErrorMsg(the_error),
+                  DisplayString(dpy));
+  
+      Exit(ERROR_XIOERROR);
+***************
+*** 2621,2628 ****
+  static int
+  cmp_options(const void *a, const void *b)
+  {
+!     return strcmp(skip_punct(((const OptionHelp *) a)->opt),
+!                skip_punct(((const OptionHelp *) b)->opt));
+  }
+  
+  static int
+--- 2763,2771 ----
+  static int
+  cmp_options(const void *a, const void *b)
+  {
+!     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 -c 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 ****
+! /* $XTermId: os2main.c,v 1.170 2004/07/20 01:14:41 tom Exp $ */
+  
+  /* removed all foreign stuff to get the code more clear (hv)
+   * and did some rewrite for the obscure OS/2 environment
+--- 1,4 ----
+! /* $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,13 ****
+  #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 $ */
+  
+  /***********************************************************
+  
+--- 7,13 ----
+  #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.71 2004/12/01 01:27:47 dickey Exp $ */
+  
+  /***********************************************************
+  
+***************
+*** 196,202 ****
+   */
+  static int override_tty_modes = 0;
+  /* *INDENT-OFF* */
+! struct _xttymodes {
+      char *name;
+      size_t len;
+      int set;
+--- 196,202 ----
+   */
+  static int override_tty_modes = 0;
+  /* *INDENT-OFF* */
+! static struct _xttymodes {
+      char *name;
+      size_t len;
+      int set;
+***************
+*** 410,417 ****
+--- 410,419 ----
+  {"-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,793 ****
+                       Atom * selection GCC_UNUSED,
+                       Atom * target GCC_UNUSED,
+                       Atom * type GCC_UNUSED,
+!                      XtPointer * value GCC_UNUSED,
+                       unsigned long *length GCC_UNUSED,
+                       int *format GCC_UNUSED)
+  {
+--- 789,795 ----
+                       Atom * selection GCC_UNUSED,
+                       Atom * target GCC_UNUSED,
+                       Atom * type GCC_UNUSED,
+!                      XtPointer *value GCC_UNUSED,
+                       unsigned long *length GCC_UNUSED,
+                       int *format GCC_UNUSED)
+  {
+***************
+*** 827,833 ****
+  DeleteWindow(Widget w,
+            XEvent * event GCC_UNUSED,
+            String * params GCC_UNUSED,
+!           Cardinal * num_params GCC_UNUSED)
+  {
+  #if OPT_TEK4014
+      if (w == toplevel) {
+--- 829,835 ----
+  DeleteWindow(Widget w,
+            XEvent * event GCC_UNUSED,
+            String * params GCC_UNUSED,
+!           Cardinal *num_params GCC_UNUSED)
+  {
+  #if OPT_TEK4014
+      if (w == toplevel) {
+***************
+*** 847,853 ****
+  KeyboardMapping(Widget w GCC_UNUSED,
+               XEvent * event,
+               String * params GCC_UNUSED,
+!              Cardinal * num_params GCC_UNUSED)
+  {
+      switch (event->type) {
+      case MappingNotify:
+--- 849,855 ----
+  KeyboardMapping(Widget w GCC_UNUSED,
+               XEvent * event,
+               String * params GCC_UNUSED,
+!              Cardinal *num_params GCC_UNUSED)
+  {
+      switch (event->type) {
+      case MappingNotify:
+***************
+*** 856,862 ****
+      }
+  }
+  
+! XtActionsRec actionProcs[] =
+  {
+      {"DeleteWindow", DeleteWindow},
+      {"KeyboardMapping", KeyboardMapping},
+--- 858,864 ----
+      }
+  }
+  
+! static XtActionsRec actionProcs[] =
+  {
+      {"DeleteWindow", DeleteWindow},
+      {"KeyboardMapping", KeyboardMapping},
+***************
+*** 962,968 ****
+  #endif /* OPT_SESSION_MGT */
+      XtSetErrorHandler((XtErrorHandler) 0);
+  
+!     XtGetApplicationResources(toplevel, (XtPointer) & resource,
+                             application_resources,
+                             XtNumber(application_resources), NULL, 0);
+      TRACE_XRES();
+--- 964,970 ----
+  #endif /* OPT_SESSION_MGT */
+      XtSetErrorHandler((XtErrorHandler) 0);
+  
+!     XtGetApplicationResources(toplevel, (XtPointer) &resource,
+                             application_resources,
+                             XtNumber(application_resources), NULL, 0);
+      TRACE_XRES();
+Index: xc/programs/xterm/plink.sh
+diff -c 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 ****
+  #!/bin/sh
+! # $XFree86$
+  #
+  # Reduce the number of dynamic libraries used to link an executable.
+  CMD=
+--- 1,5 ----
+  #!/bin/sh
+! # $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 -c 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,14 ****
+   * 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 $ */
+  
+  #include <precompose.h>
+  
+! struct {
+    int replacement;
+    int base;
+    int comb; 
+--- 4,15 ----
+   * DO NOT EDIT BY HAND! This is generated by the script
+   * unicode/make-precompose.sh
+   */
+! /* $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>
+  
+! static struct {
+    int replacement;
+    int base;
+    int comb; 
+***************
+*** 753,758 ****
+--- 754,772 ----
+  { 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,946 ****
+--- 955,961 ----
+  { 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 -c 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 ****
+  /*
+!  * $XFree86: xc/programs/xterm/print.c,v 1.19 2002/08/12 00:36:33 dickey Exp $
+   */
+  
+  /************************************************************
+  
+! Copyright 1997-2000,2002 by Thomas E. Dickey
+  
+                          All Rights Reserved
+  
+--- 1,12 ----
++ /* $XTermId: print.c,v 1.54 2004/12/01 01:27:47 tom Exp $ */
++ 
+  /*
+!  * $XFree86: xc/programs/xterm/print.c,v 1.20 2004/12/01 01:27:47 dickey Exp $
+   */
+  
+  /************************************************************
+  
+! Copyright 1997-2002,2004 by Thomas E. Dickey
+  
+                          All Rights Reserved
+  
+***************
+*** 55,61 ****
+  #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
+--- 57,62 ----
+Index: xc/programs/xterm/ptyx.h
+diff -c 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 ****
+! /* $XTermId: ptyx.h,v 1.328 2004/07/28 00:53:26 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 $ */
+  
+  /*
+   * Copyright 1999-2003,2004 by Thomas E. Dickey
+--- 1,10 ----
+! /* $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.120 2004/12/01 01:27:47 dickey Exp $ */
+  
+  /*
+   * Copyright 1999-2003,2004 by Thomas E. Dickey
+***************
+*** 319,329 ****
+  } OptionHelp;
+  
+  typedef struct {
+!      unsigned char   a_type;
+!      unsigned char   a_pintro;
+!      unsigned char   a_final;
+!      unsigned char   a_inters;
+!      char    a_nparam;               /* # of parameters              */
+       short   a_param[NPARAM];        /* Parameters                   */
+  } ANSI;
+  
+--- 319,329 ----
+  } OptionHelp;
+  
+  typedef struct {
+!      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,435 ****
+--- 430,439 ----
+  #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,499 ****
+--- 498,507 ----
+  #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,681 ****
+  
+  #if OPT_ISO_COLORS
+  #define if_OPT_ISO_COLORS(screen, code) if(screen->colorMode) code
+! #define TERM_COLOR_FLAGS (term->flags & (BG_COLOR))
+  #define COLOR_0              0
+  #define COLOR_1              1
+  #define COLOR_2              2
+--- 683,689 ----
+  
+  #if OPT_ISO_COLORS
+  #define if_OPT_ISO_COLORS(screen, code) if(screen->colorMode) code
+! #define TERM_COLOR_FLAGS (term->flags & (FG_COLOR|BG_COLOR))
+  #define COLOR_0              0
+  #define COLOR_1              1
+  #define COLOR_2              2
+***************
+*** 913,922 ****
+--- 921,938 ----
+       {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,1039 ****
+--- 1050,1062 ----
+       char *          fn;
+  } XTermFonts;
+  
++ typedef struct {
++      int             top;
++      int             left;
++      int             bottom;
++      int             right;
++ } XTermRect;
++ 
+       /* indices into save_modes[] */
+  typedef enum {
+       DP_CRS_VISIBLE,
+***************
+*** 1063,1068 ****
+--- 1086,1094 ----
+  #if OPT_BLINK_CURS
+       DP_CRS_BLINK,
+  #endif
++ #if OPT_TOOLBAR
++      DP_TOOLBAR,
++ #endif
+       DP_LAST
+  } SaveModes;
+  
+***************
+*** 1124,1129 ****
+--- 1150,1163 ----
+       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,1147 ****
+       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            */
+  #endif
+  };
+  
+--- 1174,1181 ----
+       GC              normalboldGC;   /* normal painting, bold font   */
+       GC              reverseboldGC;  /* reverse painting, bold font  */
+  #if OPT_TOOLBAR
+!      Boolean         active;         /* true if toolbars are used    */
+!      TbInfo          tb_info;        /* toolbar information          */
+  #endif
+  };
+  
+***************
+*** 1188,1199 ****
+       int             fonts_used;     /* count items in double_fonts  */
+       XTermFonts      double_fonts[NUM_CHRSET];
+  #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 */
+  #endif
+  #if OPT_BROKEN_OSC
+       Boolean         brokenLinuxOSC; /* true to ignore Linux palette ctls */
+--- 1222,1240 ----
+       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             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,1258 ****
+--- 1294,1302 ----
+       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,1457 ****
+       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];
+--- 1495,1500 ----
+***************
+*** 1460,1468 ****
+--- 1503,1513 ----
+       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,1482 ****
+       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            */
+  #endif
+  } TekPart;
+  
+--- 1520,1526 ----
+       char *          initial_font;           /* large, 2, 3, small */
+       char *          gin_terminator_str;     /* ginTerminator resource */
+  #if OPT_TOOLBAR
+!      TbInfo          tb_info;        /* toolbar information          */
+  #endif
+  } TekPart;
+  
+***************
+*** 1604,1610 ****
+  #if OPT_RENDERFONT
+      char *face_name;
+      char *face_wide_name;
+!     int face_size;
+      Boolean render_font;
+  #endif
+  } Misc;
+--- 1648,1654 ----
+  #if OPT_RENDERFONT
+      char *face_name;
+      char *face_wide_name;
+!     float face_size;
+      Boolean render_font;
+  #endif
+  } Misc;
+***************
+*** 1697,1703 ****
+                                  screen.  Used to distinguish blanks from
+                                  empty parts of the screen when selecting */
+  
+! #if OPT_BLINK_CURS
+  #define BOLDATTR(screen) (BOLD | ((screen)->blink_as_bold ? BLINK : 0))
+  #else
+  #define BOLDATTR(screen) (BOLD | BLINK)
+--- 1741,1747 ----
+                                  screen.  Used to distinguish blanks from
+                                  empty parts of the screen when selecting */
+  
+! #if OPT_BLINK_TEXT
+  #define BOLDATTR(screen) (BOLD | ((screen)->blink_as_bold ? BLINK : 0))
+  #else
+  #define BOLDATTR(screen) (BOLD | BLINK)
+***************
+*** 1720,1725 ****
+--- 1764,1772 ----
+                       /* 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,1826 ****
+  #define CursorY(screen,row) ((((row) - screen->topline) * FontHeight(screen)) \
+                       + screen->border)
+  
+  #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 FontAscent(screen)   (IsIcon(screen) ? (screen)->fnt_icon->ascent \
+!                                              : (screen)->whichVwin->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)
+! 
+  #else /* NO_ACTIVE_ICON */
+  
+  #define IsIcon(screen)               (False)
+! #define VWindow(screen)              ((screen)->fullVwin.window)
+  #define VShellWindow         XtWindow(SHELL_OF(term))
+! #define TWindow(screen)              ((screen)->fullTwin.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 */
+  
+  #if OPT_TEK4014
+  #define TEK_LINK_BLOCK_SIZE 1024
+--- 1814,1874 ----
+  #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 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 \
+!                                              : WhichVWin(screen)->f_ascent)
+  #define FontDescent(screen)  (IsIcon(screen) ? (screen)->fnt_icon->descent \
+!                                              : WhichVWin(screen)->f_descent)
+  #else /* NO_ACTIVE_ICON */
+  
+  #define IsIcon(screen)               (False)
+! #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)              WhichTWin(screen)->window
+  #define TShellWindow         XtWindow(SHELL_OF(tekWidget))
+  
+! #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 -c 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 ****
+  /*
+   *   $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 $ */
+  
+  /*
+!  * Copyright 2003 by Thomas E. Dickey
+   *
+   *                         All Rights Reserved
+   *
+--- 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.58 2004/12/01 01:27:47 dickey Exp $ */
+  
+  /*
+!  * Copyright 2003,2004 by Thomas E. Dickey
+   *
+   *                         All Rights Reserved
+   *
+***************
+*** 115,121 ****
+  #define      SHELL_C         1
+  #define      SHELL_BOURNE    2
+  /* *INDENT-OFF* */
+! struct {
+      char *name;
+      int type;
+  } shell_list[] = {
+--- 117,123 ----
+  #define      SHELL_C         1
+  #define      SHELL_BOURNE    2
+  /* *INDENT-OFF* */
+! static struct {
+      char *name;
+      int type;
+  } shell_list[] = {
+***************
+*** 131,188 ****
+  };
+  /* *INDENT-ON* */
+  
+! char *emuname[EMULATIONS] =
+  {
+      "VT100",
+      "Sun",
+  };
+! char *myname;
+! int shell_type = SHELL_UNKNOWN;
+! 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] =
+  {                            /* size in pixels */
+      0,
+      ESCAPE("[14t"),
+  };
+  #endif /* USE_STRUCT_{TTYSIZE|WINSIZE} */
+! char *restore[EMULATIONS] =
+  {
+      ESCAPE("8"),
+      0,
+  };
+! char *setname = "";
+! char *setsize[EMULATIONS] =
+  {
+      0,
+      ESCAPE("[8;%s;%st"),
+  };
+  
+  #ifdef USE_ANY_SYSV_TERMIO
+! struct termio tioorig;
+  #elif defined(USE_TERMIOS)
+! struct termios tioorig;
+  #else
+! struct sgttyb sgorig;
+  #endif /* USE_ANY_SYSV_TERMIO/USE_TERMIOS */
+  
+! char *size[EMULATIONS] =
+  {
+      ESCAPE("[%d;%dR"),
+      ESCAPE("[8;%d;%dt"),
+  };
+! char sunname[] = "sunsize";
+! int tty;
+! FILE *ttyfp;
+  
+  #if defined(USE_STRUCT_TTYSIZE)
+  #elif defined(USE_STRUCT_WINSIZE)
+! char *wsize[EMULATIONS] =
+  {
+      0,
+      ESCAPE("[4;%hd;%hdt"),
+--- 133,190 ----
+  };
+  /* *INDENT-ON* */
+  
+! static char *emuname[EMULATIONS] =
+  {
+      "VT100",
+      "Sun",
+  };
+! 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)
+! static char *getwsize[EMULATIONS] =
+  {                            /* size in pixels */
+      0,
+      ESCAPE("[14t"),
+  };
+  #endif /* USE_STRUCT_{TTYSIZE|WINSIZE} */
+! static char *restore[EMULATIONS] =
+  {
+      ESCAPE("8"),
+      0,
+  };
+! static char *setname = "";
+! static char *setsize[EMULATIONS] =
+  {
+      0,
+      ESCAPE("[8;%s;%st"),
+  };
+  
+  #ifdef USE_ANY_SYSV_TERMIO
+! static struct termio tioorig;
+  #elif defined(USE_TERMIOS)
+! static struct termios tioorig;
+  #else
+! static struct sgttyb sgorig;
+  #endif /* USE_ANY_SYSV_TERMIO/USE_TERMIOS */
+  
+! static char *size[EMULATIONS] =
+  {
+      ESCAPE("[%d;%dR"),
+      ESCAPE("[8;%d;%dt"),
+  };
+! static char sunname[] = "sunsize";
+! static int tty;
+! static FILE *ttyfp;
+  
+  #if defined(USE_STRUCT_TTYSIZE)
+  #elif defined(USE_STRUCT_WINSIZE)
+! static char *wsize[EMULATIONS] =
+  {
+      0,
+      ESCAPE("[4;%hd;%hdt"),
+***************
+*** 193,199 ****
+  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);
+  
+  #undef US                    /* may conflict with curses.h */
+  
+--- 195,201 ----
+  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);
+  
+  #undef US                    /* may conflict with curses.h */
+  
+***************
+*** 530,536 ****
+  }
+  
+  static void
+! readstring(register FILE * fp, register char *buf, char *str)
+  {
+      register int last, c;
+  #if !defined(USG) && !defined(__UNIXOS2__)
+--- 532,538 ----
+  }
+  
+  static void
+! 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 -c 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,60 ****
+   * SOFTWARE.
+   */
+  
+! /* $XFree86: xc/programs/xterm/screen.c,v 3.66 2004/03/04 02:21:56 dickey Exp $ */
+  
+  /* screen.c */
+  
+--- 56,62 ----
+   * SOFTWARE.
+   */
+  
+! /* $XFree86: xc/programs/xterm/screen.c,v 3.67 2004/12/01 01:27:47 dickey Exp $ */
+  
+  /* screen.c */
+  
+***************
+*** 71,76 ****
+--- 73,83 ----
+  
+  #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,311 ****
+  }
+  #endif
+  
+! int last_written_row = -1;
+! int last_written_col = -1;
+  
+  /*
+   * Writes str into buf at screen's current row and column.  Characters are set
+--- 311,327 ----
+  }
+  #endif
+  
+! /*
+!  * 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,341 ****
+      int length = len;                /* workaround for compiler bug? */
+      Char *attrs;
+      int avail = screen->max_col - screen->cur_col + 1;
+!     Char *col;
+      int wrappedbit;
+  #if OPT_WIDE_CHARS
+!     Char starcol, starcol2;
+      Char *comb1l = 0, *comb1h = 0, *comb2l = 0, *comb2h = 0;
+  #endif
+  
+--- 348,357 ----
+      int length = len;                /* workaround for compiler bug? */
+      Char *attrs;
+      int avail = screen->max_col - screen->cur_col + 1;
+!     Char *chars;
+      int wrappedbit;
+  #if OPT_WIDE_CHARS
+!     Char starcol1, starcol2;
+      Char *comb1l = 0, *comb1h = 0, *comb2l = 0, *comb2h = 0;
+  #endif
+  
+***************
+*** 350,356 ****
+      if (length <= 0)
+       return;
+  
+!     col = 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, {
+--- 366,372 ----
+      if (length <= 0)
+       return;
+  
+!     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,388 ****
+      wrappedbit = ScrnTstWrapped(screen, screen->cur_row);
+  
+  #if OPT_WIDE_CHARS
+!     starcol = *col;
+!     starcol2 = col[length - 1];
+  #endif
+  
+      /* write blanks if we're writing invisible text */
+      if (flags & INVISIBLE) {
+!      memset(col, ' ', length);
+      } else {
+!      memcpy(col, str, length);       /* This can stand for the present. If it
+                                          is wrong, we will scribble over it */
+      }
+  
+--- 390,404 ----
+      wrappedbit = ScrnTstWrapped(screen, screen->cur_row);
+  
+  #if OPT_WIDE_CHARS
+!     starcol1 = *chars;
+!     starcol2 = chars[length - 1];
+  #endif
+  
+      /* write blanks if we're writing invisible text */
+      if (flags & INVISIBLE) {
+!      memset(chars, ' ', length);
+      } else {
+!      memcpy(chars, str, length);     /* This can stand for the present. If it
+                                          is wrong, we will scribble over it */
+      }
+  
+***************
+*** 396,411 ****
+  #define ERROR_2 0x00
+      if_OPT_WIDE_CHARS(screen, {
+  
+!      Char *wc;
+  
+       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;
+           }
+           /* if we are overwriting the right hand half of a
+              wide character, make the other half vanish */
+--- 412,427 ----
+  #define ERROR_2 0x00
+      if_OPT_WIDE_CHARS(screen, {
+  
+!      Char *char2;
+  
+       if (real_width != length) {
+!          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,445 ****
+               if (str2)
+                   ch |= *str2 << 8;
+  
+!              *c = *str;
+!              c++;
+               str++;
+  
+               if (str2) {
+!                  *wc = *str2;
+                   str2++;
+               } else
+!                  *wc = 0;
+!              wc++;
+               length--;
+  
+               if (iswide(ch)) {
+!                  *c = HIDDEN_LO;
+!                  *wc = HIDDEN_HI;
+!                  c++;
+!                  wc++;
+               }
+           }
+  
+!          if (*c == HIDDEN_LO
+!              && *wc == HIDDEN_HI
+!              && c[-1] == HIDDEN_LO
+!              && wc[-1] == HIDDEN_HI) {
+!              *c = ERROR_1;
+!              *wc = ERROR_2;
+           }
+           /* if we are overwriting the left hand half of a
+              wide character, make the other half vanish */
+--- 430,461 ----
+               if (str2)
+                   ch |= *str2 << 8;
+  
+!              *char1 = *str;
+!              char1++;
+               str++;
+  
+               if (str2) {
+!                  *char2 = *str2;
+                   str2++;
+               } else
+!                  *char2 = 0;
+!              char2++;
+               length--;
+  
+               if (iswide(ch)) {
+!                  *char1 = HIDDEN_LO;
+!                  *char2 = HIDDEN_HI;
+!                  char1++;
+!                  char2++;
+               }
+           }
+  
+!          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,472 ****
+  
+       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 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 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);
+               else
+!                  memcpy(wc, str2, length);
+           }
+       }
+      });
+--- 463,488 ----
+  
+       else {
+  
+!          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 (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(char2, 0, length);
+               else
+!                  memcpy(char2, str2, length);
+           }
+       }
+      });
+***************
+*** 497,504 ****
+      else
+       ScrnClrWrapped(screen, screen->cur_row);
+  
+!     last_written_col = screen->cur_col + real_width - 1;
+!     last_written_row = screen->cur_row;
+  
+      if_OPT_XMC_GLITCH(screen, {
+       Resolve_XMC(screen);
+--- 513,522 ----
+      else
+       ScrnClrWrapped(screen, 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,520 ****
+--- 533,540 ----
+      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,834 ****
+--- 849,857 ----
+       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,909 ****
+               maxcol /= 2;
+           }
+  #endif
+!          /* row does not intersect selection; don't hilite */
+           if (!force) {
+               while (col <= maxcol && (attrs[col] & ~BOLD) == 0 &&
+!                     (chars[col] & ~040) == 0)
+                   col++;
+  
+               while (col <= maxcol && (attrs[maxcol] & ~BOLD) == 0 &&
+!                     (chars[maxcol] & ~040) == 0)
+                   maxcol--;
+           }
+  #if OPT_DEC_CHRSET
+--- 919,934 ----
+               maxcol /= 2;
+           }
+  #endif
+!          /*
+!           * If row does not intersect selection; don't hilite blanks.
+!           */
+           if (!force) {
+               while (col <= maxcol && (attrs[col] & ~BOLD) == 0 &&
+!                     BLANK_CEL(col))
+                   col++;
+  
+               while (col <= maxcol && (attrs[maxcol] & ~BOLD) == 0 &&
+!                     BLANK_CEL(maxcol))
+                   maxcol--;
+           }
+  #if OPT_DEC_CHRSET
+***************
+*** 1175,1180 ****
+--- 1200,1225 ----
+  }
+  
+  /*
++  * 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,1318 ****
+               screen->topline = -screen->savedlines;
+           screen->cur_row += move_down_by;
+           screen->cursor_row += move_down_by;
+!          ScrollSelection(screen, move_down_by);
+  
+           if (screen->alternate)
+               SwitchBufPtrs(screen);  /* put the pointers back */
+--- 1357,1363 ----
+               screen->topline = -screen->savedlines;
+           screen->cur_row += move_down_by;
+           screen->cursor_row += move_down_by;
+!          ScrollSelection(screen, move_down_by, True);
+  
+           if (screen->alternate)
+               SwitchBufPtrs(screen);  /* put the pointers back */
+***************
+*** 1418,1420 ****
+--- 1463,1763 ----
+  
+      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 -c 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,11 ****
+   *   $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 $ */
+  
+  /*
+!  * Copyright 2000-2002,2003 by Thomas E. Dickey
+   *
+   *                         All Rights Reserved
+   *
+--- 2,11 ----
+   *   $Xorg: scrollbar.c,v 1.4 2000/08/17 19:55:09 cpqbld Exp $
+   */
+  
+! /* $XFree86: xc/programs/xterm/scrollbar.c,v 3.40 2004/12/01 01:27:47 dickey Exp $ */
+  
+  /*
+!  * Copyright 2000-2003,2004 by Thomas E. Dickey
+   *
+   *                         All Rights Reserved
+   *
+***************
+*** 95,104 ****
+      XtGeometryResult geomreqresult;
+      Dimension reqWidth, reqHeight, repWidth, repHeight;
+  #ifndef NO_ACTIVE_ICON
+!     struct _vtwin *saveWin = screen->whichVwin;
+  
+      /* all units here want to be in the normal font units */
+!     screen->whichVwin = &screen->fullVwin;
+  #endif /* NO_ACTIVE_ICON */
+  
+      /*
+--- 95,104 ----
+      XtGeometryResult geomreqresult;
+      Dimension reqWidth, reqHeight, repWidth, repHeight;
+  #ifndef NO_ACTIVE_ICON
+!     struct _vtwin *saveWin = WhichVWin(screen);
+  
+      /* all units here want to be in the normal font units */
+!     WhichVWin(screen) = &screen->fullVwin;
+  #endif /* NO_ACTIVE_ICON */
+  
+      /*
+***************
+*** 209,215 ****
+      XSetWMNormalHints(screen->display, XtWindow(XtParent(xw)), &sizehints);
+  #endif
+  #ifndef NO_ACTIVE_ICON
+!     screen->whichVwin = saveWin;
+  #endif /* NO_ACTIVE_ICON */
+  }
+  
+--- 209,215 ----
+      XSetWMNormalHints(screen->display, XtWindow(XtParent(xw)), &sizehints);
+  #endif
+  #ifndef NO_ACTIVE_ICON
+!     WhichVWin(screen) = saveWin;
+  #endif /* NO_ACTIVE_ICON */
+  }
+  
+***************
+*** 343,349 ****
+      scrolling_copy_area(screen, scrolltop, scrollheight, -i);
+      screen->topline = top;
+  
+!     ScrollSelection(screen, i);
+  
+      XClearArea(
+                 screen->display,
+--- 343,349 ----
+      scrolling_copy_area(screen, scrolltop, scrollheight, -i);
+      screen->topline = top;
+  
+!     ScrollSelection(screen, i, True);
+  
+      XClearArea(
+                 screen->display,
+***************
+*** 621,627 ****
+                      Widget gw,
+                      XEvent * event GCC_UNUSED,
+                      String * params,
+!                     Cardinal * nparams)
+  {
+      long amount;
+  
+--- 621,627 ----
+                      Widget gw,
+                      XEvent * event GCC_UNUSED,
+                      String * params,
+!                     Cardinal *nparams)
+  {
+      long amount;
+  
+***************
+*** 636,642 ****
+                   Widget gw,
+                   XEvent * event GCC_UNUSED,
+                   String * params,
+!                  Cardinal * nparams)
+  {
+      long amount;
+  
+--- 636,642 ----
+                   Widget gw,
+                   XEvent * event GCC_UNUSED,
+                   String * params,
+!                  Cardinal *nparams)
+  {
+      long amount;
+  
+Index: xc/programs/xterm/testxmc.c
+diff -c 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 ****
+! /* $XTermId: testxmc.c,v 1.23 2004/04/18 20:49:43 tom Exp $ */
+  
+  /*
+!  * $XFree86: xc/programs/xterm/testxmc.c,v 3.10 2004/04/18 20:49:43 dickey Exp $
+   */
+  
+  /************************************************************
+--- 1,7 ----
+! /* $XTermId: testxmc.c,v 1.25 2004/12/01 01:27:47 tom Exp $ */
+  
+  /*
+!  * $XFree86: xc/programs/xterm/testxmc.c,v 3.11 2004/12/01 01:27:47 dickey Exp $
+   */
+  
+  /************************************************************
+***************
+*** 220,226 ****
+          row, col));
+  
+      if (changed) {
+!      ScrnRefresh(screen, screen->cur_row, 0, row + 1 - screen->cur_row,
+                   screen->max_col + 1, True);
+      }
+  }
+--- 220,226 ----
+          row, col));
+  
+      if (changed) {
+!      ScrnUpdate(screen, screen->cur_row, 0, row + 1 - screen->cur_row,
+                   screen->max_col + 1, True);
+      }
+  }
+Index: xc/programs/xterm/trace.c
+diff -c 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 ****
+! /* $XTermId: trace.c,v 1.53 2004/07/20 01:14:41 tom Exp $ */
+  
+  /*
+!  * $XFree86: xc/programs/xterm/trace.c,v 3.20 2004/07/20 01:14:41 dickey Exp $
+   */
+  
+  /************************************************************
+--- 1,7 ----
+! /* $XTermId: trace.c,v 1.56 2004/12/01 01:27:47 tom Exp $ */
+  
+  /*
+!  * $XFree86: xc/programs/xterm/trace.c,v 3.21 2004/12/01 01:27:47 dickey Exp $
+   */
+  
+  /************************************************************
+***************
+*** 249,254 ****
+--- 249,256 ----
+       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,353 ****
+  static Boolean
+  standard_option(char *opt)
+  {
+!     static char *table[] =
+      {
+       "+rv",
+       "+synchronous",
+--- 349,355 ----
+  static Boolean
+  standard_option(char *opt)
+  {
+!     static const char *table[] =
+      {
+       "+rv",
+       "+synchronous",
+Index: xc/programs/xterm/util.c
+diff -c 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 ****
+! /* $XTermId: util.c,v 1.196 2004/08/08 22:36:13 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 $ */
+  
+  /*
+   * Copyright 1999-2003,2004 by Thomas E. Dickey
+--- 1,10 ----
+! /* $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.86 2004/12/01 01:27:47 dickey Exp $ */
+  
+  /*
+   * Copyright 1999-2003,2004 by Thomas E. Dickey
+***************
+*** 158,164 ****
+      }
+      scrolling_copy_area(screen, scrolltop + screen->scroll_amt,
+                       scrollheight, screen->scroll_amt);
+!     ScrollSelection(screen, -(screen->scroll_amt));
+      screen->scroll_amt = 0;
+      screen->refresh_amt = 0;
+      if (refreshheight > 0) {
+--- 158,164 ----
+      }
+      scrolling_copy_area(screen, scrolltop + screen->scroll_amt,
+                       scrollheight, screen->scroll_amt);
+!     ScrollSelection(screen, -(screen->scroll_amt), False);
+      screen->scroll_amt = 0;
+      screen->refresh_amt = 0;
+      if (refreshheight > 0) {
+***************
+*** 179,187 ****
+      int amount = screen->refresh_amt;
+      int row = screen->cur_row;
+  
+!     if (amount == 0)
+       return (0);
+!     if (amount > 0) {
+       int bottom;
+  
+       if (row == (bottom = screen->bot_marg) - amount) {
+--- 179,187 ----
+      int amount = screen->refresh_amt;
+      int row = screen->cur_row;
+  
+!     if (amount == 0) {
+       return (0);
+!     } else if (amount > 0) {
+       int bottom;
+  
+       if (row == (bottom = screen->bot_marg) - amount) {
+***************
+*** 218,229 ****
+--- 218,234 ----
+      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,247 ****
+       }
+       refreshheight = 0;
+      } else {
+!      ScrollSelection(screen, -(amount));
+       if (amount == i) {
+           ClearScreen(screen);
+           screen->cursor_busy -= 1;
+--- 246,252 ----
+       }
+       refreshheight = 0;
+      } else {
+!      ScrollSelection(screen, -(amount), False);
+       if (amount == i) {
+           ClearScreen(screen);
+           screen->cursor_busy -= 1;
+***************
+*** 328,339 ****
+--- 333,349 ----
+      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,410 ****
+      int scrolltop;
+      int scrollheight;
+  
+!     if (screen->cur_row < screen->top_marg ||
+!      screen->cur_row > screen->bot_marg)
+       return;
+      if (screen->cursor_state)
+       HideCursor();
+      screen->do_wrap = 0;
+      if (n > (i = screen->bot_marg - screen->cur_row + 1))
+       n = i;
+--- 410,426 ----
+      int scrolltop;
+      int scrollheight;
+  
+!     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,467 ****
+      int scrolltop;
+      int scrollheight;
+  
+!     if (screen->cur_row < screen->top_marg ||
+!      screen->cur_row > screen->bot_marg)
+       return;
+      if (screen->cursor_state)
+       HideCursor();
+      screen->do_wrap = 0;
+      if (n > (i = screen->bot_marg - screen->cur_row + 1))
+       n = i;
+--- 473,489 ----
+      int scrolltop;
+      int scrollheight;
+  
+!     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,542 ****
+  void
+  InsertChar(TScreen * screen, int n)
+  {
+!     register int width;
+  
+      if (screen->cursor_state)
+       HideCursor();
+      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 (!AddToRefresh(screen)) {
+           int col = screen->max_col + 1 - n;
+           if (screen->scroll_amt)
+--- 550,572 ----
+  void
+  InsertChar(TScreen * screen, int n)
+  {
+!     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 (row <= screen->max_row) {
+       if (!AddToRefresh(screen)) {
+           int col = screen->max_col + 1 - n;
+           if (screen->scroll_amt)
+***************
+*** 557,568 ****
+                                    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));
+       }
+      }
+      /* adjust screen->buf */
+--- 587,597 ----
+                                    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));
+       }
+      }
+      /* adjust screen->buf */
+***************
+*** 576,581 ****
+--- 605,611 ----
+  DeleteChar(TScreen * screen, int n)
+  {
+      int width;
++     int row = screen->cur_row - screen->topline;
+  
+      if (screen->cursor_state)
+       HideCursor();
+***************
+*** 583,589 ****
+      if (n > (width = screen->max_col + 1 - screen->cur_col))
+       n = width;
+  
+!     if (screen->cur_row - screen->topline <= screen->max_row) {
+       if (!AddToRefresh(screen)) {
+           int col = screen->max_col + 1 - n;
+           if (screen->scroll_amt)
+--- 613,626 ----
+      if (n > (width = screen->max_col + 1 - screen->cur_col))
+       n = width;
+  
+!     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,609 ****
+                                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));
+       }
+      }
+      /* adjust screen->buf */
+--- 635,645 ----
+                                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));
+       }
+      }
+      /* adjust screen->buf */
+***************
+*** 685,690 ****
+--- 721,736 ----
+      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,756 ****
+       if (!AddToRefresh(screen)) {
+           if (screen->scroll_amt)
+               FlushScroll(screen);
+!          ClearCurBackground(
+!                                screen,
+!                                CursorY(screen, row),
+!                                CurCursorX(screen, row, col),
+!                                FontHeight(screen),
+!                                len * CurFontWidth(screen, row));
+       }
+      }
+  
+--- 791,801 ----
+       if (!AddToRefresh(screen)) {
+           if (screen->scroll_amt)
+               FlushScroll(screen);
+!          ClearCurBackground(screen,
+!                             CursorY(screen, row),
+!                             CurCursorX(screen, row, col),
+!                             FontHeight(screen),
+!                             len * CurFontWidth(screen, row));
+       }
+      }
+  
+***************
+*** 827,832 ****
+--- 872,879 ----
+  
+      if (screen->cursor_state)
+       HideCursor();
++ 
++     ScrnDisownSelection(screen);
+      screen->do_wrap = 0;
+      if ((top = -screen->topline) <= screen->max_row) {
+       if (screen->scroll_amt)
+***************
+*** 1068,1077 ****
+      XExposeEvent *reply = (XExposeEvent *) event;
+  
+  #ifndef NO_ACTIVE_ICON
+!     if (reply->window == screen->iconVwin.window)
+!      screen->whichVwin = &screen->iconVwin;
+!     else
+!      screen->whichVwin = &screen->fullVwin;
+  #endif /* NO_ACTIVE_ICON */
+  
+      /* if not doing CopyArea or if this is a GraphicsExpose, don't translate */
+--- 1115,1127 ----
+      XExposeEvent *reply = (XExposeEvent *) event;
+  
+  #ifndef NO_ACTIVE_ICON
+!     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,1832 ****
+  
+               /*
+                * If we're reading UTF-8 from the client, we may have a
+!               * line-drawing character.  Translate it back to our box-code.
+                */
+               if_OPT_WIDE_CHARS(screen, {
+!                  ch = ucs2dec(ch | (text2[last] << 8));
+               });
+               /*
+!               * A value less than 32 has to be one of our box-codes.
+                */
+!              if (ch > 0 && ch < 32) {
+                   /* line drawing character time */
+                   if (last > first) {
+                       xtermXftDrawString(screen, flags,
+--- 1868,1892 ----
+  
+               /*
+                * If we're reading UTF-8 from the client, we may have a
+!               * 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, {
+!                  int full = (ch | (text2[last] << 8));
+!                  int part = ucs2dec(full);
+!                  if (xtermIsDecGraphic(part) &&
+!                      (xtermIsLineDrawing(part)
+!                       || xtermXftMissing(font, full)))
+!                      ch = part;
+!                  else
+!                      ch = full;
+               });
+               /*
+!               * If we have one of our box-codes, draw it directly.
+                */
+!              if (xtermIsDecGraphic(ch)) {
+                   /* line drawing character time */
+                   if (last > first) {
+                       xtermXftDrawString(screen, flags,
+***************
+*** 1879,1891 ****
+       * 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.
+       */
+!     if (!(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);
+  
+  #define GC_PAIRS(a,b) \
+       if (gc == a) fillGC = b; \
+--- 1939,1952 ----
+       * 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 (!IsIcon(screen) && !(flags & CHARBYCHAR) && screen->fnt_prop) {
+       int adj, width;
+       GC fillGC = gc;         /* might be cursorGC */
+       XFontStruct *fs = ((flags & BOLDATTR(screen))
+!                         ? BoldFont(screen)
+!                         : NormalFont(screen));
+  
+  #define GC_PAIRS(a,b) \
+       if (gc == a) fillGC = b; \
+***************
+*** 1920,1938 ****
+      }
+  #if OPT_BOX_CHARS
+      /* If the font is incomplete, draw some substitutions */
+!     if (!(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);
+       Cardinal last, first = 0;
+       for (last = 0; last < len; last++) {
+           unsigned ch = text[last];
+!          Boolean isMissing;
+  #if OPT_WIDE_CHARS
+           if (text2 != 0)
+               ch |= (text2[last] << 8);
+--- 1981,2000 ----
+      }
+  #if OPT_BOX_CHARS
+      /* If the font is incomplete, draw some substitutions */
+!     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)
+!                           ? BoldFont(screen)
+!                           : NormalFont(screen));
+       Cardinal last, first = 0;
+       for (last = 0; last < len; last++) {
+           unsigned ch = text[last];
+!          Bool isMissing;
+  #if OPT_WIDE_CHARS
+           if (text2 != 0)
+               ch |= (text2[last] << 8);
+***************
+*** 1990,2003 ****
+      y += FontAscent(screen);
+  
+  #if OPT_WIDE_CHARS
+!     if (screen->wide_chars) {
+       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));
+       unsigned char *endtext = text + len;
+       if (slen < len) {
+           slen = (len + 1) * 2;
+--- 2052,2066 ----
+      y += FontAscent(screen);
+  
+  #if OPT_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 = (!IsIcon(screen)
+!                      && ((on_wide || iswide(ch) != 0)
+!                          && (screen->fnt_dwd != NULL)));
+       unsigned char *endtext = text + len;
+       if (slen < len) {
+           slen = (len + 1) * 2;
+***************
+*** 2006,2011 ****
+--- 2069,2100 ----
+       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,2047 ****
+           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;
+           } else {
+               XSetFont(screen->display, gc, screen->fnt_dwd->fid);
+!              ascent_adjust = screen->fnt_dwd->ascent - screen->fnt_norm->ascent;
+           }
+           /* fix ascent */
+       } else if ((flags & BOLDATTR(screen)) != 0
+!                 && screen->fnt_bold->fid) {
+!          XSetFont(screen->display, gc, screen->fnt_bold->fid);
+       } else {
+!          XSetFont(screen->display, gc, screen->fnt_norm->fid);
+       }
+  
+       if (flags & NOBACKGROUND)
+--- 2120,2138 ----
+           if ((flags & BOLDATTR(screen)) != 0
+               && screen->fnt_dwdb->fid) {
+               XSetFont(screen->display, gc, screen->fnt_dwdb->fid);
+!              ascent_adjust = (screen->fnt_dwdb->ascent
+!                               - NormalFont(screen)->ascent);
+           } else {
+               XSetFont(screen->display, gc, screen->fnt_dwd->fid);
+!              ascent_adjust = (screen->fnt_dwd->ascent
+!                               - NormalFont(screen)->ascent);
+           }
+           /* fix ascent */
+       } else if ((flags & BOLDATTR(screen)) != 0
+!                 && BoldFont(screen)->fid) {
+!          XSetFont(screen->display, gc, BoldFont(screen)->fid);
+       } else {
+!          XSetFont(screen->display, gc, NormalFont(screen)->fid);
+       }
+  
+       if (flags & NOBACKGROUND)
+***************
+*** 2245,2273 ****
+   * 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));
+  
+      XClearArea(screen->display, VWindow(screen),
+              left, top, width, height, FALSE);
+  
+!     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
+   */
+--- 2336,2360 ----
+   * 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));
+  
+      XClearArea(screen->display, VWindow(screen),
+              left, top, width, height, FALSE);
+  
+!     XSetWindowBackground(screen->display,
+!                       VWindow(screen),
+!                       getXtermBackground(term->flags, MAXCOLORS));
+  }
+  #endif /* OPT_ISO_COLORS */
+  
+  /*
+   * Returns a single 8/16-bit number for the given cell
+   */
+***************
+*** 2281,2302 ****
+      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
+   */
+--- 2368,2373 ----
+***************
+*** 2313,2318 ****
+--- 2384,2406 ----
+      });
+  }
+  
++ #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,2452 ****
+          visibleKeyboardType(term->keyboard.type)));
+      if (set) {
+       if (wasSet) {
+!          fprintf(stderr, "Conflicting keyboard type option (%d/%d)\n",
+                   term->keyboard.type, type);
+       }
+       term->keyboard.type = type;
+--- 2534,2540 ----
+          visibleKeyboardType(term->keyboard.type)));
+      if (set) {
+       if (wasSet) {
+!          fprintf(stderr, "Conflicting keyboard type option (%u/%u)\n",
+                   term->keyboard.type, type);
+       }
+       term->keyboard.type = type;
+Index: xc/programs/xterm/uxterm
+diff -c 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 ****
+  #!/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 $
+  # wrapper script to setup xterm with UTF-8 locale
+  
+  program=xterm
+  found=no
+  
+  # Check for -version and -help options, to provide a simple return without
+--- 1,10 ----
+  #!/bin/sh
+! # $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,56 ****
+  # 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}
+       else
+!              LC_CTYPE=en_US.UTF-8
+!              export LC_CTYPE
+       fi
+  fi
+  
+--- 47,67 ----
+  # user's shell does not reset unknown locale specifiers, but not all shells do.
+  if test $found != yes ; then
+       if test -n "$value" ; then
+!              value=`echo ${value} |sed -e 's/[.@].*//'`.UTF-8
+       else
+!              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 -c 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 ****
+! /* $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 $ */
+  
+  /*
+   * These definitions are used to build the string that's printed in response to
+--- 1,5 ----
+! /* $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,13 ****
+   * 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
+  
+  #ifndef __vendorversion__
+  #define __vendorversion__ "XTerm"
+--- 7,13 ----
+   * 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   197
+  
+  #ifndef __vendorversion__
+  #define __vendorversion__ "XTerm"
+Index: xc/programs/xterm/xstrings.c
+diff -c 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 ****
+! /* $XFree86: xc/programs/xterm/xstrings.c,v 1.7 2003/11/13 01:16:38 dickey Exp $ */
+  
+  /************************************************************
+  
+! Copyright 2000-2002,2003 by Thomas E. Dickey
+  
+                          All Rights Reserved
+  
+--- 1,10 ----
+! /* $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-2003,2004 by Thomas E. Dickey
+  
+                          All Rights Reserved
+  
+***************
+*** 62,68 ****
+       return 1;
+  
+      while (len-- != 0) {
+!      if (toupper(CharOf(*s1)) != toupper(CharOf(*s2)))
+           return 1;
+       s1++, s2++;
+      }
+--- 64,72 ----
+       return 1;
+  
+      while (len-- != 0) {
+!      int c1 = toupper(CharOf(*s1));
+!      int c2 = toupper(CharOf(*s2));
+!      if (c1 != c2)
+           return 1;
+       s1++, s2++;
+      }
+Index: xc/programs/xterm/xterm.h
+diff -c 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 ****
+! /* $XTermId: xterm.h,v 1.291 2004/07/13 00:41:30 tom Exp $ */
+  
+! /* $XFree86: xc/programs/xterm/xterm.h,v 3.102 2004/07/13 00:41:30 dickey Exp $ */
+  
+  /************************************************************
+  
+--- 1,6 ----
+! /* $XTermId: xterm.h,v 1.306 2004/12/01 01:27:47 tom Exp $ */
+  
+! /* $XFree86: xc/programs/xterm/xterm.h,v 3.103 2004/12/01 01:27:47 dickey Exp $ */
+  
+  /************************************************************
+  
+***************
+*** 260,266 ****
+  #include <proto.h>
+  #include <ptyx.h>
+  
+! #if (XtSpecificationRelease >= 6) && !defined(NO_XPOLL_H)
+  #include <X11/Xpoll.h>
+  #define USE_XPOLL_H 1
+  #else
+--- 260,266 ----
+  #include <proto.h>
+  #include <ptyx.h>
+  
+! #if (XtSpecificationRelease >= 6) && !defined(NO_XPOLL_H) && !defined(sun)
+  #include <X11/Xpoll.h>
+  #define USE_XPOLL_H 1
+  #else
+***************
+*** 405,410 ****
+--- 405,411 ----
+  #define XtNtekInhibit                "tekInhibit"
+  #define XtNtekSmall          "tekSmall"
+  #define XtNtekStartup                "tekStartup"
++ #define XtNtoolBar           "toolBar"
+  #define XtNtiXtraScroll              "tiXtraScroll"
+  #define XtNtiteInhibit               "titeInhibit"
+  #define XtNtrimSelection     "trimSelection"
+***************
+*** 520,525 ****
+--- 521,527 ----
+  #define XtCTiXtraScroll              "TiXtraScroll"
+  #define XtCTiteInhibit               "TiteInhibit"
+  #define XtCTrimSelection     "TrimSelection"
++ #define XtCToolBar           "ToolBar"
+  #define XtCUnderLine         "UnderLine"
+  #define XtCUtf8                      "Utf8"
+  #define XtCVT100Graphics     "VT100Graphics"
+***************
+*** 588,594 ****
+  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 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;
+--- 590,596 ----
+  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, 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,681 ****
+  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 /**/
+--- 674,679 ----
+***************
+*** 814,822 ****
+--- 812,824 ----
+  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,842 ****
+--- 839,867 ----
+  #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,988 ****
+  #define curXtermChrSet(row) 0
+  #endif
+  
+- #if OPT_WIDE_CHARS
+  extern unsigned getXtermCell (TScreen *screen, int row, int col);
+  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
+--- 999,1011 ----
+  #define curXtermChrSet(row) 0
+  #endif
+  
+  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);
+  #endif
+  
+  #if OPT_XMC_GLITCH
+Index: xc/programs/xterm/xterm.log.html
+diff -c 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,27 ****
+   * 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 $
+    -->
+  <HTML>
+  <HEAD>
+--- 20,27 ----
+   * 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.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,51 ****
+--- 46,52 ----
+  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,250 ****
+--- 246,342 ----
+  <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,643 ****
+           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 
+           the UTF-8 mode and Xft (TrueType) support.
+  
+       <li>add logic to handle switching UTF-8 mode on/off.  It worked if
+--- 729,735 ----
+           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
+           the UTF-8 mode and Xft (TrueType) support.
+  
+       <li>add logic to handle switching UTF-8 mode on/off.  It worked if
+***************
+*** 823,829 ****
+         </ul>
+  
+       <li>make height of TrueType fonts match ascent+descent (patch by
+!          Keith Packard). 
+  
+       <li>correct configure-script check for imake $CFLAGS, which did not
+           check properly if imake was not available.
+--- 915,921 ----
+         </ul>
+  
+       <li>make height of TrueType fonts match ascent+descent (patch by
+!          Keith Packard).
+  
+       <li>correct configure-script check for imake $CFLAGS, which did not
+           check properly if imake was not available.
+***************
+*** 930,939 ****
+       <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> 
+           works (report by Henning Makholm).
+  
+!      <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
+--- 1022,1031 ----
+       <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>
+           works (report by Henning Makholm).
+  
+!      <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,1049 ****
+           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). 
+  
+       <li>changed class of <code>veryBoldColors</code> to
+!          <code>VeryBoldColors</code>, since 
+           <code>ColorMode</code> is associated with boolean resources.
+  
+       <li>add option <code>-k8</code> and resource
+--- 1132,1141 ----
+           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).
+  
+       <li>changed class of <code>veryBoldColors</code> to
+!          <code>VeryBoldColors</code>, since
+           <code>ColorMode</code> is associated with boolean resources.
+  
+       <li>add option <code>-k8</code> and resource
+***************
+*** 1074,1080 ****
+       <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 
+           <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.
+--- 1166,1172 ----
+       <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
+           <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,1089 ****
+  <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. 
+           Use the next lower window (report by Karl Rudolf Bauchspiess).
+  
+       <li>add a resource setting to control whether the extended window
+--- 1175,1181 ----
+  <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.
+           Use the next lower window (report by Karl Rudolf Bauchspiess).
+  
+       <li>add a resource setting to control whether the extended window
+***************
+*** 1117,1123 ****
+  
+       <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. 
+         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>.
+--- 1209,1215 ----
+  
+       <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.
+         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,1259 ****
+       <li>add <code>-into</code> option, for embedding xterm in a Tcl/Tk
+         application (patch by George Peter Staplin &lt;georgeps@xmission.com&gt;).
+  
+!      <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).
+--- 1345,1351 ----
+       <li>add <code>-into</code> option, for embedding xterm in a Tcl/Tk
+         application (patch by George Peter Staplin &lt;georgeps@xmission.com&gt;).
+  
+!      <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,1526 ****
+         Nelson Beebe).
+  
+       <li>modify xterm manual page and minstall.sh to allow imake rules
+!        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,
+--- 1612,1618 ----
+         Nelson Beebe).
+  
+       <li>modify xterm manual page and minstall.sh to allow imake rules
+!        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 -c 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 ****
+! .\" $XTermId: xterm.man,v 1.279 2004/07/28 00:53:26 tom Exp $
+  .\" $Xorg: xterm.man,v 1.4 2001/02/09 02:06:03 xorgcvs Exp $
+  .\"
+  .\"
+--- 1,4 ----
+! .\" $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,61 ****
+  .\" 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 $
+  .\"
+  .\" updated by Thomas E. Dickey for XFree86, July 1996 - July 2004.
+  .TH XTERM 1 __vendorversion__
+--- 55,61 ----
+  .\" other dealings in this Software without prior written authorization
+  .\" from The Open Group.
+  .\"
+! .\" $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,211 ****
+  .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
+  .RB ` + '
+  instead of a
+  .RB ` - ',
+! 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
+--- 201,212 ----
+  .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
+  .RB ` + '
+  instead of a
+  .RB ` - ',
+! 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,804 ****
+  .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.
+  .TP 8
+  .B -u8
+  This option sets the \fButf8\fP resource.
+--- 798,810 ----
+  .BI -tn " name"
+  This option specifies the name of the terminal type to be set in the TERM
+  environment variable.
+! 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,1128 ****
+  Allowable keywords include:
+  brk,
+  dsusp,
+! eof, 
+  eol,
+  eol2,
+  erase,
+--- 1128,1134 ----
+  Allowable keywords include:
+  brk,
+  dsusp,
+! eof,
+  eol,
+  eol2,
+  erase,
+***************
+*** 1551,1556 ****
+--- 1557,1563 ----
+  .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,1686 ****
+  .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 default is ``false.''
+  .TP 8
+  .B "foreground (\fPclass\fB Foreground)"
+--- 1686,1697 ----
+  .B "forceBoxChars (\fPclass\fB ForceBoxChars)"
+  Specifies whether \fIxterm\fP should assume the normal and bold fonts
+  have VT100 line-drawing characters.
+! 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,1809 ****
+  This is realized
+  by always enabling UTF-8 mode and invoking \fIluit\fR in non-UTF-8
+  locales.
+! .TP 4
+  .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
+  \fIxterm\fR will use conventional 8bit mode
+  or UTF-8 mode according to \fButf8\fR resource or \fB-u8\fP option.
+  .RE
+--- 1806,1827 ----
+  This is realized
+  by always enabling UTF-8 mode and invoking \fIluit\fR in non-UTF-8
+  locales.
+! .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
+! .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,2097 ****
+--- 2106,2124 ----
+  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,2258 ****
+--- 2280,2288 ----
+  .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,2524 ****
+  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.
+  Double-clicking selects by words.
+  Triple-clicking
+  selects by lines.
+--- 2547,2553 ----
+  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.
+  Double-clicking selects by words.
+  Triple-clicking
+  selects by lines.
+***************
+*** 2560,2567 ****
+  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.
+  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.
+  .
+--- 2589,2596 ----
+  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 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,2749 ****
+  .TP
+  Quit (quit)
+  Stop processing X events except to support the \fB-hold\fP option,
+! and then send a SIGHUP signal to the 
+  the process group of the process running under
+  .I xterm
+  (usually the shell).
+--- 2772,2778 ----
+  .TP
+  Quit (quit)
+  Stop processing X events except to support the \fB-hold\fP option,
+! and then send a SIGHUP signal to the
+  the process group of the process running under
+  .I xterm
+  (usually the shell).
+***************
+*** 2763,2769 ****
+  .TP
+  Enable Scrollbar (scrollbar)
+  Enable (or disable) the scrollbar.
+! This corresponds to the 
+  .B -sb
+  option and the
+  .B scrollBar
+--- 2792,2798 ----
+  .TP
+  Enable Scrollbar (scrollbar)
+  Enable (or disable) the scrollbar.
+! This corresponds to the
+  .B -sb
+  option and the
+  .B scrollBar
+***************
+*** 2772,2778 ****
+  .TP
+  Enable Jump Scroll (jumpscroll)
+  Enable (or disable) jump scrolling.
+! This corresponds to the 
+  .B -j
+  option and the
+  .B jumpScroll
+--- 2801,2807 ----
+  .TP
+  Enable Jump Scroll (jumpscroll)
+  Enable (or disable) jump scrolling.
+! This corresponds to the
+  .B -j
+  option and the
+  .B jumpScroll
+***************
+*** 2781,2787 ****
+  .TP
+  Enable Reverse Video (reversevideo)
+  Enable (or disable) reverse-video.
+! This corresponds to the 
+  .B -rv
+  option and the
+  .B reverseVideo
+--- 2810,2816 ----
+  .TP
+  Enable Reverse Video (reversevideo)
+  Enable (or disable) reverse-video.
+! This corresponds to the
+  .B -rv
+  option and the
+  .B reverseVideo
+***************
+*** 2790,2796 ****
+  .TP
+  Enable Auto Wraparound (autowrap)
+  Enable (or disable) auto-wraparound.
+! This corresponds to the 
+  .B -aw
+  option and the
+  .B autoWrap
+--- 2819,2825 ----
+  .TP
+  Enable Auto Wraparound (autowrap)
+  Enable (or disable) auto-wraparound.
+! This corresponds to the
+  .B -aw
+  option and the
+  .B autoWrap
+***************
+*** 2799,2805 ****
+  .TP
+  Enable Reverse Wraparound (reversewrap)
+  Enable (or disable) reverse wraparound.
+! This corresponds to the 
+  .B -rw
+  option and the
+  .B reverseWrap
+--- 2828,2834 ----
+  .TP
+  Enable Reverse Wraparound (reversewrap)
+  Enable (or disable) reverse wraparound.
+! This corresponds to the
+  .B -rw
+  option and the
+  .B reverseWrap
+***************
+*** 2831,2837 ****
+  .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 
+  .B -sk
+  option and the
+  .B scrollKey
+--- 2860,2866 ----
+  .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
+  .B -sk
+  option and the
+  .B scrollKey
+***************
+*** 2840,2846 ****
+  .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 
+  .B -si
+  option and the
+  .B scrollTtyOutput
+--- 2869,2875 ----
+  .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
+  .B -si
+  option and the
+  .B scrollTtyOutput
+***************
+*** 2849,2855 ****
+  .TP
+  Allow 80/132 Column Switching (allow132)
+  Enable (or disable) switching between 80 and 132 columns.
+! This corresponds to the 
+  .B -132
+  option and the
+  .B c132
+--- 2878,2884 ----
+  .TP
+  Allow 80/132 Column Switching (allow132)
+  Enable (or disable) switching between 80 and 132 columns.
+! This corresponds to the
+  .B -132
+  option and the
+  .B c132
+***************
+*** 2858,2864 ****
+  .TP
+  Enable Curses Emulation (cursesemul)
+  Enable (or disable) a workaround for the so-called "curses bug".
+! This corresponds to the 
+  .B -cu
+  option and the
+  .B curses
+--- 2887,2893 ----
+  .TP
+  Enable Curses Emulation (cursesemul)
+  Enable (or disable) a workaround for the so-called "curses bug".
+! This corresponds to the
+  .B -cu
+  option and the
+  .B curses
+***************
+*** 2867,2873 ****
+  .TP
+  Enable Visual Bell (visualbell)
+  Enable (or disable) visible bell (i.e., flashing) instead of an audible bell.
+! This corresponds to the 
+  .B -vb
+  option and the
+  .B visualBell
+--- 2896,2902 ----
+  .TP
+  Enable Visual Bell (visualbell)
+  Enable (or disable) visible bell (i.e., flashing) instead of an audible bell.
+! This corresponds to the
+  .B -vb
+  option and the
+  .B visualBell
+***************
+*** 2876,2882 ****
+  .TP
+  Enable Pop on Bell (poponbell)
+  Enable (or disable) raising of the window when Control-G is received.
+! This corresponds to the 
+  .B -pop
+  option and the
+  .B popOnBell
+--- 2905,2911 ----
+  .TP
+  Enable Pop on Bell (poponbell)
+  Enable (or disable) raising of the window when Control-G is received.
+! This corresponds to the
+  .B -pop
+  option and the
+  .B popOnBell
+***************
+*** 2885,2891 ****
+  .TP
+  Enable Margin Bell (marginbell)
+  Enable (or disable) a bell when the user types near the right margin.
+! This corresponds to the 
+  .B -mb
+  option and the
+  .B marginBell
+--- 2914,2920 ----
+  .TP
+  Enable Margin Bell (marginbell)
+  Enable (or disable) a bell when the user types near the right margin.
+! This corresponds to the
+  .B -mb
+  option and the
+  .B marginBell
+***************
+*** 2894,2900 ****
+  .TP
+  Enable Blinking Cursor (cursorblink)
+  Enable (or disable) the blinking-cursor feature.
+! This corresponds to the 
+  .B -bc
+  option and the
+  .B cursorBlink
+--- 2923,2929 ----
+  .TP
+  Enable Blinking Cursor (cursorblink)
+  Enable (or disable) the blinking-cursor feature.
+! This corresponds to the
+  .B -bc
+  option and the
+  .B cursorBlink
+***************
+*** 2908,2914 ****
+  .TP
+  Enable Alternate Screen Switching (titeInhibit)
+  Enable (or disable) switching between the normal and alternate screens.
+! This corresponds to the 
+  .B titeInhibit
+  resource.
+  There is no corresponding command-line option.
+--- 2937,2943 ----
+  .TP
+  Enable Alternate Screen Switching (titeInhibit)
+  Enable (or disable) switching between the normal and alternate screens.
+! This corresponds to the
+  .B titeInhibit
+  resource.
+  There is no corresponding command-line option.
+***************
+*** 2916,2922 ****
+  .TP
+  Enable Active Icon (activeicon)
+  Enable (or disable) the active-icon feature.
+! This corresponds to the 
+  .B -ai
+  option and the
+  .B activeIcon
+--- 2945,2951 ----
+  .TP
+  Enable Active Icon (activeicon)
+  Enable (or disable) the active-icon feature.
+! This corresponds to the
+  .B -ai
+  option and the
+  .B activeIcon
+***************
+*** 3040,3046 ****
+  Font escape sequence (see the document \fIXterm Control Sequences\fP).
+  .TP
+  Selection (fontsel)
+! This allows you to set the font specified 
+  the current selection as a font name (if the PRIMARY selection is owned).
+  .RE
+  .PP
+--- 3069,3075 ----
+  Font escape sequence (see the document \fIXterm Control Sequences\fP).
+  .TP
+  Selection (fontsel)
+! This allows you to set the font specified
+  the current selection as a font name (if the PRIMARY selection is owned).
+  .RE
+  .PP
+***************
+*** 3293,3303 ****
+  .
+  .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.
+  The following
+! actions are provided for using within the \fIvt100\fP or \fItek4014\fP
+  \fBtranslations\fP resources:
+  .TP 8
+  .B "allow-send-events(\fIon/off/toggle\fP)"
+--- 3322,3334 ----
+  .
+  .SH ACTIONS
+  It is possible to rebind keys (or sequences of keys) to arbitrary strings
+! 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 use within the \fIvt100\fP or \fItek4014\fP
+  \fBtranslations\fP resources:
+  .TP 8
+  .B "allow-send-events(\fIon/off/toggle\fP)"
+***************
+*** 3465,3472 ****
+  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.
+  .TP 8
+  .B "secure()"
+  This action toggles the \fISecure Keyboard\fP mode described in the
+--- 3496,3503 ----
+  mouse reporting is enabled.
+  .TP 8
+  .B "scroll-forw(\fIcount\fP [,\fIunits\fP [,\fImouse\fP] ])"
+! 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,3494 ****
+  .TP 8
+  .B "select-extend()"
+  This action tracks the pointer and extends the selection.
+! It
+! should only be bound to Motion events.
+  .TP 8
+  .B "select-set()"
+  This action stores text that corresponds to the current selection,
+--- 3518,3524 ----
+  .TP 8
+  .B "select-extend()"
+  This action tracks the pointer and extends the selection.
+! It should only be bound to Motion events.
+  .TP 8
+  .B "select-set()"
+  This action stores text that corresponds to the current selection,
+***************
+*** 3643,3648 ****
+--- 3673,3683 ----
+  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,3803 ****
+         @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)
+  .fi
+  .ft P
+  .sp
+--- 3832,3838 ----
+         @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>:ignore()
+  .fi
+  .ft P
+  .sp
+***************
+*** 3830,3835 ****
+--- 3865,3896 ----
+  .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 -c 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 ****
+  /*
+!  * $XFree86: xc/programs/xterm/xterm_io.h,v 1.15 2004/04/03 22:26:26 dawes Exp $
+   */
+  
+  /*
+--- 1,5 ----
+  /*
+!  * $XFree86: xc/programs/xterm/xterm_io.h,v 1.16 2004/12/01 01:27:47 dickey Exp $
+   */
+  
+  /*
+***************
+*** 58,64 ****
+  #define USE_SYSV_TERMIO
+  #endif
+  
+! #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
+  #ifndef USE_POSIX_TERMIOS
+  #define USE_POSIX_TERMIOS
+  #endif
+--- 58,64 ----
+  #define USE_SYSV_TERMIO
+  #endif
+  
+! #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 -c 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 ****
+! /* $XTermId: xtermcfg.hin,v 1.126 2004/05/26 01:19:55 tom Exp $ */
+  
+  /*
+!  * $XFree86: xc/programs/xterm/xtermcfg.hin,v 3.51 2004/05/26 01:19:55 dickey Exp $
+   */
+  
+  /************************************************************
+--- 1,7 ----
+! /* $XTermId: xtermcfg.hin,v 1.128 2004/12/01 01:27:47 tom Exp $ */
+  
+  /*
+!  * $XFree86: xc/programs/xterm/xtermcfg.hin,v 3.52 2004/12/01 01:27:47 dickey Exp $
+   */
+  
+  /************************************************************
+***************
+*** 94,99 ****
+--- 94,100 ----
+  #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 -c 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 ****
+! -- $XFree86: xc/programs/xterm/unicode/README,v 1.4 2000/11/01 01:12:47 dawes Exp $
+  -- Thomas E. Dickey
+  
+  These are some scripts and datafiles used for generating tables used in the
+--- 1,5 ----
+! -- $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,15 ****
+  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
+  
+! It is a large file (~460kb), so it is not included in this distribution.
+  
+  convmap.pl is used to generate ../keysym2ucs.c, e.g.,
+  
+--- 8,16 ----
+  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.txt
+  
+! 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 -c 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 ****
+  #!/bin/sh
+! cat precompose.c.head
+! cut UnicodeData-Latest.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
+--- 1,7 ----
+  #!/bin/sh
+! # $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 -c 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,13 ****
+   * DO NOT EDIT BY HAND! This is generated by the script
+   * unicode/make-precompose.sh
+   */
+  
+  #include <precompose.h>
+  
+! struct {
+    int replacement;
+    int base;
+    int comb; 
+--- 4,15 ----
+   * DO NOT EDIT BY HAND! This is generated by the script
+   * unicode/make-precompose.sh
+   */
++ /* @XTermId@ */
++ /* @XFree86@ */
+  
+  #include <precompose.h>
+  
+! static struct {
+    int replacement;
+    int base;
+    int comb; 
+Index: xc/util/memleak/getretmips.c
+diff -c 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,195 ****
+       }
+       ra = (unsigned long *) sp[rc->raOffset>>2];
+       sp += rc->spAdjust >> 2;
+-      *results++ = ((unsigned long) ra) - 8;
+       if (ra[-2] == mainCall)
+       {
+           *results++ = 0;
+           break;
+       }
+       max--;
+      }
+  }
+--- 184,198 ----
+       }
+       ra = (unsigned long *) sp[rc->raOffset>>2];
+       sp += rc->spAdjust >> 2;
+       if (ra[-2] == mainCall)
+       {
+           *results++ = 0;
+           break;
+       }
++      else
++      {
++          *results++ = ((unsigned long) ra) - 8;
++      }
+       max--;
+      }
+  }
This page took 3.736806 seconds and 4 git commands to generate.