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.
 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
                         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.
                       * `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
 
 
 jurassic_gtk=no
+gtk2_halfassed=no
+
 if test "$with_gtk" = yes; then
   have_gtk=no
 
 if test "$with_gtk" = yes; then
   have_gtk=no
 
@@ -12489,6 +12491,10 @@ echo "${ECHO_T}no" >&6
 #define HAVE_GTK2 1
 _ACEOF
 
 #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
     fi
 
     if test "$have_gtk" = no; then
@@ -12503,7 +12509,7 @@ _ACEOF
 
       # Now check for Gnome...
       #
 
       # 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
         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.
     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"
     #
     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.
 
   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"
 
   ac_save_CPPFLAGS="$CPPFLAGS"
   ac_save_LDFLAGS="$LDFLAGS"
 
   GNOME_DATADIR=""
   if test "$have_gnome" = yes -a "$have_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
     else
-      #### is this right?
-      GNOME_DATADIR=`$pkg_config --variable=prefix gtk+`
-      GNOME_DATADIR="$GNOME_DATADIR/share"
+      GNOME_DATADIR=`$gtk_config --prefix`
     fi
     fi
+    GNOME_DATADIR="$GNOME_DATADIR/share"
   fi
 
   # .desktop files go in different places in Gnome 1.x and Gnome 2.x...
   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"
     #
     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
       ok=yes
-      pkg_check_version xml 1.0
+      pkg_check_version libxml 1.0
     fi
 
     have_xml="$ok"
     fi
 
     have_xml="$ok"
@@ -13129,7 +13154,7 @@ echo "${ECHO_T}$ac_cv_xml_config_libs" >&6
   else
     #
     # the old way...
   else
     #
     # the old way...
-    # run {gnome,gtk}-config based tests.
+    # run {xml2,xml}-config based tests.
     #
 
     for ac_prog in xml2-config xml-config
     #
 
     for ac_prog in xml2-config xml-config
   # note: $X_LIBS includes $x_libraries
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   # 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
   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"
 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_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
 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
 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"
   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
   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
 #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"
     #
     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_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
     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
 
     ac_gdk_pixbuf_config_libs=$ac_cv_gdk_pixbuf_config_libs
   fi
 
+
   if test "$have_gdk_pixbuf" = no; then
     #
     # the old way...
   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
 
 
     have_gdk_pixbuf=no
 
-    # check for header 1...
+    # check for header A...
 
   ac_save_CPPFLAGS="$CPPFLAGS"
   if test \! -z "$includedir" ; then
 
   ac_save_CPPFLAGS="$CPPFLAGS"
   if test \! -z "$includedir" ; then
@@ -15638,7 +15677,7 @@ fi
 
   CPPFLAGS="$ac_save_CPPFLAGS"
 
 
   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
     if test "$have_gdk_pixbuf" = yes; then
       have_gdk_pixbuf=no
       gdk_pixbuf_halfassed=yes
@@ -15757,7 +15796,7 @@ fi
 
   CPPFLAGS="$ac_save_CPPFLAGS"
 
 
   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
       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
 
     have_gdk_pixbuf=no
     gdk_pixbuf_halfassed=yes
 
-    # library 1...
+    # library A...
 
   ac_save_CPPFLAGS="$CPPFLAGS"
   ac_save_LDFLAGS="$LDFLAGS"
 
   ac_save_CPPFLAGS="$CPPFLAGS"
   ac_save_LDFLAGS="$LDFLAGS"
@@ -15967,7 +16006,7 @@ fi
   LDFLAGS="$ac_save_LDFLAGS"
 #  LIBS="$ac_save_LIBS"
 
   LDFLAGS="$ac_save_LDFLAGS"
 #  LIBS="$ac_save_LIBS"
 
-    # library 2...
+    # library B...
     if test "$have_gdk_pixbuf" = yes; then
       have_gdk_pixbuf=no
 
     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.
 #
 # 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
 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
 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
 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" ;;
   "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" ;;
   "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
   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
 
 
 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)
 #
 
 AC_PREREQ(2.52)
@@ -1882,6 +1882,8 @@ parse_gtk_version_string() {
 
 
 jurassic_gtk=no
 
 
 jurassic_gtk=no
+gtk2_halfassed=no
+
 if test "$with_gtk" = yes; then
   have_gtk=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)
     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
     fi
 
     if test "$have_gtk" = no; then
@@ -1959,7 +1965,7 @@ if test "$with_gtk" = yes; then
 
       # Now check for Gnome...
       #
 
       # 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
         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.
     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"
     #
     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.
 
   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)
     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
 
   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
     else
-      #### is this right?
-      GNOME_DATADIR=`$pkg_config --variable=prefix gtk+`
-      GNOME_DATADIR="$GNOME_DATADIR/share"
+      GNOME_DATADIR=`$gtk_config --prefix`
     fi
     fi
+    GNOME_DATADIR="$GNOME_DATADIR/share"
   fi
 
   # .desktop files go in different places in Gnome 1.x and Gnome 2.x...
   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"
     #
     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
       ok=yes
-      pkg_check_version xml 1.0
+      pkg_check_version libxml 1.0
     fi
 
     have_xml="$ok"
     fi
 
     have_xml="$ok"
@@ -2221,7 +2246,7 @@ if test "$with_xml" = yes; then
   else
     #
     # the old way...
   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)
     #
 
     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
     # 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"
                    [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"
     #
     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_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
     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
 
     ac_gdk_pixbuf_config_libs=$ac_cv_gdk_pixbuf_config_libs
   fi
 
+
   if test "$have_gdk_pixbuf" = no; then
     #
     # the old way...
   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
 
 
     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])
 
     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
     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])
 
                         [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
       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
 
     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)
     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,
     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.
 #
 # 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
 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
 else
   GLADE_DATADIR=''
 fi
@@ -3380,7 +3432,8 @@ AC_OUTPUT(Makefile
           hacks/Makefile
           hacks/glx/Makefile
           po/Makefile.in
           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
   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
 
 
 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-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 \
                  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 \
                  .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:
         fi
 
 install-kde:
-       @src="$(srcdir)/xscreensaver.kss" ;                                   \
+       @src="xscreensaver.kss" ;                                             \
        if [ "$$KDEDIR" != "" ]; then                                         \
          dir="$(install_prefix)$$KDEDIR/bin" ;                               \
        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 ;                                                            \
          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
 !
 !            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/
 !
 ! 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:                        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           \
                                                                              \
 -                              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:                  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           \
                                                                              \
 -                              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
 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;
 #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);
   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;
 
   GtkAdjustment *adj;
   double scroll_top;
 
index a3622c7af58db7698a88c24e977c5eb3256ce58e..cd8e729cfe8f6e4ce4c51c5005ab4531a52e3449 100644 (file)
@@ -11,7 +11,7 @@
 .if n .sp 1
 .if t .sp .5
 ..
 .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
 .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
 ..
 .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
 .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
 .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
 .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
 .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
 ..
 .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
 .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
 
             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/
 
 
                      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 %"
           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"/>
           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 \
                  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 \
 
 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 \
                  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 \
 
 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@
 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 \
 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 \
 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 \
                  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
 
 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)
 
 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 \
 # 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
 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
 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
 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
 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,
                             spinz ? spin_speed : 0,
                             1.0,
                             do_wander ? wander_speed : 0,
-                            True);
+                            (spinx && spiny && spinz));
     cc->trackball = gltrackball_init ();
   }
 
     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>
 #endif
 
 #include <GL/gl.h>
-#include <GL/glut.h>
+/*#include <GL/glut.h>*/
 #ifdef HAVE_GLE3
 #include <GL/gle.h>
 #else
 #ifdef HAVE_GLE3
 #include <GL/gle.h>
 #else
index 003e4bd666977ce5bca342715d5f6499afa4cdbf..34ae2960e60e2af2e52312c9bd87b5bc2e7c07be 100644 (file)
@@ -19,7 +19,7 @@
 #endif
 
 #include <GL/gl.h>
 #endif
 
 #include <GL/gl.h>
-#include <GL/glut.h>
+/*#include <GL/glut.h>*/
 #ifdef HAVE_GLE3
 #include <GL/gle.h>
 #else
 #ifdef HAVE_GLE3
 #include <GL/gle.h>
 #else
index d6a786a78b860e800d3e6b47c8a679d61969df9b..c74fc59c8678e998305c4a42ce3c666c4ff0eb3e 100644 (file)
@@ -19,7 +19,7 @@
 #endif
 
 #include <GL/gl.h>
 #endif
 
 #include <GL/gl.h>
-#include <GL/glut.h>
+/*#include <GL/glut.h>*/
 #ifdef HAVE_GLE3
 #include <GL/gle.h>
 #else
 #ifdef HAVE_GLE3
 #include <GL/gle.h>
 #else
index 12406b4f9029384b72bf664cd1d77d2ff7720e40..5b0b332b9d1ea15030abe4c12bfa096d407b7c6d 100644 (file)
@@ -8,7 +8,7 @@
 #endif
 
 #include <GL/gl.h>
 #endif
 
 #include <GL/gl.h>
-#include <GL/glut.h>
+/*#include <GL/glut.h>*/
 #ifdef HAVE_GLE3
 #include <GL/gle.h>
 #else
 #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 <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
 #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 <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
 #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 <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
 #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 },
 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" }
 };
   { "-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;
 
     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,
                             spin_accel,
                             do_wander ? wander_speed : 0,
-                            True);
+                            False);
     tp->trackball = gltrackball_init ();
   }
 
     tp->trackball = gltrackball_init ();
   }
 
index 631c2e22b6d3e7bb77e1927007dd4c52971e939a..8c653287321ab0a207fc5cc5aab7e94d6f928d24 100644 (file)
@@ -244,8 +244,6 @@ typedef struct {
   GLuint bottle_list;
   GLuint ball_list;
 
   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;
   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));
 
   {
   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;
     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,
                             spinz ? spin_speed : 0,
                             1.0,
                             do_wander ? wander_speed : 0,
-                            True);
+                            (spinx && spiny && spinz));
     mc->trackball = gltrackball_init ();
   }
 
     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,
       }
 
     cc->rot = make_rotator (spinx ? spin_speed : 0,
-                            spiny ? spin_speed : 0,
                             spinz ? spin_speed : 0,
                             spinz ? spin_speed : 0,
+                            spiny ? spin_speed : 0,
                             1.0,
                             do_wander ? wander_speed : 0,
                             1.0,
                             do_wander ? wander_speed : 0,
-                            True);
+                            (spinx && spiny && spinz));
     cc->trackball = gltrackball_init ();
   }
 
     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                  \
           echo "# Auto-generated: `date`" ;    \
           ( grep -l '_("' driver/*.[ch] ;      \
             ls driver/*.glade                  \
+               driver/*.glade2                 \
                driver/*.desktop.in             \
                hacks/config/*.xml ) | sort     \
          ) > $$tmp &&                          \
                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/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
 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/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
 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"
 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"
 "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"
 
 "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... "
 
 #, 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"
 
 #, 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"
 #, fuzzy
 msgid "XScreenSaver"
 msgstr "Salvapantalla"
@@ -35,44 +45,44 @@ msgstr "Salvapantalla"
 msgid "_File"
 msgstr "Mosaico"
 
 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 ""
 
 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 ""
 
 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 ""
 
 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 ""
 
 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 ""
 
 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 ""
 
 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 ""
 
 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 ""
 
 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 ""
 
 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.)"
 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"
 
 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"
 
 #, 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."
 
 #, 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 ""
 
 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 ""
 
 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"
 
 #, 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"
 
 #, 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
 #, 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
 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."
 
 #, 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"
 
 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 ""
 
 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..."
 
 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 ""
 
 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"
 
 #, 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"
 
 #, 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 ""
 
 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"
 
 #, 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"
 
 #, 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 ""
 
 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"
 
 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 ""
 
 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
 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"
 
 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."
 
 #, 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"
 
 #, 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 ""
 
 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 ""
 
 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 ""
 
 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 ""
 
 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 ""
 
 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 ""
 
 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"
 
 #, 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 ""
 
 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 ""
 
 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 ""
 
 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 ""
 
 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 ""
 
 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 ""
 
 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"
 
 #, 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 ""
 
 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"
 
 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."
 
 #, 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 ""
 
 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."
 
 #, 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 ""
 
 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 ""
 
 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 "
 
 #, 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 ""
 
 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 ""
 
 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 ""
 
 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 ""
 
 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 ""
 
 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 ""
 
 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 ""
 
 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 ""
 
 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"
 
 #, 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 ""
 
 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
 #, 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 ""
 
 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"
 
 #, 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"
 
 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"
 
 #, 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 ""
 
 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 ""
 
 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"
 
 #, 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 ""
 
 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 ""
 
 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 ""
 
 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 ""
 
 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 ""
 
 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"
 
 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"
 
 #, 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 ""
 #: hacks/config/ant.xml.h:1
 #, fuzzy
 msgid ""
@@ -448,30 +739,34 @@ msgstr "Tama
 msgid "Ants Count"
 msgstr "Cantidad"
 
 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/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/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
 #: 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/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/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/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"
 
 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
 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
 #: 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"
 
 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/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
 #: 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/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
 #: 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 ""
 
 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
 #: 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/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"
 #: 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 ""
 
 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/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/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
 #: 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/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/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/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
 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
 #: 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"
 
 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/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/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
 #: 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/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/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/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"
 
 msgid "Speed"
 msgstr "Velocidad"
 
@@ -750,14 +1065,15 @@ msgstr "Truchet"
 msgid "Twelve Sided Cells"
 msgstr ""
 
 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
 #: 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/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/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 ""
 #: hacks/config/atlantis.xml.h:1
 msgid "Agressive"
 msgstr ""
@@ -820,19 +1170,22 @@ msgstr "Velocidad"
 msgid "Shimmering Water"
 msgstr ""
 
 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/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 ""
 
 msgid "Show Frames-per-Second"
 msgstr ""
 
@@ -840,14 +1193,15 @@ msgstr ""
 msgid "Shy"
 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/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"
 
 msgid "Solid"
 msgstr "Sólido"
 
@@ -863,15 +1217,18 @@ msgstr ""
 msgid "Whale Speed"
 msgstr "Velocidad"
 
 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/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 ""
 
 msgid "Wireframe"
 msgstr ""
 
@@ -888,7 +1245,7 @@ msgstr "Cantidad"
 msgid "Ball Mass"
 msgstr ""
 
 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"
 #, 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
 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/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"
 
 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/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/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/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/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"
 
 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/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/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"
 #, fuzzy
 msgid "Short"
 msgstr "Más corto"
@@ -1024,7 +1388,8 @@ msgstr "Sproingies"
 msgid "Tails"
 msgstr "Rastros"
 
 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 ""
 
 msgid "Trail Length"
 msgstr ""
 
@@ -1041,10 +1406,12 @@ msgid ""
 msgstr ""
 
 #: hacks/config/blaster.xml.h:4 hacks/config/bouboule.xml.h:4
 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 ""
 #: 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 ""
 
 "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"
 #: 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/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/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"
 #: 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
 msgstr ""
 
 #: hacks/config/bsod.xml.h:9
-msgid "MacOS"
+msgid "Mac Bomb"
 msgstr ""
 
 #: hacks/config/bsod.xml.h:10
 msgstr ""
 
 #: hacks/config/bsod.xml.h:10
@@ -1210,20 +1598,29 @@ msgid "SCO"
 msgstr ""
 
 #: hacks/config/bsod.xml.h:13
 msgstr ""
 
 #: hacks/config/bsod.xml.h:13
+msgid "Sad Mac"
+msgstr ""
+
+#: hacks/config/bsod.xml.h:14
 #, fuzzy
 msgid "Solaris"
 msgstr "Estrella de mar"
 
 #, fuzzy
 msgid "Solaris"
 msgstr "Estrella de mar"
 
-#: hacks/config/bsod.xml.h:14
+#: hacks/config/bsod.xml.h:15
 msgid "Sparc Linux"
 msgstr ""
 
 msgid "Sparc Linux"
 msgstr ""
 
-#: hacks/config/bsod.xml.h:15
+#: hacks/config/bsod.xml.h:16
 #, fuzzy
 msgid "Windows"
 msgstr "Window Maker"
 
 #, 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"
 #, fuzzy
 msgid "Windows NT"
 msgstr "Window Maker"
@@ -1365,7 +1762,7 @@ msgstr "Color muerto"
 msgid "Parts"
 msgstr "Barras"
 
 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"
 #, 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/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 ""
 
 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 "
 #: 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
 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/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
 #: 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"
 
 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 ""
 
 msgid "Draw Grid"
 msgstr ""
 
@@ -1517,6 +1915,106 @@ msgstr ""
 msgid "Vertical Symmetries"
 msgstr "Degradado vertical"
 
 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 "
 #: 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 ""
 
 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"
 #: 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
 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
 #, 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"
 #, fuzzy
 msgid "Thin"
 msgstr "Más fino"
@@ -1750,7 +2241,8 @@ msgstr "Tama
 msgid "Magnify"
 msgstr ""
 
 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"
 #, 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/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 ""
 
 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 "
 "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
 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"
 
 "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 "
 #: 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"
 
 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."
 #, fuzzy
 msgid "Number of Fractals"
 msgstr "Cantidad de rastros."
@@ -1989,6 +2501,12 @@ msgstr "Cantidad de rastros."
 msgid "Flipscreen3d"
 msgstr "Slidescreen"
 
 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 ""
 #: hacks/config/flow.xml.h:1
 msgid "Allow 2D Attractors"
 msgstr ""
@@ -2027,7 +2545,77 @@ msgstr ""
 msgid "Zoom In and Out"
 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"
 
 msgid "Forest"
 msgstr "Bosque"
 
@@ -2056,35 +2644,27 @@ msgid ""
 "Siegmund."
 msgstr ""
 
 "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"
 
 msgid "Gears"
 msgstr "Engranajes"
 
-#: hacks/config/gears.xml.h:5
+#: hacks/config/gears.xml.h:4
 msgid "Planetary Gear System"
 msgstr ""
 
 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"
 
 #, 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 ""
 
 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 ""
 
 msgid "Three Gear System"
 msgstr ""
 
@@ -2115,21 +2695,71 @@ msgstr "Densidad"
 
 #: hacks/config/gflux.xml.h:10
 #, fuzzy
 
 #: 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
 #, 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 ""
 
 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 ""
 
 #: hacks/config/glplanet.xml.h:1
 msgid ""
@@ -2147,57 +2777,73 @@ msgstr "Planeta GL"
 msgid "Image File"
 msgstr ""
 
 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 ""
 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 ""
 
 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 ""
 
 msgstr ""
 
-#: hacks/config/gltext.xml.h:4
+#: hacks/config/glsnake.xml.h:7
 #, fuzzy
 #, 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 ""
 
 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 ""
 
 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 ""
 
 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 ""
 
 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"
 #: 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 "
 #: 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
 msgstr ""
 
 #: hacks/config/goop.xml.h:1
@@ -2560,6 +3206,22 @@ msgid ""
 "puzzle is solved. Written by Jamie Zawinski."
 msgstr ""
 
 "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"
 #: 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"
 
 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"
 #: hacks/config/laser.xml.h:4
 msgid "Laser"
 msgstr "Láser"
@@ -2830,23 +3487,6 @@ msgstr "S
 msgid "Solid Objects"
 msgstr ""
 
 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"
 #: hacks/config/moire.xml.h:6
 msgid "Moire"
 msgstr "Moire"
@@ -2866,6 +3506,23 @@ msgid ""
 "hack metric''."
 msgstr ""
 
 "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 ""
 #: hacks/config/molecule.xml.h:3
 msgid "Describe Molecule"
 msgstr ""
@@ -2879,7 +3536,7 @@ msgstr ""
 msgid "Draw Atoms"
 msgstr "Duración (ms)"
 
 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 ""
 
 msgid "Draw Bounding Box"
 msgstr ""
 
@@ -3061,11 +3718,6 @@ msgid ""
 "Miller."
 msgstr ""
 
 "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 ""
 #: hacks/config/penrose.xml.h:3
 msgid "Draw Ammann Lines"
 msgstr ""
@@ -3205,47 +3857,57 @@ msgstr "Tratamiento"
 msgid "Curved Pipes"
 msgstr ""
 
 msgid "Curved Pipes"
 msgstr ""
 
-#: hacks/config/pipes.xml.h:5
+#: hacks/config/pipes.xml.h:6
 msgid "Fisheye Lens"
 msgstr ""
 
 msgid "Fisheye Lens"
 msgstr ""
 
-#: hacks/config/pipes.xml.h:6
+#: hacks/config/pipes.xml.h:7
 msgid "Gadgetry"
 msgstr ""
 
 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 ""
 
 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"
 
 #, 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"
 
 #, 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"
 
 #, fuzzy
 msgid "Pipe Fittings"
 msgstr "Parámetros"
 
-#: hacks/config/pipes.xml.h:12
+#: hacks/config/pipes.xml.h:13
 msgid "Pipes"
 msgstr "Tuberías"
 
 msgid "Pipes"
 msgstr "Tuberías"
 
-#: hacks/config/pipes.xml.h:16
+#: hacks/config/pipes.xml.h:17
 msgid "System Length"
 msgstr ""
 
 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 ""
 #: hacks/config/pulsar.xml.h:1
 msgid "Anti-alias Lines"
 msgstr ""
@@ -3342,11 +4004,6 @@ msgstr "Color vivo"
 msgid "Corners"
 msgstr "Cerca"
 
 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"
 #: hacks/config/qix.xml.h:11
 #, fuzzy
 msgid "Line Segments"
@@ -3430,7 +4087,7 @@ msgstr ""
 msgid "Seed Radius"
 msgstr "Radio"
 
 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"
 #, fuzzy
 msgid "Tile Size"
 msgstr "Tamaño"
@@ -3512,10 +4169,6 @@ msgid ""
 "glasses! Mostly written by Jamie Zawinski."
 msgstr ""
 
 "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"
 #: hacks/config/rorschach.xml.h:7
 msgid "Rorschach"
 msgstr "Rorschach"
@@ -3599,6 +4252,58 @@ msgstr "Cubo de Rubik"
 msgid "Show Shuffling"
 msgstr ""
 
 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"
 #: 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."
 
 "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"
 #: 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 ""
 
 "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 ""
 
 msgid "Border Width"
 msgstr ""
 
@@ -3752,6 +4458,17 @@ msgstr "Truchet"
 msgid "Worm"
 msgstr "Orugas"
 
 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"
 #: 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, "
 "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 ""
 
 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 ""
 
 msgstr ""
 
-#: hacks/config/sphere.xml.h:7
-msgid "Sphere"
+#: hacks/config/spheremonics.xml.h:23
+#, fuzzy
+msgid "Spheremonics"
 msgstr "Esfera"
 
 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"
 #: hacks/config/spiral.xml.h:2
 msgid "Cycles"
 msgstr "Ciclos"
@@ -3826,7 +4554,7 @@ msgstr ""
 msgid "Left"
 msgstr "Izquierda"
 
 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"
 #, 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 "
 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
 msgstr ""
 
 #: hacks/config/stairs.xml.h:6
@@ -4049,6 +4782,21 @@ msgstr ""
 msgid "Wobbliness"
 msgstr "Burbujas"
 
 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 ""
 #: hacks/config/triangle.xml.h:2
 #, fuzzy
 msgid ""
@@ -4072,6 +4820,31 @@ msgstr ""
 msgid "Truchet"
 msgstr "Truchet"
 
 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 ""
 #: 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 ""
 
 "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"
 #: 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 "
 "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
 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, "
 "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
 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 "
 "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
 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 "
 #: 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
 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 "
 "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
 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 "
 #: 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
 msgstr ""
 
 #: hacks/config/xsnow.xml.h:2
@@ -4612,15 +5380,9 @@ msgstr ""
 #~ msgid "Disabled"
 #~ msgstr "Desactivado"
 
 #~ msgid "Disabled"
 #~ msgstr "Desactivado"
 
-#~ msgid "Color"
-#~ msgstr "Color"
-
 #~ msgid "Primary Color"
 #~ msgstr "Color primario"
 
 #~ msgid "Primary Color"
 #~ msgstr "Color primario"
 
-#~ msgid "Secondary Color"
-#~ msgstr "Color secundario"
-
 #~ msgid "Wallpaper Selection"
 #~ msgstr "Selección del fondo"
 
 #~ msgid "Wallpaper Selection"
 #~ msgstr "Selección del fondo"
 
@@ -5086,9 +5848,6 @@ msgstr ""
 #~ msgid "Size of point."
 #~ msgstr "Tamaño de los puntos."
 
 #~ msgid "Size of point."
 #~ msgstr "Tamaño de los puntos."
 
-#~ msgid "Slower"
-#~ msgstr "Lento"
-
 #~ msgid "Speed of Motion."
 #~ msgstr "Velocidad de la animación."
 
 #~ 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."
 
 #~ "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."
 
 #~ 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."
 
 #~ "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."
 
 #~ 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."
 
 #~ "«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>"
 #~ 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 "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"
 
 #~ 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 "Oily"
 #~ msgstr "Aceitoso"
 
-#~ msgid "Stir"
-#~ msgstr "Revolver"
-
 #~ msgid "Stir it up."
 #~ msgstr "Revuelto."
 
 #~ 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 "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."
 
 #~ 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 "Use raw shapes "
 #~ msgstr "Utilizar formas rústicas"
 
-#~ msgid "Wide"
-#~ msgstr "Gordo "
-
 #~ msgid "Random mountain ranges"
 #~ msgstr "Rangos aleatorios de montañas"
 
 #~ msgid "Random mountain ranges"
 #~ msgstr "Rangos aleatorios de montañas"
 
@@ -6077,9 +6815,6 @@ msgstr ""
 #~ msgid "Roll"
 #~ msgstr "Rodar"
 
 #~ msgid "Roll"
 #~ msgstr "Rodar"
 
-#~ msgid "Static."
-#~ msgstr "Estática."
-
 #~ msgid "Vertical roll."
 #~ msgstr "Ruedo vertical."
 
 #~ 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 " 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 "Configure the settings of the screensaver"
 #~ msgstr "Configurar el salvapantalla"
 
-#~ msgid "Screensaver"
-#~ msgstr "Salvapantalla"
-
 #~ msgid ""
 #~ "an initialization error occurred while starting 'sound-properties-"
 #~ "capplet'."
 #~ 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 "Select a theme to install"
 #~ msgstr "Seleccione un tema a instalar"
 
-#~ msgid "Available Themes"
-#~ msgstr "Temas disponibles"
-
 #~ msgid ""
 #~ "Auto\n"
 #~ "Preview"
 #~ msgid ""
 #~ "Auto\n"
 #~ "Preview"
@@ -6263,9 +6989,6 @@ msgstr ""
 #~ msgid "Use custom font."
 #~ msgstr "Usar un tipo de letra personalizada."
 
 #~ 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"
 
 #~ msgid "Theme does not exist"
 #~ msgstr "El tema no existe"
 
@@ -6339,9 +7062,6 @@ msgstr ""
 #~ msgid "Dialog buttons"
 #~ msgstr "Botones de diálogo"
 
 #~ msgid "Dialog buttons"
 #~ msgstr "Botones de diálogo"
 
-#~ msgid "Default value"
-#~ msgstr "Valor predeterminado"
-
 #~ msgid "Spread buttons out"
 #~ msgstr "Espaciar los botones"
 
 #~ msgid "Spread buttons out"
 #~ msgstr "Espaciar los botones"
 
@@ -6547,9 +7267,6 @@ msgstr ""
 #~ msgid "Name:"
 #~ msgstr "Nombre:"
 
 #~ msgid "Name:"
 #~ msgstr "Nombre:"
 
-#~ msgid "Command:"
-#~ msgstr "Comando:"
-
 #~ msgid "Configuration Command:"
 #~ msgstr "Comando para la configuración:"
 
 #~ msgid "Configuration Command:"
 #~ msgstr "Comando para la configuración:"
 
@@ -6685,11 +7402,3 @@ msgstr ""
 
 #~ msgid "If the solver can "
 #~ msgstr "Si el resolutor puede "
 
 #~ 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[] =
 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
 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.
 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/
 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/
                 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/
                 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,
                 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        name            xscreensaver
-%define        version         4.04
+%define        version         4.05
 %define        release         1
 %define        serial          1
 %define        x11_prefix      /usr/X11R6
 %define        release         1
 %define        serial          1
 %define        x11_prefix      /usr/X11R6