http://packetstormsecurity.org/UNIX/admin/xscreensaver-4.05.tar.gz
authorZygo Blaxell <zblaxell@hungrycats.org>
Mon, 2 Mar 2009 05:42:56 +0000 (00:42 -0500)
committerZygo Blaxell <zblaxell@faye.furryterror.org>
Fri, 8 Feb 2013 17:53:53 +0000 (12:53 -0500)
-rw-r--r-- 1 zblaxell zblaxell 2914308 Jun 12  2002 xscreensaver-4.05.tar.gz
90a29ee99c7b36baf01aa152f2ab2ac9392cb3f1  xscreensaver-4.05.tar.gz

41 files changed:
README
configure
configure.in
driver/Makefile.in
driver/XScreenSaver.ad.in
driver/XScreenSaver_ad.h
driver/demo-Gtk.c
driver/xscreensaver-command.man
driver/xscreensaver-demo.man
driver/xscreensaver-getimage-file.man
driver/xscreensaver-getimage-video.man
driver/xscreensaver-getimage.man
driver/xscreensaver.kss [deleted file]
driver/xscreensaver.kss.in [new file with mode: 0755]
driver/xscreensaver.man
hacks/config/README
hacks/config/endgame.xml [new file with mode: 0644]
hacks/config/xmatrix.xml
hacks/glx/Makefile.in
hacks/glx/chessmodels.c [new file with mode: 0644]
hacks/glx/chessmodels.h [new file with mode: 0644]
hacks/glx/cubenetic.c
hacks/glx/endgame.c [new file with mode: 0644]
hacks/glx/endgame.man [new file with mode: 0644]
hacks/glx/extrusion-helix2.c
hacks/glx/extrusion-helix3.c
hacks/glx/extrusion-helix4.c
hacks/glx/extrusion-joinoffset.c
hacks/glx/extrusion-screw.c
hacks/glx/extrusion-taper.c
hacks/glx/extrusion-twistoid.c
hacks/glx/gltext.c
hacks/glx/lavalite.c
hacks/glx/molecule.c
hacks/glx/spheremonics.c
po/Makefile.in.in
po/POTFILES.in
po/es.po
utils/version.h
xscreensaver.lsm
xscreensaver.spec

diff --git a/README b/README
index 811c4a3196af60e9eed21ef6719c31c82a8bb5d4..ae7f2be16444855b7ebf80ab76be077d7dbdb5fd 100644 (file)
--- a/README
+++ b/README
@@ -70,6 +70,10 @@ the XScreenSaver FAQ about that: http://www.jwz.org/xscreensaver/faq.html
 
                               ============
 
+Changes since 4.04:   * More `configure' tweaks to try and get things working
+                        on systems that both Gtk 1.x and 2.x installed.
+                      * New hack, `endgame'.
+                      * Minor updates to `gltext'.
 Changes since 4.03:   * Support for GTK 2.x / GNOME 2.x.
                       * The `configure' script will now use `pkg-config' if
                         you have it, in preference to `gtk-config', etc.
@@ -86,7 +90,7 @@ Changes since 4.03:   * Support for GTK 2.x / GNOME 2.x.
                         will close a race condition that could sometimes cause
                         your desktop background to be changed; and also makes
                         it possible for those programs to operate on image
-                        files when running in non-root mode.
+                        files when running in windowed mode.
                       * `webcollage' can now be used in conjunction with
                         `driftnet' to display images snooped from your local
                         ethernet instead of obtained from search engines.
index 8bd583807abb656f95afd558f99179fd27f9fdd2..94dd9a65a282d954ca85c255d316ce0b1fee9e26 100755 (executable)
--- a/configure
+++ b/configure
@@ -12376,6 +12376,8 @@ parse_gtk_version_string() {
 
 
 jurassic_gtk=no
+gtk2_halfassed=no
+
 if test "$with_gtk" = yes; then
   have_gtk=no
 
@@ -12489,6 +12491,10 @@ echo "${ECHO_T}no" >&6
 #define HAVE_GTK2 1
 _ACEOF
 
+    else
+      if test -n "$ac_gtk_version_string" ; then
+        gtk2_halfassed="$ac_gtk_version_string"
+      fi
     fi
 
     if test "$have_gtk" = no; then
@@ -12503,7 +12509,7 @@ _ACEOF
 
       # Now check for Gnome...
       #
-      if test "$have_gtk" = yes; then
+      if test "$have_gtk" = yes -a "$with_gnome" = yes; then
         old_pkgs="$pkgs"
         ok=yes
         pkg_check_version capplet    1.0
@@ -12750,6 +12756,11 @@ echo "${ECHO_T}$ac_cv_gtk_config_libs" >&6
     ac_gtk_config_libs=$ac_cv_gtk_config_libs
 
     # Check for Gnome Capplet support.
+    # Note that this is only needed with Gnome 1.x, not Gnome 2.x.
+    # In a Gnome 2.x world, libcapplet will not exist.
+    # (In fact, this likely won't even be checked, since in a Gnome 2.x
+    # world, we will probably be up in the "$pkg_config" branch instead
+    # of here in the "$gnome_config" branch.)
     #
     if test "$have_gnome" = yes -a "$have_gtk" = yes; then
       gnome_config_libs="gtk capplet gnomeui gdk_pixbuf"
@@ -12818,6 +12829,7 @@ _ACEOF
 
   if test "$have_gtk" = yes -a "$have_gtk2" = no; then
     # check for this function that was not in libcapplet 1.2.
+    # (only needed in Gnome/Gtk 1.x, not Gnome/Gtk 2.x)
 
   ac_save_CPPFLAGS="$CPPFLAGS"
   ac_save_LDFLAGS="$LDFLAGS"
 
   GNOME_DATADIR=""
   if test "$have_gnome" = yes -a "$have_gtk" = yes; then
-    if test -n "$gnome_config"; then
-      GNOME_DATADIR=`$gnome_config --datadir`
+    if test -n "$pkg_config"; then
+      if test "$have_gtk2" = yes; then
+        GNOME_DATADIR=`$pkg_config --variable=prefix gtk+-2.0`
+      else
+        GNOME_DATADIR=`$pkg_config --variable=prefix gtk+`
+      fi
     else
-      #### is this right?
-      GNOME_DATADIR=`$pkg_config --variable=prefix gtk+`
-      GNOME_DATADIR="$GNOME_DATADIR/share"
+      GNOME_DATADIR=`$gtk_config --prefix`
     fi
+    GNOME_DATADIR="$GNOME_DATADIR/share"
   fi
 
   # .desktop files go in different places in Gnome 1.x and Gnome 2.x...
@@ -13094,11 +13109,21 @@ if test "$with_xml" = yes; then
     #
     pkgs=""
     ok="yes"
-    pkg_check_version xml2 1.0
 
-    if test "$ok" = no; then
+    # If we have Gtk 2.x, then *only* XML 2.x will work.
+    # If we have Gtk 1.x, or don't have Gtk at all, then
+    # either XML 1.x or 2.x will work.
+
+    # First check for XML 2.x.
+    #
+    pkg_check_version libxml-2.0 2.4.6
+
+    # If that didn't work (we don't have XML 2.x) and we *don't* have
+    # Gtk 2.x, then check to see if we have XML 1.x
+    #
+    if test "$ok" = no -a "$have_gtk2" = no; then
       ok=yes
-      pkg_check_version xml 1.0
+      pkg_check_version libxml 1.0
     fi
 
     have_xml="$ok"
@@ -13129,7 +13154,7 @@ echo "${ECHO_T}$ac_cv_xml_config_libs" >&6
   else
     #
     # the old way...
-    # run {gnome,gtk}-config based tests.
+    # run {xml2,xml}-config based tests.
     #
 
     for ac_prog in xml2-config xml-config
   # note: $X_LIBS includes $x_libraries
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
-  echo "$as_me:$LINENO: checking for xmlParseChunk in -lxml" >&5
-echo $ECHO_N "checking for xmlParseChunk in -lxml... $ECHO_C" >&6
-if test "${ac_cv_lib_xml_xmlParseChunk+set}" = set; then
+  echo "$as_me:$LINENO: checking for xmlParseChunk in -lc" >&5
+echo $ECHO_N "checking for xmlParseChunk in -lc... $ECHO_C" >&6
+if test "${ac_cv_lib_c_xmlParseChunk+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_check_lib_save_LIBS=$LIBS
-LIBS="-lxml $ac_xml_config_libs $LIBS"
+LIBS="-lc $ac_xml_config_libs $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
 #include "confdefs.h"
@@ -13465,18 +13490,18 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  ac_cv_lib_xml_xmlParseChunk=yes
+  ac_cv_lib_c_xmlParseChunk=yes
 else
   echo "$as_me: failed program was:" >&5
 cat conftest.$ac_ext >&5
-ac_cv_lib_xml_xmlParseChunk=no
+ac_cv_lib_c_xmlParseChunk=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_xml_xmlParseChunk" >&5
-echo "${ECHO_T}$ac_cv_lib_xml_xmlParseChunk" >&6
-if test $ac_cv_lib_xml_xmlParseChunk = yes; then
+echo "$as_me:$LINENO: result: $ac_cv_lib_c_xmlParseChunk" >&5
+echo "${ECHO_T}$ac_cv_lib_c_xmlParseChunk" >&6
+if test $ac_cv_lib_c_xmlParseChunk = yes; then
   have_xml=yes
                     xml_halfassed=no
                     XML_LIBS="$ac_xml_config_libs"
@@ -14491,7 +14516,7 @@ if test "${ac_cv_mesagl_version_string+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 14500 "configure"
+#line 14525 "configure"
 #include "confdefs.h"
 #include <GL/gl.h>
 #ifndef MESA_MAJOR_VERSION
@@ -15365,20 +15390,33 @@ if test "$with_gdk_pixbuf" = yes; then
     #
     pkgs=''
     ok="yes"
-    pkg_check_version gdk-pixbuf-2.0      2.0.0
-    pkg_check_version gdk-pixbuf-xlib-2.0 2.0.0
-    have_gdk_pixbuf="$ok"
-    have_gdk_pixbuf2="$ok"
 
-    if test "$have_gdk_pixbuf2" = no; then
+    # If we have Gtk 2.x, then *only* gdk-pixbuf 2.x will work.
+    # If we have Gtk 1.x, then *only* gdk-pixbuf 1.x will work.
+    # If we don't have Gtk at all, then either will work.
+
+    if test "$have_gtk" = no -o "$have_gtk2" = yes; then
       #
-      # We don't have pixbuf 2.x; check for 1.x.
+      # we don't have Gtk; or we have Gtk 2.x.  Check for pixbuf 2.x.
       #
-      pkgs=''
-      ok="yes"
-      pkg_check_version gdk-pixbuf      0.0
-      pkg_check_version gdk-pixbuf-xlib 0.0
+      pkg_check_version gdk-pixbuf-2.0      2.0.0
+      pkg_check_version gdk-pixbuf-xlib-2.0 2.0.0
       have_gdk_pixbuf="$ok"
+      have_gdk_pixbuf2="$ok"
+    fi
+
+    if test "$have_gtk" = no -o "$have_gtk2" = no; then
+      #
+      # we don't have Gtk; or we have Gtk 1.x.
+      # If we don't have pixbuf 2.x, then check for pixbuf 1.x.
+      #
+      if test "$have_gdk_pixbuf2" = no; then
+        pkgs=''
+        ok="yes"
+        pkg_check_version gdk-pixbuf      0.0
+        pkg_check_version gdk-pixbuf-xlib 0.0
+        have_gdk_pixbuf="$ok"
+      fi
     fi
 
     if test "$have_gdk_pixbuf" = yes; then
@@ -15405,6 +15443,7 @@ echo "${ECHO_T}$ac_cv_gdk_pixbuf_config_libs" >&6
     ac_gdk_pixbuf_config_libs=$ac_cv_gdk_pixbuf_config_libs
   fi
 
+
   if test "$have_gdk_pixbuf" = no; then
     #
     # the old way...
@@ -15523,7 +15562,7 @@ echo "${ECHO_T}$ac_cv_gdk_pixbuf_config_libs" >&6
 
     have_gdk_pixbuf=no
 
-    # check for header 1...
+    # check for header A...
 
   ac_save_CPPFLAGS="$CPPFLAGS"
   if test \! -z "$includedir" ; then
@@ -15638,7 +15677,7 @@ fi
 
   CPPFLAGS="$ac_save_CPPFLAGS"
 
-    # if that worked, check for header 2...
+    # if that worked, check for header B...
     if test "$have_gdk_pixbuf" = yes; then
       have_gdk_pixbuf=no
       gdk_pixbuf_halfassed=yes
@@ -15757,7 +15796,7 @@ fi
 
   CPPFLAGS="$ac_save_CPPFLAGS"
 
-      # yay, it has a new name in GTK2...
+      # yay, it has a new name in Gtk 2.x...
       if test "$have_gdk_pixbuf" = no; then
         have_gdk_pixbuf=no
         gdk_pixbuf_halfassed=yes
@@ -15886,7 +15925,7 @@ fi
     have_gdk_pixbuf=no
     gdk_pixbuf_halfassed=yes
 
-    # library 1...
+    # library A...
 
   ac_save_CPPFLAGS="$CPPFLAGS"
   ac_save_LDFLAGS="$LDFLAGS"
@@ -15967,7 +16006,7 @@ fi
   LDFLAGS="$ac_save_LDFLAGS"
 #  LIBS="$ac_save_LIBS"
 
-    # library 2...
+    # library B...
     if test "$have_gdk_pixbuf" = yes; then
       have_gdk_pixbuf=no
 
 # After computing $HACK_CONF_DIR, make sure $GLADE_DATADIR has a value
 # so that we know where to install the Gtk pixmaps.
 #
+# It should usually be "/usr/share/pixmaps/", but we can't just use
+# "$(prefix)/share/pixmaps" because that would usually result in
+# "/usr/X11R6/share/pixmaps/", which is wrong.  It needs to be the
+# Gnome/Gtk prefix, not the overall prefix.
+#
 if test -n "$GNOME_DATADIR" ; then
   GLADE_DATADIR='$(GNOME_DATADIR)/xscreensaver'
 elif test "$have_gtk" = yes; then
-  # should this be "$(prefix)/share/pixmaps"? But /usr/X11R6/share/ is wrong...
-  GLADE_DATADIR='/usr/share/xscreensaver'
+  if test -n "$pkg_config"; then
+    if test "$have_gtk2" = yes; then
+      GLADE_DATADIR=`$pkg_config --variable=prefix gtk+-2.0`
+    else
+      GLADE_DATADIR=`$pkg_config --variable=prefix gtk+`
+    fi
+  else
+    GLADE_DATADIR=`$gtk_config --prefix`
+  fi
+  GLADE_DATADIR="$GLADE_DATADIR/share/xscreensaver"
 else
   GLADE_DATADIR=''
 fi
@@ -17542,7 +17594,7 @@ APPDEFAULTS=$ac_x_app_defaults
 
 
 
-ac_config_files="$ac_config_files Makefile utils/Makefile driver/Makefile hacks/Makefile hacks/glx/Makefile po/Makefile.in driver/XScreenSaver.ad"
+ac_config_files="$ac_config_files Makefile utils/Makefile driver/Makefile hacks/Makefile hacks/glx/Makefile po/Makefile.in driver/XScreenSaver.ad driver/xscreensaver.kss"
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
 # tests run on this system so they can be shared between configure
@@ -18039,6 +18091,7 @@ do
   "hacks/glx/Makefile" ) CONFIG_FILES="$CONFIG_FILES hacks/glx/Makefile" ;;
   "po/Makefile.in" ) CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
   "driver/XScreenSaver.ad" ) CONFIG_FILES="$CONFIG_FILES driver/XScreenSaver.ad" ;;
+  "driver/xscreensaver.kss" ) CONFIG_FILES="$CONFIG_FILES driver/xscreensaver.kss" ;;
   "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
   "default-2" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-2" ;;
   "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
@@ -18898,8 +18951,17 @@ elif test "$jurassic_gtk" = yes ; then
   warn2 "Gtk $pref_gtk or newer is required.  Motif will be used instead."
 
 elif test "$with_gtk_req" = yes -a "$have_gtk" = no ; then
-  warnL "Use of Gtk was requested, but it wasn't found;"
-  warn2 "Motif will be used instead."
+  warnL "Use of Gtk was requested, but it wasn't found."
+  if test "$have_motif" = yes; then
+    warn2 "Motif will be used instead."
+  fi
+fi
+
+if test "$gtk2_halfassed" != no ; then
+  warnL "GTK version $gtk2_halfassed was found, but some other supporting"
+  warn2 "libraries were not, so GTK 2.x can't be used.  Please"
+  warn2 "read the above output and the \`config.log' file to see"
+  warn2 "which libraries are missing."
 fi
 
 
index 901b5a23a02063a67ae8120877436c3e947df445..ac16c7e8a6ca154a58d07f68baafcf397f34199c 100644 (file)
@@ -1,4 +1,4 @@
-# configure.in --- xscreensaver, Copyright (c) 1997-2000 Jamie Zawinski.
+# configure.in --- xscreensaver, Copyright (c) 1997-2002 Jamie Zawinski.
 #
 
 AC_PREREQ(2.52)
@@ -1882,6 +1882,8 @@ parse_gtk_version_string() {
 
 
 jurassic_gtk=no
+gtk2_halfassed=no
+
 if test "$with_gtk" = yes; then
   have_gtk=no
   
@@ -1945,6 +1947,10 @@ if test "$with_gtk" = yes; then
     if test "$have_gtk" = yes; then
       have_gtk2=yes
       AC_DEFINE(HAVE_GTK2)
+    else
+      if test -n "$ac_gtk_version_string" ; then
+        gtk2_halfassed="$ac_gtk_version_string"
+      fi
     fi
 
     if test "$have_gtk" = no; then
@@ -1959,7 +1965,7 @@ if test "$with_gtk" = yes; then
 
       # Now check for Gnome...
       #
-      if test "$have_gtk" = yes; then
+      if test "$have_gtk" = yes -a "$with_gnome" = yes; then
         old_pkgs="$pkgs"
         ok=yes
         pkg_check_version capplet    1.0
@@ -2039,6 +2045,11 @@ if test "$with_gtk" = yes; then
     ac_gtk_config_libs=$ac_cv_gtk_config_libs
 
     # Check for Gnome Capplet support.
+    # Note that this is only needed with Gnome 1.x, not Gnome 2.x.
+    # In a Gnome 2.x world, libcapplet will not exist.
+    # (In fact, this likely won't even be checked, since in a Gnome 2.x
+    # world, we will probably be up in the "$pkg_config" branch instead
+    # of here in the "$gnome_config" branch.)
     #
     if test "$have_gnome" = yes -a "$have_gtk" = yes; then
       gnome_config_libs="gtk capplet gnomeui gdk_pixbuf"
@@ -2090,6 +2101,7 @@ if test "$with_gtk" = yes; then
 
   if test "$have_gtk" = yes -a "$have_gtk2" = no; then
     # check for this function that was not in libcapplet 1.2.
+    # (only needed in Gnome/Gtk 1.x, not Gnome/Gtk 2.x)
     AC_CHECK_X_LIB(capplet, capplet_widget_changes_are_immediate,
                    [AC_DEFINE(HAVE_CRAPPLET_IMMEDIATE)], [true],
                    $ac_gnome_config_libs)
@@ -2098,13 +2110,16 @@ if test "$with_gtk" = yes; then
 
   GNOME_DATADIR=""
   if test "$have_gnome" = yes -a "$have_gtk" = yes; then
-    if test -n "$gnome_config"; then
-      GNOME_DATADIR=`$gnome_config --datadir`
+    if test -n "$pkg_config"; then
+      if test "$have_gtk2" = yes; then
+        GNOME_DATADIR=`$pkg_config --variable=prefix gtk+-2.0`
+      else
+        GNOME_DATADIR=`$pkg_config --variable=prefix gtk+`
+      fi
     else
-      #### is this right?
-      GNOME_DATADIR=`$pkg_config --variable=prefix gtk+`
-      GNOME_DATADIR="$GNOME_DATADIR/share"
+      GNOME_DATADIR=`$gtk_config --prefix`
     fi
+    GNOME_DATADIR="$GNOME_DATADIR/share"
   fi
 
   # .desktop files go in different places in Gnome 1.x and Gnome 2.x...
@@ -2200,11 +2215,21 @@ if test "$with_xml" = yes; then
     #
     pkgs=""
     ok="yes"
-    pkg_check_version xml2 1.0
 
-    if test "$ok" = no; then
+    # If we have Gtk 2.x, then *only* XML 2.x will work.
+    # If we have Gtk 1.x, or don't have Gtk at all, then
+    # either XML 1.x or 2.x will work.
+
+    # First check for XML 2.x.
+    #
+    pkg_check_version libxml-2.0 2.4.6
+
+    # If that didn't work (we don't have XML 2.x) and we *don't* have
+    # Gtk 2.x, then check to see if we have XML 1.x
+    #
+    if test "$ok" = no -a "$have_gtk2" = no; then
       ok=yes
-      pkg_check_version xml 1.0
+      pkg_check_version libxml 1.0
     fi
 
     have_xml="$ok"
@@ -2221,7 +2246,7 @@ if test "$with_xml" = yes; then
   else
     #
     # the old way...
-    # run {gnome,gtk}-config based tests.
+    # run {xml2,xml}-config based tests.
     #
 
     AC_PATH_PROGS(xml_config, xml2-config xml-config,, $xml_path)
@@ -2272,7 +2297,7 @@ if test "$with_xml" = yes; then
     # we have the header, now check for the library
     have_xml=no
     xml_halfassed=yes
-    AC_CHECK_X_LIB(xml, xmlParseChunk,
+    AC_CHECK_X_LIB(c, xmlParseChunk,
                    [have_xml=yes
                     xml_halfassed=no
                     XML_LIBS="$ac_xml_config_libs"
@@ -2763,20 +2788,33 @@ if test "$with_gdk_pixbuf" = yes; then
     #
     pkgs=''
     ok="yes"
-    pkg_check_version gdk-pixbuf-2.0      2.0.0
-    pkg_check_version gdk-pixbuf-xlib-2.0 2.0.0
-    have_gdk_pixbuf="$ok"
-    have_gdk_pixbuf2="$ok"
 
-    if test "$have_gdk_pixbuf2" = no; then
+    # If we have Gtk 2.x, then *only* gdk-pixbuf 2.x will work.
+    # If we have Gtk 1.x, then *only* gdk-pixbuf 1.x will work.
+    # If we don't have Gtk at all, then either will work.
+
+    if test "$have_gtk" = no -o "$have_gtk2" = yes; then
       #
-      # We don't have pixbuf 2.x; check for 1.x.
+      # we don't have Gtk; or we have Gtk 2.x.  Check for pixbuf 2.x.
       #
-      pkgs=''
-      ok="yes"
-      pkg_check_version gdk-pixbuf      0.0
-      pkg_check_version gdk-pixbuf-xlib 0.0
+      pkg_check_version gdk-pixbuf-2.0      2.0.0
+      pkg_check_version gdk-pixbuf-xlib-2.0 2.0.0
       have_gdk_pixbuf="$ok"
+      have_gdk_pixbuf2="$ok"
+    fi
+
+    if test "$have_gtk" = no -o "$have_gtk2" = no; then
+      #
+      # we don't have Gtk; or we have Gtk 1.x.
+      # If we don't have pixbuf 2.x, then check for pixbuf 1.x.
+      #
+      if test "$have_gdk_pixbuf2" = no; then
+        pkgs=''
+        ok="yes"
+        pkg_check_version gdk-pixbuf      0.0
+        pkg_check_version gdk-pixbuf-xlib 0.0
+        have_gdk_pixbuf="$ok"
+      fi
     fi
 
     if test "$have_gdk_pixbuf" = yes; then
@@ -2789,6 +2827,7 @@ if test "$with_gdk_pixbuf" = yes; then
     ac_gdk_pixbuf_config_libs=$ac_cv_gdk_pixbuf_config_libs
   fi
 
+
   if test "$have_gdk_pixbuf" = no; then
     #
     # the old way...
@@ -2850,10 +2889,10 @@ if test "$with_gdk_pixbuf" = yes; then
 
     have_gdk_pixbuf=no
 
-    # check for header 1...
+    # check for header A...
     AC_CHECK_X_HEADER(gdk-pixbuf/gdk-pixbuf.h, [have_gdk_pixbuf=yes])
 
-    # if that worked, check for header 2...
+    # if that worked, check for header B...
     if test "$have_gdk_pixbuf" = yes; then
       have_gdk_pixbuf=no
       gdk_pixbuf_halfassed=yes
@@ -2861,7 +2900,7 @@ if test "$with_gdk_pixbuf" = yes; then
                         [have_gdk_pixbuf=yes
                          gdk_pixbuf_halfassed=no])
 
-      # yay, it has a new name in GTK2...
+      # yay, it has a new name in Gtk 2.x...
       if test "$have_gdk_pixbuf" = no; then
         have_gdk_pixbuf=no
         gdk_pixbuf_halfassed=yes
@@ -2879,10 +2918,10 @@ if test "$with_gdk_pixbuf" = yes; then
     have_gdk_pixbuf=no
     gdk_pixbuf_halfassed=yes
 
-    # library 1...
+    # library A...
     AC_CHECK_X_LIB(c, gdk_pixbuf_new_from_file, [have_gdk_pixbuf=yes],,
                    $ac_gdk_pixbuf_config_libs -lX11 -lXext -lm)
-    # library 2...
+    # library B...
     if test "$have_gdk_pixbuf" = yes; then
       have_gdk_pixbuf=no
       AC_CHECK_X_LIB(c, gdk_pixbuf_xlib_init,
@@ -3297,11 +3336,24 @@ fi
 # After computing $HACK_CONF_DIR, make sure $GLADE_DATADIR has a value
 # so that we know where to install the Gtk pixmaps.
 #
+# It should usually be "/usr/share/pixmaps/", but we can't just use
+# "$(prefix)/share/pixmaps" because that would usually result in
+# "/usr/X11R6/share/pixmaps/", which is wrong.  It needs to be the
+# Gnome/Gtk prefix, not the overall prefix.
+#
 if test -n "$GNOME_DATADIR" ; then
   GLADE_DATADIR='$(GNOME_DATADIR)/xscreensaver'
 elif test "$have_gtk" = yes; then
-  # should this be "$(prefix)/share/pixmaps"? But /usr/X11R6/share/ is wrong...
-  GLADE_DATADIR='/usr/share/xscreensaver'
+  if test -n "$pkg_config"; then
+    if test "$have_gtk2" = yes; then
+      GLADE_DATADIR=`$pkg_config --variable=prefix gtk+-2.0`
+    else
+      GLADE_DATADIR=`$pkg_config --variable=prefix gtk+`
+    fi
+  else
+    GLADE_DATADIR=`$gtk_config --prefix`
+  fi
+  GLADE_DATADIR="$GLADE_DATADIR/share/xscreensaver"
 else
   GLADE_DATADIR=''
 fi
@@ -3380,7 +3432,8 @@ AC_OUTPUT(Makefile
           hacks/Makefile
           hacks/glx/Makefile
           po/Makefile.in
-          driver/XScreenSaver.ad)
+          driver/XScreenSaver.ad
+          driver/xscreensaver.kss)
 
 ###############################################################################
 #
@@ -3503,8 +3556,17 @@ elif test "$jurassic_gtk" = yes ; then
   warn2 "Gtk $pref_gtk or newer is required.  Motif will be used instead."
 
 elif test "$with_gtk_req" = yes -a "$have_gtk" = no ; then
-  warnL "Use of Gtk was requested, but it wasn't found;"
-  warn2 "Motif will be used instead."
+  warnL "Use of Gtk was requested, but it wasn't found."
+  if test "$have_motif" = yes; then
+    warn2 "Motif will be used instead."
+  fi
+fi
+
+if test "$gtk2_halfassed" != no ; then
+  warnL "GTK version $gtk2_halfassed was found, but some other supporting"
+  warn2 "libraries were not, so GTK 2.x can't be used.  Please"
+  warn2 "read the above output and the \`config.log' file to see"
+  warn2 "which libraries are missing."
 fi
 
 
index f7012a66f224fbe4e19fb89cd38abffea4aba6fc..8e925da4b5ea6876f8be07f81680242f38fc2880 100644 (file)
@@ -212,9 +212,10 @@ MEN                = xscreensaver.man xscreensaver-demo.man \
                  xscreensaver-getimage-file.man \
                  xscreensaver-getimage-video.man
 EXTRAS         = README Makefile.in XScreenSaver.ad.in xscreensaver.pam \
-                 xscreensaver.kss xscreensaver-demo.glade xscreensaver-demo.glade2 \
+                 xscreensaver-demo.glade xscreensaver-demo.glade2 \
                  screensaver-properties.desktop.in \
                  screensaver-properties-capplet \
+                 xscreensaver.kss.in \
                  .gdbinit
 VMSFILES       = compile_axp.com compile_decc.com link_axp.com link_decc.com \
                  vms-getpwnam.c vms-pwd.h vms-hpwd.c vms-validate.c \
@@ -604,10 +605,10 @@ uninstall-gnome::
         fi
 
 install-kde:
-       @src="$(srcdir)/xscreensaver.kss" ;                                   \
+       @src="xscreensaver.kss" ;                                             \
        if [ "$$KDEDIR" != "" ]; then                                         \
          dir="$(install_prefix)$$KDEDIR/bin" ;                               \
-         dest="$$dir/xscreensaver.kss" ;                                     \
+         dest="$$dir/$$src" ;                                                \
          echo $(INSTALL_SCRIPT) $$src $$dest ;                               \
          if $(INSTALL_SCRIPT) $$src $$dest ; then                            \
            true ;                                                            \
index 10b60265e6597966e5579a45a8d238436defd3ef..f759d19cf629fd948a98fdb2b3513f396acbb919 100644 (file)
@@ -4,8 +4,8 @@
 !            a screen saver and locker for the X window system
 !                            by Jamie Zawinski
 !
-!                              version 4.04
-!                              31-May-2002
+!                              version 4.05
+!                              11-Jun-2002
 !
 ! See "man xscreensaver" for more info.  The latest version is always
 ! available at http://www.jwz.org/xscreensaver/
 @GL_KLUDGE@ GL:                        spheremonics -root                          \n\
 @GL_KLUDGE@ GL:                        lavalite -root                              \n\
 @GL_KLUDGE@ GL:                        queens -root                                \n\
+@GL_KLUDGE@ GL:                        endgame -root                               \n\
                                                                              \
 -                              xdaliclock -root -builtin3 -cycle           \n\
 - default-n:                   xearth -nofork -nostars -ncolors 50           \
index 0d91e8f3db3c16bc4553d21e47e0581ca4cbf56e..79d171071a79c6d95ea46f790b0415a77587ed6f 100644 (file)
           GL:                  spheremonics -root                          \\n\
           GL:                  lavalite -root                              \\n\
           GL:                  queens -root                                \\n\
+          GL:                  endgame -root                               \\n\
                                                                              \
 -                              xdaliclock -root -builtin3 -cycle           \\n\
 - default-n:                   xearth -nofork -nostars -ncolors 50           \
index 486e4a48cb91d45c4b9a5b2436c95d48b7f3a38e..3a3f2d6f1c2a0aec019ca8276744511d46a8b4d7 100644 (file)
@@ -266,7 +266,19 @@ static void
 ensure_selected_item_visible (GtkWidget *widget)
 {
 #ifdef HAVE_GTK2
+  GtkTreePath *path;
+  GtkTreeSelection *selection;
+  GtkTreeIter iter;
+  GtkTreeModel *model;
+  
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
+  if (!gtk_tree_selection_get_selected (selection, &model, &iter))
+    return;
 
+  path = gtk_tree_model_get_path (model, &iter);
+  
+  gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (widget),
+                               path, NULL, FALSE, 0.0, 0.0);
 #else /* !HAVE_GTK2 */
 
   GtkScrolledWindow *scroller = 0;
@@ -1700,7 +1712,7 @@ list_checkbox_cb (
   GtkList *list = GTK_LIST (GTK_WIDGET (line)->parent);
   GtkViewport *vp = GTK_VIEWPORT (GTK_WIDGET (list)->parent);
   GtkScrolledWindow *scroller = GTK_SCROLLED_WINDOW (GTK_WIDGET (vp)->parent);
-#endif /* ~HAVE_GTK2 */
+#endif /* !HAVE_GTK2 */
   GtkAdjustment *adj;
   double scroll_top;
 
index a3622c7af58db7698a88c24e977c5eb3256ce58e..cd8e729cfe8f6e4ce4c51c5005ab4531a52e3449 100644 (file)
@@ -11,7 +11,7 @@
 .if n .sp 1
 .if t .sp .5
 ..
-.TH XScreenSaver 1 "31-May-2002 (4.04)" "X Version 11"
+.TH XScreenSaver 1 "11-Jun-2002 (4.05)" "X Version 11"
 .SH NAME
 xscreensaver-command - control a running xscreensaver process
 .SH SYNOPSIS
index b39b13d83c36fd168506d282bea620b4d5205e61..059509c9cff0f579427a96692099c2fac2ca2e75 100644 (file)
@@ -11,7 +11,7 @@
 .if n .sp 1
 .if t .sp .5
 ..
-.TH XScreenSaver 1 "31-May-2002 (4.04)" "X Version 11"
+.TH XScreenSaver 1 "11-Jun-2002 (4.05)" "X Version 11"
 .SH NAME
 xscreensaver-demo - interactively control the background xscreensaver daemon
 .SH SYNOPSIS
index 71861cf0e4598ea922d9abd5b4ebd2d32558a1fa..4b975b51a589922ad0dd11cafb2eef0008b126bc 100644 (file)
@@ -1,4 +1,4 @@
-.TH XScreenSaver 1 "31-May-2002 (4.04)" "X Version 11"
+.TH XScreenSaver 1 "11-Jun-2002 (4.05)" "X Version 11"
 .SH NAME
 xscreensaver-getimage-file - put a randomly-selected image on the root window
 .SH SYNOPSIS
index f2587fa73edafaed2130cfef173658870e96471c..da67cd67ddd40fd6654ca58539985d0e2ab28767 100644 (file)
@@ -1,4 +1,4 @@
-.TH XScreenSaver 1 "31-May-2002 (4.04)" "X Version 11"
+.TH XScreenSaver 1 "11-Jun-2002 (4.05)" "X Version 11"
 .SH NAME
 xscreensaver-getimage-video - put a video frame on the root window
 .SH SYNOPSIS
index c956fe8c9804bcfd4f3fe2b3cb46946a5d42bcb4..559b205cda9024a193fc947fd0fd07ad0685f631 100644 (file)
@@ -1,4 +1,4 @@
-.TH XScreenSaver 1 "31-May-2002 (4.04)" "X Version 11"
+.TH XScreenSaver 1 "11-Jun-2002 (4.05)" "X Version 11"
 .SH NAME
 xscreensaver-getimage - put some randomly-selected image on the root window
 .SH SYNOPSIS
diff --git a/driver/xscreensaver.kss b/driver/xscreensaver.kss
deleted file mode 100755 (executable)
index 5c397f6..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-#!/bin/bash -
-
-# script - "xscreensaver.kss"
-#
-# Author: Shane Smit <shane_smit@calderasystems.com>
-#
-# Modification History:
-#  [08/23/1999] - Shane Smit: Creation
-#
-# Description:
-#  This script file enables users to use XScreenSaver via the
-#  KDE Display Properties. 
-
-# 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.  No representations are made about the suitability of this
-# software for any purpose.  It is provided "as is" without express or 
-# implied warranty.
-
-
-# Locking is turned off by default.
-lockmode="-no-lock-mode"
-
-while [ -n "$1" ]; do
-  case "$1" in
-
-    -desc) 
-      # This is the name in the list box.
-      echo "XScreenSaver"
-      exit
-      ;;
-
-    -preview)
-      # This simply runs xflame in the preview window.  For this to be "real",
-      # it needs to run xscreensaver with a -window-id parameter for each hack.
-      # There are two ways to do this:
-      # 1) Hack xscreensaver to allow global parameters.
-      # 2) Hack xscreensaver to accept alternate setup files, and create one on
-      #    the fly here.
-      shift
-      /usr/X11R6/lib/xscreensaver/xflame -delay 1 -window-id $1 &    # Start new preview 
-      echo "$!" > $HOME/.kss-preview$1.pid.`hostname`                # Write PID 
-      wait $!                                                       # Wait for it to get killed
-      exit
-      ;;
-
-    -setup)
-      /usr/X11R6/bin/xscreensaver -no-splash &     # daemon must be started
-      /usr/X11R6/bin/xscreensaver-demo             # or the setup will produce
-      kill $!                                      # a warning.
-      exit
-      ;;
-
-    -test)
-      # I was unable to grep stdout because xscreensaver nabs it. But I was able
-      # to output it to a file, and grep the file.
-      TEMP_FILE=/tmp/xsc.$RANDOM
-      /usr/X11R6/bin/xscreensaver -no-splash -verbose -no-capture-stderr 2> $TEMP_FILE &
-      /usr/X11R6/bin/xscreensaver-command -activate
-      while true; do
-        ExitNow=$(grep -E -c unblanking\|already $TEMP_FILE)
-        if [ $ExitNow != 0 ]; then
-          kill $!
-          rm $TEMP_FILE
-          exit
-        fi
-        sleep 1
-      done
-      exit     # It should never get this far.
-      ;;
-
-#    -corners)
-#      echo "Not yet supported"
-#      ;;
-    -delay)
-      shift
-      timeout="-timeout $1"
-      ;;
-    -install)
-      Install="TRUE"
-      ;;
-    -lock)
-      if [ ! -f "/etc/shadow" ]; then      
-        lockmode="-lock-mode"
-      fi
-      ;;
-#    -allow-root)
-#      echo "Not yet supported"
-#      ;;
-    -nice)
-      shift
-      Nice="-nice $1"
-      ;;
-#    -inroot)
-#      echo "Not yet supported"
-#      ;;
-    *)
-      echo "Unknown parameter: $1"
-      ;;
-  esac
-  shift
-done
-
-if [ -n "$Install" ] ; then
-  PID_FILE=$HOME/.kss-install.pid.`hostname`
-  if [ -r "$PID_FILE" ] ; then
-    kill `cat $PID_FILE`                                # Kill old screensaver 
-  fi
-  echo "$$" > $PID_FILE                                 # Write PID of this script
-  /usr/X11R6/bin/xscreensaver -no-splash $timeout $lockmode $Nice &    # Start XScreenSaver daemon
-  trap "kill $!" SIGTERM                                # Set these to kill the daemon
-  trap "kill $!" SIGKILL
-
-# KDE sends SIGUSER1 to indicate the user has hit the "lock" button.
-  trap "/usr/X11R6/bin/xscreensaver-command -lock" SIGUSR1
-
-  wait $!                                               # Do not exit, just wait for signals.
-
-else
-  echo "Usage: ./xscreensaver.kss -install|-setup|-test|-desc [-delay num] [-lock] [-nice num]"
-#  echo "  -corners xxxx     Placing cursor in corner performs action:"
-#  echo "                     x = i  no action (ignore)"
-#  echo "                     x = s  save screen"
-#  echo "                     x = l  lock screen"
-#  echo "                    order: top-left, top-right, bottom-left, bottom-right"
-  echo "  -delay num        Amount of idle time before screen saver starts  (default 10min)"
-  echo "  -desc             Print the screen saver's description to stdout"
-  echo "  -install          Install screen saver"
-  echo "  -lock             Require password to stop screen saver"
-#  echo "  -allow-root       Accept root password to unlock"
-  echo "  -nice num         Run with specified nice value"
-  echo "  -preview wid      Run in the specified XWindow"
-#  echo "  -inroot           Run in the root window"
-  echo "  -setup            Setup screen saver"
-  echo "  -test             Invoke the screen saver immediately"
-fi
-
-# End of script - "xscreensaver.kss"
diff --git a/driver/xscreensaver.kss.in b/driver/xscreensaver.kss.in
new file mode 100755 (executable)
index 0000000..974ecc2
--- /dev/null
@@ -0,0 +1,145 @@
+#!/bin/sh -
+
+# script - "xscreensaver.kss"
+#
+# Author: Shane Smit <shane_smit@calderasystems.com>
+#
+# Modification History:
+#  [08/23/1999] - Shane Smit: Creation
+#
+# Description:
+#  This script file enables users to use XScreenSaver via the
+#  KDE Display Properties. 
+
+# 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.  No representations are made about the suitability of this
+# software for any purpose.  It is provided "as is" without express or 
+# implied warranty.
+
+
+# Locking is turned off by default.
+lockmode="-no-lock-mode"
+
+prefix="@prefix@"
+exec_prefix="@exec_prefix@"
+bindir="@bindir@"
+hackdir="@HACKDIR@"
+
+while [ -n "$1" ]; do
+  case "$1" in
+
+    -desc) 
+      # This is the name in the list box.
+      echo "XScreenSaver"
+      exit
+      ;;
+
+    -preview)
+      # This simply runs xflame in the preview window.  For this to be "real",
+      # it needs to run xscreensaver with a -window-id parameter for each hack.
+      # There are two ways to do this:
+      # 1) Hack xscreensaver to allow global parameters.
+      # 2) Hack xscreensaver to accept alternate setup files, and create one on
+      #    the fly here.
+      shift
+      $hackdir/xflame -delay 1 -window-id $1 &                       # Start new preview 
+      echo "$!" > $HOME/.kss-preview$1.pid.`hostname`                # Write PID 
+      wait $!                                                       # Wait for it to get killed
+      exit
+      ;;
+
+    -setup)
+      $bindir/xscreensaver -no-splash &            # daemon must be started
+      $bindir/xscreensaver-demo                    # or the setup will produce
+      kill $!                                      # a warning.
+      exit
+      ;;
+
+    -test)
+      # I was unable to grep stdout because xscreensaver nabs it. But I was able
+      # to output it to a file, and grep the file.
+      TEMP_FILE=/tmp/xsc.$RANDOM
+      $bindir/xscreensaver -no-splash -verbose -no-capture-stderr 2> $TEMP_FILE &
+      $bindir/xscreensaver-command -activate
+      while true; do
+        ExitNow=$(grep -E -c unblanking\|already $TEMP_FILE)
+        if [ $ExitNow != 0 ]; then
+          kill $!
+          rm $TEMP_FILE
+          exit
+        fi
+        sleep 1
+      done
+      exit     # It should never get this far.
+      ;;
+
+#    -corners)
+#      echo "Not yet supported"
+#      ;;
+    -delay)
+      shift
+      timeout="-timeout $1"
+      ;;
+    -install)
+      Install="TRUE"
+      ;;
+    -lock)
+      if [ ! -f "/etc/shadow" ]; then      
+        lockmode="-lock-mode"
+      fi
+      ;;
+#    -allow-root)
+#      echo "Not yet supported"
+#      ;;
+    -nice)
+      shift
+      Nice="-nice $1"
+      ;;
+#    -inroot)
+#      echo "Not yet supported"
+#      ;;
+    *)
+      echo "Unknown parameter: $1"
+      ;;
+  esac
+  shift
+done
+
+if [ -n "$Install" ] ; then
+  PID_FILE=$HOME/.kss-install.pid.`hostname`
+  if [ -r "$PID_FILE" ] ; then
+    kill `cat $PID_FILE`                                # Kill old screensaver 
+  fi
+  echo "$$" > $PID_FILE                                 # Write PID of this script
+  $bindir/xscreensaver -no-splash $timeout $lockmode $Nice &    # Start XScreenSaver daemon
+  trap "kill $!" SIGTERM                                # Set these to kill the daemon
+  trap "kill $!" SIGKILL
+
+# KDE sends SIGUSER1 to indicate the user has hit the "lock" button.
+  trap "$bindir/xscreensaver-command -lock" SIGUSR1
+
+  wait $!                                               # Do not exit, just wait for signals.
+
+else
+  echo "Usage: ./xscreensaver.kss -install|-setup|-test|-desc [-delay num] [-lock] [-nice num]"
+#  echo "  -corners xxxx     Placing cursor in corner performs action:"
+#  echo "                     x = i  no action (ignore)"
+#  echo "                     x = s  save screen"
+#  echo "                     x = l  lock screen"
+#  echo "                    order: top-left, top-right, bottom-left, bottom-right"
+  echo "  -delay num        Amount of idle time before screen saver starts  (default 10min)"
+  echo "  -desc             Print the screen saver's description to stdout"
+  echo "  -install          Install screen saver"
+  echo "  -lock             Require password to stop screen saver"
+#  echo "  -allow-root       Accept root password to unlock"
+  echo "  -nice num         Run with specified nice value"
+  echo "  -preview wid      Run in the specified XWindow"
+#  echo "  -inroot           Run in the root window"
+  echo "  -setup            Setup screen saver"
+  echo "  -test             Invoke the screen saver immediately"
+fi
+
+# End of script - "xscreensaver.kss"
index 5d1cfd2b8846b11170bfabd1c1219e9865f6de4c..16ef372c9cea1863bc48ee9878dc8d243a2bbcfa 100644 (file)
@@ -11,7 +11,7 @@
 .if n .sp 1
 .if t .sp .5
 ..
-.TH XScreenSaver 1 "31-May-2002 (4.04)" "X Version 11"
+.TH XScreenSaver 1 "11-Jun-2002 (4.05)" "X Version 11"
 .SH NAME
 xscreensaver - extensible screen saver framework, plus locking
 .SH SYNOPSIS
index 492330ca1b29dad7d8284fdfe189487901d0f777..55ca4f8b3554fd72d1a6f8cc0d332c7b41d356f8 100644 (file)
@@ -4,8 +4,8 @@
             a screen saver and locker for the X window system
                             by Jamie Zawinski
 
-                              version 4.04
-                               31-May-2002
+                              version 4.05
+                               11-Jun-2002
 
                      http://www.jwz.org/xscreensaver/
 
diff --git a/hacks/config/endgame.xml b/hacks/config/endgame.xml
new file mode 100644 (file)
index 0000000..23f8ff1
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="endgame" _label="Endgame">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="50000" default="20000"
+          convert="invert"/>
+
+  <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+
+  <_description>
+Black slips out of three mating nets, but the fourth one holds him tight!
+A brilliant composition!
+Written by Blair Tennessy.
+  </_description>
+</screensaver>
index 31c346dad77e7e5929d70c96c2830e82f7c41dfa..c2a8f87e67e3be2d19f57a8ee5f9373d203cfae4 100644 (file)
@@ -28,7 +28,7 @@
           convert="invert"/>
 
   <number id="density" type="slider" arg="-density %"
-          _label="Speed" _low-label="Sparse" _high-label="Full"
+          _label="Density" _low-label="Sparse" _high-label="Full"
           low="1" high="100" default="75"/>
 
   <boolean id="trace" _label="Run Trace Program" arg-set="-trace"/>
index 49e42729c68894463f09a74c9dcd96b8482e441d..25ddc2ca98a8af4e60bc32949845428746d63b32 100644 (file)
@@ -81,7 +81,7 @@ SRCS          = xscreensaver-gl-helper.c \
                  menger.c engine.c flipscreen3d.c font-ximage.c \
                  grab-ximage.c glsnake.c boxed.c glforestfire.c sballs.c \
                  cubenetic.c spheremonics.c marching.c lavalite.c rotator.c \
-                 trackball.c gltrackball.c queens.c
+                 trackball.c gltrackball.c queens.c endgame.c chessmodels.c
 
 OBJS           = xscreensaver-gl-helper.o \
                  atlantis.o b_draw.o b_lockglue.o b_sphere.o bubble3d.o \
@@ -99,13 +99,14 @@ OBJS                = xscreensaver-gl-helper.o \
                  menger.o engine.o flipscreen3d.o font-ximage.o \
                  grab-ximage.o glsnake.o boxed.o glforestfire.o sballs.o \
                  cubenetic.o spheremonics.o marching.o lavalite.o rotator.o \
-                 trackball.o gltrackball.o queens.o
+                 trackball.o gltrackball.o queens.o endgame.o chessmodels.o
 
 GL_EXES                = cage gears moebius pipes sproingies stairs superquadrics \
                  morph3d rubik atlantis lament bubble3d glplanet pulsar \
                  sierpinski3d gflux stonerview starwars gltext molecule \
                  dangerball circuit menger engine flipscreen3d glsnake boxed \
-                 glforestfire sballs cubenetic spheremonics lavalite queens
+                 glforestfire sballs cubenetic spheremonics lavalite queens \
+                 endgame
 GLE_EXES       = extrusion
 GL_UTIL_EXES   = xscreensaver-gl-helper
 HACK_EXES      = @GL_EXES@ @GLE_EXES@
@@ -121,7 +122,8 @@ HACK_OBJS   = screenhack-gl.o xlock-gl.o fps.o $(HACK_BIN)/xlockmore.o \
 HDRS           = atlantis.h bubble3d.h buildlwo.h e_textures.h xpm-ximage.h \
                  grab-ximage.h font-ximage.h tube.h sphere.h boxed.h \
                  stonerview-move.h stonerview-osc.h glutstroke.h \
-                 glut_roman.h marching.h rotator.h trackball.h gltrackball.h
+                 glut_roman.h marching.h rotator.h trackball.h gltrackball.h \
+                 chessmodels.h
 GL_MEN         = atlantis.man boxed.man bubble3d.man cage.man circuit.man \
                  cubenetic.man dangerball.man engine.man extrusion.man \
                  flipscreen3d.man gears.man gflux.man glforestfire.man \
@@ -129,7 +131,8 @@ GL_MEN              = atlantis.man boxed.man bubble3d.man cage.man circuit.man \
                  menger.man moebius.man molecule.man morph3d.man pipes.man \
                  pulsar.man queens.man rubik.man sballs.man sierpinski3d.man \
                  spheremonics.man sproingies.man stairs.man starwars.man \
-                 stonerview.man superquadrics.man xscreensaver-gl-helper.man
+                 stonerview.man superquadrics.man xscreensaver-gl-helper.man \
+                 endgame.man
 MEN            = @GL_MEN@
 EXTRAS         = README Makefile.in
 
@@ -453,6 +456,10 @@ lavalite:  lavalite.o      $(LLOBJS)
 queens:                queens.o        $(TRACK_OBJS) $(HACK_OBJS)
        $(CC_HACK) -o $@ $@.o   $(TRACK_OBJS) $(HACK_OBJS) $(HACK_LIBS)
 
+CHESSOBJS=chessmodels.o $(TRACK_OBJS) $(HACK_OBJS)
+endgame:       endgame.o       $(CHESSOBJS)
+       $(CC_HACK) -o $@ $@.o   $(CHESSOBJS) $(HACK_LIBS)
+
 # This one works differently (it's not xlock-like.)
 #
 STONER_OBJS=stonerview.o stonerview-move.o stonerview-osc.o stonerview-view.o \
@@ -499,6 +506,7 @@ bubble3d.o: ../../config.h
 buildlwo.o: $(srcdir)/buildlwo.h
 cage.o: ../../config.h
 cage.o: $(srcdir)/e_textures.h
+chessmodels.o: $(srcdir)/chessmodels.h
 circuit.o: ../../config.h
 circuit.o: $(srcdir)/font-ximage.h
 cubenetic.o: ../../config.h
@@ -510,6 +518,9 @@ dangerball.o: $(srcdir)/rotator.h
 dangerball.o: $(srcdir)/sphere.h
 dangerball.o: $(srcdir)/tube.h
 dolphin.o: $(srcdir)/atlantis.h
+endgame.o: $(srcdir)/chessmodels.h
+endgame.o: ../../config.h
+endgame.o: $(srcdir)/gltrackball.h
 engine.o: ../../config.h
 extrusion-helix2.o: ../../config.h
 extrusion-helix3.o: ../../config.h
diff --git a/hacks/glx/chessmodels.c b/hacks/glx/chessmodels.c
new file mode 100644 (file)
index 0000000..0dd9b0c
--- /dev/null
@@ -0,0 +1,1056 @@
+/*
+ * glChess - A 3D chess interface
+ *
+ * Copyright (C) 2002  Robert  Ancell <bob27@users.sourceforge.net>
+ *                     Michael Duelli <duelli@users.sourceforge.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+/* chessmodels.c: Contains the code for piece model creation */
+
+#include <math.h>
+#include <GL/glx.h>
+#include <GL/gl.h>
+#include <GL/glu.h>
+
+#include "chessmodels.h"
+
+double piece_size = 0.1;
+
+#define ROT 16
+
+#define piece_size 0.095
+#define EPSILON 0.001
+
+/* Make a revolved piece */
+void revolve_line(double *trace_r, double *trace_h, double max_ih, int rot) {
+  double theta, norm_theta, sin_theta, cos_theta;
+  double norm_ptheta = 0.0, sin_ptheta = 0.0, cos_ptheta = 1.0;
+  double radius, pradius;
+  double max_height = max_ih, height, pheight;
+  double dx, dy, len;
+  int npoints, p;
+  double dtheta = (2.0*M_PI) / rot;
+
+  /* Get the number of points */
+  for(npoints = 0; 
+      fabs(trace_r[npoints]) > EPSILON || fabs(trace_h[npoints]) > EPSILON;
+      ++npoints);
+
+  /* If less than two points, can not revolve */
+  if(npoints < 2)
+    return;
+
+  /* If the max_height hasn't been defined, find it */
+  if(max_height < EPSILON)
+    for(p = 0; p < npoints; ++p)
+      if(max_height < trace_h[p])
+       max_height = trace_h[p];
+
+  /* Draw the revolution */
+  for(theta = dtheta; rot > 0; --rot) {
+    sin_theta = sin(theta);
+    cos_theta = cos(theta);
+    norm_theta = theta / (2.0 * M_PI);
+    pradius = trace_r[0] * piece_size;
+    pheight = trace_h[0] * piece_size;
+    
+    for(p = 0; p < npoints; ++p) {
+      radius = trace_r[p] * piece_size;
+      height = trace_h[p] * piece_size;
+
+      /* Get the normalized lengths of the normal vector */
+      dx = radius - pradius;
+      dy = height - pheight;
+      len = sqrt(dx*dx + dy*dy);
+      dx /= len;
+      dy /= len;
+
+      /* If only triangles required */
+      if (fabs(radius) < EPSILON) {
+       glBegin(GL_TRIANGLES);
+
+       glNormal3f(dy * sin_ptheta, -dx, dy * cos_ptheta);
+       glTexCoord2f(norm_ptheta, pheight / max_height);
+       glVertex3f(pradius * sin_ptheta, pheight, pradius * cos_ptheta);
+       
+       glNormal3f(dy * sin_theta, -dx, dy * cos_theta);
+       glTexCoord2f(norm_theta, pheight / max_height);
+       glVertex3f(pradius * sin_theta, pheight, pradius * cos_theta);
+       
+       glTexCoord2f(0.5 * (norm_theta + norm_ptheta),
+                    height / max_height);
+       glVertex3f(0.0, height, 0.0);
+       
+       glEnd();
+      } 
+      
+      else {
+       glBegin(GL_QUADS);
+
+       glNormal3f(dy * sin_ptheta, -dx, dy * cos_ptheta);
+       glTexCoord2f(norm_ptheta, pheight / max_height);
+       glVertex3f(pradius * sin_ptheta, pheight, pradius * cos_ptheta);
+
+       glNormal3f(dy * sin_theta, -dx, dy * cos_theta);
+       glTexCoord2f(norm_theta, pheight / max_height);
+       glVertex3f(pradius * sin_theta, pheight, pradius * cos_theta);
+
+       glTexCoord2f(norm_theta, height / max_height);
+       glVertex3f(radius * sin_theta, height, radius * cos_theta);
+
+       glNormal3f(dy * sin_ptheta, -dx, dy * cos_ptheta);
+       glTexCoord2f(norm_ptheta, height / max_height);
+       glVertex3f(radius * sin_ptheta, height, radius * cos_ptheta);
+
+       glEnd();
+      }
+
+      pradius = radius;
+      pheight = height;
+    }
+
+    sin_ptheta = sin_theta;
+    cos_ptheta = cos_theta;
+    norm_ptheta = norm_theta;
+    theta += dtheta;
+  }
+}
+
+void gen_model_lists(void) {
+  glNewList(1, GL_COMPILE);
+  draw_king();
+  glEndList();
+  
+  glNewList(2, GL_COMPILE);
+  draw_queen();
+  glEndList();
+
+  glNewList(3, GL_COMPILE);
+  draw_bishop();
+  glEndList();
+
+  glNewList(4, GL_COMPILE);
+  draw_knight();
+  glEndList();
+
+  glNewList(5, GL_COMPILE);
+  draw_rook();
+  glEndList();
+
+  glNewList(6, GL_COMPILE);
+  draw_pawn();
+  glEndList();
+}
+
+void draw_pawn(void) {
+  double trace_r[] = 
+    { 3.5, 3.5, 2.5, 2.5, 1.5, 1.0, 1.8, 1.0, 2.0, 1.0, 0.0, 0.0 };
+  double trace_h[] =
+    { 0.0, 2.0, 3.0, 4.0, 6.0, 8.8, 8.8, 9.2, 11.6, 13.4, 13.4, 0.0 };
+  
+  revolve_line(trace_r, trace_h, 0.0, ROT);
+}
+
+void draw_rook(void)
+{
+  double trace_r[] =
+    { 3.8, 3.8, 2.6, 2.0, 2.8, 2.8, 2.2, 2.2, 0.0, 0.0 };
+  double trace_h[] =
+    { 0.0, 2.0, 5.0, 10.2, 10.2, 13.6, 13.6, 13.0, 13.0, 0.0 };
+
+  revolve_line(trace_r, trace_h, 0.0, ROT);
+}
+
+void draw_knight(void)
+{
+  double trace_r[] = { 4.1, 4.1, 2.0, 2.0, 2.6, 0.0 };
+  double trace_h[] = { 0.0, 2.0, 3.6, 4.8, 5.8, 0.0 };
+
+  /* Revolved base */
+  revolve_line(trace_r, trace_h, 17.8, ROT);
+
+  /* Non revolved pieces */
+  /* Quads */
+  glBegin(GL_QUADS);
+
+  /* Square base */
+  glNormal3f(0.0, -1.0, 0.0);
+  glTexCoord2f(0.0, 5.8 / 17.8 * piece_size);
+  glVertex3f(2.6 * piece_size, 5.8 * piece_size, 2.6 * piece_size);
+  glTexCoord2f(0.0, 5.8 / 17.8 * piece_size);
+  glVertex3f(-2.6 * piece_size, 5.8 * piece_size, 2.6 * piece_size);
+  glTexCoord2f(0.0, 5.8 / 17.8 * piece_size);
+  glVertex3f(-2.6 * piece_size, 5.8 * piece_size, -0.8 * piece_size);
+  glTexCoord2f(0.0, 5.8 / 17.8 * piece_size);
+  glVertex3f(2.6 * piece_size, 5.8 * piece_size, -0.8 * piece_size);
+
+  /* Upper edge of nose */
+  glNormal3f(0.0, 0.707107, 0.707107);
+  glTexCoord2f(0.0, 16.2 / 17.8 * piece_size);
+  glVertex3f(0.8 * piece_size, 16.2 * piece_size, 4.0 * piece_size);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(1.0 * piece_size, 16.8 * piece_size, 3.4 * piece_size);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 3.4 * piece_size);
+  glTexCoord2f(0.0, 16.2 / 17.8 * piece_size);
+  glVertex3f(-0.8 * piece_size, 16.2 * piece_size, 4.0 * piece_size);
+
+  /* Above head */
+  glNormal3f(0.0, 1.0, 0.0);
+
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(1.0 * piece_size, 16.8 * piece_size, 3.4 * piece_size);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(1.0 * piece_size, 16.8 * piece_size, 3.0 * piece_size);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 3.0 * piece_size);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 3.4 * piece_size);
+
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(1.0 * piece_size, 16.8 * piece_size, 3.0 * piece_size);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(0.5 * piece_size, 16.8 * piece_size, 1.6 * piece_size);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(-0.5 * piece_size, 16.8 * piece_size, 1.6 * piece_size);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 3.0 * piece_size);
+
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(0.5 * piece_size, 16.8 * piece_size, 1.6 * piece_size);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(1.0 * piece_size, 16.8 * piece_size, 0.2 * piece_size);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 0.2 * piece_size);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(-0.5 * piece_size, 16.8 * piece_size, 1.6 * piece_size);
+
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(1.0 * piece_size, 16.8 * piece_size, 0.2 * piece_size);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(1.0 * piece_size, 16.8 * piece_size, -0.2 * piece_size);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -0.2 * piece_size);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 0.2 * piece_size);
+
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(1.0 * piece_size, 16.8 * piece_size, -0.2 * piece_size);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(0.4 * piece_size, 16.8 * piece_size, -1.1 * piece_size);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(-0.4 * piece_size, 16.8 * piece_size, -1.1 * piece_size);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -0.2 * piece_size);
+
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(0.4 * piece_size, 16.8 * piece_size, -1.1 * piece_size);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(-0.4 * piece_size, 16.8 * piece_size, -1.1 * piece_size);
+
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(1.0 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
+
+  /* Back of head */
+  glNormal3f(0.0, 0.0, -1.0);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(1.0 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
+  glTexCoord2f(0.0, 15.0 / 17.8 * piece_size);
+  glVertex3f(1.0 * piece_size, 15.0 * piece_size, -4.4 * piece_size);
+  glTexCoord2f(0.0, 15.0 / 17.8 * piece_size);
+  glVertex3f(-1.0 * piece_size, 15.0 * piece_size, -4.4 * piece_size);
+
+  /* Under back */
+  glNormal3f(0.0, 0.0, -1.0);
+  glTexCoord2f(0.0, 15.0 / 17.8 * piece_size);
+  glVertex3f(-1.0 * piece_size, 15.0 * piece_size, -4.4 * piece_size);
+  glTexCoord2f(0.0, 15.0 / 17.8 * piece_size);
+  glVertex3f(1.0 * piece_size, 15.0 * piece_size, -4.4 * piece_size);
+  glTexCoord2f(0.0, 14.8 / 17.8 * piece_size);
+  glVertex3f(0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
+  glTexCoord2f(0.0, 14.8 / 17.8 * piece_size);
+  glVertex3f(-0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
+
+  /* Right side of face */
+  glNormal3f(-0.933878, 0.128964, -0.333528);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 3.0 * piece_size);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(-0.5 * piece_size, 16.8 * piece_size, 1.6 * piece_size);
+  glTexCoord2f(0.0, 14.0 / 17.8 * piece_size);
+  glVertex3f(-1.0 * piece_size, 14.0 * piece_size, 1.3 * piece_size);
+  glTexCoord2f(0.0, 13.8 / 17.8 * piece_size);
+  glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
+
+  glNormal3f(-0.966676, 0.150427, 0.207145);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(-0.5 * piece_size, 16.8 * piece_size, 1.6 * piece_size);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(-0.8 * piece_size, 16.8 * piece_size, 0.2 * piece_size);
+  glTexCoord2f(0.0, 13.8 / 17.8 * piece_size);
+  glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 0.2 * piece_size);
+  glTexCoord2f(0.0, 14.0 / 17.8 * piece_size);
+  glVertex3f(-1.0 * piece_size, 14.0 * piece_size, 1.3 * piece_size);
+
+  /* (above and below eye) */
+  glNormal3f(-0.934057, 0.124541, -0.334704);
+
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(-0.82666667 * piece_size, 16.6 * piece_size,
+            0.2 * piece_size);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(-0.8 * piece_size, 16.8 * piece_size, 0.2 * piece_size);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -0.2 * piece_size);
+  glTexCoord2f(0.0, 16.6 / 17.8 * piece_size);
+  glVertex3f(-1.0 * piece_size, 16.6 * piece_size, -0.38 * piece_size);
+
+  glTexCoord2f(0.0, 13.8 / 17.8 * piece_size);
+  glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 0.2 * piece_size);
+  glTexCoord2f(0.0, 16.2 / 17.8 * piece_size);
+  glVertex3f(-0.88 * piece_size, 16.2 * piece_size, 0.2 * piece_size);
+  glTexCoord2f(0.0, 16.2 / 17.8 * piece_size);
+  glVertex3f(-1.0 * piece_size, 16.2 * piece_size, -0.74 * piece_size);
+  glTexCoord2f(0.0, 13.6 / 17.8 * piece_size);
+  glVertex3f(-1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
+
+  glTexCoord2f(0.0, 13.6 / 17.8 * piece_size);
+  glVertex3f(-1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
+  glTexCoord2f(0.0, 16.2 / 17.8 * piece_size);
+  glVertex3f(-1.0 * piece_size, 16.2 * piece_size, -0.74 * piece_size);
+  glTexCoord2f(0.0, 15.8 / 17.8 * piece_size);
+  glVertex3f(-1.0 * piece_size, 15.8 * piece_size, -1.1 * piece_size);
+  glTexCoord2f(0.0, 14.0 / 17.8 * piece_size);
+  glVertex3f(-0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
+
+  glNormal3f(-0.970801, -0.191698, -0.144213);
+  glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
+  glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
+  glTexCoord2f(0.0, 14.8 / 17.8 * piece_size);
+  glVertex3f(-0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
+  glTexCoord2f(0.0, 14.0 / 17.8 * piece_size);
+  glVertex3f(-0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
+  glTexCoord2f(0.0, 15.8 / 17.8 * piece_size);
+  glVertex3f(-1.0 * piece_size, 15.8 * piece_size, -1.1 * piece_size);
+
+  glNormal3f(-0.975610, 0.219512, 0.0);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 15.0f / 17.8f * piece_size);
+  glVertex3f(-1.0 * piece_size, 15.0 * piece_size, -4.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 14.8f / 17.8f * piece_size);
+  glVertex3f(-0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
+
+  /* Left side of face */
+  glNormal3f(0.933878, 0.128964, -0.333528);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(1.0 * piece_size, 16.8 * piece_size, 3.0 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
+  glVertex3f(1.0 * piece_size, 14.0 * piece_size, 1.3 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(0.5 * piece_size, 16.8 * piece_size, 1.6 * piece_size);
+
+  glNormal3f(0.966676, 0.150427, 0.207145);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(0.5 * piece_size, 16.8 * piece_size, 1.6 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
+  glVertex3f(1.0 * piece_size, 14.0 * piece_size, 1.3 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(1.2 * piece_size, 13.8 * piece_size, 0.2 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(0.8 * piece_size, 16.8 * piece_size, 0.2 * piece_size);
+
+  /* (above and below eye) */
+  glNormal3f(0.934057, 0.124541, -0.334704);
+
+  glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
+  glVertex3f(0.82666667 * piece_size, 16.6 * piece_size, 0.2 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
+  glVertex3f(1.0 * piece_size, 16.6 * piece_size, -0.38 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(1.0 * piece_size, 16.8 * piece_size, -0.2 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(0.8 * piece_size, 16.8 * piece_size, 0.2 * piece_size);
+
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(1.2 * piece_size, 13.8 * piece_size, 0.2 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 13.6f / 17.8f * piece_size);
+  glVertex3f(1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
+  glVertex3f(1.0 * piece_size, 16.2 * piece_size, -0.74 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
+  glVertex3f(0.88 * piece_size, 16.2 * piece_size, 0.2 * piece_size);
+
+  glTexCoord2f(0.0f * piece_size, 13.6f / 17.8f * piece_size);
+  glVertex3f(1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
+  glVertex3f(0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 15.8f / 17.8f * piece_size);
+  glVertex3f(1.0 * piece_size, 15.8 * piece_size, -1.1 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
+  glVertex3f(1.0 * piece_size, 16.2 * piece_size, -0.74 * piece_size);
+
+  glNormal3f(0.970801, -0.191698, -0.144213);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 15.8f / 17.8f * piece_size);
+  glVertex3f(1.0 * piece_size, 15.8 * piece_size, -1.1 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
+  glVertex3f(0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 14.8f / 17.8f * piece_size);
+  glVertex3f(0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
+
+  glNormal3f(0.975610, -0.219512, 0.0);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 14.8f / 17.8f * piece_size);
+  glVertex3f(0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 15.0f / 17.8f * piece_size);
+  glVertex3f(1.0 * piece_size, 15.0 * piece_size, -4.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(1.0 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
+
+  /* Eyes */
+  glNormal3f(0.598246, 0.797665, 0.076372);
+  glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
+  glVertex3f(0.88 * piece_size, 16.2 * piece_size, 0.2 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
+  glVertex3f(1.0 * piece_size, 16.2 * piece_size, -0.74 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
+  glVertex3f(0.8 * piece_size, 16.4 * piece_size, -0.56 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
+  glVertex3f(0.61333334 * piece_size, 16.4 * piece_size, 0.2 * piece_size);
+
+  glNormal3f(0.670088, -0.714758, 0.200256);
+  glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
+  glVertex3f(0.61333334 * piece_size, 16.4 * piece_size, 0.2 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
+  glVertex3f(0.8 * piece_size, 16.4 * piece_size, -0.56 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
+  glVertex3f(1.0 * piece_size, 16.6 * piece_size, -0.38 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
+  glVertex3f(0.82666667 * piece_size, 16.6 * piece_size, 0.2 * piece_size);
+
+  glNormal3f(-0.598246, 0.797665, 0.076372);
+  glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
+  glVertex3f(-0.88 * piece_size, 16.2 * piece_size, 0.2 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
+  glVertex3f(-0.61333334 * piece_size, 16.4 * piece_size,
+            0.2 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
+  glVertex3f(-0.8 * piece_size, 16.4 * piece_size, -0.56 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
+  glVertex3f(-1.0 * piece_size, 16.2 * piece_size, -0.74 * piece_size);
+
+  glNormal3f(-0.670088, -0.714758, 0.200256);
+  glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
+  glVertex3f(-0.61333334 * piece_size, 16.4 * piece_size,
+            0.2 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
+  glVertex3f(-0.82666667 * piece_size, 16.6 * piece_size,
+            0.2 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
+  glVertex3f(-1.0 * piece_size, 16.6 * piece_size, -0.38 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
+  glVertex3f(-0.8 * piece_size, 16.4 * piece_size, -0.56 * piece_size);
+
+  /* Hair */
+  glNormal3f(0.0, 1.0, 0.0);
+  glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
+  glVertex3f(0.35 * piece_size, 17.8 * piece_size, -0.8 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
+  glVertex3f(0.35 * piece_size, 17.8 * piece_size, -4.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
+  glVertex3f(-0.35 * piece_size, 17.8 * piece_size, -4.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
+  glVertex3f(-0.35 * piece_size, 17.8 * piece_size, -0.8 * piece_size);
+
+  glNormal3f(1.0, 0.0, 0.0);
+  glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
+  glVertex3f(0.35 * piece_size, 17.8 * piece_size, -0.8 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(0.35 * piece_size, 16.8 * piece_size, -0.8 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(0.35 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
+  glVertex3f(0.35 * piece_size, 17.8 * piece_size, -4.4 * piece_size);
+
+  glNormal3f(-1.0, 0.0, 0.0);
+  glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
+  glVertex3f(-0.35 * piece_size, 17.8 * piece_size, -0.8 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
+  glVertex3f(-0.35 * piece_size, 17.8 * piece_size, -4.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(-0.35 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(-0.35 * piece_size, 16.8 * piece_size, -0.8 * piece_size);
+
+  glNormal3f(0.0, 0.0, 1.0);
+  glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
+  glVertex3f(0.35 * piece_size, 17.8 * piece_size, -0.8 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
+  glVertex3f(-0.35 * piece_size, 17.8 * piece_size, -0.8 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(-0.35 * piece_size, 16.8 * piece_size, -0.8 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(0.35 * piece_size, 16.8 * piece_size, -0.8 * piece_size);
+
+  glNormal3f(0.0, 0.0, -1.0);
+  glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
+  glVertex3f(0.35 * piece_size, 17.8 * piece_size, -4.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(0.35 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(-0.35 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
+  glVertex3f(-0.35 * piece_size, 17.8 * piece_size, -4.4 * piece_size);
+
+  /* Under chin */
+  glNormal3f(0.0, -0.853282, 0.521450);
+  glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
+  glVertex3f(-1.0 * piece_size, 14.0 * piece_size, 1.3 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 0.2 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(1.2 * piece_size, 13.8 * piece_size, 0.2 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
+  glVertex3f(1.0 * piece_size, 14.0 * piece_size, 1.3 * piece_size);
+
+  glNormal3f(0.0, -0.983870, -0.178885);
+  glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
+  glVertex3f(-1.0 * piece_size, 14.0 * piece_size, 1.3 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
+  glVertex3f(1.0 * piece_size, 14.0 * piece_size, 1.3 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
+
+  /* Mane */
+
+  /* Right */
+  glNormal3f(-0.788443, 0.043237, -0.613587);
+  glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
+  glVertex3f(-2.6 * piece_size, 5.8 * piece_size, -0.8 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 14.8f / 17.8f * piece_size);
+  glVertex3f(-0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 15.0f / 17.8f * piece_size);
+  glVertex3f(0.0, 15.0 * piece_size, -3.6 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 7.8f / 17.8f * piece_size);
+  glVertex3f(0.0, 7.8 * piece_size, -4.0 * piece_size);
+
+  /* Left */
+  glNormal3f(0.788443, 0.043237, -0.613587);
+  glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
+  glVertex3f(2.6 * piece_size, 5.8 * piece_size, -0.8 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 7.8f / 17.8f * piece_size);
+  glVertex3f(0.0, 7.8 * piece_size, -4.0 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 15.0f / 17.8f * piece_size);
+  glVertex3f(0.0, 15.0 * piece_size, -3.6 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 14.8f / 17.8f * piece_size);
+  glVertex3f(0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
+
+  /* Chest */
+  /* Front */
+  glNormal3f(0.0, 0.584305, 0.811534);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(-0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 8.8f / 17.8f * piece_size);
+  glVertex3f(-2.0 * piece_size, 8.8 * piece_size, 4.0 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 8.8f / 17.8f * piece_size);
+  glVertex3f(2.0 * piece_size, 8.8 * piece_size, 4.0 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
+
+  /* Bottom */
+  glNormal3f(0.0, -0.422886, 0.906183);
+  glTexCoord2f(0.0f * piece_size, 8.8f / 17.8f * piece_size);
+  glVertex3f(-2.0 * piece_size, 8.8 * piece_size, 4.0 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
+  glVertex3f(-2.6 * piece_size, 5.8 * piece_size, 2.6 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
+  glVertex3f(2.6 * piece_size, 5.8 * piece_size, 2.6 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 8.8f / 17.8f * piece_size);
+  glVertex3f(2.0 * piece_size, 8.8 * piece_size, 4.0 * piece_size);
+
+  /* Right */
+  glNormal3f(-0.969286, 0.231975, -0.081681);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(-0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
+  glVertex3f(-1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
+  glVertex3f(-2.6 * piece_size, 5.8 * piece_size, 2.6 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 8.8f / 17.8f * piece_size);
+  glVertex3f(-2.0 * piece_size, 8.8 * piece_size, 4.0 * piece_size);
+
+  glNormal3f(-0.982872, 0.184289, 0.0);
+  glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
+  glVertex3f(-1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
+  glVertex3f(-1.1422222222 * piece_size, 12.2 * piece_size,
+            -2.2222222222 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
+  glVertex3f(-2.6 * piece_size, 5.8 * piece_size, -0.8 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
+  glVertex3f(-2.6 * piece_size, 5.8 * piece_size, 2.6 * piece_size);
+
+  glTexCoord2f(0.0f * piece_size, 14.8f / 17.8f * piece_size);
+  glVertex3f(-0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
+  glVertex3f(-1.1422222222 * piece_size, 12.2 * piece_size,
+            -2.2222222222 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
+  glVertex3f(-1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
+  glVertex3f(-0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
+
+  /* Left */
+  glNormal3f(0.969286, 0.231975, -0.081681);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 8.8f / 17.8f * piece_size);
+  glVertex3f(2.0 * piece_size, 8.8 * piece_size, 4.0 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
+  glVertex3f(2.6 * piece_size, 5.8 * piece_size, 2.6 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
+  glVertex3f(1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
+
+  glNormal3f(0.982872, 0.184289, 0.0);
+  glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
+  glVertex3f(1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
+  glVertex3f(2.6 * piece_size, 5.8 * piece_size, 2.6 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
+  glVertex3f(2.6 * piece_size, 5.8 * piece_size, -0.8 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
+  glVertex3f(1.1422222222 * piece_size, 12.2 * piece_size,
+            -2.2222222222 * piece_size);
+
+  glTexCoord2f(0.0f * piece_size, 14.8f / 17.8f * piece_size);
+  glVertex3f(0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
+  glVertex3f(0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
+  glVertex3f(1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
+  glVertex3f(1.1422222222 * piece_size, 12.2 * piece_size,
+            -2.2222222222 * piece_size);
+  glEnd();
+
+  /* Triangles */
+  glBegin(GL_TRIANGLES);
+
+  /* Under mane */
+  glNormal3f(0.819890, -0.220459, -0.528373);
+  glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
+  glVertex3f(2.6 * piece_size, 5.8 * piece_size, -0.8 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
+  glVertex3f(1.44 * piece_size, 5.8 * piece_size, -2.6 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 7.8f / 17.8f * piece_size);
+  glVertex3f(0.0, 7.8 * piece_size, -4.0 * piece_size);
+
+  glNormal3f(0.0, -0.573462, -0.819232);
+  glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
+  glVertex3f(1.44 * piece_size, 5.8 * piece_size, -2.6 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
+  glVertex3f(-1.44 * piece_size, 5.8 * piece_size, -2.6 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 7.8f / 17.8f * piece_size);
+  glVertex3f(0.0, 7.8 * piece_size, -4.0 * piece_size);
+
+  glNormal3f(-0.819890, -0.220459, -0.528373);
+  glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
+  glVertex3f(-2.6 * piece_size, 5.8 * piece_size, -0.8 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 7.8f / 17.8f * piece_size);
+  glVertex3f(0.0, 7.8 * piece_size, -4.0 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
+  glVertex3f(-1.44 * piece_size, 5.8 * piece_size, -2.6 * piece_size);
+
+  /* Nose tip */
+  glNormal3f(0.0, 0.0, 1.0);
+  glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
+  glVertex3f(0.0, 14.0 * piece_size, 4.0 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
+  glVertex3f(0.8 * piece_size, 16.2 * piece_size, 4.0 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
+  glVertex3f(-0.8 * piece_size, 16.2 * piece_size, 4.0 * piece_size);
+
+  /* Mouth left */
+  glNormal3f(-0.752714, -0.273714, 0.598750);
+  glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
+  glVertex3f(0.0, 14.0 * piece_size, 4.0 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
+  glVertex3f(-0.8 * piece_size, 16.2 * piece_size, 4.0 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
+
+  glNormal3f(-0.957338, 0.031911, 0.287202);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
+  glVertex3f(-0.8 * piece_size, 16.2 * piece_size, 4.0 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 3.4 * piece_size);
+
+  glNormal3f(-0.997785, 0.066519, 0.0);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 3.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 3.0 * piece_size);
+
+  /* Mouth right */
+  glNormal3f(0.752714, -0.273714, 0.598750);
+  glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
+  glVertex3f(0.0, 14.0 * piece_size, 4.0 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
+  glVertex3f(0.8 * piece_size, 16.2 * piece_size, 4.0 * piece_size);
+
+  glNormal3f(0.957338, 0.031911, 0.287202);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(1.0 * piece_size, 16.8 * piece_size, 3.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
+  glVertex3f(0.8 * piece_size, 16.2 * piece_size, 4.0 * piece_size);
+
+  glNormal3f(0.997785, 0.066519, 0.0);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(1.0 * piece_size, 16.8 * piece_size, 3.0 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(1.0 * piece_size, 16.8 * piece_size, 3.4 * piece_size);
+
+  /* Under nose */
+  glNormal3f(0.0, -0.992278, 0.124035);
+  glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
+  glVertex3f(0.0, 14.0 * piece_size, 4.0 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
+
+  /* Neck indents */
+  glNormal3f(-0.854714, 0.484047, 0.187514);
+  glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
+  glVertex3f(-0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
+  glVertex3f(-1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(-0.45 * piece_size, 13.8 * piece_size, -0.2 * piece_size);
+
+  glNormal3f(-0.853747, 0.515805, -0.071146);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(-0.45 * piece_size, 13.8 * piece_size, -0.2 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
+  glVertex3f(-1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(-0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
+
+  glNormal3f(0.854714, 0.484047, 0.187514);
+  glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
+  glVertex3f(0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(0.45 * piece_size, 13.8 * piece_size, -0.2 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
+  glVertex3f(1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
+
+  glNormal3f(0.853747, 0.515805, -0.071146);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(0.45 * piece_size, 13.8 * piece_size, -0.2 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
+  glVertex3f(1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
+
+  /* Under chin */
+  glNormal3f(0.252982, -0.948683, -0.189737);
+  glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
+  glVertex3f(0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 13.6f / 17.8f * piece_size);
+  glVertex3f(1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(0.45 * piece_size, 13.8 * piece_size, -0.2 * piece_size);
+
+  glNormal3f(0.257603, -0.966012, 0.021467);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(0.45 * piece_size, 13.8 * piece_size, -0.2 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 13.6f / 17.8f * piece_size);
+  glVertex3f(1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
+
+  glNormal3f(0.126745, -0.887214, 0.443607);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 13.6f / 17.8f * piece_size);
+  glVertex3f(1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(1.2 * piece_size, 13.8 * piece_size, 0.2 * piece_size);
+
+  glNormal3f(-0.252982, -0.948683, -0.189737);
+  glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
+  glVertex3f(-0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(-0.45 * piece_size, 13.8 * piece_size, -0.2 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 13.6f / 17.8f * piece_size);
+  glVertex3f(-1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
+
+  glNormal3f(-0.257603, -0.966012, 0.021467);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(-0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 13.6f / 17.8f * piece_size);
+  glVertex3f(-1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(-0.45 * piece_size, 13.8 * piece_size, -0.2 * piece_size);
+
+  glNormal3f(-0.126745, -0.887214, 0.443607);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(-0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
+  glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 0.2 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 13.6f / 17.8f * piece_size);
+  glVertex3f(-1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
+
+  /* Eyes */
+  glNormal3f(0.0, 0.0, -1.0);
+  glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
+  glVertex3f(0.88 * piece_size, 16.2 * piece_size, 0.2 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
+  glVertex3f(0.61333334 * piece_size, 16.4 * piece_size, 0.2 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
+  glVertex3f(0.82666667 * piece_size, 16.6 * piece_size, 0.2 * piece_size);
+
+  glNormal3f(0.000003, -0.668965, 0.743294);
+  glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
+  glVertex3f(1.0 * piece_size, 16.2 * piece_size, -0.74 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
+  glVertex3f(1.0 * piece_size, 16.6 * piece_size, -0.38 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
+  glVertex3f(0.8 * piece_size, 16.4 * piece_size, -0.56 * piece_size);
+
+  glNormal3f(0.0, 0.0, -1.0);
+  glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
+  glVertex3f(-0.88 * piece_size, 16.2 * piece_size, 0.2 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
+  glVertex3f(-0.82666667 * piece_size, 16.6 * piece_size,
+            0.2 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
+  glVertex3f(-0.61333334 * piece_size, 16.4 * piece_size,
+            0.2 * piece_size);
+
+  glNormal3f(-0.000003, -0.668965, 0.743294);
+  glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
+  glVertex3f(-1.0 * piece_size, 16.2 * piece_size, -0.74 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
+  glVertex3f(-0.8 * piece_size, 16.4 * piece_size, -0.56 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
+  glVertex3f(-1.0 * piece_size, 16.6 * piece_size, -0.38 * piece_size);
+
+  /* Behind eyes */
+  /* Right */
+  glNormal3f(-0.997484, 0.070735, 0.004796);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(-0.4 * piece_size, 16.8 * piece_size, -1.1 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 15.8f / 17.8f * piece_size);
+  glVertex3f(-1.0 * piece_size, 15.8 * piece_size, -1.1 * piece_size);
+
+  glNormal3f(-0.744437, 0.446663, -0.496292);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -0.2 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(-0.4 * piece_size, 16.8 * piece_size, -1.1 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 15.8f / 17.8f * piece_size);
+  glVertex3f(-1.0 * piece_size, 15.8 * piece_size, -1.1 * piece_size);
+
+  /* Left */
+  glNormal3f(0.997484, 0.070735, 0.004796);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(0.4 * piece_size, 16.8 * piece_size, -1.1 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 15.8f / 17.8f * piece_size);
+  glVertex3f(1.0 * piece_size, 15.8 * piece_size, -1.1 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
+
+  glNormal3f(0.744437, 0.446663, -0.496292);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(1.0 * piece_size, 16.8 * piece_size, -0.2 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 15.8f / 17.8f * piece_size);
+  glVertex3f(1.0 * piece_size, 15.8 * piece_size, -1.1 * piece_size);
+  glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
+  glVertex3f(0.4 * piece_size, 16.8 * piece_size, -1.1 * piece_size);
+
+  glEnd();
+}
+
+void draw_bishop(void)
+{
+  double trace_r[] =
+      { 4.0, 4.0, 2.5, 2.5, 1.5, 1.2, 2.5, 1.7, 1.7, 2.2, 2.2,
+    1.0, 0.8, 1.2, 0.8, 0.0, 0.0
+  };
+  double trace_h[] =
+      { 0.0, 2.0, 3.0, 4.0, 7.0, 9.4, 9.4, 11.0, 12.2, 13.2,
+    14.8, 16.0, 17.0, 17.7, 18.4, 18.4, 0.0
+  };
+
+  revolve_line(trace_r, trace_h, 0.0, ROT);
+}
+
+void draw_queen(void)
+{
+  double trace_r[] =
+      { 4.8, 4.8, 3.4, 3.4, 1.8, 1.4, 2.9, 1.8, 1.8, 2.0, 2.7,
+    2.4, 1.7, 0.95, 0.7, 0.9, 0.7, 0.0, 0.0
+  };
+  double trace_h[] =
+      { 0.0, 2.2, 4.0, 5.0, 8.0, 11.8, 11.8, 13.6, 15.2, 17.8,
+    19.2, 20.0, 20.0, 20.8, 20.8, 21.4, 22.0, 22.0, 0.0
+  };
+
+  revolve_line(trace_r, trace_h, 0.0, ROT);
+}
+
+void draw_king(void)
+{
+  double trace_r[] =
+      { 5.0, 5.0, 3.5, 3.5, 2.0, 1.4, 3.0, 2.0, 2.0, 2.8, 1.6,
+    1.6, 0.0, 0.0
+  };
+  double trace_h[] =
+      { 0.0, 2.0, 3.0, 4.6, 7.6, 12.6, 12.6, 14.6, 15.6, 19.1,
+    19.7, 20.1, 20.1, 0.0
+  };
+
+  revolve_line(trace_r, trace_h, 0.0, ROT);
+
+  glBegin(GL_QUADS);
+
+  /* Cross front */
+  glNormal3f(0.0, 0.0, 1.0);
+
+  glVertex3f(-0.3 * piece_size, 20.1 * piece_size, 0.351 * piece_size);
+  glVertex3f(0.3 * piece_size, 20.1 * piece_size, 0.35 * piece_size);
+  glVertex3f(0.3 * piece_size, 23.1 * piece_size, 0.35 * piece_size);
+  glVertex3f(-0.3 * piece_size, 23.1 * piece_size, 0.35 * piece_size);
+
+  glVertex3f(-0.9 * piece_size, 21.1 * piece_size, 0.35 * piece_size);
+  glVertex3f(-0.3 * piece_size, 21.1 * piece_size, 0.35 * piece_size);
+  glVertex3f(-0.3 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
+  glVertex3f(-0.9 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
+
+  glVertex3f(0.9 * piece_size, 21.1 * piece_size, 0.35 * piece_size);
+  glVertex3f(0.9 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
+  glVertex3f(0.3 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
+  glVertex3f(0.3 * piece_size, 21.1 * piece_size, 0.35 * piece_size);
+
+  /* Cross back */
+  glNormal3f(0.0, 0.0, -1.0);
+
+  glVertex3f(0.3 * piece_size, 20.1 * piece_size, -0.35 * piece_size);
+  glVertex3f(-0.3 * piece_size, 20.1 * piece_size, -0.35 * piece_size);
+  glVertex3f(-0.3 * piece_size, 23.1 * piece_size, -0.35 * piece_size);
+  glVertex3f(0.3 * piece_size, 23.1 * piece_size, -0.35 * piece_size);
+
+  glVertex3f(-0.3 * piece_size, 21.1 * piece_size, -0.35 * piece_size);
+  glVertex3f(-0.9 * piece_size, 21.1 * piece_size, -0.35 * piece_size);
+  glVertex3f(-0.9 * piece_size, 22.1 * piece_size, -0.35 * piece_size);
+  glVertex3f(-0.3 * piece_size, 22.1 * piece_size, -0.35 * piece_size);
+
+  glVertex3f(0.3 * piece_size, 21.1 * piece_size, -0.35 * piece_size);
+  glVertex3f(0.3 * piece_size, 22.1 * piece_size, -0.35 * piece_size);
+  glVertex3f(0.9 * piece_size, 22.1 * piece_size, -0.35 * piece_size);
+  glVertex3f(0.9 * piece_size, 21.1 * piece_size, -0.35 * piece_size);
+
+  /* Cross left */
+  glNormal3f(-1.0, 0.0, 0.0);
+
+  glVertex3f(-0.9 * piece_size, 21.1 * piece_size, 0.35 * piece_size);
+  glVertex3f(-0.9 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
+  glVertex3f(-0.9 * piece_size, 22.1 * piece_size, -0.35 * piece_size);
+  glVertex3f(-0.9 * piece_size, 21.1 * piece_size, -0.35 * piece_size);
+
+  glVertex3f(-0.3 * piece_size, 20.1 * piece_size, 0.35 * piece_size);
+  glVertex3f(-0.3 * piece_size, 21.1 * piece_size, 0.35 * piece_size);
+  glVertex3f(-0.3 * piece_size, 21.1 * piece_size, -0.35 * piece_size);
+  glVertex3f(-0.3 * piece_size, 20.1 * piece_size, -0.35 * piece_size);
+
+  glVertex3f(-0.3 * piece_size, 22.1 * piece_size, 0.3 * piece_size);
+  glVertex3f(-0.3 * piece_size, 23.1 * piece_size, 0.3 * piece_size);
+  glVertex3f(-0.3 * piece_size, 23.1 * piece_size, -0.3 * piece_size);
+  glVertex3f(-0.3 * piece_size, 22.1 * piece_size, -0.3 * piece_size);
+
+  /* Cross right */
+  glNormal3f(1.0, 0.0, 0.0);
+
+  glVertex3f(0.9 * piece_size, 21.1 * piece_size, -0.35 * piece_size);
+  glVertex3f(0.9 * piece_size, 22.1 * piece_size, -0.35 * piece_size);
+  glVertex3f(0.9 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
+  glVertex3f(0.9 * piece_size, 21.1 * piece_size, 0.35 * piece_size);
+
+  glVertex3f(0.3 * piece_size, 20.1 * piece_size, -0.35 * piece_size);
+  glVertex3f(0.3 * piece_size, 21.1 * piece_size, -0.35 * piece_size);
+  glVertex3f(0.3 * piece_size, 21.1 * piece_size, 0.35 * piece_size);
+  glVertex3f(0.3 * piece_size, 20.1 * piece_size, 0.35 * piece_size);
+
+  glVertex3f(0.3 * piece_size, 22.1 * piece_size, -0.35 * piece_size);
+  glVertex3f(0.3 * piece_size, 23.1 * piece_size, -0.35 * piece_size);
+  glVertex3f(0.3 * piece_size, 23.1 * piece_size, 0.35 * piece_size);
+  glVertex3f(0.3 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
+
+  /* Cross top */
+  glNormal3f(0.0, 1.0, 0.0);
+
+  glVertex3f(-0.9 * piece_size, 22.1 * piece_size, -0.35 * piece_size);
+  glVertex3f(-0.9 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
+  glVertex3f(-0.3 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
+  glVertex3f(-0.3 * piece_size, 22.1 * piece_size, -0.35 * piece_size);
+
+  glVertex3f(0.3 * piece_size, 22.1 * piece_size, -0.35 * piece_size);
+  glVertex3f(0.3 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
+  glVertex3f(0.9 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
+  glVertex3f(0.9 * piece_size, 22.1 * piece_size, -0.35 * piece_size);
+
+  glVertex3f(-0.3 * piece_size, 23.1 * piece_size, -0.35 * piece_size);
+  glVertex3f(-0.3 * piece_size, 23.1 * piece_size, 0.35 * piece_size);
+  glVertex3f(0.3 * piece_size, 23.1 * piece_size, 0.35 * piece_size);
+  glVertex3f(0.3 * piece_size, 23.1 * piece_size, -0.35 * piece_size);
+
+  glEnd();
+}
diff --git a/hacks/glx/chessmodels.h b/hacks/glx/chessmodels.h
new file mode 100644 (file)
index 0000000..9ef8c9b
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * glChess - A 3D chess interface
+ *
+ * Copyright (C) 2002  Robert  Ancell <bob27@users.sourceforge.net>
+ *                     Michael Duelli <duelli@users.sourceforge.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+void revolve_line(double *, double *, double, int);
+void gen_model_lists(void);
+void draw_pawn(void);
+void draw_rook(void);
+void draw_rook_old(void);
+void draw_knight(void);
+void draw_bishop(void);
+void draw_queen(void);
+void draw_king(void);
+
index db2f6ac365e2eaa28df954322ec995040375d503..7fa06e1bc03fe1826806bb1a19dd319665f5d5db 100644 (file)
@@ -441,7 +441,7 @@ init_cube (ModeInfo *mi)
                             spinz ? spin_speed : 0,
                             1.0,
                             do_wander ? wander_speed : 0,
-                            True);
+                            (spinx && spiny && spinz));
     cc->trackball = gltrackball_init ();
   }
 
diff --git a/hacks/glx/endgame.c b/hacks/glx/endgame.c
new file mode 100644 (file)
index 0000000..96db276
--- /dev/null
@@ -0,0 +1,461 @@
+/*
+ * endgame.c
+ * plays through a chess game ending.  enjoy.
+ *
+ * version 1.0 - June 6, 2002
+ *
+ * Copyright (C) 2002 Blair Tennessy (tennessb@unbc.ca)
+ *
+ * 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.  No representations are made about the suitability of this
+ * software for any purpose.  It is provided "as is" without express or
+ * implied warranty.
+ */
+
+#include <X11/Intrinsic.h>
+
+#ifdef STANDALONE
+# define PROGCLASS        "Endgame"
+# define HACK_INIT        init_chess
+# define HACK_DRAW        draw_chess
+# define HACK_RESHAPE     reshape_chess
+# define HACK_HANDLE_EVENT chess_handle_event
+# define EVENT_MASK       PointerMotionMask
+# define chess_opts  xlockmore_opts
+
+#define DEFAULTS       "*delay:       20000       \n" \
+                       "*showFPS:       False       \n" \
+                      "*wireframe:     False     \n"   \
+
+# include "xlockmore.h"
+
+#else
+# include "xlock.h"
+#endif
+
+#ifdef USE_GL
+
+#include <GL/glu.h>
+#include "gltrackball.h"
+#include "chessmodels.h"
+
+#undef countof
+#define countof(x) (sizeof((x))/sizeof((*x)))
+
+static XrmOptionDescRec opts[] = {
+  {"+rotate", ".chess.rotate", XrmoptionNoArg, (caddr_t) "false" },
+  {"-rotate", ".chess.rotate", XrmoptionNoArg, (caddr_t) "true" },
+};
+
+int rotate, spidey, spideydark;
+
+static argtype vars[] = {
+  {(caddr_t *) &rotate, "rotate", "Rotate", "True", t_Bool},
+};
+
+ModeSpecOpt chess_opts = {countof(opts), opts, countof(vars), vars, NULL};
+
+#ifdef USE_MODULES
+ModStruct   chess_description =
+{"chess", "init_chess", "draw_chess", "release_chess",
+ "draw_chess", "init_chess", NULL, &chess_opts,
+ 1000, 1, 2, 1, 4, 1.0, "",
+ "Chess", 0, NULL};
+
+#endif
+
+typedef struct {
+  GLXContext *glx_context;
+  Window window;
+  trackball_state *trackball;
+  Bool button_down_p;
+} Chesscreen;
+
+static Chesscreen *qs = NULL;
+
+#include <math.h>
+#include <sys/time.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifndef M_PI
+#define M_PI 3.14159265
+#endif
+
+/* ugggggggly */
+#define NONE    0
+#define KING    1
+#define QUEEN   2
+#define BISHOP  3 
+#define KNIGHT  4 
+#define ROOK    5
+#define PAWN    6 
+#define BKING    8
+#define BQUEEN   9
+#define BBISHOP  10 
+#define BKNIGHT  11
+#define BROOK    12
+#define BPAWN    13 
+
+#define BOARDSIZE 8
+#define PIECES 7
+
+/* definition of white/black colors */
+GLfloat colors[2][3] = { {1.0, 0.5, 0.0},
+                        {0.5, 0.5, 0.5} };
+
+/* int board[8][8] = */
+/*   { {ROOK, KNIGHT, BISHOP, QUEEN, KING, BISHOP, KNIGHT, ROOK}, */
+/*     {PAWN, PAWN, PAWN, PAWN, PAWN, PAWN, PAWN, PAWN}, */
+/*     {NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE}, */
+/*     {NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE}, */
+/*     {NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE}, */
+/*     {NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE}, */
+/*     {BPAWN, BPAWN, BPAWN, BPAWN, BPAWN, BPAWN, BPAWN, BPAWN}, */
+/*     {BROOK, BKNIGHT, BBISHOP, BQUEEN, BKING, BBISHOP, BKNIGHT, BROOK}}; */
+
+int board[8][8];
+
+void buildBoard(void) {
+  board[0][5] = BKING;
+  board[1][4] = BPAWN;
+  board[1][2] = BPAWN;
+  board[1][0] = BPAWN;
+  board[2][2] = BPAWN;
+  board[2][4] = BPAWN;
+  board[2][7] = KNIGHT;
+  board[3][0] = PAWN;
+  board[3][2] = ROOK;
+  board[4][0] = PAWN;
+  board[4][4] = KING;
+  board[4][5] = PAWN;
+  board[6][0] = BPAWN;
+  board[6][7] = PAWN;
+  board[7][0] = BBISHOP;
+}
+
+#define MOVES 24
+
+int moves[MOVES][4] = 
+  { {3, 2, 6, 2},
+    {7, 0, 6, 1},
+    {6, 2, 6, 6},
+    {0, 5, 0, 4},
+    {6, 6, 0, 6},
+    {0, 4, 1, 3},
+    {2, 7, 1, 5},
+    {2, 2, 3, 2},
+    {0, 6, 0, 3}, 
+    {1, 3, 2, 2},
+    {0, 3, 6, 3},
+    {3, 2, 4, 2}, /* pawn to bishop 5 */
+    {1, 5, 0, 3}, /* check */
+    {2, 2, 3, 2},
+    {0, 3, 2, 4}, /* takes pawn */
+    {3, 2, 2, 2},
+    {2, 4, 0, 3},
+    {2, 2, 3, 2},
+    {6, 3, 6, 1}, /* rook takes bishop */
+    {6, 0, 7, 0}, /* hack this in! */
+    {6, 1, 3, 1},
+    {3, 2, 2, 3},
+    {3, 1, 3, 3},
+    {0, 0, 2, 3},
+  };
+
+/* yay its c */
+int mpiece = 0, tpiece, steps = 0;
+double mcount = 0.0;
+double from[2], to[2];
+double dx, dz;
+int moving = 0, take = 0, mc = 0, count = 0;
+
+Bool chess_handle_event (ModeInfo *mi, XEvent *event) {
+  Chesscreen *c = &qs[MI_SCREEN(mi)];
+
+  if(event->xany.type == ButtonPress && event->xbutton.button & Button1) {
+    c->button_down_p = True;
+    gltrackball_start (c->trackball,
+                      event->xbutton.x, event->xbutton.y,
+                      MI_WIDTH (mi), MI_HEIGHT (mi));
+    return True;
+  }
+  else if(event->xany.type == ButtonRelease 
+         && event->xbutton.button & Button1) {
+    c->button_down_p = False;
+    return True;
+  }
+  else if(event->xany.type == MotionNotify && c->button_down_p) {
+    gltrackball_track (c->trackball,
+                      event->xmotion.x, event->xmotion.y,
+                      MI_WIDTH (mi), MI_HEIGHT (mi));
+    return True;
+  }
+  
+  return False;
+}
+
+/* clear board */
+void blank(void) {
+  int i, j;
+
+  for(i = 0; i < BOARDSIZE; ++i)
+    for(j = 0; j < BOARDSIZE; ++j)
+      board[i][j] = NONE;
+}
+
+/* configure lighting */
+void setup_lights(void) {
+  GLfloat position[] = { 0.0, 8.0, 0.0, 1.0 };
+
+  glEnable(GL_LIGHTING);
+  glLightfv(GL_LIGHT0, GL_POSITION, position);
+  glEnable(GL_LIGHT0);
+}
+
+/* draw pieces */
+void drawPieces(void) {
+  int i, j;
+
+  for(i = 0; i < BOARDSIZE; ++i) {
+    for(j = 0; j < BOARDSIZE; ++j) {
+      if(board[i][j]) {        
+       int c = board[i][j]/PIECES;
+       glColor3fv(colors[c]);
+       glCallList(board[i][j]%7);
+      }
+      
+      glTranslatef(1.0, 0.0, 0.0);
+    }
+    
+    glTranslatef(-1.0*BOARDSIZE, 0.0, 1.0);
+  }
+
+  glTranslatef(0.0, 0.0, -1.0*BOARDSIZE);
+}
+
+void drawMovingPiece(int wire) {
+  glTranslatef(from[1], 0.0, from[0]);
+  glColor3fv(colors[mpiece/7]);
+
+  /* assume a queening.  should be more general */
+  if((mpiece == PAWN  && fabs(to[0]) < 0.01) || 
+     (mpiece == BPAWN && fabs(to[0]-7.0) < 0.01)) {
+    if(!wire)
+      glEnable(GL_BLEND);
+
+    glColor4f(colors[mpiece/7][0], colors[mpiece/7][1], colors[mpiece/7][2],
+             (fabs(50.0-steps))/50.0);
+    
+    glCallList(steps < 50 ? PAWN : QUEEN);
+
+    /* what a kludge.  yay for side effects */
+    if(steps == 99)
+      mpiece = mpiece == PAWN ? QUEEN : BQUEEN;
+
+    if(!wire)
+      glDisable(GL_BLEND);
+  }
+  else
+    glCallList(mpiece % 7);
+}
+
+void drawTakePiece(int wire) {
+  if(!wire)
+    glEnable(GL_BLEND);
+
+  glColor4f(colors[tpiece/7][0], colors[tpiece/7][1], colors[tpiece/7][2],
+            (100-1.6*steps)/100.0);
+
+  glTranslatef(to[1] - from[1], 0.0, to[0] - from[0]);
+  glScalef(1.0, 1 - steps/50.0 > 0.01 ? 1 - steps/50.0 : 0.01, 1.0);
+  glCallList(tpiece % 7);
+  
+  if(!wire)
+    glDisable(GL_BLEND);
+}
+
+/* draw board */
+void drawBoard(void) {
+  int i, j;
+
+  for(i = 0; i < BOARDSIZE; ++i)
+    for(j = 0; j < BOARDSIZE; ++j) {
+      glColor3fv(colors[(i+j)%2]);
+      glNormal3f(0.0, 1.0, 0.0);
+
+      glBegin(GL_QUADS);
+
+      glVertex3f(i - 0.5, 0.0, j + 0.5);
+      glVertex3f(i + 0.5, 0.0, j + 0.5);
+      glVertex3f(i + 0.5, 0.0, j - 0.5);
+      glVertex3f(i - 0.5, 0.0, j - 0.5);
+
+      /* draw the bottom, too */
+      glNormal3f(0.0, -1.0, 0.0);
+
+      glVertex3f(i - 0.5, 0.0, j - 0.5);
+      glVertex3f(i + 0.5, 0.0, j - 0.5);
+      glVertex3f(i + 0.5, 0.0, j + 0.5);
+      glVertex3f(i - 0.5, 0.0, j + 0.5);
+
+      glEnd();
+    }
+}
+
+#define SQ 0.5
+
+double theta = 0.0;
+
+void display(Chesscreen *c, int wire) {
+  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+  glMatrixMode(GL_MODELVIEW);
+  glLoadIdentity();
+
+  glTranslatef(0.0, -3.0+fabs(sin(theta)), -1.3*BOARDSIZE);
+  gltrackball_rotate (c->trackball);
+  glRotatef(theta*100, 0.0, 1.0, 0.0);
+  glTranslatef(-0.5*(BOARDSIZE-1), 0.0, -0.5*(BOARDSIZE-1));
+
+  if(!wire) {
+    glEnable(GL_LIGHTING);
+    glEnable(GL_COLOR_MATERIAL);
+  }
+
+  drawBoard();
+  glTranslatef(0.0, .02, 0.0);
+  drawPieces();
+  if(moving) drawMovingPiece(wire);
+  if(take) drawTakePiece(wire);
+
+  glDisable(GL_COLOR_MATERIAL);
+  glDisable(GL_LIGHTING);
+  
+  theta += .002;
+}
+
+void reshape_chess(ModeInfo *mi, int width, int height) {
+  GLfloat h = (GLfloat) height / (GLfloat) width;
+  glViewport(0,0, width, height);
+  glMatrixMode(GL_PROJECTION);
+  glLoadIdentity();
+  gluPerspective(45, 1/h, 2.0, 30.0);
+  glMatrixMode(GL_MODELVIEW);
+}
+
+void init_chess(ModeInfo *mi) {
+  GLfloat mat_shininess[] = { 90.0 };
+  GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
+
+  int screen = MI_SCREEN(mi);
+  int wire = MI_IS_WIREFRAME(mi);
+  Chesscreen *c;
+
+  if(!qs && 
+     !(qs = (Chesscreen *) calloc(MI_NUM_SCREENS(mi), sizeof(Chesscreen))))
+    return;
+  
+  c = &qs[screen];
+  c->window = MI_WINDOW(mi);
+  c->trackball = gltrackball_init ();
+  
+  if((c->glx_context = init_GL(mi)))
+    reshape_chess(mi, MI_WIDTH(mi), MI_HEIGHT(mi));
+  else
+    MI_CLEARWINDOW(mi);
+
+  glClearColor(0.0, 0.0, 0.0, 0.0);
+
+  glEnable(GL_CULL_FACE);
+  glCullFace(GL_BACK);
+  glLineWidth(1.0);
+  glDepthFunc(GL_LEQUAL);
+
+  setup_lights();
+
+  gen_model_lists();
+
+  if (!wire) {
+    glColorMaterial(GL_FRONT, GL_DIFFUSE);
+
+    glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
+    glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
+    glShadeModel(GL_SMOOTH);
+    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+    glEnable(GL_DEPTH_TEST);
+  }
+  else
+    glPolygonMode(GL_FRONT, GL_LINE);
+
+  buildBoard();
+}
+
+void draw_chess(ModeInfo *mi) {
+  Chesscreen *c = &qs[MI_SCREEN(mi)];
+  Window w = MI_WINDOW(mi);
+  Display *disp = MI_DISPLAY(mi);
+
+  if(!c->glx_context)
+    return;
+
+  glXMakeCurrent(disp, w, *(c->glx_context));
+
+  /* moving code */
+  if(moving) {
+    ++steps;
+    from[0] += dz;
+    from[1] += dx;
+  }
+  
+  if(steps == 100) {
+    moving = count = steps = take = 0;
+    board[moves[mc][2]][moves[mc][3]] = mpiece;
+    ++mc;
+    
+    if(mc == MOVES) {
+      blank();
+      buildBoard();
+      mc = 0;
+    }
+  }
+
+  if(count++ == 100) {
+    moving = 1;
+    mpiece = board[moves[mc][0]][moves[mc][1]];
+    board[moves[mc][0]][moves[mc][1]] = NONE;
+
+    if((tpiece = board[moves[mc][2]][moves[mc][3]]) != NONE) {
+      board[moves[mc][2]][moves[mc][3]] = NONE;
+      take = 1;
+    }
+    
+    mcount = 0.0;
+    from[0] = moves[mc][0];
+    from[1] = moves[mc][1];
+    to[0] = moves[mc][2];
+    to[1] = moves[mc][3];
+    
+    dz = (to[0] - from[0]) / 100;
+    dx = (to[1] - from[1]) / 100;
+    steps = 0;
+  }
+
+  display(c, MI_IS_WIREFRAME(mi));
+
+  if(mi->fps_p) do_fps(mi);
+  glFinish(); 
+  glXSwapBuffers(disp, w);
+}
+
+void release_chess(ModeInfo *mi) {
+  if(qs)
+    free((void *) qs);
+
+  FreeAllGL(MI);
+}
+
+#endif
diff --git a/hacks/glx/endgame.man b/hacks/glx/endgame.man
new file mode 100644 (file)
index 0000000..ab00c95
--- /dev/null
@@ -0,0 +1,56 @@
+.TH XScreenSaver 1 "May 2002"
+.SH NAME
+endgame \- endgame chess screensaver
+.SH SYNOPSIS
+.B endgame
+[\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-install]
+[\-visual \fIvisual\fP] [\-delay \fImicroseconds\fP] [\-fps]
+.SH DESCRIPTION
+endgame replays a brilliant chess ending
+.SH OPTIONS
+.I chess
+accepts the following options:
+.TP 8
+.B \-window
+Draw on a newly-created window.  This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-install
+Install a private colormap for the window.
+.TP 8
+.B \-visual \fIvisual\fP\fP
+Specify which visual to use.  Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.B \-fps
+Display a running tally of how many frames per second are being rendered.
+In conjunction with \fB\-delay 0\fP, this can be a useful benchmark of 
+your GL performance.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH BUGS
+It's not unknown for this and other OpenGL hacks to fail under hardware accelaration (UtahGLX) and take the X server with them.  Texture images must be 16x16 or 32x32 or 64x64 etc.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.BR xscreensaver\-demo (1),
+.BR xscreensaver\-getimage (1)
+.SH COPYRIGHT
+Copyright \(co 2002 by Blair Tennessy.  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.  No representations are made about the
+suitability of this software for any purpose.  It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Blair Tennessy <tennessb@unbc.ca>, 20-April-2002.
index 9220133ef253a766b16025c90a20cb06b31a6c9d..605badcd46e503456586616194f4931a2b0dc42f 100644 (file)
@@ -19,7 +19,7 @@
 #endif
 
 #include <GL/gl.h>
-#include <GL/glut.h>
+/*#include <GL/glut.h>*/
 #ifdef HAVE_GLE3
 #include <GL/gle.h>
 #else
index 003e4bd666977ce5bca342715d5f6499afa4cdbf..34ae2960e60e2af2e52312c9bd87b5bc2e7c07be 100644 (file)
@@ -19,7 +19,7 @@
 #endif
 
 #include <GL/gl.h>
-#include <GL/glut.h>
+/*#include <GL/glut.h>*/
 #ifdef HAVE_GLE3
 #include <GL/gle.h>
 #else
index d6a786a78b860e800d3e6b47c8a679d61969df9b..c74fc59c8678e998305c4a42ce3c666c4ff0eb3e 100644 (file)
@@ -19,7 +19,7 @@
 #endif
 
 #include <GL/gl.h>
-#include <GL/glut.h>
+/*#include <GL/glut.h>*/
 #ifdef HAVE_GLE3
 #include <GL/gle.h>
 #else
index 12406b4f9029384b72bf664cd1d77d2ff7720e40..5b0b332b9d1ea15030abe4c12bfa096d407b7c6d 100644 (file)
@@ -8,7 +8,7 @@
 #endif
 
 #include <GL/gl.h>
-#include <GL/glut.h>
+/*#include <GL/glut.h>*/
 #ifdef HAVE_GLE3
 #include <GL/gle.h>
 #else
index 3d84a5ce72794c9dbd1060b84678fde37ee86f47..cfae296844ef55848df7749cc9c874df8d66a45d 100644 (file)
@@ -19,7 +19,7 @@
 #include <math.h>
 #include <stdlib.h>
 #include <GL/gl.h>
-#include <GL/glut.h>
+/*#include <GL/glut.h>*/
 #ifdef HAVE_GLE3
 #include <GL/gle.h>
 #else
index 3b44c287c93a6013e6189e925a0c80c74dff79f2..8aa07ab0a03752b70d437f6c64d40f60d3f37d4b 100644 (file)
@@ -19,7 +19,7 @@
 #include <math.h>
 #include <stdlib.h>
 #include <GL/gl.h>
-#include <GL/glut.h>
+/*#include <GL/glut.h>*/
 #ifdef HAVE_GLE3
 #include <GL/gle.h>
 #else
index 1dce69dbf4945af9319908427126242e2e6a16c2..f5e4965e908dae9c2137a7ac340581598098a17c 100644 (file)
@@ -19,7 +19,7 @@
 #include <math.h>
 #include <stdlib.h>
 #include <GL/gl.h>
-#include <GL/glut.h>
+/*#include <GL/glut.h>*/
 #ifdef HAVE_GLE3
 #include <GL/gle.h>
 #else
index 2ccae16165466b1b4a2916546db3772dc0b01b21..5b80d76c68b5aad9cb6183b64515b79a67044e58 100644 (file)
@@ -92,7 +92,7 @@ static Bool do_wander;
 static XrmOptionDescRec opts[] = {
   { "-text",   ".text",   XrmoptionSepArg, 0 },
   { "-spin",   ".spin",   XrmoptionSepArg, 0 },
-  { "+spin",   ".spin",   XrmoptionNoArg, "False" },
+  { "+spin",   ".spin",   XrmoptionNoArg, "" },
   { "-wander", ".wander", XrmoptionNoArg, "True" },
   { "+wander", ".wander", XrmoptionNoArg, "False" }
 };
@@ -269,16 +269,33 @@ init_text (ModeInfo *mi)
   }
 
   {
+    Bool spinx=False, spiny=False, spinz=False;
     double spin_speed   = 1.0;
     double wander_speed = 0.05;
     double spin_accel   = 1.0;
 
-    tp->rot = make_rotator (do_spin ? spin_speed : 0,
-                            do_spin ? spin_speed : 0,
-                            do_spin ? spin_speed : 0,
+    char *s = do_spin;
+    while (*s)
+      {
+        if      (*s == 'x' || *s == 'X') spinx = True;
+        else if (*s == 'y' || *s == 'Y') spiny = True;
+        else if (*s == 'z' || *s == 'Z') spinz = True;
+        else
+          {
+            fprintf (stderr,
+         "%s: spin must contain only the characters X, Y, or Z (not \"%s\")\n",
+                     progname, do_spin);
+            exit (1);
+          }
+        s++;
+      }
+
+    tp->rot = make_rotator (spinx ? spin_speed : 0,
+                            spiny ? spin_speed : 0,
+                            spinz ? spin_speed : 0,
                             spin_accel,
                             do_wander ? wander_speed : 0,
-                            True);
+                            False);
     tp->trackball = gltrackball_init ();
   }
 
index 631c2e22b6d3e7bb77e1927007dd4c52971e939a..8c653287321ab0a207fc5cc5aab7e94d6f928d24 100644 (file)
@@ -244,8 +244,6 @@ typedef struct {
   GLuint bottle_list;
   GLuint ball_list;
 
-  Bool spin_x, spin_y, spin_z;    /* spin of the scene overall */
-
   int bottle_poly_count;          /* polygons in the bottle only */
 
 } lavalite_configuration;
@@ -1334,24 +1332,7 @@ init_lavalite (ModeInfo *mi)
   reshape_lavalite (mi, MI_WIDTH(mi), MI_HEIGHT(mi));
 
   {
-    char *s = do_spin;
-    while (*s)
-      {
-        if (*s == ' ' || *s == '\t') ;
-        else if (*s == 'x' || *s == 'X') bp->spin_x = 1;
-        else if (*s == 'y' || *s == 'Y') bp->spin_y = 1;
-        else if (*s == 'z' || *s == 'Z') bp->spin_z = 1;
-        else
-          {
-            fprintf (stderr,
-         "%s: spin must contain only the characters X, Y, or Z (not \"%s\")\n",
-                     progname, do_spin);
-            exit (1);
-          }
-        s++;
-      }
-
-    s = do_style;
+    char *s = do_style;
     if (!s || !*s || !strcasecmp (s, "classic")) bp->style = CLASSIC;
     else if (!strcasecmp (s, "giant"))  bp->style = GIANT;
     else if (!strcasecmp (s, "cone"))   bp->style = CONE;
index 75010b8ee0b8c17cd798be8a3b10b12fe13ab1f1..065139537f0243b2f414fa73ddb21295e39987ab 100644 (file)
@@ -1355,7 +1355,7 @@ init_molecule (ModeInfo *mi)
                             spinz ? spin_speed : 0,
                             1.0,
                             do_wander ? wander_speed : 0,
-                            True);
+                            (spinx && spiny && spinz));
     mc->trackball = gltrackball_init ();
   }
 
index f4ffa0116085ecc4e5a6dadcc1cb72c44748f40d..a4c06902f2b9286f95d8ca319d0d9bf0876cdcce 100644 (file)
@@ -851,11 +851,11 @@ init_spheremonics (ModeInfo *mi)
       }
 
     cc->rot = make_rotator (spinx ? spin_speed : 0,
-                            spiny ? spin_speed : 0,
                             spinz ? spin_speed : 0,
+                            spiny ? spin_speed : 0,
                             1.0,
                             do_wander ? wander_speed : 0,
-                            True);
+                            (spinx && spiny && spinz));
     cc->trackball = gltrackball_init ();
   }
 
index d01dcdd49e8b4fd61583b4e59df1451d8d23ed0b..001c3d0218afebdf0493b492a91f3ced1b6958ab 100644 (file)
@@ -282,6 +282,7 @@ generate_potfiles_in:
           echo "# Auto-generated: `date`" ;    \
           ( grep -l '_("' driver/*.[ch] ;      \
             ls driver/*.glade                  \
+               driver/*.glade2                 \
                driver/*.desktop.in             \
                hacks/config/*.xml ) | sort     \
          ) > $$tmp &&                          \
index 256102d73bec5da6bb29ef0026a3e9ef1633ffdc..3054272096255bb7a00028f8f29d29ddff7de811 100644 (file)
@@ -1,10 +1,11 @@
-# Auto-generated: Fri May 31 20:43:52 PDT 2002
+# Auto-generated: Tue Jun 11 02:09:09 PDT 2002
 driver/demo-Gtk-conf.c
 driver/demo-Gtk-support.c
 driver/demo-Gtk-widgets.c
 driver/demo-Gtk.c
 driver/screensaver-properties.desktop.in
 driver/xscreensaver-demo.glade
+driver/xscreensaver-demo.glade2
 hacks/config/anemone.xml
 hacks/config/ant.xml
 hacks/config/apollonian.xml
@@ -38,6 +39,7 @@ hacks/config/discrete.xml
 hacks/config/distort.xml
 hacks/config/drift.xml
 hacks/config/electricsheep.xml
+hacks/config/endgame.xml
 hacks/config/engine.xml
 hacks/config/epicycle.xml
 hacks/config/euler2d.xml
index cbcee53ddaa67f05117777a1143f4f78b050e258..6b3522f429a1a0b475567951e60f1caaf8ae80c4 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -7,7 +7,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: control-center 1.2.1\n"
-"POT-Creation-Date: 2002-02-13 00:37+0100\n"
+"POT-Creation-Date: 2002-05-10 19:02-0700\n"
 "PO-Revision-Date: 2001-09-19 23:30+0200\n"
 "Last-Translator: Lucas Di Pentima <lucas@lunix.com.ar>\n"
 "Language-Team: Spanish <traductores@es.gnome.org>\n"
@@ -15,17 +15,27 @@ msgstr ""
 "Content-Type: text/plain; charset=iso-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: driver/demo-Gtk-conf.c:697
+#: driver/demo-Gtk-conf.c:729
 #, fuzzy
 msgid "Browse..."
 msgstr " Buscar... "
 
-#: driver/demo-Gtk-conf.c:989
+#: driver/demo-Gtk-conf.c:1021
 #, fuzzy
 msgid "Select file."
 msgstr "Seleccionar archivo de sonido"
 
-#: driver/demo-Gtk-widgets.c:155
+#: driver/demo-Gtk-support.c:121
+#, c-format
+msgid "Couldn't find pixmap file: %s"
+msgstr ""
+
+#: driver/demo-Gtk-support.c:130
+#, c-format
+msgid "Error loading pixmap file: %s"
+msgstr ""
+
+#: driver/demo-Gtk-widgets.c:155 driver/xscreensaver-demo.glade.h:89
 #, fuzzy
 msgid "XScreenSaver"
 msgstr "Salvapantalla"
@@ -35,44 +45,44 @@ msgstr "Salvapantalla"
 msgid "_File"
 msgstr "Mosaico"
 
-#: driver/demo-Gtk-widgets.c:196
+#: driver/demo-Gtk-widgets.c:196 driver/xscreensaver-demo.glade.h:93
 msgid "_Blank Screen Now"
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:205
+#: driver/demo-Gtk-widgets.c:205 driver/xscreensaver-demo.glade.h:2
 msgid ""
 "Activate the XScreenSaver daemon now (locking the screen if so configured.)"
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:209
+#: driver/demo-Gtk-widgets.c:209 driver/xscreensaver-demo.glade.h:97
 msgid "_Lock Screen Now"
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:218
+#: driver/demo-Gtk-widgets.c:218 driver/xscreensaver-demo.glade.h:51
 msgid "Lock the screen now (even if \"Lock Screen\" is unchecked.)"
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:222
+#: driver/demo-Gtk-widgets.c:222 driver/xscreensaver-demo.glade.h:96
 msgid "_Kill Daemon"
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:231
+#: driver/demo-Gtk-widgets.c:231 driver/xscreensaver-demo.glade.h:71
 msgid "Tell the running XScreenSaver daemon to exit."
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:235
+#: driver/demo-Gtk-widgets.c:235 driver/xscreensaver-demo.glade.h:98
 msgid "_Restart Daemon"
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:244
+#: driver/demo-Gtk-widgets.c:244 driver/xscreensaver-demo.glade.h:49
 msgid "Kill and re-launch the XScreenSaver daemon."
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:257
+#: driver/demo-Gtk-widgets.c:257 driver/xscreensaver-demo.glade.h:95
 msgid "_Exit"
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:266
+#: driver/demo-Gtk-widgets.c:266 driver/xscreensaver-demo.glade.h:33
 msgid ""
 "Exit the xscreensaver-demo program (but leave the XScreenSaver daemon "
 "running in the background.)"
@@ -83,344 +93,625 @@ msgstr ""
 msgid "_Help"
 msgstr "Hélice"
 
-#: driver/demo-Gtk-widgets.c:290
+#: driver/demo-Gtk-widgets.c:290 driver/xscreensaver-demo.glade.h:92
 #, fuzzy
 msgid "_About..."
 msgstr "Acerca"
 
-#: driver/demo-Gtk-widgets.c:299
+#: driver/demo-Gtk-widgets.c:299 driver/xscreensaver-demo.glade.h:30
 #, fuzzy
 msgid "Display version information."
 msgstr "Cambiar a la visualización en monocromo."
 
-#: driver/demo-Gtk-widgets.c:303
+#: driver/demo-Gtk-widgets.c:303 driver/xscreensaver-demo.glade.h:94
 msgid "_Documentation..."
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:312
+#: driver/demo-Gtk-widgets.c:312 driver/xscreensaver-demo.glade.h:38
 msgid "Go to the documentation on the XScreenSaver web page."
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:342
+#: driver/demo-Gtk-widgets.c:342 driver/xscreensaver-demo.glade.h:18
 #, fuzzy
 msgid "Cycle After"
 msgstr "Ciclo"
 
-#: driver/demo-Gtk-widgets.c:366
+#: driver/demo-Gtk-widgets.c:364 driver/xscreensaver-demo.glade.h:78
+msgid "Whether a password should be required to un-blank the screen."
+msgstr ""
+
+#: driver/demo-Gtk-widgets.c:366 driver/xscreensaver-demo.glade.h:50
 #, fuzzy
 msgid "Lock Screen After"
 msgstr "Ningún salvapantalla"
 
-#: driver/demo-Gtk-widgets.c:374
+#: driver/demo-Gtk-widgets.c:374 driver/xscreensaver-demo.glade.h:8
 #, fuzzy
 msgid "Blank After"
 msgstr "Activar después de "
 
 #: driver/demo-Gtk-widgets.c:397 driver/demo-Gtk-widgets.c:447
 #: driver/demo-Gtk-widgets.c:461 driver/demo-Gtk-widgets.c:1010
+#: driver/xscreensaver-demo.glade.h:43
 msgid "How long before the monitor goes completely black."
 msgstr ""
 
 #: driver/demo-Gtk-widgets.c:401 driver/demo-Gtk-widgets.c:413
 #: driver/demo-Gtk-widgets.c:425 driver/demo-Gtk-widgets.c:1014
 #: driver/demo-Gtk-widgets.c:1026 driver/demo-Gtk-widgets.c:1038
+#: driver/xscreensaver-demo.glade.h:99
 #, fuzzy
 msgid "minutes"
 msgstr " minutos."
 
-#: driver/demo-Gtk-widgets.c:476
+#: driver/demo-Gtk-widgets.c:476 driver/demo-Gtk.c:2336
+#: driver/xscreensaver-demo.glade.h:58
 msgid "Preview"
 msgstr "Previsualizar"
 
-#: driver/demo-Gtk-widgets.c:484
+#: driver/demo-Gtk-widgets.c:484 driver/xscreensaver-demo.glade.h:21
 msgid ""
 "Demo the selected screen saver in full-screen mode (click the mouse to "
 "return.)"
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:486
+#: driver/demo-Gtk-widgets.c:486 driver/xscreensaver-demo.glade.h:65
 msgid "Settings..."
 msgstr "Propiedades..."
 
-#: driver/demo-Gtk-widgets.c:494
+#: driver/demo-Gtk-widgets.c:494 driver/xscreensaver-demo.glade.h:17
 msgid "Customization and explanation of the selected screen saver."
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:515
+#: driver/demo-Gtk-widgets.c:515 driver/xscreensaver-demo.glade.h:52
 #, fuzzy
 msgid "Mode:"
 msgstr "Modo"
 
-#: driver/demo-Gtk-widgets.c:533
+#: driver/demo-Gtk-widgets.c:533 driver/xscreensaver-demo.glade.h:25
 #, fuzzy
 msgid "Disable Screen Saver"
 msgstr "Salvapantalla"
 
-#: driver/demo-Gtk-widgets.c:536
+#: driver/demo-Gtk-widgets.c:536 driver/xscreensaver-demo.glade.h:9
 msgid "Blank Screen Only"
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:539
+#: driver/demo-Gtk-widgets.c:539 driver/xscreensaver-demo.glade.h:56
 #, fuzzy
 msgid "Only One Screen Saver"
 msgstr "Salvapantalla"
 
-#: driver/demo-Gtk-widgets.c:542
+#: driver/demo-Gtk-widgets.c:542 driver/xscreensaver-demo.glade.h:60
 #, fuzzy
 msgid "Random Screen Saver"
 msgstr "Salvapantalla al azar"
 
-#: driver/demo-Gtk-widgets.c:565
+#: driver/demo-Gtk-widgets.c:565 driver/xscreensaver-demo.glade.h:75
 msgid "Use"
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:585
+#: driver/demo-Gtk-widgets.c:585 driver/xscreensaver-demo.glade.h:63
 msgid "Screen Saver"
 msgstr "Salvapantalla"
 
-#: driver/demo-Gtk-widgets.c:646
+#: driver/demo-Gtk-widgets.c:638 driver/xscreensaver-demo.glade.h:91
+msgid "\\/"
+msgstr ""
+
+#: driver/demo-Gtk-widgets.c:646 driver/xscreensaver-demo.glade.h:61
 msgid ""
 "Run the next screen saver in the list in full-screen mode (click the mouse "
 "to return.)"
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:656
+#: driver/demo-Gtk-widgets.c:648
+msgid "/\\"
+msgstr ""
+
+#: driver/demo-Gtk-widgets.c:656 driver/xscreensaver-demo.glade.h:62
 msgid ""
 "Run the previous screen saver in the list in full-screen mode (click the "
 "mouse to return.)"
 msgstr ""
 
 #: driver/demo-Gtk-widgets.c:658 driver/demo-Gtk-widgets.c:1601
+#: driver/xscreensaver-demo.glade.h:22
 msgid "Description"
 msgstr "Descripción"
 
-#: driver/demo-Gtk-widgets.c:685
+#: driver/demo-Gtk-widgets.c:685 driver/xscreensaver-demo.glade.h:26
 #, fuzzy
 msgid "Display Modes"
 msgstr "Muestra gotas aceitosas."
 
-#: driver/demo-Gtk-widgets.c:701
+#: driver/demo-Gtk-widgets.c:701 driver/xscreensaver-demo.glade.h:23
 #, fuzzy
 msgid "Diagnostics"
 msgstr "Posición de las ventanas de diálogo"
 
-#: driver/demo-Gtk-widgets.c:745
+#: driver/demo-Gtk-widgets.c:745 driver/xscreensaver-demo.glade.h:80
 msgid "Whether the daemon should print lots of debugging information."
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:747
+#: driver/demo-Gtk-widgets.c:747 driver/xscreensaver-demo.glade.h:76
 msgid "Verbose Diagnostics"
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:762
+#: driver/demo-Gtk-widgets.c:762 driver/xscreensaver-demo.glade.h:79
 msgid ""
 "Whether any error output of the display modes should be redirected to the "
 "screen."
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:764
+#: driver/demo-Gtk-widgets.c:764 driver/xscreensaver-demo.glade.h:29
 msgid "Display Subprocess Errors"
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:779
+#: driver/demo-Gtk-widgets.c:779 driver/xscreensaver-demo.glade.h:87
 msgid ""
 "Whether the splash screen (with the version number and `Help' button) should "
 "be momentarily displayed when the daemon first starts up."
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:781
+#: driver/demo-Gtk-widgets.c:781 driver/xscreensaver-demo.glade.h:28
 msgid "Display Splash Screen at Startup"
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:790
+#: driver/demo-Gtk-widgets.c:790 driver/xscreensaver-demo.glade.h:15
 #, fuzzy
 msgid "Colormaps"
 msgstr "Colores"
 
-#: driver/demo-Gtk-widgets.c:834
+#: driver/demo-Gtk-widgets.c:834 driver/xscreensaver-demo.glade.h:88
 msgid ""
 "Whether to install a private colormap when running in 8-bit mode on the "
 "default Visual."
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:836
+#: driver/demo-Gtk-widgets.c:836 driver/xscreensaver-demo.glade.h:48
 msgid "Install Colormap"
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:859
+#: driver/demo-Gtk-widgets.c:859 driver/xscreensaver-demo.glade.h:86
 msgid ""
 "Whether the screen should slowly fade to black when the screen saver "
 "activates."
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:861
+#: driver/demo-Gtk-widgets.c:861 driver/xscreensaver-demo.glade.h:36
 msgid "Fade To Black When Blanking"
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:876
+#: driver/demo-Gtk-widgets.c:876 driver/xscreensaver-demo.glade.h:85
 msgid ""
 "Whether the screen should slowly fade in from black when the screen saver "
 "deactivates."
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:878
+#: driver/demo-Gtk-widgets.c:878 driver/xscreensaver-demo.glade.h:35
 msgid "Fade From Black When Unblanking"
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:904
+#: driver/demo-Gtk-widgets.c:904 driver/xscreensaver-demo.glade.h:34
 #, fuzzy
 msgid "Fade Duration"
 msgstr "Duración"
 
-#: driver/demo-Gtk-widgets.c:922
+#: driver/demo-Gtk-widgets.c:922 driver/xscreensaver-demo.glade.h:44
 msgid "How long it should take for the screen to fade in and out."
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:926
+#: driver/demo-Gtk-widgets.c:926 driver/xscreensaver-demo.glade.h:100
 msgid "seconds"
 msgstr "segundos"
 
-#: driver/demo-Gtk-widgets.c:936
+#: driver/demo-Gtk-widgets.c:936 driver/xscreensaver-demo.glade.h:27
 #, fuzzy
 msgid "Display Power Management"
 msgstr "Usar gestión de energía."
 
-#: driver/demo-Gtk-widgets.c:980
+#: driver/demo-Gtk-widgets.c:980 driver/xscreensaver-demo.glade.h:84
 msgid "Whether the monitor should be powered down after a while."
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:982
+#: driver/demo-Gtk-widgets.c:982 driver/xscreensaver-demo.glade.h:57
 #, fuzzy
 msgid "Power Management Enabled"
 msgstr "Usar gestión de energía."
 
-#: driver/demo-Gtk-widgets.c:1050
+#: driver/demo-Gtk-widgets.c:1050 driver/xscreensaver-demo.glade.h:55
 msgid "Off After"
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:1063
+#: driver/demo-Gtk-widgets.c:1063 driver/xscreensaver-demo.glade.h:70
 msgid "Suspend After"
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:1076
+#: driver/demo-Gtk-widgets.c:1076 driver/xscreensaver-demo.glade.h:68
 #, fuzzy
 msgid "Standby After"
 msgstr "Activar después de "
 
-#: driver/demo-Gtk-widgets.c:1099
+#: driver/demo-Gtk-widgets.c:1099 driver/xscreensaver-demo.glade.h:45
 msgid "How long until the monitor goes into power-saving mode."
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:1113
+#: driver/demo-Gtk-widgets.c:1113 driver/xscreensaver-demo.glade.h:46
 msgid "How long until the monitor powers down."
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:1117
+#: driver/demo-Gtk-widgets.c:1117 driver/xscreensaver-demo.glade.h:47
 msgid "Image Manipulation"
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:1161
+#: driver/demo-Gtk-widgets.c:1161 driver/xscreensaver-demo.glade.h:81
 msgid ""
 "Whether the image-manipulating modes should be allowed to operate on an "
 "image of your desktop."
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:1163
+#: driver/demo-Gtk-widgets.c:1163 driver/xscreensaver-demo.glade.h:39
 msgid "Grab Desktop Images"
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:1178
+#: driver/demo-Gtk-widgets.c:1178 driver/xscreensaver-demo.glade.h:82
 msgid ""
 "Whether the image-manipulating modes should operate on images captured from "
 "the system's video input (if there is one)."
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:1180
+#: driver/demo-Gtk-widgets.c:1180 driver/xscreensaver-demo.glade.h:40
 msgid "Grab Video Frames"
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:1195
+#: driver/demo-Gtk-widgets.c:1195 driver/xscreensaver-demo.glade.h:83
 msgid ""
 "Whether the image-manipulating modes should operate on random images loaded "
 "from disk."
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:1197
+#: driver/demo-Gtk-widgets.c:1197 driver/xscreensaver-demo.glade.h:12
 #, fuzzy
 msgid "Choose Random Image:"
 msgstr "Permite elegir un gestor de ventanas"
 
-#: driver/demo-Gtk-widgets.c:1230
+#: driver/demo-Gtk-widgets.c:1230 driver/xscreensaver-demo.glade.h:73
 msgid "The directory from which images will be randomly chosen."
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:1232
+#: driver/demo-Gtk-widgets.c:1232 driver/xscreensaver-demo.glade.h:10
 #, fuzzy
 msgid "Browse"
 msgstr " Buscar... "
 
 #: driver/demo-Gtk-widgets.c:1240 driver/demo-Gtk-widgets.c:1593
+#: driver/xscreensaver-demo.glade.h:3
 msgid "Advanced"
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:1438
+#: driver/demo-Gtk-widgets.c:1438 driver/xscreensaver-demo.glade.h:90
 #, fuzzy
 msgid "XScreenSaver: Mode-Specific Settings"
 msgstr "Configuración del salvapantalla"
 
-#: driver/demo-Gtk-widgets.c:1460
+#: driver/demo-Gtk-widgets.c:1460 driver/xscreensaver-demo.glade.h:64
 msgid "Settings"
 msgstr "Parámetros"
 
-#: driver/demo-Gtk-widgets.c:1489
+#: driver/demo-Gtk-widgets.c:1489 driver/xscreensaver-demo.glade.h:66
 #, fuzzy
 msgid "Standard"
 msgstr "Sonar"
 
-#: driver/demo-Gtk-widgets.c:1526
+#: driver/demo-Gtk-widgets.c:1526 driver/xscreensaver-demo.glade.h:77
 msgid "Visual:"
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:1566
+#: driver/demo-Gtk-widgets.c:1544 driver/demo-Gtk-widgets.c:1567
+#: driver/demo-Gtk.c:1318 driver/demo-Gtk.c:2355
+#: driver/xscreensaver-demo.glade.h:5
+#, fuzzy
+msgid "Any"
+msgstr "Hormigas"
+
+#: driver/demo-Gtk-widgets.c:1545 driver/xscreensaver-demo.glade.h:7
+#, fuzzy
+msgid "Best"
+msgstr "Bosque"
+
+#: driver/demo-Gtk-widgets.c:1546 driver/xscreensaver-demo.glade.h:19
+#, fuzzy
+msgid "Default"
+msgstr "Valor predeterminado"
+
+#: driver/demo-Gtk-widgets.c:1547 driver/xscreensaver-demo.glade.h:20
+#, fuzzy
+msgid "Default-N"
+msgstr "Valor predeterminado"
+
+#: driver/demo-Gtk-widgets.c:1548 driver/xscreensaver-demo.glade.h:37
+msgid "GL"
+msgstr ""
+
+#: driver/demo-Gtk-widgets.c:1549 driver/xscreensaver-demo.glade.h:74
+#, fuzzy
+msgid "TrueColor"
+msgstr "Color"
+
+#: driver/demo-Gtk-widgets.c:1550 driver/xscreensaver-demo.glade.h:59
+#, fuzzy
+msgid "PseudoColor"
+msgstr "Color"
+
+#: driver/demo-Gtk-widgets.c:1551 driver/xscreensaver-demo.glade.h:69
+#, fuzzy
+msgid "StaticGray"
+msgstr "Estática."
+
+#: driver/demo-Gtk-widgets.c:1552 driver/xscreensaver-demo.glade.h:42
+#, fuzzy
+msgid "GrayScale"
+msgstr "Redimensionado"
+
+#: driver/demo-Gtk-widgets.c:1553 driver/xscreensaver-demo.glade.h:24
+#, fuzzy
+msgid "DirectColor"
+msgstr "Color"
+
+#: driver/demo-Gtk-widgets.c:1554 driver/xscreensaver-demo.glade.h:14
+msgid "Color"
+msgstr "Color"
+
+#: driver/demo-Gtk-widgets.c:1555 driver/xscreensaver-demo.glade.h:41
+#, fuzzy
+msgid "Gray"
+msgstr "Gravedad"
+
+#: driver/demo-Gtk-widgets.c:1556 driver/xscreensaver-demo.glade.h:53
+msgid "Mono"
+msgstr "Mono"
+
+#: driver/demo-Gtk-widgets.c:1566 driver/xscreensaver-demo.glade.h:72
 msgid ""
 "The X visual type that this demo will require.  If that visual is available "
 "it will be used, otherwise, this demo will not be run."
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:1641
+#: driver/demo-Gtk-widgets.c:1569 driver/xscreensaver-demo.glade.h:16
+#, fuzzy
+msgid "Command Line:"
+msgstr "Comando:"
+
+#: driver/demo-Gtk-widgets.c:1641 driver/xscreensaver-demo.glade.h:31
 #, fuzzy
 msgid "Documentation..."
 msgstr "Manejadores de Documentos"
 
-#: driver/demo-Gtk-widgets.c:1649
+#: driver/demo-Gtk-widgets.c:1649 driver/xscreensaver-demo.glade.h:13
 msgid "Click here to read the manual for this display mode, if it has one."
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:1674
+#: driver/demo-Gtk-widgets.c:1674 driver/xscreensaver-demo.glade.h:4
 msgid "Advanced >>"
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:1682
+#: driver/demo-Gtk-widgets.c:1682 driver/xscreensaver-demo.glade.h:32
 msgid "Edit the command line directly."
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:1684
+#: driver/demo-Gtk-widgets.c:1684 driver/xscreensaver-demo.glade.h:67
 msgid "Standard <<"
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:1692
+#: driver/demo-Gtk-widgets.c:1692 driver/xscreensaver-demo.glade.h:6
 msgid "Back to the graphical configuration options."
 msgstr ""
 
-#: driver/demo-Gtk-widgets.c:1703
+#: driver/demo-Gtk-widgets.c:1703 driver/demo-Gtk.c:587
+#: driver/xscreensaver-demo.glade.h:54
 msgid "OK"
 msgstr "Aceptar"
 
-#: driver/demo-Gtk-widgets.c:1712
+#: driver/demo-Gtk-widgets.c:1712 driver/xscreensaver-demo.glade.h:11
 #, fuzzy
 msgid "Cancel"
 msgstr "Células"
 
+#: driver/demo-Gtk.c:511
+msgid "For updates, check http://www.jwz.org/xscreensaver/"
+msgstr ""
+
+#: driver/demo-Gtk.c:517
+#, c-format
+msgid "Copyright © 1991-2002 %s"
+msgstr ""
+
+#: driver/demo-Gtk.c:624
+msgid ""
+"Error:\n"
+"\n"
+"No Help URL has been specified.\n"
+msgstr ""
+
+#: driver/demo-Gtk.c:710
+msgid ""
+"Error:\n"
+"\n"
+"The xscreensaver daemon did not start up properly.\n"
+"\n"
+msgstr ""
+
+#: driver/demo-Gtk.c:716
+msgid ""
+"You are running as root.  This usually means that xscreensaver\n"
+"was unable to contact your X server because access control is\n"
+"turned on.  Try running this command:\n"
+"\n"
+"                        xhost +localhost\n"
+"\n"
+"and then selecting `File / Restart Daemon'.\n"
+"\n"
+"Note that turning off access control will allow anyone logged\n"
+"on to this machine to access your screen, which might be\n"
+"considered a security problem.  Please read the xscreensaver\n"
+"manual and FAQ for more information.\n"
+"\n"
+"You shouldn't run X as root. Instead, you should log in as a\n"
+"normal user, and `su' as necessary."
+msgstr ""
+
+#: driver/demo-Gtk.c:732
+msgid "Please check your $PATH and permissions."
+msgstr ""
+
+#: driver/demo-Gtk.c:767
+msgid ""
+"Error:\n"
+"\n"
+"Couldn't determine init file name!\n"
+msgstr ""
+
+#: driver/demo-Gtk.c:772
+#, c-format
+msgid ""
+"Error:\n"
+"\n"
+"Couldn't write %s\n"
+msgstr ""
+
+#: driver/demo-Gtk.c:831
+msgid ""
+"Error:\n"
+"\n"
+"no `manualCommand' resource set."
+msgstr ""
+
+#: driver/demo-Gtk.c:1001
+#, c-format
+msgid ""
+"Error:\n"
+"\n"
+"Unparsable time format: \"%s\"\n"
+msgstr ""
+
+#: driver/demo-Gtk.c:1528
+#, fuzzy, c-format
+msgid ""
+"Error:\n"
+"\n"
+"Directory does not exist: \"%s\"\n"
+msgstr "¡El directorio personal no existe!\n"
+
+#: driver/demo-Gtk.c:2053
+msgid "Descriptions not available: no XML support compiled in."
+msgstr ""
+
+#: driver/demo-Gtk.c:2058
+msgid "No description available."
+msgstr ""
+
+#: driver/demo-Gtk.c:2307
+#, fuzzy
+msgid "Blank Screen"
+msgstr "Activar después de "
+
+#: driver/demo-Gtk.c:2313
+#, fuzzy
+msgid "Screen Saver Disabled"
+msgstr "Demostración del salvapantalla"
+
+#: driver/demo-Gtk.c:2473
+#, c-format
+msgid ""
+"Warning:\n"
+"\n"
+"file \"%s\" has changed, reloading.\n"
+msgstr ""
+
+#: driver/demo-Gtk.c:2540
+#, fuzzy
+msgid "No Preview"
+msgstr "Previsualizar"
+
+#: driver/demo-Gtk.c:2540
+#, fuzzy
+msgid "Available"
+msgstr "Temas disponibles"
+
+#: driver/demo-Gtk.c:3210
+#, c-format
+msgid ""
+"Warning:\n"
+"\n"
+"The XScreenSaver daemon doesn't seem to be running\n"
+"on display \"%s\".  Launch it now?"
+msgstr ""
+
+#: driver/demo-Gtk.c:3220
+#, c-format
+msgid ""
+"Warning:\n"
+"\n"
+"%s is running as user \"%s\" on host \"%s\".\n"
+"But the xscreensaver managing display \"%s\"\n"
+"is running as user \"%s\" on host \"%s\".\n"
+"\n"
+"Since they are different users, they won't be reading/writing\n"
+"the same ~/.xscreensaver file, so %s isn't\n"
+"going to work right.\n"
+"\n"
+"You should either re-run %s as \"%s\", or re-run\n"
+"xscreensaver as \"%s\".\n"
+"\n"
+"Restart the xscreensaver daemon now?\n"
+msgstr ""
+
+#: driver/demo-Gtk.c:3245
+#, c-format
+msgid ""
+"Warning:\n"
+"\n"
+"%s is running as user \"%s\" on host \"%s\".\n"
+"But the xscreensaver managing display \"%s\"\n"
+"is running as user \"%s\" on host \"%s\".\n"
+"\n"
+"If those two machines don't share a file system (that is,\n"
+"if they don't see the same ~%s/.xscreensaver file) then\n"
+"%s won't work right.\n"
+"\n"
+"Restart the daemon on \"%s\" as \"%s\" now?\n"
+msgstr ""
+
+#: driver/demo-Gtk.c:3267
+#, c-format
+msgid ""
+"Warning:\n"
+"\n"
+"This is %s version %s.\n"
+"But the xscreensaver managing display \"%s\"\n"
+"is version %s.  This could cause problems.\n"
+"\n"
+"Restart the xscreensaver daemon now?\n"
+msgstr ""
+
+#: driver/demo-Gtk.c:3636
+#, c-format
+msgid "%s: unknown option: %s\n"
+msgstr ""
+
+#: driver/screensaver-properties.desktop.in.h:1
+msgid "Configure the settings of the screensaver."
+msgstr "Configurar el salvapantalla"
+
+#: driver/screensaver-properties.desktop.in.h:2
+msgid "Screensaver"
+msgstr "Propiedades Salvapantallas"
+
+#: driver/xscreensaver-demo.glade.h:1
+msgid "/\");"
+msgstr ""
+
 #: hacks/config/ant.xml.h:1
 #, fuzzy
 msgid ""
@@ -448,30 +739,34 @@ msgstr "Tama
 msgid "Ants Count"
 msgstr "Cantidad"
 
-#: hacks/config/ant.xml.h:5 hacks/config/atlantis.xml.h:4
-#: hacks/config/attraction.xml.h:8 hacks/config/blaster.xml.h:3
-#: hacks/config/blitspin.xml.h:4 hacks/config/bouboule.xml.h:3
+#: hacks/config/ant.xml.h:5 hacks/config/apollonian.xml.h:5
+#: hacks/config/atlantis.xml.h:4 hacks/config/attraction.xml.h:8
+#: hacks/config/blaster.xml.h:3 hacks/config/blitspin.xml.h:4
+#: hacks/config/bouboule.xml.h:3 hacks/config/boxed.xml.h:4
 #: hacks/config/braid.xml.h:4 hacks/config/bubble3d.xml.h:3
 #: hacks/config/bubbles.xml.h:8 hacks/config/bumps.xml.h:3
 #: hacks/config/cage.xml.h:2 hacks/config/circuit.xml.h:4
 #: hacks/config/compass.xml.h:3 hacks/config/coral.xml.h:7
 #: hacks/config/critical.xml.h:3 hacks/config/crystal.xml.h:6
-#: hacks/config/cynosure.xml.h:4 hacks/config/dangerball.xml.h:3
-#: hacks/config/decayscreen.xml.h:2 hacks/config/deluxe.xml.h:4
-#: hacks/config/demon.xml.h:4 hacks/config/discrete.xml.h:2
-#: hacks/config/distort.xml.h:4 hacks/config/drift.xml.h:3
-#: hacks/config/engine.xml.h:3 hacks/config/epicycle.xml.h:5
+#: hacks/config/cubenetic.xml.h:8 hacks/config/cynosure.xml.h:4
+#: hacks/config/dangerball.xml.h:3 hacks/config/decayscreen.xml.h:2
+#: hacks/config/deluxe.xml.h:4 hacks/config/demon.xml.h:4
+#: hacks/config/discrete.xml.h:2 hacks/config/distort.xml.h:4
+#: hacks/config/drift.xml.h:3 hacks/config/engine.xml.h:3
+#: hacks/config/epicycle.xml.h:5 hacks/config/euler2d.xml.h:3
 #: hacks/config/extrusion.xml.h:3 hacks/config/fadeplot.xml.h:4
 #: hacks/config/flag.xml.h:2 hacks/config/flame.xml.h:6
 #: hacks/config/flipscreen3d.xml.h:1 hacks/config/flow.xml.h:4
-#: hacks/config/forest.xml.h:1 hacks/config/galaxy.xml.h:3
-#: hacks/config/gears.xml.h:3 hacks/config/gflux.xml.h:6
-#: hacks/config/glplanet.xml.h:2 hacks/config/gltext.xml.h:3
-#: hacks/config/goop.xml.h:4 hacks/config/grav.xml.h:2
-#: hacks/config/greynetic.xml.h:1 hacks/config/halo.xml.h:2
-#: hacks/config/hopalong.xml.h:9 hacks/config/hyperball.xml.h:2
-#: hacks/config/hypercube.xml.h:2 hacks/config/ifs.xml.h:1
-#: hacks/config/interference.xml.h:5 hacks/config/jigsaw.xml.h:3
+#: hacks/config/fluidballs.xml.h:3 hacks/config/forest.xml.h:1
+#: hacks/config/galaxy.xml.h:3 hacks/config/gears.xml.h:2
+#: hacks/config/gflux.xml.h:6 hacks/config/glforestfire.xml.h:4
+#: hacks/config/glplanet.xml.h:2 hacks/config/glsnake.xml.h:5
+#: hacks/config/gltext.xml.h:3 hacks/config/goop.xml.h:4
+#: hacks/config/grav.xml.h:2 hacks/config/greynetic.xml.h:1
+#: hacks/config/halo.xml.h:2 hacks/config/hopalong.xml.h:9
+#: hacks/config/hyperball.xml.h:2 hacks/config/hypercube.xml.h:2
+#: hacks/config/ifs.xml.h:1 hacks/config/interference.xml.h:5
+#: hacks/config/jigsaw.xml.h:3 hacks/config/juggle.xml.h:3
 #: hacks/config/julia.xml.h:2 hacks/config/kaleidescope.xml.h:2
 #: hacks/config/kumppa.xml.h:3 hacks/config/lament.xml.h:2
 #: hacks/config/laser.xml.h:3 hacks/config/lightning.xml.h:1
@@ -483,27 +778,29 @@ msgstr "Cantidad"
 #: hacks/config/mountain.xml.h:2 hacks/config/munch.xml.h:3
 #: hacks/config/nerverot.xml.h:9 hacks/config/penetrate.xml.h:3
 #: hacks/config/penrose.xml.h:6 hacks/config/petri.xml.h:5
-#: hacks/config/phosphor.xml.h:3 hacks/config/pipes.xml.h:4
-#: hacks/config/pulsar.xml.h:11 hacks/config/pyro.xml.h:4
-#: hacks/config/qix.xml.h:7 hacks/config/rd-bomb.xml.h:9
-#: hacks/config/ripples.xml.h:4 hacks/config/rocks.xml.h:4
-#: hacks/config/rotor.xml.h:3 hacks/config/rubik.xml.h:3
+#: hacks/config/phosphor.xml.h:3 hacks/config/pipes.xml.h:5
+#: hacks/config/polyominoes.xml.h:2 hacks/config/pulsar.xml.h:11
+#: hacks/config/pyro.xml.h:4 hacks/config/qix.xml.h:7
+#: hacks/config/rd-bomb.xml.h:9 hacks/config/ripples.xml.h:4
+#: hacks/config/rocks.xml.h:4 hacks/config/rotor.xml.h:3
+#: hacks/config/rubik.xml.h:3 hacks/config/sballs.xml.h:4
 #: hacks/config/shadebobs.xml.h:3 hacks/config/sierpinski.xml.h:2
 #: hacks/config/sierpinski3d.xml.h:2 hacks/config/slidescreen.xml.h:2
 #: hacks/config/slip.xml.h:2 hacks/config/speedmine.xml.h:3
-#: hacks/config/sphere.xml.h:2 hacks/config/spiral.xml.h:3
-#: hacks/config/spotlight.xml.h:2 hacks/config/sproingies.xml.h:2
-#: hacks/config/squiral.xml.h:4 hacks/config/stairs.xml.h:1
-#: hacks/config/starfish.xml.h:3 hacks/config/starwars.xml.h:6
-#: hacks/config/strange.xml.h:2 hacks/config/superquadrics.xml.h:3
-#: hacks/config/swirl.xml.h:2 hacks/config/t3d.xml.h:6
+#: hacks/config/sphere.xml.h:2 hacks/config/spheremonics.xml.h:5
+#: hacks/config/spiral.xml.h:3 hacks/config/spotlight.xml.h:2
+#: hacks/config/sproingies.xml.h:2 hacks/config/squiral.xml.h:4
+#: hacks/config/stairs.xml.h:1 hacks/config/starfish.xml.h:3
+#: hacks/config/starwars.xml.h:6 hacks/config/strange.xml.h:2
+#: hacks/config/superquadrics.xml.h:3 hacks/config/swirl.xml.h:2
+#: hacks/config/t3d.xml.h:6 hacks/config/thornbird.xml.h:2
 #: hacks/config/triangle.xml.h:1 hacks/config/truchet.xml.h:1
-#: hacks/config/vines.xml.h:1 hacks/config/webcollage.xml.h:4
-#: hacks/config/worm.xml.h:3 hacks/config/xearth.xml.h:7
-#: hacks/config/xfishtank.xml.h:3 hacks/config/xflame.xml.h:4
-#: hacks/config/xjack.xml.h:1 hacks/config/xmatrix.xml.h:4
-#: hacks/config/xmountains.xml.h:1 hacks/config/xrayswarm.xml.h:2
-#: hacks/config/zoom.xml.h:2
+#: hacks/config/twang.xml.h:3 hacks/config/vines.xml.h:1
+#: hacks/config/webcollage.xml.h:4 hacks/config/worm.xml.h:3
+#: hacks/config/xearth.xml.h:7 hacks/config/xfishtank.xml.h:3
+#: hacks/config/xflame.xml.h:4 hacks/config/xjack.xml.h:1
+#: hacks/config/xmatrix.xml.h:4 hacks/config/xmountains.xml.h:1
+#: hacks/config/xrayswarm.xml.h:2 hacks/config/zoom.xml.h:2
 msgid "Fast"
 msgstr "Rápido"
 
@@ -512,9 +809,10 @@ msgid "Four Sided Cells"
 msgstr ""
 
 #: hacks/config/ant.xml.h:7 hacks/config/attraction.xml.h:13
-#: hacks/config/demon.xml.h:5 hacks/config/discrete.xml.h:3
-#: hacks/config/distort.xml.h:5 hacks/config/fadeplot.xml.h:5
-#: hacks/config/flag.xml.h:4 hacks/config/flow.xml.h:7
+#: hacks/config/cubenetic.xml.h:11 hacks/config/demon.xml.h:5
+#: hacks/config/discrete.xml.h:3 hacks/config/distort.xml.h:5
+#: hacks/config/fadeplot.xml.h:5 hacks/config/flag.xml.h:4
+#: hacks/config/flow.xml.h:7 hacks/config/fluidballs.xml.h:12
 #: hacks/config/hopalong.xml.h:13 hacks/config/interference.xml.h:8
 #: hacks/config/julia.xml.h:5 hacks/config/lissie.xml.h:4
 #: hacks/config/loop.xml.h:2 hacks/config/moire.xml.h:4
@@ -524,16 +822,18 @@ msgstr ""
 msgid "Large"
 msgstr "Grande"
 
-#: hacks/config/ant.xml.h:8 hacks/config/attraction.xml.h:18
-#: hacks/config/blaster.xml.h:6 hacks/config/bouboule.xml.h:5
-#: hacks/config/braid.xml.h:7 hacks/config/coral.xml.h:9
-#: hacks/config/critical.xml.h:4 hacks/config/crystal.xml.h:8
+#: hacks/config/ant.xml.h:8 hacks/config/apollonian.xml.h:7
+#: hacks/config/attraction.xml.h:18 hacks/config/blaster.xml.h:6
+#: hacks/config/bouboule.xml.h:5 hacks/config/braid.xml.h:7
+#: hacks/config/coral.xml.h:9 hacks/config/critical.xml.h:4
+#: hacks/config/crystal.xml.h:8 hacks/config/cubenetic.xml.h:13
 #: hacks/config/cynosure.xml.h:6 hacks/config/deco.xml.h:5
 #: hacks/config/deluxe.xml.h:6 hacks/config/demon.xml.h:6
 #: hacks/config/discrete.xml.h:4 hacks/config/drift.xml.h:9
-#: hacks/config/epicycle.xml.h:8 hacks/config/fadeplot.xml.h:6
-#: hacks/config/flag.xml.h:5 hacks/config/flame.xml.h:10
-#: hacks/config/flow.xml.h:8 hacks/config/forest.xml.h:3
+#: hacks/config/epicycle.xml.h:8 hacks/config/euler2d.xml.h:8
+#: hacks/config/fadeplot.xml.h:6 hacks/config/flag.xml.h:5
+#: hacks/config/flame.xml.h:11 hacks/config/flow.xml.h:8
+#: hacks/config/fluidballs.xml.h:13 hacks/config/forest.xml.h:3
 #: hacks/config/galaxy.xml.h:6 hacks/config/grav.xml.h:4
 #: hacks/config/halo.xml.h:4 hacks/config/hopalong.xml.h:15
 #: hacks/config/ifs.xml.h:3 hacks/config/imsmap.xml.h:9
@@ -544,14 +844,15 @@ msgstr "Grande"
 #: hacks/config/moire.xml.h:5 hacks/config/moire2.xml.h:3
 #: hacks/config/mountain.xml.h:4 hacks/config/nerverot.xml.h:15
 #: hacks/config/pedal.xml.h:6 hacks/config/penrose.xml.h:7
-#: hacks/config/petri.xml.h:11 hacks/config/qix.xml.h:14
-#: hacks/config/rd-bomb.xml.h:12 hacks/config/ripples.xml.h:7
-#: hacks/config/rocks.xml.h:5 hacks/config/rotor.xml.h:6
-#: hacks/config/shadebobs.xml.h:5 hacks/config/sierpinski.xml.h:4
-#: hacks/config/slip.xml.h:4 hacks/config/sphere.xml.h:3
-#: hacks/config/spiral.xml.h:6 hacks/config/squiral.xml.h:9
-#: hacks/config/starfish.xml.h:5 hacks/config/strange.xml.h:5
-#: hacks/config/swirl.xml.h:3 hacks/config/triangle.xml.h:3
+#: hacks/config/petri.xml.h:11 hacks/config/polyominoes.xml.h:5
+#: hacks/config/qix.xml.h:14 hacks/config/rd-bomb.xml.h:12
+#: hacks/config/ripples.xml.h:7 hacks/config/rocks.xml.h:5
+#: hacks/config/rotor.xml.h:6 hacks/config/shadebobs.xml.h:5
+#: hacks/config/sierpinski.xml.h:4 hacks/config/slip.xml.h:4
+#: hacks/config/sphere.xml.h:3 hacks/config/spiral.xml.h:6
+#: hacks/config/squiral.xml.h:9 hacks/config/starfish.xml.h:5
+#: hacks/config/strange.xml.h:5 hacks/config/swirl.xml.h:3
+#: hacks/config/thornbird.xml.h:4 hacks/config/triangle.xml.h:3
 #: hacks/config/vines.xml.h:2 hacks/config/whirlwindwarp.xml.h:4
 #: hacks/config/worm.xml.h:4 hacks/config/xearth.xml.h:12
 #: hacks/config/xfishtank.xml.h:8
@@ -562,14 +863,15 @@ msgstr ""
 msgid "Nine Sided Cells"
 msgstr ""
 
-#: hacks/config/ant.xml.h:10 hacks/config/attraction.xml.h:19
-#: hacks/config/bouboule.xml.h:6 hacks/config/braid.xml.h:9
-#: hacks/config/critical.xml.h:5 hacks/config/crystal.xml.h:10
-#: hacks/config/cynosure.xml.h:7 hacks/config/deco.xml.h:8
-#: hacks/config/deluxe.xml.h:7 hacks/config/demon.xml.h:7
-#: hacks/config/discrete.xml.h:6 hacks/config/drift.xml.h:10
-#: hacks/config/epicycle.xml.h:9 hacks/config/fadeplot.xml.h:7
-#: hacks/config/flag.xml.h:6 hacks/config/flame.xml.h:11
+#: hacks/config/ant.xml.h:10 hacks/config/apollonian.xml.h:8
+#: hacks/config/attraction.xml.h:19 hacks/config/bouboule.xml.h:6
+#: hacks/config/braid.xml.h:9 hacks/config/critical.xml.h:5
+#: hacks/config/crystal.xml.h:10 hacks/config/cynosure.xml.h:7
+#: hacks/config/deco.xml.h:8 hacks/config/deluxe.xml.h:7
+#: hacks/config/demon.xml.h:7 hacks/config/discrete.xml.h:6
+#: hacks/config/drift.xml.h:10 hacks/config/epicycle.xml.h:9
+#: hacks/config/euler2d.xml.h:9 hacks/config/fadeplot.xml.h:7
+#: hacks/config/flag.xml.h:6 hacks/config/flame.xml.h:12
 #: hacks/config/flow.xml.h:9 hacks/config/forest.xml.h:4
 #: hacks/config/galaxy.xml.h:7 hacks/config/grav.xml.h:5
 #: hacks/config/halo.xml.h:6 hacks/config/hopalong.xml.h:17
@@ -579,13 +881,14 @@ msgstr ""
 #: hacks/config/lisa.xml.h:6 hacks/config/lissie.xml.h:7
 #: hacks/config/loop.xml.h:5 hacks/config/moire.xml.h:7
 #: hacks/config/moire2.xml.h:5 hacks/config/mountain.xml.h:6
-#: hacks/config/penrose.xml.h:8 hacks/config/rd-bomb.xml.h:13
-#: hacks/config/rocks.xml.h:6 hacks/config/rotor.xml.h:7
-#: hacks/config/shadebobs.xml.h:6 hacks/config/sierpinski.xml.h:5
-#: hacks/config/slip.xml.h:5 hacks/config/sphere.xml.h:4
-#: hacks/config/spiral.xml.h:8 hacks/config/squiral.xml.h:10
-#: hacks/config/starfish.xml.h:6 hacks/config/strange.xml.h:6
-#: hacks/config/swirl.xml.h:5 hacks/config/triangle.xml.h:4
+#: hacks/config/penrose.xml.h:8 hacks/config/polyominoes.xml.h:6
+#: hacks/config/rd-bomb.xml.h:13 hacks/config/rocks.xml.h:6
+#: hacks/config/rotor.xml.h:7 hacks/config/shadebobs.xml.h:6
+#: hacks/config/sierpinski.xml.h:5 hacks/config/slip.xml.h:5
+#: hacks/config/sphere.xml.h:4 hacks/config/spiral.xml.h:8
+#: hacks/config/squiral.xml.h:10 hacks/config/starfish.xml.h:6
+#: hacks/config/strange.xml.h:6 hacks/config/swirl.xml.h:5
+#: hacks/config/thornbird.xml.h:5 hacks/config/triangle.xml.h:4
 #: hacks/config/vines.xml.h:3 hacks/config/worm.xml.h:5
 #: hacks/config/xearth.xml.h:17 hacks/config/xfishtank.xml.h:9
 msgid "Number of Colors"
@@ -603,30 +906,34 @@ msgstr ""
 msgid "Six Sided Cells"
 msgstr ""
 
-#: hacks/config/ant.xml.h:14 hacks/config/atlantis.xml.h:13
-#: hacks/config/attraction.xml.h:26 hacks/config/blaster.xml.h:8
-#: hacks/config/blitspin.xml.h:7 hacks/config/bouboule.xml.h:8
+#: hacks/config/ant.xml.h:14 hacks/config/apollonian.xml.h:11
+#: hacks/config/atlantis.xml.h:13 hacks/config/attraction.xml.h:26
+#: hacks/config/blaster.xml.h:8 hacks/config/blitspin.xml.h:7
+#: hacks/config/bouboule.xml.h:8 hacks/config/boxed.xml.h:6
 #: hacks/config/braid.xml.h:11 hacks/config/bubble3d.xml.h:5
 #: hacks/config/bubbles.xml.h:10 hacks/config/bumps.xml.h:4
 #: hacks/config/cage.xml.h:4 hacks/config/circuit.xml.h:10
 #: hacks/config/compass.xml.h:4 hacks/config/coral.xml.h:12
 #: hacks/config/critical.xml.h:6 hacks/config/crystal.xml.h:11
-#: hacks/config/cynosure.xml.h:9 hacks/config/dangerball.xml.h:5
-#: hacks/config/decayscreen.xml.h:17 hacks/config/deluxe.xml.h:8
-#: hacks/config/demon.xml.h:8 hacks/config/discrete.xml.h:7
-#: hacks/config/distort.xml.h:11 hacks/config/drift.xml.h:12
-#: hacks/config/engine.xml.h:5 hacks/config/epicycle.xml.h:10
+#: hacks/config/cubenetic.xml.h:22 hacks/config/cynosure.xml.h:9
+#: hacks/config/dangerball.xml.h:5 hacks/config/decayscreen.xml.h:17
+#: hacks/config/deluxe.xml.h:8 hacks/config/demon.xml.h:8
+#: hacks/config/discrete.xml.h:7 hacks/config/distort.xml.h:11
+#: hacks/config/drift.xml.h:12 hacks/config/engine.xml.h:5
+#: hacks/config/epicycle.xml.h:10 hacks/config/euler2d.xml.h:14
 #: hacks/config/extrusion.xml.h:11 hacks/config/fadeplot.xml.h:8
-#: hacks/config/flag.xml.h:7 hacks/config/flame.xml.h:13
-#: hacks/config/flipscreen3d.xml.h:5 hacks/config/flow.xml.h:13
-#: hacks/config/forest.xml.h:5 hacks/config/galaxy.xml.h:10
-#: hacks/config/gears.xml.h:8 hacks/config/gflux.xml.h:12
-#: hacks/config/glplanet.xml.h:6 hacks/config/gltext.xml.h:13
-#: hacks/config/goop.xml.h:10 hacks/config/grav.xml.h:8
-#: hacks/config/greynetic.xml.h:3 hacks/config/halo.xml.h:9
-#: hacks/config/hopalong.xml.h:21 hacks/config/hyperball.xml.h:8
-#: hacks/config/hypercube.xml.h:7 hacks/config/ifs.xml.h:5
-#: hacks/config/interference.xml.h:14 hacks/config/jigsaw.xml.h:5
+#: hacks/config/flag.xml.h:7 hacks/config/flame.xml.h:14
+#: hacks/config/flipscreen3d.xml.h:6 hacks/config/flow.xml.h:13
+#: hacks/config/fluidballs.xml.h:18 hacks/config/forest.xml.h:5
+#: hacks/config/galaxy.xml.h:10 hacks/config/gears.xml.h:7
+#: hacks/config/gflux.xml.h:12 hacks/config/glforestfire.xml.h:14
+#: hacks/config/glplanet.xml.h:6 hacks/config/glsnake.xml.h:12
+#: hacks/config/gltext.xml.h:13 hacks/config/goop.xml.h:10
+#: hacks/config/grav.xml.h:8 hacks/config/greynetic.xml.h:3
+#: hacks/config/halo.xml.h:9 hacks/config/hopalong.xml.h:21
+#: hacks/config/hyperball.xml.h:8 hacks/config/hypercube.xml.h:7
+#: hacks/config/ifs.xml.h:5 hacks/config/interference.xml.h:14
+#: hacks/config/jigsaw.xml.h:5 hacks/config/juggle.xml.h:7
 #: hacks/config/julia.xml.h:8 hacks/config/kaleidescope.xml.h:7
 #: hacks/config/kumppa.xml.h:8 hacks/config/lament.xml.h:6
 #: hacks/config/laser.xml.h:10 hacks/config/lightning.xml.h:5
@@ -638,34 +945,37 @@ msgstr ""
 #: hacks/config/mountain.xml.h:7 hacks/config/munch.xml.h:7
 #: hacks/config/nerverot.xml.h:20 hacks/config/penetrate.xml.h:6
 #: hacks/config/penrose.xml.h:11 hacks/config/petri.xml.h:23
-#: hacks/config/phosphor.xml.h:6 hacks/config/pipes.xml.h:14
-#: hacks/config/pulsar.xml.h:15 hacks/config/pyro.xml.h:13
-#: hacks/config/qix.xml.h:19 hacks/config/rd-bomb.xml.h:17
-#: hacks/config/ripples.xml.h:11 hacks/config/rocks.xml.h:9
-#: hacks/config/rotor.xml.h:11 hacks/config/rubik.xml.h:9
+#: hacks/config/phosphor.xml.h:6 hacks/config/pipes.xml.h:15
+#: hacks/config/polyominoes.xml.h:10 hacks/config/pulsar.xml.h:15
+#: hacks/config/pyro.xml.h:13 hacks/config/qix.xml.h:19
+#: hacks/config/rd-bomb.xml.h:17 hacks/config/ripples.xml.h:11
+#: hacks/config/rocks.xml.h:9 hacks/config/rotor.xml.h:11
+#: hacks/config/rubik.xml.h:9 hacks/config/sballs.xml.h:13
 #: hacks/config/shadebobs.xml.h:9 hacks/config/sierpinski.xml.h:7
 #: hacks/config/sierpinski3d.xml.h:8 hacks/config/slidescreen.xml.h:6
 #: hacks/config/slip.xml.h:7 hacks/config/speedmine.xml.h:13
-#: hacks/config/sphere.xml.h:5 hacks/config/spiral.xml.h:9
-#: hacks/config/spotlight.xml.h:4 hacks/config/sproingies.xml.h:6
-#: hacks/config/squiral.xml.h:14 hacks/config/stairs.xml.h:3
-#: hacks/config/starfish.xml.h:8 hacks/config/starwars.xml.h:12
-#: hacks/config/strange.xml.h:7 hacks/config/superquadrics.xml.h:7
-#: hacks/config/swirl.xml.h:6 hacks/config/t3d.xml.h:11
+#: hacks/config/sphere.xml.h:5 hacks/config/spheremonics.xml.h:19
+#: hacks/config/spiral.xml.h:9 hacks/config/spotlight.xml.h:4
+#: hacks/config/sproingies.xml.h:6 hacks/config/squiral.xml.h:14
+#: hacks/config/stairs.xml.h:3 hacks/config/starfish.xml.h:8
+#: hacks/config/starwars.xml.h:12 hacks/config/strange.xml.h:7
+#: hacks/config/superquadrics.xml.h:7 hacks/config/swirl.xml.h:6
+#: hacks/config/t3d.xml.h:11 hacks/config/thornbird.xml.h:7
 #: hacks/config/triangle.xml.h:5 hacks/config/truchet.xml.h:2
-#: hacks/config/vines.xml.h:4 hacks/config/webcollage.xml.h:7
-#: hacks/config/worm.xml.h:7 hacks/config/xearth.xml.h:22
-#: hacks/config/xfishtank.xml.h:10 hacks/config/xflame.xml.h:5
-#: hacks/config/xjack.xml.h:2 hacks/config/xmatrix.xml.h:13
-#: hacks/config/xmountains.xml.h:4 hacks/config/xrayswarm.xml.h:3
-#: hacks/config/zoom.xml.h:6
+#: hacks/config/twang.xml.h:9 hacks/config/vines.xml.h:4
+#: hacks/config/webcollage.xml.h:7 hacks/config/worm.xml.h:7
+#: hacks/config/xearth.xml.h:22 hacks/config/xfishtank.xml.h:10
+#: hacks/config/xflame.xml.h:5 hacks/config/xjack.xml.h:2
+#: hacks/config/xmatrix.xml.h:13 hacks/config/xmountains.xml.h:4
+#: hacks/config/xrayswarm.xml.h:3 hacks/config/zoom.xml.h:6
 msgid "Slow"
 msgstr "Lento"
 
 #: hacks/config/ant.xml.h:15 hacks/config/attraction.xml.h:27
-#: hacks/config/demon.xml.h:9 hacks/config/discrete.xml.h:8
-#: hacks/config/distort.xml.h:12 hacks/config/fadeplot.xml.h:9
-#: hacks/config/flag.xml.h:8 hacks/config/flow.xml.h:15
+#: hacks/config/cubenetic.xml.h:23 hacks/config/demon.xml.h:9
+#: hacks/config/discrete.xml.h:8 hacks/config/distort.xml.h:12
+#: hacks/config/fadeplot.xml.h:9 hacks/config/flag.xml.h:8
+#: hacks/config/flow.xml.h:15 hacks/config/fluidballs.xml.h:19
 #: hacks/config/hopalong.xml.h:22 hacks/config/interference.xml.h:15
 #: hacks/config/julia.xml.h:9 hacks/config/lissie.xml.h:10
 #: hacks/config/loop.xml.h:8 hacks/config/moire.xml.h:9
@@ -675,28 +985,31 @@ msgstr "Lento"
 msgid "Small"
 msgstr "Pequeño"
 
-#: hacks/config/ant.xml.h:16 hacks/config/attraction.xml.h:28
-#: hacks/config/blaster.xml.h:9 hacks/config/bouboule.xml.h:9
-#: hacks/config/braid.xml.h:12 hacks/config/bubble3d.xml.h:6
-#: hacks/config/bubbles.xml.h:11 hacks/config/bumps.xml.h:5
-#: hacks/config/cage.xml.h:6 hacks/config/circuit.xml.h:11
-#: hacks/config/compass.xml.h:5 hacks/config/coral.xml.h:14
-#: hacks/config/critical.xml.h:7 hacks/config/crystal.xml.h:12
+#: hacks/config/ant.xml.h:16 hacks/config/apollonian.xml.h:12
+#: hacks/config/attraction.xml.h:28 hacks/config/blaster.xml.h:9
+#: hacks/config/bouboule.xml.h:9 hacks/config/braid.xml.h:12
+#: hacks/config/bubble3d.xml.h:6 hacks/config/bubbles.xml.h:11
+#: hacks/config/bumps.xml.h:5 hacks/config/cage.xml.h:6
+#: hacks/config/circuit.xml.h:11 hacks/config/compass.xml.h:5
+#: hacks/config/coral.xml.h:14 hacks/config/critical.xml.h:7
+#: hacks/config/crystal.xml.h:12 hacks/config/cubenetic.xml.h:24
 #: hacks/config/cynosure.xml.h:10 hacks/config/dangerball.xml.h:6
 #: hacks/config/decayscreen.xml.h:18 hacks/config/deluxe.xml.h:9
 #: hacks/config/demon.xml.h:10 hacks/config/discrete.xml.h:9
 #: hacks/config/distort.xml.h:13 hacks/config/drift.xml.h:13
 #: hacks/config/engine.xml.h:6 hacks/config/epicycle.xml.h:11
-#: hacks/config/extrusion.xml.h:13 hacks/config/fadeplot.xml.h:10
-#: hacks/config/flag.xml.h:9 hacks/config/flame.xml.h:14
-#: hacks/config/flipscreen3d.xml.h:6 hacks/config/flow.xml.h:16
+#: hacks/config/euler2d.xml.h:15 hacks/config/extrusion.xml.h:13
+#: hacks/config/fadeplot.xml.h:10 hacks/config/flag.xml.h:9
+#: hacks/config/flame.xml.h:15 hacks/config/flipscreen3d.xml.h:7
+#: hacks/config/flow.xml.h:16 hacks/config/fluidballs.xml.h:20
 #: hacks/config/forest.xml.h:6 hacks/config/galaxy.xml.h:11
-#: hacks/config/glplanet.xml.h:8 hacks/config/gltext.xml.h:15
-#: hacks/config/goop.xml.h:11 hacks/config/grav.xml.h:9
-#: hacks/config/greynetic.xml.h:4 hacks/config/halo.xml.h:10
-#: hacks/config/hopalong.xml.h:23 hacks/config/hyperball.xml.h:9
-#: hacks/config/hypercube.xml.h:8 hacks/config/ifs.xml.h:6
-#: hacks/config/jigsaw.xml.h:7 hacks/config/julia.xml.h:10
+#: hacks/config/glforestfire.xml.h:15 hacks/config/glplanet.xml.h:8
+#: hacks/config/gltext.xml.h:15 hacks/config/goop.xml.h:11
+#: hacks/config/grav.xml.h:9 hacks/config/greynetic.xml.h:4
+#: hacks/config/halo.xml.h:10 hacks/config/hopalong.xml.h:23
+#: hacks/config/hyperball.xml.h:9 hacks/config/hypercube.xml.h:8
+#: hacks/config/ifs.xml.h:6 hacks/config/jigsaw.xml.h:7
+#: hacks/config/juggle.xml.h:8 hacks/config/julia.xml.h:10
 #: hacks/config/kaleidescope.xml.h:8 hacks/config/kumppa.xml.h:9
 #: hacks/config/lament.xml.h:7 hacks/config/laser.xml.h:11
 #: hacks/config/lightning.xml.h:6 hacks/config/lisa.xml.h:9
@@ -707,24 +1020,26 @@ msgstr "Peque
 #: hacks/config/mountain.xml.h:8 hacks/config/munch.xml.h:9
 #: hacks/config/nerverot.xml.h:22 hacks/config/penrose.xml.h:12
 #: hacks/config/petri.xml.h:25 hacks/config/phosphor.xml.h:7
-#: hacks/config/pipes.xml.h:15 hacks/config/pulsar.xml.h:17
-#: hacks/config/qix.xml.h:22 hacks/config/rotor.xml.h:12
-#: hacks/config/rubik.xml.h:11 hacks/config/shadebobs.xml.h:10
+#: hacks/config/pipes.xml.h:16 hacks/config/polyominoes.xml.h:11
+#: hacks/config/pulsar.xml.h:17 hacks/config/qix.xml.h:22
+#: hacks/config/rotor.xml.h:12 hacks/config/rubik.xml.h:11
+#: hacks/config/sballs.xml.h:14 hacks/config/shadebobs.xml.h:10
 #: hacks/config/sierpinski.xml.h:9 hacks/config/sierpinski3d.xml.h:10
 #: hacks/config/slidescreen.xml.h:7 hacks/config/slip.xml.h:9
 #: hacks/config/speedmine.xml.h:15 hacks/config/sphere.xml.h:6
-#: hacks/config/spiral.xml.h:10 hacks/config/spotlight.xml.h:5
-#: hacks/config/sproingies.xml.h:8 hacks/config/squiral.xml.h:16
-#: hacks/config/stairs.xml.h:5 hacks/config/starfish.xml.h:9
-#: hacks/config/strange.xml.h:8 hacks/config/superquadrics.xml.h:9
-#: hacks/config/swirl.xml.h:7 hacks/config/t3d.xml.h:13
+#: hacks/config/spheremonics.xml.h:22 hacks/config/spiral.xml.h:10
+#: hacks/config/spotlight.xml.h:5 hacks/config/sproingies.xml.h:8
+#: hacks/config/squiral.xml.h:16 hacks/config/stairs.xml.h:5
+#: hacks/config/starfish.xml.h:9 hacks/config/strange.xml.h:8
+#: hacks/config/superquadrics.xml.h:9 hacks/config/swirl.xml.h:7
+#: hacks/config/t3d.xml.h:13 hacks/config/thornbird.xml.h:8
 #: hacks/config/triangle.xml.h:6 hacks/config/truchet.xml.h:3
-#: hacks/config/vines.xml.h:5 hacks/config/webcollage.xml.h:8
-#: hacks/config/whirlygig.xml.h:4 hacks/config/worm.xml.h:8
-#: hacks/config/xearth.xml.h:25 hacks/config/xflame.xml.h:6
-#: hacks/config/xjack.xml.h:3 hacks/config/xmatrix.xml.h:16
-#: hacks/config/xmountains.xml.h:5 hacks/config/xrayswarm.xml.h:4
-#: hacks/config/zoom.xml.h:7
+#: hacks/config/twang.xml.h:10 hacks/config/vines.xml.h:5
+#: hacks/config/webcollage.xml.h:8 hacks/config/whirlygig.xml.h:4
+#: hacks/config/worm.xml.h:8 hacks/config/xearth.xml.h:25
+#: hacks/config/xflame.xml.h:6 hacks/config/xjack.xml.h:3
+#: hacks/config/xmatrix.xml.h:16 hacks/config/xmountains.xml.h:5
+#: hacks/config/xrayswarm.xml.h:4 hacks/config/zoom.xml.h:7
 msgid "Speed"
 msgstr "Velocidad"
 
@@ -750,14 +1065,15 @@ msgstr "Truchet"
 msgid "Twelve Sided Cells"
 msgstr ""
 
-#: hacks/config/ant.xml.h:21 hacks/config/attraction.xml.h:32
-#: hacks/config/bouboule.xml.h:11 hacks/config/braid.xml.h:13
-#: hacks/config/critical.xml.h:8 hacks/config/crystal.xml.h:13
-#: hacks/config/cynosure.xml.h:11 hacks/config/deco.xml.h:10
-#: hacks/config/deluxe.xml.h:14 hacks/config/demon.xml.h:13
-#: hacks/config/discrete.xml.h:11 hacks/config/drift.xml.h:14
-#: hacks/config/epicycle.xml.h:13 hacks/config/fadeplot.xml.h:12
-#: hacks/config/flag.xml.h:13 hacks/config/flame.xml.h:15
+#: hacks/config/ant.xml.h:21 hacks/config/apollonian.xml.h:13
+#: hacks/config/attraction.xml.h:32 hacks/config/bouboule.xml.h:11
+#: hacks/config/braid.xml.h:13 hacks/config/critical.xml.h:8
+#: hacks/config/crystal.xml.h:13 hacks/config/cynosure.xml.h:11
+#: hacks/config/deco.xml.h:10 hacks/config/deluxe.xml.h:14
+#: hacks/config/demon.xml.h:13 hacks/config/discrete.xml.h:11
+#: hacks/config/drift.xml.h:14 hacks/config/epicycle.xml.h:13
+#: hacks/config/euler2d.xml.h:17 hacks/config/fadeplot.xml.h:12
+#: hacks/config/flag.xml.h:13 hacks/config/flame.xml.h:16
 #: hacks/config/flow.xml.h:18 hacks/config/forest.xml.h:8
 #: hacks/config/galaxy.xml.h:13 hacks/config/grav.xml.h:11
 #: hacks/config/halo.xml.h:12 hacks/config/hopalong.xml.h:25
@@ -768,18 +1084,52 @@ msgstr ""
 #: hacks/config/loop.xml.h:12 hacks/config/moire.xml.h:11
 #: hacks/config/moire2.xml.h:9 hacks/config/mountain.xml.h:9
 #: hacks/config/nerverot.xml.h:23 hacks/config/penrose.xml.h:13
-#: hacks/config/rd-bomb.xml.h:20 hacks/config/rocks.xml.h:12
-#: hacks/config/rotor.xml.h:13 hacks/config/shadebobs.xml.h:12
-#: hacks/config/sierpinski.xml.h:12 hacks/config/slip.xml.h:12
-#: hacks/config/sphere.xml.h:8 hacks/config/spiral.xml.h:12
-#: hacks/config/squiral.xml.h:18 hacks/config/starfish.xml.h:14
-#: hacks/config/strange.xml.h:11 hacks/config/swirl.xml.h:9
+#: hacks/config/polyominoes.xml.h:12 hacks/config/rd-bomb.xml.h:20
+#: hacks/config/rocks.xml.h:12 hacks/config/rotor.xml.h:13
+#: hacks/config/shadebobs.xml.h:12 hacks/config/sierpinski.xml.h:12
+#: hacks/config/slip.xml.h:12 hacks/config/sphere.xml.h:8
+#: hacks/config/spiral.xml.h:12 hacks/config/squiral.xml.h:18
+#: hacks/config/starfish.xml.h:14 hacks/config/strange.xml.h:11
+#: hacks/config/swirl.xml.h:9 hacks/config/thornbird.xml.h:13
 #: hacks/config/triangle.xml.h:8 hacks/config/vines.xml.h:7
 #: hacks/config/worm.xml.h:9 hacks/config/xearth.xml.h:28
 #: hacks/config/xfishtank.xml.h:11
 msgid "Two"
 msgstr "Dos"
 
+#: hacks/config/apollonian.xml.h:1
+msgid "Apollonian"
+msgstr ""
+
+#: hacks/config/apollonian.xml.h:2
+#, fuzzy
+msgid "Deep"
+msgstr "Más denso"
+
+#: hacks/config/apollonian.xml.h:3
+msgid "Depth"
+msgstr ""
+
+#: hacks/config/apollonian.xml.h:4
+#, fuzzy
+msgid "Draw Labels"
+msgstr "Células"
+
+#: hacks/config/apollonian.xml.h:6
+msgid "Include Alternate Geometries"
+msgstr ""
+
+#: hacks/config/apollonian.xml.h:9
+msgid ""
+"Packs a large circle with smaller circles, demonstrating the Descartes "
+"Circle Theorem. Written by Allan R. Wilks and David Bagley."
+msgstr ""
+
+#: hacks/config/apollonian.xml.h:10
+#, fuzzy
+msgid "Shallow"
+msgstr "Lento"
+
 #: hacks/config/atlantis.xml.h:1
 msgid "Agressive"
 msgstr ""
@@ -820,19 +1170,22 @@ msgstr "Velocidad"
 msgid "Shimmering Water"
 msgstr ""
 
-#: hacks/config/atlantis.xml.h:11 hacks/config/bubble3d.xml.h:4
-#: hacks/config/cage.xml.h:3 hacks/config/circuit.xml.h:9
+#: hacks/config/atlantis.xml.h:11 hacks/config/boxed.xml.h:5
+#: hacks/config/bubble3d.xml.h:4 hacks/config/cage.xml.h:3
+#: hacks/config/circuit.xml.h:9 hacks/config/cubenetic.xml.h:21
 #: hacks/config/dangerball.xml.h:4 hacks/config/engine.xml.h:4
-#: hacks/config/extrusion.xml.h:10 hacks/config/flipscreen3d.xml.h:4
-#: hacks/config/gears.xml.h:7 hacks/config/gflux.xml.h:11
-#: hacks/config/glplanet.xml.h:5 hacks/config/gltext.xml.h:12
-#: hacks/config/lament.xml.h:5 hacks/config/menger.xml.h:15
-#: hacks/config/moebius.xml.h:6 hacks/config/molecule.xml.h:21
-#: hacks/config/morph3d.xml.h:5 hacks/config/pipes.xml.h:13
-#: hacks/config/pulsar.xml.h:14 hacks/config/rubik.xml.h:6
-#: hacks/config/sierpinski3d.xml.h:6 hacks/config/sproingies.xml.h:4
-#: hacks/config/stairs.xml.h:2 hacks/config/starwars.xml.h:11
-#: hacks/config/superquadrics.xml.h:6
+#: hacks/config/extrusion.xml.h:10 hacks/config/flipscreen3d.xml.h:5
+#: hacks/config/fluidballs.xml.h:17 hacks/config/gears.xml.h:6
+#: hacks/config/gflux.xml.h:11 hacks/config/glforestfire.xml.h:13
+#: hacks/config/glplanet.xml.h:5 hacks/config/glsnake.xml.h:10
+#: hacks/config/gltext.xml.h:12 hacks/config/lament.xml.h:5
+#: hacks/config/menger.xml.h:15 hacks/config/moebius.xml.h:6
+#: hacks/config/molecule.xml.h:21 hacks/config/morph3d.xml.h:5
+#: hacks/config/pipes.xml.h:14 hacks/config/pulsar.xml.h:14
+#: hacks/config/rubik.xml.h:6 hacks/config/sballs.xml.h:12
+#: hacks/config/sierpinski3d.xml.h:6 hacks/config/spheremonics.xml.h:18
+#: hacks/config/sproingies.xml.h:4 hacks/config/stairs.xml.h:2
+#: hacks/config/starwars.xml.h:11 hacks/config/superquadrics.xml.h:6
 msgid "Show Frames-per-Second"
 msgstr ""
 
@@ -840,14 +1193,15 @@ msgstr ""
 msgid "Shy"
 msgstr ""
 
-#: hacks/config/atlantis.xml.h:14 hacks/config/cage.xml.h:5
-#: hacks/config/extrusion.xml.h:12 hacks/config/gears.xml.h:9
-#: hacks/config/glplanet.xml.h:7 hacks/config/gltext.xml.h:14
+#: hacks/config/atlantis.xml.h:14 hacks/config/boxed.xml.h:7
+#: hacks/config/cage.xml.h:5 hacks/config/extrusion.xml.h:12
+#: hacks/config/gears.xml.h:8 hacks/config/glplanet.xml.h:7
+#: hacks/config/glsnake.xml.h:13 hacks/config/gltext.xml.h:14
 #: hacks/config/menger.xml.h:17 hacks/config/molecule.xml.h:23
 #: hacks/config/munch.xml.h:8 hacks/config/sierpinski3d.xml.h:9
-#: hacks/config/speedmine.xml.h:14 hacks/config/sproingies.xml.h:7
-#: hacks/config/stairs.xml.h:4 hacks/config/stonerview.xml.h:2
-#: hacks/config/superquadrics.xml.h:8
+#: hacks/config/speedmine.xml.h:14 hacks/config/spheremonics.xml.h:21
+#: hacks/config/sproingies.xml.h:7 hacks/config/stairs.xml.h:4
+#: hacks/config/stonerview.xml.h:2 hacks/config/superquadrics.xml.h:8
 msgid "Solid"
 msgstr "Sólido"
 
@@ -863,15 +1217,18 @@ msgstr ""
 msgid "Whale Speed"
 msgstr "Velocidad"
 
-#: hacks/config/atlantis.xml.h:17 hacks/config/cage.xml.h:8
-#: hacks/config/dangerball.xml.h:11 hacks/config/extrusion.xml.h:19
-#: hacks/config/gears.xml.h:12 hacks/config/glplanet.xml.h:11
-#: hacks/config/gltext.xml.h:18 hacks/config/lament.xml.h:9
-#: hacks/config/menger.xml.h:21 hacks/config/moebius.xml.h:11
-#: hacks/config/molecule.xml.h:26 hacks/config/pulsar.xml.h:20
+#: hacks/config/atlantis.xml.h:17 hacks/config/boxed.xml.h:8
+#: hacks/config/cage.xml.h:8 hacks/config/dangerball.xml.h:11
+#: hacks/config/extrusion.xml.h:19 hacks/config/gears.xml.h:11
+#: hacks/config/glforestfire.xml.h:20 hacks/config/glplanet.xml.h:11
+#: hacks/config/glsnake.xml.h:16 hacks/config/gltext.xml.h:18
+#: hacks/config/lament.xml.h:9 hacks/config/menger.xml.h:21
+#: hacks/config/moebius.xml.h:11 hacks/config/molecule.xml.h:26
+#: hacks/config/pulsar.xml.h:20 hacks/config/sballs.xml.h:18
 #: hacks/config/sierpinski3d.xml.h:12 hacks/config/speedmine.xml.h:18
-#: hacks/config/sproingies.xml.h:10 hacks/config/stairs.xml.h:7
-#: hacks/config/stonerview.xml.h:4 hacks/config/superquadrics.xml.h:11
+#: hacks/config/spheremonics.xml.h:26 hacks/config/sproingies.xml.h:10
+#: hacks/config/stairs.xml.h:7 hacks/config/stonerview.xml.h:4
+#: hacks/config/superquadrics.xml.h:11
 msgid "Wireframe"
 msgstr ""
 
@@ -888,7 +1245,7 @@ msgstr "Cantidad"
 msgid "Ball Mass"
 msgstr ""
 
-#: hacks/config/attraction.xml.h:4
+#: hacks/config/attraction.xml.h:4 hacks/config/fluidballs.xml.h:2
 #, fuzzy
 msgid "Balls"
 msgstr "Barras"
@@ -914,15 +1271,17 @@ msgid "Filled Splines"
 msgstr "Muestra polilíneas coloreadas"
 
 #: hacks/config/attraction.xml.h:10 hacks/config/ccurve.xml.h:9
+#: hacks/config/cubenetic.xml.h:10 hacks/config/euler2d.xml.h:5
 #: hacks/config/flame.xml.h:9 hacks/config/goop.xml.h:6
 #: hacks/config/hopalong.xml.h:10 hacks/config/hyperball.xml.h:3
 #: hacks/config/hypercube.xml.h:3 hacks/config/interference.xml.h:6
 #: hacks/config/kumppa.xml.h:4 hacks/config/nerverot.xml.h:11
 #: hacks/config/petri.xml.h:8 hacks/config/pyro.xml.h:5
 #: hacks/config/qix.xml.h:10 hacks/config/speedmine.xml.h:5
-#: hacks/config/spiral.xml.h:4 hacks/config/squiral.xml.h:6
-#: hacks/config/strange.xml.h:3 hacks/config/superquadrics.xml.h:4
-#: hacks/config/t3d.xml.h:7 hacks/config/wander.xml.h:8
+#: hacks/config/spheremonics.xml.h:6 hacks/config/spiral.xml.h:4
+#: hacks/config/squiral.xml.h:6 hacks/config/strange.xml.h:3
+#: hacks/config/superquadrics.xml.h:4 hacks/config/t3d.xml.h:7
+#: hacks/config/twang.xml.h:5 hacks/config/wander.xml.h:8
 msgid "High"
 msgstr "Alto"
 
@@ -957,26 +1316,30 @@ msgstr "Vines"
 
 #: hacks/config/attraction.xml.h:16 hacks/config/braid.xml.h:6
 #: hacks/config/cynosure.xml.h:5 hacks/config/drift.xml.h:8
-#: hacks/config/galaxy.xml.h:5 hacks/config/laser.xml.h:5
+#: hacks/config/euler2d.xml.h:6 hacks/config/galaxy.xml.h:5
+#: hacks/config/juggle.xml.h:5 hacks/config/laser.xml.h:5
 #: hacks/config/menger.xml.h:4 hacks/config/munch.xml.h:4
 #: hacks/config/nerverot.xml.h:13 hacks/config/petri.xml.h:9
-#: hacks/config/rotor.xml.h:5 hacks/config/shadebobs.xml.h:4
-#: hacks/config/sierpinski3d.xml.h:3 hacks/config/wander.xml.h:10
+#: hacks/config/polyominoes.xml.h:4 hacks/config/rotor.xml.h:5
+#: hacks/config/shadebobs.xml.h:4 hacks/config/sierpinski3d.xml.h:3
+#: hacks/config/spheremonics.xml.h:7 hacks/config/wander.xml.h:10
 #: hacks/config/whirlwindwarp.xml.h:3
 #, fuzzy
 msgid "Long"
 msgstr "Más largo"
 
 #: hacks/config/attraction.xml.h:17 hacks/config/ccurve.xml.h:10
-#: hacks/config/goop.xml.h:7 hacks/config/hopalong.xml.h:14
-#: hacks/config/hyperball.xml.h:6 hacks/config/hypercube.xml.h:5
-#: hacks/config/interference.xml.h:9 hacks/config/kumppa.xml.h:6
-#: hacks/config/nerverot.xml.h:14 hacks/config/petri.xml.h:10
-#: hacks/config/pyro.xml.h:7 hacks/config/qix.xml.h:13
-#: hacks/config/speedmine.xml.h:6 hacks/config/spiral.xml.h:5
+#: hacks/config/cubenetic.xml.h:12 hacks/config/euler2d.xml.h:7
+#: hacks/config/flame.xml.h:10 hacks/config/goop.xml.h:7
+#: hacks/config/hopalong.xml.h:14 hacks/config/hyperball.xml.h:6
+#: hacks/config/hypercube.xml.h:5 hacks/config/interference.xml.h:9
+#: hacks/config/kumppa.xml.h:6 hacks/config/nerverot.xml.h:14
+#: hacks/config/petri.xml.h:10 hacks/config/pyro.xml.h:7
+#: hacks/config/qix.xml.h:13 hacks/config/speedmine.xml.h:6
+#: hacks/config/spheremonics.xml.h:8 hacks/config/spiral.xml.h:5
 #: hacks/config/squiral.xml.h:8 hacks/config/strange.xml.h:4
 #: hacks/config/superquadrics.xml.h:5 hacks/config/t3d.xml.h:8
-#: hacks/config/wander.xml.h:11
+#: hacks/config/twang.xml.h:7 hacks/config/wander.xml.h:11
 msgid "Low"
 msgstr "Bajo"
 
@@ -1004,12 +1367,13 @@ msgstr "Punto de activaci
 
 #: hacks/config/attraction.xml.h:25 hacks/config/braid.xml.h:10
 #: hacks/config/cynosure.xml.h:8 hacks/config/drift.xml.h:11
-#: hacks/config/galaxy.xml.h:8 hacks/config/laser.xml.h:9
-#: hacks/config/menger.xml.h:14 hacks/config/munch.xml.h:6
-#: hacks/config/nerverot.xml.h:19 hacks/config/petri.xml.h:22
+#: hacks/config/euler2d.xml.h:12 hacks/config/galaxy.xml.h:8
+#: hacks/config/laser.xml.h:9 hacks/config/menger.xml.h:14
+#: hacks/config/munch.xml.h:6 hacks/config/nerverot.xml.h:19
+#: hacks/config/petri.xml.h:22 hacks/config/polyominoes.xml.h:9
 #: hacks/config/rotor.xml.h:9 hacks/config/shadebobs.xml.h:8
-#: hacks/config/sierpinski3d.xml.h:5 hacks/config/wander.xml.h:12
-#: hacks/config/whirlwindwarp.xml.h:6
+#: hacks/config/sierpinski3d.xml.h:5 hacks/config/spheremonics.xml.h:17
+#: hacks/config/wander.xml.h:12 hacks/config/whirlwindwarp.xml.h:6
 #, fuzzy
 msgid "Short"
 msgstr "Más corto"
@@ -1024,7 +1388,8 @@ msgstr "Sproingies"
 msgid "Tails"
 msgstr "Rastros"
 
-#: hacks/config/attraction.xml.h:31
+#: hacks/config/attraction.xml.h:31 hacks/config/euler2d.xml.h:16
+#: hacks/config/juggle.xml.h:9
 msgid "Trail Length"
 msgstr ""
 
@@ -1041,10 +1406,12 @@ msgid ""
 msgstr ""
 
 #: hacks/config/blaster.xml.h:4 hacks/config/bouboule.xml.h:4
-#: hacks/config/coral.xml.h:8 hacks/config/flame.xml.h:7
-#: hacks/config/kaleidescope.xml.h:3 hacks/config/lisa.xml.h:3
-#: hacks/config/pedal.xml.h:4 hacks/config/petri.xml.h:7
-#: hacks/config/qix.xml.h:8 hacks/config/whirlwindwarp.xml.h:1
+#: hacks/config/coral.xml.h:8 hacks/config/cubenetic.xml.h:9
+#: hacks/config/euler2d.xml.h:4 hacks/config/flame.xml.h:7
+#: hacks/config/fluidballs.xml.h:4 hacks/config/kaleidescope.xml.h:3
+#: hacks/config/lisa.xml.h:3 hacks/config/pedal.xml.h:4
+#: hacks/config/petri.xml.h:7 hacks/config/qix.xml.h:8
+#: hacks/config/thornbird.xml.h:3 hacks/config/whirlwindwarp.xml.h:1
 #: hacks/config/xfishtank.xml.h:4
 msgid "Few"
 msgstr ""
@@ -1118,6 +1485,25 @@ msgid ""
 "spots painted on its invisible surface. Written by Jeremie Petit."
 msgstr ""
 
+#: hacks/config/boxed.xml.h:1 hacks/config/gears.xml.h:1
+#: hacks/config/gflux.xml.h:1 hacks/config/pyro.xml.h:1
+#: hacks/config/rd-bomb.xml.h:6 hacks/config/rocks.xml.h:1
+#: hacks/config/starwars.xml.h:1 hacks/config/xfishtank.xml.h:1
+#, fuzzy
+msgid "Animation Speed"
+msgstr "Animar"
+
+#: hacks/config/boxed.xml.h:2
+#, fuzzy
+msgid "Boxed"
+msgstr "BSoD"
+
+#: hacks/config/boxed.xml.h:3
+msgid ""
+"Draws a box full of 3D bouncing balls that explode. Written by Sander van "
+"Grieken."
+msgstr ""
+
 #: hacks/config/braid.xml.h:1
 msgid "Braid"
 msgstr "Galones"
@@ -1132,15 +1518,17 @@ msgstr ""
 #: hacks/config/ccurve.xml.h:7 hacks/config/coral.xml.h:6
 #: hacks/config/cynosure.xml.h:3 hacks/config/deco.xml.h:4
 #: hacks/config/drift.xml.h:2 hacks/config/epicycle.xml.h:3
-#: hacks/config/flame.xml.h:5 hacks/config/galaxy.xml.h:2
+#: hacks/config/euler2d.xml.h:1 hacks/config/flame.xml.h:5
+#: hacks/config/galaxy.xml.h:2 hacks/config/glsnake.xml.h:4
 #: hacks/config/helix.xml.h:3 hacks/config/hopalong.xml.h:2
 #: hacks/config/imsmap.xml.h:6 hacks/config/laser.xml.h:2
 #: hacks/config/menger.xml.h:2 hacks/config/moire.xml.h:3
 #: hacks/config/molecule.xml.h:9 hacks/config/munch.xml.h:2
 #: hacks/config/nerverot.xml.h:8 hacks/config/pedal.xml.h:3
-#: hacks/config/penrose.xml.h:5 hacks/config/rorschach.xml.h:3
-#: hacks/config/rotzoomer.xml.h:5 hacks/config/shadebobs.xml.h:2
-#: hacks/config/sierpinski3d.xml.h:1 hacks/config/starfish.xml.h:2
+#: hacks/config/penrose.xml.h:5 hacks/config/polyominoes.xml.h:1
+#: hacks/config/rorschach.xml.h:3 hacks/config/rotzoomer.xml.h:5
+#: hacks/config/shadebobs.xml.h:2 hacks/config/sierpinski3d.xml.h:1
+#: hacks/config/spheremonics.xml.h:4 hacks/config/starfish.xml.h:2
 #: hacks/config/vidwhacker.xml.h:3 hacks/config/wander.xml.h:7
 #: hacks/config/xspirograph.xml.h:3
 msgid "Duration"
@@ -1193,7 +1581,7 @@ msgid ""
 msgstr ""
 
 #: hacks/config/bsod.xml.h:9
-msgid "MacOS"
+msgid "Mac Bomb"
 msgstr ""
 
 #: hacks/config/bsod.xml.h:10
@@ -1210,20 +1598,29 @@ msgid "SCO"
 msgstr ""
 
 #: hacks/config/bsod.xml.h:13
+msgid "Sad Mac"
+msgstr ""
+
+#: hacks/config/bsod.xml.h:14
 #, fuzzy
 msgid "Solaris"
 msgstr "Estrella de mar"
 
-#: hacks/config/bsod.xml.h:14
+#: hacks/config/bsod.xml.h:15
 msgid "Sparc Linux"
 msgstr ""
 
-#: hacks/config/bsod.xml.h:15
+#: hacks/config/bsod.xml.h:16
 #, fuzzy
 msgid "Windows"
 msgstr "Window Maker"
 
-#: hacks/config/bsod.xml.h:16
+#: hacks/config/bsod.xml.h:17
+#, fuzzy
+msgid "Windows 2000"
+msgstr "Window Maker"
+
+#: hacks/config/bsod.xml.h:18
 #, fuzzy
 msgid "Windows NT"
 msgstr "Window Maker"
@@ -1365,7 +1762,7 @@ msgstr "Color muerto"
 msgid "Parts"
 msgstr "Barras"
 
-#: hacks/config/circuit.xml.h:7 hacks/config/flipscreen3d.xml.h:3
+#: hacks/config/circuit.xml.h:7 hacks/config/flipscreen3d.xml.h:4
 #, fuzzy
 msgid "Rotate"
 msgstr "Rotación"
@@ -1387,7 +1784,7 @@ msgstr "Compass"
 
 #: hacks/config/compass.xml.h:2 hacks/config/deluxe.xml.h:3
 #: hacks/config/interference.xml.h:4 hacks/config/kumppa.xml.h:2
-#: hacks/config/nerverot.xml.h:6
+#: hacks/config/nerverot.xml.h:6 hacks/config/pipes.xml.h:4
 msgid "Double Buffer"
 msgstr ""
 
@@ -1454,7 +1851,7 @@ msgstr "Colores"
 #: hacks/config/cosmos.xml.h:2
 msgid ""
 "Draws fireworks and zooming, fading flares. By Tom Campbell. You can find it "
-"at <http://www.mindspring.com/~campbell/cosmos/>"
+"at &lt;http://cosmos.dnsalias.net/cosmos/&gt;"
 msgstr ""
 
 #: hacks/config/critical.xml.h:1
@@ -1474,7 +1871,7 @@ msgstr "Al centro de la pantalla"
 
 #: hacks/config/crystal.xml.h:2 hacks/config/deluxe.xml.h:1
 #: hacks/config/fadeplot.xml.h:1 hacks/config/flow.xml.h:3
-#: hacks/config/galaxy.xml.h:1 hacks/config/gears.xml.h:2
+#: hacks/config/galaxy.xml.h:1 hacks/config/glforestfire.xml.h:1
 #: hacks/config/grav.xml.h:1 hacks/config/julia.xml.h:1
 #: hacks/config/laser.xml.h:1 hacks/config/lisa.xml.h:1
 #: hacks/config/lissie.xml.h:2 hacks/config/morph3d.xml.h:2
@@ -1497,7 +1894,8 @@ msgstr "Cristal"
 msgid "Draw Cell"
 msgstr "Células"
 
-#: hacks/config/crystal.xml.h:5 hacks/config/xearth.xml.h:6
+#: hacks/config/crystal.xml.h:5 hacks/config/spheremonics.xml.h:3
+#: hacks/config/xearth.xml.h:6
 msgid "Draw Grid"
 msgstr ""
 
@@ -1517,6 +1915,106 @@ msgstr ""
 msgid "Vertical Symmetries"
 msgstr "Degradado vertical"
 
+#: hacks/config/cubenetic.xml.h:1
+msgid "Boxes"
+msgstr ""
+
+#: hacks/config/cubenetic.xml.h:2
+#, fuzzy
+msgid "Cubenetic"
+msgstr "Grisnética"
+
+#: hacks/config/cubenetic.xml.h:3
+#, fuzzy
+msgid "Display Solid Colors"
+msgstr "Muestra una pantalla de sonar."
+
+#: hacks/config/cubenetic.xml.h:4
+#, fuzzy
+msgid "Display Surface Patterns"
+msgstr "Muestra estática."
+
+#: hacks/config/cubenetic.xml.h:5
+#, fuzzy
+msgid "Display Wireframe"
+msgstr "Mostrar un juego de acción"
+
+#: hacks/config/cubenetic.xml.h:6 hacks/config/gltext.xml.h:2
+#: hacks/config/menger.xml.h:1 hacks/config/molecule.xml.h:4
+#: hacks/config/spheremonics.xml.h:1
+msgid "Don't Rotate"
+msgstr ""
+
+#: hacks/config/cubenetic.xml.h:7
+msgid ""
+"Draws a pulsating set of overlapping boxes with ever-chaning blobby patterns "
+"undulating across their surfaces. It's sort of a cubist Lavalite. Written by "
+"Jamie Zawinski."
+msgstr ""
+
+#: hacks/config/cubenetic.xml.h:14 hacks/config/gltext.xml.h:5
+#: hacks/config/menger.xml.h:7 hacks/config/molecule.xml.h:14
+#: hacks/config/spheremonics.xml.h:10
+msgid "Rotate around X and Y axes"
+msgstr ""
+
+#: hacks/config/cubenetic.xml.h:15 hacks/config/gltext.xml.h:6
+#: hacks/config/menger.xml.h:8 hacks/config/molecule.xml.h:15
+#: hacks/config/spheremonics.xml.h:11
+msgid "Rotate around X and Z axes"
+msgstr ""
+
+#: hacks/config/cubenetic.xml.h:16 hacks/config/gltext.xml.h:7
+#: hacks/config/menger.xml.h:9 hacks/config/molecule.xml.h:16
+#: hacks/config/spheremonics.xml.h:12
+msgid "Rotate around X axis"
+msgstr ""
+
+#: hacks/config/cubenetic.xml.h:17 hacks/config/gltext.xml.h:8
+#: hacks/config/menger.xml.h:10 hacks/config/molecule.xml.h:17
+#: hacks/config/spheremonics.xml.h:13
+msgid "Rotate around Y and Z axes"
+msgstr ""
+
+#: hacks/config/cubenetic.xml.h:18 hacks/config/gltext.xml.h:9
+#: hacks/config/menger.xml.h:11 hacks/config/molecule.xml.h:18
+#: hacks/config/spheremonics.xml.h:14
+msgid "Rotate around Y axis"
+msgstr ""
+
+#: hacks/config/cubenetic.xml.h:19 hacks/config/gltext.xml.h:10
+#: hacks/config/menger.xml.h:12 hacks/config/molecule.xml.h:19
+#: hacks/config/spheremonics.xml.h:15
+msgid "Rotate around Z axis"
+msgstr ""
+
+#: hacks/config/cubenetic.xml.h:20 hacks/config/gltext.xml.h:11
+#: hacks/config/menger.xml.h:13 hacks/config/molecule.xml.h:20
+#: hacks/config/spheremonics.xml.h:16
+msgid "Rotate around all three axes"
+msgstr ""
+
+#: hacks/config/cubenetic.xml.h:25
+msgid "Surface Pattern Complexity"
+msgstr ""
+
+#: hacks/config/cubenetic.xml.h:26
+msgid "Surface Pattern Overlap"
+msgstr ""
+
+#: hacks/config/cubenetic.xml.h:27
+msgid "Surface Pattern Speed"
+msgstr ""
+
+#: hacks/config/cubenetic.xml.h:28 hacks/config/dangerball.xml.h:10
+#: hacks/config/engine.xml.h:8 hacks/config/glforestfire.xml.h:19
+#: hacks/config/gltext.xml.h:17 hacks/config/menger.xml.h:20
+#: hacks/config/molecule.xml.h:25 hacks/config/spheremonics.xml.h:25
+#: hacks/config/wander.xml.h:15
+#, fuzzy
+msgid "Wander"
+msgstr "selector:"
+
 #: hacks/config/cynosure.xml.h:1
 msgid ""
 "A hack similar to `greynetic', but less frenetic. The first implementation "
@@ -1548,13 +2046,6 @@ msgstr "Cantidad"
 msgid "Spike Growth"
 msgstr ""
 
-#: hacks/config/dangerball.xml.h:10 hacks/config/engine.xml.h:8
-#: hacks/config/gltext.xml.h:17 hacks/config/menger.xml.h:20
-#: hacks/config/molecule.xml.h:25 hacks/config/wander.xml.h:15
-#, fuzzy
-msgid "Wander"
-msgstr "selector:"
-
 #: hacks/config/decayscreen.xml.h:1
 #, fuzzy
 msgid "DecayScreen"
@@ -1665,13 +2156,13 @@ msgid "Deluxe"
 msgstr "Deluxe"
 
 #: hacks/config/deluxe.xml.h:10 hacks/config/lmorph.xml.h:13
-#: hacks/config/starfish.xml.h:11
+#: hacks/config/starfish.xml.h:11 hacks/config/thornbird.xml.h:9
 #, fuzzy
 msgid "Thick"
 msgstr "Grosor"
 
 #: hacks/config/deluxe.xml.h:11 hacks/config/lmorph.xml.h:14
-#: hacks/config/starfish.xml.h:12
+#: hacks/config/starfish.xml.h:12 hacks/config/thornbird.xml.h:11
 #, fuzzy
 msgid "Thin"
 msgstr "Más fino"
@@ -1750,7 +2241,8 @@ msgstr "Tama
 msgid "Magnify"
 msgstr ""
 
-#: hacks/config/distort.xml.h:9 hacks/config/lament.xml.h:4
+#: hacks/config/distort.xml.h:9 hacks/config/glforestfire.xml.h:10
+#: hacks/config/lament.xml.h:4 hacks/config/sballs.xml.h:6
 #, fuzzy
 msgid "Normal"
 msgstr " Normal"
@@ -1774,7 +2266,7 @@ msgstr ""
 #: hacks/config/distort.xml.h:16 hacks/config/moire.xml.h:12
 #: hacks/config/rd-bomb.xml.h:21 hacks/config/ripples.xml.h:15
 #: hacks/config/rotzoomer.xml.h:10 hacks/config/swirl.xml.h:10
-#: hacks/config/xflame.xml.h:7
+#: hacks/config/twang.xml.h:15 hacks/config/xflame.xml.h:7
 msgid "Use Shared Memory"
 msgstr ""
 
@@ -1819,8 +2311,8 @@ msgid ""
 "the next animation. Periodically it uploades completed frames to the server, "
 "where they are compressed for distribution to all clients. This program is "
 "recommended only if you have a high bandwidth connection to the Internet. By "
-"Scott Draves. You can find it at <http://www.electricsheep.org/>. See that "
-"web site for configuration information."
+"Scott Draves. You can find it at &lt;http://www.electricsheep.org/&gt;. See "
+"that web site for configuration information."
 msgstr ""
 
 #: hacks/config/engine.xml.h:1
@@ -1853,6 +2345,26 @@ msgstr ""
 "Este salvapantalla dibuja la trayectoria de un punto sobre un círculo en "
 "rotación que se desplaza sobre otro círculo"
 
+#: hacks/config/euler2d.xml.h:2
+msgid "Euler2d"
+msgstr ""
+
+#: hacks/config/euler2d.xml.h:10 hacks/config/whirlwindwarp.xml.h:5
+#, fuzzy
+msgid "Particles"
+msgstr "Partículas en pantalla"
+
+#: hacks/config/euler2d.xml.h:11
+#, fuzzy
+msgid "Power"
+msgstr "Lento"
+
+#: hacks/config/euler2d.xml.h:13
+msgid ""
+"Simulates two dimensional Incompressible Inviscid Fluid Flow. Written by "
+"Stephen Montgomery-Smith."
+msgstr ""
+
 #: hacks/config/extrusion.xml.h:1
 msgid ""
 "Draws various rotating extruded shapes that twist around, lengthen, and turn "
@@ -1979,7 +2491,7 @@ msgstr ""
 msgid "Flame"
 msgstr "Xflame"
 
-#: hacks/config/flame.xml.h:12
+#: hacks/config/flame.xml.h:13
 #, fuzzy
 msgid "Number of Fractals"
 msgstr "Cantidad de rastros."
@@ -1989,6 +2501,12 @@ msgstr "Cantidad de rastros."
 msgid "Flipscreen3d"
 msgstr "Slidescreen"
 
+#: hacks/config/flipscreen3d.xml.h:3
+msgid ""
+"Grabs an image of the desktop, turns it into a GL texture map, and spins it "
+"around and deforms it in various ways. Written by Ben Buxton."
+msgstr ""
+
 #: hacks/config/flow.xml.h:1
 msgid "Allow 2D Attractors"
 msgstr ""
@@ -2027,7 +2545,77 @@ msgstr ""
 msgid "Zoom In and Out"
 msgstr ""
 
-#: hacks/config/forest.xml.h:2
+#: hacks/config/fluidballs.xml.h:1
+#, fuzzy
+msgid "Ball Size"
+msgstr "Tamaño"
+
+#: hacks/config/fluidballs.xml.h:5
+#, fuzzy
+msgid "FluidBalls"
+msgstr "Barras"
+
+#: hacks/config/fluidballs.xml.h:6
+msgid "Freefall"
+msgstr ""
+
+#: hacks/config/fluidballs.xml.h:7 hacks/config/twang.xml.h:4
+#, fuzzy
+msgid "Friction"
+msgstr "Atracción"
+
+#: hacks/config/fluidballs.xml.h:8
+#, fuzzy
+msgid "Glass"
+msgstr "Engranajes"
+
+#: hacks/config/fluidballs.xml.h:9 hacks/config/qix.xml.h:9
+#: hacks/config/speedmine.xml.h:4
+#, fuzzy
+msgid "Gravity"
+msgstr "Gravedad"
+
+#: hacks/config/fluidballs.xml.h:10
+msgid "Hurricane"
+msgstr ""
+
+#: hacks/config/fluidballs.xml.h:11
+msgid "Jupiter"
+msgstr ""
+
+#: hacks/config/fluidballs.xml.h:14
+msgid ""
+"Models the physics of bouncing balls, or of particles in a gas or fluid, "
+"depending on the settings. If \"Shake Box\" is selected, then every now and "
+"then, the box will be rotated, changing which direction is down (in order to "
+"keep the settled balls in motion.)"
+msgstr ""
+
+#: hacks/config/fluidballs.xml.h:15
+#, fuzzy
+msgid "Sandpaper"
+msgstr "Sonar"
+
+#: hacks/config/fluidballs.xml.h:16
+#, fuzzy
+msgid "Shake Box"
+msgstr "Shadebobs"
+
+#: hacks/config/fluidballs.xml.h:21 hacks/config/glforestfire.xml.h:16
+#, fuzzy
+msgid "Still"
+msgstr "Revolver"
+
+#: hacks/config/fluidballs.xml.h:22
+msgid "Various Ball Sizes"
+msgstr ""
+
+#: hacks/config/fluidballs.xml.h:23
+#, fuzzy
+msgid "Wind"
+msgstr "Gordo "
+
+#: hacks/config/forest.xml.h:2 hacks/config/glforestfire.xml.h:6
 msgid "Forest"
 msgstr "Bosque"
 
@@ -2056,35 +2644,27 @@ msgid ""
 "Siegmund."
 msgstr ""
 
-#: hacks/config/gears.xml.h:1 hacks/config/gflux.xml.h:1
-#: hacks/config/pyro.xml.h:1 hacks/config/rd-bomb.xml.h:6
-#: hacks/config/rocks.xml.h:1 hacks/config/starwars.xml.h:1
-#: hacks/config/xfishtank.xml.h:1
-#, fuzzy
-msgid "Animation Speed"
-msgstr "Animar"
-
-#: hacks/config/gears.xml.h:4
+#: hacks/config/gears.xml.h:3
 msgid "Gears"
 msgstr "Engranajes"
 
-#: hacks/config/gears.xml.h:5
+#: hacks/config/gears.xml.h:4
 msgid "Planetary Gear System"
 msgstr ""
 
-#: hacks/config/gears.xml.h:6 hacks/config/goop.xml.h:9
+#: hacks/config/gears.xml.h:5 hacks/config/goop.xml.h:9
 #, fuzzy
 msgid "Rotational Speed"
 msgstr "Rotación"
 
-#: hacks/config/gears.xml.h:10
+#: hacks/config/gears.xml.h:9
 msgid ""
 "This draws sets of turning, interlocking gears, rotating in three "
 "dimensions. Another GL hack, by Danny Sung, Brian Paul, Ed Mackey, and Jamie "
 "Zawinski."
 msgstr ""
 
-#: hacks/config/gears.xml.h:11
+#: hacks/config/gears.xml.h:10
 msgid "Three Gear System"
 msgstr ""
 
@@ -2115,21 +2695,71 @@ msgstr "Densidad"
 
 #: hacks/config/gflux.xml.h:10
 #, fuzzy
-msgid "Screen Image"
-msgstr "Salvapantalla"
+msgid "Screen Image"
+msgstr "Salvapantalla"
+
+#: hacks/config/gflux.xml.h:14 hacks/config/interference.xml.h:18
+#, fuzzy
+msgid "Wave Speed"
+msgstr "Velocidad"
+
+#: hacks/config/gflux.xml.h:15
+msgid "Waves"
+msgstr ""
+
+#: hacks/config/gflux.xml.h:16
+msgid "Wire Mesh"
+msgstr ""
+
+#: hacks/config/glforestfire.xml.h:2
+#, fuzzy
+msgid "Desert"
+msgstr "Más denso"
+
+#: hacks/config/glforestfire.xml.h:3
+msgid ""
+"Draws an animation of sprinkling fire-like 3D triangles in a landscape "
+"filled with trees. Requires OpenGL, and a machine with fast hardware support "
+"for texture maps. Written by Eric Lassauge &lt;lassauge@mail.dotcom.fr&gt;."
+msgstr ""
+
+#: hacks/config/glforestfire.xml.h:5
+msgid "Fog"
+msgstr ""
+
+#: hacks/config/glforestfire.xml.h:7
+#, fuzzy
+msgid "GLForestFire"
+msgstr "Bosque"
+
+#: hacks/config/glforestfire.xml.h:8
+#, fuzzy
+msgid "Huge Fire"
+msgstr "Tipo de letra del Usuario"
+
+#: hacks/config/glforestfire.xml.h:9
+msgid "No shadow"
+msgstr ""
+
+#: hacks/config/glforestfire.xml.h:11
+#, fuzzy
+msgid "Number of trees"
+msgstr "Número de ciclos"
 
-#: hacks/config/gflux.xml.h:14 hacks/config/interference.xml.h:18
+#: hacks/config/glforestfire.xml.h:12
 #, fuzzy
-msgid "Wave Speed"
-msgstr "Velocidad"
+msgid "Rain"
+msgstr "Rotación"
 
-#: hacks/config/gflux.xml.h:15
-msgid "Waves"
+#: hacks/config/glforestfire.xml.h:17
+msgid "Track mouse"
 msgstr ""
 
-#: hacks/config/gflux.xml.h:16
-msgid "Wire Mesh"
-msgstr ""
+#: hacks/config/glforestfire.xml.h:18 hacks/config/lament.xml.h:8
+#: hacks/config/sballs.xml.h:17
+#, fuzzy
+msgid "Untextured"
+msgstr "Centrado"
 
 #: hacks/config/glplanet.xml.h:1
 msgid ""
@@ -2147,57 +2777,73 @@ msgstr "Planeta GL"
 msgid "Image File"
 msgstr ""
 
-#: hacks/config/gltext.xml.h:1
+#: hacks/config/glsnake.xml.h:1
+msgid "1"
+msgstr ""
+
+#: hacks/config/glsnake.xml.h:2 hacks/config/penrose.xml.h:2
+#, fuzzy
+msgid "30 Seconds"
+msgstr "Segundos"
+
+#: hacks/config/glsnake.xml.h:3
 msgid ""
-"Displays a few lines of text spinning around in a solid 3D font. Written by "
-"Jamie Zawinski."
+"Draws a simulation of the Rubik's Snake puzzle. Written by Jamie Wilkinson, "
+"Andrew Bennetts, and Peter Aylett."
 msgstr ""
 
-#: hacks/config/gltext.xml.h:2 hacks/config/menger.xml.h:1
-#: hacks/config/molecule.xml.h:4
-msgid "Don't Rotate"
+#: hacks/config/glsnake.xml.h:6
+msgid "GlSnake"
 msgstr ""
 
-#: hacks/config/gltext.xml.h:4
+#: hacks/config/glsnake.xml.h:7
 #, fuzzy
-msgid "GLText"
-msgstr "Izquierda"
+msgid "Loose"
+msgstr "Puntos"
 
-#: hacks/config/gltext.xml.h:5 hacks/config/menger.xml.h:7
-#: hacks/config/molecule.xml.h:14
-msgid "Rotate around X and Y axes"
+#: hacks/config/glsnake.xml.h:8
+msgid "Packing"
 msgstr ""
 
-#: hacks/config/gltext.xml.h:6 hacks/config/menger.xml.h:8
-#: hacks/config/molecule.xml.h:15
-msgid "Rotate around X and Z axes"
-msgstr ""
+#: hacks/config/glsnake.xml.h:9
+#, fuzzy
+msgid "Scary Colors"
+msgstr "Color secundario"
 
-#: hacks/config/gltext.xml.h:7 hacks/config/menger.xml.h:9
-#: hacks/config/molecule.xml.h:16
-msgid "Rotate around X axis"
+#: hacks/config/glsnake.xml.h:11
+msgid "Show Labels"
 msgstr ""
 
-#: hacks/config/gltext.xml.h:8 hacks/config/menger.xml.h:10
-#: hacks/config/molecule.xml.h:17
-msgid "Rotate around Y and Z axes"
-msgstr ""
+#: hacks/config/glsnake.xml.h:14
+#, fuzzy
+msgid "Tight"
+msgstr "Derecha"
 
-#: hacks/config/gltext.xml.h:9 hacks/config/menger.xml.h:11
-#: hacks/config/molecule.xml.h:18
-msgid "Rotate around Y axis"
+#: hacks/config/glsnake.xml.h:15 hacks/config/rocks.xml.h:13
+msgid "Velocity"
 msgstr ""
 
-#: hacks/config/gltext.xml.h:10 hacks/config/menger.xml.h:12
-#: hacks/config/molecule.xml.h:19
-msgid "Rotate around Z axis"
-msgstr ""
+#: hacks/config/glsnake.xml.h:17
+#, fuzzy
+msgid "Y Rotation"
+msgstr "Rotación"
 
-#: hacks/config/gltext.xml.h:11 hacks/config/menger.xml.h:13
-#: hacks/config/molecule.xml.h:20
-msgid "Rotate around all three axes"
+#: hacks/config/glsnake.xml.h:18
+#, fuzzy
+msgid "Z Rotation"
+msgstr "Rotación"
+
+#: hacks/config/gltext.xml.h:1
+msgid ""
+"Displays a few lines of text spinning around in a solid 3D font. Written by "
+"Jamie Zawinski."
 msgstr ""
 
+#: hacks/config/gltext.xml.h:4
+#, fuzzy
+msgid "GLText"
+msgstr "Izquierda"
+
 #: hacks/config/gltext.xml.h:16 hacks/config/noseguy.xml.h:5
 #, fuzzy
 msgid "Text"
@@ -2210,7 +2856,7 @@ msgstr ""
 #: hacks/config/goban.xml.h:2
 msgid ""
 "Replays historical games of go (aka wei-chi and baduk) on the screen. By "
-"Scott Draves. You can find it at <http://www.draves.org/goban/>."
+"Scott Draves. You can find it at &lt;http://www.draves.org/goban/&gt;."
 msgstr ""
 
 #: hacks/config/goop.xml.h:1
@@ -2560,6 +3206,22 @@ msgid ""
 "puzzle is solved. Written by Jamie Zawinski."
 msgstr ""
 
+#: hacks/config/juggle.xml.h:1
+msgid "Checkered Balls"
+msgstr ""
+
+#: hacks/config/juggle.xml.h:2
+msgid "Draws a juggling stick-man. Written by Tim Auckland."
+msgstr ""
+
+#: hacks/config/juggle.xml.h:4
+msgid "Juggle"
+msgstr ""
+
+#: hacks/config/juggle.xml.h:6 hacks/config/pipes.xml.h:10
+msgid "None"
+msgstr "Ninguno"
+
 #: hacks/config/julia.xml.h:3 hacks/config/rorschach.xml.h:4
 msgid "Iterations"
 msgstr "Iteraciones"
@@ -2628,11 +3290,6 @@ msgstr ""
 msgid "Lament"
 msgstr "Lament"
 
-#: hacks/config/lament.xml.h:8
-#, fuzzy
-msgid "Untextured"
-msgstr "Centrado"
-
 #: hacks/config/laser.xml.h:4
 msgid "Laser"
 msgstr "Láser"
@@ -2830,23 +3487,6 @@ msgstr "S
 msgid "Solid Objects"
 msgstr ""
 
-#: hacks/config/moire2.xml.h:1
-msgid ""
-"Another example of the fun you can have with moire interference patterns; "
-"this hack generates fields of concentric circles or ovals, and combines the "
-"planes with various operations. The planes are moving independently of one "
-"another, causing the interference lines to ``spray.'' Written by Jamie "
-"Zawinski."
-msgstr ""
-
-#: hacks/config/moire2.xml.h:4
-msgid "Moire2"
-msgstr "Moire2"
-
-#: hacks/config/moire2.xml.h:8
-msgid "Thickness"
-msgstr "Grosor"
-
 #: hacks/config/moire.xml.h:6
 msgid "Moire"
 msgstr "Moire"
@@ -2866,6 +3506,23 @@ msgid ""
 "hack metric''."
 msgstr ""
 
+#: hacks/config/moire2.xml.h:1
+msgid ""
+"Another example of the fun you can have with moire interference patterns; "
+"this hack generates fields of concentric circles or ovals, and combines the "
+"planes with various operations. The planes are moving independently of one "
+"another, causing the interference lines to ``spray.'' Written by Jamie "
+"Zawinski."
+msgstr ""
+
+#: hacks/config/moire2.xml.h:4
+msgid "Moire2"
+msgstr "Moire2"
+
+#: hacks/config/moire2.xml.h:8 hacks/config/thornbird.xml.h:10
+msgid "Thickness"
+msgstr "Grosor"
+
 #: hacks/config/molecule.xml.h:3
 msgid "Describe Molecule"
 msgstr ""
@@ -2879,7 +3536,7 @@ msgstr ""
 msgid "Draw Atoms"
 msgstr "Duración (ms)"
 
-#: hacks/config/molecule.xml.h:7
+#: hacks/config/molecule.xml.h:7 hacks/config/spheremonics.xml.h:2
 msgid "Draw Bounding Box"
 msgstr ""
 
@@ -3061,11 +3718,6 @@ msgid ""
 "Miller."
 msgstr ""
 
-#: hacks/config/penrose.xml.h:2
-#, fuzzy
-msgid "30 Seconds"
-msgstr "Segundos"
-
 #: hacks/config/penrose.xml.h:3
 msgid "Draw Ammann Lines"
 msgstr ""
@@ -3205,47 +3857,57 @@ msgstr "Tratamiento"
 msgid "Curved Pipes"
 msgstr ""
 
-#: hacks/config/pipes.xml.h:5
+#: hacks/config/pipes.xml.h:6
 msgid "Fisheye Lens"
 msgstr ""
 
-#: hacks/config/pipes.xml.h:6
+#: hacks/config/pipes.xml.h:7
 msgid "Gadgetry"
 msgstr ""
 
-#: hacks/config/pipes.xml.h:7
+#: hacks/config/pipes.xml.h:8
 msgid ""
 "If you've ever been in the same room with a Windows NT machine, you've "
 "probably seen this GL hack. This version is by Marcelo Vianna."
 msgstr ""
 
-#: hacks/config/pipes.xml.h:8
+#: hacks/config/pipes.xml.h:9
 #, fuzzy
 msgid "Lots"
 msgstr "Puntos"
 
-#: hacks/config/pipes.xml.h:9
-msgid "None"
-msgstr "Ninguno"
-
-#: hacks/config/pipes.xml.h:10
+#: hacks/config/pipes.xml.h:11
 #, fuzzy
 msgid "Number of Pipe Systems"
 msgstr "Cantidad de semillas"
 
-#: hacks/config/pipes.xml.h:11
+#: hacks/config/pipes.xml.h:12
 #, fuzzy
 msgid "Pipe Fittings"
 msgstr "Parámetros"
 
-#: hacks/config/pipes.xml.h:12
+#: hacks/config/pipes.xml.h:13
 msgid "Pipes"
 msgstr "Tuberías"
 
-#: hacks/config/pipes.xml.h:16
+#: hacks/config/pipes.xml.h:17
 msgid "System Length"
 msgstr ""
 
+#: hacks/config/polyominoes.xml.h:3
+msgid "Identical Pieces"
+msgstr ""
+
+#: hacks/config/polyominoes.xml.h:7
+msgid "Polyominoes"
+msgstr ""
+
+#: hacks/config/polyominoes.xml.h:8
+msgid ""
+"Repeatedly attempts to completely fill a rectangle with irregularly-shaped "
+"puzzle pieces. Written by Stephen Montgomery-Smith."
+msgstr ""
+
 #: hacks/config/pulsar.xml.h:1
 msgid "Anti-alias Lines"
 msgstr ""
@@ -3342,11 +4004,6 @@ msgstr "Color vivo"
 msgid "Corners"
 msgstr "Cerca"
 
-#: hacks/config/qix.xml.h:9 hacks/config/speedmine.xml.h:4
-#, fuzzy
-msgid "Gravity"
-msgstr "Gravedad"
-
 #: hacks/config/qix.xml.h:11
 #, fuzzy
 msgid "Line Segments"
@@ -3430,7 +4087,7 @@ msgstr ""
 msgid "Seed Radius"
 msgstr "Radio"
 
-#: hacks/config/rd-bomb.xml.h:19
+#: hacks/config/rd-bomb.xml.h:19 hacks/config/twang.xml.h:12
 #, fuzzy
 msgid "Tile Size"
 msgstr "Tamaño"
@@ -3512,10 +4169,6 @@ msgid ""
 "glasses! Mostly written by Jamie Zawinski."
 msgstr ""
 
-#: hacks/config/rocks.xml.h:13
-msgid "Velocity"
-msgstr ""
-
 #: hacks/config/rorschach.xml.h:7
 msgid "Rorschach"
 msgstr "Rorschach"
@@ -3599,6 +4252,58 @@ msgstr "Cubo de Rubik"
 msgid "Show Shuffling"
 msgstr ""
 
+#: hacks/config/sballs.xml.h:1
+msgid "Cube"
+msgstr ""
+
+#: hacks/config/sballs.xml.h:2
+msgid "Dodecahedron"
+msgstr ""
+
+#: hacks/config/sballs.xml.h:3
+msgid ""
+"Draws an animation of textured balls spinning like crazy in GL. Requires "
+"OpenGL, and a machine with fast hardware support for texture maps. Written "
+"by Eric Lassauge &lt;lassauge@mail.dotcom.fr&gt;."
+msgstr ""
+
+#: hacks/config/sballs.xml.h:5
+msgid "Icosahedron"
+msgstr ""
+
+#: hacks/config/sballs.xml.h:7
+msgid "Octahedron"
+msgstr ""
+
+#: hacks/config/sballs.xml.h:8
+#, fuzzy
+msgid "Plane"
+msgstr "Planeta GL"
+
+#: hacks/config/sballs.xml.h:9
+#, fuzzy
+msgid "Pyramid"
+msgstr "Galones"
+
+#: hacks/config/sballs.xml.h:10
+#, fuzzy
+msgid "Random"
+msgstr " Aleatorio)"
+
+#: hacks/config/sballs.xml.h:11
+#, fuzzy
+msgid "Sballs"
+msgstr "Pequeño"
+
+#: hacks/config/sballs.xml.h:15
+#, fuzzy
+msgid "Star"
+msgstr "Escaleras"
+
+#: hacks/config/sballs.xml.h:16
+msgid "Tetrahedron"
+msgstr ""
+
 #: hacks/config/shadebobs.xml.h:7
 #, fuzzy
 msgid "ShadeBobs"
@@ -3613,6 +4318,16 @@ msgstr ""
 "Dibuja patrones oscilantes, sombreados y ovalados, que recuerdan a rastros "
 "de vapor."
 
+#: hacks/config/sierpinski.xml.h:6
+msgid "Sierpinski"
+msgstr "Sierpinski"
+
+#: hacks/config/sierpinski.xml.h:10
+msgid ""
+"This draws the two-dimensional variant of the recursive Sierpinski triangle "
+"fractal. Written by Desmond Daignault."
+msgstr ""
+
 #: hacks/config/sierpinski3d.xml.h:7
 #, fuzzy
 msgid "Sierpinski3D"
@@ -3624,17 +4339,8 @@ msgid ""
 "triangle fractal, using GL. Written by Tim Robinson and Jamie Zawinski."
 msgstr ""
 
-#: hacks/config/sierpinski.xml.h:6
-msgid "Sierpinski"
-msgstr "Sierpinski"
-
-#: hacks/config/sierpinski.xml.h:10
-msgid ""
-"This draws the two-dimensional variant of the recursive Sierpinski triangle "
-"fractal. Written by Desmond Daignault."
-msgstr ""
-
-#: hacks/config/slidescreen.xml.h:1 hacks/config/zoom.xml.h:1
+#: hacks/config/slidescreen.xml.h:1 hacks/config/twang.xml.h:1
+#: hacks/config/zoom.xml.h:1
 msgid "Border Width"
 msgstr ""
 
@@ -3752,6 +4458,17 @@ msgstr "Truchet"
 msgid "Worm"
 msgstr "Orugas"
 
+#: hacks/config/sphere.xml.h:1
+msgid ""
+"Another of the classic screenhacks of the distant past, this one draws "
+"shaded spheres in multiple colors. This hack traces its lineage back to Tom "
+"Duff in 1982."
+msgstr ""
+
+#: hacks/config/sphere.xml.h:7
+msgid "Sphere"
+msgstr "Esfera"
+
 #: hacks/config/sphereEversion.xml.h:1
 #, fuzzy
 msgid "SphereEversion"
@@ -3765,20 +4482,31 @@ msgid ""
 "itself. This program animates what is known as the Thurston Eversion. "
 "Written by Nathaniel Thurston and Michael McGuffin. This program is not "
 "included with the XScreenSaver package, but if you don't have it already, "
-"you can find it at <http://www.dgp.utoronto.ca/~mjmcguff/eversion/>."
+"you can find it at &lt;http://www.dgp.utoronto.ca/~mjmcguff/eversion/&gt;."
 msgstr ""
 
-#: hacks/config/sphere.xml.h:1
-msgid ""
-"Another of the classic screenhacks of the distant past, this one draws "
-"shaded spheres in multiple colors. This hack traces its lineage back to Tom "
-"Duff in 1982."
+#: hacks/config/spheremonics.xml.h:9
+#, fuzzy
+msgid "Resolution"
+msgstr "Acción predeterminada"
+
+#: hacks/config/spheremonics.xml.h:20
+msgid "Smoothed Lines"
 msgstr ""
 
-#: hacks/config/sphere.xml.h:7
-msgid "Sphere"
+#: hacks/config/spheremonics.xml.h:23
+#, fuzzy
+msgid "Spheremonics"
 msgstr "Esfera"
 
+#: hacks/config/spheremonics.xml.h:24
+msgid ""
+"These closed objects are commonly called spherical harmonics, although they "
+"are only remotely related to the mathematical definition found in the "
+"solution to certain wave functions, most notable the eigenfunctions of "
+"angular momentum operators. Written by Paul Bourke and Jamie Zawinski."
+msgstr ""
+
 #: hacks/config/spiral.xml.h:2
 msgid "Cycles"
 msgstr "Ciclos"
@@ -3826,7 +4554,7 @@ msgstr ""
 msgid "Left"
 msgstr "Izquierda"
 
-#: hacks/config/squiral.xml.h:11
+#: hacks/config/squiral.xml.h:11 hacks/config/twang.xml.h:8
 #, fuzzy
 msgid "Randomness"
 msgstr "Aleatorio"
@@ -3847,11 +4575,16 @@ msgstr ""
 msgid ""
 "SSystem is a GL Solar System simulator. It simulates flybys of Sun, the nine "
 "planets and a few major satellites, with four camera modes. Written by Raul "
-"Alonso. This is not included with the XScreenSaver package, but if you don't "
-"have it already, you can find it at <http://www1.las.es/~amil/ssystem/>. "
-"Note: this program doesn't work as a screen saver on all systems, because it "
-"doesn't communicate with xscreensaver properly. It happens to work with some "
-"window managers, but not with others, so your mileage may vary."
+"Alonso. This is not included with the XScreenSaver package, but is packaged "
+"separately. Note: SSystem does not work as a screen saver on all systems, "
+"because it doesn't communicate with xscreensaver properly. It happens to "
+"work with some window managers, but not with others, so your mileage may "
+"vary. SSystem was once available at &lt;http://www1.las.es/~amil/ssystem/"
+"&gt;, but is now gone. You may still be able to find copies elsewhere. "
+"SSystem has since evolved into two different programs: OpenUniverse (http://"
+"openuniverse.sourceforge.net/) and Celestia (http://www.shatters.net/"
+"celestia/). Sadly, neither of these programs work with xscreensaver at all. "
+"You are encouraged to nag their authors into adding xscreensaver support!"
 msgstr ""
 
 #: hacks/config/stairs.xml.h:6
@@ -4049,6 +4782,21 @@ msgstr ""
 msgid "Wobbliness"
 msgstr "Burbujas"
 
+#: hacks/config/thornbird.xml.h:1
+msgid ""
+"Displays a view of the ``Bird in a Thornbush'' fractal. Written by Tim "
+"Auckland."
+msgstr ""
+
+#: hacks/config/thornbird.xml.h:6
+#, fuzzy
+msgid "Points"
+msgstr "Puntos:"
+
+#: hacks/config/thornbird.xml.h:12
+msgid "Thornbird"
+msgstr ""
+
 #: hacks/config/triangle.xml.h:2
 #, fuzzy
 msgid ""
@@ -4072,6 +4820,31 @@ msgstr ""
 msgid "Truchet"
 msgstr "Truchet"
 
+#: hacks/config/twang.xml.h:2
+msgid ""
+"Divides the screen into a grid, and plucks them. Written by Dan Bornstein."
+msgstr ""
+
+#: hacks/config/twang.xml.h:6
+#, fuzzy
+msgid "Jumpy"
+msgstr "Bumps"
+
+#: hacks/config/twang.xml.h:11
+#, fuzzy
+msgid "Springiness"
+msgstr "Sproingies"
+
+#: hacks/config/twang.xml.h:13
+#, fuzzy
+msgid "Transference"
+msgstr "Transparente"
+
+#: hacks/config/twang.xml.h:14
+#, fuzzy
+msgid "Twang"
+msgstr "Triángulo"
+
 #: hacks/config/vermiculate.xml.h:1
 msgid "Draws squiggly worm-like paths. Written by Tyler Pierce."
 msgstr ""
@@ -4166,11 +4939,6 @@ msgid ""
 "and off at random. By Paul 'Joey' Clark."
 msgstr ""
 
-#: hacks/config/whirlwindwarp.xml.h:5
-#, fuzzy
-msgid "Particles"
-msgstr "Partículas en pantalla"
-
 #: hacks/config/whirlwindwarp.xml.h:7
 #, fuzzy
 msgid "Trail Size"
@@ -4212,7 +4980,7 @@ msgid ""
 "XaoS generates fast fly-through animations of the Mandelbrot and other "
 "fractal sets. Written by Thomas Marsh and Jan Hubicka. This is not included "
 "with the XScreenSaver package, but if you don't have it already, you can "
-"find it at <http://limax.paru.cas.cz/~hubicka/XaoS/>."
+"find it at &lt;http://limax.paru.cas.cz/~hubicka/XaoS/&gt;."
 msgstr ""
 
 #: hacks/config/xdaliclock.xml.h:1
@@ -4263,7 +5031,7 @@ msgid ""
 "XDaliClock draws a large digital clock, the numbers of which change by "
 "``melting'' into their new shapes. Written by Jamie Zawinski. This is not "
 "included with the XScreenSaver package, but if you don't have it already, "
-"you can find it at <http://www.jwz.org/xdaliclock/>."
+"you can find it at &lt;http://www.jwz.org/xdaliclock/&gt;."
 msgstr ""
 
 #: hacks/config/xearth.xml.h:1
@@ -4357,8 +5125,8 @@ msgid ""
 "XEarth draws an image of the Earth, as seen from your favorite vantage point "
 "in space, correctly shaded for the current position of the Sun. Written by "
 "Kirk Johnson. This is not included with the XScreenSaver package, but if you "
-"don't have it already, you can find it at <http://www.cs.colorado.edu/~tuna/"
-"xearth/>."
+"don't have it already, you can find it at &lt;http://www.cs.colorado.edu/"
+"~tuna/xearth/&gt;."
 msgstr ""
 
 #: hacks/config/xearth.xml.h:32
@@ -4378,8 +5146,8 @@ msgstr "Velocidad"
 #: hacks/config/xfishtank.xml.h:7
 msgid ""
 "Fish! This is not included with the XScreenSaver package, but if you don't "
-"have it already, you can find it at <http://metalab.unc.edu/pub/Linux/X11/"
-"demos/>."
+"have it already, you can find it at &lt;http://metalab.unc.edu/pub/Linux/X11/"
+"demos/&gt;."
 msgstr ""
 
 #: hacks/config/xfishtank.xml.h:12
@@ -4497,9 +5265,9 @@ msgid ""
 "XMountains generates realistic-looking fractal terrains of snow-capped "
 "mountains near water, with either a top view or a side view. Written by "
 "Stephen Booth. This is not included with the XScreenSaver package, but if "
-"you don't have it already, you can find it at <http://www.epcc.ed.ac.uk/~spb/"
-"xmountains/>. Be sure to compile it with -DVROOT or it won't work right when "
-"launched by the xscreensaver daemon."
+"you don't have it already, you can find it at &lt;http://www.epcc.ed.ac.uk/"
+"~spb/xmountains/&gt;. Be sure to compile it with -DVROOT or it won't work "
+"right when launched by the xscreensaver daemon."
 msgstr ""
 
 #: hacks/config/xmountains.xml.h:8
@@ -4520,7 +5288,7 @@ msgstr ""
 #: hacks/config/xsnow.xml.h:1
 msgid ""
 "Draws falling snow and the occasional tiny Santa. By Rick Jansen. You can "
-"find it at <http://www.euronet.nl/~rja/Xsnow/>."
+"find it at &lt;http://www.euronet.nl/~rja/Xsnow/&gt;."
 msgstr ""
 
 #: hacks/config/xsnow.xml.h:2
@@ -4612,15 +5380,9 @@ msgstr ""
 #~ msgid "Disabled"
 #~ msgstr "Desactivado"
 
-#~ msgid "Color"
-#~ msgstr "Color"
-
 #~ msgid "Primary Color"
 #~ msgstr "Color primario"
 
-#~ msgid "Secondary Color"
-#~ msgstr "Color secundario"
-
 #~ msgid "Wallpaper Selection"
 #~ msgstr "Selección del fondo"
 
@@ -5086,9 +5848,6 @@ msgstr ""
 #~ msgid "Size of point."
 #~ msgstr "Tamaño de los puntos."
 
-#~ msgid "Slower"
-#~ msgstr "Lento"
-
 #~ msgid "Speed of Motion."
 #~ msgstr "Velocidad de la animación."
 
@@ -5160,9 +5919,6 @@ msgstr ""
 #~ "Este salvapantalla dibuja unos galones trenzados en círculo con colores "
 #~ "que cambian al azar cíclicamente."
 
-#~ msgid "Bsod"
-#~ msgstr "BSoD"
-
 #~ msgid "Bsod simulates crash screens from other operating systems."
 #~ msgstr "BSoD simula las pantallas de fallo de varios sistemas operativos."
 
@@ -5626,9 +6382,6 @@ msgstr ""
 #~ "nuevo \n"
 #~ "lugar en la pantalla."
 
-#~ msgid "Mono"
-#~ msgstr "Mono"
-
 #~ msgid "Number of segments per laser burst."
 #~ msgstr "Número de segmentos por disparo láser."
 
@@ -5680,9 +6433,6 @@ msgstr ""
 #~ "«Lmorph» transforma dibujos simples de línea usando interpolación "
 #~ "bilineal."
 
-#~ msgid "Points:"
-#~ msgstr "Puntos:"
-
 #~ msgid ""
 #~ "Sverre  H.  Huseby <sverrehu@online.no> & Glenn T. Lines <gtl@si.sintef."
 #~ "no>"
@@ -5850,9 +6600,6 @@ msgstr ""
 #~ msgid "Time to show each picture."
 #~ msgstr "Tiempo para mostrar cada dibujo."
 
-#~ msgid "Display an arcade game"
-#~ msgstr "Mostrar un juego de acción"
-
 #~ msgid "3d pipes flow around the screen"
 #~ msgstr "Tuberías 3D fluyen por la pantalla"
 
@@ -5946,9 +6693,6 @@ msgstr ""
 #~ msgid "Oily"
 #~ msgstr "Aceitoso"
 
-#~ msgid "Stir"
-#~ msgstr "Revolver"
-
 #~ msgid "Stir it up."
 #~ msgstr "Revuelto."
 
@@ -5985,9 +6729,6 @@ msgstr ""
 #~ msgid "The famous, M.C. Escher, impossible stairs"
 #~ msgstr "Las famosas escaleras imposibles de M.C. Eschers"
 
-#~ msgid " Random)"
-#~ msgstr " Aleatorio)"
-
 #~ msgid "Change the animation step delay."
 #~ msgstr "Cambia el retardo en ciclos."
 
@@ -6022,9 +6763,6 @@ msgstr ""
 #~ msgid "Use raw shapes "
 #~ msgstr "Utilizar formas rústicas"
 
-#~ msgid "Wide"
-#~ msgstr "Gordo "
-
 #~ msgid "Random mountain ranges"
 #~ msgstr "Rangos aleatorios de montañas"
 
@@ -6077,9 +6815,6 @@ msgstr ""
 #~ msgid "Roll"
 #~ msgstr "Rodar"
 
-#~ msgid "Static."
-#~ msgstr "Estática."
-
 #~ msgid "Vertical roll."
 #~ msgstr "Ruedo vertical."
 
@@ -6117,15 +6852,9 @@ msgstr ""
 #~ msgid " minutes after screen saver has started."
 #~ msgstr " minutos después de haberse iniciado el salvapantalla."
 
-#~ msgid "Screen Saver Demo"
-#~ msgstr "Demostración del salvapantalla"
-
 #~ msgid "Configure the settings of the screensaver"
 #~ msgstr "Configurar el salvapantalla"
 
-#~ msgid "Screensaver"
-#~ msgstr "Salvapantalla"
-
 #~ msgid ""
 #~ "an initialization error occurred while starting 'sound-properties-"
 #~ "capplet'."
@@ -6240,9 +6969,6 @@ msgstr ""
 #~ msgid "Select a theme to install"
 #~ msgstr "Seleccione un tema a instalar"
 
-#~ msgid "Available Themes"
-#~ msgstr "Temas disponibles"
-
 #~ msgid ""
 #~ "Auto\n"
 #~ "Preview"
@@ -6263,9 +6989,6 @@ msgstr ""
 #~ msgid "Use custom font."
 #~ msgstr "Usar un tipo de letra personalizada."
 
-#~ msgid "Home directory doesn't exist!\n"
-#~ msgstr "¡El directorio personal no existe!\n"
-
 #~ msgid "Theme does not exist"
 #~ msgstr "El tema no existe"
 
@@ -6339,9 +7062,6 @@ msgstr ""
 #~ msgid "Dialog buttons"
 #~ msgstr "Botones de diálogo"
 
-#~ msgid "Default value"
-#~ msgstr "Valor predeterminado"
-
 #~ msgid "Spread buttons out"
 #~ msgstr "Espaciar los botones"
 
@@ -6547,9 +7267,6 @@ msgstr ""
 #~ msgid "Name:"
 #~ msgstr "Nombre:"
 
-#~ msgid "Command:"
-#~ msgstr "Comando:"
-
 #~ msgid "Configuration Command:"
 #~ msgstr "Comando para la configuración:"
 
@@ -6685,11 +7402,3 @@ msgstr ""
 
 #~ msgid "If the solver can "
 #~ msgstr "Si el resolutor puede "
-
-#: driver/screensaver-properties.desktop.in:3
-msgid "Screensaver"
-msgstr "Propiedades Salvapantallas"
-
-#: driver/screensaver-properties.desktop.in:4
-msgid "Configure the settings of the screensaver."
-msgstr "Configurar el salvapantalla"
index 93407d9601e06630c75947f42c68afeafd0b9494..a3423d0aa0c2f2f92a3722e704dc9b0aa97a50fb 100644 (file)
@@ -1,2 +1,2 @@
 static const char screensaver_id[] =
-       "@(#)xscreensaver 4.04 (28-May-2002), by Jamie Zawinski (jwz@jwz.org)";
+       "@(#)xscreensaver 4.05 (28-May-2002), by Jamie Zawinski (jwz@jwz.org)";
index 52c4e93e859f4f6e2071bea5d1d5b5cd021b9fe5..3eb277bed87aa2caf562d03afad52c5c12e6d221 100644 (file)
@@ -1,7 +1,7 @@
 Begin3
 Title:          xscreensaver
-Version:        4.04
-Entered-date:   31MAY02
+Version:        4.05
+Entered-date:   11JUN02
 Description:    A modular screen saver and locker for the X Window System.
                 Highly customizable: allows the use of any program that
                 can draw on the root window as a display mode.
@@ -10,15 +10,15 @@ Keywords:       screen saver, screen lock, lock, xlock, X11
 Author:         jwz@jwz.org (Jamie Zawinski)
 Maintained-by:  jwz@jwz.org (Jamie Zawinski)
 Primary-site:   http://www.jwz.org/xscreensaver/
-                 xscreensaver-4.04.tar.gz
+                2913K xscreensaver-4.05.tar.gz
                 59K   xscreensaver.README
                 1K    xscreensaver.lsm
 Alternate-site: sunsite.unc.edu /pub/Linux/X11/screensavers/
-                 xscreensaver-4.04.tar.gz
+                2913K xscreensaver-4.05.tar.gz
                 59K   xscreensaver.README
                 1K    xscreensaver.lsm
 Alternate-site: ftp.x.org /contrib/applications/
-                 xscreensaver-4.04.tar.gz
+                2913K xscreensaver-4.05.tar.gz
                 59K   xscreensaver.README
                 1K    xscreensaver.lsm
 Platforms:      Linux, Irix, SunOS, Solaris, HPUX, AIX, FreeBSD, NetBSD,
index 088bacbc1f453d06322272c036a044d984777d4d..8c73ef8b28be1030864efb24733ac7afe90114cc 100644 (file)
@@ -1,5 +1,5 @@
 %define        name            xscreensaver
-%define        version         4.04
+%define        version         4.05
 %define        release         1
 %define        serial          1
 %define        x11_prefix      /usr/X11R6